lazycodex-ai 5.0.0-beta.81 → 5.0.0-beta.83

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 (103) 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 +439 -98
  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 +439 -98
  15. package/package.json +2 -1
  16. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  17. package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +111 -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/lsp/dist/.omo-runtime-manifest.json +2 -2
  27. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  28. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  29. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  30. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  31. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  32. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  33. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  34. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  35. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  36. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  37. package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +1 -1
  38. package/packages/omo-codex/plugin/components/ulw-execute-continuation/package.json +1 -1
  39. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +24 -10
  40. package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-guard.js +8 -6
  41. package/packages/omo-codex/plugin/components/ulw-loop/dist/surface.d.ts +2 -0
  42. package/packages/omo-codex/plugin/components/ulw-loop/dist/surface.js +21 -4
  43. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +5 -5
  44. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  45. package/packages/omo-codex/plugin/components/ulw-loop/src/spawn-guard.ts +10 -5
  46. package/packages/omo-codex/plugin/components/ulw-loop/src/surface.ts +24 -6
  47. package/packages/omo-codex/plugin/components/ulw-loop/test/spawn-guard-native-reviewer.test.ts +207 -0
  48. package/packages/omo-codex/plugin/components/ulw-loop/test/spawn-guard.test.ts +6 -4
  49. package/packages/omo-codex/plugin/components/ulw-loop/test/surface.test.ts +43 -4
  50. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  51. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  52. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  53. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  54. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  55. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  56. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  57. package/packages/omo-codex/plugin/hooks/post-tool-use-recording-spawn-admission.json +1 -1
  58. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  59. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  60. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  61. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  62. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  63. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  64. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  65. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +1 -1
  66. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  67. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  68. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  69. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  70. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  71. package/packages/omo-codex/plugin/package-lock.json +12 -12
  72. package/packages/omo-codex/plugin/package.json +1 -1
  73. package/packages/omo-codex/plugin/skills/browser/ATTRIBUTION.md +25 -0
  74. package/packages/omo-codex/plugin/skills/browser/SKILL.md +89 -0
  75. package/packages/omo-codex/plugin/skills/browser/agents/openai.yaml +2 -0
  76. package/packages/omo-codex/plugin/skills/browser/references/commands.md +90 -0
  77. package/packages/omo-codex/plugin/skills/browser/references/install.md +71 -0
  78. package/packages/omo-codex/plugin/skills/browser/references/owned-engine/README.md +42 -0
  79. package/packages/omo-codex/plugin/skills/browser/references/owned-engine/frames-and-humans.md +39 -0
  80. package/packages/omo-codex/plugin/skills/browser/references/owned-engine/ladder.md +59 -0
  81. package/packages/omo-codex/plugin/skills/browser/references/owned-engine/network.md +42 -0
  82. package/packages/omo-codex/plugin/skills/browser/references/recipes/1password.md +59 -0
  83. package/packages/omo-codex/plugin/skills/browser/references/remote.md +24 -0
  84. package/packages/omo-codex/plugin/skills/browser/scripts/browser-doctor.mjs +41 -0
  85. package/packages/omo-codex/plugin/skills/browser/scripts/browser-env.mjs +41 -0
  86. package/packages/omo-codex/plugin/skills/browser/scripts/browser-install.mjs +51 -0
  87. package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +1 -0
  88. package/packages/omo-codex/scripts/install-dist/install-local.mjs +117 -17
  89. package/packages/shared-skills/skills/browser/ATTRIBUTION.md +25 -0
  90. package/packages/shared-skills/skills/browser/SKILL.md +89 -0
  91. package/packages/shared-skills/skills/browser/references/commands.md +90 -0
  92. package/packages/shared-skills/skills/browser/references/install.md +71 -0
  93. package/packages/shared-skills/skills/browser/references/owned-engine/README.md +42 -0
  94. package/packages/shared-skills/skills/browser/references/owned-engine/frames-and-humans.md +39 -0
  95. package/packages/shared-skills/skills/browser/references/owned-engine/ladder.md +59 -0
  96. package/packages/shared-skills/skills/browser/references/owned-engine/network.md +42 -0
  97. package/packages/shared-skills/skills/browser/references/recipes/1password.md +59 -0
  98. package/packages/shared-skills/skills/browser/references/remote.md +24 -0
  99. package/packages/shared-skills/skills/browser/scripts/browser-doctor.mjs +41 -0
  100. package/packages/shared-skills/skills/browser/scripts/browser-env.mjs +41 -0
  101. package/packages/shared-skills/skills/browser/scripts/browser-install.mjs +51 -0
  102. package/dist/cli/install-senpi/index.d.ts +0 -1
  103. 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.81",
68
+ version: "5.0.0-beta.83",
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",
@@ -89,6 +89,7 @@ var init_package = __esm(() => {
89
89
  "packages/openclaw-core",
90
90
  "packages/boulder-state",
91
91
  "packages/memory-core",
92
+ "packages/isolation-core",
92
93
  "packages/telemetry-core",
93
94
  "packages/claude-code-compat-core",
94
95
  "packages/skills-loader-core",
@@ -198,7 +199,7 @@ var init_package = __esm(() => {
198
199
  prepublishOnly: "bun run clean && bun run build:lsp-tools-mcp && bun run build:lsp-daemon && bun run build",
199
200
  "test:model-capabilities": "bun test --timeout 20000 packages/model-core/src/model-capability-aliases.test.ts packages/model-core/src/model-capability-guardrails.test.ts packages/model-core/src/model-capabilities.test.ts packages/omo-opencode/src/cli/doctor/checks/model-resolution.test.ts --bail",
200
201
  typecheck: "tsgo --noEmit && bun run typecheck:script && bun run typecheck:packages",
201
- "typecheck:packages": "tsgo --noEmit -p packages/rules-engine/tsconfig.json && tsgo --noEmit -p packages/delegate-core/tsconfig.json && tsgo --noEmit -p packages/mcp-stdio-core/tsconfig.json && tsgo --noEmit -p packages/mcp-client-core/tsconfig.json && tsgo --noEmit -p packages/git-bash-mcp/tsconfig.json && tsgo --noEmit -p packages/ast-grep-mcp/tsconfig.json && tsgo --noEmit -p packages/lsp-core/tsconfig.json && tsgo --noEmit -p packages/utils/tsconfig.json && tsgo --noEmit -p packages/model-core/tsconfig.json && tsgo --noEmit -p packages/omo-config-core/tsconfig.json && tsgo --noEmit -p packages/prompts-core/tsconfig.json && tsgo --noEmit -p packages/comment-checker-core/tsconfig.json && tsgo --noEmit -p packages/hashline-core/tsconfig.json && tsgo --noEmit -p packages/tmux-core/tsconfig.json && tsgo --noEmit -p packages/team-core/tsconfig.json && tsgo --noEmit -p packages/openclaw-core/tsconfig.json && tsgo --noEmit -p packages/boulder-state/tsconfig.json && tsgo --noEmit -p packages/memory-core/tsconfig.json && tsgo --noEmit -p packages/telemetry-core/tsconfig.json && tsgo --noEmit -p packages/claude-code-compat-core/tsconfig.json && tsgo --noEmit -p packages/skills-loader-core/tsconfig.json && tsgo --noEmit -p packages/agents-md-core/tsconfig.json && tsgo --noEmit -p packages/omo-codex/plugin/shared/tsconfig.json && tsgo --noEmit -p packages/omo-codex/tsconfig.json && tsgo --noEmit -p packages/omo-senpi/tsconfig.json && tsgo --noEmit -p packages/senpi-task/tsconfig.json && tsgo --noEmit -p packages/omo-opencode/tsconfig.json && tsgo --noEmit -p packages/omo-native/tsconfig.json",
202
+ "typecheck:packages": "tsgo --noEmit -p packages/rules-engine/tsconfig.json && tsgo --noEmit -p packages/delegate-core/tsconfig.json && tsgo --noEmit -p packages/mcp-stdio-core/tsconfig.json && tsgo --noEmit -p packages/mcp-client-core/tsconfig.json && tsgo --noEmit -p packages/git-bash-mcp/tsconfig.json && tsgo --noEmit -p packages/ast-grep-mcp/tsconfig.json && tsgo --noEmit -p packages/lsp-core/tsconfig.json && tsgo --noEmit -p packages/utils/tsconfig.json && tsgo --noEmit -p packages/model-core/tsconfig.json && tsgo --noEmit -p packages/omo-config-core/tsconfig.json && tsgo --noEmit -p packages/prompts-core/tsconfig.json && tsgo --noEmit -p packages/comment-checker-core/tsconfig.json && tsgo --noEmit -p packages/hashline-core/tsconfig.json && tsgo --noEmit -p packages/tmux-core/tsconfig.json && tsgo --noEmit -p packages/team-core/tsconfig.json && tsgo --noEmit -p packages/openclaw-core/tsconfig.json && tsgo --noEmit -p packages/boulder-state/tsconfig.json && tsgo --noEmit -p packages/isolation-core/tsconfig.json && tsgo --noEmit -p packages/memory-core/tsconfig.json && tsgo --noEmit -p packages/telemetry-core/tsconfig.json && tsgo --noEmit -p packages/claude-code-compat-core/tsconfig.json && tsgo --noEmit -p packages/skills-loader-core/tsconfig.json && tsgo --noEmit -p packages/agents-md-core/tsconfig.json && tsgo --noEmit -p packages/omo-codex/plugin/shared/tsconfig.json && tsgo --noEmit -p packages/omo-codex/tsconfig.json && tsgo --noEmit -p packages/omo-senpi/tsconfig.json && tsgo --noEmit -p packages/senpi-task/tsconfig.json && tsgo --noEmit -p packages/omo-opencode/tsconfig.json && tsgo --noEmit -p packages/omo-native/tsconfig.json",
202
203
  "typecheck:script": "tsgo --noEmit -p script/tsconfig.json",
203
204
  test: "bun test --timeout 20000",
204
205
  "changelog:section": "bun script/changelog-section.ts",
@@ -247,7 +248,7 @@ var init_package = __esm(() => {
247
248
  zod: "^4.6.5"
248
249
  },
249
250
  devDependencies: {
250
- "@code-yeongyu/senpi": "2026.9.21-2",
251
+ "@code-yeongyu/senpi": "2026.9.22-2",
251
252
  "@oh-my-opencode/agents-md-core": "workspace:*",
252
253
  "@oh-my-opencode/ast-grep-mcp": "workspace:*",
253
254
  "@oh-my-opencode/boulder-state": "workspace:*",
@@ -257,6 +258,7 @@ var init_package = __esm(() => {
257
258
  "@oh-my-opencode/git-bash-mcp": "workspace:*",
258
259
  "@oh-my-opencode/hashline-core": "workspace:*",
259
260
  "@oh-my-opencode/lsp-core": "workspace:*",
261
+ "@oh-my-opencode/isolation-core": "workspace:*",
260
262
  "@oh-my-opencode/memory-core": "workspace:*",
261
263
  "@oh-my-opencode/mcp-client-core": "workspace:*",
262
264
  "@oh-my-opencode/mcp-stdio-core": "workspace:*",
@@ -286,18 +288,18 @@ var init_package = __esm(() => {
286
288
  typescript: "^7.0.2"
287
289
  },
288
290
  optionalDependencies: {
289
- "oh-my-opencode-darwin-arm64": "5.0.0-beta.81",
290
- "oh-my-opencode-darwin-x64": "5.0.0-beta.81",
291
- "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.81",
292
- "oh-my-opencode-linux-arm64": "5.0.0-beta.81",
293
- "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.81",
294
- "oh-my-opencode-linux-x64": "5.0.0-beta.81",
295
- "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.81",
296
- "oh-my-opencode-linux-x64-musl": "5.0.0-beta.81",
297
- "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.81",
298
- "oh-my-opencode-windows-arm64": "5.0.0-beta.81",
299
- "oh-my-opencode-windows-x64": "5.0.0-beta.81",
300
- "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.81"
291
+ "oh-my-opencode-darwin-arm64": "5.0.0-beta.83",
292
+ "oh-my-opencode-darwin-x64": "5.0.0-beta.83",
293
+ "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.83",
294
+ "oh-my-opencode-linux-arm64": "5.0.0-beta.83",
295
+ "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.83",
296
+ "oh-my-opencode-linux-x64": "5.0.0-beta.83",
297
+ "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.83",
298
+ "oh-my-opencode-linux-x64-musl": "5.0.0-beta.83",
299
+ "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.83",
300
+ "oh-my-opencode-windows-arm64": "5.0.0-beta.83",
301
+ "oh-my-opencode-windows-x64": "5.0.0-beta.83",
302
+ "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.83"
301
303
  },
302
304
  overrides: {
303
305
  "@earendil-works/pi-agent-core": "0.84.2",
@@ -7226,6 +7228,7 @@ var init_agent_model_requirements = __esm(() => {
7226
7228
  },
7227
7229
  librarian: {
7228
7230
  fallbackChain: [
7231
+ { providers: ["kimi-for-coding"], model: "kimi-for-coding-highspeed", variant: "off" },
7229
7232
  { providers: ["openai", "openai-codex"], model: "gpt-5.6-luna-fast", variant: "low" },
7230
7233
  { providers: ["deepseek"], model: "deepseek-v4-flash", variant: "max" },
7231
7234
  { providers: ["opencode-go", "bailian-coding-plan"], model: "qwen3.7-plus" },
@@ -7238,6 +7241,7 @@ var init_agent_model_requirements = __esm(() => {
7238
7241
  },
7239
7242
  explore: {
7240
7243
  fallbackChain: [
7244
+ { providers: ["kimi-for-coding"], model: "kimi-for-coding-highspeed", variant: "off" },
7241
7245
  { providers: ["openai", "openai-codex"], model: "gpt-5.6-luna-fast", variant: "low" },
7242
7246
  { providers: ["deepseek"], model: "deepseek-v4-flash", variant: "max" },
7243
7247
  { providers: ["opencode-go", "bailian-coding-plan"], model: "qwen3.7-plus" },
@@ -7411,7 +7415,6 @@ var init_category_model_requirements = __esm(() => {
7411
7415
  },
7412
7416
  quick: {
7413
7417
  fallbackChain: [
7414
- { providers: ["kimi-for-coding"], model: "kimi-for-coding-highspeed" },
7415
7418
  { providers: ["openai-codex"], model: "gpt-5.6-luna-fast", variant: "low" },
7416
7419
  { providers: ["deepseek"], model: "deepseek-v4-flash", variant: "off" },
7417
7420
  {
@@ -7431,7 +7434,8 @@ var init_category_model_requirements = __esm(() => {
7431
7434
  },
7432
7435
  "unspecified-low": {
7433
7436
  fallbackChain: [
7434
- { 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" },
7435
7439
  {
7436
7440
  providers: ["openai", "openai-codex", "github-copilot", "opencode"],
7437
7441
  model: "gpt-5.6-terra",
@@ -7453,11 +7457,6 @@ var init_category_model_requirements = __esm(() => {
7453
7457
  },
7454
7458
  "unspecified-high": {
7455
7459
  fallbackChain: [
7456
- {
7457
- providers: ["openai", "openai-codex", "github-copilot", "opencode"],
7458
- model: "gpt-6-astra",
7459
- variant: "high"
7460
- },
7461
7460
  {
7462
7461
  providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
7463
7462
  model: "claude-opus-5",
@@ -8293,6 +8292,36 @@ var init_supplemental_entries = __esm(() => {
8293
8292
  output: 32768
8294
8293
  }
8295
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
+ },
8296
8325
  "xai/grok-build-0.1": {
8297
8326
  id: "xai/grok-build-0.1",
8298
8327
  family: "grok",
@@ -8322,6 +8351,36 @@ var init_supplemental_entries = __esm(() => {
8322
8351
  context: 256000,
8323
8352
  output: 32768
8324
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
+ }
8325
8384
  }
8326
8385
  };
8327
8386
  });
@@ -9295,21 +9354,21 @@ var init_openai_categories = __esm(() => {
9295
9354
  },
9296
9355
  {
9297
9356
  name: "quick",
9298
- config: { model: "kimi-for-coding/kimi-for-coding-highspeed" },
9357
+ config: { model: "openai/gpt-5.6-luna-fast", variant: "low" },
9299
9358
  description: "Trivial tasks - single file changes, typo fixes, simple modifications",
9300
9359
  callerGuidance: QUICK_CATEGORY_CALLER_GUIDANCE,
9301
9360
  promptAppend: QUICK_CATEGORY_PROMPT_APPEND
9302
9361
  },
9303
9362
  {
9304
9363
  name: "unspecified-low",
9305
- config: { model: "xai/grok-4.6", variant: "xhigh" },
9364
+ config: { model: "xiaomi/mimo-v2.6-pro", variant: "max" },
9306
9365
  description: "Tasks that don't fit other categories, low effort required",
9307
9366
  callerGuidance: UNSPECIFIED_LOW_CATEGORY_CALLER_GUIDANCE,
9308
9367
  promptAppend: UNSPECIFIED_LOW_CATEGORY_PROMPT_APPEND
9309
9368
  },
9310
9369
  {
9311
9370
  name: "unspecified-high",
9312
- config: { model: "openai/gpt-6-astra", variant: "high" },
9371
+ config: { model: "anthropic/claude-opus-5", variant: "xhigh" },
9313
9372
  description: "Tasks that don't fit other categories, high effort required",
9314
9373
  callerGuidance: UNSPECIFIED_HIGH_CATEGORY_CALLER_GUIDANCE,
9315
9374
  promptAppend: UNSPECIFIED_HIGH_CATEGORY_PROMPT_APPEND,
@@ -73960,12 +74019,14 @@ var init_git_master = __esm(() => {
73960
74019
  });
73961
74020
 
73962
74021
  // packages/omo-config-core/src/schema/harness.ts
73963
- var HARNESS_IDS, OMO_CONFIG_HARNESS_IDS, OmoHarnessIdSchema;
74022
+ var HARNESS_IDS, OMO_CONFIG_HARNESS_IDS, OmoHarnessIdSchema, OMO_CONFIG_LEGACY_HARNESS_ALIASES, OMO_CONFIG_LEGACY_HARNESS_IDS;
73964
74023
  var init_harness = __esm(() => {
73965
74024
  init_zod();
73966
74025
  HARNESS_IDS = ["codex", "opencode", "omo"];
73967
- OMO_CONFIG_HARNESS_IDS = ["opencode", "senpi", "codex"];
74026
+ OMO_CONFIG_HARNESS_IDS = ["opencode", "native", "codex"];
73968
74027
  OmoHarnessIdSchema = _enum(OMO_CONFIG_HARNESS_IDS);
74028
+ OMO_CONFIG_LEGACY_HARNESS_ALIASES = { senpi: "native" };
74029
+ OMO_CONFIG_LEGACY_HARNESS_IDS = Object.keys(OMO_CONFIG_LEGACY_HARNESS_ALIASES);
73969
74030
  });
73970
74031
 
73971
74032
  // packages/omo-config-core/src/schema/memory.ts
@@ -74216,7 +74277,7 @@ function resolveOmoTaskSettings(input, resolveParallelism = availableParallelism
74216
74277
  global_concurrency: record2["global_concurrency"] ?? Math.max(8, resolveParallelism() * 2)
74217
74278
  });
74218
74279
  }
74219
- var DEFAULT_RESIDENCY_MAX_CHILDREN = 16, ResidencyMaxChildrenInputSchema, OmoTaskWaitSchema, OmoTaskTeamSettingsSchema, OmoTaskWarningsSchema, OmoTaskDagSettingsSchema, OmoTaskSettingsSchema, OmoTaskDagSettingsLayerSchema, OmoTaskWaitLayerSchema, OmoTaskTeamSettingsLayerSchema, OmoTaskWarningsLayerSchema, OmoTaskSettingsLayerSchema;
74280
+ var DEFAULT_RESIDENCY_MAX_CHILDREN = 16, ResidencyMaxChildrenInputSchema, OmoTaskWaitSchema, OmoTaskTeamSettingsSchema, OmoTaskWarningsSchema, IsolationBackendKindSchema, OmoTaskIsolationSchema, isolationDefaults, OmoTaskIsolationLayerSchema, OmoTaskDagSettingsSchema, OmoTaskSettingsSchema, OmoTaskDagSettingsLayerSchema, OmoTaskWaitLayerSchema, OmoTaskTeamSettingsLayerSchema, OmoTaskWarningsLayerSchema, OmoTaskSettingsLayerSchema;
74220
74281
  var init_task = __esm(() => {
74221
74282
  init_zod();
74222
74283
  ResidencyMaxChildrenInputSchema = union([number2().int().nonnegative(), literal("unlimited")]);
@@ -74233,6 +74294,31 @@ var init_task = __esm(() => {
74233
74294
  OmoTaskWarningsSchema = object({
74234
74295
  unavailable_categories: boolean2().default(true)
74235
74296
  }).strict();
74297
+ IsolationBackendKindSchema = _enum([
74298
+ "auto",
74299
+ "apfs",
74300
+ "btrfs",
74301
+ "zfs",
74302
+ "reflink",
74303
+ "overlayfs",
74304
+ "block-clone",
74305
+ "rcopy"
74306
+ ]);
74307
+ OmoTaskIsolationSchema = object({
74308
+ enabled: boolean2().default(false),
74309
+ backend: IsolationBackendKindSchema.default("auto"),
74310
+ apply: boolean2().default(true),
74311
+ merge: _enum(["patch", "branch"]).default("patch"),
74312
+ commits: _enum(["generic", "ai"]).default("generic")
74313
+ }).strict();
74314
+ isolationDefaults = OmoTaskIsolationSchema.parse({});
74315
+ OmoTaskIsolationLayerSchema = object({
74316
+ enabled: boolean2().optional(),
74317
+ backend: IsolationBackendKindSchema.optional(),
74318
+ apply: boolean2().optional(),
74319
+ merge: _enum(["patch", "branch"]).optional(),
74320
+ commits: _enum(["generic", "ai"]).optional()
74321
+ }).strict();
74236
74322
  OmoTaskDagSettingsSchema = object({
74237
74323
  max_nodes_per_run: number2().int().positive().default(64),
74238
74324
  max_runs_per_session: number2().int().positive().default(16),
@@ -74244,6 +74330,7 @@ var init_task = __esm(() => {
74244
74330
  max_prompt_bytes: number2().int().positive().default(262144)
74245
74331
  }).strict();
74246
74332
  OmoTaskSettingsSchema = object({
74333
+ isolation: OmoTaskIsolationSchema.default(isolationDefaults),
74247
74334
  default_execution_mode: _enum(["auto", "in-process", "process"]).default("auto"),
74248
74335
  process_runner: _enum(["host", "child-process"]).default("host"),
74249
74336
  host_engine_policy: _enum(["upgrade", "fallback"]).default("upgrade"),
@@ -74292,6 +74379,7 @@ var init_task = __esm(() => {
74292
74379
  unavailable_categories: boolean2().optional()
74293
74380
  }).strict();
74294
74381
  OmoTaskSettingsLayerSchema = object({
74382
+ isolation: OmoTaskIsolationLayerSchema.optional(),
74295
74383
  default_execution_mode: _enum(["auto", "in-process", "process"]).optional(),
74296
74384
  process_runner: _enum(["host", "child-process"]).optional(),
74297
74385
  host_engine_policy: _enum(["upgrade", "fallback"]).optional(),
@@ -74441,6 +74529,7 @@ var init_config = __esm(() => {
74441
74529
  telemetry: OmoTelemetrySettingsLayerSchema.optional(),
74442
74530
  disabled_skills: OmoDisabledSkillsSchema.optional(),
74443
74531
  "[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
74532
+ "[native]": OmoTypedHarnessConfigSchema.optional(),
74444
74533
  "[senpi]": OmoTypedHarnessConfigSchema.optional(),
74445
74534
  "[codex]": OmoTypedHarnessConfigSchema.optional()
74446
74535
  }).strict();
@@ -74459,6 +74548,7 @@ var init_config = __esm(() => {
74459
74548
  telemetry: OmoTelemetrySettingsSchema.optional(),
74460
74549
  disabled_skills: OmoDisabledSkillsSchema.optional(),
74461
74550
  "[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
74551
+ "[native]": OmoTypedHarnessConfigSchema.optional(),
74462
74552
  "[senpi]": OmoTypedHarnessConfigSchema.optional(),
74463
74553
  "[codex]": OmoTypedHarnessConfigSchema.optional(),
74464
74554
  profiles: record(string2(), OmoConfigProfileSchema).default({}),
@@ -74480,6 +74570,7 @@ var init_config = __esm(() => {
74480
74570
  telemetry: OmoTelemetrySettingsLayerSchema.optional(),
74481
74571
  disabled_skills: OmoDisabledSkillsSchema.optional(),
74482
74572
  "[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
74573
+ "[native]": OmoTypedHarnessConfigSchema.optional(),
74483
74574
  "[senpi]": OmoTypedHarnessConfigSchema.optional(),
74484
74575
  "[codex]": OmoTypedHarnessConfigSchema.optional(),
74485
74576
  profiles: record(string2(), OmoConfigProfileSchema).optional(),
@@ -74550,6 +74641,60 @@ var init_legacy_category_names = __esm(() => {
74550
74641
  LEGACY_CATEGORY_NAME_ALIASES = { deep: "deep-low" };
74551
74642
  });
74552
74643
 
74644
+ // packages/omo-config-core/src/schema/legacy-harness-names.ts
74645
+ function canonicalHarnessName(name) {
74646
+ return Object.hasOwn(OMO_CONFIG_LEGACY_HARNESS_ALIASES, name) ? OMO_CONFIG_LEGACY_HARNESS_ALIASES[name] : name;
74647
+ }
74648
+ function harnessBlockKey(harness) {
74649
+ return `[${harness}]`;
74650
+ }
74651
+ function legacyHarnessOfBlockKey(key) {
74652
+ if (!key.startsWith("[") || !key.endsWith("]"))
74653
+ return;
74654
+ const harness = key.slice(1, -1);
74655
+ return Object.hasOwn(OMO_CONFIG_LEGACY_HARNESS_ALIASES, harness) ? harness : undefined;
74656
+ }
74657
+ function isRecord10(value) {
74658
+ return typeof value === "object" && value !== null && !Array.isArray(value);
74659
+ }
74660
+ function canonicalizeBlocksIn(container, path, renames) {
74661
+ const result = {};
74662
+ for (const [key, value] of Object.entries(container)) {
74663
+ const legacyHarness = legacyHarnessOfBlockKey(key);
74664
+ if (legacyHarness === undefined) {
74665
+ result[key] = value;
74666
+ continue;
74667
+ }
74668
+ const canonical = harnessBlockKey(canonicalHarnessName(legacyHarness));
74669
+ const dropped = Object.hasOwn(container, canonical);
74670
+ renames.push({ canonical, dropped, legacy: key, path: [...path, key].join(".") });
74671
+ if (!dropped)
74672
+ result[canonical] = value;
74673
+ }
74674
+ return result;
74675
+ }
74676
+ function canonicalizeLegacyHarnessBlocks(document) {
74677
+ if (!isRecord10(document))
74678
+ return { document: {}, renames: [] };
74679
+ const renames = [];
74680
+ const canonicalized = canonicalizeBlocksIn(document, [], renames);
74681
+ const profiles = canonicalized["profiles"];
74682
+ if (isRecord10(profiles)) {
74683
+ const canonicalProfiles = {};
74684
+ for (const [name, profile] of Object.entries(profiles)) {
74685
+ canonicalProfiles[name] = isRecord10(profile) ? canonicalizeBlocksIn(profile, ["profiles", name], renames) : profile;
74686
+ }
74687
+ canonicalized["profiles"] = canonicalProfiles;
74688
+ }
74689
+ return { document: canonicalized, renames };
74690
+ }
74691
+ function hasLegacyHarnessBlocks(document) {
74692
+ return canonicalizeLegacyHarnessBlocks(document).renames.length > 0;
74693
+ }
74694
+ var init_legacy_harness_names = __esm(() => {
74695
+ init_harness();
74696
+ });
74697
+
74553
74698
  // packages/omo-config-core/src/schema/index.ts
74554
74699
  var init_schema = __esm(() => {
74555
74700
  init_agent();
@@ -74560,6 +74705,7 @@ var init_schema = __esm(() => {
74560
74705
  init_git_master();
74561
74706
  init_harness();
74562
74707
  init_legacy_category_names();
74708
+ init_legacy_harness_names();
74563
74709
  init_memory();
74564
74710
  init_model_catalog();
74565
74711
  init_model_profile();
@@ -74569,6 +74715,9 @@ var init_schema = __esm(() => {
74569
74715
  init_telemetry();
74570
74716
  });
74571
74717
 
74718
+ // packages/omo-config-core/src/loader/disabled-skills.ts
74719
+ var init_disabled_skills = () => {};
74720
+
74572
74721
  // packages/omo-config-core/src/loader/merge.ts
74573
74722
  function isUnsafeObjectKey2(key) {
74574
74723
  return DANGEROUS_KEYS2.has(key);
@@ -74743,7 +74892,13 @@ function withoutControlKeys(config) {
74743
74892
  function harnessLayer(config, harness) {
74744
74893
  if (harness === undefined)
74745
74894
  return {};
74746
- return toRecord(config[`[${harness}]`]) ?? {};
74895
+ const canonical = canonicalHarnessName(harness);
74896
+ const legacyKeys = Object.entries(OMO_CONFIG_LEGACY_HARNESS_ALIASES).filter(([, target]) => target === canonical).map(([legacy]) => harnessBlockKey(legacy));
74897
+ let layer = {};
74898
+ for (const key of [...legacyKeys, harnessBlockKey(canonical)]) {
74899
+ layer = mergeOmoConfigRecords(layer, toRecord(config[key]) ?? {});
74900
+ }
74901
+ return layer;
74747
74902
  }
74748
74903
  function resolveOmoConfigView(options) {
74749
74904
  const profiles = toRecord(options.config["profiles"]);
@@ -74773,7 +74928,7 @@ var HARNESS_KEYS;
74773
74928
  var init_resolution = __esm(() => {
74774
74929
  init_schema();
74775
74930
  init_merge();
74776
- HARNESS_KEYS = [...new Set([...HARNESS_IDS, ...OMO_CONFIG_HARNESS_IDS])].map((harness) => `[${harness}]`);
74931
+ HARNESS_KEYS = [...new Set([...HARNESS_IDS, ...OMO_CONFIG_HARNESS_IDS, ...OMO_CONFIG_LEGACY_HARNESS_IDS])].map((harness) => harnessBlockKey(harness));
74777
74932
  });
74778
74933
 
74779
74934
  // packages/omo-config-core/src/loader/loader.ts
@@ -74794,6 +74949,7 @@ function parseJsoncSafe2(content) {
74794
74949
  function stripResolutionControlKeys(config) {
74795
74950
  const {
74796
74951
  "[codex]": _codex,
74952
+ "[native]": _native,
74797
74953
  "[opencode]": _opencode,
74798
74954
  "[senpi]": _senpi,
74799
74955
  profiles: _profiles,
@@ -74819,21 +74975,21 @@ function hasUnsafeUnrecognizedKey(issues) {
74819
74975
  function hasTamperedPrototype(value) {
74820
74976
  if (Array.isArray(value))
74821
74977
  return value.some((entry) => hasTamperedPrototype(entry));
74822
- if (!isRecord10(value))
74978
+ if (!isRecord11(value))
74823
74979
  return false;
74824
74980
  const prototype = Object.getPrototypeOf(value);
74825
74981
  if (prototype !== Object.prototype && prototype !== null)
74826
74982
  return true;
74827
74983
  return Object.values(value).some((entry) => hasTamperedPrototype(entry));
74828
74984
  }
74829
- function isRecord10(value) {
74985
+ function isRecord11(value) {
74830
74986
  return typeof value === "object" && value !== null && !Array.isArray(value);
74831
74987
  }
74832
74988
  function containerAt(record, path) {
74833
74989
  let container = record;
74834
74990
  for (const segment of path) {
74835
74991
  const next = container[segment];
74836
- if (!isRecord10(next))
74992
+ if (!isRecord11(next))
74837
74993
  return null;
74838
74994
  container = next;
74839
74995
  }
@@ -74944,6 +75100,15 @@ function legacyCategoryDiagnostic(path, renames) {
74944
75100
  issuePaths: renames.map((rename) => rename.path)
74945
75101
  };
74946
75102
  }
75103
+ function legacyHarnessDiagnostic(path, renames) {
75104
+ const detail = renames.map((rename) => rename.dropped ? `${rename.path} ignored because ${rename.canonical} is also configured` : `${rename.path} renamed to ${rename.canonical}`).join(", ");
75105
+ return {
75106
+ kind: "deprecated-keys",
75107
+ message: `Deprecated harness block in ${path}: ${detail}. Rename it; the alias is removed in a future release.`,
75108
+ path,
75109
+ issuePaths: renames.map((rename) => rename.path)
75110
+ };
75111
+ }
74947
75112
  function loadOmoConfig(options = {}) {
74948
75113
  const fileSystem = options.fileSystem ?? DEFAULT_READ_FILE_SYSTEM;
74949
75114
  const cwd = options.cwd ?? process.cwd();
@@ -74966,8 +75131,12 @@ function loadOmoConfig(options = {}) {
74966
75131
  if (canonicalized.renames.length > 0) {
74967
75132
  diagnostics.push(legacyCategoryDiagnostic(candidate.path, canonicalized.renames));
74968
75133
  }
74969
- layers.push({ config: canonicalized.document, source: loaded.source });
74970
- merged = mergeOmoConfigRecords(merged, canonicalized.document);
75134
+ const harnessCanonicalized = canonicalizeLegacyHarnessBlocks(canonicalized.document);
75135
+ if (harnessCanonicalized.renames.length > 0) {
75136
+ diagnostics.push(legacyHarnessDiagnostic(candidate.path, harnessCanonicalized.renames));
75137
+ }
75138
+ layers.push({ config: harnessCanonicalized.document, source: loaded.source });
75139
+ merged = mergeOmoConfigRecords(merged, harnessCanonicalized.document);
74971
75140
  }
74972
75141
  }
74973
75142
  const requestedProfile = resolveOmoProfileName({
@@ -75015,6 +75184,7 @@ var init_loader2 = __esm(() => {
75015
75184
 
75016
75185
  // packages/omo-config-core/src/loader/index.ts
75017
75186
  var init_loader3 = __esm(() => {
75187
+ init_disabled_skills();
75018
75188
  init_loader2();
75019
75189
  init_merge();
75020
75190
  init_paths();
@@ -77332,14 +77502,14 @@ function transformConfigJsoncSources(input) {
77332
77502
  const omo = recordAt(legacy, "[omo]");
77333
77503
  const senpi = recordAt(legacy, "[senpi]");
77334
77504
  const history = legacyMigrationHistory(input.discovered, input.sources);
77335
- const diagnostics = omo !== undefined && senpi !== undefined ? ["conflict: [senpi] legacy [omo] kept [senpi]"] : [];
77505
+ const diagnostics = omo !== undefined && senpi !== undefined ? ["conflict: [native] legacy [omo] kept [native]"] : [];
77336
77506
  return {
77337
77507
  diagnostics,
77338
77508
  document: {
77339
77509
  $schema: OMO_SCHEMA_URL,
77340
77510
  ...recordAt(legacy, "[opencode]") === undefined ? {} : { "[opencode]": recordAt(legacy, "[opencode]") },
77341
77511
  ...recordAt(legacy, "[codex]") === undefined ? {} : { "[codex]": recordAt(legacy, "[codex]") },
77342
- ...senpi === undefined && omo === undefined ? {} : { "[senpi]": senpi ?? omo },
77512
+ ...senpi === undefined && omo === undefined ? {} : { "[native]": senpi ?? omo },
77343
77513
  ...Object.keys(history).length === 0 ? {} : { legacy_migrations: history }
77344
77514
  }
77345
77515
  };
@@ -77603,7 +77773,7 @@ function normalizeTypedBlock(value, path, diagnostics, recurseProfiles) {
77603
77773
  }
77604
77774
  if (result["models"] !== undefined)
77605
77775
  result["models"] = normalizeCatalog(result["models"]);
77606
- for (const harness of ["[senpi]", "[codex]"]) {
77776
+ for (const harness of ["[senpi]", "[native]", "[codex]"]) {
77607
77777
  if (result[harness] !== undefined)
77608
77778
  result[harness] = normalizeTypedBlock(result[harness], [...path, harness], diagnostics, false);
77609
77779
  }
@@ -77657,6 +77827,19 @@ var init_category_deep_split = __esm(() => {
77657
77827
  init_src4();
77658
77828
  });
77659
77829
 
77830
+ // packages/omo-opencode/src/config-migration/harness-native-rename.ts
77831
+ function transformHarnessNativeRename(document) {
77832
+ const { document: canonicalized, renames } = canonicalizeLegacyHarnessBlocks(document);
77833
+ return {
77834
+ diagnostics: renames.map((rename) => rename.dropped ? `${rename.path} removed: ${rename.canonical} is already configured` : `${rename.path} renamed to ${rename.canonical}`),
77835
+ document: canonicalized
77836
+ };
77837
+ }
77838
+ var HARNESS_NATIVE_RENAME_MIGRATION_ID = "2026-09-harness-native-rename";
77839
+ var init_harness_native_rename = __esm(() => {
77840
+ init_src4();
77841
+ });
77842
+
77660
77843
  // packages/omo-opencode/src/config-migration/migration-plans.ts
77661
77844
  function backupTimestamp(value) {
77662
77845
  return value ?? new Date().toISOString().replace(/[:.]/g, "-");
@@ -77735,6 +77918,18 @@ function categoryDeepSplitPlan(targetPath) {
77735
77918
  transform: inspect
77736
77919
  };
77737
77920
  }
77921
+ function harnessNativeRenamePlan(targetPath) {
77922
+ const inspect = (sources) => transformHarnessNativeRename(sources[0]?.value);
77923
+ return {
77924
+ id: HARNESS_NATIVE_RENAME_MIGRATION_ID,
77925
+ inspect,
77926
+ mode: "replace-target",
77927
+ shouldRun: hasLegacyHarnessBlocks,
77928
+ sources: [],
77929
+ targetPath,
77930
+ transform: inspect
77931
+ };
77932
+ }
77738
77933
  function existingOmoConfigPath(directory, options) {
77739
77934
  const fileSystem = discoveryFileSystem(options);
77740
77935
  for (const fileName of ["omo.jsonc", "omo.json"]) {
@@ -77798,7 +77993,8 @@ function createLegacyConfigMigrationPlans(options) {
77798
77993
  return [
77799
77994
  ...legacyPlans,
77800
77995
  ...inPlaceTargets.map(reasoningPlan),
77801
- ...inPlaceTargets.map(categoryDeepSplitPlan)
77996
+ ...inPlaceTargets.map(categoryDeepSplitPlan),
77997
+ ...inPlaceTargets.map(harnessNativeRenamePlan)
77802
77998
  ];
77803
77999
  }
77804
78000
  var init_migration_plans = __esm(() => {
@@ -77809,6 +78005,7 @@ var init_migration_plans = __esm(() => {
77809
78005
  init_transform_opencode();
77810
78006
  init_reasoning_unification();
77811
78007
  init_category_deep_split();
78008
+ init_harness_native_rename();
77812
78009
  init_src4();
77813
78010
  });
77814
78011
 
@@ -78593,7 +78790,7 @@ function shouldRetainLine(line, cutoffMs) {
78593
78790
  function parseDiagnosticLine(line) {
78594
78791
  try {
78595
78792
  const parsed = JSON.parse(line);
78596
- if (!isRecord12(parsed)) {
78793
+ if (!isRecord13(parsed)) {
78597
78794
  return null;
78598
78795
  }
78599
78796
  return parsed;
@@ -78604,7 +78801,7 @@ function parseDiagnosticLine(line) {
78604
78801
  throw error;
78605
78802
  }
78606
78803
  }
78607
- function isRecord12(value) {
78804
+ function isRecord13(value) {
78608
78805
  return value !== null && typeof value === "object" && !Array.isArray(value);
78609
78806
  }
78610
78807
  function trimToMaxBytes(lines) {
@@ -86094,7 +86291,7 @@ function coerceBool(value) {
86094
86291
  function coerceString(value) {
86095
86292
  return typeof value == "string" ? value : undefined;
86096
86293
  }
86097
- function isRecord13(value) {
86294
+ function isRecord14(value) {
86098
86295
  return typeof value == "object" && value !== null && !Array.isArray(value);
86099
86296
  }
86100
86297
  function toRfc3339(timestamp) {
@@ -86116,7 +86313,7 @@ function relocateInto(properties, key, value) {
86116
86313
  properties[key] = value;
86117
86314
  }
86118
86315
  function buildV1Event(message) {
86119
- const sourceProperties = isRecord13(message.properties) ? message.properties : {};
86316
+ const sourceProperties = isRecord14(message.properties) ? message.properties : {};
86120
86317
  const properties = {
86121
86318
  ...sourceProperties
86122
86319
  };
@@ -88261,7 +88458,7 @@ var package_default2;
88261
88458
  var init_package2 = __esm(() => {
88262
88459
  package_default2 = {
88263
88460
  name: "@oh-my-opencode/omo-codex",
88264
- version: "5.0.0-beta.81",
88461
+ version: "5.0.0-beta.83",
88265
88462
  type: "module",
88266
88463
  private: true,
88267
88464
  description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
@@ -91436,8 +91633,11 @@ function formatConfigSummary(config) {
91436
91633
  if (config.hasCodex) {
91437
91634
  lines.push(` ${SYMBOLS.info} Codex autonomous mode: ${config.codexAutonomous ? "enabled" : "disabled"}`);
91438
91635
  }
91439
- if (config.hasSenpi) {
91440
- lines.push(` ${SYMBOLS.info} Senpi adapter: enabled`);
91636
+ if (config.hasNative) {
91637
+ lines.push(` ${SYMBOLS.info} OmO Native: installing from omo-ai@beta`);
91638
+ }
91639
+ if (config.hasNativeDev) {
91640
+ lines.push(` ${SYMBOLS.info} OmO Native development adapter: enabled`);
91441
91641
  }
91442
91642
  if (!config.hasOpenCode)
91443
91643
  return lines.join(`
@@ -91594,7 +91794,8 @@ function argsToConfig(args) {
91594
91794
  const platform = resolvePlatform(args);
91595
91795
  const hasOpenCode = platform === "opencode" || platform === "both";
91596
91796
  const hasCodex = platform === "codex" || platform === "both";
91597
- const hasSenpi = platform === "senpi";
91797
+ const hasNative = platform === "native";
91798
+ const hasNativeDev = platform === "native-dev";
91598
91799
  return {
91599
91800
  platform,
91600
91801
  hasOpenCode,
@@ -91604,7 +91805,8 @@ function argsToConfig(args) {
91604
91805
  hasGemini: hasOpenCode && args.gemini === "yes",
91605
91806
  hasCopilot: hasOpenCode && args.copilot === "yes",
91606
91807
  hasCodex,
91607
- hasSenpi,
91808
+ hasNative,
91809
+ hasNativeDev,
91608
91810
  hasOpencodeZen: hasOpenCode && args.opencodeZen === "yes",
91609
91811
  hasZaiCodingPlan: hasOpenCode && args.zaiCodingPlan === "yes",
91610
91812
  hasKimiForCoding: hasOpenCode && args.kimiForCoding === "yes",
@@ -94328,10 +94530,10 @@ function readCatalogMultiAgentVersion(model, cachePath) {
94328
94530
  } catch {
94329
94531
  return null;
94330
94532
  }
94331
- if (!isRecord11(cache) || !Array.isArray(cache.models))
94533
+ if (!isRecord12(cache) || !Array.isArray(cache.models))
94332
94534
  return null;
94333
94535
  for (const entry of cache.models) {
94334
- if (!isRecord11(entry))
94536
+ if (!isRecord12(entry))
94335
94537
  continue;
94336
94538
  if (entry.slug !== model && entry.id !== model)
94337
94539
  continue;
@@ -94356,7 +94558,7 @@ function readRootModelCatalogPath(config) {
94356
94558
  const single = config.match(/^\s*model_catalog_json\s*=\s*'([^']+)'/m);
94357
94559
  return single?.[1] ?? null;
94358
94560
  }
94359
- function isRecord11(value) {
94561
+ function isRecord12(value) {
94360
94562
  return typeof value === "object" && value !== null && !Array.isArray(value);
94361
94563
  }
94362
94564
  function removeFeatureFlagSetting(config, featureName) {
@@ -97165,7 +97367,7 @@ async function readSettings(settingsPath) {
97165
97367
  throw error;
97166
97368
  }
97167
97369
  const parsed = JSON.parse(raw);
97168
- if (!isRecord14(parsed))
97370
+ if (!isRecord15(parsed))
97169
97371
  throw new Error(`${settingsPath} must contain a JSON object`);
97170
97372
  return parsed;
97171
97373
  }
@@ -97226,7 +97428,7 @@ async function nextBackupPath(settingsPath) {
97226
97428
  function timestampForBackup() {
97227
97429
  return new Date().toISOString().replace(/[-:.]/g, "");
97228
97430
  }
97229
- function isRecord14(value) {
97431
+ function isRecord15(value) {
97230
97432
  return typeof value === "object" && value !== null && !Array.isArray(value);
97231
97433
  }
97232
97434
  async function readPackageName(packagePath) {
@@ -97246,7 +97448,7 @@ async function readPackageName(packagePath) {
97246
97448
  return;
97247
97449
  throw error;
97248
97450
  }
97249
- return isRecord14(parsed) && typeof parsed.name === "string" ? parsed.name : undefined;
97451
+ return isRecord15(parsed) && typeof parsed.name === "string" ? parsed.name : undefined;
97250
97452
  }
97251
97453
  async function fileExists(path) {
97252
97454
  try {
@@ -97270,6 +97472,7 @@ var REQUIRED_PLUGIN_ARTIFACTS = [
97270
97472
  join61("extensions", "memory-run-supervisor.mjs"),
97271
97473
  ...PERSONA_ASSET_FILES.map((filename) => join61("extensions", filename)),
97272
97474
  join61("skills", "ast-grep", "SKILL.md"),
97475
+ join61("skills", "browser", "SKILL.md"),
97273
97476
  join61("skills", "coding-agent-sessions", "SKILL.md"),
97274
97477
  join61("skills", "debugging", "SKILL.md"),
97275
97478
  join61("skills", "frontend", "SKILL.md"),
@@ -97361,7 +97564,7 @@ async function verifyAstGrepRuntimeIntegrity(pluginPath, platform) {
97361
97564
  }
97362
97565
  }
97363
97566
  function isAstGrepRuntimeManifest(value) {
97364
- if (!isRecord14(value))
97567
+ if (!isRecord15(value))
97365
97568
  return false;
97366
97569
  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));
97367
97570
  }
@@ -97451,6 +97654,91 @@ function findRepoRoot2(importerDir) {
97451
97654
  function fileExistsSync(path) {
97452
97655
  return existsSync30(path);
97453
97656
  }
97657
+ // packages/omo-opencode/src/cli/install-native-dev/index.ts
97658
+ async function runNativeDevInstaller(options) {
97659
+ return runSenpiInstaller(options);
97660
+ }
97661
+
97662
+ // packages/omo-opencode/src/cli/install-native/plan.ts
97663
+ var NATIVE_PACKAGE_SPEC = "omo-ai@beta";
97664
+ var NATIVE_SETUP_COMMAND = "omo setup";
97665
+ 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.";
97666
+ var PLANS = {
97667
+ bun: { packageManager: "bun", command: "bun", args: ["add", "-g", NATIVE_PACKAGE_SPEC] },
97668
+ npm: { packageManager: "npm", command: "npm", args: ["i", "-g", NATIVE_PACKAGE_SPEC] }
97669
+ };
97670
+ function resolveNativeInstallPlan(bunAvailable) {
97671
+ return bunAvailable ? PLANS.bun : PLANS.npm;
97672
+ }
97673
+ function formatNativeInstallCommand(plan) {
97674
+ return [plan.command, ...plan.args].join(" ");
97675
+ }
97676
+ // packages/omo-opencode/src/cli/install-native/run-native-install.ts
97677
+ init_bun_which_shim();
97678
+ init_spawn_with_windows_hide();
97679
+ function describeExit(plan, result) {
97680
+ const stderr = result.stderr?.trim();
97681
+ const head = `${plan.packageManager} exited with code ${result.exitCode}`;
97682
+ return stderr ? `${head}: ${stderr.split(`
97683
+ `).slice(-3).join(" ")}` : head;
97684
+ }
97685
+ async function runNativeInstall(dependencies = defaultNativeInstallDependencies()) {
97686
+ const plan = resolveNativeInstallPlan(await dependencies.isBunAvailable());
97687
+ const notes = plan.packageManager === "npm" ? [NATIVE_RECOMMENDED_RUNTIME_NOTE] : [];
97688
+ const manualCommand = formatNativeInstallCommand(plan);
97689
+ try {
97690
+ const result = await dependencies.spawn(plan.command, plan.args);
97691
+ if (result.exitCode === 0)
97692
+ return { ok: true, plan, notes };
97693
+ return { ok: false, plan, notes, failure: { reason: describeExit(plan, result), manualCommand } };
97694
+ } catch (error) {
97695
+ const reason = error instanceof Error ? error.message : String(error);
97696
+ return { ok: false, plan, notes, failure: { reason, manualCommand } };
97697
+ }
97698
+ }
97699
+ function nativeInstallSuccessLine() {
97700
+ return `OmO Native installed. Run ${NATIVE_SETUP_COMMAND} to finish onboarding.`;
97701
+ }
97702
+ function nativeInstallFailureLines(failure) {
97703
+ return [
97704
+ `OmO Native install failed: ${failure.reason}`,
97705
+ `Install it yourself with: ${failure.manualCommand}`,
97706
+ `Then run ${NATIVE_SETUP_COMMAND}.`
97707
+ ];
97708
+ }
97709
+ function defaultNativeInstallDependencies() {
97710
+ return {
97711
+ isBunAvailable: () => bunWhich("bun") !== null,
97712
+ spawn: async (command, args) => {
97713
+ const proc = spawnWithWindowsHide([command, ...args], {
97714
+ env: process.env,
97715
+ stdout: "inherit",
97716
+ stderr: "inherit"
97717
+ });
97718
+ return { exitCode: await proc.exited };
97719
+ }
97720
+ };
97721
+ }
97722
+ // packages/omo-opencode/src/cli/native-edition-hint.ts
97723
+ var NATIVE_EDITION_INSTALL_COMMAND = "bun add -g omo-ai@beta";
97724
+ 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";
97725
+ var NATIVE_EDITION_HINT_TITLE = "OmO Native (beta)";
97726
+ var PLAIN_PAINT = {
97727
+ command: (text) => text,
97728
+ link: (text) => text
97729
+ };
97730
+ function shouldShowNativeEditionHint(config) {
97731
+ return !config.hasNative && !config.hasNativeDev;
97732
+ }
97733
+ function nativeEditionHintLines(paint = PLAIN_PAINT) {
97734
+ return [
97735
+ `omo also ships as OmO Native: the same omo as one ${paint.command("omo")} command, with no OpenCode host required.`,
97736
+ `Try it next to this install: ${paint.command(NATIVE_EDITION_INSTALL_COMMAND)}, then run ${paint.command("omo")}.`,
97737
+ "This install keeps working as-is.",
97738
+ `Guide: ${paint.link(NATIVE_EDITION_GUIDE_URL)}`
97739
+ ];
97740
+ }
97741
+
97454
97742
  // packages/omo-opencode/src/cli/star-request.ts
97455
97743
  import { execFile as execFile4 } from "node:child_process";
97456
97744
  import { promisify as promisify3 } from "node:util";
@@ -97462,7 +97750,8 @@ var PLATFORM_REPOSITORIES = {
97462
97750
  opencode: ["code-yeongyu/oh-my-openagent"],
97463
97751
  codex: STAR_REPOSITORIES,
97464
97752
  both: STAR_REPOSITORIES,
97465
- senpi: STAR_REPOSITORIES
97753
+ native: STAR_REPOSITORIES,
97754
+ "native-dev": STAR_REPOSITORIES
97466
97755
  };
97467
97756
  var execFileAsync2 = promisify3(execFile4);
97468
97757
  async function runGitHubStarCommand(repository) {
@@ -97964,14 +98253,27 @@ async function runCliInstaller(args, version) {
97964
98253
  }
97965
98254
  console.log();
97966
98255
  }
97967
- if (config.hasSenpi) {
97968
- printInfo("Installing Senpi harness adapter...");
98256
+ if (config.hasNative) {
98257
+ printInfo("Installing OmO Native...");
98258
+ const outcome = await runNativeInstall();
98259
+ if (outcome.failure) {
98260
+ for (const line of nativeInstallFailureLines(outcome.failure))
98261
+ printError(line);
98262
+ return 1;
98263
+ }
98264
+ for (const note of outcome.notes)
98265
+ printInfo(note);
98266
+ printSuccess(nativeInstallSuccessLine());
98267
+ console.log();
98268
+ }
98269
+ if (config.hasNativeDev) {
98270
+ printInfo("Installing the OmO Native development adapter...");
97969
98271
  try {
97970
- const senpiResult = await runSenpiInstaller();
97971
- printSuccess(`Senpi adapter installed ${SYMBOLS.arrow} ${import_picocolors3.default.dim(senpiResult.settingsPath)}`);
98272
+ const nativeDevResult = await runNativeDevInstaller();
98273
+ printSuccess(`OmO Native development adapter installed ${SYMBOLS.arrow} ${import_picocolors3.default.dim(nativeDevResult.settingsPath)}`);
97972
98274
  } catch (error) {
97973
98275
  const message = error instanceof Error ? error.message : String(error);
97974
- printError(`Senpi install failed: ${message}`);
98276
+ printError(`OmO Native development adapter install failed: ${message}`);
97975
98277
  return 1;
97976
98278
  }
97977
98279
  console.log();
@@ -97982,6 +98284,13 @@ async function runCliInstaller(args, version) {
97982
98284
  printBox(`${import_picocolors3.default.bold("Pro Tip:")} Include ${import_picocolors3.default.cyan("ultrawork")} (or ${import_picocolors3.default.cyan("ulw")}) in your prompt.
97983
98285
  ` + `All features work like magic-parallel agents, background tasks,
97984
98286
  ` + `deep exploration, and relentless execution until completion.`, "The Magic Word");
98287
+ if (shouldShowNativeEditionHint(config)) {
98288
+ printInfo(import_picocolors3.default.bold(NATIVE_EDITION_HINT_TITLE));
98289
+ for (const line of nativeEditionHintLines({ command: import_picocolors3.default.cyan, link: import_picocolors3.default.underline })) {
98290
+ console.log(` ${line}`);
98291
+ }
98292
+ console.log();
98293
+ }
97985
98294
  if (args.tui) {
97986
98295
  await maybePromptForGitHubStars(config.platform);
97987
98296
  }
@@ -99117,16 +99426,20 @@ var import_picocolors4 = __toESM(require_picocolors(), 1);
99117
99426
  // packages/omo-opencode/src/cli/tui-install-prompts.ts
99118
99427
  init_model_fallback();
99119
99428
 
99120
- // packages/omo-opencode/src/cli/senpi-platform-flag.ts
99121
- var SENPI_PLATFORM_ENV_FLAG = "OMO_ENABLE_SENPI_PLATFORM";
99122
- function isSenpiPlatformEnabled(env = process.env) {
99123
- const value = env[SENPI_PLATFORM_ENV_FLAG]?.trim().toLowerCase();
99124
- return value === "1" || value === "true";
99429
+ // packages/omo-opencode/src/cli/native-dev-platform-flag.ts
99430
+ var NATIVE_DEV_PLATFORM_ENV_FLAG = "OMO_ENABLE_NATIVE_DEV_PLATFORM";
99431
+ var LEGACY_NATIVE_DEV_PLATFORM_ENV_FLAG = "OMO_ENABLE_SENPI_PLATFORM";
99432
+ function isTruthy(value) {
99433
+ const normalized = value?.trim().toLowerCase();
99434
+ return normalized === "1" || normalized === "true";
99435
+ }
99436
+ function isNativeDevPlatformEnabled(env = process.env) {
99437
+ return isTruthy(env[NATIVE_DEV_PLATFORM_ENV_FLAG]) || isTruthy(env[LEGACY_NATIVE_DEV_PLATFORM_ENV_FLAG]);
99125
99438
  }
99126
99439
  function availableInstallPlatforms(env = process.env) {
99127
- const platforms = ["opencode", "codex", "both"];
99128
- if (isSenpiPlatformEnabled(env))
99129
- platforms.push("senpi");
99440
+ const platforms = ["opencode", "codex", "both", "native"];
99441
+ if (isNativeDevPlatformEnabled(env))
99442
+ platforms.push("native-dev");
99130
99443
  return platforms;
99131
99444
  }
99132
99445
 
@@ -99149,10 +99462,15 @@ async function promptInstallPlatform(initialValue = "opencode") {
99149
99462
  const options = [
99150
99463
  { value: "opencode", label: "OpenCode", hint: "Install OpenCode plugin only" },
99151
99464
  { value: "codex", label: "Codex", hint: "Install Codex harness adapter only" },
99152
- { value: "both", label: "Both", hint: "Install OpenCode plugin and Codex adapter" }
99465
+ { value: "both", label: "Both", hint: "Install OpenCode plugin and Codex adapter" },
99466
+ { value: "native", label: "OmO Native", hint: "Install the standalone omo command (no host required)" }
99153
99467
  ];
99154
- if (isSenpiPlatformEnabled()) {
99155
- options.push({ value: "senpi", label: "Senpi", hint: "Install Senpi harness adapter only" });
99468
+ if (isNativeDevPlatformEnabled()) {
99469
+ options.push({
99470
+ value: "native-dev",
99471
+ label: "OmO Native (development adapter)",
99472
+ hint: "Register this checkout into a local engine install"
99473
+ });
99156
99474
  }
99157
99475
  return selectOrCancel({
99158
99476
  message: "Which platform do you want to install?",
@@ -99163,7 +99481,8 @@ async function promptInstallPlatform(initialValue = "opencode") {
99163
99481
  async function promptInstallConfig(detected, platform, codexAutonomousOverride) {
99164
99482
  const hasOpenCode = platform === "opencode" || platform === "both";
99165
99483
  const hasCodex = platform === "codex" || platform === "both";
99166
- const hasSenpi = platform === "senpi";
99484
+ const hasNative = platform === "native";
99485
+ const hasNativeDev = platform === "native-dev";
99167
99486
  const codexAutonomous = await resolveCodexAutonomous(hasCodex, codexAutonomousOverride);
99168
99487
  if (codexAutonomous === null)
99169
99488
  return null;
@@ -99177,7 +99496,8 @@ async function promptInstallConfig(detected, platform, codexAutonomousOverride)
99177
99496
  hasGemini: false,
99178
99497
  hasCopilot: false,
99179
99498
  hasCodex,
99180
- hasSenpi,
99499
+ hasNative,
99500
+ hasNativeDev,
99181
99501
  hasOpencodeZen: false,
99182
99502
  hasZaiCodingPlan: false,
99183
99503
  hasKimiForCoding: false,
@@ -99320,7 +99640,8 @@ async function promptInstallConfig(detected, platform, codexAutonomousOverride)
99320
99640
  hasGemini: gemini === "yes",
99321
99641
  hasCopilot: copilot === "yes",
99322
99642
  hasCodex,
99323
- hasSenpi,
99643
+ hasNative,
99644
+ hasNativeDev,
99324
99645
  hasOpencodeZen: opencodeZen === "yes",
99325
99646
  hasZaiCodingPlan: zaiCodingPlan === "yes",
99326
99647
  hasKimiForCoding: kimiForCoding === "yes",
@@ -99451,15 +99772,29 @@ async function runTuiInstaller(args, version) {
99451
99772
  log4.info("The Codex harness is NOT installed. Fix the error above, then re-run: bunx oh-my-openagent install --platform=codex");
99452
99773
  }
99453
99774
  }
99454
- if (config.hasSenpi) {
99455
- spinner2.start("Installing Senpi harness adapter");
99775
+ if (config.hasNative) {
99776
+ spinner2.start("Installing OmO Native");
99777
+ const outcome = await runNativeInstall();
99778
+ if (outcome.failure) {
99779
+ spinner2.stop(`OmO Native install failed ${import_picocolors4.default.yellow("[!]")}`);
99780
+ for (const line of nativeInstallFailureLines(outcome.failure))
99781
+ log4.error(line);
99782
+ outro(import_picocolors4.default.red("Installation failed."));
99783
+ return 1;
99784
+ }
99785
+ spinner2.stop(nativeInstallSuccessLine());
99786
+ for (const note of outcome.notes)
99787
+ log4.info(note);
99788
+ }
99789
+ if (config.hasNativeDev) {
99790
+ spinner2.start("Installing the OmO Native development adapter");
99456
99791
  try {
99457
- const senpiResult = await runSenpiInstaller();
99458
- spinner2.stop(`Senpi adapter installed to ${import_picocolors4.default.cyan(senpiResult.settingsPath)}`);
99792
+ const nativeDevResult = await runNativeDevInstaller();
99793
+ spinner2.stop(`OmO Native development adapter installed to ${import_picocolors4.default.cyan(nativeDevResult.settingsPath)}`);
99459
99794
  } catch (error) {
99460
99795
  const message = error instanceof Error ? error.message : String(error);
99461
- spinner2.stop(`Senpi install failed ${import_picocolors4.default.yellow("[!]")}`);
99462
- log4.error(`Senpi install failed: ${message}`);
99796
+ spinner2.stop(`OmO Native development adapter install failed ${import_picocolors4.default.yellow("[!]")}`);
99797
+ log4.error(`OmO Native development adapter install failed: ${message}`);
99463
99798
  outro(import_picocolors4.default.red("Installation failed."));
99464
99799
  return 1;
99465
99800
  }
@@ -99473,6 +99808,11 @@ async function runTuiInstaller(args, version) {
99473
99808
  note(`Include ${import_picocolors4.default.cyan("ultrawork")} (or ${import_picocolors4.default.cyan("ulw")}) in your prompt.
99474
99809
  ` + `All features work like magic-parallel agents, background tasks,
99475
99810
  ` + `deep exploration, and relentless execution until completion.`, "The Magic Word");
99811
+ if (shouldShowNativeEditionHint(config)) {
99812
+ log4.info(import_picocolors4.default.bold(NATIVE_EDITION_HINT_TITLE));
99813
+ log4.message(nativeEditionHintLines({ command: import_picocolors4.default.cyan, link: import_picocolors4.default.underline }).join(`
99814
+ `));
99815
+ }
99476
99816
  const shouldStar = await confirm({
99477
99817
  message: "Star the repos on GitHub?",
99478
99818
  initialValue: false
@@ -99511,7 +99851,7 @@ async function runTuiInstaller(args, version) {
99511
99851
 
99512
99852
  // packages/omo-opencode/src/cli/install.ts
99513
99853
  var VERSION = package_default.version;
99514
- async function install3(args) {
99854
+ async function install2(args) {
99515
99855
  return args.tui ? runTuiInstaller(args, VERSION) : runCliInstaller(args, VERSION);
99516
99856
  }
99517
99857
  // packages/omo-opencode/src/cli/cleanup.ts
@@ -101012,7 +101352,8 @@ var HookNameSchema = _enum([
101012
101352
  "webfetch-redirect-guard",
101013
101353
  "fsync-skip-warning",
101014
101354
  "plan-format-validator",
101015
- "legacy-plugin-toast"
101355
+ "legacy-plugin-toast",
101356
+ "native-edition-nudge"
101016
101357
  ]);
101017
101358
  // packages/omo-opencode/src/config/schema/i18n.ts
101018
101359
  init_zod();
@@ -103115,14 +103456,14 @@ var NO_OP_POSTHOG2 = {
103115
103456
  function isFalsy(value) {
103116
103457
  return value === "0" || value === "false" || value === "no";
103117
103458
  }
103118
- function isTruthy(value) {
103459
+ function isTruthy2(value) {
103119
103460
  return value === "1" || value === "true" || value === "yes";
103120
103461
  }
103121
103462
  function shouldDisablePostHog(env, configEnabled) {
103122
103463
  if (configEnabled === false) {
103123
103464
  return true;
103124
103465
  }
103125
- if (isTruthy(env.OMO_DISABLE_POSTHOG?.trim().toLowerCase())) {
103466
+ if (isTruthy2(env.OMO_DISABLE_POSTHOG?.trim().toLowerCase())) {
103126
103467
  return true;
103127
103468
  }
103128
103469
  return isFalsy(env.OMO_SEND_ANONYMOUS_TELEMETRY?.trim().toLowerCase());
@@ -104645,14 +104986,14 @@ var CANONICAL_REPLACEMENT = new Map([
104645
104986
  var MIGRATE_SUFFIX = ", or run: oh-my-openagent config migrate";
104646
104987
  var TUNING_CONTAINERS = new Set(["agents", "categories", "models"]);
104647
104988
  var PASSTHROUGH_CONTAINERS = new Set(["provider_options", "providerOptions"]);
104648
- function isRecord15(value) {
104989
+ function isRecord16(value) {
104649
104990
  return value !== null && typeof value === "object" && !Array.isArray(value);
104650
104991
  }
104651
104992
  function isHarnessBlock(key) {
104652
104993
  return key.startsWith("[") && key.endsWith("]");
104653
104994
  }
104654
104995
  function collectIssues(configPath, value, prefix, fixSuffix) {
104655
- if (!isRecord15(value))
104996
+ if (!isRecord16(value))
104656
104997
  return [];
104657
104998
  const issues = [];
104658
104999
  for (const [key, child] of Object.entries(value)) {
@@ -104668,7 +105009,7 @@ function collectIssues(configPath, value, prefix, fixSuffix) {
104668
105009
  });
104669
105010
  continue;
104670
105011
  }
104671
- if (!isRecord15(child))
105012
+ if (!isRecord16(child))
104672
105013
  continue;
104673
105014
  if (PASSTHROUGH_CONTAINERS.has(key))
104674
105015
  continue;
@@ -104687,7 +105028,7 @@ function collectIssues(configPath, value, prefix, fixSuffix) {
104687
105028
  return issues;
104688
105029
  }
104689
105030
  function migrateFixSuffix(parsed) {
104690
- if (isRecord15(parsed) && hasMigrationMarker(parsed, REASONING_UNIFICATION_MIGRATION_ID))
105031
+ if (isRecord16(parsed) && hasMigrationMarker(parsed, REASONING_UNIFICATION_MIGRATION_ID))
104691
105032
  return "";
104692
105033
  return MIGRATE_SUFFIX;
104693
105034
  }
@@ -105925,12 +106266,12 @@ async function auditBundleTargets(pluginRoot) {
105925
106266
  let referencedCount = 0;
105926
106267
  for (const manifestPath of await findManifestPaths(pluginRoot, ".mcp.json")) {
105927
106268
  const manifest = await readJson2(manifestPath);
105928
- if (manifest === null || !isRecord16(manifest["mcpServers"]))
106269
+ if (manifest === null || !isRecord17(manifest["mcpServers"]))
105929
106270
  continue;
105930
106271
  const manifestRoot = dirname33(manifestPath);
105931
106272
  const isRootManifest = resolve24(manifestRoot) === resolve24(pluginRoot);
105932
106273
  for (const server of Object.values(manifest["mcpServers"])) {
105933
- if (!isRecord16(server) || !Array.isArray(server["args"]))
106274
+ if (!isRecord17(server) || !Array.isArray(server["args"]))
105934
106275
  continue;
105935
106276
  for (const arg of server["args"]) {
105936
106277
  if (typeof arg !== "string" || !isPluginRuntimePathArg(arg))
@@ -106016,7 +106357,7 @@ function collectHookCommands(value, commands) {
106016
106357
  collectHookCommands(item, commands);
106017
106358
  return;
106018
106359
  }
106019
- if (!isRecord16(value))
106360
+ if (!isRecord17(value))
106020
106361
  return;
106021
106362
  if (value["type"] === "command") {
106022
106363
  if (typeof value["command"] === "string")
@@ -106071,7 +106412,7 @@ function parseDegradedEntries(value) {
106071
106412
  return [];
106072
106413
  const entries = [];
106073
106414
  for (const item of value) {
106074
- if (!isRecord16(item))
106415
+ if (!isRecord17(item))
106075
106416
  continue;
106076
106417
  if (typeof item["component"] !== "string" || typeof item["reason"] !== "string")
106077
106418
  continue;
@@ -106105,7 +106446,7 @@ function degradedDetailLines(entries) {
106105
106446
  async function readJson2(path) {
106106
106447
  try {
106107
106448
  const parsed = JSON.parse(await readFile29(path, "utf8"));
106108
- return isRecord16(parsed) ? parsed : null;
106449
+ return isRecord17(parsed) ? parsed : null;
106109
106450
  } catch (error) {
106110
106451
  if (error instanceof Error)
106111
106452
  return null;
@@ -106126,7 +106467,7 @@ function normalizeRelative(root, target) {
106126
106467
  function normalizePathSeparators(path) {
106127
106468
  return path.split("\\").join("/");
106128
106469
  }
106129
- function isRecord16(value) {
106470
+ function isRecord17(value) {
106130
106471
  return typeof value === "object" && value !== null && !Array.isArray(value);
106131
106472
  }
106132
106473
 
@@ -108236,8 +108577,8 @@ var program2 = new Command;
108236
108577
  function resolveInstallArgs(options, invocationName = process.env.OMO_INVOCATION_NAME) {
108237
108578
  const defaultPlatform = process.env.OMO_EDITION === "codex" || invocationName === "lazycodex" || invocationName === "lazycodex-ai" ? "codex" : undefined;
108238
108579
  const platform = options.platform ?? defaultPlatform;
108239
- if (platform === "senpi" && !isSenpiPlatformEnabled()) {
108240
- 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.`);
108580
+ if (platform === "native-dev" && !isNativeDevPlatformEnabled()) {
108581
+ 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.`);
108241
108582
  }
108242
108583
  return {
108243
108584
  tui: options.tui !== false,
@@ -108282,7 +108623,7 @@ Model Providers (Priority: Native > Copilot > OpenCode Zen > Z.ai > Kimi > Baili
108282
108623
  `).action(async (options) => {
108283
108624
  const rootOptions = program2.opts();
108284
108625
  const args = resolveInstallArgs({ ...options, platform: options.platform ?? rootOptions.platform });
108285
- const exitCode = await install3(args);
108626
+ const exitCode = await install2(args);
108286
108627
  process.exit(exitCode);
108287
108628
  });
108288
108629
  configureCleanupCommand(program2);