oh-my-opencode 5.1.19 → 5.1.22

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 (78) hide show
  1. package/dist/cli/index.js +110 -89
  2. package/dist/cli-node/index.js +110 -89
  3. package/dist/index.js +129 -118
  4. package/dist/skills/browser/runtime/omowright/manifest.json +1 -1
  5. package/dist/skills/frontend/ATTRIBUTION.md +12 -0
  6. package/dist/skills/frontend/SKILL.md +1 -0
  7. package/dist/skills/frontend/references/design/_INDEX.md +2 -1
  8. package/dist/skills/frontend/references/design/ambience-skill.md +1 -1
  9. package/dist/skills/frontend/references/design/component-catalogs.md +83 -0
  10. package/dist/skills/frontend/references/design/design-system-architecture.md +1 -1
  11. package/dist/skills/frontend/references/design/interaction-skill.md +1 -1
  12. package/dist/tui.js +87 -76
  13. package/package.json +14 -14
  14. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  15. package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +11 -0
  16. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  17. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  18. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  19. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  20. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  21. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  22. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  23. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  24. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +2 -2
  25. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  26. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  27. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  28. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  29. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  30. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  31. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  32. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  33. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  34. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  35. package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +1 -1
  36. package/packages/omo-codex/plugin/components/ulw-execute-continuation/package.json +1 -1
  37. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +5 -5
  38. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  39. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  40. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  41. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  42. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  43. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  44. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  45. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  46. package/packages/omo-codex/plugin/hooks/post-tool-use-recording-spawn-admission.json +1 -1
  47. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  48. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  49. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  50. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  51. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  52. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  53. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  54. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +1 -1
  55. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  56. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  57. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  58. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  59. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  60. package/packages/omo-codex/plugin/package-lock.json +12 -12
  61. package/packages/omo-codex/plugin/package.json +1 -1
  62. package/packages/omo-codex/plugin/skills/browser/runtime/omowright/manifest.json +1 -1
  63. package/packages/omo-codex/plugin/skills/frontend/ATTRIBUTION.md +12 -0
  64. package/packages/omo-codex/plugin/skills/frontend/SKILL.md +1 -0
  65. package/packages/omo-codex/plugin/skills/frontend/references/design/_INDEX.md +2 -1
  66. package/packages/omo-codex/plugin/skills/frontend/references/design/ambience-skill.md +1 -1
  67. package/packages/omo-codex/plugin/skills/frontend/references/design/component-catalogs.md +83 -0
  68. package/packages/omo-codex/plugin/skills/frontend/references/design/design-system-architecture.md +1 -1
  69. package/packages/omo-codex/plugin/skills/frontend/references/design/interaction-skill.md +1 -1
  70. package/packages/omo-codex/scripts/install-dist/install-local.mjs +21 -2
  71. package/packages/shared-skills/skills/browser/runtime/omowright/manifest.json +1 -1
  72. package/packages/shared-skills/skills/frontend/ATTRIBUTION.md +12 -0
  73. package/packages/shared-skills/skills/frontend/SKILL.md +1 -0
  74. package/packages/shared-skills/skills/frontend/references/design/_INDEX.md +2 -1
  75. package/packages/shared-skills/skills/frontend/references/design/ambience-skill.md +1 -1
  76. package/packages/shared-skills/skills/frontend/references/design/component-catalogs.md +83 -0
  77. package/packages/shared-skills/skills/frontend/references/design/design-system-architecture.md +1 -1
  78. package/packages/shared-skills/skills/frontend/references/design/interaction-skill.md +1 -1
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.19",
67
+ version: "5.1.22",
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.10",
244
+ "@code-yeongyu/senpi": "2026.10.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.19",
303
- "oh-my-opencode-darwin-x64": "5.1.19",
304
- "oh-my-opencode-darwin-x64-baseline": "5.1.19",
305
- "oh-my-opencode-linux-arm64": "5.1.19",
306
- "oh-my-opencode-linux-arm64-musl": "5.1.19",
307
- "oh-my-opencode-linux-x64": "5.1.19",
308
- "oh-my-opencode-linux-x64-baseline": "5.1.19",
309
- "oh-my-opencode-linux-x64-musl": "5.1.19",
310
- "oh-my-opencode-linux-x64-musl-baseline": "5.1.19",
311
- "oh-my-opencode-windows-arm64": "5.1.19",
312
- "oh-my-opencode-windows-x64": "5.1.19",
313
- "oh-my-opencode-windows-x64-baseline": "5.1.19"
302
+ "oh-my-opencode-darwin-arm64": "5.1.22",
303
+ "oh-my-opencode-darwin-x64": "5.1.22",
304
+ "oh-my-opencode-darwin-x64-baseline": "5.1.22",
305
+ "oh-my-opencode-linux-arm64": "5.1.22",
306
+ "oh-my-opencode-linux-arm64-musl": "5.1.22",
307
+ "oh-my-opencode-linux-x64": "5.1.22",
308
+ "oh-my-opencode-linux-x64-baseline": "5.1.22",
309
+ "oh-my-opencode-linux-x64-musl": "5.1.22",
310
+ "oh-my-opencode-linux-x64-musl-baseline": "5.1.22",
311
+ "oh-my-opencode-windows-arm64": "5.1.22",
312
+ "oh-my-opencode-windows-x64": "5.1.22",
313
+ "oh-my-opencode-windows-x64-baseline": "5.1.22"
314
314
  },
315
315
  overrides: {
316
316
  hono: "^4.13.8",
@@ -7518,6 +7518,79 @@ var init_model_requirements = __esm(() => {
7518
7518
  init_category_model_requirements();
7519
7519
  });
7520
7520
 
7521
+ // packages/model-core/src/reasoning-level.ts
7522
+ function isReasoningLevelOrAuto(value) {
7523
+ return REASONING_LEVEL_OR_AUTO_SET.has(value);
7524
+ }
7525
+ function clampReasoningLevel(value, allowed) {
7526
+ const ladder = REASONING_LEVELS;
7527
+ const requestedIndex = ladder.indexOf(value);
7528
+ if (requestedIndex === -1)
7529
+ return;
7530
+ for (let index = requestedIndex;index >= 0; index -= 1) {
7531
+ const candidate = REASONING_LEVELS[index];
7532
+ if (candidate !== undefined && allowed.includes(candidate))
7533
+ return candidate;
7534
+ }
7535
+ return;
7536
+ }
7537
+ function splitReasoningSuffix(model, options) {
7538
+ if (typeof model !== "string")
7539
+ return { base: "" };
7540
+ const trimmed = model.trim();
7541
+ if (!trimmed)
7542
+ return { base: "" };
7543
+ const separatorIndex = trimmed.lastIndexOf(":");
7544
+ if (separatorIndex === -1)
7545
+ return { base: trimmed };
7546
+ const base = trimmed.slice(0, separatorIndex).trim();
7547
+ const token = trimmed.slice(separatorIndex + 1).trim().toLowerCase();
7548
+ if (!base || !isReasoningLevelOrAuto(token))
7549
+ return { base: trimmed };
7550
+ if (token === "max" && !(options?.allowMaxSuffix ?? base.includes("/")))
7551
+ return { base: trimmed };
7552
+ return { base, level: token };
7553
+ }
7554
+ var REASONING_LEVELS, REASONING_AUTO = "auto", REASONING_LEVEL_SET, REASONING_LEVEL_OR_AUTO_SET;
7555
+ var init_reasoning_level = __esm(() => {
7556
+ REASONING_LEVELS = ["off", "minimal", "low", "medium", "high", "xhigh", "max"];
7557
+ REASONING_LEVEL_SET = new Set(REASONING_LEVELS);
7558
+ REASONING_LEVEL_OR_AUTO_SET = new Set([...REASONING_LEVELS, REASONING_AUTO]);
7559
+ });
7560
+
7561
+ // packages/model-core/src/model-string-parser.ts
7562
+ function parseVariantFromModelID(rawModelID, options) {
7563
+ if (typeof rawModelID !== "string") {
7564
+ return { modelID: "" };
7565
+ }
7566
+ const trimmedModelID = rawModelID.trim();
7567
+ if (!trimmedModelID) {
7568
+ return { modelID: "" };
7569
+ }
7570
+ const parenthesizedVariant = trimmedModelID.match(/^(.*)\(([^()]+)\)\s*$/);
7571
+ if (parenthesizedVariant) {
7572
+ const modelID = parenthesizedVariant[1]?.trim() ?? "";
7573
+ const variant = parenthesizedVariant[2]?.trim();
7574
+ return variant ? { modelID, variant } : { modelID };
7575
+ }
7576
+ const suffixedModel = splitReasoningSuffix(trimmedModelID, options);
7577
+ if (suffixedModel.level) {
7578
+ return { modelID: suffixedModel.base, variant: suffixedModel.level };
7579
+ }
7580
+ const spaceVariant = trimmedModelID.match(/^(.*\S)\s+([a-z][a-z0-9_-]*)$/i);
7581
+ if (spaceVariant) {
7582
+ const modelID = spaceVariant[1]?.trim() ?? "";
7583
+ const variant = spaceVariant[2]?.trim().toLowerCase();
7584
+ if (variant) {
7585
+ return { modelID, variant };
7586
+ }
7587
+ }
7588
+ return { modelID: trimmedModelID };
7589
+ }
7590
+ var init_model_string_parser = __esm(() => {
7591
+ init_reasoning_level();
7592
+ });
7593
+
7521
7594
  // packages/model-core/src/model-family-detectors.ts
7522
7595
  function extractModelName(model) {
7523
7596
  return model.includes("/") ? model.split("/").pop() ?? model : model;
@@ -7636,79 +7709,6 @@ function normalizeModelID(modelID) {
7636
7709
  return modelID.replace(/\.(\d+)/g, "-$1");
7637
7710
  }
7638
7711
 
7639
- // packages/model-core/src/reasoning-level.ts
7640
- function isReasoningLevelOrAuto(value) {
7641
- return REASONING_LEVEL_OR_AUTO_SET.has(value);
7642
- }
7643
- function clampReasoningLevel(value, allowed) {
7644
- const ladder = REASONING_LEVELS;
7645
- const requestedIndex = ladder.indexOf(value);
7646
- if (requestedIndex === -1)
7647
- return;
7648
- for (let index = requestedIndex;index >= 0; index -= 1) {
7649
- const candidate = REASONING_LEVELS[index];
7650
- if (candidate !== undefined && allowed.includes(candidate))
7651
- return candidate;
7652
- }
7653
- return;
7654
- }
7655
- function splitReasoningSuffix(model, options) {
7656
- if (typeof model !== "string")
7657
- return { base: "" };
7658
- const trimmed = model.trim();
7659
- if (!trimmed)
7660
- return { base: "" };
7661
- const separatorIndex = trimmed.lastIndexOf(":");
7662
- if (separatorIndex === -1)
7663
- return { base: trimmed };
7664
- const base = trimmed.slice(0, separatorIndex).trim();
7665
- const token = trimmed.slice(separatorIndex + 1).trim().toLowerCase();
7666
- if (!base || !isReasoningLevelOrAuto(token))
7667
- return { base: trimmed };
7668
- if (token === "max" && !(options?.allowMaxSuffix ?? base.includes("/")))
7669
- return { base: trimmed };
7670
- return { base, level: token };
7671
- }
7672
- var REASONING_LEVELS, REASONING_AUTO = "auto", REASONING_LEVEL_SET, REASONING_LEVEL_OR_AUTO_SET;
7673
- var init_reasoning_level = __esm(() => {
7674
- REASONING_LEVELS = ["off", "minimal", "low", "medium", "high", "xhigh", "max"];
7675
- REASONING_LEVEL_SET = new Set(REASONING_LEVELS);
7676
- REASONING_LEVEL_OR_AUTO_SET = new Set([...REASONING_LEVELS, REASONING_AUTO]);
7677
- });
7678
-
7679
- // packages/model-core/src/model-string-parser.ts
7680
- function parseVariantFromModelID(rawModelID, options) {
7681
- if (typeof rawModelID !== "string") {
7682
- return { modelID: "" };
7683
- }
7684
- const trimmedModelID = rawModelID.trim();
7685
- if (!trimmedModelID) {
7686
- return { modelID: "" };
7687
- }
7688
- const parenthesizedVariant = trimmedModelID.match(/^(.*)\(([^()]+)\)\s*$/);
7689
- if (parenthesizedVariant) {
7690
- const modelID = parenthesizedVariant[1]?.trim() ?? "";
7691
- const variant = parenthesizedVariant[2]?.trim();
7692
- return variant ? { modelID, variant } : { modelID };
7693
- }
7694
- const suffixedModel = splitReasoningSuffix(trimmedModelID, options);
7695
- if (suffixedModel.level) {
7696
- return { modelID: suffixedModel.base, variant: suffixedModel.level };
7697
- }
7698
- const spaceVariant = trimmedModelID.match(/^(.*\S)\s+([a-z][a-z0-9_-]*)$/i);
7699
- if (spaceVariant) {
7700
- const modelID = spaceVariant[1]?.trim() ?? "";
7701
- const variant = spaceVariant[2]?.trim().toLowerCase();
7702
- if (variant) {
7703
- return { modelID, variant };
7704
- }
7705
- }
7706
- return { modelID: trimmedModelID };
7707
- }
7708
- var init_model_string_parser = __esm(() => {
7709
- init_reasoning_level();
7710
- });
7711
-
7712
7712
  // packages/model-core/src/model-capability-heuristics.ts
7713
7713
  function detectHeuristicModelFamily(modelID) {
7714
7714
  const parsedModel = parseVariantFromModelID(modelID, { allowMaxSuffix: true });
@@ -74552,7 +74552,7 @@ var init_harness = __esm(() => {
74552
74552
  });
74553
74553
 
74554
74554
  // packages/omo-config-core/src/schema/memory.ts
74555
- var OmoMemoryReflectionTriggerSchema, OmoMemoryReflectionSchema, OmoMemorySyncSchema, OmoMemorySearchSchema, OmoMemoryRecallEventCapsSchema, OmoMemoryRecallSchema, OmoMemoryNudgeSchema, OmoMemoryFactsSchema, OmoMemoryDreamSchema, OmoMemoryPeopleSchema, OmoMemorySoulSchema, OmoMemoryWriteNoticeSchema, OmoMemoryReflectionTriggerLayerSchema, OmoMemoryReflectionLayerSchema, OmoMemorySyncLayerSchema, OmoMemorySearchLayerSchema, OmoMemoryRecallEventCapsLayerSchema, OmoMemoryRecallLayerSchema, OmoMemoryNudgeLayerSchema, OmoMemoryFactsLayerSchema, OmoMemoryDreamLayerSchema, OmoMemoryPeopleLayerSchema, OmoMemorySoulLayerSchema, OmoMemoryWriteNoticeLayerSchema, OmoMemoryAgentOverridesSchema, OmoMemorySettingsSchema, OmoMemorySettingsLayerSchema;
74555
+ var OmoMemoryReflectionTriggerSchema, OmoMemoryReflectionSchema, OmoMemorySyncSchema, OmoMemorySearchSchema, OmoMemoryRecallEventCapsSchema, OmoMemoryRecallSchema, OmoMemoryNudgeSchema, OmoMemoryFactsSchema, OmoMemoryDreamSchema, OmoMemoryPeopleSchema, OmoMemorySoulSchema, OmoMemoryWriteNoticeSchema, OmoMemoryReflectionTriggerLayerSchema, OmoMemoryReflectionLayerSchema, OmoMemorySyncLayerSchema, OmoMemorySearchLayerSchema, OmoMemoryRecallEventCapsLayerSchema, OmoMemoryRecallLayerSchema, OmoMemoryNudgeLayerSchema, OmoMemoryFactsLayerSchema, OmoMemoryDreamLayerSchema, OmoMemoryPeopleLayerSchema, OmoMemorySoulLayerSchema, OmoMemoryWriteNoticeLayerSchema, OmoMemoryProjectionSchema, OmoMemoryProjectionLayerSchema, OmoMemoryAgentOverridesSchema, OmoMemorySettingsSchema, OmoMemorySettingsLayerSchema;
74556
74556
  var init_memory = __esm(() => {
74557
74557
  init_zod();
74558
74558
  OmoMemoryReflectionTriggerSchema = object({
@@ -74679,6 +74679,14 @@ var init_memory = __esm(() => {
74679
74679
  OmoMemoryWriteNoticeLayerSchema = object({
74680
74680
  enabled: boolean2().optional()
74681
74681
  }).strict();
74682
+ OmoMemoryProjectionSchema = object({
74683
+ max_entries_per_directory: number2().int().min(0).default(40),
74684
+ max_bytes: number2().int().min(0).default(24576)
74685
+ }).strict();
74686
+ OmoMemoryProjectionLayerSchema = object({
74687
+ max_entries_per_directory: number2().int().min(0).optional(),
74688
+ max_bytes: number2().int().min(0).optional()
74689
+ }).strict();
74682
74690
  OmoMemoryAgentOverridesSchema = object({
74683
74691
  enabled: boolean2().optional(),
74684
74692
  agent: string2().min(1).optional(),
@@ -74692,6 +74700,7 @@ var init_memory = __esm(() => {
74692
74700
  sync: OmoMemorySyncLayerSchema.optional(),
74693
74701
  search: OmoMemorySearchLayerSchema.optional(),
74694
74702
  recall: OmoMemoryRecallLayerSchema.optional(),
74703
+ projection: OmoMemoryProjectionLayerSchema.optional(),
74695
74704
  compile_warn_tokens: number2().int().positive().optional()
74696
74705
  }).strict();
74697
74706
  OmoMemorySettingsSchema = object({
@@ -74730,6 +74739,7 @@ var init_memory = __esm(() => {
74730
74739
  tool_budget: 8,
74731
74740
  query_expansion: false
74732
74741
  }),
74742
+ projection: OmoMemoryProjectionSchema.default({ max_entries_per_directory: 40, max_bytes: 24576 }),
74733
74743
  compile_warn_tokens: number2().int().positive().default(30000),
74734
74744
  agents: record(string2(), OmoMemoryAgentOverridesSchema).default({})
74735
74745
  }).strict();
@@ -74746,6 +74756,7 @@ var init_memory = __esm(() => {
74746
74756
  sync: OmoMemorySyncLayerSchema.optional(),
74747
74757
  search: OmoMemorySearchLayerSchema.optional(),
74748
74758
  recall: OmoMemoryRecallLayerSchema.optional(),
74759
+ projection: OmoMemoryProjectionLayerSchema.optional(),
74749
74760
  compile_warn_tokens: number2().int().positive().optional(),
74750
74761
  agents: record(string2(), OmoMemoryAgentOverridesSchema).optional()
74751
74762
  }).strict();
@@ -89369,7 +89380,7 @@ var package_default2;
89369
89380
  var init_package2 = __esm(() => {
89370
89381
  package_default2 = {
89371
89382
  name: "@oh-my-opencode/omo-codex",
89372
- version: "5.1.19",
89383
+ version: "5.1.22",
89373
89384
  type: "module",
89374
89385
  private: true,
89375
89386
  description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
@@ -94009,6 +94020,14 @@ async function installCachedPlugin(input) {
94009
94020
  await rewriteCachedManifestRoot(tempPath, tempPath, targetPath);
94010
94021
  await assertHookCommandTargets(tempPath);
94011
94022
  await promoteDirectory(tempPath, targetPath, input.renameDirectory ?? rename);
94023
+ const versions = await readdir4(dirname13(targetPath), { withFileTypes: true });
94024
+ for (const entry of versions) {
94025
+ if (!entry.isDirectory() || entry.name === input.version || entry.name.startsWith("."))
94026
+ continue;
94027
+ if (!/^[a-zA-Z0-9_+-][a-zA-Z0-9._+-]*$/.test(entry.name))
94028
+ continue;
94029
+ await rm4(join31(dirname13(targetPath), entry.name), { recursive: true, force: true });
94030
+ }
94012
94031
  } catch (error) {
94013
94032
  await rm4(tempPath, { recursive: true, force: true });
94014
94033
  throw error;
@@ -98707,6 +98726,8 @@ var REQUIRED_PLUGIN_ARTIFACTS = [
98707
98726
  ...PERSONA_ASSET_FILES.map((filename) => join63("extensions", filename)),
98708
98727
  join63("skills", "ast-grep", "SKILL.md"),
98709
98728
  join63("skills", "browser", "SKILL.md"),
98729
+ join63("skills", "browser", "runtime", "omowright", "index.js"),
98730
+ join63("skills", "browser", "runtime", "omowright", "page-bundle.js"),
98710
98731
  join63("skills", "coding-agent-sessions", "SKILL.md"),
98711
98732
  join63("skills", "debugging", "SKILL.md"),
98712
98733
  join63("skills", "frontend", "SKILL.md"),
@@ -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.19",
68
+ version: "5.1.22",
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.10",
245
+ "@code-yeongyu/senpi": "2026.10.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.19",
304
- "oh-my-opencode-darwin-x64": "5.1.19",
305
- "oh-my-opencode-darwin-x64-baseline": "5.1.19",
306
- "oh-my-opencode-linux-arm64": "5.1.19",
307
- "oh-my-opencode-linux-arm64-musl": "5.1.19",
308
- "oh-my-opencode-linux-x64": "5.1.19",
309
- "oh-my-opencode-linux-x64-baseline": "5.1.19",
310
- "oh-my-opencode-linux-x64-musl": "5.1.19",
311
- "oh-my-opencode-linux-x64-musl-baseline": "5.1.19",
312
- "oh-my-opencode-windows-arm64": "5.1.19",
313
- "oh-my-opencode-windows-x64": "5.1.19",
314
- "oh-my-opencode-windows-x64-baseline": "5.1.19"
303
+ "oh-my-opencode-darwin-arm64": "5.1.22",
304
+ "oh-my-opencode-darwin-x64": "5.1.22",
305
+ "oh-my-opencode-darwin-x64-baseline": "5.1.22",
306
+ "oh-my-opencode-linux-arm64": "5.1.22",
307
+ "oh-my-opencode-linux-arm64-musl": "5.1.22",
308
+ "oh-my-opencode-linux-x64": "5.1.22",
309
+ "oh-my-opencode-linux-x64-baseline": "5.1.22",
310
+ "oh-my-opencode-linux-x64-musl": "5.1.22",
311
+ "oh-my-opencode-linux-x64-musl-baseline": "5.1.22",
312
+ "oh-my-opencode-windows-arm64": "5.1.22",
313
+ "oh-my-opencode-windows-x64": "5.1.22",
314
+ "oh-my-opencode-windows-x64-baseline": "5.1.22"
315
315
  },
316
316
  overrides: {
317
317
  hono: "^4.13.8",
@@ -7519,6 +7519,79 @@ var init_model_requirements = __esm(() => {
7519
7519
  init_category_model_requirements();
7520
7520
  });
7521
7521
 
7522
+ // packages/model-core/src/reasoning-level.ts
7523
+ function isReasoningLevelOrAuto(value) {
7524
+ return REASONING_LEVEL_OR_AUTO_SET.has(value);
7525
+ }
7526
+ function clampReasoningLevel(value, allowed) {
7527
+ const ladder = REASONING_LEVELS;
7528
+ const requestedIndex = ladder.indexOf(value);
7529
+ if (requestedIndex === -1)
7530
+ return;
7531
+ for (let index = requestedIndex;index >= 0; index -= 1) {
7532
+ const candidate = REASONING_LEVELS[index];
7533
+ if (candidate !== undefined && allowed.includes(candidate))
7534
+ return candidate;
7535
+ }
7536
+ return;
7537
+ }
7538
+ function splitReasoningSuffix(model, options) {
7539
+ if (typeof model !== "string")
7540
+ return { base: "" };
7541
+ const trimmed = model.trim();
7542
+ if (!trimmed)
7543
+ return { base: "" };
7544
+ const separatorIndex = trimmed.lastIndexOf(":");
7545
+ if (separatorIndex === -1)
7546
+ return { base: trimmed };
7547
+ const base = trimmed.slice(0, separatorIndex).trim();
7548
+ const token = trimmed.slice(separatorIndex + 1).trim().toLowerCase();
7549
+ if (!base || !isReasoningLevelOrAuto(token))
7550
+ return { base: trimmed };
7551
+ if (token === "max" && !(options?.allowMaxSuffix ?? base.includes("/")))
7552
+ return { base: trimmed };
7553
+ return { base, level: token };
7554
+ }
7555
+ var REASONING_LEVELS, REASONING_AUTO = "auto", REASONING_LEVEL_SET, REASONING_LEVEL_OR_AUTO_SET;
7556
+ var init_reasoning_level = __esm(() => {
7557
+ REASONING_LEVELS = ["off", "minimal", "low", "medium", "high", "xhigh", "max"];
7558
+ REASONING_LEVEL_SET = new Set(REASONING_LEVELS);
7559
+ REASONING_LEVEL_OR_AUTO_SET = new Set([...REASONING_LEVELS, REASONING_AUTO]);
7560
+ });
7561
+
7562
+ // packages/model-core/src/model-string-parser.ts
7563
+ function parseVariantFromModelID(rawModelID, options) {
7564
+ if (typeof rawModelID !== "string") {
7565
+ return { modelID: "" };
7566
+ }
7567
+ const trimmedModelID = rawModelID.trim();
7568
+ if (!trimmedModelID) {
7569
+ return { modelID: "" };
7570
+ }
7571
+ const parenthesizedVariant = trimmedModelID.match(/^(.*)\(([^()]+)\)\s*$/);
7572
+ if (parenthesizedVariant) {
7573
+ const modelID = parenthesizedVariant[1]?.trim() ?? "";
7574
+ const variant = parenthesizedVariant[2]?.trim();
7575
+ return variant ? { modelID, variant } : { modelID };
7576
+ }
7577
+ const suffixedModel = splitReasoningSuffix(trimmedModelID, options);
7578
+ if (suffixedModel.level) {
7579
+ return { modelID: suffixedModel.base, variant: suffixedModel.level };
7580
+ }
7581
+ const spaceVariant = trimmedModelID.match(/^(.*\S)\s+([a-z][a-z0-9_-]*)$/i);
7582
+ if (spaceVariant) {
7583
+ const modelID = spaceVariant[1]?.trim() ?? "";
7584
+ const variant = spaceVariant[2]?.trim().toLowerCase();
7585
+ if (variant) {
7586
+ return { modelID, variant };
7587
+ }
7588
+ }
7589
+ return { modelID: trimmedModelID };
7590
+ }
7591
+ var init_model_string_parser = __esm(() => {
7592
+ init_reasoning_level();
7593
+ });
7594
+
7522
7595
  // packages/model-core/src/model-family-detectors.ts
7523
7596
  function extractModelName(model) {
7524
7597
  return model.includes("/") ? model.split("/").pop() ?? model : model;
@@ -7637,79 +7710,6 @@ function normalizeModelID(modelID) {
7637
7710
  return modelID.replace(/\.(\d+)/g, "-$1");
7638
7711
  }
7639
7712
 
7640
- // packages/model-core/src/reasoning-level.ts
7641
- function isReasoningLevelOrAuto(value) {
7642
- return REASONING_LEVEL_OR_AUTO_SET.has(value);
7643
- }
7644
- function clampReasoningLevel(value, allowed) {
7645
- const ladder = REASONING_LEVELS;
7646
- const requestedIndex = ladder.indexOf(value);
7647
- if (requestedIndex === -1)
7648
- return;
7649
- for (let index = requestedIndex;index >= 0; index -= 1) {
7650
- const candidate = REASONING_LEVELS[index];
7651
- if (candidate !== undefined && allowed.includes(candidate))
7652
- return candidate;
7653
- }
7654
- return;
7655
- }
7656
- function splitReasoningSuffix(model, options) {
7657
- if (typeof model !== "string")
7658
- return { base: "" };
7659
- const trimmed = model.trim();
7660
- if (!trimmed)
7661
- return { base: "" };
7662
- const separatorIndex = trimmed.lastIndexOf(":");
7663
- if (separatorIndex === -1)
7664
- return { base: trimmed };
7665
- const base = trimmed.slice(0, separatorIndex).trim();
7666
- const token = trimmed.slice(separatorIndex + 1).trim().toLowerCase();
7667
- if (!base || !isReasoningLevelOrAuto(token))
7668
- return { base: trimmed };
7669
- if (token === "max" && !(options?.allowMaxSuffix ?? base.includes("/")))
7670
- return { base: trimmed };
7671
- return { base, level: token };
7672
- }
7673
- var REASONING_LEVELS, REASONING_AUTO = "auto", REASONING_LEVEL_SET, REASONING_LEVEL_OR_AUTO_SET;
7674
- var init_reasoning_level = __esm(() => {
7675
- REASONING_LEVELS = ["off", "minimal", "low", "medium", "high", "xhigh", "max"];
7676
- REASONING_LEVEL_SET = new Set(REASONING_LEVELS);
7677
- REASONING_LEVEL_OR_AUTO_SET = new Set([...REASONING_LEVELS, REASONING_AUTO]);
7678
- });
7679
-
7680
- // packages/model-core/src/model-string-parser.ts
7681
- function parseVariantFromModelID(rawModelID, options) {
7682
- if (typeof rawModelID !== "string") {
7683
- return { modelID: "" };
7684
- }
7685
- const trimmedModelID = rawModelID.trim();
7686
- if (!trimmedModelID) {
7687
- return { modelID: "" };
7688
- }
7689
- const parenthesizedVariant = trimmedModelID.match(/^(.*)\(([^()]+)\)\s*$/);
7690
- if (parenthesizedVariant) {
7691
- const modelID = parenthesizedVariant[1]?.trim() ?? "";
7692
- const variant = parenthesizedVariant[2]?.trim();
7693
- return variant ? { modelID, variant } : { modelID };
7694
- }
7695
- const suffixedModel = splitReasoningSuffix(trimmedModelID, options);
7696
- if (suffixedModel.level) {
7697
- return { modelID: suffixedModel.base, variant: suffixedModel.level };
7698
- }
7699
- const spaceVariant = trimmedModelID.match(/^(.*\S)\s+([a-z][a-z0-9_-]*)$/i);
7700
- if (spaceVariant) {
7701
- const modelID = spaceVariant[1]?.trim() ?? "";
7702
- const variant = spaceVariant[2]?.trim().toLowerCase();
7703
- if (variant) {
7704
- return { modelID, variant };
7705
- }
7706
- }
7707
- return { modelID: trimmedModelID };
7708
- }
7709
- var init_model_string_parser = __esm(() => {
7710
- init_reasoning_level();
7711
- });
7712
-
7713
7713
  // packages/model-core/src/model-capability-heuristics.ts
7714
7714
  function detectHeuristicModelFamily(modelID) {
7715
7715
  const parsedModel = parseVariantFromModelID(modelID, { allowMaxSuffix: true });
@@ -74631,7 +74631,7 @@ var init_harness = __esm(() => {
74631
74631
  });
74632
74632
 
74633
74633
  // packages/omo-config-core/src/schema/memory.ts
74634
- var OmoMemoryReflectionTriggerSchema, OmoMemoryReflectionSchema, OmoMemorySyncSchema, OmoMemorySearchSchema, OmoMemoryRecallEventCapsSchema, OmoMemoryRecallSchema, OmoMemoryNudgeSchema, OmoMemoryFactsSchema, OmoMemoryDreamSchema, OmoMemoryPeopleSchema, OmoMemorySoulSchema, OmoMemoryWriteNoticeSchema, OmoMemoryReflectionTriggerLayerSchema, OmoMemoryReflectionLayerSchema, OmoMemorySyncLayerSchema, OmoMemorySearchLayerSchema, OmoMemoryRecallEventCapsLayerSchema, OmoMemoryRecallLayerSchema, OmoMemoryNudgeLayerSchema, OmoMemoryFactsLayerSchema, OmoMemoryDreamLayerSchema, OmoMemoryPeopleLayerSchema, OmoMemorySoulLayerSchema, OmoMemoryWriteNoticeLayerSchema, OmoMemoryAgentOverridesSchema, OmoMemorySettingsSchema, OmoMemorySettingsLayerSchema;
74634
+ var OmoMemoryReflectionTriggerSchema, OmoMemoryReflectionSchema, OmoMemorySyncSchema, OmoMemorySearchSchema, OmoMemoryRecallEventCapsSchema, OmoMemoryRecallSchema, OmoMemoryNudgeSchema, OmoMemoryFactsSchema, OmoMemoryDreamSchema, OmoMemoryPeopleSchema, OmoMemorySoulSchema, OmoMemoryWriteNoticeSchema, OmoMemoryReflectionTriggerLayerSchema, OmoMemoryReflectionLayerSchema, OmoMemorySyncLayerSchema, OmoMemorySearchLayerSchema, OmoMemoryRecallEventCapsLayerSchema, OmoMemoryRecallLayerSchema, OmoMemoryNudgeLayerSchema, OmoMemoryFactsLayerSchema, OmoMemoryDreamLayerSchema, OmoMemoryPeopleLayerSchema, OmoMemorySoulLayerSchema, OmoMemoryWriteNoticeLayerSchema, OmoMemoryProjectionSchema, OmoMemoryProjectionLayerSchema, OmoMemoryAgentOverridesSchema, OmoMemorySettingsSchema, OmoMemorySettingsLayerSchema;
74635
74635
  var init_memory = __esm(() => {
74636
74636
  init_zod();
74637
74637
  OmoMemoryReflectionTriggerSchema = object({
@@ -74758,6 +74758,14 @@ var init_memory = __esm(() => {
74758
74758
  OmoMemoryWriteNoticeLayerSchema = object({
74759
74759
  enabled: boolean2().optional()
74760
74760
  }).strict();
74761
+ OmoMemoryProjectionSchema = object({
74762
+ max_entries_per_directory: number2().int().min(0).default(40),
74763
+ max_bytes: number2().int().min(0).default(24576)
74764
+ }).strict();
74765
+ OmoMemoryProjectionLayerSchema = object({
74766
+ max_entries_per_directory: number2().int().min(0).optional(),
74767
+ max_bytes: number2().int().min(0).optional()
74768
+ }).strict();
74761
74769
  OmoMemoryAgentOverridesSchema = object({
74762
74770
  enabled: boolean2().optional(),
74763
74771
  agent: string2().min(1).optional(),
@@ -74771,6 +74779,7 @@ var init_memory = __esm(() => {
74771
74779
  sync: OmoMemorySyncLayerSchema.optional(),
74772
74780
  search: OmoMemorySearchLayerSchema.optional(),
74773
74781
  recall: OmoMemoryRecallLayerSchema.optional(),
74782
+ projection: OmoMemoryProjectionLayerSchema.optional(),
74774
74783
  compile_warn_tokens: number2().int().positive().optional()
74775
74784
  }).strict();
74776
74785
  OmoMemorySettingsSchema = object({
@@ -74809,6 +74818,7 @@ var init_memory = __esm(() => {
74809
74818
  tool_budget: 8,
74810
74819
  query_expansion: false
74811
74820
  }),
74821
+ projection: OmoMemoryProjectionSchema.default({ max_entries_per_directory: 40, max_bytes: 24576 }),
74812
74822
  compile_warn_tokens: number2().int().positive().default(30000),
74813
74823
  agents: record(string2(), OmoMemoryAgentOverridesSchema).default({})
74814
74824
  }).strict();
@@ -74825,6 +74835,7 @@ var init_memory = __esm(() => {
74825
74835
  sync: OmoMemorySyncLayerSchema.optional(),
74826
74836
  search: OmoMemorySearchLayerSchema.optional(),
74827
74837
  recall: OmoMemoryRecallLayerSchema.optional(),
74838
+ projection: OmoMemoryProjectionLayerSchema.optional(),
74828
74839
  compile_warn_tokens: number2().int().positive().optional(),
74829
74840
  agents: record(string2(), OmoMemoryAgentOverridesSchema).optional()
74830
74841
  }).strict();
@@ -89448,7 +89459,7 @@ var package_default2;
89448
89459
  var init_package2 = __esm(() => {
89449
89460
  package_default2 = {
89450
89461
  name: "@oh-my-opencode/omo-codex",
89451
- version: "5.1.19",
89462
+ version: "5.1.22",
89452
89463
  type: "module",
89453
89464
  private: true,
89454
89465
  description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
@@ -94088,6 +94099,14 @@ async function installCachedPlugin(input) {
94088
94099
  await rewriteCachedManifestRoot(tempPath, tempPath, targetPath);
94089
94100
  await assertHookCommandTargets(tempPath);
94090
94101
  await promoteDirectory(tempPath, targetPath, input.renameDirectory ?? rename);
94102
+ const versions = await readdir4(dirname13(targetPath), { withFileTypes: true });
94103
+ for (const entry of versions) {
94104
+ if (!entry.isDirectory() || entry.name === input.version || entry.name.startsWith("."))
94105
+ continue;
94106
+ if (!/^[a-zA-Z0-9_+-][a-zA-Z0-9._+-]*$/.test(entry.name))
94107
+ continue;
94108
+ await rm4(join31(dirname13(targetPath), entry.name), { recursive: true, force: true });
94109
+ }
94091
94110
  } catch (error) {
94092
94111
  await rm4(tempPath, { recursive: true, force: true });
94093
94112
  throw error;
@@ -98786,6 +98805,8 @@ var REQUIRED_PLUGIN_ARTIFACTS = [
98786
98805
  ...PERSONA_ASSET_FILES.map((filename) => join63("extensions", filename)),
98787
98806
  join63("skills", "ast-grep", "SKILL.md"),
98788
98807
  join63("skills", "browser", "SKILL.md"),
98808
+ join63("skills", "browser", "runtime", "omowright", "index.js"),
98809
+ join63("skills", "browser", "runtime", "omowright", "page-bundle.js"),
98789
98810
  join63("skills", "coding-agent-sessions", "SKILL.md"),
98790
98811
  join63("skills", "debugging", "SKILL.md"),
98791
98812
  join63("skills", "frontend", "SKILL.md"),