oh-my-opencode 5.1.41 → 5.1.42

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/README.de.md +118 -0
  2. package/README.es.md +118 -0
  3. package/README.fr.md +118 -0
  4. package/README.it.md +118 -0
  5. package/README.ja.md +2 -1
  6. package/README.ko.md +2 -1
  7. package/README.md +3 -2
  8. package/README.pt-br.md +118 -0
  9. package/README.ru.md +2 -1
  10. package/README.zh-cn.md +2 -1
  11. package/dist/cli/index.js +92 -27
  12. package/dist/cli/service-auth/index.d.ts +3 -0
  13. package/dist/cli-node/index.js +92 -27
  14. package/dist/index.js +90 -31
  15. package/dist/skills/browser/runtime/omowright/manifest.json +1 -1
  16. package/dist/tui.js +86 -26
  17. package/package.json +14 -14
  18. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  19. package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +68 -9
  20. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  21. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  22. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  23. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  24. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  25. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  26. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  27. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  28. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +2 -2
  29. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  30. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  31. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  32. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  33. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  34. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  35. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  36. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  37. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  38. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  39. package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +1 -1
  40. package/packages/omo-codex/plugin/components/ulw-execute-continuation/package.json +1 -1
  41. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +5 -5
  42. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  43. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  44. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  45. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  46. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  47. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  48. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  49. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  50. package/packages/omo-codex/plugin/hooks/post-tool-use-recording-spawn-admission.json +1 -1
  51. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  52. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  53. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  54. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  55. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  56. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  57. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  58. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +1 -1
  59. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  60. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  61. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  62. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  63. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  64. package/packages/omo-codex/plugin/package-lock.json +12 -12
  65. package/packages/omo-codex/plugin/package.json +1 -1
  66. package/packages/omo-codex/plugin/skills/browser/runtime/omowright/manifest.json +1 -1
  67. package/packages/omo-codex/scripts/install-dist/install-local.mjs +70 -11
  68. package/packages/shared-skills/skills/browser/runtime/omowright/manifest.json +1 -1
@@ -2133,7 +2133,7 @@ var package_default;
2133
2133
  var init_package = __esm(() => {
2134
2134
  package_default = {
2135
2135
  name: "oh-my-opencode",
2136
- version: "5.1.41",
2136
+ version: "5.1.42",
2137
2137
  description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
2138
2138
  main: "./dist/index.js",
2139
2139
  types: "dist/index.d.ts",
@@ -2310,7 +2310,7 @@ var init_package = __esm(() => {
2310
2310
  },
2311
2311
  devDependencies: {
2312
2312
  "@clack/prompts": "^1.8.1",
2313
- "@code-yeongyu/senpi": "2026.10.21-1",
2313
+ "@code-yeongyu/senpi": "2026.10.21-2",
2314
2314
  "@modelcontextprotocol/sdk": "^1.30.0",
2315
2315
  "@oh-my-opencode/agents-md-core": "workspace:*",
2316
2316
  "@oh-my-opencode/ast-grep-mcp": "workspace:*",
@@ -2371,18 +2371,18 @@ var init_package = __esm(() => {
2371
2371
  typescript: "^7.0.2"
2372
2372
  },
2373
2373
  optionalDependencies: {
2374
- "oh-my-opencode-darwin-arm64": "5.1.41",
2375
- "oh-my-opencode-darwin-x64": "5.1.41",
2376
- "oh-my-opencode-darwin-x64-baseline": "5.1.41",
2377
- "oh-my-opencode-linux-arm64": "5.1.41",
2378
- "oh-my-opencode-linux-arm64-musl": "5.1.41",
2379
- "oh-my-opencode-linux-x64": "5.1.41",
2380
- "oh-my-opencode-linux-x64-baseline": "5.1.41",
2381
- "oh-my-opencode-linux-x64-musl": "5.1.41",
2382
- "oh-my-opencode-linux-x64-musl-baseline": "5.1.41",
2383
- "oh-my-opencode-windows-arm64": "5.1.41",
2384
- "oh-my-opencode-windows-x64": "5.1.41",
2385
- "oh-my-opencode-windows-x64-baseline": "5.1.41"
2374
+ "oh-my-opencode-darwin-arm64": "5.1.42",
2375
+ "oh-my-opencode-darwin-x64": "5.1.42",
2376
+ "oh-my-opencode-darwin-x64-baseline": "5.1.42",
2377
+ "oh-my-opencode-linux-arm64": "5.1.42",
2378
+ "oh-my-opencode-linux-arm64-musl": "5.1.42",
2379
+ "oh-my-opencode-linux-x64": "5.1.42",
2380
+ "oh-my-opencode-linux-x64-baseline": "5.1.42",
2381
+ "oh-my-opencode-linux-x64-musl": "5.1.42",
2382
+ "oh-my-opencode-linux-x64-musl-baseline": "5.1.42",
2383
+ "oh-my-opencode-windows-arm64": "5.1.42",
2384
+ "oh-my-opencode-windows-x64": "5.1.42",
2385
+ "oh-my-opencode-windows-x64-baseline": "5.1.42"
2386
2386
  },
2387
2387
  overrides: {
2388
2388
  hono: "^4.13.8",
@@ -76909,7 +76909,7 @@ var init_memory_agreements = __esm(() => {
76909
76909
  });
76910
76910
 
76911
76911
  // packages/omo-config-core/src/schema/memory.ts
76912
- var OmoMemoryReflectionTriggerSchema, OmoMemoryReflectionSchema, OmoMemorySyncSchema, OmoMemorySearchSchema, OmoMemoryRecallEventCapsSchema, OmoMemoryRecallSchema, OmoMemoryNudgeSchema, OmoMemoryFactsSchema, OmoMemoryDreamSchema, OmoMemoryPeopleSchema, OmoMemorySoulSchema, OmoMemoryWriteNoticeSchema, OmoMemoryReflectionTriggerLayerSchema, OmoMemoryReflectionLayerSchema, OmoMemorySyncLayerSchema, OmoMemorySearchLayerSchema, OmoMemoryRecallEventCapsLayerSchema, OmoMemoryRecallLayerSchema, OmoMemoryNudgeLayerSchema, OmoMemoryFactsLayerSchema, OmoMemoryDreamLayerSchema, OmoMemoryPeopleLayerSchema, OmoMemorySoulLayerSchema, OmoMemoryWriteNoticeLayerSchema, OmoMemoryProjectionSchema, OmoMemoryProjectionLayerSchema, OmoMemoryAgentOverridesSchema, OmoMemorySettingsSchema, OmoMemorySettingsLayerSchema;
76912
+ var OmoMemoryReflectionTriggerSchema, OmoMemoryReflectionSchema, OmoMemorySyncSchema, OmoMemorySearchSchema, OmoMemoryRecallEventCapsSchema, OmoMemoryRecallSchema, OmoMemoryNudgeSchema, OmoMemoryFactsSchema, OmoMemoryDreamSchema, OmoMemoryPeopleSchema, OmoMemorySoulSchema, OmoMemoryWriteNoticeSchema, OmoMemoryReflectionTriggerLayerSchema, OmoMemoryReflectionLayerSchema, OmoMemorySyncLayerSchema, OmoMemorySearchLayerSchema, OmoMemoryRecallEventCapsLayerSchema, OmoMemoryRecallLayerSchema, OmoMemoryNudgeLayerSchema, OmoMemoryFactsLayerSchema, OmoMemoryDreamLayerSchema, OmoMemoryPeopleLayerSchema, OmoMemorySoulLayerSchema, OmoMemoryWriteNoticeLayerSchema, OmoMemoryProjectionSchema, OmoMemoryProjectionLayerSchema, OmoMemoryAgentOverridesSchema, OmoMemoryAutoIdentitySchema, OmoMemorySettingsSchema, OmoMemorySettingsLayerSchema;
76913
76913
  var init_memory = __esm(() => {
76914
76914
  init_zod();
76915
76915
  init_memory_agreements();
@@ -77065,9 +77065,11 @@ var init_memory = __esm(() => {
77065
77065
  projection: OmoMemoryProjectionLayerSchema.optional(),
77066
77066
  compile_warn_tokens: number2().int().positive().optional()
77067
77067
  }).strict();
77068
+ OmoMemoryAutoIdentitySchema = _enum(["path", "git"]);
77068
77069
  OmoMemorySettingsSchema = object({
77069
77070
  enabled: boolean2().default(true),
77070
77071
  agent: string2().min(1).default("auto"),
77072
+ auto_identity: OmoMemoryAutoIdentitySchema.default("path"),
77071
77073
  reflection: OmoMemoryReflectionSchema.default({
77072
77074
  enabled: true,
77073
77075
  trigger: { step_count: 25, on_compaction: true },
@@ -77109,6 +77111,7 @@ var init_memory = __esm(() => {
77109
77111
  OmoMemorySettingsLayerSchema = object({
77110
77112
  enabled: boolean2().optional(),
77111
77113
  agent: string2().min(1).optional(),
77114
+ auto_identity: OmoMemoryAutoIdentitySchema.optional(),
77112
77115
  reflection: OmoMemoryReflectionLayerSchema.optional(),
77113
77116
  nudge: OmoMemoryNudgeLayerSchema.optional(),
77114
77117
  facts: OmoMemoryFactsLayerSchema.optional(),
@@ -77158,6 +77161,7 @@ var init_model_profile = __esm(() => {
77158
77161
  init_fallback_models();
77159
77162
  OmoModelProfileInputSchema = object({
77160
77163
  display_name: string2().optional(),
77164
+ caution: string2().optional(),
77161
77165
  family: _enum(["daily", "geeky"]).optional(),
77162
77166
  tier: _enum(["normal", "heavy"]).optional(),
77163
77167
  models: array(union([string2(), OmoFallbackModelObjectSchema])).optional()
@@ -77451,7 +77455,7 @@ var init_gateway = __esm(() => {
77451
77455
  });
77452
77456
 
77453
77457
  // packages/omo-config-core/src/schema/config.ts
77454
- var OmoOpenCodeHarnessConfigSchema, OmoDisabledSkillsSchema, OmoTypedHarnessConfigSchema, OmoConfigProfileSchema, OmoConfigSchema, OmoConfigLayerSchema;
77458
+ var OmoOpenCodeHarnessConfigSchema, OmoDisabledSkillsSchema, OmoExcludedModelsSchema, OmoTypedHarnessConfigSchema, OmoConfigProfileSchema, OmoConfigSchema, OmoConfigLayerSchema;
77455
77459
  var init_config = __esm(() => {
77456
77460
  init_zod();
77457
77461
  init_agent();
@@ -77469,6 +77473,7 @@ var init_config = __esm(() => {
77469
77473
  init_gateway();
77470
77474
  OmoOpenCodeHarnessConfigSchema = record(string2(), unknown());
77471
77475
  OmoDisabledSkillsSchema = array(string2());
77476
+ OmoExcludedModelsSchema = array(string2());
77472
77477
  OmoTypedHarnessConfigSchema = object({
77473
77478
  formatOnMutation: OmoFormatOnMutationLayerSchema.optional(),
77474
77479
  gateway: OmoGatewaySectionSchema.optional(),
@@ -77484,7 +77489,8 @@ var init_config = __esm(() => {
77484
77489
  telemetry: OmoTelemetrySettingsLayerSchema.optional(),
77485
77490
  side_panel: OmoSidePanelSettingsLayerSchema.optional(),
77486
77491
  computer: OmoComputerSettingsLayerSchema.optional(),
77487
- disabled_skills: OmoDisabledSkillsSchema.optional()
77492
+ disabled_skills: OmoDisabledSkillsSchema.optional(),
77493
+ exclude_models: OmoExcludedModelsSchema.optional()
77488
77494
  }).strict();
77489
77495
  OmoConfigProfileSchema = object({
77490
77496
  formatOnMutation: OmoFormatOnMutationLayerSchema.optional(),
@@ -77501,6 +77507,7 @@ var init_config = __esm(() => {
77501
77507
  side_panel: OmoSidePanelSettingsLayerSchema.optional(),
77502
77508
  computer: OmoComputerSettingsLayerSchema.optional(),
77503
77509
  disabled_skills: OmoDisabledSkillsSchema.optional(),
77510
+ exclude_models: OmoExcludedModelsSchema.optional(),
77504
77511
  "[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
77505
77512
  "[native]": OmoTypedHarnessConfigSchema.optional(),
77506
77513
  "[senpi]": OmoTypedHarnessConfigSchema.optional(),
@@ -77523,6 +77530,7 @@ var init_config = __esm(() => {
77523
77530
  side_panel: OmoSidePanelSettingsSchema.optional(),
77524
77531
  computer: OmoComputerSettingsSchema.optional(),
77525
77532
  disabled_skills: OmoDisabledSkillsSchema.optional(),
77533
+ exclude_models: OmoExcludedModelsSchema.optional(),
77526
77534
  "[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
77527
77535
  "[native]": OmoTypedHarnessConfigSchema.optional(),
77528
77536
  "[senpi]": OmoTypedHarnessConfigSchema.optional(),
@@ -77548,6 +77556,7 @@ var init_config = __esm(() => {
77548
77556
  side_panel: OmoSidePanelSettingsLayerSchema.optional(),
77549
77557
  computer: OmoComputerSettingsLayerSchema.optional(),
77550
77558
  disabled_skills: OmoDisabledSkillsSchema.optional(),
77559
+ exclude_models: OmoExcludedModelsSchema.optional(),
77551
77560
  "[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
77552
77561
  "[native]": OmoTypedHarnessConfigSchema.optional(),
77553
77562
  "[senpi]": OmoTypedHarnessConfigSchema.optional(),
@@ -77756,7 +77765,51 @@ var init_diagnostic_lines = __esm(() => {
77756
77765
  });
77757
77766
 
77758
77767
  // packages/omo-config-core/src/loader/disabled-skills.ts
77759
- var init_disabled_skills = () => {};
77768
+ function toRecord(value) {
77769
+ if (value === null || typeof value !== "object" || Array.isArray(value))
77770
+ return;
77771
+ return value;
77772
+ }
77773
+ function namesAt(record, key) {
77774
+ const value = record?.[key];
77775
+ if (!Array.isArray(value))
77776
+ return [];
77777
+ return value.filter((entry) => typeof entry === "string" && entry.trim() !== "");
77778
+ }
77779
+ function harnessBlockKeys(harness) {
77780
+ const canonical = canonicalHarnessName(harness);
77781
+ const legacy = Object.entries(OMO_CONFIG_LEGACY_HARNESS_ALIASES).filter(([, target]) => target === canonical).map(([name]) => harnessBlockKey(name));
77782
+ return [harnessBlockKey(canonical), ...legacy];
77783
+ }
77784
+ function scopesOf(config, harness) {
77785
+ if (harness === undefined)
77786
+ return [config];
77787
+ return [config, ...harnessBlockKeys(harness).map((key) => toRecord(config[key]))];
77788
+ }
77789
+ function collectExcludedModels(options) {
77790
+ return collectUnionedList("exclude_models", options);
77791
+ }
77792
+ function collectUnionedList(key, options) {
77793
+ const names = new Set;
77794
+ for (const layer of options.layers) {
77795
+ const config = toRecord(layer.config);
77796
+ if (config === undefined)
77797
+ continue;
77798
+ const profile = options.profile === undefined ? undefined : toRecord(toRecord(config["profiles"])?.[options.profile]);
77799
+ const scopes = [
77800
+ ...scopesOf(config, options.harness),
77801
+ ...profile === undefined ? [] : scopesOf(profile, options.harness)
77802
+ ];
77803
+ for (const scope of scopes) {
77804
+ for (const name of namesAt(scope, key))
77805
+ names.add(name.trim());
77806
+ }
77807
+ }
77808
+ return [...names];
77809
+ }
77810
+ var init_disabled_skills = __esm(() => {
77811
+ init_schema();
77812
+ });
77760
77813
 
77761
77814
  // packages/omo-config-core/src/loader/merge.ts
77762
77815
  function isUnsafeObjectKey2(key) {
@@ -77992,7 +78045,7 @@ function stripUnrecognizedKeys(record, issues) {
77992
78045
  }
77993
78046
  return { issuePaths, stripped };
77994
78047
  }
77995
- function toRecord(value) {
78048
+ function toRecord2(value) {
77996
78049
  if (value === null || typeof value !== "object" || Array.isArray(value))
77997
78050
  return null;
77998
78051
  const record = {};
@@ -78003,7 +78056,7 @@ function toRecord(value) {
78003
78056
  }
78004
78057
  function validateConfigLayer(path, data) {
78005
78058
  const sanitized = sanitizeUnsafeKeys(data);
78006
- const record = toRecord(sanitized.value);
78059
+ const record = toRecord2(sanitized.value);
78007
78060
  const unsafeIssuePaths = sanitized.issues.flatMap((issue) => issue.keys.map((key) => [...issue.path, key].join(".")));
78008
78061
  const unsafeDiagnostics = unsafeIssuePaths.length === 0 ? [] : [{ kind: "unknown-keys", message: `Ignored unknown keys in ${path}: ${unsafeIssuePaths.join(", ")}`, path, issuePaths: unsafeIssuePaths }];
78009
78062
  const validation = OmoConfigLayerSchema.safeParse(sanitized.value);
@@ -78156,7 +78209,7 @@ function resolveOmoProfileName(options = {}) {
78156
78209
  const env = options.env ?? process.env;
78157
78210
  return profileName(options.profile) ?? profileName(env["OMO_PROFILE"]) ?? profileName(env["OCX_PROFILE"]) ?? profileNameFromOpenCodeConfigDir(env["OPENCODE_CONFIG_DIR"]);
78158
78211
  }
78159
- function toRecord2(value) {
78212
+ function toRecord3(value) {
78160
78213
  if (value === null || typeof value !== "object" || Array.isArray(value))
78161
78214
  return;
78162
78215
  return Object.fromEntries(Object.entries(value));
@@ -78177,13 +78230,13 @@ function harnessLayer(config, harness) {
78177
78230
  const legacyKeys = Object.entries(OMO_CONFIG_LEGACY_HARNESS_ALIASES).filter(([, target]) => target === canonical).map(([legacy]) => harnessBlockKey(legacy));
78178
78231
  let layer = {};
78179
78232
  for (const key of [...legacyKeys, harnessBlockKey(canonical)]) {
78180
- layer = mergeOmoConfigRecords(layer, toRecord2(config[key]) ?? {});
78233
+ layer = mergeOmoConfigRecords(layer, toRecord3(config[key]) ?? {});
78181
78234
  }
78182
78235
  return layer;
78183
78236
  }
78184
78237
  function resolveOmoConfigView(options) {
78185
- const profiles = toRecord2(options.config["profiles"]);
78186
- const profile = options.profile === undefined ? undefined : toRecord2(profiles?.[options.profile]);
78238
+ const profiles = toRecord3(options.config["profiles"]);
78239
+ const profile = options.profile === undefined ? undefined : toRecord3(profiles?.[options.profile]);
78187
78240
  const diagnostics = profile === undefined && options.profile !== undefined ? [{
78188
78241
  kind: "profile",
78189
78242
  message: `Activated omo profile "${options.profile}" does not exist; using the base configuration`,
@@ -78324,9 +78377,15 @@ function loadOmoConfig(options = {}) {
78324
78377
  });
78325
78378
  const finalInput = mergeOmoConfigRecords(DEFAULT_RAW_CONFIG, resolved.config);
78326
78379
  const finalConfig = OmoConfigSchema.safeParse(finalInput);
78380
+ const excludeModels = collectExcludedModels({
78381
+ layers,
78382
+ ...options.harness === undefined ? {} : { harness: options.harness },
78383
+ ...resolved.profile === undefined ? {} : { profile: resolved.profile }
78384
+ });
78385
+ const withExcludedModels = (config) => excludeModels.length === 0 ? config : { ...config, exclude_models: [...excludeModels] };
78327
78386
  if (finalConfig.success) {
78328
78387
  return {
78329
- config: stripResolutionControlKeys(finalConfig.data),
78388
+ config: withExcludedModels(stripResolutionControlKeys(finalConfig.data)),
78330
78389
  diagnostics: [...diagnostics, ...resolved.diagnostics],
78331
78390
  layers,
78332
78391
  ...resolved.profile === undefined ? {} : { profile: resolved.profile },
@@ -78339,7 +78398,7 @@ function loadOmoConfig(options = {}) {
78339
78398
  });
78340
78399
  if (pruned.ok) {
78341
78400
  return {
78342
- config: stripResolutionControlKeys(OmoConfigSchema.parse(pruned.config)),
78401
+ config: withExcludedModels(stripResolutionControlKeys(OmoConfigSchema.parse(pruned.config))),
78343
78402
  diagnostics: [...diagnostics, ...resolved.diagnostics, ...invalidValueDiagnostics(MERGED_OMO_CONFIG_PATH, pruned.dropped)],
78344
78403
  layers,
78345
78404
  ...resolved.profile === undefined ? {} : { profile: resolved.profile },
@@ -78358,6 +78417,7 @@ var DEFAULT_RAW_CONFIG;
78358
78417
  var init_loader2 = __esm(() => {
78359
78418
  init_main();
78360
78419
  init_schema();
78420
+ init_disabled_skills();
78361
78421
  init_layer_validation();
78362
78422
  init_merge();
78363
78423
  init_paths();
@@ -92220,7 +92280,7 @@ var package_default2;
92220
92280
  var init_package2 = __esm(() => {
92221
92281
  package_default2 = {
92222
92282
  name: "@oh-my-opencode/omo-codex",
92223
- version: "5.1.41",
92283
+ version: "5.1.42",
92224
92284
  type: "module",
92225
92285
  private: true,
92226
92286
  description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
@@ -99527,6 +99587,7 @@ var REQUIRED_PLUGIN_ARTIFACTS = [
99527
99587
  join63("extensions", "CaseFolding.txt"),
99528
99588
  join63("extensions", "omo-thread-client.js"),
99529
99589
  join63("extensions", "omo-feedback.js"),
99590
+ join63("extensions", "omo-claim-receipt.js"),
99530
99591
  join63("extensions", "assets.generated.json"),
99531
99592
  join63("extensions", "omo-member.js"),
99532
99593
  join63("extensions", "memory-run-supervisor.mjs"),
@@ -108569,6 +108630,10 @@ var package_default3 = {
108569
108630
  types: "./src/config-migration/index.ts",
108570
108631
  import: "./src/config-migration/index.ts"
108571
108632
  },
108633
+ "./service-auth": {
108634
+ types: "./src/cli/service-auth/index.ts",
108635
+ import: "./src/cli/service-auth/index.ts"
108636
+ },
108572
108637
  "./binary-downloader": {
108573
108638
  types: "./src/shared/binary-downloader.ts",
108574
108639
  import: "./src/shared/binary-downloader.ts"
package/dist/index.js CHANGED
@@ -85148,9 +85148,11 @@ var OmoMemoryAgentOverridesSchema = z9.object({
85148
85148
  projection: OmoMemoryProjectionLayerSchema.optional(),
85149
85149
  compile_warn_tokens: z9.number().int().positive().optional()
85150
85150
  }).strict();
85151
+ var OmoMemoryAutoIdentitySchema = z9.enum(["path", "git"]);
85151
85152
  var OmoMemorySettingsSchema = z9.object({
85152
85153
  enabled: z9.boolean().default(true),
85153
85154
  agent: z9.string().min(1).default("auto"),
85155
+ auto_identity: OmoMemoryAutoIdentitySchema.default("path"),
85154
85156
  reflection: OmoMemoryReflectionSchema.default({
85155
85157
  enabled: true,
85156
85158
  trigger: { step_count: 25, on_compaction: true },
@@ -85192,6 +85194,7 @@ var OmoMemorySettingsSchema = z9.object({
85192
85194
  var OmoMemorySettingsLayerSchema = z9.object({
85193
85195
  enabled: z9.boolean().optional(),
85194
85196
  agent: z9.string().min(1).optional(),
85197
+ auto_identity: OmoMemoryAutoIdentitySchema.optional(),
85195
85198
  reflection: OmoMemoryReflectionLayerSchema.optional(),
85196
85199
  nudge: OmoMemoryNudgeLayerSchema.optional(),
85197
85200
  facts: OmoMemoryFactsLayerSchema.optional(),
@@ -85232,6 +85235,7 @@ function isRecord9(value) {
85232
85235
  }
85233
85236
  var OmoModelProfileInputSchema = z11.object({
85234
85237
  display_name: z11.string().optional(),
85238
+ caution: z11.string().optional(),
85235
85239
  family: z11.enum(["daily", "geeky"]).optional(),
85236
85240
  tier: z11.enum(["normal", "heavy"]).optional(),
85237
85241
  models: z11.array(z11.union([z11.string(), OmoFallbackModelObjectSchema])).optional()
@@ -85509,6 +85513,7 @@ var OmoGatewaySectionSchema = z17.record(z17.string(), z17.unknown()).describe("
85509
85513
  // packages/omo-config-core/src/schema/config.ts
85510
85514
  var OmoOpenCodeHarnessConfigSchema = z18.record(z18.string(), z18.unknown());
85511
85515
  var OmoDisabledSkillsSchema = z18.array(z18.string());
85516
+ var OmoExcludedModelsSchema = z18.array(z18.string());
85512
85517
  var OmoTypedHarnessConfigSchema = z18.object({
85513
85518
  formatOnMutation: OmoFormatOnMutationLayerSchema.optional(),
85514
85519
  gateway: OmoGatewaySectionSchema.optional(),
@@ -85524,7 +85529,8 @@ var OmoTypedHarnessConfigSchema = z18.object({
85524
85529
  telemetry: OmoTelemetrySettingsLayerSchema.optional(),
85525
85530
  side_panel: OmoSidePanelSettingsLayerSchema.optional(),
85526
85531
  computer: OmoComputerSettingsLayerSchema.optional(),
85527
- disabled_skills: OmoDisabledSkillsSchema.optional()
85532
+ disabled_skills: OmoDisabledSkillsSchema.optional(),
85533
+ exclude_models: OmoExcludedModelsSchema.optional()
85528
85534
  }).strict();
85529
85535
  var OmoConfigProfileSchema = z18.object({
85530
85536
  formatOnMutation: OmoFormatOnMutationLayerSchema.optional(),
@@ -85541,6 +85547,7 @@ var OmoConfigProfileSchema = z18.object({
85541
85547
  side_panel: OmoSidePanelSettingsLayerSchema.optional(),
85542
85548
  computer: OmoComputerSettingsLayerSchema.optional(),
85543
85549
  disabled_skills: OmoDisabledSkillsSchema.optional(),
85550
+ exclude_models: OmoExcludedModelsSchema.optional(),
85544
85551
  "[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
85545
85552
  "[native]": OmoTypedHarnessConfigSchema.optional(),
85546
85553
  "[senpi]": OmoTypedHarnessConfigSchema.optional(),
@@ -85563,6 +85570,7 @@ var OmoConfigSchema = z18.object({
85563
85570
  side_panel: OmoSidePanelSettingsSchema.optional(),
85564
85571
  computer: OmoComputerSettingsSchema.optional(),
85565
85572
  disabled_skills: OmoDisabledSkillsSchema.optional(),
85573
+ exclude_models: OmoExcludedModelsSchema.optional(),
85566
85574
  "[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
85567
85575
  "[native]": OmoTypedHarnessConfigSchema.optional(),
85568
85576
  "[senpi]": OmoTypedHarnessConfigSchema.optional(),
@@ -85588,6 +85596,7 @@ var OmoConfigLayerSchema = z18.object({
85588
85596
  side_panel: OmoSidePanelSettingsLayerSchema.optional(),
85589
85597
  computer: OmoComputerSettingsLayerSchema.optional(),
85590
85598
  disabled_skills: OmoDisabledSkillsSchema.optional(),
85599
+ exclude_models: OmoExcludedModelsSchema.optional(),
85591
85600
  "[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
85592
85601
  "[native]": OmoTypedHarnessConfigSchema.optional(),
85593
85602
  "[senpi]": OmoTypedHarnessConfigSchema.optional(),
@@ -85760,6 +85769,50 @@ function omoConfigDiagnosticLines(diagnostics, options = {}) {
85760
85769
  });
85761
85770
  }
85762
85771
 
85772
+ // packages/omo-config-core/src/loader/disabled-skills.ts
85773
+ function toRecord(value) {
85774
+ if (value === null || typeof value !== "object" || Array.isArray(value))
85775
+ return;
85776
+ return value;
85777
+ }
85778
+ function namesAt(record, key) {
85779
+ const value = record?.[key];
85780
+ if (!Array.isArray(value))
85781
+ return [];
85782
+ return value.filter((entry) => typeof entry === "string" && entry.trim() !== "");
85783
+ }
85784
+ function harnessBlockKeys(harness) {
85785
+ const canonical = canonicalHarnessName(harness);
85786
+ const legacy = Object.entries(OMO_CONFIG_LEGACY_HARNESS_ALIASES).filter(([, target]) => target === canonical).map(([name]) => harnessBlockKey(name));
85787
+ return [harnessBlockKey(canonical), ...legacy];
85788
+ }
85789
+ function scopesOf(config, harness) {
85790
+ if (harness === undefined)
85791
+ return [config];
85792
+ return [config, ...harnessBlockKeys(harness).map((key) => toRecord(config[key]))];
85793
+ }
85794
+ function collectExcludedModels(options) {
85795
+ return collectUnionedList("exclude_models", options);
85796
+ }
85797
+ function collectUnionedList(key, options) {
85798
+ const names = new Set;
85799
+ for (const layer of options.layers) {
85800
+ const config = toRecord(layer.config);
85801
+ if (config === undefined)
85802
+ continue;
85803
+ const profile = options.profile === undefined ? undefined : toRecord(toRecord(config["profiles"])?.[options.profile]);
85804
+ const scopes = [
85805
+ ...scopesOf(config, options.harness),
85806
+ ...profile === undefined ? [] : scopesOf(profile, options.harness)
85807
+ ];
85808
+ for (const scope of scopes) {
85809
+ for (const name of namesAt(scope, key))
85810
+ names.add(name.trim());
85811
+ }
85812
+ }
85813
+ return [...names];
85814
+ }
85815
+
85763
85816
  // packages/omo-config-core/src/loader/loader.ts
85764
85817
  init_main();
85765
85818
 
@@ -85994,7 +86047,7 @@ function stripUnrecognizedKeys(record, issues) {
85994
86047
  }
85995
86048
  return { issuePaths, stripped };
85996
86049
  }
85997
- function toRecord(value) {
86050
+ function toRecord2(value) {
85998
86051
  if (value === null || typeof value !== "object" || Array.isArray(value))
85999
86052
  return null;
86000
86053
  const record = {};
@@ -86009,7 +86062,7 @@ var validateLayerRecord = (record) => {
86009
86062
  };
86010
86063
  function validateConfigLayer(path, data) {
86011
86064
  const sanitized = sanitizeUnsafeKeys(data);
86012
- const record = toRecord(sanitized.value);
86065
+ const record = toRecord2(sanitized.value);
86013
86066
  const unsafeIssuePaths = sanitized.issues.flatMap((issue) => issue.keys.map((key) => [...issue.path, key].join(".")));
86014
86067
  const unsafeDiagnostics = unsafeIssuePaths.length === 0 ? [] : [{ kind: "unknown-keys", message: `Ignored unknown keys in ${path}: ${unsafeIssuePaths.join(", ")}`, path, issuePaths: unsafeIssuePaths }];
86015
86068
  const validation = OmoConfigLayerSchema.safeParse(sanitized.value);
@@ -86152,7 +86205,7 @@ function resolveOmoProfileName(options = {}) {
86152
86205
  const env = options.env ?? process.env;
86153
86206
  return profileName(options.profile) ?? profileName(env["OMO_PROFILE"]) ?? profileName(env["OCX_PROFILE"]) ?? profileNameFromOpenCodeConfigDir(env["OPENCODE_CONFIG_DIR"]);
86154
86207
  }
86155
- function toRecord2(value) {
86208
+ function toRecord3(value) {
86156
86209
  if (value === null || typeof value !== "object" || Array.isArray(value))
86157
86210
  return;
86158
86211
  return Object.fromEntries(Object.entries(value));
@@ -86173,13 +86226,13 @@ function harnessLayer(config, harness) {
86173
86226
  const legacyKeys = Object.entries(OMO_CONFIG_LEGACY_HARNESS_ALIASES).filter(([, target]) => target === canonical).map(([legacy]) => harnessBlockKey(legacy));
86174
86227
  let layer = {};
86175
86228
  for (const key of [...legacyKeys, harnessBlockKey(canonical)]) {
86176
- layer = mergeOmoConfigRecords(layer, toRecord2(config[key]) ?? {});
86229
+ layer = mergeOmoConfigRecords(layer, toRecord3(config[key]) ?? {});
86177
86230
  }
86178
86231
  return layer;
86179
86232
  }
86180
86233
  function resolveOmoConfigView(options) {
86181
- const profiles = toRecord2(options.config["profiles"]);
86182
- const profile = options.profile === undefined ? undefined : toRecord2(profiles?.[options.profile]);
86234
+ const profiles = toRecord3(options.config["profiles"]);
86235
+ const profile = options.profile === undefined ? undefined : toRecord3(profiles?.[options.profile]);
86183
86236
  const diagnostics = profile === undefined && options.profile !== undefined ? [{
86184
86237
  kind: "profile",
86185
86238
  message: `Activated omo profile "${options.profile}" does not exist; using the base configuration`,
@@ -86320,9 +86373,15 @@ function loadOmoConfig(options = {}) {
86320
86373
  });
86321
86374
  const finalInput = mergeOmoConfigRecords(DEFAULT_RAW_CONFIG, resolved.config);
86322
86375
  const finalConfig = OmoConfigSchema.safeParse(finalInput);
86376
+ const excludeModels = collectExcludedModels({
86377
+ layers,
86378
+ ...options.harness === undefined ? {} : { harness: options.harness },
86379
+ ...resolved.profile === undefined ? {} : { profile: resolved.profile }
86380
+ });
86381
+ const withExcludedModels = (config) => excludeModels.length === 0 ? config : { ...config, exclude_models: [...excludeModels] };
86323
86382
  if (finalConfig.success) {
86324
86383
  return {
86325
- config: stripResolutionControlKeys(finalConfig.data),
86384
+ config: withExcludedModels(stripResolutionControlKeys(finalConfig.data)),
86326
86385
  diagnostics: [...diagnostics, ...resolved.diagnostics],
86327
86386
  layers,
86328
86387
  ...resolved.profile === undefined ? {} : { profile: resolved.profile },
@@ -86335,7 +86394,7 @@ function loadOmoConfig(options = {}) {
86335
86394
  });
86336
86395
  if (pruned.ok) {
86337
86396
  return {
86338
- config: stripResolutionControlKeys(OmoConfigSchema.parse(pruned.config)),
86397
+ config: withExcludedModels(stripResolutionControlKeys(OmoConfigSchema.parse(pruned.config))),
86339
86398
  diagnostics: [...diagnostics, ...resolved.diagnostics, ...invalidValueDiagnostics(MERGED_OMO_CONFIG_PATH, pruned.dropped)],
86340
86399
  layers,
86341
86400
  ...resolved.profile === undefined ? {} : { profile: resolved.profile },
@@ -87822,7 +87881,7 @@ init_src();
87822
87881
  // package.json
87823
87882
  var package_default = {
87824
87883
  name: "oh-my-opencode",
87825
- version: "5.1.41",
87884
+ version: "5.1.42",
87826
87885
  description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
87827
87886
  main: "./dist/index.js",
87828
87887
  types: "dist/index.d.ts",
@@ -87999,7 +88058,7 @@ var package_default = {
87999
88058
  },
88000
88059
  devDependencies: {
88001
88060
  "@clack/prompts": "^1.8.1",
88002
- "@code-yeongyu/senpi": "2026.10.21-1",
88061
+ "@code-yeongyu/senpi": "2026.10.21-2",
88003
88062
  "@modelcontextprotocol/sdk": "^1.30.0",
88004
88063
  "@oh-my-opencode/agents-md-core": "workspace:*",
88005
88064
  "@oh-my-opencode/ast-grep-mcp": "workspace:*",
@@ -88060,18 +88119,18 @@ var package_default = {
88060
88119
  typescript: "^7.0.2"
88061
88120
  },
88062
88121
  optionalDependencies: {
88063
- "oh-my-opencode-darwin-arm64": "5.1.41",
88064
- "oh-my-opencode-darwin-x64": "5.1.41",
88065
- "oh-my-opencode-darwin-x64-baseline": "5.1.41",
88066
- "oh-my-opencode-linux-arm64": "5.1.41",
88067
- "oh-my-opencode-linux-arm64-musl": "5.1.41",
88068
- "oh-my-opencode-linux-x64": "5.1.41",
88069
- "oh-my-opencode-linux-x64-baseline": "5.1.41",
88070
- "oh-my-opencode-linux-x64-musl": "5.1.41",
88071
- "oh-my-opencode-linux-x64-musl-baseline": "5.1.41",
88072
- "oh-my-opencode-windows-arm64": "5.1.41",
88073
- "oh-my-opencode-windows-x64": "5.1.41",
88074
- "oh-my-opencode-windows-x64-baseline": "5.1.41"
88122
+ "oh-my-opencode-darwin-arm64": "5.1.42",
88123
+ "oh-my-opencode-darwin-x64": "5.1.42",
88124
+ "oh-my-opencode-darwin-x64-baseline": "5.1.42",
88125
+ "oh-my-opencode-linux-arm64": "5.1.42",
88126
+ "oh-my-opencode-linux-arm64-musl": "5.1.42",
88127
+ "oh-my-opencode-linux-x64": "5.1.42",
88128
+ "oh-my-opencode-linux-x64-baseline": "5.1.42",
88129
+ "oh-my-opencode-linux-x64-musl": "5.1.42",
88130
+ "oh-my-opencode-linux-x64-musl-baseline": "5.1.42",
88131
+ "oh-my-opencode-windows-arm64": "5.1.42",
88132
+ "oh-my-opencode-windows-x64": "5.1.42",
88133
+ "oh-my-opencode-windows-x64-baseline": "5.1.42"
88075
88134
  },
88076
88135
  overrides: {
88077
88136
  hono: "^4.13.8",
@@ -107856,11 +107915,11 @@ init_logger2();
107856
107915
  init_src();
107857
107916
  var TERMINAL_TOOL_STATUSES = new Set(["completed", "error"]);
107858
107917
  var UNKNOWN_TOOL_STATUS = "unknown";
107859
- function toRecord3(value) {
107918
+ function toRecord4(value) {
107860
107919
  return isRecord(value) ? value : null;
107861
107920
  }
107862
107921
  function getToolCallID(part) {
107863
- const record = toRecord3(part);
107922
+ const record = toRecord4(part);
107864
107923
  if (!record || record["type"] !== "tool") {
107865
107924
  return null;
107866
107925
  }
@@ -107868,7 +107927,7 @@ function getToolCallID(part) {
107868
107927
  return typeof callID === "string" && callID.length > 0 ? callID : null;
107869
107928
  }
107870
107929
  function getToolStatus(part) {
107871
- const state = toRecord3(toRecord3(part)?.["state"]);
107930
+ const state = toRecord4(toRecord4(part)?.["state"]);
107872
107931
  if (!state) {
107873
107932
  return UNKNOWN_TOOL_STATUS;
107874
107933
  }
@@ -107899,24 +107958,24 @@ function findUnpairedToolParts(parts) {
107899
107958
  // packages/omo-opencode/src/hooks/tool-pair-validator/tool-result-repair.ts
107900
107959
  var INTERRUPTED_TOOL_ERROR = "[Tool execution was interrupted before it produced output]";
107901
107960
  function getMessageID(message) {
107902
- const messageID = toRecord3(message)?.["id"];
107961
+ const messageID = toRecord4(message)?.["id"];
107903
107962
  return typeof messageID === "string" ? messageID : undefined;
107904
107963
  }
107905
107964
  function getMessageSessionID(message) {
107906
- const sessionID = toRecord3(message)?.["sessionID"];
107965
+ const sessionID = toRecord4(message)?.["sessionID"];
107907
107966
  return typeof sessionID === "string" ? sessionID : undefined;
107908
107967
  }
107909
107968
  function readStartTime(state) {
107910
- const time = toRecord3(state["time"]);
107969
+ const time = toRecord4(state["time"]);
107911
107970
  const start = time?.["start"];
107912
107971
  return typeof start === "number" ? start : Date.now();
107913
107972
  }
107914
107973
  function settleToolPart(part) {
107915
- const state = toRecord3(toRecord3(part)?.["state"]);
107974
+ const state = toRecord4(toRecord4(part)?.["state"]);
107916
107975
  if (!state) {
107917
107976
  return false;
107918
107977
  }
107919
- const input = toRecord3(state["input"]);
107978
+ const input = toRecord4(state["input"]);
107920
107979
  const start = readStartTime(state);
107921
107980
  state["status"] = "error";
107922
107981
  state["error"] = INTERRUPTED_TOOL_ERROR;
@@ -5,5 +5,5 @@
5
5
  "index.js": "d67d3a847fe0bbc43e824feded48b280890d31879538309e671cd5f671133995",
6
6
  "page-bundle.js": "bfd51e8383cf47200d57387bbbed258bce5a3a3d00c38fc108034d2888e23f0c"
7
7
  },
8
- "stagedAtUtc": "2026-10-22T12:32:19.069Z"
8
+ "stagedAtUtc": "2026-10-22T17:50:39.758Z"
9
9
  }