lazycodex-ai 5.1.12 → 5.1.14

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 (84) hide show
  1. package/dist/cli/index.js +45 -18
  2. package/dist/cli-node/index.js +45 -18
  3. package/package.json +1 -1
  4. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  5. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  6. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  7. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  8. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  9. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  10. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  11. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  12. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  13. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +4 -4
  14. package/packages/omo-codex/plugin/components/lsp/dist/cli.js +33 -19
  15. package/packages/omo-codex/plugin/components/lsp/dist/codex-hook.js +27 -17
  16. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  17. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  18. package/packages/omo-codex/plugin/components/lsp/src/codex-hook.ts +36 -18
  19. package/packages/omo-codex/plugin/components/lsp/test/codex-hook-not-installed.test.ts +203 -0
  20. package/packages/omo-codex/plugin/components/rules/CHANGELOG.md +1 -0
  21. package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus/gpt-5.5.md +1 -1
  22. package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus/gpt-5.6.md +1 -1
  23. package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus/gpt-6.md +2 -2
  24. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  25. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  26. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  27. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  28. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  29. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  30. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  31. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  32. package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +1 -1
  33. package/packages/omo-codex/plugin/components/ulw-execute-continuation/package.json +1 -1
  34. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +89 -28
  35. package/packages/omo-codex/plugin/components/ulw-loop/dist/registered-agent-roles.d.ts +1 -0
  36. package/packages/omo-codex/plugin/components/ulw-loop/dist/registered-agent-roles.js +61 -0
  37. package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-guard.js +2 -1
  38. package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-role-guard.d.ts +1 -1
  39. package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-role-guard.js +6 -2
  40. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +5 -5
  41. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  42. package/packages/omo-codex/plugin/components/ulw-loop/src/registered-agent-roles.ts +60 -0
  43. package/packages/omo-codex/plugin/components/ulw-loop/src/spawn-guard.ts +2 -1
  44. package/packages/omo-codex/plugin/components/ulw-loop/src/spawn-role-guard.ts +8 -2
  45. package/packages/omo-codex/plugin/components/ulw-loop/test/spawn-role-matrix.test.ts +1 -0
  46. package/packages/omo-codex/plugin/components/ulw-loop/test/spawn-role-registered.test.ts +128 -0
  47. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  48. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  49. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  50. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  51. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  52. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  53. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  54. package/packages/omo-codex/plugin/hooks/post-tool-use-recording-spawn-admission.json +1 -1
  55. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  56. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  57. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  58. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  59. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  60. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  61. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  62. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +1 -1
  63. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  64. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  65. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  66. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  67. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  68. package/packages/omo-codex/plugin/package-lock.json +12 -12
  69. package/packages/omo-codex/plugin/package.json +1 -1
  70. package/packages/omo-codex/plugin/skills/browser/SKILL.md +26 -2
  71. package/packages/omo-codex/plugin/skills/browser/references/commands.md +10 -1
  72. package/packages/omo-codex/plugin/skills/browser/references/install.md +7 -0
  73. package/packages/omo-codex/plugin/skills/browser/runtime/omowright/manifest.json +1 -1
  74. package/packages/omo-codex/plugin/skills/browser/scripts/browser-engine-guard.mjs +506 -0
  75. package/packages/omo-codex/plugin/skills/browser/scripts/omowright.mjs +29 -2
  76. package/packages/omo-codex/plugin/test/aggregate-plugin-fixture.mjs +4 -3
  77. package/packages/omo-codex/plugin/test/aggregate.test.mjs +2 -2
  78. package/packages/omo-codex/scripts/install-dist/install-local.mjs +2 -2
  79. package/packages/shared-skills/skills/browser/SKILL.md +26 -2
  80. package/packages/shared-skills/skills/browser/references/commands.md +10 -1
  81. package/packages/shared-skills/skills/browser/references/install.md +7 -0
  82. package/packages/shared-skills/skills/browser/runtime/omowright/manifest.json +1 -1
  83. package/packages/shared-skills/skills/browser/scripts/browser-engine-guard.mjs +506 -0
  84. package/packages/shared-skills/skills/browser/scripts/omowright.mjs +29 -2
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.1.12",
67
+ version: "5.1.14",
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",
@@ -241,7 +241,7 @@ var init_package = __esm(() => {
241
241
  },
242
242
  devDependencies: {
243
243
  "@clack/prompts": "^1.8.1",
244
- "@code-yeongyu/senpi": "2026.10.2",
244
+ "@code-yeongyu/senpi": "2026.10.5",
245
245
  "@modelcontextprotocol/sdk": "^1.30.0",
246
246
  "@oh-my-opencode/agents-md-core": "workspace:*",
247
247
  "@oh-my-opencode/ast-grep-mcp": "workspace:*",
@@ -299,18 +299,18 @@ var init_package = __esm(() => {
299
299
  typescript: "^7.0.2"
300
300
  },
301
301
  optionalDependencies: {
302
- "oh-my-opencode-darwin-arm64": "5.1.12",
303
- "oh-my-opencode-darwin-x64": "5.1.12",
304
- "oh-my-opencode-darwin-x64-baseline": "5.1.12",
305
- "oh-my-opencode-linux-arm64": "5.1.12",
306
- "oh-my-opencode-linux-arm64-musl": "5.1.12",
307
- "oh-my-opencode-linux-x64": "5.1.12",
308
- "oh-my-opencode-linux-x64-baseline": "5.1.12",
309
- "oh-my-opencode-linux-x64-musl": "5.1.12",
310
- "oh-my-opencode-linux-x64-musl-baseline": "5.1.12",
311
- "oh-my-opencode-windows-arm64": "5.1.12",
312
- "oh-my-opencode-windows-x64": "5.1.12",
313
- "oh-my-opencode-windows-x64-baseline": "5.1.12"
302
+ "oh-my-opencode-darwin-arm64": "5.1.14",
303
+ "oh-my-opencode-darwin-x64": "5.1.14",
304
+ "oh-my-opencode-darwin-x64-baseline": "5.1.14",
305
+ "oh-my-opencode-linux-arm64": "5.1.14",
306
+ "oh-my-opencode-linux-arm64-musl": "5.1.14",
307
+ "oh-my-opencode-linux-x64": "5.1.14",
308
+ "oh-my-opencode-linux-x64-baseline": "5.1.14",
309
+ "oh-my-opencode-linux-x64-musl": "5.1.14",
310
+ "oh-my-opencode-linux-x64-musl-baseline": "5.1.14",
311
+ "oh-my-opencode-windows-arm64": "5.1.14",
312
+ "oh-my-opencode-windows-x64": "5.1.14",
313
+ "oh-my-opencode-windows-x64-baseline": "5.1.14"
314
314
  },
315
315
  overrides: {
316
316
  hono: "^4.13.8",
@@ -9493,7 +9493,7 @@ You are working on tasks that don't fit specific categories but require moderate
9493
9493
  </Category_Context>`, UNSPECIFIED_LOW_CATEGORY_CALLER_GUIDANCE = `<Selection_Gate>Use only when no specialist category fits, effort is moderate, and scope stays within a few files/modules. Prefer any matching specialist category.</Selection_Gate>
9494
9494
  <Caller_Warning>Provide explicit must-do steps, forbidden scope, and concrete success criteria.</Caller_Warning>`, UNSPECIFIED_HIGH_CATEGORY_PROMPT_APPEND = `<Category_Context>
9495
9495
  You are working on tasks that don't fit specific categories but require substantial effort.
9496
- </Category_Context>`, UNSPECIFIED_HIGH_CATEGORY_CALLER_GUIDANCE = `<Selection_Gate>Use only when no specialist category fits and substantial effort spans systems/modules with broad impact. Use unspecified-low for contained moderate work.</Selection_Gate>`, DEEP_LOW_CATEGORY_CALLER_GUIDANCE = `<Selection_Gate>Route here when one subsystem plus its callers holds the mechanism and the evidence, once read, leaves one right answer. Wide but mechanical work belongs here or in a quick batch. When unsure, choose deep-low: a misrouted child returns \`ESCALATE: deep-high\` after one cheap attempt; re-spawn the same brief as deep-high with its findings.</Selection_Gate>`, DEEP_HIGH_CATEGORY_CALLER_GUIDANCE = `<Selection_Gate>Route here only when you can name the decision evidence cannot settle: a trade-off with no single right answer, a contract change crossing a package or process boundary, a mechanism with no in-repo pattern to copy, or correctness argued from invariants rather than observed in a test. Wide scope with easy decisions is deep-low or unspecified-high; reasoning as the deliverable is ultrabrain.</Selection_Gate>`, DEEP_LOW_GATE_MODELS, DEEP_HIGH_GATE_MODEL = "gpt-6-astra", OPENAI_CATEGORIES;
9496
+ </Category_Context>`, UNSPECIFIED_HIGH_CATEGORY_CALLER_GUIDANCE = `<Selection_Gate>Use only when no specialist category fits and substantial effort spans systems/modules with broad impact. Use unspecified-low for contained moderate work.</Selection_Gate>`, DEEP_LOW_CATEGORY_CALLER_GUIDANCE = `<Selection_Gate>Of the two deep lanes this is the default: the child settles its decisions from what it reads. When unsure, choose deep-low; a misrouted child returns \`ESCALATE: deep-high\` after one cheap attempt, and you re-spawn the same brief as deep-high with its findings.</Selection_Gate>`, DEEP_HIGH_CATEGORY_CALLER_GUIDANCE = `<Selection_Gate>Route here only when you can name the decision evidence cannot settle: a trade-off with no single right answer, a contract change crossing a package or process boundary, a mechanism with no in-repo pattern to copy, or correctness argued from invariants rather than observed in a test. Wide scope with easy decisions is deep-low or unspecified-high; reasoning as the deliverable is ultrabrain.</Selection_Gate>`, DEEP_LOW_GATE_MODELS, DEEP_HIGH_GATE_MODEL = "gpt-6-astra", OPENAI_CATEGORIES;
9497
9497
  var init_openai_categories = __esm(() => {
9498
9498
  init_types();
9499
9499
  DEEP_LOW_GATE_MODELS = ["gpt-6.1-sol", "gpt-6.1-sol-fast", "gpt-5.6-sol-fast", "gpt-5.6-sol"];
@@ -9508,7 +9508,7 @@ var init_openai_categories = __esm(() => {
9508
9508
  {
9509
9509
  name: "deep-low",
9510
9510
  config: { model: "openai/gpt-6.1-sol", variant: "medium" },
9511
- description: "Default deep lane: one goal, one deliverable, decisions the child can settle from what it reads. **3D graphics, computer/browser use, CAPTCHA, multimodal, backend, logic, and algorithm work is routed here.** Multiple goals fan out as parallel calls.",
9511
+ description: "Default deep lane: one goal, one deliverable, decisions the child can settle from what it reads; preferred over deep-high for 3D graphics, computer/browser use, CAPTCHA, multimodal, backend, logic, and algorithm work. Multiple goals fan out as parallel calls.",
9512
9512
  callerGuidance: DEEP_LOW_CATEGORY_CALLER_GUIDANCE,
9513
9513
  promptAppend: DEEP_LOW_CATEGORY_PROMPT_APPEND,
9514
9514
  resolvePromptAppend: resolveDeepLowCategoryPromptAppend,
@@ -89369,7 +89369,7 @@ var package_default2;
89369
89369
  var init_package2 = __esm(() => {
89370
89370
  package_default2 = {
89371
89371
  name: "@oh-my-opencode/omo-codex",
89372
- version: "5.1.12",
89372
+ version: "5.1.14",
89373
89373
  type: "module",
89374
89374
  private: true,
89375
89375
  description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
@@ -98701,6 +98701,7 @@ var REQUIRED_PLUGIN_ARTIFACTS = [
98701
98701
  join63("extensions", "assets.generated.json"),
98702
98702
  join63("extensions", "omo-member.js"),
98703
98703
  join63("extensions", "memory-run-supervisor.mjs"),
98704
+ join63("extensions", "gateway-store-worker.mjs"),
98704
98705
  ...PERSONA_ASSET_FILES.map((filename) => join63("extensions", filename)),
98705
98706
  join63("skills", "ast-grep", "SKILL.md"),
98706
98707
  join63("skills", "browser", "SKILL.md"),
@@ -98723,6 +98724,7 @@ var REQUIRED_PLUGIN_ARTIFACTS = [
98723
98724
  join63("skills", "visual-qa", "SKILL.md"),
98724
98725
  join63("skills-conditional", "x-search", "SKILL.md"),
98725
98726
  join63("runtime", "agent-toolkit-sdk", "sdk.js"),
98727
+ join63("runtime", "thread-sdk", "sdk.js"),
98726
98728
  join63("runtime", "ast-grep-mcp", "cli.js"),
98727
98729
  join63("runtime", "lsp-daemon", "dist", "cli.js"),
98728
98730
  join63("runtime", "lsp-daemon", "dist", "index.js"),
@@ -105240,10 +105242,14 @@ function resolveOsProvider2() {
105240
105242
  function resolveTransportFactory() {
105241
105243
  return transportFactoryOverride2 ?? createDefaultPostHogTransport;
105242
105244
  }
105245
+ var PLUGIN_TRANSPORT_OPTIONS = { flushAt: 20 };
105243
105246
  var NO_OP_POSTHOG2 = {
105244
105247
  trackActive: () => {
105245
105248
  return;
105246
105249
  },
105250
+ flush: async () => {
105251
+ return;
105252
+ },
105247
105253
  shutdown: async () => {
105248
105254
  return;
105249
105255
  }
@@ -105280,6 +105286,16 @@ function logTelemetryDiagnostic(input) {
105280
105286
  source: input.source
105281
105287
  });
105282
105288
  }
105289
+ function createProductConfig(source) {
105290
+ const product = createOpencodeTelemetryProductConfig();
105291
+ if (source !== "plugin") {
105292
+ return product;
105293
+ }
105294
+ return {
105295
+ ...product,
105296
+ transportOptions: { ...product.transportOptions, ...PLUGIN_TRANSPORT_OPTIONS }
105297
+ };
105298
+ }
105283
105299
  function createPostHogClient2(source, options = {}) {
105284
105300
  const env = process.env;
105285
105301
  if (shouldDisablePostHog(env, options.configEnabled)) {
@@ -105289,7 +105305,7 @@ function createPostHogClient2(source, options = {}) {
105289
105305
  diagnostics: logTelemetryDiagnostic,
105290
105306
  env: createCoreCompatibleTelemetryEnv(env),
105291
105307
  osProvider: resolveOsProvider2(),
105292
- product: createOpencodeTelemetryProductConfig(),
105308
+ product: createProductConfig(source),
105293
105309
  source,
105294
105310
  transportFactory: resolveTransportFactory()
105295
105311
  });
@@ -105308,6 +105324,17 @@ function createPostHogClient2(source, options = {}) {
105308
105324
  reason
105309
105325
  });
105310
105326
  },
105327
+ flush: async () => {
105328
+ try {
105329
+ await client.flush();
105330
+ } catch (error) {
105331
+ log2("[posthog] telemetry flush failed", {
105332
+ error: String(error),
105333
+ errorKind: error instanceof Error ? "error" : "non_error",
105334
+ source
105335
+ });
105336
+ }
105337
+ },
105311
105338
  shutdown: async () => {
105312
105339
  await client.shutdown();
105313
105340
  }
@@ -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.1.12",
68
+ version: "5.1.14",
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",
@@ -242,7 +242,7 @@ var init_package = __esm(() => {
242
242
  },
243
243
  devDependencies: {
244
244
  "@clack/prompts": "^1.8.1",
245
- "@code-yeongyu/senpi": "2026.10.2",
245
+ "@code-yeongyu/senpi": "2026.10.5",
246
246
  "@modelcontextprotocol/sdk": "^1.30.0",
247
247
  "@oh-my-opencode/agents-md-core": "workspace:*",
248
248
  "@oh-my-opencode/ast-grep-mcp": "workspace:*",
@@ -300,18 +300,18 @@ var init_package = __esm(() => {
300
300
  typescript: "^7.0.2"
301
301
  },
302
302
  optionalDependencies: {
303
- "oh-my-opencode-darwin-arm64": "5.1.12",
304
- "oh-my-opencode-darwin-x64": "5.1.12",
305
- "oh-my-opencode-darwin-x64-baseline": "5.1.12",
306
- "oh-my-opencode-linux-arm64": "5.1.12",
307
- "oh-my-opencode-linux-arm64-musl": "5.1.12",
308
- "oh-my-opencode-linux-x64": "5.1.12",
309
- "oh-my-opencode-linux-x64-baseline": "5.1.12",
310
- "oh-my-opencode-linux-x64-musl": "5.1.12",
311
- "oh-my-opencode-linux-x64-musl-baseline": "5.1.12",
312
- "oh-my-opencode-windows-arm64": "5.1.12",
313
- "oh-my-opencode-windows-x64": "5.1.12",
314
- "oh-my-opencode-windows-x64-baseline": "5.1.12"
303
+ "oh-my-opencode-darwin-arm64": "5.1.14",
304
+ "oh-my-opencode-darwin-x64": "5.1.14",
305
+ "oh-my-opencode-darwin-x64-baseline": "5.1.14",
306
+ "oh-my-opencode-linux-arm64": "5.1.14",
307
+ "oh-my-opencode-linux-arm64-musl": "5.1.14",
308
+ "oh-my-opencode-linux-x64": "5.1.14",
309
+ "oh-my-opencode-linux-x64-baseline": "5.1.14",
310
+ "oh-my-opencode-linux-x64-musl": "5.1.14",
311
+ "oh-my-opencode-linux-x64-musl-baseline": "5.1.14",
312
+ "oh-my-opencode-windows-arm64": "5.1.14",
313
+ "oh-my-opencode-windows-x64": "5.1.14",
314
+ "oh-my-opencode-windows-x64-baseline": "5.1.14"
315
315
  },
316
316
  overrides: {
317
317
  hono: "^4.13.8",
@@ -9494,7 +9494,7 @@ You are working on tasks that don't fit specific categories but require moderate
9494
9494
  </Category_Context>`, UNSPECIFIED_LOW_CATEGORY_CALLER_GUIDANCE = `<Selection_Gate>Use only when no specialist category fits, effort is moderate, and scope stays within a few files/modules. Prefer any matching specialist category.</Selection_Gate>
9495
9495
  <Caller_Warning>Provide explicit must-do steps, forbidden scope, and concrete success criteria.</Caller_Warning>`, UNSPECIFIED_HIGH_CATEGORY_PROMPT_APPEND = `<Category_Context>
9496
9496
  You are working on tasks that don't fit specific categories but require substantial effort.
9497
- </Category_Context>`, UNSPECIFIED_HIGH_CATEGORY_CALLER_GUIDANCE = `<Selection_Gate>Use only when no specialist category fits and substantial effort spans systems/modules with broad impact. Use unspecified-low for contained moderate work.</Selection_Gate>`, DEEP_LOW_CATEGORY_CALLER_GUIDANCE = `<Selection_Gate>Route here when one subsystem plus its callers holds the mechanism and the evidence, once read, leaves one right answer. Wide but mechanical work belongs here or in a quick batch. When unsure, choose deep-low: a misrouted child returns \`ESCALATE: deep-high\` after one cheap attempt; re-spawn the same brief as deep-high with its findings.</Selection_Gate>`, DEEP_HIGH_CATEGORY_CALLER_GUIDANCE = `<Selection_Gate>Route here only when you can name the decision evidence cannot settle: a trade-off with no single right answer, a contract change crossing a package or process boundary, a mechanism with no in-repo pattern to copy, or correctness argued from invariants rather than observed in a test. Wide scope with easy decisions is deep-low or unspecified-high; reasoning as the deliverable is ultrabrain.</Selection_Gate>`, DEEP_LOW_GATE_MODELS, DEEP_HIGH_GATE_MODEL = "gpt-6-astra", OPENAI_CATEGORIES;
9497
+ </Category_Context>`, UNSPECIFIED_HIGH_CATEGORY_CALLER_GUIDANCE = `<Selection_Gate>Use only when no specialist category fits and substantial effort spans systems/modules with broad impact. Use unspecified-low for contained moderate work.</Selection_Gate>`, DEEP_LOW_CATEGORY_CALLER_GUIDANCE = `<Selection_Gate>Of the two deep lanes this is the default: the child settles its decisions from what it reads. When unsure, choose deep-low; a misrouted child returns \`ESCALATE: deep-high\` after one cheap attempt, and you re-spawn the same brief as deep-high with its findings.</Selection_Gate>`, DEEP_HIGH_CATEGORY_CALLER_GUIDANCE = `<Selection_Gate>Route here only when you can name the decision evidence cannot settle: a trade-off with no single right answer, a contract change crossing a package or process boundary, a mechanism with no in-repo pattern to copy, or correctness argued from invariants rather than observed in a test. Wide scope with easy decisions is deep-low or unspecified-high; reasoning as the deliverable is ultrabrain.</Selection_Gate>`, DEEP_LOW_GATE_MODELS, DEEP_HIGH_GATE_MODEL = "gpt-6-astra", OPENAI_CATEGORIES;
9498
9498
  var init_openai_categories = __esm(() => {
9499
9499
  init_types();
9500
9500
  DEEP_LOW_GATE_MODELS = ["gpt-6.1-sol", "gpt-6.1-sol-fast", "gpt-5.6-sol-fast", "gpt-5.6-sol"];
@@ -9509,7 +9509,7 @@ var init_openai_categories = __esm(() => {
9509
9509
  {
9510
9510
  name: "deep-low",
9511
9511
  config: { model: "openai/gpt-6.1-sol", variant: "medium" },
9512
- description: "Default deep lane: one goal, one deliverable, decisions the child can settle from what it reads. **3D graphics, computer/browser use, CAPTCHA, multimodal, backend, logic, and algorithm work is routed here.** Multiple goals fan out as parallel calls.",
9512
+ description: "Default deep lane: one goal, one deliverable, decisions the child can settle from what it reads; preferred over deep-high for 3D graphics, computer/browser use, CAPTCHA, multimodal, backend, logic, and algorithm work. Multiple goals fan out as parallel calls.",
9513
9513
  callerGuidance: DEEP_LOW_CATEGORY_CALLER_GUIDANCE,
9514
9514
  promptAppend: DEEP_LOW_CATEGORY_PROMPT_APPEND,
9515
9515
  resolvePromptAppend: resolveDeepLowCategoryPromptAppend,
@@ -89448,7 +89448,7 @@ var package_default2;
89448
89448
  var init_package2 = __esm(() => {
89449
89449
  package_default2 = {
89450
89450
  name: "@oh-my-opencode/omo-codex",
89451
- version: "5.1.12",
89451
+ version: "5.1.14",
89452
89452
  type: "module",
89453
89453
  private: true,
89454
89454
  description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
@@ -98780,6 +98780,7 @@ var REQUIRED_PLUGIN_ARTIFACTS = [
98780
98780
  join63("extensions", "assets.generated.json"),
98781
98781
  join63("extensions", "omo-member.js"),
98782
98782
  join63("extensions", "memory-run-supervisor.mjs"),
98783
+ join63("extensions", "gateway-store-worker.mjs"),
98783
98784
  ...PERSONA_ASSET_FILES.map((filename) => join63("extensions", filename)),
98784
98785
  join63("skills", "ast-grep", "SKILL.md"),
98785
98786
  join63("skills", "browser", "SKILL.md"),
@@ -98802,6 +98803,7 @@ var REQUIRED_PLUGIN_ARTIFACTS = [
98802
98803
  join63("skills", "visual-qa", "SKILL.md"),
98803
98804
  join63("skills-conditional", "x-search", "SKILL.md"),
98804
98805
  join63("runtime", "agent-toolkit-sdk", "sdk.js"),
98806
+ join63("runtime", "thread-sdk", "sdk.js"),
98805
98807
  join63("runtime", "ast-grep-mcp", "cli.js"),
98806
98808
  join63("runtime", "lsp-daemon", "dist", "cli.js"),
98807
98809
  join63("runtime", "lsp-daemon", "dist", "index.js"),
@@ -105319,10 +105321,14 @@ function resolveOsProvider2() {
105319
105321
  function resolveTransportFactory() {
105320
105322
  return transportFactoryOverride2 ?? createDefaultPostHogTransport;
105321
105323
  }
105324
+ var PLUGIN_TRANSPORT_OPTIONS = { flushAt: 20 };
105322
105325
  var NO_OP_POSTHOG2 = {
105323
105326
  trackActive: () => {
105324
105327
  return;
105325
105328
  },
105329
+ flush: async () => {
105330
+ return;
105331
+ },
105326
105332
  shutdown: async () => {
105327
105333
  return;
105328
105334
  }
@@ -105359,6 +105365,16 @@ function logTelemetryDiagnostic(input) {
105359
105365
  source: input.source
105360
105366
  });
105361
105367
  }
105368
+ function createProductConfig(source) {
105369
+ const product = createOpencodeTelemetryProductConfig();
105370
+ if (source !== "plugin") {
105371
+ return product;
105372
+ }
105373
+ return {
105374
+ ...product,
105375
+ transportOptions: { ...product.transportOptions, ...PLUGIN_TRANSPORT_OPTIONS }
105376
+ };
105377
+ }
105362
105378
  function createPostHogClient2(source, options = {}) {
105363
105379
  const env = process.env;
105364
105380
  if (shouldDisablePostHog(env, options.configEnabled)) {
@@ -105368,7 +105384,7 @@ function createPostHogClient2(source, options = {}) {
105368
105384
  diagnostics: logTelemetryDiagnostic,
105369
105385
  env: createCoreCompatibleTelemetryEnv(env),
105370
105386
  osProvider: resolveOsProvider2(),
105371
- product: createOpencodeTelemetryProductConfig(),
105387
+ product: createProductConfig(source),
105372
105388
  source,
105373
105389
  transportFactory: resolveTransportFactory()
105374
105390
  });
@@ -105387,6 +105403,17 @@ function createPostHogClient2(source, options = {}) {
105387
105403
  reason
105388
105404
  });
105389
105405
  },
105406
+ flush: async () => {
105407
+ try {
105408
+ await client.flush();
105409
+ } catch (error) {
105410
+ log2("[posthog] telemetry flush failed", {
105411
+ error: String(error),
105412
+ errorKind: error instanceof Error ? "error" : "non_error",
105413
+ source
105414
+ });
105415
+ }
105416
+ },
105390
105417
  shutdown: async () => {
105391
105418
  await client.shutdown();
105392
105419
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lazycodex-ai",
3
- "version": "5.1.12",
3
+ "version": "5.1.14",
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.1.12",
3
+ "version": "5.1.14",
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.1.12) Checking Bootstrap Provisioning"
11
+ "statusMessage": "(OmO 5.1.14) Checking Bootstrap Provisioning"
12
12
  }
13
13
  ]
14
14
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sisyphuslabs/codex-bootstrap",
3
- "version": "5.1.12",
3
+ "version": "5.1.14",
4
4
  "description": "Codex SessionStart bootstrap component that provisions LazyCodex runtime dependencies from a detached worker.",
5
5
  "type": "module",
6
6
  "private": true,
@@ -8,7 +8,7 @@
8
8
  "type": "command",
9
9
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-tool-use",
10
10
  "timeout": 30,
11
- "statusMessage": "(OmO 5.1.12) Checking Comments"
11
+ "statusMessage": "(OmO 5.1.14) Checking Comments"
12
12
  }
13
13
  ]
14
14
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-comment-checker",
3
- "version": "5.1.12",
3
+ "version": "5.1.14",
4
4
  "description": "Codex plugin that runs comment-checker after edit-like PostToolUse hooks.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -8,7 +8,7 @@
8
8
  "type": "command",
9
9
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook pre-tool-use",
10
10
  "timeout": 5,
11
- "statusMessage": "(OmO 5.1.12) Recommending Git Bash MCP"
11
+ "statusMessage": "(OmO 5.1.14) Recommending Git Bash MCP"
12
12
  }
13
13
  ]
14
14
  }
@@ -20,7 +20,7 @@
20
20
  "type": "command",
21
21
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-compact",
22
22
  "timeout": 5,
23
- "statusMessage": "(OmO 5.1.12) Resetting Git Bash MCP Reminder"
23
+ "statusMessage": "(OmO 5.1.14) Resetting Git Bash MCP Reminder"
24
24
  }
25
25
  ]
26
26
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sisyphuslabs/codex-git-bash-hook",
3
- "version": "5.1.12",
3
+ "version": "5.1.14",
4
4
  "description": "Codex hook component that reminds Windows sessions to prefer the OMO git_bash MCP.",
5
5
  "type": "module",
6
6
  "private": true,
@@ -8,7 +8,7 @@
8
8
  "type": "command",
9
9
  "command": "node \"${PLUGIN_ROOT}/components/lazycodex-executor-verify/dist/cli.js\" hook subagent-stop",
10
10
  "timeout": 10,
11
- "statusMessage": "(OmO 5.1.12) Verifying LazyCodex Executor Evidence"
11
+ "statusMessage": "(OmO 5.1.14) Verifying LazyCodex Executor Evidence"
12
12
  }
13
13
  ]
14
14
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-lazycodex-executor-verify",
3
- "version": "5.1.12",
3
+ "version": "5.1.14",
4
4
  "description": "Codex SubagentStop evidence verifier for LazyCodex executor completions.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "version": "5.1.12",
4
- "inputDigest": "sha256:f517d3f26ad40930383addf0f4d9fb57550a14d8564264f4d6b04c20b6057e7a",
3
+ "version": "5.1.14",
4
+ "inputDigest": "sha256:d1ee8c51725f4649bd6437bbe0a02cf6f922ce19e2229d12d02c4d3ddccdafde",
5
5
  "outputs": [
6
6
  {
7
7
  "path": "cli.d.ts",
@@ -9,7 +9,7 @@
9
9
  },
10
10
  {
11
11
  "path": "cli.js",
12
- "sha256": "d793d83fb82b1fafe52e619f545c5195398498d1f95f15d84904fe3d0a20befe"
12
+ "sha256": "f2776c0f9c2a893136e9e8e36c2e086172f10c0ab3566a730cff4443b712f956"
13
13
  },
14
14
  {
15
15
  "path": "codex-hook-cli.d.ts",
@@ -25,7 +25,7 @@
25
25
  },
26
26
  {
27
27
  "path": "codex-hook.js",
28
- "sha256": "9a4f53b980521752f603c9a46de8001294c1b964a31f7945eb48ecdae4bf12ac"
28
+ "sha256": "6e054189fe9efc941916d3469f1342344aadc20215c91fa6209e2f98139d6ed5"
29
29
  },
30
30
  {
31
31
  "path": "daemon-cli-path.d.ts",
@@ -5958,7 +5958,11 @@ async function collectPostEditDiagnostics(input) {
5958
5958
  observations.push({ filePath: result.filePath, kind: "not_configured" });
5959
5959
  break;
5960
5960
  case "block":
5961
- blocks.push({ filePath: result.filePath, diagnostics: classification.diagnostics });
5961
+ blocks.push({ filePath: result.filePath, diagnostics: classification.diagnostics, blocking: true });
5962
+ observations.push({ filePath: result.filePath, kind: "block" });
5963
+ break;
5964
+ case "guidance":
5965
+ blocks.push({ filePath: result.filePath, diagnostics: classification.text, blocking: false });
5962
5966
  observations.push({ filePath: result.filePath, kind: "block" });
5963
5967
  break;
5964
5968
  default: {
@@ -6020,7 +6024,7 @@ function normalizeDiagnosticsOutcome(outcome) {
6020
6024
  return outcome;
6021
6025
  }
6022
6026
  function classifyNotInstalled(guidance) {
6023
- return guidance === undefined ? { kind: "not_installed" } : { kind: "block", diagnostics: guidance };
6027
+ return guidance === undefined ? { kind: "not_installed" } : { kind: "guidance", text: guidance };
6024
6028
  }
6025
6029
  function normalizeDiagnosticsText(text) {
6026
6030
  return text.trim();
@@ -6277,22 +6281,33 @@ async function runLspDiagnosticsText(filePath) {
6277
6281
  return postEditOutcomeFromDaemonResult(result);
6278
6282
  }
6279
6283
  function postEditOutcomeFromDaemonResult(result) {
6280
- const availability = notConfiguredAvailability(result.details);
6281
- if (availability !== undefined)
6282
- return { kind: "not_configured", extension: availability.extension };
6283
- return result.content.map((block) => block.text).join(`
6284
+ const text = result.content.map((block) => block.text).join(`
6284
6285
  `);
6286
+ const availability = availabilityDetails2(result.details);
6287
+ if (availability === undefined)
6288
+ return text;
6289
+ if (availability["kind"] === "not_configured") {
6290
+ const extension = availability["extension"];
6291
+ return typeof extension === "string" && extension.length > 0 ? { kind: "not_configured", extension } : text;
6292
+ }
6293
+ if (availability["kind"] === "not_installed")
6294
+ return notInstalledOutcome(availability, text) ?? text;
6295
+ return text;
6285
6296
  }
6286
- function notConfiguredAvailability(details) {
6297
+ function availabilityDetails2(details) {
6287
6298
  if (!isRecord11(details))
6288
6299
  return;
6289
6300
  const availability = details["availability"];
6290
- if (!isRecord11(availability))
6291
- return;
6292
- if (availability["kind"] !== "not_configured")
6301
+ return isRecord11(availability) ? availability : undefined;
6302
+ }
6303
+ function notInstalledOutcome(availability, text) {
6304
+ const serverId = availability["serverId"];
6305
+ const installDecisionTool = availability["installDecisionTool"];
6306
+ if (typeof serverId !== "string" || serverId.length === 0 || typeof installDecisionTool !== "boolean")
6293
6307
  return;
6294
- const extension = availability["extension"];
6295
- return typeof extension === "string" && extension.length > 0 ? { extension } : undefined;
6308
+ const decision = availability["decision"];
6309
+ const base = { kind: "not_installed", serverId, installDecisionTool, text };
6310
+ return decision === "declined" || decision === "allowed" ? { ...base, decision } : base;
6296
6311
  }
6297
6312
  function codexLspRequestContext(env = process.env, cwd = process.cwd()) {
6298
6313
  const canonicalCwd = realpathSync7(resolve11(cwd));
@@ -6320,14 +6335,13 @@ async function runLspPostToolUseHook(input, runDiagnostics = runLspDiagnosticsTe
6320
6335
 
6321
6336
  `);
6322
6337
  const reason = limitHookText(rawReason, hookFeedbackLimit(input.transcript_path));
6323
- const output = {
6324
- decision: "block",
6325
- reason,
6326
- hookSpecificOutput: {
6327
- hookEventName: "PostToolUse",
6328
- additionalContext: reason
6329
- }
6338
+ const context = {
6339
+ hookSpecificOutput: { hookEventName: "PostToolUse", additionalContext: reason }
6330
6340
  };
6341
+ if (!blocks.some((block) => block.blocking))
6342
+ return `${JSON.stringify(context)}
6343
+ `;
6344
+ const output = { decision: "block", reason, ...context };
6331
6345
  return `${JSON.stringify(output)}
6332
6346
  `;
6333
6347
  }
@@ -27,21 +27,32 @@ export async function runLspDiagnosticsText(filePath) {
27
27
  return postEditOutcomeFromDaemonResult(result);
28
28
  }
29
29
  function postEditOutcomeFromDaemonResult(result) {
30
- const availability = notConfiguredAvailability(result.details);
31
- if (availability !== undefined)
32
- return { kind: "not_configured", extension: availability.extension };
33
- return result.content.map((block) => block.text).join("\n");
30
+ const text = result.content.map((block) => block.text).join("\n");
31
+ const availability = availabilityDetails(result.details);
32
+ if (availability === undefined)
33
+ return text;
34
+ if (availability["kind"] === "not_configured") {
35
+ const extension = availability["extension"];
36
+ return typeof extension === "string" && extension.length > 0 ? { kind: "not_configured", extension } : text;
37
+ }
38
+ if (availability["kind"] === "not_installed")
39
+ return notInstalledOutcome(availability, text) ?? text;
40
+ return text;
34
41
  }
35
- function notConfiguredAvailability(details) {
42
+ function availabilityDetails(details) {
36
43
  if (!isRecord(details))
37
44
  return undefined;
38
45
  const availability = details["availability"];
39
- if (!isRecord(availability))
40
- return undefined;
41
- if (availability["kind"] !== "not_configured")
46
+ return isRecord(availability) ? availability : undefined;
47
+ }
48
+ function notInstalledOutcome(availability, text) {
49
+ const serverId = availability["serverId"];
50
+ const installDecisionTool = availability["installDecisionTool"];
51
+ if (typeof serverId !== "string" || serverId.length === 0 || typeof installDecisionTool !== "boolean")
42
52
  return undefined;
43
- const extension = availability["extension"];
44
- return typeof extension === "string" && extension.length > 0 ? { extension } : undefined;
53
+ const decision = availability["decision"];
54
+ const base = { kind: "not_installed", serverId, installDecisionTool, text };
55
+ return decision === "declined" || decision === "allowed" ? { ...base, decision } : base;
45
56
  }
46
57
  export function codexLspRequestContext(env = process.env, cwd = process.cwd()) {
47
58
  const canonicalCwd = realpathSync(resolve(cwd));
@@ -67,14 +78,13 @@ export async function runLspPostToolUseHook(input, runDiagnostics = runLspDiagno
67
78
  return "";
68
79
  const rawReason = blocks.map(formatDiagnosticBlock).join("\n\n");
69
80
  const reason = limitHookText(rawReason, hookFeedbackLimit(input.transcript_path));
70
- const output = {
71
- decision: "block",
72
- reason,
73
- hookSpecificOutput: {
74
- hookEventName: "PostToolUse",
75
- additionalContext: reason,
76
- },
81
+ const context = {
82
+ hookSpecificOutput: { hookEventName: "PostToolUse", additionalContext: reason },
77
83
  };
84
+ // Missing-server guidance alone is a note for the model; only real diagnostics block the edit.
85
+ if (!blocks.some((block) => block.blocking))
86
+ return `${JSON.stringify(context)}\n`;
87
+ const output = { decision: "block", reason, ...context };
78
88
  return `${JSON.stringify(output)}\n`;
79
89
  }
80
90
  export async function runLspPostCompactHook(input) {
@@ -8,7 +8,7 @@
8
8
  "type": "command",
9
9
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-tool-use",
10
10
  "timeout": 60,
11
- "statusMessage": "(OmO 5.1.12) Checking LSP Diagnostics"
11
+ "statusMessage": "(OmO 5.1.14) Checking LSP Diagnostics"
12
12
  }
13
13
  ]
14
14
  }
@@ -21,7 +21,7 @@
21
21
  "type": "command",
22
22
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-compact",
23
23
  "timeout": 5,
24
- "statusMessage": "(OmO 5.1.12) Resetting LSP Diagnostics Cache"
24
+ "statusMessage": "(OmO 5.1.14) Resetting LSP Diagnostics Cache"
25
25
  }
26
26
  ]
27
27
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-lsp",
3
- "version": "5.1.12",
3
+ "version": "5.1.14",
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",