oh-my-opencode 5.0.0-beta.1 → 5.0.0-beta.10

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 (196) hide show
  1. package/.agents/command/publish.md +44 -16
  2. package/.agents/skills/publish/SKILL.md +44 -16
  3. package/.agents/skills/work-with-pr/SKILL.md +37 -23
  4. package/.opencode/command/publish.md +44 -16
  5. package/.opencode/skills/work-with-pr/SKILL.md +37 -23
  6. package/README.md +12 -1
  7. package/dist/agents/atlas/agent.d.ts +0 -1
  8. package/dist/agents/sisyphus/grok-4.d.ts +20 -0
  9. package/dist/agents/sisyphus/index.d.ts +2 -0
  10. package/dist/agents/sisyphus-agent-config.d.ts +6 -0
  11. package/dist/agents/sisyphus-agent-factory.d.ts +1 -1
  12. package/dist/agents/sisyphus-runtime-prompt-reconciler.d.ts +15 -4
  13. package/dist/agents/types.d.ts +2 -2
  14. package/dist/cli/index.js +797 -465
  15. package/dist/cli/run/on-complete-hook.d.ts +2 -0
  16. package/dist/cli-node/index.js +797 -465
  17. package/dist/hooks/atlas/final-wave-approval-gate.test-support.d.ts +50 -0
  18. package/dist/hooks/atlas/system-reminder-templates.d.ts +0 -1
  19. package/dist/index.js +1511 -1140
  20. package/dist/shared/normalize-sdk-response.d.ts +1 -0
  21. package/dist/shared/shell-env.d.ts +1 -1
  22. package/dist/skills/coding-agent-sessions/SKILL.md +3 -2
  23. package/dist/skills/coding-agent-sessions/references/all-platforms.md +1 -1
  24. package/dist/skills/coding-agent-sessions/references/senpi.md +4 -4
  25. package/dist/skills/coding-agent-sessions/scripts/agent_sessions/pi_family.py +1 -1
  26. package/dist/skills/frontend/SKILL.md +10 -7
  27. package/dist/skills/frontend/references/design/_INDEX.md +1 -0
  28. package/dist/skills/frontend/references/design/stylegallery.md +80 -0
  29. package/dist/skills/ultimate-browsing/ATTRIBUTION.md +37 -10
  30. package/dist/skills/ultimate-browsing/engine/AGENTS.md +179 -0
  31. package/dist/skills/ultimate-browsing/engine/templates/package.json +1 -1
  32. package/dist/skills/ultimate-browsing/references/chrome-stealth.md +11 -11
  33. package/dist/skills/ulw-plan/SKILL.md +2 -2
  34. package/dist/skills/ulw-plan/references/full-workflow.md +27 -3
  35. package/dist/skills/ulw-plan/references/intent-clear.md +2 -1
  36. package/dist/skills/ulw-plan/references/intent-unclear.md +3 -3
  37. package/dist/tui.js +176 -14
  38. package/package.json +21 -19
  39. package/packages/lsp-core/src/lsp/client-diagnostics-concurrency.integration.test.ts +44 -0
  40. package/packages/lsp-core/src/lsp/client-diagnostics-freshness.integration.test.ts +0 -28
  41. package/packages/lsp-core/src/lsp/client-wrapper.test.ts +60 -7
  42. package/packages/lsp-core/src/lsp/client-wrapper.ts +69 -16
  43. package/packages/lsp-core/src/lsp/workspace-edit-adversarial.test.ts +20 -1
  44. package/packages/lsp-core/src/tools/diagnostics.ts +3 -3
  45. package/packages/lsp-core/src/tools/navigation.ts +4 -2
  46. package/packages/lsp-core/src/tools/rename.ts +4 -2
  47. package/packages/lsp-core/src/tools/symbols.ts +1 -1
  48. package/packages/lsp-daemon/dist/cli.js +83 -29
  49. package/packages/lsp-daemon/dist/client.js +76 -22
  50. package/packages/lsp-daemon/dist/index.js +81 -27
  51. package/packages/lsp-tools-mcp/dist/cli.js +76 -22
  52. package/packages/lsp-tools-mcp/dist/mcp.js +76 -22
  53. package/packages/lsp-tools-mcp/dist/tools.js +76 -22
  54. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  55. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  56. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  57. package/packages/omo-codex/plugin/components/codegraph/dist/cli.js +118 -8
  58. package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +118 -8
  59. package/packages/omo-codex/plugin/components/codegraph/package.json +1 -1
  60. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  61. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  62. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  63. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  64. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  65. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  66. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/test/codex-hook.test.ts +3 -17
  67. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +3 -3
  68. package/packages/omo-codex/plugin/components/lsp/dist/cli.js +83 -29
  69. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  70. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  71. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  72. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  73. package/packages/omo-codex/plugin/components/rules/test/bundled-rules-priority.test.ts +11 -16
  74. package/packages/omo-codex/plugin/components/rules/test/bundled-rules.test.ts +16 -23
  75. package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-budget.test.ts +9 -7
  76. package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-context.test.ts +0 -6
  77. package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-dedup.test.ts +6 -4
  78. package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-directive.test.ts +12 -9
  79. package/packages/omo-codex/plugin/components/rules/test/codex-hook.test.ts +28 -37
  80. package/packages/omo-codex/plugin/components/rules/test/formatter.test.ts +37 -69
  81. package/packages/omo-codex/plugin/components/rules/test/hook-output.test.ts +2 -3
  82. package/packages/omo-codex/plugin/components/rules/test/windows-git-bash-bundled-rule.test.ts +1 -15
  83. package/packages/omo-codex/plugin/components/start-work-continuation/AGENTS.md +3 -2
  84. package/packages/omo-codex/plugin/components/start-work-continuation/hooks/hooks.json +2 -2
  85. package/packages/omo-codex/plugin/components/start-work-continuation/package.json +1 -1
  86. package/packages/omo-codex/plugin/components/start-work-continuation/test/cli.test.ts +0 -3
  87. package/packages/omo-codex/plugin/components/start-work-continuation/test/codex-hook.test.ts +2 -16
  88. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  89. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  90. package/packages/omo-codex/plugin/components/teammode/test/thread-title-hook.test.ts +3 -9
  91. package/packages/omo-codex/plugin/components/telemetry/dist/cli.js +24 -12
  92. package/packages/omo-codex/plugin/components/telemetry/dist/posthog.js +24 -12
  93. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  94. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  95. package/packages/omo-codex/plugin/components/ultrawork/directive.md +6 -0
  96. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  97. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  98. package/packages/omo-codex/plugin/components/ultrawork/skills/ultrawork/SKILL.md +6 -0
  99. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/SKILL.md +2 -2
  100. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/full-workflow.md +27 -3
  101. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/intent-clear.md +2 -1
  102. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/intent-unclear.md +3 -3
  103. package/packages/omo-codex/plugin/components/ultrawork/test/codex-hook.test.ts +0 -136
  104. package/packages/omo-codex/plugin/components/ultrawork/test/skill-pointer.test.ts +0 -2
  105. package/packages/omo-codex/plugin/components/ulw-loop/directive.md +6 -0
  106. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +4 -4
  107. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  108. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/SKILL.md +3 -2
  109. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/define-goal.md +108 -0
  110. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +1 -0
  111. package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint-continuation.test.ts +0 -1
  112. package/packages/omo-codex/plugin/components/ulw-loop/test/codex-goal-instruction.test.ts +2 -2
  113. package/packages/omo-codex/plugin/components/ulw-loop/test/codex-hook.test.ts +0 -3
  114. package/packages/omo-codex/plugin/components/ulw-loop/test/package-smoke.test.ts +2 -35
  115. package/packages/omo-codex/plugin/components/ulw-loop/test/ultrawork-directive.test.ts +4 -5
  116. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  117. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  118. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  119. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-codegraph-init-guidance.json +1 -1
  120. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  121. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  122. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  123. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  124. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  125. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  126. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  127. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  128. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  129. package/packages/omo-codex/plugin/hooks/session-start-checking-codegraph-bootstrap.json +1 -1
  130. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  131. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  132. package/packages/omo-codex/plugin/hooks/stop-checking-start-work-continuation.json +1 -1
  133. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  134. package/packages/omo-codex/plugin/hooks/subagent-stop-checking-start-work-continuation.json +1 -1
  135. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  136. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  137. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  138. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  139. package/packages/omo-codex/plugin/package-lock.json +20 -20
  140. package/packages/omo-codex/plugin/package.json +1 -1
  141. package/packages/omo-codex/plugin/skills/coding-agent-sessions/SKILL.md +3 -2
  142. package/packages/omo-codex/plugin/skills/coding-agent-sessions/references/all-platforms.md +1 -1
  143. package/packages/omo-codex/plugin/skills/coding-agent-sessions/references/senpi.md +4 -4
  144. package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/pi_family.py +1 -1
  145. package/packages/omo-codex/plugin/skills/frontend/SKILL.md +10 -7
  146. package/packages/omo-codex/plugin/skills/frontend/references/design/_INDEX.md +1 -0
  147. package/packages/omo-codex/plugin/skills/frontend/references/design/stylegallery.md +80 -0
  148. package/packages/omo-codex/plugin/skills/ultimate-browsing/ATTRIBUTION.md +37 -10
  149. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/AGENTS.md +179 -0
  150. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/templates/package.json +1 -1
  151. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/chrome-stealth.md +11 -11
  152. package/packages/omo-codex/plugin/skills/ultrawork/SKILL.md +6 -0
  153. package/packages/omo-codex/plugin/skills/ulw-loop/SKILL.md +3 -2
  154. package/packages/omo-codex/plugin/skills/ulw-loop/references/define-goal.md +108 -0
  155. package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +1 -0
  156. package/packages/omo-codex/plugin/skills/ulw-plan/SKILL.md +2 -2
  157. package/packages/omo-codex/plugin/skills/ulw-plan/references/full-workflow.md +27 -3
  158. package/packages/omo-codex/plugin/skills/ulw-plan/references/intent-clear.md +2 -1
  159. package/packages/omo-codex/plugin/skills/ulw-plan/references/intent-unclear.md +3 -3
  160. package/packages/omo-codex/plugin/test/aggregate-agents.test.mjs +19 -173
  161. package/packages/omo-codex/plugin/test/aggregate-hooks.test.mjs +4 -24
  162. package/packages/omo-codex/plugin/test/aggregate-plugin-fixture.mjs +175 -13
  163. package/packages/omo-codex/plugin/test/aggregate.test.mjs +78 -2
  164. package/packages/omo-codex/plugin/test/auto-update-release-notes.test.mjs +19 -33
  165. package/packages/omo-codex/plugin/test/lcx-contribute-bug-fix-template.test.mjs +21 -27
  166. package/packages/omo-codex/plugin/test/scaffold-plan.test.mjs +0 -36
  167. package/packages/omo-codex/plugin/test/sync-skills-codex-compatibility.test.mjs +101 -0
  168. package/packages/omo-codex/plugin/test/sync-skills.test.mjs +1 -119
  169. package/packages/omo-codex/plugin/test/teammode-archive-ambiguity.test.mjs +0 -40
  170. package/packages/omo-codex/plugin/test/teammode-communication.test.mjs +6 -62
  171. package/packages/omo-codex/plugin/test/teammode-thread-links.test.mjs +3 -36
  172. package/packages/omo-codex/plugin/test/teammode-transport.test.mjs +0 -44
  173. package/packages/omo-codex/plugin/test/teammode-worktree.test.mjs +2 -6
  174. package/packages/omo-codex/plugin/test/ultrawork-skill-pointer.test.mjs +0 -3
  175. package/packages/omo-codex/plugin/test/ulw-plan-review-state-contract.test.mjs +0 -3
  176. package/packages/omo-codex/scripts/install-dist/install-local.mjs +57 -19
  177. package/packages/omo-codex/scripts/install-lazycodex-version-stamp.test.mjs +7 -2
  178. package/packages/shared-skills/skills/coding-agent-sessions/SKILL.md +3 -2
  179. package/packages/shared-skills/skills/coding-agent-sessions/references/all-platforms.md +1 -1
  180. package/packages/shared-skills/skills/coding-agent-sessions/references/senpi.md +4 -4
  181. package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/pi_family.py +1 -1
  182. package/packages/shared-skills/skills/frontend/SKILL.md +10 -7
  183. package/packages/shared-skills/skills/frontend/references/design/_INDEX.md +1 -0
  184. package/packages/shared-skills/skills/frontend/references/design/stylegallery.md +80 -0
  185. package/packages/shared-skills/skills/ultimate-browsing/ATTRIBUTION.md +37 -10
  186. package/packages/shared-skills/skills/ultimate-browsing/engine/AGENTS.md +179 -0
  187. package/packages/shared-skills/skills/ultimate-browsing/engine/templates/package.json +1 -1
  188. package/packages/shared-skills/skills/ultimate-browsing/references/chrome-stealth.md +11 -11
  189. package/packages/shared-skills/skills/ulw-plan/SKILL.md +2 -2
  190. package/packages/shared-skills/skills/ulw-plan/references/full-workflow.md +27 -3
  191. package/packages/shared-skills/skills/ulw-plan/references/intent-clear.md +2 -1
  192. package/packages/shared-skills/skills/ulw-plan/references/intent-unclear.md +3 -3
  193. package/dist/tools/call-omo-agent/background-agent-executor.d.ts +0 -5
  194. package/packages/omo-codex/plugin/test/aggregate-skills.test.mjs +0 -92
  195. package/packages/omo-codex/plugin/test/sync-skills-orchestration.test.mjs +0 -314
  196. package/packages/omo-codex/plugin/test/ulw-plan-scope-contract.test.mjs +0 -24
@@ -306,8 +306,8 @@ function createIdleTimer(idleTimeoutMs, log, onTimeout) {
306
306
  };
307
307
  }
308
308
  // ../lsp-core/src/lsp/client-wrapper.ts
309
- import { existsSync as existsSync9, statSync as statSync3 } from "node:fs";
310
- import { dirname as dirname6, join as join4, resolve as resolve7 } from "node:path";
309
+ import { existsSync as existsSync9, realpathSync as realpathSync4, statSync as statSync3 } from "node:fs";
310
+ import { basename as basename3, dirname as dirname6, join as join4, resolve as resolve7 } from "node:path";
311
311
 
312
312
  // ../lsp-core/src/request-context.ts
313
313
  import { AsyncLocalStorage } from "node:async_hooks";
@@ -4030,32 +4030,86 @@ function isDirectoryPath(filePath) {
4030
4030
  }
4031
4031
  }
4032
4032
  function findWorkspaceRoot(filePath) {
4033
- const abs = resolvePathInsideContext(filePath);
4033
+ const cwd = contextCwd();
4034
+ const abs = resolveReadablePathInsideContext(filePath);
4034
4035
  let dir = abs;
4035
4036
  if (!isDirectoryPath(dir)) {
4036
4037
  dir = dirname6(dir);
4037
4038
  }
4038
- let prevDir = "";
4039
- while (dir !== prevDir) {
4040
- for (const marker of WORKSPACE_MARKERS) {
4041
- if (existsSync9(join4(dir, marker))) {
4042
- return dir;
4039
+ const fallbackRoot = nearestExistingDirectoryInsideContext(dir, cwd) ?? cwd;
4040
+ while (isPathInside(cwd, dir)) {
4041
+ const canonicalDir = existingDirectoryInsideContext(dir, cwd);
4042
+ if (canonicalDir !== undefined) {
4043
+ for (const marker of WORKSPACE_MARKERS) {
4044
+ if (existsSync9(join4(dir, marker))) {
4045
+ return canonicalDir;
4046
+ }
4043
4047
  }
4044
4048
  }
4045
- prevDir = dir;
4049
+ if (dir === cwd)
4050
+ break;
4046
4051
  dir = dirname6(dir);
4047
4052
  }
4048
- return dirname6(abs);
4053
+ return fallbackRoot;
4049
4054
  }
4050
- function resolvePathInsideContext(filePath) {
4055
+ function resolveReadablePathInsideContext(filePath) {
4051
4056
  const cwd = contextCwd();
4052
4057
  const abs = resolve7(cwd, filePath);
4058
+ if (isPathInside(cwd, abs))
4059
+ return abs;
4060
+ const rebased = rebaseThroughCanonicalAncestor(abs, cwd);
4061
+ if (rebased !== undefined)
4062
+ return rebased;
4063
+ const canonical = canonicalizeExistingOrNearestAncestor(abs);
4064
+ if (isPathInside(cwd, canonical))
4065
+ return canonical;
4066
+ throw new LspInvalidPathError(`LSP file path must be inside request cwd: ${filePath}`);
4067
+ }
4068
+ function resolvePathInsideContext(filePath) {
4069
+ const cwd = contextCwd();
4070
+ const abs = resolveReadablePathInsideContext(filePath);
4053
4071
  const canonical = canonicalizeExistingOrNearestAncestor(abs);
4054
4072
  if (!isPathInside(cwd, canonical)) {
4055
4073
  throw new LspInvalidPathError(`LSP file path must be inside request cwd: ${filePath}`);
4056
4074
  }
4057
4075
  return canonical;
4058
4076
  }
4077
+ function rebaseThroughCanonicalAncestor(path, cwd) {
4078
+ let current = path;
4079
+ const suffix = [];
4080
+ while (true) {
4081
+ if (existsSync9(current)) {
4082
+ const canonical = realpathSync4(current);
4083
+ if (isPathInside(cwd, canonical))
4084
+ return suffix.length === 0 ? canonical : join4(canonical, ...suffix);
4085
+ }
4086
+ const parent = dirname6(current);
4087
+ if (parent === current)
4088
+ return;
4089
+ suffix.unshift(basename3(current));
4090
+ current = parent;
4091
+ }
4092
+ }
4093
+ function existingDirectoryInsideContext(directory, cwd) {
4094
+ if (!existsSync9(directory))
4095
+ return;
4096
+ const canonical = realpathSync4(directory);
4097
+ if (!statSync3(canonical).isDirectory())
4098
+ return;
4099
+ return isPathInside(cwd, canonical) ? canonical : undefined;
4100
+ }
4101
+ function nearestExistingDirectoryInsideContext(directory, cwd) {
4102
+ let current = directory;
4103
+ while (isPathInside(cwd, current)) {
4104
+ const canonical = existingDirectoryInsideContext(current, cwd);
4105
+ if (canonical !== undefined)
4106
+ return canonical;
4107
+ if (current === cwd)
4108
+ return;
4109
+ current = dirname6(current);
4110
+ }
4111
+ return;
4112
+ }
4059
4113
  function formatServerLookupError(result) {
4060
4114
  if (result.status === "not_installed") {
4061
4115
  return formatNotInstalled(result);
@@ -4126,7 +4180,7 @@ function formatNotInstalled(result) {
4126
4180
  ].join(`
4127
4181
  `);
4128
4182
  }
4129
- var READ_ONLY_RETRY_TOOLS = new Set([
4183
+ var READ_ONLY_TOOLS = new Set([
4130
4184
  "diagnostics",
4131
4185
  "definition",
4132
4186
  "references",
@@ -4135,7 +4189,7 @@ var READ_ONLY_RETRY_TOOLS = new Set([
4135
4189
  "prepareRename"
4136
4190
  ]);
4137
4191
  async function withLspClient(filePath, fn, toolName, options = {}) {
4138
- const absPath = resolvePathInsideContext(filePath);
4192
+ const absPath = READ_ONLY_TOOLS.has(toolName) ? resolveReadablePathInsideContext(filePath) : resolvePathInsideContext(filePath);
4139
4193
  if (isDirectoryPath(absPath)) {
4140
4194
  throw new LspInvalidPathError("Directory paths are not supported by this LSP tool. " + "Use lsp.diagnostics with a directory path for directory diagnostics.");
4141
4195
  }
@@ -4150,9 +4204,9 @@ async function withLspClient(filePath, fn, toolName, options = {}) {
4150
4204
  const acquireAndCall = async (allowRetry) => {
4151
4205
  const client = await manager.getClient(root, server2, options.signal);
4152
4206
  try {
4153
- return await fn(client, root);
4207
+ return await fn(client, root, absPath);
4154
4208
  } catch (err) {
4155
- if (allowRetry && READ_ONLY_RETRY_TOOLS.has(toolName) && isLspDeadConnectionError(err)) {
4209
+ if (allowRetry && READ_ONLY_TOOLS.has(toolName) && isLspDeadConnectionError(err)) {
4156
4210
  manager.invalidateClient(root, server2.id, client);
4157
4211
  return acquireAndCall(false);
4158
4212
  }
@@ -4607,7 +4661,7 @@ async function executeLspDiagnostics(params, signal) {
4607
4661
  const filePath = requireString(params, "filePath");
4608
4662
  const severity = severityFilter(params);
4609
4663
  try {
4610
- const absPath = resolvePathInsideContext(filePath);
4664
+ const absPath = resolveReadablePathInsideContext(filePath);
4611
4665
  if (isDirectoryPath(absPath)) {
4612
4666
  const extension = inferExtensionFromDirectory(absPath);
4613
4667
  if (!extension) {
@@ -4636,7 +4690,7 @@ async function executeLspDiagnostics(params, signal) {
4636
4690
  };
4637
4691
  return text(output2.output, details2);
4638
4692
  }
4639
- const result = await withLspClient(filePath, async (client) => client.diagnostics(filePath, signal), "diagnostics", clientOptions(signal));
4693
+ const result = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.diagnostics(resolvedFilePath, signal), "diagnostics", clientOptions(signal));
4640
4694
  if (result.transientError) {
4641
4695
  const message = result.transientError.message;
4642
4696
  const details2 = {
@@ -4711,7 +4765,7 @@ async function executeLspGotoDefinition(params, signal) {
4711
4765
  const line = requireNumber(params, "line");
4712
4766
  const character = requireNumber(params, "character");
4713
4767
  try {
4714
- const result = await withLspClient(filePath, async (client) => client.definition(filePath, line, character, signal), "definition", clientOptions(signal));
4768
+ const result = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.definition(resolvedFilePath, line, character, signal), "definition", clientOptions(signal));
4715
4769
  const locations = !result ? [] : Array.isArray(result) ? result : [result];
4716
4770
  const details = { filePath, line, character, locations };
4717
4771
  if (locations.length === 0)
@@ -4736,7 +4790,7 @@ async function executeLspFindReferences(params, signal) {
4736
4790
  const character = requireNumber(params, "character");
4737
4791
  const includeDeclaration = optionalBoolean(params, "includeDeclaration") ?? true;
4738
4792
  try {
4739
- const result = await withLspClient(filePath, async (client) => client.references(filePath, line, character, includeDeclaration, signal), "references", clientOptions(signal));
4793
+ const result = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.references(resolvedFilePath, line, character, includeDeclaration, signal), "references", clientOptions(signal));
4740
4794
  const references = Array.isArray(result) ? result : [];
4741
4795
  const total = references.length;
4742
4796
  const truncated = total > DEFAULT_MAX_REFERENCES;
@@ -4778,7 +4832,7 @@ async function executeLspPrepareRename(params, signal) {
4778
4832
  const line = requireNumber(params, "line");
4779
4833
  const character = requireNumber(params, "character");
4780
4834
  try {
4781
- const result = await withLspClient(filePath, async (client) => client.prepareRename(filePath, line, character, signal), "prepareRename", clientOptions(signal));
4835
+ const result = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.prepareRename(resolvedFilePath, line, character, signal), "prepareRename", clientOptions(signal));
4782
4836
  const details = { filePath, line, character, result };
4783
4837
  return text(formatPrepareRenameResult(result), details);
4784
4838
  } catch (error) {
@@ -4799,7 +4853,7 @@ async function executeLspRename(params, signal) {
4799
4853
  const character = requireNumber(params, "character");
4800
4854
  const newName = requireString(params, "newName");
4801
4855
  try {
4802
- const result = await withLspClient(filePath, async (client) => client.rename(filePath, line, character, newName, signal), "rename", clientOptions(signal));
4856
+ const result = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.rename(resolvedFilePath, line, character, newName, signal), "rename", clientOptions(signal));
4803
4857
  const details = { filePath, line, character, newName, apply: result.apply, edit: result.edit };
4804
4858
  return text(formatApplyResult(result.apply), details, !result.apply.success);
4805
4859
  } catch (error) {
@@ -4879,7 +4933,7 @@ async function executeLspSymbols(params, signal) {
4879
4933
  const symbols2 = await withLspClient(filePath, async (client) => client.workspaceSymbols(query, signal), "workspaceSymbols", clientOptions(signal));
4880
4934
  return formatSymbolsResult(filePath, scope, symbols2, limit, query);
4881
4935
  }
4882
- const symbols = await withLspClient(filePath, async (client) => client.documentSymbols(filePath, signal), "documentSymbols", clientOptions(signal));
4936
+ const symbols = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.documentSymbols(resolvedFilePath, signal), "documentSymbols", clientOptions(signal));
4883
4937
  return formatSymbolsResult(filePath, scope, symbols, limit);
4884
4938
  } catch (error) {
4885
4939
  const query = optionalString(params, "query");
@@ -1,6 +1,6 @@
1
1
  // ../lsp-core/src/lsp/client-wrapper.ts
2
- import { existsSync as existsSync9, statSync as statSync3 } from "node:fs";
3
- import { dirname as dirname6, join as join4, resolve as resolve7 } from "node:path";
2
+ import { existsSync as existsSync9, realpathSync as realpathSync4, statSync as statSync3 } from "node:fs";
3
+ import { basename as basename3, dirname as dirname6, join as join4, resolve as resolve7 } from "node:path";
4
4
 
5
5
  // ../lsp-core/src/request-context.ts
6
6
  import { AsyncLocalStorage } from "node:async_hooks";
@@ -3723,32 +3723,86 @@ function isDirectoryPath(filePath) {
3723
3723
  }
3724
3724
  }
3725
3725
  function findWorkspaceRoot(filePath) {
3726
- const abs = resolvePathInsideContext(filePath);
3726
+ const cwd = contextCwd();
3727
+ const abs = resolveReadablePathInsideContext(filePath);
3727
3728
  let dir = abs;
3728
3729
  if (!isDirectoryPath(dir)) {
3729
3730
  dir = dirname6(dir);
3730
3731
  }
3731
- let prevDir = "";
3732
- while (dir !== prevDir) {
3733
- for (const marker of WORKSPACE_MARKERS) {
3734
- if (existsSync9(join4(dir, marker))) {
3735
- return dir;
3732
+ const fallbackRoot = nearestExistingDirectoryInsideContext(dir, cwd) ?? cwd;
3733
+ while (isPathInside(cwd, dir)) {
3734
+ const canonicalDir = existingDirectoryInsideContext(dir, cwd);
3735
+ if (canonicalDir !== undefined) {
3736
+ for (const marker of WORKSPACE_MARKERS) {
3737
+ if (existsSync9(join4(dir, marker))) {
3738
+ return canonicalDir;
3739
+ }
3736
3740
  }
3737
3741
  }
3738
- prevDir = dir;
3742
+ if (dir === cwd)
3743
+ break;
3739
3744
  dir = dirname6(dir);
3740
3745
  }
3741
- return dirname6(abs);
3746
+ return fallbackRoot;
3742
3747
  }
3743
- function resolvePathInsideContext(filePath) {
3748
+ function resolveReadablePathInsideContext(filePath) {
3744
3749
  const cwd = contextCwd();
3745
3750
  const abs = resolve7(cwd, filePath);
3751
+ if (isPathInside(cwd, abs))
3752
+ return abs;
3753
+ const rebased = rebaseThroughCanonicalAncestor(abs, cwd);
3754
+ if (rebased !== undefined)
3755
+ return rebased;
3756
+ const canonical = canonicalizeExistingOrNearestAncestor(abs);
3757
+ if (isPathInside(cwd, canonical))
3758
+ return canonical;
3759
+ throw new LspInvalidPathError(`LSP file path must be inside request cwd: ${filePath}`);
3760
+ }
3761
+ function resolvePathInsideContext(filePath) {
3762
+ const cwd = contextCwd();
3763
+ const abs = resolveReadablePathInsideContext(filePath);
3746
3764
  const canonical = canonicalizeExistingOrNearestAncestor(abs);
3747
3765
  if (!isPathInside(cwd, canonical)) {
3748
3766
  throw new LspInvalidPathError(`LSP file path must be inside request cwd: ${filePath}`);
3749
3767
  }
3750
3768
  return canonical;
3751
3769
  }
3770
+ function rebaseThroughCanonicalAncestor(path, cwd) {
3771
+ let current = path;
3772
+ const suffix = [];
3773
+ while (true) {
3774
+ if (existsSync9(current)) {
3775
+ const canonical = realpathSync4(current);
3776
+ if (isPathInside(cwd, canonical))
3777
+ return suffix.length === 0 ? canonical : join4(canonical, ...suffix);
3778
+ }
3779
+ const parent = dirname6(current);
3780
+ if (parent === current)
3781
+ return;
3782
+ suffix.unshift(basename3(current));
3783
+ current = parent;
3784
+ }
3785
+ }
3786
+ function existingDirectoryInsideContext(directory, cwd) {
3787
+ if (!existsSync9(directory))
3788
+ return;
3789
+ const canonical = realpathSync4(directory);
3790
+ if (!statSync3(canonical).isDirectory())
3791
+ return;
3792
+ return isPathInside(cwd, canonical) ? canonical : undefined;
3793
+ }
3794
+ function nearestExistingDirectoryInsideContext(directory, cwd) {
3795
+ let current = directory;
3796
+ while (isPathInside(cwd, current)) {
3797
+ const canonical = existingDirectoryInsideContext(current, cwd);
3798
+ if (canonical !== undefined)
3799
+ return canonical;
3800
+ if (current === cwd)
3801
+ return;
3802
+ current = dirname6(current);
3803
+ }
3804
+ return;
3805
+ }
3752
3806
  function formatServerLookupError(result) {
3753
3807
  if (result.status === "not_installed") {
3754
3808
  return formatNotInstalled(result);
@@ -3819,7 +3873,7 @@ function formatNotInstalled(result) {
3819
3873
  ].join(`
3820
3874
  `);
3821
3875
  }
3822
- var READ_ONLY_RETRY_TOOLS = new Set([
3876
+ var READ_ONLY_TOOLS = new Set([
3823
3877
  "diagnostics",
3824
3878
  "definition",
3825
3879
  "references",
@@ -3828,7 +3882,7 @@ var READ_ONLY_RETRY_TOOLS = new Set([
3828
3882
  "prepareRename"
3829
3883
  ]);
3830
3884
  async function withLspClient(filePath, fn, toolName, options = {}) {
3831
- const absPath = resolvePathInsideContext(filePath);
3885
+ const absPath = READ_ONLY_TOOLS.has(toolName) ? resolveReadablePathInsideContext(filePath) : resolvePathInsideContext(filePath);
3832
3886
  if (isDirectoryPath(absPath)) {
3833
3887
  throw new LspInvalidPathError("Directory paths are not supported by this LSP tool. " + "Use lsp.diagnostics with a directory path for directory diagnostics.");
3834
3888
  }
@@ -3843,9 +3897,9 @@ async function withLspClient(filePath, fn, toolName, options = {}) {
3843
3897
  const acquireAndCall = async (allowRetry) => {
3844
3898
  const client = await manager.getClient(root, server, options.signal);
3845
3899
  try {
3846
- return await fn(client, root);
3900
+ return await fn(client, root, absPath);
3847
3901
  } catch (err) {
3848
- if (allowRetry && READ_ONLY_RETRY_TOOLS.has(toolName) && isLspDeadConnectionError(err)) {
3902
+ if (allowRetry && READ_ONLY_TOOLS.has(toolName) && isLspDeadConnectionError(err)) {
3849
3903
  manager.invalidateClient(root, server.id, client);
3850
3904
  return acquireAndCall(false);
3851
3905
  }
@@ -4300,7 +4354,7 @@ async function executeLspDiagnostics(params, signal) {
4300
4354
  const filePath = requireString(params, "filePath");
4301
4355
  const severity = severityFilter(params);
4302
4356
  try {
4303
- const absPath = resolvePathInsideContext(filePath);
4357
+ const absPath = resolveReadablePathInsideContext(filePath);
4304
4358
  if (isDirectoryPath(absPath)) {
4305
4359
  const extension = inferExtensionFromDirectory(absPath);
4306
4360
  if (!extension) {
@@ -4329,7 +4383,7 @@ async function executeLspDiagnostics(params, signal) {
4329
4383
  };
4330
4384
  return text(output2.output, details2);
4331
4385
  }
4332
- const result = await withLspClient(filePath, async (client) => client.diagnostics(filePath, signal), "diagnostics", clientOptions(signal));
4386
+ const result = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.diagnostics(resolvedFilePath, signal), "diagnostics", clientOptions(signal));
4333
4387
  if (result.transientError) {
4334
4388
  const message = result.transientError.message;
4335
4389
  const details2 = {
@@ -4404,7 +4458,7 @@ async function executeLspGotoDefinition(params, signal) {
4404
4458
  const line = requireNumber(params, "line");
4405
4459
  const character = requireNumber(params, "character");
4406
4460
  try {
4407
- const result = await withLspClient(filePath, async (client) => client.definition(filePath, line, character, signal), "definition", clientOptions(signal));
4461
+ const result = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.definition(resolvedFilePath, line, character, signal), "definition", clientOptions(signal));
4408
4462
  const locations = !result ? [] : Array.isArray(result) ? result : [result];
4409
4463
  const details = { filePath, line, character, locations };
4410
4464
  if (locations.length === 0)
@@ -4429,7 +4483,7 @@ async function executeLspFindReferences(params, signal) {
4429
4483
  const character = requireNumber(params, "character");
4430
4484
  const includeDeclaration = optionalBoolean(params, "includeDeclaration") ?? true;
4431
4485
  try {
4432
- const result = await withLspClient(filePath, async (client) => client.references(filePath, line, character, includeDeclaration, signal), "references", clientOptions(signal));
4486
+ const result = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.references(resolvedFilePath, line, character, includeDeclaration, signal), "references", clientOptions(signal));
4433
4487
  const references = Array.isArray(result) ? result : [];
4434
4488
  const total = references.length;
4435
4489
  const truncated = total > DEFAULT_MAX_REFERENCES;
@@ -4471,7 +4525,7 @@ async function executeLspPrepareRename(params, signal) {
4471
4525
  const line = requireNumber(params, "line");
4472
4526
  const character = requireNumber(params, "character");
4473
4527
  try {
4474
- const result = await withLspClient(filePath, async (client) => client.prepareRename(filePath, line, character, signal), "prepareRename", clientOptions(signal));
4528
+ const result = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.prepareRename(resolvedFilePath, line, character, signal), "prepareRename", clientOptions(signal));
4475
4529
  const details = { filePath, line, character, result };
4476
4530
  return text(formatPrepareRenameResult(result), details);
4477
4531
  } catch (error) {
@@ -4492,7 +4546,7 @@ async function executeLspRename(params, signal) {
4492
4546
  const character = requireNumber(params, "character");
4493
4547
  const newName = requireString(params, "newName");
4494
4548
  try {
4495
- const result = await withLspClient(filePath, async (client) => client.rename(filePath, line, character, newName, signal), "rename", clientOptions(signal));
4549
+ const result = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.rename(resolvedFilePath, line, character, newName, signal), "rename", clientOptions(signal));
4496
4550
  const details = { filePath, line, character, newName, apply: result.apply, edit: result.edit };
4497
4551
  return text(formatApplyResult(result.apply), details, !result.apply.success);
4498
4552
  } catch (error) {
@@ -4572,7 +4626,7 @@ async function executeLspSymbols(params, signal) {
4572
4626
  const symbols2 = await withLspClient(filePath, async (client) => client.workspaceSymbols(query, signal), "workspaceSymbols", clientOptions(signal));
4573
4627
  return formatSymbolsResult(filePath, scope, symbols2, limit, query);
4574
4628
  }
4575
- const symbols = await withLspClient(filePath, async (client) => client.documentSymbols(filePath, signal), "documentSymbols", clientOptions(signal));
4629
+ const symbols = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.documentSymbols(resolvedFilePath, signal), "documentSymbols", clientOptions(signal));
4576
4630
  return formatSymbolsResult(filePath, scope, symbols, limit);
4577
4631
  } catch (error) {
4578
4632
  const query = optionalString(params, "query");
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "omo",
3
- "version": "5.0.0-beta.1",
3
+ "version": "5.0.0-beta.10",
4
4
  "description": "One Codex plugin namespace for Yeongyu's local Codex components.",
5
5
  "author": {
6
6
  "name": "Yeongyu Kim",
@@ -8,7 +8,7 @@
8
8
  "command": "node \"${PLUGIN_ROOT}/components/bootstrap/dist/cli.js\" hook session-start",
9
9
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\bootstrap.ps1\"",
10
10
  "timeout": 30,
11
- "statusMessage": "(OmO 5.0.0-beta.1) Checking Bootstrap Provisioning"
11
+ "statusMessage": "(OmO 5.0.0-beta.10) 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.1",
3
+ "version": "5.0.0-beta.10",
4
4
  "description": "Codex SessionStart bootstrap component that provisions LazyCodex runtime dependencies from a detached worker.",
5
5
  "type": "module",
6
6
  "private": true,
@@ -4003,7 +4003,7 @@ function finalize(ctx, schema) {
4003
4003
  result.$schema = "http://json-schema.org/draft-07/schema#";
4004
4004
  } else if (ctx.target === "draft-04") {
4005
4005
  result.$schema = "http://json-schema.org/draft-04/schema#";
4006
- } else if (ctx.target === "openapi-3.0") {} else {}
4006
+ } else if (ctx.target === "openapi-3.0") {}
4007
4007
  if (ctx.external?.uri) {
4008
4008
  const id = ctx.external.registry.get(schema)?.id;
4009
4009
  if (!id)
@@ -4212,7 +4212,7 @@ var literalProcessor = (schema, ctx, json, _params) => {
4212
4212
  if (val === undefined) {
4213
4213
  if (ctx.unrepresentable === "throw") {
4214
4214
  throw new Error("Literal `undefined` cannot be represented in JSON Schema");
4215
- } else {}
4215
+ }
4216
4216
  } else if (typeof val === "bigint") {
4217
4217
  if (ctx.unrepresentable === "throw") {
4218
4218
  throw new Error("BigInt literals cannot be represented in JSON Schema");
@@ -5551,11 +5551,12 @@ var OmoCodegraphSettingsSchema = OmoCodegraphSettingsLayerSchema.extend({
5551
5551
 
5552
5552
  // ../../omo-config-core/src/schema/memory.ts
5553
5553
  var OmoMemoryReflectionTriggerSchema = object({
5554
- step_count: number2().int().nonnegative().default(0),
5554
+ step_count: number2().int().nonnegative().default(25),
5555
5555
  on_compaction: boolean2().default(true)
5556
5556
  }).strict();
5557
5557
  var OmoMemoryReflectionSchema = object({
5558
- trigger: OmoMemoryReflectionTriggerSchema.default({ step_count: 0, on_compaction: true }),
5558
+ enabled: boolean2().default(true),
5559
+ trigger: OmoMemoryReflectionTriggerSchema.default({ step_count: 25, on_compaction: true }),
5559
5560
  merge: _enum(["auto", "integration"]).default("auto"),
5560
5561
  category: string2().min(1).default("quick"),
5561
5562
  timeout_minutes: number2().int().positive().default(15),
@@ -5568,11 +5569,36 @@ var OmoMemorySyncSchema = object({
5568
5569
  var OmoMemorySearchSchema = object({
5569
5570
  enabled: boolean2().default(true)
5570
5571
  }).strict();
5572
+ var OmoMemoryNudgeSchema = object({
5573
+ enabled: boolean2().default(true),
5574
+ every_user_turns: number2().int().min(1).default(10)
5575
+ }).strict();
5576
+ var OmoMemoryFactsSchema = object({
5577
+ enabled: boolean2().default(true),
5578
+ debounce_settles: number2().int().min(1).default(4)
5579
+ }).strict();
5580
+ var OmoMemoryDreamSchema = object({
5581
+ enabled: boolean2().default(true),
5582
+ idle_minutes: number2().int().min(0).default(30),
5583
+ min_hours_between: number2().int().min(1).default(24),
5584
+ shutdown_launch: boolean2().default(true),
5585
+ auto_select_max: number2().int().min(1).max(10).default(5),
5586
+ auto_select_max_chars: number2().int().min(1e4).default(150000)
5587
+ }).strict();
5588
+ var OmoMemoryPeopleSchema = object({
5589
+ enabled: boolean2().default(true),
5590
+ max_entries: number2().int().min(1).max(100).default(40),
5591
+ max_entry_chars: number2().int().min(50).max(500).default(200)
5592
+ }).strict();
5593
+ var OmoMemorySoulSchema = object({
5594
+ edit_notice: boolean2().default(true)
5595
+ }).strict();
5571
5596
  var OmoMemoryReflectionTriggerLayerSchema = object({
5572
5597
  step_count: number2().int().nonnegative().optional(),
5573
5598
  on_compaction: boolean2().optional()
5574
5599
  }).strict();
5575
5600
  var OmoMemoryReflectionLayerSchema = object({
5601
+ enabled: boolean2().optional(),
5576
5602
  trigger: OmoMemoryReflectionTriggerLayerSchema.optional(),
5577
5603
  merge: _enum(["auto", "integration"]).optional(),
5578
5604
  category: string2().min(1).optional(),
@@ -5586,10 +5612,39 @@ var OmoMemorySyncLayerSchema = object({
5586
5612
  var OmoMemorySearchLayerSchema = object({
5587
5613
  enabled: boolean2().optional()
5588
5614
  }).strict();
5615
+ var OmoMemoryNudgeLayerSchema = object({
5616
+ enabled: boolean2().optional(),
5617
+ every_user_turns: number2().int().min(1).optional()
5618
+ }).strict();
5619
+ var OmoMemoryFactsLayerSchema = object({
5620
+ enabled: boolean2().optional(),
5621
+ debounce_settles: number2().int().min(1).optional()
5622
+ }).strict();
5623
+ var OmoMemoryDreamLayerSchema = object({
5624
+ enabled: boolean2().optional(),
5625
+ idle_minutes: number2().int().min(0).optional(),
5626
+ min_hours_between: number2().int().min(1).optional(),
5627
+ shutdown_launch: boolean2().optional(),
5628
+ auto_select_max: number2().int().min(1).max(10).optional(),
5629
+ auto_select_max_chars: number2().int().min(1e4).optional()
5630
+ }).strict();
5631
+ var OmoMemoryPeopleLayerSchema = object({
5632
+ enabled: boolean2().optional(),
5633
+ max_entries: number2().int().min(1).max(100).optional(),
5634
+ max_entry_chars: number2().int().min(50).max(500).optional()
5635
+ }).strict();
5636
+ var OmoMemorySoulLayerSchema = object({
5637
+ edit_notice: boolean2().optional()
5638
+ }).strict();
5589
5639
  var OmoMemoryAgentOverridesSchema = object({
5590
5640
  enabled: boolean2().optional(),
5591
5641
  agent: string2().min(1).optional(),
5592
5642
  reflection: OmoMemoryReflectionLayerSchema.optional(),
5643
+ nudge: OmoMemoryNudgeLayerSchema.optional(),
5644
+ facts: OmoMemoryFactsLayerSchema.optional(),
5645
+ dream: OmoMemoryDreamLayerSchema.optional(),
5646
+ people: OmoMemoryPeopleLayerSchema.optional(),
5647
+ soul: OmoMemorySoulLayerSchema.optional(),
5593
5648
  sync: OmoMemorySyncLayerSchema.optional(),
5594
5649
  search: OmoMemorySearchLayerSchema.optional(),
5595
5650
  compile_warn_tokens: number2().int().positive().optional()
@@ -5597,13 +5652,27 @@ var OmoMemoryAgentOverridesSchema = object({
5597
5652
  var OmoMemorySettingsSchema = object({
5598
5653
  enabled: boolean2().default(true),
5599
5654
  agent: string2().min(1).default("auto"),
5655
+ tool_exposure: _enum(["direct", "search"]).default("direct"),
5600
5656
  reflection: OmoMemoryReflectionSchema.default({
5601
- trigger: { step_count: 0, on_compaction: true },
5657
+ enabled: true,
5658
+ trigger: { step_count: 25, on_compaction: true },
5602
5659
  merge: "auto",
5603
5660
  category: "quick",
5604
5661
  timeout_minutes: 15,
5605
5662
  sandbox: "auto"
5606
5663
  }),
5664
+ nudge: OmoMemoryNudgeSchema.default({ enabled: true, every_user_turns: 10 }),
5665
+ facts: OmoMemoryFactsSchema.default({ enabled: true, debounce_settles: 4 }),
5666
+ dream: OmoMemoryDreamSchema.default({
5667
+ enabled: true,
5668
+ idle_minutes: 30,
5669
+ min_hours_between: 24,
5670
+ shutdown_launch: true,
5671
+ auto_select_max: 5,
5672
+ auto_select_max_chars: 150000
5673
+ }),
5674
+ people: OmoMemoryPeopleSchema.default({ enabled: true, max_entries: 40, max_entry_chars: 200 }),
5675
+ soul: OmoMemorySoulSchema.default({ edit_notice: true }),
5607
5676
  sync: OmoMemorySyncSchema.default({ enabled: true }),
5608
5677
  search: OmoMemorySearchSchema.default({ enabled: true }),
5609
5678
  compile_warn_tokens: number2().int().positive().default(30000),
@@ -5612,7 +5681,13 @@ var OmoMemorySettingsSchema = object({
5612
5681
  var OmoMemorySettingsLayerSchema = object({
5613
5682
  enabled: boolean2().optional(),
5614
5683
  agent: string2().min(1).optional(),
5684
+ tool_exposure: _enum(["direct", "search"]).optional(),
5615
5685
  reflection: OmoMemoryReflectionLayerSchema.optional(),
5686
+ nudge: OmoMemoryNudgeLayerSchema.optional(),
5687
+ facts: OmoMemoryFactsLayerSchema.optional(),
5688
+ dream: OmoMemoryDreamLayerSchema.optional(),
5689
+ people: OmoMemoryPeopleLayerSchema.optional(),
5690
+ soul: OmoMemorySoulLayerSchema.optional(),
5616
5691
  sync: OmoMemorySyncLayerSchema.optional(),
5617
5692
  search: OmoMemorySearchLayerSchema.optional(),
5618
5693
  compile_warn_tokens: number2().int().positive().optional(),
@@ -5651,6 +5726,16 @@ var OmoTaskTeamSettingsSchema = object({
5651
5726
  var OmoTaskWarningsSchema = object({
5652
5727
  unavailable_categories: boolean2().default(true)
5653
5728
  }).strict();
5729
+ var OmoTaskDagSettingsSchema = object({
5730
+ max_nodes_per_run: number2().int().positive().default(64),
5731
+ max_runs_per_session: number2().int().positive().default(16),
5732
+ subscriber_ring: number2().int().positive().default(1000),
5733
+ heartbeat_ms: number2().int().positive().default(15000),
5734
+ history_default_limit: number2().int().positive().default(256),
5735
+ history_max_limit: number2().int().positive().default(1000),
5736
+ retention_days: number2().int().positive().default(7),
5737
+ max_prompt_bytes: number2().int().positive().default(262144)
5738
+ }).strict();
5654
5739
  var OmoTaskSettingsSchema = object({
5655
5740
  default_execution_mode: _enum(["in-process", "process"]).default("in-process"),
5656
5741
  default_concurrency: number2().int().positive().default(5),
@@ -5668,7 +5753,18 @@ var OmoTaskSettingsSchema = object({
5668
5753
  max_members: 8,
5669
5754
  max_parallel_members: 4,
5670
5755
  max_wall_clock_minutes: 120
5671
- })
5756
+ }),
5757
+ dag: OmoTaskDagSettingsSchema.optional()
5758
+ }).strict();
5759
+ var OmoTaskDagSettingsLayerSchema = object({
5760
+ max_nodes_per_run: number2().int().positive().optional(),
5761
+ max_runs_per_session: number2().int().positive().optional(),
5762
+ subscriber_ring: number2().int().positive().optional(),
5763
+ heartbeat_ms: number2().int().positive().optional(),
5764
+ history_default_limit: number2().int().positive().optional(),
5765
+ history_max_limit: number2().int().positive().optional(),
5766
+ retention_days: number2().int().positive().optional(),
5767
+ max_prompt_bytes: number2().int().positive().optional()
5672
5768
  }).strict();
5673
5769
  var OmoTaskWaitLayerSchema = object({
5674
5770
  min_ms: number2().int().positive().optional(),
@@ -5696,7 +5792,8 @@ var OmoTaskSettingsLayerSchema = object({
5696
5792
  resume_children: boolean2().optional(),
5697
5793
  warnings: OmoTaskWarningsLayerSchema.optional(),
5698
5794
  wait: OmoTaskWaitLayerSchema.optional(),
5699
- team: OmoTaskTeamSettingsLayerSchema.optional()
5795
+ team: OmoTaskTeamSettingsLayerSchema.optional(),
5796
+ dag: OmoTaskDagSettingsLayerSchema.optional()
5700
5797
  }).strict();
5701
5798
  function resolveOmoTaskSettings(input, resolveParallelism = availableParallelism) {
5702
5799
  const record2 = record(string2(), unknown()).parse(input);
@@ -5753,6 +5850,15 @@ var OmoTeamSpecLayerSchema = OmoTeamSpecBaseSchema.partial();
5753
5850
  var OmoTeamsConfigSchema = record(string2(), OmoTeamSpecSchema);
5754
5851
  var OmoTeamsConfigLayerSchema = record(string2(), OmoTeamSpecLayerSchema);
5755
5852
 
5853
+ // ../../omo-config-core/src/schema/telemetry.ts
5854
+ var OmoTelemetrySettingsShape = {
5855
+ enabled: boolean2()
5856
+ };
5857
+ var OmoTelemetrySettingsLayerSchema = object(OmoTelemetrySettingsShape).partial().strict();
5858
+ var OmoTelemetrySettingsSchema = OmoTelemetrySettingsLayerSchema.extend({
5859
+ enabled: boolean2().default(true)
5860
+ }).strict();
5861
+
5756
5862
  // ../../omo-config-core/src/schema/config.ts
5757
5863
  var OmoOpenCodeHarnessConfigSchema = record(string2(), unknown());
5758
5864
  var OmoTypedHarnessConfigSchema = object({
@@ -5762,7 +5868,8 @@ var OmoTypedHarnessConfigSchema = object({
5762
5868
  task: OmoTaskSettingsLayerSchema.optional(),
5763
5869
  teams: OmoTeamsConfigLayerSchema.optional(),
5764
5870
  models: OmoModelCatalogLayerSchema.optional(),
5765
- memory: OmoMemorySettingsLayerSchema.optional()
5871
+ memory: OmoMemorySettingsLayerSchema.optional(),
5872
+ telemetry: OmoTelemetrySettingsLayerSchema.optional()
5766
5873
  }).strict();
5767
5874
  var OmoConfigProfileSchema = object({
5768
5875
  categories: OmoCategoriesConfigSchema.optional(),
@@ -5772,6 +5879,7 @@ var OmoConfigProfileSchema = object({
5772
5879
  teams: OmoTeamsConfigLayerSchema.optional(),
5773
5880
  models: OmoModelCatalogLayerSchema.optional(),
5774
5881
  memory: OmoMemorySettingsLayerSchema.optional(),
5882
+ telemetry: OmoTelemetrySettingsLayerSchema.optional(),
5775
5883
  "[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
5776
5884
  "[senpi]": OmoTypedHarnessConfigSchema.optional(),
5777
5885
  "[codex]": OmoTypedHarnessConfigSchema.optional()
@@ -5785,6 +5893,7 @@ var OmoConfigSchema = object({
5785
5893
  teams: OmoTeamsConfigSchema.optional(),
5786
5894
  models: OmoModelCatalogSchema.optional(),
5787
5895
  memory: OmoMemorySettingsSchema.optional(),
5896
+ telemetry: OmoTelemetrySettingsSchema.optional(),
5788
5897
  "[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
5789
5898
  "[senpi]": OmoTypedHarnessConfigSchema.optional(),
5790
5899
  "[codex]": OmoTypedHarnessConfigSchema.optional(),
@@ -5801,6 +5910,7 @@ var OmoConfigLayerSchema = object({
5801
5910
  teams: OmoTeamsConfigLayerSchema.optional(),
5802
5911
  models: OmoModelCatalogLayerSchema.optional(),
5803
5912
  memory: OmoMemorySettingsLayerSchema.optional(),
5913
+ telemetry: OmoTelemetrySettingsLayerSchema.optional(),
5804
5914
  "[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
5805
5915
  "[senpi]": OmoTypedHarnessConfigSchema.optional(),
5806
5916
  "[codex]": OmoTypedHarnessConfigSchema.optional(),