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/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.
|
|
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.
|
|
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.
|
|
289
|
-
"oh-my-opencode-darwin-x64": "5.0.0-beta.
|
|
290
|
-
"oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.
|
|
291
|
-
"oh-my-opencode-linux-arm64": "5.0.0-beta.
|
|
292
|
-
"oh-my-opencode-linux-arm64-musl": "5.0.0-beta.
|
|
293
|
-
"oh-my-opencode-linux-x64": "5.0.0-beta.
|
|
294
|
-
"oh-my-opencode-linux-x64-baseline": "5.0.0-beta.
|
|
295
|
-
"oh-my-opencode-linux-x64-musl": "5.0.0-beta.
|
|
296
|
-
"oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.
|
|
297
|
-
"oh-my-opencode-windows-arm64": "5.0.0-beta.
|
|
298
|
-
"oh-my-opencode-windows-x64": "5.0.0-beta.
|
|
299
|
-
"oh-my-opencode-windows-x64-baseline": "5.0.0-beta.
|
|
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: ["
|
|
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: "
|
|
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: "
|
|
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: "
|
|
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", "
|
|
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
|
-
|
|
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) =>
|
|
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 (!
|
|
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
|
|
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 (!
|
|
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
|
-
|
|
74891
|
-
|
|
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: [
|
|
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 ? {} : { "[
|
|
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 (!
|
|
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
|
|
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
|
|
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 =
|
|
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.
|
|
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.
|
|
91361
|
-
lines.push(` ${SYMBOLS.info}
|
|
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
|
|
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
|
-
|
|
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 (!
|
|
94454
|
+
if (!isRecord12(cache) || !Array.isArray(cache.models))
|
|
94253
94455
|
return null;
|
|
94254
94456
|
for (const entry of cache.models) {
|
|
94255
|
-
if (!
|
|
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
|
|
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 (!
|
|
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
|
|
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
|
|
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 (!
|
|
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
|
-
|
|
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.
|
|
97889
|
-
printInfo("Installing
|
|
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
|
|
97892
|
-
printSuccess(`
|
|
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(`
|
|
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/
|
|
99042
|
-
var
|
|
99043
|
-
|
|
99044
|
-
|
|
99045
|
-
|
|
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 (
|
|
99050
|
-
platforms.push("
|
|
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 (
|
|
99076
|
-
options.push({
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
99376
|
-
spinner2.start("Installing
|
|
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
|
|
99379
|
-
spinner2.stop(`
|
|
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(`
|
|
99383
|
-
log4.error(`
|
|
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
|
|
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
|
|
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 (
|
|
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
|
|
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 (!
|
|
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 (!
|
|
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 (
|
|
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 || !
|
|
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 (!
|
|
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 (!
|
|
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 (!
|
|
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
|
|
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
|
|
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 === "
|
|
108161
|
-
throw new Error(`The
|
|
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
|
|
108547
|
+
const exitCode = await install2(args);
|
|
108207
108548
|
process.exit(exitCode);
|
|
108208
108549
|
});
|
|
108209
108550
|
configureCleanupCommand(program2);
|