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-node/index.js
CHANGED
|
@@ -65,7 +65,7 @@ var package_default;
|
|
|
65
65
|
var init_package = __esm(() => {
|
|
66
66
|
package_default = {
|
|
67
67
|
name: "oh-my-opencode",
|
|
68
|
-
version: "5.0.0-beta.
|
|
68
|
+
version: "5.0.0-beta.83",
|
|
69
69
|
description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
|
|
70
70
|
main: "./dist/index.js",
|
|
71
71
|
types: "dist/index.d.ts",
|
|
@@ -248,7 +248,7 @@ var init_package = __esm(() => {
|
|
|
248
248
|
zod: "^4.6.5"
|
|
249
249
|
},
|
|
250
250
|
devDependencies: {
|
|
251
|
-
"@code-yeongyu/senpi": "2026.9.22",
|
|
251
|
+
"@code-yeongyu/senpi": "2026.9.22-2",
|
|
252
252
|
"@oh-my-opencode/agents-md-core": "workspace:*",
|
|
253
253
|
"@oh-my-opencode/ast-grep-mcp": "workspace:*",
|
|
254
254
|
"@oh-my-opencode/boulder-state": "workspace:*",
|
|
@@ -288,18 +288,18 @@ var init_package = __esm(() => {
|
|
|
288
288
|
typescript: "^7.0.2"
|
|
289
289
|
},
|
|
290
290
|
optionalDependencies: {
|
|
291
|
-
"oh-my-opencode-darwin-arm64": "5.0.0-beta.
|
|
292
|
-
"oh-my-opencode-darwin-x64": "5.0.0-beta.
|
|
293
|
-
"oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.
|
|
294
|
-
"oh-my-opencode-linux-arm64": "5.0.0-beta.
|
|
295
|
-
"oh-my-opencode-linux-arm64-musl": "5.0.0-beta.
|
|
296
|
-
"oh-my-opencode-linux-x64": "5.0.0-beta.
|
|
297
|
-
"oh-my-opencode-linux-x64-baseline": "5.0.0-beta.
|
|
298
|
-
"oh-my-opencode-linux-x64-musl": "5.0.0-beta.
|
|
299
|
-
"oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.
|
|
300
|
-
"oh-my-opencode-windows-arm64": "5.0.0-beta.
|
|
301
|
-
"oh-my-opencode-windows-x64": "5.0.0-beta.
|
|
302
|
-
"oh-my-opencode-windows-x64-baseline": "5.0.0-beta.
|
|
291
|
+
"oh-my-opencode-darwin-arm64": "5.0.0-beta.83",
|
|
292
|
+
"oh-my-opencode-darwin-x64": "5.0.0-beta.83",
|
|
293
|
+
"oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.83",
|
|
294
|
+
"oh-my-opencode-linux-arm64": "5.0.0-beta.83",
|
|
295
|
+
"oh-my-opencode-linux-arm64-musl": "5.0.0-beta.83",
|
|
296
|
+
"oh-my-opencode-linux-x64": "5.0.0-beta.83",
|
|
297
|
+
"oh-my-opencode-linux-x64-baseline": "5.0.0-beta.83",
|
|
298
|
+
"oh-my-opencode-linux-x64-musl": "5.0.0-beta.83",
|
|
299
|
+
"oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.83",
|
|
300
|
+
"oh-my-opencode-windows-arm64": "5.0.0-beta.83",
|
|
301
|
+
"oh-my-opencode-windows-x64": "5.0.0-beta.83",
|
|
302
|
+
"oh-my-opencode-windows-x64-baseline": "5.0.0-beta.83"
|
|
303
303
|
},
|
|
304
304
|
overrides: {
|
|
305
305
|
"@earendil-works/pi-agent-core": "0.84.2",
|
|
@@ -7228,6 +7228,7 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
7228
7228
|
},
|
|
7229
7229
|
librarian: {
|
|
7230
7230
|
fallbackChain: [
|
|
7231
|
+
{ providers: ["kimi-for-coding"], model: "kimi-for-coding-highspeed", variant: "off" },
|
|
7231
7232
|
{ providers: ["openai", "openai-codex"], model: "gpt-5.6-luna-fast", variant: "low" },
|
|
7232
7233
|
{ providers: ["deepseek"], model: "deepseek-v4-flash", variant: "max" },
|
|
7233
7234
|
{ providers: ["opencode-go", "bailian-coding-plan"], model: "qwen3.7-plus" },
|
|
@@ -7240,6 +7241,7 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
7240
7241
|
},
|
|
7241
7242
|
explore: {
|
|
7242
7243
|
fallbackChain: [
|
|
7244
|
+
{ providers: ["kimi-for-coding"], model: "kimi-for-coding-highspeed", variant: "off" },
|
|
7243
7245
|
{ providers: ["openai", "openai-codex"], model: "gpt-5.6-luna-fast", variant: "low" },
|
|
7244
7246
|
{ providers: ["deepseek"], model: "deepseek-v4-flash", variant: "max" },
|
|
7245
7247
|
{ providers: ["opencode-go", "bailian-coding-plan"], model: "qwen3.7-plus" },
|
|
@@ -7413,7 +7415,6 @@ var init_category_model_requirements = __esm(() => {
|
|
|
7413
7415
|
},
|
|
7414
7416
|
quick: {
|
|
7415
7417
|
fallbackChain: [
|
|
7416
|
-
{ providers: ["kimi-for-coding"], model: "kimi-for-coding-highspeed" },
|
|
7417
7418
|
{ providers: ["openai-codex"], model: "gpt-5.6-luna-fast", variant: "low" },
|
|
7418
7419
|
{ providers: ["deepseek"], model: "deepseek-v4-flash", variant: "off" },
|
|
7419
7420
|
{
|
|
@@ -7433,7 +7434,8 @@ var init_category_model_requirements = __esm(() => {
|
|
|
7433
7434
|
},
|
|
7434
7435
|
"unspecified-low": {
|
|
7435
7436
|
fallbackChain: [
|
|
7436
|
-
{ providers: ["
|
|
7437
|
+
{ providers: ["xiaomi", "opencode-go"], model: "mimo-v2.6-pro", variant: "max" },
|
|
7438
|
+
{ providers: ["xai", "github-copilot", "opencode-go"], model: "grok-4.7", variant: "xhigh" },
|
|
7437
7439
|
{
|
|
7438
7440
|
providers: ["openai", "openai-codex", "github-copilot", "opencode"],
|
|
7439
7441
|
model: "gpt-5.6-terra",
|
|
@@ -7455,11 +7457,6 @@ var init_category_model_requirements = __esm(() => {
|
|
|
7455
7457
|
},
|
|
7456
7458
|
"unspecified-high": {
|
|
7457
7459
|
fallbackChain: [
|
|
7458
|
-
{
|
|
7459
|
-
providers: ["openai", "openai-codex", "github-copilot", "opencode"],
|
|
7460
|
-
model: "gpt-6-astra",
|
|
7461
|
-
variant: "high"
|
|
7462
|
-
},
|
|
7463
7460
|
{
|
|
7464
7461
|
providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
|
|
7465
7462
|
model: "claude-opus-5",
|
|
@@ -8295,6 +8292,36 @@ var init_supplemental_entries = __esm(() => {
|
|
|
8295
8292
|
output: 32768
|
|
8296
8293
|
}
|
|
8297
8294
|
},
|
|
8295
|
+
"grok-4.7": {
|
|
8296
|
+
id: "grok-4.7",
|
|
8297
|
+
family: "grok",
|
|
8298
|
+
reasoning: false,
|
|
8299
|
+
temperature: true,
|
|
8300
|
+
toolCall: true,
|
|
8301
|
+
modalities: {
|
|
8302
|
+
input: ["text", "image"],
|
|
8303
|
+
output: ["text"]
|
|
8304
|
+
},
|
|
8305
|
+
limit: {
|
|
8306
|
+
context: 500000,
|
|
8307
|
+
output: 32768
|
|
8308
|
+
}
|
|
8309
|
+
},
|
|
8310
|
+
"xai/grok-4.7": {
|
|
8311
|
+
id: "xai/grok-4.7",
|
|
8312
|
+
family: "grok",
|
|
8313
|
+
reasoning: false,
|
|
8314
|
+
temperature: true,
|
|
8315
|
+
toolCall: true,
|
|
8316
|
+
modalities: {
|
|
8317
|
+
input: ["text", "image"],
|
|
8318
|
+
output: ["text"]
|
|
8319
|
+
},
|
|
8320
|
+
limit: {
|
|
8321
|
+
context: 500000,
|
|
8322
|
+
output: 32768
|
|
8323
|
+
}
|
|
8324
|
+
},
|
|
8298
8325
|
"xai/grok-build-0.1": {
|
|
8299
8326
|
id: "xai/grok-build-0.1",
|
|
8300
8327
|
family: "grok",
|
|
@@ -8324,6 +8351,36 @@ var init_supplemental_entries = __esm(() => {
|
|
|
8324
8351
|
context: 256000,
|
|
8325
8352
|
output: 32768
|
|
8326
8353
|
}
|
|
8354
|
+
},
|
|
8355
|
+
"mimo-v2.6-pro": {
|
|
8356
|
+
id: "mimo-v2.6-pro",
|
|
8357
|
+
family: "mimo",
|
|
8358
|
+
reasoning: true,
|
|
8359
|
+
temperature: true,
|
|
8360
|
+
toolCall: true,
|
|
8361
|
+
modalities: {
|
|
8362
|
+
input: ["text", "image"],
|
|
8363
|
+
output: ["text"]
|
|
8364
|
+
},
|
|
8365
|
+
limit: {
|
|
8366
|
+
context: 1048576,
|
|
8367
|
+
output: 131072
|
|
8368
|
+
}
|
|
8369
|
+
},
|
|
8370
|
+
"xiaomi/mimo-v2.6-pro": {
|
|
8371
|
+
id: "xiaomi/mimo-v2.6-pro",
|
|
8372
|
+
family: "mimo",
|
|
8373
|
+
reasoning: true,
|
|
8374
|
+
temperature: true,
|
|
8375
|
+
toolCall: true,
|
|
8376
|
+
modalities: {
|
|
8377
|
+
input: ["text", "image"],
|
|
8378
|
+
output: ["text"]
|
|
8379
|
+
},
|
|
8380
|
+
limit: {
|
|
8381
|
+
context: 1048576,
|
|
8382
|
+
output: 131072
|
|
8383
|
+
}
|
|
8327
8384
|
}
|
|
8328
8385
|
};
|
|
8329
8386
|
});
|
|
@@ -9297,21 +9354,21 @@ var init_openai_categories = __esm(() => {
|
|
|
9297
9354
|
},
|
|
9298
9355
|
{
|
|
9299
9356
|
name: "quick",
|
|
9300
|
-
config: { model: "
|
|
9357
|
+
config: { model: "openai/gpt-5.6-luna-fast", variant: "low" },
|
|
9301
9358
|
description: "Trivial tasks - single file changes, typo fixes, simple modifications",
|
|
9302
9359
|
callerGuidance: QUICK_CATEGORY_CALLER_GUIDANCE,
|
|
9303
9360
|
promptAppend: QUICK_CATEGORY_PROMPT_APPEND
|
|
9304
9361
|
},
|
|
9305
9362
|
{
|
|
9306
9363
|
name: "unspecified-low",
|
|
9307
|
-
config: { model: "
|
|
9364
|
+
config: { model: "xiaomi/mimo-v2.6-pro", variant: "max" },
|
|
9308
9365
|
description: "Tasks that don't fit other categories, low effort required",
|
|
9309
9366
|
callerGuidance: UNSPECIFIED_LOW_CATEGORY_CALLER_GUIDANCE,
|
|
9310
9367
|
promptAppend: UNSPECIFIED_LOW_CATEGORY_PROMPT_APPEND
|
|
9311
9368
|
},
|
|
9312
9369
|
{
|
|
9313
9370
|
name: "unspecified-high",
|
|
9314
|
-
config: { model: "
|
|
9371
|
+
config: { model: "anthropic/claude-opus-5", variant: "xhigh" },
|
|
9315
9372
|
description: "Tasks that don't fit other categories, high effort required",
|
|
9316
9373
|
callerGuidance: UNSPECIFIED_HIGH_CATEGORY_CALLER_GUIDANCE,
|
|
9317
9374
|
promptAppend: UNSPECIFIED_HIGH_CATEGORY_PROMPT_APPEND,
|
|
@@ -73962,12 +74019,14 @@ var init_git_master = __esm(() => {
|
|
|
73962
74019
|
});
|
|
73963
74020
|
|
|
73964
74021
|
// packages/omo-config-core/src/schema/harness.ts
|
|
73965
|
-
var HARNESS_IDS, OMO_CONFIG_HARNESS_IDS, OmoHarnessIdSchema;
|
|
74022
|
+
var HARNESS_IDS, OMO_CONFIG_HARNESS_IDS, OmoHarnessIdSchema, OMO_CONFIG_LEGACY_HARNESS_ALIASES, OMO_CONFIG_LEGACY_HARNESS_IDS;
|
|
73966
74023
|
var init_harness = __esm(() => {
|
|
73967
74024
|
init_zod();
|
|
73968
74025
|
HARNESS_IDS = ["codex", "opencode", "omo"];
|
|
73969
|
-
OMO_CONFIG_HARNESS_IDS = ["opencode", "
|
|
74026
|
+
OMO_CONFIG_HARNESS_IDS = ["opencode", "native", "codex"];
|
|
73970
74027
|
OmoHarnessIdSchema = _enum(OMO_CONFIG_HARNESS_IDS);
|
|
74028
|
+
OMO_CONFIG_LEGACY_HARNESS_ALIASES = { senpi: "native" };
|
|
74029
|
+
OMO_CONFIG_LEGACY_HARNESS_IDS = Object.keys(OMO_CONFIG_LEGACY_HARNESS_ALIASES);
|
|
73971
74030
|
});
|
|
73972
74031
|
|
|
73973
74032
|
// packages/omo-config-core/src/schema/memory.ts
|
|
@@ -74470,6 +74529,7 @@ var init_config = __esm(() => {
|
|
|
74470
74529
|
telemetry: OmoTelemetrySettingsLayerSchema.optional(),
|
|
74471
74530
|
disabled_skills: OmoDisabledSkillsSchema.optional(),
|
|
74472
74531
|
"[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
|
|
74532
|
+
"[native]": OmoTypedHarnessConfigSchema.optional(),
|
|
74473
74533
|
"[senpi]": OmoTypedHarnessConfigSchema.optional(),
|
|
74474
74534
|
"[codex]": OmoTypedHarnessConfigSchema.optional()
|
|
74475
74535
|
}).strict();
|
|
@@ -74488,6 +74548,7 @@ var init_config = __esm(() => {
|
|
|
74488
74548
|
telemetry: OmoTelemetrySettingsSchema.optional(),
|
|
74489
74549
|
disabled_skills: OmoDisabledSkillsSchema.optional(),
|
|
74490
74550
|
"[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
|
|
74551
|
+
"[native]": OmoTypedHarnessConfigSchema.optional(),
|
|
74491
74552
|
"[senpi]": OmoTypedHarnessConfigSchema.optional(),
|
|
74492
74553
|
"[codex]": OmoTypedHarnessConfigSchema.optional(),
|
|
74493
74554
|
profiles: record(string2(), OmoConfigProfileSchema).default({}),
|
|
@@ -74509,6 +74570,7 @@ var init_config = __esm(() => {
|
|
|
74509
74570
|
telemetry: OmoTelemetrySettingsLayerSchema.optional(),
|
|
74510
74571
|
disabled_skills: OmoDisabledSkillsSchema.optional(),
|
|
74511
74572
|
"[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
|
|
74573
|
+
"[native]": OmoTypedHarnessConfigSchema.optional(),
|
|
74512
74574
|
"[senpi]": OmoTypedHarnessConfigSchema.optional(),
|
|
74513
74575
|
"[codex]": OmoTypedHarnessConfigSchema.optional(),
|
|
74514
74576
|
profiles: record(string2(), OmoConfigProfileSchema).optional(),
|
|
@@ -74579,6 +74641,60 @@ var init_legacy_category_names = __esm(() => {
|
|
|
74579
74641
|
LEGACY_CATEGORY_NAME_ALIASES = { deep: "deep-low" };
|
|
74580
74642
|
});
|
|
74581
74643
|
|
|
74644
|
+
// packages/omo-config-core/src/schema/legacy-harness-names.ts
|
|
74645
|
+
function canonicalHarnessName(name) {
|
|
74646
|
+
return Object.hasOwn(OMO_CONFIG_LEGACY_HARNESS_ALIASES, name) ? OMO_CONFIG_LEGACY_HARNESS_ALIASES[name] : name;
|
|
74647
|
+
}
|
|
74648
|
+
function harnessBlockKey(harness) {
|
|
74649
|
+
return `[${harness}]`;
|
|
74650
|
+
}
|
|
74651
|
+
function legacyHarnessOfBlockKey(key) {
|
|
74652
|
+
if (!key.startsWith("[") || !key.endsWith("]"))
|
|
74653
|
+
return;
|
|
74654
|
+
const harness = key.slice(1, -1);
|
|
74655
|
+
return Object.hasOwn(OMO_CONFIG_LEGACY_HARNESS_ALIASES, harness) ? harness : undefined;
|
|
74656
|
+
}
|
|
74657
|
+
function isRecord10(value) {
|
|
74658
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
74659
|
+
}
|
|
74660
|
+
function canonicalizeBlocksIn(container, path, renames) {
|
|
74661
|
+
const result = {};
|
|
74662
|
+
for (const [key, value] of Object.entries(container)) {
|
|
74663
|
+
const legacyHarness = legacyHarnessOfBlockKey(key);
|
|
74664
|
+
if (legacyHarness === undefined) {
|
|
74665
|
+
result[key] = value;
|
|
74666
|
+
continue;
|
|
74667
|
+
}
|
|
74668
|
+
const canonical = harnessBlockKey(canonicalHarnessName(legacyHarness));
|
|
74669
|
+
const dropped = Object.hasOwn(container, canonical);
|
|
74670
|
+
renames.push({ canonical, dropped, legacy: key, path: [...path, key].join(".") });
|
|
74671
|
+
if (!dropped)
|
|
74672
|
+
result[canonical] = value;
|
|
74673
|
+
}
|
|
74674
|
+
return result;
|
|
74675
|
+
}
|
|
74676
|
+
function canonicalizeLegacyHarnessBlocks(document) {
|
|
74677
|
+
if (!isRecord10(document))
|
|
74678
|
+
return { document: {}, renames: [] };
|
|
74679
|
+
const renames = [];
|
|
74680
|
+
const canonicalized = canonicalizeBlocksIn(document, [], renames);
|
|
74681
|
+
const profiles = canonicalized["profiles"];
|
|
74682
|
+
if (isRecord10(profiles)) {
|
|
74683
|
+
const canonicalProfiles = {};
|
|
74684
|
+
for (const [name, profile] of Object.entries(profiles)) {
|
|
74685
|
+
canonicalProfiles[name] = isRecord10(profile) ? canonicalizeBlocksIn(profile, ["profiles", name], renames) : profile;
|
|
74686
|
+
}
|
|
74687
|
+
canonicalized["profiles"] = canonicalProfiles;
|
|
74688
|
+
}
|
|
74689
|
+
return { document: canonicalized, renames };
|
|
74690
|
+
}
|
|
74691
|
+
function hasLegacyHarnessBlocks(document) {
|
|
74692
|
+
return canonicalizeLegacyHarnessBlocks(document).renames.length > 0;
|
|
74693
|
+
}
|
|
74694
|
+
var init_legacy_harness_names = __esm(() => {
|
|
74695
|
+
init_harness();
|
|
74696
|
+
});
|
|
74697
|
+
|
|
74582
74698
|
// packages/omo-config-core/src/schema/index.ts
|
|
74583
74699
|
var init_schema = __esm(() => {
|
|
74584
74700
|
init_agent();
|
|
@@ -74589,6 +74705,7 @@ var init_schema = __esm(() => {
|
|
|
74589
74705
|
init_git_master();
|
|
74590
74706
|
init_harness();
|
|
74591
74707
|
init_legacy_category_names();
|
|
74708
|
+
init_legacy_harness_names();
|
|
74592
74709
|
init_memory();
|
|
74593
74710
|
init_model_catalog();
|
|
74594
74711
|
init_model_profile();
|
|
@@ -74598,6 +74715,9 @@ var init_schema = __esm(() => {
|
|
|
74598
74715
|
init_telemetry();
|
|
74599
74716
|
});
|
|
74600
74717
|
|
|
74718
|
+
// packages/omo-config-core/src/loader/disabled-skills.ts
|
|
74719
|
+
var init_disabled_skills = () => {};
|
|
74720
|
+
|
|
74601
74721
|
// packages/omo-config-core/src/loader/merge.ts
|
|
74602
74722
|
function isUnsafeObjectKey2(key) {
|
|
74603
74723
|
return DANGEROUS_KEYS2.has(key);
|
|
@@ -74772,7 +74892,13 @@ function withoutControlKeys(config) {
|
|
|
74772
74892
|
function harnessLayer(config, harness) {
|
|
74773
74893
|
if (harness === undefined)
|
|
74774
74894
|
return {};
|
|
74775
|
-
|
|
74895
|
+
const canonical = canonicalHarnessName(harness);
|
|
74896
|
+
const legacyKeys = Object.entries(OMO_CONFIG_LEGACY_HARNESS_ALIASES).filter(([, target]) => target === canonical).map(([legacy]) => harnessBlockKey(legacy));
|
|
74897
|
+
let layer = {};
|
|
74898
|
+
for (const key of [...legacyKeys, harnessBlockKey(canonical)]) {
|
|
74899
|
+
layer = mergeOmoConfigRecords(layer, toRecord(config[key]) ?? {});
|
|
74900
|
+
}
|
|
74901
|
+
return layer;
|
|
74776
74902
|
}
|
|
74777
74903
|
function resolveOmoConfigView(options) {
|
|
74778
74904
|
const profiles = toRecord(options.config["profiles"]);
|
|
@@ -74802,7 +74928,7 @@ var HARNESS_KEYS;
|
|
|
74802
74928
|
var init_resolution = __esm(() => {
|
|
74803
74929
|
init_schema();
|
|
74804
74930
|
init_merge();
|
|
74805
|
-
HARNESS_KEYS = [...new Set([...HARNESS_IDS, ...OMO_CONFIG_HARNESS_IDS])].map((harness) =>
|
|
74931
|
+
HARNESS_KEYS = [...new Set([...HARNESS_IDS, ...OMO_CONFIG_HARNESS_IDS, ...OMO_CONFIG_LEGACY_HARNESS_IDS])].map((harness) => harnessBlockKey(harness));
|
|
74806
74932
|
});
|
|
74807
74933
|
|
|
74808
74934
|
// packages/omo-config-core/src/loader/loader.ts
|
|
@@ -74823,6 +74949,7 @@ function parseJsoncSafe2(content) {
|
|
|
74823
74949
|
function stripResolutionControlKeys(config) {
|
|
74824
74950
|
const {
|
|
74825
74951
|
"[codex]": _codex,
|
|
74952
|
+
"[native]": _native,
|
|
74826
74953
|
"[opencode]": _opencode,
|
|
74827
74954
|
"[senpi]": _senpi,
|
|
74828
74955
|
profiles: _profiles,
|
|
@@ -74848,21 +74975,21 @@ function hasUnsafeUnrecognizedKey(issues) {
|
|
|
74848
74975
|
function hasTamperedPrototype(value) {
|
|
74849
74976
|
if (Array.isArray(value))
|
|
74850
74977
|
return value.some((entry) => hasTamperedPrototype(entry));
|
|
74851
|
-
if (!
|
|
74978
|
+
if (!isRecord11(value))
|
|
74852
74979
|
return false;
|
|
74853
74980
|
const prototype = Object.getPrototypeOf(value);
|
|
74854
74981
|
if (prototype !== Object.prototype && prototype !== null)
|
|
74855
74982
|
return true;
|
|
74856
74983
|
return Object.values(value).some((entry) => hasTamperedPrototype(entry));
|
|
74857
74984
|
}
|
|
74858
|
-
function
|
|
74985
|
+
function isRecord11(value) {
|
|
74859
74986
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
74860
74987
|
}
|
|
74861
74988
|
function containerAt(record, path) {
|
|
74862
74989
|
let container = record;
|
|
74863
74990
|
for (const segment of path) {
|
|
74864
74991
|
const next = container[segment];
|
|
74865
|
-
if (!
|
|
74992
|
+
if (!isRecord11(next))
|
|
74866
74993
|
return null;
|
|
74867
74994
|
container = next;
|
|
74868
74995
|
}
|
|
@@ -74973,6 +75100,15 @@ function legacyCategoryDiagnostic(path, renames) {
|
|
|
74973
75100
|
issuePaths: renames.map((rename) => rename.path)
|
|
74974
75101
|
};
|
|
74975
75102
|
}
|
|
75103
|
+
function legacyHarnessDiagnostic(path, renames) {
|
|
75104
|
+
const detail = renames.map((rename) => rename.dropped ? `${rename.path} ignored because ${rename.canonical} is also configured` : `${rename.path} renamed to ${rename.canonical}`).join(", ");
|
|
75105
|
+
return {
|
|
75106
|
+
kind: "deprecated-keys",
|
|
75107
|
+
message: `Deprecated harness block in ${path}: ${detail}. Rename it; the alias is removed in a future release.`,
|
|
75108
|
+
path,
|
|
75109
|
+
issuePaths: renames.map((rename) => rename.path)
|
|
75110
|
+
};
|
|
75111
|
+
}
|
|
74976
75112
|
function loadOmoConfig(options = {}) {
|
|
74977
75113
|
const fileSystem = options.fileSystem ?? DEFAULT_READ_FILE_SYSTEM;
|
|
74978
75114
|
const cwd = options.cwd ?? process.cwd();
|
|
@@ -74995,8 +75131,12 @@ function loadOmoConfig(options = {}) {
|
|
|
74995
75131
|
if (canonicalized.renames.length > 0) {
|
|
74996
75132
|
diagnostics.push(legacyCategoryDiagnostic(candidate.path, canonicalized.renames));
|
|
74997
75133
|
}
|
|
74998
|
-
|
|
74999
|
-
|
|
75134
|
+
const harnessCanonicalized = canonicalizeLegacyHarnessBlocks(canonicalized.document);
|
|
75135
|
+
if (harnessCanonicalized.renames.length > 0) {
|
|
75136
|
+
diagnostics.push(legacyHarnessDiagnostic(candidate.path, harnessCanonicalized.renames));
|
|
75137
|
+
}
|
|
75138
|
+
layers.push({ config: harnessCanonicalized.document, source: loaded.source });
|
|
75139
|
+
merged = mergeOmoConfigRecords(merged, harnessCanonicalized.document);
|
|
75000
75140
|
}
|
|
75001
75141
|
}
|
|
75002
75142
|
const requestedProfile = resolveOmoProfileName({
|
|
@@ -75044,6 +75184,7 @@ var init_loader2 = __esm(() => {
|
|
|
75044
75184
|
|
|
75045
75185
|
// packages/omo-config-core/src/loader/index.ts
|
|
75046
75186
|
var init_loader3 = __esm(() => {
|
|
75187
|
+
init_disabled_skills();
|
|
75047
75188
|
init_loader2();
|
|
75048
75189
|
init_merge();
|
|
75049
75190
|
init_paths();
|
|
@@ -77361,14 +77502,14 @@ function transformConfigJsoncSources(input) {
|
|
|
77361
77502
|
const omo = recordAt(legacy, "[omo]");
|
|
77362
77503
|
const senpi = recordAt(legacy, "[senpi]");
|
|
77363
77504
|
const history = legacyMigrationHistory(input.discovered, input.sources);
|
|
77364
|
-
const diagnostics = omo !== undefined && senpi !== undefined ? ["conflict: [
|
|
77505
|
+
const diagnostics = omo !== undefined && senpi !== undefined ? ["conflict: [native] legacy [omo] kept [native]"] : [];
|
|
77365
77506
|
return {
|
|
77366
77507
|
diagnostics,
|
|
77367
77508
|
document: {
|
|
77368
77509
|
$schema: OMO_SCHEMA_URL,
|
|
77369
77510
|
...recordAt(legacy, "[opencode]") === undefined ? {} : { "[opencode]": recordAt(legacy, "[opencode]") },
|
|
77370
77511
|
...recordAt(legacy, "[codex]") === undefined ? {} : { "[codex]": recordAt(legacy, "[codex]") },
|
|
77371
|
-
...senpi === undefined && omo === undefined ? {} : { "[
|
|
77512
|
+
...senpi === undefined && omo === undefined ? {} : { "[native]": senpi ?? omo },
|
|
77372
77513
|
...Object.keys(history).length === 0 ? {} : { legacy_migrations: history }
|
|
77373
77514
|
}
|
|
77374
77515
|
};
|
|
@@ -77632,7 +77773,7 @@ function normalizeTypedBlock(value, path, diagnostics, recurseProfiles) {
|
|
|
77632
77773
|
}
|
|
77633
77774
|
if (result["models"] !== undefined)
|
|
77634
77775
|
result["models"] = normalizeCatalog(result["models"]);
|
|
77635
|
-
for (const harness of ["[senpi]", "[codex]"]) {
|
|
77776
|
+
for (const harness of ["[senpi]", "[native]", "[codex]"]) {
|
|
77636
77777
|
if (result[harness] !== undefined)
|
|
77637
77778
|
result[harness] = normalizeTypedBlock(result[harness], [...path, harness], diagnostics, false);
|
|
77638
77779
|
}
|
|
@@ -77686,6 +77827,19 @@ var init_category_deep_split = __esm(() => {
|
|
|
77686
77827
|
init_src4();
|
|
77687
77828
|
});
|
|
77688
77829
|
|
|
77830
|
+
// packages/omo-opencode/src/config-migration/harness-native-rename.ts
|
|
77831
|
+
function transformHarnessNativeRename(document) {
|
|
77832
|
+
const { document: canonicalized, renames } = canonicalizeLegacyHarnessBlocks(document);
|
|
77833
|
+
return {
|
|
77834
|
+
diagnostics: renames.map((rename) => rename.dropped ? `${rename.path} removed: ${rename.canonical} is already configured` : `${rename.path} renamed to ${rename.canonical}`),
|
|
77835
|
+
document: canonicalized
|
|
77836
|
+
};
|
|
77837
|
+
}
|
|
77838
|
+
var HARNESS_NATIVE_RENAME_MIGRATION_ID = "2026-09-harness-native-rename";
|
|
77839
|
+
var init_harness_native_rename = __esm(() => {
|
|
77840
|
+
init_src4();
|
|
77841
|
+
});
|
|
77842
|
+
|
|
77689
77843
|
// packages/omo-opencode/src/config-migration/migration-plans.ts
|
|
77690
77844
|
function backupTimestamp(value) {
|
|
77691
77845
|
return value ?? new Date().toISOString().replace(/[:.]/g, "-");
|
|
@@ -77764,6 +77918,18 @@ function categoryDeepSplitPlan(targetPath) {
|
|
|
77764
77918
|
transform: inspect
|
|
77765
77919
|
};
|
|
77766
77920
|
}
|
|
77921
|
+
function harnessNativeRenamePlan(targetPath) {
|
|
77922
|
+
const inspect = (sources) => transformHarnessNativeRename(sources[0]?.value);
|
|
77923
|
+
return {
|
|
77924
|
+
id: HARNESS_NATIVE_RENAME_MIGRATION_ID,
|
|
77925
|
+
inspect,
|
|
77926
|
+
mode: "replace-target",
|
|
77927
|
+
shouldRun: hasLegacyHarnessBlocks,
|
|
77928
|
+
sources: [],
|
|
77929
|
+
targetPath,
|
|
77930
|
+
transform: inspect
|
|
77931
|
+
};
|
|
77932
|
+
}
|
|
77767
77933
|
function existingOmoConfigPath(directory, options) {
|
|
77768
77934
|
const fileSystem = discoveryFileSystem(options);
|
|
77769
77935
|
for (const fileName of ["omo.jsonc", "omo.json"]) {
|
|
@@ -77827,7 +77993,8 @@ function createLegacyConfigMigrationPlans(options) {
|
|
|
77827
77993
|
return [
|
|
77828
77994
|
...legacyPlans,
|
|
77829
77995
|
...inPlaceTargets.map(reasoningPlan),
|
|
77830
|
-
...inPlaceTargets.map(categoryDeepSplitPlan)
|
|
77996
|
+
...inPlaceTargets.map(categoryDeepSplitPlan),
|
|
77997
|
+
...inPlaceTargets.map(harnessNativeRenamePlan)
|
|
77831
77998
|
];
|
|
77832
77999
|
}
|
|
77833
78000
|
var init_migration_plans = __esm(() => {
|
|
@@ -77838,6 +78005,7 @@ var init_migration_plans = __esm(() => {
|
|
|
77838
78005
|
init_transform_opencode();
|
|
77839
78006
|
init_reasoning_unification();
|
|
77840
78007
|
init_category_deep_split();
|
|
78008
|
+
init_harness_native_rename();
|
|
77841
78009
|
init_src4();
|
|
77842
78010
|
});
|
|
77843
78011
|
|
|
@@ -78622,7 +78790,7 @@ function shouldRetainLine(line, cutoffMs) {
|
|
|
78622
78790
|
function parseDiagnosticLine(line) {
|
|
78623
78791
|
try {
|
|
78624
78792
|
const parsed = JSON.parse(line);
|
|
78625
|
-
if (!
|
|
78793
|
+
if (!isRecord13(parsed)) {
|
|
78626
78794
|
return null;
|
|
78627
78795
|
}
|
|
78628
78796
|
return parsed;
|
|
@@ -78633,7 +78801,7 @@ function parseDiagnosticLine(line) {
|
|
|
78633
78801
|
throw error;
|
|
78634
78802
|
}
|
|
78635
78803
|
}
|
|
78636
|
-
function
|
|
78804
|
+
function isRecord13(value) {
|
|
78637
78805
|
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
78638
78806
|
}
|
|
78639
78807
|
function trimToMaxBytes(lines) {
|
|
@@ -86123,7 +86291,7 @@ function coerceBool(value) {
|
|
|
86123
86291
|
function coerceString(value) {
|
|
86124
86292
|
return typeof value == "string" ? value : undefined;
|
|
86125
86293
|
}
|
|
86126
|
-
function
|
|
86294
|
+
function isRecord14(value) {
|
|
86127
86295
|
return typeof value == "object" && value !== null && !Array.isArray(value);
|
|
86128
86296
|
}
|
|
86129
86297
|
function toRfc3339(timestamp) {
|
|
@@ -86145,7 +86313,7 @@ function relocateInto(properties, key, value) {
|
|
|
86145
86313
|
properties[key] = value;
|
|
86146
86314
|
}
|
|
86147
86315
|
function buildV1Event(message) {
|
|
86148
|
-
const sourceProperties =
|
|
86316
|
+
const sourceProperties = isRecord14(message.properties) ? message.properties : {};
|
|
86149
86317
|
const properties = {
|
|
86150
86318
|
...sourceProperties
|
|
86151
86319
|
};
|
|
@@ -88290,7 +88458,7 @@ var package_default2;
|
|
|
88290
88458
|
var init_package2 = __esm(() => {
|
|
88291
88459
|
package_default2 = {
|
|
88292
88460
|
name: "@oh-my-opencode/omo-codex",
|
|
88293
|
-
version: "5.0.0-beta.
|
|
88461
|
+
version: "5.0.0-beta.83",
|
|
88294
88462
|
type: "module",
|
|
88295
88463
|
private: true,
|
|
88296
88464
|
description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
|
|
@@ -91465,8 +91633,11 @@ function formatConfigSummary(config) {
|
|
|
91465
91633
|
if (config.hasCodex) {
|
|
91466
91634
|
lines.push(` ${SYMBOLS.info} Codex autonomous mode: ${config.codexAutonomous ? "enabled" : "disabled"}`);
|
|
91467
91635
|
}
|
|
91468
|
-
if (config.
|
|
91469
|
-
lines.push(` ${SYMBOLS.info}
|
|
91636
|
+
if (config.hasNative) {
|
|
91637
|
+
lines.push(` ${SYMBOLS.info} OmO Native: installing from omo-ai@beta`);
|
|
91638
|
+
}
|
|
91639
|
+
if (config.hasNativeDev) {
|
|
91640
|
+
lines.push(` ${SYMBOLS.info} OmO Native development adapter: enabled`);
|
|
91470
91641
|
}
|
|
91471
91642
|
if (!config.hasOpenCode)
|
|
91472
91643
|
return lines.join(`
|
|
@@ -91623,7 +91794,8 @@ function argsToConfig(args) {
|
|
|
91623
91794
|
const platform = resolvePlatform(args);
|
|
91624
91795
|
const hasOpenCode = platform === "opencode" || platform === "both";
|
|
91625
91796
|
const hasCodex = platform === "codex" || platform === "both";
|
|
91626
|
-
const
|
|
91797
|
+
const hasNative = platform === "native";
|
|
91798
|
+
const hasNativeDev = platform === "native-dev";
|
|
91627
91799
|
return {
|
|
91628
91800
|
platform,
|
|
91629
91801
|
hasOpenCode,
|
|
@@ -91633,7 +91805,8 @@ function argsToConfig(args) {
|
|
|
91633
91805
|
hasGemini: hasOpenCode && args.gemini === "yes",
|
|
91634
91806
|
hasCopilot: hasOpenCode && args.copilot === "yes",
|
|
91635
91807
|
hasCodex,
|
|
91636
|
-
|
|
91808
|
+
hasNative,
|
|
91809
|
+
hasNativeDev,
|
|
91637
91810
|
hasOpencodeZen: hasOpenCode && args.opencodeZen === "yes",
|
|
91638
91811
|
hasZaiCodingPlan: hasOpenCode && args.zaiCodingPlan === "yes",
|
|
91639
91812
|
hasKimiForCoding: hasOpenCode && args.kimiForCoding === "yes",
|
|
@@ -94357,10 +94530,10 @@ function readCatalogMultiAgentVersion(model, cachePath) {
|
|
|
94357
94530
|
} catch {
|
|
94358
94531
|
return null;
|
|
94359
94532
|
}
|
|
94360
|
-
if (!
|
|
94533
|
+
if (!isRecord12(cache) || !Array.isArray(cache.models))
|
|
94361
94534
|
return null;
|
|
94362
94535
|
for (const entry of cache.models) {
|
|
94363
|
-
if (!
|
|
94536
|
+
if (!isRecord12(entry))
|
|
94364
94537
|
continue;
|
|
94365
94538
|
if (entry.slug !== model && entry.id !== model)
|
|
94366
94539
|
continue;
|
|
@@ -94385,7 +94558,7 @@ function readRootModelCatalogPath(config) {
|
|
|
94385
94558
|
const single = config.match(/^\s*model_catalog_json\s*=\s*'([^']+)'/m);
|
|
94386
94559
|
return single?.[1] ?? null;
|
|
94387
94560
|
}
|
|
94388
|
-
function
|
|
94561
|
+
function isRecord12(value) {
|
|
94389
94562
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
94390
94563
|
}
|
|
94391
94564
|
function removeFeatureFlagSetting(config, featureName) {
|
|
@@ -97194,7 +97367,7 @@ async function readSettings(settingsPath) {
|
|
|
97194
97367
|
throw error;
|
|
97195
97368
|
}
|
|
97196
97369
|
const parsed = JSON.parse(raw);
|
|
97197
|
-
if (!
|
|
97370
|
+
if (!isRecord15(parsed))
|
|
97198
97371
|
throw new Error(`${settingsPath} must contain a JSON object`);
|
|
97199
97372
|
return parsed;
|
|
97200
97373
|
}
|
|
@@ -97255,7 +97428,7 @@ async function nextBackupPath(settingsPath) {
|
|
|
97255
97428
|
function timestampForBackup() {
|
|
97256
97429
|
return new Date().toISOString().replace(/[-:.]/g, "");
|
|
97257
97430
|
}
|
|
97258
|
-
function
|
|
97431
|
+
function isRecord15(value) {
|
|
97259
97432
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
97260
97433
|
}
|
|
97261
97434
|
async function readPackageName(packagePath) {
|
|
@@ -97275,7 +97448,7 @@ async function readPackageName(packagePath) {
|
|
|
97275
97448
|
return;
|
|
97276
97449
|
throw error;
|
|
97277
97450
|
}
|
|
97278
|
-
return
|
|
97451
|
+
return isRecord15(parsed) && typeof parsed.name === "string" ? parsed.name : undefined;
|
|
97279
97452
|
}
|
|
97280
97453
|
async function fileExists(path) {
|
|
97281
97454
|
try {
|
|
@@ -97299,6 +97472,7 @@ var REQUIRED_PLUGIN_ARTIFACTS = [
|
|
|
97299
97472
|
join61("extensions", "memory-run-supervisor.mjs"),
|
|
97300
97473
|
...PERSONA_ASSET_FILES.map((filename) => join61("extensions", filename)),
|
|
97301
97474
|
join61("skills", "ast-grep", "SKILL.md"),
|
|
97475
|
+
join61("skills", "browser", "SKILL.md"),
|
|
97302
97476
|
join61("skills", "coding-agent-sessions", "SKILL.md"),
|
|
97303
97477
|
join61("skills", "debugging", "SKILL.md"),
|
|
97304
97478
|
join61("skills", "frontend", "SKILL.md"),
|
|
@@ -97390,7 +97564,7 @@ async function verifyAstGrepRuntimeIntegrity(pluginPath, platform) {
|
|
|
97390
97564
|
}
|
|
97391
97565
|
}
|
|
97392
97566
|
function isAstGrepRuntimeManifest(value) {
|
|
97393
|
-
if (!
|
|
97567
|
+
if (!isRecord15(value))
|
|
97394
97568
|
return false;
|
|
97395
97569
|
return typeof value.sha256 === "string" && /^[a-f0-9]{64}$/.test(value.sha256) && typeof value.mode === "number" && Number.isInteger(value.mode) && typeof value.stagedAtUtc === "string" && !Number.isNaN(Date.parse(value.stagedAtUtc));
|
|
97396
97570
|
}
|
|
@@ -97480,23 +97654,88 @@ function findRepoRoot2(importerDir) {
|
|
|
97480
97654
|
function fileExistsSync(path) {
|
|
97481
97655
|
return existsSync30(path);
|
|
97482
97656
|
}
|
|
97483
|
-
// packages/omo-opencode/src/cli/
|
|
97484
|
-
|
|
97485
|
-
|
|
97486
|
-
|
|
97657
|
+
// packages/omo-opencode/src/cli/install-native-dev/index.ts
|
|
97658
|
+
async function runNativeDevInstaller(options) {
|
|
97659
|
+
return runSenpiInstaller(options);
|
|
97660
|
+
}
|
|
97661
|
+
|
|
97662
|
+
// packages/omo-opencode/src/cli/install-native/plan.ts
|
|
97663
|
+
var NATIVE_PACKAGE_SPEC = "omo-ai@beta";
|
|
97664
|
+
var NATIVE_SETUP_COMMAND = "omo setup";
|
|
97665
|
+
var NATIVE_RECOMMENDED_RUNTIME_NOTE = "bun is the recommended runtime for OmO Native; npm works, but bun is what the beta channel is tested on.";
|
|
97666
|
+
var PLANS = {
|
|
97667
|
+
bun: { packageManager: "bun", command: "bun", args: ["add", "-g", NATIVE_PACKAGE_SPEC] },
|
|
97668
|
+
npm: { packageManager: "npm", command: "npm", args: ["i", "-g", NATIVE_PACKAGE_SPEC] }
|
|
97669
|
+
};
|
|
97670
|
+
function resolveNativeInstallPlan(bunAvailable) {
|
|
97671
|
+
return bunAvailable ? PLANS.bun : PLANS.npm;
|
|
97672
|
+
}
|
|
97673
|
+
function formatNativeInstallCommand(plan) {
|
|
97674
|
+
return [plan.command, ...plan.args].join(" ");
|
|
97675
|
+
}
|
|
97676
|
+
// packages/omo-opencode/src/cli/install-native/run-native-install.ts
|
|
97677
|
+
init_bun_which_shim();
|
|
97678
|
+
init_spawn_with_windows_hide();
|
|
97679
|
+
function describeExit(plan, result) {
|
|
97680
|
+
const stderr = result.stderr?.trim();
|
|
97681
|
+
const head = `${plan.packageManager} exited with code ${result.exitCode}`;
|
|
97682
|
+
return stderr ? `${head}: ${stderr.split(`
|
|
97683
|
+
`).slice(-3).join(" ")}` : head;
|
|
97684
|
+
}
|
|
97685
|
+
async function runNativeInstall(dependencies = defaultNativeInstallDependencies()) {
|
|
97686
|
+
const plan = resolveNativeInstallPlan(await dependencies.isBunAvailable());
|
|
97687
|
+
const notes = plan.packageManager === "npm" ? [NATIVE_RECOMMENDED_RUNTIME_NOTE] : [];
|
|
97688
|
+
const manualCommand = formatNativeInstallCommand(plan);
|
|
97689
|
+
try {
|
|
97690
|
+
const result = await dependencies.spawn(plan.command, plan.args);
|
|
97691
|
+
if (result.exitCode === 0)
|
|
97692
|
+
return { ok: true, plan, notes };
|
|
97693
|
+
return { ok: false, plan, notes, failure: { reason: describeExit(plan, result), manualCommand } };
|
|
97694
|
+
} catch (error) {
|
|
97695
|
+
const reason = error instanceof Error ? error.message : String(error);
|
|
97696
|
+
return { ok: false, plan, notes, failure: { reason, manualCommand } };
|
|
97697
|
+
}
|
|
97698
|
+
}
|
|
97699
|
+
function nativeInstallSuccessLine() {
|
|
97700
|
+
return `OmO Native installed. Run ${NATIVE_SETUP_COMMAND} to finish onboarding.`;
|
|
97701
|
+
}
|
|
97702
|
+
function nativeInstallFailureLines(failure) {
|
|
97703
|
+
return [
|
|
97704
|
+
`OmO Native install failed: ${failure.reason}`,
|
|
97705
|
+
`Install it yourself with: ${failure.manualCommand}`,
|
|
97706
|
+
`Then run ${NATIVE_SETUP_COMMAND}.`
|
|
97707
|
+
];
|
|
97708
|
+
}
|
|
97709
|
+
function defaultNativeInstallDependencies() {
|
|
97710
|
+
return {
|
|
97711
|
+
isBunAvailable: () => bunWhich("bun") !== null,
|
|
97712
|
+
spawn: async (command, args) => {
|
|
97713
|
+
const proc = spawnWithWindowsHide([command, ...args], {
|
|
97714
|
+
env: process.env,
|
|
97715
|
+
stdout: "inherit",
|
|
97716
|
+
stderr: "inherit"
|
|
97717
|
+
});
|
|
97718
|
+
return { exitCode: await proc.exited };
|
|
97719
|
+
}
|
|
97720
|
+
};
|
|
97721
|
+
}
|
|
97722
|
+
// packages/omo-opencode/src/cli/native-edition-hint.ts
|
|
97723
|
+
var NATIVE_EDITION_INSTALL_COMMAND = "bun add -g omo-ai@beta";
|
|
97724
|
+
var NATIVE_EDITION_GUIDE_URL = "https://github.com/code-yeongyu/oh-my-openagent/blob/dev/docs/guide/installation.md#omo-native-beta-omo-via-omo-ai";
|
|
97725
|
+
var NATIVE_EDITION_HINT_TITLE = "OmO Native (beta)";
|
|
97487
97726
|
var PLAIN_PAINT = {
|
|
97488
97727
|
command: (text) => text,
|
|
97489
97728
|
link: (text) => text
|
|
97490
97729
|
};
|
|
97491
|
-
function
|
|
97492
|
-
return !config.
|
|
97730
|
+
function shouldShowNativeEditionHint(config) {
|
|
97731
|
+
return !config.hasNative && !config.hasNativeDev;
|
|
97493
97732
|
}
|
|
97494
|
-
function
|
|
97733
|
+
function nativeEditionHintLines(paint = PLAIN_PAINT) {
|
|
97495
97734
|
return [
|
|
97496
|
-
`omo also ships as
|
|
97497
|
-
`Try it next to this install: ${paint.command(
|
|
97735
|
+
`omo also ships as OmO Native: the same omo as one ${paint.command("omo")} command, with no OpenCode host required.`,
|
|
97736
|
+
`Try it next to this install: ${paint.command(NATIVE_EDITION_INSTALL_COMMAND)}, then run ${paint.command("omo")}.`,
|
|
97498
97737
|
"This install keeps working as-is.",
|
|
97499
|
-
`Guide: ${paint.link(
|
|
97738
|
+
`Guide: ${paint.link(NATIVE_EDITION_GUIDE_URL)}`
|
|
97500
97739
|
];
|
|
97501
97740
|
}
|
|
97502
97741
|
|
|
@@ -97511,7 +97750,8 @@ var PLATFORM_REPOSITORIES = {
|
|
|
97511
97750
|
opencode: ["code-yeongyu/oh-my-openagent"],
|
|
97512
97751
|
codex: STAR_REPOSITORIES,
|
|
97513
97752
|
both: STAR_REPOSITORIES,
|
|
97514
|
-
|
|
97753
|
+
native: STAR_REPOSITORIES,
|
|
97754
|
+
"native-dev": STAR_REPOSITORIES
|
|
97515
97755
|
};
|
|
97516
97756
|
var execFileAsync2 = promisify3(execFile4);
|
|
97517
97757
|
async function runGitHubStarCommand(repository) {
|
|
@@ -98013,14 +98253,27 @@ async function runCliInstaller(args, version) {
|
|
|
98013
98253
|
}
|
|
98014
98254
|
console.log();
|
|
98015
98255
|
}
|
|
98016
|
-
if (config.
|
|
98017
|
-
printInfo("Installing
|
|
98256
|
+
if (config.hasNative) {
|
|
98257
|
+
printInfo("Installing OmO Native...");
|
|
98258
|
+
const outcome = await runNativeInstall();
|
|
98259
|
+
if (outcome.failure) {
|
|
98260
|
+
for (const line of nativeInstallFailureLines(outcome.failure))
|
|
98261
|
+
printError(line);
|
|
98262
|
+
return 1;
|
|
98263
|
+
}
|
|
98264
|
+
for (const note of outcome.notes)
|
|
98265
|
+
printInfo(note);
|
|
98266
|
+
printSuccess(nativeInstallSuccessLine());
|
|
98267
|
+
console.log();
|
|
98268
|
+
}
|
|
98269
|
+
if (config.hasNativeDev) {
|
|
98270
|
+
printInfo("Installing the OmO Native development adapter...");
|
|
98018
98271
|
try {
|
|
98019
|
-
const
|
|
98020
|
-
printSuccess(`
|
|
98272
|
+
const nativeDevResult = await runNativeDevInstaller();
|
|
98273
|
+
printSuccess(`OmO Native development adapter installed ${SYMBOLS.arrow} ${import_picocolors3.default.dim(nativeDevResult.settingsPath)}`);
|
|
98021
98274
|
} catch (error) {
|
|
98022
98275
|
const message = error instanceof Error ? error.message : String(error);
|
|
98023
|
-
printError(`
|
|
98276
|
+
printError(`OmO Native development adapter install failed: ${message}`);
|
|
98024
98277
|
return 1;
|
|
98025
98278
|
}
|
|
98026
98279
|
console.log();
|
|
@@ -98031,9 +98284,9 @@ async function runCliInstaller(args, version) {
|
|
|
98031
98284
|
printBox(`${import_picocolors3.default.bold("Pro Tip:")} Include ${import_picocolors3.default.cyan("ultrawork")} (or ${import_picocolors3.default.cyan("ulw")}) in your prompt.
|
|
98032
98285
|
` + `All features work like magic-parallel agents, background tasks,
|
|
98033
98286
|
` + `deep exploration, and relentless execution until completion.`, "The Magic Word");
|
|
98034
|
-
if (
|
|
98035
|
-
printInfo(import_picocolors3.default.bold(
|
|
98036
|
-
for (const line of
|
|
98287
|
+
if (shouldShowNativeEditionHint(config)) {
|
|
98288
|
+
printInfo(import_picocolors3.default.bold(NATIVE_EDITION_HINT_TITLE));
|
|
98289
|
+
for (const line of nativeEditionHintLines({ command: import_picocolors3.default.cyan, link: import_picocolors3.default.underline })) {
|
|
98037
98290
|
console.log(` ${line}`);
|
|
98038
98291
|
}
|
|
98039
98292
|
console.log();
|
|
@@ -99173,16 +99426,20 @@ var import_picocolors4 = __toESM(require_picocolors(), 1);
|
|
|
99173
99426
|
// packages/omo-opencode/src/cli/tui-install-prompts.ts
|
|
99174
99427
|
init_model_fallback();
|
|
99175
99428
|
|
|
99176
|
-
// packages/omo-opencode/src/cli/
|
|
99177
|
-
var
|
|
99178
|
-
|
|
99179
|
-
|
|
99180
|
-
|
|
99429
|
+
// packages/omo-opencode/src/cli/native-dev-platform-flag.ts
|
|
99430
|
+
var NATIVE_DEV_PLATFORM_ENV_FLAG = "OMO_ENABLE_NATIVE_DEV_PLATFORM";
|
|
99431
|
+
var LEGACY_NATIVE_DEV_PLATFORM_ENV_FLAG = "OMO_ENABLE_SENPI_PLATFORM";
|
|
99432
|
+
function isTruthy(value) {
|
|
99433
|
+
const normalized = value?.trim().toLowerCase();
|
|
99434
|
+
return normalized === "1" || normalized === "true";
|
|
99435
|
+
}
|
|
99436
|
+
function isNativeDevPlatformEnabled(env = process.env) {
|
|
99437
|
+
return isTruthy(env[NATIVE_DEV_PLATFORM_ENV_FLAG]) || isTruthy(env[LEGACY_NATIVE_DEV_PLATFORM_ENV_FLAG]);
|
|
99181
99438
|
}
|
|
99182
99439
|
function availableInstallPlatforms(env = process.env) {
|
|
99183
|
-
const platforms = ["opencode", "codex", "both"];
|
|
99184
|
-
if (
|
|
99185
|
-
platforms.push("
|
|
99440
|
+
const platforms = ["opencode", "codex", "both", "native"];
|
|
99441
|
+
if (isNativeDevPlatformEnabled(env))
|
|
99442
|
+
platforms.push("native-dev");
|
|
99186
99443
|
return platforms;
|
|
99187
99444
|
}
|
|
99188
99445
|
|
|
@@ -99205,10 +99462,15 @@ async function promptInstallPlatform(initialValue = "opencode") {
|
|
|
99205
99462
|
const options = [
|
|
99206
99463
|
{ value: "opencode", label: "OpenCode", hint: "Install OpenCode plugin only" },
|
|
99207
99464
|
{ value: "codex", label: "Codex", hint: "Install Codex harness adapter only" },
|
|
99208
|
-
{ value: "both", label: "Both", hint: "Install OpenCode plugin and Codex adapter" }
|
|
99465
|
+
{ value: "both", label: "Both", hint: "Install OpenCode plugin and Codex adapter" },
|
|
99466
|
+
{ value: "native", label: "OmO Native", hint: "Install the standalone omo command (no host required)" }
|
|
99209
99467
|
];
|
|
99210
|
-
if (
|
|
99211
|
-
options.push({
|
|
99468
|
+
if (isNativeDevPlatformEnabled()) {
|
|
99469
|
+
options.push({
|
|
99470
|
+
value: "native-dev",
|
|
99471
|
+
label: "OmO Native (development adapter)",
|
|
99472
|
+
hint: "Register this checkout into a local engine install"
|
|
99473
|
+
});
|
|
99212
99474
|
}
|
|
99213
99475
|
return selectOrCancel({
|
|
99214
99476
|
message: "Which platform do you want to install?",
|
|
@@ -99219,7 +99481,8 @@ async function promptInstallPlatform(initialValue = "opencode") {
|
|
|
99219
99481
|
async function promptInstallConfig(detected, platform, codexAutonomousOverride) {
|
|
99220
99482
|
const hasOpenCode = platform === "opencode" || platform === "both";
|
|
99221
99483
|
const hasCodex = platform === "codex" || platform === "both";
|
|
99222
|
-
const
|
|
99484
|
+
const hasNative = platform === "native";
|
|
99485
|
+
const hasNativeDev = platform === "native-dev";
|
|
99223
99486
|
const codexAutonomous = await resolveCodexAutonomous(hasCodex, codexAutonomousOverride);
|
|
99224
99487
|
if (codexAutonomous === null)
|
|
99225
99488
|
return null;
|
|
@@ -99233,7 +99496,8 @@ async function promptInstallConfig(detected, platform, codexAutonomousOverride)
|
|
|
99233
99496
|
hasGemini: false,
|
|
99234
99497
|
hasCopilot: false,
|
|
99235
99498
|
hasCodex,
|
|
99236
|
-
|
|
99499
|
+
hasNative,
|
|
99500
|
+
hasNativeDev,
|
|
99237
99501
|
hasOpencodeZen: false,
|
|
99238
99502
|
hasZaiCodingPlan: false,
|
|
99239
99503
|
hasKimiForCoding: false,
|
|
@@ -99376,7 +99640,8 @@ async function promptInstallConfig(detected, platform, codexAutonomousOverride)
|
|
|
99376
99640
|
hasGemini: gemini === "yes",
|
|
99377
99641
|
hasCopilot: copilot === "yes",
|
|
99378
99642
|
hasCodex,
|
|
99379
|
-
|
|
99643
|
+
hasNative,
|
|
99644
|
+
hasNativeDev,
|
|
99380
99645
|
hasOpencodeZen: opencodeZen === "yes",
|
|
99381
99646
|
hasZaiCodingPlan: zaiCodingPlan === "yes",
|
|
99382
99647
|
hasKimiForCoding: kimiForCoding === "yes",
|
|
@@ -99507,15 +99772,29 @@ async function runTuiInstaller(args, version) {
|
|
|
99507
99772
|
log4.info("The Codex harness is NOT installed. Fix the error above, then re-run: bunx oh-my-openagent install --platform=codex");
|
|
99508
99773
|
}
|
|
99509
99774
|
}
|
|
99510
|
-
if (config.
|
|
99511
|
-
spinner2.start("Installing
|
|
99775
|
+
if (config.hasNative) {
|
|
99776
|
+
spinner2.start("Installing OmO Native");
|
|
99777
|
+
const outcome = await runNativeInstall();
|
|
99778
|
+
if (outcome.failure) {
|
|
99779
|
+
spinner2.stop(`OmO Native install failed ${import_picocolors4.default.yellow("[!]")}`);
|
|
99780
|
+
for (const line of nativeInstallFailureLines(outcome.failure))
|
|
99781
|
+
log4.error(line);
|
|
99782
|
+
outro(import_picocolors4.default.red("Installation failed."));
|
|
99783
|
+
return 1;
|
|
99784
|
+
}
|
|
99785
|
+
spinner2.stop(nativeInstallSuccessLine());
|
|
99786
|
+
for (const note of outcome.notes)
|
|
99787
|
+
log4.info(note);
|
|
99788
|
+
}
|
|
99789
|
+
if (config.hasNativeDev) {
|
|
99790
|
+
spinner2.start("Installing the OmO Native development adapter");
|
|
99512
99791
|
try {
|
|
99513
|
-
const
|
|
99514
|
-
spinner2.stop(`
|
|
99792
|
+
const nativeDevResult = await runNativeDevInstaller();
|
|
99793
|
+
spinner2.stop(`OmO Native development adapter installed to ${import_picocolors4.default.cyan(nativeDevResult.settingsPath)}`);
|
|
99515
99794
|
} catch (error) {
|
|
99516
99795
|
const message = error instanceof Error ? error.message : String(error);
|
|
99517
|
-
spinner2.stop(`
|
|
99518
|
-
log4.error(`
|
|
99796
|
+
spinner2.stop(`OmO Native development adapter install failed ${import_picocolors4.default.yellow("[!]")}`);
|
|
99797
|
+
log4.error(`OmO Native development adapter install failed: ${message}`);
|
|
99519
99798
|
outro(import_picocolors4.default.red("Installation failed."));
|
|
99520
99799
|
return 1;
|
|
99521
99800
|
}
|
|
@@ -99529,9 +99808,9 @@ async function runTuiInstaller(args, version) {
|
|
|
99529
99808
|
note(`Include ${import_picocolors4.default.cyan("ultrawork")} (or ${import_picocolors4.default.cyan("ulw")}) in your prompt.
|
|
99530
99809
|
` + `All features work like magic-parallel agents, background tasks,
|
|
99531
99810
|
` + `deep exploration, and relentless execution until completion.`, "The Magic Word");
|
|
99532
|
-
if (
|
|
99533
|
-
log4.info(import_picocolors4.default.bold(
|
|
99534
|
-
log4.message(
|
|
99811
|
+
if (shouldShowNativeEditionHint(config)) {
|
|
99812
|
+
log4.info(import_picocolors4.default.bold(NATIVE_EDITION_HINT_TITLE));
|
|
99813
|
+
log4.message(nativeEditionHintLines({ command: import_picocolors4.default.cyan, link: import_picocolors4.default.underline }).join(`
|
|
99535
99814
|
`));
|
|
99536
99815
|
}
|
|
99537
99816
|
const shouldStar = await confirm({
|
|
@@ -99572,7 +99851,7 @@ async function runTuiInstaller(args, version) {
|
|
|
99572
99851
|
|
|
99573
99852
|
// packages/omo-opencode/src/cli/install.ts
|
|
99574
99853
|
var VERSION = package_default.version;
|
|
99575
|
-
async function
|
|
99854
|
+
async function install2(args) {
|
|
99576
99855
|
return args.tui ? runTuiInstaller(args, VERSION) : runCliInstaller(args, VERSION);
|
|
99577
99856
|
}
|
|
99578
99857
|
// packages/omo-opencode/src/cli/cleanup.ts
|
|
@@ -101073,7 +101352,8 @@ var HookNameSchema = _enum([
|
|
|
101073
101352
|
"webfetch-redirect-guard",
|
|
101074
101353
|
"fsync-skip-warning",
|
|
101075
101354
|
"plan-format-validator",
|
|
101076
|
-
"legacy-plugin-toast"
|
|
101355
|
+
"legacy-plugin-toast",
|
|
101356
|
+
"native-edition-nudge"
|
|
101077
101357
|
]);
|
|
101078
101358
|
// packages/omo-opencode/src/config/schema/i18n.ts
|
|
101079
101359
|
init_zod();
|
|
@@ -103176,14 +103456,14 @@ var NO_OP_POSTHOG2 = {
|
|
|
103176
103456
|
function isFalsy(value) {
|
|
103177
103457
|
return value === "0" || value === "false" || value === "no";
|
|
103178
103458
|
}
|
|
103179
|
-
function
|
|
103459
|
+
function isTruthy2(value) {
|
|
103180
103460
|
return value === "1" || value === "true" || value === "yes";
|
|
103181
103461
|
}
|
|
103182
103462
|
function shouldDisablePostHog(env, configEnabled) {
|
|
103183
103463
|
if (configEnabled === false) {
|
|
103184
103464
|
return true;
|
|
103185
103465
|
}
|
|
103186
|
-
if (
|
|
103466
|
+
if (isTruthy2(env.OMO_DISABLE_POSTHOG?.trim().toLowerCase())) {
|
|
103187
103467
|
return true;
|
|
103188
103468
|
}
|
|
103189
103469
|
return isFalsy(env.OMO_SEND_ANONYMOUS_TELEMETRY?.trim().toLowerCase());
|
|
@@ -104706,14 +104986,14 @@ var CANONICAL_REPLACEMENT = new Map([
|
|
|
104706
104986
|
var MIGRATE_SUFFIX = ", or run: oh-my-openagent config migrate";
|
|
104707
104987
|
var TUNING_CONTAINERS = new Set(["agents", "categories", "models"]);
|
|
104708
104988
|
var PASSTHROUGH_CONTAINERS = new Set(["provider_options", "providerOptions"]);
|
|
104709
|
-
function
|
|
104989
|
+
function isRecord16(value) {
|
|
104710
104990
|
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
104711
104991
|
}
|
|
104712
104992
|
function isHarnessBlock(key) {
|
|
104713
104993
|
return key.startsWith("[") && key.endsWith("]");
|
|
104714
104994
|
}
|
|
104715
104995
|
function collectIssues(configPath, value, prefix, fixSuffix) {
|
|
104716
|
-
if (!
|
|
104996
|
+
if (!isRecord16(value))
|
|
104717
104997
|
return [];
|
|
104718
104998
|
const issues = [];
|
|
104719
104999
|
for (const [key, child] of Object.entries(value)) {
|
|
@@ -104729,7 +105009,7 @@ function collectIssues(configPath, value, prefix, fixSuffix) {
|
|
|
104729
105009
|
});
|
|
104730
105010
|
continue;
|
|
104731
105011
|
}
|
|
104732
|
-
if (!
|
|
105012
|
+
if (!isRecord16(child))
|
|
104733
105013
|
continue;
|
|
104734
105014
|
if (PASSTHROUGH_CONTAINERS.has(key))
|
|
104735
105015
|
continue;
|
|
@@ -104748,7 +105028,7 @@ function collectIssues(configPath, value, prefix, fixSuffix) {
|
|
|
104748
105028
|
return issues;
|
|
104749
105029
|
}
|
|
104750
105030
|
function migrateFixSuffix(parsed) {
|
|
104751
|
-
if (
|
|
105031
|
+
if (isRecord16(parsed) && hasMigrationMarker(parsed, REASONING_UNIFICATION_MIGRATION_ID))
|
|
104752
105032
|
return "";
|
|
104753
105033
|
return MIGRATE_SUFFIX;
|
|
104754
105034
|
}
|
|
@@ -105986,12 +106266,12 @@ async function auditBundleTargets(pluginRoot) {
|
|
|
105986
106266
|
let referencedCount = 0;
|
|
105987
106267
|
for (const manifestPath of await findManifestPaths(pluginRoot, ".mcp.json")) {
|
|
105988
106268
|
const manifest = await readJson2(manifestPath);
|
|
105989
|
-
if (manifest === null || !
|
|
106269
|
+
if (manifest === null || !isRecord17(manifest["mcpServers"]))
|
|
105990
106270
|
continue;
|
|
105991
106271
|
const manifestRoot = dirname33(manifestPath);
|
|
105992
106272
|
const isRootManifest = resolve24(manifestRoot) === resolve24(pluginRoot);
|
|
105993
106273
|
for (const server of Object.values(manifest["mcpServers"])) {
|
|
105994
|
-
if (!
|
|
106274
|
+
if (!isRecord17(server) || !Array.isArray(server["args"]))
|
|
105995
106275
|
continue;
|
|
105996
106276
|
for (const arg of server["args"]) {
|
|
105997
106277
|
if (typeof arg !== "string" || !isPluginRuntimePathArg(arg))
|
|
@@ -106077,7 +106357,7 @@ function collectHookCommands(value, commands) {
|
|
|
106077
106357
|
collectHookCommands(item, commands);
|
|
106078
106358
|
return;
|
|
106079
106359
|
}
|
|
106080
|
-
if (!
|
|
106360
|
+
if (!isRecord17(value))
|
|
106081
106361
|
return;
|
|
106082
106362
|
if (value["type"] === "command") {
|
|
106083
106363
|
if (typeof value["command"] === "string")
|
|
@@ -106132,7 +106412,7 @@ function parseDegradedEntries(value) {
|
|
|
106132
106412
|
return [];
|
|
106133
106413
|
const entries = [];
|
|
106134
106414
|
for (const item of value) {
|
|
106135
|
-
if (!
|
|
106415
|
+
if (!isRecord17(item))
|
|
106136
106416
|
continue;
|
|
106137
106417
|
if (typeof item["component"] !== "string" || typeof item["reason"] !== "string")
|
|
106138
106418
|
continue;
|
|
@@ -106166,7 +106446,7 @@ function degradedDetailLines(entries) {
|
|
|
106166
106446
|
async function readJson2(path) {
|
|
106167
106447
|
try {
|
|
106168
106448
|
const parsed = JSON.parse(await readFile29(path, "utf8"));
|
|
106169
|
-
return
|
|
106449
|
+
return isRecord17(parsed) ? parsed : null;
|
|
106170
106450
|
} catch (error) {
|
|
106171
106451
|
if (error instanceof Error)
|
|
106172
106452
|
return null;
|
|
@@ -106187,7 +106467,7 @@ function normalizeRelative(root, target) {
|
|
|
106187
106467
|
function normalizePathSeparators(path) {
|
|
106188
106468
|
return path.split("\\").join("/");
|
|
106189
106469
|
}
|
|
106190
|
-
function
|
|
106470
|
+
function isRecord17(value) {
|
|
106191
106471
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
106192
106472
|
}
|
|
106193
106473
|
|
|
@@ -108297,8 +108577,8 @@ var program2 = new Command;
|
|
|
108297
108577
|
function resolveInstallArgs(options, invocationName = process.env.OMO_INVOCATION_NAME) {
|
|
108298
108578
|
const defaultPlatform = process.env.OMO_EDITION === "codex" || invocationName === "lazycodex" || invocationName === "lazycodex-ai" ? "codex" : undefined;
|
|
108299
108579
|
const platform = options.platform ?? defaultPlatform;
|
|
108300
|
-
if (platform === "
|
|
108301
|
-
throw new Error(`The
|
|
108580
|
+
if (platform === "native-dev" && !isNativeDevPlatformEnabled()) {
|
|
108581
|
+
throw new Error(`The native-dev install platform is not available in this release. Set ${NATIVE_DEV_PLATFORM_ENV_FLAG}=1 to enable it from a source checkout.`);
|
|
108302
108582
|
}
|
|
108303
108583
|
return {
|
|
108304
108584
|
tui: options.tui !== false,
|
|
@@ -108343,7 +108623,7 @@ Model Providers (Priority: Native > Copilot > OpenCode Zen > Z.ai > Kimi > Baili
|
|
|
108343
108623
|
`).action(async (options) => {
|
|
108344
108624
|
const rootOptions = program2.opts();
|
|
108345
108625
|
const args = resolveInstallArgs({ ...options, platform: options.platform ?? rootOptions.platform });
|
|
108346
|
-
const exitCode = await
|
|
108626
|
+
const exitCode = await install2(args);
|
|
108347
108627
|
process.exit(exitCode);
|
|
108348
108628
|
});
|
|
108349
108629
|
configureCleanupCommand(program2);
|