oh-my-opencode 4.19.3 → 4.19.4

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 (150) hide show
  1. package/.agents/command/get-unpublished-changes.md +2 -0
  2. package/.agents/command/omomomo.md +1 -1
  3. package/.agents/command/publish.md +7 -0
  4. package/.agents/skills/get-unpublished-changes/SKILL.md +2 -0
  5. package/.agents/skills/hyperplan/SKILL.md +3 -3
  6. package/.agents/skills/omomomo/SKILL.md +1 -1
  7. package/.agents/skills/publish/SKILL.md +7 -0
  8. package/.opencode/command/get-unpublished-changes.md +2 -0
  9. package/.opencode/command/omomomo.md +1 -1
  10. package/.opencode/command/publish.md +7 -0
  11. package/.opencode/skills/hyperplan/SKILL.md +3 -3
  12. package/dist/agents/sisyphus-junior/agent.d.ts +1 -1
  13. package/dist/cli/doctor/checks/deprecated-reasoning-keys.d.ts +2 -0
  14. package/dist/cli/index.js +1625 -1368
  15. package/dist/cli-node/index.js +1625 -1368
  16. package/dist/config/schema/agent-overrides.d.ts +800 -0
  17. package/dist/config/schema/categories.d.ts +132 -0
  18. package/dist/config/schema/fallback-models.d.ts +50 -0
  19. package/dist/config/schema/oh-my-opencode-config.d.ts +818 -2
  20. package/dist/config-migration/index.d.ts +1 -0
  21. package/dist/config-migration/migration-plans.d.ts +1 -0
  22. package/dist/config-migration/reasoning-unification.d.ts +3 -0
  23. package/dist/features/team-mode/tools/lifecycle-test-fixture.d.ts +2 -0
  24. package/dist/hooks/codegraph-bootstrap/command-runner.d.ts +1 -0
  25. package/dist/hooks/model-fallback/next-fallback.d.ts +1 -0
  26. package/dist/hooks/runtime-fallback/constants.d.ts +1 -1
  27. package/dist/index.js +3558 -3241
  28. package/dist/oh-my-opencode.schema.json +1672 -8
  29. package/dist/plugin-handlers/prometheus-agent-config-builder.d.ts +1 -0
  30. package/dist/shared/agent-variant.d.ts +11 -0
  31. package/dist/shared/session-prompt-params-helpers.d.ts +6 -1
  32. package/dist/skills/coding-agent-sessions/SKILL.md +4 -3
  33. package/dist/skills/coding-agent-sessions/references/all-platforms.md +3 -1
  34. package/dist/skills/coding-agent-sessions/scripts/agent_sessions/aside_scanner.py +140 -0
  35. package/dist/skills/coding-agent-sessions/scripts/agent_sessions/scanners.py +3 -0
  36. package/dist/skills/data-scientist/SKILL.md +243 -0
  37. package/dist/skills/data-scientist/references/common-scenarios.md +176 -0
  38. package/dist/skills/data-scientist/references/execution-templates.md +197 -0
  39. package/dist/skills/data-scientist/references/integration-patterns.md +153 -0
  40. package/dist/skills/data-scientist/references/performance-benchmarks.md +37 -0
  41. package/dist/skills/data-scientist/references/uv-setup.md +78 -0
  42. package/dist/skills/data-scientist/scripts/quick-query.py +111 -0
  43. package/dist/skills/data-scientist/scripts/setup-uv.ps1 +53 -0
  44. package/dist/skills/data-scientist/scripts/setup-uv.sh +60 -0
  45. package/dist/skills/debugging/SKILL.md +1 -1
  46. package/dist/skills/programming/SKILL.md +1 -2
  47. package/dist/skills/ulw-plan/SKILL.md +1 -1
  48. package/dist/skills/ulw-research/SKILL.md +122 -11
  49. package/dist/tools/delegate-task/builtin-categories.d.ts +1 -0
  50. package/dist/tools/delegate-task/builtin-category-definition.d.ts +1 -0
  51. package/dist/tools/delegate-task/constants.d.ts +1 -1
  52. package/dist/tui.js +974 -1090
  53. package/package.json +13 -13
  54. package/packages/lsp-core/src/lsp/client-diagnostics-freshness.integration.test.ts +2 -2
  55. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  56. package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +21 -3
  57. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  58. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  59. package/packages/omo-codex/plugin/components/codegraph/dist/cli.js +279 -58
  60. package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +230 -41
  61. package/packages/omo-codex/plugin/components/codegraph/package.json +1 -1
  62. package/packages/omo-codex/plugin/components/codegraph/test/hook.test.ts +6 -0
  63. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  64. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  65. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  66. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  67. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  68. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  69. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +2 -2
  70. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  71. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  72. package/packages/omo-codex/plugin/components/rules/dist/cli.js +1 -1
  73. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  74. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  75. package/packages/omo-codex/plugin/components/rules/src/post-compact-budget.ts +1 -1
  76. package/packages/omo-codex/plugin/components/start-work-continuation/hooks/hooks.json +2 -2
  77. package/packages/omo-codex/plugin/components/start-work-continuation/package.json +1 -1
  78. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  79. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  80. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  81. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  82. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  83. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  84. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/SKILL.md +1 -1
  85. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +4 -4
  86. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  87. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  88. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  89. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  90. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-codegraph-init-guidance.json +1 -1
  91. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  92. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  93. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  94. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  95. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  96. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  97. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  98. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  99. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  100. package/packages/omo-codex/plugin/hooks/session-start-checking-codegraph-bootstrap.json +1 -1
  101. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  102. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  103. package/packages/omo-codex/plugin/hooks/stop-checking-start-work-continuation.json +1 -1
  104. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  105. package/packages/omo-codex/plugin/hooks/subagent-stop-checking-start-work-continuation.json +1 -1
  106. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  107. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  108. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  109. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  110. package/packages/omo-codex/plugin/package-lock.json +13 -13
  111. package/packages/omo-codex/plugin/package.json +1 -1
  112. package/packages/omo-codex/plugin/scripts/sync-skills.mjs +6 -0
  113. package/packages/omo-codex/plugin/skills/coding-agent-sessions/SKILL.md +4 -3
  114. package/packages/omo-codex/plugin/skills/coding-agent-sessions/references/all-platforms.md +3 -1
  115. package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/aside_scanner.py +140 -0
  116. package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/scanners.py +3 -0
  117. package/packages/omo-codex/plugin/skills/data-scientist/SKILL.md +243 -0
  118. package/packages/omo-codex/plugin/skills/data-scientist/agents/openai.yaml +2 -0
  119. package/packages/omo-codex/plugin/skills/data-scientist/references/common-scenarios.md +176 -0
  120. package/packages/omo-codex/plugin/skills/data-scientist/references/execution-templates.md +197 -0
  121. package/packages/omo-codex/plugin/skills/data-scientist/references/integration-patterns.md +153 -0
  122. package/packages/omo-codex/plugin/skills/data-scientist/references/performance-benchmarks.md +37 -0
  123. package/packages/omo-codex/plugin/skills/data-scientist/references/uv-setup.md +78 -0
  124. package/packages/omo-codex/plugin/skills/data-scientist/scripts/quick-query.py +111 -0
  125. package/packages/omo-codex/plugin/skills/data-scientist/scripts/setup-uv.ps1 +53 -0
  126. package/packages/omo-codex/plugin/skills/data-scientist/scripts/setup-uv.sh +60 -0
  127. package/packages/omo-codex/plugin/skills/debugging/SKILL.md +1 -1
  128. package/packages/omo-codex/plugin/skills/programming/SKILL.md +1 -2
  129. package/packages/omo-codex/plugin/skills/ulw-plan/SKILL.md +1 -1
  130. package/packages/omo-codex/plugin/skills/ulw-research/SKILL.md +121 -11
  131. package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +7 -0
  132. package/packages/omo-codex/plugin/test/sync-skills.test.mjs +12 -0
  133. package/packages/omo-codex/scripts/install-dist/install-local.mjs +24 -5
  134. package/packages/shared-skills/skills/coding-agent-sessions/SKILL.md +4 -3
  135. package/packages/shared-skills/skills/coding-agent-sessions/references/all-platforms.md +3 -1
  136. package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/aside_scanner.py +140 -0
  137. package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/scanners.py +3 -0
  138. package/packages/shared-skills/skills/data-scientist/SKILL.md +243 -0
  139. package/packages/shared-skills/skills/data-scientist/references/common-scenarios.md +176 -0
  140. package/packages/shared-skills/skills/data-scientist/references/execution-templates.md +197 -0
  141. package/packages/shared-skills/skills/data-scientist/references/integration-patterns.md +153 -0
  142. package/packages/shared-skills/skills/data-scientist/references/performance-benchmarks.md +37 -0
  143. package/packages/shared-skills/skills/data-scientist/references/uv-setup.md +78 -0
  144. package/packages/shared-skills/skills/data-scientist/scripts/quick-query.py +111 -0
  145. package/packages/shared-skills/skills/data-scientist/scripts/setup-uv.ps1 +53 -0
  146. package/packages/shared-skills/skills/data-scientist/scripts/setup-uv.sh +60 -0
  147. package/packages/shared-skills/skills/debugging/SKILL.md +1 -1
  148. package/packages/shared-skills/skills/programming/SKILL.md +1 -2
  149. package/packages/shared-skills/skills/ulw-plan/SKILL.md +1 -1
  150. package/packages/shared-skills/skills/ulw-research/SKILL.md +122 -11
@@ -3477,6 +3477,9 @@ function handlePipeResult(left, next, ctx) {
3477
3477
  }
3478
3478
  return next._zod.run({ value: left.value, issues: left.issues, fallback: left.fallback }, ctx);
3479
3479
  }
3480
+ var $ZodPreprocess = /* @__PURE__ */ $constructor("$ZodPreprocess", (inst, def) => {
3481
+ $ZodPipe.init(inst, def);
3482
+ });
3480
3483
  var $ZodReadonly = /* @__PURE__ */ $constructor("$ZodReadonly", (inst, def) => {
3481
3484
  $ZodType.init(inst, def);
3482
3485
  defineLazy(inst._zod, "propValues", () => def.innerType._zod.propValues);
@@ -5563,6 +5566,10 @@ function pipe(in_, out) {
5563
5566
  out
5564
5567
  });
5565
5568
  }
5569
+ var ZodPreprocess = /* @__PURE__ */ $constructor("ZodPreprocess", (inst, def) => {
5570
+ ZodPipe.init(inst, def);
5571
+ $ZodPreprocess.init(inst, def);
5572
+ });
5566
5573
  var ZodReadonly = /* @__PURE__ */ $constructor("ZodReadonly", (inst, def) => {
5567
5574
  $ZodReadonly.init(inst, def);
5568
5575
  ZodType.init(inst, def);
@@ -5586,22 +5593,142 @@ function refine(fn, _params = {}) {
5586
5593
  function superRefine(fn, params) {
5587
5594
  return _superRefine(fn, params);
5588
5595
  }
5596
+ function preprocess(fn, schema) {
5597
+ return new ZodPreprocess({
5598
+ type: "pipe",
5599
+ in: transform(fn),
5600
+ out: schema
5601
+ });
5602
+ }
5603
+
5604
+ // ../../../../omo-config-core/src/schema/reasoning-vocabulary.ts
5605
+ var REASONING_LEVELS = ["off", "minimal", "low", "medium", "high", "xhigh", "max"];
5606
+ var REASONING_AUTO = "auto";
5607
+ var REASONING_LEVEL_SET = new Set(REASONING_LEVELS);
5608
+ var REASONING_LEVEL_OR_AUTO_SET = new Set([...REASONING_LEVELS, REASONING_AUTO]);
5609
+ function isReasoningLevel(value) {
5610
+ return REASONING_LEVEL_SET.has(value);
5611
+ }
5612
+ function normalizeReasoning(input) {
5613
+ const normalized = input.trim().toLowerCase();
5614
+ if (!normalized)
5615
+ return {};
5616
+ if (normalized === "none")
5617
+ return { level: "off" };
5618
+ if (normalized === REASONING_AUTO)
5619
+ return { level: REASONING_AUTO };
5620
+ if (isReasoningLevel(normalized))
5621
+ return { level: normalized };
5622
+ return { passthrough: normalized };
5623
+ }
5624
+ function splitReasoningSuffix(model, options) {
5625
+ if (typeof model !== "string")
5626
+ return { base: "" };
5627
+ const trimmed = model.trim();
5628
+ if (!trimmed)
5629
+ return { base: "" };
5630
+ const separatorIndex = trimmed.lastIndexOf(":");
5631
+ if (separatorIndex === -1)
5632
+ return { base: trimmed };
5633
+ const base = trimmed.slice(0, separatorIndex).trim();
5634
+ const token = trimmed.slice(separatorIndex + 1).trim().toLowerCase();
5635
+ if (!base || !REASONING_LEVEL_OR_AUTO_SET.has(token))
5636
+ return { base: trimmed };
5637
+ if (token === "max" && !(options?.allowMaxSuffix ?? base.includes("/")))
5638
+ return { base: trimmed };
5639
+ return { base, level: token };
5640
+ }
5641
+
5642
+ // ../../../../omo-config-core/src/schema/model-ref.ts
5643
+ var REASONING_LEVELS_OR_AUTO = [...REASONING_LEVELS, "auto"];
5644
+ var OmoReasoningSchema = union([
5645
+ _enum(REASONING_LEVELS_OR_AUTO),
5646
+ string2()
5647
+ ]);
5648
+ var OmoModelRefObjectSchema = object({
5649
+ model: string2(),
5650
+ reasoning: OmoReasoningSchema.optional(),
5651
+ temperature: number2().min(0).max(2).optional(),
5652
+ top_p: number2().min(0).max(1).optional(),
5653
+ max_tokens: number2().int().positive().optional(),
5654
+ provider_options: record(string2(), unknown()).optional()
5655
+ }).strict();
5656
+ var OmoModelRefSchema = union([string2(), OmoModelRefObjectSchema]);
5589
5657
 
5590
5658
  // ../../../../omo-config-core/src/schema/fallback-models.ts
5591
5659
  var OmoThinkingConfigSchema = object({
5592
5660
  type: _enum(["enabled", "disabled"]),
5593
5661
  budgetTokens: number2().optional()
5594
5662
  }).strict();
5595
- var OmoReasoningEffortSchema = _enum(["none", "minimal", "low", "medium", "high", "xhigh", "max"]);
5596
- var OmoFallbackModelObjectSchema = object({
5663
+ var OmoReasoningEffortSchema = OmoReasoningSchema;
5664
+ function isRecord(value) {
5665
+ return typeof value === "object" && value !== null && !Array.isArray(value);
5666
+ }
5667
+ function canonicalReasoning(value) {
5668
+ if (typeof value !== "string")
5669
+ return;
5670
+ const normalized = normalizeReasoning(value);
5671
+ return normalized.level ?? normalized.passthrough;
5672
+ }
5673
+ function canonicalModelString(model) {
5674
+ const colon = splitReasoningSuffix(model, { allowMaxSuffix: true });
5675
+ if (colon.level !== undefined)
5676
+ return `${colon.base}:${colon.level}`;
5677
+ const trimmed = model.trim();
5678
+ const parenthesized = trimmed.match(/^(.*)\(([^()]+)\)\s*$/);
5679
+ const spaced = parenthesized === null ? trimmed.match(/^(.*\S)\s+([a-z][a-z0-9_-]*)$/i) : null;
5680
+ const base = (parenthesized?.[1] ?? spaced?.[1])?.trim();
5681
+ const token = (parenthesized?.[2] ?? spaced?.[2])?.trim();
5682
+ if (base === undefined || token === undefined)
5683
+ return trimmed;
5684
+ const normalized = normalizeReasoning(token);
5685
+ return normalized.level === undefined ? trimmed : `${base}:${normalized.level}`;
5686
+ }
5687
+ function normalizeLegacyModelFields(entry) {
5688
+ const normalized = { ...entry };
5689
+ delete normalized["variant"];
5690
+ delete normalized["reasoningEffort"];
5691
+ delete normalized["thinking"];
5692
+ delete normalized["textVerbosity"];
5693
+ delete normalized["maxTokens"];
5694
+ delete normalized["providerOptions"];
5695
+ if (typeof entry["model"] === "string")
5696
+ normalized["model"] = canonicalModelString(entry["model"]);
5697
+ const explicitReasoning = canonicalReasoning(entry["reasoning"]);
5698
+ const variant = canonicalReasoning(entry["variant"]);
5699
+ const reasoningEffort = canonicalReasoning(entry["reasoningEffort"]);
5700
+ const thinking = isRecord(entry["thinking"]) ? entry["thinking"] : undefined;
5701
+ const reasoning = explicitReasoning ?? reasoningEffort ?? variant ?? (thinking?.["type"] === "disabled" ? "off" : undefined);
5702
+ if (reasoning !== undefined)
5703
+ normalized["reasoning"] = reasoning;
5704
+ const providerOptions = isRecord(entry["provider_options"]) ? { ...entry["provider_options"] } : isRecord(entry["providerOptions"]) ? { ...entry["providerOptions"] } : {};
5705
+ if (thinking?.["type"] === "enabled")
5706
+ providerOptions["thinking"] = { ...thinking };
5707
+ if (entry["textVerbosity"] !== undefined)
5708
+ providerOptions["textVerbosity"] = entry["textVerbosity"];
5709
+ if (Object.keys(providerOptions).length > 0)
5710
+ normalized["provider_options"] = providerOptions;
5711
+ if (entry["max_tokens"] !== undefined)
5712
+ normalized["max_tokens"] = entry["max_tokens"];
5713
+ else if (entry["maxTokens"] !== undefined)
5714
+ normalized["max_tokens"] = entry["maxTokens"];
5715
+ return normalized;
5716
+ }
5717
+ var OmoLegacyFallbackModelObjectInputSchema = object({
5597
5718
  model: string2(),
5598
- variant: string2().optional(),
5599
- reasoningEffort: OmoReasoningEffortSchema.optional(),
5719
+ reasoning: OmoReasoningSchema.optional(),
5600
5720
  temperature: number2().min(0).max(2).optional(),
5601
5721
  top_p: number2().min(0).max(1).optional(),
5722
+ max_tokens: number2().int().positive().optional(),
5723
+ provider_options: record(string2(), unknown()).optional(),
5724
+ variant: string2().optional(),
5725
+ reasoningEffort: OmoReasoningEffortSchema.optional(),
5726
+ thinking: OmoThinkingConfigSchema.optional(),
5727
+ textVerbosity: _enum(["low", "medium", "high"]).optional(),
5602
5728
  maxTokens: number2().optional(),
5603
- thinking: OmoThinkingConfigSchema.optional()
5729
+ providerOptions: record(string2(), unknown()).optional()
5604
5730
  }).strict();
5731
+ var OmoFallbackModelObjectSchema = preprocess((value) => isRecord(value) ? normalizeLegacyModelFields(value) : value, OmoLegacyFallbackModelObjectInputSchema);
5605
5732
  var OmoFallbackModelsSchema = union([
5606
5733
  string2(),
5607
5734
  array(string2()),
@@ -5610,19 +5737,16 @@ var OmoFallbackModelsSchema = union([
5610
5737
  ]);
5611
5738
 
5612
5739
  // ../../../../omo-config-core/src/schema/agent.ts
5613
- var OmoAgentModelEntrySchema = union([
5614
- string2(),
5615
- object({
5616
- model: string2(),
5617
- variant: string2().optional(),
5618
- reasoningEffort: OmoReasoningEffortSchema.optional()
5619
- }).strict()
5620
- ]);
5621
- var OmoAgentDefSchema = object({
5740
+ function isRecord2(value) {
5741
+ return typeof value === "object" && value !== null && !Array.isArray(value);
5742
+ }
5743
+ var OmoAgentModelEntrySchema = union([string2(), OmoFallbackModelObjectSchema]);
5744
+ var OmoAgentDefInputSchema = object({
5622
5745
  description: string2().optional(),
5623
5746
  prompt: string2().optional(),
5624
5747
  model: string2().optional(),
5625
5748
  models: array(OmoAgentModelEntrySchema).optional(),
5749
+ reasoning: OmoReasoningSchema.optional(),
5626
5750
  variant: string2().optional(),
5627
5751
  reasoningEffort: OmoReasoningEffortSchema.optional(),
5628
5752
  tools: record(string2(), boolean2()).optional(),
@@ -5635,16 +5759,24 @@ var OmoAgentDefSchema = object({
5635
5759
  temperature: number2().min(0).max(2).optional(),
5636
5760
  disable: boolean2().optional()
5637
5761
  }).strict();
5762
+ var OmoAgentDefSchema = preprocess((value) => isRecord2(value) ? normalizeLegacyModelFields(value) : value, OmoAgentDefInputSchema);
5638
5763
  var OmoAgentsConfigSchema = record(string2(), OmoAgentDefSchema);
5639
5764
 
5640
5765
  // ../../../../omo-config-core/src/schema/category.ts
5641
- var OmoCategoryConfigSchema = object({
5766
+ function isRecord3(value) {
5767
+ return typeof value === "object" && value !== null && !Array.isArray(value);
5768
+ }
5769
+ var OmoCategoryConfigObjectSchema = object({
5642
5770
  description: string2().optional(),
5643
5771
  model: string2().optional(),
5644
- fallback_models: OmoFallbackModelsSchema.optional(),
5645
- variant: string2().optional(),
5772
+ models: array(union([string2(), OmoFallbackModelObjectSchema])).optional(),
5773
+ reasoning: OmoReasoningSchema.optional(),
5646
5774
  temperature: number2().min(0).max(2).optional(),
5647
5775
  top_p: number2().min(0).max(1).optional(),
5776
+ max_tokens: number2().int().positive().optional(),
5777
+ provider_options: record(string2(), unknown()).optional(),
5778
+ fallback_models: OmoFallbackModelsSchema.optional(),
5779
+ variant: string2().optional(),
5648
5780
  maxTokens: number2().optional(),
5649
5781
  thinking: OmoThinkingConfigSchema.optional(),
5650
5782
  reasoningEffort: OmoReasoningEffortSchema.optional(),
@@ -5653,8 +5785,10 @@ var OmoCategoryConfigSchema = object({
5653
5785
  prompt_append: string2().optional(),
5654
5786
  max_prompt_tokens: number2().int().positive().optional(),
5655
5787
  is_unstable_agent: boolean2().optional(),
5656
- disable: boolean2().optional()
5788
+ disable: boolean2().optional(),
5789
+ warn_unavailable: boolean2().optional()
5657
5790
  }).strict();
5791
+ var OmoCategoryConfigSchema = preprocess((value) => isRecord3(value) ? normalizeLegacyModelFields(value) : value, OmoCategoryConfigObjectSchema);
5658
5792
  var OmoCategoriesConfigSchema = record(string2(), OmoCategoryConfigSchema);
5659
5793
 
5660
5794
  // ../../../../omo-config-core/src/schema/harness.ts
@@ -5682,13 +5816,19 @@ var OmoCodegraphSettingsSchema = OmoCodegraphSettingsLayerSchema.extend({
5682
5816
  }).strict();
5683
5817
 
5684
5818
  // ../../../../omo-config-core/src/schema/model-catalog.ts
5685
- var OmoModelCatalogEntrySchema = object({
5819
+ function isRecord4(value) {
5820
+ return typeof value === "object" && value !== null && !Array.isArray(value);
5821
+ }
5822
+ var OmoModelCatalogEntryInputSchema = object({
5686
5823
  model: string2(),
5824
+ reasoning: OmoReasoningSchema.optional(),
5687
5825
  variant: string2().optional(),
5688
5826
  reasoningEffort: OmoReasoningEffortSchema.optional()
5689
5827
  }).strict();
5828
+ var OmoModelCatalogEntrySchema = preprocess((value) => isRecord4(value) ? normalizeLegacyModelFields(value) : value, OmoModelCatalogEntryInputSchema);
5690
5829
  var OmoModelCatalogSchema = record(string2(), OmoModelCatalogEntrySchema);
5691
- var OmoModelCatalogEntryLayerSchema = OmoModelCatalogEntrySchema.partial();
5830
+ var OmoModelCatalogEntryLayerInputSchema = OmoModelCatalogEntryInputSchema.partial();
5831
+ var OmoModelCatalogEntryLayerSchema = preprocess((value) => isRecord4(value) ? normalizeLegacyModelFields(value) : value, OmoModelCatalogEntryLayerInputSchema);
5692
5832
  var OmoModelCatalogLayerSchema = record(string2(), OmoModelCatalogEntryLayerSchema);
5693
5833
 
5694
5834
  // ../../../../omo-config-core/src/schema/task.ts
@@ -5702,6 +5842,9 @@ var OmoTaskTeamSettingsSchema = object({
5702
5842
  max_parallel_members: number2().int().min(1).max(8).default(4),
5703
5843
  max_wall_clock_minutes: number2().int().positive().default(120)
5704
5844
  }).strict();
5845
+ var OmoTaskWarningsSchema = object({
5846
+ unavailable_categories: boolean2().default(true)
5847
+ }).strict();
5705
5848
  var OmoTaskSettingsSchema = object({
5706
5849
  default_execution_mode: _enum(["in-process", "process"]).default("in-process"),
5707
5850
  default_concurrency: number2().int().positive().default(5),
@@ -5712,6 +5855,7 @@ var OmoTaskSettingsSchema = object({
5712
5855
  ttl_ms: number2().int().positive().default(86400000),
5713
5856
  state_dir: string2().optional(),
5714
5857
  reattach_on_reconcile: boolean2().optional(),
5858
+ warnings: OmoTaskWarningsSchema.default({ unavailable_categories: true }),
5715
5859
  wait: OmoTaskWaitSchema.default({ min_ms: 5000, default_ms: 60000, max_ms: 600000 }),
5716
5860
  team: OmoTaskTeamSettingsSchema.default({
5717
5861
  max_members: 8,
@@ -5729,6 +5873,9 @@ var OmoTaskTeamSettingsLayerSchema = object({
5729
5873
  max_parallel_members: number2().int().min(1).max(8).optional(),
5730
5874
  max_wall_clock_minutes: number2().int().positive().optional()
5731
5875
  }).strict();
5876
+ var OmoTaskWarningsLayerSchema = object({
5877
+ unavailable_categories: boolean2().optional()
5878
+ }).strict();
5732
5879
  var OmoTaskSettingsLayerSchema = object({
5733
5880
  default_execution_mode: _enum(["in-process", "process"]).optional(),
5734
5881
  default_concurrency: number2().int().positive().optional(),
@@ -5739,6 +5886,7 @@ var OmoTaskSettingsLayerSchema = object({
5739
5886
  ttl_ms: number2().int().positive().optional(),
5740
5887
  state_dir: string2().optional(),
5741
5888
  reattach_on_reconcile: boolean2().optional(),
5889
+ warnings: OmoTaskWarningsLayerSchema.optional(),
5742
5890
  wait: OmoTaskWaitLayerSchema.optional(),
5743
5891
  team: OmoTaskTeamSettingsLayerSchema.optional()
5744
5892
  }).strict();
@@ -7239,7 +7387,8 @@ function mergeOmoConfigRecords(base, override, parentKey) {
7239
7387
  }
7240
7388
 
7241
7389
  // ../../../../omo-config-core/src/loader/paths.ts
7242
- import { dirname as dirname2, isAbsolute as isAbsolute2, join as join7, posix, relative, resolve as resolve3 } from "node:path";
7390
+ import { userInfo } from "node:os";
7391
+ import { dirname as dirname2, join as join7, posix, resolve as resolve3 } from "node:path";
7243
7392
 
7244
7393
  // ../../../../omo-config-core/src/internal/posix-path.ts
7245
7394
  function toPosixPath(path) {
@@ -7257,10 +7406,7 @@ var DEFAULT_READ_FILE_SYSTEM = {
7257
7406
 
7258
7407
  // ../../../../omo-config-core/src/loader/paths.ts
7259
7408
  var MAX_PROJECT_CONFIG_DIRECTORY_DEPTH = 256;
7260
- function containsPath(parent, child) {
7261
- const pathToChild = relative(parent, child);
7262
- return pathToChild === "" || !pathToChild.startsWith("..") && !isAbsolute2(pathToChild);
7263
- }
7409
+ var ACCOUNT_HOME_DIR = userInfo().homedir;
7264
7410
  function resolveHomeDir(env = process.env) {
7265
7411
  const homeDir = env.HOME ?? env.USERPROFILE ?? process.cwd();
7266
7412
  return homeDir.startsWith("/") ? posix.resolve(homeDir) : toPosixPath(resolve3(homeDir));
@@ -7312,15 +7458,14 @@ function realpathOrSelf(path, fileSystem) {
7312
7458
  return path;
7313
7459
  }
7314
7460
  }
7315
- function findProjectConfigPathsFarthestFirst(cwd, homeDir, fileSystem) {
7461
+ function findProjectConfigPathsFarthestFirst(cwd, homeDir, fileSystem, accountHomeDir = homeDir) {
7316
7462
  const startDir = resolve3(cwd);
7317
- const resolvedHomeDir = resolve3(homeDir);
7318
- const realHomeDir = realpathOrSelf(resolvedHomeDir, fileSystem);
7319
- const stopDir = containsPath(realHomeDir, realpathOrSelf(startDir, fileSystem)) ? realHomeDir : null;
7463
+ const boundaryDirs = [...new Set([resolve3(homeDir), resolve3(accountHomeDir)])];
7464
+ const realBoundaryDirs = new Set(boundaryDirs.map((path) => realpathOrSelf(path, fileSystem)));
7320
7465
  const nearestFirst = [];
7321
7466
  let currentDir = startDir;
7322
7467
  for (let depth = 0;depth < MAX_PROJECT_CONFIG_DIRECTORY_DEPTH; depth += 1) {
7323
- const isHomeDir = currentDir === resolvedHomeDir || stopDir !== null && realpathOrSelf(currentDir, fileSystem) === stopDir;
7468
+ const isHomeDir = boundaryDirs.includes(currentDir) || realBoundaryDirs.has(realpathOrSelf(currentDir, fileSystem));
7324
7469
  const configPath = isHomeDir ? null : detectOmoJsonPath(currentDir, fileSystem);
7325
7470
  if (configPath !== null)
7326
7471
  nearestFirst.push(configPath);
@@ -7337,7 +7482,7 @@ function resolveOmoConfigPaths(options) {
7337
7482
  const fileSystem = options.fileSystem ?? DEFAULT_READ_FILE_SYSTEM;
7338
7483
  const env = options.env ?? process.env;
7339
7484
  const userPath = detectUserOmoJsonPath(env, fileSystem);
7340
- const projectPaths = findProjectConfigPathsFarthestFirst(options.cwd, resolveHomeDir(env), fileSystem);
7485
+ const projectPaths = findProjectConfigPathsFarthestFirst(options.cwd, resolveHomeDir(env), fileSystem, ACCOUNT_HOME_DIR);
7341
7486
  return [
7342
7487
  { path: userPath, scope: "user" },
7343
7488
  ...projectPaths.map((path) => ({ path, scope: "project" }))
@@ -7972,6 +8117,23 @@ function prepareTargetWrite(input) {
7972
8117
  const edits = [...collectMigrationEdits(merged.additions), { path: ["_migrations"], value: marker }];
7973
8118
  return { diagnostics: merged.diagnostics, document, edits };
7974
8119
  }
8120
+ function prepareTargetReplacement(input) {
8121
+ const marker = markerValue(input.target, input.migrationId, input.targetPath);
8122
+ const document = { ...input.document, _migrations: marker };
8123
+ validateTarget(input.targetPath, document);
8124
+ const edits = [];
8125
+ for (const key of Object.keys(input.target)) {
8126
+ if (key !== "_migrations" && !Object.prototype.hasOwnProperty.call(input.document, key)) {
8127
+ edits.push({ path: [key], value: undefined });
8128
+ }
8129
+ }
8130
+ for (const [key, value] of Object.entries(input.document)) {
8131
+ if (key !== "_migrations")
8132
+ edits.push({ path: [key], value });
8133
+ }
8134
+ edits.push({ path: ["_migrations"], value: marker });
8135
+ return { diagnostics: [], document, edits };
8136
+ }
7975
8137
  function writePreparedTarget(input) {
7976
8138
  input.writeTarget({
7977
8139
  edits: input.prepared.edits,
@@ -8004,9 +8166,17 @@ function parseJournal(value) {
8004
8166
  if (!isPlainObject3(value["targetWrite"]) || !isPlainObject3(value["targetWrite"]["additions"])) {
8005
8167
  throw new Error("Migration journal target write is invalid");
8006
8168
  }
8169
+ const targetWriteMode = value["targetWrite"]["mode"];
8170
+ if (targetWriteMode !== undefined && targetWriteMode !== "replace-target") {
8171
+ throw new Error("Migration journal target write mode is invalid");
8172
+ }
8007
8173
  if (typeof value["targetWritten"] !== "boolean" || !Array.isArray(value["completedMoves"])) {
8008
8174
  throw new Error("Migration journal completion state is invalid");
8009
8175
  }
8176
+ const diagnostics = value["diagnostics"];
8177
+ if (diagnostics !== undefined && (!Array.isArray(diagnostics) || !diagnostics.every((entry) => typeof entry === "string"))) {
8178
+ throw new Error("Migration journal diagnostics are invalid");
8179
+ }
8010
8180
  if (!value["completedMoves"].every((path) => typeof path === "string")) {
8011
8181
  throw new Error("Migration journal completed moves are invalid");
8012
8182
  }
@@ -8022,9 +8192,13 @@ function parseJournal(value) {
8022
8192
  return {
8023
8193
  backupMoves,
8024
8194
  completedMoves: [...value["completedMoves"]],
8195
+ diagnostics: diagnostics === undefined ? [] : [...diagnostics],
8025
8196
  migrationId: value["migrationId"],
8026
8197
  targetPath: value["targetPath"],
8027
- targetWrite: { additions: { ...value["targetWrite"]["additions"] } },
8198
+ targetWrite: {
8199
+ additions: { ...value["targetWrite"]["additions"] },
8200
+ ...targetWriteMode === undefined ? {} : { mode: targetWriteMode }
8201
+ },
8028
8202
  targetWritten: value["targetWritten"],
8029
8203
  version: 1
8030
8204
  };
@@ -8215,7 +8389,12 @@ function resumeMigrationJournal(input) {
8215
8389
  input.renewLock();
8216
8390
  const target = targetDocument(journal.targetPath, input.fileSystem);
8217
8391
  if (!hasMigrationMarker(target, journal.migrationId)) {
8218
- const prepared = prepareTargetWrite({
8392
+ const prepared = journal.targetWrite.mode === "replace-target" ? prepareTargetReplacement({
8393
+ document: journal.targetWrite.additions,
8394
+ migrationId: journal.migrationId,
8395
+ target,
8396
+ targetPath: journal.targetPath
8397
+ }) : prepareTargetWrite({
8219
8398
  additions: journal.targetWrite.additions,
8220
8399
  migrationId: journal.migrationId,
8221
8400
  target,
@@ -8319,11 +8498,17 @@ function executePlan(input) {
8319
8498
  assertSafeSourcePaths(plan.sources, protectedPaths);
8320
8499
  const existingSources = plan.sources.filter((source) => fileSystem.existsSync(source.path));
8321
8500
  const target = targetDocument(plan.targetPath, fileSystem);
8322
- if (!shouldRunMigration({ legacySourcesExist: existingSources.length > 0, migrationId: plan.id, target })) {
8501
+ const replaceTarget = plan.mode === "replace-target";
8502
+ if (!shouldRunMigration({
8503
+ legacySourcesExist: replaceTarget ? fileSystem.existsSync(plan.targetPath) : existingSources.length > 0,
8504
+ migrationId: plan.id,
8505
+ target
8506
+ })) {
8323
8507
  return { diagnostics: [], journalResumed, status: "skipped" };
8324
8508
  }
8325
- const transformed = transformResult(plan.transform(loadSources(existingSources, fileSystem)));
8326
- const prepared = prepareTargetWrite({ additions: transformed.document, migrationId: plan.id, target, targetPath: plan.targetPath });
8509
+ const loaded = replaceTarget ? [{ path: plan.targetPath, value: target }] : loadSources(existingSources, fileSystem);
8510
+ const transformed = transformResult(plan.transform(loaded));
8511
+ const prepared = replaceTarget ? prepareTargetReplacement({ document: transformed.document, migrationId: plan.id, target, targetPath: plan.targetPath }) : prepareTargetWrite({ additions: transformed.document, migrationId: plan.id, target, targetPath: plan.targetPath });
8327
8512
  const diagnostics = [...transformed.diagnostics, ...prepared.diagnostics];
8328
8513
  const moves = backupMoves(existingSources, plan.id, fileSystem, protectedPaths);
8329
8514
  const preview = { backupMoves: moves, targetPath: plan.targetPath, transform: transformed.document };
@@ -8333,9 +8518,13 @@ function executePlan(input) {
8333
8518
  const journal = {
8334
8519
  backupMoves: moves,
8335
8520
  completedMoves: [],
8521
+ diagnostics,
8336
8522
  migrationId: plan.id,
8337
8523
  targetPath: plan.targetPath,
8338
- targetWrite: { additions: transformed.document },
8524
+ targetWrite: {
8525
+ additions: transformed.document,
8526
+ ...replaceTarget ? { mode: "replace-target" } : {}
8527
+ },
8339
8528
  targetWritten: false,
8340
8529
  version: 1
8341
8530
  };
@@ -8399,17 +8588,17 @@ import { existsSync as existsSync6 } from "node:fs";
8399
8588
  import { posix as posix4, win32 } from "node:path";
8400
8589
  var MIGRATION_ID = "2026-07-codex-config-jsonc";
8401
8590
  var OMO_SCHEMA_URL = "https://raw.githubusercontent.com/code-yeongyu/oh-my-openagent/dev/assets/omo.schema.json";
8402
- function isRecord(value) {
8591
+ function isRecord5(value) {
8403
8592
  return typeof value === "object" && value !== null && !Array.isArray(value);
8404
8593
  }
8405
8594
  function recordAt(value, key) {
8406
8595
  const candidate = value[key];
8407
- return isRecord(candidate) ? candidate : undefined;
8596
+ return isRecord5(candidate) ? candidate : undefined;
8408
8597
  }
8409
8598
  function migrationHistory(sources, configPath) {
8410
8599
  const history = [];
8411
8600
  for (const source of sources) {
8412
- if (!isRecord(source.value))
8601
+ if (!isRecord5(source.value))
8413
8602
  continue;
8414
8603
  for (const key of ["_migrations", "appliedMigrations"]) {
8415
8604
  const values = source.value[key];
@@ -8425,7 +8614,7 @@ function migrationHistory(sources, configPath) {
8425
8614
  }
8426
8615
  function transformConfigJsonc(configPath, sources) {
8427
8616
  const config2 = sources.find((source) => source.path === configPath);
8428
- const legacy = config2 === undefined || !isRecord(config2.value) ? {} : config2.value;
8617
+ const legacy = config2 === undefined || !isRecord5(config2.value) ? {} : config2.value;
8429
8618
  const omo = recordAt(legacy, "[omo]");
8430
8619
  const senpi = recordAt(legacy, "[senpi]");
8431
8620
  const history = migrationHistory(sources, configPath);
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sisyphuslabs/codex-codegraph",
3
- "version": "4.19.3",
3
+ "version": "4.19.4",
4
4
  "description": "Codex plugin MCP wrapper for CodeGraph.",
5
5
  "type": "module",
6
6
  "private": true,
@@ -115,6 +115,7 @@ describe("CodeGraph SessionStart hook", () => {
115
115
  env: {},
116
116
  stdin: Readable.from(["{}"]),
117
117
  stdout: { write: (chunk) => stdout.push(chunk) },
118
+ sweepZombies: () => undefined,
118
119
  spawnWorker: (invocation) => spawned.push(invocation),
119
120
  });
120
121
 
@@ -143,6 +144,7 @@ describe("CodeGraph SessionStart hook", () => {
143
144
  env: { HOME: homeDir },
144
145
  stdin: Readable.from(["{}"]),
145
146
  stdout: { write: (chunk) => stdout.push(chunk) },
147
+ sweepZombies: () => undefined,
146
148
  spawnWorker: (invocation) => spawned.push(invocation),
147
149
  });
148
150
 
@@ -174,6 +176,7 @@ describe("CodeGraph SessionStart hook", () => {
174
176
  env: { HOME: homeDir },
175
177
  stdin: Readable.from(["{}"]),
176
178
  stdout: { write: (chunk) => stdout.push(chunk) },
179
+ sweepZombies: () => undefined,
177
180
  spawnWorker: (invocation) => spawned.push(invocation),
178
181
  });
179
182
 
@@ -201,6 +204,7 @@ describe("CodeGraph SessionStart hook", () => {
201
204
  env: { CODEX_CODEGRAPH_ENABLED: "0", HOME: homeDir },
202
205
  stdin: Readable.from(["{}"]),
203
206
  stdout: { write: (chunk) => stdout.push(chunk) },
207
+ sweepZombies: () => undefined,
204
208
  spawnWorker: (invocation) => spawned.push(invocation),
205
209
  });
206
210
 
@@ -278,6 +282,7 @@ describe("CodeGraph SessionStart hook", () => {
278
282
  env: { HOME: homeDir, KEEP: "1" },
279
283
  stdin: Readable.from(["{}"]),
280
284
  stdout: { write: (chunk) => stdout.push(chunk) },
285
+ sweepZombies: () => undefined,
281
286
  spawnWorker: (invocation) => spawned.push(invocation),
282
287
  });
283
288
 
@@ -302,6 +307,7 @@ describe("CodeGraph SessionStart hook", () => {
302
307
  env: {},
303
308
  stdin: Readable.from(["{not-json"]),
304
309
  stdout: { write: (chunk) => stdout.push(chunk) },
310
+ sweepZombies: () => undefined,
305
311
  spawnWorker: (invocation) => spawned.push(invocation),
306
312
  });
307
313
 
@@ -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 4.19.3) Checking Comments"
11
+ "statusMessage": "(OmO 4.19.4) Checking Comments"
12
12
  }
13
13
  ]
14
14
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-comment-checker",
3
- "version": "4.19.3",
3
+ "version": "4.19.4",
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 4.19.3) Recommending Git Bash MCP"
11
+ "statusMessage": "(OmO 4.19.4) 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 4.19.3) Resetting Git Bash MCP Reminder"
23
+ "statusMessage": "(OmO 4.19.4) 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": "4.19.3",
3
+ "version": "4.19.4",
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 4.19.3) Verifying LazyCodex Executor Evidence"
11
+ "statusMessage": "(OmO 4.19.4) 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": "4.19.3",
3
+ "version": "4.19.4",
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": "4.19.3",
4
- "inputDigest": "sha256:dfeeeb0d34b6628116df23520c551f9da58b8593111a0a08ffb3f04ed8918bff",
3
+ "version": "4.19.4",
4
+ "inputDigest": "sha256:a327f51e89b7da87ac4e114b07551b3345e45ad919c6ca2ebed067aaa954b004",
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 4.19.3) Checking LSP Diagnostics"
11
+ "statusMessage": "(OmO 4.19.4) 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 4.19.3) Resetting LSP Diagnostics Cache"
24
+ "statusMessage": "(OmO 4.19.4) 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": "4.19.3",
3
+ "version": "4.19.4",
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",
@@ -3883,7 +3883,7 @@ var MODEL_CONTEXT_BUDGETS = [
3883
3883
  effectivePercent: DEFAULT_EFFECTIVE_CONTEXT_WINDOW_PERCENT
3884
3884
  },
3885
3885
  { slug: "gpt-5.5", contextWindowTokens: 272000, effectivePercent: DEFAULT_EFFECTIVE_CONTEXT_WINDOW_PERCENT },
3886
- { slug: "gpt-5.4-mini", contextWindowTokens: 272000, effectivePercent: DEFAULT_EFFECTIVE_CONTEXT_WINDOW_PERCENT },
3886
+ { slug: "gpt-5.6-luna-fast", contextWindowTokens: 272000, effectivePercent: DEFAULT_EFFECTIVE_CONTEXT_WINDOW_PERCENT },
3887
3887
  {
3888
3888
  slug: "codex-auto-review",
3889
3889
  contextWindowTokens: 272000,