openhorse 0.1.5

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 (587) hide show
  1. package/README.md +460 -0
  2. package/bin/openhorse +56 -0
  3. package/dist/agents/coder.d.ts +12 -0
  4. package/dist/agents/coder.d.ts.map +1 -0
  5. package/dist/agents/coder.js +48 -0
  6. package/dist/agents/coder.js.map +1 -0
  7. package/dist/agents/leader.d.ts +12 -0
  8. package/dist/agents/leader.d.ts.map +1 -0
  9. package/dist/agents/leader.js +49 -0
  10. package/dist/agents/leader.js.map +1 -0
  11. package/dist/agents/router.d.ts +59 -0
  12. package/dist/agents/router.d.ts.map +1 -0
  13. package/dist/agents/router.js +193 -0
  14. package/dist/agents/router.js.map +1 -0
  15. package/dist/cli-ink.d.ts +7 -0
  16. package/dist/cli-ink.d.ts.map +1 -0
  17. package/dist/cli-ink.js +135 -0
  18. package/dist/cli-ink.js.map +1 -0
  19. package/dist/cli.d.ts +7 -0
  20. package/dist/cli.d.ts.map +1 -0
  21. package/dist/cli.js +638 -0
  22. package/dist/cli.js.map +1 -0
  23. package/dist/commands/index.d.ts +12 -0
  24. package/dist/commands/index.d.ts.map +1 -0
  25. package/dist/commands/index.js +1095 -0
  26. package/dist/commands/index.js.map +1 -0
  27. package/dist/commands/parser.d.ts +26 -0
  28. package/dist/commands/parser.d.ts.map +1 -0
  29. package/dist/commands/parser.js +61 -0
  30. package/dist/commands/parser.js.map +1 -0
  31. package/dist/commands/types.d.ts +61 -0
  32. package/dist/commands/types.d.ts.map +1 -0
  33. package/dist/commands/types.js +32 -0
  34. package/dist/commands/types.js.map +1 -0
  35. package/dist/core/agent.d.ts +66 -0
  36. package/dist/core/agent.d.ts.map +1 -0
  37. package/dist/core/agent.js +55 -0
  38. package/dist/core/agent.js.map +1 -0
  39. package/dist/core/brain.d.ts +41 -0
  40. package/dist/core/brain.d.ts.map +1 -0
  41. package/dist/core/brain.js +92 -0
  42. package/dist/core/brain.js.map +1 -0
  43. package/dist/core/cost-tracker.d.ts +107 -0
  44. package/dist/core/cost-tracker.d.ts.map +1 -0
  45. package/dist/core/cost-tracker.js +199 -0
  46. package/dist/core/cost-tracker.js.map +1 -0
  47. package/dist/core/strategy-tracker.d.ts +61 -0
  48. package/dist/core/strategy-tracker.d.ts.map +1 -0
  49. package/dist/core/strategy-tracker.js +124 -0
  50. package/dist/core/strategy-tracker.js.map +1 -0
  51. package/dist/framework/index.d.ts +20 -0
  52. package/dist/framework/index.d.ts.map +1 -0
  53. package/dist/framework/index.js +29 -0
  54. package/dist/framework/index.js.map +1 -0
  55. package/dist/framework/prompt.d.ts +40 -0
  56. package/dist/framework/prompt.d.ts.map +1 -0
  57. package/dist/framework/prompt.js +112 -0
  58. package/dist/framework/prompt.js.map +1 -0
  59. package/dist/framework/query.d.ts +86 -0
  60. package/dist/framework/query.d.ts.map +1 -0
  61. package/dist/framework/query.js +177 -0
  62. package/dist/framework/query.js.map +1 -0
  63. package/dist/framework/store.d.ts +64 -0
  64. package/dist/framework/store.d.ts.map +1 -0
  65. package/dist/framework/store.js +78 -0
  66. package/dist/framework/store.js.map +1 -0
  67. package/dist/framework/tool-state.d.ts +22 -0
  68. package/dist/framework/tool-state.d.ts.map +1 -0
  69. package/dist/framework/tool-state.js +40 -0
  70. package/dist/framework/tool-state.js.map +1 -0
  71. package/dist/framework/tool.d.ts +88 -0
  72. package/dist/framework/tool.d.ts.map +1 -0
  73. package/dist/framework/tool.js +60 -0
  74. package/dist/framework/tool.js.map +1 -0
  75. package/dist/harness/harness.d.ts +96 -0
  76. package/dist/harness/harness.d.ts.map +1 -0
  77. package/dist/harness/harness.js +224 -0
  78. package/dist/harness/harness.js.map +1 -0
  79. package/dist/harness/safety.d.ts +89 -0
  80. package/dist/harness/safety.d.ts.map +1 -0
  81. package/dist/harness/safety.js +178 -0
  82. package/dist/harness/safety.js.map +1 -0
  83. package/dist/index.d.ts +30 -0
  84. package/dist/index.d.ts.map +1 -0
  85. package/dist/index.js +57 -0
  86. package/dist/index.js.map +1 -0
  87. package/dist/init.d.ts +178 -0
  88. package/dist/init.d.ts.map +1 -0
  89. package/dist/init.js +473 -0
  90. package/dist/init.js.map +1 -0
  91. package/dist/ink/bidi.d.ts +16 -0
  92. package/dist/ink/bidi.d.ts.map +1 -0
  93. package/dist/ink/bidi.js +124 -0
  94. package/dist/ink/bidi.js.map +1 -0
  95. package/dist/ink/clearTerminal.d.ts +14 -0
  96. package/dist/ink/clearTerminal.d.ts.map +1 -0
  97. package/dist/ink/clearTerminal.js +63 -0
  98. package/dist/ink/clearTerminal.js.map +1 -0
  99. package/dist/ink/colorize.d.ts +17 -0
  100. package/dist/ink/colorize.d.ts.map +1 -0
  101. package/dist/ink/colorize.js +208 -0
  102. package/dist/ink/colorize.js.map +1 -0
  103. package/dist/ink/components/App.d.ts +73 -0
  104. package/dist/ink/components/App.d.ts.map +1 -0
  105. package/dist/ink/components/App.js +646 -0
  106. package/dist/ink/components/App.js.map +1 -0
  107. package/dist/ink/components/AppContext.d.ts +12 -0
  108. package/dist/ink/components/AppContext.d.ts.map +1 -0
  109. package/dist/ink/components/AppContext.js +14 -0
  110. package/dist/ink/components/AppContext.js.map +1 -0
  111. package/dist/ink/components/Box.d.ts +44 -0
  112. package/dist/ink/components/Box.d.ts.map +1 -0
  113. package/dist/ink/components/Box.js +191 -0
  114. package/dist/ink/components/Box.js.map +1 -0
  115. package/dist/ink/components/ClockContext.d.ts +9 -0
  116. package/dist/ink/components/ClockContext.d.ts.map +1 -0
  117. package/dist/ink/components/ClockContext.js +146 -0
  118. package/dist/ink/components/ClockContext.js.map +1 -0
  119. package/dist/ink/components/CursorDeclarationContext.d.ts +23 -0
  120. package/dist/ink/components/CursorDeclarationContext.d.ts.map +1 -0
  121. package/dist/ink/components/CursorDeclarationContext.js +6 -0
  122. package/dist/ink/components/CursorDeclarationContext.js.map +1 -0
  123. package/dist/ink/components/ErrorOverview.d.ts +6 -0
  124. package/dist/ink/components/ErrorOverview.d.ts.map +1 -0
  125. package/dist/ink/components/ErrorOverview.js +27 -0
  126. package/dist/ink/components/ErrorOverview.js.map +1 -0
  127. package/dist/ink/components/Newline.d.ts +13 -0
  128. package/dist/ink/components/Newline.d.ts.map +1 -0
  129. package/dist/ink/components/Newline.js +36 -0
  130. package/dist/ink/components/Newline.js.map +1 -0
  131. package/dist/ink/components/NoSelect.d.ts +20 -0
  132. package/dist/ink/components/NoSelect.d.ts.map +1 -0
  133. package/dist/ink/components/NoSelect.js +63 -0
  134. package/dist/ink/components/NoSelect.js.map +1 -0
  135. package/dist/ink/components/RawAnsi.d.ts +17 -0
  136. package/dist/ink/components/RawAnsi.d.ts.map +1 -0
  137. package/dist/ink/components/RawAnsi.js +52 -0
  138. package/dist/ink/components/RawAnsi.js.map +1 -0
  139. package/dist/ink/components/Spacer.d.ts +6 -0
  140. package/dist/ink/components/Spacer.d.ts.map +1 -0
  141. package/dist/ink/components/Spacer.js +26 -0
  142. package/dist/ink/components/Spacer.js.map +1 -0
  143. package/dist/ink/components/StdinContext.d.ts +28 -0
  144. package/dist/ink/components/StdinContext.d.ts.map +1 -0
  145. package/dist/ink/components/StdinContext.js +19 -0
  146. package/dist/ink/components/StdinContext.js.map +1 -0
  147. package/dist/ink/components/TerminalFocusContext.d.ts +10 -0
  148. package/dist/ink/components/TerminalFocusContext.d.ts.map +1 -0
  149. package/dist/ink/components/TerminalFocusContext.js +81 -0
  150. package/dist/ink/components/TerminalFocusContext.js.map +1 -0
  151. package/dist/ink/components/TerminalSizeContext.d.ts +6 -0
  152. package/dist/ink/components/TerminalSizeContext.d.ts.map +1 -0
  153. package/dist/ink/components/TerminalSizeContext.js +6 -0
  154. package/dist/ink/components/TerminalSizeContext.js.map +1 -0
  155. package/dist/ink/components/Text.d.ts +56 -0
  156. package/dist/ink/components/Text.d.ts.map +1 -0
  157. package/dist/ink/components/Text.js +201 -0
  158. package/dist/ink/components/Text.js.map +1 -0
  159. package/dist/ink/constants.d.ts +2 -0
  160. package/dist/ink/constants.d.ts.map +1 -0
  161. package/dist/ink/constants.js +6 -0
  162. package/dist/ink/constants.js.map +1 -0
  163. package/dist/ink/devtools.d.ts +3 -0
  164. package/dist/ink/devtools.d.ts.map +1 -0
  165. package/dist/ink/devtools.js +5 -0
  166. package/dist/ink/devtools.js.map +1 -0
  167. package/dist/ink/dom.d.ts +77 -0
  168. package/dist/ink/dom.d.ts.map +1 -0
  169. package/dist/ink/dom.js +322 -0
  170. package/dist/ink/dom.js.map +1 -0
  171. package/dist/ink/events/click-event.d.ts +32 -0
  172. package/dist/ink/events/click-event.d.ts.map +1 -0
  173. package/dist/ink/events/click-event.js +30 -0
  174. package/dist/ink/events/click-event.js.map +1 -0
  175. package/dist/ink/events/dispatcher.d.ts +41 -0
  176. package/dist/ink/events/dispatcher.d.ts.map +1 -0
  177. package/dist/ink/events/dispatcher.js +181 -0
  178. package/dist/ink/events/dispatcher.js.map +1 -0
  179. package/dist/ink/events/emitter.d.ts +6 -0
  180. package/dist/ink/events/emitter.d.ts.map +1 -0
  181. package/dist/ink/events/emitter.js +36 -0
  182. package/dist/ink/events/emitter.js.map +1 -0
  183. package/dist/ink/events/event-handlers.d.ts +47 -0
  184. package/dist/ink/events/event-handlers.d.ts.map +1 -0
  185. package/dist/ink/events/event-handlers.js +34 -0
  186. package/dist/ink/events/event-handlers.js.map +1 -0
  187. package/dist/ink/events/event.d.ts +6 -0
  188. package/dist/ink/events/event.d.ts.map +1 -0
  189. package/dist/ink/events/event.js +16 -0
  190. package/dist/ink/events/event.js.map +1 -0
  191. package/dist/ink/events/focus-event.d.ts +14 -0
  192. package/dist/ink/events/focus-event.d.ts.map +1 -0
  193. package/dist/ink/events/focus-event.js +20 -0
  194. package/dist/ink/events/focus-event.js.map +1 -0
  195. package/dist/ink/events/input-event.d.ts +31 -0
  196. package/dist/ink/events/input-event.d.ts.map +1 -0
  197. package/dist/ink/events/input-event.js +163 -0
  198. package/dist/ink/events/input-event.js.map +1 -0
  199. package/dist/ink/events/keyboard-event.d.ts +20 -0
  200. package/dist/ink/events/keyboard-event.d.ts.map +1 -0
  201. package/dist/ink/events/keyboard-event.js +44 -0
  202. package/dist/ink/events/keyboard-event.js.map +1 -0
  203. package/dist/ink/events/terminal-event.d.ts +55 -0
  204. package/dist/ink/events/terminal-event.d.ts.map +1 -0
  205. package/dist/ink/events/terminal-event.js +79 -0
  206. package/dist/ink/events/terminal-event.js.map +1 -0
  207. package/dist/ink/events/terminal-focus-event.d.ts +14 -0
  208. package/dist/ink/events/terminal-focus-event.d.ts.map +1 -0
  209. package/dist/ink/events/terminal-focus-event.js +19 -0
  210. package/dist/ink/events/terminal-focus-event.js.map +1 -0
  211. package/dist/ink/focus.d.ts +44 -0
  212. package/dist/ink/focus.d.ts.map +1 -0
  213. package/dist/ink/focus.js +164 -0
  214. package/dist/ink/focus.js.map +1 -0
  215. package/dist/ink/frame.d.ts +95 -0
  216. package/dist/ink/frame.d.ts.map +1 -0
  217. package/dist/ink/frame.js +35 -0
  218. package/dist/ink/frame.js.map +1 -0
  219. package/dist/ink/get-max-width.d.ts +18 -0
  220. package/dist/ink/get-max-width.d.ts.map +1 -0
  221. package/dist/ink/get-max-width.js +26 -0
  222. package/dist/ink/get-max-width.js.map +1 -0
  223. package/dist/ink/hit-test.d.ts +34 -0
  224. package/dist/ink/hit-test.d.ts.map +1 -0
  225. package/dist/ink/hit-test.js +119 -0
  226. package/dist/ink/hit-test.js.map +1 -0
  227. package/dist/ink/hooks/use-animation-frame.d.ts +27 -0
  228. package/dist/ink/hooks/use-animation-frame.d.ts.map +1 -0
  229. package/dist/ink/hooks/use-animation-frame.js +52 -0
  230. package/dist/ink/hooks/use-animation-frame.js.map +1 -0
  231. package/dist/ink/hooks/use-app.d.ts +6 -0
  232. package/dist/ink/hooks/use-app.d.ts.map +1 -0
  233. package/dist/ink/hooks/use-app.js +13 -0
  234. package/dist/ink/hooks/use-app.js.map +1 -0
  235. package/dist/ink/hooks/use-declared-cursor.d.ts +27 -0
  236. package/dist/ink/hooks/use-declared-cursor.d.ts.map +1 -0
  237. package/dist/ink/hooks/use-declared-cursor.js +67 -0
  238. package/dist/ink/hooks/use-declared-cursor.js.map +1 -0
  239. package/dist/ink/hooks/use-input.d.ts +38 -0
  240. package/dist/ink/hooks/use-input.d.ts.map +1 -0
  241. package/dist/ink/hooks/use-input.js +86 -0
  242. package/dist/ink/hooks/use-input.js.map +1 -0
  243. package/dist/ink/hooks/use-interval.d.ts +19 -0
  244. package/dist/ink/hooks/use-interval.d.ts.map +1 -0
  245. package/dist/ink/hooks/use-interval.js +59 -0
  246. package/dist/ink/hooks/use-interval.js.map +1 -0
  247. package/dist/ink/hooks/use-search-highlight.d.ts +31 -0
  248. package/dist/ink/hooks/use-search-highlight.d.ts.map +1 -0
  249. package/dist/ink/hooks/use-search-highlight.js +39 -0
  250. package/dist/ink/hooks/use-search-highlight.js.map +1 -0
  251. package/dist/ink/hooks/use-selection.d.ts +40 -0
  252. package/dist/ink/hooks/use-selection.d.ts.map +1 -0
  253. package/dist/ink/hooks/use-selection.js +68 -0
  254. package/dist/ink/hooks/use-selection.js.map +1 -0
  255. package/dist/ink/hooks/use-stdin.d.ts +6 -0
  256. package/dist/ink/hooks/use-stdin.d.ts.map +1 -0
  257. package/dist/ink/hooks/use-stdin.js +13 -0
  258. package/dist/ink/hooks/use-stdin.js.map +1 -0
  259. package/dist/ink/hooks/use-tab-status.d.ts +14 -0
  260. package/dist/ink/hooks/use-tab-status.d.ts.map +1 -0
  261. package/dist/ink/hooks/use-tab-status.js +61 -0
  262. package/dist/ink/hooks/use-tab-status.js.map +1 -0
  263. package/dist/ink/hooks/use-terminal-focus.d.ts +11 -0
  264. package/dist/ink/hooks/use-terminal-focus.d.ts.map +1 -0
  265. package/dist/ink/hooks/use-terminal-focus.js +22 -0
  266. package/dist/ink/hooks/use-terminal-focus.js.map +1 -0
  267. package/dist/ink/hooks/use-terminal-title.d.ts +13 -0
  268. package/dist/ink/hooks/use-terminal-title.d.ts.map +1 -0
  269. package/dist/ink/hooks/use-terminal-title.js +36 -0
  270. package/dist/ink/hooks/use-terminal-title.js.map +1 -0
  271. package/dist/ink/hooks/use-terminal-viewport.d.ts +30 -0
  272. package/dist/ink/hooks/use-terminal-viewport.d.ts.map +1 -0
  273. package/dist/ink/hooks/use-terminal-viewport.js +81 -0
  274. package/dist/ink/hooks/use-terminal-viewport.js.map +1 -0
  275. package/dist/ink/index.d.ts +54 -0
  276. package/dist/ink/index.d.ts.map +1 -0
  277. package/dist/ink/index.js +111 -0
  278. package/dist/ink/index.js.map +1 -0
  279. package/dist/ink/ink.d.ts +371 -0
  280. package/dist/ink/ink.d.ts.map +1 -0
  281. package/dist/ink/ink.js +1686 -0
  282. package/dist/ink/ink.js.map +1 -0
  283. package/dist/ink/instances.d.ts +4 -0
  284. package/dist/ink/instances.d.ts.map +1 -0
  285. package/dist/ink/instances.js +10 -0
  286. package/dist/ink/instances.js.map +1 -0
  287. package/dist/ink/line-width-cache.d.ts +2 -0
  288. package/dist/ink/line-width-cache.d.ts.map +1 -0
  289. package/dist/ink/line-width-cache.js +23 -0
  290. package/dist/ink/line-width-cache.js.map +1 -0
  291. package/dist/ink/log-update.d.ts +18 -0
  292. package/dist/ink/log-update.d.ts.map +1 -0
  293. package/dist/ink/log-update.js +637 -0
  294. package/dist/ink/log-update.js.map +1 -0
  295. package/dist/ink/measure-element.d.ts +17 -0
  296. package/dist/ink/measure-element.d.ts.map +1 -0
  297. package/dist/ink/measure-element.js +11 -0
  298. package/dist/ink/measure-element.js.map +1 -0
  299. package/dist/ink/measure-text.d.ts +7 -0
  300. package/dist/ink/measure-text.d.ts.map +1 -0
  301. package/dist/ink/measure-text.js +38 -0
  302. package/dist/ink/measure-text.js.map +1 -0
  303. package/dist/ink/node-cache.d.ts +21 -0
  304. package/dist/ink/node-cache.d.ts.map +1 -0
  305. package/dist/ink/node-cache.js +36 -0
  306. package/dist/ink/node-cache.js.map +1 -0
  307. package/dist/ink/optimizer.d.ts +16 -0
  308. package/dist/ink/optimizer.d.ts.map +1 -0
  309. package/dist/ink/optimizer.js +85 -0
  310. package/dist/ink/optimizer.js.map +1 -0
  311. package/dist/ink/output.d.ts +120 -0
  312. package/dist/ink/output.d.ts.map +1 -0
  313. package/dist/ink/output.js +559 -0
  314. package/dist/ink/output.js.map +1 -0
  315. package/dist/ink/parse-keypress.d.ts +112 -0
  316. package/dist/ink/parse-keypress.d.ts.map +1 -0
  317. package/dist/ink/parse-keypress.js +719 -0
  318. package/dist/ink/parse-keypress.js.map +1 -0
  319. package/dist/ink/parse-keypress.test.d.ts +2 -0
  320. package/dist/ink/parse-keypress.test.d.ts.map +1 -0
  321. package/dist/ink/parse-keypress.test.js +37 -0
  322. package/dist/ink/parse-keypress.test.js.map +1 -0
  323. package/dist/ink/reconciler.d.ts +12 -0
  324. package/dist/ink/reconciler.d.ts.map +1 -0
  325. package/dist/ink/reconciler.js +456 -0
  326. package/dist/ink/reconciler.js.map +1 -0
  327. package/dist/ink/render-border.d.ts +25 -0
  328. package/dist/ink/render-border.d.ts.map +1 -0
  329. package/dist/ink/render-border.js +141 -0
  330. package/dist/ink/render-border.js.map +1 -0
  331. package/dist/ink/render-node-to-output.d.ts +46 -0
  332. package/dist/ink/render-node-to-output.d.ts.map +1 -0
  333. package/dist/ink/render-node-to-output.js +1257 -0
  334. package/dist/ink/render-node-to-output.js.map +1 -0
  335. package/dist/ink/render-to-screen.d.ts +47 -0
  336. package/dist/ink/render-to-screen.d.ts.map +1 -0
  337. package/dist/ink/render-to-screen.js +213 -0
  338. package/dist/ink/render-to-screen.js.map +1 -0
  339. package/dist/ink/renderer.d.ts +15 -0
  340. package/dist/ink/renderer.d.ts.map +1 -0
  341. package/dist/ink/renderer.js +169 -0
  342. package/dist/ink/renderer.js.map +1 -0
  343. package/dist/ink/root.d.ts +75 -0
  344. package/dist/ink/root.d.ts.map +1 -0
  345. package/dist/ink/root.js +89 -0
  346. package/dist/ink/root.js.map +1 -0
  347. package/dist/ink/screen.d.ts +270 -0
  348. package/dist/ink/screen.d.ts.map +1 -0
  349. package/dist/ink/screen.js +1194 -0
  350. package/dist/ink/screen.js.map +1 -0
  351. package/dist/ink/searchHighlight.d.ts +21 -0
  352. package/dist/ink/searchHighlight.d.ts.map +1 -0
  353. package/dist/ink/searchHighlight.js +82 -0
  354. package/dist/ink/searchHighlight.js.map +1 -0
  355. package/dist/ink/selection.d.ts +230 -0
  356. package/dist/ink/selection.d.ts.map +1 -0
  357. package/dist/ink/selection.js +814 -0
  358. package/dist/ink/selection.js.map +1 -0
  359. package/dist/ink/squash-text-nodes.d.ts +23 -0
  360. package/dist/ink/squash-text-nodes.d.ts.map +1 -0
  361. package/dist/ink/squash-text-nodes.js +60 -0
  362. package/dist/ink/squash-text-nodes.js.map +1 -0
  363. package/dist/ink/stringWidth.d.ts +2 -0
  364. package/dist/ink/stringWidth.d.ts.map +1 -0
  365. package/dist/ink/stringWidth.js +207 -0
  366. package/dist/ink/stringWidth.js.map +1 -0
  367. package/dist/ink/styles.d.ts +307 -0
  368. package/dist/ink/styles.d.ts.map +1 -0
  369. package/dist/ink/styles.js +302 -0
  370. package/dist/ink/styles.js.map +1 -0
  371. package/dist/ink/supports-hyperlinks.d.ts +14 -0
  372. package/dist/ink/supports-hyperlinks.d.ts.map +1 -0
  373. package/dist/ink/supports-hyperlinks.js +48 -0
  374. package/dist/ink/supports-hyperlinks.js.map +1 -0
  375. package/dist/ink/tabstops.d.ts +2 -0
  376. package/dist/ink/tabstops.d.ts.map +1 -0
  377. package/dist/ink/tabstops.js +43 -0
  378. package/dist/ink/tabstops.js.map +1 -0
  379. package/dist/ink/terminal-focus-state.d.ts +7 -0
  380. package/dist/ink/terminal-focus-state.d.ts.map +1 -0
  381. package/dist/ink/terminal-focus-state.js +43 -0
  382. package/dist/ink/terminal-focus-state.js.map +1 -0
  383. package/dist/ink/terminal-querier.d.ts +130 -0
  384. package/dist/ink/terminal-querier.d.ts.map +1 -0
  385. package/dist/ink/terminal-querier.js +184 -0
  386. package/dist/ink/terminal-querier.js.map +1 -0
  387. package/dist/ink/terminal.d.ts +56 -0
  388. package/dist/ink/terminal.d.ts.map +1 -0
  389. package/dist/ink/terminal.js +249 -0
  390. package/dist/ink/terminal.js.map +1 -0
  391. package/dist/ink/termio/csi.d.ts +166 -0
  392. package/dist/ink/termio/csi.d.ts.map +1 -0
  393. package/dist/ink/termio/csi.js +285 -0
  394. package/dist/ink/termio/csi.js.map +1 -0
  395. package/dist/ink/termio/dec.d.ts +38 -0
  396. package/dist/ink/termio/dec.d.ts.map +1 -0
  397. package/dist/ink/termio/dec.js +59 -0
  398. package/dist/ink/termio/dec.js.map +1 -0
  399. package/dist/ink/termio.d.ts +25 -0
  400. package/dist/ink/termio.d.ts.map +1 -0
  401. package/dist/ink/termio.js +32 -0
  402. package/dist/ink/termio.js.map +1 -0
  403. package/dist/ink/useTerminalNotification.d.ts +27 -0
  404. package/dist/ink/useTerminalNotification.d.ts.map +1 -0
  405. package/dist/ink/useTerminalNotification.js +62 -0
  406. package/dist/ink/useTerminalNotification.js.map +1 -0
  407. package/dist/ink/warn.d.ts +2 -0
  408. package/dist/ink/warn.d.ts.map +1 -0
  409. package/dist/ink/warn.js +14 -0
  410. package/dist/ink/warn.js.map +1 -0
  411. package/dist/ink/widest-line.d.ts +2 -0
  412. package/dist/ink/widest-line.d.ts.map +1 -0
  413. package/dist/ink/widest-line.js +18 -0
  414. package/dist/ink/widest-line.js.map +1 -0
  415. package/dist/ink/wrap-text.d.ts +3 -0
  416. package/dist/ink/wrap-text.d.ts.map +1 -0
  417. package/dist/ink/wrap-text.js +61 -0
  418. package/dist/ink/wrap-text.js.map +1 -0
  419. package/dist/ink/wrapAnsi.d.ts +8 -0
  420. package/dist/ink/wrapAnsi.d.ts.map +1 -0
  421. package/dist/ink/wrapAnsi.js +13 -0
  422. package/dist/ink/wrapAnsi.js.map +1 -0
  423. package/dist/memory/embeddings.d.ts +33 -0
  424. package/dist/memory/embeddings.d.ts.map +1 -0
  425. package/dist/memory/embeddings.js +123 -0
  426. package/dist/memory/embeddings.js.map +1 -0
  427. package/dist/memory/index.d.ts +14 -0
  428. package/dist/memory/index.d.ts.map +1 -0
  429. package/dist/memory/index.js +31 -0
  430. package/dist/memory/index.js.map +1 -0
  431. package/dist/memory/prompts.d.ts +12 -0
  432. package/dist/memory/prompts.d.ts.map +1 -0
  433. package/dist/memory/prompts.js +117 -0
  434. package/dist/memory/prompts.js.map +1 -0
  435. package/dist/memory/semantic-search.d.ts +45 -0
  436. package/dist/memory/semantic-search.d.ts.map +1 -0
  437. package/dist/memory/semantic-search.js +112 -0
  438. package/dist/memory/semantic-search.js.map +1 -0
  439. package/dist/memory/storage.d.ts +79 -0
  440. package/dist/memory/storage.d.ts.map +1 -0
  441. package/dist/memory/storage.js +285 -0
  442. package/dist/memory/storage.js.map +1 -0
  443. package/dist/memory/store.d.ts +103 -0
  444. package/dist/memory/store.d.ts.map +1 -0
  445. package/dist/memory/store.js +226 -0
  446. package/dist/memory/store.js.map +1 -0
  447. package/dist/memory/types.d.ts +40 -0
  448. package/dist/memory/types.d.ts.map +1 -0
  449. package/dist/memory/types.js +71 -0
  450. package/dist/memory/types.js.map +1 -0
  451. package/dist/memory/validation.d.ts +28 -0
  452. package/dist/memory/validation.d.ts.map +1 -0
  453. package/dist/memory/validation.js +147 -0
  454. package/dist/memory/validation.js.map +1 -0
  455. package/dist/memory/vector-store.d.ts +49 -0
  456. package/dist/memory/vector-store.d.ts.map +1 -0
  457. package/dist/memory/vector-store.js +259 -0
  458. package/dist/memory/vector-store.js.map +1 -0
  459. package/dist/screens/REPL.d.ts +21 -0
  460. package/dist/screens/REPL.d.ts.map +1 -0
  461. package/dist/screens/REPL.js +139 -0
  462. package/dist/screens/REPL.js.map +1 -0
  463. package/dist/services/agent-runner.d.ts +68 -0
  464. package/dist/services/agent-runner.d.ts.map +1 -0
  465. package/dist/services/agent-runner.js +186 -0
  466. package/dist/services/agent-runner.js.map +1 -0
  467. package/dist/services/atomic-write.d.ts +12 -0
  468. package/dist/services/atomic-write.d.ts.map +1 -0
  469. package/dist/services/atomic-write.js +27 -0
  470. package/dist/services/atomic-write.js.map +1 -0
  471. package/dist/services/config-dir.d.ts +55 -0
  472. package/dist/services/config-dir.d.ts.map +1 -0
  473. package/dist/services/config-dir.js +136 -0
  474. package/dist/services/config-dir.js.map +1 -0
  475. package/dist/services/config.d.ts +54 -0
  476. package/dist/services/config.d.ts.map +1 -0
  477. package/dist/services/config.js +98 -0
  478. package/dist/services/config.js.map +1 -0
  479. package/dist/services/file-glob.d.ts +26 -0
  480. package/dist/services/file-glob.d.ts.map +1 -0
  481. package/dist/services/file-glob.js +134 -0
  482. package/dist/services/file-glob.js.map +1 -0
  483. package/dist/services/global-config.d.ts +109 -0
  484. package/dist/services/global-config.d.ts.map +1 -0
  485. package/dist/services/global-config.js +211 -0
  486. package/dist/services/global-config.js.map +1 -0
  487. package/dist/services/llm.d.ts +139 -0
  488. package/dist/services/llm.d.ts.map +1 -0
  489. package/dist/services/llm.js +376 -0
  490. package/dist/services/llm.js.map +1 -0
  491. package/dist/services/memory.d.ts +39 -0
  492. package/dist/services/memory.d.ts.map +1 -0
  493. package/dist/services/memory.js +88 -0
  494. package/dist/services/memory.js.map +1 -0
  495. package/dist/services/session-storage.d.ts +136 -0
  496. package/dist/services/session-storage.d.ts.map +1 -0
  497. package/dist/services/session-storage.js +304 -0
  498. package/dist/services/session-storage.js.map +1 -0
  499. package/dist/services/task-manager.d.ts +154 -0
  500. package/dist/services/task-manager.d.ts.map +1 -0
  501. package/dist/services/task-manager.js +288 -0
  502. package/dist/services/task-manager.js.map +1 -0
  503. package/dist/services/yaml-config.d.ts +57 -0
  504. package/dist/services/yaml-config.d.ts.map +1 -0
  505. package/dist/services/yaml-config.js +176 -0
  506. package/dist/services/yaml-config.js.map +1 -0
  507. package/dist/skills/discovery.d.ts +22 -0
  508. package/dist/skills/discovery.d.ts.map +1 -0
  509. package/dist/skills/discovery.js +75 -0
  510. package/dist/skills/discovery.js.map +1 -0
  511. package/dist/skills/index.d.ts +10 -0
  512. package/dist/skills/index.d.ts.map +1 -0
  513. package/dist/skills/index.js +26 -0
  514. package/dist/skills/index.js.map +1 -0
  515. package/dist/skills/loader.d.ts +48 -0
  516. package/dist/skills/loader.d.ts.map +1 -0
  517. package/dist/skills/loader.js +231 -0
  518. package/dist/skills/loader.js.map +1 -0
  519. package/dist/skills/registry.d.ts +37 -0
  520. package/dist/skills/registry.d.ts.map +1 -0
  521. package/dist/skills/registry.js +134 -0
  522. package/dist/skills/registry.js.map +1 -0
  523. package/dist/skills/types.d.ts +89 -0
  524. package/dist/skills/types.d.ts.map +1 -0
  525. package/dist/skills/types.js +24 -0
  526. package/dist/skills/types.js.map +1 -0
  527. package/dist/tools/bash_security.d.ts +64 -0
  528. package/dist/tools/bash_security.d.ts.map +1 -0
  529. package/dist/tools/bash_security.js +291 -0
  530. package/dist/tools/bash_security.js.map +1 -0
  531. package/dist/tools/index.d.ts +23 -0
  532. package/dist/tools/index.d.ts.map +1 -0
  533. package/dist/tools/index.js +965 -0
  534. package/dist/tools/index.js.map +1 -0
  535. package/dist/tools/mcp.d.ts +72 -0
  536. package/dist/tools/mcp.d.ts.map +1 -0
  537. package/dist/tools/mcp.js +422 -0
  538. package/dist/tools/mcp.js.map +1 -0
  539. package/dist/tools/plan.d.ts +18 -0
  540. package/dist/tools/plan.d.ts.map +1 -0
  541. package/dist/tools/plan.js +75 -0
  542. package/dist/tools/plan.js.map +1 -0
  543. package/dist/tools/todo.d.ts +18 -0
  544. package/dist/tools/todo.d.ts.map +1 -0
  545. package/dist/tools/todo.js +153 -0
  546. package/dist/tools/todo.js.map +1 -0
  547. package/dist/tools/web.d.ts +13 -0
  548. package/dist/tools/web.d.ts.map +1 -0
  549. package/dist/tools/web.js +377 -0
  550. package/dist/tools/web.js.map +1 -0
  551. package/dist/ui/box.d.ts +56 -0
  552. package/dist/ui/box.d.ts.map +1 -0
  553. package/dist/ui/box.js +241 -0
  554. package/dist/ui/box.js.map +1 -0
  555. package/dist/ui/command-panel.d.ts +55 -0
  556. package/dist/ui/command-panel.d.ts.map +1 -0
  557. package/dist/ui/command-panel.js +212 -0
  558. package/dist/ui/command-panel.js.map +1 -0
  559. package/dist/ui/file-completion.d.ts +62 -0
  560. package/dist/ui/file-completion.d.ts.map +1 -0
  561. package/dist/ui/file-completion.js +209 -0
  562. package/dist/ui/file-completion.js.map +1 -0
  563. package/dist/ui/markdown.d.ts +12 -0
  564. package/dist/ui/markdown.d.ts.map +1 -0
  565. package/dist/ui/markdown.js +215 -0
  566. package/dist/ui/markdown.js.map +1 -0
  567. package/dist/ui/multiline-input.d.ts +47 -0
  568. package/dist/ui/multiline-input.d.ts.map +1 -0
  569. package/dist/ui/multiline-input.js +94 -0
  570. package/dist/ui/multiline-input.js.map +1 -0
  571. package/dist/ui/status-bar.d.ts +33 -0
  572. package/dist/ui/status-bar.d.ts.map +1 -0
  573. package/dist/ui/status-bar.js +96 -0
  574. package/dist/ui/status-bar.js.map +1 -0
  575. package/dist/ui/stream-markdown.d.ts +35 -0
  576. package/dist/ui/stream-markdown.d.ts.map +1 -0
  577. package/dist/ui/stream-markdown.js +138 -0
  578. package/dist/ui/stream-markdown.js.map +1 -0
  579. package/dist/ui/suggestions.d.ts +35 -0
  580. package/dist/ui/suggestions.d.ts.map +1 -0
  581. package/dist/ui/suggestions.js +118 -0
  582. package/dist/ui/suggestions.js.map +1 -0
  583. package/dist/ui/tool-preview.d.ts +34 -0
  584. package/dist/ui/tool-preview.d.ts.map +1 -0
  585. package/dist/ui/tool-preview.js +128 -0
  586. package/dist/ui/tool-preview.js.map +1 -0
  587. package/package.json +93 -0
@@ -0,0 +1,288 @@
1
+ "use strict";
2
+ /**
3
+ * openhorse - 任务管理器
4
+ *
5
+ * 提供完整的任务 CRUD 和状态管理:
6
+ * - 创建、读取、更新、删除任务
7
+ * - 状态转换(pending → running → completed/failed)
8
+ * - 按状态、优先级、标签过滤
9
+ * - 事件驱动的状态变更通知
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.TaskManager = void 0;
13
+ const eventemitter3_1 = require("eventemitter3");
14
+ const uuid_1 = require("uuid");
15
+ // ============================================================================
16
+ // 有效状态转换
17
+ // ============================================================================
18
+ const VALID_TRANSITIONS = {
19
+ pending: ['running', 'cancelled'],
20
+ running: ['completed', 'failed'],
21
+ completed: [],
22
+ failed: ['pending'], // 可重试
23
+ cancelled: ['pending'], // 可恢复
24
+ };
25
+ // ============================================================================
26
+ // TaskManager - 任务管理器
27
+ // ============================================================================
28
+ class TaskManager extends eventemitter3_1.EventEmitter {
29
+ constructor() {
30
+ super(...arguments);
31
+ this.tasks = new Map();
32
+ }
33
+ // ==========================================================================
34
+ // CRUD
35
+ // ==========================================================================
36
+ /**
37
+ * 创建任务
38
+ */
39
+ create(options) {
40
+ const now = Date.now();
41
+ const record = {
42
+ id: (0, uuid_1.v4)(),
43
+ name: options.name,
44
+ description: options.description,
45
+ priority: options.priority ?? 'P1',
46
+ assignedTo: options.assignedTo ?? 'leader',
47
+ status: 'pending',
48
+ params: options.params,
49
+ tags: options.tags ?? [],
50
+ retries: 0,
51
+ maxRetries: options.maxRetries ?? 3,
52
+ createdAt: now,
53
+ updatedAt: now,
54
+ };
55
+ this.tasks.set(record.id, record);
56
+ this.emit('created', record);
57
+ return record;
58
+ }
59
+ /**
60
+ * 按 ID 获取任务
61
+ */
62
+ get(id) {
63
+ return this.tasks.get(id);
64
+ }
65
+ /**
66
+ * 更新任务
67
+ */
68
+ update(id, updates) {
69
+ const task = this.tasks.get(id);
70
+ if (!task)
71
+ return undefined;
72
+ if (updates.name !== undefined)
73
+ task.name = updates.name;
74
+ if (updates.description !== undefined)
75
+ task.description = updates.description;
76
+ if (updates.priority !== undefined)
77
+ task.priority = updates.priority;
78
+ if (updates.assignedTo !== undefined)
79
+ task.assignedTo = updates.assignedTo;
80
+ if (updates.params !== undefined)
81
+ task.params = updates.params;
82
+ if (updates.tags !== undefined)
83
+ task.tags = updates.tags;
84
+ if (updates.maxRetries !== undefined)
85
+ task.maxRetries = updates.maxRetries;
86
+ task.updatedAt = Date.now();
87
+ this.emit('updated', task);
88
+ return task;
89
+ }
90
+ /**
91
+ * 删除任务
92
+ */
93
+ delete(id) {
94
+ const existed = this.tasks.delete(id);
95
+ if (existed) {
96
+ this.emit('deleted', { id });
97
+ }
98
+ return existed;
99
+ }
100
+ // ==========================================================================
101
+ // 状态管理
102
+ // ==========================================================================
103
+ /**
104
+ * 将任务状态转换为 running
105
+ */
106
+ start(id) {
107
+ return this.transition(id, 'running');
108
+ }
109
+ /**
110
+ * 将任务标记为完成
111
+ */
112
+ complete(id, result) {
113
+ const task = this.tasks.get(id);
114
+ if (!task)
115
+ return undefined;
116
+ const updated = this.transition(id, 'completed');
117
+ if (updated) {
118
+ updated.result = result;
119
+ updated.completedAt = Date.now();
120
+ }
121
+ return updated;
122
+ }
123
+ /**
124
+ * 将任务标记为失败
125
+ */
126
+ fail(id, error, result) {
127
+ const task = this.tasks.get(id);
128
+ if (!task)
129
+ return undefined;
130
+ const updated = this.transition(id, 'failed');
131
+ if (updated) {
132
+ updated.result = result ?? { success: false, error: error ?? 'Task failed' };
133
+ updated.completedAt = Date.now();
134
+ }
135
+ return updated;
136
+ }
137
+ /**
138
+ * 取消任务
139
+ */
140
+ cancel(id) {
141
+ return this.transition(id, 'cancelled');
142
+ }
143
+ /**
144
+ * 重试任务(从 failed 回到 pending)
145
+ */
146
+ retry(id) {
147
+ const task = this.tasks.get(id);
148
+ if (!task)
149
+ return undefined;
150
+ if (task.retries >= task.maxRetries) {
151
+ console.warn(`[TaskManager] Task "${task.name}" exceeded max retries (${task.maxRetries})`);
152
+ return undefined;
153
+ }
154
+ task.retries++;
155
+ const updated = this.transition(id, 'pending');
156
+ return updated;
157
+ }
158
+ /**
159
+ * 获取任务统计
160
+ */
161
+ getStats() {
162
+ const stats = {
163
+ total: this.tasks.size,
164
+ pending: 0,
165
+ running: 0,
166
+ completed: 0,
167
+ failed: 0,
168
+ cancelled: 0,
169
+ };
170
+ for (const task of this.tasks.values()) {
171
+ stats[task.status]++;
172
+ }
173
+ return stats;
174
+ }
175
+ // ==========================================================================
176
+ // 查询与过滤
177
+ // ==========================================================================
178
+ /**
179
+ * 列出所有任务
180
+ */
181
+ list(filter) {
182
+ let results = Array.from(this.tasks.values());
183
+ if (!filter)
184
+ return results;
185
+ // 状态过滤
186
+ if (filter.status) {
187
+ const statuses = Array.isArray(filter.status) ? filter.status : [filter.status];
188
+ results = results.filter(t => statuses.includes(t.status));
189
+ }
190
+ // 优先级过滤
191
+ if (filter.priority) {
192
+ const priorities = Array.isArray(filter.priority) ? filter.priority : [filter.priority];
193
+ results = results.filter(t => priorities.includes(t.priority));
194
+ }
195
+ // 分配目标过滤
196
+ if (filter.assignedTo) {
197
+ results = results.filter(t => t.assignedTo === filter.assignedTo);
198
+ }
199
+ // 标签过滤
200
+ if (filter.tags?.length) {
201
+ results = results.filter(t => filter.tags.some(tag => t.tags.includes(tag)));
202
+ }
203
+ // 时间范围过滤
204
+ if (filter.createdAfter) {
205
+ results = results.filter(t => t.createdAt >= filter.createdAfter);
206
+ }
207
+ if (filter.createdBefore) {
208
+ results = results.filter(t => t.createdAt <= filter.createdBefore);
209
+ }
210
+ return results;
211
+ }
212
+ /**
213
+ * 获取待处理任务(按优先级排序)
214
+ */
215
+ getPending() {
216
+ const pending = this.list({ status: 'pending' });
217
+ const priorityOrder = { P0: 0, P1: 1, P2: 2 };
218
+ return pending.sort((a, b) => priorityOrder[a.priority] - priorityOrder[b.priority]);
219
+ }
220
+ /**
221
+ * 按 Agent ID 获取任务
222
+ */
223
+ getByAgent(agentId) {
224
+ return this.list({ assignedTo: agentId });
225
+ }
226
+ // ==========================================================================
227
+ // 转换到 Task 类型(兼容 Brain)
228
+ // ==========================================================================
229
+ /**
230
+ * 将 TaskRecord 转换为 Brain 可用的 Task
231
+ */
232
+ toTask(record) {
233
+ return {
234
+ id: record.id,
235
+ name: record.name,
236
+ description: record.description,
237
+ priority: record.priority,
238
+ assignedTo: record.assignedTo,
239
+ status: record.status,
240
+ params: record.params,
241
+ };
242
+ }
243
+ // ==========================================================================
244
+ // 工具方法
245
+ // ==========================================================================
246
+ /** 清除所有已完成/已取消/已失败的任务 */
247
+ cleanup(states = ['completed', 'cancelled', 'failed']) {
248
+ let count = 0;
249
+ for (const [id, task] of this.tasks) {
250
+ if (states.includes(task.status)) {
251
+ this.tasks.delete(id);
252
+ count++;
253
+ this.emit('deleted', { id });
254
+ }
255
+ }
256
+ return count;
257
+ }
258
+ /** 清除所有任务 */
259
+ reset() {
260
+ this.tasks.clear();
261
+ this.emit('reset');
262
+ }
263
+ // ---- Internal ----
264
+ /**
265
+ * 状态转换(带合法性校验)
266
+ */
267
+ transition(id, target) {
268
+ const task = this.tasks.get(id);
269
+ if (!task)
270
+ return undefined;
271
+ const allowed = VALID_TRANSITIONS[task.status];
272
+ if (!allowed.includes(target)) {
273
+ console.warn(`[TaskManager] Invalid transition: "${task.status}" → "${target}" for task "${task.name}"`);
274
+ return undefined;
275
+ }
276
+ const previous = task.status;
277
+ task.status = target;
278
+ task.updatedAt = Date.now();
279
+ if (target === 'running') {
280
+ task.startedAt = Date.now();
281
+ }
282
+ this.emit('status-change', { task, from: previous, to: target });
283
+ this.emit(target, task);
284
+ return task;
285
+ }
286
+ }
287
+ exports.TaskManager = TaskManager;
288
+ //# sourceMappingURL=task-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-manager.js","sourceRoot":"","sources":["../../src/services/task-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * openhorse - YAML Config Loader
3
+ *
4
+ * 支持 YAML 和 JSON 配置文件加载
5
+ */
6
+ export interface YAMLConfig {
7
+ openhorse?: {
8
+ version?: string;
9
+ model?: {
10
+ provider?: string;
11
+ name?: string;
12
+ fallback?: string;
13
+ };
14
+ memory?: {
15
+ vector_enabled?: boolean;
16
+ embedding_provider?: string;
17
+ embedding_model?: string;
18
+ };
19
+ mcp?: {
20
+ servers?: Record<string, MCPServerConfig>;
21
+ };
22
+ skills?: {
23
+ auto_enable?: string[];
24
+ custom_path?: string;
25
+ };
26
+ agents?: {
27
+ max_workers?: number;
28
+ timeout?: number;
29
+ };
30
+ cli?: {
31
+ theme?: string;
32
+ show_costs?: boolean;
33
+ };
34
+ };
35
+ }
36
+ export interface MCPServerConfig {
37
+ command: string;
38
+ args?: string[];
39
+ env?: Record<string, string>;
40
+ }
41
+ export declare class YAMLConfigLoader {
42
+ /** Load project config */
43
+ loadProjectConfig(projectPath?: string): YAMLConfig | null;
44
+ /** Load global config */
45
+ loadGlobalConfig(): YAMLConfig | null;
46
+ /** Load config from file */
47
+ private loadFile;
48
+ /** Merge configs with priority */
49
+ mergeConfigs(project: YAMLConfig | null, global: YAMLConfig | null): YAMLConfig;
50
+ /** Load all configs with priority */
51
+ loadAll(): YAMLConfig;
52
+ /** Generate config template */
53
+ generateTemplate(): string;
54
+ }
55
+ export declare function getYAMLConfigLoader(): YAMLConfigLoader;
56
+ export declare function resetYAMLConfigLoader(): void;
57
+ //# sourceMappingURL=yaml-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yaml-config.d.ts","sourceRoot":"","sources":["../../src/services/yaml-config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAWH,MAAM,WAAW,UAAU;IACzB,SAAS,CAAC,EAAE;QACV,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE;YACN,QAAQ,CAAC,EAAE,MAAM,CAAC;YAClB,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,QAAQ,CAAC,EAAE,MAAM,CAAC;SACnB,CAAC;QACF,MAAM,CAAC,EAAE;YACP,cAAc,CAAC,EAAE,OAAO,CAAC;YACzB,kBAAkB,CAAC,EAAE,MAAM,CAAC;YAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;SAC1B,CAAC;QACF,GAAG,CAAC,EAAE;YACJ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;SAC3C,CAAC;QACF,MAAM,CAAC,EAAE;YACP,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;YACvB,WAAW,CAAC,EAAE,MAAM,CAAC;SACtB,CAAC;QACF,MAAM,CAAC,EAAE;YACP,WAAW,CAAC,EAAE,MAAM,CAAC;YACrB,OAAO,CAAC,EAAE,MAAM,CAAC;SAClB,CAAC;QACF,GAAG,CAAC,EAAE;YACJ,KAAK,CAAC,EAAE,MAAM,CAAC;YACf,UAAU,CAAC,EAAE,OAAO,CAAC;SACtB,CAAC;KACH,CAAC;CACH;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAqBD,qBAAa,gBAAgB;IAC3B,0BAA0B;IAC1B,iBAAiB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAa1D,yBAAyB;IACzB,gBAAgB,IAAI,UAAU,GAAG,IAAI;IAkBrC,4BAA4B;IAC5B,OAAO,CAAC,QAAQ;IAgBhB,kCAAkC;IAClC,YAAY,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,GAAG,UAAU;IAiD/E,qCAAqC;IACrC,OAAO,IAAI,UAAU;IAMrB,+BAA+B;IAC/B,gBAAgB,IAAI,MAAM;CAqC3B;AAQD,wBAAgB,mBAAmB,IAAI,gBAAgB,CAKtD;AAED,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C"}
@@ -0,0 +1,176 @@
1
+ "use strict";
2
+ /**
3
+ * openhorse - YAML Config Loader
4
+ *
5
+ * 支持 YAML 和 JSON 配置文件加载
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.YAMLConfigLoader = void 0;
9
+ exports.getYAMLConfigLoader = getYAMLConfigLoader;
10
+ exports.resetYAMLConfigLoader = resetYAMLConfigLoader;
11
+ const fs_1 = require("fs");
12
+ const path_1 = require("path");
13
+ const js_yaml_1 = require("js-yaml");
14
+ const config_dir_1 = require("./config-dir");
15
+ // ============================================================================
16
+ // Config File Locations
17
+ // ============================================================================
18
+ const CONFIG_FILES = [
19
+ '.openhorse.yaml',
20
+ '.openhorse.yml',
21
+ '.openhorse.json',
22
+ 'openhorse.yaml',
23
+ 'openhorse.yml',
24
+ 'openhorse.json',
25
+ ];
26
+ const GLOBAL_CONFIG_FILE = 'openhorse.yaml';
27
+ // ============================================================================
28
+ // YAML Config Loader
29
+ // ============================================================================
30
+ class YAMLConfigLoader {
31
+ /** Load project config */
32
+ loadProjectConfig(projectPath) {
33
+ const cwd = projectPath || process.cwd();
34
+ for (const filename of CONFIG_FILES) {
35
+ const filePath = (0, path_1.join)(cwd, filename);
36
+ if ((0, fs_1.existsSync)(filePath)) {
37
+ return this.loadFile(filePath);
38
+ }
39
+ }
40
+ return null;
41
+ }
42
+ /** Load global config */
43
+ loadGlobalConfig() {
44
+ const configHome = (0, config_dir_1.getConfigHome)();
45
+ // Try YAML first
46
+ const yamlPath = (0, path_1.join)(configHome, GLOBAL_CONFIG_FILE);
47
+ if ((0, fs_1.existsSync)(yamlPath)) {
48
+ return this.loadFile(yamlPath);
49
+ }
50
+ // Try JSON as fallback
51
+ const jsonPath = (0, path_1.join)(configHome, 'openhorse.json');
52
+ if ((0, fs_1.existsSync)(jsonPath)) {
53
+ return this.loadFile(jsonPath);
54
+ }
55
+ return null;
56
+ }
57
+ /** Load config from file */
58
+ loadFile(filePath) {
59
+ try {
60
+ const content = (0, fs_1.readFileSync)(filePath, 'utf-8');
61
+ if (filePath.endsWith('.yaml') || filePath.endsWith('.yml')) {
62
+ return (0, js_yaml_1.load)(content);
63
+ }
64
+ // JSON format
65
+ return JSON.parse(content);
66
+ }
67
+ catch (err) {
68
+ console.warn(`[YAMLConfig] Failed to load ${filePath}: ${err.message}`);
69
+ return null;
70
+ }
71
+ }
72
+ /** Merge configs with priority */
73
+ mergeConfigs(project, global) {
74
+ const merged = {
75
+ openhorse: {},
76
+ };
77
+ // Global config (lower priority)
78
+ if (global?.openhorse) {
79
+ merged.openhorse = { ...global.openhorse };
80
+ }
81
+ // Project config (higher priority, overrides global)
82
+ if (project?.openhorse) {
83
+ merged.openhorse = {
84
+ ...merged.openhorse,
85
+ ...project.openhorse,
86
+ // Deep merge nested objects
87
+ model: {
88
+ ...merged.openhorse?.model,
89
+ ...project.openhorse?.model,
90
+ },
91
+ memory: {
92
+ ...merged.openhorse?.memory,
93
+ ...project.openhorse?.memory,
94
+ },
95
+ mcp: {
96
+ ...merged.openhorse?.mcp,
97
+ servers: {
98
+ ...merged.openhorse?.mcp?.servers,
99
+ ...project.openhorse?.mcp?.servers,
100
+ },
101
+ },
102
+ skills: {
103
+ ...merged.openhorse?.skills,
104
+ ...project.openhorse?.skills,
105
+ },
106
+ agents: {
107
+ ...merged.openhorse?.agents,
108
+ ...project.openhorse?.agents,
109
+ },
110
+ cli: {
111
+ ...merged.openhorse?.cli,
112
+ ...project.openhorse?.cli,
113
+ },
114
+ };
115
+ }
116
+ return merged;
117
+ }
118
+ /** Load all configs with priority */
119
+ loadAll() {
120
+ const global = this.loadGlobalConfig();
121
+ const project = this.loadProjectConfig();
122
+ return this.mergeConfigs(project, global);
123
+ }
124
+ /** Generate config template */
125
+ generateTemplate() {
126
+ const template = `# OpenHorse Configuration
127
+ openhorse:
128
+ version: "0.1.5"
129
+
130
+ model:
131
+ provider: openai
132
+ name: gpt-4o
133
+ fallback: gpt-3.5-turbo
134
+
135
+ memory:
136
+ vector_enabled: true
137
+ embedding_provider: ollama # or openai
138
+ embedding_model: nomic-embed-text
139
+
140
+ mcp:
141
+ servers:
142
+ filesystem:
143
+ command: mcp-server-filesystem
144
+ args: ["--root", "./"]
145
+
146
+ skills:
147
+ auto_enable:
148
+ - code-review
149
+ - security-check
150
+
151
+ agents:
152
+ max_workers: 3
153
+ timeout: 60000
154
+
155
+ cli:
156
+ theme: dark
157
+ show_costs: true
158
+ `;
159
+ return template;
160
+ }
161
+ }
162
+ exports.YAMLConfigLoader = YAMLConfigLoader;
163
+ // ============================================================================
164
+ // Factory
165
+ // ============================================================================
166
+ let defaultLoader = null;
167
+ function getYAMLConfigLoader() {
168
+ if (!defaultLoader) {
169
+ defaultLoader = new YAMLConfigLoader();
170
+ }
171
+ return defaultLoader;
172
+ }
173
+ function resetYAMLConfigLoader() {
174
+ defaultLoader = null;
175
+ }
176
+ //# sourceMappingURL=yaml-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yaml-config.js","sourceRoot":"","sources":["../../src/services/yaml-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * openhorse - Skills Discovery
3
+ *
4
+ * 自动发现和热重载机制
5
+ */
6
+ import type { SkillDefinition } from './types';
7
+ export declare class SkillsDiscovery {
8
+ private registry;
9
+ private discoveryInterval;
10
+ constructor();
11
+ /** Start periodic discovery */
12
+ startPeriodicDiscovery(intervalMs?: number): void;
13
+ /** Stop periodic discovery */
14
+ stopPeriodicDiscovery(): void;
15
+ /** Discover new skills */
16
+ discover(): SkillDefinition[];
17
+ /** Check for skill updates */
18
+ checkForUpdates(): boolean;
19
+ }
20
+ export declare function getSkillsDiscovery(): SkillsDiscovery;
21
+ export declare function resetSkillsDiscovery(): void;
22
+ //# sourceMappingURL=discovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../src/skills/discovery.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAM/C,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAuC;IACvD,OAAO,CAAC,iBAAiB,CAA+B;;IAMxD,+BAA+B;IAC/B,sBAAsB,CAAC,UAAU,GAAE,MAAc,GAAG,IAAI;IAUxD,8BAA8B;IAC9B,qBAAqB,IAAI,IAAI;IAO7B,0BAA0B;IAC1B,QAAQ,IAAI,eAAe,EAAE;IAU7B,8BAA8B;IAC9B,eAAe,IAAI,OAAO;CAa3B;AAQD,wBAAgB,kBAAkB,IAAI,eAAe,CAKpD;AAED,wBAAgB,oBAAoB,IAAI,IAAI,CAK3C"}
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ /**
3
+ * openhorse - Skills Discovery
4
+ *
5
+ * 自动发现和热重载机制
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.SkillsDiscovery = void 0;
9
+ exports.getSkillsDiscovery = getSkillsDiscovery;
10
+ exports.resetSkillsDiscovery = resetSkillsDiscovery;
11
+ const registry_1 = require("./registry");
12
+ // ============================================================================
13
+ // Discovery Service
14
+ // ============================================================================
15
+ class SkillsDiscovery {
16
+ constructor() {
17
+ this.discoveryInterval = null;
18
+ this.registry = (0, registry_1.getSkillsRegistry)();
19
+ }
20
+ /** Start periodic discovery */
21
+ startPeriodicDiscovery(intervalMs = 60000) {
22
+ if (this.discoveryInterval) {
23
+ this.stopPeriodicDiscovery();
24
+ }
25
+ this.discoveryInterval = setInterval(() => {
26
+ this.discover();
27
+ }, intervalMs);
28
+ }
29
+ /** Stop periodic discovery */
30
+ stopPeriodicDiscovery() {
31
+ if (this.discoveryInterval) {
32
+ clearInterval(this.discoveryInterval);
33
+ this.discoveryInterval = null;
34
+ }
35
+ }
36
+ /** Discover new skills */
37
+ discover() {
38
+ // Reload skills from loader
39
+ const { getSkillsLoader } = require('./loader');
40
+ const loader = getSkillsLoader();
41
+ const newSkills = loader.load();
42
+ console.log(`[SkillsDiscovery] Discovered ${newSkills.length} skills`);
43
+ return newSkills;
44
+ }
45
+ /** Check for skill updates */
46
+ checkForUpdates() {
47
+ const { getSkillsLoader } = require('./loader');
48
+ const loader = getSkillsLoader();
49
+ const lastScan = loader.getLastScan();
50
+ // If more than 5 minutes since last scan, reload
51
+ if (Date.now() - lastScan > 5 * 60 * 1000) {
52
+ this.discover();
53
+ return true;
54
+ }
55
+ return false;
56
+ }
57
+ }
58
+ exports.SkillsDiscovery = SkillsDiscovery;
59
+ // ============================================================================
60
+ // Factory
61
+ // ============================================================================
62
+ let defaultDiscovery = null;
63
+ function getSkillsDiscovery() {
64
+ if (!defaultDiscovery) {
65
+ defaultDiscovery = new SkillsDiscovery();
66
+ }
67
+ return defaultDiscovery;
68
+ }
69
+ function resetSkillsDiscovery() {
70
+ if (defaultDiscovery) {
71
+ defaultDiscovery.stopPeriodicDiscovery();
72
+ }
73
+ defaultDiscovery = null;
74
+ }
75
+ //# sourceMappingURL=discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../src/skills/discovery.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAqEH,gDAKC;AAED,oDAKC;AA/ED,yCAA+C;AAG/C,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E;AAE/E,MAAa,eAAe;IAI1B;QAFQ,sBAAiB,GAA0B,IAAI,CAAC;QAGtD,IAAI,CAAC,QAAQ,GAAG,IAAA,4BAAiB,GAAE,CAAC;IACtC,CAAC;IAED,+BAA+B;IAC/B,sBAAsB,CAAC,aAAqB,KAAK;QAC/C,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC/B,CAAC;QAED,IAAI,CAAC,iBAAiB,GAAG,WAAW,CAAC,GAAG,EAAE;YACxC,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,CAAC,EAAE,UAAU,CAAC,CAAC;IACjB,CAAC;IAED,8BAA8B;IAC9B,qBAAqB;QACnB,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YACtC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAChC,CAAC;IACH,CAAC;IAED,0BAA0B;IAC1B,QAAQ;QACN,4BAA4B;QAC5B,MAAM,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;QACjC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QAEhC,OAAO,CAAC,GAAG,CAAC,gCAAgC,SAAS,CAAC,MAAM,SAAS,CAAC,CAAC;QACvE,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,8BAA8B;IAC9B,eAAe;QACb,MAAM,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;QAEtC,iDAAiD;QACjD,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;YAC1C,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AApDD,0CAoDC;AAED,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E,IAAI,gBAAgB,GAA2B,IAAI,CAAC;AAEpD,SAAgB,kBAAkB;IAChC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,gBAAgB,GAAG,IAAI,eAAe,EAAE,CAAC;IAC3C,CAAC;IACD,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED,SAAgB,oBAAoB;IAClC,IAAI,gBAAgB,EAAE,CAAC;QACrB,gBAAgB,CAAC,qBAAqB,EAAE,CAAC;IAC3C,CAAC;IACD,gBAAgB,GAAG,IAAI,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * openhorse - Skills System
3
+ *
4
+ * 可扩展技能插件系统
5
+ */
6
+ export * from './types';
7
+ export * from './loader';
8
+ export * from './registry';
9
+ export * from './discovery';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/skills/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC"}