lazycodex-ai 5.0.0-beta.52 → 5.0.0-beta.53

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 (61) hide show
  1. package/README.ja.md +11 -18
  2. package/README.ko.md +10 -17
  3. package/README.md +11 -18
  4. package/README.ru.md +11 -18
  5. package/README.zh-cn.md +11 -18
  6. package/dist/cli/index.js +109 -42
  7. package/dist/cli-node/index.js +109 -42
  8. package/package.json +1 -1
  9. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  10. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  11. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  12. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  13. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  14. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  15. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  16. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  17. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  18. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +2 -2
  19. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  20. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  21. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  22. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  23. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  24. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  25. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  26. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  27. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  28. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  29. package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +1 -1
  30. package/packages/omo-codex/plugin/components/ulw-execute-continuation/package.json +1 -1
  31. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +5 -5
  32. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  33. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  34. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  35. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  36. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  37. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  38. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  39. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  40. package/packages/omo-codex/plugin/hooks/post-tool-use-recording-spawn-admission.json +1 -1
  41. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  42. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  43. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  44. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  45. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  46. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  47. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  48. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +1 -1
  49. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  50. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  51. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  52. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  53. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  54. package/packages/omo-codex/plugin/package-lock.json +12 -12
  55. package/packages/omo-codex/plugin/package.json +1 -1
  56. package/packages/omo-codex/plugin/skills/refactor/SKILL.md +3 -3
  57. package/packages/omo-codex/plugin/skills/ulw-execute/SKILL.md +5 -5
  58. package/packages/omo-codex/scripts/install-dist/install-local.mjs +2 -2
  59. package/packages/shared-skills/skills/refactor/SKILL.md +3 -3
  60. package/packages/shared-skills/skills/review-work/SKILL.md +1 -1
  61. package/packages/shared-skills/skills/ulw-execute/SKILL.md +5 -5
@@ -65,7 +65,7 @@ var package_default;
65
65
  var init_package = __esm(() => {
66
66
  package_default = {
67
67
  name: "oh-my-opencode",
68
- version: "5.0.0-beta.52",
68
+ version: "5.0.0-beta.53",
69
69
  description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
70
70
  main: "./dist/index.js",
71
71
  types: "dist/index.d.ts",
@@ -249,7 +249,7 @@ var init_package = __esm(() => {
249
249
  zod: "^4.4.3"
250
250
  },
251
251
  devDependencies: {
252
- "@code-yeongyu/senpi": "2026.9.10",
252
+ "@code-yeongyu/senpi": "2026.9.10-2",
253
253
  "@oh-my-opencode/agents-md-core": "workspace:*",
254
254
  "@oh-my-opencode/ast-grep-mcp": "workspace:*",
255
255
  "@oh-my-opencode/boulder-state": "workspace:*",
@@ -290,18 +290,18 @@ var init_package = __esm(() => {
290
290
  typescript: "^7.0.2"
291
291
  },
292
292
  optionalDependencies: {
293
- "oh-my-opencode-darwin-arm64": "5.0.0-beta.52",
294
- "oh-my-opencode-darwin-x64": "5.0.0-beta.52",
295
- "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.52",
296
- "oh-my-opencode-linux-arm64": "5.0.0-beta.52",
297
- "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.52",
298
- "oh-my-opencode-linux-x64": "5.0.0-beta.52",
299
- "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.52",
300
- "oh-my-opencode-linux-x64-musl": "5.0.0-beta.52",
301
- "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.52",
302
- "oh-my-opencode-windows-arm64": "5.0.0-beta.52",
303
- "oh-my-opencode-windows-x64": "5.0.0-beta.52",
304
- "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.52"
293
+ "oh-my-opencode-darwin-arm64": "5.0.0-beta.53",
294
+ "oh-my-opencode-darwin-x64": "5.0.0-beta.53",
295
+ "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.53",
296
+ "oh-my-opencode-linux-arm64": "5.0.0-beta.53",
297
+ "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.53",
298
+ "oh-my-opencode-linux-x64": "5.0.0-beta.53",
299
+ "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.53",
300
+ "oh-my-opencode-linux-x64-musl": "5.0.0-beta.53",
301
+ "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.53",
302
+ "oh-my-opencode-windows-arm64": "5.0.0-beta.53",
303
+ "oh-my-opencode-windows-x64": "5.0.0-beta.53",
304
+ "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.53"
305
305
  },
306
306
  overrides: {
307
307
  "@earendil-works/pi-agent-core": "0.84.2",
@@ -72918,6 +72918,25 @@ var init_model_catalog = __esm(() => {
72918
72918
  OmoModelCatalogLayerSchema = record(string2(), OmoModelCatalogEntryLayerSchema);
72919
72919
  });
72920
72920
 
72921
+ // packages/omo-config-core/src/schema/model-profile.ts
72922
+ function isRecord8(value) {
72923
+ return typeof value === "object" && value !== null && !Array.isArray(value);
72924
+ }
72925
+ var OmoModelProfileInputSchema, OmoModelProfileSchema, OmoModelProfilesSchema, OmoModelProfileLayerInputSchema, OmoModelProfileLayerSchema, OmoModelProfilesLayerSchema;
72926
+ var init_model_profile = __esm(() => {
72927
+ init_zod();
72928
+ init_fallback_models();
72929
+ OmoModelProfileInputSchema = object({
72930
+ display_name: string2().optional(),
72931
+ models: array(union([string2(), OmoFallbackModelObjectSchema])).optional()
72932
+ }).strict();
72933
+ OmoModelProfileSchema = preprocess((value) => isRecord8(value) ? normalizeLegacyModelFields(value) : value, OmoModelProfileInputSchema);
72934
+ OmoModelProfilesSchema = record(string2(), OmoModelProfileSchema);
72935
+ OmoModelProfileLayerInputSchema = OmoModelProfileInputSchema.partial();
72936
+ OmoModelProfileLayerSchema = preprocess((value) => isRecord8(value) ? normalizeLegacyModelFields(value) : value, OmoModelProfileLayerInputSchema);
72937
+ OmoModelProfilesLayerSchema = record(string2(), OmoModelProfileLayerSchema);
72938
+ });
72939
+
72921
72940
  // packages/omo-config-core/src/schema/task.ts
72922
72941
  import { availableParallelism } from "node:os";
72923
72942
  function resolveOmoTaskSettings(input, resolveParallelism = availableParallelism) {
@@ -73110,6 +73129,7 @@ var init_config = __esm(() => {
73110
73129
  init_git_master();
73111
73130
  init_memory();
73112
73131
  init_model_catalog();
73132
+ init_model_profile();
73113
73133
  init_task();
73114
73134
  init_team();
73115
73135
  init_telemetry();
@@ -73123,6 +73143,8 @@ var init_config = __esm(() => {
73123
73143
  task: OmoTaskSettingsLayerSchema.optional(),
73124
73144
  teams: OmoTeamsConfigLayerSchema.optional(),
73125
73145
  models: OmoModelCatalogLayerSchema.optional(),
73146
+ model_profiles: OmoModelProfilesLayerSchema.optional(),
73147
+ model_profile: string2().optional(),
73126
73148
  memory: OmoMemorySettingsLayerSchema.optional(),
73127
73149
  telemetry: OmoTelemetrySettingsLayerSchema.optional()
73128
73150
  }).strict();
@@ -73134,6 +73156,8 @@ var init_config = __esm(() => {
73134
73156
  task: OmoTaskSettingsLayerSchema.optional(),
73135
73157
  teams: OmoTeamsConfigLayerSchema.optional(),
73136
73158
  models: OmoModelCatalogLayerSchema.optional(),
73159
+ model_profiles: OmoModelProfilesLayerSchema.optional(),
73160
+ model_profile: string2().optional(),
73137
73161
  memory: OmoMemorySettingsLayerSchema.optional(),
73138
73162
  telemetry: OmoTelemetrySettingsLayerSchema.optional(),
73139
73163
  "[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
@@ -73149,6 +73173,8 @@ var init_config = __esm(() => {
73149
73173
  task: OmoTaskSettingsSchema.optional(),
73150
73174
  teams: OmoTeamsConfigSchema.optional(),
73151
73175
  models: OmoModelCatalogSchema.optional(),
73176
+ model_profiles: OmoModelProfilesSchema.optional(),
73177
+ model_profile: string2().optional(),
73152
73178
  memory: OmoMemorySettingsSchema.optional(),
73153
73179
  telemetry: OmoTelemetrySettingsSchema.optional(),
73154
73180
  "[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
@@ -73167,6 +73193,8 @@ var init_config = __esm(() => {
73167
73193
  task: OmoTaskSettingsLayerSchema.optional(),
73168
73194
  teams: OmoTeamsConfigLayerSchema.optional(),
73169
73195
  models: OmoModelCatalogLayerSchema.optional(),
73196
+ model_profiles: OmoModelProfilesLayerSchema.optional(),
73197
+ model_profile: string2().optional(),
73170
73198
  memory: OmoMemorySettingsLayerSchema.optional(),
73171
73199
  telemetry: OmoTelemetrySettingsLayerSchema.optional(),
73172
73200
  "[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
@@ -73189,6 +73217,7 @@ var init_schema = __esm(() => {
73189
73217
  init_harness();
73190
73218
  init_memory();
73191
73219
  init_model_catalog();
73220
+ init_model_profile();
73192
73221
  init_model_ref();
73193
73222
  init_task();
73194
73223
  init_team();
@@ -73445,21 +73474,21 @@ function hasUnsafeUnrecognizedKey(issues) {
73445
73474
  function hasTamperedPrototype(value) {
73446
73475
  if (Array.isArray(value))
73447
73476
  return value.some((entry) => hasTamperedPrototype(entry));
73448
- if (!isRecord8(value))
73477
+ if (!isRecord9(value))
73449
73478
  return false;
73450
73479
  const prototype = Object.getPrototypeOf(value);
73451
73480
  if (prototype !== Object.prototype && prototype !== null)
73452
73481
  return true;
73453
73482
  return Object.values(value).some((entry) => hasTamperedPrototype(entry));
73454
73483
  }
73455
- function isRecord8(value) {
73484
+ function isRecord9(value) {
73456
73485
  return typeof value === "object" && value !== null && !Array.isArray(value);
73457
73486
  }
73458
73487
  function containerAt(record, path) {
73459
73488
  let container = record;
73460
73489
  for (const segment of path) {
73461
73490
  const next = container[segment];
73462
- if (!isRecord8(next))
73491
+ if (!isRecord9(next))
73463
73492
  return null;
73464
73493
  container = next;
73465
73494
  }
@@ -73721,6 +73750,38 @@ function resolveCategoryDefinition(definition, catalog, cycleNames) {
73721
73750
  ...definition.fallback_models === undefined ? {} : { fallback_models: resolveFallbackModels(definition.fallback_models, catalog, cycleNames) }
73722
73751
  };
73723
73752
  }
73753
+ function resolveModelProfile(definition, catalog, cycleNames) {
73754
+ return {
73755
+ ...definition,
73756
+ ...definition.models === undefined ? {} : { models: definition.models.map((entry) => resolveModelEntry(entry, catalog, cycleNames)) }
73757
+ };
73758
+ }
73759
+ function profileShadowDiagnostics(view) {
73760
+ if (view.model_profiles === undefined || view.models === undefined)
73761
+ return [];
73762
+ return Object.keys(view.model_profiles).flatMap((name) => view.models?.[name] === undefined ? [] : [{
73763
+ kind: "validation",
73764
+ message: `Model profile "${name}" shadows a model catalog entry of the same name`,
73765
+ path: `model_profiles.${name}`
73766
+ }]);
73767
+ }
73768
+ function profileSpliceDiagnostics(section, definitions, profileNames) {
73769
+ if (definitions === undefined || profileNames.size === 0)
73770
+ return [];
73771
+ return Object.entries(definitions).flatMap(([name, definition]) => (definition.models ?? []).flatMap((entry, index) => typeof entry !== "string" || !profileNames.has(entry) ? [] : [{
73772
+ kind: "validation",
73773
+ message: `"${entry}" is a model profile; splicing a profile into a category chain is not supported yet`,
73774
+ path: `${section}.${name}.models.${index}`
73775
+ }]));
73776
+ }
73777
+ function modelProfileDiagnostics(view) {
73778
+ const profileNames = new Set(Object.keys(view.model_profiles ?? {}));
73779
+ return [
73780
+ ...profileShadowDiagnostics(view),
73781
+ ...profileSpliceDiagnostics("categories", view.categories, profileNames),
73782
+ ...profileSpliceDiagnostics("agents", view.agents, profileNames)
73783
+ ];
73784
+ }
73724
73785
  function cycleDiagnostics(catalog) {
73725
73786
  if (catalog === undefined)
73726
73787
  return [];
@@ -73731,9 +73792,10 @@ function cycleDiagnostics(catalog) {
73731
73792
  }));
73732
73793
  }
73733
73794
  function resolveModelReferences(view) {
73734
- const diagnostics = cycleDiagnostics(view.models);
73795
+ const cycles = cycleDiagnostics(view.models);
73796
+ const diagnostics = [...cycles, ...modelProfileDiagnostics(view)];
73735
73797
  const cycleNames = new Set;
73736
- for (const diagnostic of diagnostics) {
73798
+ for (const diagnostic of cycles) {
73737
73799
  const name = diagnostic.path.split(".")[1];
73738
73800
  if (name !== undefined)
73739
73801
  cycleNames.add(name);
@@ -73746,12 +73808,17 @@ function resolveModelReferences(view) {
73746
73808
  name,
73747
73809
  resolveCategoryDefinition(definition, view.models, cycleNames)
73748
73810
  ]));
73811
+ const modelProfiles = view.model_profiles === undefined ? undefined : Object.fromEntries(Object.entries(view.model_profiles).map(([name, definition]) => [
73812
+ name,
73813
+ resolveModelProfile(definition, view.models, cycleNames)
73814
+ ]));
73749
73815
  return {
73750
73816
  diagnostics,
73751
73817
  view: {
73752
73818
  ...view,
73753
73819
  ...agents === undefined ? {} : { agents },
73754
- ...categories === undefined ? {} : { categories }
73820
+ ...categories === undefined ? {} : { categories },
73821
+ ...modelProfiles === undefined ? {} : { model_profiles: modelProfiles }
73755
73822
  }
73756
73823
  };
73757
73824
  }
@@ -77086,7 +77153,7 @@ function shouldRetainLine(line, cutoffMs) {
77086
77153
  function parseDiagnosticLine(line) {
77087
77154
  try {
77088
77155
  const parsed = JSON.parse(line);
77089
- if (!isRecord10(parsed)) {
77156
+ if (!isRecord11(parsed)) {
77090
77157
  return null;
77091
77158
  }
77092
77159
  return parsed;
@@ -77097,7 +77164,7 @@ function parseDiagnosticLine(line) {
77097
77164
  throw error;
77098
77165
  }
77099
77166
  }
77100
- function isRecord10(value) {
77167
+ function isRecord11(value) {
77101
77168
  return value !== null && typeof value === "object" && !Array.isArray(value);
77102
77169
  }
77103
77170
  function trimToMaxBytes(lines) {
@@ -82471,7 +82538,7 @@ function coerceBool(value) {
82471
82538
  function coerceString(value) {
82472
82539
  return typeof value == "string" ? value : undefined;
82473
82540
  }
82474
- function isRecord11(value) {
82541
+ function isRecord12(value) {
82475
82542
  return typeof value == "object" && value !== null && !Array.isArray(value);
82476
82543
  }
82477
82544
  function toRfc3339(timestamp) {
@@ -82493,7 +82560,7 @@ function relocateInto(properties, key, value) {
82493
82560
  properties[key] = value;
82494
82561
  }
82495
82562
  function buildV1Event(message) {
82496
- const sourceProperties = isRecord11(message.properties) ? message.properties : {};
82563
+ const sourceProperties = isRecord12(message.properties) ? message.properties : {};
82497
82564
  const properties = {
82498
82565
  ...sourceProperties
82499
82566
  };
@@ -84523,7 +84590,7 @@ var package_default2;
84523
84590
  var init_package2 = __esm(() => {
84524
84591
  package_default2 = {
84525
84592
  name: "@oh-my-opencode/omo-codex",
84526
- version: "5.0.0-beta.52",
84593
+ version: "5.0.0-beta.53",
84527
84594
  type: "module",
84528
84595
  private: true,
84529
84596
  description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
@@ -90572,10 +90639,10 @@ function readCatalogMultiAgentVersion(model, cachePath) {
90572
90639
  } catch {
90573
90640
  return null;
90574
90641
  }
90575
- if (!isRecord9(cache) || !Array.isArray(cache.models))
90642
+ if (!isRecord10(cache) || !Array.isArray(cache.models))
90576
90643
  return null;
90577
90644
  for (const entry of cache.models) {
90578
- if (!isRecord9(entry))
90645
+ if (!isRecord10(entry))
90579
90646
  continue;
90580
90647
  if (entry.slug !== model && entry.id !== model)
90581
90648
  continue;
@@ -90600,7 +90667,7 @@ function readRootModelCatalogPath(config) {
90600
90667
  const single = config.match(/^\s*model_catalog_json\s*=\s*'([^']+)'/m);
90601
90668
  return single?.[1] ?? null;
90602
90669
  }
90603
- function isRecord9(value) {
90670
+ function isRecord10(value) {
90604
90671
  return typeof value === "object" && value !== null && !Array.isArray(value);
90605
90672
  }
90606
90673
  function removeFeatureFlagSetting(config, featureName) {
@@ -93333,7 +93400,7 @@ async function readSettings(settingsPath) {
93333
93400
  throw error;
93334
93401
  }
93335
93402
  const parsed = JSON.parse(raw);
93336
- if (!isRecord12(parsed))
93403
+ if (!isRecord13(parsed))
93337
93404
  throw new Error(`${settingsPath} must contain a JSON object`);
93338
93405
  return parsed;
93339
93406
  }
@@ -93394,7 +93461,7 @@ async function nextBackupPath(settingsPath) {
93394
93461
  function timestampForBackup() {
93395
93462
  return new Date().toISOString().replace(/[-:.]/g, "");
93396
93463
  }
93397
- function isRecord12(value) {
93464
+ function isRecord13(value) {
93398
93465
  return typeof value === "object" && value !== null && !Array.isArray(value);
93399
93466
  }
93400
93467
  async function readPackageName(packagePath) {
@@ -93414,7 +93481,7 @@ async function readPackageName(packagePath) {
93414
93481
  return;
93415
93482
  throw error;
93416
93483
  }
93417
- return isRecord12(parsed) && typeof parsed.name === "string" ? parsed.name : undefined;
93484
+ return isRecord13(parsed) && typeof parsed.name === "string" ? parsed.name : undefined;
93418
93485
  }
93419
93486
  async function fileExists(path) {
93420
93487
  try {
@@ -93532,7 +93599,7 @@ async function verifyAstGrepRuntimeIntegrity(pluginPath, platform) {
93532
93599
  }
93533
93600
  }
93534
93601
  function isAstGrepRuntimeManifest(value) {
93535
- if (!isRecord12(value))
93602
+ if (!isRecord13(value))
93536
93603
  return false;
93537
93604
  return typeof value.sha256 === "string" && /^[a-f0-9]{64}$/.test(value.sha256) && typeof value.mode === "number" && Number.isInteger(value.mode) && typeof value.stagedAtUtc === "string" && !Number.isNaN(Date.parse(value.stagedAtUtc));
93538
93605
  }
@@ -100771,14 +100838,14 @@ var CANONICAL_REPLACEMENT = new Map([
100771
100838
  var MIGRATE_SUFFIX = ", or run: oh-my-openagent config migrate";
100772
100839
  var TUNING_CONTAINERS = new Set(["agents", "categories", "models"]);
100773
100840
  var PASSTHROUGH_CONTAINERS = new Set(["provider_options", "providerOptions"]);
100774
- function isRecord13(value) {
100841
+ function isRecord14(value) {
100775
100842
  return value !== null && typeof value === "object" && !Array.isArray(value);
100776
100843
  }
100777
100844
  function isHarnessBlock(key) {
100778
100845
  return key.startsWith("[") && key.endsWith("]");
100779
100846
  }
100780
100847
  function collectIssues(configPath, value, prefix, fixSuffix) {
100781
- if (!isRecord13(value))
100848
+ if (!isRecord14(value))
100782
100849
  return [];
100783
100850
  const issues = [];
100784
100851
  for (const [key, child] of Object.entries(value)) {
@@ -100794,7 +100861,7 @@ function collectIssues(configPath, value, prefix, fixSuffix) {
100794
100861
  });
100795
100862
  continue;
100796
100863
  }
100797
- if (!isRecord13(child))
100864
+ if (!isRecord14(child))
100798
100865
  continue;
100799
100866
  if (PASSTHROUGH_CONTAINERS.has(key))
100800
100867
  continue;
@@ -100813,7 +100880,7 @@ function collectIssues(configPath, value, prefix, fixSuffix) {
100813
100880
  return issues;
100814
100881
  }
100815
100882
  function migrateFixSuffix(parsed) {
100816
- if (isRecord13(parsed) && hasMigrationMarker(parsed, REASONING_UNIFICATION_MIGRATION_ID))
100883
+ if (isRecord14(parsed) && hasMigrationMarker(parsed, REASONING_UNIFICATION_MIGRATION_ID))
100817
100884
  return "";
100818
100885
  return MIGRATE_SUFFIX;
100819
100886
  }
@@ -102051,12 +102118,12 @@ async function auditBundleTargets(pluginRoot) {
102051
102118
  let referencedCount = 0;
102052
102119
  for (const manifestPath of await findManifestPaths(pluginRoot, ".mcp.json")) {
102053
102120
  const manifest = await readJson2(manifestPath);
102054
- if (manifest === null || !isRecord14(manifest["mcpServers"]))
102121
+ if (manifest === null || !isRecord15(manifest["mcpServers"]))
102055
102122
  continue;
102056
102123
  const manifestRoot = dirname33(manifestPath);
102057
102124
  const isRootManifest = resolve24(manifestRoot) === resolve24(pluginRoot);
102058
102125
  for (const server of Object.values(manifest["mcpServers"])) {
102059
- if (!isRecord14(server) || !Array.isArray(server["args"]))
102126
+ if (!isRecord15(server) || !Array.isArray(server["args"]))
102060
102127
  continue;
102061
102128
  for (const arg of server["args"]) {
102062
102129
  if (typeof arg !== "string" || !isPluginRuntimePathArg(arg))
@@ -102142,7 +102209,7 @@ function collectHookCommands(value, commands) {
102142
102209
  collectHookCommands(item, commands);
102143
102210
  return;
102144
102211
  }
102145
- if (!isRecord14(value))
102212
+ if (!isRecord15(value))
102146
102213
  return;
102147
102214
  if (value["type"] === "command") {
102148
102215
  if (typeof value["command"] === "string")
@@ -102197,7 +102264,7 @@ function parseDegradedEntries(value) {
102197
102264
  return [];
102198
102265
  const entries = [];
102199
102266
  for (const item of value) {
102200
- if (!isRecord14(item))
102267
+ if (!isRecord15(item))
102201
102268
  continue;
102202
102269
  if (typeof item["component"] !== "string" || typeof item["reason"] !== "string")
102203
102270
  continue;
@@ -102231,7 +102298,7 @@ function degradedDetailLines(entries) {
102231
102298
  async function readJson2(path) {
102232
102299
  try {
102233
102300
  const parsed = JSON.parse(await readFile28(path, "utf8"));
102234
- return isRecord14(parsed) ? parsed : null;
102301
+ return isRecord15(parsed) ? parsed : null;
102235
102302
  } catch (error) {
102236
102303
  if (error instanceof Error)
102237
102304
  return null;
@@ -102252,7 +102319,7 @@ function normalizeRelative(root, target) {
102252
102319
  function normalizePathSeparators(path) {
102253
102320
  return path.split("\\").join("/");
102254
102321
  }
102255
- function isRecord14(value) {
102322
+ function isRecord15(value) {
102256
102323
  return typeof value === "object" && value !== null && !Array.isArray(value);
102257
102324
  }
102258
102325
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lazycodex-ai",
3
- "version": "5.0.0-beta.52",
3
+ "version": "5.0.0-beta.53",
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",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "omo",
3
- "version": "5.0.0-beta.52",
3
+ "version": "5.0.0-beta.53",
4
4
  "description": "One Codex plugin namespace for Yeongyu's local Codex components.",
5
5
  "author": {
6
6
  "name": "Yeongyu Kim",
@@ -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.0.0-beta.52) Checking Bootstrap Provisioning"
11
+ "statusMessage": "(OmO 5.0.0-beta.53) Checking Bootstrap Provisioning"
12
12
  }
13
13
  ]
14
14
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sisyphuslabs/codex-bootstrap",
3
- "version": "5.0.0-beta.52",
3
+ "version": "5.0.0-beta.53",
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.0.0-beta.52) Checking Comments"
11
+ "statusMessage": "(OmO 5.0.0-beta.53) 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.0.0-beta.52",
3
+ "version": "5.0.0-beta.53",
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.0.0-beta.52) Recommending Git Bash MCP"
11
+ "statusMessage": "(OmO 5.0.0-beta.53) 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.0.0-beta.52) Resetting Git Bash MCP Reminder"
23
+ "statusMessage": "(OmO 5.0.0-beta.53) 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.0.0-beta.52",
3
+ "version": "5.0.0-beta.53",
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.0.0-beta.52) Verifying LazyCodex Executor Evidence"
11
+ "statusMessage": "(OmO 5.0.0-beta.53) 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.0.0-beta.52",
3
+ "version": "5.0.0-beta.53",
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.0.0-beta.52",
4
- "inputDigest": "sha256:8674d4fcd17586aabee0cf663798fa9c40792359db3eca9bb5f99c88594f89df",
3
+ "version": "5.0.0-beta.53",
4
+ "inputDigest": "sha256:f202c8adb130249d2a7745db228ccd528b47f0cfeaeb5db5c99ab13d9b76af00",
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.0.0-beta.52) Checking LSP Diagnostics"
11
+ "statusMessage": "(OmO 5.0.0-beta.53) 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.0.0-beta.52) Resetting LSP Diagnostics Cache"
24
+ "statusMessage": "(OmO 5.0.0-beta.53) 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.0.0-beta.52",
3
+ "version": "5.0.0-beta.53",
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",
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook session-start",
9
9
  "timeout": 10,
10
- "statusMessage": "(OmO 5.0.0-beta.52) Loading Project Rules"
10
+ "statusMessage": "(OmO 5.0.0-beta.53) Loading Project Rules"
11
11
  }
12
12
  ]
13
13
  }
@@ -19,7 +19,7 @@
19
19
  "type": "command",
20
20
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook user-prompt-submit",
21
21
  "timeout": 10,
22
- "statusMessage": "(OmO 5.0.0-beta.52) Loading Project Rules"
22
+ "statusMessage": "(OmO 5.0.0-beta.53) Loading Project Rules"
23
23
  }
24
24
  ]
25
25
  }
@@ -32,7 +32,7 @@
32
32
  "type": "command",
33
33
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-tool-use",
34
34
  "timeout": 10,
35
- "statusMessage": "(OmO 5.0.0-beta.52) Matching Project Rules"
35
+ "statusMessage": "(OmO 5.0.0-beta.53) Matching Project Rules"
36
36
  }
37
37
  ]
38
38
  }
@@ -45,7 +45,7 @@
45
45
  "type": "command",
46
46
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-compact",
47
47
  "timeout": 10,
48
- "statusMessage": "(OmO 5.0.0-beta.52) Resetting Project Rule Cache"
48
+ "statusMessage": "(OmO 5.0.0-beta.53) Resetting Project Rule Cache"
49
49
  }
50
50
  ]
51
51
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-rules",
3
- "version": "5.0.0-beta.52",
3
+ "version": "5.0.0-beta.53",
4
4
  "description": "Codex plugin that injects project rule files into model context through lifecycle 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 post-tool-use",
10
10
  "timeout": 10,
11
- "statusMessage": "(OmO 5.0.0-beta.52) Checking Thread Title Hygiene"
11
+ "statusMessage": "(OmO 5.0.0-beta.53) Checking Thread Title Hygiene"
12
12
  }
13
13
  ]
14
14
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sisyphuslabs/codex-teammode",
3
- "version": "5.0.0-beta.52",
3
+ "version": "5.0.0-beta.53",
4
4
  "description": "Codex team-mode hook component that keeps background thread titles descriptive after create_thread.",
5
5
  "type": "module",
6
6
  "private": true,
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook session-start",
9
9
  "timeout": 5,
10
- "statusMessage": "(OmO 5.0.0-beta.52) Recording Session Telemetry"
10
+ "statusMessage": "(OmO 5.0.0-beta.53) Recording Session Telemetry"
11
11
  }
12
12
  ]
13
13
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-telemetry",
3
- "version": "5.0.0-beta.52",
3
+ "version": "5.0.0-beta.53",
4
4
  "description": "Codex plugin component that emits omo-codex anonymous daily-active telemetry on SessionStart.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook user-prompt-submit",
9
9
  "timeout": 5,
10
- "statusMessage": "(OmO 5.0.0-beta.52) Checking Ultrawork Trigger"
10
+ "statusMessage": "(OmO 5.0.0-beta.53) Checking Ultrawork Trigger"
11
11
  }
12
12
  ]
13
13
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-ultrawork",
3
- "version": "5.0.0-beta.52",
3
+ "version": "5.0.0-beta.53",
4
4
  "description": "Codex plugin that injects the ultrawork orchestration directive and ships LazyCodex planning, review, QA, and gate agent roles.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",