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
package/dist/cli/index.js CHANGED
@@ -64,7 +64,7 @@ var package_default;
64
64
  var init_package = __esm(() => {
65
65
  package_default = {
66
66
  name: "oh-my-opencode",
67
- version: "5.0.0-beta.52",
67
+ version: "5.0.0-beta.53",
68
68
  description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
69
69
  main: "./dist/index.js",
70
70
  types: "dist/index.d.ts",
@@ -248,7 +248,7 @@ var init_package = __esm(() => {
248
248
  zod: "^4.4.3"
249
249
  },
250
250
  devDependencies: {
251
- "@code-yeongyu/senpi": "2026.9.10",
251
+ "@code-yeongyu/senpi": "2026.9.10-2",
252
252
  "@oh-my-opencode/agents-md-core": "workspace:*",
253
253
  "@oh-my-opencode/ast-grep-mcp": "workspace:*",
254
254
  "@oh-my-opencode/boulder-state": "workspace:*",
@@ -289,18 +289,18 @@ var init_package = __esm(() => {
289
289
  typescript: "^7.0.2"
290
290
  },
291
291
  optionalDependencies: {
292
- "oh-my-opencode-darwin-arm64": "5.0.0-beta.52",
293
- "oh-my-opencode-darwin-x64": "5.0.0-beta.52",
294
- "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.52",
295
- "oh-my-opencode-linux-arm64": "5.0.0-beta.52",
296
- "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.52",
297
- "oh-my-opencode-linux-x64": "5.0.0-beta.52",
298
- "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.52",
299
- "oh-my-opencode-linux-x64-musl": "5.0.0-beta.52",
300
- "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.52",
301
- "oh-my-opencode-windows-arm64": "5.0.0-beta.52",
302
- "oh-my-opencode-windows-x64": "5.0.0-beta.52",
303
- "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.52"
292
+ "oh-my-opencode-darwin-arm64": "5.0.0-beta.53",
293
+ "oh-my-opencode-darwin-x64": "5.0.0-beta.53",
294
+ "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.53",
295
+ "oh-my-opencode-linux-arm64": "5.0.0-beta.53",
296
+ "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.53",
297
+ "oh-my-opencode-linux-x64": "5.0.0-beta.53",
298
+ "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.53",
299
+ "oh-my-opencode-linux-x64-musl": "5.0.0-beta.53",
300
+ "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.53",
301
+ "oh-my-opencode-windows-arm64": "5.0.0-beta.53",
302
+ "oh-my-opencode-windows-x64": "5.0.0-beta.53",
303
+ "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.53"
304
304
  },
305
305
  overrides: {
306
306
  "@earendil-works/pi-agent-core": "0.84.2",
@@ -72839,6 +72839,25 @@ var init_model_catalog = __esm(() => {
72839
72839
  OmoModelCatalogLayerSchema = record(string2(), OmoModelCatalogEntryLayerSchema);
72840
72840
  });
72841
72841
 
72842
+ // packages/omo-config-core/src/schema/model-profile.ts
72843
+ function isRecord8(value) {
72844
+ return typeof value === "object" && value !== null && !Array.isArray(value);
72845
+ }
72846
+ var OmoModelProfileInputSchema, OmoModelProfileSchema, OmoModelProfilesSchema, OmoModelProfileLayerInputSchema, OmoModelProfileLayerSchema, OmoModelProfilesLayerSchema;
72847
+ var init_model_profile = __esm(() => {
72848
+ init_zod();
72849
+ init_fallback_models();
72850
+ OmoModelProfileInputSchema = object({
72851
+ display_name: string2().optional(),
72852
+ models: array(union([string2(), OmoFallbackModelObjectSchema])).optional()
72853
+ }).strict();
72854
+ OmoModelProfileSchema = preprocess((value) => isRecord8(value) ? normalizeLegacyModelFields(value) : value, OmoModelProfileInputSchema);
72855
+ OmoModelProfilesSchema = record(string2(), OmoModelProfileSchema);
72856
+ OmoModelProfileLayerInputSchema = OmoModelProfileInputSchema.partial();
72857
+ OmoModelProfileLayerSchema = preprocess((value) => isRecord8(value) ? normalizeLegacyModelFields(value) : value, OmoModelProfileLayerInputSchema);
72858
+ OmoModelProfilesLayerSchema = record(string2(), OmoModelProfileLayerSchema);
72859
+ });
72860
+
72842
72861
  // packages/omo-config-core/src/schema/task.ts
72843
72862
  import { availableParallelism } from "os";
72844
72863
  function resolveOmoTaskSettings(input, resolveParallelism = availableParallelism) {
@@ -73031,6 +73050,7 @@ var init_config = __esm(() => {
73031
73050
  init_git_master();
73032
73051
  init_memory();
73033
73052
  init_model_catalog();
73053
+ init_model_profile();
73034
73054
  init_task();
73035
73055
  init_team();
73036
73056
  init_telemetry();
@@ -73044,6 +73064,8 @@ var init_config = __esm(() => {
73044
73064
  task: OmoTaskSettingsLayerSchema.optional(),
73045
73065
  teams: OmoTeamsConfigLayerSchema.optional(),
73046
73066
  models: OmoModelCatalogLayerSchema.optional(),
73067
+ model_profiles: OmoModelProfilesLayerSchema.optional(),
73068
+ model_profile: string2().optional(),
73047
73069
  memory: OmoMemorySettingsLayerSchema.optional(),
73048
73070
  telemetry: OmoTelemetrySettingsLayerSchema.optional()
73049
73071
  }).strict();
@@ -73055,6 +73077,8 @@ var init_config = __esm(() => {
73055
73077
  task: OmoTaskSettingsLayerSchema.optional(),
73056
73078
  teams: OmoTeamsConfigLayerSchema.optional(),
73057
73079
  models: OmoModelCatalogLayerSchema.optional(),
73080
+ model_profiles: OmoModelProfilesLayerSchema.optional(),
73081
+ model_profile: string2().optional(),
73058
73082
  memory: OmoMemorySettingsLayerSchema.optional(),
73059
73083
  telemetry: OmoTelemetrySettingsLayerSchema.optional(),
73060
73084
  "[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
@@ -73070,6 +73094,8 @@ var init_config = __esm(() => {
73070
73094
  task: OmoTaskSettingsSchema.optional(),
73071
73095
  teams: OmoTeamsConfigSchema.optional(),
73072
73096
  models: OmoModelCatalogSchema.optional(),
73097
+ model_profiles: OmoModelProfilesSchema.optional(),
73098
+ model_profile: string2().optional(),
73073
73099
  memory: OmoMemorySettingsSchema.optional(),
73074
73100
  telemetry: OmoTelemetrySettingsSchema.optional(),
73075
73101
  "[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
@@ -73088,6 +73114,8 @@ var init_config = __esm(() => {
73088
73114
  task: OmoTaskSettingsLayerSchema.optional(),
73089
73115
  teams: OmoTeamsConfigLayerSchema.optional(),
73090
73116
  models: OmoModelCatalogLayerSchema.optional(),
73117
+ model_profiles: OmoModelProfilesLayerSchema.optional(),
73118
+ model_profile: string2().optional(),
73091
73119
  memory: OmoMemorySettingsLayerSchema.optional(),
73092
73120
  telemetry: OmoTelemetrySettingsLayerSchema.optional(),
73093
73121
  "[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
@@ -73110,6 +73138,7 @@ var init_schema = __esm(() => {
73110
73138
  init_harness();
73111
73139
  init_memory();
73112
73140
  init_model_catalog();
73141
+ init_model_profile();
73113
73142
  init_model_ref();
73114
73143
  init_task();
73115
73144
  init_team();
@@ -73366,21 +73395,21 @@ function hasUnsafeUnrecognizedKey(issues) {
73366
73395
  function hasTamperedPrototype(value) {
73367
73396
  if (Array.isArray(value))
73368
73397
  return value.some((entry) => hasTamperedPrototype(entry));
73369
- if (!isRecord8(value))
73398
+ if (!isRecord9(value))
73370
73399
  return false;
73371
73400
  const prototype = Object.getPrototypeOf(value);
73372
73401
  if (prototype !== Object.prototype && prototype !== null)
73373
73402
  return true;
73374
73403
  return Object.values(value).some((entry) => hasTamperedPrototype(entry));
73375
73404
  }
73376
- function isRecord8(value) {
73405
+ function isRecord9(value) {
73377
73406
  return typeof value === "object" && value !== null && !Array.isArray(value);
73378
73407
  }
73379
73408
  function containerAt(record, path) {
73380
73409
  let container = record;
73381
73410
  for (const segment of path) {
73382
73411
  const next = container[segment];
73383
- if (!isRecord8(next))
73412
+ if (!isRecord9(next))
73384
73413
  return null;
73385
73414
  container = next;
73386
73415
  }
@@ -73642,6 +73671,38 @@ function resolveCategoryDefinition(definition, catalog, cycleNames) {
73642
73671
  ...definition.fallback_models === undefined ? {} : { fallback_models: resolveFallbackModels(definition.fallback_models, catalog, cycleNames) }
73643
73672
  };
73644
73673
  }
73674
+ function resolveModelProfile(definition, catalog, cycleNames) {
73675
+ return {
73676
+ ...definition,
73677
+ ...definition.models === undefined ? {} : { models: definition.models.map((entry) => resolveModelEntry(entry, catalog, cycleNames)) }
73678
+ };
73679
+ }
73680
+ function profileShadowDiagnostics(view) {
73681
+ if (view.model_profiles === undefined || view.models === undefined)
73682
+ return [];
73683
+ return Object.keys(view.model_profiles).flatMap((name) => view.models?.[name] === undefined ? [] : [{
73684
+ kind: "validation",
73685
+ message: `Model profile "${name}" shadows a model catalog entry of the same name`,
73686
+ path: `model_profiles.${name}`
73687
+ }]);
73688
+ }
73689
+ function profileSpliceDiagnostics(section, definitions, profileNames) {
73690
+ if (definitions === undefined || profileNames.size === 0)
73691
+ return [];
73692
+ return Object.entries(definitions).flatMap(([name, definition]) => (definition.models ?? []).flatMap((entry, index) => typeof entry !== "string" || !profileNames.has(entry) ? [] : [{
73693
+ kind: "validation",
73694
+ message: `"${entry}" is a model profile; splicing a profile into a category chain is not supported yet`,
73695
+ path: `${section}.${name}.models.${index}`
73696
+ }]));
73697
+ }
73698
+ function modelProfileDiagnostics(view) {
73699
+ const profileNames = new Set(Object.keys(view.model_profiles ?? {}));
73700
+ return [
73701
+ ...profileShadowDiagnostics(view),
73702
+ ...profileSpliceDiagnostics("categories", view.categories, profileNames),
73703
+ ...profileSpliceDiagnostics("agents", view.agents, profileNames)
73704
+ ];
73705
+ }
73645
73706
  function cycleDiagnostics(catalog) {
73646
73707
  if (catalog === undefined)
73647
73708
  return [];
@@ -73652,9 +73713,10 @@ function cycleDiagnostics(catalog) {
73652
73713
  }));
73653
73714
  }
73654
73715
  function resolveModelReferences(view) {
73655
- const diagnostics = cycleDiagnostics(view.models);
73716
+ const cycles = cycleDiagnostics(view.models);
73717
+ const diagnostics = [...cycles, ...modelProfileDiagnostics(view)];
73656
73718
  const cycleNames = new Set;
73657
- for (const diagnostic of diagnostics) {
73719
+ for (const diagnostic of cycles) {
73658
73720
  const name = diagnostic.path.split(".")[1];
73659
73721
  if (name !== undefined)
73660
73722
  cycleNames.add(name);
@@ -73667,12 +73729,17 @@ function resolveModelReferences(view) {
73667
73729
  name,
73668
73730
  resolveCategoryDefinition(definition, view.models, cycleNames)
73669
73731
  ]));
73732
+ const modelProfiles = view.model_profiles === undefined ? undefined : Object.fromEntries(Object.entries(view.model_profiles).map(([name, definition]) => [
73733
+ name,
73734
+ resolveModelProfile(definition, view.models, cycleNames)
73735
+ ]));
73670
73736
  return {
73671
73737
  diagnostics,
73672
73738
  view: {
73673
73739
  ...view,
73674
73740
  ...agents === undefined ? {} : { agents },
73675
- ...categories === undefined ? {} : { categories }
73741
+ ...categories === undefined ? {} : { categories },
73742
+ ...modelProfiles === undefined ? {} : { model_profiles: modelProfiles }
73676
73743
  }
73677
73744
  };
73678
73745
  }
@@ -77007,7 +77074,7 @@ function shouldRetainLine(line, cutoffMs) {
77007
77074
  function parseDiagnosticLine(line) {
77008
77075
  try {
77009
77076
  const parsed = JSON.parse(line);
77010
- if (!isRecord10(parsed)) {
77077
+ if (!isRecord11(parsed)) {
77011
77078
  return null;
77012
77079
  }
77013
77080
  return parsed;
@@ -77018,7 +77085,7 @@ function parseDiagnosticLine(line) {
77018
77085
  throw error;
77019
77086
  }
77020
77087
  }
77021
- function isRecord10(value) {
77088
+ function isRecord11(value) {
77022
77089
  return value !== null && typeof value === "object" && !Array.isArray(value);
77023
77090
  }
77024
77091
  function trimToMaxBytes(lines) {
@@ -82392,7 +82459,7 @@ function coerceBool(value) {
82392
82459
  function coerceString(value) {
82393
82460
  return typeof value == "string" ? value : undefined;
82394
82461
  }
82395
- function isRecord11(value) {
82462
+ function isRecord12(value) {
82396
82463
  return typeof value == "object" && value !== null && !Array.isArray(value);
82397
82464
  }
82398
82465
  function toRfc3339(timestamp) {
@@ -82414,7 +82481,7 @@ function relocateInto(properties, key, value) {
82414
82481
  properties[key] = value;
82415
82482
  }
82416
82483
  function buildV1Event(message) {
82417
- const sourceProperties = isRecord11(message.properties) ? message.properties : {};
82484
+ const sourceProperties = isRecord12(message.properties) ? message.properties : {};
82418
82485
  const properties = {
82419
82486
  ...sourceProperties
82420
82487
  };
@@ -84444,7 +84511,7 @@ var package_default2;
84444
84511
  var init_package2 = __esm(() => {
84445
84512
  package_default2 = {
84446
84513
  name: "@oh-my-opencode/omo-codex",
84447
- version: "5.0.0-beta.52",
84514
+ version: "5.0.0-beta.53",
84448
84515
  type: "module",
84449
84516
  private: true,
84450
84517
  description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
@@ -90493,10 +90560,10 @@ function readCatalogMultiAgentVersion(model, cachePath) {
90493
90560
  } catch {
90494
90561
  return null;
90495
90562
  }
90496
- if (!isRecord9(cache) || !Array.isArray(cache.models))
90563
+ if (!isRecord10(cache) || !Array.isArray(cache.models))
90497
90564
  return null;
90498
90565
  for (const entry of cache.models) {
90499
- if (!isRecord9(entry))
90566
+ if (!isRecord10(entry))
90500
90567
  continue;
90501
90568
  if (entry.slug !== model && entry.id !== model)
90502
90569
  continue;
@@ -90521,7 +90588,7 @@ function readRootModelCatalogPath(config) {
90521
90588
  const single = config.match(/^\s*model_catalog_json\s*=\s*'([^']+)'/m);
90522
90589
  return single?.[1] ?? null;
90523
90590
  }
90524
- function isRecord9(value) {
90591
+ function isRecord10(value) {
90525
90592
  return typeof value === "object" && value !== null && !Array.isArray(value);
90526
90593
  }
90527
90594
  function removeFeatureFlagSetting(config, featureName) {
@@ -93254,7 +93321,7 @@ async function readSettings(settingsPath) {
93254
93321
  throw error;
93255
93322
  }
93256
93323
  const parsed = JSON.parse(raw);
93257
- if (!isRecord12(parsed))
93324
+ if (!isRecord13(parsed))
93258
93325
  throw new Error(`${settingsPath} must contain a JSON object`);
93259
93326
  return parsed;
93260
93327
  }
@@ -93315,7 +93382,7 @@ async function nextBackupPath(settingsPath) {
93315
93382
  function timestampForBackup() {
93316
93383
  return new Date().toISOString().replace(/[-:.]/g, "");
93317
93384
  }
93318
- function isRecord12(value) {
93385
+ function isRecord13(value) {
93319
93386
  return typeof value === "object" && value !== null && !Array.isArray(value);
93320
93387
  }
93321
93388
  async function readPackageName(packagePath) {
@@ -93335,7 +93402,7 @@ async function readPackageName(packagePath) {
93335
93402
  return;
93336
93403
  throw error;
93337
93404
  }
93338
- return isRecord12(parsed) && typeof parsed.name === "string" ? parsed.name : undefined;
93405
+ return isRecord13(parsed) && typeof parsed.name === "string" ? parsed.name : undefined;
93339
93406
  }
93340
93407
  async function fileExists(path) {
93341
93408
  try {
@@ -93453,7 +93520,7 @@ async function verifyAstGrepRuntimeIntegrity(pluginPath, platform) {
93453
93520
  }
93454
93521
  }
93455
93522
  function isAstGrepRuntimeManifest(value) {
93456
- if (!isRecord12(value))
93523
+ if (!isRecord13(value))
93457
93524
  return false;
93458
93525
  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));
93459
93526
  }
@@ -100692,14 +100759,14 @@ var CANONICAL_REPLACEMENT = new Map([
100692
100759
  var MIGRATE_SUFFIX = ", or run: oh-my-openagent config migrate";
100693
100760
  var TUNING_CONTAINERS = new Set(["agents", "categories", "models"]);
100694
100761
  var PASSTHROUGH_CONTAINERS = new Set(["provider_options", "providerOptions"]);
100695
- function isRecord13(value) {
100762
+ function isRecord14(value) {
100696
100763
  return value !== null && typeof value === "object" && !Array.isArray(value);
100697
100764
  }
100698
100765
  function isHarnessBlock(key) {
100699
100766
  return key.startsWith("[") && key.endsWith("]");
100700
100767
  }
100701
100768
  function collectIssues(configPath, value, prefix, fixSuffix) {
100702
- if (!isRecord13(value))
100769
+ if (!isRecord14(value))
100703
100770
  return [];
100704
100771
  const issues = [];
100705
100772
  for (const [key, child] of Object.entries(value)) {
@@ -100715,7 +100782,7 @@ function collectIssues(configPath, value, prefix, fixSuffix) {
100715
100782
  });
100716
100783
  continue;
100717
100784
  }
100718
- if (!isRecord13(child))
100785
+ if (!isRecord14(child))
100719
100786
  continue;
100720
100787
  if (PASSTHROUGH_CONTAINERS.has(key))
100721
100788
  continue;
@@ -100734,7 +100801,7 @@ function collectIssues(configPath, value, prefix, fixSuffix) {
100734
100801
  return issues;
100735
100802
  }
100736
100803
  function migrateFixSuffix(parsed) {
100737
- if (isRecord13(parsed) && hasMigrationMarker(parsed, REASONING_UNIFICATION_MIGRATION_ID))
100804
+ if (isRecord14(parsed) && hasMigrationMarker(parsed, REASONING_UNIFICATION_MIGRATION_ID))
100738
100805
  return "";
100739
100806
  return MIGRATE_SUFFIX;
100740
100807
  }
@@ -101972,12 +102039,12 @@ async function auditBundleTargets(pluginRoot) {
101972
102039
  let referencedCount = 0;
101973
102040
  for (const manifestPath of await findManifestPaths(pluginRoot, ".mcp.json")) {
101974
102041
  const manifest = await readJson2(manifestPath);
101975
- if (manifest === null || !isRecord14(manifest["mcpServers"]))
102042
+ if (manifest === null || !isRecord15(manifest["mcpServers"]))
101976
102043
  continue;
101977
102044
  const manifestRoot = dirname33(manifestPath);
101978
102045
  const isRootManifest = resolve24(manifestRoot) === resolve24(pluginRoot);
101979
102046
  for (const server of Object.values(manifest["mcpServers"])) {
101980
- if (!isRecord14(server) || !Array.isArray(server["args"]))
102047
+ if (!isRecord15(server) || !Array.isArray(server["args"]))
101981
102048
  continue;
101982
102049
  for (const arg of server["args"]) {
101983
102050
  if (typeof arg !== "string" || !isPluginRuntimePathArg(arg))
@@ -102063,7 +102130,7 @@ function collectHookCommands(value, commands) {
102063
102130
  collectHookCommands(item, commands);
102064
102131
  return;
102065
102132
  }
102066
- if (!isRecord14(value))
102133
+ if (!isRecord15(value))
102067
102134
  return;
102068
102135
  if (value["type"] === "command") {
102069
102136
  if (typeof value["command"] === "string")
@@ -102118,7 +102185,7 @@ function parseDegradedEntries(value) {
102118
102185
  return [];
102119
102186
  const entries = [];
102120
102187
  for (const item of value) {
102121
- if (!isRecord14(item))
102188
+ if (!isRecord15(item))
102122
102189
  continue;
102123
102190
  if (typeof item["component"] !== "string" || typeof item["reason"] !== "string")
102124
102191
  continue;
@@ -102152,7 +102219,7 @@ function degradedDetailLines(entries) {
102152
102219
  async function readJson2(path) {
102153
102220
  try {
102154
102221
  const parsed = JSON.parse(await readFile28(path, "utf8"));
102155
- return isRecord14(parsed) ? parsed : null;
102222
+ return isRecord15(parsed) ? parsed : null;
102156
102223
  } catch (error) {
102157
102224
  if (error instanceof Error)
102158
102225
  return null;
@@ -102173,7 +102240,7 @@ function normalizeRelative(root, target) {
102173
102240
  function normalizePathSeparators(path) {
102174
102241
  return path.split("\\").join("/");
102175
102242
  }
102176
- function isRecord14(value) {
102243
+ function isRecord15(value) {
102177
102244
  return typeof value === "object" && value !== null && !Array.isArray(value);
102178
102245
  }
102179
102246