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
package/dist/tui.js CHANGED
@@ -70124,7 +70124,7 @@ var init_memory_agreements = __esm(() => {
70124
70124
  });
70125
70125
 
70126
70126
  // packages/omo-config-core/src/schema/memory.ts
70127
- 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;
70127
+ 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;
70128
70128
  var init_memory = __esm(() => {
70129
70129
  init_zod();
70130
70130
  init_memory_agreements();
@@ -70280,9 +70280,11 @@ var init_memory = __esm(() => {
70280
70280
  projection: OmoMemoryProjectionLayerSchema.optional(),
70281
70281
  compile_warn_tokens: number2().int().positive().optional()
70282
70282
  }).strict();
70283
+ OmoMemoryAutoIdentitySchema = _enum(["path", "git"]);
70283
70284
  OmoMemorySettingsSchema = object({
70284
70285
  enabled: boolean2().default(true),
70285
70286
  agent: string2().min(1).default("auto"),
70287
+ auto_identity: OmoMemoryAutoIdentitySchema.default("path"),
70286
70288
  reflection: OmoMemoryReflectionSchema.default({
70287
70289
  enabled: true,
70288
70290
  trigger: { step_count: 25, on_compaction: true },
@@ -70324,6 +70326,7 @@ var init_memory = __esm(() => {
70324
70326
  OmoMemorySettingsLayerSchema = object({
70325
70327
  enabled: boolean2().optional(),
70326
70328
  agent: string2().min(1).optional(),
70329
+ auto_identity: OmoMemoryAutoIdentitySchema.optional(),
70327
70330
  reflection: OmoMemoryReflectionLayerSchema.optional(),
70328
70331
  nudge: OmoMemoryNudgeLayerSchema.optional(),
70329
70332
  facts: OmoMemoryFactsLayerSchema.optional(),
@@ -70373,6 +70376,7 @@ var init_model_profile = __esm(() => {
70373
70376
  init_fallback_models();
70374
70377
  OmoModelProfileInputSchema = object({
70375
70378
  display_name: string2().optional(),
70379
+ caution: string2().optional(),
70376
70380
  family: _enum(["daily", "geeky"]).optional(),
70377
70381
  tier: _enum(["normal", "heavy"]).optional(),
70378
70382
  models: array(union([string2(), OmoFallbackModelObjectSchema])).optional()
@@ -70666,7 +70670,7 @@ var init_gateway = __esm(() => {
70666
70670
  });
70667
70671
 
70668
70672
  // packages/omo-config-core/src/schema/config.ts
70669
- var OmoOpenCodeHarnessConfigSchema, OmoDisabledSkillsSchema, OmoTypedHarnessConfigSchema, OmoConfigProfileSchema, OmoConfigSchema, OmoConfigLayerSchema;
70673
+ var OmoOpenCodeHarnessConfigSchema, OmoDisabledSkillsSchema, OmoExcludedModelsSchema, OmoTypedHarnessConfigSchema, OmoConfigProfileSchema, OmoConfigSchema, OmoConfigLayerSchema;
70670
70674
  var init_config = __esm(() => {
70671
70675
  init_zod();
70672
70676
  init_agent();
@@ -70684,6 +70688,7 @@ var init_config = __esm(() => {
70684
70688
  init_gateway();
70685
70689
  OmoOpenCodeHarnessConfigSchema = record(string2(), unknown());
70686
70690
  OmoDisabledSkillsSchema = array(string2());
70691
+ OmoExcludedModelsSchema = array(string2());
70687
70692
  OmoTypedHarnessConfigSchema = object({
70688
70693
  formatOnMutation: OmoFormatOnMutationLayerSchema.optional(),
70689
70694
  gateway: OmoGatewaySectionSchema.optional(),
@@ -70699,7 +70704,8 @@ var init_config = __esm(() => {
70699
70704
  telemetry: OmoTelemetrySettingsLayerSchema.optional(),
70700
70705
  side_panel: OmoSidePanelSettingsLayerSchema.optional(),
70701
70706
  computer: OmoComputerSettingsLayerSchema.optional(),
70702
- disabled_skills: OmoDisabledSkillsSchema.optional()
70707
+ disabled_skills: OmoDisabledSkillsSchema.optional(),
70708
+ exclude_models: OmoExcludedModelsSchema.optional()
70703
70709
  }).strict();
70704
70710
  OmoConfigProfileSchema = object({
70705
70711
  formatOnMutation: OmoFormatOnMutationLayerSchema.optional(),
@@ -70716,6 +70722,7 @@ var init_config = __esm(() => {
70716
70722
  side_panel: OmoSidePanelSettingsLayerSchema.optional(),
70717
70723
  computer: OmoComputerSettingsLayerSchema.optional(),
70718
70724
  disabled_skills: OmoDisabledSkillsSchema.optional(),
70725
+ exclude_models: OmoExcludedModelsSchema.optional(),
70719
70726
  "[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
70720
70727
  "[native]": OmoTypedHarnessConfigSchema.optional(),
70721
70728
  "[senpi]": OmoTypedHarnessConfigSchema.optional(),
@@ -70738,6 +70745,7 @@ var init_config = __esm(() => {
70738
70745
  side_panel: OmoSidePanelSettingsSchema.optional(),
70739
70746
  computer: OmoComputerSettingsSchema.optional(),
70740
70747
  disabled_skills: OmoDisabledSkillsSchema.optional(),
70748
+ exclude_models: OmoExcludedModelsSchema.optional(),
70741
70749
  "[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
70742
70750
  "[native]": OmoTypedHarnessConfigSchema.optional(),
70743
70751
  "[senpi]": OmoTypedHarnessConfigSchema.optional(),
@@ -70763,6 +70771,7 @@ var init_config = __esm(() => {
70763
70771
  side_panel: OmoSidePanelSettingsLayerSchema.optional(),
70764
70772
  computer: OmoComputerSettingsLayerSchema.optional(),
70765
70773
  disabled_skills: OmoDisabledSkillsSchema.optional(),
70774
+ exclude_models: OmoExcludedModelsSchema.optional(),
70766
70775
  "[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
70767
70776
  "[native]": OmoTypedHarnessConfigSchema.optional(),
70768
70777
  "[senpi]": OmoTypedHarnessConfigSchema.optional(),
@@ -70965,7 +70974,51 @@ var init_diagnostic_lines = __esm(() => {
70965
70974
  });
70966
70975
 
70967
70976
  // packages/omo-config-core/src/loader/disabled-skills.ts
70968
- var init_disabled_skills = () => {};
70977
+ function toRecord(value) {
70978
+ if (value === null || typeof value !== "object" || Array.isArray(value))
70979
+ return;
70980
+ return value;
70981
+ }
70982
+ function namesAt(record, key) {
70983
+ const value = record?.[key];
70984
+ if (!Array.isArray(value))
70985
+ return [];
70986
+ return value.filter((entry) => typeof entry === "string" && entry.trim() !== "");
70987
+ }
70988
+ function harnessBlockKeys(harness) {
70989
+ const canonical = canonicalHarnessName(harness);
70990
+ const legacy = Object.entries(OMO_CONFIG_LEGACY_HARNESS_ALIASES).filter(([, target]) => target === canonical).map(([name]) => harnessBlockKey(name));
70991
+ return [harnessBlockKey(canonical), ...legacy];
70992
+ }
70993
+ function scopesOf(config, harness) {
70994
+ if (harness === undefined)
70995
+ return [config];
70996
+ return [config, ...harnessBlockKeys(harness).map((key) => toRecord(config[key]))];
70997
+ }
70998
+ function collectExcludedModels(options) {
70999
+ return collectUnionedList("exclude_models", options);
71000
+ }
71001
+ function collectUnionedList(key, options) {
71002
+ const names = new Set;
71003
+ for (const layer of options.layers) {
71004
+ const config = toRecord(layer.config);
71005
+ if (config === undefined)
71006
+ continue;
71007
+ const profile = options.profile === undefined ? undefined : toRecord(toRecord(config["profiles"])?.[options.profile]);
71008
+ const scopes = [
71009
+ ...scopesOf(config, options.harness),
71010
+ ...profile === undefined ? [] : scopesOf(profile, options.harness)
71011
+ ];
71012
+ for (const scope of scopes) {
71013
+ for (const name of namesAt(scope, key))
71014
+ names.add(name.trim());
71015
+ }
71016
+ }
71017
+ return [...names];
71018
+ }
71019
+ var init_disabled_skills = __esm(() => {
71020
+ init_schema();
71021
+ });
70969
71022
 
70970
71023
  // packages/omo-config-core/src/loader/merge.ts
70971
71024
  function isUnsafeObjectKey2(key) {
@@ -71201,7 +71254,7 @@ function stripUnrecognizedKeys(record, issues) {
71201
71254
  }
71202
71255
  return { issuePaths, stripped };
71203
71256
  }
71204
- function toRecord(value) {
71257
+ function toRecord2(value) {
71205
71258
  if (value === null || typeof value !== "object" || Array.isArray(value))
71206
71259
  return null;
71207
71260
  const record = {};
@@ -71212,7 +71265,7 @@ function toRecord(value) {
71212
71265
  }
71213
71266
  function validateConfigLayer(path, data) {
71214
71267
  const sanitized = sanitizeUnsafeKeys(data);
71215
- const record = toRecord(sanitized.value);
71268
+ const record = toRecord2(sanitized.value);
71216
71269
  const unsafeIssuePaths = sanitized.issues.flatMap((issue) => issue.keys.map((key) => [...issue.path, key].join(".")));
71217
71270
  const unsafeDiagnostics = unsafeIssuePaths.length === 0 ? [] : [{ kind: "unknown-keys", message: `Ignored unknown keys in ${path}: ${unsafeIssuePaths.join(", ")}`, path, issuePaths: unsafeIssuePaths }];
71218
71271
  const validation = OmoConfigLayerSchema.safeParse(sanitized.value);
@@ -71362,7 +71415,7 @@ function resolveOmoProfileName(options = {}) {
71362
71415
  const env = options.env ?? process.env;
71363
71416
  return profileName(options.profile) ?? profileName(env["OMO_PROFILE"]) ?? profileName(env["OCX_PROFILE"]) ?? profileNameFromOpenCodeConfigDir(env["OPENCODE_CONFIG_DIR"]);
71364
71417
  }
71365
- function toRecord2(value) {
71418
+ function toRecord3(value) {
71366
71419
  if (value === null || typeof value !== "object" || Array.isArray(value))
71367
71420
  return;
71368
71421
  return Object.fromEntries(Object.entries(value));
@@ -71383,13 +71436,13 @@ function harnessLayer(config, harness) {
71383
71436
  const legacyKeys = Object.entries(OMO_CONFIG_LEGACY_HARNESS_ALIASES).filter(([, target]) => target === canonical).map(([legacy]) => harnessBlockKey(legacy));
71384
71437
  let layer = {};
71385
71438
  for (const key of [...legacyKeys, harnessBlockKey(canonical)]) {
71386
- layer = mergeOmoConfigRecords(layer, toRecord2(config[key]) ?? {});
71439
+ layer = mergeOmoConfigRecords(layer, toRecord3(config[key]) ?? {});
71387
71440
  }
71388
71441
  return layer;
71389
71442
  }
71390
71443
  function resolveOmoConfigView(options) {
71391
- const profiles = toRecord2(options.config["profiles"]);
71392
- const profile = options.profile === undefined ? undefined : toRecord2(profiles?.[options.profile]);
71444
+ const profiles = toRecord3(options.config["profiles"]);
71445
+ const profile = options.profile === undefined ? undefined : toRecord3(profiles?.[options.profile]);
71393
71446
  const diagnostics = profile === undefined && options.profile !== undefined ? [{
71394
71447
  kind: "profile",
71395
71448
  message: `Activated omo profile "${options.profile}" does not exist; using the base configuration`,
@@ -71530,9 +71583,15 @@ function loadOmoConfig(options = {}) {
71530
71583
  });
71531
71584
  const finalInput = mergeOmoConfigRecords(DEFAULT_RAW_CONFIG, resolved.config);
71532
71585
  const finalConfig = OmoConfigSchema.safeParse(finalInput);
71586
+ const excludeModels = collectExcludedModels({
71587
+ layers,
71588
+ ...options.harness === undefined ? {} : { harness: options.harness },
71589
+ ...resolved.profile === undefined ? {} : { profile: resolved.profile }
71590
+ });
71591
+ const withExcludedModels = (config) => excludeModels.length === 0 ? config : { ...config, exclude_models: [...excludeModels] };
71533
71592
  if (finalConfig.success) {
71534
71593
  return {
71535
- config: stripResolutionControlKeys(finalConfig.data),
71594
+ config: withExcludedModels(stripResolutionControlKeys(finalConfig.data)),
71536
71595
  diagnostics: [...diagnostics, ...resolved.diagnostics],
71537
71596
  layers,
71538
71597
  ...resolved.profile === undefined ? {} : { profile: resolved.profile },
@@ -71545,7 +71604,7 @@ function loadOmoConfig(options = {}) {
71545
71604
  });
71546
71605
  if (pruned.ok) {
71547
71606
  return {
71548
- config: stripResolutionControlKeys(OmoConfigSchema.parse(pruned.config)),
71607
+ config: withExcludedModels(stripResolutionControlKeys(OmoConfigSchema.parse(pruned.config))),
71549
71608
  diagnostics: [...diagnostics, ...resolved.diagnostics, ...invalidValueDiagnostics(MERGED_OMO_CONFIG_PATH, pruned.dropped)],
71550
71609
  layers,
71551
71610
  ...resolved.profile === undefined ? {} : { profile: resolved.profile },
@@ -71564,6 +71623,7 @@ var DEFAULT_RAW_CONFIG;
71564
71623
  var init_loader2 = __esm(() => {
71565
71624
  init_main();
71566
71625
  init_schema();
71626
+ init_disabled_skills();
71567
71627
  init_layer_validation();
71568
71628
  init_merge();
71569
71629
  init_paths();
@@ -75036,7 +75096,7 @@ init_shared();
75036
75096
  // package.json
75037
75097
  var package_default = {
75038
75098
  name: "oh-my-opencode",
75039
- version: "5.1.41",
75099
+ version: "5.1.42",
75040
75100
  description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
75041
75101
  main: "./dist/index.js",
75042
75102
  types: "dist/index.d.ts",
@@ -75213,7 +75273,7 @@ var package_default = {
75213
75273
  },
75214
75274
  devDependencies: {
75215
75275
  "@clack/prompts": "^1.8.1",
75216
- "@code-yeongyu/senpi": "2026.10.21-1",
75276
+ "@code-yeongyu/senpi": "2026.10.21-2",
75217
75277
  "@modelcontextprotocol/sdk": "^1.30.0",
75218
75278
  "@oh-my-opencode/agents-md-core": "workspace:*",
75219
75279
  "@oh-my-opencode/ast-grep-mcp": "workspace:*",
@@ -75274,18 +75334,18 @@ var package_default = {
75274
75334
  typescript: "^7.0.2"
75275
75335
  },
75276
75336
  optionalDependencies: {
75277
- "oh-my-opencode-darwin-arm64": "5.1.41",
75278
- "oh-my-opencode-darwin-x64": "5.1.41",
75279
- "oh-my-opencode-darwin-x64-baseline": "5.1.41",
75280
- "oh-my-opencode-linux-arm64": "5.1.41",
75281
- "oh-my-opencode-linux-arm64-musl": "5.1.41",
75282
- "oh-my-opencode-linux-x64": "5.1.41",
75283
- "oh-my-opencode-linux-x64-baseline": "5.1.41",
75284
- "oh-my-opencode-linux-x64-musl": "5.1.41",
75285
- "oh-my-opencode-linux-x64-musl-baseline": "5.1.41",
75286
- "oh-my-opencode-windows-arm64": "5.1.41",
75287
- "oh-my-opencode-windows-x64": "5.1.41",
75288
- "oh-my-opencode-windows-x64-baseline": "5.1.41"
75337
+ "oh-my-opencode-darwin-arm64": "5.1.42",
75338
+ "oh-my-opencode-darwin-x64": "5.1.42",
75339
+ "oh-my-opencode-darwin-x64-baseline": "5.1.42",
75340
+ "oh-my-opencode-linux-arm64": "5.1.42",
75341
+ "oh-my-opencode-linux-arm64-musl": "5.1.42",
75342
+ "oh-my-opencode-linux-x64": "5.1.42",
75343
+ "oh-my-opencode-linux-x64-baseline": "5.1.42",
75344
+ "oh-my-opencode-linux-x64-musl": "5.1.42",
75345
+ "oh-my-opencode-linux-x64-musl-baseline": "5.1.42",
75346
+ "oh-my-opencode-windows-arm64": "5.1.42",
75347
+ "oh-my-opencode-windows-x64": "5.1.42",
75348
+ "oh-my-opencode-windows-x64-baseline": "5.1.42"
75289
75349
  },
75290
75350
  overrides: {
75291
75351
  hono: "^4.13.8",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oh-my-opencode",
3
- "version": "5.1.41",
3
+ "version": "5.1.42",
4
4
  "description": "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
5
5
  "main": "./dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -177,7 +177,7 @@
177
177
  },
178
178
  "devDependencies": {
179
179
  "@clack/prompts": "^1.8.1",
180
- "@code-yeongyu/senpi": "2026.10.21-1",
180
+ "@code-yeongyu/senpi": "2026.10.21-2",
181
181
  "@modelcontextprotocol/sdk": "^1.30.0",
182
182
  "@oh-my-opencode/agents-md-core": "workspace:*",
183
183
  "@oh-my-opencode/ast-grep-mcp": "workspace:*",
@@ -238,18 +238,18 @@
238
238
  "typescript": "^7.0.2"
239
239
  },
240
240
  "optionalDependencies": {
241
- "oh-my-opencode-darwin-arm64": "5.1.41",
242
- "oh-my-opencode-darwin-x64": "5.1.41",
243
- "oh-my-opencode-darwin-x64-baseline": "5.1.41",
244
- "oh-my-opencode-linux-arm64": "5.1.41",
245
- "oh-my-opencode-linux-arm64-musl": "5.1.41",
246
- "oh-my-opencode-linux-x64": "5.1.41",
247
- "oh-my-opencode-linux-x64-baseline": "5.1.41",
248
- "oh-my-opencode-linux-x64-musl": "5.1.41",
249
- "oh-my-opencode-linux-x64-musl-baseline": "5.1.41",
250
- "oh-my-opencode-windows-arm64": "5.1.41",
251
- "oh-my-opencode-windows-x64": "5.1.41",
252
- "oh-my-opencode-windows-x64-baseline": "5.1.41"
241
+ "oh-my-opencode-darwin-arm64": "5.1.42",
242
+ "oh-my-opencode-darwin-x64": "5.1.42",
243
+ "oh-my-opencode-darwin-x64-baseline": "5.1.42",
244
+ "oh-my-opencode-linux-arm64": "5.1.42",
245
+ "oh-my-opencode-linux-arm64-musl": "5.1.42",
246
+ "oh-my-opencode-linux-x64": "5.1.42",
247
+ "oh-my-opencode-linux-x64-baseline": "5.1.42",
248
+ "oh-my-opencode-linux-x64-musl": "5.1.42",
249
+ "oh-my-opencode-linux-x64-musl-baseline": "5.1.42",
250
+ "oh-my-opencode-windows-arm64": "5.1.42",
251
+ "oh-my-opencode-windows-x64": "5.1.42",
252
+ "oh-my-opencode-windows-x64-baseline": "5.1.42"
253
253
  },
254
254
  "overrides": {
255
255
  "hono": "^4.13.8",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "omo",
3
- "version": "5.1.41",
3
+ "version": "5.1.42",
4
4
  "description": "One Codex plugin namespace for Yeongyu's local Codex components.",
5
5
  "author": {
6
6
  "name": "Yeongyu Kim",
@@ -7288,9 +7288,11 @@ var OmoMemoryAgentOverridesSchema = object({
7288
7288
  projection: OmoMemoryProjectionLayerSchema.optional(),
7289
7289
  compile_warn_tokens: number2().int().positive().optional()
7290
7290
  }).strict();
7291
+ var OmoMemoryAutoIdentitySchema = _enum(["path", "git"]);
7291
7292
  var OmoMemorySettingsSchema = object({
7292
7293
  enabled: boolean2().default(true),
7293
7294
  agent: string2().min(1).default("auto"),
7295
+ auto_identity: OmoMemoryAutoIdentitySchema.default("path"),
7294
7296
  reflection: OmoMemoryReflectionSchema.default({
7295
7297
  enabled: true,
7296
7298
  trigger: { step_count: 25, on_compaction: true },
@@ -7332,6 +7334,7 @@ var OmoMemorySettingsSchema = object({
7332
7334
  var OmoMemorySettingsLayerSchema = object({
7333
7335
  enabled: boolean2().optional(),
7334
7336
  agent: string2().min(1).optional(),
7337
+ auto_identity: OmoMemoryAutoIdentitySchema.optional(),
7335
7338
  reflection: OmoMemoryReflectionLayerSchema.optional(),
7336
7339
  nudge: OmoMemoryNudgeLayerSchema.optional(),
7337
7340
  facts: OmoMemoryFactsLayerSchema.optional(),
@@ -7370,6 +7373,7 @@ function isRecord6(value) {
7370
7373
  }
7371
7374
  var OmoModelProfileInputSchema = object({
7372
7375
  display_name: string2().optional(),
7376
+ caution: string2().optional(),
7373
7377
  family: _enum(["daily", "geeky"]).optional(),
7374
7378
  tier: _enum(["normal", "heavy"]).optional(),
7375
7379
  models: array(union([string2(), OmoFallbackModelObjectSchema])).optional()
@@ -7641,6 +7645,7 @@ var OmoGatewaySectionSchema = record(string2(), unknown()).describe("Chat-surfac
7641
7645
  // ../../omo-config-core/src/schema/config.ts
7642
7646
  var OmoOpenCodeHarnessConfigSchema = record(string2(), unknown());
7643
7647
  var OmoDisabledSkillsSchema = array(string2());
7648
+ var OmoExcludedModelsSchema = array(string2());
7644
7649
  var OmoTypedHarnessConfigSchema = object({
7645
7650
  formatOnMutation: OmoFormatOnMutationLayerSchema.optional(),
7646
7651
  gateway: OmoGatewaySectionSchema.optional(),
@@ -7656,7 +7661,8 @@ var OmoTypedHarnessConfigSchema = object({
7656
7661
  telemetry: OmoTelemetrySettingsLayerSchema.optional(),
7657
7662
  side_panel: OmoSidePanelSettingsLayerSchema.optional(),
7658
7663
  computer: OmoComputerSettingsLayerSchema.optional(),
7659
- disabled_skills: OmoDisabledSkillsSchema.optional()
7664
+ disabled_skills: OmoDisabledSkillsSchema.optional(),
7665
+ exclude_models: OmoExcludedModelsSchema.optional()
7660
7666
  }).strict();
7661
7667
  var OmoConfigProfileSchema = object({
7662
7668
  formatOnMutation: OmoFormatOnMutationLayerSchema.optional(),
@@ -7673,6 +7679,7 @@ var OmoConfigProfileSchema = object({
7673
7679
  side_panel: OmoSidePanelSettingsLayerSchema.optional(),
7674
7680
  computer: OmoComputerSettingsLayerSchema.optional(),
7675
7681
  disabled_skills: OmoDisabledSkillsSchema.optional(),
7682
+ exclude_models: OmoExcludedModelsSchema.optional(),
7676
7683
  "[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
7677
7684
  "[native]": OmoTypedHarnessConfigSchema.optional(),
7678
7685
  "[senpi]": OmoTypedHarnessConfigSchema.optional(),
@@ -7695,6 +7702,7 @@ var OmoConfigSchema = object({
7695
7702
  side_panel: OmoSidePanelSettingsSchema.optional(),
7696
7703
  computer: OmoComputerSettingsSchema.optional(),
7697
7704
  disabled_skills: OmoDisabledSkillsSchema.optional(),
7705
+ exclude_models: OmoExcludedModelsSchema.optional(),
7698
7706
  "[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
7699
7707
  "[native]": OmoTypedHarnessConfigSchema.optional(),
7700
7708
  "[senpi]": OmoTypedHarnessConfigSchema.optional(),
@@ -7720,6 +7728,7 @@ var OmoConfigLayerSchema = object({
7720
7728
  side_panel: OmoSidePanelSettingsLayerSchema.optional(),
7721
7729
  computer: OmoComputerSettingsLayerSchema.optional(),
7722
7730
  disabled_skills: OmoDisabledSkillsSchema.optional(),
7731
+ exclude_models: OmoExcludedModelsSchema.optional(),
7723
7732
  "[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
7724
7733
  "[native]": OmoTypedHarnessConfigSchema.optional(),
7725
7734
  "[senpi]": OmoTypedHarnessConfigSchema.optional(),
@@ -7843,6 +7852,50 @@ var DEFAULT_READ_FILE_SYSTEM = {
7843
7852
  realpathSync
7844
7853
  };
7845
7854
 
7855
+ // ../../omo-config-core/src/loader/disabled-skills.ts
7856
+ function toRecord(value) {
7857
+ if (value === null || typeof value !== "object" || Array.isArray(value))
7858
+ return;
7859
+ return value;
7860
+ }
7861
+ function namesAt(record, key) {
7862
+ const value = record?.[key];
7863
+ if (!Array.isArray(value))
7864
+ return [];
7865
+ return value.filter((entry) => typeof entry === "string" && entry.trim() !== "");
7866
+ }
7867
+ function harnessBlockKeys(harness) {
7868
+ const canonical = canonicalHarnessName(harness);
7869
+ const legacy = Object.entries(OMO_CONFIG_LEGACY_HARNESS_ALIASES).filter(([, target]) => target === canonical).map(([name]) => harnessBlockKey(name));
7870
+ return [harnessBlockKey(canonical), ...legacy];
7871
+ }
7872
+ function scopesOf(config, harness) {
7873
+ if (harness === undefined)
7874
+ return [config];
7875
+ return [config, ...harnessBlockKeys(harness).map((key) => toRecord(config[key]))];
7876
+ }
7877
+ function collectExcludedModels(options) {
7878
+ return collectUnionedList("exclude_models", options);
7879
+ }
7880
+ function collectUnionedList(key, options) {
7881
+ const names = new Set;
7882
+ for (const layer of options.layers) {
7883
+ const config = toRecord(layer.config);
7884
+ if (config === undefined)
7885
+ continue;
7886
+ const profile = options.profile === undefined ? undefined : toRecord(toRecord(config["profiles"])?.[options.profile]);
7887
+ const scopes = [
7888
+ ...scopesOf(config, options.harness),
7889
+ ...profile === undefined ? [] : scopesOf(profile, options.harness)
7890
+ ];
7891
+ for (const scope of scopes) {
7892
+ for (const name of namesAt(scope, key))
7893
+ names.add(name.trim());
7894
+ }
7895
+ }
7896
+ return [...names];
7897
+ }
7898
+
7846
7899
  // ../../../node_modules/.bun/jsonc-parser@3.3.1/node_modules/jsonc-parser/lib/esm/impl/scanner.js
7847
7900
  function createScanner(text, ignoreTrivia = false) {
7848
7901
  const len = text.length;
@@ -8915,7 +8968,7 @@ function stripUnrecognizedKeys(record, issues) {
8915
8968
  }
8916
8969
  return { issuePaths, stripped };
8917
8970
  }
8918
- function toRecord(value) {
8971
+ function toRecord2(value) {
8919
8972
  if (value === null || typeof value !== "object" || Array.isArray(value))
8920
8973
  return null;
8921
8974
  const record = {};
@@ -8930,7 +8983,7 @@ var validateLayerRecord = (record) => {
8930
8983
  };
8931
8984
  function validateConfigLayer(path, data) {
8932
8985
  const sanitized = sanitizeUnsafeKeys(data);
8933
- const record = toRecord(sanitized.value);
8986
+ const record = toRecord2(sanitized.value);
8934
8987
  const unsafeIssuePaths = sanitized.issues.flatMap((issue) => issue.keys.map((key) => [...issue.path, key].join(".")));
8935
8988
  const unsafeDiagnostics = unsafeIssuePaths.length === 0 ? [] : [{ kind: "unknown-keys", message: `Ignored unknown keys in ${path}: ${unsafeIssuePaths.join(", ")}`, path, issuePaths: unsafeIssuePaths }];
8936
8989
  const validation = OmoConfigLayerSchema.safeParse(sanitized.value);
@@ -9070,7 +9123,7 @@ function resolveOmoProfileName(options = {}) {
9070
9123
  const env = options.env ?? process.env;
9071
9124
  return profileName(options.profile) ?? profileName(env["OMO_PROFILE"]) ?? profileName(env["OCX_PROFILE"]) ?? profileNameFromOpenCodeConfigDir(env["OPENCODE_CONFIG_DIR"]);
9072
9125
  }
9073
- function toRecord2(value) {
9126
+ function toRecord3(value) {
9074
9127
  if (value === null || typeof value !== "object" || Array.isArray(value))
9075
9128
  return;
9076
9129
  return Object.fromEntries(Object.entries(value));
@@ -9091,13 +9144,13 @@ function harnessLayer(config, harness) {
9091
9144
  const legacyKeys = Object.entries(OMO_CONFIG_LEGACY_HARNESS_ALIASES).filter(([, target]) => target === canonical).map(([legacy]) => harnessBlockKey(legacy));
9092
9145
  let layer = {};
9093
9146
  for (const key of [...legacyKeys, harnessBlockKey(canonical)]) {
9094
- layer = mergeOmoConfigRecords(layer, toRecord2(config[key]) ?? {});
9147
+ layer = mergeOmoConfigRecords(layer, toRecord3(config[key]) ?? {});
9095
9148
  }
9096
9149
  return layer;
9097
9150
  }
9098
9151
  function resolveOmoConfigView(options) {
9099
- const profiles = toRecord2(options.config["profiles"]);
9100
- const profile = options.profile === undefined ? undefined : toRecord2(profiles?.[options.profile]);
9152
+ const profiles = toRecord3(options.config["profiles"]);
9153
+ const profile = options.profile === undefined ? undefined : toRecord3(profiles?.[options.profile]);
9101
9154
  const diagnostics = profile === undefined && options.profile !== undefined ? [{
9102
9155
  kind: "profile",
9103
9156
  message: `Activated omo profile "${options.profile}" does not exist; using the base configuration`,
@@ -9238,9 +9291,15 @@ function loadOmoConfig(options = {}) {
9238
9291
  });
9239
9292
  const finalInput = mergeOmoConfigRecords(DEFAULT_RAW_CONFIG, resolved.config);
9240
9293
  const finalConfig = OmoConfigSchema.safeParse(finalInput);
9294
+ const excludeModels = collectExcludedModels({
9295
+ layers,
9296
+ ...options.harness === undefined ? {} : { harness: options.harness },
9297
+ ...resolved.profile === undefined ? {} : { profile: resolved.profile }
9298
+ });
9299
+ const withExcludedModels = (config) => excludeModels.length === 0 ? config : { ...config, exclude_models: [...excludeModels] };
9241
9300
  if (finalConfig.success) {
9242
9301
  return {
9243
- config: stripResolutionControlKeys(finalConfig.data),
9302
+ config: withExcludedModels(stripResolutionControlKeys(finalConfig.data)),
9244
9303
  diagnostics: [...diagnostics, ...resolved.diagnostics],
9245
9304
  layers,
9246
9305
  ...resolved.profile === undefined ? {} : { profile: resolved.profile },
@@ -9253,7 +9312,7 @@ function loadOmoConfig(options = {}) {
9253
9312
  });
9254
9313
  if (pruned.ok) {
9255
9314
  return {
9256
- config: stripResolutionControlKeys(OmoConfigSchema.parse(pruned.config)),
9315
+ config: withExcludedModels(stripResolutionControlKeys(OmoConfigSchema.parse(pruned.config))),
9257
9316
  diagnostics: [...diagnostics, ...resolved.diagnostics, ...invalidValueDiagnostics(MERGED_OMO_CONFIG_PATH, pruned.dropped)],
9258
9317
  layers,
9259
9318
  ...resolved.profile === undefined ? {} : { profile: resolved.profile },
@@ -8,7 +8,7 @@
8
8
  "command": "node \"${PLUGIN_ROOT}/components/bootstrap/dist/cli.js\" hook session-start",
9
9
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\bootstrap.ps1\"",
10
10
  "timeout": 30,
11
- "statusMessage": "(OmO 5.1.41) Checking Bootstrap Provisioning"
11
+ "statusMessage": "(OmO 5.1.42) Checking Bootstrap Provisioning"
12
12
  }
13
13
  ]
14
14
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sisyphuslabs/codex-bootstrap",
3
- "version": "5.1.41",
3
+ "version": "5.1.42",
4
4
  "description": "Codex SessionStart bootstrap component that provisions LazyCodex runtime dependencies from a detached worker.",
5
5
  "type": "module",
6
6
  "private": true,
@@ -8,7 +8,7 @@
8
8
  "type": "command",
9
9
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-tool-use",
10
10
  "timeout": 30,
11
- "statusMessage": "(OmO 5.1.41) Checking Comments"
11
+ "statusMessage": "(OmO 5.1.42) Checking Comments"
12
12
  }
13
13
  ]
14
14
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-comment-checker",
3
- "version": "5.1.41",
3
+ "version": "5.1.42",
4
4
  "description": "Codex plugin that runs comment-checker after edit-like PostToolUse hooks.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -8,7 +8,7 @@
8
8
  "type": "command",
9
9
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook pre-tool-use",
10
10
  "timeout": 5,
11
- "statusMessage": "(OmO 5.1.41) Recommending Git Bash MCP"
11
+ "statusMessage": "(OmO 5.1.42) Recommending Git Bash MCP"
12
12
  }
13
13
  ]
14
14
  }
@@ -20,7 +20,7 @@
20
20
  "type": "command",
21
21
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-compact",
22
22
  "timeout": 5,
23
- "statusMessage": "(OmO 5.1.41) Resetting Git Bash MCP Reminder"
23
+ "statusMessage": "(OmO 5.1.42) Resetting Git Bash MCP Reminder"
24
24
  }
25
25
  ]
26
26
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sisyphuslabs/codex-git-bash-hook",
3
- "version": "5.1.41",
3
+ "version": "5.1.42",
4
4
  "description": "Codex hook component that reminds Windows sessions to prefer the OMO git_bash MCP.",
5
5
  "type": "module",
6
6
  "private": true,
@@ -8,7 +8,7 @@
8
8
  "type": "command",
9
9
  "command": "node \"${PLUGIN_ROOT}/components/lazycodex-executor-verify/dist/cli.js\" hook subagent-stop",
10
10
  "timeout": 10,
11
- "statusMessage": "(OmO 5.1.41) Verifying LazyCodex Executor Evidence"
11
+ "statusMessage": "(OmO 5.1.42) Verifying LazyCodex Executor Evidence"
12
12
  }
13
13
  ]
14
14
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-lazycodex-executor-verify",
3
- "version": "5.1.41",
3
+ "version": "5.1.42",
4
4
  "description": "Codex SubagentStop evidence verifier for LazyCodex executor completions.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "version": "5.1.41",
4
- "inputDigest": "sha256:ad15254c56422d6b36ee8b483fb554748ed5358e03e99bbf8588449fb83e9ee6",
3
+ "version": "5.1.42",
4
+ "inputDigest": "sha256:67783401245cfd4a937dfd08ba04aa96bff6ea9816e0f6caeca4d98722b2baec",
5
5
  "outputs": [
6
6
  {
7
7
  "path": "cli.d.ts",
@@ -8,7 +8,7 @@
8
8
  "type": "command",
9
9
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-tool-use",
10
10
  "timeout": 60,
11
- "statusMessage": "(OmO 5.1.41) Checking LSP Diagnostics"
11
+ "statusMessage": "(OmO 5.1.42) Checking LSP Diagnostics"
12
12
  }
13
13
  ]
14
14
  }
@@ -21,7 +21,7 @@
21
21
  "type": "command",
22
22
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-compact",
23
23
  "timeout": 5,
24
- "statusMessage": "(OmO 5.1.41) Resetting LSP Diagnostics Cache"
24
+ "statusMessage": "(OmO 5.1.42) Resetting LSP Diagnostics Cache"
25
25
  }
26
26
  ]
27
27
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-lsp",
3
- "version": "5.1.41",
3
+ "version": "5.1.42",
4
4
  "description": "Codex plugin that exposes Language Server Protocol tools and post-edit diagnostics.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",