@zhijiewang/openharness 0.12.0 → 0.12.1

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 (520) hide show
  1. package/README.md +13 -0
  2. package/dist/agents/roles.js +42 -0
  3. package/dist/commands/index.js +31 -2
  4. package/dist/harness/session.d.ts +19 -0
  5. package/dist/harness/session.js +53 -0
  6. package/dist/mcp/registry.d.ts +31 -0
  7. package/dist/mcp/registry.js +180 -0
  8. package/dist/repl.js +13 -0
  9. package/dist/tools/AgentTool/index.js +1 -1
  10. package/package.json +5 -2
  11. package/dist/DeferredTool.d.ts.map +0 -1
  12. package/dist/DeferredTool.js.map +0 -1
  13. package/dist/DeferredTool.test.d.ts +0 -2
  14. package/dist/DeferredTool.test.d.ts.map +0 -1
  15. package/dist/DeferredTool.test.js +0 -79
  16. package/dist/DeferredTool.test.js.map +0 -1
  17. package/dist/Tool.d.ts.map +0 -1
  18. package/dist/Tool.js.map +0 -1
  19. package/dist/Tool.test.d.ts +0 -2
  20. package/dist/Tool.test.d.ts.map +0 -1
  21. package/dist/Tool.test.js +0 -48
  22. package/dist/Tool.test.js.map +0 -1
  23. package/dist/agents/roles.d.ts.map +0 -1
  24. package/dist/agents/roles.js.map +0 -1
  25. package/dist/agents/roles.test.d.ts +0 -2
  26. package/dist/agents/roles.test.d.ts.map +0 -1
  27. package/dist/agents/roles.test.js +0 -62
  28. package/dist/agents/roles.test.js.map +0 -1
  29. package/dist/commands/commands-new.test.d.ts +0 -5
  30. package/dist/commands/commands-new.test.d.ts.map +0 -1
  31. package/dist/commands/commands-new.test.js +0 -132
  32. package/dist/commands/commands-new.test.js.map +0 -1
  33. package/dist/commands/commands.test.d.ts +0 -2
  34. package/dist/commands/commands.test.d.ts.map +0 -1
  35. package/dist/commands/commands.test.js +0 -98
  36. package/dist/commands/commands.test.js.map +0 -1
  37. package/dist/commands/cybergotchi.d.ts.map +0 -1
  38. package/dist/commands/cybergotchi.js.map +0 -1
  39. package/dist/commands/index.d.ts.map +0 -1
  40. package/dist/commands/index.js.map +0 -1
  41. package/dist/components/App.d.ts.map +0 -1
  42. package/dist/components/App.js.map +0 -1
  43. package/dist/components/CompanionFooter.d.ts.map +0 -1
  44. package/dist/components/CompanionFooter.js.map +0 -1
  45. package/dist/components/CybergotchiBubble.d.ts.map +0 -1
  46. package/dist/components/CybergotchiBubble.js.map +0 -1
  47. package/dist/components/CybergotchiPanel.d.ts.map +0 -1
  48. package/dist/components/CybergotchiPanel.js.map +0 -1
  49. package/dist/components/CybergotchiPanelConnected.d.ts.map +0 -1
  50. package/dist/components/CybergotchiPanelConnected.js.map +0 -1
  51. package/dist/components/CybergotchiSetup.d.ts.map +0 -1
  52. package/dist/components/CybergotchiSetup.js.map +0 -1
  53. package/dist/components/CybergotchiSprite.d.ts.map +0 -1
  54. package/dist/components/CybergotchiSprite.js.map +0 -1
  55. package/dist/components/DiffView.d.ts.map +0 -1
  56. package/dist/components/DiffView.js.map +0 -1
  57. package/dist/components/ErrorBoundary.d.ts.map +0 -1
  58. package/dist/components/ErrorBoundary.js.map +0 -1
  59. package/dist/components/InitWizard.d.ts.map +0 -1
  60. package/dist/components/InitWizard.js.map +0 -1
  61. package/dist/components/Markdown.d.ts.map +0 -1
  62. package/dist/components/Markdown.js.map +0 -1
  63. package/dist/components/Messages.d.ts.map +0 -1
  64. package/dist/components/Messages.js.map +0 -1
  65. package/dist/components/PermissionPrompt.d.ts.map +0 -1
  66. package/dist/components/PermissionPrompt.js.map +0 -1
  67. package/dist/components/REPL.d.ts.map +0 -1
  68. package/dist/components/REPL.js.map +0 -1
  69. package/dist/components/Spinner.d.ts.map +0 -1
  70. package/dist/components/Spinner.js.map +0 -1
  71. package/dist/components/TextInput.d.ts.map +0 -1
  72. package/dist/components/TextInput.js.map +0 -1
  73. package/dist/components/ToolCallDisplay.d.ts.map +0 -1
  74. package/dist/components/ToolCallDisplay.js.map +0 -1
  75. package/dist/cybergotchi/bones.d.ts.map +0 -1
  76. package/dist/cybergotchi/bones.js.map +0 -1
  77. package/dist/cybergotchi/bones.test.d.ts +0 -2
  78. package/dist/cybergotchi/bones.test.d.ts.map +0 -1
  79. package/dist/cybergotchi/bones.test.js +0 -100
  80. package/dist/cybergotchi/bones.test.js.map +0 -1
  81. package/dist/cybergotchi/config.d.ts.map +0 -1
  82. package/dist/cybergotchi/config.js.map +0 -1
  83. package/dist/cybergotchi/events.d.ts.map +0 -1
  84. package/dist/cybergotchi/events.js.map +0 -1
  85. package/dist/cybergotchi/needs.d.ts.map +0 -1
  86. package/dist/cybergotchi/needs.js.map +0 -1
  87. package/dist/cybergotchi/needs.test.d.ts +0 -2
  88. package/dist/cybergotchi/needs.test.d.ts.map +0 -1
  89. package/dist/cybergotchi/needs.test.js +0 -150
  90. package/dist/cybergotchi/needs.test.js.map +0 -1
  91. package/dist/cybergotchi/personality.d.ts.map +0 -1
  92. package/dist/cybergotchi/personality.js.map +0 -1
  93. package/dist/cybergotchi/species.d.ts.map +0 -1
  94. package/dist/cybergotchi/species.js.map +0 -1
  95. package/dist/cybergotchi/speech.d.ts.map +0 -1
  96. package/dist/cybergotchi/speech.js.map +0 -1
  97. package/dist/cybergotchi/types.d.ts.map +0 -1
  98. package/dist/cybergotchi/types.js.map +0 -1
  99. package/dist/cybergotchi/useCybergotchi.d.ts.map +0 -1
  100. package/dist/cybergotchi/useCybergotchi.js.map +0 -1
  101. package/dist/git/git.test.d.ts +0 -2
  102. package/dist/git/git.test.d.ts.map +0 -1
  103. package/dist/git/git.test.js +0 -141
  104. package/dist/git/git.test.js.map +0 -1
  105. package/dist/git/index.d.ts.map +0 -1
  106. package/dist/git/index.js.map +0 -1
  107. package/dist/harness/checkpoints.d.ts.map +0 -1
  108. package/dist/harness/checkpoints.js.map +0 -1
  109. package/dist/harness/config.d.ts.map +0 -1
  110. package/dist/harness/config.js.map +0 -1
  111. package/dist/harness/config.test.d.ts +0 -2
  112. package/dist/harness/config.test.d.ts.map +0 -1
  113. package/dist/harness/config.test.js +0 -107
  114. package/dist/harness/config.test.js.map +0 -1
  115. package/dist/harness/context-warning.d.ts.map +0 -1
  116. package/dist/harness/context-warning.js.map +0 -1
  117. package/dist/harness/context-warning.test.d.ts +0 -2
  118. package/dist/harness/context-warning.test.d.ts.map +0 -1
  119. package/dist/harness/context-warning.test.js +0 -72
  120. package/dist/harness/context-warning.test.js.map +0 -1
  121. package/dist/harness/cost.d.ts.map +0 -1
  122. package/dist/harness/cost.js.map +0 -1
  123. package/dist/harness/cost.test.d.ts +0 -2
  124. package/dist/harness/cost.test.d.ts.map +0 -1
  125. package/dist/harness/cost.test.js +0 -43
  126. package/dist/harness/cost.test.js.map +0 -1
  127. package/dist/harness/credentials.d.ts.map +0 -1
  128. package/dist/harness/credentials.js.map +0 -1
  129. package/dist/harness/credentials.test.d.ts +0 -2
  130. package/dist/harness/credentials.test.d.ts.map +0 -1
  131. package/dist/harness/credentials.test.js +0 -113
  132. package/dist/harness/credentials.test.js.map +0 -1
  133. package/dist/harness/hooks-env.test.d.ts +0 -5
  134. package/dist/harness/hooks-env.test.d.ts.map +0 -1
  135. package/dist/harness/hooks-env.test.js +0 -41
  136. package/dist/harness/hooks-env.test.js.map +0 -1
  137. package/dist/harness/hooks.d.ts.map +0 -1
  138. package/dist/harness/hooks.js.map +0 -1
  139. package/dist/harness/hooks.test.d.ts +0 -2
  140. package/dist/harness/hooks.test.d.ts.map +0 -1
  141. package/dist/harness/hooks.test.js +0 -24
  142. package/dist/harness/hooks.test.js.map +0 -1
  143. package/dist/harness/keybindings.d.ts.map +0 -1
  144. package/dist/harness/keybindings.js.map +0 -1
  145. package/dist/harness/keybindings.test.d.ts +0 -2
  146. package/dist/harness/keybindings.test.d.ts.map +0 -1
  147. package/dist/harness/keybindings.test.js +0 -38
  148. package/dist/harness/keybindings.test.js.map +0 -1
  149. package/dist/harness/memory-consolidation.test.d.ts +0 -2
  150. package/dist/harness/memory-consolidation.test.d.ts.map +0 -1
  151. package/dist/harness/memory-consolidation.test.js +0 -152
  152. package/dist/harness/memory-consolidation.test.js.map +0 -1
  153. package/dist/harness/memory.d.ts.map +0 -1
  154. package/dist/harness/memory.js.map +0 -1
  155. package/dist/harness/memory.test.d.ts +0 -2
  156. package/dist/harness/memory.test.d.ts.map +0 -1
  157. package/dist/harness/memory.test.js +0 -107
  158. package/dist/harness/memory.test.js.map +0 -1
  159. package/dist/harness/onboarding.d.ts.map +0 -1
  160. package/dist/harness/onboarding.js.map +0 -1
  161. package/dist/harness/onboarding.test.d.ts +0 -5
  162. package/dist/harness/onboarding.test.d.ts.map +0 -1
  163. package/dist/harness/onboarding.test.js +0 -93
  164. package/dist/harness/onboarding.test.js.map +0 -1
  165. package/dist/harness/plugins.d.ts.map +0 -1
  166. package/dist/harness/plugins.js.map +0 -1
  167. package/dist/harness/plugins.test.d.ts +0 -2
  168. package/dist/harness/plugins.test.d.ts.map +0 -1
  169. package/dist/harness/plugins.test.js +0 -97
  170. package/dist/harness/plugins.test.js.map +0 -1
  171. package/dist/harness/rules.d.ts.map +0 -1
  172. package/dist/harness/rules.js.map +0 -1
  173. package/dist/harness/rules.test.d.ts +0 -2
  174. package/dist/harness/rules.test.d.ts.map +0 -1
  175. package/dist/harness/rules.test.js +0 -54
  176. package/dist/harness/rules.test.js.map +0 -1
  177. package/dist/harness/session.d.ts.map +0 -1
  178. package/dist/harness/session.js.map +0 -1
  179. package/dist/harness/session.test.d.ts +0 -2
  180. package/dist/harness/session.test.d.ts.map +0 -1
  181. package/dist/harness/session.test.js +0 -73
  182. package/dist/harness/session.test.js.map +0 -1
  183. package/dist/harness/store.d.ts.map +0 -1
  184. package/dist/harness/store.js.map +0 -1
  185. package/dist/harness/store.test.d.ts +0 -2
  186. package/dist/harness/store.test.d.ts.map +0 -1
  187. package/dist/harness/store.test.js +0 -71
  188. package/dist/harness/store.test.js.map +0 -1
  189. package/dist/harness/submit-handler.d.ts.map +0 -1
  190. package/dist/harness/submit-handler.js.map +0 -1
  191. package/dist/harness/submit-handler.test.d.ts +0 -2
  192. package/dist/harness/submit-handler.test.d.ts.map +0 -1
  193. package/dist/harness/submit-handler.test.js +0 -62
  194. package/dist/harness/submit-handler.test.js.map +0 -1
  195. package/dist/harness/verification.d.ts.map +0 -1
  196. package/dist/harness/verification.js.map +0 -1
  197. package/dist/harness/verification.test.d.ts +0 -2
  198. package/dist/harness/verification.test.d.ts.map +0 -1
  199. package/dist/harness/verification.test.js +0 -181
  200. package/dist/harness/verification.test.js.map +0 -1
  201. package/dist/lsp/client.d.ts.map +0 -1
  202. package/dist/lsp/client.js.map +0 -1
  203. package/dist/lsp/client.test.d.ts +0 -2
  204. package/dist/lsp/client.test.d.ts.map +0 -1
  205. package/dist/lsp/client.test.js +0 -44
  206. package/dist/lsp/client.test.js.map +0 -1
  207. package/dist/main.d.ts.map +0 -1
  208. package/dist/main.js.map +0 -1
  209. package/dist/mcp/DeferredMcpTool.d.ts.map +0 -1
  210. package/dist/mcp/DeferredMcpTool.js.map +0 -1
  211. package/dist/mcp/McpTool.d.ts.map +0 -1
  212. package/dist/mcp/McpTool.js.map +0 -1
  213. package/dist/mcp/McpTool.test.d.ts +0 -2
  214. package/dist/mcp/McpTool.test.d.ts.map +0 -1
  215. package/dist/mcp/McpTool.test.js +0 -53
  216. package/dist/mcp/McpTool.test.js.map +0 -1
  217. package/dist/mcp/client.d.ts.map +0 -1
  218. package/dist/mcp/client.js.map +0 -1
  219. package/dist/mcp/loader.d.ts.map +0 -1
  220. package/dist/mcp/loader.js.map +0 -1
  221. package/dist/mcp/loader.test.d.ts +0 -7
  222. package/dist/mcp/loader.test.d.ts.map +0 -1
  223. package/dist/mcp/loader.test.js +0 -25
  224. package/dist/mcp/loader.test.js.map +0 -1
  225. package/dist/mcp/schema.d.ts.map +0 -1
  226. package/dist/mcp/schema.js.map +0 -1
  227. package/dist/mcp/schema.test.d.ts +0 -2
  228. package/dist/mcp/schema.test.d.ts.map +0 -1
  229. package/dist/mcp/schema.test.js +0 -33
  230. package/dist/mcp/schema.test.js.map +0 -1
  231. package/dist/mcp/server.d.ts.map +0 -1
  232. package/dist/mcp/server.js.map +0 -1
  233. package/dist/mcp/server.test.d.ts +0 -2
  234. package/dist/mcp/server.test.d.ts.map +0 -1
  235. package/dist/mcp/server.test.js +0 -54
  236. package/dist/mcp/server.test.js.map +0 -1
  237. package/dist/mcp/types.d.ts.map +0 -1
  238. package/dist/mcp/types.js.map +0 -1
  239. package/dist/providers/anthropic-convert.test.d.ts +0 -5
  240. package/dist/providers/anthropic-convert.test.d.ts.map +0 -1
  241. package/dist/providers/anthropic-convert.test.js +0 -98
  242. package/dist/providers/anthropic-convert.test.js.map +0 -1
  243. package/dist/providers/anthropic.d.ts.map +0 -1
  244. package/dist/providers/anthropic.js.map +0 -1
  245. package/dist/providers/anthropic.test.d.ts +0 -2
  246. package/dist/providers/anthropic.test.d.ts.map +0 -1
  247. package/dist/providers/anthropic.test.js +0 -18
  248. package/dist/providers/anthropic.test.js.map +0 -1
  249. package/dist/providers/base.d.ts.map +0 -1
  250. package/dist/providers/base.js.map +0 -1
  251. package/dist/providers/index.d.ts.map +0 -1
  252. package/dist/providers/index.js.map +0 -1
  253. package/dist/providers/llamacpp.d.ts.map +0 -1
  254. package/dist/providers/llamacpp.js.map +0 -1
  255. package/dist/providers/llamacpp.test.d.ts +0 -2
  256. package/dist/providers/llamacpp.test.d.ts.map +0 -1
  257. package/dist/providers/llamacpp.test.js +0 -33
  258. package/dist/providers/llamacpp.test.js.map +0 -1
  259. package/dist/providers/message-format.test.d.ts +0 -2
  260. package/dist/providers/message-format.test.d.ts.map +0 -1
  261. package/dist/providers/message-format.test.js +0 -31
  262. package/dist/providers/message-format.test.js.map +0 -1
  263. package/dist/providers/ollama.d.ts.map +0 -1
  264. package/dist/providers/ollama.js.map +0 -1
  265. package/dist/providers/ollama.test.d.ts +0 -2
  266. package/dist/providers/ollama.test.d.ts.map +0 -1
  267. package/dist/providers/ollama.test.js +0 -40
  268. package/dist/providers/ollama.test.js.map +0 -1
  269. package/dist/providers/openai.d.ts.map +0 -1
  270. package/dist/providers/openai.js.map +0 -1
  271. package/dist/providers/openai.test.d.ts +0 -2
  272. package/dist/providers/openai.test.d.ts.map +0 -1
  273. package/dist/providers/openai.test.js +0 -23
  274. package/dist/providers/openai.test.js.map +0 -1
  275. package/dist/providers/openrouter.d.ts.map +0 -1
  276. package/dist/providers/openrouter.js.map +0 -1
  277. package/dist/providers/stream-parsing.test.d.ts +0 -6
  278. package/dist/providers/stream-parsing.test.d.ts.map +0 -1
  279. package/dist/providers/stream-parsing.test.js +0 -174
  280. package/dist/providers/stream-parsing.test.js.map +0 -1
  281. package/dist/query/compress.d.ts.map +0 -1
  282. package/dist/query/compress.js.map +0 -1
  283. package/dist/query/errors.d.ts.map +0 -1
  284. package/dist/query/errors.js.map +0 -1
  285. package/dist/query/index.d.ts.map +0 -1
  286. package/dist/query/index.js.map +0 -1
  287. package/dist/query/tools.d.ts.map +0 -1
  288. package/dist/query/tools.js.map +0 -1
  289. package/dist/query/types.d.ts.map +0 -1
  290. package/dist/query/types.js.map +0 -1
  291. package/dist/query.d.ts.map +0 -1
  292. package/dist/query.js.map +0 -1
  293. package/dist/query.test.d.ts +0 -2
  294. package/dist/query.test.d.ts.map +0 -1
  295. package/dist/query.test.js +0 -121
  296. package/dist/query.test.js.map +0 -1
  297. package/dist/remote/server.d.ts.map +0 -1
  298. package/dist/remote/server.js.map +0 -1
  299. package/dist/remote/server.test.d.ts +0 -2
  300. package/dist/remote/server.test.d.ts.map +0 -1
  301. package/dist/remote/server.test.js +0 -120
  302. package/dist/remote/server.test.js.map +0 -1
  303. package/dist/renderer/cells.d.ts.map +0 -1
  304. package/dist/renderer/cells.js.map +0 -1
  305. package/dist/renderer/cells.test.d.ts +0 -2
  306. package/dist/renderer/cells.test.d.ts.map +0 -1
  307. package/dist/renderer/cells.test.js +0 -69
  308. package/dist/renderer/cells.test.js.map +0 -1
  309. package/dist/renderer/colors.d.ts.map +0 -1
  310. package/dist/renderer/colors.js.map +0 -1
  311. package/dist/renderer/diff.d.ts.map +0 -1
  312. package/dist/renderer/diff.js.map +0 -1
  313. package/dist/renderer/diff.test.d.ts +0 -5
  314. package/dist/renderer/diff.test.d.ts.map +0 -1
  315. package/dist/renderer/diff.test.js +0 -140
  316. package/dist/renderer/diff.test.js.map +0 -1
  317. package/dist/renderer/differ.d.ts.map +0 -1
  318. package/dist/renderer/differ.js.map +0 -1
  319. package/dist/renderer/e2e.test.d.ts +0 -6
  320. package/dist/renderer/e2e.test.d.ts.map +0 -1
  321. package/dist/renderer/e2e.test.js +0 -702
  322. package/dist/renderer/e2e.test.js.map +0 -1
  323. package/dist/renderer/image.d.ts.map +0 -1
  324. package/dist/renderer/image.js.map +0 -1
  325. package/dist/renderer/image.test.d.ts +0 -5
  326. package/dist/renderer/image.test.d.ts.map +0 -1
  327. package/dist/renderer/image.test.js +0 -66
  328. package/dist/renderer/image.test.js.map +0 -1
  329. package/dist/renderer/index.d.ts.map +0 -1
  330. package/dist/renderer/index.js.map +0 -1
  331. package/dist/renderer/input.d.ts.map +0 -1
  332. package/dist/renderer/input.js.map +0 -1
  333. package/dist/renderer/input.test.d.ts +0 -5
  334. package/dist/renderer/input.test.d.ts.map +0 -1
  335. package/dist/renderer/input.test.js +0 -129
  336. package/dist/renderer/input.test.js.map +0 -1
  337. package/dist/renderer/layout.d.ts.map +0 -1
  338. package/dist/renderer/layout.js.map +0 -1
  339. package/dist/renderer/markdown.d.ts.map +0 -1
  340. package/dist/renderer/markdown.js.map +0 -1
  341. package/dist/renderer/markdown.test.d.ts +0 -2
  342. package/dist/renderer/markdown.test.d.ts.map +0 -1
  343. package/dist/renderer/markdown.test.js +0 -81
  344. package/dist/renderer/markdown.test.js.map +0 -1
  345. package/dist/renderer/perf.test.d.ts +0 -2
  346. package/dist/renderer/perf.test.d.ts.map +0 -1
  347. package/dist/renderer/perf.test.js +0 -128
  348. package/dist/renderer/perf.test.js.map +0 -1
  349. package/dist/renderer/session-browser.d.ts.map +0 -1
  350. package/dist/renderer/session-browser.js.map +0 -1
  351. package/dist/renderer/session-browser.test.d.ts +0 -6
  352. package/dist/renderer/session-browser.test.d.ts.map +0 -1
  353. package/dist/renderer/session-browser.test.js +0 -95
  354. package/dist/renderer/session-browser.test.js.map +0 -1
  355. package/dist/renderer/ui-ux.test.d.ts +0 -15
  356. package/dist/renderer/ui-ux.test.d.ts.map +0 -1
  357. package/dist/renderer/ui-ux.test.js +0 -470
  358. package/dist/renderer/ui-ux.test.js.map +0 -1
  359. package/dist/repl.d.ts.map +0 -1
  360. package/dist/repl.js.map +0 -1
  361. package/dist/services/AgentDispatcher.d.ts.map +0 -1
  362. package/dist/services/AgentDispatcher.js.map +0 -1
  363. package/dist/services/AgentDispatcher.test.d.ts +0 -2
  364. package/dist/services/AgentDispatcher.test.d.ts.map +0 -1
  365. package/dist/services/AgentDispatcher.test.js +0 -66
  366. package/dist/services/AgentDispatcher.test.js.map +0 -1
  367. package/dist/services/CronExecutor.d.ts.map +0 -1
  368. package/dist/services/CronExecutor.js.map +0 -1
  369. package/dist/services/CronExecutor.test.d.ts +0 -2
  370. package/dist/services/CronExecutor.test.d.ts.map +0 -1
  371. package/dist/services/CronExecutor.test.js +0 -128
  372. package/dist/services/CronExecutor.test.js.map +0 -1
  373. package/dist/services/StreamingToolExecutor.d.ts.map +0 -1
  374. package/dist/services/StreamingToolExecutor.js.map +0 -1
  375. package/dist/services/StreamingToolExecutor.test.d.ts +0 -2
  376. package/dist/services/StreamingToolExecutor.test.d.ts.map +0 -1
  377. package/dist/services/StreamingToolExecutor.test.js +0 -103
  378. package/dist/services/StreamingToolExecutor.test.js.map +0 -1
  379. package/dist/services/agent-messaging.d.ts.map +0 -1
  380. package/dist/services/agent-messaging.js.map +0 -1
  381. package/dist/services/agent-messaging.test.d.ts +0 -2
  382. package/dist/services/agent-messaging.test.d.ts.map +0 -1
  383. package/dist/services/agent-messaging.test.js +0 -88
  384. package/dist/services/agent-messaging.test.js.map +0 -1
  385. package/dist/services/cron.d.ts.map +0 -1
  386. package/dist/services/cron.js.map +0 -1
  387. package/dist/services/cron.test.d.ts +0 -2
  388. package/dist/services/cron.test.d.ts.map +0 -1
  389. package/dist/services/cron.test.js +0 -49
  390. package/dist/services/cron.test.js.map +0 -1
  391. package/dist/test-helpers.d.ts +0 -31
  392. package/dist/test-helpers.d.ts.map +0 -1
  393. package/dist/test-helpers.js +0 -106
  394. package/dist/test-helpers.js.map +0 -1
  395. package/dist/tools/AgentTool/index.d.ts.map +0 -1
  396. package/dist/tools/AgentTool/index.js.map +0 -1
  397. package/dist/tools/AskUserTool/index.d.ts.map +0 -1
  398. package/dist/tools/AskUserTool/index.js.map +0 -1
  399. package/dist/tools/BashTool/index.d.ts.map +0 -1
  400. package/dist/tools/BashTool/index.js.map +0 -1
  401. package/dist/tools/CronTool/index.d.ts.map +0 -1
  402. package/dist/tools/CronTool/index.js.map +0 -1
  403. package/dist/tools/DiagnosticsTool/index.d.ts.map +0 -1
  404. package/dist/tools/DiagnosticsTool/index.js.map +0 -1
  405. package/dist/tools/EnterPlanModeTool/index.d.ts.map +0 -1
  406. package/dist/tools/EnterPlanModeTool/index.js.map +0 -1
  407. package/dist/tools/EnterWorktreeTool/index.d.ts.map +0 -1
  408. package/dist/tools/EnterWorktreeTool/index.js.map +0 -1
  409. package/dist/tools/ExitPlanModeTool/index.d.ts.map +0 -1
  410. package/dist/tools/ExitPlanModeTool/index.js.map +0 -1
  411. package/dist/tools/ExitWorktreeTool/index.d.ts.map +0 -1
  412. package/dist/tools/ExitWorktreeTool/index.js.map +0 -1
  413. package/dist/tools/FileEditTool/index.d.ts.map +0 -1
  414. package/dist/tools/FileEditTool/index.js.map +0 -1
  415. package/dist/tools/FileReadTool/index.d.ts.map +0 -1
  416. package/dist/tools/FileReadTool/index.js.map +0 -1
  417. package/dist/tools/FileWriteTool/index.d.ts.map +0 -1
  418. package/dist/tools/FileWriteTool/index.js.map +0 -1
  419. package/dist/tools/GlobTool/index.d.ts.map +0 -1
  420. package/dist/tools/GlobTool/index.js.map +0 -1
  421. package/dist/tools/GrepTool/index.d.ts.map +0 -1
  422. package/dist/tools/GrepTool/index.js.map +0 -1
  423. package/dist/tools/ImageReadTool/index.d.ts.map +0 -1
  424. package/dist/tools/ImageReadTool/index.js.map +0 -1
  425. package/dist/tools/KillProcessTool/index.d.ts.map +0 -1
  426. package/dist/tools/KillProcessTool/index.js.map +0 -1
  427. package/dist/tools/LSTool/index.d.ts.map +0 -1
  428. package/dist/tools/LSTool/index.js.map +0 -1
  429. package/dist/tools/MemoryTool/index.d.ts.map +0 -1
  430. package/dist/tools/MemoryTool/index.js.map +0 -1
  431. package/dist/tools/MultiEditTool/index.d.ts.map +0 -1
  432. package/dist/tools/MultiEditTool/index.js.map +0 -1
  433. package/dist/tools/NotebookEditTool/index.d.ts.map +0 -1
  434. package/dist/tools/NotebookEditTool/index.js.map +0 -1
  435. package/dist/tools/ParallelAgentTool/index.d.ts.map +0 -1
  436. package/dist/tools/ParallelAgentTool/index.js.map +0 -1
  437. package/dist/tools/RemoteTriggerTool/index.d.ts.map +0 -1
  438. package/dist/tools/RemoteTriggerTool/index.js.map +0 -1
  439. package/dist/tools/SendMessageTool/index.d.ts.map +0 -1
  440. package/dist/tools/SendMessageTool/index.js.map +0 -1
  441. package/dist/tools/SkillTool/index.d.ts.map +0 -1
  442. package/dist/tools/SkillTool/index.js.map +0 -1
  443. package/dist/tools/TaskCreateTool/index.d.ts.map +0 -1
  444. package/dist/tools/TaskCreateTool/index.js.map +0 -1
  445. package/dist/tools/TaskGetTool/index.d.ts.map +0 -1
  446. package/dist/tools/TaskGetTool/index.js.map +0 -1
  447. package/dist/tools/TaskListTool/index.d.ts.map +0 -1
  448. package/dist/tools/TaskListTool/index.js.map +0 -1
  449. package/dist/tools/TaskOutputTool/index.d.ts.map +0 -1
  450. package/dist/tools/TaskOutputTool/index.js.map +0 -1
  451. package/dist/tools/TaskStopTool/index.d.ts.map +0 -1
  452. package/dist/tools/TaskStopTool/index.js.map +0 -1
  453. package/dist/tools/TaskUpdateTool/index.d.ts.map +0 -1
  454. package/dist/tools/TaskUpdateTool/index.js.map +0 -1
  455. package/dist/tools/ToolSearchTool/index.d.ts.map +0 -1
  456. package/dist/tools/ToolSearchTool/index.js.map +0 -1
  457. package/dist/tools/WebFetchTool/index.d.ts.map +0 -1
  458. package/dist/tools/WebFetchTool/index.js.map +0 -1
  459. package/dist/tools/WebSearchTool/index.d.ts.map +0 -1
  460. package/dist/tools/WebSearchTool/index.js.map +0 -1
  461. package/dist/tools/file-edit.test.d.ts +0 -2
  462. package/dist/tools/file-edit.test.d.ts.map +0 -1
  463. package/dist/tools/file-edit.test.js +0 -35
  464. package/dist/tools/file-edit.test.js.map +0 -1
  465. package/dist/tools/tools-basic.test.d.ts +0 -6
  466. package/dist/tools/tools-basic.test.d.ts.map +0 -1
  467. package/dist/tools/tools-basic.test.js +0 -379
  468. package/dist/tools/tools-basic.test.js.map +0 -1
  469. package/dist/tools/web-fetch.test.d.ts +0 -2
  470. package/dist/tools/web-fetch.test.d.ts.map +0 -1
  471. package/dist/tools/web-fetch.test.js +0 -27
  472. package/dist/tools/web-fetch.test.js.map +0 -1
  473. package/dist/tools.d.ts.map +0 -1
  474. package/dist/tools.js.map +0 -1
  475. package/dist/types/events.d.ts.map +0 -1
  476. package/dist/types/events.js.map +0 -1
  477. package/dist/types/message.d.ts.map +0 -1
  478. package/dist/types/message.js.map +0 -1
  479. package/dist/types/message.test.d.ts +0 -2
  480. package/dist/types/message.test.d.ts.map +0 -1
  481. package/dist/types/message.test.js +0 -46
  482. package/dist/types/message.test.js.map +0 -1
  483. package/dist/types/permissions.d.ts.map +0 -1
  484. package/dist/types/permissions.js.map +0 -1
  485. package/dist/types/permissions.test.d.ts +0 -2
  486. package/dist/types/permissions.test.d.ts.map +0 -1
  487. package/dist/types/permissions.test.js +0 -127
  488. package/dist/types/permissions.test.js.map +0 -1
  489. package/dist/utils/bash-safety.d.ts.map +0 -1
  490. package/dist/utils/bash-safety.js.map +0 -1
  491. package/dist/utils/bash-safety.test.d.ts +0 -2
  492. package/dist/utils/bash-safety.test.d.ts.map +0 -1
  493. package/dist/utils/bash-safety.test.js +0 -112
  494. package/dist/utils/bash-safety.test.js.map +0 -1
  495. package/dist/utils/diff-algorithm.d.ts.map +0 -1
  496. package/dist/utils/diff-algorithm.js.map +0 -1
  497. package/dist/utils/diff-algorithm.test.d.ts +0 -2
  498. package/dist/utils/diff-algorithm.test.d.ts.map +0 -1
  499. package/dist/utils/diff-algorithm.test.js +0 -49
  500. package/dist/utils/diff-algorithm.test.js.map +0 -1
  501. package/dist/utils/format.d.ts.map +0 -1
  502. package/dist/utils/format.js.map +0 -1
  503. package/dist/utils/fs.d.ts.map +0 -1
  504. package/dist/utils/fs.js.map +0 -1
  505. package/dist/utils/fs.test.d.ts +0 -5
  506. package/dist/utils/fs.test.d.ts.map +0 -1
  507. package/dist/utils/fs.test.js +0 -82
  508. package/dist/utils/fs.test.js.map +0 -1
  509. package/dist/utils/safe-env.d.ts.map +0 -1
  510. package/dist/utils/safe-env.js.map +0 -1
  511. package/dist/utils/theme-data.d.ts.map +0 -1
  512. package/dist/utils/theme-data.js.map +0 -1
  513. package/dist/utils/theme.d.ts.map +0 -1
  514. package/dist/utils/theme.js.map +0 -1
  515. package/dist/utils/tool-summary.d.ts.map +0 -1
  516. package/dist/utils/tool-summary.js.map +0 -1
  517. package/dist/utils/tool-summary.test.d.ts +0 -2
  518. package/dist/utils/tool-summary.test.d.ts.map +0 -1
  519. package/dist/utils/tool-summary.test.js +0 -93
  520. package/dist/utils/tool-summary.test.js.map +0 -1
package/README.md CHANGED
@@ -366,6 +366,16 @@ mcpServers:
366
366
 
367
367
  MCP tools appear alongside built-in tools. `/status` shows connected servers.
368
368
 
369
+ **MCP Server Registry** — browse and install from a curated catalog:
370
+
371
+ ```
372
+ /mcp-registry # browse all available servers
373
+ /mcp-registry github # show install config for a specific server
374
+ /mcp-registry database # search by category
375
+ ```
376
+
377
+ Categories: filesystem, git, database, api, search, productivity, dev-tools, ai.
378
+
369
379
  ## Git Integration
370
380
 
371
381
  OpenHarness auto-commits AI edits in git repos:
@@ -460,6 +470,9 @@ Dispatch specialized sub-agents for focused tasks:
460
470
  | `refactorer` | Simplify code without changing behavior | All file tools + Bash |
461
471
  | `security-auditor` | OWASP, injection, secrets, CVE scanning | Read-only + Bash |
462
472
  | `evaluator` | Evaluate code quality and run tests (read-only) | Read-only + Bash + Diagnostics |
473
+ | `planner` | Design step-by-step implementation plans | Read-only + Bash |
474
+ | `architect` | Analyze architecture and design structural changes | Read-only |
475
+ | `migrator` | Systematic codebase migrations and upgrades | All file tools + Bash |
463
476
 
464
477
  Each role restricts the sub-agent to only its suggested tools. You can also pass `allowed_tools` explicitly:
465
478
 
@@ -114,6 +114,48 @@ Report findings with severity (Critical/High/Medium/Low), affected file:line, an
114
114
  You CANNOT modify files. Only read, search, and run test/lint commands to evaluate.`,
115
115
  suggestedTools: ['Read', 'Glob', 'Grep', 'LS', 'Bash', 'Diagnostics'],
116
116
  },
117
+ {
118
+ id: 'planner',
119
+ name: 'Planner',
120
+ description: 'Designs step-by-step implementation plans from requirements',
121
+ systemPromptSupplement: `You are a planning agent. Your job is to:
122
+ - Read the codebase to understand architecture, patterns, and conventions
123
+ - Design a detailed step-by-step implementation plan for the given task
124
+ - Identify files to create, modify, or delete with specific change descriptions
125
+ - Flag risks, dependencies, and the recommended implementation order
126
+ - Estimate scope (number of files, complexity)
127
+
128
+ Do NOT implement anything. Your output is a plan document, not code. Read widely before planning.`,
129
+ suggestedTools: ['Read', 'Glob', 'Grep', 'LS', 'Bash'],
130
+ },
131
+ {
132
+ id: 'architect',
133
+ name: 'Architect',
134
+ description: 'Analyzes system architecture and designs structural changes',
135
+ systemPromptSupplement: `You are an architecture agent. Your job is to:
136
+ - Map the current system architecture (modules, dependencies, data flow)
137
+ - Identify architectural patterns and conventions in use
138
+ - Design structural changes that preserve existing patterns
139
+ - Evaluate trade-offs between approaches (performance, maintainability, complexity)
140
+ - Document interfaces, contracts, and integration points
141
+
142
+ Focus on the big picture: module boundaries, data flow, dependency graphs. Leave implementation details to other agents.`,
143
+ suggestedTools: ['Read', 'Glob', 'Grep', 'LS'],
144
+ },
145
+ {
146
+ id: 'migrator',
147
+ name: 'Migrator',
148
+ description: 'Performs codebase migrations (API upgrades, framework changes, renames)',
149
+ systemPromptSupplement: `You are a migration agent. Your job is to:
150
+ - Identify all occurrences of the pattern/API/convention being migrated
151
+ - Apply changes systematically across all affected files
152
+ - Preserve behavior while updating the implementation
153
+ - Run tests after each batch of changes to catch regressions
154
+ - Handle edge cases and conditional patterns that need manual review
155
+
156
+ Work methodically: search exhaustively, change incrementally, test after each batch. Never leave a migration half-done.`,
157
+ suggestedTools: ['Read', 'Write', 'Edit', 'Glob', 'Grep', 'Bash'],
158
+ },
117
159
  ];
118
160
  /** Get a role by ID */
119
161
  export function getRole(id) {
@@ -27,7 +27,7 @@ register("help", "Show available commands", () => {
27
27
  const categories = {
28
28
  'Session': ['clear', 'compact', 'export', 'history', 'browse', 'resume', 'fork', 'pin', 'unpin'],
29
29
  'Git': ['diff', 'undo', 'rewind', 'commit', 'log'],
30
- 'Info': ['help', 'cost', 'status', 'config', 'files', 'model', 'memory', 'doctor', 'context', 'mcp'],
30
+ 'Info': ['help', 'cost', 'status', 'config', 'files', 'model', 'memory', 'doctor', 'context', 'mcp', 'mcp-registry'],
31
31
  'Settings': ['theme', 'vim', 'companion', 'fast', 'keys'],
32
32
  'AI': ['plan', 'review', 'roles'],
33
33
  'Pet': ['cybergotchi'],
@@ -519,14 +519,43 @@ register("context", "Show context window usage breakdown", (_args, ctx) => {
519
519
  register("mcp", "Show MCP server status", () => {
520
520
  const mcp = connectedMcpServers();
521
521
  if (mcp.length === 0) {
522
- return { output: "No MCP servers connected.\nConfigure in .oh/config.yaml under mcpServers.", handled: true };
522
+ return { output: "No MCP servers connected.\nConfigure in .oh/config.yaml under mcpServers.\nRun /mcp-registry to browse available servers.", handled: true };
523
523
  }
524
524
  const lines = [`MCP Servers (${mcp.length} connected):\n`];
525
525
  for (const name of mcp) {
526
526
  lines.push(` ✓ ${name}`);
527
527
  }
528
+ lines.push("\nRun /mcp-registry to browse and add more servers.");
528
529
  return { output: lines.join("\n"), handled: true };
529
530
  });
531
+ register("mcp-registry", "Browse and add MCP servers from the curated registry", (args) => {
532
+ const { searchRegistry, formatRegistry, generateConfigBlock, MCP_REGISTRY } = require('../mcp/registry.js');
533
+ const query = args.trim();
534
+ if (!query) {
535
+ // Show full registry
536
+ const output = `MCP Server Registry (${MCP_REGISTRY.length} servers)\n${'─'.repeat(50)}\n\n${formatRegistry()}\n\nUsage:\n /mcp-registry <name> Show install config for a server\n /mcp-registry <keyword> Search by name, description, or category`;
537
+ return { output, handled: true };
538
+ }
539
+ // Search or show specific server
540
+ const results = searchRegistry(query);
541
+ if (results.length === 0) {
542
+ return { output: `No MCP servers found matching "${query}".`, handled: true };
543
+ }
544
+ if (results.length === 1) {
545
+ // Show install instructions
546
+ const entry = results[0];
547
+ const config = generateConfigBlock(entry);
548
+ const envNote = entry.envVars?.length
549
+ ? `\n\nRequired environment variables:\n${entry.envVars.map((v) => ` - ${v}`).join('\n')}`
550
+ : '';
551
+ return {
552
+ output: `${entry.name} — ${entry.description}\nPackage: ${entry.package}\nRisk: ${entry.riskLevel ?? 'medium'}${envNote}\n\nAdd to .oh/config.yaml under mcpServers:\n\n${config}`,
553
+ handled: true,
554
+ };
555
+ }
556
+ // Multiple results
557
+ return { output: `Found ${results.length} servers:\n\n${formatRegistry(results)}`, handled: true };
558
+ });
530
559
  function setPinned(args, ctx, pinned) {
531
560
  const idx = parseInt(args.trim(), 10);
532
561
  if (isNaN(idx) || idx < 1 || idx > ctx.messages.length) {
@@ -13,6 +13,14 @@ export type Session = {
13
13
  gitBranch?: string;
14
14
  workingDir?: string;
15
15
  tools?: string[];
16
+ /** Hibernate state — saved on exit for wake reconstruction */
17
+ hibernate?: {
18
+ summary?: string;
19
+ lastUserMessage?: string;
20
+ pendingTask?: string;
21
+ totalInputTokens?: number;
22
+ totalOutputTokens?: number;
23
+ };
16
24
  };
17
25
  export declare function createSession(provider: string, model: string, extras?: {
18
26
  gitBranch?: string;
@@ -30,6 +38,17 @@ export declare function listSessions(dir?: string): Array<{
30
38
  }>;
31
39
  /** Returns the ID of the most recently updated session, or null if none exist. */
32
40
  export declare function getLastSessionId(dir?: string): string | null;
41
+ /**
42
+ * Build hibernate state from the current session.
43
+ * Captures the last user message, recent assistant activity,
44
+ * and a brief summary for context reconstruction on wake.
45
+ */
46
+ export declare function buildHibernateState(messages: Message[]): Session['hibernate'];
47
+ /**
48
+ * Generate a wake-up context message for a resumed session.
49
+ * Tells the LLM what happened in the previous session.
50
+ */
51
+ export declare function buildWakeContext(session: Session): string;
33
52
  /**
34
53
  * Evict oldest sessions when count exceeds MAX_SESSIONS.
35
54
  * Called automatically by saveSession.
@@ -72,6 +72,59 @@ export function getLastSessionId(dir) {
72
72
  const sessions = listSessions(dir);
73
73
  return sessions.length > 0 ? sessions[0].id : null;
74
74
  }
75
+ /**
76
+ * Build hibernate state from the current session.
77
+ * Captures the last user message, recent assistant activity,
78
+ * and a brief summary for context reconstruction on wake.
79
+ */
80
+ export function buildHibernateState(messages) {
81
+ if (messages.length === 0)
82
+ return undefined;
83
+ // Find last user message
84
+ const lastUser = [...messages].reverse().find(m => m.role === 'user');
85
+ const lastAssistant = [...messages].reverse().find(m => m.role === 'assistant');
86
+ // Build a brief summary from the last few exchanges
87
+ const recentMsgs = messages.slice(-6);
88
+ const summaryParts = [];
89
+ for (const m of recentMsgs) {
90
+ if (m.role === 'user') {
91
+ summaryParts.push(`User: ${m.content.slice(0, 100)}`);
92
+ }
93
+ else if (m.role === 'assistant' && m.content) {
94
+ summaryParts.push(`Assistant: ${m.content.slice(0, 100)}`);
95
+ }
96
+ }
97
+ return {
98
+ lastUserMessage: lastUser?.content.slice(0, 200),
99
+ pendingTask: lastAssistant?.content.slice(0, 200),
100
+ summary: summaryParts.join('\n'),
101
+ };
102
+ }
103
+ /**
104
+ * Generate a wake-up context message for a resumed session.
105
+ * Tells the LLM what happened in the previous session.
106
+ */
107
+ export function buildWakeContext(session) {
108
+ const parts = ['[Session Resumed]'];
109
+ if (session.workingDir) {
110
+ parts.push(`Previous working directory: ${session.workingDir}`);
111
+ if (session.workingDir !== process.cwd()) {
112
+ parts.push(`WARNING: Working directory changed! Was: ${session.workingDir}, Now: ${process.cwd()}`);
113
+ }
114
+ }
115
+ if (session.gitBranch) {
116
+ parts.push(`Previous git branch: ${session.gitBranch}`);
117
+ }
118
+ if (session.hibernate?.summary) {
119
+ parts.push(`\nPrevious session context:\n${session.hibernate.summary}`);
120
+ }
121
+ if (session.hibernate?.lastUserMessage) {
122
+ parts.push(`\nLast user request: ${session.hibernate.lastUserMessage}`);
123
+ }
124
+ parts.push(`\nSession has ${session.messages.length} messages and cost $${session.totalCost.toFixed(4)} so far.`);
125
+ parts.push('Continue where you left off. If the user\'s last request was incomplete, acknowledge that and ask how to proceed.');
126
+ return parts.join('\n');
127
+ }
75
128
  /** Maximum number of sessions to keep on disk. */
76
129
  const MAX_SESSIONS = 100;
77
130
  /**
@@ -0,0 +1,31 @@
1
+ /**
2
+ * MCP Server Registry — curated list of compatible MCP servers.
3
+ *
4
+ * Provides a browsable catalog of MCP servers that users can add
5
+ * to their .oh/config.yaml with a single command.
6
+ */
7
+ export type McpRegistryEntry = {
8
+ name: string;
9
+ package: string;
10
+ description: string;
11
+ category: 'filesystem' | 'git' | 'database' | 'api' | 'search' | 'productivity' | 'dev-tools' | 'ai';
12
+ args?: string[];
13
+ envVars?: string[];
14
+ riskLevel?: 'low' | 'medium' | 'high';
15
+ };
16
+ /**
17
+ * Curated registry of popular MCP servers.
18
+ * Each entry has enough info to generate the config.yaml block.
19
+ */
20
+ export declare const MCP_REGISTRY: McpRegistryEntry[];
21
+ /** Search the registry by name or keyword */
22
+ export declare function searchRegistry(query: string): McpRegistryEntry[];
23
+ /** Get all entries in a category */
24
+ export declare function getByCategory(category: McpRegistryEntry['category']): McpRegistryEntry[];
25
+ /** Get all unique categories */
26
+ export declare function getCategories(): string[];
27
+ /** Generate the config.yaml block for a registry entry */
28
+ export declare function generateConfigBlock(entry: McpRegistryEntry): string;
29
+ /** Format registry as a browsable list */
30
+ export declare function formatRegistry(entries?: McpRegistryEntry[]): string;
31
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1,180 @@
1
+ /**
2
+ * MCP Server Registry — curated list of compatible MCP servers.
3
+ *
4
+ * Provides a browsable catalog of MCP servers that users can add
5
+ * to their .oh/config.yaml with a single command.
6
+ */
7
+ /**
8
+ * Curated registry of popular MCP servers.
9
+ * Each entry has enough info to generate the config.yaml block.
10
+ */
11
+ export const MCP_REGISTRY = [
12
+ // ── Filesystem ──
13
+ {
14
+ name: 'filesystem',
15
+ package: '@modelcontextprotocol/server-filesystem',
16
+ description: 'Read, write, and manage files on the local filesystem',
17
+ category: 'filesystem',
18
+ args: ['/tmp'],
19
+ riskLevel: 'medium',
20
+ },
21
+ // ── Git & GitHub ──
22
+ {
23
+ name: 'github',
24
+ package: '@modelcontextprotocol/server-github',
25
+ description: 'GitHub API — issues, PRs, repos, code search',
26
+ category: 'git',
27
+ envVars: ['GITHUB_PERSONAL_ACCESS_TOKEN'],
28
+ riskLevel: 'medium',
29
+ },
30
+ {
31
+ name: 'gitlab',
32
+ package: '@modelcontextprotocol/server-gitlab',
33
+ description: 'GitLab API — issues, merge requests, pipelines',
34
+ category: 'git',
35
+ envVars: ['GITLAB_PERSONAL_ACCESS_TOKEN', 'GITLAB_API_URL'],
36
+ riskLevel: 'medium',
37
+ },
38
+ // ── Database ──
39
+ {
40
+ name: 'sqlite',
41
+ package: '@modelcontextprotocol/server-sqlite',
42
+ description: 'Query and modify SQLite databases',
43
+ category: 'database',
44
+ args: ['./database.sqlite'],
45
+ riskLevel: 'medium',
46
+ },
47
+ {
48
+ name: 'postgres',
49
+ package: '@modelcontextprotocol/server-postgres',
50
+ description: 'Query PostgreSQL databases (read-only by default)',
51
+ category: 'database',
52
+ envVars: ['POSTGRES_CONNECTION_STRING'],
53
+ riskLevel: 'medium',
54
+ },
55
+ // ── Search & Web ──
56
+ {
57
+ name: 'brave-search',
58
+ package: '@modelcontextprotocol/server-brave-search',
59
+ description: 'Web search via Brave Search API',
60
+ category: 'search',
61
+ envVars: ['BRAVE_API_KEY'],
62
+ riskLevel: 'low',
63
+ },
64
+ {
65
+ name: 'fetch',
66
+ package: '@modelcontextprotocol/server-fetch',
67
+ description: 'Fetch and parse web pages, convert HTML to markdown',
68
+ category: 'search',
69
+ riskLevel: 'low',
70
+ },
71
+ // ── Productivity ──
72
+ {
73
+ name: 'slack',
74
+ package: '@modelcontextprotocol/server-slack',
75
+ description: 'Read and send Slack messages, list channels',
76
+ category: 'productivity',
77
+ envVars: ['SLACK_BOT_TOKEN'],
78
+ riskLevel: 'high',
79
+ },
80
+ {
81
+ name: 'google-drive',
82
+ package: '@anthropic/mcp-server-google-drive',
83
+ description: 'Search and read Google Drive documents',
84
+ category: 'productivity',
85
+ envVars: ['GOOGLE_DRIVE_CREDENTIALS'],
86
+ riskLevel: 'medium',
87
+ },
88
+ {
89
+ name: 'linear',
90
+ package: '@anthropic/mcp-server-linear',
91
+ description: 'Linear issue tracker — create, update, search issues',
92
+ category: 'productivity',
93
+ envVars: ['LINEAR_API_KEY'],
94
+ riskLevel: 'medium',
95
+ },
96
+ // ── Dev Tools ──
97
+ {
98
+ name: 'docker',
99
+ package: '@modelcontextprotocol/server-docker',
100
+ description: 'Manage Docker containers, images, and volumes',
101
+ category: 'dev-tools',
102
+ riskLevel: 'high',
103
+ },
104
+ {
105
+ name: 'puppeteer',
106
+ package: '@modelcontextprotocol/server-puppeteer',
107
+ description: 'Browser automation — navigate, screenshot, interact with web pages',
108
+ category: 'dev-tools',
109
+ riskLevel: 'medium',
110
+ },
111
+ {
112
+ name: 'memory',
113
+ package: '@modelcontextprotocol/server-memory',
114
+ description: 'Persistent knowledge graph for long-term memory',
115
+ category: 'ai',
116
+ riskLevel: 'low',
117
+ },
118
+ {
119
+ name: 'sequential-thinking',
120
+ package: '@modelcontextprotocol/server-sequential-thinking',
121
+ description: 'Step-by-step reasoning and chain-of-thought tools',
122
+ category: 'ai',
123
+ riskLevel: 'low',
124
+ },
125
+ {
126
+ name: 'context7',
127
+ package: '@anthropic/mcp-server-context7',
128
+ description: 'Fetch up-to-date library documentation for any framework',
129
+ category: 'dev-tools',
130
+ riskLevel: 'low',
131
+ },
132
+ ];
133
+ /** Search the registry by name or keyword */
134
+ export function searchRegistry(query) {
135
+ const q = query.toLowerCase();
136
+ return MCP_REGISTRY.filter(e => e.name.includes(q) ||
137
+ e.description.toLowerCase().includes(q) ||
138
+ e.category.includes(q) ||
139
+ e.package.toLowerCase().includes(q));
140
+ }
141
+ /** Get all entries in a category */
142
+ export function getByCategory(category) {
143
+ return MCP_REGISTRY.filter(e => e.category === category);
144
+ }
145
+ /** Get all unique categories */
146
+ export function getCategories() {
147
+ return [...new Set(MCP_REGISTRY.map(e => e.category))];
148
+ }
149
+ /** Generate the config.yaml block for a registry entry */
150
+ export function generateConfigBlock(entry) {
151
+ const lines = [
152
+ ` - name: ${entry.name}`,
153
+ ` command: npx`,
154
+ ` args: ["-y", "${entry.package}"${entry.args ? ', ' + entry.args.map(a => `"${a}"`).join(', ') : ''}]`,
155
+ ];
156
+ if (entry.envVars && entry.envVars.length > 0) {
157
+ lines.push(' env:');
158
+ for (const v of entry.envVars) {
159
+ lines.push(` ${v}: "YOUR_${v}"`);
160
+ }
161
+ }
162
+ if (entry.riskLevel && entry.riskLevel !== 'medium') {
163
+ lines.push(` riskLevel: ${entry.riskLevel}`);
164
+ }
165
+ return lines.join('\n');
166
+ }
167
+ /** Format registry as a browsable list */
168
+ export function formatRegistry(entries) {
169
+ const list = entries ?? MCP_REGISTRY;
170
+ const categories = [...new Set(list.map(e => e.category))];
171
+ const sections = [];
172
+ for (const cat of categories) {
173
+ const catEntries = list.filter(e => e.category === cat);
174
+ const header = cat.charAt(0).toUpperCase() + cat.slice(1).replace('-', ' ');
175
+ const rows = catEntries.map(e => ` ${e.name.padEnd(20)} ${e.description}${e.envVars ? ' [requires: ' + e.envVars.join(', ') + ']' : ''}`);
176
+ sections.push(`${header}:\n${rows.join('\n')}`);
177
+ }
178
+ return sections.join('\n\n');
179
+ }
180
+ //# sourceMappingURL=registry.js.map
package/dist/repl.js CHANGED
@@ -48,6 +48,13 @@ export async function startREPL(config) {
48
48
  catch {
49
49
  session = createSession(config.provider.name, config.model ?? '', sessionExtras);
50
50
  }
51
+ // Wake context: inject session summary when resuming
52
+ if (config.resumeSessionId && session.hibernate) {
53
+ const { buildWakeContext } = await import('./harness/session.js');
54
+ const wakeMsg = buildWakeContext(session);
55
+ const { createInfoMessage } = await import('./types/message.js');
56
+ session.messages.push(createInfoMessage(wakeMsg));
57
+ }
51
58
  // Initialize checkpoints for file rewind
52
59
  const { initCheckpoints } = await import('./harness/checkpoints.js');
53
60
  initCheckpoints(session.id);
@@ -602,6 +609,12 @@ export async function startREPL(config) {
602
609
  renderer.setError(null);
603
610
  // Exit
604
611
  if (input === 'exit' || input === 'quit' || input === '/exit' || input === '/quit' || input === '/q') {
612
+ // Hibernate: save session state for potential wake-up resume
613
+ try {
614
+ const { buildHibernateState } = await import('./harness/session.js');
615
+ session.hibernate = buildHibernateState(messages);
616
+ }
617
+ catch { /* ignore */ }
605
618
  // Dream consolidation: prune stale memories before exit
606
619
  try {
607
620
  const { consolidateMemories } = await import('./harness/memory.js');
@@ -199,7 +199,7 @@ export const AgentTool = {
199
199
  - isolated (boolean, optional): Whether to use git worktree isolation (default: true if in a git repo).
200
200
  - run_in_background (boolean, optional): Run the agent in the background. Returns immediately; you will be notified when it completes.
201
201
  - model (string, optional): Override the model for this sub-agent (e.g., use a faster model for exploration).
202
- - subagent_type (string, optional): Specialize the agent behavior. Types: "Explore" (read-only codebase search), "Plan" (design implementation plans), "code-reviewer" (review code), "test-writer", "debugger", "refactorer", "security-auditor", "evaluator" (read-only evaluation with test running).
202
+ - subagent_type (string, optional): Specialize the agent behavior. Types: "Explore" (read-only codebase search), "Plan" (design implementation plans), "code-reviewer", "test-writer", "debugger", "refactorer", "security-auditor", "evaluator" (read-only evaluation), "planner" (implementation plans), "architect" (system design), "migrator" (codebase migrations).
203
203
  - allowed_tools (string[], optional): Restrict the sub-agent to only these tools by name. If omitted and a role has suggested tools, those are used.`;
204
204
  },
205
205
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zhijiewang/openharness",
3
- "version": "0.12.0",
3
+ "version": "0.12.1",
4
4
  "description": "Open-source terminal coding agent. Works with any LLM.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -9,7 +9,10 @@
9
9
  },
10
10
  "main": "./dist/main.js",
11
11
  "files": [
12
- "dist",
12
+ "dist/**/*.js",
13
+ "dist/**/*.d.ts",
14
+ "!dist/**/*.test.*",
15
+ "!dist/**/test-helpers.*",
13
16
  "README.md",
14
17
  "LICENSE"
15
18
  ],
@@ -1 +0,0 @@
1
- {"version":3,"file":"DeferredTool.d.ts","sourceRoot":"","sources":["../src/DeferredTool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAExD,qBAAa,YAAa,YAAW,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;IAClD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAE9B,OAAO,CAAC,KAAK,CAAO;IACpB,OAAO,CAAC,UAAU,CAAS;gBAEf,IAAI,EAAE,IAAI;IAStB,gEAAgE;IAChE,IAAI,SAAS,IAAI,OAAO,CAA4B;IAEpD,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAInC,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAIpC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAajE,+DAA+D;IAC/D,MAAM,IAAI,MAAM;IAKhB,0DAA0D;IAC1D,QAAQ,IAAI,IAAI;IAIhB,4EAA4E;IAC5E,QAAQ,IAAI,IAAI;CAGjB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"DeferredTool.js","sourceRoot":"","sources":["../src/DeferredTool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,MAAM,OAAO,YAAY;IACd,IAAI,CAAS;IACb,WAAW,CAAS;IACpB,WAAW,CAAY;IACvB,SAAS,CAAY;IAEtB,KAAK,CAAO;IACZ,UAAU,GAAG,KAAK,CAAC;IAE3B,YAAY,IAAU;QACpB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACpC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,yDAAyD;QACzD,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,gEAAgE;IAChE,IAAI,SAAS,KAAc,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IAEpD,UAAU,CAAC,KAAc;QACvB,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;IAED,iBAAiB,CAAC,KAAc;QAC9B,OAAO,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAU,EAAE,OAAoB;QACzC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,gCAAgC;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACvD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO;gBACL,MAAM,EAAE,4BAA4B,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE;gBAC1D,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED,+DAA+D;IAC/D,MAAM;QACJ,IAAI,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QAChD,OAAO,cAAc,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC;IACxD,CAAC;IAED,0DAA0D;IAC1D,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,4EAA4E;IAC5E,QAAQ;QACN,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;IACzB,CAAC;CACF"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=DeferredTool.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DeferredTool.test.d.ts","sourceRoot":"","sources":["../src/DeferredTool.test.ts"],"names":[],"mappings":""}
@@ -1,79 +0,0 @@
1
- import { describe, it } from 'node:test';
2
- import assert from 'node:assert/strict';
3
- import { createMockTool } from './test-helpers.js';
4
- import { DeferredTool } from './DeferredTool.js';
5
- describe('DeferredTool', () => {
6
- it('wraps a tool with correct name and description', () => {
7
- const inner = createMockTool('TestTool');
8
- const deferred = new DeferredTool(inner);
9
- assert.equal(deferred.name, 'TestTool');
10
- assert.equal(deferred.description, inner.description);
11
- assert.equal(deferred.riskLevel, inner.riskLevel);
12
- });
13
- it('returns deferred prompt before activation', () => {
14
- const inner = createMockTool('TestTool');
15
- const deferred = new DeferredTool(inner);
16
- const prompt = deferred.prompt();
17
- assert.ok(prompt.startsWith('[deferred]'));
18
- assert.ok(prompt.includes('TestTool'));
19
- });
20
- it('returns full prompt after activation', () => {
21
- const inner = createMockTool('TestTool');
22
- const deferred = new DeferredTool(inner);
23
- deferred.activate();
24
- assert.equal(deferred.prompt(), inner.prompt());
25
- });
26
- it('is not activated by default', () => {
27
- const inner = createMockTool('TestTool');
28
- const deferred = new DeferredTool(inner);
29
- assert.equal(deferred.activated, false);
30
- });
31
- it('activates on call()', async () => {
32
- const inner = createMockTool('TestTool');
33
- const deferred = new DeferredTool(inner);
34
- assert.equal(deferred.activated, false);
35
- const result = await deferred.call({ input: 'test' }, { workingDir: '/tmp' });
36
- assert.equal(deferred.activated, true);
37
- assert.equal(result.isError, false);
38
- assert.ok(result.output.includes('TestTool'));
39
- });
40
- it('activates via activate() method', () => {
41
- const inner = createMockTool('TestTool');
42
- const deferred = new DeferredTool(inner);
43
- deferred.activate();
44
- assert.equal(deferred.activated, true);
45
- });
46
- it('returns full prompt after call()', async () => {
47
- const inner = createMockTool('TestTool');
48
- const deferred = new DeferredTool(inner);
49
- await deferred.call({ input: 'test' }, { workingDir: '/tmp' });
50
- assert.equal(deferred.prompt(), inner.prompt());
51
- });
52
- it('validates input against inner schema and returns error', async () => {
53
- const inner = createMockTool('TestTool');
54
- const deferred = new DeferredTool(inner);
55
- // Inner schema expects { input?: string }, pass something wildly wrong
56
- // Since z.object({ input: z.string().optional() }) is permissive,
57
- // we pass a valid object and check it works
58
- const result = await deferred.call({ input: 'valid' }, { workingDir: '/tmp' });
59
- assert.equal(result.isError, false);
60
- });
61
- it('exposes inner tool via getInner()', () => {
62
- const inner = createMockTool('TestTool');
63
- const deferred = new DeferredTool(inner);
64
- assert.equal(deferred.getInner(), inner);
65
- });
66
- it('delegates isReadOnly to inner tool', () => {
67
- const readOnly = createMockTool('ReadOnly', { readOnly: true });
68
- const writable = createMockTool('Writable', { readOnly: false });
69
- assert.equal(new DeferredTool(readOnly).isReadOnly({}), true);
70
- assert.equal(new DeferredTool(writable).isReadOnly({}), false);
71
- });
72
- it('delegates isConcurrencySafe to inner tool', () => {
73
- const safe = createMockTool('Safe', { concurrent: true });
74
- const unsafe = createMockTool('Unsafe', { concurrent: false });
75
- assert.equal(new DeferredTool(safe).isConcurrencySafe({}), true);
76
- assert.equal(new DeferredTool(unsafe).isConcurrencySafe({}), false);
77
- });
78
- });
79
- //# sourceMappingURL=DeferredTool.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DeferredTool.test.js","sourceRoot":"","sources":["../src/DeferredTool.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Tool.d.ts","sourceRoot":"","sources":["../src/Tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEpD,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxD,gDAAgD;IAChD,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oDAAoD;IACpD,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,iEAAiE;IACjE,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CAC7E,CAAC;AAEF,MAAM,MAAM,IAAI,CAAC,KAAK,SAAS,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,IAAI;IACtD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAE9B,8DAA8D;IAC9D,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC;IAE3C,8DAA8D;IAC9D,iBAAiB,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC;IAElD,wBAAwB;IACxB,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAEvE,mDAAmD;IACnD,MAAM,IAAI,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,KAAK,GAAG,IAAI,EAAE,CAAC;AAE3B;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG;IAC3C,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,OAAO,CAAA;KAAE,CAAC;CACtE,CASA;AA4CD;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAO3E"}
package/dist/Tool.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"Tool.js","sourceRoot":"","sources":["../src/Tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAgDH;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,IAAU;IAIxC,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE;YACR,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE;YAC1B,UAAU,EAAE,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC;SAC9C;KACF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAS,eAAe,CAAC,MAAiB;IACxC,wDAAwD;IACxD,MAAM,GAAG,GAAI,MAAc,CAAC,IAAI,CAAC;IAEjC,IAAI,GAAG,EAAE,QAAQ,KAAK,WAAW,EAAE,CAAC;QAClC,MAAM,KAAK,GAAI,MAA2B,CAAC,KAAK,CAAC;QACjD,MAAM,UAAU,GAA4B,EAAE,CAAC;QAC/C,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACjD,MAAM,KAAK,GAAG,KAAkB,CAAC;YACjC,MAAM,QAAQ,GAAI,KAAa,CAAC,IAAI,CAAC;YAErC,IAAI,QAAQ,EAAE,QAAQ,KAAK,aAAa,EAAE,CAAC;gBACzC,UAAU,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YACxD,CAAC;iBAAM,CAAC;gBACN,UAAU,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;gBACzC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACrB,CAAC;YAED,6BAA6B;YAC7B,IAAK,KAAa,CAAC,WAAW,EAAE,CAAC;gBAC9B,UAAU,CAAC,GAAG,CAAS,CAAC,WAAW,GAAI,KAAa,CAAC,WAAW,CAAC;YACpE,CAAC;QACH,CAAC;QAED,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;IAClD,CAAC;IAED,IAAI,GAAG,EAAE,QAAQ,KAAK,WAAW;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAC7D,IAAI,GAAG,EAAE,QAAQ,KAAK,WAAW;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAC7D,IAAI,GAAG,EAAE,QAAQ,KAAK,YAAY;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAC/D,IAAI,GAAG,EAAE,QAAQ,KAAK,UAAU;QAC9B,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;IAE7D,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,WAAW;AACxC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,KAAY,EAAE,IAAY;IACvD,oBAAoB;IACpB,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACjD,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC;IACxB,4BAA4B;IAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACjC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,CAAC;AAC3D,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=Tool.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Tool.test.d.ts","sourceRoot":"","sources":["../src/Tool.test.ts"],"names":[],"mappings":""}