oh-my-opencode 5.0.0-beta.82 → 5.0.0-beta.84

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 (142) hide show
  1. package/.agents/skills/hyperplan/SKILL.md +1 -1
  2. package/.opencode/skills/hyperplan/SKILL.md +1 -1
  3. package/README.ja.md +2 -2
  4. package/README.ko.md +2 -2
  5. package/README.md +4 -4
  6. package/README.ru.md +2 -2
  7. package/README.zh-cn.md +2 -2
  8. package/dist/cli/index.js +707 -146
  9. package/dist/cli/install-native/index.d.ts +4 -0
  10. package/dist/cli/install-native/plan.d.ts +11 -0
  11. package/dist/cli/install-native/run-native-install.d.ts +23 -0
  12. package/dist/cli/install-native-dev/index.d.ts +4 -0
  13. package/dist/cli/native-dev-platform-flag.d.ts +5 -0
  14. package/dist/cli/native-edition-hint.d.ts +10 -0
  15. package/dist/cli/types.d.ts +3 -2
  16. package/dist/cli-node/index.js +707 -146
  17. package/dist/config/schema/hooks.d.ts +1 -0
  18. package/dist/config-migration/harness-native-rename.d.ts +3 -0
  19. package/dist/config-migration/subscription-provider-rename.d.ts +4 -0
  20. package/dist/create-hooks.d.ts +1 -0
  21. package/dist/features/native-edition-nudge/index.d.ts +2 -0
  22. package/dist/features/native-edition-nudge/tui.d.ts +33 -0
  23. package/dist/hooks/index.d.ts +1 -0
  24. package/dist/hooks/native-edition-nudge/decide.d.ts +4 -0
  25. package/dist/hooks/native-edition-nudge/hook.d.ts +26 -0
  26. package/dist/hooks/native-edition-nudge/index.d.ts +5 -0
  27. package/dist/hooks/native-edition-nudge/state.d.ts +9 -0
  28. package/dist/hooks/native-edition-nudge/types.d.ts +38 -0
  29. package/dist/index.js +1041 -387
  30. package/dist/plugin/hooks/create-core-hooks.d.ts +1 -0
  31. package/dist/plugin/hooks/create-session-hooks.d.ts +2 -1
  32. package/dist/skills/browser/ATTRIBUTION.md +25 -0
  33. package/dist/skills/browser/SKILL.md +89 -0
  34. package/dist/skills/browser/references/commands.md +90 -0
  35. package/dist/skills/browser/references/install.md +71 -0
  36. package/dist/skills/browser/references/owned-engine/README.md +42 -0
  37. package/dist/skills/browser/references/owned-engine/frames-and-humans.md +39 -0
  38. package/dist/skills/browser/references/owned-engine/ladder.md +59 -0
  39. package/dist/skills/browser/references/owned-engine/network.md +42 -0
  40. package/dist/skills/browser/references/recipes/1password.md +59 -0
  41. package/dist/skills/browser/references/remote.md +24 -0
  42. package/dist/skills/browser/scripts/browser-doctor.mjs +41 -0
  43. package/dist/skills/browser/scripts/browser-env.mjs +41 -0
  44. package/dist/skills/browser/scripts/browser-install.mjs +51 -0
  45. package/dist/tui.js +761 -100
  46. package/package.json +14 -14
  47. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  48. package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +84 -11
  49. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  50. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  51. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  52. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  53. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  54. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  55. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  56. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  57. package/packages/omo-codex/plugin/components/lcx/skills/lcx-contribute-bug-fix/SKILL.md +1 -1
  58. package/packages/omo-codex/plugin/components/lcx/skills/lcx-doctor/SKILL.md +3 -3
  59. package/packages/omo-codex/plugin/components/lcx/skills/lcx-report-bug/SKILL.md +5 -5
  60. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +2 -2
  61. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  62. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  63. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  64. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  65. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  66. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  67. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  68. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  69. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  70. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  71. package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +1 -1
  72. package/packages/omo-codex/plugin/components/ulw-execute-continuation/package.json +1 -1
  73. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +24 -10
  74. package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-guard.js +8 -6
  75. package/packages/omo-codex/plugin/components/ulw-loop/dist/surface.d.ts +2 -0
  76. package/packages/omo-codex/plugin/components/ulw-loop/dist/surface.js +21 -4
  77. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +5 -5
  78. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  79. package/packages/omo-codex/plugin/components/ulw-loop/src/spawn-guard.ts +10 -5
  80. package/packages/omo-codex/plugin/components/ulw-loop/src/surface.ts +24 -6
  81. package/packages/omo-codex/plugin/components/ulw-loop/test/spawn-guard-native-reviewer.test.ts +207 -0
  82. package/packages/omo-codex/plugin/components/ulw-loop/test/spawn-guard.test.ts +6 -4
  83. package/packages/omo-codex/plugin/components/ulw-loop/test/surface.test.ts +43 -4
  84. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  85. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  86. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  87. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  88. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  89. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  90. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  91. package/packages/omo-codex/plugin/hooks/post-tool-use-recording-spawn-admission.json +1 -1
  92. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  93. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  94. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  95. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  96. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  97. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  98. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  99. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +1 -1
  100. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  101. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  102. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  103. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  104. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  105. package/packages/omo-codex/plugin/package-lock.json +12 -12
  106. package/packages/omo-codex/plugin/package.json +1 -1
  107. package/packages/omo-codex/plugin/skills/browser/ATTRIBUTION.md +25 -0
  108. package/packages/omo-codex/plugin/skills/browser/SKILL.md +89 -0
  109. package/packages/omo-codex/plugin/skills/browser/agents/openai.yaml +2 -0
  110. package/packages/omo-codex/plugin/skills/browser/references/commands.md +90 -0
  111. package/packages/omo-codex/plugin/skills/browser/references/install.md +71 -0
  112. package/packages/omo-codex/plugin/skills/browser/references/owned-engine/README.md +42 -0
  113. package/packages/omo-codex/plugin/skills/browser/references/owned-engine/frames-and-humans.md +39 -0
  114. package/packages/omo-codex/plugin/skills/browser/references/owned-engine/ladder.md +59 -0
  115. package/packages/omo-codex/plugin/skills/browser/references/owned-engine/network.md +42 -0
  116. package/packages/omo-codex/plugin/skills/browser/references/recipes/1password.md +59 -0
  117. package/packages/omo-codex/plugin/skills/browser/references/remote.md +24 -0
  118. package/packages/omo-codex/plugin/skills/browser/scripts/browser-doctor.mjs +41 -0
  119. package/packages/omo-codex/plugin/skills/browser/scripts/browser-env.mjs +41 -0
  120. package/packages/omo-codex/plugin/skills/browser/scripts/browser-install.mjs +51 -0
  121. package/packages/omo-codex/plugin/skills/lcx-contribute-bug-fix/SKILL.md +1 -1
  122. package/packages/omo-codex/plugin/skills/lcx-doctor/SKILL.md +3 -3
  123. package/packages/omo-codex/plugin/skills/lcx-report-bug/SKILL.md +5 -5
  124. package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +1 -0
  125. package/packages/omo-codex/scripts/install-dist/install-local.mjs +90 -17
  126. package/packages/shared-skills/skills/browser/ATTRIBUTION.md +25 -0
  127. package/packages/shared-skills/skills/browser/SKILL.md +89 -0
  128. package/packages/shared-skills/skills/browser/references/commands.md +90 -0
  129. package/packages/shared-skills/skills/browser/references/install.md +71 -0
  130. package/packages/shared-skills/skills/browser/references/owned-engine/README.md +42 -0
  131. package/packages/shared-skills/skills/browser/references/owned-engine/frames-and-humans.md +39 -0
  132. package/packages/shared-skills/skills/browser/references/owned-engine/ladder.md +59 -0
  133. package/packages/shared-skills/skills/browser/references/owned-engine/network.md +42 -0
  134. package/packages/shared-skills/skills/browser/references/recipes/1password.md +59 -0
  135. package/packages/shared-skills/skills/browser/references/remote.md +24 -0
  136. package/packages/shared-skills/skills/browser/scripts/browser-doctor.mjs +41 -0
  137. package/packages/shared-skills/skills/browser/scripts/browser-env.mjs +41 -0
  138. package/packages/shared-skills/skills/browser/scripts/browser-install.mjs +51 -0
  139. package/postinstall.mjs +3 -3
  140. package/dist/cli/install-senpi/index.d.ts +0 -1
  141. package/dist/cli/senpi-edition-hint.d.ts +0 -10
  142. package/dist/cli/senpi-platform-flag.d.ts +0 -4
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oh-my-opencode",
3
- "version": "5.0.0-beta.82",
3
+ "version": "5.0.0-beta.84",
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",
@@ -183,7 +183,7 @@
183
183
  "zod": "^4.6.5"
184
184
  },
185
185
  "devDependencies": {
186
- "@code-yeongyu/senpi": "2026.9.22",
186
+ "@code-yeongyu/senpi": "2026.9.22-4",
187
187
  "@oh-my-opencode/agents-md-core": "workspace:*",
188
188
  "@oh-my-opencode/ast-grep-mcp": "workspace:*",
189
189
  "@oh-my-opencode/boulder-state": "workspace:*",
@@ -223,18 +223,18 @@
223
223
  "typescript": "^7.0.2"
224
224
  },
225
225
  "optionalDependencies": {
226
- "oh-my-opencode-darwin-arm64": "5.0.0-beta.82",
227
- "oh-my-opencode-darwin-x64": "5.0.0-beta.82",
228
- "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.82",
229
- "oh-my-opencode-linux-arm64": "5.0.0-beta.82",
230
- "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.82",
231
- "oh-my-opencode-linux-x64": "5.0.0-beta.82",
232
- "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.82",
233
- "oh-my-opencode-linux-x64-musl": "5.0.0-beta.82",
234
- "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.82",
235
- "oh-my-opencode-windows-arm64": "5.0.0-beta.82",
236
- "oh-my-opencode-windows-x64": "5.0.0-beta.82",
237
- "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.82"
226
+ "oh-my-opencode-darwin-arm64": "5.0.0-beta.84",
227
+ "oh-my-opencode-darwin-x64": "5.0.0-beta.84",
228
+ "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.84",
229
+ "oh-my-opencode-linux-arm64": "5.0.0-beta.84",
230
+ "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.84",
231
+ "oh-my-opencode-linux-x64": "5.0.0-beta.84",
232
+ "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.84",
233
+ "oh-my-opencode-linux-x64-musl": "5.0.0-beta.84",
234
+ "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.84",
235
+ "oh-my-opencode-windows-arm64": "5.0.0-beta.84",
236
+ "oh-my-opencode-windows-x64": "5.0.0-beta.84",
237
+ "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.84"
238
238
  },
239
239
  "overrides": {
240
240
  "@earendil-works/pi-agent-core": "0.84.2",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "omo",
3
- "version": "5.0.0-beta.82",
3
+ "version": "5.0.0-beta.84",
4
4
  "description": "One Codex plugin namespace for Yeongyu's local Codex components.",
5
5
  "author": {
6
6
  "name": "Yeongyu Kim",
@@ -7072,8 +7072,10 @@ var OmoGitMasterSettingsSchema = OmoGitMasterSettingsLayerSchema.extend({
7072
7072
 
7073
7073
  // ../../omo-config-core/src/schema/harness.ts
7074
7074
  var HARNESS_IDS = ["codex", "opencode", "omo"];
7075
- var OMO_CONFIG_HARNESS_IDS = ["opencode", "senpi", "codex"];
7075
+ var OMO_CONFIG_HARNESS_IDS = ["opencode", "native", "codex"];
7076
7076
  var OmoHarnessIdSchema = _enum(OMO_CONFIG_HARNESS_IDS);
7077
+ var OMO_CONFIG_LEGACY_HARNESS_ALIASES = { senpi: "native" };
7078
+ var OMO_CONFIG_LEGACY_HARNESS_IDS = Object.keys(OMO_CONFIG_LEGACY_HARNESS_ALIASES);
7077
7079
 
7078
7080
  // ../../omo-config-core/src/schema/memory.ts
7079
7081
  var OmoMemoryReflectionTriggerSchema = object({
@@ -7532,6 +7534,7 @@ var OmoConfigProfileSchema = object({
7532
7534
  telemetry: OmoTelemetrySettingsLayerSchema.optional(),
7533
7535
  disabled_skills: OmoDisabledSkillsSchema.optional(),
7534
7536
  "[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
7537
+ "[native]": OmoTypedHarnessConfigSchema.optional(),
7535
7538
  "[senpi]": OmoTypedHarnessConfigSchema.optional(),
7536
7539
  "[codex]": OmoTypedHarnessConfigSchema.optional()
7537
7540
  }).strict();
@@ -7550,6 +7553,7 @@ var OmoConfigSchema = object({
7550
7553
  telemetry: OmoTelemetrySettingsSchema.optional(),
7551
7554
  disabled_skills: OmoDisabledSkillsSchema.optional(),
7552
7555
  "[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
7556
+ "[native]": OmoTypedHarnessConfigSchema.optional(),
7553
7557
  "[senpi]": OmoTypedHarnessConfigSchema.optional(),
7554
7558
  "[codex]": OmoTypedHarnessConfigSchema.optional(),
7555
7559
  profiles: record(string2(), OmoConfigProfileSchema).default({}),
@@ -7571,6 +7575,7 @@ var OmoConfigLayerSchema = object({
7571
7575
  telemetry: OmoTelemetrySettingsLayerSchema.optional(),
7572
7576
  disabled_skills: OmoDisabledSkillsSchema.optional(),
7573
7577
  "[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
7578
+ "[native]": OmoTypedHarnessConfigSchema.optional(),
7574
7579
  "[senpi]": OmoTypedHarnessConfigSchema.optional(),
7575
7580
  "[codex]": OmoTypedHarnessConfigSchema.optional(),
7576
7581
  profiles: record(string2(), OmoConfigProfileSchema).optional(),
@@ -7634,6 +7639,54 @@ function canonicalizeLegacyCategoryNames(document) {
7634
7639
  return { document: canonicalized, renames };
7635
7640
  }
7636
7641
 
7642
+ // ../../omo-config-core/src/schema/legacy-harness-names.ts
7643
+ function canonicalHarnessName(name) {
7644
+ return Object.hasOwn(OMO_CONFIG_LEGACY_HARNESS_ALIASES, name) ? OMO_CONFIG_LEGACY_HARNESS_ALIASES[name] : name;
7645
+ }
7646
+ function harnessBlockKey(harness) {
7647
+ return `[${harness}]`;
7648
+ }
7649
+ function legacyHarnessOfBlockKey(key) {
7650
+ if (!key.startsWith("[") || !key.endsWith("]"))
7651
+ return;
7652
+ const harness = key.slice(1, -1);
7653
+ return Object.hasOwn(OMO_CONFIG_LEGACY_HARNESS_ALIASES, harness) ? harness : undefined;
7654
+ }
7655
+ function isRecord8(value) {
7656
+ return typeof value === "object" && value !== null && !Array.isArray(value);
7657
+ }
7658
+ function canonicalizeBlocksIn(container, path, renames) {
7659
+ const result = {};
7660
+ for (const [key, value] of Object.entries(container)) {
7661
+ const legacyHarness = legacyHarnessOfBlockKey(key);
7662
+ if (legacyHarness === undefined) {
7663
+ result[key] = value;
7664
+ continue;
7665
+ }
7666
+ const canonical = harnessBlockKey(canonicalHarnessName(legacyHarness));
7667
+ const dropped = Object.hasOwn(container, canonical);
7668
+ renames.push({ canonical, dropped, legacy: key, path: [...path, key].join(".") });
7669
+ if (!dropped)
7670
+ result[canonical] = value;
7671
+ }
7672
+ return result;
7673
+ }
7674
+ function canonicalizeLegacyHarnessBlocks(document) {
7675
+ if (!isRecord8(document))
7676
+ return { document: {}, renames: [] };
7677
+ const renames = [];
7678
+ const canonicalized = canonicalizeBlocksIn(document, [], renames);
7679
+ const profiles = canonicalized["profiles"];
7680
+ if (isRecord8(profiles)) {
7681
+ const canonicalProfiles = {};
7682
+ for (const [name, profile] of Object.entries(profiles)) {
7683
+ canonicalProfiles[name] = isRecord8(profile) ? canonicalizeBlocksIn(profile, ["profiles", name], renames) : profile;
7684
+ }
7685
+ canonicalized["profiles"] = canonicalProfiles;
7686
+ }
7687
+ return { document: canonicalized, renames };
7688
+ }
7689
+
7637
7690
  // ../../../node_modules/.bun/jsonc-parser@3.3.1/node_modules/jsonc-parser/lib/esm/impl/scanner.js
7638
7691
  function createScanner(text, ignoreTrivia = false) {
7639
7692
  const len = text.length;
@@ -8609,7 +8662,7 @@ function resolveOmoConfigPaths(options) {
8609
8662
  }
8610
8663
 
8611
8664
  // ../../omo-config-core/src/loader/resolution.ts
8612
- var HARNESS_KEYS = [...new Set([...HARNESS_IDS, ...OMO_CONFIG_HARNESS_IDS])].map((harness) => `[${harness}]`);
8665
+ var HARNESS_KEYS = [...new Set([...HARNESS_IDS, ...OMO_CONFIG_HARNESS_IDS, ...OMO_CONFIG_LEGACY_HARNESS_IDS])].map((harness) => harnessBlockKey(harness));
8613
8666
  function profileName(value) {
8614
8667
  return value === "" ? undefined : value;
8615
8668
  }
@@ -8638,7 +8691,13 @@ function withoutControlKeys(config) {
8638
8691
  function harnessLayer(config, harness) {
8639
8692
  if (harness === undefined)
8640
8693
  return {};
8641
- return toRecord(config[`[${harness}]`]) ?? {};
8694
+ const canonical = canonicalHarnessName(harness);
8695
+ const legacyKeys = Object.entries(OMO_CONFIG_LEGACY_HARNESS_ALIASES).filter(([, target]) => target === canonical).map(([legacy]) => harnessBlockKey(legacy));
8696
+ let layer = {};
8697
+ for (const key of [...legacyKeys, harnessBlockKey(canonical)]) {
8698
+ layer = mergeOmoConfigRecords(layer, toRecord(config[key]) ?? {});
8699
+ }
8700
+ return layer;
8642
8701
  }
8643
8702
  function resolveOmoConfigView(options) {
8644
8703
  const profiles = toRecord(options.config["profiles"]);
@@ -8689,6 +8748,7 @@ var DEFAULT_RAW_CONFIG = {
8689
8748
  function stripResolutionControlKeys(config) {
8690
8749
  const {
8691
8750
  "[codex]": _codex,
8751
+ "[native]": _native,
8692
8752
  "[opencode]": _opencode,
8693
8753
  "[senpi]": _senpi,
8694
8754
  profiles: _profiles,
@@ -8714,21 +8774,21 @@ function hasUnsafeUnrecognizedKey(issues) {
8714
8774
  function hasTamperedPrototype(value) {
8715
8775
  if (Array.isArray(value))
8716
8776
  return value.some((entry) => hasTamperedPrototype(entry));
8717
- if (!isRecord8(value))
8777
+ if (!isRecord9(value))
8718
8778
  return false;
8719
8779
  const prototype = Object.getPrototypeOf(value);
8720
8780
  if (prototype !== Object.prototype && prototype !== null)
8721
8781
  return true;
8722
8782
  return Object.values(value).some((entry) => hasTamperedPrototype(entry));
8723
8783
  }
8724
- function isRecord8(value) {
8784
+ function isRecord9(value) {
8725
8785
  return typeof value === "object" && value !== null && !Array.isArray(value);
8726
8786
  }
8727
8787
  function containerAt(record, path) {
8728
8788
  let container = record;
8729
8789
  for (const segment of path) {
8730
8790
  const next = container[segment];
8731
- if (!isRecord8(next))
8791
+ if (!isRecord9(next))
8732
8792
  return null;
8733
8793
  container = next;
8734
8794
  }
@@ -8839,6 +8899,15 @@ function legacyCategoryDiagnostic(path, renames) {
8839
8899
  issuePaths: renames.map((rename) => rename.path)
8840
8900
  };
8841
8901
  }
8902
+ function legacyHarnessDiagnostic(path, renames) {
8903
+ const detail = renames.map((rename) => rename.dropped ? `${rename.path} ignored because ${rename.canonical} is also configured` : `${rename.path} renamed to ${rename.canonical}`).join(", ");
8904
+ return {
8905
+ kind: "deprecated-keys",
8906
+ message: `Deprecated harness block in ${path}: ${detail}. Rename it; the alias is removed in a future release.`,
8907
+ path,
8908
+ issuePaths: renames.map((rename) => rename.path)
8909
+ };
8910
+ }
8842
8911
  function loadOmoConfig(options = {}) {
8843
8912
  const fileSystem = options.fileSystem ?? DEFAULT_READ_FILE_SYSTEM;
8844
8913
  const cwd = options.cwd ?? process.cwd();
@@ -8861,8 +8930,12 @@ function loadOmoConfig(options = {}) {
8861
8930
  if (canonicalized.renames.length > 0) {
8862
8931
  diagnostics.push(legacyCategoryDiagnostic(candidate.path, canonicalized.renames));
8863
8932
  }
8864
- layers.push({ config: canonicalized.document, source: loaded.source });
8865
- merged = mergeOmoConfigRecords(merged, canonicalized.document);
8933
+ const harnessCanonicalized = canonicalizeLegacyHarnessBlocks(canonicalized.document);
8934
+ if (harnessCanonicalized.renames.length > 0) {
8935
+ diagnostics.push(legacyHarnessDiagnostic(candidate.path, harnessCanonicalized.renames));
8936
+ }
8937
+ layers.push({ config: harnessCanonicalized.document, source: loaded.source });
8938
+ merged = mergeOmoConfigRecords(merged, harnessCanonicalized.document);
8866
8939
  }
8867
8940
  }
8868
8941
  const requestedProfile = resolveOmoProfileName({
@@ -11266,10 +11339,10 @@ function readCatalogMultiAgentVersion(model, cachePath) {
11266
11339
  } catch {
11267
11340
  return null;
11268
11341
  }
11269
- if (!isRecord9(cache) || !Array.isArray(cache.models))
11342
+ if (!isRecord10(cache) || !Array.isArray(cache.models))
11270
11343
  return null;
11271
11344
  for (const entry of cache.models) {
11272
- if (!isRecord9(entry))
11345
+ if (!isRecord10(entry))
11273
11346
  continue;
11274
11347
  if (entry.slug !== model && entry.id !== model)
11275
11348
  continue;
@@ -11294,7 +11367,7 @@ function readRootModelCatalogPath(config) {
11294
11367
  const single = config.match(/^\s*model_catalog_json\s*=\s*'([^']+)'/m);
11295
11368
  return single?.[1] ?? null;
11296
11369
  }
11297
- function isRecord9(value) {
11370
+ function isRecord10(value) {
11298
11371
  return typeof value === "object" && value !== null && !Array.isArray(value);
11299
11372
  }
11300
11373
  function removeFeatureFlagSetting(config, featureName) {
@@ -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.82) Checking Bootstrap Provisioning"
11
+ "statusMessage": "(OmO 5.0.0-beta.84) 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.82",
3
+ "version": "5.0.0-beta.84",
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.82) Checking Comments"
11
+ "statusMessage": "(OmO 5.0.0-beta.84) 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.82",
3
+ "version": "5.0.0-beta.84",
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.82) Recommending Git Bash MCP"
11
+ "statusMessage": "(OmO 5.0.0-beta.84) 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.82) Resetting Git Bash MCP Reminder"
23
+ "statusMessage": "(OmO 5.0.0-beta.84) 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.82",
3
+ "version": "5.0.0-beta.84",
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.82) Verifying LazyCodex Executor Evidence"
11
+ "statusMessage": "(OmO 5.0.0-beta.84) 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.82",
3
+ "version": "5.0.0-beta.84",
4
4
  "description": "Codex SubagentStop evidence verifier for LazyCodex executor completions.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -84,7 +84,7 @@ sync_latest_source() {
84
84
  git -C "$DEST" checkout -B "$DEFAULT_BRANCH" FETCH_HEAD
85
85
  }
86
86
  sync_latest_source code-yeongyu/lazycodex "$LAZYCODEX_SOURCE_ROOT/lazycodex-source"
87
- sync_latest_source openai/codex "$LAZYCODEX_SOURCE_ROOT/openai-codex-source"
87
+ sync_latest_source openai/codex "$LAZYCODEX_SOURCE_ROOT/chatgpt-subscription-source"
88
88
  ```
89
89
  4. Create a fresh temporary clone and branch under `${TMPDIR:-/tmp}`. Do not modify the user's current repository for the target fix unless the current repository is itself the requested target and the user explicitly asked for local edits.
90
90
 
@@ -58,7 +58,7 @@ sync_latest_source() {
58
58
  git -C "$DEST" checkout -B "$DEFAULT_BRANCH" FETCH_HEAD
59
59
  }
60
60
  sync_latest_source code-yeongyu/lazycodex "$LAZYCODEX_SOURCE_ROOT/lazycodex-source"
61
- sync_latest_source openai/codex "$LAZYCODEX_SOURCE_ROOT/openai-codex-source"
61
+ sync_latest_source openai/codex "$LAZYCODEX_SOURCE_ROOT/chatgpt-subscription-source"
62
62
  ```
63
63
 
64
64
  2. Inventory the installed surface. Resolve `CODEX_HOME` (default `~/.codex`), then collect:
@@ -102,7 +102,7 @@ sync_latest_source openai/codex "$LAZYCODEX_SOURCE_ROOT/openai-codex-source"
102
102
  | Plugin payload wiring | PASS/WARN/FAIL | [evidence] |
103
103
  | Bin links / aliases | PASS/WARN/FAIL | [evidence] |
104
104
  | Runtime probe | PASS/WARN/FAIL | [evidence] |
105
- | Drift vs latest source | PASS/WARN/FAIL | [evidence, citing `$LAZYCODEX_SOURCE_ROOT/lazycodex-source` or `$LAZYCODEX_SOURCE_ROOT/openai-codex-source` paths] |
105
+ | Drift vs latest source | PASS/WARN/FAIL | [evidence, citing `$LAZYCODEX_SOURCE_ROOT/lazycodex-source` or `$LAZYCODEX_SOURCE_ROOT/chatgpt-subscription-source` paths] |
106
106
 
107
107
  ### Remediations
108
108
  1. [Most important fix first: exact command or config edit, and what it resolves. When Astra readiness is WARN: upgrade Codex to 0.153.1 or newer and relaunch it once so `models_cache.json` picks up `gpt-6-astra`.]
@@ -124,7 +124,7 @@ Do not:
124
124
 
125
125
  - mutate config, installs, or repositories during diagnosis
126
126
  - report a verdict without captured evidence
127
- - compare against remembered source layout instead of `$LAZYCODEX_SOURCE_ROOT/lazycodex-source` and `$LAZYCODEX_SOURCE_ROOT/openai-codex-source`
127
+ - compare against remembered source layout instead of `$LAZYCODEX_SOURCE_ROOT/lazycodex-source` and `$LAZYCODEX_SOURCE_ROOT/chatgpt-subscription-source`
128
128
  - require retired payload paths that the current `.codex-plugin/plugin.json` does not declare
129
129
  - force a runtime-probe model unless the user explicitly passed one
130
130
  - declare healthy while any probe output was never captured
@@ -78,14 +78,14 @@ sync_latest_source() {
78
78
  git -C "$DEST" checkout -B "$DEFAULT_BRANCH" FETCH_HEAD
79
79
  }
80
80
  sync_latest_source code-yeongyu/lazycodex "$LAZYCODEX_SOURCE_ROOT/lazycodex-source"
81
- sync_latest_source openai/codex "$LAZYCODEX_SOURCE_ROOT/openai-codex-source"
81
+ sync_latest_source openai/codex "$LAZYCODEX_SOURCE_ROOT/chatgpt-subscription-source"
82
82
  ```
83
83
  4. Follow the debugging skill far enough to gather runtime evidence:
84
84
  - form at least three plausible hypotheses
85
85
  - run the smallest reproduction that exercises the real surface
86
86
  - confirm the root cause by observing the failing state
87
87
  - identify the minimal fix path or maintainer action
88
- 5. Compare runtime evidence with both `$LAZYCODEX_SOURCE_ROOT/lazycodex-source` and `$LAZYCODEX_SOURCE_ROOT/openai-codex-source` before choosing the target repo. Cite exact files, commands, logs, or source paths that support the routing decision.
88
+ 5. Compare runtime evidence with both `$LAZYCODEX_SOURCE_ROOT/lazycodex-source` and `$LAZYCODEX_SOURCE_ROOT/chatgpt-subscription-source` before choosing the target repo. Cite exact files, commands, logs, or source paths that support the routing decision.
89
89
  6. Choose the target repo:
90
90
  - Use `code-yeongyu/lazycodex` when the bug is in LazyCodex integration, distribution, bundled plugin code, skills, hooks, MCP wiring, installer behavior, aliases, marketplace sync, docs, or any behavior that disappears in clean upstream Codex.
91
91
  - Use `openai/codex` when the bug reproduces in clean upstream Codex without LazyCodex, or the failing behavior comes from Codex CLI core, plugin API contracts, sandboxing, approvals, config loading, or built-in tool behavior.
@@ -142,7 +142,7 @@ Write the issue body in English and keep it direct:
142
142
  - Target repository:
143
143
  - Why this belongs there:
144
144
  - LazyCodex evidence (runtime + `$LAZYCODEX_SOURCE_ROOT/lazycodex-source`):
145
- - Upstream Codex source evidence from `$LAZYCODEX_SOURCE_ROOT/openai-codex-source`:
145
+ - Upstream Codex source evidence from `$LAZYCODEX_SOURCE_ROOT/chatgpt-subscription-source`:
146
146
 
147
147
  ## Reproduction
148
148
  1. [Exact command or UI action]
@@ -186,7 +186,7 @@ Use this only when a PR is the right artifact, which is only ever for `openai/co
186
186
  - Target repository:
187
187
  - Why this belongs there:
188
188
  - LazyCodex evidence (runtime + `$LAZYCODEX_SOURCE_ROOT/lazycodex-source`):
189
- - Upstream Codex source evidence from `$LAZYCODEX_SOURCE_ROOT/openai-codex-source`:
189
+ - Upstream Codex source evidence from `$LAZYCODEX_SOURCE_ROOT/chatgpt-subscription-source`:
190
190
 
191
191
  ## Root Cause
192
192
  [Confirmed cause. Cite runtime evidence and source paths.]
@@ -263,6 +263,6 @@ Do not file:
263
263
  - a vague issue without reproduction steps
264
264
  - an issue that claims a root cause not supported by runtime evidence
265
265
  - a duplicate when commenting on an existing issue is enough
266
- - an issue without checking the latest `$LAZYCODEX_SOURCE_ROOT/lazycodex-source` and `$LAZYCODEX_SOURCE_ROOT/openai-codex-source` checkouts
266
+ - an issue without checking the latest `$LAZYCODEX_SOURCE_ROOT/lazycodex-source` and `$LAZYCODEX_SOURCE_ROOT/chatgpt-subscription-source` checkouts
267
267
  - a LazyCodex issue when the bug is proven to reproduce in clean upstream Codex
268
268
  - a fix PR without a concrete branch, implemented fix, and verification result
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "version": "5.0.0-beta.82",
4
- "inputDigest": "sha256:f84253a3ef9adbbb38854e910085ce47367ce00417a9e7b404c6c08c4b07ec63",
3
+ "version": "5.0.0-beta.84",
4
+ "inputDigest": "sha256:2352c5de469837fdff11b099d62ed46ad84c9bceacdee57fff7434cd5fe8731b",
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.82) Checking LSP Diagnostics"
11
+ "statusMessage": "(OmO 5.0.0-beta.84) 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.82) Resetting LSP Diagnostics Cache"
24
+ "statusMessage": "(OmO 5.0.0-beta.84) 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.82",
3
+ "version": "5.0.0-beta.84",
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.82) Loading Project Rules"
10
+ "statusMessage": "(OmO 5.0.0-beta.84) 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.82) Loading Project Rules"
22
+ "statusMessage": "(OmO 5.0.0-beta.84) 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.82) Matching Project Rules"
35
+ "statusMessage": "(OmO 5.0.0-beta.84) 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.82) Resetting Project Rule Cache"
48
+ "statusMessage": "(OmO 5.0.0-beta.84) 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.82",
3
+ "version": "5.0.0-beta.84",
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.82) Checking Thread Title Hygiene"
11
+ "statusMessage": "(OmO 5.0.0-beta.84) 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.82",
3
+ "version": "5.0.0-beta.84",
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.82) Recording Session Telemetry"
10
+ "statusMessage": "(OmO 5.0.0-beta.84) 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.82",
3
+ "version": "5.0.0-beta.84",
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.82) Checking Ultrawork Trigger"
10
+ "statusMessage": "(OmO 5.0.0-beta.84) 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.82",
3
+ "version": "5.0.0-beta.84",
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",
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/ulw-execute-continuation/dist/cli.js\" hook stop",
9
9
  "timeout": 10,
10
- "statusMessage": "(OmO 5.0.0-beta.82) Checking Ulw-Execute Continuation"
10
+ "statusMessage": "(OmO 5.0.0-beta.84) Checking Ulw-Execute Continuation"
11
11
  }
12
12
  ]
13
13
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-ulw-execute-continuation",
3
- "version": "5.0.0-beta.82",
3
+ "version": "5.0.0-beta.84",
4
4
  "description": "Codex Stop hook continuation injector for omo-codex ulw-execute plans.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",