lazycodex-ai 5.0.0-beta.82 → 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 +392 -112
- 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 +392 -112
- package/package.json +1 -1
- package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +84 -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 +90 -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-edition-hint.d.ts +0 -10
- 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",
|
|
@@ -247,7 +247,7 @@ var init_package = __esm(() => {
|
|
|
247
247
|
zod: "^4.6.5"
|
|
248
248
|
},
|
|
249
249
|
devDependencies: {
|
|
250
|
-
"@code-yeongyu/senpi": "2026.9.22",
|
|
250
|
+
"@code-yeongyu/senpi": "2026.9.22-2",
|
|
251
251
|
"@oh-my-opencode/agents-md-core": "workspace:*",
|
|
252
252
|
"@oh-my-opencode/ast-grep-mcp": "workspace:*",
|
|
253
253
|
"@oh-my-opencode/boulder-state": "workspace:*",
|
|
@@ -287,18 +287,18 @@ var init_package = __esm(() => {
|
|
|
287
287
|
typescript: "^7.0.2"
|
|
288
288
|
},
|
|
289
289
|
optionalDependencies: {
|
|
290
|
-
"oh-my-opencode-darwin-arm64": "5.0.0-beta.
|
|
291
|
-
"oh-my-opencode-darwin-x64": "5.0.0-beta.
|
|
292
|
-
"oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.
|
|
293
|
-
"oh-my-opencode-linux-arm64": "5.0.0-beta.
|
|
294
|
-
"oh-my-opencode-linux-arm64-musl": "5.0.0-beta.
|
|
295
|
-
"oh-my-opencode-linux-x64": "5.0.0-beta.
|
|
296
|
-
"oh-my-opencode-linux-x64-baseline": "5.0.0-beta.
|
|
297
|
-
"oh-my-opencode-linux-x64-musl": "5.0.0-beta.
|
|
298
|
-
"oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.
|
|
299
|
-
"oh-my-opencode-windows-arm64": "5.0.0-beta.
|
|
300
|
-
"oh-my-opencode-windows-x64": "5.0.0-beta.
|
|
301
|
-
"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"
|
|
302
302
|
},
|
|
303
303
|
overrides: {
|
|
304
304
|
"@earendil-works/pi-agent-core": "0.84.2",
|
|
@@ -7227,6 +7227,7 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
7227
7227
|
},
|
|
7228
7228
|
librarian: {
|
|
7229
7229
|
fallbackChain: [
|
|
7230
|
+
{ providers: ["kimi-for-coding"], model: "kimi-for-coding-highspeed", variant: "off" },
|
|
7230
7231
|
{ providers: ["openai", "openai-codex"], model: "gpt-5.6-luna-fast", variant: "low" },
|
|
7231
7232
|
{ providers: ["deepseek"], model: "deepseek-v4-flash", variant: "max" },
|
|
7232
7233
|
{ providers: ["opencode-go", "bailian-coding-plan"], model: "qwen3.7-plus" },
|
|
@@ -7239,6 +7240,7 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
7239
7240
|
},
|
|
7240
7241
|
explore: {
|
|
7241
7242
|
fallbackChain: [
|
|
7243
|
+
{ providers: ["kimi-for-coding"], model: "kimi-for-coding-highspeed", variant: "off" },
|
|
7242
7244
|
{ providers: ["openai", "openai-codex"], model: "gpt-5.6-luna-fast", variant: "low" },
|
|
7243
7245
|
{ providers: ["deepseek"], model: "deepseek-v4-flash", variant: "max" },
|
|
7244
7246
|
{ providers: ["opencode-go", "bailian-coding-plan"], model: "qwen3.7-plus" },
|
|
@@ -7412,7 +7414,6 @@ var init_category_model_requirements = __esm(() => {
|
|
|
7412
7414
|
},
|
|
7413
7415
|
quick: {
|
|
7414
7416
|
fallbackChain: [
|
|
7415
|
-
{ providers: ["kimi-for-coding"], model: "kimi-for-coding-highspeed" },
|
|
7416
7417
|
{ providers: ["openai-codex"], model: "gpt-5.6-luna-fast", variant: "low" },
|
|
7417
7418
|
{ providers: ["deepseek"], model: "deepseek-v4-flash", variant: "off" },
|
|
7418
7419
|
{
|
|
@@ -7432,7 +7433,8 @@ var init_category_model_requirements = __esm(() => {
|
|
|
7432
7433
|
},
|
|
7433
7434
|
"unspecified-low": {
|
|
7434
7435
|
fallbackChain: [
|
|
7435
|
-
{ 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" },
|
|
7436
7438
|
{
|
|
7437
7439
|
providers: ["openai", "openai-codex", "github-copilot", "opencode"],
|
|
7438
7440
|
model: "gpt-5.6-terra",
|
|
@@ -7454,11 +7456,6 @@ var init_category_model_requirements = __esm(() => {
|
|
|
7454
7456
|
},
|
|
7455
7457
|
"unspecified-high": {
|
|
7456
7458
|
fallbackChain: [
|
|
7457
|
-
{
|
|
7458
|
-
providers: ["openai", "openai-codex", "github-copilot", "opencode"],
|
|
7459
|
-
model: "gpt-6-astra",
|
|
7460
|
-
variant: "high"
|
|
7461
|
-
},
|
|
7462
7459
|
{
|
|
7463
7460
|
providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
|
|
7464
7461
|
model: "claude-opus-5",
|
|
@@ -8294,6 +8291,36 @@ var init_supplemental_entries = __esm(() => {
|
|
|
8294
8291
|
output: 32768
|
|
8295
8292
|
}
|
|
8296
8293
|
},
|
|
8294
|
+
"grok-4.7": {
|
|
8295
|
+
id: "grok-4.7",
|
|
8296
|
+
family: "grok",
|
|
8297
|
+
reasoning: false,
|
|
8298
|
+
temperature: true,
|
|
8299
|
+
toolCall: true,
|
|
8300
|
+
modalities: {
|
|
8301
|
+
input: ["text", "image"],
|
|
8302
|
+
output: ["text"]
|
|
8303
|
+
},
|
|
8304
|
+
limit: {
|
|
8305
|
+
context: 500000,
|
|
8306
|
+
output: 32768
|
|
8307
|
+
}
|
|
8308
|
+
},
|
|
8309
|
+
"xai/grok-4.7": {
|
|
8310
|
+
id: "xai/grok-4.7",
|
|
8311
|
+
family: "grok",
|
|
8312
|
+
reasoning: false,
|
|
8313
|
+
temperature: true,
|
|
8314
|
+
toolCall: true,
|
|
8315
|
+
modalities: {
|
|
8316
|
+
input: ["text", "image"],
|
|
8317
|
+
output: ["text"]
|
|
8318
|
+
},
|
|
8319
|
+
limit: {
|
|
8320
|
+
context: 500000,
|
|
8321
|
+
output: 32768
|
|
8322
|
+
}
|
|
8323
|
+
},
|
|
8297
8324
|
"xai/grok-build-0.1": {
|
|
8298
8325
|
id: "xai/grok-build-0.1",
|
|
8299
8326
|
family: "grok",
|
|
@@ -8323,6 +8350,36 @@ var init_supplemental_entries = __esm(() => {
|
|
|
8323
8350
|
context: 256000,
|
|
8324
8351
|
output: 32768
|
|
8325
8352
|
}
|
|
8353
|
+
},
|
|
8354
|
+
"mimo-v2.6-pro": {
|
|
8355
|
+
id: "mimo-v2.6-pro",
|
|
8356
|
+
family: "mimo",
|
|
8357
|
+
reasoning: true,
|
|
8358
|
+
temperature: true,
|
|
8359
|
+
toolCall: true,
|
|
8360
|
+
modalities: {
|
|
8361
|
+
input: ["text", "image"],
|
|
8362
|
+
output: ["text"]
|
|
8363
|
+
},
|
|
8364
|
+
limit: {
|
|
8365
|
+
context: 1048576,
|
|
8366
|
+
output: 131072
|
|
8367
|
+
}
|
|
8368
|
+
},
|
|
8369
|
+
"xiaomi/mimo-v2.6-pro": {
|
|
8370
|
+
id: "xiaomi/mimo-v2.6-pro",
|
|
8371
|
+
family: "mimo",
|
|
8372
|
+
reasoning: true,
|
|
8373
|
+
temperature: true,
|
|
8374
|
+
toolCall: true,
|
|
8375
|
+
modalities: {
|
|
8376
|
+
input: ["text", "image"],
|
|
8377
|
+
output: ["text"]
|
|
8378
|
+
},
|
|
8379
|
+
limit: {
|
|
8380
|
+
context: 1048576,
|
|
8381
|
+
output: 131072
|
|
8382
|
+
}
|
|
8326
8383
|
}
|
|
8327
8384
|
};
|
|
8328
8385
|
});
|
|
@@ -9296,21 +9353,21 @@ var init_openai_categories = __esm(() => {
|
|
|
9296
9353
|
},
|
|
9297
9354
|
{
|
|
9298
9355
|
name: "quick",
|
|
9299
|
-
config: { model: "
|
|
9356
|
+
config: { model: "openai/gpt-5.6-luna-fast", variant: "low" },
|
|
9300
9357
|
description: "Trivial tasks - single file changes, typo fixes, simple modifications",
|
|
9301
9358
|
callerGuidance: QUICK_CATEGORY_CALLER_GUIDANCE,
|
|
9302
9359
|
promptAppend: QUICK_CATEGORY_PROMPT_APPEND
|
|
9303
9360
|
},
|
|
9304
9361
|
{
|
|
9305
9362
|
name: "unspecified-low",
|
|
9306
|
-
config: { model: "
|
|
9363
|
+
config: { model: "xiaomi/mimo-v2.6-pro", variant: "max" },
|
|
9307
9364
|
description: "Tasks that don't fit other categories, low effort required",
|
|
9308
9365
|
callerGuidance: UNSPECIFIED_LOW_CATEGORY_CALLER_GUIDANCE,
|
|
9309
9366
|
promptAppend: UNSPECIFIED_LOW_CATEGORY_PROMPT_APPEND
|
|
9310
9367
|
},
|
|
9311
9368
|
{
|
|
9312
9369
|
name: "unspecified-high",
|
|
9313
|
-
config: { model: "
|
|
9370
|
+
config: { model: "anthropic/claude-opus-5", variant: "xhigh" },
|
|
9314
9371
|
description: "Tasks that don't fit other categories, high effort required",
|
|
9315
9372
|
callerGuidance: UNSPECIFIED_HIGH_CATEGORY_CALLER_GUIDANCE,
|
|
9316
9373
|
promptAppend: UNSPECIFIED_HIGH_CATEGORY_PROMPT_APPEND,
|
|
@@ -73883,12 +73940,14 @@ var init_git_master = __esm(() => {
|
|
|
73883
73940
|
});
|
|
73884
73941
|
|
|
73885
73942
|
// packages/omo-config-core/src/schema/harness.ts
|
|
73886
|
-
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;
|
|
73887
73944
|
var init_harness = __esm(() => {
|
|
73888
73945
|
init_zod();
|
|
73889
73946
|
HARNESS_IDS = ["codex", "opencode", "omo"];
|
|
73890
|
-
OMO_CONFIG_HARNESS_IDS = ["opencode", "
|
|
73947
|
+
OMO_CONFIG_HARNESS_IDS = ["opencode", "native", "codex"];
|
|
73891
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);
|
|
73892
73951
|
});
|
|
73893
73952
|
|
|
73894
73953
|
// packages/omo-config-core/src/schema/memory.ts
|
|
@@ -74391,6 +74450,7 @@ var init_config = __esm(() => {
|
|
|
74391
74450
|
telemetry: OmoTelemetrySettingsLayerSchema.optional(),
|
|
74392
74451
|
disabled_skills: OmoDisabledSkillsSchema.optional(),
|
|
74393
74452
|
"[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
|
|
74453
|
+
"[native]": OmoTypedHarnessConfigSchema.optional(),
|
|
74394
74454
|
"[senpi]": OmoTypedHarnessConfigSchema.optional(),
|
|
74395
74455
|
"[codex]": OmoTypedHarnessConfigSchema.optional()
|
|
74396
74456
|
}).strict();
|
|
@@ -74409,6 +74469,7 @@ var init_config = __esm(() => {
|
|
|
74409
74469
|
telemetry: OmoTelemetrySettingsSchema.optional(),
|
|
74410
74470
|
disabled_skills: OmoDisabledSkillsSchema.optional(),
|
|
74411
74471
|
"[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
|
|
74472
|
+
"[native]": OmoTypedHarnessConfigSchema.optional(),
|
|
74412
74473
|
"[senpi]": OmoTypedHarnessConfigSchema.optional(),
|
|
74413
74474
|
"[codex]": OmoTypedHarnessConfigSchema.optional(),
|
|
74414
74475
|
profiles: record(string2(), OmoConfigProfileSchema).default({}),
|
|
@@ -74430,6 +74491,7 @@ var init_config = __esm(() => {
|
|
|
74430
74491
|
telemetry: OmoTelemetrySettingsLayerSchema.optional(),
|
|
74431
74492
|
disabled_skills: OmoDisabledSkillsSchema.optional(),
|
|
74432
74493
|
"[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
|
|
74494
|
+
"[native]": OmoTypedHarnessConfigSchema.optional(),
|
|
74433
74495
|
"[senpi]": OmoTypedHarnessConfigSchema.optional(),
|
|
74434
74496
|
"[codex]": OmoTypedHarnessConfigSchema.optional(),
|
|
74435
74497
|
profiles: record(string2(), OmoConfigProfileSchema).optional(),
|
|
@@ -74500,6 +74562,60 @@ var init_legacy_category_names = __esm(() => {
|
|
|
74500
74562
|
LEGACY_CATEGORY_NAME_ALIASES = { deep: "deep-low" };
|
|
74501
74563
|
});
|
|
74502
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
|
+
|
|
74503
74619
|
// packages/omo-config-core/src/schema/index.ts
|
|
74504
74620
|
var init_schema = __esm(() => {
|
|
74505
74621
|
init_agent();
|
|
@@ -74510,6 +74626,7 @@ var init_schema = __esm(() => {
|
|
|
74510
74626
|
init_git_master();
|
|
74511
74627
|
init_harness();
|
|
74512
74628
|
init_legacy_category_names();
|
|
74629
|
+
init_legacy_harness_names();
|
|
74513
74630
|
init_memory();
|
|
74514
74631
|
init_model_catalog();
|
|
74515
74632
|
init_model_profile();
|
|
@@ -74519,6 +74636,9 @@ var init_schema = __esm(() => {
|
|
|
74519
74636
|
init_telemetry();
|
|
74520
74637
|
});
|
|
74521
74638
|
|
|
74639
|
+
// packages/omo-config-core/src/loader/disabled-skills.ts
|
|
74640
|
+
var init_disabled_skills = () => {};
|
|
74641
|
+
|
|
74522
74642
|
// packages/omo-config-core/src/loader/merge.ts
|
|
74523
74643
|
function isUnsafeObjectKey2(key) {
|
|
74524
74644
|
return DANGEROUS_KEYS2.has(key);
|
|
@@ -74693,7 +74813,13 @@ function withoutControlKeys(config) {
|
|
|
74693
74813
|
function harnessLayer(config, harness) {
|
|
74694
74814
|
if (harness === undefined)
|
|
74695
74815
|
return {};
|
|
74696
|
-
|
|
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;
|
|
74697
74823
|
}
|
|
74698
74824
|
function resolveOmoConfigView(options) {
|
|
74699
74825
|
const profiles = toRecord(options.config["profiles"]);
|
|
@@ -74723,7 +74849,7 @@ var HARNESS_KEYS;
|
|
|
74723
74849
|
var init_resolution = __esm(() => {
|
|
74724
74850
|
init_schema();
|
|
74725
74851
|
init_merge();
|
|
74726
|
-
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));
|
|
74727
74853
|
});
|
|
74728
74854
|
|
|
74729
74855
|
// packages/omo-config-core/src/loader/loader.ts
|
|
@@ -74744,6 +74870,7 @@ function parseJsoncSafe2(content) {
|
|
|
74744
74870
|
function stripResolutionControlKeys(config) {
|
|
74745
74871
|
const {
|
|
74746
74872
|
"[codex]": _codex,
|
|
74873
|
+
"[native]": _native,
|
|
74747
74874
|
"[opencode]": _opencode,
|
|
74748
74875
|
"[senpi]": _senpi,
|
|
74749
74876
|
profiles: _profiles,
|
|
@@ -74769,21 +74896,21 @@ function hasUnsafeUnrecognizedKey(issues) {
|
|
|
74769
74896
|
function hasTamperedPrototype(value) {
|
|
74770
74897
|
if (Array.isArray(value))
|
|
74771
74898
|
return value.some((entry) => hasTamperedPrototype(entry));
|
|
74772
|
-
if (!
|
|
74899
|
+
if (!isRecord11(value))
|
|
74773
74900
|
return false;
|
|
74774
74901
|
const prototype = Object.getPrototypeOf(value);
|
|
74775
74902
|
if (prototype !== Object.prototype && prototype !== null)
|
|
74776
74903
|
return true;
|
|
74777
74904
|
return Object.values(value).some((entry) => hasTamperedPrototype(entry));
|
|
74778
74905
|
}
|
|
74779
|
-
function
|
|
74906
|
+
function isRecord11(value) {
|
|
74780
74907
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
74781
74908
|
}
|
|
74782
74909
|
function containerAt(record, path) {
|
|
74783
74910
|
let container = record;
|
|
74784
74911
|
for (const segment of path) {
|
|
74785
74912
|
const next = container[segment];
|
|
74786
|
-
if (!
|
|
74913
|
+
if (!isRecord11(next))
|
|
74787
74914
|
return null;
|
|
74788
74915
|
container = next;
|
|
74789
74916
|
}
|
|
@@ -74894,6 +75021,15 @@ function legacyCategoryDiagnostic(path, renames) {
|
|
|
74894
75021
|
issuePaths: renames.map((rename) => rename.path)
|
|
74895
75022
|
};
|
|
74896
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
|
+
}
|
|
74897
75033
|
function loadOmoConfig(options = {}) {
|
|
74898
75034
|
const fileSystem = options.fileSystem ?? DEFAULT_READ_FILE_SYSTEM;
|
|
74899
75035
|
const cwd = options.cwd ?? process.cwd();
|
|
@@ -74916,8 +75052,12 @@ function loadOmoConfig(options = {}) {
|
|
|
74916
75052
|
if (canonicalized.renames.length > 0) {
|
|
74917
75053
|
diagnostics.push(legacyCategoryDiagnostic(candidate.path, canonicalized.renames));
|
|
74918
75054
|
}
|
|
74919
|
-
|
|
74920
|
-
|
|
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);
|
|
74921
75061
|
}
|
|
74922
75062
|
}
|
|
74923
75063
|
const requestedProfile = resolveOmoProfileName({
|
|
@@ -74965,6 +75105,7 @@ var init_loader2 = __esm(() => {
|
|
|
74965
75105
|
|
|
74966
75106
|
// packages/omo-config-core/src/loader/index.ts
|
|
74967
75107
|
var init_loader3 = __esm(() => {
|
|
75108
|
+
init_disabled_skills();
|
|
74968
75109
|
init_loader2();
|
|
74969
75110
|
init_merge();
|
|
74970
75111
|
init_paths();
|
|
@@ -77282,14 +77423,14 @@ function transformConfigJsoncSources(input) {
|
|
|
77282
77423
|
const omo = recordAt(legacy, "[omo]");
|
|
77283
77424
|
const senpi = recordAt(legacy, "[senpi]");
|
|
77284
77425
|
const history = legacyMigrationHistory(input.discovered, input.sources);
|
|
77285
|
-
const diagnostics = omo !== undefined && senpi !== undefined ? ["conflict: [
|
|
77426
|
+
const diagnostics = omo !== undefined && senpi !== undefined ? ["conflict: [native] legacy [omo] kept [native]"] : [];
|
|
77286
77427
|
return {
|
|
77287
77428
|
diagnostics,
|
|
77288
77429
|
document: {
|
|
77289
77430
|
$schema: OMO_SCHEMA_URL,
|
|
77290
77431
|
...recordAt(legacy, "[opencode]") === undefined ? {} : { "[opencode]": recordAt(legacy, "[opencode]") },
|
|
77291
77432
|
...recordAt(legacy, "[codex]") === undefined ? {} : { "[codex]": recordAt(legacy, "[codex]") },
|
|
77292
|
-
...senpi === undefined && omo === undefined ? {} : { "[
|
|
77433
|
+
...senpi === undefined && omo === undefined ? {} : { "[native]": senpi ?? omo },
|
|
77293
77434
|
...Object.keys(history).length === 0 ? {} : { legacy_migrations: history }
|
|
77294
77435
|
}
|
|
77295
77436
|
};
|
|
@@ -77553,7 +77694,7 @@ function normalizeTypedBlock(value, path, diagnostics, recurseProfiles) {
|
|
|
77553
77694
|
}
|
|
77554
77695
|
if (result["models"] !== undefined)
|
|
77555
77696
|
result["models"] = normalizeCatalog(result["models"]);
|
|
77556
|
-
for (const harness of ["[senpi]", "[codex]"]) {
|
|
77697
|
+
for (const harness of ["[senpi]", "[native]", "[codex]"]) {
|
|
77557
77698
|
if (result[harness] !== undefined)
|
|
77558
77699
|
result[harness] = normalizeTypedBlock(result[harness], [...path, harness], diagnostics, false);
|
|
77559
77700
|
}
|
|
@@ -77607,6 +77748,19 @@ var init_category_deep_split = __esm(() => {
|
|
|
77607
77748
|
init_src4();
|
|
77608
77749
|
});
|
|
77609
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
|
+
|
|
77610
77764
|
// packages/omo-opencode/src/config-migration/migration-plans.ts
|
|
77611
77765
|
function backupTimestamp(value) {
|
|
77612
77766
|
return value ?? new Date().toISOString().replace(/[:.]/g, "-");
|
|
@@ -77685,6 +77839,18 @@ function categoryDeepSplitPlan(targetPath) {
|
|
|
77685
77839
|
transform: inspect
|
|
77686
77840
|
};
|
|
77687
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
|
+
}
|
|
77688
77854
|
function existingOmoConfigPath(directory, options) {
|
|
77689
77855
|
const fileSystem = discoveryFileSystem(options);
|
|
77690
77856
|
for (const fileName of ["omo.jsonc", "omo.json"]) {
|
|
@@ -77748,7 +77914,8 @@ function createLegacyConfigMigrationPlans(options) {
|
|
|
77748
77914
|
return [
|
|
77749
77915
|
...legacyPlans,
|
|
77750
77916
|
...inPlaceTargets.map(reasoningPlan),
|
|
77751
|
-
...inPlaceTargets.map(categoryDeepSplitPlan)
|
|
77917
|
+
...inPlaceTargets.map(categoryDeepSplitPlan),
|
|
77918
|
+
...inPlaceTargets.map(harnessNativeRenamePlan)
|
|
77752
77919
|
];
|
|
77753
77920
|
}
|
|
77754
77921
|
var init_migration_plans = __esm(() => {
|
|
@@ -77759,6 +77926,7 @@ var init_migration_plans = __esm(() => {
|
|
|
77759
77926
|
init_transform_opencode();
|
|
77760
77927
|
init_reasoning_unification();
|
|
77761
77928
|
init_category_deep_split();
|
|
77929
|
+
init_harness_native_rename();
|
|
77762
77930
|
init_src4();
|
|
77763
77931
|
});
|
|
77764
77932
|
|
|
@@ -78543,7 +78711,7 @@ function shouldRetainLine(line, cutoffMs) {
|
|
|
78543
78711
|
function parseDiagnosticLine(line) {
|
|
78544
78712
|
try {
|
|
78545
78713
|
const parsed = JSON.parse(line);
|
|
78546
|
-
if (!
|
|
78714
|
+
if (!isRecord13(parsed)) {
|
|
78547
78715
|
return null;
|
|
78548
78716
|
}
|
|
78549
78717
|
return parsed;
|
|
@@ -78554,7 +78722,7 @@ function parseDiagnosticLine(line) {
|
|
|
78554
78722
|
throw error;
|
|
78555
78723
|
}
|
|
78556
78724
|
}
|
|
78557
|
-
function
|
|
78725
|
+
function isRecord13(value) {
|
|
78558
78726
|
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
78559
78727
|
}
|
|
78560
78728
|
function trimToMaxBytes(lines) {
|
|
@@ -86044,7 +86212,7 @@ function coerceBool(value) {
|
|
|
86044
86212
|
function coerceString(value) {
|
|
86045
86213
|
return typeof value == "string" ? value : undefined;
|
|
86046
86214
|
}
|
|
86047
|
-
function
|
|
86215
|
+
function isRecord14(value) {
|
|
86048
86216
|
return typeof value == "object" && value !== null && !Array.isArray(value);
|
|
86049
86217
|
}
|
|
86050
86218
|
function toRfc3339(timestamp) {
|
|
@@ -86066,7 +86234,7 @@ function relocateInto(properties, key, value) {
|
|
|
86066
86234
|
properties[key] = value;
|
|
86067
86235
|
}
|
|
86068
86236
|
function buildV1Event(message) {
|
|
86069
|
-
const sourceProperties =
|
|
86237
|
+
const sourceProperties = isRecord14(message.properties) ? message.properties : {};
|
|
86070
86238
|
const properties = {
|
|
86071
86239
|
...sourceProperties
|
|
86072
86240
|
};
|
|
@@ -88211,7 +88379,7 @@ var package_default2;
|
|
|
88211
88379
|
var init_package2 = __esm(() => {
|
|
88212
88380
|
package_default2 = {
|
|
88213
88381
|
name: "@oh-my-opencode/omo-codex",
|
|
88214
|
-
version: "5.0.0-beta.
|
|
88382
|
+
version: "5.0.0-beta.83",
|
|
88215
88383
|
type: "module",
|
|
88216
88384
|
private: true,
|
|
88217
88385
|
description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
|
|
@@ -91386,8 +91554,11 @@ function formatConfigSummary(config) {
|
|
|
91386
91554
|
if (config.hasCodex) {
|
|
91387
91555
|
lines.push(` ${SYMBOLS.info} Codex autonomous mode: ${config.codexAutonomous ? "enabled" : "disabled"}`);
|
|
91388
91556
|
}
|
|
91389
|
-
if (config.
|
|
91390
|
-
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`);
|
|
91391
91562
|
}
|
|
91392
91563
|
if (!config.hasOpenCode)
|
|
91393
91564
|
return lines.join(`
|
|
@@ -91544,7 +91715,8 @@ function argsToConfig(args) {
|
|
|
91544
91715
|
const platform = resolvePlatform(args);
|
|
91545
91716
|
const hasOpenCode = platform === "opencode" || platform === "both";
|
|
91546
91717
|
const hasCodex = platform === "codex" || platform === "both";
|
|
91547
|
-
const
|
|
91718
|
+
const hasNative = platform === "native";
|
|
91719
|
+
const hasNativeDev = platform === "native-dev";
|
|
91548
91720
|
return {
|
|
91549
91721
|
platform,
|
|
91550
91722
|
hasOpenCode,
|
|
@@ -91554,7 +91726,8 @@ function argsToConfig(args) {
|
|
|
91554
91726
|
hasGemini: hasOpenCode && args.gemini === "yes",
|
|
91555
91727
|
hasCopilot: hasOpenCode && args.copilot === "yes",
|
|
91556
91728
|
hasCodex,
|
|
91557
|
-
|
|
91729
|
+
hasNative,
|
|
91730
|
+
hasNativeDev,
|
|
91558
91731
|
hasOpencodeZen: hasOpenCode && args.opencodeZen === "yes",
|
|
91559
91732
|
hasZaiCodingPlan: hasOpenCode && args.zaiCodingPlan === "yes",
|
|
91560
91733
|
hasKimiForCoding: hasOpenCode && args.kimiForCoding === "yes",
|
|
@@ -94278,10 +94451,10 @@ function readCatalogMultiAgentVersion(model, cachePath) {
|
|
|
94278
94451
|
} catch {
|
|
94279
94452
|
return null;
|
|
94280
94453
|
}
|
|
94281
|
-
if (!
|
|
94454
|
+
if (!isRecord12(cache) || !Array.isArray(cache.models))
|
|
94282
94455
|
return null;
|
|
94283
94456
|
for (const entry of cache.models) {
|
|
94284
|
-
if (!
|
|
94457
|
+
if (!isRecord12(entry))
|
|
94285
94458
|
continue;
|
|
94286
94459
|
if (entry.slug !== model && entry.id !== model)
|
|
94287
94460
|
continue;
|
|
@@ -94306,7 +94479,7 @@ function readRootModelCatalogPath(config) {
|
|
|
94306
94479
|
const single = config.match(/^\s*model_catalog_json\s*=\s*'([^']+)'/m);
|
|
94307
94480
|
return single?.[1] ?? null;
|
|
94308
94481
|
}
|
|
94309
|
-
function
|
|
94482
|
+
function isRecord12(value) {
|
|
94310
94483
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
94311
94484
|
}
|
|
94312
94485
|
function removeFeatureFlagSetting(config, featureName) {
|
|
@@ -97115,7 +97288,7 @@ async function readSettings(settingsPath) {
|
|
|
97115
97288
|
throw error;
|
|
97116
97289
|
}
|
|
97117
97290
|
const parsed = JSON.parse(raw);
|
|
97118
|
-
if (!
|
|
97291
|
+
if (!isRecord15(parsed))
|
|
97119
97292
|
throw new Error(`${settingsPath} must contain a JSON object`);
|
|
97120
97293
|
return parsed;
|
|
97121
97294
|
}
|
|
@@ -97176,7 +97349,7 @@ async function nextBackupPath(settingsPath) {
|
|
|
97176
97349
|
function timestampForBackup() {
|
|
97177
97350
|
return new Date().toISOString().replace(/[-:.]/g, "");
|
|
97178
97351
|
}
|
|
97179
|
-
function
|
|
97352
|
+
function isRecord15(value) {
|
|
97180
97353
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
97181
97354
|
}
|
|
97182
97355
|
async function readPackageName(packagePath) {
|
|
@@ -97196,7 +97369,7 @@ async function readPackageName(packagePath) {
|
|
|
97196
97369
|
return;
|
|
97197
97370
|
throw error;
|
|
97198
97371
|
}
|
|
97199
|
-
return
|
|
97372
|
+
return isRecord15(parsed) && typeof parsed.name === "string" ? parsed.name : undefined;
|
|
97200
97373
|
}
|
|
97201
97374
|
async function fileExists(path) {
|
|
97202
97375
|
try {
|
|
@@ -97220,6 +97393,7 @@ var REQUIRED_PLUGIN_ARTIFACTS = [
|
|
|
97220
97393
|
join61("extensions", "memory-run-supervisor.mjs"),
|
|
97221
97394
|
...PERSONA_ASSET_FILES.map((filename) => join61("extensions", filename)),
|
|
97222
97395
|
join61("skills", "ast-grep", "SKILL.md"),
|
|
97396
|
+
join61("skills", "browser", "SKILL.md"),
|
|
97223
97397
|
join61("skills", "coding-agent-sessions", "SKILL.md"),
|
|
97224
97398
|
join61("skills", "debugging", "SKILL.md"),
|
|
97225
97399
|
join61("skills", "frontend", "SKILL.md"),
|
|
@@ -97311,7 +97485,7 @@ async function verifyAstGrepRuntimeIntegrity(pluginPath, platform) {
|
|
|
97311
97485
|
}
|
|
97312
97486
|
}
|
|
97313
97487
|
function isAstGrepRuntimeManifest(value) {
|
|
97314
|
-
if (!
|
|
97488
|
+
if (!isRecord15(value))
|
|
97315
97489
|
return false;
|
|
97316
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));
|
|
97317
97491
|
}
|
|
@@ -97401,23 +97575,88 @@ function findRepoRoot2(importerDir) {
|
|
|
97401
97575
|
function fileExistsSync(path) {
|
|
97402
97576
|
return existsSync30(path);
|
|
97403
97577
|
}
|
|
97404
|
-
// packages/omo-opencode/src/cli/
|
|
97405
|
-
|
|
97406
|
-
|
|
97407
|
-
|
|
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)";
|
|
97408
97647
|
var PLAIN_PAINT = {
|
|
97409
97648
|
command: (text) => text,
|
|
97410
97649
|
link: (text) => text
|
|
97411
97650
|
};
|
|
97412
|
-
function
|
|
97413
|
-
return !config.
|
|
97651
|
+
function shouldShowNativeEditionHint(config) {
|
|
97652
|
+
return !config.hasNative && !config.hasNativeDev;
|
|
97414
97653
|
}
|
|
97415
|
-
function
|
|
97654
|
+
function nativeEditionHintLines(paint = PLAIN_PAINT) {
|
|
97416
97655
|
return [
|
|
97417
|
-
`omo also ships as
|
|
97418
|
-
`Try it next to this install: ${paint.command(
|
|
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")}.`,
|
|
97419
97658
|
"This install keeps working as-is.",
|
|
97420
|
-
`Guide: ${paint.link(
|
|
97659
|
+
`Guide: ${paint.link(NATIVE_EDITION_GUIDE_URL)}`
|
|
97421
97660
|
];
|
|
97422
97661
|
}
|
|
97423
97662
|
|
|
@@ -97432,7 +97671,8 @@ var PLATFORM_REPOSITORIES = {
|
|
|
97432
97671
|
opencode: ["code-yeongyu/oh-my-openagent"],
|
|
97433
97672
|
codex: STAR_REPOSITORIES,
|
|
97434
97673
|
both: STAR_REPOSITORIES,
|
|
97435
|
-
|
|
97674
|
+
native: STAR_REPOSITORIES,
|
|
97675
|
+
"native-dev": STAR_REPOSITORIES
|
|
97436
97676
|
};
|
|
97437
97677
|
var execFileAsync2 = promisify3(execFile4);
|
|
97438
97678
|
async function runGitHubStarCommand(repository) {
|
|
@@ -97934,14 +98174,27 @@ async function runCliInstaller(args, version) {
|
|
|
97934
98174
|
}
|
|
97935
98175
|
console.log();
|
|
97936
98176
|
}
|
|
97937
|
-
if (config.
|
|
97938
|
-
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...");
|
|
97939
98192
|
try {
|
|
97940
|
-
const
|
|
97941
|
-
printSuccess(`
|
|
98193
|
+
const nativeDevResult = await runNativeDevInstaller();
|
|
98194
|
+
printSuccess(`OmO Native development adapter installed ${SYMBOLS.arrow} ${import_picocolors3.default.dim(nativeDevResult.settingsPath)}`);
|
|
97942
98195
|
} catch (error) {
|
|
97943
98196
|
const message = error instanceof Error ? error.message : String(error);
|
|
97944
|
-
printError(`
|
|
98197
|
+
printError(`OmO Native development adapter install failed: ${message}`);
|
|
97945
98198
|
return 1;
|
|
97946
98199
|
}
|
|
97947
98200
|
console.log();
|
|
@@ -97952,9 +98205,9 @@ async function runCliInstaller(args, version) {
|
|
|
97952
98205
|
printBox(`${import_picocolors3.default.bold("Pro Tip:")} Include ${import_picocolors3.default.cyan("ultrawork")} (or ${import_picocolors3.default.cyan("ulw")}) in your prompt.
|
|
97953
98206
|
` + `All features work like magic-parallel agents, background tasks,
|
|
97954
98207
|
` + `deep exploration, and relentless execution until completion.`, "The Magic Word");
|
|
97955
|
-
if (
|
|
97956
|
-
printInfo(import_picocolors3.default.bold(
|
|
97957
|
-
for (const line of
|
|
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 })) {
|
|
97958
98211
|
console.log(` ${line}`);
|
|
97959
98212
|
}
|
|
97960
98213
|
console.log();
|
|
@@ -99094,16 +99347,20 @@ var import_picocolors4 = __toESM(require_picocolors(), 1);
|
|
|
99094
99347
|
// packages/omo-opencode/src/cli/tui-install-prompts.ts
|
|
99095
99348
|
init_model_fallback();
|
|
99096
99349
|
|
|
99097
|
-
// packages/omo-opencode/src/cli/
|
|
99098
|
-
var
|
|
99099
|
-
|
|
99100
|
-
|
|
99101
|
-
|
|
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]);
|
|
99102
99359
|
}
|
|
99103
99360
|
function availableInstallPlatforms(env = process.env) {
|
|
99104
|
-
const platforms = ["opencode", "codex", "both"];
|
|
99105
|
-
if (
|
|
99106
|
-
platforms.push("
|
|
99361
|
+
const platforms = ["opencode", "codex", "both", "native"];
|
|
99362
|
+
if (isNativeDevPlatformEnabled(env))
|
|
99363
|
+
platforms.push("native-dev");
|
|
99107
99364
|
return platforms;
|
|
99108
99365
|
}
|
|
99109
99366
|
|
|
@@ -99126,10 +99383,15 @@ async function promptInstallPlatform(initialValue = "opencode") {
|
|
|
99126
99383
|
const options = [
|
|
99127
99384
|
{ value: "opencode", label: "OpenCode", hint: "Install OpenCode plugin only" },
|
|
99128
99385
|
{ value: "codex", label: "Codex", hint: "Install Codex harness adapter only" },
|
|
99129
|
-
{ 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)" }
|
|
99130
99388
|
];
|
|
99131
|
-
if (
|
|
99132
|
-
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
|
+
});
|
|
99133
99395
|
}
|
|
99134
99396
|
return selectOrCancel({
|
|
99135
99397
|
message: "Which platform do you want to install?",
|
|
@@ -99140,7 +99402,8 @@ async function promptInstallPlatform(initialValue = "opencode") {
|
|
|
99140
99402
|
async function promptInstallConfig(detected, platform, codexAutonomousOverride) {
|
|
99141
99403
|
const hasOpenCode = platform === "opencode" || platform === "both";
|
|
99142
99404
|
const hasCodex = platform === "codex" || platform === "both";
|
|
99143
|
-
const
|
|
99405
|
+
const hasNative = platform === "native";
|
|
99406
|
+
const hasNativeDev = platform === "native-dev";
|
|
99144
99407
|
const codexAutonomous = await resolveCodexAutonomous(hasCodex, codexAutonomousOverride);
|
|
99145
99408
|
if (codexAutonomous === null)
|
|
99146
99409
|
return null;
|
|
@@ -99154,7 +99417,8 @@ async function promptInstallConfig(detected, platform, codexAutonomousOverride)
|
|
|
99154
99417
|
hasGemini: false,
|
|
99155
99418
|
hasCopilot: false,
|
|
99156
99419
|
hasCodex,
|
|
99157
|
-
|
|
99420
|
+
hasNative,
|
|
99421
|
+
hasNativeDev,
|
|
99158
99422
|
hasOpencodeZen: false,
|
|
99159
99423
|
hasZaiCodingPlan: false,
|
|
99160
99424
|
hasKimiForCoding: false,
|
|
@@ -99297,7 +99561,8 @@ async function promptInstallConfig(detected, platform, codexAutonomousOverride)
|
|
|
99297
99561
|
hasGemini: gemini === "yes",
|
|
99298
99562
|
hasCopilot: copilot === "yes",
|
|
99299
99563
|
hasCodex,
|
|
99300
|
-
|
|
99564
|
+
hasNative,
|
|
99565
|
+
hasNativeDev,
|
|
99301
99566
|
hasOpencodeZen: opencodeZen === "yes",
|
|
99302
99567
|
hasZaiCodingPlan: zaiCodingPlan === "yes",
|
|
99303
99568
|
hasKimiForCoding: kimiForCoding === "yes",
|
|
@@ -99428,15 +99693,29 @@ async function runTuiInstaller(args, version) {
|
|
|
99428
99693
|
log4.info("The Codex harness is NOT installed. Fix the error above, then re-run: bunx oh-my-openagent install --platform=codex");
|
|
99429
99694
|
}
|
|
99430
99695
|
}
|
|
99431
|
-
if (config.
|
|
99432
|
-
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");
|
|
99433
99712
|
try {
|
|
99434
|
-
const
|
|
99435
|
-
spinner2.stop(`
|
|
99713
|
+
const nativeDevResult = await runNativeDevInstaller();
|
|
99714
|
+
spinner2.stop(`OmO Native development adapter installed to ${import_picocolors4.default.cyan(nativeDevResult.settingsPath)}`);
|
|
99436
99715
|
} catch (error) {
|
|
99437
99716
|
const message = error instanceof Error ? error.message : String(error);
|
|
99438
|
-
spinner2.stop(`
|
|
99439
|
-
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}`);
|
|
99440
99719
|
outro(import_picocolors4.default.red("Installation failed."));
|
|
99441
99720
|
return 1;
|
|
99442
99721
|
}
|
|
@@ -99450,9 +99729,9 @@ async function runTuiInstaller(args, version) {
|
|
|
99450
99729
|
note(`Include ${import_picocolors4.default.cyan("ultrawork")} (or ${import_picocolors4.default.cyan("ulw")}) in your prompt.
|
|
99451
99730
|
` + `All features work like magic-parallel agents, background tasks,
|
|
99452
99731
|
` + `deep exploration, and relentless execution until completion.`, "The Magic Word");
|
|
99453
|
-
if (
|
|
99454
|
-
log4.info(import_picocolors4.default.bold(
|
|
99455
|
-
log4.message(
|
|
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(`
|
|
99456
99735
|
`));
|
|
99457
99736
|
}
|
|
99458
99737
|
const shouldStar = await confirm({
|
|
@@ -99493,7 +99772,7 @@ async function runTuiInstaller(args, version) {
|
|
|
99493
99772
|
|
|
99494
99773
|
// packages/omo-opencode/src/cli/install.ts
|
|
99495
99774
|
var VERSION = package_default.version;
|
|
99496
|
-
async function
|
|
99775
|
+
async function install2(args) {
|
|
99497
99776
|
return args.tui ? runTuiInstaller(args, VERSION) : runCliInstaller(args, VERSION);
|
|
99498
99777
|
}
|
|
99499
99778
|
// packages/omo-opencode/src/cli/cleanup.ts
|
|
@@ -100994,7 +101273,8 @@ var HookNameSchema = _enum([
|
|
|
100994
101273
|
"webfetch-redirect-guard",
|
|
100995
101274
|
"fsync-skip-warning",
|
|
100996
101275
|
"plan-format-validator",
|
|
100997
|
-
"legacy-plugin-toast"
|
|
101276
|
+
"legacy-plugin-toast",
|
|
101277
|
+
"native-edition-nudge"
|
|
100998
101278
|
]);
|
|
100999
101279
|
// packages/omo-opencode/src/config/schema/i18n.ts
|
|
101000
101280
|
init_zod();
|
|
@@ -103097,14 +103377,14 @@ var NO_OP_POSTHOG2 = {
|
|
|
103097
103377
|
function isFalsy(value) {
|
|
103098
103378
|
return value === "0" || value === "false" || value === "no";
|
|
103099
103379
|
}
|
|
103100
|
-
function
|
|
103380
|
+
function isTruthy2(value) {
|
|
103101
103381
|
return value === "1" || value === "true" || value === "yes";
|
|
103102
103382
|
}
|
|
103103
103383
|
function shouldDisablePostHog(env, configEnabled) {
|
|
103104
103384
|
if (configEnabled === false) {
|
|
103105
103385
|
return true;
|
|
103106
103386
|
}
|
|
103107
|
-
if (
|
|
103387
|
+
if (isTruthy2(env.OMO_DISABLE_POSTHOG?.trim().toLowerCase())) {
|
|
103108
103388
|
return true;
|
|
103109
103389
|
}
|
|
103110
103390
|
return isFalsy(env.OMO_SEND_ANONYMOUS_TELEMETRY?.trim().toLowerCase());
|
|
@@ -104627,14 +104907,14 @@ var CANONICAL_REPLACEMENT = new Map([
|
|
|
104627
104907
|
var MIGRATE_SUFFIX = ", or run: oh-my-openagent config migrate";
|
|
104628
104908
|
var TUNING_CONTAINERS = new Set(["agents", "categories", "models"]);
|
|
104629
104909
|
var PASSTHROUGH_CONTAINERS = new Set(["provider_options", "providerOptions"]);
|
|
104630
|
-
function
|
|
104910
|
+
function isRecord16(value) {
|
|
104631
104911
|
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
104632
104912
|
}
|
|
104633
104913
|
function isHarnessBlock(key) {
|
|
104634
104914
|
return key.startsWith("[") && key.endsWith("]");
|
|
104635
104915
|
}
|
|
104636
104916
|
function collectIssues(configPath, value, prefix, fixSuffix) {
|
|
104637
|
-
if (!
|
|
104917
|
+
if (!isRecord16(value))
|
|
104638
104918
|
return [];
|
|
104639
104919
|
const issues = [];
|
|
104640
104920
|
for (const [key, child] of Object.entries(value)) {
|
|
@@ -104650,7 +104930,7 @@ function collectIssues(configPath, value, prefix, fixSuffix) {
|
|
|
104650
104930
|
});
|
|
104651
104931
|
continue;
|
|
104652
104932
|
}
|
|
104653
|
-
if (!
|
|
104933
|
+
if (!isRecord16(child))
|
|
104654
104934
|
continue;
|
|
104655
104935
|
if (PASSTHROUGH_CONTAINERS.has(key))
|
|
104656
104936
|
continue;
|
|
@@ -104669,7 +104949,7 @@ function collectIssues(configPath, value, prefix, fixSuffix) {
|
|
|
104669
104949
|
return issues;
|
|
104670
104950
|
}
|
|
104671
104951
|
function migrateFixSuffix(parsed) {
|
|
104672
|
-
if (
|
|
104952
|
+
if (isRecord16(parsed) && hasMigrationMarker(parsed, REASONING_UNIFICATION_MIGRATION_ID))
|
|
104673
104953
|
return "";
|
|
104674
104954
|
return MIGRATE_SUFFIX;
|
|
104675
104955
|
}
|
|
@@ -105907,12 +106187,12 @@ async function auditBundleTargets(pluginRoot) {
|
|
|
105907
106187
|
let referencedCount = 0;
|
|
105908
106188
|
for (const manifestPath of await findManifestPaths(pluginRoot, ".mcp.json")) {
|
|
105909
106189
|
const manifest = await readJson2(manifestPath);
|
|
105910
|
-
if (manifest === null || !
|
|
106190
|
+
if (manifest === null || !isRecord17(manifest["mcpServers"]))
|
|
105911
106191
|
continue;
|
|
105912
106192
|
const manifestRoot = dirname33(manifestPath);
|
|
105913
106193
|
const isRootManifest = resolve24(manifestRoot) === resolve24(pluginRoot);
|
|
105914
106194
|
for (const server of Object.values(manifest["mcpServers"])) {
|
|
105915
|
-
if (!
|
|
106195
|
+
if (!isRecord17(server) || !Array.isArray(server["args"]))
|
|
105916
106196
|
continue;
|
|
105917
106197
|
for (const arg of server["args"]) {
|
|
105918
106198
|
if (typeof arg !== "string" || !isPluginRuntimePathArg(arg))
|
|
@@ -105998,7 +106278,7 @@ function collectHookCommands(value, commands) {
|
|
|
105998
106278
|
collectHookCommands(item, commands);
|
|
105999
106279
|
return;
|
|
106000
106280
|
}
|
|
106001
|
-
if (!
|
|
106281
|
+
if (!isRecord17(value))
|
|
106002
106282
|
return;
|
|
106003
106283
|
if (value["type"] === "command") {
|
|
106004
106284
|
if (typeof value["command"] === "string")
|
|
@@ -106053,7 +106333,7 @@ function parseDegradedEntries(value) {
|
|
|
106053
106333
|
return [];
|
|
106054
106334
|
const entries = [];
|
|
106055
106335
|
for (const item of value) {
|
|
106056
|
-
if (!
|
|
106336
|
+
if (!isRecord17(item))
|
|
106057
106337
|
continue;
|
|
106058
106338
|
if (typeof item["component"] !== "string" || typeof item["reason"] !== "string")
|
|
106059
106339
|
continue;
|
|
@@ -106087,7 +106367,7 @@ function degradedDetailLines(entries) {
|
|
|
106087
106367
|
async function readJson2(path) {
|
|
106088
106368
|
try {
|
|
106089
106369
|
const parsed = JSON.parse(await readFile29(path, "utf8"));
|
|
106090
|
-
return
|
|
106370
|
+
return isRecord17(parsed) ? parsed : null;
|
|
106091
106371
|
} catch (error) {
|
|
106092
106372
|
if (error instanceof Error)
|
|
106093
106373
|
return null;
|
|
@@ -106108,7 +106388,7 @@ function normalizeRelative(root, target) {
|
|
|
106108
106388
|
function normalizePathSeparators(path) {
|
|
106109
106389
|
return path.split("\\").join("/");
|
|
106110
106390
|
}
|
|
106111
|
-
function
|
|
106391
|
+
function isRecord17(value) {
|
|
106112
106392
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
106113
106393
|
}
|
|
106114
106394
|
|
|
@@ -108218,8 +108498,8 @@ var program2 = new Command;
|
|
|
108218
108498
|
function resolveInstallArgs(options, invocationName = process.env.OMO_INVOCATION_NAME) {
|
|
108219
108499
|
const defaultPlatform = process.env.OMO_EDITION === "codex" || invocationName === "lazycodex" || invocationName === "lazycodex-ai" ? "codex" : undefined;
|
|
108220
108500
|
const platform = options.platform ?? defaultPlatform;
|
|
108221
|
-
if (platform === "
|
|
108222
|
-
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.`);
|
|
108223
108503
|
}
|
|
108224
108504
|
return {
|
|
108225
108505
|
tui: options.tui !== false,
|
|
@@ -108264,7 +108544,7 @@ Model Providers (Priority: Native > Copilot > OpenCode Zen > Z.ai > Kimi > Baili
|
|
|
108264
108544
|
`).action(async (options) => {
|
|
108265
108545
|
const rootOptions = program2.opts();
|
|
108266
108546
|
const args = resolveInstallArgs({ ...options, platform: options.platform ?? rootOptions.platform });
|
|
108267
|
-
const exitCode = await
|
|
108547
|
+
const exitCode = await install2(args);
|
|
108268
108548
|
process.exit(exitCode);
|
|
108269
108549
|
});
|
|
108270
108550
|
configureCleanupCommand(program2);
|