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.
- package/README.ja.md +2 -2
- package/README.ko.md +2 -2
- package/README.md +4 -4
- package/README.ru.md +2 -2
- package/README.zh-cn.md +2 -2
- package/dist/cli/index.js +439 -98
- package/dist/cli/install-native/index.d.ts +4 -0
- package/dist/cli/install-native/plan.d.ts +11 -0
- package/dist/cli/install-native/run-native-install.d.ts +23 -0
- package/dist/cli/install-native-dev/index.d.ts +4 -0
- package/dist/cli/native-dev-platform-flag.d.ts +5 -0
- package/dist/cli/native-edition-hint.d.ts +10 -0
- package/dist/cli/types.d.ts +3 -2
- package/dist/cli-node/index.js +439 -98
- package/package.json +2 -1
- package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +111 -11
- package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
- package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
- package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
- package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +2 -2
- package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
- package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
- package/packages/omo-codex/plugin/components/rules/package.json +1 -1
- package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
- package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-execute-continuation/package.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +24 -10
- package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-guard.js +8 -6
- package/packages/omo-codex/plugin/components/ulw-loop/dist/surface.d.ts +2 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/surface.js +21 -4
- package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +5 -5
- package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/spawn-guard.ts +10 -5
- package/packages/omo-codex/plugin/components/ulw-loop/src/surface.ts +24 -6
- package/packages/omo-codex/plugin/components/ulw-loop/test/spawn-guard-native-reviewer.test.ts +207 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/spawn-guard.test.ts +6 -4
- package/packages/omo-codex/plugin/components/ulw-loop/test/surface.test.ts +43 -4
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-recording-spawn-admission.json +1 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
- package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +1 -1
- package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
- package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
- package/packages/omo-codex/plugin/package-lock.json +12 -12
- package/packages/omo-codex/plugin/package.json +1 -1
- package/packages/omo-codex/plugin/skills/browser/ATTRIBUTION.md +25 -0
- package/packages/omo-codex/plugin/skills/browser/SKILL.md +89 -0
- package/packages/omo-codex/plugin/skills/browser/agents/openai.yaml +2 -0
- package/packages/omo-codex/plugin/skills/browser/references/commands.md +90 -0
- package/packages/omo-codex/plugin/skills/browser/references/install.md +71 -0
- package/packages/omo-codex/plugin/skills/browser/references/owned-engine/README.md +42 -0
- package/packages/omo-codex/plugin/skills/browser/references/owned-engine/frames-and-humans.md +39 -0
- package/packages/omo-codex/plugin/skills/browser/references/owned-engine/ladder.md +59 -0
- package/packages/omo-codex/plugin/skills/browser/references/owned-engine/network.md +42 -0
- package/packages/omo-codex/plugin/skills/browser/references/recipes/1password.md +59 -0
- package/packages/omo-codex/plugin/skills/browser/references/remote.md +24 -0
- package/packages/omo-codex/plugin/skills/browser/scripts/browser-doctor.mjs +41 -0
- package/packages/omo-codex/plugin/skills/browser/scripts/browser-env.mjs +41 -0
- package/packages/omo-codex/plugin/skills/browser/scripts/browser-install.mjs +51 -0
- package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +1 -0
- package/packages/omo-codex/scripts/install-dist/install-local.mjs +117 -17
- package/packages/shared-skills/skills/browser/ATTRIBUTION.md +25 -0
- package/packages/shared-skills/skills/browser/SKILL.md +89 -0
- package/packages/shared-skills/skills/browser/references/commands.md +90 -0
- package/packages/shared-skills/skills/browser/references/install.md +71 -0
- package/packages/shared-skills/skills/browser/references/owned-engine/README.md +42 -0
- package/packages/shared-skills/skills/browser/references/owned-engine/frames-and-humans.md +39 -0
- package/packages/shared-skills/skills/browser/references/owned-engine/ladder.md +59 -0
- package/packages/shared-skills/skills/browser/references/owned-engine/network.md +42 -0
- package/packages/shared-skills/skills/browser/references/recipes/1password.md +59 -0
- package/packages/shared-skills/skills/browser/references/remote.md +24 -0
- package/packages/shared-skills/skills/browser/scripts/browser-doctor.mjs +41 -0
- package/packages/shared-skills/skills/browser/scripts/browser-env.mjs +41 -0
- package/packages/shared-skills/skills/browser/scripts/browser-install.mjs +51 -0
- package/dist/cli/install-senpi/index.d.ts +0 -1
- package/dist/cli/senpi-platform-flag.d.ts +0 -4
package/dist/cli-node/index.js
CHANGED
|
@@ -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.
|
|
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.
|
|
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.
|
|
290
|
-
"oh-my-opencode-darwin-x64": "5.0.0-beta.
|
|
291
|
-
"oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.
|
|
292
|
-
"oh-my-opencode-linux-arm64": "5.0.0-beta.
|
|
293
|
-
"oh-my-opencode-linux-arm64-musl": "5.0.0-beta.
|
|
294
|
-
"oh-my-opencode-linux-x64": "5.0.0-beta.
|
|
295
|
-
"oh-my-opencode-linux-x64-baseline": "5.0.0-beta.
|
|
296
|
-
"oh-my-opencode-linux-x64-musl": "5.0.0-beta.
|
|
297
|
-
"oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.
|
|
298
|
-
"oh-my-opencode-windows-arm64": "5.0.0-beta.
|
|
299
|
-
"oh-my-opencode-windows-x64": "5.0.0-beta.
|
|
300
|
-
"oh-my-opencode-windows-x64-baseline": "5.0.0-beta.
|
|
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: ["
|
|
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: "
|
|
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: "
|
|
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: "
|
|
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", "
|
|
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
|
-
|
|
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) =>
|
|
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 (!
|
|
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
|
|
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 (!
|
|
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
|
-
|
|
74970
|
-
|
|
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: [
|
|
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 ? {} : { "[
|
|
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 (!
|
|
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
|
|
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
|
|
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 =
|
|
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.
|
|
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.
|
|
91440
|
-
lines.push(` ${SYMBOLS.info}
|
|
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
|
|
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
|
-
|
|
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 (!
|
|
94533
|
+
if (!isRecord12(cache) || !Array.isArray(cache.models))
|
|
94332
94534
|
return null;
|
|
94333
94535
|
for (const entry of cache.models) {
|
|
94334
|
-
if (!
|
|
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
|
|
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 (!
|
|
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
|
|
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
|
|
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 (!
|
|
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
|
-
|
|
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.
|
|
97968
|
-
printInfo("Installing
|
|
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
|
|
97971
|
-
printSuccess(`
|
|
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(`
|
|
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/
|
|
99121
|
-
var
|
|
99122
|
-
|
|
99123
|
-
|
|
99124
|
-
|
|
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 (
|
|
99129
|
-
platforms.push("
|
|
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 (
|
|
99155
|
-
options.push({
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
99455
|
-
spinner2.start("Installing
|
|
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
|
|
99458
|
-
spinner2.stop(`
|
|
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(`
|
|
99462
|
-
log4.error(`
|
|
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
|
|
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
|
|
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 (
|
|
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
|
|
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 (!
|
|
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 (!
|
|
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 (
|
|
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 || !
|
|
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 (!
|
|
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 (!
|
|
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 (!
|
|
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
|
|
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
|
|
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 === "
|
|
108240
|
-
throw new Error(`The
|
|
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
|
|
108626
|
+
const exitCode = await install2(args);
|
|
108286
108627
|
process.exit(exitCode);
|
|
108287
108628
|
});
|
|
108288
108629
|
configureCleanupCommand(program2);
|