claudecode-omc 4.8.2 → 4.8.3

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 (667) hide show
  1. package/.claude-plugin/marketplace.json +3 -3
  2. package/.claude-plugin/plugin.json +3 -3
  3. package/README.de.md +60 -0
  4. package/README.es.md +60 -0
  5. package/README.fr.md +60 -0
  6. package/README.it.md +60 -0
  7. package/README.ja.md +60 -0
  8. package/README.ko.md +60 -0
  9. package/README.md +101 -16
  10. package/README.pt.md +60 -0
  11. package/README.ru.md +60 -0
  12. package/README.tr.md +60 -0
  13. package/README.vi.md +60 -0
  14. package/README.zh.md +60 -0
  15. package/agents/code-reviewer.md +107 -6
  16. package/agents/critic.md +212 -42
  17. package/agents/debugger.md +52 -4
  18. package/agents/document-specialist.md +39 -60
  19. package/agents/executor.md +29 -9
  20. package/agents/explore.md +3 -1
  21. package/agents/security-reviewer.md +57 -0
  22. package/agents/test-engineer.md +21 -0
  23. package/agents/verifier.md +2 -0
  24. package/agents/writer.md +2 -0
  25. package/bridge/cli.cjs +7402 -3580
  26. package/bridge/mcp-server.cjs +558 -43
  27. package/bridge/runtime-cli.cjs +3034 -1801
  28. package/bridge/team-bridge.cjs +25 -1
  29. package/bridge/team-mcp.cjs +257 -88
  30. package/bridge/team.js +5226 -413
  31. package/dist/__tests__/agent-boundary-guidance.test.d.ts +2 -0
  32. package/dist/__tests__/agent-boundary-guidance.test.d.ts.map +1 -0
  33. package/dist/__tests__/agent-boundary-guidance.test.js +48 -0
  34. package/dist/__tests__/agent-boundary-guidance.test.js.map +1 -0
  35. package/dist/__tests__/agent-registry.test.js +48 -11
  36. package/dist/__tests__/agent-registry.test.js.map +1 -1
  37. package/dist/__tests__/auto-slash-aliases.test.js +25 -0
  38. package/dist/__tests__/auto-slash-aliases.test.js.map +1 -1
  39. package/dist/__tests__/bedrock-model-routing.test.d.ts +21 -0
  40. package/dist/__tests__/bedrock-model-routing.test.d.ts.map +1 -0
  41. package/dist/__tests__/bedrock-model-routing.test.js +397 -0
  42. package/dist/__tests__/bedrock-model-routing.test.js.map +1 -0
  43. package/dist/__tests__/cleanup-validation.test.js +7 -3
  44. package/dist/__tests__/cleanup-validation.test.js.map +1 -1
  45. package/dist/__tests__/cli-win32-warning.test.js +15 -2
  46. package/dist/__tests__/cli-win32-warning.test.js.map +1 -1
  47. package/dist/__tests__/consolidation-contracts.test.js +28 -3
  48. package/dist/__tests__/consolidation-contracts.test.js.map +1 -1
  49. package/dist/__tests__/context-guard-stop.test.d.ts +2 -0
  50. package/dist/__tests__/context-guard-stop.test.d.ts.map +1 -0
  51. package/dist/__tests__/context-guard-stop.test.js +58 -0
  52. package/dist/__tests__/context-guard-stop.test.js.map +1 -0
  53. package/dist/__tests__/delegation-enforcer.test.js +76 -11
  54. package/dist/__tests__/delegation-enforcer.test.js.map +1 -1
  55. package/dist/__tests__/doctor-conflicts.test.js +62 -1
  56. package/dist/__tests__/doctor-conflicts.test.js.map +1 -1
  57. package/dist/__tests__/hooks.test.js +165 -4
  58. package/dist/__tests__/hooks.test.js.map +1 -1
  59. package/dist/__tests__/hud/defaults.test.js +4 -0
  60. package/dist/__tests__/hud/defaults.test.js.map +1 -1
  61. package/dist/__tests__/hud/limits-error.test.js +2 -4
  62. package/dist/__tests__/hud/limits-error.test.js.map +1 -1
  63. package/dist/__tests__/hud/mission-board-state.test.d.ts +2 -0
  64. package/dist/__tests__/hud/mission-board-state.test.d.ts.map +1 -0
  65. package/dist/__tests__/hud/mission-board-state.test.js +170 -0
  66. package/dist/__tests__/hud/mission-board-state.test.js.map +1 -0
  67. package/dist/__tests__/hud/mission-board.test.d.ts +2 -0
  68. package/dist/__tests__/hud/mission-board.test.d.ts.map +1 -0
  69. package/dist/__tests__/hud/mission-board.test.js +143 -0
  70. package/dist/__tests__/hud/mission-board.test.js.map +1 -0
  71. package/dist/__tests__/hud/rate-limits-error.test.js +13 -0
  72. package/dist/__tests__/hud/rate-limits-error.test.js.map +1 -1
  73. package/dist/__tests__/hud/render-rate-limits-priority.test.d.ts +8 -0
  74. package/dist/__tests__/hud/render-rate-limits-priority.test.d.ts.map +1 -0
  75. package/dist/__tests__/hud/render-rate-limits-priority.test.js +145 -0
  76. package/dist/__tests__/hud/render-rate-limits-priority.test.js.map +1 -0
  77. package/dist/__tests__/hud/render.test.js +22 -0
  78. package/dist/__tests__/hud/render.test.js.map +1 -1
  79. package/dist/__tests__/hud/stale-indicator.test.d.ts +9 -0
  80. package/dist/__tests__/hud/stale-indicator.test.d.ts.map +1 -0
  81. package/dist/__tests__/hud/stale-indicator.test.js +81 -0
  82. package/dist/__tests__/hud/stale-indicator.test.js.map +1 -0
  83. package/dist/__tests__/hud/state.test.js +30 -0
  84. package/dist/__tests__/hud/state.test.js.map +1 -1
  85. package/dist/__tests__/hud/usage-api-lock.test.d.ts +2 -0
  86. package/dist/__tests__/hud/usage-api-lock.test.d.ts.map +1 -0
  87. package/dist/__tests__/hud/usage-api-lock.test.js +245 -0
  88. package/dist/__tests__/hud/usage-api-lock.test.js.map +1 -0
  89. package/dist/__tests__/hud/usage-api-stale.test.d.ts +9 -0
  90. package/dist/__tests__/hud/usage-api-stale.test.d.ts.map +1 -0
  91. package/dist/__tests__/hud/usage-api-stale.test.js +297 -0
  92. package/dist/__tests__/hud/usage-api-stale.test.js.map +1 -0
  93. package/dist/__tests__/hud/usage-api.test.js +223 -0
  94. package/dist/__tests__/hud/usage-api.test.js.map +1 -1
  95. package/dist/__tests__/hud/watch-mode-init.test.d.ts +2 -0
  96. package/dist/__tests__/hud/watch-mode-init.test.d.ts.map +1 -0
  97. package/dist/__tests__/hud/watch-mode-init.test.js +133 -0
  98. package/dist/__tests__/hud/watch-mode-init.test.js.map +1 -0
  99. package/dist/__tests__/hud-agents.test.js +12 -10
  100. package/dist/__tests__/hud-agents.test.js.map +1 -1
  101. package/dist/__tests__/hud-build-guidance.test.js +6 -2
  102. package/dist/__tests__/hud-build-guidance.test.js.map +1 -1
  103. package/dist/__tests__/hud-marketplace-resolution.test.d.ts +2 -0
  104. package/dist/__tests__/hud-marketplace-resolution.test.d.ts.map +1 -0
  105. package/dist/__tests__/hud-marketplace-resolution.test.js +53 -0
  106. package/dist/__tests__/hud-marketplace-resolution.test.js.map +1 -0
  107. package/dist/__tests__/installer-hud-skip.test.js +12 -0
  108. package/dist/__tests__/installer-hud-skip.test.js.map +1 -1
  109. package/dist/__tests__/installer-plugin-agents.test.d.ts +2 -0
  110. package/dist/__tests__/installer-plugin-agents.test.d.ts.map +1 -0
  111. package/dist/__tests__/installer-plugin-agents.test.js +111 -0
  112. package/dist/__tests__/installer-plugin-agents.test.js.map +1 -0
  113. package/dist/__tests__/installer-version-guard.test.d.ts +2 -0
  114. package/dist/__tests__/installer-version-guard.test.d.ts.map +1 -0
  115. package/dist/__tests__/installer-version-guard.test.js +75 -0
  116. package/dist/__tests__/installer-version-guard.test.js.map +1 -0
  117. package/dist/__tests__/installer.test.js +58 -4
  118. package/dist/__tests__/installer.test.js.map +1 -1
  119. package/dist/__tests__/omc-tools-server.test.js +8 -5
  120. package/dist/__tests__/omc-tools-server.test.js.map +1 -1
  121. package/dist/__tests__/pre-tool-enforcer.test.js +38 -0
  122. package/dist/__tests__/pre-tool-enforcer.test.js.map +1 -1
  123. package/dist/__tests__/prompt-injection.test.js +3 -3
  124. package/dist/__tests__/prompt-injection.test.js.map +1 -1
  125. package/dist/__tests__/ralph-prd-mandatory.test.js +53 -2
  126. package/dist/__tests__/ralph-prd-mandatory.test.js.map +1 -1
  127. package/dist/__tests__/rate-limit-wait/rate-limit-monitor.test.js +42 -0
  128. package/dist/__tests__/rate-limit-wait/rate-limit-monitor.test.js.map +1 -1
  129. package/dist/__tests__/rate-limit-wait/tmux-detector.test.js +1 -1
  130. package/dist/__tests__/session-history-search.test.d.ts +2 -0
  131. package/dist/__tests__/session-history-search.test.d.ts.map +1 -0
  132. package/dist/__tests__/session-history-search.test.js +115 -0
  133. package/dist/__tests__/session-history-search.test.js.map +1 -0
  134. package/dist/__tests__/session-start-script-context.test.d.ts +2 -0
  135. package/dist/__tests__/session-start-script-context.test.d.ts.map +1 -0
  136. package/dist/__tests__/session-start-script-context.test.js +49 -0
  137. package/dist/__tests__/session-start-script-context.test.js.map +1 -0
  138. package/dist/__tests__/skills.test.js +71 -24
  139. package/dist/__tests__/skills.test.js.map +1 -1
  140. package/dist/__tests__/standalone-server.test.js +8 -4
  141. package/dist/__tests__/standalone-server.test.js.map +1 -1
  142. package/dist/__tests__/tier0-docs-consistency.test.js +10 -2
  143. package/dist/__tests__/tier0-docs-consistency.test.js.map +1 -1
  144. package/dist/agents/definitions.d.ts +5 -15
  145. package/dist/agents/definitions.d.ts.map +1 -1
  146. package/dist/agents/definitions.js +48 -49
  147. package/dist/agents/definitions.js.map +1 -1
  148. package/dist/agents/document-specialist.d.ts +1 -1
  149. package/dist/agents/document-specialist.d.ts.map +1 -1
  150. package/dist/agents/document-specialist.js +46 -21
  151. package/dist/agents/document-specialist.js.map +1 -1
  152. package/dist/agents/explore.d.ts.map +1 -1
  153. package/dist/agents/explore.js +3 -2
  154. package/dist/agents/explore.js.map +1 -1
  155. package/dist/agents/index.d.ts +2 -4
  156. package/dist/agents/index.d.ts.map +1 -1
  157. package/dist/agents/index.js +3 -6
  158. package/dist/agents/index.js.map +1 -1
  159. package/dist/agents/types.d.ts +2 -2
  160. package/dist/agents/types.d.ts.map +1 -1
  161. package/dist/cli/__tests__/ask.test.js +255 -8
  162. package/dist/cli/__tests__/ask.test.js.map +1 -1
  163. package/dist/cli/__tests__/session-search-help.test.d.ts +2 -0
  164. package/dist/cli/__tests__/session-search-help.test.d.ts.map +1 -0
  165. package/dist/cli/__tests__/session-search-help.test.js +13 -0
  166. package/dist/cli/__tests__/session-search-help.test.js.map +1 -0
  167. package/dist/cli/__tests__/session-search.test.d.ts +2 -0
  168. package/dist/cli/__tests__/session-search.test.d.ts.map +1 -0
  169. package/dist/cli/__tests__/session-search.test.js +72 -0
  170. package/dist/cli/__tests__/session-search.test.js.map +1 -0
  171. package/dist/cli/__tests__/team-help.test.js +1 -1
  172. package/dist/cli/__tests__/team-help.test.js.map +1 -1
  173. package/dist/cli/__tests__/team.test.js +256 -4
  174. package/dist/cli/__tests__/team.test.js.map +1 -1
  175. package/dist/cli/commands/__tests__/team.test.js +52 -2
  176. package/dist/cli/commands/__tests__/team.test.js.map +1 -1
  177. package/dist/cli/commands/doctor-conflicts.d.ts.map +1 -1
  178. package/dist/cli/commands/doctor-conflicts.js +15 -1
  179. package/dist/cli/commands/doctor-conflicts.js.map +1 -1
  180. package/dist/cli/commands/session-search.d.ts +18 -0
  181. package/dist/cli/commands/session-search.d.ts.map +1 -0
  182. package/dist/cli/commands/session-search.js +47 -0
  183. package/dist/cli/commands/session-search.js.map +1 -0
  184. package/dist/cli/commands/team.d.ts +11 -0
  185. package/dist/cli/commands/team.d.ts.map +1 -1
  186. package/dist/cli/commands/team.js +94 -24
  187. package/dist/cli/commands/team.js.map +1 -1
  188. package/dist/cli/commands/wait.d.ts.map +1 -1
  189. package/dist/cli/commands/wait.js +12 -1
  190. package/dist/cli/commands/wait.js.map +1 -1
  191. package/dist/cli/index.js +70 -2
  192. package/dist/cli/index.js.map +1 -1
  193. package/dist/cli/team.d.ts +1 -0
  194. package/dist/cli/team.d.ts.map +1 -1
  195. package/dist/cli/team.js +100 -214
  196. package/dist/cli/team.js.map +1 -1
  197. package/dist/cli/win32-warning.d.ts +2 -1
  198. package/dist/cli/win32-warning.d.ts.map +1 -1
  199. package/dist/cli/win32-warning.js +20 -6
  200. package/dist/cli/win32-warning.js.map +1 -1
  201. package/dist/config/__tests__/loader.test.d.ts +2 -0
  202. package/dist/config/__tests__/loader.test.d.ts.map +1 -0
  203. package/dist/config/__tests__/loader.test.js +145 -0
  204. package/dist/config/__tests__/loader.test.js.map +1 -0
  205. package/dist/config/__tests__/models.test.d.ts +2 -0
  206. package/dist/config/__tests__/models.test.d.ts.map +1 -0
  207. package/dist/config/__tests__/models.test.js +147 -0
  208. package/dist/config/__tests__/models.test.js.map +1 -0
  209. package/dist/config/__tests__/test-helpers.d.ts +3 -0
  210. package/dist/config/__tests__/test-helpers.d.ts.map +1 -0
  211. package/dist/config/__tests__/test-helpers.js +19 -0
  212. package/dist/config/__tests__/test-helpers.js.map +1 -0
  213. package/dist/config/loader.d.ts +3 -1
  214. package/dist/config/loader.d.ts.map +1 -1
  215. package/dist/config/loader.js +140 -126
  216. package/dist/config/loader.js.map +1 -1
  217. package/dist/config/models.d.ts +29 -10
  218. package/dist/config/models.d.ts.map +1 -1
  219. package/dist/config/models.js +96 -10
  220. package/dist/config/models.js.map +1 -1
  221. package/dist/features/builtin-skills/skills.d.ts.map +1 -1
  222. package/dist/features/builtin-skills/skills.js +8 -1
  223. package/dist/features/builtin-skills/skills.js.map +1 -1
  224. package/dist/features/builtin-skills/types.d.ts +3 -0
  225. package/dist/features/builtin-skills/types.d.ts.map +1 -1
  226. package/dist/features/delegation-enforcer.d.ts +5 -12
  227. package/dist/features/delegation-enforcer.d.ts.map +1 -1
  228. package/dist/features/delegation-enforcer.js +48 -54
  229. package/dist/features/delegation-enforcer.js.map +1 -1
  230. package/dist/features/delegation-routing/__tests__/resolver.test.js +4 -3
  231. package/dist/features/delegation-routing/__tests__/resolver.test.js.map +1 -1
  232. package/dist/features/delegation-routing/types.d.ts.map +1 -1
  233. package/dist/features/delegation-routing/types.js +7 -4
  234. package/dist/features/delegation-routing/types.js.map +1 -1
  235. package/dist/features/index.d.ts +1 -0
  236. package/dist/features/index.d.ts.map +1 -1
  237. package/dist/features/index.js +2 -0
  238. package/dist/features/index.js.map +1 -1
  239. package/dist/features/rate-limit-wait/daemon.d.ts.map +1 -1
  240. package/dist/features/rate-limit-wait/daemon.js +8 -5
  241. package/dist/features/rate-limit-wait/daemon.js.map +1 -1
  242. package/dist/features/rate-limit-wait/index.d.ts +1 -1
  243. package/dist/features/rate-limit-wait/index.d.ts.map +1 -1
  244. package/dist/features/rate-limit-wait/index.js +1 -1
  245. package/dist/features/rate-limit-wait/index.js.map +1 -1
  246. package/dist/features/rate-limit-wait/rate-limit-monitor.d.ts +9 -0
  247. package/dist/features/rate-limit-wait/rate-limit-monitor.d.ts.map +1 -1
  248. package/dist/features/rate-limit-wait/rate-limit-monitor.js +38 -0
  249. package/dist/features/rate-limit-wait/rate-limit-monitor.js.map +1 -1
  250. package/dist/features/rate-limit-wait/tmux-detector.d.ts +2 -1
  251. package/dist/features/rate-limit-wait/tmux-detector.d.ts.map +1 -1
  252. package/dist/features/rate-limit-wait/tmux-detector.js +8 -9
  253. package/dist/features/rate-limit-wait/tmux-detector.js.map +1 -1
  254. package/dist/features/rate-limit-wait/types.d.ts +11 -0
  255. package/dist/features/rate-limit-wait/types.d.ts.map +1 -1
  256. package/dist/features/session-history-search/index.d.ts +6 -0
  257. package/dist/features/session-history-search/index.d.ts.map +1 -0
  258. package/dist/features/session-history-search/index.js +480 -0
  259. package/dist/features/session-history-search/index.js.map +1 -0
  260. package/dist/features/session-history-search/types.d.ts +36 -0
  261. package/dist/features/session-history-search/types.d.ts.map +1 -0
  262. package/dist/features/session-history-search/types.js +2 -0
  263. package/dist/features/session-history-search/types.js.map +1 -0
  264. package/dist/hooks/__tests__/background-process-guard.test.js +101 -5
  265. package/dist/hooks/__tests__/background-process-guard.test.js.map +1 -1
  266. package/dist/hooks/__tests__/bridge-openclaw.test.js +16 -5
  267. package/dist/hooks/__tests__/bridge-openclaw.test.js.map +1 -1
  268. package/dist/hooks/__tests__/bridge-routing.test.js +48 -1
  269. package/dist/hooks/__tests__/bridge-routing.test.js.map +1 -1
  270. package/dist/hooks/auto-slash-command/executor.d.ts.map +1 -1
  271. package/dist/hooks/auto-slash-command/executor.js +9 -1
  272. package/dist/hooks/auto-slash-command/executor.js.map +1 -1
  273. package/dist/hooks/auto-slash-command/types.d.ts +2 -0
  274. package/dist/hooks/auto-slash-command/types.d.ts.map +1 -1
  275. package/dist/hooks/auto-slash-command/types.js +0 -7
  276. package/dist/hooks/auto-slash-command/types.js.map +1 -1
  277. package/dist/hooks/autopilot/adapters/execution-adapter.js +3 -3
  278. package/dist/hooks/autopilot/prompts.js +1 -1
  279. package/dist/hooks/bridge-normalize.d.ts.map +1 -1
  280. package/dist/hooks/bridge-normalize.js +2 -0
  281. package/dist/hooks/bridge-normalize.js.map +1 -1
  282. package/dist/hooks/bridge.d.ts.map +1 -1
  283. package/dist/hooks/bridge.js +248 -39
  284. package/dist/hooks/bridge.js.map +1 -1
  285. package/dist/hooks/keyword-detector/__tests__/index.test.js +41 -0
  286. package/dist/hooks/keyword-detector/__tests__/index.test.js.map +1 -1
  287. package/dist/hooks/keyword-detector/index.d.ts +1 -1
  288. package/dist/hooks/keyword-detector/index.d.ts.map +1 -1
  289. package/dist/hooks/keyword-detector/index.js +3 -1
  290. package/dist/hooks/keyword-detector/index.js.map +1 -1
  291. package/dist/hooks/permission-handler/index.d.ts +8 -0
  292. package/dist/hooks/permission-handler/index.d.ts.map +1 -1
  293. package/dist/hooks/permission-handler/index.js +76 -0
  294. package/dist/hooks/permission-handler/index.js.map +1 -1
  295. package/dist/hooks/persistent-mode/__tests__/ralph-verification-flow.test.d.ts +2 -0
  296. package/dist/hooks/persistent-mode/__tests__/ralph-verification-flow.test.d.ts.map +1 -0
  297. package/dist/hooks/persistent-mode/__tests__/ralph-verification-flow.test.js +90 -0
  298. package/dist/hooks/persistent-mode/__tests__/ralph-verification-flow.test.js.map +1 -0
  299. package/dist/hooks/persistent-mode/__tests__/team-ralplan-stop.test.d.ts +2 -0
  300. package/dist/hooks/persistent-mode/__tests__/team-ralplan-stop.test.d.ts.map +1 -0
  301. package/dist/hooks/persistent-mode/__tests__/team-ralplan-stop.test.js +535 -0
  302. package/dist/hooks/persistent-mode/__tests__/team-ralplan-stop.test.js.map +1 -0
  303. package/dist/hooks/persistent-mode/index.d.ts +1 -1
  304. package/dist/hooks/persistent-mode/index.d.ts.map +1 -1
  305. package/dist/hooks/persistent-mode/index.js +296 -21
  306. package/dist/hooks/persistent-mode/index.js.map +1 -1
  307. package/dist/hooks/persistent-mode/stop-hook-blocking.test.js +156 -0
  308. package/dist/hooks/persistent-mode/stop-hook-blocking.test.js.map +1 -1
  309. package/dist/hooks/project-memory/__tests__/integration.test.js +27 -2
  310. package/dist/hooks/project-memory/__tests__/integration.test.js.map +1 -1
  311. package/dist/hooks/project-memory/__tests__/storage.test.js +37 -0
  312. package/dist/hooks/project-memory/__tests__/storage.test.js.map +1 -1
  313. package/dist/hooks/project-memory/storage.d.ts +1 -1
  314. package/dist/hooks/project-memory/storage.d.ts.map +1 -1
  315. package/dist/hooks/project-memory/storage.js +5 -4
  316. package/dist/hooks/project-memory/storage.js.map +1 -1
  317. package/dist/hooks/ralph/index.d.ts +1 -1
  318. package/dist/hooks/ralph/index.d.ts.map +1 -1
  319. package/dist/hooks/ralph/index.js +1 -1
  320. package/dist/hooks/ralph/index.js.map +1 -1
  321. package/dist/hooks/ralph/loop.d.ts +18 -0
  322. package/dist/hooks/ralph/loop.d.ts.map +1 -1
  323. package/dist/hooks/ralph/loop.js +31 -0
  324. package/dist/hooks/ralph/loop.js.map +1 -1
  325. package/dist/hooks/ralph/verifier.d.ts +4 -1
  326. package/dist/hooks/ralph/verifier.d.ts.map +1 -1
  327. package/dist/hooks/ralph/verifier.js +56 -21
  328. package/dist/hooks/ralph/verifier.js.map +1 -1
  329. package/dist/hooks/recovery/__tests__/storage.test.d.ts +2 -0
  330. package/dist/hooks/recovery/__tests__/storage.test.d.ts.map +1 -0
  331. package/dist/hooks/recovery/__tests__/storage.test.js +65 -0
  332. package/dist/hooks/recovery/__tests__/storage.test.js.map +1 -0
  333. package/dist/hooks/recovery/storage.d.ts +5 -1
  334. package/dist/hooks/recovery/storage.d.ts.map +1 -1
  335. package/dist/hooks/recovery/storage.js +7 -29
  336. package/dist/hooks/recovery/storage.js.map +1 -1
  337. package/dist/hooks/recovery/types.d.ts +1 -1
  338. package/dist/hooks/recovery/types.d.ts.map +1 -1
  339. package/dist/hooks/session-end/__tests__/duplicate-notifications.test.d.ts +2 -0
  340. package/dist/hooks/session-end/__tests__/duplicate-notifications.test.d.ts.map +1 -0
  341. package/dist/hooks/session-end/__tests__/duplicate-notifications.test.js +140 -0
  342. package/dist/hooks/session-end/__tests__/duplicate-notifications.test.js.map +1 -0
  343. package/dist/hooks/session-end/__tests__/mode-state-cleanup.test.d.ts +2 -0
  344. package/dist/hooks/session-end/__tests__/mode-state-cleanup.test.d.ts.map +1 -0
  345. package/dist/hooks/session-end/__tests__/mode-state-cleanup.test.js +122 -0
  346. package/dist/hooks/session-end/__tests__/mode-state-cleanup.test.js.map +1 -0
  347. package/dist/hooks/session-end/__tests__/openclaw-session-end.test.js +38 -12
  348. package/dist/hooks/session-end/__tests__/openclaw-session-end.test.js.map +1 -1
  349. package/dist/hooks/session-end/callbacks.d.ts +4 -1
  350. package/dist/hooks/session-end/callbacks.d.ts.map +1 -1
  351. package/dist/hooks/session-end/callbacks.js +5 -4
  352. package/dist/hooks/session-end/callbacks.js.map +1 -1
  353. package/dist/hooks/session-end/index.d.ts.map +1 -1
  354. package/dist/hooks/session-end/index.js +162 -36
  355. package/dist/hooks/session-end/index.js.map +1 -1
  356. package/dist/hooks/skill-state/__tests__/skill-state.test.js +35 -33
  357. package/dist/hooks/skill-state/__tests__/skill-state.test.js.map +1 -1
  358. package/dist/hooks/skill-state/index.d.ts +3 -3
  359. package/dist/hooks/skill-state/index.d.ts.map +1 -1
  360. package/dist/hooks/skill-state/index.js +7 -11
  361. package/dist/hooks/skill-state/index.js.map +1 -1
  362. package/dist/hooks/subagent-tracker/index.d.ts.map +1 -1
  363. package/dist/hooks/subagent-tracker/index.js +22 -0
  364. package/dist/hooks/subagent-tracker/index.js.map +1 -1
  365. package/dist/hooks/think-mode/__tests__/index.test.js +20 -20
  366. package/dist/hooks/think-mode/__tests__/index.test.js.map +1 -1
  367. package/dist/hooks/think-mode/switcher.d.ts.map +1 -1
  368. package/dist/hooks/think-mode/switcher.js +13 -10
  369. package/dist/hooks/think-mode/switcher.js.map +1 -1
  370. package/dist/hooks/thinking-block-validator/__tests__/index.test.d.ts +2 -0
  371. package/dist/hooks/thinking-block-validator/__tests__/index.test.d.ts.map +1 -0
  372. package/dist/hooks/thinking-block-validator/__tests__/index.test.js +56 -0
  373. package/dist/hooks/thinking-block-validator/__tests__/index.test.js.map +1 -0
  374. package/dist/hooks/thinking-block-validator/index.d.ts.map +1 -1
  375. package/dist/hooks/thinking-block-validator/index.js +7 -6
  376. package/dist/hooks/thinking-block-validator/index.js.map +1 -1
  377. package/dist/hooks/todo-continuation/index.d.ts +6 -0
  378. package/dist/hooks/todo-continuation/index.d.ts.map +1 -1
  379. package/dist/hooks/todo-continuation/index.js +14 -5
  380. package/dist/hooks/todo-continuation/index.js.map +1 -1
  381. package/dist/hud/elements/agents.d.ts.map +1 -1
  382. package/dist/hud/elements/agents.js +8 -14
  383. package/dist/hud/elements/agents.js.map +1 -1
  384. package/dist/hud/elements/index.d.ts +1 -0
  385. package/dist/hud/elements/index.d.ts.map +1 -1
  386. package/dist/hud/elements/index.js +1 -0
  387. package/dist/hud/elements/index.js.map +1 -1
  388. package/dist/hud/elements/limits.d.ts +3 -3
  389. package/dist/hud/elements/limits.d.ts.map +1 -1
  390. package/dist/hud/elements/limits.js +26 -18
  391. package/dist/hud/elements/limits.js.map +1 -1
  392. package/dist/hud/elements/mission-board.d.ts +2 -0
  393. package/dist/hud/elements/mission-board.d.ts.map +1 -0
  394. package/dist/hud/elements/mission-board.js +2 -0
  395. package/dist/hud/elements/mission-board.js.map +1 -0
  396. package/dist/hud/index.d.ts +1 -1
  397. package/dist/hud/index.d.ts.map +1 -1
  398. package/dist/hud/index.js +10 -2
  399. package/dist/hud/index.js.map +1 -1
  400. package/dist/hud/mission-board.d.ts +75 -0
  401. package/dist/hud/mission-board.d.ts.map +1 -0
  402. package/dist/hud/mission-board.js +420 -0
  403. package/dist/hud/mission-board.js.map +1 -0
  404. package/dist/hud/render.d.ts.map +1 -1
  405. package/dist/hud/render.js +16 -8
  406. package/dist/hud/render.js.map +1 -1
  407. package/dist/hud/state.d.ts.map +1 -1
  408. package/dist/hud/state.js +13 -0
  409. package/dist/hud/state.js.map +1 -1
  410. package/dist/hud/types.d.ts +11 -0
  411. package/dist/hud/types.d.ts.map +1 -1
  412. package/dist/hud/types.js +10 -0
  413. package/dist/hud/types.js.map +1 -1
  414. package/dist/hud/usage-api.d.ts +1 -1
  415. package/dist/hud/usage-api.d.ts.map +1 -1
  416. package/dist/hud/usage-api.js +207 -106
  417. package/dist/hud/usage-api.js.map +1 -1
  418. package/dist/index.d.ts +1 -0
  419. package/dist/index.d.ts.map +1 -1
  420. package/dist/index.js +2 -3
  421. package/dist/index.js.map +1 -1
  422. package/dist/installer/__tests__/claude-md-merge.test.js +53 -9
  423. package/dist/installer/__tests__/claude-md-merge.test.js.map +1 -1
  424. package/dist/installer/__tests__/hook-templates.test.d.ts +2 -0
  425. package/dist/installer/__tests__/hook-templates.test.d.ts.map +1 -0
  426. package/dist/installer/__tests__/hook-templates.test.js +76 -0
  427. package/dist/installer/__tests__/hook-templates.test.js.map +1 -0
  428. package/dist/installer/hooks.d.ts +15 -0
  429. package/dist/installer/hooks.d.ts.map +1 -1
  430. package/dist/installer/hooks.js +51 -0
  431. package/dist/installer/hooks.js.map +1 -1
  432. package/dist/installer/index.d.ts +25 -0
  433. package/dist/installer/index.d.ts.map +1 -1
  434. package/dist/installer/index.js +273 -64
  435. package/dist/installer/index.js.map +1 -1
  436. package/dist/lib/mode-names.d.ts.map +1 -1
  437. package/dist/lib/mode-names.js +2 -0
  438. package/dist/lib/mode-names.js.map +1 -1
  439. package/dist/mcp/__tests__/team-server-artifact-convergence.test.js +30 -3
  440. package/dist/mcp/__tests__/team-server-artifact-convergence.test.js.map +1 -1
  441. package/dist/mcp/__tests__/team-server-deprecation.test.js +2 -0
  442. package/dist/mcp/__tests__/team-server-deprecation.test.js.map +1 -1
  443. package/dist/mcp/team-job-convergence.d.ts.map +1 -1
  444. package/dist/mcp/team-job-convergence.js +12 -3
  445. package/dist/mcp/team-job-convergence.js.map +1 -1
  446. package/dist/mcp/team-server.d.ts.map +1 -1
  447. package/dist/mcp/team-server.js +18 -4
  448. package/dist/mcp/team-server.js.map +1 -1
  449. package/dist/notifications/__tests__/config-merge.test.js +36 -1
  450. package/dist/notifications/__tests__/config-merge.test.js.map +1 -1
  451. package/dist/notifications/__tests__/formatter.test.js +13 -5
  452. package/dist/notifications/__tests__/formatter.test.js.map +1 -1
  453. package/dist/notifications/__tests__/notify-registry-integration.test.js +27 -1
  454. package/dist/notifications/__tests__/notify-registry-integration.test.js.map +1 -1
  455. package/dist/notifications/__tests__/verbosity.test.js +33 -1
  456. package/dist/notifications/__tests__/verbosity.test.js.map +1 -1
  457. package/dist/notifications/config.d.ts +7 -0
  458. package/dist/notifications/config.d.ts.map +1 -1
  459. package/dist/notifications/config.js +18 -0
  460. package/dist/notifications/config.js.map +1 -1
  461. package/dist/notifications/formatter.d.ts +2 -2
  462. package/dist/notifications/formatter.d.ts.map +1 -1
  463. package/dist/notifications/formatter.js +7 -6
  464. package/dist/notifications/formatter.js.map +1 -1
  465. package/dist/notifications/index.d.ts +1 -1
  466. package/dist/notifications/index.d.ts.map +1 -1
  467. package/dist/notifications/index.js +5 -3
  468. package/dist/notifications/index.js.map +1 -1
  469. package/dist/notifications/template-engine.js +1 -1
  470. package/dist/notifications/template-engine.js.map +1 -1
  471. package/dist/notifications/types.d.ts +4 -0
  472. package/dist/notifications/types.d.ts.map +1 -1
  473. package/dist/openclaw/__tests__/dispatcher.test.js +26 -0
  474. package/dist/openclaw/__tests__/dispatcher.test.js.map +1 -1
  475. package/dist/openclaw/__tests__/index.test.js +42 -0
  476. package/dist/openclaw/__tests__/index.test.js.map +1 -1
  477. package/dist/openclaw/__tests__/signal.test.d.ts +2 -0
  478. package/dist/openclaw/__tests__/signal.test.d.ts.map +1 -0
  479. package/dist/openclaw/__tests__/signal.test.js +69 -0
  480. package/dist/openclaw/__tests__/signal.test.js.map +1 -0
  481. package/dist/openclaw/dispatcher.d.ts +5 -1
  482. package/dist/openclaw/dispatcher.d.ts.map +1 -1
  483. package/dist/openclaw/dispatcher.js +13 -2
  484. package/dist/openclaw/dispatcher.js.map +1 -1
  485. package/dist/openclaw/index.d.ts +2 -1
  486. package/dist/openclaw/index.d.ts.map +1 -1
  487. package/dist/openclaw/index.js +29 -15
  488. package/dist/openclaw/index.js.map +1 -1
  489. package/dist/openclaw/signal.d.ts +3 -0
  490. package/dist/openclaw/signal.d.ts.map +1 -0
  491. package/dist/openclaw/signal.js +215 -0
  492. package/dist/openclaw/signal.js.map +1 -0
  493. package/dist/openclaw/types.d.ts +35 -0
  494. package/dist/openclaw/types.d.ts.map +1 -1
  495. package/dist/shared/types.d.ts +2 -12
  496. package/dist/shared/types.d.ts.map +1 -1
  497. package/dist/skills/__tests__/mingw-escape.test.js +41 -11
  498. package/dist/skills/__tests__/mingw-escape.test.js.map +1 -1
  499. package/dist/team/__tests__/api-interop.cwd-resolution.test.d.ts +2 -0
  500. package/dist/team/__tests__/api-interop.cwd-resolution.test.d.ts.map +1 -0
  501. package/dist/team/__tests__/api-interop.cwd-resolution.test.js +78 -0
  502. package/dist/team/__tests__/api-interop.cwd-resolution.test.js.map +1 -0
  503. package/dist/team/__tests__/api-interop.dispatch.test.d.ts +2 -0
  504. package/dist/team/__tests__/api-interop.dispatch.test.d.ts.map +1 -0
  505. package/dist/team/__tests__/api-interop.dispatch.test.js +125 -0
  506. package/dist/team/__tests__/api-interop.dispatch.test.js.map +1 -0
  507. package/dist/team/__tests__/cli-detection.test.d.ts +2 -0
  508. package/dist/team/__tests__/cli-detection.test.d.ts.map +1 -0
  509. package/dist/team/__tests__/cli-detection.test.js +36 -0
  510. package/dist/team/__tests__/cli-detection.test.js.map +1 -0
  511. package/dist/team/__tests__/model-contract.test.js +79 -2
  512. package/dist/team/__tests__/model-contract.test.js.map +1 -1
  513. package/dist/team/__tests__/runtime-done-recovery.test.js +1 -0
  514. package/dist/team/__tests__/runtime-done-recovery.test.js.map +1 -1
  515. package/dist/team/__tests__/runtime-prompt-mode.test.js +84 -8
  516. package/dist/team/__tests__/runtime-prompt-mode.test.js.map +1 -1
  517. package/dist/team/__tests__/runtime-v2.dispatch.test.d.ts +2 -0
  518. package/dist/team/__tests__/runtime-v2.dispatch.test.d.ts.map +1 -0
  519. package/dist/team/__tests__/runtime-v2.dispatch.test.js +237 -0
  520. package/dist/team/__tests__/runtime-v2.dispatch.test.js.map +1 -0
  521. package/dist/team/__tests__/runtime-v2.monitor.test.d.ts +2 -0
  522. package/dist/team/__tests__/runtime-v2.monitor.test.d.ts.map +1 -0
  523. package/dist/team/__tests__/runtime-v2.monitor.test.js +103 -0
  524. package/dist/team/__tests__/runtime-v2.monitor.test.js.map +1 -0
  525. package/dist/team/__tests__/runtime-v2.shutdown.test.d.ts +2 -0
  526. package/dist/team/__tests__/runtime-v2.shutdown.test.d.ts.map +1 -0
  527. package/dist/team/__tests__/runtime-v2.shutdown.test.js +49 -0
  528. package/dist/team/__tests__/runtime-v2.shutdown.test.js.map +1 -0
  529. package/dist/team/__tests__/runtime-watchdog-retry.test.js +3 -0
  530. package/dist/team/__tests__/runtime-watchdog-retry.test.js.map +1 -1
  531. package/dist/team/__tests__/tmux-session.create-team.test.js +29 -12
  532. package/dist/team/__tests__/tmux-session.create-team.test.js.map +1 -1
  533. package/dist/team/__tests__/tmux-session.kill-team-session.test.js +6 -0
  534. package/dist/team/__tests__/tmux-session.kill-team-session.test.js.map +1 -1
  535. package/dist/team/__tests__/tmux-session.test.js +9 -0
  536. package/dist/team/__tests__/tmux-session.test.js.map +1 -1
  537. package/dist/team/__tests__/worker-bootstrap.test.js +32 -3
  538. package/dist/team/__tests__/worker-bootstrap.test.js.map +1 -1
  539. package/dist/team/api-interop.d.ts.map +1 -1
  540. package/dist/team/api-interop.js +153 -2
  541. package/dist/team/api-interop.js.map +1 -1
  542. package/dist/team/cli-detection.d.ts.map +1 -1
  543. package/dist/team/cli-detection.js +6 -2
  544. package/dist/team/cli-detection.js.map +1 -1
  545. package/dist/team/idle-nudge.js +1 -1
  546. package/dist/team/idle-nudge.js.map +1 -1
  547. package/dist/team/mcp-team-bridge.d.ts.map +1 -1
  548. package/dist/team/mcp-team-bridge.js +2 -1
  549. package/dist/team/mcp-team-bridge.js.map +1 -1
  550. package/dist/team/model-contract.d.ts +1 -1
  551. package/dist/team/model-contract.d.ts.map +1 -1
  552. package/dist/team/model-contract.js +35 -4
  553. package/dist/team/model-contract.js.map +1 -1
  554. package/dist/team/runtime-cli.d.ts.map +1 -1
  555. package/dist/team/runtime-cli.js +10 -7
  556. package/dist/team/runtime-cli.js.map +1 -1
  557. package/dist/team/runtime-v2.d.ts +4 -0
  558. package/dist/team/runtime-v2.d.ts.map +1 -1
  559. package/dist/team/runtime-v2.js +231 -59
  560. package/dist/team/runtime-v2.js.map +1 -1
  561. package/dist/team/runtime.d.ts +6 -1
  562. package/dist/team/runtime.d.ts.map +1 -1
  563. package/dist/team/runtime.js +39 -14
  564. package/dist/team/runtime.js.map +1 -1
  565. package/dist/team/tmux-session.d.ts +20 -11
  566. package/dist/team/tmux-session.d.ts.map +1 -1
  567. package/dist/team/tmux-session.js +108 -51
  568. package/dist/team/tmux-session.js.map +1 -1
  569. package/dist/team/types.d.ts +1 -0
  570. package/dist/team/types.d.ts.map +1 -1
  571. package/dist/team/types.js.map +1 -1
  572. package/dist/team/worker-bootstrap.d.ts +2 -0
  573. package/dist/team/worker-bootstrap.d.ts.map +1 -1
  574. package/dist/team/worker-bootstrap.js +46 -12
  575. package/dist/team/worker-bootstrap.js.map +1 -1
  576. package/dist/tools/__tests__/memory-tools.test.js +29 -1
  577. package/dist/tools/__tests__/memory-tools.test.js.map +1 -1
  578. package/dist/tools/lsp/client.d.ts +11 -0
  579. package/dist/tools/lsp/client.d.ts.map +1 -1
  580. package/dist/tools/lsp/client.js +46 -0
  581. package/dist/tools/lsp/client.js.map +1 -1
  582. package/dist/tools/session-history-tools.d.ts +23 -0
  583. package/dist/tools/session-history-tools.d.ts.map +1 -0
  584. package/dist/tools/session-history-tools.js +41 -0
  585. package/dist/tools/session-history-tools.js.map +1 -0
  586. package/dist/tools/trace-tools.d.ts +9 -0
  587. package/dist/tools/trace-tools.d.ts.map +1 -1
  588. package/dist/tools/trace-tools.js +2 -1
  589. package/dist/tools/trace-tools.js.map +1 -1
  590. package/dist/utils/frontmatter.d.ts +5 -0
  591. package/dist/utils/frontmatter.d.ts.map +1 -1
  592. package/dist/utils/frontmatter.js +22 -0
  593. package/dist/utils/frontmatter.js.map +1 -1
  594. package/dist/utils/skill-pipeline.d.ts +9 -0
  595. package/dist/utils/skill-pipeline.d.ts.map +1 -0
  596. package/dist/utils/skill-pipeline.js +97 -0
  597. package/dist/utils/skill-pipeline.js.map +1 -0
  598. package/docs/AGENTS.md +1 -1
  599. package/docs/ANALYTICS-SYSTEM.md +23 -132
  600. package/docs/CLAUDE.md +40 -139
  601. package/docs/MIGRATION.md +4 -4
  602. package/docs/OPENCLAW-ROUTING.md +102 -0
  603. package/docs/PERFORMANCE-MONITORING.md +30 -55
  604. package/docs/REFERENCE.md +62 -35
  605. package/docs/TIERED_AGENTS_V2.md +3 -2
  606. package/docs/design/SKILL_AUDIT_1445.md +75 -0
  607. package/docs/ko/MIGRATION.md +2 -2
  608. package/docs/ko/REFERENCE.md +14 -22
  609. package/docs/partials/agent-tiers.md +11 -15
  610. package/docs/partials/features.md +2 -2
  611. package/docs/partials/mode-selection-guide.md +2 -2
  612. package/docs/shared/agent-tiers.md +11 -15
  613. package/docs/shared/features.md +2 -2
  614. package/docs/shared/mode-selection-guide.md +2 -2
  615. package/package.json +4 -1
  616. package/scripts/code-simplifier.mjs +1 -1
  617. package/scripts/context-guard-stop.mjs +26 -10
  618. package/scripts/keyword-detector.mjs +99 -39
  619. package/scripts/persistent-mode.cjs +295 -34
  620. package/scripts/persistent-mode.mjs +79 -21
  621. package/scripts/plugin-setup.mjs +10 -1
  622. package/scripts/post-tool-verifier.mjs +57 -3
  623. package/scripts/pre-tool-enforcer.mjs +207 -2
  624. package/scripts/run-provider-advisor.js +30 -3
  625. package/scripts/session-start.mjs +3 -3
  626. package/scripts/setup-claude-md.sh +159 -0
  627. package/scripts/setup-progress.sh +123 -0
  628. package/scripts/sync-metadata.ts +11 -1
  629. package/skills/AGENTS.md +13 -17
  630. package/skills/ai-slop-cleaner/SKILL.md +130 -0
  631. package/skills/ask/SKILL.md +51 -0
  632. package/skills/ccg/SKILL.md +6 -6
  633. package/skills/deep-interview/SKILL.md +4 -0
  634. package/skills/omc-doctor/SKILL.md +2 -2
  635. package/skills/omc-setup/SKILL.md +75 -1206
  636. package/skills/omc-setup/phases/01-install-claude-md.md +76 -0
  637. package/skills/omc-setup/phases/02-configure.md +211 -0
  638. package/skills/omc-setup/phases/03-integrations.md +192 -0
  639. package/skills/omc-setup/phases/04-welcome.md +192 -0
  640. package/skills/omc-teams/SKILL.md +35 -2
  641. package/skills/plan/SKILL.md +3 -0
  642. package/skills/ralph/SKILL.md +16 -10
  643. package/skills/release/SKILL.md +4 -0
  644. package/skills/setup/SKILL.md +40 -0
  645. package/skills/team/SKILL.md +6 -6
  646. package/templates/hooks/code-simplifier.mjs +1 -1
  647. package/templates/hooks/keyword-detector.mjs +100 -32
  648. package/templates/hooks/persistent-mode.mjs +43 -4
  649. package/templates/hooks/pre-tool-use.mjs +115 -1
  650. package/templates/hooks/session-start.mjs +1 -1
  651. package/agents/build-fixer.md +0 -90
  652. package/agents/deep-executor.md +0 -112
  653. package/agents/harsh-critic.md +0 -254
  654. package/agents/quality-reviewer.md +0 -151
  655. package/skills/analyze/SKILL.md +0 -87
  656. package/skills/ask-codex/SKILL.md +0 -47
  657. package/skills/ask-gemini/SKILL.md +0 -47
  658. package/skills/build-fix/SKILL.md +0 -123
  659. package/skills/code-review/SKILL.md +0 -573
  660. package/skills/configure-openclaw/SKILL.md +0 -383
  661. package/skills/learn-about-omc/SKILL.md +0 -37
  662. package/skills/note/SKILL.md +0 -62
  663. package/skills/omc-help/SKILL.md +0 -192
  664. package/skills/ralph-init/SKILL.md +0 -40
  665. package/skills/security-review/SKILL.md +0 -282
  666. package/skills/tdd/SKILL.md +0 -104
  667. package/skills/trace/SKILL.md +0 -33
@@ -2245,8 +2245,8 @@ var require_resolve = __commonJS({
2245
2245
  }
2246
2246
  return count;
2247
2247
  }
2248
- function getFullPath(resolver, id = "", normalize2) {
2249
- if (normalize2 !== false)
2248
+ function getFullPath(resolver, id = "", normalize3) {
2249
+ if (normalize3 !== false)
2250
2250
  id = normalizeId(id);
2251
2251
  const p = resolver.parse(id);
2252
2252
  return _getFullPath(resolver, p);
@@ -2994,7 +2994,7 @@ var require_compile = __commonJS({
2994
2994
  const schOrFunc = root.refs[ref];
2995
2995
  if (schOrFunc)
2996
2996
  return schOrFunc;
2997
- let _sch = resolve5.call(this, root, ref);
2997
+ let _sch = resolve6.call(this, root, ref);
2998
2998
  if (_sch === void 0) {
2999
2999
  const schema = (_a = root.localRefs) === null || _a === void 0 ? void 0 : _a[ref];
3000
3000
  const { schemaId } = this.opts;
@@ -3021,7 +3021,7 @@ var require_compile = __commonJS({
3021
3021
  function sameSchemaEnv(s1, s2) {
3022
3022
  return s1.schema === s2.schema && s1.root === s2.root && s1.baseId === s2.baseId;
3023
3023
  }
3024
- function resolve5(root, ref) {
3024
+ function resolve6(root, ref) {
3025
3025
  let sch;
3026
3026
  while (typeof (sch = this.refs[ref]) == "string")
3027
3027
  ref = sch;
@@ -3586,7 +3586,7 @@ var require_fast_uri = __commonJS({
3586
3586
  "use strict";
3587
3587
  var { normalizeIPv6, removeDotSegments, recomposeAuthority, normalizeComponentEncoding, isIPv4, nonSimpleDomain } = require_utils();
3588
3588
  var { SCHEMES, getSchemeHandler } = require_schemes();
3589
- function normalize2(uri, options) {
3589
+ function normalize3(uri, options) {
3590
3590
  if (typeof uri === "string") {
3591
3591
  uri = /** @type {T} */
3592
3592
  serialize(parse5(uri, options), options);
@@ -3596,7 +3596,7 @@ var require_fast_uri = __commonJS({
3596
3596
  }
3597
3597
  return uri;
3598
3598
  }
3599
- function resolve5(baseURI, relativeURI, options) {
3599
+ function resolve6(baseURI, relativeURI, options) {
3600
3600
  const schemelessOptions = options ? Object.assign({ scheme: "null" }, options) : { scheme: "null" };
3601
3601
  const resolved = resolveComponent(parse5(baseURI, schemelessOptions), parse5(relativeURI, schemelessOptions), schemelessOptions, true);
3602
3602
  schemelessOptions.skipEscape = true;
@@ -3822,8 +3822,8 @@ var require_fast_uri = __commonJS({
3822
3822
  }
3823
3823
  var fastUri = {
3824
3824
  SCHEMES,
3825
- normalize: normalize2,
3826
- resolve: resolve5,
3825
+ normalize: normalize3,
3826
+ resolve: resolve6,
3827
3827
  resolveComponent,
3828
3828
  equal,
3829
3829
  serialize,
@@ -16665,7 +16665,7 @@ var Protocol = class {
16665
16665
  return;
16666
16666
  }
16667
16667
  const pollInterval = task2.pollInterval ?? this._options?.defaultTaskPollInterval ?? 1e3;
16668
- await new Promise((resolve5) => setTimeout(resolve5, pollInterval));
16668
+ await new Promise((resolve6) => setTimeout(resolve6, pollInterval));
16669
16669
  options?.signal?.throwIfAborted();
16670
16670
  }
16671
16671
  } catch (error2) {
@@ -16682,7 +16682,7 @@ var Protocol = class {
16682
16682
  */
16683
16683
  request(request, resultSchema, options) {
16684
16684
  const { relatedRequestId, resumptionToken, onresumptiontoken, task, relatedTask } = options ?? {};
16685
- return new Promise((resolve5, reject) => {
16685
+ return new Promise((resolve6, reject) => {
16686
16686
  const earlyReject = (error2) => {
16687
16687
  reject(error2);
16688
16688
  };
@@ -16760,7 +16760,7 @@ var Protocol = class {
16760
16760
  if (!parseResult.success) {
16761
16761
  reject(parseResult.error);
16762
16762
  } else {
16763
- resolve5(parseResult.data);
16763
+ resolve6(parseResult.data);
16764
16764
  }
16765
16765
  } catch (error2) {
16766
16766
  reject(error2);
@@ -17021,12 +17021,12 @@ var Protocol = class {
17021
17021
  }
17022
17022
  } catch {
17023
17023
  }
17024
- return new Promise((resolve5, reject) => {
17024
+ return new Promise((resolve6, reject) => {
17025
17025
  if (signal.aborted) {
17026
17026
  reject(new McpError(ErrorCode.InvalidRequest, "Request cancelled"));
17027
17027
  return;
17028
17028
  }
17029
- const timeoutId = setTimeout(resolve5, interval);
17029
+ const timeoutId = setTimeout(resolve6, interval);
17030
17030
  signal.addEventListener("abort", () => {
17031
17031
  clearTimeout(timeoutId);
17032
17032
  reject(new McpError(ErrorCode.InvalidRequest, "Request cancelled"));
@@ -17755,12 +17755,12 @@ var StdioServerTransport = class {
17755
17755
  this.onclose?.();
17756
17756
  }
17757
17757
  send(message) {
17758
- return new Promise((resolve5) => {
17758
+ return new Promise((resolve6) => {
17759
17759
  const json = serializeMessage(message);
17760
17760
  if (this._stdout.write(json)) {
17761
- resolve5();
17761
+ resolve6();
17762
17762
  } else {
17763
- this._stdout.once("drain", resolve5);
17763
+ this._stdout.once("drain", resolve6);
17764
17764
  }
17765
17765
  });
17766
17766
  }
@@ -17964,7 +17964,7 @@ var LspClient = class {
17964
17964
  Install with: ${this.serverConfig.installHint}`
17965
17965
  );
17966
17966
  }
17967
- return new Promise((resolve5, reject) => {
17967
+ return new Promise((resolve6, reject) => {
17968
17968
  this.process = (0, import_child_process2.spawn)(this.serverConfig.command, this.serverConfig.args, {
17969
17969
  cwd: this.workspaceRoot,
17970
17970
  stdio: ["pipe", "pipe", "pipe"],
@@ -17991,10 +17991,24 @@ Install with: ${this.serverConfig.installHint}`
17991
17991
  });
17992
17992
  this.initialize().then(() => {
17993
17993
  this.initialized = true;
17994
- resolve5();
17994
+ resolve6();
17995
17995
  }).catch(reject);
17996
17996
  });
17997
17997
  }
17998
+ /**
17999
+ * Synchronously kill the LSP server process.
18000
+ * Used in process exit handlers where async operations are not possible.
18001
+ */
18002
+ forceKill() {
18003
+ if (this.process) {
18004
+ try {
18005
+ this.process.kill("SIGKILL");
18006
+ } catch {
18007
+ }
18008
+ this.process = null;
18009
+ this.initialized = false;
18010
+ }
18011
+ }
17998
18012
  /**
17999
18013
  * Disconnect from the LSP server
18000
18014
  */
@@ -18103,13 +18117,13 @@ Install with: ${this.serverConfig.installHint}`
18103
18117
  const message = `Content-Length: ${Buffer.byteLength(content)}\r
18104
18118
  \r
18105
18119
  ${content}`;
18106
- return new Promise((resolve5, reject) => {
18120
+ return new Promise((resolve6, reject) => {
18107
18121
  const timeoutHandle = setTimeout(() => {
18108
18122
  this.pendingRequests.delete(id);
18109
18123
  reject(new Error(`LSP request '${method}' timed out after ${timeout}ms`));
18110
18124
  }, timeout);
18111
18125
  this.pendingRequests.set(id, {
18112
- resolve: resolve5,
18126
+ resolve: resolve6,
18113
18127
  reject,
18114
18128
  timeout: timeoutHandle
18115
18129
  });
@@ -18178,7 +18192,7 @@ ${content}`;
18178
18192
  }
18179
18193
  });
18180
18194
  this.openDocuments.add(uri);
18181
- await new Promise((resolve5) => setTimeout(resolve5, 100));
18195
+ await new Promise((resolve6) => setTimeout(resolve6, 100));
18182
18196
  }
18183
18197
  /**
18184
18198
  * Close a document
@@ -18309,13 +18323,13 @@ ${content}`;
18309
18323
  if (this.diagnostics.has(uri)) {
18310
18324
  return Promise.resolve();
18311
18325
  }
18312
- return new Promise((resolve5) => {
18326
+ return new Promise((resolve6) => {
18313
18327
  let resolved = false;
18314
18328
  const timer = setTimeout(() => {
18315
18329
  if (!resolved) {
18316
18330
  resolved = true;
18317
18331
  this.diagnosticWaiters.delete(uri);
18318
- resolve5();
18332
+ resolve6();
18319
18333
  }
18320
18334
  }, timeoutMs);
18321
18335
  const existing = this.diagnosticWaiters.get(uri) || [];
@@ -18323,7 +18337,7 @@ ${content}`;
18323
18337
  if (!resolved) {
18324
18338
  resolved = true;
18325
18339
  clearTimeout(timer);
18326
- resolve5();
18340
+ resolve6();
18327
18341
  }
18328
18342
  });
18329
18343
  this.diagnosticWaiters.set(uri, existing);
@@ -18377,6 +18391,32 @@ var LspClientManager = class {
18377
18391
  idleTimer = null;
18378
18392
  constructor() {
18379
18393
  this.startIdleCheck();
18394
+ this.registerCleanupHandlers();
18395
+ }
18396
+ /**
18397
+ * Register process exit/signal handlers to kill all spawned LSP server processes.
18398
+ * Prevents orphaned language server processes (e.g. kotlin-language-server)
18399
+ * when the MCP bridge process exits or a claude session ends.
18400
+ */
18401
+ registerCleanupHandlers() {
18402
+ const forceKillAll = () => {
18403
+ for (const client of this.clients.values()) {
18404
+ try {
18405
+ client.forceKill();
18406
+ } catch {
18407
+ }
18408
+ }
18409
+ this.clients.clear();
18410
+ this.lastUsed.clear();
18411
+ this.inFlightCount.clear();
18412
+ };
18413
+ process.on("exit", forceKillAll);
18414
+ for (const sig of ["SIGTERM", "SIGINT", "SIGHUP"]) {
18415
+ process.on(sig, () => {
18416
+ forceKillAll();
18417
+ process.exit(0);
18418
+ });
18419
+ }
18380
18420
  }
18381
18421
  /**
18382
18422
  * Get or create a client for a file
@@ -19069,7 +19109,7 @@ var lspDiagnosticsTool = {
19069
19109
  const { file, severity } = args;
19070
19110
  return withLspClient(file, "diagnostics", async (client) => {
19071
19111
  await client.openDocument(file);
19072
- await new Promise((resolve5) => setTimeout(resolve5, LSP_DIAGNOSTICS_WAIT_MS));
19112
+ await new Promise((resolve6) => setTimeout(resolve6, LSP_DIAGNOSTICS_WAIT_MS));
19073
19113
  let diagnostics = client.getDiagnostics(file);
19074
19114
  if (severity) {
19075
19115
  const severityMap = {
@@ -20396,7 +20436,7 @@ var SessionLock = class {
20396
20436
  }
20397
20437
  };
20398
20438
  function sleep(ms) {
20399
- return new Promise((resolve5) => setTimeout(resolve5, ms));
20439
+ return new Promise((resolve6) => setTimeout(resolve6, ms));
20400
20440
  }
20401
20441
 
20402
20442
  // src/tools/python-repl/socket-client.ts
@@ -20426,7 +20466,7 @@ var JsonRpcError = class extends Error {
20426
20466
  }
20427
20467
  };
20428
20468
  async function sendSocketRequest(socketPath, method, params, timeout = 6e4) {
20429
- return new Promise((resolve5, reject) => {
20469
+ return new Promise((resolve6, reject) => {
20430
20470
  const id = (0, import_crypto.randomUUID)();
20431
20471
  const request = {
20432
20472
  jsonrpc: "2.0",
@@ -20496,7 +20536,7 @@ async function sendSocketRequest(socketPath, method, params, timeout = 6e4) {
20496
20536
  ));
20497
20537
  return;
20498
20538
  }
20499
- resolve5(response.result);
20539
+ resolve6(response.result);
20500
20540
  } catch (e) {
20501
20541
  reject(new Error(
20502
20542
  `Failed to parse JSON-RPC response: ${e.message}`
@@ -20877,7 +20917,7 @@ async function deleteBridgeMeta(sessionId) {
20877
20917
  }
20878
20918
  }
20879
20919
  function sleep2(ms) {
20880
- return new Promise((resolve5) => setTimeout(resolve5, ms));
20920
+ return new Promise((resolve6) => setTimeout(resolve6, ms));
20881
20921
  }
20882
20922
 
20883
20923
  // src/tools/python-repl/tool.ts
@@ -21478,6 +21518,17 @@ function ensureSessionStateDir(sessionId, worktreeRoot) {
21478
21518
  }
21479
21519
  return sessionDir;
21480
21520
  }
21521
+ function resolveToWorktreeRoot(directory) {
21522
+ if (directory) {
21523
+ const resolved = (0, import_path7.resolve)(directory);
21524
+ const root = getWorktreeRoot(resolved);
21525
+ if (root) return root;
21526
+ console.error("[worktree] non-git directory provided, falling back to process root", {
21527
+ directory: resolved
21528
+ });
21529
+ }
21530
+ return getWorktreeRoot(process.cwd()) || process.cwd();
21531
+ }
21481
21532
  function validateWorkingDirectory(workingDirectory) {
21482
21533
  const trustedRoot = getWorktreeRoot(process.cwd()) || process.cwd();
21483
21534
  if (!workingDirectory) {
@@ -21609,9 +21660,11 @@ var MODE_STATE_FILE_MAP = {
21609
21660
  };
21610
21661
  var SESSION_END_MODE_STATE_FILES = [
21611
21662
  { file: MODE_STATE_FILE_MAP[MODE_NAMES.AUTOPILOT], mode: MODE_NAMES.AUTOPILOT },
21663
+ { file: MODE_STATE_FILE_MAP[MODE_NAMES.TEAM], mode: MODE_NAMES.TEAM },
21612
21664
  { file: MODE_STATE_FILE_MAP[MODE_NAMES.RALPH], mode: MODE_NAMES.RALPH },
21613
21665
  { file: MODE_STATE_FILE_MAP[MODE_NAMES.ULTRAWORK], mode: MODE_NAMES.ULTRAWORK },
21614
- { file: MODE_STATE_FILE_MAP[MODE_NAMES.ULTRAQA], mode: MODE_NAMES.ULTRAQA }
21666
+ { file: MODE_STATE_FILE_MAP[MODE_NAMES.ULTRAQA], mode: MODE_NAMES.ULTRAQA },
21667
+ { file: "skill-active-state.json", mode: "skill-active" }
21615
21668
  ];
21616
21669
  var SESSION_METRICS_MODE_FILES = [
21617
21670
  { file: MODE_STATE_FILE_MAP[MODE_NAMES.AUTOPILOT], mode: MODE_NAMES.AUTOPILOT },
@@ -22633,7 +22686,7 @@ function withFileLockSync(lockPath, fn, opts) {
22633
22686
  }
22634
22687
  }
22635
22688
  function sleep3(ms) {
22636
- return new Promise((resolve5) => setTimeout(resolve5, ms));
22689
+ return new Promise((resolve6) => setTimeout(resolve6, ms));
22637
22690
  }
22638
22691
  async function acquireFileLock(lockPath, opts) {
22639
22692
  const staleLockMs = opts?.staleLockMs ?? DEFAULT_STALE_LOCK_MS;
@@ -23324,13 +23377,11 @@ var import_promises = __toESM(require("fs/promises"), 1);
23324
23377
  var import_path12 = __toESM(require("path"), 1);
23325
23378
 
23326
23379
  // src/hooks/project-memory/constants.ts
23327
- var MEMORY_FILE = "project-memory.json";
23328
- var MEMORY_DIR = ".omc";
23329
23380
  var CACHE_EXPIRY_MS = 24 * 60 * 60 * 1e3;
23330
23381
 
23331
23382
  // src/hooks/project-memory/storage.ts
23332
23383
  function getMemoryPath(projectRoot) {
23333
- return import_path12.default.join(projectRoot, MEMORY_DIR, MEMORY_FILE);
23384
+ return getWorktreeProjectMemoryPath(projectRoot);
23334
23385
  }
23335
23386
  async function loadProjectMemory(projectRoot) {
23336
23387
  const memoryPath = getMemoryPath(projectRoot);
@@ -23346,8 +23397,8 @@ async function loadProjectMemory(projectRoot) {
23346
23397
  }
23347
23398
  }
23348
23399
  async function saveProjectMemory(projectRoot, memory) {
23349
- const omcDir = import_path12.default.join(projectRoot, MEMORY_DIR);
23350
23400
  const memoryPath = getMemoryPath(projectRoot);
23401
+ const omcDir = import_path12.default.dirname(memoryPath);
23351
23402
  try {
23352
23403
  await import_promises.default.mkdir(omcDir, { recursive: true });
23353
23404
  await atomicWriteJson(memoryPath, memory);
@@ -23500,7 +23551,7 @@ function mergeArrays(fieldName, base, incoming) {
23500
23551
  return mergeScalarArray(base, incoming);
23501
23552
  }
23502
23553
  }
23503
- function mergeByKey(base, incoming, keyFn, resolve5) {
23554
+ function mergeByKey(base, incoming, keyFn, resolve6) {
23504
23555
  const seen = /* @__PURE__ */ new Map();
23505
23556
  for (const item of base) {
23506
23557
  seen.set(keyFn(item), item);
@@ -23509,7 +23560,7 @@ function mergeByKey(base, incoming, keyFn, resolve5) {
23509
23560
  const key = keyFn(item);
23510
23561
  const existing = seen.get(key);
23511
23562
  if (existing) {
23512
- seen.set(key, resolve5(existing, item));
23563
+ seen.set(key, resolve6(existing, item));
23513
23564
  } else {
23514
23565
  seen.set(key, item);
23515
23566
  }
@@ -23750,8 +23801,8 @@ var memoryTools = [
23750
23801
  ];
23751
23802
 
23752
23803
  // src/tools/trace-tools.ts
23753
- var import_fs14 = require("fs");
23754
- var import_path17 = require("path");
23804
+ var import_fs15 = require("fs");
23805
+ var import_path18 = require("path");
23755
23806
 
23756
23807
  // src/hooks/subagent-tracker/session-replay.ts
23757
23808
  var import_fs13 = require("fs");
@@ -23940,15 +23991,479 @@ function getReplaySummary(directory, sessionId) {
23940
23991
  return summary;
23941
23992
  }
23942
23993
 
23994
+ // src/features/session-history-search/index.ts
23995
+ var import_child_process9 = require("child_process");
23996
+ var import_fs14 = require("fs");
23997
+ var import_os3 = require("os");
23998
+ var import_path17 = require("path");
23999
+ var import_readline = require("readline");
24000
+ var DEFAULT_LIMIT = 10;
24001
+ var DEFAULT_CONTEXT_CHARS = 120;
24002
+ function getClaudeConfigDir() {
24003
+ return process.env.CLAUDE_CONFIG_DIR || (0, import_path17.join)((0, import_os3.homedir)(), ".claude");
24004
+ }
24005
+ function compactWhitespace(text) {
24006
+ return text.replace(/\s+/g, " ").trim();
24007
+ }
24008
+ function normalizeForSearch(value, caseSensitive) {
24009
+ const compacted = compactWhitespace(value);
24010
+ return caseSensitive ? compacted : compacted.toLowerCase();
24011
+ }
24012
+ function parseSinceSpec(since) {
24013
+ if (!since) return void 0;
24014
+ const trimmed = since.trim();
24015
+ if (!trimmed) return void 0;
24016
+ const durationMatch = trimmed.match(/^(\d+)\s*([mhdw])$/i);
24017
+ if (durationMatch) {
24018
+ const amount = Number.parseInt(durationMatch[1], 10);
24019
+ const unit = durationMatch[2].toLowerCase();
24020
+ const multiplierMap = {
24021
+ m: 6e4,
24022
+ h: 36e5,
24023
+ d: 864e5,
24024
+ w: 6048e5
24025
+ };
24026
+ const multiplier = multiplierMap[unit];
24027
+ return multiplier ? Date.now() - amount * multiplier : void 0;
24028
+ }
24029
+ const parsed = Date.parse(trimmed);
24030
+ return Number.isNaN(parsed) ? void 0 : parsed;
24031
+ }
24032
+ function encodeProjectPath(projectPath) {
24033
+ return projectPath.replace(/[\\/]/g, "-");
24034
+ }
24035
+ function getMainRepoRoot(projectRoot) {
24036
+ try {
24037
+ const gitCommonDir = (0, import_child_process9.execSync)("git rev-parse --git-common-dir", {
24038
+ cwd: projectRoot,
24039
+ encoding: "utf-8",
24040
+ stdio: ["pipe", "pipe", "pipe"]
24041
+ }).trim();
24042
+ const absoluteCommonDir = (0, import_path17.resolve)(projectRoot, gitCommonDir);
24043
+ const mainRepoRoot = (0, import_path17.dirname)(absoluteCommonDir);
24044
+ return mainRepoRoot === projectRoot ? null : mainRepoRoot;
24045
+ } catch {
24046
+ return null;
24047
+ }
24048
+ }
24049
+ function getClaudeWorktreeParent(projectRoot) {
24050
+ const marker = `${(0, import_path17.normalize)("/.claude/worktrees/")}`;
24051
+ const normalizedRoot = (0, import_path17.normalize)(projectRoot);
24052
+ const idx = normalizedRoot.indexOf(marker);
24053
+ if (idx === -1) return null;
24054
+ return normalizedRoot.slice(0, idx) || null;
24055
+ }
24056
+ function listJsonlFiles(rootDir) {
24057
+ if (!(0, import_fs14.existsSync)(rootDir)) {
24058
+ return [];
24059
+ }
24060
+ const files = [];
24061
+ const stack = [rootDir];
24062
+ while (stack.length > 0) {
24063
+ const current = stack.pop();
24064
+ let entries;
24065
+ try {
24066
+ entries = (0, import_fs14.readdirSync)(current, { withFileTypes: true });
24067
+ } catch {
24068
+ continue;
24069
+ }
24070
+ for (const entry of entries) {
24071
+ const fullPath = (0, import_path17.join)(current, entry.name);
24072
+ if (entry.isDirectory()) {
24073
+ stack.push(fullPath);
24074
+ continue;
24075
+ }
24076
+ if (entry.isFile() && (entry.name.endsWith(".jsonl") || entry.name.endsWith(".json"))) {
24077
+ files.push(fullPath);
24078
+ }
24079
+ }
24080
+ }
24081
+ return files;
24082
+ }
24083
+ function uniqueSortedTargets(targets) {
24084
+ const seen = /* @__PURE__ */ new Set();
24085
+ return targets.filter((target) => {
24086
+ const key = `${target.sourceType}:${target.filePath}`;
24087
+ if (seen.has(key)) return false;
24088
+ seen.add(key);
24089
+ return true;
24090
+ }).sort((a, b) => {
24091
+ const aTime = (0, import_fs14.existsSync)(a.filePath) ? (0, import_fs14.statSync)(a.filePath).mtimeMs : 0;
24092
+ const bTime = (0, import_fs14.existsSync)(b.filePath) ? (0, import_fs14.statSync)(b.filePath).mtimeMs : 0;
24093
+ return bTime - aTime;
24094
+ });
24095
+ }
24096
+ function buildCurrentProjectTargets(projectRoot) {
24097
+ const claudeDir = getClaudeConfigDir();
24098
+ const projectRoots = /* @__PURE__ */ new Set([projectRoot]);
24099
+ const mainRepoRoot = getMainRepoRoot(projectRoot);
24100
+ if (mainRepoRoot) projectRoots.add(mainRepoRoot);
24101
+ const claudeWorktreeParent = getClaudeWorktreeParent(projectRoot);
24102
+ if (claudeWorktreeParent) projectRoots.add(claudeWorktreeParent);
24103
+ const targets = [];
24104
+ for (const root of projectRoots) {
24105
+ const encodedDir = (0, import_path17.join)(claudeDir, "projects", encodeProjectPath(root));
24106
+ for (const filePath of listJsonlFiles(encodedDir)) {
24107
+ targets.push({ filePath, sourceType: "project-transcript" });
24108
+ }
24109
+ }
24110
+ const legacyTranscriptsDir = (0, import_path17.join)(claudeDir, "transcripts");
24111
+ for (const filePath of listJsonlFiles(legacyTranscriptsDir)) {
24112
+ targets.push({ filePath, sourceType: "legacy-transcript" });
24113
+ }
24114
+ const omcRoot = getOmcRoot(projectRoot);
24115
+ const sessionSummariesDir = (0, import_path17.join)(omcRoot, "sessions");
24116
+ for (const filePath of listJsonlFiles(sessionSummariesDir)) {
24117
+ targets.push({ filePath, sourceType: "omc-session-summary" });
24118
+ }
24119
+ const replayDir = (0, import_path17.join)(omcRoot, "state");
24120
+ if ((0, import_fs14.existsSync)(replayDir)) {
24121
+ for (const filePath of listJsonlFiles(replayDir)) {
24122
+ if (filePath.includes("agent-replay-") && filePath.endsWith(".jsonl")) {
24123
+ targets.push({ filePath, sourceType: "omc-session-replay" });
24124
+ }
24125
+ }
24126
+ }
24127
+ return uniqueSortedTargets(targets);
24128
+ }
24129
+ function buildAllProjectTargets() {
24130
+ const claudeDir = getClaudeConfigDir();
24131
+ const targets = [];
24132
+ for (const filePath of listJsonlFiles((0, import_path17.join)(claudeDir, "projects"))) {
24133
+ targets.push({ filePath, sourceType: "project-transcript" });
24134
+ }
24135
+ for (const filePath of listJsonlFiles((0, import_path17.join)(claudeDir, "transcripts"))) {
24136
+ targets.push({ filePath, sourceType: "legacy-transcript" });
24137
+ }
24138
+ return uniqueSortedTargets(targets);
24139
+ }
24140
+ function isWithinProject(projectPath, projectRoots) {
24141
+ if (!projectPath) {
24142
+ return false;
24143
+ }
24144
+ const normalizedProjectPath = (0, import_path17.normalize)((0, import_path17.resolve)(projectPath));
24145
+ return projectRoots.some((root) => {
24146
+ const normalizedRoot = (0, import_path17.normalize)((0, import_path17.resolve)(root));
24147
+ return normalizedProjectPath === normalizedRoot || normalizedProjectPath.startsWith(`${normalizedRoot}/`);
24148
+ });
24149
+ }
24150
+ function matchesProjectFilter(projectPath, projectFilter) {
24151
+ if (!projectFilter || projectFilter === "all") {
24152
+ return true;
24153
+ }
24154
+ if (!projectPath) {
24155
+ return false;
24156
+ }
24157
+ return projectPath.toLowerCase().includes(projectFilter.toLowerCase());
24158
+ }
24159
+ function stringLeaves(value, maxLeaves = 24) {
24160
+ const leaves = [];
24161
+ const stack = [value];
24162
+ while (stack.length > 0 && leaves.length < maxLeaves) {
24163
+ const current = stack.pop();
24164
+ if (typeof current === "string") {
24165
+ const compacted = compactWhitespace(current);
24166
+ if (compacted.length > 0) {
24167
+ leaves.push(compacted);
24168
+ }
24169
+ continue;
24170
+ }
24171
+ if (Array.isArray(current)) {
24172
+ stack.push(...current);
24173
+ continue;
24174
+ }
24175
+ if (current && typeof current === "object") {
24176
+ stack.push(...Object.values(current));
24177
+ }
24178
+ }
24179
+ return leaves;
24180
+ }
24181
+ function extractTranscriptTexts(entry) {
24182
+ const texts = [];
24183
+ const message = entry.message;
24184
+ const content = message?.content;
24185
+ if (typeof content === "string") {
24186
+ texts.push(content);
24187
+ } else if (Array.isArray(content)) {
24188
+ for (const block of content) {
24189
+ if (!block || typeof block !== "object") continue;
24190
+ const record2 = block;
24191
+ const blockType = typeof record2.type === "string" ? record2.type : void 0;
24192
+ if ((blockType === "text" || blockType === "thinking" || blockType === "reasoning") && typeof record2.text === "string") {
24193
+ texts.push(record2.text);
24194
+ continue;
24195
+ }
24196
+ if (blockType === "tool_result") {
24197
+ texts.push(...stringLeaves(record2.content));
24198
+ continue;
24199
+ }
24200
+ if (blockType === "tool_use") {
24201
+ const toolName = typeof record2.name === "string" ? record2.name : "tool";
24202
+ const inputText = stringLeaves(record2.input).join(" ");
24203
+ if (inputText) {
24204
+ texts.push(`${toolName} ${inputText}`);
24205
+ }
24206
+ }
24207
+ }
24208
+ }
24209
+ return texts;
24210
+ }
24211
+ function buildTranscriptEntry(entry) {
24212
+ const texts = extractTranscriptTexts(entry);
24213
+ if (texts.length === 0) {
24214
+ return null;
24215
+ }
24216
+ const message = entry.message;
24217
+ const sessionId = typeof entry.sessionId === "string" ? entry.sessionId : typeof entry.session_id === "string" ? entry.session_id : typeof message?.sessionId === "string" ? message.sessionId : void 0;
24218
+ if (!sessionId) {
24219
+ return null;
24220
+ }
24221
+ return {
24222
+ sessionId,
24223
+ agentId: typeof entry.agentId === "string" ? entry.agentId : void 0,
24224
+ timestamp: typeof entry.timestamp === "string" ? entry.timestamp : void 0,
24225
+ projectPath: typeof entry.cwd === "string" ? entry.cwd : void 0,
24226
+ role: typeof message?.role === "string" ? message.role : void 0,
24227
+ entryType: typeof entry.type === "string" ? entry.type : void 0,
24228
+ texts
24229
+ };
24230
+ }
24231
+ function buildJsonArtifactEntry(entry, sourceType) {
24232
+ const sessionId = typeof entry.session_id === "string" ? entry.session_id : typeof entry.sessionId === "string" ? entry.sessionId : void 0;
24233
+ if (!sessionId) {
24234
+ return null;
24235
+ }
24236
+ const texts = stringLeaves(entry);
24237
+ if (texts.length === 0) {
24238
+ return null;
24239
+ }
24240
+ const timestamp = typeof entry.ended_at === "string" ? entry.ended_at : typeof entry.started_at === "string" ? entry.started_at : typeof entry.timestamp === "string" ? entry.timestamp : void 0;
24241
+ const entryType = sourceType === "omc-session-summary" ? "session-summary" : "session-replay";
24242
+ return {
24243
+ sessionId,
24244
+ timestamp,
24245
+ projectPath: typeof entry.cwd === "string" ? entry.cwd : void 0,
24246
+ entryType,
24247
+ texts
24248
+ };
24249
+ }
24250
+ function buildSearchableEntry(entry, sourceType) {
24251
+ if (sourceType === "project-transcript" || sourceType === "legacy-transcript" || sourceType === "omc-session-replay") {
24252
+ return buildTranscriptEntry(entry) ?? (sourceType === "omc-session-replay" ? buildJsonArtifactEntry(entry, sourceType) : null);
24253
+ }
24254
+ if (sourceType === "omc-session-summary") {
24255
+ return buildJsonArtifactEntry(entry, sourceType);
24256
+ }
24257
+ return null;
24258
+ }
24259
+ function findMatchIndex(text, query, caseSensitive) {
24260
+ const haystack = normalizeForSearch(text, caseSensitive);
24261
+ const needle = normalizeForSearch(query, caseSensitive);
24262
+ const directIndex = haystack.indexOf(needle);
24263
+ if (directIndex >= 0) {
24264
+ return directIndex;
24265
+ }
24266
+ const terms = needle.split(/\s+/).filter(Boolean);
24267
+ if (terms.length === 0) return -1;
24268
+ if (terms.every((term) => haystack.includes(term))) {
24269
+ return haystack.indexOf(terms[0]);
24270
+ }
24271
+ return -1;
24272
+ }
24273
+ function createExcerpt(text, matchIndex, contextChars) {
24274
+ const compacted = compactWhitespace(text);
24275
+ if (compacted.length <= contextChars * 2) {
24276
+ return compacted;
24277
+ }
24278
+ const safeIndex = Math.max(0, matchIndex);
24279
+ const start = Math.max(0, safeIndex - contextChars);
24280
+ const end = Math.min(compacted.length, safeIndex + contextChars);
24281
+ const prefix = start > 0 ? "\u2026" : "";
24282
+ const suffix = end < compacted.length ? "\u2026" : "";
24283
+ return `${prefix}${compacted.slice(start, end).trim()}${suffix}`;
24284
+ }
24285
+ function buildScopeMode(project) {
24286
+ if (!project || project === "current") return "current";
24287
+ if (project === "all") return "all";
24288
+ return "project";
24289
+ }
24290
+ async function collectMatchesFromFile(target, options) {
24291
+ const matches = [];
24292
+ const fileMtime = (0, import_fs14.existsSync)(target.filePath) ? (0, import_fs14.statSync)(target.filePath).mtimeMs : 0;
24293
+ if (target.sourceType === "omc-session-summary" && target.filePath.endsWith(".json")) {
24294
+ try {
24295
+ const payload = JSON.parse(await import("fs/promises").then((fs8) => fs8.readFile(target.filePath, "utf-8")));
24296
+ const entry = buildSearchableEntry(payload, target.sourceType);
24297
+ if (!entry) return [];
24298
+ if (options.sessionId && entry.sessionId !== options.sessionId) return [];
24299
+ if (options.projectRoots && options.projectRoots.length > 0 && !isWithinProject(entry.projectPath, options.projectRoots)) return [];
24300
+ if (!matchesProjectFilter(entry.projectPath, options.projectFilter)) return [];
24301
+ const entryEpoch = entry.timestamp ? Date.parse(entry.timestamp) : fileMtime;
24302
+ if (options.sinceEpoch && Number.isFinite(entryEpoch) && entryEpoch < options.sinceEpoch) return [];
24303
+ for (const text of entry.texts) {
24304
+ const matchIndex = findMatchIndex(text, options.query, options.caseSensitive);
24305
+ if (matchIndex < 0) continue;
24306
+ matches.push({
24307
+ sessionId: entry.sessionId,
24308
+ timestamp: entry.timestamp,
24309
+ projectPath: entry.projectPath,
24310
+ sourcePath: target.filePath,
24311
+ sourceType: target.sourceType,
24312
+ line: 1,
24313
+ role: entry.role,
24314
+ entryType: entry.entryType,
24315
+ excerpt: createExcerpt(text, matchIndex, options.contextChars)
24316
+ });
24317
+ break;
24318
+ }
24319
+ } catch {
24320
+ return [];
24321
+ }
24322
+ return matches;
24323
+ }
24324
+ const stream = (0, import_fs14.createReadStream)(target.filePath, { encoding: "utf-8" });
24325
+ const reader = (0, import_readline.createInterface)({ input: stream, crlfDelay: Infinity });
24326
+ let line = 0;
24327
+ try {
24328
+ for await (const rawLine of reader) {
24329
+ line += 1;
24330
+ if (!rawLine.trim()) continue;
24331
+ let parsed;
24332
+ try {
24333
+ parsed = JSON.parse(rawLine);
24334
+ } catch {
24335
+ continue;
24336
+ }
24337
+ const entry = buildSearchableEntry(parsed, target.sourceType);
24338
+ if (!entry) continue;
24339
+ if (options.sessionId && entry.sessionId !== options.sessionId) continue;
24340
+ if (options.projectRoots && options.projectRoots.length > 0 && !isWithinProject(entry.projectPath, options.projectRoots)) continue;
24341
+ if (!matchesProjectFilter(entry.projectPath, options.projectFilter)) continue;
24342
+ const entryEpoch = entry.timestamp ? Date.parse(entry.timestamp) : fileMtime;
24343
+ if (options.sinceEpoch && Number.isFinite(entryEpoch) && entryEpoch < options.sinceEpoch) continue;
24344
+ for (const text of entry.texts) {
24345
+ const matchIndex = findMatchIndex(text, options.query, options.caseSensitive);
24346
+ if (matchIndex < 0) continue;
24347
+ matches.push({
24348
+ sessionId: entry.sessionId,
24349
+ agentId: entry.agentId,
24350
+ timestamp: entry.timestamp,
24351
+ projectPath: entry.projectPath,
24352
+ sourcePath: target.filePath,
24353
+ sourceType: target.sourceType,
24354
+ line,
24355
+ role: entry.role,
24356
+ entryType: entry.entryType,
24357
+ excerpt: createExcerpt(text, matchIndex, options.contextChars)
24358
+ });
24359
+ break;
24360
+ }
24361
+ }
24362
+ } finally {
24363
+ reader.close();
24364
+ stream.destroy();
24365
+ }
24366
+ return matches;
24367
+ }
24368
+ async function searchSessionHistory(rawOptions) {
24369
+ const query = compactWhitespace(rawOptions.query || "");
24370
+ if (!query) {
24371
+ throw new Error("Query cannot be empty");
24372
+ }
24373
+ if (rawOptions.sessionId) {
24374
+ validateSessionId(rawOptions.sessionId);
24375
+ }
24376
+ const limit = Math.max(1, rawOptions.limit ?? DEFAULT_LIMIT);
24377
+ const contextChars = Math.max(20, rawOptions.contextChars ?? DEFAULT_CONTEXT_CHARS);
24378
+ const caseSensitive = rawOptions.caseSensitive ?? false;
24379
+ const sinceEpoch = parseSinceSpec(rawOptions.since);
24380
+ const workingDirectory = validateWorkingDirectory(rawOptions.workingDirectory);
24381
+ const currentProjectRoot = resolveToWorktreeRoot(workingDirectory);
24382
+ const scopeMode = buildScopeMode(rawOptions.project);
24383
+ const projectFilter = scopeMode === "project" ? rawOptions.project : void 0;
24384
+ const currentProjectRoots = [currentProjectRoot].concat(getMainRepoRoot(currentProjectRoot) ?? []).concat(getClaudeWorktreeParent(currentProjectRoot) ?? []).filter((value, index, arr) => Boolean(value) && arr.indexOf(value) === index);
24385
+ const targets = scopeMode === "all" ? buildAllProjectTargets() : buildCurrentProjectTargets(currentProjectRoot);
24386
+ const allMatches = [];
24387
+ for (const target of targets) {
24388
+ const fileMatches = await collectMatchesFromFile(target, {
24389
+ query,
24390
+ caseSensitive,
24391
+ contextChars,
24392
+ sinceEpoch,
24393
+ sessionId: rawOptions.sessionId,
24394
+ projectFilter,
24395
+ projectRoots: scopeMode === "current" ? currentProjectRoots : void 0
24396
+ });
24397
+ allMatches.push(...fileMatches);
24398
+ }
24399
+ allMatches.sort((a, b) => {
24400
+ const aTime = a.timestamp ? Date.parse(a.timestamp) : 0;
24401
+ const bTime = b.timestamp ? Date.parse(b.timestamp) : 0;
24402
+ if (aTime !== bTime) return bTime - aTime;
24403
+ return a.sourcePath.localeCompare(b.sourcePath);
24404
+ });
24405
+ return {
24406
+ query,
24407
+ scope: {
24408
+ mode: scopeMode,
24409
+ project: rawOptions.project,
24410
+ workingDirectory: currentProjectRoot,
24411
+ since: rawOptions.since,
24412
+ caseSensitive
24413
+ },
24414
+ searchedFiles: targets.length,
24415
+ totalMatches: allMatches.length,
24416
+ results: allMatches.slice(0, limit)
24417
+ };
24418
+ }
24419
+
24420
+ // src/tools/session-history-tools.ts
24421
+ function buildToolJson(report) {
24422
+ return JSON.stringify(report, null, 2);
24423
+ }
24424
+ var sessionSearchTool = {
24425
+ name: "session_search",
24426
+ description: "Search prior local session history and transcript artifacts. Returns structured JSON with session ids, timestamps, source paths, and matching excerpts.",
24427
+ schema: {
24428
+ query: external_exports.string().min(1).describe("Text query to search for in prior session history"),
24429
+ limit: external_exports.number().int().positive().optional().describe("Maximum number of matches to return (default: 10)"),
24430
+ sessionId: external_exports.string().optional().describe("Restrict search to a specific session id"),
24431
+ since: external_exports.string().optional().describe("Only include matches since a relative duration (e.g. 7d, 24h) or absolute date"),
24432
+ project: external_exports.string().optional().describe('Project filter. Defaults to current project. Use "all" to search across all local Claude projects.'),
24433
+ caseSensitive: external_exports.boolean().optional().describe("Whether to match case-sensitively (default: false)"),
24434
+ contextChars: external_exports.number().int().positive().optional().describe("Approximate snippet context on each side of a match (default: 120)"),
24435
+ workingDirectory: external_exports.string().optional().describe("Working directory used to determine the current project scope")
24436
+ },
24437
+ handler: async (args) => {
24438
+ try {
24439
+ const report = await searchSessionHistory(args);
24440
+ return {
24441
+ content: [{
24442
+ type: "text",
24443
+ text: buildToolJson(report)
24444
+ }]
24445
+ };
24446
+ } catch (error2) {
24447
+ return {
24448
+ content: [{
24449
+ type: "text",
24450
+ text: `Error searching session history: ${error2 instanceof Error ? error2.message : String(error2)}`
24451
+ }],
24452
+ isError: true
24453
+ };
24454
+ }
24455
+ }
24456
+ };
24457
+
23943
24458
  // src/tools/trace-tools.ts
23944
24459
  var REPLAY_PREFIX2 = "agent-replay-";
23945
24460
  function findLatestSessionId(directory) {
23946
- const stateDir = (0, import_path17.join)(directory, ".omc", "state");
24461
+ const stateDir = (0, import_path18.join)(directory, ".omc", "state");
23947
24462
  try {
23948
- const files = (0, import_fs14.readdirSync)(stateDir).filter((f) => f.startsWith(REPLAY_PREFIX2) && f.endsWith(".jsonl")).map((f) => ({
24463
+ const files = (0, import_fs15.readdirSync)(stateDir).filter((f) => f.startsWith(REPLAY_PREFIX2) && f.endsWith(".jsonl")).map((f) => ({
23949
24464
  name: f,
23950
24465
  sessionId: f.slice(REPLAY_PREFIX2.length, -".jsonl".length),
23951
- mtime: (0, import_fs14.statSync)((0, import_path17.join)(stateDir, f)).mtimeMs
24466
+ mtime: (0, import_fs15.statSync)((0, import_path18.join)(stateDir, f)).mtimeMs
23952
24467
  })).sort((a, b) => b.mtime - a.mtime);
23953
24468
  return files.length > 0 ? files[0].sessionId : null;
23954
24469
  } catch {
@@ -24287,7 +24802,7 @@ No events recorded.`
24287
24802
  }
24288
24803
  }
24289
24804
  };
24290
- var traceTools = [traceTimelineTool, traceSummaryTool];
24805
+ var traceTools = [traceTimelineTool, traceSummaryTool, sessionSearchTool];
24291
24806
 
24292
24807
  // src/mcp/standalone-server.ts
24293
24808
  var allTools = [