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
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.81",
67
+ version: "5.0.0-beta.83",
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",
@@ -88,6 +88,7 @@ var init_package = __esm(() => {
88
88
  "packages/openclaw-core",
89
89
  "packages/boulder-state",
90
90
  "packages/memory-core",
91
+ "packages/isolation-core",
91
92
  "packages/telemetry-core",
92
93
  "packages/claude-code-compat-core",
93
94
  "packages/skills-loader-core",
@@ -197,7 +198,7 @@ var init_package = __esm(() => {
197
198
  prepublishOnly: "bun run clean && bun run build:lsp-tools-mcp && bun run build:lsp-daemon && bun run build",
198
199
  "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",
199
200
  typecheck: "tsgo --noEmit && bun run typecheck:script && bun run typecheck:packages",
200
- "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",
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/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",
201
202
  "typecheck:script": "tsgo --noEmit -p script/tsconfig.json",
202
203
  test: "bun test --timeout 20000",
203
204
  "changelog:section": "bun script/changelog-section.ts",
@@ -246,7 +247,7 @@ var init_package = __esm(() => {
246
247
  zod: "^4.6.5"
247
248
  },
248
249
  devDependencies: {
249
- "@code-yeongyu/senpi": "2026.9.21-2",
250
+ "@code-yeongyu/senpi": "2026.9.22-2",
250
251
  "@oh-my-opencode/agents-md-core": "workspace:*",
251
252
  "@oh-my-opencode/ast-grep-mcp": "workspace:*",
252
253
  "@oh-my-opencode/boulder-state": "workspace:*",
@@ -256,6 +257,7 @@ var init_package = __esm(() => {
256
257
  "@oh-my-opencode/git-bash-mcp": "workspace:*",
257
258
  "@oh-my-opencode/hashline-core": "workspace:*",
258
259
  "@oh-my-opencode/lsp-core": "workspace:*",
260
+ "@oh-my-opencode/isolation-core": "workspace:*",
259
261
  "@oh-my-opencode/memory-core": "workspace:*",
260
262
  "@oh-my-opencode/mcp-client-core": "workspace:*",
261
263
  "@oh-my-opencode/mcp-stdio-core": "workspace:*",
@@ -285,18 +287,18 @@ var init_package = __esm(() => {
285
287
  typescript: "^7.0.2"
286
288
  },
287
289
  optionalDependencies: {
288
- "oh-my-opencode-darwin-arm64": "5.0.0-beta.81",
289
- "oh-my-opencode-darwin-x64": "5.0.0-beta.81",
290
- "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.81",
291
- "oh-my-opencode-linux-arm64": "5.0.0-beta.81",
292
- "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.81",
293
- "oh-my-opencode-linux-x64": "5.0.0-beta.81",
294
- "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.81",
295
- "oh-my-opencode-linux-x64-musl": "5.0.0-beta.81",
296
- "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.81",
297
- "oh-my-opencode-windows-arm64": "5.0.0-beta.81",
298
- "oh-my-opencode-windows-x64": "5.0.0-beta.81",
299
- "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.81"
290
+ "oh-my-opencode-darwin-arm64": "5.0.0-beta.83",
291
+ "oh-my-opencode-darwin-x64": "5.0.0-beta.83",
292
+ "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.83",
293
+ "oh-my-opencode-linux-arm64": "5.0.0-beta.83",
294
+ "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.83",
295
+ "oh-my-opencode-linux-x64": "5.0.0-beta.83",
296
+ "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.83",
297
+ "oh-my-opencode-linux-x64-musl": "5.0.0-beta.83",
298
+ "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.83",
299
+ "oh-my-opencode-windows-arm64": "5.0.0-beta.83",
300
+ "oh-my-opencode-windows-x64": "5.0.0-beta.83",
301
+ "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.83"
300
302
  },
301
303
  overrides: {
302
304
  "@earendil-works/pi-agent-core": "0.84.2",
@@ -7225,6 +7227,7 @@ var init_agent_model_requirements = __esm(() => {
7225
7227
  },
7226
7228
  librarian: {
7227
7229
  fallbackChain: [
7230
+ { providers: ["kimi-for-coding"], model: "kimi-for-coding-highspeed", variant: "off" },
7228
7231
  { providers: ["openai", "openai-codex"], model: "gpt-5.6-luna-fast", variant: "low" },
7229
7232
  { providers: ["deepseek"], model: "deepseek-v4-flash", variant: "max" },
7230
7233
  { providers: ["opencode-go", "bailian-coding-plan"], model: "qwen3.7-plus" },
@@ -7237,6 +7240,7 @@ var init_agent_model_requirements = __esm(() => {
7237
7240
  },
7238
7241
  explore: {
7239
7242
  fallbackChain: [
7243
+ { providers: ["kimi-for-coding"], model: "kimi-for-coding-highspeed", variant: "off" },
7240
7244
  { providers: ["openai", "openai-codex"], model: "gpt-5.6-luna-fast", variant: "low" },
7241
7245
  { providers: ["deepseek"], model: "deepseek-v4-flash", variant: "max" },
7242
7246
  { providers: ["opencode-go", "bailian-coding-plan"], model: "qwen3.7-plus" },
@@ -7410,7 +7414,6 @@ var init_category_model_requirements = __esm(() => {
7410
7414
  },
7411
7415
  quick: {
7412
7416
  fallbackChain: [
7413
- { providers: ["kimi-for-coding"], model: "kimi-for-coding-highspeed" },
7414
7417
  { providers: ["openai-codex"], model: "gpt-5.6-luna-fast", variant: "low" },
7415
7418
  { providers: ["deepseek"], model: "deepseek-v4-flash", variant: "off" },
7416
7419
  {
@@ -7430,7 +7433,8 @@ var init_category_model_requirements = __esm(() => {
7430
7433
  },
7431
7434
  "unspecified-low": {
7432
7435
  fallbackChain: [
7433
- { 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" },
7434
7438
  {
7435
7439
  providers: ["openai", "openai-codex", "github-copilot", "opencode"],
7436
7440
  model: "gpt-5.6-terra",
@@ -7452,11 +7456,6 @@ var init_category_model_requirements = __esm(() => {
7452
7456
  },
7453
7457
  "unspecified-high": {
7454
7458
  fallbackChain: [
7455
- {
7456
- providers: ["openai", "openai-codex", "github-copilot", "opencode"],
7457
- model: "gpt-6-astra",
7458
- variant: "high"
7459
- },
7460
7459
  {
7461
7460
  providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
7462
7461
  model: "claude-opus-5",
@@ -8292,6 +8291,36 @@ var init_supplemental_entries = __esm(() => {
8292
8291
  output: 32768
8293
8292
  }
8294
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
+ },
8295
8324
  "xai/grok-build-0.1": {
8296
8325
  id: "xai/grok-build-0.1",
8297
8326
  family: "grok",
@@ -8321,6 +8350,36 @@ var init_supplemental_entries = __esm(() => {
8321
8350
  context: 256000,
8322
8351
  output: 32768
8323
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
+ }
8324
8383
  }
8325
8384
  };
8326
8385
  });
@@ -9294,21 +9353,21 @@ var init_openai_categories = __esm(() => {
9294
9353
  },
9295
9354
  {
9296
9355
  name: "quick",
9297
- config: { model: "kimi-for-coding/kimi-for-coding-highspeed" },
9356
+ config: { model: "openai/gpt-5.6-luna-fast", variant: "low" },
9298
9357
  description: "Trivial tasks - single file changes, typo fixes, simple modifications",
9299
9358
  callerGuidance: QUICK_CATEGORY_CALLER_GUIDANCE,
9300
9359
  promptAppend: QUICK_CATEGORY_PROMPT_APPEND
9301
9360
  },
9302
9361
  {
9303
9362
  name: "unspecified-low",
9304
- config: { model: "xai/grok-4.6", variant: "xhigh" },
9363
+ config: { model: "xiaomi/mimo-v2.6-pro", variant: "max" },
9305
9364
  description: "Tasks that don't fit other categories, low effort required",
9306
9365
  callerGuidance: UNSPECIFIED_LOW_CATEGORY_CALLER_GUIDANCE,
9307
9366
  promptAppend: UNSPECIFIED_LOW_CATEGORY_PROMPT_APPEND
9308
9367
  },
9309
9368
  {
9310
9369
  name: "unspecified-high",
9311
- config: { model: "openai/gpt-6-astra", variant: "high" },
9370
+ config: { model: "anthropic/claude-opus-5", variant: "xhigh" },
9312
9371
  description: "Tasks that don't fit other categories, high effort required",
9313
9372
  callerGuidance: UNSPECIFIED_HIGH_CATEGORY_CALLER_GUIDANCE,
9314
9373
  promptAppend: UNSPECIFIED_HIGH_CATEGORY_PROMPT_APPEND,
@@ -73881,12 +73940,14 @@ var init_git_master = __esm(() => {
73881
73940
  });
73882
73941
 
73883
73942
  // packages/omo-config-core/src/schema/harness.ts
73884
- var HARNESS_IDS, OMO_CONFIG_HARNESS_IDS, OmoHarnessIdSchema;
73943
+ var HARNESS_IDS, OMO_CONFIG_HARNESS_IDS, OmoHarnessIdSchema, OMO_CONFIG_LEGACY_HARNESS_ALIASES, OMO_CONFIG_LEGACY_HARNESS_IDS;
73885
73944
  var init_harness = __esm(() => {
73886
73945
  init_zod();
73887
73946
  HARNESS_IDS = ["codex", "opencode", "omo"];
73888
- OMO_CONFIG_HARNESS_IDS = ["opencode", "senpi", "codex"];
73947
+ OMO_CONFIG_HARNESS_IDS = ["opencode", "native", "codex"];
73889
73948
  OmoHarnessIdSchema = _enum(OMO_CONFIG_HARNESS_IDS);
73949
+ OMO_CONFIG_LEGACY_HARNESS_ALIASES = { senpi: "native" };
73950
+ OMO_CONFIG_LEGACY_HARNESS_IDS = Object.keys(OMO_CONFIG_LEGACY_HARNESS_ALIASES);
73890
73951
  });
73891
73952
 
73892
73953
  // packages/omo-config-core/src/schema/memory.ts
@@ -74137,7 +74198,7 @@ function resolveOmoTaskSettings(input, resolveParallelism = availableParallelism
74137
74198
  global_concurrency: record2["global_concurrency"] ?? Math.max(8, resolveParallelism() * 2)
74138
74199
  });
74139
74200
  }
74140
- var DEFAULT_RESIDENCY_MAX_CHILDREN = 16, ResidencyMaxChildrenInputSchema, OmoTaskWaitSchema, OmoTaskTeamSettingsSchema, OmoTaskWarningsSchema, OmoTaskDagSettingsSchema, OmoTaskSettingsSchema, OmoTaskDagSettingsLayerSchema, OmoTaskWaitLayerSchema, OmoTaskTeamSettingsLayerSchema, OmoTaskWarningsLayerSchema, OmoTaskSettingsLayerSchema;
74201
+ var DEFAULT_RESIDENCY_MAX_CHILDREN = 16, ResidencyMaxChildrenInputSchema, OmoTaskWaitSchema, OmoTaskTeamSettingsSchema, OmoTaskWarningsSchema, IsolationBackendKindSchema, OmoTaskIsolationSchema, isolationDefaults, OmoTaskIsolationLayerSchema, OmoTaskDagSettingsSchema, OmoTaskSettingsSchema, OmoTaskDagSettingsLayerSchema, OmoTaskWaitLayerSchema, OmoTaskTeamSettingsLayerSchema, OmoTaskWarningsLayerSchema, OmoTaskSettingsLayerSchema;
74141
74202
  var init_task = __esm(() => {
74142
74203
  init_zod();
74143
74204
  ResidencyMaxChildrenInputSchema = union([number2().int().nonnegative(), literal("unlimited")]);
@@ -74154,6 +74215,31 @@ var init_task = __esm(() => {
74154
74215
  OmoTaskWarningsSchema = object({
74155
74216
  unavailable_categories: boolean2().default(true)
74156
74217
  }).strict();
74218
+ IsolationBackendKindSchema = _enum([
74219
+ "auto",
74220
+ "apfs",
74221
+ "btrfs",
74222
+ "zfs",
74223
+ "reflink",
74224
+ "overlayfs",
74225
+ "block-clone",
74226
+ "rcopy"
74227
+ ]);
74228
+ OmoTaskIsolationSchema = object({
74229
+ enabled: boolean2().default(false),
74230
+ backend: IsolationBackendKindSchema.default("auto"),
74231
+ apply: boolean2().default(true),
74232
+ merge: _enum(["patch", "branch"]).default("patch"),
74233
+ commits: _enum(["generic", "ai"]).default("generic")
74234
+ }).strict();
74235
+ isolationDefaults = OmoTaskIsolationSchema.parse({});
74236
+ OmoTaskIsolationLayerSchema = object({
74237
+ enabled: boolean2().optional(),
74238
+ backend: IsolationBackendKindSchema.optional(),
74239
+ apply: boolean2().optional(),
74240
+ merge: _enum(["patch", "branch"]).optional(),
74241
+ commits: _enum(["generic", "ai"]).optional()
74242
+ }).strict();
74157
74243
  OmoTaskDagSettingsSchema = object({
74158
74244
  max_nodes_per_run: number2().int().positive().default(64),
74159
74245
  max_runs_per_session: number2().int().positive().default(16),
@@ -74165,6 +74251,7 @@ var init_task = __esm(() => {
74165
74251
  max_prompt_bytes: number2().int().positive().default(262144)
74166
74252
  }).strict();
74167
74253
  OmoTaskSettingsSchema = object({
74254
+ isolation: OmoTaskIsolationSchema.default(isolationDefaults),
74168
74255
  default_execution_mode: _enum(["auto", "in-process", "process"]).default("auto"),
74169
74256
  process_runner: _enum(["host", "child-process"]).default("host"),
74170
74257
  host_engine_policy: _enum(["upgrade", "fallback"]).default("upgrade"),
@@ -74213,6 +74300,7 @@ var init_task = __esm(() => {
74213
74300
  unavailable_categories: boolean2().optional()
74214
74301
  }).strict();
74215
74302
  OmoTaskSettingsLayerSchema = object({
74303
+ isolation: OmoTaskIsolationLayerSchema.optional(),
74216
74304
  default_execution_mode: _enum(["auto", "in-process", "process"]).optional(),
74217
74305
  process_runner: _enum(["host", "child-process"]).optional(),
74218
74306
  host_engine_policy: _enum(["upgrade", "fallback"]).optional(),
@@ -74362,6 +74450,7 @@ var init_config = __esm(() => {
74362
74450
  telemetry: OmoTelemetrySettingsLayerSchema.optional(),
74363
74451
  disabled_skills: OmoDisabledSkillsSchema.optional(),
74364
74452
  "[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
74453
+ "[native]": OmoTypedHarnessConfigSchema.optional(),
74365
74454
  "[senpi]": OmoTypedHarnessConfigSchema.optional(),
74366
74455
  "[codex]": OmoTypedHarnessConfigSchema.optional()
74367
74456
  }).strict();
@@ -74380,6 +74469,7 @@ var init_config = __esm(() => {
74380
74469
  telemetry: OmoTelemetrySettingsSchema.optional(),
74381
74470
  disabled_skills: OmoDisabledSkillsSchema.optional(),
74382
74471
  "[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
74472
+ "[native]": OmoTypedHarnessConfigSchema.optional(),
74383
74473
  "[senpi]": OmoTypedHarnessConfigSchema.optional(),
74384
74474
  "[codex]": OmoTypedHarnessConfigSchema.optional(),
74385
74475
  profiles: record(string2(), OmoConfigProfileSchema).default({}),
@@ -74401,6 +74491,7 @@ var init_config = __esm(() => {
74401
74491
  telemetry: OmoTelemetrySettingsLayerSchema.optional(),
74402
74492
  disabled_skills: OmoDisabledSkillsSchema.optional(),
74403
74493
  "[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
74494
+ "[native]": OmoTypedHarnessConfigSchema.optional(),
74404
74495
  "[senpi]": OmoTypedHarnessConfigSchema.optional(),
74405
74496
  "[codex]": OmoTypedHarnessConfigSchema.optional(),
74406
74497
  profiles: record(string2(), OmoConfigProfileSchema).optional(),
@@ -74471,6 +74562,60 @@ var init_legacy_category_names = __esm(() => {
74471
74562
  LEGACY_CATEGORY_NAME_ALIASES = { deep: "deep-low" };
74472
74563
  });
74473
74564
 
74565
+ // packages/omo-config-core/src/schema/legacy-harness-names.ts
74566
+ function canonicalHarnessName(name) {
74567
+ return Object.hasOwn(OMO_CONFIG_LEGACY_HARNESS_ALIASES, name) ? OMO_CONFIG_LEGACY_HARNESS_ALIASES[name] : name;
74568
+ }
74569
+ function harnessBlockKey(harness) {
74570
+ return `[${harness}]`;
74571
+ }
74572
+ function legacyHarnessOfBlockKey(key) {
74573
+ if (!key.startsWith("[") || !key.endsWith("]"))
74574
+ return;
74575
+ const harness = key.slice(1, -1);
74576
+ return Object.hasOwn(OMO_CONFIG_LEGACY_HARNESS_ALIASES, harness) ? harness : undefined;
74577
+ }
74578
+ function isRecord10(value) {
74579
+ return typeof value === "object" && value !== null && !Array.isArray(value);
74580
+ }
74581
+ function canonicalizeBlocksIn(container, path, renames) {
74582
+ const result = {};
74583
+ for (const [key, value] of Object.entries(container)) {
74584
+ const legacyHarness = legacyHarnessOfBlockKey(key);
74585
+ if (legacyHarness === undefined) {
74586
+ result[key] = value;
74587
+ continue;
74588
+ }
74589
+ const canonical = harnessBlockKey(canonicalHarnessName(legacyHarness));
74590
+ const dropped = Object.hasOwn(container, canonical);
74591
+ renames.push({ canonical, dropped, legacy: key, path: [...path, key].join(".") });
74592
+ if (!dropped)
74593
+ result[canonical] = value;
74594
+ }
74595
+ return result;
74596
+ }
74597
+ function canonicalizeLegacyHarnessBlocks(document) {
74598
+ if (!isRecord10(document))
74599
+ return { document: {}, renames: [] };
74600
+ const renames = [];
74601
+ const canonicalized = canonicalizeBlocksIn(document, [], renames);
74602
+ const profiles = canonicalized["profiles"];
74603
+ if (isRecord10(profiles)) {
74604
+ const canonicalProfiles = {};
74605
+ for (const [name, profile] of Object.entries(profiles)) {
74606
+ canonicalProfiles[name] = isRecord10(profile) ? canonicalizeBlocksIn(profile, ["profiles", name], renames) : profile;
74607
+ }
74608
+ canonicalized["profiles"] = canonicalProfiles;
74609
+ }
74610
+ return { document: canonicalized, renames };
74611
+ }
74612
+ function hasLegacyHarnessBlocks(document) {
74613
+ return canonicalizeLegacyHarnessBlocks(document).renames.length > 0;
74614
+ }
74615
+ var init_legacy_harness_names = __esm(() => {
74616
+ init_harness();
74617
+ });
74618
+
74474
74619
  // packages/omo-config-core/src/schema/index.ts
74475
74620
  var init_schema = __esm(() => {
74476
74621
  init_agent();
@@ -74481,6 +74626,7 @@ var init_schema = __esm(() => {
74481
74626
  init_git_master();
74482
74627
  init_harness();
74483
74628
  init_legacy_category_names();
74629
+ init_legacy_harness_names();
74484
74630
  init_memory();
74485
74631
  init_model_catalog();
74486
74632
  init_model_profile();
@@ -74490,6 +74636,9 @@ var init_schema = __esm(() => {
74490
74636
  init_telemetry();
74491
74637
  });
74492
74638
 
74639
+ // packages/omo-config-core/src/loader/disabled-skills.ts
74640
+ var init_disabled_skills = () => {};
74641
+
74493
74642
  // packages/omo-config-core/src/loader/merge.ts
74494
74643
  function isUnsafeObjectKey2(key) {
74495
74644
  return DANGEROUS_KEYS2.has(key);
@@ -74664,7 +74813,13 @@ function withoutControlKeys(config) {
74664
74813
  function harnessLayer(config, harness) {
74665
74814
  if (harness === undefined)
74666
74815
  return {};
74667
- return toRecord(config[`[${harness}]`]) ?? {};
74816
+ const canonical = canonicalHarnessName(harness);
74817
+ const legacyKeys = Object.entries(OMO_CONFIG_LEGACY_HARNESS_ALIASES).filter(([, target]) => target === canonical).map(([legacy]) => harnessBlockKey(legacy));
74818
+ let layer = {};
74819
+ for (const key of [...legacyKeys, harnessBlockKey(canonical)]) {
74820
+ layer = mergeOmoConfigRecords(layer, toRecord(config[key]) ?? {});
74821
+ }
74822
+ return layer;
74668
74823
  }
74669
74824
  function resolveOmoConfigView(options) {
74670
74825
  const profiles = toRecord(options.config["profiles"]);
@@ -74694,7 +74849,7 @@ var HARNESS_KEYS;
74694
74849
  var init_resolution = __esm(() => {
74695
74850
  init_schema();
74696
74851
  init_merge();
74697
- HARNESS_KEYS = [...new Set([...HARNESS_IDS, ...OMO_CONFIG_HARNESS_IDS])].map((harness) => `[${harness}]`);
74852
+ HARNESS_KEYS = [...new Set([...HARNESS_IDS, ...OMO_CONFIG_HARNESS_IDS, ...OMO_CONFIG_LEGACY_HARNESS_IDS])].map((harness) => harnessBlockKey(harness));
74698
74853
  });
74699
74854
 
74700
74855
  // packages/omo-config-core/src/loader/loader.ts
@@ -74715,6 +74870,7 @@ function parseJsoncSafe2(content) {
74715
74870
  function stripResolutionControlKeys(config) {
74716
74871
  const {
74717
74872
  "[codex]": _codex,
74873
+ "[native]": _native,
74718
74874
  "[opencode]": _opencode,
74719
74875
  "[senpi]": _senpi,
74720
74876
  profiles: _profiles,
@@ -74740,21 +74896,21 @@ function hasUnsafeUnrecognizedKey(issues) {
74740
74896
  function hasTamperedPrototype(value) {
74741
74897
  if (Array.isArray(value))
74742
74898
  return value.some((entry) => hasTamperedPrototype(entry));
74743
- if (!isRecord10(value))
74899
+ if (!isRecord11(value))
74744
74900
  return false;
74745
74901
  const prototype = Object.getPrototypeOf(value);
74746
74902
  if (prototype !== Object.prototype && prototype !== null)
74747
74903
  return true;
74748
74904
  return Object.values(value).some((entry) => hasTamperedPrototype(entry));
74749
74905
  }
74750
- function isRecord10(value) {
74906
+ function isRecord11(value) {
74751
74907
  return typeof value === "object" && value !== null && !Array.isArray(value);
74752
74908
  }
74753
74909
  function containerAt(record, path) {
74754
74910
  let container = record;
74755
74911
  for (const segment of path) {
74756
74912
  const next = container[segment];
74757
- if (!isRecord10(next))
74913
+ if (!isRecord11(next))
74758
74914
  return null;
74759
74915
  container = next;
74760
74916
  }
@@ -74865,6 +75021,15 @@ function legacyCategoryDiagnostic(path, renames) {
74865
75021
  issuePaths: renames.map((rename) => rename.path)
74866
75022
  };
74867
75023
  }
75024
+ function legacyHarnessDiagnostic(path, renames) {
75025
+ const detail = renames.map((rename) => rename.dropped ? `${rename.path} ignored because ${rename.canonical} is also configured` : `${rename.path} renamed to ${rename.canonical}`).join(", ");
75026
+ return {
75027
+ kind: "deprecated-keys",
75028
+ message: `Deprecated harness block in ${path}: ${detail}. Rename it; the alias is removed in a future release.`,
75029
+ path,
75030
+ issuePaths: renames.map((rename) => rename.path)
75031
+ };
75032
+ }
74868
75033
  function loadOmoConfig(options = {}) {
74869
75034
  const fileSystem = options.fileSystem ?? DEFAULT_READ_FILE_SYSTEM;
74870
75035
  const cwd = options.cwd ?? process.cwd();
@@ -74887,8 +75052,12 @@ function loadOmoConfig(options = {}) {
74887
75052
  if (canonicalized.renames.length > 0) {
74888
75053
  diagnostics.push(legacyCategoryDiagnostic(candidate.path, canonicalized.renames));
74889
75054
  }
74890
- layers.push({ config: canonicalized.document, source: loaded.source });
74891
- merged = mergeOmoConfigRecords(merged, canonicalized.document);
75055
+ const harnessCanonicalized = canonicalizeLegacyHarnessBlocks(canonicalized.document);
75056
+ if (harnessCanonicalized.renames.length > 0) {
75057
+ diagnostics.push(legacyHarnessDiagnostic(candidate.path, harnessCanonicalized.renames));
75058
+ }
75059
+ layers.push({ config: harnessCanonicalized.document, source: loaded.source });
75060
+ merged = mergeOmoConfigRecords(merged, harnessCanonicalized.document);
74892
75061
  }
74893
75062
  }
74894
75063
  const requestedProfile = resolveOmoProfileName({
@@ -74936,6 +75105,7 @@ var init_loader2 = __esm(() => {
74936
75105
 
74937
75106
  // packages/omo-config-core/src/loader/index.ts
74938
75107
  var init_loader3 = __esm(() => {
75108
+ init_disabled_skills();
74939
75109
  init_loader2();
74940
75110
  init_merge();
74941
75111
  init_paths();
@@ -77253,14 +77423,14 @@ function transformConfigJsoncSources(input) {
77253
77423
  const omo = recordAt(legacy, "[omo]");
77254
77424
  const senpi = recordAt(legacy, "[senpi]");
77255
77425
  const history = legacyMigrationHistory(input.discovered, input.sources);
77256
- const diagnostics = omo !== undefined && senpi !== undefined ? ["conflict: [senpi] legacy [omo] kept [senpi]"] : [];
77426
+ const diagnostics = omo !== undefined && senpi !== undefined ? ["conflict: [native] legacy [omo] kept [native]"] : [];
77257
77427
  return {
77258
77428
  diagnostics,
77259
77429
  document: {
77260
77430
  $schema: OMO_SCHEMA_URL,
77261
77431
  ...recordAt(legacy, "[opencode]") === undefined ? {} : { "[opencode]": recordAt(legacy, "[opencode]") },
77262
77432
  ...recordAt(legacy, "[codex]") === undefined ? {} : { "[codex]": recordAt(legacy, "[codex]") },
77263
- ...senpi === undefined && omo === undefined ? {} : { "[senpi]": senpi ?? omo },
77433
+ ...senpi === undefined && omo === undefined ? {} : { "[native]": senpi ?? omo },
77264
77434
  ...Object.keys(history).length === 0 ? {} : { legacy_migrations: history }
77265
77435
  }
77266
77436
  };
@@ -77524,7 +77694,7 @@ function normalizeTypedBlock(value, path, diagnostics, recurseProfiles) {
77524
77694
  }
77525
77695
  if (result["models"] !== undefined)
77526
77696
  result["models"] = normalizeCatalog(result["models"]);
77527
- for (const harness of ["[senpi]", "[codex]"]) {
77697
+ for (const harness of ["[senpi]", "[native]", "[codex]"]) {
77528
77698
  if (result[harness] !== undefined)
77529
77699
  result[harness] = normalizeTypedBlock(result[harness], [...path, harness], diagnostics, false);
77530
77700
  }
@@ -77578,6 +77748,19 @@ var init_category_deep_split = __esm(() => {
77578
77748
  init_src4();
77579
77749
  });
77580
77750
 
77751
+ // packages/omo-opencode/src/config-migration/harness-native-rename.ts
77752
+ function transformHarnessNativeRename(document) {
77753
+ const { document: canonicalized, renames } = canonicalizeLegacyHarnessBlocks(document);
77754
+ return {
77755
+ diagnostics: renames.map((rename) => rename.dropped ? `${rename.path} removed: ${rename.canonical} is already configured` : `${rename.path} renamed to ${rename.canonical}`),
77756
+ document: canonicalized
77757
+ };
77758
+ }
77759
+ var HARNESS_NATIVE_RENAME_MIGRATION_ID = "2026-09-harness-native-rename";
77760
+ var init_harness_native_rename = __esm(() => {
77761
+ init_src4();
77762
+ });
77763
+
77581
77764
  // packages/omo-opencode/src/config-migration/migration-plans.ts
77582
77765
  function backupTimestamp(value) {
77583
77766
  return value ?? new Date().toISOString().replace(/[:.]/g, "-");
@@ -77656,6 +77839,18 @@ function categoryDeepSplitPlan(targetPath) {
77656
77839
  transform: inspect
77657
77840
  };
77658
77841
  }
77842
+ function harnessNativeRenamePlan(targetPath) {
77843
+ const inspect = (sources) => transformHarnessNativeRename(sources[0]?.value);
77844
+ return {
77845
+ id: HARNESS_NATIVE_RENAME_MIGRATION_ID,
77846
+ inspect,
77847
+ mode: "replace-target",
77848
+ shouldRun: hasLegacyHarnessBlocks,
77849
+ sources: [],
77850
+ targetPath,
77851
+ transform: inspect
77852
+ };
77853
+ }
77659
77854
  function existingOmoConfigPath(directory, options) {
77660
77855
  const fileSystem = discoveryFileSystem(options);
77661
77856
  for (const fileName of ["omo.jsonc", "omo.json"]) {
@@ -77719,7 +77914,8 @@ function createLegacyConfigMigrationPlans(options) {
77719
77914
  return [
77720
77915
  ...legacyPlans,
77721
77916
  ...inPlaceTargets.map(reasoningPlan),
77722
- ...inPlaceTargets.map(categoryDeepSplitPlan)
77917
+ ...inPlaceTargets.map(categoryDeepSplitPlan),
77918
+ ...inPlaceTargets.map(harnessNativeRenamePlan)
77723
77919
  ];
77724
77920
  }
77725
77921
  var init_migration_plans = __esm(() => {
@@ -77730,6 +77926,7 @@ var init_migration_plans = __esm(() => {
77730
77926
  init_transform_opencode();
77731
77927
  init_reasoning_unification();
77732
77928
  init_category_deep_split();
77929
+ init_harness_native_rename();
77733
77930
  init_src4();
77734
77931
  });
77735
77932
 
@@ -78514,7 +78711,7 @@ function shouldRetainLine(line, cutoffMs) {
78514
78711
  function parseDiagnosticLine(line) {
78515
78712
  try {
78516
78713
  const parsed = JSON.parse(line);
78517
- if (!isRecord12(parsed)) {
78714
+ if (!isRecord13(parsed)) {
78518
78715
  return null;
78519
78716
  }
78520
78717
  return parsed;
@@ -78525,7 +78722,7 @@ function parseDiagnosticLine(line) {
78525
78722
  throw error;
78526
78723
  }
78527
78724
  }
78528
- function isRecord12(value) {
78725
+ function isRecord13(value) {
78529
78726
  return value !== null && typeof value === "object" && !Array.isArray(value);
78530
78727
  }
78531
78728
  function trimToMaxBytes(lines) {
@@ -86015,7 +86212,7 @@ function coerceBool(value) {
86015
86212
  function coerceString(value) {
86016
86213
  return typeof value == "string" ? value : undefined;
86017
86214
  }
86018
- function isRecord13(value) {
86215
+ function isRecord14(value) {
86019
86216
  return typeof value == "object" && value !== null && !Array.isArray(value);
86020
86217
  }
86021
86218
  function toRfc3339(timestamp) {
@@ -86037,7 +86234,7 @@ function relocateInto(properties, key, value) {
86037
86234
  properties[key] = value;
86038
86235
  }
86039
86236
  function buildV1Event(message) {
86040
- const sourceProperties = isRecord13(message.properties) ? message.properties : {};
86237
+ const sourceProperties = isRecord14(message.properties) ? message.properties : {};
86041
86238
  const properties = {
86042
86239
  ...sourceProperties
86043
86240
  };
@@ -88182,7 +88379,7 @@ var package_default2;
88182
88379
  var init_package2 = __esm(() => {
88183
88380
  package_default2 = {
88184
88381
  name: "@oh-my-opencode/omo-codex",
88185
- version: "5.0.0-beta.81",
88382
+ version: "5.0.0-beta.83",
88186
88383
  type: "module",
88187
88384
  private: true,
88188
88385
  description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
@@ -91357,8 +91554,11 @@ function formatConfigSummary(config) {
91357
91554
  if (config.hasCodex) {
91358
91555
  lines.push(` ${SYMBOLS.info} Codex autonomous mode: ${config.codexAutonomous ? "enabled" : "disabled"}`);
91359
91556
  }
91360
- if (config.hasSenpi) {
91361
- lines.push(` ${SYMBOLS.info} Senpi adapter: enabled`);
91557
+ if (config.hasNative) {
91558
+ lines.push(` ${SYMBOLS.info} OmO Native: installing from omo-ai@beta`);
91559
+ }
91560
+ if (config.hasNativeDev) {
91561
+ lines.push(` ${SYMBOLS.info} OmO Native development adapter: enabled`);
91362
91562
  }
91363
91563
  if (!config.hasOpenCode)
91364
91564
  return lines.join(`
@@ -91515,7 +91715,8 @@ function argsToConfig(args) {
91515
91715
  const platform = resolvePlatform(args);
91516
91716
  const hasOpenCode = platform === "opencode" || platform === "both";
91517
91717
  const hasCodex = platform === "codex" || platform === "both";
91518
- const hasSenpi = platform === "senpi";
91718
+ const hasNative = platform === "native";
91719
+ const hasNativeDev = platform === "native-dev";
91519
91720
  return {
91520
91721
  platform,
91521
91722
  hasOpenCode,
@@ -91525,7 +91726,8 @@ function argsToConfig(args) {
91525
91726
  hasGemini: hasOpenCode && args.gemini === "yes",
91526
91727
  hasCopilot: hasOpenCode && args.copilot === "yes",
91527
91728
  hasCodex,
91528
- hasSenpi,
91729
+ hasNative,
91730
+ hasNativeDev,
91529
91731
  hasOpencodeZen: hasOpenCode && args.opencodeZen === "yes",
91530
91732
  hasZaiCodingPlan: hasOpenCode && args.zaiCodingPlan === "yes",
91531
91733
  hasKimiForCoding: hasOpenCode && args.kimiForCoding === "yes",
@@ -94249,10 +94451,10 @@ function readCatalogMultiAgentVersion(model, cachePath) {
94249
94451
  } catch {
94250
94452
  return null;
94251
94453
  }
94252
- if (!isRecord11(cache) || !Array.isArray(cache.models))
94454
+ if (!isRecord12(cache) || !Array.isArray(cache.models))
94253
94455
  return null;
94254
94456
  for (const entry of cache.models) {
94255
- if (!isRecord11(entry))
94457
+ if (!isRecord12(entry))
94256
94458
  continue;
94257
94459
  if (entry.slug !== model && entry.id !== model)
94258
94460
  continue;
@@ -94277,7 +94479,7 @@ function readRootModelCatalogPath(config) {
94277
94479
  const single = config.match(/^\s*model_catalog_json\s*=\s*'([^']+)'/m);
94278
94480
  return single?.[1] ?? null;
94279
94481
  }
94280
- function isRecord11(value) {
94482
+ function isRecord12(value) {
94281
94483
  return typeof value === "object" && value !== null && !Array.isArray(value);
94282
94484
  }
94283
94485
  function removeFeatureFlagSetting(config, featureName) {
@@ -97086,7 +97288,7 @@ async function readSettings(settingsPath) {
97086
97288
  throw error;
97087
97289
  }
97088
97290
  const parsed = JSON.parse(raw);
97089
- if (!isRecord14(parsed))
97291
+ if (!isRecord15(parsed))
97090
97292
  throw new Error(`${settingsPath} must contain a JSON object`);
97091
97293
  return parsed;
97092
97294
  }
@@ -97147,7 +97349,7 @@ async function nextBackupPath(settingsPath) {
97147
97349
  function timestampForBackup() {
97148
97350
  return new Date().toISOString().replace(/[-:.]/g, "");
97149
97351
  }
97150
- function isRecord14(value) {
97352
+ function isRecord15(value) {
97151
97353
  return typeof value === "object" && value !== null && !Array.isArray(value);
97152
97354
  }
97153
97355
  async function readPackageName(packagePath) {
@@ -97167,7 +97369,7 @@ async function readPackageName(packagePath) {
97167
97369
  return;
97168
97370
  throw error;
97169
97371
  }
97170
- return isRecord14(parsed) && typeof parsed.name === "string" ? parsed.name : undefined;
97372
+ return isRecord15(parsed) && typeof parsed.name === "string" ? parsed.name : undefined;
97171
97373
  }
97172
97374
  async function fileExists(path) {
97173
97375
  try {
@@ -97191,6 +97393,7 @@ var REQUIRED_PLUGIN_ARTIFACTS = [
97191
97393
  join61("extensions", "memory-run-supervisor.mjs"),
97192
97394
  ...PERSONA_ASSET_FILES.map((filename) => join61("extensions", filename)),
97193
97395
  join61("skills", "ast-grep", "SKILL.md"),
97396
+ join61("skills", "browser", "SKILL.md"),
97194
97397
  join61("skills", "coding-agent-sessions", "SKILL.md"),
97195
97398
  join61("skills", "debugging", "SKILL.md"),
97196
97399
  join61("skills", "frontend", "SKILL.md"),
@@ -97282,7 +97485,7 @@ async function verifyAstGrepRuntimeIntegrity(pluginPath, platform) {
97282
97485
  }
97283
97486
  }
97284
97487
  function isAstGrepRuntimeManifest(value) {
97285
- if (!isRecord14(value))
97488
+ if (!isRecord15(value))
97286
97489
  return false;
97287
97490
  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));
97288
97491
  }
@@ -97372,6 +97575,91 @@ function findRepoRoot2(importerDir) {
97372
97575
  function fileExistsSync(path) {
97373
97576
  return existsSync30(path);
97374
97577
  }
97578
+ // packages/omo-opencode/src/cli/install-native-dev/index.ts
97579
+ async function runNativeDevInstaller(options) {
97580
+ return runSenpiInstaller(options);
97581
+ }
97582
+
97583
+ // packages/omo-opencode/src/cli/install-native/plan.ts
97584
+ var NATIVE_PACKAGE_SPEC = "omo-ai@beta";
97585
+ var NATIVE_SETUP_COMMAND = "omo setup";
97586
+ 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.";
97587
+ var PLANS = {
97588
+ bun: { packageManager: "bun", command: "bun", args: ["add", "-g", NATIVE_PACKAGE_SPEC] },
97589
+ npm: { packageManager: "npm", command: "npm", args: ["i", "-g", NATIVE_PACKAGE_SPEC] }
97590
+ };
97591
+ function resolveNativeInstallPlan(bunAvailable) {
97592
+ return bunAvailable ? PLANS.bun : PLANS.npm;
97593
+ }
97594
+ function formatNativeInstallCommand(plan) {
97595
+ return [plan.command, ...plan.args].join(" ");
97596
+ }
97597
+ // packages/omo-opencode/src/cli/install-native/run-native-install.ts
97598
+ init_bun_which_shim();
97599
+ init_spawn_with_windows_hide();
97600
+ function describeExit(plan, result) {
97601
+ const stderr = result.stderr?.trim();
97602
+ const head = `${plan.packageManager} exited with code ${result.exitCode}`;
97603
+ return stderr ? `${head}: ${stderr.split(`
97604
+ `).slice(-3).join(" ")}` : head;
97605
+ }
97606
+ async function runNativeInstall(dependencies = defaultNativeInstallDependencies()) {
97607
+ const plan = resolveNativeInstallPlan(await dependencies.isBunAvailable());
97608
+ const notes = plan.packageManager === "npm" ? [NATIVE_RECOMMENDED_RUNTIME_NOTE] : [];
97609
+ const manualCommand = formatNativeInstallCommand(plan);
97610
+ try {
97611
+ const result = await dependencies.spawn(plan.command, plan.args);
97612
+ if (result.exitCode === 0)
97613
+ return { ok: true, plan, notes };
97614
+ return { ok: false, plan, notes, failure: { reason: describeExit(plan, result), manualCommand } };
97615
+ } catch (error) {
97616
+ const reason = error instanceof Error ? error.message : String(error);
97617
+ return { ok: false, plan, notes, failure: { reason, manualCommand } };
97618
+ }
97619
+ }
97620
+ function nativeInstallSuccessLine() {
97621
+ return `OmO Native installed. Run ${NATIVE_SETUP_COMMAND} to finish onboarding.`;
97622
+ }
97623
+ function nativeInstallFailureLines(failure) {
97624
+ return [
97625
+ `OmO Native install failed: ${failure.reason}`,
97626
+ `Install it yourself with: ${failure.manualCommand}`,
97627
+ `Then run ${NATIVE_SETUP_COMMAND}.`
97628
+ ];
97629
+ }
97630
+ function defaultNativeInstallDependencies() {
97631
+ return {
97632
+ isBunAvailable: () => bunWhich("bun") !== null,
97633
+ spawn: async (command, args) => {
97634
+ const proc = spawnWithWindowsHide([command, ...args], {
97635
+ env: process.env,
97636
+ stdout: "inherit",
97637
+ stderr: "inherit"
97638
+ });
97639
+ return { exitCode: await proc.exited };
97640
+ }
97641
+ };
97642
+ }
97643
+ // packages/omo-opencode/src/cli/native-edition-hint.ts
97644
+ var NATIVE_EDITION_INSTALL_COMMAND = "bun add -g omo-ai@beta";
97645
+ 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";
97646
+ var NATIVE_EDITION_HINT_TITLE = "OmO Native (beta)";
97647
+ var PLAIN_PAINT = {
97648
+ command: (text) => text,
97649
+ link: (text) => text
97650
+ };
97651
+ function shouldShowNativeEditionHint(config) {
97652
+ return !config.hasNative && !config.hasNativeDev;
97653
+ }
97654
+ function nativeEditionHintLines(paint = PLAIN_PAINT) {
97655
+ return [
97656
+ `omo also ships as OmO Native: the same omo as one ${paint.command("omo")} command, with no OpenCode host required.`,
97657
+ `Try it next to this install: ${paint.command(NATIVE_EDITION_INSTALL_COMMAND)}, then run ${paint.command("omo")}.`,
97658
+ "This install keeps working as-is.",
97659
+ `Guide: ${paint.link(NATIVE_EDITION_GUIDE_URL)}`
97660
+ ];
97661
+ }
97662
+
97375
97663
  // packages/omo-opencode/src/cli/star-request.ts
97376
97664
  import { execFile as execFile4 } from "child_process";
97377
97665
  import { promisify as promisify3 } from "util";
@@ -97383,7 +97671,8 @@ var PLATFORM_REPOSITORIES = {
97383
97671
  opencode: ["code-yeongyu/oh-my-openagent"],
97384
97672
  codex: STAR_REPOSITORIES,
97385
97673
  both: STAR_REPOSITORIES,
97386
- senpi: STAR_REPOSITORIES
97674
+ native: STAR_REPOSITORIES,
97675
+ "native-dev": STAR_REPOSITORIES
97387
97676
  };
97388
97677
  var execFileAsync2 = promisify3(execFile4);
97389
97678
  async function runGitHubStarCommand(repository) {
@@ -97885,14 +98174,27 @@ async function runCliInstaller(args, version) {
97885
98174
  }
97886
98175
  console.log();
97887
98176
  }
97888
- if (config.hasSenpi) {
97889
- printInfo("Installing Senpi harness adapter...");
98177
+ if (config.hasNative) {
98178
+ printInfo("Installing OmO Native...");
98179
+ const outcome = await runNativeInstall();
98180
+ if (outcome.failure) {
98181
+ for (const line of nativeInstallFailureLines(outcome.failure))
98182
+ printError(line);
98183
+ return 1;
98184
+ }
98185
+ for (const note of outcome.notes)
98186
+ printInfo(note);
98187
+ printSuccess(nativeInstallSuccessLine());
98188
+ console.log();
98189
+ }
98190
+ if (config.hasNativeDev) {
98191
+ printInfo("Installing the OmO Native development adapter...");
97890
98192
  try {
97891
- const senpiResult = await runSenpiInstaller();
97892
- printSuccess(`Senpi adapter installed ${SYMBOLS.arrow} ${import_picocolors3.default.dim(senpiResult.settingsPath)}`);
98193
+ const nativeDevResult = await runNativeDevInstaller();
98194
+ printSuccess(`OmO Native development adapter installed ${SYMBOLS.arrow} ${import_picocolors3.default.dim(nativeDevResult.settingsPath)}`);
97893
98195
  } catch (error) {
97894
98196
  const message = error instanceof Error ? error.message : String(error);
97895
- printError(`Senpi install failed: ${message}`);
98197
+ printError(`OmO Native development adapter install failed: ${message}`);
97896
98198
  return 1;
97897
98199
  }
97898
98200
  console.log();
@@ -97903,6 +98205,13 @@ async function runCliInstaller(args, version) {
97903
98205
  printBox(`${import_picocolors3.default.bold("Pro Tip:")} Include ${import_picocolors3.default.cyan("ultrawork")} (or ${import_picocolors3.default.cyan("ulw")}) in your prompt.
97904
98206
  ` + `All features work like magic-parallel agents, background tasks,
97905
98207
  ` + `deep exploration, and relentless execution until completion.`, "The Magic Word");
98208
+ if (shouldShowNativeEditionHint(config)) {
98209
+ printInfo(import_picocolors3.default.bold(NATIVE_EDITION_HINT_TITLE));
98210
+ for (const line of nativeEditionHintLines({ command: import_picocolors3.default.cyan, link: import_picocolors3.default.underline })) {
98211
+ console.log(` ${line}`);
98212
+ }
98213
+ console.log();
98214
+ }
97906
98215
  if (args.tui) {
97907
98216
  await maybePromptForGitHubStars(config.platform);
97908
98217
  }
@@ -99038,16 +99347,20 @@ var import_picocolors4 = __toESM(require_picocolors(), 1);
99038
99347
  // packages/omo-opencode/src/cli/tui-install-prompts.ts
99039
99348
  init_model_fallback();
99040
99349
 
99041
- // packages/omo-opencode/src/cli/senpi-platform-flag.ts
99042
- var SENPI_PLATFORM_ENV_FLAG = "OMO_ENABLE_SENPI_PLATFORM";
99043
- function isSenpiPlatformEnabled(env = process.env) {
99044
- const value = env[SENPI_PLATFORM_ENV_FLAG]?.trim().toLowerCase();
99045
- return value === "1" || value === "true";
99350
+ // packages/omo-opencode/src/cli/native-dev-platform-flag.ts
99351
+ var NATIVE_DEV_PLATFORM_ENV_FLAG = "OMO_ENABLE_NATIVE_DEV_PLATFORM";
99352
+ var LEGACY_NATIVE_DEV_PLATFORM_ENV_FLAG = "OMO_ENABLE_SENPI_PLATFORM";
99353
+ function isTruthy(value) {
99354
+ const normalized = value?.trim().toLowerCase();
99355
+ return normalized === "1" || normalized === "true";
99356
+ }
99357
+ function isNativeDevPlatformEnabled(env = process.env) {
99358
+ return isTruthy(env[NATIVE_DEV_PLATFORM_ENV_FLAG]) || isTruthy(env[LEGACY_NATIVE_DEV_PLATFORM_ENV_FLAG]);
99046
99359
  }
99047
99360
  function availableInstallPlatforms(env = process.env) {
99048
- const platforms = ["opencode", "codex", "both"];
99049
- if (isSenpiPlatformEnabled(env))
99050
- platforms.push("senpi");
99361
+ const platforms = ["opencode", "codex", "both", "native"];
99362
+ if (isNativeDevPlatformEnabled(env))
99363
+ platforms.push("native-dev");
99051
99364
  return platforms;
99052
99365
  }
99053
99366
 
@@ -99070,10 +99383,15 @@ async function promptInstallPlatform(initialValue = "opencode") {
99070
99383
  const options = [
99071
99384
  { value: "opencode", label: "OpenCode", hint: "Install OpenCode plugin only" },
99072
99385
  { value: "codex", label: "Codex", hint: "Install Codex harness adapter only" },
99073
- { value: "both", label: "Both", hint: "Install OpenCode plugin and Codex adapter" }
99386
+ { value: "both", label: "Both", hint: "Install OpenCode plugin and Codex adapter" },
99387
+ { value: "native", label: "OmO Native", hint: "Install the standalone omo command (no host required)" }
99074
99388
  ];
99075
- if (isSenpiPlatformEnabled()) {
99076
- options.push({ value: "senpi", label: "Senpi", hint: "Install Senpi harness adapter only" });
99389
+ if (isNativeDevPlatformEnabled()) {
99390
+ options.push({
99391
+ value: "native-dev",
99392
+ label: "OmO Native (development adapter)",
99393
+ hint: "Register this checkout into a local engine install"
99394
+ });
99077
99395
  }
99078
99396
  return selectOrCancel({
99079
99397
  message: "Which platform do you want to install?",
@@ -99084,7 +99402,8 @@ async function promptInstallPlatform(initialValue = "opencode") {
99084
99402
  async function promptInstallConfig(detected, platform, codexAutonomousOverride) {
99085
99403
  const hasOpenCode = platform === "opencode" || platform === "both";
99086
99404
  const hasCodex = platform === "codex" || platform === "both";
99087
- const hasSenpi = platform === "senpi";
99405
+ const hasNative = platform === "native";
99406
+ const hasNativeDev = platform === "native-dev";
99088
99407
  const codexAutonomous = await resolveCodexAutonomous(hasCodex, codexAutonomousOverride);
99089
99408
  if (codexAutonomous === null)
99090
99409
  return null;
@@ -99098,7 +99417,8 @@ async function promptInstallConfig(detected, platform, codexAutonomousOverride)
99098
99417
  hasGemini: false,
99099
99418
  hasCopilot: false,
99100
99419
  hasCodex,
99101
- hasSenpi,
99420
+ hasNative,
99421
+ hasNativeDev,
99102
99422
  hasOpencodeZen: false,
99103
99423
  hasZaiCodingPlan: false,
99104
99424
  hasKimiForCoding: false,
@@ -99241,7 +99561,8 @@ async function promptInstallConfig(detected, platform, codexAutonomousOverride)
99241
99561
  hasGemini: gemini === "yes",
99242
99562
  hasCopilot: copilot === "yes",
99243
99563
  hasCodex,
99244
- hasSenpi,
99564
+ hasNative,
99565
+ hasNativeDev,
99245
99566
  hasOpencodeZen: opencodeZen === "yes",
99246
99567
  hasZaiCodingPlan: zaiCodingPlan === "yes",
99247
99568
  hasKimiForCoding: kimiForCoding === "yes",
@@ -99372,15 +99693,29 @@ async function runTuiInstaller(args, version) {
99372
99693
  log4.info("The Codex harness is NOT installed. Fix the error above, then re-run: bunx oh-my-openagent install --platform=codex");
99373
99694
  }
99374
99695
  }
99375
- if (config.hasSenpi) {
99376
- spinner2.start("Installing Senpi harness adapter");
99696
+ if (config.hasNative) {
99697
+ spinner2.start("Installing OmO Native");
99698
+ const outcome = await runNativeInstall();
99699
+ if (outcome.failure) {
99700
+ spinner2.stop(`OmO Native install failed ${import_picocolors4.default.yellow("[!]")}`);
99701
+ for (const line of nativeInstallFailureLines(outcome.failure))
99702
+ log4.error(line);
99703
+ outro(import_picocolors4.default.red("Installation failed."));
99704
+ return 1;
99705
+ }
99706
+ spinner2.stop(nativeInstallSuccessLine());
99707
+ for (const note of outcome.notes)
99708
+ log4.info(note);
99709
+ }
99710
+ if (config.hasNativeDev) {
99711
+ spinner2.start("Installing the OmO Native development adapter");
99377
99712
  try {
99378
- const senpiResult = await runSenpiInstaller();
99379
- spinner2.stop(`Senpi adapter installed to ${import_picocolors4.default.cyan(senpiResult.settingsPath)}`);
99713
+ const nativeDevResult = await runNativeDevInstaller();
99714
+ spinner2.stop(`OmO Native development adapter installed to ${import_picocolors4.default.cyan(nativeDevResult.settingsPath)}`);
99380
99715
  } catch (error) {
99381
99716
  const message = error instanceof Error ? error.message : String(error);
99382
- spinner2.stop(`Senpi install failed ${import_picocolors4.default.yellow("[!]")}`);
99383
- log4.error(`Senpi install failed: ${message}`);
99717
+ spinner2.stop(`OmO Native development adapter install failed ${import_picocolors4.default.yellow("[!]")}`);
99718
+ log4.error(`OmO Native development adapter install failed: ${message}`);
99384
99719
  outro(import_picocolors4.default.red("Installation failed."));
99385
99720
  return 1;
99386
99721
  }
@@ -99394,6 +99729,11 @@ async function runTuiInstaller(args, version) {
99394
99729
  note(`Include ${import_picocolors4.default.cyan("ultrawork")} (or ${import_picocolors4.default.cyan("ulw")}) in your prompt.
99395
99730
  ` + `All features work like magic-parallel agents, background tasks,
99396
99731
  ` + `deep exploration, and relentless execution until completion.`, "The Magic Word");
99732
+ if (shouldShowNativeEditionHint(config)) {
99733
+ log4.info(import_picocolors4.default.bold(NATIVE_EDITION_HINT_TITLE));
99734
+ log4.message(nativeEditionHintLines({ command: import_picocolors4.default.cyan, link: import_picocolors4.default.underline }).join(`
99735
+ `));
99736
+ }
99397
99737
  const shouldStar = await confirm({
99398
99738
  message: "Star the repos on GitHub?",
99399
99739
  initialValue: false
@@ -99432,7 +99772,7 @@ async function runTuiInstaller(args, version) {
99432
99772
 
99433
99773
  // packages/omo-opencode/src/cli/install.ts
99434
99774
  var VERSION = package_default.version;
99435
- async function install3(args) {
99775
+ async function install2(args) {
99436
99776
  return args.tui ? runTuiInstaller(args, VERSION) : runCliInstaller(args, VERSION);
99437
99777
  }
99438
99778
  // packages/omo-opencode/src/cli/cleanup.ts
@@ -100933,7 +101273,8 @@ var HookNameSchema = _enum([
100933
101273
  "webfetch-redirect-guard",
100934
101274
  "fsync-skip-warning",
100935
101275
  "plan-format-validator",
100936
- "legacy-plugin-toast"
101276
+ "legacy-plugin-toast",
101277
+ "native-edition-nudge"
100937
101278
  ]);
100938
101279
  // packages/omo-opencode/src/config/schema/i18n.ts
100939
101280
  init_zod();
@@ -103036,14 +103377,14 @@ var NO_OP_POSTHOG2 = {
103036
103377
  function isFalsy(value) {
103037
103378
  return value === "0" || value === "false" || value === "no";
103038
103379
  }
103039
- function isTruthy(value) {
103380
+ function isTruthy2(value) {
103040
103381
  return value === "1" || value === "true" || value === "yes";
103041
103382
  }
103042
103383
  function shouldDisablePostHog(env, configEnabled) {
103043
103384
  if (configEnabled === false) {
103044
103385
  return true;
103045
103386
  }
103046
- if (isTruthy(env.OMO_DISABLE_POSTHOG?.trim().toLowerCase())) {
103387
+ if (isTruthy2(env.OMO_DISABLE_POSTHOG?.trim().toLowerCase())) {
103047
103388
  return true;
103048
103389
  }
103049
103390
  return isFalsy(env.OMO_SEND_ANONYMOUS_TELEMETRY?.trim().toLowerCase());
@@ -104566,14 +104907,14 @@ var CANONICAL_REPLACEMENT = new Map([
104566
104907
  var MIGRATE_SUFFIX = ", or run: oh-my-openagent config migrate";
104567
104908
  var TUNING_CONTAINERS = new Set(["agents", "categories", "models"]);
104568
104909
  var PASSTHROUGH_CONTAINERS = new Set(["provider_options", "providerOptions"]);
104569
- function isRecord15(value) {
104910
+ function isRecord16(value) {
104570
104911
  return value !== null && typeof value === "object" && !Array.isArray(value);
104571
104912
  }
104572
104913
  function isHarnessBlock(key) {
104573
104914
  return key.startsWith("[") && key.endsWith("]");
104574
104915
  }
104575
104916
  function collectIssues(configPath, value, prefix, fixSuffix) {
104576
- if (!isRecord15(value))
104917
+ if (!isRecord16(value))
104577
104918
  return [];
104578
104919
  const issues = [];
104579
104920
  for (const [key, child] of Object.entries(value)) {
@@ -104589,7 +104930,7 @@ function collectIssues(configPath, value, prefix, fixSuffix) {
104589
104930
  });
104590
104931
  continue;
104591
104932
  }
104592
- if (!isRecord15(child))
104933
+ if (!isRecord16(child))
104593
104934
  continue;
104594
104935
  if (PASSTHROUGH_CONTAINERS.has(key))
104595
104936
  continue;
@@ -104608,7 +104949,7 @@ function collectIssues(configPath, value, prefix, fixSuffix) {
104608
104949
  return issues;
104609
104950
  }
104610
104951
  function migrateFixSuffix(parsed) {
104611
- if (isRecord15(parsed) && hasMigrationMarker(parsed, REASONING_UNIFICATION_MIGRATION_ID))
104952
+ if (isRecord16(parsed) && hasMigrationMarker(parsed, REASONING_UNIFICATION_MIGRATION_ID))
104612
104953
  return "";
104613
104954
  return MIGRATE_SUFFIX;
104614
104955
  }
@@ -105846,12 +106187,12 @@ async function auditBundleTargets(pluginRoot) {
105846
106187
  let referencedCount = 0;
105847
106188
  for (const manifestPath of await findManifestPaths(pluginRoot, ".mcp.json")) {
105848
106189
  const manifest = await readJson2(manifestPath);
105849
- if (manifest === null || !isRecord16(manifest["mcpServers"]))
106190
+ if (manifest === null || !isRecord17(manifest["mcpServers"]))
105850
106191
  continue;
105851
106192
  const manifestRoot = dirname33(manifestPath);
105852
106193
  const isRootManifest = resolve24(manifestRoot) === resolve24(pluginRoot);
105853
106194
  for (const server of Object.values(manifest["mcpServers"])) {
105854
- if (!isRecord16(server) || !Array.isArray(server["args"]))
106195
+ if (!isRecord17(server) || !Array.isArray(server["args"]))
105855
106196
  continue;
105856
106197
  for (const arg of server["args"]) {
105857
106198
  if (typeof arg !== "string" || !isPluginRuntimePathArg(arg))
@@ -105937,7 +106278,7 @@ function collectHookCommands(value, commands) {
105937
106278
  collectHookCommands(item, commands);
105938
106279
  return;
105939
106280
  }
105940
- if (!isRecord16(value))
106281
+ if (!isRecord17(value))
105941
106282
  return;
105942
106283
  if (value["type"] === "command") {
105943
106284
  if (typeof value["command"] === "string")
@@ -105992,7 +106333,7 @@ function parseDegradedEntries(value) {
105992
106333
  return [];
105993
106334
  const entries = [];
105994
106335
  for (const item of value) {
105995
- if (!isRecord16(item))
106336
+ if (!isRecord17(item))
105996
106337
  continue;
105997
106338
  if (typeof item["component"] !== "string" || typeof item["reason"] !== "string")
105998
106339
  continue;
@@ -106026,7 +106367,7 @@ function degradedDetailLines(entries) {
106026
106367
  async function readJson2(path) {
106027
106368
  try {
106028
106369
  const parsed = JSON.parse(await readFile29(path, "utf8"));
106029
- return isRecord16(parsed) ? parsed : null;
106370
+ return isRecord17(parsed) ? parsed : null;
106030
106371
  } catch (error) {
106031
106372
  if (error instanceof Error)
106032
106373
  return null;
@@ -106047,7 +106388,7 @@ function normalizeRelative(root, target) {
106047
106388
  function normalizePathSeparators(path) {
106048
106389
  return path.split("\\").join("/");
106049
106390
  }
106050
- function isRecord16(value) {
106391
+ function isRecord17(value) {
106051
106392
  return typeof value === "object" && value !== null && !Array.isArray(value);
106052
106393
  }
106053
106394
 
@@ -108157,8 +108498,8 @@ var program2 = new Command;
108157
108498
  function resolveInstallArgs(options, invocationName = process.env.OMO_INVOCATION_NAME) {
108158
108499
  const defaultPlatform = process.env.OMO_EDITION === "codex" || invocationName === "lazycodex" || invocationName === "lazycodex-ai" ? "codex" : undefined;
108159
108500
  const platform = options.platform ?? defaultPlatform;
108160
- if (platform === "senpi" && !isSenpiPlatformEnabled()) {
108161
- 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.`);
108501
+ if (platform === "native-dev" && !isNativeDevPlatformEnabled()) {
108502
+ 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.`);
108162
108503
  }
108163
108504
  return {
108164
108505
  tui: options.tui !== false,
@@ -108203,7 +108544,7 @@ Model Providers (Priority: Native > Copilot > OpenCode Zen > Z.ai > Kimi > Baili
108203
108544
  `).action(async (options) => {
108204
108545
  const rootOptions = program2.opts();
108205
108546
  const args = resolveInstallArgs({ ...options, platform: options.platform ?? rootOptions.platform });
108206
- const exitCode = await install3(args);
108547
+ const exitCode = await install2(args);
108207
108548
  process.exit(exitCode);
108208
108549
  });
108209
108550
  configureCleanupCommand(program2);