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,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.KeyboardEvent = void 0;
4
+ const terminal_event_js_1 = require("./terminal-event.js");
5
+ /**
6
+ * Keyboard event dispatched through the DOM tree via capture/bubble.
7
+ *
8
+ * Follows browser KeyboardEvent semantics: `key` is the literal character
9
+ * for printable keys ('a', '3', ' ', '/') and a multi-char name for
10
+ * special keys ('down', 'return', 'escape', 'f1'). The idiomatic
11
+ * printable-char check is `e.key.length === 1`.
12
+ */
13
+ class KeyboardEvent extends terminal_event_js_1.TerminalEvent {
14
+ constructor(parsedKey) {
15
+ super('keydown', { bubbles: true, cancelable: true });
16
+ this.key = keyFromParsed(parsedKey);
17
+ this.ctrl = parsedKey.ctrl;
18
+ this.shift = parsedKey.shift;
19
+ this.meta = parsedKey.meta || parsedKey.option;
20
+ this.superKey = parsedKey.super;
21
+ this.fn = parsedKey.fn;
22
+ }
23
+ }
24
+ exports.KeyboardEvent = KeyboardEvent;
25
+ function keyFromParsed(parsed) {
26
+ const seq = parsed.sequence ?? '';
27
+ const name = parsed.name ?? '';
28
+ // Ctrl combos: sequence is a control byte (\x03 for ctrl+c), name is the
29
+ // letter. Browsers report e.key === 'c' with e.ctrlKey === true.
30
+ if (parsed.ctrl)
31
+ return name;
32
+ // Single printable char (space through ~, plus anything above ASCII):
33
+ // use the literal char. Browsers report e.key === '3', not 'Digit3'.
34
+ if (seq.length === 1) {
35
+ const code = seq.charCodeAt(0);
36
+ if (code >= 0x20 && code !== 0x7f)
37
+ return seq;
38
+ }
39
+ // Special keys (arrows, F-keys, return, tab, escape, etc.): sequence is
40
+ // either an escape sequence (\x1b[B) or a control byte (\r, \t), so use
41
+ // the parsed name. Browsers report e.key === 'ArrowDown'.
42
+ return name || seq;
43
+ }
44
+ //# sourceMappingURL=keyboard-event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyboard-event.js","sourceRoot":"","sources":["../../../src/ink/events/keyboard-event.ts"],"names":[],"mappings":";;;AACA,2DAAmD;AAEnD;;;;;;;GAOG;AACH,MAAa,aAAc,SAAQ,iCAAa;IAQ9C,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAA;QAErD,IAAI,CAAC,GAAG,GAAG,aAAa,CAAC,SAAS,CAAC,CAAA;QACnC,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAA;QAC1B,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAA;QAC5B,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,IAAI,SAAS,CAAC,MAAM,CAAA;QAC9C,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAA;QAC/B,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,CAAA;IACxB,CAAC;CACF;AAlBD,sCAkBC;AAED,SAAS,aAAa,CAAC,MAAiB;IACtC,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAA;IACjC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAA;IAE9B,yEAAyE;IACzE,iEAAiE;IACjE,IAAI,MAAM,CAAC,IAAI;QAAE,OAAO,IAAI,CAAA;IAE5B,sEAAsE;IACtE,qEAAqE;IACrE,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;QAC9B,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI;YAAE,OAAO,GAAG,CAAA;IAC/C,CAAC;IAED,wEAAwE;IACxE,wEAAwE;IACxE,0DAA0D;IAC1D,OAAO,IAAI,IAAI,GAAG,CAAA;AACpB,CAAC"}
@@ -0,0 +1,55 @@
1
+ import { Event } from './event.js';
2
+ type EventPhase = 'none' | 'capturing' | 'at_target' | 'bubbling';
3
+ type TerminalEventInit = {
4
+ bubbles?: boolean;
5
+ cancelable?: boolean;
6
+ };
7
+ /**
8
+ * Base class for all terminal events with DOM-style propagation.
9
+ *
10
+ * Extends Event so existing event types (ClickEvent, InputEvent,
11
+ * TerminalFocusEvent) share a common ancestor and can migrate later.
12
+ *
13
+ * Mirrors the browser's Event API: target, currentTarget, eventPhase,
14
+ * stopPropagation(), preventDefault(), timeStamp.
15
+ */
16
+ export declare class TerminalEvent extends Event {
17
+ readonly type: string;
18
+ readonly timeStamp: number;
19
+ readonly bubbles: boolean;
20
+ readonly cancelable: boolean;
21
+ private _target;
22
+ private _currentTarget;
23
+ private _eventPhase;
24
+ private _propagationStopped;
25
+ private _defaultPrevented;
26
+ constructor(type: string, init?: TerminalEventInit);
27
+ get target(): EventTarget | null;
28
+ get currentTarget(): EventTarget | null;
29
+ get eventPhase(): EventPhase;
30
+ get defaultPrevented(): boolean;
31
+ stopPropagation(): void;
32
+ stopImmediatePropagation(): void;
33
+ preventDefault(): void;
34
+ /** @internal */
35
+ _setTarget(target: EventTarget): void;
36
+ /** @internal */
37
+ _setCurrentTarget(target: EventTarget | null): void;
38
+ /** @internal */
39
+ _setEventPhase(phase: EventPhase): void;
40
+ /** @internal */
41
+ _isPropagationStopped(): boolean;
42
+ /** @internal */
43
+ _isImmediatePropagationStopped(): boolean;
44
+ /**
45
+ * Hook for subclasses to do per-node setup before each handler fires.
46
+ * Default is a no-op.
47
+ */
48
+ _prepareForTarget(_target: EventTarget): void;
49
+ }
50
+ export type EventTarget = {
51
+ parentNode: EventTarget | undefined;
52
+ _eventHandlers?: Record<string, unknown>;
53
+ };
54
+ export {};
55
+ //# sourceMappingURL=terminal-event.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-event.d.ts","sourceRoot":"","sources":["../../../src/ink/events/terminal-event.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAElC,KAAK,UAAU,GAAG,MAAM,GAAG,WAAW,GAAG,WAAW,GAAG,UAAU,CAAA;AAEjE,KAAK,iBAAiB,GAAG;IACvB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB,CAAA;AAED;;;;;;;;GAQG;AACH,qBAAa,aAAc,SAAQ,KAAK;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAA;IAE5B,OAAO,CAAC,OAAO,CAA2B;IAC1C,OAAO,CAAC,cAAc,CAA2B;IACjD,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,mBAAmB,CAAQ;IACnC,OAAO,CAAC,iBAAiB,CAAQ;gBAErB,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,iBAAiB;IAQlD,IAAI,MAAM,IAAI,WAAW,GAAG,IAAI,CAE/B;IAED,IAAI,aAAa,IAAI,WAAW,GAAG,IAAI,CAEtC;IAED,IAAI,UAAU,IAAI,UAAU,CAE3B;IAED,IAAI,gBAAgB,IAAI,OAAO,CAE9B;IAED,eAAe,IAAI,IAAI;IAId,wBAAwB,IAAI,IAAI;IAKzC,cAAc,IAAI,IAAI;IAQtB,gBAAgB;IAChB,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAIrC,gBAAgB;IAChB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,GAAG,IAAI;IAInD,gBAAgB;IAChB,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAIvC,gBAAgB;IAChB,qBAAqB,IAAI,OAAO;IAIhC,gBAAgB;IAChB,8BAA8B,IAAI,OAAO;IAIzC;;;OAGG;IACH,iBAAiB,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;CAC9C;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,UAAU,EAAE,WAAW,GAAG,SAAS,CAAA;IACnC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACzC,CAAA"}
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TerminalEvent = void 0;
4
+ const event_js_1 = require("./event.js");
5
+ /**
6
+ * Base class for all terminal events with DOM-style propagation.
7
+ *
8
+ * Extends Event so existing event types (ClickEvent, InputEvent,
9
+ * TerminalFocusEvent) share a common ancestor and can migrate later.
10
+ *
11
+ * Mirrors the browser's Event API: target, currentTarget, eventPhase,
12
+ * stopPropagation(), preventDefault(), timeStamp.
13
+ */
14
+ class TerminalEvent extends event_js_1.Event {
15
+ constructor(type, init) {
16
+ super();
17
+ this._target = null;
18
+ this._currentTarget = null;
19
+ this._eventPhase = 'none';
20
+ this._propagationStopped = false;
21
+ this._defaultPrevented = false;
22
+ this.type = type;
23
+ this.timeStamp = performance.now();
24
+ this.bubbles = init?.bubbles ?? true;
25
+ this.cancelable = init?.cancelable ?? true;
26
+ }
27
+ get target() {
28
+ return this._target;
29
+ }
30
+ get currentTarget() {
31
+ return this._currentTarget;
32
+ }
33
+ get eventPhase() {
34
+ return this._eventPhase;
35
+ }
36
+ get defaultPrevented() {
37
+ return this._defaultPrevented;
38
+ }
39
+ stopPropagation() {
40
+ this._propagationStopped = true;
41
+ }
42
+ stopImmediatePropagation() {
43
+ super.stopImmediatePropagation();
44
+ this._propagationStopped = true;
45
+ }
46
+ preventDefault() {
47
+ if (this.cancelable) {
48
+ this._defaultPrevented = true;
49
+ }
50
+ }
51
+ // -- Internal setters used by the Dispatcher
52
+ /** @internal */
53
+ _setTarget(target) {
54
+ this._target = target;
55
+ }
56
+ /** @internal */
57
+ _setCurrentTarget(target) {
58
+ this._currentTarget = target;
59
+ }
60
+ /** @internal */
61
+ _setEventPhase(phase) {
62
+ this._eventPhase = phase;
63
+ }
64
+ /** @internal */
65
+ _isPropagationStopped() {
66
+ return this._propagationStopped;
67
+ }
68
+ /** @internal */
69
+ _isImmediatePropagationStopped() {
70
+ return this.didStopImmediatePropagation();
71
+ }
72
+ /**
73
+ * Hook for subclasses to do per-node setup before each handler fires.
74
+ * Default is a no-op.
75
+ */
76
+ _prepareForTarget(_target) { }
77
+ }
78
+ exports.TerminalEvent = TerminalEvent;
79
+ //# sourceMappingURL=terminal-event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-event.js","sourceRoot":"","sources":["../../../src/ink/events/terminal-event.ts"],"names":[],"mappings":";;;AAAA,yCAAkC;AASlC;;;;;;;;GAQG;AACH,MAAa,aAAc,SAAQ,gBAAK;IAYtC,YAAY,IAAY,EAAE,IAAwB;QAChD,KAAK,EAAE,CAAA;QAPD,YAAO,GAAuB,IAAI,CAAA;QAClC,mBAAc,GAAuB,IAAI,CAAA;QACzC,gBAAW,GAAe,MAAM,CAAA;QAChC,wBAAmB,GAAG,KAAK,CAAA;QAC3B,sBAAiB,GAAG,KAAK,CAAA;QAI/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAA;QAClC,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,OAAO,IAAI,IAAI,CAAA;QACpC,IAAI,CAAC,UAAU,GAAG,IAAI,EAAE,UAAU,IAAI,IAAI,CAAA;IAC5C,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;IAED,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,cAAc,CAAA;IAC5B,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,WAAW,CAAA;IACzB,CAAC;IAED,IAAI,gBAAgB;QAClB,OAAO,IAAI,CAAC,iBAAiB,CAAA;IAC/B,CAAC;IAED,eAAe;QACb,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAA;IACjC,CAAC;IAEQ,wBAAwB;QAC/B,KAAK,CAAC,wBAAwB,EAAE,CAAA;QAChC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAA;IACjC,CAAC;IAED,cAAc;QACZ,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAA;QAC/B,CAAC;IACH,CAAC;IAED,6CAA6C;IAE7C,gBAAgB;IAChB,UAAU,CAAC,MAAmB;QAC5B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAA;IACvB,CAAC;IAED,gBAAgB;IAChB,iBAAiB,CAAC,MAA0B;QAC1C,IAAI,CAAC,cAAc,GAAG,MAAM,CAAA;IAC9B,CAAC;IAED,gBAAgB;IAChB,cAAc,CAAC,KAAiB;QAC9B,IAAI,CAAC,WAAW,GAAG,KAAK,CAAA;IAC1B,CAAC;IAED,gBAAgB;IAChB,qBAAqB;QACnB,OAAO,IAAI,CAAC,mBAAmB,CAAA;IACjC,CAAC;IAED,gBAAgB;IAChB,8BAA8B;QAC5B,OAAO,IAAI,CAAC,2BAA2B,EAAE,CAAA;IAC3C,CAAC;IAED;;;OAGG;IACH,iBAAiB,CAAC,OAAoB,IAAS,CAAC;CACjD;AAnFD,sCAmFC"}
@@ -0,0 +1,14 @@
1
+ import { Event } from './event.js';
2
+ export type TerminalFocusEventType = 'terminalfocus' | 'terminalblur';
3
+ /**
4
+ * Event fired when the terminal window gains or loses focus.
5
+ *
6
+ * Uses DECSET 1004 focus reporting - the terminal sends:
7
+ * - CSI I (\x1b[I) when the terminal gains focus
8
+ * - CSI O (\x1b[O) when the terminal loses focus
9
+ */
10
+ export declare class TerminalFocusEvent extends Event {
11
+ readonly type: TerminalFocusEventType;
12
+ constructor(type: TerminalFocusEventType);
13
+ }
14
+ //# sourceMappingURL=terminal-focus-event.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-focus-event.d.ts","sourceRoot":"","sources":["../../../src/ink/events/terminal-focus-event.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAElC,MAAM,MAAM,sBAAsB,GAAG,eAAe,GAAG,cAAc,CAAA;AAErE;;;;;;GAMG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAA;gBAEzB,IAAI,EAAE,sBAAsB;CAIzC"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TerminalFocusEvent = void 0;
4
+ const event_js_1 = require("./event.js");
5
+ /**
6
+ * Event fired when the terminal window gains or loses focus.
7
+ *
8
+ * Uses DECSET 1004 focus reporting - the terminal sends:
9
+ * - CSI I (\x1b[I) when the terminal gains focus
10
+ * - CSI O (\x1b[O) when the terminal loses focus
11
+ */
12
+ class TerminalFocusEvent extends event_js_1.Event {
13
+ constructor(type) {
14
+ super();
15
+ this.type = type;
16
+ }
17
+ }
18
+ exports.TerminalFocusEvent = TerminalFocusEvent;
19
+ //# sourceMappingURL=terminal-focus-event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-focus-event.js","sourceRoot":"","sources":["../../../src/ink/events/terminal-focus-event.ts"],"names":[],"mappings":";;;AAAA,yCAAkC;AAIlC;;;;;;GAMG;AACH,MAAa,kBAAmB,SAAQ,gBAAK;IAG3C,YAAY,IAA4B;QACtC,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAClB,CAAC;CACF;AAPD,gDAOC"}
@@ -0,0 +1,44 @@
1
+ import type { DOMElement } from './dom.js';
2
+ import { FocusEvent } from './events/focus-event.js';
3
+ /**
4
+ * DOM-like focus manager for the Ink terminal UI.
5
+ *
6
+ * Pure state — tracks activeElement and a focus stack. Has no reference
7
+ * to the tree; callers pass the root when tree walks are needed.
8
+ *
9
+ * Stored on the root DOMElement so any node can reach it by walking
10
+ * parentNode (like browser's `node.ownerDocument`).
11
+ */
12
+ export declare class FocusManager {
13
+ activeElement: DOMElement | null;
14
+ private dispatchFocusEvent;
15
+ private enabled;
16
+ private focusStack;
17
+ constructor(dispatchFocusEvent: (target: DOMElement, event: FocusEvent) => boolean);
18
+ focus(node: DOMElement): void;
19
+ blur(): void;
20
+ /**
21
+ * Called by the reconciler when a node is removed from the tree.
22
+ * Handles both the exact node and any focused descendant within
23
+ * the removed subtree. Dispatches blur and restores focus from stack.
24
+ */
25
+ handleNodeRemoved(node: DOMElement, root: DOMElement): void;
26
+ handleAutoFocus(node: DOMElement): void;
27
+ handleClickFocus(node: DOMElement): void;
28
+ enable(): void;
29
+ disable(): void;
30
+ focusNext(root: DOMElement): void;
31
+ focusPrevious(root: DOMElement): void;
32
+ private moveFocus;
33
+ }
34
+ /**
35
+ * Walk up to root and return it. The root is the node that holds
36
+ * the FocusManager — like browser's `node.getRootNode()`.
37
+ */
38
+ export declare function getRootNode(node: DOMElement): DOMElement;
39
+ /**
40
+ * Walk up to root and return its FocusManager.
41
+ * Like browser's `node.ownerDocument` — focus belongs to the root.
42
+ */
43
+ export declare function getFocusManager(node: DOMElement): FocusManager;
44
+ //# sourceMappingURL=focus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"focus.d.ts","sourceRoot":"","sources":["../../src/ink/focus.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAIpD;;;;;;;;GAQG;AACH,qBAAa,YAAY;IACvB,aAAa,EAAE,UAAU,GAAG,IAAI,CAAO;IACvC,OAAO,CAAC,kBAAkB,CAAoD;IAC9E,OAAO,CAAC,OAAO,CAAO;IACtB,OAAO,CAAC,UAAU,CAAmB;gBAGnC,kBAAkB,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,KAAK,OAAO;IAKxE,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAiB7B,IAAI,IAAI,IAAI;IAQZ;;;;OAIG;IACH,iBAAiB,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI;IA2B3D,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAIvC,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAMxC,MAAM,IAAI,IAAI;IAId,OAAO,IAAI,IAAI;IAIf,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAIjC,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAIrC,OAAO,CAAC,SAAS;CAsBlB;AA8BD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAOxD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,YAAY,CAE9D"}
@@ -0,0 +1,164 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FocusManager = void 0;
4
+ exports.getRootNode = getRootNode;
5
+ exports.getFocusManager = getFocusManager;
6
+ const focus_event_js_1 = require("./events/focus-event.js");
7
+ const MAX_FOCUS_STACK = 32;
8
+ /**
9
+ * DOM-like focus manager for the Ink terminal UI.
10
+ *
11
+ * Pure state — tracks activeElement and a focus stack. Has no reference
12
+ * to the tree; callers pass the root when tree walks are needed.
13
+ *
14
+ * Stored on the root DOMElement so any node can reach it by walking
15
+ * parentNode (like browser's `node.ownerDocument`).
16
+ */
17
+ class FocusManager {
18
+ constructor(dispatchFocusEvent) {
19
+ this.activeElement = null;
20
+ this.enabled = true;
21
+ this.focusStack = [];
22
+ this.dispatchFocusEvent = dispatchFocusEvent;
23
+ }
24
+ focus(node) {
25
+ if (node === this.activeElement)
26
+ return;
27
+ if (!this.enabled)
28
+ return;
29
+ const previous = this.activeElement;
30
+ if (previous) {
31
+ // Deduplicate before pushing to prevent unbounded growth from Tab cycling
32
+ const idx = this.focusStack.indexOf(previous);
33
+ if (idx !== -1)
34
+ this.focusStack.splice(idx, 1);
35
+ this.focusStack.push(previous);
36
+ if (this.focusStack.length > MAX_FOCUS_STACK)
37
+ this.focusStack.shift();
38
+ this.dispatchFocusEvent(previous, new focus_event_js_1.FocusEvent('blur', node));
39
+ }
40
+ this.activeElement = node;
41
+ this.dispatchFocusEvent(node, new focus_event_js_1.FocusEvent('focus', previous));
42
+ }
43
+ blur() {
44
+ if (!this.activeElement)
45
+ return;
46
+ const previous = this.activeElement;
47
+ this.activeElement = null;
48
+ this.dispatchFocusEvent(previous, new focus_event_js_1.FocusEvent('blur', null));
49
+ }
50
+ /**
51
+ * Called by the reconciler when a node is removed from the tree.
52
+ * Handles both the exact node and any focused descendant within
53
+ * the removed subtree. Dispatches blur and restores focus from stack.
54
+ */
55
+ handleNodeRemoved(node, root) {
56
+ // Remove the node and any descendants from the stack
57
+ this.focusStack = this.focusStack.filter(n => n !== node && isInTree(n, root));
58
+ // Check if activeElement is the removed node OR a descendant
59
+ if (!this.activeElement)
60
+ return;
61
+ if (this.activeElement !== node && isInTree(this.activeElement, root)) {
62
+ return;
63
+ }
64
+ const removed = this.activeElement;
65
+ this.activeElement = null;
66
+ this.dispatchFocusEvent(removed, new focus_event_js_1.FocusEvent('blur', null));
67
+ // Restore focus to the most recent still-mounted element
68
+ while (this.focusStack.length > 0) {
69
+ const candidate = this.focusStack.pop();
70
+ if (isInTree(candidate, root)) {
71
+ this.activeElement = candidate;
72
+ this.dispatchFocusEvent(candidate, new focus_event_js_1.FocusEvent('focus', removed));
73
+ return;
74
+ }
75
+ }
76
+ }
77
+ handleAutoFocus(node) {
78
+ this.focus(node);
79
+ }
80
+ handleClickFocus(node) {
81
+ const tabIndex = node.attributes['tabIndex'];
82
+ if (typeof tabIndex !== 'number')
83
+ return;
84
+ this.focus(node);
85
+ }
86
+ enable() {
87
+ this.enabled = true;
88
+ }
89
+ disable() {
90
+ this.enabled = false;
91
+ }
92
+ focusNext(root) {
93
+ this.moveFocus(1, root);
94
+ }
95
+ focusPrevious(root) {
96
+ this.moveFocus(-1, root);
97
+ }
98
+ moveFocus(direction, root) {
99
+ if (!this.enabled)
100
+ return;
101
+ const tabbable = collectTabbable(root);
102
+ if (tabbable.length === 0)
103
+ return;
104
+ const currentIndex = this.activeElement
105
+ ? tabbable.indexOf(this.activeElement)
106
+ : -1;
107
+ const nextIndex = currentIndex === -1
108
+ ? direction === 1
109
+ ? 0
110
+ : tabbable.length - 1
111
+ : (currentIndex + direction + tabbable.length) % tabbable.length;
112
+ const next = tabbable[nextIndex];
113
+ if (next) {
114
+ this.focus(next);
115
+ }
116
+ }
117
+ }
118
+ exports.FocusManager = FocusManager;
119
+ function collectTabbable(root) {
120
+ const result = [];
121
+ walkTree(root, result);
122
+ return result;
123
+ }
124
+ function walkTree(node, result) {
125
+ const tabIndex = node.attributes['tabIndex'];
126
+ if (typeof tabIndex === 'number' && tabIndex >= 0) {
127
+ result.push(node);
128
+ }
129
+ for (const child of node.childNodes) {
130
+ if (child.nodeName !== '#text') {
131
+ walkTree(child, result);
132
+ }
133
+ }
134
+ }
135
+ function isInTree(node, root) {
136
+ let current = node;
137
+ while (current) {
138
+ if (current === root)
139
+ return true;
140
+ current = current.parentNode;
141
+ }
142
+ return false;
143
+ }
144
+ /**
145
+ * Walk up to root and return it. The root is the node that holds
146
+ * the FocusManager — like browser's `node.getRootNode()`.
147
+ */
148
+ function getRootNode(node) {
149
+ let current = node;
150
+ while (current) {
151
+ if (current.focusManager)
152
+ return current;
153
+ current = current.parentNode;
154
+ }
155
+ throw new Error('Node is not in a tree with a FocusManager');
156
+ }
157
+ /**
158
+ * Walk up to root and return its FocusManager.
159
+ * Like browser's `node.ownerDocument` — focus belongs to the root.
160
+ */
161
+ function getFocusManager(node) {
162
+ return getRootNode(node).focusManager;
163
+ }
164
+ //# sourceMappingURL=focus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"focus.js","sourceRoot":"","sources":["../../src/ink/focus.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,95 @@
1
+ import type { Cursor } from './cursor.js';
2
+ import type { Size } from './layout/geometry.js';
3
+ import type { ScrollHint } from './render-node-to-output.js';
4
+ import { type CharPool, type HyperlinkPool, type Screen, type StylePool } from './screen.js';
5
+ export type Frame = {
6
+ readonly screen: Screen;
7
+ readonly viewport: Size;
8
+ readonly cursor: Cursor;
9
+ /** DECSTBM scroll optimization hint (alt-screen only, null otherwise). */
10
+ readonly scrollHint?: ScrollHint | null;
11
+ /** A ScrollBox has remaining pendingScrollDelta — schedule another frame. */
12
+ readonly scrollDrainPending?: boolean;
13
+ };
14
+ export declare function emptyFrame(rows: number, columns: number, stylePool: StylePool, charPool: CharPool, hyperlinkPool: HyperlinkPool): Frame;
15
+ export type FlickerReason = 'resize' | 'offscreen' | 'clear';
16
+ export type FrameEvent = {
17
+ durationMs: number;
18
+ /** Phase breakdown in ms + patch count. Populated when the ink instance
19
+ * has frame-timing instrumentation enabled (via onFrame wiring). */
20
+ phases?: {
21
+ /** createRenderer output: DOM → yoga layout → screen buffer */
22
+ renderer: number;
23
+ /** LogUpdate.render(): screen diff → Patch[] (the hot path this PR optimizes) */
24
+ diff: number;
25
+ /** optimize(): patch merge/dedupe */
26
+ optimize: number;
27
+ /** writeDiffToTerminal(): serialize patches → ANSI → stdout */
28
+ write: number;
29
+ /** Pre-optimize patch count (proxy for how much changed this frame) */
30
+ patches: number;
31
+ /** yoga calculateLayout() time (runs in resetAfterCommit, before onRender) */
32
+ yoga: number;
33
+ /** React reconcile time: scrollMutated → resetAfterCommit. 0 if no commit. */
34
+ commit: number;
35
+ /** layoutNode() calls this frame (recursive, includes cache-hit returns) */
36
+ yogaVisited: number;
37
+ /** measureFunc (text wrap/width) calls — the expensive part */
38
+ yogaMeasured: number;
39
+ /** early returns via _hasL single-slot cache */
40
+ yogaCacheHits: number;
41
+ /** total yoga Node instances alive (create - free). Growth = leak. */
42
+ yogaLive: number;
43
+ };
44
+ flickers: Array<{
45
+ desiredHeight: number;
46
+ availableHeight: number;
47
+ reason: FlickerReason;
48
+ }>;
49
+ };
50
+ export type Patch = {
51
+ type: 'stdout';
52
+ content: string;
53
+ } | {
54
+ type: 'clear';
55
+ count: number;
56
+ } | {
57
+ type: 'clearTerminal';
58
+ reason: FlickerReason;
59
+ debug?: {
60
+ triggerY: number;
61
+ prevLine: string;
62
+ nextLine: string;
63
+ };
64
+ } | {
65
+ type: 'cursorHide';
66
+ } | {
67
+ type: 'cursorShow';
68
+ } | {
69
+ type: 'cursorMove';
70
+ x: number;
71
+ y: number;
72
+ } | {
73
+ type: 'cursorTo';
74
+ col: number;
75
+ } | {
76
+ type: 'carriageReturn';
77
+ } | {
78
+ type: 'hyperlink';
79
+ uri: string;
80
+ } | {
81
+ type: 'styleStr';
82
+ str: string;
83
+ };
84
+ export type Diff = Patch[];
85
+ /**
86
+ * Determines whether the screen should be cleared based on the current and previous frame.
87
+ * Returns the reason for clearing, or undefined if no clear is needed.
88
+ *
89
+ * Screen clearing is triggered when:
90
+ * 1. Terminal has been resized (viewport dimensions changed) → 'resize'
91
+ * 2. Current frame screen height exceeds available terminal rows → 'offscreen'
92
+ * 3. Previous frame screen height exceeded available terminal rows → 'offscreen'
93
+ */
94
+ export declare function shouldClearScreen(prevFrame: Frame, frame: Frame): FlickerReason | undefined;
95
+ //# sourceMappingURL=frame.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frame.d.ts","sourceRoot":"","sources":["../../src/ink/frame.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EACL,KAAK,QAAQ,EAEb,KAAK,aAAa,EAClB,KAAK,MAAM,EACX,KAAK,SAAS,EACf,MAAM,aAAa,CAAA;AAEpB,MAAM,MAAM,KAAK,GAAG;IAClB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAA;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,0EAA0E;IAC1E,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI,CAAA;IACvC,6EAA6E;IAC7E,QAAQ,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAA;CACtC,CAAA;AAED,wBAAgB,UAAU,CACxB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,aAAa,GAC3B,KAAK,CAMP;AAED,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,WAAW,GAAG,OAAO,CAAA;AAE5D,MAAM,MAAM,UAAU,GAAG;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB;yEACqE;IACrE,MAAM,CAAC,EAAE;QACP,+DAA+D;QAC/D,QAAQ,EAAE,MAAM,CAAA;QAChB,iFAAiF;QACjF,IAAI,EAAE,MAAM,CAAA;QACZ,qCAAqC;QACrC,QAAQ,EAAE,MAAM,CAAA;QAChB,+DAA+D;QAC/D,KAAK,EAAE,MAAM,CAAA;QACb,uEAAuE;QACvE,OAAO,EAAE,MAAM,CAAA;QACf,8EAA8E;QAC9E,IAAI,EAAE,MAAM,CAAA;QACZ,8EAA8E;QAC9E,MAAM,EAAE,MAAM,CAAA;QACd,4EAA4E;QAC5E,WAAW,EAAE,MAAM,CAAA;QACnB,+DAA+D;QAC/D,YAAY,EAAE,MAAM,CAAA;QACpB,gDAAgD;QAChD,aAAa,EAAE,MAAM,CAAA;QACrB,sEAAsE;QACtE,QAAQ,EAAE,MAAM,CAAA;KACjB,CAAA;IACD,QAAQ,EAAE,KAAK,CAAC;QACd,aAAa,EAAE,MAAM,CAAA;QACrB,eAAe,EAAE,MAAM,CAAA;QACvB,MAAM,EAAE,aAAa,CAAA;KACtB,CAAC,CAAA;CACH,CAAA;AAED,MAAM,MAAM,KAAK,GACb;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAChC;IACE,IAAI,EAAE,eAAe,CAAA;IACrB,MAAM,EAAE,aAAa,CAAA;IAIrB,KAAK,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAA;CACjE,GACD;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,GACtB;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,GACtB;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5C;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,GAC1B;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAGlC;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAA;AAErC,MAAM,MAAM,IAAI,GAAG,KAAK,EAAE,CAAA;AAE1B;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,KAAK,EAChB,KAAK,EAAE,KAAK,GACX,aAAa,GAAG,SAAS,CAgB3B"}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.emptyFrame = emptyFrame;
4
+ exports.shouldClearScreen = shouldClearScreen;
5
+ const screen_js_1 = require("./screen.js");
6
+ function emptyFrame(rows, columns, stylePool, charPool, hyperlinkPool) {
7
+ return {
8
+ screen: (0, screen_js_1.createScreen)(0, 0, stylePool, charPool, hyperlinkPool),
9
+ viewport: { width: columns, height: rows },
10
+ cursor: { x: 0, y: 0, visible: true },
11
+ };
12
+ }
13
+ /**
14
+ * Determines whether the screen should be cleared based on the current and previous frame.
15
+ * Returns the reason for clearing, or undefined if no clear is needed.
16
+ *
17
+ * Screen clearing is triggered when:
18
+ * 1. Terminal has been resized (viewport dimensions changed) → 'resize'
19
+ * 2. Current frame screen height exceeds available terminal rows → 'offscreen'
20
+ * 3. Previous frame screen height exceeded available terminal rows → 'offscreen'
21
+ */
22
+ function shouldClearScreen(prevFrame, frame) {
23
+ const didResize = frame.viewport.height !== prevFrame.viewport.height ||
24
+ frame.viewport.width !== prevFrame.viewport.width;
25
+ if (didResize) {
26
+ return 'resize';
27
+ }
28
+ const currentFrameOverflows = frame.screen.height >= frame.viewport.height;
29
+ const previousFrameOverflowed = prevFrame.screen.height >= prevFrame.viewport.height;
30
+ if (currentFrameOverflows || previousFrameOverflowed) {
31
+ return 'offscreen';
32
+ }
33
+ return undefined;
34
+ }
35
+ //# sourceMappingURL=frame.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frame.js","sourceRoot":"","sources":["../../src/ink/frame.ts"],"names":[],"mappings":";;AAqBA,gCAYC;AAuED,8CAmBC;AAxHD,2CAMoB;AAYpB,SAAgB,UAAU,CACxB,IAAY,EACZ,OAAe,EACf,SAAoB,EACpB,QAAkB,EAClB,aAA4B;IAE5B,OAAO;QACL,MAAM,EAAE,IAAA,wBAAY,EAAC,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,CAAC;QAC9D,QAAQ,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE;QAC1C,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE;KACtC,CAAA;AACH,CAAC;AA8DD;;;;;;;;GAQG;AACH,SAAgB,iBAAiB,CAC/B,SAAgB,EAChB,KAAY;IAEZ,MAAM,SAAS,GACb,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,SAAS,CAAC,QAAQ,CAAC,MAAM;QACnD,KAAK,CAAC,QAAQ,CAAC,KAAK,KAAK,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAA;IACnD,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,MAAM,qBAAqB,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAA;IAC1E,MAAM,uBAAuB,GAC3B,SAAS,CAAC,MAAM,CAAC,MAAM,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAA;IACtD,IAAI,qBAAqB,IAAI,uBAAuB,EAAE,CAAC;QACrD,OAAO,WAAW,CAAA;IACpB,CAAC;IAED,OAAO,SAAS,CAAA;AAClB,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { type LayoutNode } from './layout/node.js';
2
+ /**
3
+ * Returns the yoga node's content width (computed width minus padding and
4
+ * border).
5
+ *
6
+ * Warning: can return a value WIDER than the parent container. In a
7
+ * column-direction flex parent, width is the cross axis — align-items:
8
+ * stretch never shrinks children below their intrinsic size, so the text
9
+ * node overflows (standard CSS behavior). Yoga measures leaf nodes in two
10
+ * passes: the AtMost pass determines width, the Exactly pass determines
11
+ * height. getComputedWidth() reflects the wider AtMost result while
12
+ * getComputedHeight() reflects the narrower Exactly result. Callers that
13
+ * use this for wrapping should clamp to actual available screen space so
14
+ * the rendered line count stays consistent with the layout height.
15
+ */
16
+ declare const getMaxWidth: (yogaNode: LayoutNode) => number;
17
+ export default getMaxWidth;
18
+ //# sourceMappingURL=get-max-width.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-max-width.d.ts","sourceRoot":"","sources":["../../src/ink/get-max-width.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE9D;;;;;;;;;;;;;GAaG;AACH,QAAA,MAAM,WAAW,GAAI,UAAU,UAAU,KAAG,MAQ3C,CAAA;AAED,eAAe,WAAW,CAAA"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const node_js_1 = require("./layout/node.js");
4
+ /**
5
+ * Returns the yoga node's content width (computed width minus padding and
6
+ * border).
7
+ *
8
+ * Warning: can return a value WIDER than the parent container. In a
9
+ * column-direction flex parent, width is the cross axis — align-items:
10
+ * stretch never shrinks children below their intrinsic size, so the text
11
+ * node overflows (standard CSS behavior). Yoga measures leaf nodes in two
12
+ * passes: the AtMost pass determines width, the Exactly pass determines
13
+ * height. getComputedWidth() reflects the wider AtMost result while
14
+ * getComputedHeight() reflects the narrower Exactly result. Callers that
15
+ * use this for wrapping should clamp to actual available screen space so
16
+ * the rendered line count stays consistent with the layout height.
17
+ */
18
+ const getMaxWidth = (yogaNode) => {
19
+ return (yogaNode.getComputedWidth() -
20
+ yogaNode.getComputedPadding(node_js_1.LayoutEdge.Left) -
21
+ yogaNode.getComputedPadding(node_js_1.LayoutEdge.Right) -
22
+ yogaNode.getComputedBorder(node_js_1.LayoutEdge.Left) -
23
+ yogaNode.getComputedBorder(node_js_1.LayoutEdge.Right));
24
+ };
25
+ exports.default = getMaxWidth;
26
+ //# sourceMappingURL=get-max-width.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-max-width.js","sourceRoot":"","sources":["../../src/ink/get-max-width.ts"],"names":[],"mappings":";;AAAA,8CAA8D;AAE9D;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,GAAG,CAAC,QAAoB,EAAU,EAAE;IACnD,OAAO,CACL,QAAQ,CAAC,gBAAgB,EAAE;QAC3B,QAAQ,CAAC,kBAAkB,CAAC,oBAAU,CAAC,IAAI,CAAC;QAC5C,QAAQ,CAAC,kBAAkB,CAAC,oBAAU,CAAC,KAAK,CAAC;QAC7C,QAAQ,CAAC,iBAAiB,CAAC,oBAAU,CAAC,IAAI,CAAC;QAC3C,QAAQ,CAAC,iBAAiB,CAAC,oBAAU,CAAC,KAAK,CAAC,CAC7C,CAAA;AACH,CAAC,CAAA;AAED,kBAAe,WAAW,CAAA"}