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
package/dist/cli/index.js CHANGED
@@ -64,7 +64,7 @@ var package_default;
64
64
  var init_package = __esm(() => {
65
65
  package_default = {
66
66
  name: "oh-my-opencode",
67
- version: "5.0.0-beta.82",
67
+ version: "5.0.0-beta.84",
68
68
  description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
69
69
  main: "./dist/index.js",
70
70
  types: "dist/index.d.ts",
@@ -247,7 +247,7 @@ var init_package = __esm(() => {
247
247
  zod: "^4.6.5"
248
248
  },
249
249
  devDependencies: {
250
- "@code-yeongyu/senpi": "2026.9.22",
250
+ "@code-yeongyu/senpi": "2026.9.22-4",
251
251
  "@oh-my-opencode/agents-md-core": "workspace:*",
252
252
  "@oh-my-opencode/ast-grep-mcp": "workspace:*",
253
253
  "@oh-my-opencode/boulder-state": "workspace:*",
@@ -287,18 +287,18 @@ var init_package = __esm(() => {
287
287
  typescript: "^7.0.2"
288
288
  },
289
289
  optionalDependencies: {
290
- "oh-my-opencode-darwin-arm64": "5.0.0-beta.82",
291
- "oh-my-opencode-darwin-x64": "5.0.0-beta.82",
292
- "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.82",
293
- "oh-my-opencode-linux-arm64": "5.0.0-beta.82",
294
- "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.82",
295
- "oh-my-opencode-linux-x64": "5.0.0-beta.82",
296
- "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.82",
297
- "oh-my-opencode-linux-x64-musl": "5.0.0-beta.82",
298
- "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.82",
299
- "oh-my-opencode-windows-arm64": "5.0.0-beta.82",
300
- "oh-my-opencode-windows-x64": "5.0.0-beta.82",
301
- "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.82"
290
+ "oh-my-opencode-darwin-arm64": "5.0.0-beta.84",
291
+ "oh-my-opencode-darwin-x64": "5.0.0-beta.84",
292
+ "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.84",
293
+ "oh-my-opencode-linux-arm64": "5.0.0-beta.84",
294
+ "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.84",
295
+ "oh-my-opencode-linux-x64": "5.0.0-beta.84",
296
+ "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.84",
297
+ "oh-my-opencode-linux-x64-musl": "5.0.0-beta.84",
298
+ "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.84",
299
+ "oh-my-opencode-windows-arm64": "5.0.0-beta.84",
300
+ "oh-my-opencode-windows-x64": "5.0.0-beta.84",
301
+ "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.84"
302
302
  },
303
303
  overrides: {
304
304
  "@earendil-works/pi-agent-core": "0.84.2",
@@ -7180,7 +7180,7 @@ var init_agent_model_requirements = __esm(() => {
7180
7180
  fallbackChain: [
7181
7181
  {
7182
7182
  providers: ["anthropic", "github-copilot", "opencode"],
7183
- model: "claude-opus-5",
7183
+ model: "claude-opus-5-5",
7184
7184
  variant: "max"
7185
7185
  },
7186
7186
  {
@@ -7188,7 +7188,7 @@ var init_agent_model_requirements = __esm(() => {
7188
7188
  model: "kimi-k3"
7189
7189
  },
7190
7190
  {
7191
- providers: ["openai", "openai-codex", "github-copilot", "opencode"],
7191
+ providers: ["openai", "chatgpt-subscription", "github-copilot", "opencode"],
7192
7192
  model: "gpt-5.6-sol",
7193
7193
  variant: "medium"
7194
7194
  },
@@ -7200,17 +7200,17 @@ var init_agent_model_requirements = __esm(() => {
7200
7200
  hephaestus: {
7201
7201
  fallbackChain: [
7202
7202
  {
7203
- providers: ["openai", "openai-codex", "github-copilot", "opencode"],
7203
+ providers: ["openai", "chatgpt-subscription", "github-copilot", "opencode"],
7204
7204
  model: "gpt-5.6-sol",
7205
7205
  variant: "medium"
7206
7206
  }
7207
7207
  ],
7208
- requiresProvider: ["openai", "openai-codex", "github-copilot", "opencode"],
7208
+ requiresProvider: ["openai", "chatgpt-subscription", "github-copilot", "opencode"],
7209
7209
  requiresAnyModel: true
7210
7210
  },
7211
7211
  oracle: {
7212
7212
  fallbackChain: [
7213
- { providers: ["openai", "openai-codex", "opencode"], model: "gpt-5.6-sol", variant: "xhigh" },
7213
+ { providers: ["openai", "chatgpt-subscription", "opencode"], model: "gpt-5.6-sol", variant: "xhigh" },
7214
7214
  { providers: ["github-copilot"], model: "gpt-5.6-sol", variant: "high" },
7215
7215
  {
7216
7216
  providers: ["google", "github-copilot", "opencode"],
@@ -7219,7 +7219,7 @@ var init_agent_model_requirements = __esm(() => {
7219
7219
  },
7220
7220
  {
7221
7221
  providers: ["anthropic", "github-copilot", "opencode"],
7222
- model: "claude-opus-5",
7222
+ model: "claude-opus-5-5",
7223
7223
  variant: "max"
7224
7224
  },
7225
7225
  { providers: ["opencode-go"], model: "glm-5.2" }
@@ -7227,34 +7227,36 @@ var init_agent_model_requirements = __esm(() => {
7227
7227
  },
7228
7228
  librarian: {
7229
7229
  fallbackChain: [
7230
- { providers: ["openai", "openai-codex"], model: "gpt-5.6-luna-fast", variant: "low" },
7230
+ { providers: ["kimi-for-coding"], model: "kimi-for-coding-highspeed", variant: "off" },
7231
+ { providers: ["openai", "chatgpt-subscription"], model: "gpt-5.6-luna-fast", variant: "low" },
7231
7232
  { providers: ["deepseek"], model: "deepseek-v4-flash", variant: "max" },
7232
7233
  { providers: ["opencode-go", "bailian-coding-plan"], model: "qwen3.7-plus" },
7233
7234
  { providers: ["opencode-go"], model: "minimax-m3" },
7234
7235
  { providers: ["minimax-coding-plan", "minimax-cn-coding-plan"], model: "MiniMax-M3" },
7235
7236
  { providers: ["opencode-go"], model: "minimax-m2.7" },
7236
7237
  { providers: ["anthropic", "github-copilot"], model: "claude-haiku-4-5" },
7237
- { providers: ["openai", "openai-codex"], model: "gpt-5.4-nano" }
7238
+ { providers: ["openai", "chatgpt-subscription"], model: "gpt-5.4-nano" }
7238
7239
  ]
7239
7240
  },
7240
7241
  explore: {
7241
7242
  fallbackChain: [
7242
- { providers: ["openai", "openai-codex"], model: "gpt-5.6-luna-fast", variant: "low" },
7243
+ { providers: ["kimi-for-coding"], model: "kimi-for-coding-highspeed", variant: "off" },
7244
+ { providers: ["openai", "chatgpt-subscription"], model: "gpt-5.6-luna-fast", variant: "low" },
7243
7245
  { providers: ["deepseek"], model: "deepseek-v4-flash", variant: "max" },
7244
7246
  { providers: ["opencode-go", "bailian-coding-plan"], model: "qwen3.7-plus" },
7245
7247
  { providers: ["opencode-go"], model: "minimax-m3" },
7246
7248
  { providers: ["minimax-coding-plan", "minimax-cn-coding-plan"], model: "MiniMax-M3" },
7247
7249
  { providers: ["opencode-go"], model: "minimax-m2.7" },
7248
7250
  { providers: ["anthropic", "github-copilot"], model: "claude-haiku-4-5" },
7249
- { providers: ["openai", "openai-codex"], model: "gpt-5.4-nano" }
7251
+ { providers: ["openai", "chatgpt-subscription"], model: "gpt-5.4-nano" }
7250
7252
  ]
7251
7253
  },
7252
7254
  "multimodal-looker": {
7253
7255
  fallbackChain: [
7254
- { providers: ["openai", "openai-codex", "opencode"], model: "gpt-5.6-sol", variant: "low" },
7256
+ { providers: ["openai", "chatgpt-subscription", "opencode"], model: "gpt-5.6-sol", variant: "low" },
7255
7257
  { providers: ["opencode-go"], model: "kimi-k3" },
7256
7258
  { providers: ["zai-coding-plan"], model: "glm-4.6v" },
7257
- { providers: ["openai", "openai-codex", "github-copilot", "opencode"], model: "gpt-5-nano" }
7259
+ { providers: ["openai", "chatgpt-subscription", "github-copilot", "opencode"], model: "gpt-5-nano" }
7258
7260
  ]
7259
7261
  },
7260
7262
  prometheus: {
@@ -7280,7 +7282,7 @@ var init_agent_model_requirements = __esm(() => {
7280
7282
  },
7281
7283
  {
7282
7284
  providers: ["anthropic", "github-copilot", "opencode"],
7283
- model: "claude-opus-5",
7285
+ model: "claude-opus-5-5",
7284
7286
  variant: "max"
7285
7287
  },
7286
7288
  {
@@ -7292,12 +7294,12 @@ var init_agent_model_requirements = __esm(() => {
7292
7294
  },
7293
7295
  momus: {
7294
7296
  fallbackChain: [
7295
- { providers: ["openai", "openai-codex"], model: "gpt-6-astra", variant: "xhigh" },
7297
+ { providers: ["openai", "chatgpt-subscription"], model: "gpt-6-astra", variant: "xhigh" },
7296
7298
  { providers: ["github-copilot"], model: "gpt-6-astra", variant: "high" },
7297
- { providers: ["openai", "openai-codex", "opencode"], model: "gpt-6-astra", variant: "high" },
7299
+ { providers: ["openai", "chatgpt-subscription", "opencode"], model: "gpt-6-astra", variant: "high" },
7298
7300
  {
7299
7301
  providers: ["anthropic", "github-copilot", "opencode"],
7300
- model: "claude-opus-5",
7302
+ model: "claude-opus-5-5",
7301
7303
  variant: "max"
7302
7304
  },
7303
7305
  {
@@ -7313,7 +7315,7 @@ var init_agent_model_requirements = __esm(() => {
7313
7315
  { providers: ["anthropic", "github-copilot", "opencode"], model: "claude-sonnet-5" },
7314
7316
  { providers: ["opencode-go"], model: "kimi-k3" },
7315
7317
  {
7316
- providers: ["openai", "openai-codex", "github-copilot", "opencode"],
7318
+ providers: ["openai", "chatgpt-subscription", "github-copilot", "opencode"],
7317
7319
  model: "gpt-5.6-sol",
7318
7320
  variant: "medium"
7319
7321
  },
@@ -7327,7 +7329,7 @@ var init_agent_model_requirements = __esm(() => {
7327
7329
  { providers: ["anthropic", "github-copilot", "opencode"], model: "claude-sonnet-5" },
7328
7330
  { providers: ["opencode-go"], model: "kimi-k3" },
7329
7331
  {
7330
- providers: ["openai", "openai-codex", "github-copilot", "opencode"],
7332
+ providers: ["openai", "chatgpt-subscription", "github-copilot", "opencode"],
7331
7333
  model: "gpt-5.6-sol",
7332
7334
  variant: "medium"
7333
7335
  },
@@ -7353,7 +7355,7 @@ var init_category_model_requirements = __esm(() => {
7353
7355
  },
7354
7356
  {
7355
7357
  providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
7356
- model: "claude-opus-5",
7358
+ model: "claude-opus-5-5",
7357
7359
  variant: "max"
7358
7360
  },
7359
7361
  {
@@ -7365,18 +7367,18 @@ var init_category_model_requirements = __esm(() => {
7365
7367
  },
7366
7368
  ultrabrain: {
7367
7369
  fallbackChain: [
7368
- { providers: ["openai", "openai-codex"], model: "gpt-6-astra", variant: "max" },
7370
+ { providers: ["openai", "chatgpt-subscription"], model: "gpt-6-astra", variant: "max" },
7369
7371
  { providers: ["github-copilot"], model: "gpt-6-astra", variant: "max" },
7370
- { providers: ["openai", "openai-codex", "opencode"], model: "gpt-6-astra", variant: "max" },
7371
- { providers: ["openai", "openai-codex"], model: "gpt-5.6-sol", variant: "max" },
7372
+ { providers: ["openai", "chatgpt-subscription", "opencode"], model: "gpt-6-astra", variant: "max" },
7373
+ { providers: ["openai", "chatgpt-subscription"], model: "gpt-5.6-sol", variant: "max" },
7372
7374
  { providers: ["github-copilot"], model: "gpt-5.6-sol", variant: "max" },
7373
- { providers: ["openai", "openai-codex", "opencode"], model: "gpt-5.6-sol", variant: "max" }
7375
+ { providers: ["openai", "chatgpt-subscription", "opencode"], model: "gpt-5.6-sol", variant: "max" }
7374
7376
  ]
7375
7377
  },
7376
7378
  "deep-low": {
7377
7379
  fallbackChain: [
7378
7380
  {
7379
- providers: ["openai", "openai-codex", "github-copilot", "opencode"],
7381
+ providers: ["openai", "chatgpt-subscription", "github-copilot", "opencode"],
7380
7382
  model: "gpt-5.6-sol",
7381
7383
  variant: "medium"
7382
7384
  }
@@ -7385,7 +7387,7 @@ var init_category_model_requirements = __esm(() => {
7385
7387
  "deep-high": {
7386
7388
  fallbackChain: [
7387
7389
  {
7388
- providers: ["openai", "openai-codex", "github-copilot", "opencode"],
7390
+ providers: ["openai", "chatgpt-subscription", "github-copilot", "opencode"],
7389
7391
  model: "gpt-6-astra",
7390
7392
  variant: "high"
7391
7393
  }
@@ -7405,15 +7407,14 @@ var init_category_model_requirements = __esm(() => {
7405
7407
  },
7406
7408
  {
7407
7409
  providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
7408
- model: "claude-opus-5",
7409
- variant: "xhigh"
7410
+ model: "claude-opus-5-5",
7411
+ variant: "max"
7410
7412
  }
7411
7413
  ]
7412
7414
  },
7413
7415
  quick: {
7414
7416
  fallbackChain: [
7415
- { providers: ["kimi-for-coding"], model: "kimi-for-coding-highspeed" },
7416
- { providers: ["openai-codex"], model: "gpt-5.6-luna-fast", variant: "low" },
7417
+ { providers: ["chatgpt-subscription"], model: "gpt-5.6-luna-fast", variant: "low" },
7417
7418
  { providers: ["deepseek"], model: "deepseek-v4-flash", variant: "off" },
7418
7419
  {
7419
7420
  providers: ["qwen-token-plan", "alibaba-token-plan", "bailian-coding-plan"],
@@ -7432,9 +7433,10 @@ var init_category_model_requirements = __esm(() => {
7432
7433
  },
7433
7434
  "unspecified-low": {
7434
7435
  fallbackChain: [
7435
- { providers: ["xai", "github-copilot", "opencode"], model: "grok-4.6", variant: "xhigh" },
7436
+ { providers: ["xiaomi", "opencode-go"], model: "mimo-v2.6-pro", variant: "max" },
7437
+ { providers: ["xai", "github-copilot", "opencode-go"], model: "grok-4.7", variant: "xhigh" },
7436
7438
  {
7437
- providers: ["openai", "openai-codex", "github-copilot", "opencode"],
7439
+ providers: ["openai", "chatgpt-subscription", "github-copilot", "opencode"],
7438
7440
  model: "gpt-5.6-terra",
7439
7441
  variant: "high"
7440
7442
  },
@@ -7454,15 +7456,10 @@ var init_category_model_requirements = __esm(() => {
7454
7456
  },
7455
7457
  "unspecified-high": {
7456
7458
  fallbackChain: [
7457
- {
7458
- providers: ["openai", "openai-codex", "github-copilot", "opencode"],
7459
- model: "gpt-6-astra",
7460
- variant: "high"
7461
- },
7462
7459
  {
7463
7460
  providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
7464
- model: "claude-opus-5",
7465
- variant: "xhigh"
7461
+ model: "claude-opus-5-5",
7462
+ variant: "max"
7466
7463
  },
7467
7464
  { providers: ["zai-coding-plan", "opencode-go"], model: "glm-5.3", variant: "max" },
7468
7465
  {
@@ -7480,14 +7477,14 @@ var init_category_model_requirements = __esm(() => {
7480
7477
  variant: "low"
7481
7478
  },
7482
7479
  {
7483
- providers: ["kimi-for-coding", "moonshotai", "opencode-go", "opencode"],
7484
- model: "kimi-k3",
7480
+ providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
7481
+ model: "claude-opus-5-5",
7485
7482
  variant: "low"
7486
7483
  },
7487
7484
  {
7488
7485
  providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
7489
7486
  model: "claude-opus-4-6",
7490
- variant: "low"
7487
+ variant: "max"
7491
7488
  }
7492
7489
  ]
7493
7490
  }
@@ -8294,6 +8291,36 @@ var init_supplemental_entries = __esm(() => {
8294
8291
  output: 32768
8295
8292
  }
8296
8293
  },
8294
+ "grok-4.7": {
8295
+ id: "grok-4.7",
8296
+ family: "grok",
8297
+ reasoning: false,
8298
+ temperature: true,
8299
+ toolCall: true,
8300
+ modalities: {
8301
+ input: ["text", "image"],
8302
+ output: ["text"]
8303
+ },
8304
+ limit: {
8305
+ context: 500000,
8306
+ output: 32768
8307
+ }
8308
+ },
8309
+ "xai/grok-4.7": {
8310
+ id: "xai/grok-4.7",
8311
+ family: "grok",
8312
+ reasoning: false,
8313
+ temperature: true,
8314
+ toolCall: true,
8315
+ modalities: {
8316
+ input: ["text", "image"],
8317
+ output: ["text"]
8318
+ },
8319
+ limit: {
8320
+ context: 500000,
8321
+ output: 32768
8322
+ }
8323
+ },
8297
8324
  "xai/grok-build-0.1": {
8298
8325
  id: "xai/grok-build-0.1",
8299
8326
  family: "grok",
@@ -8323,6 +8350,36 @@ var init_supplemental_entries = __esm(() => {
8323
8350
  context: 256000,
8324
8351
  output: 32768
8325
8352
  }
8353
+ },
8354
+ "mimo-v2.6-pro": {
8355
+ id: "mimo-v2.6-pro",
8356
+ family: "mimo",
8357
+ reasoning: true,
8358
+ temperature: true,
8359
+ toolCall: true,
8360
+ modalities: {
8361
+ input: ["text", "image"],
8362
+ output: ["text"]
8363
+ },
8364
+ limit: {
8365
+ context: 1048576,
8366
+ output: 131072
8367
+ }
8368
+ },
8369
+ "xiaomi/mimo-v2.6-pro": {
8370
+ id: "xiaomi/mimo-v2.6-pro",
8371
+ family: "mimo",
8372
+ reasoning: true,
8373
+ temperature: true,
8374
+ toolCall: true,
8375
+ modalities: {
8376
+ input: ["text", "image"],
8377
+ output: ["text"]
8378
+ },
8379
+ limit: {
8380
+ context: 1048576,
8381
+ output: 131072
8382
+ }
8326
8383
  }
8327
8384
  };
8328
8385
  });
@@ -9296,21 +9353,21 @@ var init_openai_categories = __esm(() => {
9296
9353
  },
9297
9354
  {
9298
9355
  name: "quick",
9299
- config: { model: "kimi-for-coding/kimi-for-coding-highspeed" },
9356
+ config: { model: "openai/gpt-5.6-luna-fast", variant: "low" },
9300
9357
  description: "Trivial tasks - single file changes, typo fixes, simple modifications",
9301
9358
  callerGuidance: QUICK_CATEGORY_CALLER_GUIDANCE,
9302
9359
  promptAppend: QUICK_CATEGORY_PROMPT_APPEND
9303
9360
  },
9304
9361
  {
9305
9362
  name: "unspecified-low",
9306
- config: { model: "xai/grok-4.6", variant: "xhigh" },
9363
+ config: { model: "xiaomi/mimo-v2.6-pro", variant: "max" },
9307
9364
  description: "Tasks that don't fit other categories, low effort required",
9308
9365
  callerGuidance: UNSPECIFIED_LOW_CATEGORY_CALLER_GUIDANCE,
9309
9366
  promptAppend: UNSPECIFIED_LOW_CATEGORY_PROMPT_APPEND
9310
9367
  },
9311
9368
  {
9312
9369
  name: "unspecified-high",
9313
- config: { model: "openai/gpt-6-astra", variant: "high" },
9370
+ config: { model: "anthropic/claude-opus-5-5", variant: "max" },
9314
9371
  description: "Tasks that don't fit other categories, high effort required",
9315
9372
  callerGuidance: UNSPECIFIED_HIGH_CATEGORY_CALLER_GUIDANCE,
9316
9373
  promptAppend: UNSPECIFIED_HIGH_CATEGORY_PROMPT_APPEND,
@@ -64271,6 +64328,216 @@ var init_model_capabilities_generated = __esm(() => {
64271
64328
  context: 500000,
64272
64329
  output: 500000
64273
64330
  }
64331
+ },
64332
+ "claude-opus-5-5": {
64333
+ id: "claude-opus-5-5",
64334
+ family: "claude-opus",
64335
+ reasoning: true,
64336
+ temperature: false,
64337
+ toolCall: true,
64338
+ modalities: {
64339
+ input: [
64340
+ "text",
64341
+ "image",
64342
+ "pdf"
64343
+ ],
64344
+ output: [
64345
+ "text"
64346
+ ]
64347
+ },
64348
+ limit: {
64349
+ context: 1e6,
64350
+ output: 128000
64351
+ }
64352
+ },
64353
+ "claude-opus-5-5@default": {
64354
+ id: "claude-opus-5-5@default",
64355
+ family: "claude-opus",
64356
+ reasoning: true,
64357
+ temperature: false,
64358
+ toolCall: true,
64359
+ modalities: {
64360
+ input: [
64361
+ "text",
64362
+ "image",
64363
+ "pdf"
64364
+ ],
64365
+ output: [
64366
+ "text"
64367
+ ]
64368
+ },
64369
+ limit: {
64370
+ context: 1e6,
64371
+ output: 128000
64372
+ }
64373
+ },
64374
+ "anthropic/claude-opus-5.5": {
64375
+ id: "anthropic/claude-opus-5.5",
64376
+ family: "claude-opus",
64377
+ reasoning: true,
64378
+ temperature: true,
64379
+ toolCall: true,
64380
+ modalities: {
64381
+ input: [
64382
+ "text",
64383
+ "image",
64384
+ "pdf"
64385
+ ],
64386
+ output: [
64387
+ "text"
64388
+ ]
64389
+ },
64390
+ limit: {
64391
+ context: 1e6,
64392
+ output: 128000
64393
+ }
64394
+ },
64395
+ "au.anthropic.claude-opus-5-5": {
64396
+ id: "au.anthropic.claude-opus-5-5",
64397
+ family: "claude-opus",
64398
+ reasoning: true,
64399
+ temperature: false,
64400
+ toolCall: true,
64401
+ modalities: {
64402
+ input: [
64403
+ "text",
64404
+ "image",
64405
+ "pdf"
64406
+ ],
64407
+ output: [
64408
+ "text"
64409
+ ]
64410
+ },
64411
+ limit: {
64412
+ context: 1e6,
64413
+ output: 128000
64414
+ }
64415
+ },
64416
+ "anthropic.claude-opus-5-5": {
64417
+ id: "anthropic.claude-opus-5-5",
64418
+ family: "claude-opus",
64419
+ reasoning: true,
64420
+ temperature: false,
64421
+ toolCall: true,
64422
+ modalities: {
64423
+ input: [
64424
+ "text",
64425
+ "image",
64426
+ "pdf"
64427
+ ],
64428
+ output: [
64429
+ "text"
64430
+ ]
64431
+ },
64432
+ limit: {
64433
+ context: 1e6,
64434
+ output: 128000
64435
+ }
64436
+ },
64437
+ "eu.anthropic.claude-opus-5-5": {
64438
+ id: "eu.anthropic.claude-opus-5-5",
64439
+ family: "claude-opus",
64440
+ reasoning: true,
64441
+ temperature: false,
64442
+ toolCall: true,
64443
+ modalities: {
64444
+ input: [
64445
+ "text",
64446
+ "image",
64447
+ "pdf"
64448
+ ],
64449
+ output: [
64450
+ "text"
64451
+ ]
64452
+ },
64453
+ limit: {
64454
+ context: 1e6,
64455
+ output: 128000
64456
+ }
64457
+ },
64458
+ "global.anthropic.claude-opus-5-5": {
64459
+ id: "global.anthropic.claude-opus-5-5",
64460
+ family: "claude-opus",
64461
+ reasoning: true,
64462
+ temperature: false,
64463
+ toolCall: true,
64464
+ modalities: {
64465
+ input: [
64466
+ "text",
64467
+ "image",
64468
+ "pdf"
64469
+ ],
64470
+ output: [
64471
+ "text"
64472
+ ]
64473
+ },
64474
+ limit: {
64475
+ context: 1e6,
64476
+ output: 128000
64477
+ }
64478
+ },
64479
+ "jp.anthropic.claude-opus-5-5": {
64480
+ id: "jp.anthropic.claude-opus-5-5",
64481
+ family: "claude-opus",
64482
+ reasoning: true,
64483
+ temperature: false,
64484
+ toolCall: true,
64485
+ modalities: {
64486
+ input: [
64487
+ "text",
64488
+ "image",
64489
+ "pdf"
64490
+ ],
64491
+ output: [
64492
+ "text"
64493
+ ]
64494
+ },
64495
+ limit: {
64496
+ context: 1e6,
64497
+ output: 128000
64498
+ }
64499
+ },
64500
+ "us.anthropic.claude-opus-5-5": {
64501
+ id: "us.anthropic.claude-opus-5-5",
64502
+ family: "claude-opus",
64503
+ reasoning: true,
64504
+ temperature: false,
64505
+ toolCall: true,
64506
+ modalities: {
64507
+ input: [
64508
+ "text",
64509
+ "image",
64510
+ "pdf"
64511
+ ],
64512
+ output: [
64513
+ "text"
64514
+ ]
64515
+ },
64516
+ limit: {
64517
+ context: 1e6,
64518
+ output: 128000
64519
+ }
64520
+ },
64521
+ "anthropic/claude-opus-5-5": {
64522
+ id: "anthropic/claude-opus-5-5",
64523
+ family: "claude-opus",
64524
+ reasoning: true,
64525
+ temperature: false,
64526
+ toolCall: true,
64527
+ modalities: {
64528
+ input: [
64529
+ "text",
64530
+ "image",
64531
+ "pdf"
64532
+ ],
64533
+ output: [
64534
+ "text"
64535
+ ]
64536
+ },
64537
+ limit: {
64538
+ context: 1e6,
64539
+ output: 128000
64540
+ }
64274
64541
  }
64275
64542
  }
64276
64543
  };
@@ -73883,12 +74150,14 @@ var init_git_master = __esm(() => {
73883
74150
  });
73884
74151
 
73885
74152
  // packages/omo-config-core/src/schema/harness.ts
73886
- var HARNESS_IDS, OMO_CONFIG_HARNESS_IDS, OmoHarnessIdSchema;
74153
+ var HARNESS_IDS, OMO_CONFIG_HARNESS_IDS, OmoHarnessIdSchema, OMO_CONFIG_LEGACY_HARNESS_ALIASES, OMO_CONFIG_LEGACY_HARNESS_IDS;
73887
74154
  var init_harness = __esm(() => {
73888
74155
  init_zod();
73889
74156
  HARNESS_IDS = ["codex", "opencode", "omo"];
73890
- OMO_CONFIG_HARNESS_IDS = ["opencode", "senpi", "codex"];
74157
+ OMO_CONFIG_HARNESS_IDS = ["opencode", "native", "codex"];
73891
74158
  OmoHarnessIdSchema = _enum(OMO_CONFIG_HARNESS_IDS);
74159
+ OMO_CONFIG_LEGACY_HARNESS_ALIASES = { senpi: "native" };
74160
+ OMO_CONFIG_LEGACY_HARNESS_IDS = Object.keys(OMO_CONFIG_LEGACY_HARNESS_ALIASES);
73892
74161
  });
73893
74162
 
73894
74163
  // packages/omo-config-core/src/schema/memory.ts
@@ -74391,6 +74660,7 @@ var init_config = __esm(() => {
74391
74660
  telemetry: OmoTelemetrySettingsLayerSchema.optional(),
74392
74661
  disabled_skills: OmoDisabledSkillsSchema.optional(),
74393
74662
  "[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
74663
+ "[native]": OmoTypedHarnessConfigSchema.optional(),
74394
74664
  "[senpi]": OmoTypedHarnessConfigSchema.optional(),
74395
74665
  "[codex]": OmoTypedHarnessConfigSchema.optional()
74396
74666
  }).strict();
@@ -74409,6 +74679,7 @@ var init_config = __esm(() => {
74409
74679
  telemetry: OmoTelemetrySettingsSchema.optional(),
74410
74680
  disabled_skills: OmoDisabledSkillsSchema.optional(),
74411
74681
  "[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
74682
+ "[native]": OmoTypedHarnessConfigSchema.optional(),
74412
74683
  "[senpi]": OmoTypedHarnessConfigSchema.optional(),
74413
74684
  "[codex]": OmoTypedHarnessConfigSchema.optional(),
74414
74685
  profiles: record(string2(), OmoConfigProfileSchema).default({}),
@@ -74430,6 +74701,7 @@ var init_config = __esm(() => {
74430
74701
  telemetry: OmoTelemetrySettingsLayerSchema.optional(),
74431
74702
  disabled_skills: OmoDisabledSkillsSchema.optional(),
74432
74703
  "[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
74704
+ "[native]": OmoTypedHarnessConfigSchema.optional(),
74433
74705
  "[senpi]": OmoTypedHarnessConfigSchema.optional(),
74434
74706
  "[codex]": OmoTypedHarnessConfigSchema.optional(),
74435
74707
  profiles: record(string2(), OmoConfigProfileSchema).optional(),
@@ -74500,6 +74772,60 @@ var init_legacy_category_names = __esm(() => {
74500
74772
  LEGACY_CATEGORY_NAME_ALIASES = { deep: "deep-low" };
74501
74773
  });
74502
74774
 
74775
+ // packages/omo-config-core/src/schema/legacy-harness-names.ts
74776
+ function canonicalHarnessName(name) {
74777
+ return Object.hasOwn(OMO_CONFIG_LEGACY_HARNESS_ALIASES, name) ? OMO_CONFIG_LEGACY_HARNESS_ALIASES[name] : name;
74778
+ }
74779
+ function harnessBlockKey(harness) {
74780
+ return `[${harness}]`;
74781
+ }
74782
+ function legacyHarnessOfBlockKey(key) {
74783
+ if (!key.startsWith("[") || !key.endsWith("]"))
74784
+ return;
74785
+ const harness = key.slice(1, -1);
74786
+ return Object.hasOwn(OMO_CONFIG_LEGACY_HARNESS_ALIASES, harness) ? harness : undefined;
74787
+ }
74788
+ function isRecord10(value) {
74789
+ return typeof value === "object" && value !== null && !Array.isArray(value);
74790
+ }
74791
+ function canonicalizeBlocksIn(container, path, renames) {
74792
+ const result = {};
74793
+ for (const [key, value] of Object.entries(container)) {
74794
+ const legacyHarness = legacyHarnessOfBlockKey(key);
74795
+ if (legacyHarness === undefined) {
74796
+ result[key] = value;
74797
+ continue;
74798
+ }
74799
+ const canonical = harnessBlockKey(canonicalHarnessName(legacyHarness));
74800
+ const dropped = Object.hasOwn(container, canonical);
74801
+ renames.push({ canonical, dropped, legacy: key, path: [...path, key].join(".") });
74802
+ if (!dropped)
74803
+ result[canonical] = value;
74804
+ }
74805
+ return result;
74806
+ }
74807
+ function canonicalizeLegacyHarnessBlocks(document) {
74808
+ if (!isRecord10(document))
74809
+ return { document: {}, renames: [] };
74810
+ const renames = [];
74811
+ const canonicalized = canonicalizeBlocksIn(document, [], renames);
74812
+ const profiles = canonicalized["profiles"];
74813
+ if (isRecord10(profiles)) {
74814
+ const canonicalProfiles = {};
74815
+ for (const [name, profile] of Object.entries(profiles)) {
74816
+ canonicalProfiles[name] = isRecord10(profile) ? canonicalizeBlocksIn(profile, ["profiles", name], renames) : profile;
74817
+ }
74818
+ canonicalized["profiles"] = canonicalProfiles;
74819
+ }
74820
+ return { document: canonicalized, renames };
74821
+ }
74822
+ function hasLegacyHarnessBlocks(document) {
74823
+ return canonicalizeLegacyHarnessBlocks(document).renames.length > 0;
74824
+ }
74825
+ var init_legacy_harness_names = __esm(() => {
74826
+ init_harness();
74827
+ });
74828
+
74503
74829
  // packages/omo-config-core/src/schema/index.ts
74504
74830
  var init_schema = __esm(() => {
74505
74831
  init_agent();
@@ -74510,6 +74836,7 @@ var init_schema = __esm(() => {
74510
74836
  init_git_master();
74511
74837
  init_harness();
74512
74838
  init_legacy_category_names();
74839
+ init_legacy_harness_names();
74513
74840
  init_memory();
74514
74841
  init_model_catalog();
74515
74842
  init_model_profile();
@@ -74519,6 +74846,9 @@ var init_schema = __esm(() => {
74519
74846
  init_telemetry();
74520
74847
  });
74521
74848
 
74849
+ // packages/omo-config-core/src/loader/disabled-skills.ts
74850
+ var init_disabled_skills = () => {};
74851
+
74522
74852
  // packages/omo-config-core/src/loader/merge.ts
74523
74853
  function isUnsafeObjectKey2(key) {
74524
74854
  return DANGEROUS_KEYS2.has(key);
@@ -74693,7 +75023,13 @@ function withoutControlKeys(config) {
74693
75023
  function harnessLayer(config, harness) {
74694
75024
  if (harness === undefined)
74695
75025
  return {};
74696
- return toRecord(config[`[${harness}]`]) ?? {};
75026
+ const canonical = canonicalHarnessName(harness);
75027
+ const legacyKeys = Object.entries(OMO_CONFIG_LEGACY_HARNESS_ALIASES).filter(([, target]) => target === canonical).map(([legacy]) => harnessBlockKey(legacy));
75028
+ let layer = {};
75029
+ for (const key of [...legacyKeys, harnessBlockKey(canonical)]) {
75030
+ layer = mergeOmoConfigRecords(layer, toRecord(config[key]) ?? {});
75031
+ }
75032
+ return layer;
74697
75033
  }
74698
75034
  function resolveOmoConfigView(options) {
74699
75035
  const profiles = toRecord(options.config["profiles"]);
@@ -74723,7 +75059,7 @@ var HARNESS_KEYS;
74723
75059
  var init_resolution = __esm(() => {
74724
75060
  init_schema();
74725
75061
  init_merge();
74726
- HARNESS_KEYS = [...new Set([...HARNESS_IDS, ...OMO_CONFIG_HARNESS_IDS])].map((harness) => `[${harness}]`);
75062
+ HARNESS_KEYS = [...new Set([...HARNESS_IDS, ...OMO_CONFIG_HARNESS_IDS, ...OMO_CONFIG_LEGACY_HARNESS_IDS])].map((harness) => harnessBlockKey(harness));
74727
75063
  });
74728
75064
 
74729
75065
  // packages/omo-config-core/src/loader/loader.ts
@@ -74744,6 +75080,7 @@ function parseJsoncSafe2(content) {
74744
75080
  function stripResolutionControlKeys(config) {
74745
75081
  const {
74746
75082
  "[codex]": _codex,
75083
+ "[native]": _native,
74747
75084
  "[opencode]": _opencode,
74748
75085
  "[senpi]": _senpi,
74749
75086
  profiles: _profiles,
@@ -74769,21 +75106,21 @@ function hasUnsafeUnrecognizedKey(issues) {
74769
75106
  function hasTamperedPrototype(value) {
74770
75107
  if (Array.isArray(value))
74771
75108
  return value.some((entry) => hasTamperedPrototype(entry));
74772
- if (!isRecord10(value))
75109
+ if (!isRecord11(value))
74773
75110
  return false;
74774
75111
  const prototype = Object.getPrototypeOf(value);
74775
75112
  if (prototype !== Object.prototype && prototype !== null)
74776
75113
  return true;
74777
75114
  return Object.values(value).some((entry) => hasTamperedPrototype(entry));
74778
75115
  }
74779
- function isRecord10(value) {
75116
+ function isRecord11(value) {
74780
75117
  return typeof value === "object" && value !== null && !Array.isArray(value);
74781
75118
  }
74782
75119
  function containerAt(record, path) {
74783
75120
  let container = record;
74784
75121
  for (const segment of path) {
74785
75122
  const next = container[segment];
74786
- if (!isRecord10(next))
75123
+ if (!isRecord11(next))
74787
75124
  return null;
74788
75125
  container = next;
74789
75126
  }
@@ -74894,6 +75231,15 @@ function legacyCategoryDiagnostic(path, renames) {
74894
75231
  issuePaths: renames.map((rename) => rename.path)
74895
75232
  };
74896
75233
  }
75234
+ function legacyHarnessDiagnostic(path, renames) {
75235
+ const detail = renames.map((rename) => rename.dropped ? `${rename.path} ignored because ${rename.canonical} is also configured` : `${rename.path} renamed to ${rename.canonical}`).join(", ");
75236
+ return {
75237
+ kind: "deprecated-keys",
75238
+ message: `Deprecated harness block in ${path}: ${detail}. Rename it; the alias is removed in a future release.`,
75239
+ path,
75240
+ issuePaths: renames.map((rename) => rename.path)
75241
+ };
75242
+ }
74897
75243
  function loadOmoConfig(options = {}) {
74898
75244
  const fileSystem = options.fileSystem ?? DEFAULT_READ_FILE_SYSTEM;
74899
75245
  const cwd = options.cwd ?? process.cwd();
@@ -74916,8 +75262,12 @@ function loadOmoConfig(options = {}) {
74916
75262
  if (canonicalized.renames.length > 0) {
74917
75263
  diagnostics.push(legacyCategoryDiagnostic(candidate.path, canonicalized.renames));
74918
75264
  }
74919
- layers.push({ config: canonicalized.document, source: loaded.source });
74920
- merged = mergeOmoConfigRecords(merged, canonicalized.document);
75265
+ const harnessCanonicalized = canonicalizeLegacyHarnessBlocks(canonicalized.document);
75266
+ if (harnessCanonicalized.renames.length > 0) {
75267
+ diagnostics.push(legacyHarnessDiagnostic(candidate.path, harnessCanonicalized.renames));
75268
+ }
75269
+ layers.push({ config: harnessCanonicalized.document, source: loaded.source });
75270
+ merged = mergeOmoConfigRecords(merged, harnessCanonicalized.document);
74921
75271
  }
74922
75272
  }
74923
75273
  const requestedProfile = resolveOmoProfileName({
@@ -74965,6 +75315,7 @@ var init_loader2 = __esm(() => {
74965
75315
 
74966
75316
  // packages/omo-config-core/src/loader/index.ts
74967
75317
  var init_loader3 = __esm(() => {
75318
+ init_disabled_skills();
74968
75319
  init_loader2();
74969
75320
  init_merge();
74970
75321
  init_paths();
@@ -77282,14 +77633,14 @@ function transformConfigJsoncSources(input) {
77282
77633
  const omo = recordAt(legacy, "[omo]");
77283
77634
  const senpi = recordAt(legacy, "[senpi]");
77284
77635
  const history = legacyMigrationHistory(input.discovered, input.sources);
77285
- const diagnostics = omo !== undefined && senpi !== undefined ? ["conflict: [senpi] legacy [omo] kept [senpi]"] : [];
77636
+ const diagnostics = omo !== undefined && senpi !== undefined ? ["conflict: [native] legacy [omo] kept [native]"] : [];
77286
77637
  return {
77287
77638
  diagnostics,
77288
77639
  document: {
77289
77640
  $schema: OMO_SCHEMA_URL,
77290
77641
  ...recordAt(legacy, "[opencode]") === undefined ? {} : { "[opencode]": recordAt(legacy, "[opencode]") },
77291
77642
  ...recordAt(legacy, "[codex]") === undefined ? {} : { "[codex]": recordAt(legacy, "[codex]") },
77292
- ...senpi === undefined && omo === undefined ? {} : { "[senpi]": senpi ?? omo },
77643
+ ...senpi === undefined && omo === undefined ? {} : { "[native]": senpi ?? omo },
77293
77644
  ...Object.keys(history).length === 0 ? {} : { legacy_migrations: history }
77294
77645
  }
77295
77646
  };
@@ -77553,7 +77904,7 @@ function normalizeTypedBlock(value, path, diagnostics, recurseProfiles) {
77553
77904
  }
77554
77905
  if (result["models"] !== undefined)
77555
77906
  result["models"] = normalizeCatalog(result["models"]);
77556
- for (const harness of ["[senpi]", "[codex]"]) {
77907
+ for (const harness of ["[senpi]", "[native]", "[codex]"]) {
77557
77908
  if (result[harness] !== undefined)
77558
77909
  result[harness] = normalizeTypedBlock(result[harness], [...path, harness], diagnostics, false);
77559
77910
  }
@@ -77607,6 +77958,76 @@ var init_category_deep_split = __esm(() => {
77607
77958
  init_src4();
77608
77959
  });
77609
77960
 
77961
+ // packages/omo-opencode/src/config-migration/harness-native-rename.ts
77962
+ function transformHarnessNativeRename(document) {
77963
+ const { document: canonicalized, renames } = canonicalizeLegacyHarnessBlocks(document);
77964
+ return {
77965
+ diagnostics: renames.map((rename) => rename.dropped ? `${rename.path} removed: ${rename.canonical} is already configured` : `${rename.path} renamed to ${rename.canonical}`),
77966
+ document: canonicalized
77967
+ };
77968
+ }
77969
+ var HARNESS_NATIVE_RENAME_MIGRATION_ID = "2026-09-harness-native-rename";
77970
+ var init_harness_native_rename = __esm(() => {
77971
+ init_src4();
77972
+ });
77973
+
77974
+ // packages/omo-opencode/src/config-migration/subscription-provider-rename.ts
77975
+ function renameProviderId(providerId) {
77976
+ return LEGACY_PROVIDER_IDS[providerId];
77977
+ }
77978
+ function renameModelReference(modelReference) {
77979
+ const providerSeparator = modelReference.indexOf("/");
77980
+ if (providerSeparator <= 0)
77981
+ return;
77982
+ const canonicalProvider = renameProviderId(modelReference.slice(0, providerSeparator));
77983
+ if (canonicalProvider === undefined)
77984
+ return;
77985
+ const modelPartVerbatim = modelReference.slice(providerSeparator);
77986
+ return `${canonicalProvider}${modelPartVerbatim}`;
77987
+ }
77988
+ function rewriteValue(value, path, rewrites) {
77989
+ if (typeof value === "string") {
77990
+ const renamed = renameModelReference(value) ?? renameProviderId(value);
77991
+ if (renamed === undefined)
77992
+ return value;
77993
+ rewrites.push({ from: value, path, to: renamed });
77994
+ return renamed;
77995
+ }
77996
+ if (Array.isArray(value))
77997
+ return value.map((entry, index) => rewriteValue(entry, `${path}[${index}]`, rewrites));
77998
+ if (value !== null && typeof value === "object") {
77999
+ return Object.fromEntries(Object.entries(value).map(([key, entry]) => {
78000
+ const canonicalKey = renameModelReference(key) ?? renameProviderId(key);
78001
+ const nextKey = canonicalKey ?? key;
78002
+ if (canonicalKey !== undefined)
78003
+ rewrites.push({ from: key, path: `${path}.${key}`, to: canonicalKey });
78004
+ return [nextKey, rewriteValue(entry, `${path}.${nextKey}`, rewrites)];
78005
+ }));
78006
+ }
78007
+ return value;
78008
+ }
78009
+ function hasLegacySubscriptionProviderIds(document) {
78010
+ const rewrites = [];
78011
+ rewriteValue(document, "$", rewrites);
78012
+ return rewrites.length > 0;
78013
+ }
78014
+ function transformSubscriptionProviderRename(document) {
78015
+ const rewrites = [];
78016
+ const rewritten = rewriteValue(document, "$", rewrites);
78017
+ const next = rewritten !== null && typeof rewritten === "object" && !Array.isArray(rewritten) ? rewritten : {};
78018
+ return {
78019
+ diagnostics: rewrites.map((rewrite) => `${rewrite.path}: ${rewrite.from} renamed to ${rewrite.to}`),
78020
+ document: next
78021
+ };
78022
+ }
78023
+ var SUBSCRIPTION_PROVIDER_RENAME_MIGRATION_ID = "2026-09-subscription-provider-rename", LEGACY_PROVIDER_IDS;
78024
+ var init_subscription_provider_rename = __esm(() => {
78025
+ LEGACY_PROVIDER_IDS = Object.freeze({
78026
+ "claude-sdk-oauth": "anthropic-subscription",
78027
+ "openai-codex": "chatgpt-subscription"
78028
+ });
78029
+ });
78030
+
77610
78031
  // packages/omo-opencode/src/config-migration/migration-plans.ts
77611
78032
  function backupTimestamp(value) {
77612
78033
  return value ?? new Date().toISOString().replace(/[:.]/g, "-");
@@ -77685,6 +78106,30 @@ function categoryDeepSplitPlan(targetPath) {
77685
78106
  transform: inspect
77686
78107
  };
77687
78108
  }
78109
+ function harnessNativeRenamePlan(targetPath) {
78110
+ const inspect = (sources) => transformHarnessNativeRename(sources[0]?.value);
78111
+ return {
78112
+ id: HARNESS_NATIVE_RENAME_MIGRATION_ID,
78113
+ inspect,
78114
+ mode: "replace-target",
78115
+ shouldRun: hasLegacyHarnessBlocks,
78116
+ sources: [],
78117
+ targetPath,
78118
+ transform: inspect
78119
+ };
78120
+ }
78121
+ function subscriptionProviderRenamePlan(targetPath) {
78122
+ const inspect = (sources) => transformSubscriptionProviderRename(sources[0]?.value);
78123
+ return {
78124
+ id: SUBSCRIPTION_PROVIDER_RENAME_MIGRATION_ID,
78125
+ inspect,
78126
+ mode: "replace-target",
78127
+ shouldRun: hasLegacySubscriptionProviderIds,
78128
+ sources: [],
78129
+ targetPath,
78130
+ transform: inspect
78131
+ };
78132
+ }
77688
78133
  function existingOmoConfigPath(directory, options) {
77689
78134
  const fileSystem = discoveryFileSystem(options);
77690
78135
  for (const fileName of ["omo.jsonc", "omo.json"]) {
@@ -77748,7 +78193,9 @@ function createLegacyConfigMigrationPlans(options) {
77748
78193
  return [
77749
78194
  ...legacyPlans,
77750
78195
  ...inPlaceTargets.map(reasoningPlan),
77751
- ...inPlaceTargets.map(categoryDeepSplitPlan)
78196
+ ...inPlaceTargets.map(categoryDeepSplitPlan),
78197
+ ...inPlaceTargets.map(harnessNativeRenamePlan),
78198
+ ...inPlaceTargets.map(subscriptionProviderRenamePlan)
77752
78199
  ];
77753
78200
  }
77754
78201
  var init_migration_plans = __esm(() => {
@@ -77759,6 +78206,8 @@ var init_migration_plans = __esm(() => {
77759
78206
  init_transform_opencode();
77760
78207
  init_reasoning_unification();
77761
78208
  init_category_deep_split();
78209
+ init_harness_native_rename();
78210
+ init_subscription_provider_rename();
77762
78211
  init_src4();
77763
78212
  });
77764
78213
 
@@ -78543,7 +78992,7 @@ function shouldRetainLine(line, cutoffMs) {
78543
78992
  function parseDiagnosticLine(line) {
78544
78993
  try {
78545
78994
  const parsed = JSON.parse(line);
78546
- if (!isRecord12(parsed)) {
78995
+ if (!isRecord13(parsed)) {
78547
78996
  return null;
78548
78997
  }
78549
78998
  return parsed;
@@ -78554,7 +79003,7 @@ function parseDiagnosticLine(line) {
78554
79003
  throw error;
78555
79004
  }
78556
79005
  }
78557
- function isRecord12(value) {
79006
+ function isRecord13(value) {
78558
79007
  return value !== null && typeof value === "object" && !Array.isArray(value);
78559
79008
  }
78560
79009
  function trimToMaxBytes(lines) {
@@ -86044,7 +86493,7 @@ function coerceBool(value) {
86044
86493
  function coerceString(value) {
86045
86494
  return typeof value == "string" ? value : undefined;
86046
86495
  }
86047
- function isRecord13(value) {
86496
+ function isRecord14(value) {
86048
86497
  return typeof value == "object" && value !== null && !Array.isArray(value);
86049
86498
  }
86050
86499
  function toRfc3339(timestamp) {
@@ -86066,7 +86515,7 @@ function relocateInto(properties, key, value) {
86066
86515
  properties[key] = value;
86067
86516
  }
86068
86517
  function buildV1Event(message) {
86069
- const sourceProperties = isRecord13(message.properties) ? message.properties : {};
86518
+ const sourceProperties = isRecord14(message.properties) ? message.properties : {};
86070
86519
  const properties = {
86071
86520
  ...sourceProperties
86072
86521
  };
@@ -88211,7 +88660,7 @@ var package_default2;
88211
88660
  var init_package2 = __esm(() => {
88212
88661
  package_default2 = {
88213
88662
  name: "@oh-my-opencode/omo-codex",
88214
- version: "5.0.0-beta.82",
88663
+ version: "5.0.0-beta.84",
88215
88664
  type: "module",
88216
88665
  private: true,
88217
88666
  description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
@@ -91386,8 +91835,11 @@ function formatConfigSummary(config) {
91386
91835
  if (config.hasCodex) {
91387
91836
  lines.push(` ${SYMBOLS.info} Codex autonomous mode: ${config.codexAutonomous ? "enabled" : "disabled"}`);
91388
91837
  }
91389
- if (config.hasSenpi) {
91390
- lines.push(` ${SYMBOLS.info} Senpi adapter: enabled`);
91838
+ if (config.hasNative) {
91839
+ lines.push(` ${SYMBOLS.info} OmO Native: installing from omo-ai@beta`);
91840
+ }
91841
+ if (config.hasNativeDev) {
91842
+ lines.push(` ${SYMBOLS.info} OmO Native development adapter: enabled`);
91391
91843
  }
91392
91844
  if (!config.hasOpenCode)
91393
91845
  return lines.join(`
@@ -91544,7 +91996,8 @@ function argsToConfig(args) {
91544
91996
  const platform = resolvePlatform(args);
91545
91997
  const hasOpenCode = platform === "opencode" || platform === "both";
91546
91998
  const hasCodex = platform === "codex" || platform === "both";
91547
- const hasSenpi = platform === "senpi";
91999
+ const hasNative = platform === "native";
92000
+ const hasNativeDev = platform === "native-dev";
91548
92001
  return {
91549
92002
  platform,
91550
92003
  hasOpenCode,
@@ -91554,7 +92007,8 @@ function argsToConfig(args) {
91554
92007
  hasGemini: hasOpenCode && args.gemini === "yes",
91555
92008
  hasCopilot: hasOpenCode && args.copilot === "yes",
91556
92009
  hasCodex,
91557
- hasSenpi,
92010
+ hasNative,
92011
+ hasNativeDev,
91558
92012
  hasOpencodeZen: hasOpenCode && args.opencodeZen === "yes",
91559
92013
  hasZaiCodingPlan: hasOpenCode && args.zaiCodingPlan === "yes",
91560
92014
  hasKimiForCoding: hasOpenCode && args.kimiForCoding === "yes",
@@ -94278,10 +94732,10 @@ function readCatalogMultiAgentVersion(model, cachePath) {
94278
94732
  } catch {
94279
94733
  return null;
94280
94734
  }
94281
- if (!isRecord11(cache) || !Array.isArray(cache.models))
94735
+ if (!isRecord12(cache) || !Array.isArray(cache.models))
94282
94736
  return null;
94283
94737
  for (const entry of cache.models) {
94284
- if (!isRecord11(entry))
94738
+ if (!isRecord12(entry))
94285
94739
  continue;
94286
94740
  if (entry.slug !== model && entry.id !== model)
94287
94741
  continue;
@@ -94306,7 +94760,7 @@ function readRootModelCatalogPath(config) {
94306
94760
  const single = config.match(/^\s*model_catalog_json\s*=\s*'([^']+)'/m);
94307
94761
  return single?.[1] ?? null;
94308
94762
  }
94309
- function isRecord11(value) {
94763
+ function isRecord12(value) {
94310
94764
  return typeof value === "object" && value !== null && !Array.isArray(value);
94311
94765
  }
94312
94766
  function removeFeatureFlagSetting(config, featureName) {
@@ -97115,7 +97569,7 @@ async function readSettings(settingsPath) {
97115
97569
  throw error;
97116
97570
  }
97117
97571
  const parsed = JSON.parse(raw);
97118
- if (!isRecord14(parsed))
97572
+ if (!isRecord15(parsed))
97119
97573
  throw new Error(`${settingsPath} must contain a JSON object`);
97120
97574
  return parsed;
97121
97575
  }
@@ -97176,7 +97630,7 @@ async function nextBackupPath(settingsPath) {
97176
97630
  function timestampForBackup() {
97177
97631
  return new Date().toISOString().replace(/[-:.]/g, "");
97178
97632
  }
97179
- function isRecord14(value) {
97633
+ function isRecord15(value) {
97180
97634
  return typeof value === "object" && value !== null && !Array.isArray(value);
97181
97635
  }
97182
97636
  async function readPackageName(packagePath) {
@@ -97196,7 +97650,7 @@ async function readPackageName(packagePath) {
97196
97650
  return;
97197
97651
  throw error;
97198
97652
  }
97199
- return isRecord14(parsed) && typeof parsed.name === "string" ? parsed.name : undefined;
97653
+ return isRecord15(parsed) && typeof parsed.name === "string" ? parsed.name : undefined;
97200
97654
  }
97201
97655
  async function fileExists(path) {
97202
97656
  try {
@@ -97220,6 +97674,7 @@ var REQUIRED_PLUGIN_ARTIFACTS = [
97220
97674
  join61("extensions", "memory-run-supervisor.mjs"),
97221
97675
  ...PERSONA_ASSET_FILES.map((filename) => join61("extensions", filename)),
97222
97676
  join61("skills", "ast-grep", "SKILL.md"),
97677
+ join61("skills", "browser", "SKILL.md"),
97223
97678
  join61("skills", "coding-agent-sessions", "SKILL.md"),
97224
97679
  join61("skills", "debugging", "SKILL.md"),
97225
97680
  join61("skills", "frontend", "SKILL.md"),
@@ -97311,7 +97766,7 @@ async function verifyAstGrepRuntimeIntegrity(pluginPath, platform) {
97311
97766
  }
97312
97767
  }
97313
97768
  function isAstGrepRuntimeManifest(value) {
97314
- if (!isRecord14(value))
97769
+ if (!isRecord15(value))
97315
97770
  return false;
97316
97771
  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));
97317
97772
  }
@@ -97401,23 +97856,88 @@ function findRepoRoot2(importerDir) {
97401
97856
  function fileExistsSync(path) {
97402
97857
  return existsSync30(path);
97403
97858
  }
97404
- // packages/omo-opencode/src/cli/senpi-edition-hint.ts
97405
- var SENPI_EDITION_INSTALL_COMMAND = "bun add -g omo-ai@beta";
97406
- 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";
97407
- var SENPI_EDITION_HINT_TITLE = "Standalone Senpi edition (beta)";
97859
+ // packages/omo-opencode/src/cli/install-native-dev/index.ts
97860
+ async function runNativeDevInstaller(options) {
97861
+ return runSenpiInstaller(options);
97862
+ }
97863
+
97864
+ // packages/omo-opencode/src/cli/install-native/plan.ts
97865
+ var NATIVE_PACKAGE_SPEC = "omo-ai@beta";
97866
+ var NATIVE_SETUP_COMMAND = "omo setup";
97867
+ 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.";
97868
+ var PLANS = {
97869
+ bun: { packageManager: "bun", command: "bun", args: ["add", "-g", NATIVE_PACKAGE_SPEC] },
97870
+ npm: { packageManager: "npm", command: "npm", args: ["i", "-g", NATIVE_PACKAGE_SPEC] }
97871
+ };
97872
+ function resolveNativeInstallPlan(bunAvailable) {
97873
+ return bunAvailable ? PLANS.bun : PLANS.npm;
97874
+ }
97875
+ function formatNativeInstallCommand(plan) {
97876
+ return [plan.command, ...plan.args].join(" ");
97877
+ }
97878
+ // packages/omo-opencode/src/cli/install-native/run-native-install.ts
97879
+ init_bun_which_shim();
97880
+ init_spawn_with_windows_hide();
97881
+ function describeExit(plan, result) {
97882
+ const stderr = result.stderr?.trim();
97883
+ const head = `${plan.packageManager} exited with code ${result.exitCode}`;
97884
+ return stderr ? `${head}: ${stderr.split(`
97885
+ `).slice(-3).join(" ")}` : head;
97886
+ }
97887
+ async function runNativeInstall(dependencies = defaultNativeInstallDependencies()) {
97888
+ const plan = resolveNativeInstallPlan(await dependencies.isBunAvailable());
97889
+ const notes = plan.packageManager === "npm" ? [NATIVE_RECOMMENDED_RUNTIME_NOTE] : [];
97890
+ const manualCommand = formatNativeInstallCommand(plan);
97891
+ try {
97892
+ const result = await dependencies.spawn(plan.command, plan.args);
97893
+ if (result.exitCode === 0)
97894
+ return { ok: true, plan, notes };
97895
+ return { ok: false, plan, notes, failure: { reason: describeExit(plan, result), manualCommand } };
97896
+ } catch (error) {
97897
+ const reason = error instanceof Error ? error.message : String(error);
97898
+ return { ok: false, plan, notes, failure: { reason, manualCommand } };
97899
+ }
97900
+ }
97901
+ function nativeInstallSuccessLine() {
97902
+ return `OmO Native installed. Run ${NATIVE_SETUP_COMMAND} to finish onboarding.`;
97903
+ }
97904
+ function nativeInstallFailureLines(failure) {
97905
+ return [
97906
+ `OmO Native install failed: ${failure.reason}`,
97907
+ `Install it yourself with: ${failure.manualCommand}`,
97908
+ `Then run ${NATIVE_SETUP_COMMAND}.`
97909
+ ];
97910
+ }
97911
+ function defaultNativeInstallDependencies() {
97912
+ return {
97913
+ isBunAvailable: () => bunWhich("bun") !== null,
97914
+ spawn: async (command, args) => {
97915
+ const proc = spawnWithWindowsHide([command, ...args], {
97916
+ env: process.env,
97917
+ stdout: "inherit",
97918
+ stderr: "inherit"
97919
+ });
97920
+ return { exitCode: await proc.exited };
97921
+ }
97922
+ };
97923
+ }
97924
+ // packages/omo-opencode/src/cli/native-edition-hint.ts
97925
+ var NATIVE_EDITION_INSTALL_COMMAND = "bun add -g omo-ai@beta";
97926
+ 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";
97927
+ var NATIVE_EDITION_HINT_TITLE = "OmO Native (beta)";
97408
97928
  var PLAIN_PAINT = {
97409
97929
  command: (text) => text,
97410
97930
  link: (text) => text
97411
97931
  };
97412
- function shouldShowSenpiEditionHint(config) {
97413
- return !config.hasSenpi;
97932
+ function shouldShowNativeEditionHint(config) {
97933
+ return !config.hasNative && !config.hasNativeDev;
97414
97934
  }
97415
- function senpiEditionHintLines(paint = PLAIN_PAINT) {
97935
+ function nativeEditionHintLines(paint = PLAIN_PAINT) {
97416
97936
  return [
97417
- `omo also ships as a standalone Senpi edition: one ${paint.command("omo")} command, no OpenCode host required.`,
97418
- `Try it next to this install: ${paint.command(SENPI_EDITION_INSTALL_COMMAND)}, then run ${paint.command("omo")}.`,
97937
+ `omo also ships as OmO Native: the same omo as one ${paint.command("omo")} command, with no OpenCode host required.`,
97938
+ `Try it next to this install: ${paint.command(NATIVE_EDITION_INSTALL_COMMAND)}, then run ${paint.command("omo")}.`,
97419
97939
  "This install keeps working as-is.",
97420
- `Guide: ${paint.link(SENPI_EDITION_GUIDE_URL)}`
97940
+ `Guide: ${paint.link(NATIVE_EDITION_GUIDE_URL)}`
97421
97941
  ];
97422
97942
  }
97423
97943
 
@@ -97432,7 +97952,8 @@ var PLATFORM_REPOSITORIES = {
97432
97952
  opencode: ["code-yeongyu/oh-my-openagent"],
97433
97953
  codex: STAR_REPOSITORIES,
97434
97954
  both: STAR_REPOSITORIES,
97435
- senpi: STAR_REPOSITORIES
97955
+ native: STAR_REPOSITORIES,
97956
+ "native-dev": STAR_REPOSITORIES
97436
97957
  };
97437
97958
  var execFileAsync2 = promisify3(execFile4);
97438
97959
  async function runGitHubStarCommand(repository) {
@@ -97934,14 +98455,27 @@ async function runCliInstaller(args, version) {
97934
98455
  }
97935
98456
  console.log();
97936
98457
  }
97937
- if (config.hasSenpi) {
97938
- printInfo("Installing Senpi harness adapter...");
98458
+ if (config.hasNative) {
98459
+ printInfo("Installing OmO Native...");
98460
+ const outcome = await runNativeInstall();
98461
+ if (outcome.failure) {
98462
+ for (const line of nativeInstallFailureLines(outcome.failure))
98463
+ printError(line);
98464
+ return 1;
98465
+ }
98466
+ for (const note of outcome.notes)
98467
+ printInfo(note);
98468
+ printSuccess(nativeInstallSuccessLine());
98469
+ console.log();
98470
+ }
98471
+ if (config.hasNativeDev) {
98472
+ printInfo("Installing the OmO Native development adapter...");
97939
98473
  try {
97940
- const senpiResult = await runSenpiInstaller();
97941
- printSuccess(`Senpi adapter installed ${SYMBOLS.arrow} ${import_picocolors3.default.dim(senpiResult.settingsPath)}`);
98474
+ const nativeDevResult = await runNativeDevInstaller();
98475
+ printSuccess(`OmO Native development adapter installed ${SYMBOLS.arrow} ${import_picocolors3.default.dim(nativeDevResult.settingsPath)}`);
97942
98476
  } catch (error) {
97943
98477
  const message = error instanceof Error ? error.message : String(error);
97944
- printError(`Senpi install failed: ${message}`);
98478
+ printError(`OmO Native development adapter install failed: ${message}`);
97945
98479
  return 1;
97946
98480
  }
97947
98481
  console.log();
@@ -97952,9 +98486,9 @@ async function runCliInstaller(args, version) {
97952
98486
  printBox(`${import_picocolors3.default.bold("Pro Tip:")} Include ${import_picocolors3.default.cyan("ultrawork")} (or ${import_picocolors3.default.cyan("ulw")}) in your prompt.
97953
98487
  ` + `All features work like magic-parallel agents, background tasks,
97954
98488
  ` + `deep exploration, and relentless execution until completion.`, "The Magic Word");
97955
- if (shouldShowSenpiEditionHint(config)) {
97956
- printInfo(import_picocolors3.default.bold(SENPI_EDITION_HINT_TITLE));
97957
- for (const line of senpiEditionHintLines({ command: import_picocolors3.default.cyan, link: import_picocolors3.default.underline })) {
98489
+ if (shouldShowNativeEditionHint(config)) {
98490
+ printInfo(import_picocolors3.default.bold(NATIVE_EDITION_HINT_TITLE));
98491
+ for (const line of nativeEditionHintLines({ command: import_picocolors3.default.cyan, link: import_picocolors3.default.underline })) {
97958
98492
  console.log(` ${line}`);
97959
98493
  }
97960
98494
  console.log();
@@ -99094,16 +99628,20 @@ var import_picocolors4 = __toESM(require_picocolors(), 1);
99094
99628
  // packages/omo-opencode/src/cli/tui-install-prompts.ts
99095
99629
  init_model_fallback();
99096
99630
 
99097
- // packages/omo-opencode/src/cli/senpi-platform-flag.ts
99098
- var SENPI_PLATFORM_ENV_FLAG = "OMO_ENABLE_SENPI_PLATFORM";
99099
- function isSenpiPlatformEnabled(env = process.env) {
99100
- const value = env[SENPI_PLATFORM_ENV_FLAG]?.trim().toLowerCase();
99101
- return value === "1" || value === "true";
99631
+ // packages/omo-opencode/src/cli/native-dev-platform-flag.ts
99632
+ var NATIVE_DEV_PLATFORM_ENV_FLAG = "OMO_ENABLE_NATIVE_DEV_PLATFORM";
99633
+ var LEGACY_NATIVE_DEV_PLATFORM_ENV_FLAG = "OMO_ENABLE_SENPI_PLATFORM";
99634
+ function isTruthy(value) {
99635
+ const normalized = value?.trim().toLowerCase();
99636
+ return normalized === "1" || normalized === "true";
99637
+ }
99638
+ function isNativeDevPlatformEnabled(env = process.env) {
99639
+ return isTruthy(env[NATIVE_DEV_PLATFORM_ENV_FLAG]) || isTruthy(env[LEGACY_NATIVE_DEV_PLATFORM_ENV_FLAG]);
99102
99640
  }
99103
99641
  function availableInstallPlatforms(env = process.env) {
99104
- const platforms = ["opencode", "codex", "both"];
99105
- if (isSenpiPlatformEnabled(env))
99106
- platforms.push("senpi");
99642
+ const platforms = ["opencode", "codex", "both", "native"];
99643
+ if (isNativeDevPlatformEnabled(env))
99644
+ platforms.push("native-dev");
99107
99645
  return platforms;
99108
99646
  }
99109
99647
 
@@ -99126,10 +99664,15 @@ async function promptInstallPlatform(initialValue = "opencode") {
99126
99664
  const options = [
99127
99665
  { value: "opencode", label: "OpenCode", hint: "Install OpenCode plugin only" },
99128
99666
  { value: "codex", label: "Codex", hint: "Install Codex harness adapter only" },
99129
- { value: "both", label: "Both", hint: "Install OpenCode plugin and Codex adapter" }
99667
+ { value: "both", label: "Both", hint: "Install OpenCode plugin and Codex adapter" },
99668
+ { value: "native", label: "OmO Native", hint: "Install the standalone omo command (no host required)" }
99130
99669
  ];
99131
- if (isSenpiPlatformEnabled()) {
99132
- options.push({ value: "senpi", label: "Senpi", hint: "Install Senpi harness adapter only" });
99670
+ if (isNativeDevPlatformEnabled()) {
99671
+ options.push({
99672
+ value: "native-dev",
99673
+ label: "OmO Native (development adapter)",
99674
+ hint: "Register this checkout into a local engine install"
99675
+ });
99133
99676
  }
99134
99677
  return selectOrCancel({
99135
99678
  message: "Which platform do you want to install?",
@@ -99140,7 +99683,8 @@ async function promptInstallPlatform(initialValue = "opencode") {
99140
99683
  async function promptInstallConfig(detected, platform, codexAutonomousOverride) {
99141
99684
  const hasOpenCode = platform === "opencode" || platform === "both";
99142
99685
  const hasCodex = platform === "codex" || platform === "both";
99143
- const hasSenpi = platform === "senpi";
99686
+ const hasNative = platform === "native";
99687
+ const hasNativeDev = platform === "native-dev";
99144
99688
  const codexAutonomous = await resolveCodexAutonomous(hasCodex, codexAutonomousOverride);
99145
99689
  if (codexAutonomous === null)
99146
99690
  return null;
@@ -99154,7 +99698,8 @@ async function promptInstallConfig(detected, platform, codexAutonomousOverride)
99154
99698
  hasGemini: false,
99155
99699
  hasCopilot: false,
99156
99700
  hasCodex,
99157
- hasSenpi,
99701
+ hasNative,
99702
+ hasNativeDev,
99158
99703
  hasOpencodeZen: false,
99159
99704
  hasZaiCodingPlan: false,
99160
99705
  hasKimiForCoding: false,
@@ -99297,7 +99842,8 @@ async function promptInstallConfig(detected, platform, codexAutonomousOverride)
99297
99842
  hasGemini: gemini === "yes",
99298
99843
  hasCopilot: copilot === "yes",
99299
99844
  hasCodex,
99300
- hasSenpi,
99845
+ hasNative,
99846
+ hasNativeDev,
99301
99847
  hasOpencodeZen: opencodeZen === "yes",
99302
99848
  hasZaiCodingPlan: zaiCodingPlan === "yes",
99303
99849
  hasKimiForCoding: kimiForCoding === "yes",
@@ -99428,15 +99974,29 @@ async function runTuiInstaller(args, version) {
99428
99974
  log4.info("The Codex harness is NOT installed. Fix the error above, then re-run: bunx oh-my-openagent install --platform=codex");
99429
99975
  }
99430
99976
  }
99431
- if (config.hasSenpi) {
99432
- spinner2.start("Installing Senpi harness adapter");
99977
+ if (config.hasNative) {
99978
+ spinner2.start("Installing OmO Native");
99979
+ const outcome = await runNativeInstall();
99980
+ if (outcome.failure) {
99981
+ spinner2.stop(`OmO Native install failed ${import_picocolors4.default.yellow("[!]")}`);
99982
+ for (const line of nativeInstallFailureLines(outcome.failure))
99983
+ log4.error(line);
99984
+ outro(import_picocolors4.default.red("Installation failed."));
99985
+ return 1;
99986
+ }
99987
+ spinner2.stop(nativeInstallSuccessLine());
99988
+ for (const note of outcome.notes)
99989
+ log4.info(note);
99990
+ }
99991
+ if (config.hasNativeDev) {
99992
+ spinner2.start("Installing the OmO Native development adapter");
99433
99993
  try {
99434
- const senpiResult = await runSenpiInstaller();
99435
- spinner2.stop(`Senpi adapter installed to ${import_picocolors4.default.cyan(senpiResult.settingsPath)}`);
99994
+ const nativeDevResult = await runNativeDevInstaller();
99995
+ spinner2.stop(`OmO Native development adapter installed to ${import_picocolors4.default.cyan(nativeDevResult.settingsPath)}`);
99436
99996
  } catch (error) {
99437
99997
  const message = error instanceof Error ? error.message : String(error);
99438
- spinner2.stop(`Senpi install failed ${import_picocolors4.default.yellow("[!]")}`);
99439
- log4.error(`Senpi install failed: ${message}`);
99998
+ spinner2.stop(`OmO Native development adapter install failed ${import_picocolors4.default.yellow("[!]")}`);
99999
+ log4.error(`OmO Native development adapter install failed: ${message}`);
99440
100000
  outro(import_picocolors4.default.red("Installation failed."));
99441
100001
  return 1;
99442
100002
  }
@@ -99450,9 +100010,9 @@ async function runTuiInstaller(args, version) {
99450
100010
  note(`Include ${import_picocolors4.default.cyan("ultrawork")} (or ${import_picocolors4.default.cyan("ulw")}) in your prompt.
99451
100011
  ` + `All features work like magic-parallel agents, background tasks,
99452
100012
  ` + `deep exploration, and relentless execution until completion.`, "The Magic Word");
99453
- if (shouldShowSenpiEditionHint(config)) {
99454
- log4.info(import_picocolors4.default.bold(SENPI_EDITION_HINT_TITLE));
99455
- log4.message(senpiEditionHintLines({ command: import_picocolors4.default.cyan, link: import_picocolors4.default.underline }).join(`
100013
+ if (shouldShowNativeEditionHint(config)) {
100014
+ log4.info(import_picocolors4.default.bold(NATIVE_EDITION_HINT_TITLE));
100015
+ log4.message(nativeEditionHintLines({ command: import_picocolors4.default.cyan, link: import_picocolors4.default.underline }).join(`
99456
100016
  `));
99457
100017
  }
99458
100018
  const shouldStar = await confirm({
@@ -99493,7 +100053,7 @@ async function runTuiInstaller(args, version) {
99493
100053
 
99494
100054
  // packages/omo-opencode/src/cli/install.ts
99495
100055
  var VERSION = package_default.version;
99496
- async function install3(args) {
100056
+ async function install2(args) {
99497
100057
  return args.tui ? runTuiInstaller(args, VERSION) : runCliInstaller(args, VERSION);
99498
100058
  }
99499
100059
  // packages/omo-opencode/src/cli/cleanup.ts
@@ -100994,7 +101554,8 @@ var HookNameSchema = _enum([
100994
101554
  "webfetch-redirect-guard",
100995
101555
  "fsync-skip-warning",
100996
101556
  "plan-format-validator",
100997
- "legacy-plugin-toast"
101557
+ "legacy-plugin-toast",
101558
+ "native-edition-nudge"
100998
101559
  ]);
100999
101560
  // packages/omo-opencode/src/config/schema/i18n.ts
101000
101561
  init_zod();
@@ -103097,14 +103658,14 @@ var NO_OP_POSTHOG2 = {
103097
103658
  function isFalsy(value) {
103098
103659
  return value === "0" || value === "false" || value === "no";
103099
103660
  }
103100
- function isTruthy(value) {
103661
+ function isTruthy2(value) {
103101
103662
  return value === "1" || value === "true" || value === "yes";
103102
103663
  }
103103
103664
  function shouldDisablePostHog(env, configEnabled) {
103104
103665
  if (configEnabled === false) {
103105
103666
  return true;
103106
103667
  }
103107
- if (isTruthy(env.OMO_DISABLE_POSTHOG?.trim().toLowerCase())) {
103668
+ if (isTruthy2(env.OMO_DISABLE_POSTHOG?.trim().toLowerCase())) {
103108
103669
  return true;
103109
103670
  }
103110
103671
  return isFalsy(env.OMO_SEND_ANONYMOUS_TELEMETRY?.trim().toLowerCase());
@@ -104627,14 +105188,14 @@ var CANONICAL_REPLACEMENT = new Map([
104627
105188
  var MIGRATE_SUFFIX = ", or run: oh-my-openagent config migrate";
104628
105189
  var TUNING_CONTAINERS = new Set(["agents", "categories", "models"]);
104629
105190
  var PASSTHROUGH_CONTAINERS = new Set(["provider_options", "providerOptions"]);
104630
- function isRecord15(value) {
105191
+ function isRecord16(value) {
104631
105192
  return value !== null && typeof value === "object" && !Array.isArray(value);
104632
105193
  }
104633
105194
  function isHarnessBlock(key) {
104634
105195
  return key.startsWith("[") && key.endsWith("]");
104635
105196
  }
104636
105197
  function collectIssues(configPath, value, prefix, fixSuffix) {
104637
- if (!isRecord15(value))
105198
+ if (!isRecord16(value))
104638
105199
  return [];
104639
105200
  const issues = [];
104640
105201
  for (const [key, child] of Object.entries(value)) {
@@ -104650,7 +105211,7 @@ function collectIssues(configPath, value, prefix, fixSuffix) {
104650
105211
  });
104651
105212
  continue;
104652
105213
  }
104653
- if (!isRecord15(child))
105214
+ if (!isRecord16(child))
104654
105215
  continue;
104655
105216
  if (PASSTHROUGH_CONTAINERS.has(key))
104656
105217
  continue;
@@ -104669,7 +105230,7 @@ function collectIssues(configPath, value, prefix, fixSuffix) {
104669
105230
  return issues;
104670
105231
  }
104671
105232
  function migrateFixSuffix(parsed) {
104672
- if (isRecord15(parsed) && hasMigrationMarker(parsed, REASONING_UNIFICATION_MIGRATION_ID))
105233
+ if (isRecord16(parsed) && hasMigrationMarker(parsed, REASONING_UNIFICATION_MIGRATION_ID))
104673
105234
  return "";
104674
105235
  return MIGRATE_SUFFIX;
104675
105236
  }
@@ -105907,12 +106468,12 @@ async function auditBundleTargets(pluginRoot) {
105907
106468
  let referencedCount = 0;
105908
106469
  for (const manifestPath of await findManifestPaths(pluginRoot, ".mcp.json")) {
105909
106470
  const manifest = await readJson2(manifestPath);
105910
- if (manifest === null || !isRecord16(manifest["mcpServers"]))
106471
+ if (manifest === null || !isRecord17(manifest["mcpServers"]))
105911
106472
  continue;
105912
106473
  const manifestRoot = dirname33(manifestPath);
105913
106474
  const isRootManifest = resolve24(manifestRoot) === resolve24(pluginRoot);
105914
106475
  for (const server of Object.values(manifest["mcpServers"])) {
105915
- if (!isRecord16(server) || !Array.isArray(server["args"]))
106476
+ if (!isRecord17(server) || !Array.isArray(server["args"]))
105916
106477
  continue;
105917
106478
  for (const arg of server["args"]) {
105918
106479
  if (typeof arg !== "string" || !isPluginRuntimePathArg(arg))
@@ -105998,7 +106559,7 @@ function collectHookCommands(value, commands) {
105998
106559
  collectHookCommands(item, commands);
105999
106560
  return;
106000
106561
  }
106001
- if (!isRecord16(value))
106562
+ if (!isRecord17(value))
106002
106563
  return;
106003
106564
  if (value["type"] === "command") {
106004
106565
  if (typeof value["command"] === "string")
@@ -106053,7 +106614,7 @@ function parseDegradedEntries(value) {
106053
106614
  return [];
106054
106615
  const entries = [];
106055
106616
  for (const item of value) {
106056
- if (!isRecord16(item))
106617
+ if (!isRecord17(item))
106057
106618
  continue;
106058
106619
  if (typeof item["component"] !== "string" || typeof item["reason"] !== "string")
106059
106620
  continue;
@@ -106087,7 +106648,7 @@ function degradedDetailLines(entries) {
106087
106648
  async function readJson2(path) {
106088
106649
  try {
106089
106650
  const parsed = JSON.parse(await readFile29(path, "utf8"));
106090
- return isRecord16(parsed) ? parsed : null;
106651
+ return isRecord17(parsed) ? parsed : null;
106091
106652
  } catch (error) {
106092
106653
  if (error instanceof Error)
106093
106654
  return null;
@@ -106108,7 +106669,7 @@ function normalizeRelative(root, target) {
106108
106669
  function normalizePathSeparators(path) {
106109
106670
  return path.split("\\").join("/");
106110
106671
  }
106111
- function isRecord16(value) {
106672
+ function isRecord17(value) {
106112
106673
  return typeof value === "object" && value !== null && !Array.isArray(value);
106113
106674
  }
106114
106675
 
@@ -108218,8 +108779,8 @@ var program2 = new Command;
108218
108779
  function resolveInstallArgs(options, invocationName = process.env.OMO_INVOCATION_NAME) {
108219
108780
  const defaultPlatform = process.env.OMO_EDITION === "codex" || invocationName === "lazycodex" || invocationName === "lazycodex-ai" ? "codex" : undefined;
108220
108781
  const platform = options.platform ?? defaultPlatform;
108221
- if (platform === "senpi" && !isSenpiPlatformEnabled()) {
108222
- 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.`);
108782
+ if (platform === "native-dev" && !isNativeDevPlatformEnabled()) {
108783
+ 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.`);
108223
108784
  }
108224
108785
  return {
108225
108786
  tui: options.tui !== false,
@@ -108264,7 +108825,7 @@ Model Providers (Priority: Native > Copilot > OpenCode Zen > Z.ai > Kimi > Baili
108264
108825
  `).action(async (options) => {
108265
108826
  const rootOptions = program2.opts();
108266
108827
  const args = resolveInstallArgs({ ...options, platform: options.platform ?? rootOptions.platform });
108267
- const exitCode = await install3(args);
108828
+ const exitCode = await install2(args);
108268
108829
  process.exit(exitCode);
108269
108830
  });
108270
108831
  configureCleanupCommand(program2);