lazycodex-ai 5.0.0-beta.82 → 5.0.0-beta.84

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 (110) hide show
  1. package/README.ja.md +2 -2
  2. package/README.ko.md +2 -2
  3. package/README.md +4 -4
  4. package/README.ru.md +2 -2
  5. package/README.zh-cn.md +2 -2
  6. package/dist/cli/index.js +707 -146
  7. package/dist/cli/install-native/index.d.ts +4 -0
  8. package/dist/cli/install-native/plan.d.ts +11 -0
  9. package/dist/cli/install-native/run-native-install.d.ts +23 -0
  10. package/dist/cli/install-native-dev/index.d.ts +4 -0
  11. package/dist/cli/native-dev-platform-flag.d.ts +5 -0
  12. package/dist/cli/native-edition-hint.d.ts +10 -0
  13. package/dist/cli/types.d.ts +3 -2
  14. package/dist/cli-node/index.js +707 -146
  15. package/package.json +1 -1
  16. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  17. package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +84 -11
  18. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  19. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  20. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  21. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  22. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  23. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  24. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  25. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  26. package/packages/omo-codex/plugin/components/lcx/skills/lcx-contribute-bug-fix/SKILL.md +1 -1
  27. package/packages/omo-codex/plugin/components/lcx/skills/lcx-doctor/SKILL.md +3 -3
  28. package/packages/omo-codex/plugin/components/lcx/skills/lcx-report-bug/SKILL.md +5 -5
  29. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +2 -2
  30. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  31. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  32. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  33. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  34. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  35. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  36. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  37. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  38. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  39. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  40. package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +1 -1
  41. package/packages/omo-codex/plugin/components/ulw-execute-continuation/package.json +1 -1
  42. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +24 -10
  43. package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-guard.js +8 -6
  44. package/packages/omo-codex/plugin/components/ulw-loop/dist/surface.d.ts +2 -0
  45. package/packages/omo-codex/plugin/components/ulw-loop/dist/surface.js +21 -4
  46. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +5 -5
  47. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  48. package/packages/omo-codex/plugin/components/ulw-loop/src/spawn-guard.ts +10 -5
  49. package/packages/omo-codex/plugin/components/ulw-loop/src/surface.ts +24 -6
  50. package/packages/omo-codex/plugin/components/ulw-loop/test/spawn-guard-native-reviewer.test.ts +207 -0
  51. package/packages/omo-codex/plugin/components/ulw-loop/test/spawn-guard.test.ts +6 -4
  52. package/packages/omo-codex/plugin/components/ulw-loop/test/surface.test.ts +43 -4
  53. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  54. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  55. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  56. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  57. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  58. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  59. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  60. package/packages/omo-codex/plugin/hooks/post-tool-use-recording-spawn-admission.json +1 -1
  61. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  62. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  63. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  64. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  65. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  66. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  67. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  68. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +1 -1
  69. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  70. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  71. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  72. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  73. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  74. package/packages/omo-codex/plugin/package-lock.json +12 -12
  75. package/packages/omo-codex/plugin/package.json +1 -1
  76. package/packages/omo-codex/plugin/skills/browser/ATTRIBUTION.md +25 -0
  77. package/packages/omo-codex/plugin/skills/browser/SKILL.md +89 -0
  78. package/packages/omo-codex/plugin/skills/browser/agents/openai.yaml +2 -0
  79. package/packages/omo-codex/plugin/skills/browser/references/commands.md +90 -0
  80. package/packages/omo-codex/plugin/skills/browser/references/install.md +71 -0
  81. package/packages/omo-codex/plugin/skills/browser/references/owned-engine/README.md +42 -0
  82. package/packages/omo-codex/plugin/skills/browser/references/owned-engine/frames-and-humans.md +39 -0
  83. package/packages/omo-codex/plugin/skills/browser/references/owned-engine/ladder.md +59 -0
  84. package/packages/omo-codex/plugin/skills/browser/references/owned-engine/network.md +42 -0
  85. package/packages/omo-codex/plugin/skills/browser/references/recipes/1password.md +59 -0
  86. package/packages/omo-codex/plugin/skills/browser/references/remote.md +24 -0
  87. package/packages/omo-codex/plugin/skills/browser/scripts/browser-doctor.mjs +41 -0
  88. package/packages/omo-codex/plugin/skills/browser/scripts/browser-env.mjs +41 -0
  89. package/packages/omo-codex/plugin/skills/browser/scripts/browser-install.mjs +51 -0
  90. package/packages/omo-codex/plugin/skills/lcx-contribute-bug-fix/SKILL.md +1 -1
  91. package/packages/omo-codex/plugin/skills/lcx-doctor/SKILL.md +3 -3
  92. package/packages/omo-codex/plugin/skills/lcx-report-bug/SKILL.md +5 -5
  93. package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +1 -0
  94. package/packages/omo-codex/scripts/install-dist/install-local.mjs +90 -17
  95. package/packages/shared-skills/skills/browser/ATTRIBUTION.md +25 -0
  96. package/packages/shared-skills/skills/browser/SKILL.md +89 -0
  97. package/packages/shared-skills/skills/browser/references/commands.md +90 -0
  98. package/packages/shared-skills/skills/browser/references/install.md +71 -0
  99. package/packages/shared-skills/skills/browser/references/owned-engine/README.md +42 -0
  100. package/packages/shared-skills/skills/browser/references/owned-engine/frames-and-humans.md +39 -0
  101. package/packages/shared-skills/skills/browser/references/owned-engine/ladder.md +59 -0
  102. package/packages/shared-skills/skills/browser/references/owned-engine/network.md +42 -0
  103. package/packages/shared-skills/skills/browser/references/recipes/1password.md +59 -0
  104. package/packages/shared-skills/skills/browser/references/remote.md +24 -0
  105. package/packages/shared-skills/skills/browser/scripts/browser-doctor.mjs +41 -0
  106. package/packages/shared-skills/skills/browser/scripts/browser-env.mjs +41 -0
  107. package/packages/shared-skills/skills/browser/scripts/browser-install.mjs +51 -0
  108. package/dist/cli/install-senpi/index.d.ts +0 -1
  109. package/dist/cli/senpi-edition-hint.d.ts +0 -10
  110. package/dist/cli/senpi-platform-flag.d.ts +0 -4
@@ -65,7 +65,7 @@ var package_default;
65
65
  var init_package = __esm(() => {
66
66
  package_default = {
67
67
  name: "oh-my-opencode",
68
- version: "5.0.0-beta.82",
68
+ version: "5.0.0-beta.84",
69
69
  description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
70
70
  main: "./dist/index.js",
71
71
  types: "dist/index.d.ts",
@@ -248,7 +248,7 @@ var init_package = __esm(() => {
248
248
  zod: "^4.6.5"
249
249
  },
250
250
  devDependencies: {
251
- "@code-yeongyu/senpi": "2026.9.22",
251
+ "@code-yeongyu/senpi": "2026.9.22-4",
252
252
  "@oh-my-opencode/agents-md-core": "workspace:*",
253
253
  "@oh-my-opencode/ast-grep-mcp": "workspace:*",
254
254
  "@oh-my-opencode/boulder-state": "workspace:*",
@@ -288,18 +288,18 @@ var init_package = __esm(() => {
288
288
  typescript: "^7.0.2"
289
289
  },
290
290
  optionalDependencies: {
291
- "oh-my-opencode-darwin-arm64": "5.0.0-beta.82",
292
- "oh-my-opencode-darwin-x64": "5.0.0-beta.82",
293
- "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.82",
294
- "oh-my-opencode-linux-arm64": "5.0.0-beta.82",
295
- "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.82",
296
- "oh-my-opencode-linux-x64": "5.0.0-beta.82",
297
- "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.82",
298
- "oh-my-opencode-linux-x64-musl": "5.0.0-beta.82",
299
- "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.82",
300
- "oh-my-opencode-windows-arm64": "5.0.0-beta.82",
301
- "oh-my-opencode-windows-x64": "5.0.0-beta.82",
302
- "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.82"
291
+ "oh-my-opencode-darwin-arm64": "5.0.0-beta.84",
292
+ "oh-my-opencode-darwin-x64": "5.0.0-beta.84",
293
+ "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.84",
294
+ "oh-my-opencode-linux-arm64": "5.0.0-beta.84",
295
+ "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.84",
296
+ "oh-my-opencode-linux-x64": "5.0.0-beta.84",
297
+ "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.84",
298
+ "oh-my-opencode-linux-x64-musl": "5.0.0-beta.84",
299
+ "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.84",
300
+ "oh-my-opencode-windows-arm64": "5.0.0-beta.84",
301
+ "oh-my-opencode-windows-x64": "5.0.0-beta.84",
302
+ "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.84"
303
303
  },
304
304
  overrides: {
305
305
  "@earendil-works/pi-agent-core": "0.84.2",
@@ -7181,7 +7181,7 @@ var init_agent_model_requirements = __esm(() => {
7181
7181
  fallbackChain: [
7182
7182
  {
7183
7183
  providers: ["anthropic", "github-copilot", "opencode"],
7184
- model: "claude-opus-5",
7184
+ model: "claude-opus-5-5",
7185
7185
  variant: "max"
7186
7186
  },
7187
7187
  {
@@ -7189,7 +7189,7 @@ var init_agent_model_requirements = __esm(() => {
7189
7189
  model: "kimi-k3"
7190
7190
  },
7191
7191
  {
7192
- providers: ["openai", "openai-codex", "github-copilot", "opencode"],
7192
+ providers: ["openai", "chatgpt-subscription", "github-copilot", "opencode"],
7193
7193
  model: "gpt-5.6-sol",
7194
7194
  variant: "medium"
7195
7195
  },
@@ -7201,17 +7201,17 @@ var init_agent_model_requirements = __esm(() => {
7201
7201
  hephaestus: {
7202
7202
  fallbackChain: [
7203
7203
  {
7204
- providers: ["openai", "openai-codex", "github-copilot", "opencode"],
7204
+ providers: ["openai", "chatgpt-subscription", "github-copilot", "opencode"],
7205
7205
  model: "gpt-5.6-sol",
7206
7206
  variant: "medium"
7207
7207
  }
7208
7208
  ],
7209
- requiresProvider: ["openai", "openai-codex", "github-copilot", "opencode"],
7209
+ requiresProvider: ["openai", "chatgpt-subscription", "github-copilot", "opencode"],
7210
7210
  requiresAnyModel: true
7211
7211
  },
7212
7212
  oracle: {
7213
7213
  fallbackChain: [
7214
- { providers: ["openai", "openai-codex", "opencode"], model: "gpt-5.6-sol", variant: "xhigh" },
7214
+ { providers: ["openai", "chatgpt-subscription", "opencode"], model: "gpt-5.6-sol", variant: "xhigh" },
7215
7215
  { providers: ["github-copilot"], model: "gpt-5.6-sol", variant: "high" },
7216
7216
  {
7217
7217
  providers: ["google", "github-copilot", "opencode"],
@@ -7220,7 +7220,7 @@ var init_agent_model_requirements = __esm(() => {
7220
7220
  },
7221
7221
  {
7222
7222
  providers: ["anthropic", "github-copilot", "opencode"],
7223
- model: "claude-opus-5",
7223
+ model: "claude-opus-5-5",
7224
7224
  variant: "max"
7225
7225
  },
7226
7226
  { providers: ["opencode-go"], model: "glm-5.2" }
@@ -7228,34 +7228,36 @@ var init_agent_model_requirements = __esm(() => {
7228
7228
  },
7229
7229
  librarian: {
7230
7230
  fallbackChain: [
7231
- { providers: ["openai", "openai-codex"], model: "gpt-5.6-luna-fast", variant: "low" },
7231
+ { providers: ["kimi-for-coding"], model: "kimi-for-coding-highspeed", variant: "off" },
7232
+ { providers: ["openai", "chatgpt-subscription"], model: "gpt-5.6-luna-fast", variant: "low" },
7232
7233
  { providers: ["deepseek"], model: "deepseek-v4-flash", variant: "max" },
7233
7234
  { providers: ["opencode-go", "bailian-coding-plan"], model: "qwen3.7-plus" },
7234
7235
  { providers: ["opencode-go"], model: "minimax-m3" },
7235
7236
  { providers: ["minimax-coding-plan", "minimax-cn-coding-plan"], model: "MiniMax-M3" },
7236
7237
  { providers: ["opencode-go"], model: "minimax-m2.7" },
7237
7238
  { providers: ["anthropic", "github-copilot"], model: "claude-haiku-4-5" },
7238
- { providers: ["openai", "openai-codex"], model: "gpt-5.4-nano" }
7239
+ { providers: ["openai", "chatgpt-subscription"], model: "gpt-5.4-nano" }
7239
7240
  ]
7240
7241
  },
7241
7242
  explore: {
7242
7243
  fallbackChain: [
7243
- { providers: ["openai", "openai-codex"], model: "gpt-5.6-luna-fast", variant: "low" },
7244
+ { providers: ["kimi-for-coding"], model: "kimi-for-coding-highspeed", variant: "off" },
7245
+ { providers: ["openai", "chatgpt-subscription"], model: "gpt-5.6-luna-fast", variant: "low" },
7244
7246
  { providers: ["deepseek"], model: "deepseek-v4-flash", variant: "max" },
7245
7247
  { providers: ["opencode-go", "bailian-coding-plan"], model: "qwen3.7-plus" },
7246
7248
  { providers: ["opencode-go"], model: "minimax-m3" },
7247
7249
  { providers: ["minimax-coding-plan", "minimax-cn-coding-plan"], model: "MiniMax-M3" },
7248
7250
  { providers: ["opencode-go"], model: "minimax-m2.7" },
7249
7251
  { providers: ["anthropic", "github-copilot"], model: "claude-haiku-4-5" },
7250
- { providers: ["openai", "openai-codex"], model: "gpt-5.4-nano" }
7252
+ { providers: ["openai", "chatgpt-subscription"], model: "gpt-5.4-nano" }
7251
7253
  ]
7252
7254
  },
7253
7255
  "multimodal-looker": {
7254
7256
  fallbackChain: [
7255
- { providers: ["openai", "openai-codex", "opencode"], model: "gpt-5.6-sol", variant: "low" },
7257
+ { providers: ["openai", "chatgpt-subscription", "opencode"], model: "gpt-5.6-sol", variant: "low" },
7256
7258
  { providers: ["opencode-go"], model: "kimi-k3" },
7257
7259
  { providers: ["zai-coding-plan"], model: "glm-4.6v" },
7258
- { providers: ["openai", "openai-codex", "github-copilot", "opencode"], model: "gpt-5-nano" }
7260
+ { providers: ["openai", "chatgpt-subscription", "github-copilot", "opencode"], model: "gpt-5-nano" }
7259
7261
  ]
7260
7262
  },
7261
7263
  prometheus: {
@@ -7281,7 +7283,7 @@ var init_agent_model_requirements = __esm(() => {
7281
7283
  },
7282
7284
  {
7283
7285
  providers: ["anthropic", "github-copilot", "opencode"],
7284
- model: "claude-opus-5",
7286
+ model: "claude-opus-5-5",
7285
7287
  variant: "max"
7286
7288
  },
7287
7289
  {
@@ -7293,12 +7295,12 @@ var init_agent_model_requirements = __esm(() => {
7293
7295
  },
7294
7296
  momus: {
7295
7297
  fallbackChain: [
7296
- { providers: ["openai", "openai-codex"], model: "gpt-6-astra", variant: "xhigh" },
7298
+ { providers: ["openai", "chatgpt-subscription"], model: "gpt-6-astra", variant: "xhigh" },
7297
7299
  { providers: ["github-copilot"], model: "gpt-6-astra", variant: "high" },
7298
- { providers: ["openai", "openai-codex", "opencode"], model: "gpt-6-astra", variant: "high" },
7300
+ { providers: ["openai", "chatgpt-subscription", "opencode"], model: "gpt-6-astra", variant: "high" },
7299
7301
  {
7300
7302
  providers: ["anthropic", "github-copilot", "opencode"],
7301
- model: "claude-opus-5",
7303
+ model: "claude-opus-5-5",
7302
7304
  variant: "max"
7303
7305
  },
7304
7306
  {
@@ -7314,7 +7316,7 @@ var init_agent_model_requirements = __esm(() => {
7314
7316
  { providers: ["anthropic", "github-copilot", "opencode"], model: "claude-sonnet-5" },
7315
7317
  { providers: ["opencode-go"], model: "kimi-k3" },
7316
7318
  {
7317
- providers: ["openai", "openai-codex", "github-copilot", "opencode"],
7319
+ providers: ["openai", "chatgpt-subscription", "github-copilot", "opencode"],
7318
7320
  model: "gpt-5.6-sol",
7319
7321
  variant: "medium"
7320
7322
  },
@@ -7328,7 +7330,7 @@ var init_agent_model_requirements = __esm(() => {
7328
7330
  { providers: ["anthropic", "github-copilot", "opencode"], model: "claude-sonnet-5" },
7329
7331
  { providers: ["opencode-go"], model: "kimi-k3" },
7330
7332
  {
7331
- providers: ["openai", "openai-codex", "github-copilot", "opencode"],
7333
+ providers: ["openai", "chatgpt-subscription", "github-copilot", "opencode"],
7332
7334
  model: "gpt-5.6-sol",
7333
7335
  variant: "medium"
7334
7336
  },
@@ -7354,7 +7356,7 @@ var init_category_model_requirements = __esm(() => {
7354
7356
  },
7355
7357
  {
7356
7358
  providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
7357
- model: "claude-opus-5",
7359
+ model: "claude-opus-5-5",
7358
7360
  variant: "max"
7359
7361
  },
7360
7362
  {
@@ -7366,18 +7368,18 @@ var init_category_model_requirements = __esm(() => {
7366
7368
  },
7367
7369
  ultrabrain: {
7368
7370
  fallbackChain: [
7369
- { providers: ["openai", "openai-codex"], model: "gpt-6-astra", variant: "max" },
7371
+ { providers: ["openai", "chatgpt-subscription"], model: "gpt-6-astra", variant: "max" },
7370
7372
  { providers: ["github-copilot"], model: "gpt-6-astra", variant: "max" },
7371
- { providers: ["openai", "openai-codex", "opencode"], model: "gpt-6-astra", variant: "max" },
7372
- { providers: ["openai", "openai-codex"], model: "gpt-5.6-sol", variant: "max" },
7373
+ { providers: ["openai", "chatgpt-subscription", "opencode"], model: "gpt-6-astra", variant: "max" },
7374
+ { providers: ["openai", "chatgpt-subscription"], model: "gpt-5.6-sol", variant: "max" },
7373
7375
  { providers: ["github-copilot"], model: "gpt-5.6-sol", variant: "max" },
7374
- { providers: ["openai", "openai-codex", "opencode"], model: "gpt-5.6-sol", variant: "max" }
7376
+ { providers: ["openai", "chatgpt-subscription", "opencode"], model: "gpt-5.6-sol", variant: "max" }
7375
7377
  ]
7376
7378
  },
7377
7379
  "deep-low": {
7378
7380
  fallbackChain: [
7379
7381
  {
7380
- providers: ["openai", "openai-codex", "github-copilot", "opencode"],
7382
+ providers: ["openai", "chatgpt-subscription", "github-copilot", "opencode"],
7381
7383
  model: "gpt-5.6-sol",
7382
7384
  variant: "medium"
7383
7385
  }
@@ -7386,7 +7388,7 @@ var init_category_model_requirements = __esm(() => {
7386
7388
  "deep-high": {
7387
7389
  fallbackChain: [
7388
7390
  {
7389
- providers: ["openai", "openai-codex", "github-copilot", "opencode"],
7391
+ providers: ["openai", "chatgpt-subscription", "github-copilot", "opencode"],
7390
7392
  model: "gpt-6-astra",
7391
7393
  variant: "high"
7392
7394
  }
@@ -7406,15 +7408,14 @@ var init_category_model_requirements = __esm(() => {
7406
7408
  },
7407
7409
  {
7408
7410
  providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
7409
- model: "claude-opus-5",
7410
- variant: "xhigh"
7411
+ model: "claude-opus-5-5",
7412
+ variant: "max"
7411
7413
  }
7412
7414
  ]
7413
7415
  },
7414
7416
  quick: {
7415
7417
  fallbackChain: [
7416
- { providers: ["kimi-for-coding"], model: "kimi-for-coding-highspeed" },
7417
- { providers: ["openai-codex"], model: "gpt-5.6-luna-fast", variant: "low" },
7418
+ { providers: ["chatgpt-subscription"], model: "gpt-5.6-luna-fast", variant: "low" },
7418
7419
  { providers: ["deepseek"], model: "deepseek-v4-flash", variant: "off" },
7419
7420
  {
7420
7421
  providers: ["qwen-token-plan", "alibaba-token-plan", "bailian-coding-plan"],
@@ -7433,9 +7434,10 @@ var init_category_model_requirements = __esm(() => {
7433
7434
  },
7434
7435
  "unspecified-low": {
7435
7436
  fallbackChain: [
7436
- { providers: ["xai", "github-copilot", "opencode"], model: "grok-4.6", variant: "xhigh" },
7437
+ { providers: ["xiaomi", "opencode-go"], model: "mimo-v2.6-pro", variant: "max" },
7438
+ { providers: ["xai", "github-copilot", "opencode-go"], model: "grok-4.7", variant: "xhigh" },
7437
7439
  {
7438
- providers: ["openai", "openai-codex", "github-copilot", "opencode"],
7440
+ providers: ["openai", "chatgpt-subscription", "github-copilot", "opencode"],
7439
7441
  model: "gpt-5.6-terra",
7440
7442
  variant: "high"
7441
7443
  },
@@ -7455,15 +7457,10 @@ var init_category_model_requirements = __esm(() => {
7455
7457
  },
7456
7458
  "unspecified-high": {
7457
7459
  fallbackChain: [
7458
- {
7459
- providers: ["openai", "openai-codex", "github-copilot", "opencode"],
7460
- model: "gpt-6-astra",
7461
- variant: "high"
7462
- },
7463
7460
  {
7464
7461
  providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
7465
- model: "claude-opus-5",
7466
- variant: "xhigh"
7462
+ model: "claude-opus-5-5",
7463
+ variant: "max"
7467
7464
  },
7468
7465
  { providers: ["zai-coding-plan", "opencode-go"], model: "glm-5.3", variant: "max" },
7469
7466
  {
@@ -7481,14 +7478,14 @@ var init_category_model_requirements = __esm(() => {
7481
7478
  variant: "low"
7482
7479
  },
7483
7480
  {
7484
- providers: ["kimi-for-coding", "moonshotai", "opencode-go", "opencode"],
7485
- model: "kimi-k3",
7481
+ providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
7482
+ model: "claude-opus-5-5",
7486
7483
  variant: "low"
7487
7484
  },
7488
7485
  {
7489
7486
  providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
7490
7487
  model: "claude-opus-4-6",
7491
- variant: "low"
7488
+ variant: "max"
7492
7489
  }
7493
7490
  ]
7494
7491
  }
@@ -8295,6 +8292,36 @@ var init_supplemental_entries = __esm(() => {
8295
8292
  output: 32768
8296
8293
  }
8297
8294
  },
8295
+ "grok-4.7": {
8296
+ id: "grok-4.7",
8297
+ family: "grok",
8298
+ reasoning: false,
8299
+ temperature: true,
8300
+ toolCall: true,
8301
+ modalities: {
8302
+ input: ["text", "image"],
8303
+ output: ["text"]
8304
+ },
8305
+ limit: {
8306
+ context: 500000,
8307
+ output: 32768
8308
+ }
8309
+ },
8310
+ "xai/grok-4.7": {
8311
+ id: "xai/grok-4.7",
8312
+ family: "grok",
8313
+ reasoning: false,
8314
+ temperature: true,
8315
+ toolCall: true,
8316
+ modalities: {
8317
+ input: ["text", "image"],
8318
+ output: ["text"]
8319
+ },
8320
+ limit: {
8321
+ context: 500000,
8322
+ output: 32768
8323
+ }
8324
+ },
8298
8325
  "xai/grok-build-0.1": {
8299
8326
  id: "xai/grok-build-0.1",
8300
8327
  family: "grok",
@@ -8324,6 +8351,36 @@ var init_supplemental_entries = __esm(() => {
8324
8351
  context: 256000,
8325
8352
  output: 32768
8326
8353
  }
8354
+ },
8355
+ "mimo-v2.6-pro": {
8356
+ id: "mimo-v2.6-pro",
8357
+ family: "mimo",
8358
+ reasoning: true,
8359
+ temperature: true,
8360
+ toolCall: true,
8361
+ modalities: {
8362
+ input: ["text", "image"],
8363
+ output: ["text"]
8364
+ },
8365
+ limit: {
8366
+ context: 1048576,
8367
+ output: 131072
8368
+ }
8369
+ },
8370
+ "xiaomi/mimo-v2.6-pro": {
8371
+ id: "xiaomi/mimo-v2.6-pro",
8372
+ family: "mimo",
8373
+ reasoning: true,
8374
+ temperature: true,
8375
+ toolCall: true,
8376
+ modalities: {
8377
+ input: ["text", "image"],
8378
+ output: ["text"]
8379
+ },
8380
+ limit: {
8381
+ context: 1048576,
8382
+ output: 131072
8383
+ }
8327
8384
  }
8328
8385
  };
8329
8386
  });
@@ -9297,21 +9354,21 @@ var init_openai_categories = __esm(() => {
9297
9354
  },
9298
9355
  {
9299
9356
  name: "quick",
9300
- config: { model: "kimi-for-coding/kimi-for-coding-highspeed" },
9357
+ config: { model: "openai/gpt-5.6-luna-fast", variant: "low" },
9301
9358
  description: "Trivial tasks - single file changes, typo fixes, simple modifications",
9302
9359
  callerGuidance: QUICK_CATEGORY_CALLER_GUIDANCE,
9303
9360
  promptAppend: QUICK_CATEGORY_PROMPT_APPEND
9304
9361
  },
9305
9362
  {
9306
9363
  name: "unspecified-low",
9307
- config: { model: "xai/grok-4.6", variant: "xhigh" },
9364
+ config: { model: "xiaomi/mimo-v2.6-pro", variant: "max" },
9308
9365
  description: "Tasks that don't fit other categories, low effort required",
9309
9366
  callerGuidance: UNSPECIFIED_LOW_CATEGORY_CALLER_GUIDANCE,
9310
9367
  promptAppend: UNSPECIFIED_LOW_CATEGORY_PROMPT_APPEND
9311
9368
  },
9312
9369
  {
9313
9370
  name: "unspecified-high",
9314
- config: { model: "openai/gpt-6-astra", variant: "high" },
9371
+ config: { model: "anthropic/claude-opus-5-5", variant: "max" },
9315
9372
  description: "Tasks that don't fit other categories, high effort required",
9316
9373
  callerGuidance: UNSPECIFIED_HIGH_CATEGORY_CALLER_GUIDANCE,
9317
9374
  promptAppend: UNSPECIFIED_HIGH_CATEGORY_PROMPT_APPEND,
@@ -64272,6 +64329,216 @@ var init_model_capabilities_generated = __esm(() => {
64272
64329
  context: 500000,
64273
64330
  output: 500000
64274
64331
  }
64332
+ },
64333
+ "claude-opus-5-5": {
64334
+ id: "claude-opus-5-5",
64335
+ family: "claude-opus",
64336
+ reasoning: true,
64337
+ temperature: false,
64338
+ toolCall: true,
64339
+ modalities: {
64340
+ input: [
64341
+ "text",
64342
+ "image",
64343
+ "pdf"
64344
+ ],
64345
+ output: [
64346
+ "text"
64347
+ ]
64348
+ },
64349
+ limit: {
64350
+ context: 1e6,
64351
+ output: 128000
64352
+ }
64353
+ },
64354
+ "claude-opus-5-5@default": {
64355
+ id: "claude-opus-5-5@default",
64356
+ family: "claude-opus",
64357
+ reasoning: true,
64358
+ temperature: false,
64359
+ toolCall: true,
64360
+ modalities: {
64361
+ input: [
64362
+ "text",
64363
+ "image",
64364
+ "pdf"
64365
+ ],
64366
+ output: [
64367
+ "text"
64368
+ ]
64369
+ },
64370
+ limit: {
64371
+ context: 1e6,
64372
+ output: 128000
64373
+ }
64374
+ },
64375
+ "anthropic/claude-opus-5.5": {
64376
+ id: "anthropic/claude-opus-5.5",
64377
+ family: "claude-opus",
64378
+ reasoning: true,
64379
+ temperature: true,
64380
+ toolCall: true,
64381
+ modalities: {
64382
+ input: [
64383
+ "text",
64384
+ "image",
64385
+ "pdf"
64386
+ ],
64387
+ output: [
64388
+ "text"
64389
+ ]
64390
+ },
64391
+ limit: {
64392
+ context: 1e6,
64393
+ output: 128000
64394
+ }
64395
+ },
64396
+ "au.anthropic.claude-opus-5-5": {
64397
+ id: "au.anthropic.claude-opus-5-5",
64398
+ family: "claude-opus",
64399
+ reasoning: true,
64400
+ temperature: false,
64401
+ toolCall: true,
64402
+ modalities: {
64403
+ input: [
64404
+ "text",
64405
+ "image",
64406
+ "pdf"
64407
+ ],
64408
+ output: [
64409
+ "text"
64410
+ ]
64411
+ },
64412
+ limit: {
64413
+ context: 1e6,
64414
+ output: 128000
64415
+ }
64416
+ },
64417
+ "anthropic.claude-opus-5-5": {
64418
+ id: "anthropic.claude-opus-5-5",
64419
+ family: "claude-opus",
64420
+ reasoning: true,
64421
+ temperature: false,
64422
+ toolCall: true,
64423
+ modalities: {
64424
+ input: [
64425
+ "text",
64426
+ "image",
64427
+ "pdf"
64428
+ ],
64429
+ output: [
64430
+ "text"
64431
+ ]
64432
+ },
64433
+ limit: {
64434
+ context: 1e6,
64435
+ output: 128000
64436
+ }
64437
+ },
64438
+ "eu.anthropic.claude-opus-5-5": {
64439
+ id: "eu.anthropic.claude-opus-5-5",
64440
+ family: "claude-opus",
64441
+ reasoning: true,
64442
+ temperature: false,
64443
+ toolCall: true,
64444
+ modalities: {
64445
+ input: [
64446
+ "text",
64447
+ "image",
64448
+ "pdf"
64449
+ ],
64450
+ output: [
64451
+ "text"
64452
+ ]
64453
+ },
64454
+ limit: {
64455
+ context: 1e6,
64456
+ output: 128000
64457
+ }
64458
+ },
64459
+ "global.anthropic.claude-opus-5-5": {
64460
+ id: "global.anthropic.claude-opus-5-5",
64461
+ family: "claude-opus",
64462
+ reasoning: true,
64463
+ temperature: false,
64464
+ toolCall: true,
64465
+ modalities: {
64466
+ input: [
64467
+ "text",
64468
+ "image",
64469
+ "pdf"
64470
+ ],
64471
+ output: [
64472
+ "text"
64473
+ ]
64474
+ },
64475
+ limit: {
64476
+ context: 1e6,
64477
+ output: 128000
64478
+ }
64479
+ },
64480
+ "jp.anthropic.claude-opus-5-5": {
64481
+ id: "jp.anthropic.claude-opus-5-5",
64482
+ family: "claude-opus",
64483
+ reasoning: true,
64484
+ temperature: false,
64485
+ toolCall: true,
64486
+ modalities: {
64487
+ input: [
64488
+ "text",
64489
+ "image",
64490
+ "pdf"
64491
+ ],
64492
+ output: [
64493
+ "text"
64494
+ ]
64495
+ },
64496
+ limit: {
64497
+ context: 1e6,
64498
+ output: 128000
64499
+ }
64500
+ },
64501
+ "us.anthropic.claude-opus-5-5": {
64502
+ id: "us.anthropic.claude-opus-5-5",
64503
+ family: "claude-opus",
64504
+ reasoning: true,
64505
+ temperature: false,
64506
+ toolCall: true,
64507
+ modalities: {
64508
+ input: [
64509
+ "text",
64510
+ "image",
64511
+ "pdf"
64512
+ ],
64513
+ output: [
64514
+ "text"
64515
+ ]
64516
+ },
64517
+ limit: {
64518
+ context: 1e6,
64519
+ output: 128000
64520
+ }
64521
+ },
64522
+ "anthropic/claude-opus-5-5": {
64523
+ id: "anthropic/claude-opus-5-5",
64524
+ family: "claude-opus",
64525
+ reasoning: true,
64526
+ temperature: false,
64527
+ toolCall: true,
64528
+ modalities: {
64529
+ input: [
64530
+ "text",
64531
+ "image",
64532
+ "pdf"
64533
+ ],
64534
+ output: [
64535
+ "text"
64536
+ ]
64537
+ },
64538
+ limit: {
64539
+ context: 1e6,
64540
+ output: 128000
64541
+ }
64275
64542
  }
64276
64543
  }
64277
64544
  };
@@ -73962,12 +74229,14 @@ var init_git_master = __esm(() => {
73962
74229
  });
73963
74230
 
73964
74231
  // packages/omo-config-core/src/schema/harness.ts
73965
- var HARNESS_IDS, OMO_CONFIG_HARNESS_IDS, OmoHarnessIdSchema;
74232
+ var HARNESS_IDS, OMO_CONFIG_HARNESS_IDS, OmoHarnessIdSchema, OMO_CONFIG_LEGACY_HARNESS_ALIASES, OMO_CONFIG_LEGACY_HARNESS_IDS;
73966
74233
  var init_harness = __esm(() => {
73967
74234
  init_zod();
73968
74235
  HARNESS_IDS = ["codex", "opencode", "omo"];
73969
- OMO_CONFIG_HARNESS_IDS = ["opencode", "senpi", "codex"];
74236
+ OMO_CONFIG_HARNESS_IDS = ["opencode", "native", "codex"];
73970
74237
  OmoHarnessIdSchema = _enum(OMO_CONFIG_HARNESS_IDS);
74238
+ OMO_CONFIG_LEGACY_HARNESS_ALIASES = { senpi: "native" };
74239
+ OMO_CONFIG_LEGACY_HARNESS_IDS = Object.keys(OMO_CONFIG_LEGACY_HARNESS_ALIASES);
73971
74240
  });
73972
74241
 
73973
74242
  // packages/omo-config-core/src/schema/memory.ts
@@ -74470,6 +74739,7 @@ var init_config = __esm(() => {
74470
74739
  telemetry: OmoTelemetrySettingsLayerSchema.optional(),
74471
74740
  disabled_skills: OmoDisabledSkillsSchema.optional(),
74472
74741
  "[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
74742
+ "[native]": OmoTypedHarnessConfigSchema.optional(),
74473
74743
  "[senpi]": OmoTypedHarnessConfigSchema.optional(),
74474
74744
  "[codex]": OmoTypedHarnessConfigSchema.optional()
74475
74745
  }).strict();
@@ -74488,6 +74758,7 @@ var init_config = __esm(() => {
74488
74758
  telemetry: OmoTelemetrySettingsSchema.optional(),
74489
74759
  disabled_skills: OmoDisabledSkillsSchema.optional(),
74490
74760
  "[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
74761
+ "[native]": OmoTypedHarnessConfigSchema.optional(),
74491
74762
  "[senpi]": OmoTypedHarnessConfigSchema.optional(),
74492
74763
  "[codex]": OmoTypedHarnessConfigSchema.optional(),
74493
74764
  profiles: record(string2(), OmoConfigProfileSchema).default({}),
@@ -74509,6 +74780,7 @@ var init_config = __esm(() => {
74509
74780
  telemetry: OmoTelemetrySettingsLayerSchema.optional(),
74510
74781
  disabled_skills: OmoDisabledSkillsSchema.optional(),
74511
74782
  "[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
74783
+ "[native]": OmoTypedHarnessConfigSchema.optional(),
74512
74784
  "[senpi]": OmoTypedHarnessConfigSchema.optional(),
74513
74785
  "[codex]": OmoTypedHarnessConfigSchema.optional(),
74514
74786
  profiles: record(string2(), OmoConfigProfileSchema).optional(),
@@ -74579,6 +74851,60 @@ var init_legacy_category_names = __esm(() => {
74579
74851
  LEGACY_CATEGORY_NAME_ALIASES = { deep: "deep-low" };
74580
74852
  });
74581
74853
 
74854
+ // packages/omo-config-core/src/schema/legacy-harness-names.ts
74855
+ function canonicalHarnessName(name) {
74856
+ return Object.hasOwn(OMO_CONFIG_LEGACY_HARNESS_ALIASES, name) ? OMO_CONFIG_LEGACY_HARNESS_ALIASES[name] : name;
74857
+ }
74858
+ function harnessBlockKey(harness) {
74859
+ return `[${harness}]`;
74860
+ }
74861
+ function legacyHarnessOfBlockKey(key) {
74862
+ if (!key.startsWith("[") || !key.endsWith("]"))
74863
+ return;
74864
+ const harness = key.slice(1, -1);
74865
+ return Object.hasOwn(OMO_CONFIG_LEGACY_HARNESS_ALIASES, harness) ? harness : undefined;
74866
+ }
74867
+ function isRecord10(value) {
74868
+ return typeof value === "object" && value !== null && !Array.isArray(value);
74869
+ }
74870
+ function canonicalizeBlocksIn(container, path, renames) {
74871
+ const result = {};
74872
+ for (const [key, value] of Object.entries(container)) {
74873
+ const legacyHarness = legacyHarnessOfBlockKey(key);
74874
+ if (legacyHarness === undefined) {
74875
+ result[key] = value;
74876
+ continue;
74877
+ }
74878
+ const canonical = harnessBlockKey(canonicalHarnessName(legacyHarness));
74879
+ const dropped = Object.hasOwn(container, canonical);
74880
+ renames.push({ canonical, dropped, legacy: key, path: [...path, key].join(".") });
74881
+ if (!dropped)
74882
+ result[canonical] = value;
74883
+ }
74884
+ return result;
74885
+ }
74886
+ function canonicalizeLegacyHarnessBlocks(document) {
74887
+ if (!isRecord10(document))
74888
+ return { document: {}, renames: [] };
74889
+ const renames = [];
74890
+ const canonicalized = canonicalizeBlocksIn(document, [], renames);
74891
+ const profiles = canonicalized["profiles"];
74892
+ if (isRecord10(profiles)) {
74893
+ const canonicalProfiles = {};
74894
+ for (const [name, profile] of Object.entries(profiles)) {
74895
+ canonicalProfiles[name] = isRecord10(profile) ? canonicalizeBlocksIn(profile, ["profiles", name], renames) : profile;
74896
+ }
74897
+ canonicalized["profiles"] = canonicalProfiles;
74898
+ }
74899
+ return { document: canonicalized, renames };
74900
+ }
74901
+ function hasLegacyHarnessBlocks(document) {
74902
+ return canonicalizeLegacyHarnessBlocks(document).renames.length > 0;
74903
+ }
74904
+ var init_legacy_harness_names = __esm(() => {
74905
+ init_harness();
74906
+ });
74907
+
74582
74908
  // packages/omo-config-core/src/schema/index.ts
74583
74909
  var init_schema = __esm(() => {
74584
74910
  init_agent();
@@ -74589,6 +74915,7 @@ var init_schema = __esm(() => {
74589
74915
  init_git_master();
74590
74916
  init_harness();
74591
74917
  init_legacy_category_names();
74918
+ init_legacy_harness_names();
74592
74919
  init_memory();
74593
74920
  init_model_catalog();
74594
74921
  init_model_profile();
@@ -74598,6 +74925,9 @@ var init_schema = __esm(() => {
74598
74925
  init_telemetry();
74599
74926
  });
74600
74927
 
74928
+ // packages/omo-config-core/src/loader/disabled-skills.ts
74929
+ var init_disabled_skills = () => {};
74930
+
74601
74931
  // packages/omo-config-core/src/loader/merge.ts
74602
74932
  function isUnsafeObjectKey2(key) {
74603
74933
  return DANGEROUS_KEYS2.has(key);
@@ -74772,7 +75102,13 @@ function withoutControlKeys(config) {
74772
75102
  function harnessLayer(config, harness) {
74773
75103
  if (harness === undefined)
74774
75104
  return {};
74775
- return toRecord(config[`[${harness}]`]) ?? {};
75105
+ const canonical = canonicalHarnessName(harness);
75106
+ const legacyKeys = Object.entries(OMO_CONFIG_LEGACY_HARNESS_ALIASES).filter(([, target]) => target === canonical).map(([legacy]) => harnessBlockKey(legacy));
75107
+ let layer = {};
75108
+ for (const key of [...legacyKeys, harnessBlockKey(canonical)]) {
75109
+ layer = mergeOmoConfigRecords(layer, toRecord(config[key]) ?? {});
75110
+ }
75111
+ return layer;
74776
75112
  }
74777
75113
  function resolveOmoConfigView(options) {
74778
75114
  const profiles = toRecord(options.config["profiles"]);
@@ -74802,7 +75138,7 @@ var HARNESS_KEYS;
74802
75138
  var init_resolution = __esm(() => {
74803
75139
  init_schema();
74804
75140
  init_merge();
74805
- HARNESS_KEYS = [...new Set([...HARNESS_IDS, ...OMO_CONFIG_HARNESS_IDS])].map((harness) => `[${harness}]`);
75141
+ HARNESS_KEYS = [...new Set([...HARNESS_IDS, ...OMO_CONFIG_HARNESS_IDS, ...OMO_CONFIG_LEGACY_HARNESS_IDS])].map((harness) => harnessBlockKey(harness));
74806
75142
  });
74807
75143
 
74808
75144
  // packages/omo-config-core/src/loader/loader.ts
@@ -74823,6 +75159,7 @@ function parseJsoncSafe2(content) {
74823
75159
  function stripResolutionControlKeys(config) {
74824
75160
  const {
74825
75161
  "[codex]": _codex,
75162
+ "[native]": _native,
74826
75163
  "[opencode]": _opencode,
74827
75164
  "[senpi]": _senpi,
74828
75165
  profiles: _profiles,
@@ -74848,21 +75185,21 @@ function hasUnsafeUnrecognizedKey(issues) {
74848
75185
  function hasTamperedPrototype(value) {
74849
75186
  if (Array.isArray(value))
74850
75187
  return value.some((entry) => hasTamperedPrototype(entry));
74851
- if (!isRecord10(value))
75188
+ if (!isRecord11(value))
74852
75189
  return false;
74853
75190
  const prototype = Object.getPrototypeOf(value);
74854
75191
  if (prototype !== Object.prototype && prototype !== null)
74855
75192
  return true;
74856
75193
  return Object.values(value).some((entry) => hasTamperedPrototype(entry));
74857
75194
  }
74858
- function isRecord10(value) {
75195
+ function isRecord11(value) {
74859
75196
  return typeof value === "object" && value !== null && !Array.isArray(value);
74860
75197
  }
74861
75198
  function containerAt(record, path) {
74862
75199
  let container = record;
74863
75200
  for (const segment of path) {
74864
75201
  const next = container[segment];
74865
- if (!isRecord10(next))
75202
+ if (!isRecord11(next))
74866
75203
  return null;
74867
75204
  container = next;
74868
75205
  }
@@ -74973,6 +75310,15 @@ function legacyCategoryDiagnostic(path, renames) {
74973
75310
  issuePaths: renames.map((rename) => rename.path)
74974
75311
  };
74975
75312
  }
75313
+ function legacyHarnessDiagnostic(path, renames) {
75314
+ const detail = renames.map((rename) => rename.dropped ? `${rename.path} ignored because ${rename.canonical} is also configured` : `${rename.path} renamed to ${rename.canonical}`).join(", ");
75315
+ return {
75316
+ kind: "deprecated-keys",
75317
+ message: `Deprecated harness block in ${path}: ${detail}. Rename it; the alias is removed in a future release.`,
75318
+ path,
75319
+ issuePaths: renames.map((rename) => rename.path)
75320
+ };
75321
+ }
74976
75322
  function loadOmoConfig(options = {}) {
74977
75323
  const fileSystem = options.fileSystem ?? DEFAULT_READ_FILE_SYSTEM;
74978
75324
  const cwd = options.cwd ?? process.cwd();
@@ -74995,8 +75341,12 @@ function loadOmoConfig(options = {}) {
74995
75341
  if (canonicalized.renames.length > 0) {
74996
75342
  diagnostics.push(legacyCategoryDiagnostic(candidate.path, canonicalized.renames));
74997
75343
  }
74998
- layers.push({ config: canonicalized.document, source: loaded.source });
74999
- merged = mergeOmoConfigRecords(merged, canonicalized.document);
75344
+ const harnessCanonicalized = canonicalizeLegacyHarnessBlocks(canonicalized.document);
75345
+ if (harnessCanonicalized.renames.length > 0) {
75346
+ diagnostics.push(legacyHarnessDiagnostic(candidate.path, harnessCanonicalized.renames));
75347
+ }
75348
+ layers.push({ config: harnessCanonicalized.document, source: loaded.source });
75349
+ merged = mergeOmoConfigRecords(merged, harnessCanonicalized.document);
75000
75350
  }
75001
75351
  }
75002
75352
  const requestedProfile = resolveOmoProfileName({
@@ -75044,6 +75394,7 @@ var init_loader2 = __esm(() => {
75044
75394
 
75045
75395
  // packages/omo-config-core/src/loader/index.ts
75046
75396
  var init_loader3 = __esm(() => {
75397
+ init_disabled_skills();
75047
75398
  init_loader2();
75048
75399
  init_merge();
75049
75400
  init_paths();
@@ -77361,14 +77712,14 @@ function transformConfigJsoncSources(input) {
77361
77712
  const omo = recordAt(legacy, "[omo]");
77362
77713
  const senpi = recordAt(legacy, "[senpi]");
77363
77714
  const history = legacyMigrationHistory(input.discovered, input.sources);
77364
- const diagnostics = omo !== undefined && senpi !== undefined ? ["conflict: [senpi] legacy [omo] kept [senpi]"] : [];
77715
+ const diagnostics = omo !== undefined && senpi !== undefined ? ["conflict: [native] legacy [omo] kept [native]"] : [];
77365
77716
  return {
77366
77717
  diagnostics,
77367
77718
  document: {
77368
77719
  $schema: OMO_SCHEMA_URL,
77369
77720
  ...recordAt(legacy, "[opencode]") === undefined ? {} : { "[opencode]": recordAt(legacy, "[opencode]") },
77370
77721
  ...recordAt(legacy, "[codex]") === undefined ? {} : { "[codex]": recordAt(legacy, "[codex]") },
77371
- ...senpi === undefined && omo === undefined ? {} : { "[senpi]": senpi ?? omo },
77722
+ ...senpi === undefined && omo === undefined ? {} : { "[native]": senpi ?? omo },
77372
77723
  ...Object.keys(history).length === 0 ? {} : { legacy_migrations: history }
77373
77724
  }
77374
77725
  };
@@ -77632,7 +77983,7 @@ function normalizeTypedBlock(value, path, diagnostics, recurseProfiles) {
77632
77983
  }
77633
77984
  if (result["models"] !== undefined)
77634
77985
  result["models"] = normalizeCatalog(result["models"]);
77635
- for (const harness of ["[senpi]", "[codex]"]) {
77986
+ for (const harness of ["[senpi]", "[native]", "[codex]"]) {
77636
77987
  if (result[harness] !== undefined)
77637
77988
  result[harness] = normalizeTypedBlock(result[harness], [...path, harness], diagnostics, false);
77638
77989
  }
@@ -77686,6 +78037,76 @@ var init_category_deep_split = __esm(() => {
77686
78037
  init_src4();
77687
78038
  });
77688
78039
 
78040
+ // packages/omo-opencode/src/config-migration/harness-native-rename.ts
78041
+ function transformHarnessNativeRename(document) {
78042
+ const { document: canonicalized, renames } = canonicalizeLegacyHarnessBlocks(document);
78043
+ return {
78044
+ diagnostics: renames.map((rename) => rename.dropped ? `${rename.path} removed: ${rename.canonical} is already configured` : `${rename.path} renamed to ${rename.canonical}`),
78045
+ document: canonicalized
78046
+ };
78047
+ }
78048
+ var HARNESS_NATIVE_RENAME_MIGRATION_ID = "2026-09-harness-native-rename";
78049
+ var init_harness_native_rename = __esm(() => {
78050
+ init_src4();
78051
+ });
78052
+
78053
+ // packages/omo-opencode/src/config-migration/subscription-provider-rename.ts
78054
+ function renameProviderId(providerId) {
78055
+ return LEGACY_PROVIDER_IDS[providerId];
78056
+ }
78057
+ function renameModelReference(modelReference) {
78058
+ const providerSeparator = modelReference.indexOf("/");
78059
+ if (providerSeparator <= 0)
78060
+ return;
78061
+ const canonicalProvider = renameProviderId(modelReference.slice(0, providerSeparator));
78062
+ if (canonicalProvider === undefined)
78063
+ return;
78064
+ const modelPartVerbatim = modelReference.slice(providerSeparator);
78065
+ return `${canonicalProvider}${modelPartVerbatim}`;
78066
+ }
78067
+ function rewriteValue(value, path, rewrites) {
78068
+ if (typeof value === "string") {
78069
+ const renamed = renameModelReference(value) ?? renameProviderId(value);
78070
+ if (renamed === undefined)
78071
+ return value;
78072
+ rewrites.push({ from: value, path, to: renamed });
78073
+ return renamed;
78074
+ }
78075
+ if (Array.isArray(value))
78076
+ return value.map((entry, index) => rewriteValue(entry, `${path}[${index}]`, rewrites));
78077
+ if (value !== null && typeof value === "object") {
78078
+ return Object.fromEntries(Object.entries(value).map(([key, entry]) => {
78079
+ const canonicalKey = renameModelReference(key) ?? renameProviderId(key);
78080
+ const nextKey = canonicalKey ?? key;
78081
+ if (canonicalKey !== undefined)
78082
+ rewrites.push({ from: key, path: `${path}.${key}`, to: canonicalKey });
78083
+ return [nextKey, rewriteValue(entry, `${path}.${nextKey}`, rewrites)];
78084
+ }));
78085
+ }
78086
+ return value;
78087
+ }
78088
+ function hasLegacySubscriptionProviderIds(document) {
78089
+ const rewrites = [];
78090
+ rewriteValue(document, "$", rewrites);
78091
+ return rewrites.length > 0;
78092
+ }
78093
+ function transformSubscriptionProviderRename(document) {
78094
+ const rewrites = [];
78095
+ const rewritten = rewriteValue(document, "$", rewrites);
78096
+ const next = rewritten !== null && typeof rewritten === "object" && !Array.isArray(rewritten) ? rewritten : {};
78097
+ return {
78098
+ diagnostics: rewrites.map((rewrite) => `${rewrite.path}: ${rewrite.from} renamed to ${rewrite.to}`),
78099
+ document: next
78100
+ };
78101
+ }
78102
+ var SUBSCRIPTION_PROVIDER_RENAME_MIGRATION_ID = "2026-09-subscription-provider-rename", LEGACY_PROVIDER_IDS;
78103
+ var init_subscription_provider_rename = __esm(() => {
78104
+ LEGACY_PROVIDER_IDS = Object.freeze({
78105
+ "claude-sdk-oauth": "anthropic-subscription",
78106
+ "openai-codex": "chatgpt-subscription"
78107
+ });
78108
+ });
78109
+
77689
78110
  // packages/omo-opencode/src/config-migration/migration-plans.ts
77690
78111
  function backupTimestamp(value) {
77691
78112
  return value ?? new Date().toISOString().replace(/[:.]/g, "-");
@@ -77764,6 +78185,30 @@ function categoryDeepSplitPlan(targetPath) {
77764
78185
  transform: inspect
77765
78186
  };
77766
78187
  }
78188
+ function harnessNativeRenamePlan(targetPath) {
78189
+ const inspect = (sources) => transformHarnessNativeRename(sources[0]?.value);
78190
+ return {
78191
+ id: HARNESS_NATIVE_RENAME_MIGRATION_ID,
78192
+ inspect,
78193
+ mode: "replace-target",
78194
+ shouldRun: hasLegacyHarnessBlocks,
78195
+ sources: [],
78196
+ targetPath,
78197
+ transform: inspect
78198
+ };
78199
+ }
78200
+ function subscriptionProviderRenamePlan(targetPath) {
78201
+ const inspect = (sources) => transformSubscriptionProviderRename(sources[0]?.value);
78202
+ return {
78203
+ id: SUBSCRIPTION_PROVIDER_RENAME_MIGRATION_ID,
78204
+ inspect,
78205
+ mode: "replace-target",
78206
+ shouldRun: hasLegacySubscriptionProviderIds,
78207
+ sources: [],
78208
+ targetPath,
78209
+ transform: inspect
78210
+ };
78211
+ }
77767
78212
  function existingOmoConfigPath(directory, options) {
77768
78213
  const fileSystem = discoveryFileSystem(options);
77769
78214
  for (const fileName of ["omo.jsonc", "omo.json"]) {
@@ -77827,7 +78272,9 @@ function createLegacyConfigMigrationPlans(options) {
77827
78272
  return [
77828
78273
  ...legacyPlans,
77829
78274
  ...inPlaceTargets.map(reasoningPlan),
77830
- ...inPlaceTargets.map(categoryDeepSplitPlan)
78275
+ ...inPlaceTargets.map(categoryDeepSplitPlan),
78276
+ ...inPlaceTargets.map(harnessNativeRenamePlan),
78277
+ ...inPlaceTargets.map(subscriptionProviderRenamePlan)
77831
78278
  ];
77832
78279
  }
77833
78280
  var init_migration_plans = __esm(() => {
@@ -77838,6 +78285,8 @@ var init_migration_plans = __esm(() => {
77838
78285
  init_transform_opencode();
77839
78286
  init_reasoning_unification();
77840
78287
  init_category_deep_split();
78288
+ init_harness_native_rename();
78289
+ init_subscription_provider_rename();
77841
78290
  init_src4();
77842
78291
  });
77843
78292
 
@@ -78622,7 +79071,7 @@ function shouldRetainLine(line, cutoffMs) {
78622
79071
  function parseDiagnosticLine(line) {
78623
79072
  try {
78624
79073
  const parsed = JSON.parse(line);
78625
- if (!isRecord12(parsed)) {
79074
+ if (!isRecord13(parsed)) {
78626
79075
  return null;
78627
79076
  }
78628
79077
  return parsed;
@@ -78633,7 +79082,7 @@ function parseDiagnosticLine(line) {
78633
79082
  throw error;
78634
79083
  }
78635
79084
  }
78636
- function isRecord12(value) {
79085
+ function isRecord13(value) {
78637
79086
  return value !== null && typeof value === "object" && !Array.isArray(value);
78638
79087
  }
78639
79088
  function trimToMaxBytes(lines) {
@@ -86123,7 +86572,7 @@ function coerceBool(value) {
86123
86572
  function coerceString(value) {
86124
86573
  return typeof value == "string" ? value : undefined;
86125
86574
  }
86126
- function isRecord13(value) {
86575
+ function isRecord14(value) {
86127
86576
  return typeof value == "object" && value !== null && !Array.isArray(value);
86128
86577
  }
86129
86578
  function toRfc3339(timestamp) {
@@ -86145,7 +86594,7 @@ function relocateInto(properties, key, value) {
86145
86594
  properties[key] = value;
86146
86595
  }
86147
86596
  function buildV1Event(message) {
86148
- const sourceProperties = isRecord13(message.properties) ? message.properties : {};
86597
+ const sourceProperties = isRecord14(message.properties) ? message.properties : {};
86149
86598
  const properties = {
86150
86599
  ...sourceProperties
86151
86600
  };
@@ -88290,7 +88739,7 @@ var package_default2;
88290
88739
  var init_package2 = __esm(() => {
88291
88740
  package_default2 = {
88292
88741
  name: "@oh-my-opencode/omo-codex",
88293
- version: "5.0.0-beta.82",
88742
+ version: "5.0.0-beta.84",
88294
88743
  type: "module",
88295
88744
  private: true,
88296
88745
  description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
@@ -91465,8 +91914,11 @@ function formatConfigSummary(config) {
91465
91914
  if (config.hasCodex) {
91466
91915
  lines.push(` ${SYMBOLS.info} Codex autonomous mode: ${config.codexAutonomous ? "enabled" : "disabled"}`);
91467
91916
  }
91468
- if (config.hasSenpi) {
91469
- lines.push(` ${SYMBOLS.info} Senpi adapter: enabled`);
91917
+ if (config.hasNative) {
91918
+ lines.push(` ${SYMBOLS.info} OmO Native: installing from omo-ai@beta`);
91919
+ }
91920
+ if (config.hasNativeDev) {
91921
+ lines.push(` ${SYMBOLS.info} OmO Native development adapter: enabled`);
91470
91922
  }
91471
91923
  if (!config.hasOpenCode)
91472
91924
  return lines.join(`
@@ -91623,7 +92075,8 @@ function argsToConfig(args) {
91623
92075
  const platform = resolvePlatform(args);
91624
92076
  const hasOpenCode = platform === "opencode" || platform === "both";
91625
92077
  const hasCodex = platform === "codex" || platform === "both";
91626
- const hasSenpi = platform === "senpi";
92078
+ const hasNative = platform === "native";
92079
+ const hasNativeDev = platform === "native-dev";
91627
92080
  return {
91628
92081
  platform,
91629
92082
  hasOpenCode,
@@ -91633,7 +92086,8 @@ function argsToConfig(args) {
91633
92086
  hasGemini: hasOpenCode && args.gemini === "yes",
91634
92087
  hasCopilot: hasOpenCode && args.copilot === "yes",
91635
92088
  hasCodex,
91636
- hasSenpi,
92089
+ hasNative,
92090
+ hasNativeDev,
91637
92091
  hasOpencodeZen: hasOpenCode && args.opencodeZen === "yes",
91638
92092
  hasZaiCodingPlan: hasOpenCode && args.zaiCodingPlan === "yes",
91639
92093
  hasKimiForCoding: hasOpenCode && args.kimiForCoding === "yes",
@@ -94357,10 +94811,10 @@ function readCatalogMultiAgentVersion(model, cachePath) {
94357
94811
  } catch {
94358
94812
  return null;
94359
94813
  }
94360
- if (!isRecord11(cache) || !Array.isArray(cache.models))
94814
+ if (!isRecord12(cache) || !Array.isArray(cache.models))
94361
94815
  return null;
94362
94816
  for (const entry of cache.models) {
94363
- if (!isRecord11(entry))
94817
+ if (!isRecord12(entry))
94364
94818
  continue;
94365
94819
  if (entry.slug !== model && entry.id !== model)
94366
94820
  continue;
@@ -94385,7 +94839,7 @@ function readRootModelCatalogPath(config) {
94385
94839
  const single = config.match(/^\s*model_catalog_json\s*=\s*'([^']+)'/m);
94386
94840
  return single?.[1] ?? null;
94387
94841
  }
94388
- function isRecord11(value) {
94842
+ function isRecord12(value) {
94389
94843
  return typeof value === "object" && value !== null && !Array.isArray(value);
94390
94844
  }
94391
94845
  function removeFeatureFlagSetting(config, featureName) {
@@ -97194,7 +97648,7 @@ async function readSettings(settingsPath) {
97194
97648
  throw error;
97195
97649
  }
97196
97650
  const parsed = JSON.parse(raw);
97197
- if (!isRecord14(parsed))
97651
+ if (!isRecord15(parsed))
97198
97652
  throw new Error(`${settingsPath} must contain a JSON object`);
97199
97653
  return parsed;
97200
97654
  }
@@ -97255,7 +97709,7 @@ async function nextBackupPath(settingsPath) {
97255
97709
  function timestampForBackup() {
97256
97710
  return new Date().toISOString().replace(/[-:.]/g, "");
97257
97711
  }
97258
- function isRecord14(value) {
97712
+ function isRecord15(value) {
97259
97713
  return typeof value === "object" && value !== null && !Array.isArray(value);
97260
97714
  }
97261
97715
  async function readPackageName(packagePath) {
@@ -97275,7 +97729,7 @@ async function readPackageName(packagePath) {
97275
97729
  return;
97276
97730
  throw error;
97277
97731
  }
97278
- return isRecord14(parsed) && typeof parsed.name === "string" ? parsed.name : undefined;
97732
+ return isRecord15(parsed) && typeof parsed.name === "string" ? parsed.name : undefined;
97279
97733
  }
97280
97734
  async function fileExists(path) {
97281
97735
  try {
@@ -97299,6 +97753,7 @@ var REQUIRED_PLUGIN_ARTIFACTS = [
97299
97753
  join61("extensions", "memory-run-supervisor.mjs"),
97300
97754
  ...PERSONA_ASSET_FILES.map((filename) => join61("extensions", filename)),
97301
97755
  join61("skills", "ast-grep", "SKILL.md"),
97756
+ join61("skills", "browser", "SKILL.md"),
97302
97757
  join61("skills", "coding-agent-sessions", "SKILL.md"),
97303
97758
  join61("skills", "debugging", "SKILL.md"),
97304
97759
  join61("skills", "frontend", "SKILL.md"),
@@ -97390,7 +97845,7 @@ async function verifyAstGrepRuntimeIntegrity(pluginPath, platform) {
97390
97845
  }
97391
97846
  }
97392
97847
  function isAstGrepRuntimeManifest(value) {
97393
- if (!isRecord14(value))
97848
+ if (!isRecord15(value))
97394
97849
  return false;
97395
97850
  return typeof value.sha256 === "string" && /^[a-f0-9]{64}$/.test(value.sha256) && typeof value.mode === "number" && Number.isInteger(value.mode) && typeof value.stagedAtUtc === "string" && !Number.isNaN(Date.parse(value.stagedAtUtc));
97396
97851
  }
@@ -97480,23 +97935,88 @@ function findRepoRoot2(importerDir) {
97480
97935
  function fileExistsSync(path) {
97481
97936
  return existsSync30(path);
97482
97937
  }
97483
- // packages/omo-opencode/src/cli/senpi-edition-hint.ts
97484
- var SENPI_EDITION_INSTALL_COMMAND = "bun add -g omo-ai@beta";
97485
- var SENPI_EDITION_GUIDE_URL = "https://github.com/code-yeongyu/oh-my-openagent/blob/dev/docs/guide/installation.md#senpi-edition-beta-omo-via-omo-ai";
97486
- var SENPI_EDITION_HINT_TITLE = "Standalone Senpi edition (beta)";
97938
+ // packages/omo-opencode/src/cli/install-native-dev/index.ts
97939
+ async function runNativeDevInstaller(options) {
97940
+ return runSenpiInstaller(options);
97941
+ }
97942
+
97943
+ // packages/omo-opencode/src/cli/install-native/plan.ts
97944
+ var NATIVE_PACKAGE_SPEC = "omo-ai@beta";
97945
+ var NATIVE_SETUP_COMMAND = "omo setup";
97946
+ var NATIVE_RECOMMENDED_RUNTIME_NOTE = "bun is the recommended runtime for OmO Native; npm works, but bun is what the beta channel is tested on.";
97947
+ var PLANS = {
97948
+ bun: { packageManager: "bun", command: "bun", args: ["add", "-g", NATIVE_PACKAGE_SPEC] },
97949
+ npm: { packageManager: "npm", command: "npm", args: ["i", "-g", NATIVE_PACKAGE_SPEC] }
97950
+ };
97951
+ function resolveNativeInstallPlan(bunAvailable) {
97952
+ return bunAvailable ? PLANS.bun : PLANS.npm;
97953
+ }
97954
+ function formatNativeInstallCommand(plan) {
97955
+ return [plan.command, ...plan.args].join(" ");
97956
+ }
97957
+ // packages/omo-opencode/src/cli/install-native/run-native-install.ts
97958
+ init_bun_which_shim();
97959
+ init_spawn_with_windows_hide();
97960
+ function describeExit(plan, result) {
97961
+ const stderr = result.stderr?.trim();
97962
+ const head = `${plan.packageManager} exited with code ${result.exitCode}`;
97963
+ return stderr ? `${head}: ${stderr.split(`
97964
+ `).slice(-3).join(" ")}` : head;
97965
+ }
97966
+ async function runNativeInstall(dependencies = defaultNativeInstallDependencies()) {
97967
+ const plan = resolveNativeInstallPlan(await dependencies.isBunAvailable());
97968
+ const notes = plan.packageManager === "npm" ? [NATIVE_RECOMMENDED_RUNTIME_NOTE] : [];
97969
+ const manualCommand = formatNativeInstallCommand(plan);
97970
+ try {
97971
+ const result = await dependencies.spawn(plan.command, plan.args);
97972
+ if (result.exitCode === 0)
97973
+ return { ok: true, plan, notes };
97974
+ return { ok: false, plan, notes, failure: { reason: describeExit(plan, result), manualCommand } };
97975
+ } catch (error) {
97976
+ const reason = error instanceof Error ? error.message : String(error);
97977
+ return { ok: false, plan, notes, failure: { reason, manualCommand } };
97978
+ }
97979
+ }
97980
+ function nativeInstallSuccessLine() {
97981
+ return `OmO Native installed. Run ${NATIVE_SETUP_COMMAND} to finish onboarding.`;
97982
+ }
97983
+ function nativeInstallFailureLines(failure) {
97984
+ return [
97985
+ `OmO Native install failed: ${failure.reason}`,
97986
+ `Install it yourself with: ${failure.manualCommand}`,
97987
+ `Then run ${NATIVE_SETUP_COMMAND}.`
97988
+ ];
97989
+ }
97990
+ function defaultNativeInstallDependencies() {
97991
+ return {
97992
+ isBunAvailable: () => bunWhich("bun") !== null,
97993
+ spawn: async (command, args) => {
97994
+ const proc = spawnWithWindowsHide([command, ...args], {
97995
+ env: process.env,
97996
+ stdout: "inherit",
97997
+ stderr: "inherit"
97998
+ });
97999
+ return { exitCode: await proc.exited };
98000
+ }
98001
+ };
98002
+ }
98003
+ // packages/omo-opencode/src/cli/native-edition-hint.ts
98004
+ var NATIVE_EDITION_INSTALL_COMMAND = "bun add -g omo-ai@beta";
98005
+ var NATIVE_EDITION_GUIDE_URL = "https://github.com/code-yeongyu/oh-my-openagent/blob/dev/docs/guide/installation.md#omo-native-beta-omo-via-omo-ai";
98006
+ var NATIVE_EDITION_HINT_TITLE = "OmO Native (beta)";
97487
98007
  var PLAIN_PAINT = {
97488
98008
  command: (text) => text,
97489
98009
  link: (text) => text
97490
98010
  };
97491
- function shouldShowSenpiEditionHint(config) {
97492
- return !config.hasSenpi;
98011
+ function shouldShowNativeEditionHint(config) {
98012
+ return !config.hasNative && !config.hasNativeDev;
97493
98013
  }
97494
- function senpiEditionHintLines(paint = PLAIN_PAINT) {
98014
+ function nativeEditionHintLines(paint = PLAIN_PAINT) {
97495
98015
  return [
97496
- `omo also ships as a standalone Senpi edition: one ${paint.command("omo")} command, no OpenCode host required.`,
97497
- `Try it next to this install: ${paint.command(SENPI_EDITION_INSTALL_COMMAND)}, then run ${paint.command("omo")}.`,
98016
+ `omo also ships as OmO Native: the same omo as one ${paint.command("omo")} command, with no OpenCode host required.`,
98017
+ `Try it next to this install: ${paint.command(NATIVE_EDITION_INSTALL_COMMAND)}, then run ${paint.command("omo")}.`,
97498
98018
  "This install keeps working as-is.",
97499
- `Guide: ${paint.link(SENPI_EDITION_GUIDE_URL)}`
98019
+ `Guide: ${paint.link(NATIVE_EDITION_GUIDE_URL)}`
97500
98020
  ];
97501
98021
  }
97502
98022
 
@@ -97511,7 +98031,8 @@ var PLATFORM_REPOSITORIES = {
97511
98031
  opencode: ["code-yeongyu/oh-my-openagent"],
97512
98032
  codex: STAR_REPOSITORIES,
97513
98033
  both: STAR_REPOSITORIES,
97514
- senpi: STAR_REPOSITORIES
98034
+ native: STAR_REPOSITORIES,
98035
+ "native-dev": STAR_REPOSITORIES
97515
98036
  };
97516
98037
  var execFileAsync2 = promisify3(execFile4);
97517
98038
  async function runGitHubStarCommand(repository) {
@@ -98013,14 +98534,27 @@ async function runCliInstaller(args, version) {
98013
98534
  }
98014
98535
  console.log();
98015
98536
  }
98016
- if (config.hasSenpi) {
98017
- printInfo("Installing Senpi harness adapter...");
98537
+ if (config.hasNative) {
98538
+ printInfo("Installing OmO Native...");
98539
+ const outcome = await runNativeInstall();
98540
+ if (outcome.failure) {
98541
+ for (const line of nativeInstallFailureLines(outcome.failure))
98542
+ printError(line);
98543
+ return 1;
98544
+ }
98545
+ for (const note of outcome.notes)
98546
+ printInfo(note);
98547
+ printSuccess(nativeInstallSuccessLine());
98548
+ console.log();
98549
+ }
98550
+ if (config.hasNativeDev) {
98551
+ printInfo("Installing the OmO Native development adapter...");
98018
98552
  try {
98019
- const senpiResult = await runSenpiInstaller();
98020
- printSuccess(`Senpi adapter installed ${SYMBOLS.arrow} ${import_picocolors3.default.dim(senpiResult.settingsPath)}`);
98553
+ const nativeDevResult = await runNativeDevInstaller();
98554
+ printSuccess(`OmO Native development adapter installed ${SYMBOLS.arrow} ${import_picocolors3.default.dim(nativeDevResult.settingsPath)}`);
98021
98555
  } catch (error) {
98022
98556
  const message = error instanceof Error ? error.message : String(error);
98023
- printError(`Senpi install failed: ${message}`);
98557
+ printError(`OmO Native development adapter install failed: ${message}`);
98024
98558
  return 1;
98025
98559
  }
98026
98560
  console.log();
@@ -98031,9 +98565,9 @@ async function runCliInstaller(args, version) {
98031
98565
  printBox(`${import_picocolors3.default.bold("Pro Tip:")} Include ${import_picocolors3.default.cyan("ultrawork")} (or ${import_picocolors3.default.cyan("ulw")}) in your prompt.
98032
98566
  ` + `All features work like magic-parallel agents, background tasks,
98033
98567
  ` + `deep exploration, and relentless execution until completion.`, "The Magic Word");
98034
- if (shouldShowSenpiEditionHint(config)) {
98035
- printInfo(import_picocolors3.default.bold(SENPI_EDITION_HINT_TITLE));
98036
- for (const line of senpiEditionHintLines({ command: import_picocolors3.default.cyan, link: import_picocolors3.default.underline })) {
98568
+ if (shouldShowNativeEditionHint(config)) {
98569
+ printInfo(import_picocolors3.default.bold(NATIVE_EDITION_HINT_TITLE));
98570
+ for (const line of nativeEditionHintLines({ command: import_picocolors3.default.cyan, link: import_picocolors3.default.underline })) {
98037
98571
  console.log(` ${line}`);
98038
98572
  }
98039
98573
  console.log();
@@ -99173,16 +99707,20 @@ var import_picocolors4 = __toESM(require_picocolors(), 1);
99173
99707
  // packages/omo-opencode/src/cli/tui-install-prompts.ts
99174
99708
  init_model_fallback();
99175
99709
 
99176
- // packages/omo-opencode/src/cli/senpi-platform-flag.ts
99177
- var SENPI_PLATFORM_ENV_FLAG = "OMO_ENABLE_SENPI_PLATFORM";
99178
- function isSenpiPlatformEnabled(env = process.env) {
99179
- const value = env[SENPI_PLATFORM_ENV_FLAG]?.trim().toLowerCase();
99180
- return value === "1" || value === "true";
99710
+ // packages/omo-opencode/src/cli/native-dev-platform-flag.ts
99711
+ var NATIVE_DEV_PLATFORM_ENV_FLAG = "OMO_ENABLE_NATIVE_DEV_PLATFORM";
99712
+ var LEGACY_NATIVE_DEV_PLATFORM_ENV_FLAG = "OMO_ENABLE_SENPI_PLATFORM";
99713
+ function isTruthy(value) {
99714
+ const normalized = value?.trim().toLowerCase();
99715
+ return normalized === "1" || normalized === "true";
99716
+ }
99717
+ function isNativeDevPlatformEnabled(env = process.env) {
99718
+ return isTruthy(env[NATIVE_DEV_PLATFORM_ENV_FLAG]) || isTruthy(env[LEGACY_NATIVE_DEV_PLATFORM_ENV_FLAG]);
99181
99719
  }
99182
99720
  function availableInstallPlatforms(env = process.env) {
99183
- const platforms = ["opencode", "codex", "both"];
99184
- if (isSenpiPlatformEnabled(env))
99185
- platforms.push("senpi");
99721
+ const platforms = ["opencode", "codex", "both", "native"];
99722
+ if (isNativeDevPlatformEnabled(env))
99723
+ platforms.push("native-dev");
99186
99724
  return platforms;
99187
99725
  }
99188
99726
 
@@ -99205,10 +99743,15 @@ async function promptInstallPlatform(initialValue = "opencode") {
99205
99743
  const options = [
99206
99744
  { value: "opencode", label: "OpenCode", hint: "Install OpenCode plugin only" },
99207
99745
  { value: "codex", label: "Codex", hint: "Install Codex harness adapter only" },
99208
- { value: "both", label: "Both", hint: "Install OpenCode plugin and Codex adapter" }
99746
+ { value: "both", label: "Both", hint: "Install OpenCode plugin and Codex adapter" },
99747
+ { value: "native", label: "OmO Native", hint: "Install the standalone omo command (no host required)" }
99209
99748
  ];
99210
- if (isSenpiPlatformEnabled()) {
99211
- options.push({ value: "senpi", label: "Senpi", hint: "Install Senpi harness adapter only" });
99749
+ if (isNativeDevPlatformEnabled()) {
99750
+ options.push({
99751
+ value: "native-dev",
99752
+ label: "OmO Native (development adapter)",
99753
+ hint: "Register this checkout into a local engine install"
99754
+ });
99212
99755
  }
99213
99756
  return selectOrCancel({
99214
99757
  message: "Which platform do you want to install?",
@@ -99219,7 +99762,8 @@ async function promptInstallPlatform(initialValue = "opencode") {
99219
99762
  async function promptInstallConfig(detected, platform, codexAutonomousOverride) {
99220
99763
  const hasOpenCode = platform === "opencode" || platform === "both";
99221
99764
  const hasCodex = platform === "codex" || platform === "both";
99222
- const hasSenpi = platform === "senpi";
99765
+ const hasNative = platform === "native";
99766
+ const hasNativeDev = platform === "native-dev";
99223
99767
  const codexAutonomous = await resolveCodexAutonomous(hasCodex, codexAutonomousOverride);
99224
99768
  if (codexAutonomous === null)
99225
99769
  return null;
@@ -99233,7 +99777,8 @@ async function promptInstallConfig(detected, platform, codexAutonomousOverride)
99233
99777
  hasGemini: false,
99234
99778
  hasCopilot: false,
99235
99779
  hasCodex,
99236
- hasSenpi,
99780
+ hasNative,
99781
+ hasNativeDev,
99237
99782
  hasOpencodeZen: false,
99238
99783
  hasZaiCodingPlan: false,
99239
99784
  hasKimiForCoding: false,
@@ -99376,7 +99921,8 @@ async function promptInstallConfig(detected, platform, codexAutonomousOverride)
99376
99921
  hasGemini: gemini === "yes",
99377
99922
  hasCopilot: copilot === "yes",
99378
99923
  hasCodex,
99379
- hasSenpi,
99924
+ hasNative,
99925
+ hasNativeDev,
99380
99926
  hasOpencodeZen: opencodeZen === "yes",
99381
99927
  hasZaiCodingPlan: zaiCodingPlan === "yes",
99382
99928
  hasKimiForCoding: kimiForCoding === "yes",
@@ -99507,15 +100053,29 @@ async function runTuiInstaller(args, version) {
99507
100053
  log4.info("The Codex harness is NOT installed. Fix the error above, then re-run: bunx oh-my-openagent install --platform=codex");
99508
100054
  }
99509
100055
  }
99510
- if (config.hasSenpi) {
99511
- spinner2.start("Installing Senpi harness adapter");
100056
+ if (config.hasNative) {
100057
+ spinner2.start("Installing OmO Native");
100058
+ const outcome = await runNativeInstall();
100059
+ if (outcome.failure) {
100060
+ spinner2.stop(`OmO Native install failed ${import_picocolors4.default.yellow("[!]")}`);
100061
+ for (const line of nativeInstallFailureLines(outcome.failure))
100062
+ log4.error(line);
100063
+ outro(import_picocolors4.default.red("Installation failed."));
100064
+ return 1;
100065
+ }
100066
+ spinner2.stop(nativeInstallSuccessLine());
100067
+ for (const note of outcome.notes)
100068
+ log4.info(note);
100069
+ }
100070
+ if (config.hasNativeDev) {
100071
+ spinner2.start("Installing the OmO Native development adapter");
99512
100072
  try {
99513
- const senpiResult = await runSenpiInstaller();
99514
- spinner2.stop(`Senpi adapter installed to ${import_picocolors4.default.cyan(senpiResult.settingsPath)}`);
100073
+ const nativeDevResult = await runNativeDevInstaller();
100074
+ spinner2.stop(`OmO Native development adapter installed to ${import_picocolors4.default.cyan(nativeDevResult.settingsPath)}`);
99515
100075
  } catch (error) {
99516
100076
  const message = error instanceof Error ? error.message : String(error);
99517
- spinner2.stop(`Senpi install failed ${import_picocolors4.default.yellow("[!]")}`);
99518
- log4.error(`Senpi install failed: ${message}`);
100077
+ spinner2.stop(`OmO Native development adapter install failed ${import_picocolors4.default.yellow("[!]")}`);
100078
+ log4.error(`OmO Native development adapter install failed: ${message}`);
99519
100079
  outro(import_picocolors4.default.red("Installation failed."));
99520
100080
  return 1;
99521
100081
  }
@@ -99529,9 +100089,9 @@ async function runTuiInstaller(args, version) {
99529
100089
  note(`Include ${import_picocolors4.default.cyan("ultrawork")} (or ${import_picocolors4.default.cyan("ulw")}) in your prompt.
99530
100090
  ` + `All features work like magic-parallel agents, background tasks,
99531
100091
  ` + `deep exploration, and relentless execution until completion.`, "The Magic Word");
99532
- if (shouldShowSenpiEditionHint(config)) {
99533
- log4.info(import_picocolors4.default.bold(SENPI_EDITION_HINT_TITLE));
99534
- log4.message(senpiEditionHintLines({ command: import_picocolors4.default.cyan, link: import_picocolors4.default.underline }).join(`
100092
+ if (shouldShowNativeEditionHint(config)) {
100093
+ log4.info(import_picocolors4.default.bold(NATIVE_EDITION_HINT_TITLE));
100094
+ log4.message(nativeEditionHintLines({ command: import_picocolors4.default.cyan, link: import_picocolors4.default.underline }).join(`
99535
100095
  `));
99536
100096
  }
99537
100097
  const shouldStar = await confirm({
@@ -99572,7 +100132,7 @@ async function runTuiInstaller(args, version) {
99572
100132
 
99573
100133
  // packages/omo-opencode/src/cli/install.ts
99574
100134
  var VERSION = package_default.version;
99575
- async function install3(args) {
100135
+ async function install2(args) {
99576
100136
  return args.tui ? runTuiInstaller(args, VERSION) : runCliInstaller(args, VERSION);
99577
100137
  }
99578
100138
  // packages/omo-opencode/src/cli/cleanup.ts
@@ -101073,7 +101633,8 @@ var HookNameSchema = _enum([
101073
101633
  "webfetch-redirect-guard",
101074
101634
  "fsync-skip-warning",
101075
101635
  "plan-format-validator",
101076
- "legacy-plugin-toast"
101636
+ "legacy-plugin-toast",
101637
+ "native-edition-nudge"
101077
101638
  ]);
101078
101639
  // packages/omo-opencode/src/config/schema/i18n.ts
101079
101640
  init_zod();
@@ -103176,14 +103737,14 @@ var NO_OP_POSTHOG2 = {
103176
103737
  function isFalsy(value) {
103177
103738
  return value === "0" || value === "false" || value === "no";
103178
103739
  }
103179
- function isTruthy(value) {
103740
+ function isTruthy2(value) {
103180
103741
  return value === "1" || value === "true" || value === "yes";
103181
103742
  }
103182
103743
  function shouldDisablePostHog(env, configEnabled) {
103183
103744
  if (configEnabled === false) {
103184
103745
  return true;
103185
103746
  }
103186
- if (isTruthy(env.OMO_DISABLE_POSTHOG?.trim().toLowerCase())) {
103747
+ if (isTruthy2(env.OMO_DISABLE_POSTHOG?.trim().toLowerCase())) {
103187
103748
  return true;
103188
103749
  }
103189
103750
  return isFalsy(env.OMO_SEND_ANONYMOUS_TELEMETRY?.trim().toLowerCase());
@@ -104706,14 +105267,14 @@ var CANONICAL_REPLACEMENT = new Map([
104706
105267
  var MIGRATE_SUFFIX = ", or run: oh-my-openagent config migrate";
104707
105268
  var TUNING_CONTAINERS = new Set(["agents", "categories", "models"]);
104708
105269
  var PASSTHROUGH_CONTAINERS = new Set(["provider_options", "providerOptions"]);
104709
- function isRecord15(value) {
105270
+ function isRecord16(value) {
104710
105271
  return value !== null && typeof value === "object" && !Array.isArray(value);
104711
105272
  }
104712
105273
  function isHarnessBlock(key) {
104713
105274
  return key.startsWith("[") && key.endsWith("]");
104714
105275
  }
104715
105276
  function collectIssues(configPath, value, prefix, fixSuffix) {
104716
- if (!isRecord15(value))
105277
+ if (!isRecord16(value))
104717
105278
  return [];
104718
105279
  const issues = [];
104719
105280
  for (const [key, child] of Object.entries(value)) {
@@ -104729,7 +105290,7 @@ function collectIssues(configPath, value, prefix, fixSuffix) {
104729
105290
  });
104730
105291
  continue;
104731
105292
  }
104732
- if (!isRecord15(child))
105293
+ if (!isRecord16(child))
104733
105294
  continue;
104734
105295
  if (PASSTHROUGH_CONTAINERS.has(key))
104735
105296
  continue;
@@ -104748,7 +105309,7 @@ function collectIssues(configPath, value, prefix, fixSuffix) {
104748
105309
  return issues;
104749
105310
  }
104750
105311
  function migrateFixSuffix(parsed) {
104751
- if (isRecord15(parsed) && hasMigrationMarker(parsed, REASONING_UNIFICATION_MIGRATION_ID))
105312
+ if (isRecord16(parsed) && hasMigrationMarker(parsed, REASONING_UNIFICATION_MIGRATION_ID))
104752
105313
  return "";
104753
105314
  return MIGRATE_SUFFIX;
104754
105315
  }
@@ -105986,12 +106547,12 @@ async function auditBundleTargets(pluginRoot) {
105986
106547
  let referencedCount = 0;
105987
106548
  for (const manifestPath of await findManifestPaths(pluginRoot, ".mcp.json")) {
105988
106549
  const manifest = await readJson2(manifestPath);
105989
- if (manifest === null || !isRecord16(manifest["mcpServers"]))
106550
+ if (manifest === null || !isRecord17(manifest["mcpServers"]))
105990
106551
  continue;
105991
106552
  const manifestRoot = dirname33(manifestPath);
105992
106553
  const isRootManifest = resolve24(manifestRoot) === resolve24(pluginRoot);
105993
106554
  for (const server of Object.values(manifest["mcpServers"])) {
105994
- if (!isRecord16(server) || !Array.isArray(server["args"]))
106555
+ if (!isRecord17(server) || !Array.isArray(server["args"]))
105995
106556
  continue;
105996
106557
  for (const arg of server["args"]) {
105997
106558
  if (typeof arg !== "string" || !isPluginRuntimePathArg(arg))
@@ -106077,7 +106638,7 @@ function collectHookCommands(value, commands) {
106077
106638
  collectHookCommands(item, commands);
106078
106639
  return;
106079
106640
  }
106080
- if (!isRecord16(value))
106641
+ if (!isRecord17(value))
106081
106642
  return;
106082
106643
  if (value["type"] === "command") {
106083
106644
  if (typeof value["command"] === "string")
@@ -106132,7 +106693,7 @@ function parseDegradedEntries(value) {
106132
106693
  return [];
106133
106694
  const entries = [];
106134
106695
  for (const item of value) {
106135
- if (!isRecord16(item))
106696
+ if (!isRecord17(item))
106136
106697
  continue;
106137
106698
  if (typeof item["component"] !== "string" || typeof item["reason"] !== "string")
106138
106699
  continue;
@@ -106166,7 +106727,7 @@ function degradedDetailLines(entries) {
106166
106727
  async function readJson2(path) {
106167
106728
  try {
106168
106729
  const parsed = JSON.parse(await readFile29(path, "utf8"));
106169
- return isRecord16(parsed) ? parsed : null;
106730
+ return isRecord17(parsed) ? parsed : null;
106170
106731
  } catch (error) {
106171
106732
  if (error instanceof Error)
106172
106733
  return null;
@@ -106187,7 +106748,7 @@ function normalizeRelative(root, target) {
106187
106748
  function normalizePathSeparators(path) {
106188
106749
  return path.split("\\").join("/");
106189
106750
  }
106190
- function isRecord16(value) {
106751
+ function isRecord17(value) {
106191
106752
  return typeof value === "object" && value !== null && !Array.isArray(value);
106192
106753
  }
106193
106754
 
@@ -108297,8 +108858,8 @@ var program2 = new Command;
108297
108858
  function resolveInstallArgs(options, invocationName = process.env.OMO_INVOCATION_NAME) {
108298
108859
  const defaultPlatform = process.env.OMO_EDITION === "codex" || invocationName === "lazycodex" || invocationName === "lazycodex-ai" ? "codex" : undefined;
108299
108860
  const platform = options.platform ?? defaultPlatform;
108300
- if (platform === "senpi" && !isSenpiPlatformEnabled()) {
108301
- throw new Error(`The senpi install platform is not available in this release. Set ${SENPI_PLATFORM_ENV_FLAG}=1 to enable it from a source checkout.`);
108861
+ if (platform === "native-dev" && !isNativeDevPlatformEnabled()) {
108862
+ throw new Error(`The native-dev install platform is not available in this release. Set ${NATIVE_DEV_PLATFORM_ENV_FLAG}=1 to enable it from a source checkout.`);
108302
108863
  }
108303
108864
  return {
108304
108865
  tui: options.tui !== false,
@@ -108343,7 +108904,7 @@ Model Providers (Priority: Native > Copilot > OpenCode Zen > Z.ai > Kimi > Baili
108343
108904
  `).action(async (options) => {
108344
108905
  const rootOptions = program2.opts();
108345
108906
  const args = resolveInstallArgs({ ...options, platform: options.platform ?? rootOptions.platform });
108346
- const exitCode = await install3(args);
108907
+ const exitCode = await install2(args);
108347
108908
  process.exit(exitCode);
108348
108909
  });
108349
108910
  configureCleanupCommand(program2);