indusagi 0.12.6 → 0.12.8

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 (684) hide show
  1. package/dist/agent/agent-loop.d.ts.map +1 -1
  2. package/dist/agent/agent-loop.js +10 -1
  3. package/dist/agent/agent-loop.js.map +1 -1
  4. package/dist/agent/agent.d.ts +2 -1
  5. package/dist/agent/agent.d.ts.map +1 -1
  6. package/dist/agent/agent.js +30 -38
  7. package/dist/agent/agent.js.map +1 -1
  8. package/dist/agent/error-handler.d.ts +8 -0
  9. package/dist/agent/error-handler.d.ts.map +1 -0
  10. package/dist/agent/error-handler.js +8 -0
  11. package/dist/agent/error-handler.js.map +1 -0
  12. package/dist/agent/event-bus.d.ts +9 -0
  13. package/dist/agent/event-bus.d.ts.map +1 -0
  14. package/dist/agent/event-bus.js +17 -0
  15. package/dist/agent/event-bus.js.map +1 -0
  16. package/dist/agent/index.d.ts +1 -0
  17. package/dist/agent/index.d.ts.map +1 -1
  18. package/dist/agent/index.js +2 -0
  19. package/dist/agent/index.js.map +1 -1
  20. package/dist/agent/proxy.d.ts +13 -19
  21. package/dist/agent/proxy.d.ts.map +1 -1
  22. package/dist/agent/proxy.js +45 -4
  23. package/dist/agent/proxy.js.map +1 -1
  24. package/dist/agent/state-manager.d.ts +22 -0
  25. package/dist/agent/state-manager.d.ts.map +1 -0
  26. package/dist/agent/state-manager.js +59 -0
  27. package/dist/agent/state-manager.js.map +1 -0
  28. package/dist/agent/telemetry.d.ts +7 -0
  29. package/dist/agent/telemetry.d.ts.map +1 -0
  30. package/dist/agent/telemetry.js +20 -0
  31. package/dist/agent/telemetry.js.map +1 -0
  32. package/dist/agent/tools/bash.d.ts +56 -0
  33. package/dist/agent/tools/bash.d.ts.map +1 -0
  34. package/dist/agent/tools/bash.js +250 -0
  35. package/dist/agent/tools/bash.js.map +1 -0
  36. package/dist/agent/tools/edit-diff.d.ts +63 -0
  37. package/dist/agent/tools/edit-diff.d.ts.map +1 -0
  38. package/dist/agent/tools/edit-diff.js +241 -0
  39. package/dist/agent/tools/edit-diff.js.map +1 -0
  40. package/dist/agent/tools/edit.d.ts +42 -0
  41. package/dist/agent/tools/edit.d.ts.map +1 -0
  42. package/dist/agent/tools/edit.js +160 -0
  43. package/dist/agent/tools/edit.js.map +1 -0
  44. package/dist/agent/tools/find.d.ts +26 -0
  45. package/dist/agent/tools/find.d.ts.map +1 -0
  46. package/dist/agent/tools/find.js +135 -0
  47. package/dist/agent/tools/find.js.map +1 -0
  48. package/dist/agent/tools/grep.d.ts +43 -0
  49. package/dist/agent/tools/grep.d.ts.map +1 -0
  50. package/dist/agent/tools/grep.js +189 -0
  51. package/dist/agent/tools/grep.js.map +1 -0
  52. package/dist/agent/tools/index.d.ts +174 -0
  53. package/dist/agent/tools/index.d.ts.map +1 -0
  54. package/dist/agent/tools/index.js +142 -0
  55. package/dist/agent/tools/index.js.map +1 -0
  56. package/dist/agent/tools/ls.d.ts +40 -0
  57. package/dist/agent/tools/ls.d.ts.map +1 -0
  58. package/dist/agent/tools/ls.js +123 -0
  59. package/dist/agent/tools/ls.js.map +1 -0
  60. package/dist/agent/tools/path-utils.d.ts +8 -0
  61. package/dist/agent/tools/path-utils.d.ts.map +1 -0
  62. package/dist/agent/tools/path-utils.js +56 -0
  63. package/dist/agent/tools/path-utils.js.map +1 -0
  64. package/dist/agent/tools/read.d.ts +37 -0
  65. package/dist/agent/tools/read.d.ts.map +1 -0
  66. package/dist/agent/tools/read.js +168 -0
  67. package/dist/agent/tools/read.js.map +1 -0
  68. package/dist/agent/tools/registry.d.ts +21 -0
  69. package/dist/agent/tools/registry.d.ts.map +1 -0
  70. package/dist/agent/tools/registry.js +25 -0
  71. package/dist/agent/tools/registry.js.map +1 -0
  72. package/dist/agent/tools/task.d.ts +26 -0
  73. package/dist/agent/tools/task.d.ts.map +1 -0
  74. package/dist/agent/tools/task.js +36 -0
  75. package/dist/agent/tools/task.js.map +1 -0
  76. package/dist/agent/tools/todo-store.d.ts +24 -0
  77. package/dist/agent/tools/todo-store.d.ts.map +1 -0
  78. package/dist/agent/tools/todo-store.js +36 -0
  79. package/dist/agent/tools/todo-store.js.map +1 -0
  80. package/dist/agent/tools/todo.d.ts +30 -0
  81. package/dist/agent/tools/todo.d.ts.map +1 -0
  82. package/dist/agent/tools/todo.js +62 -0
  83. package/dist/agent/tools/todo.js.map +1 -0
  84. package/dist/agent/tools/truncate.d.ts +73 -0
  85. package/dist/agent/tools/truncate.d.ts.map +1 -0
  86. package/dist/agent/tools/truncate.js +205 -0
  87. package/dist/agent/tools/truncate.js.map +1 -0
  88. package/dist/agent/tools/utils/hook-runner.d.ts +14 -0
  89. package/dist/agent/tools/utils/hook-runner.d.ts.map +1 -0
  90. package/dist/agent/tools/utils/hook-runner.js +31 -0
  91. package/dist/agent/tools/utils/hook-runner.js.map +1 -0
  92. package/dist/agent/tools/utils/image-resize.d.ts +33 -0
  93. package/dist/agent/tools/utils/image-resize.d.ts.map +1 -0
  94. package/dist/agent/tools/utils/image-resize.js +47 -0
  95. package/dist/agent/tools/utils/image-resize.js.map +1 -0
  96. package/dist/agent/tools/utils/mime.d.ts +10 -0
  97. package/dist/agent/tools/utils/mime.d.ts.map +1 -0
  98. package/dist/agent/tools/utils/mime.js +54 -0
  99. package/dist/agent/tools/utils/mime.js.map +1 -0
  100. package/dist/agent/tools/utils/shell.d.ts +35 -0
  101. package/dist/agent/tools/utils/shell.d.ts.map +1 -0
  102. package/dist/agent/tools/utils/shell.js +146 -0
  103. package/dist/agent/tools/utils/shell.js.map +1 -0
  104. package/dist/agent/tools/webfetch.d.ts +36 -0
  105. package/dist/agent/tools/webfetch.d.ts.map +1 -0
  106. package/dist/agent/tools/webfetch.js +247 -0
  107. package/dist/agent/tools/webfetch.js.map +1 -0
  108. package/dist/agent/tools/websearch.d.ts +35 -0
  109. package/dist/agent/tools/websearch.d.ts.map +1 -0
  110. package/dist/agent/tools/websearch.js +89 -0
  111. package/dist/agent/tools/websearch.js.map +1 -0
  112. package/dist/agent/tools/write.d.ts +31 -0
  113. package/dist/agent/tools/write.d.ts.map +1 -0
  114. package/dist/agent/tools/write.js +96 -0
  115. package/dist/agent/tools/write.js.map +1 -0
  116. package/dist/agent/types.d.ts +22 -1
  117. package/dist/agent/types.d.ts.map +1 -1
  118. package/dist/agent/types.js +44 -1
  119. package/dist/agent/types.js.map +1 -1
  120. package/dist/ai/api-registry.d.ts +34 -4
  121. package/dist/ai/api-registry.d.ts.map +1 -1
  122. package/dist/ai/api-registry.js +97 -19
  123. package/dist/ai/api-registry.js.map +1 -1
  124. package/dist/ai/cli.js +24 -3
  125. package/dist/ai/cli.js.map +1 -1
  126. package/dist/ai/env-api-keys.d.ts +9 -0
  127. package/dist/ai/env-api-keys.d.ts.map +1 -1
  128. package/dist/ai/env-api-keys.js +23 -0
  129. package/dist/ai/env-api-keys.js.map +1 -1
  130. package/dist/ai/index.d.ts +4 -2
  131. package/dist/ai/index.d.ts.map +1 -1
  132. package/dist/ai/index.js +4 -2
  133. package/dist/ai/index.js.map +1 -1
  134. package/dist/ai/models.d.ts +30 -0
  135. package/dist/ai/models.d.ts.map +1 -1
  136. package/dist/ai/models.generated.d.ts +1 -0
  137. package/dist/ai/models.generated.d.ts.map +1 -1
  138. package/dist/ai/models.js +90 -18
  139. package/dist/ai/models.js.map +1 -1
  140. package/dist/ai/providers/amazon-bedrock.d.ts +19 -1
  141. package/dist/ai/providers/amazon-bedrock.d.ts.map +1 -1
  142. package/dist/ai/providers/amazon-bedrock.js +68 -40
  143. package/dist/ai/providers/amazon-bedrock.js.map +1 -1
  144. package/dist/ai/providers/anthropic.d.ts +50 -1
  145. package/dist/ai/providers/anthropic.d.ts.map +1 -1
  146. package/dist/ai/providers/anthropic.js +204 -161
  147. package/dist/ai/providers/anthropic.js.map +1 -1
  148. package/dist/ai/providers/azure-openai-responses.d.ts.map +1 -1
  149. package/dist/ai/providers/azure-openai-responses.js +36 -28
  150. package/dist/ai/providers/azure-openai-responses.js.map +1 -1
  151. package/dist/ai/providers/google-shared.d.ts +9 -0
  152. package/dist/ai/providers/google-shared.d.ts.map +1 -1
  153. package/dist/ai/providers/google-shared.js +16 -0
  154. package/dist/ai/providers/google-shared.js.map +1 -1
  155. package/dist/ai/providers/google-vertex.d.ts.map +1 -1
  156. package/dist/ai/providers/google-vertex.js +33 -26
  157. package/dist/ai/providers/google-vertex.js.map +1 -1
  158. package/dist/ai/providers/google.d.ts.map +1 -1
  159. package/dist/ai/providers/google.js +33 -26
  160. package/dist/ai/providers/google.js.map +1 -1
  161. package/dist/ai/providers/kimi.d.ts.map +1 -1
  162. package/dist/ai/providers/kimi.js +34 -24
  163. package/dist/ai/providers/kimi.js.map +1 -1
  164. package/dist/ai/providers/openai-codex-responses.d.ts.map +1 -1
  165. package/dist/ai/providers/openai-codex-responses.js +33 -25
  166. package/dist/ai/providers/openai-codex-responses.js.map +1 -1
  167. package/dist/ai/providers/openai-completions.d.ts +10 -0
  168. package/dist/ai/providers/openai-completions.d.ts.map +1 -1
  169. package/dist/ai/providers/openai-completions.js +51 -26
  170. package/dist/ai/providers/openai-completions.js.map +1 -1
  171. package/dist/ai/providers/openai-responses-shared.d.ts +9 -0
  172. package/dist/ai/providers/openai-responses-shared.d.ts.map +1 -1
  173. package/dist/ai/providers/openai-responses-shared.js +18 -2
  174. package/dist/ai/providers/openai-responses-shared.js.map +1 -1
  175. package/dist/ai/providers/openai-responses.d.ts.map +1 -1
  176. package/dist/ai/providers/openai-responses.js +35 -32
  177. package/dist/ai/providers/openai-responses.js.map +1 -1
  178. package/dist/ai/providers/register-builtins.d.ts.map +1 -1
  179. package/dist/ai/providers/register-builtins.js +17 -8
  180. package/dist/ai/providers/register-builtins.js.map +1 -1
  181. package/dist/ai/providers/simple-options.d.ts +19 -0
  182. package/dist/ai/providers/simple-options.d.ts.map +1 -1
  183. package/dist/ai/providers/simple-options.js +62 -0
  184. package/dist/ai/providers/simple-options.js.map +1 -1
  185. package/dist/ai/providers/transform-messages.d.ts +14 -0
  186. package/dist/ai/providers/transform-messages.d.ts.map +1 -1
  187. package/dist/ai/providers/transform-messages.js +99 -96
  188. package/dist/ai/providers/transform-messages.js.map +1 -1
  189. package/dist/ai/stream.d.ts +17 -3
  190. package/dist/ai/stream.d.ts.map +1 -1
  191. package/dist/ai/stream.js +61 -6
  192. package/dist/ai/stream.js.map +1 -1
  193. package/dist/ai/types.d.ts +17 -0
  194. package/dist/ai/types.d.ts.map +1 -1
  195. package/dist/ai/types.js +87 -1
  196. package/dist/ai/types.js.map +1 -1
  197. package/dist/ai/types.test.d.ts +8 -0
  198. package/dist/ai/types.test.d.ts.map +1 -0
  199. package/dist/ai/types.test.js +389 -0
  200. package/dist/ai/types.test.js.map +1 -0
  201. package/dist/ai/utils/base-stream-handler.d.ts +16 -0
  202. package/dist/ai/utils/base-stream-handler.d.ts.map +1 -0
  203. package/dist/ai/utils/base-stream-handler.js +24 -0
  204. package/dist/ai/utils/base-stream-handler.js.map +1 -0
  205. package/dist/ai/utils/event-stream.d.ts +26 -4
  206. package/dist/ai/utils/event-stream.d.ts.map +1 -1
  207. package/dist/ai/utils/event-stream.js +89 -5
  208. package/dist/ai/utils/event-stream.js.map +1 -1
  209. package/dist/ai/utils/index.d.ts +15 -0
  210. package/dist/ai/utils/index.d.ts.map +1 -0
  211. package/dist/ai/utils/index.js +15 -0
  212. package/dist/ai/utils/index.js.map +1 -0
  213. package/dist/ai/utils/json-parse.d.ts +13 -4
  214. package/dist/ai/utils/json-parse.d.ts.map +1 -1
  215. package/dist/ai/utils/json-parse.js +31 -19
  216. package/dist/ai/utils/json-parse.js.map +1 -1
  217. package/dist/ai/utils/message-transform.d.ts +29 -0
  218. package/dist/ai/utils/message-transform.d.ts.map +1 -0
  219. package/dist/ai/utils/message-transform.js +55 -0
  220. package/dist/ai/utils/message-transform.js.map +1 -0
  221. package/dist/ai/utils/oauth/anthropic.d.ts +1 -0
  222. package/dist/ai/utils/oauth/anthropic.d.ts.map +1 -1
  223. package/dist/ai/utils/oauth/anthropic.js +3 -0
  224. package/dist/ai/utils/oauth/anthropic.js.map +1 -1
  225. package/dist/ai/utils/oauth/github-copilot.d.ts +1 -0
  226. package/dist/ai/utils/oauth/github-copilot.d.ts.map +1 -1
  227. package/dist/ai/utils/oauth/github-copilot.js +3 -0
  228. package/dist/ai/utils/oauth/github-copilot.js.map +1 -1
  229. package/dist/ai/utils/oauth/index.d.ts +2 -1
  230. package/dist/ai/utils/oauth/index.d.ts.map +1 -1
  231. package/dist/ai/utils/oauth/index.js +10 -0
  232. package/dist/ai/utils/oauth/index.js.map +1 -1
  233. package/dist/ai/utils/oauth/kimi.d.ts +1 -0
  234. package/dist/ai/utils/oauth/kimi.d.ts.map +1 -1
  235. package/dist/ai/utils/oauth/kimi.js +3 -0
  236. package/dist/ai/utils/oauth/kimi.js.map +1 -1
  237. package/dist/ai/utils/oauth/openai-codex.d.ts +1 -0
  238. package/dist/ai/utils/oauth/openai-codex.d.ts.map +1 -1
  239. package/dist/ai/utils/oauth/openai-codex.js +3 -0
  240. package/dist/ai/utils/oauth/openai-codex.js.map +1 -1
  241. package/dist/ai/utils/oauth/pkce.d.ts +1 -0
  242. package/dist/ai/utils/oauth/pkce.d.ts.map +1 -1
  243. package/dist/ai/utils/oauth/pkce.js +5 -0
  244. package/dist/ai/utils/oauth/pkce.js.map +1 -1
  245. package/dist/ai/utils/oauth/types.d.ts +6 -0
  246. package/dist/ai/utils/oauth/types.d.ts.map +1 -1
  247. package/dist/ai/utils/output-factory.d.ts +3 -0
  248. package/dist/ai/utils/output-factory.d.ts.map +1 -0
  249. package/dist/ai/utils/output-factory.js +23 -0
  250. package/dist/ai/utils/output-factory.js.map +1 -0
  251. package/dist/ai/utils/overflow.d.ts +6 -47
  252. package/dist/ai/utils/overflow.d.ts.map +1 -1
  253. package/dist/ai/utils/overflow.js +28 -92
  254. package/dist/ai/utils/overflow.js.map +1 -1
  255. package/dist/ai/utils/provider-adapter.d.ts +57 -0
  256. package/dist/ai/utils/provider-adapter.d.ts.map +1 -0
  257. package/dist/ai/utils/provider-adapter.js +28 -0
  258. package/dist/ai/utils/provider-adapter.js.map +1 -0
  259. package/dist/ai/utils/provider-client-builder.d.ts +37 -0
  260. package/dist/ai/utils/provider-client-builder.d.ts.map +1 -0
  261. package/dist/ai/utils/provider-client-builder.js +50 -0
  262. package/dist/ai/utils/provider-client-builder.js.map +1 -0
  263. package/dist/ai/utils/provider-consolidation.d.ts +4 -0
  264. package/dist/ai/utils/provider-consolidation.d.ts.map +1 -0
  265. package/dist/ai/utils/provider-consolidation.js +33 -0
  266. package/dist/ai/utils/provider-consolidation.js.map +1 -0
  267. package/dist/ai/utils/provider-constants.d.ts +35 -0
  268. package/dist/ai/utils/provider-constants.d.ts.map +1 -0
  269. package/dist/ai/utils/provider-constants.js +35 -0
  270. package/dist/ai/utils/provider-constants.js.map +1 -0
  271. package/dist/ai/utils/provider-errors.d.ts +46 -0
  272. package/dist/ai/utils/provider-errors.d.ts.map +1 -0
  273. package/dist/ai/utils/provider-errors.js +101 -0
  274. package/dist/ai/utils/provider-errors.js.map +1 -0
  275. package/dist/ai/utils/sanitize-unicode.d.ts +1 -0
  276. package/dist/ai/utils/sanitize-unicode.d.ts.map +1 -1
  277. package/dist/ai/utils/sanitize-unicode.js +16 -0
  278. package/dist/ai/utils/sanitize-unicode.js.map +1 -1
  279. package/dist/ai/utils/stream-event-helper.d.ts +28 -0
  280. package/dist/ai/utils/stream-event-helper.d.ts.map +1 -0
  281. package/dist/ai/utils/stream-event-helper.js +49 -0
  282. package/dist/ai/utils/stream-event-helper.js.map +1 -0
  283. package/dist/ai/utils/stream-handler-types.d.ts +43 -0
  284. package/dist/ai/utils/stream-handler-types.d.ts.map +1 -0
  285. package/dist/ai/utils/stream-handler-types.js +18 -0
  286. package/dist/ai/utils/stream-handler-types.js.map +1 -0
  287. package/dist/ai/utils/streaming-state-manager.d.ts +50 -0
  288. package/dist/ai/utils/streaming-state-manager.d.ts.map +1 -0
  289. package/dist/ai/utils/streaming-state-manager.js +65 -0
  290. package/dist/ai/utils/streaming-state-manager.js.map +1 -0
  291. package/dist/ai/utils/tool-converter.d.ts +50 -0
  292. package/dist/ai/utils/tool-converter.d.ts.map +1 -0
  293. package/dist/ai/utils/tool-converter.js +54 -0
  294. package/dist/ai/utils/tool-converter.js.map +1 -0
  295. package/dist/ai/utils/typebox-helpers.d.ts +6 -1
  296. package/dist/ai/utils/typebox-helpers.d.ts.map +1 -1
  297. package/dist/ai/utils/typebox-helpers.js +7 -0
  298. package/dist/ai/utils/typebox-helpers.js.map +1 -1
  299. package/dist/ai/utils/validation.d.ts +6 -0
  300. package/dist/ai/utils/validation.d.ts.map +1 -1
  301. package/dist/ai/utils/validation.js +23 -9
  302. package/dist/ai/utils/validation.js.map +1 -1
  303. package/dist/index.d.ts +0 -1
  304. package/dist/index.d.ts.map +1 -1
  305. package/dist/index.js +0 -1
  306. package/dist/index.js.map +1 -1
  307. package/dist/tui/autocomplete.d.ts +17 -0
  308. package/dist/tui/autocomplete.d.ts.map +1 -1
  309. package/dist/tui/autocomplete.js +33 -3
  310. package/dist/tui/autocomplete.js.map +1 -1
  311. package/dist/tui/components/box.d.ts +2 -2
  312. package/dist/tui/components/box.d.ts.map +1 -1
  313. package/dist/tui/components/box.js +7 -5
  314. package/dist/tui/components/box.js.map +1 -1
  315. package/dist/tui/components/cancellable-loader.d.ts +1 -0
  316. package/dist/tui/components/cancellable-loader.d.ts.map +1 -1
  317. package/dist/tui/components/cancellable-loader.js +4 -0
  318. package/dist/tui/components/cancellable-loader.js.map +1 -1
  319. package/dist/tui/components/editor.d.ts +2 -2
  320. package/dist/tui/components/editor.d.ts.map +1 -1
  321. package/dist/tui/components/editor.js +6 -3
  322. package/dist/tui/components/editor.js.map +1 -1
  323. package/dist/tui/components/image.d.ts +2 -2
  324. package/dist/tui/components/image.d.ts.map +1 -1
  325. package/dist/tui/components/image.js +35 -33
  326. package/dist/tui/components/image.js.map +1 -1
  327. package/dist/tui/components/input.d.ts +2 -2
  328. package/dist/tui/components/input.d.ts.map +1 -1
  329. package/dist/tui/components/input.js +6 -3
  330. package/dist/tui/components/input.js.map +1 -1
  331. package/dist/tui/components/loader.d.ts +2 -0
  332. package/dist/tui/components/loader.d.ts.map +1 -1
  333. package/dist/tui/components/loader.js +8 -0
  334. package/dist/tui/components/loader.js.map +1 -1
  335. package/dist/tui/components/markdown.d.ts +2 -2
  336. package/dist/tui/components/markdown.d.ts.map +1 -1
  337. package/dist/tui/components/markdown.js +61 -57
  338. package/dist/tui/components/markdown.js.map +1 -1
  339. package/dist/tui/components/select-list.d.ts +2 -2
  340. package/dist/tui/components/select-list.d.ts.map +1 -1
  341. package/dist/tui/components/select-list.js +79 -71
  342. package/dist/tui/components/select-list.js.map +1 -1
  343. package/dist/tui/components/settings-list.d.ts +2 -2
  344. package/dist/tui/components/settings-list.d.ts.map +1 -1
  345. package/dist/tui/components/settings-list.js +12 -1
  346. package/dist/tui/components/settings-list.js.map +1 -1
  347. package/dist/tui/components/spacer.d.ts +3 -3
  348. package/dist/tui/components/spacer.d.ts.map +1 -1
  349. package/dist/tui/components/spacer.js +13 -8
  350. package/dist/tui/components/spacer.js.map +1 -1
  351. package/dist/tui/components/text-renderer.d.ts +7 -0
  352. package/dist/tui/components/text-renderer.d.ts.map +1 -0
  353. package/dist/tui/components/text-renderer.js +25 -0
  354. package/dist/tui/components/text-renderer.js.map +1 -0
  355. package/dist/tui/components/text.d.ts +2 -4
  356. package/dist/tui/components/text.d.ts.map +1 -1
  357. package/dist/tui/components/text.js +35 -54
  358. package/dist/tui/components/text.js.map +1 -1
  359. package/dist/tui/components/truncated-text.d.ts +2 -2
  360. package/dist/tui/components/truncated-text.d.ts.map +1 -1
  361. package/dist/tui/components/truncated-text.js +7 -4
  362. package/dist/tui/components/truncated-text.js.map +1 -1
  363. package/dist/tui/editor-component.d.ts +2 -0
  364. package/dist/tui/editor-component.d.ts.map +1 -1
  365. package/dist/tui/fuzzy.d.ts +10 -0
  366. package/dist/tui/fuzzy.d.ts.map +1 -1
  367. package/dist/tui/fuzzy.js +75 -56
  368. package/dist/tui/fuzzy.js.map +1 -1
  369. package/dist/tui/keybindings.d.ts +16 -3
  370. package/dist/tui/keybindings.d.ts.map +1 -1
  371. package/dist/tui/keybindings.js +68 -12
  372. package/dist/tui/keybindings.js.map +1 -1
  373. package/dist/tui/keys.d.ts +5 -0
  374. package/dist/tui/keys.d.ts.map +1 -1
  375. package/dist/tui/keys.js +72 -1
  376. package/dist/tui/keys.js.map +1 -1
  377. package/dist/tui/stdin-buffer.d.ts +5 -0
  378. package/dist/tui/stdin-buffer.d.ts.map +1 -1
  379. package/dist/tui/stdin-buffer.js +20 -7
  380. package/dist/tui/stdin-buffer.js.map +1 -1
  381. package/dist/tui/terminal-image.d.ts.map +1 -1
  382. package/dist/tui/terminal-image.js +17 -6
  383. package/dist/tui/terminal-image.js.map +1 -1
  384. package/dist/tui/terminal.d.ts +15 -0
  385. package/dist/tui/terminal.d.ts.map +1 -1
  386. package/dist/tui/terminal.js +39 -6
  387. package/dist/tui/terminal.js.map +1 -1
  388. package/dist/tui/tui.d.ts +50 -4
  389. package/dist/tui/tui.d.ts.map +1 -1
  390. package/dist/tui/tui.js +201 -186
  391. package/dist/tui/tui.js.map +1 -1
  392. package/dist/tui/utils.d.ts +19 -0
  393. package/dist/tui/utils.d.ts.map +1 -1
  394. package/dist/tui/utils.js +39 -0
  395. package/dist/tui/utils.js.map +1 -1
  396. package/package.json +7 -9
  397. package/dist/webui/ChatPanel.d.ts +0 -28
  398. package/dist/webui/ChatPanel.d.ts.map +0 -1
  399. package/dist/webui/ChatPanel.js +0 -193
  400. package/dist/webui/ChatPanel.js.map +0 -1
  401. package/dist/webui/components/AgentInterface.d.ts +0 -39
  402. package/dist/webui/components/AgentInterface.d.ts.map +0 -1
  403. package/dist/webui/components/AgentInterface.js +0 -371
  404. package/dist/webui/components/AgentInterface.js.map +0 -1
  405. package/dist/webui/components/AttachmentTile.d.ts +0 -12
  406. package/dist/webui/components/AttachmentTile.d.ts.map +0 -1
  407. package/dist/webui/components/AttachmentTile.js +0 -111
  408. package/dist/webui/components/AttachmentTile.js.map +0 -1
  409. package/dist/webui/components/ConsoleBlock.d.ts +0 -12
  410. package/dist/webui/components/ConsoleBlock.d.ts.map +0 -1
  411. package/dist/webui/components/ConsoleBlock.js +0 -84
  412. package/dist/webui/components/ConsoleBlock.js.map +0 -1
  413. package/dist/webui/components/CustomProviderCard.d.ts +0 -17
  414. package/dist/webui/components/CustomProviderCard.d.ts.map +0 -1
  415. package/dist/webui/components/CustomProviderCard.js +0 -110
  416. package/dist/webui/components/CustomProviderCard.js.map +0 -1
  417. package/dist/webui/components/ExpandableSection.d.ts +0 -15
  418. package/dist/webui/components/ExpandableSection.d.ts.map +0 -1
  419. package/dist/webui/components/ExpandableSection.js +0 -63
  420. package/dist/webui/components/ExpandableSection.js.map +0 -1
  421. package/dist/webui/components/Input.d.ts +0 -26
  422. package/dist/webui/components/Input.d.ts.map +0 -1
  423. package/dist/webui/components/Input.js +0 -57
  424. package/dist/webui/components/Input.js.map +0 -1
  425. package/dist/webui/components/MessageEditor.d.ts +0 -44
  426. package/dist/webui/components/MessageEditor.d.ts.map +0 -1
  427. package/dist/webui/components/MessageEditor.js +0 -414
  428. package/dist/webui/components/MessageEditor.js.map +0 -1
  429. package/dist/webui/components/MessageList.d.ts +0 -14
  430. package/dist/webui/components/MessageList.d.ts.map +0 -1
  431. package/dist/webui/components/MessageList.js +0 -104
  432. package/dist/webui/components/MessageList.js.map +0 -1
  433. package/dist/webui/components/Messages.d.ts +0 -94
  434. package/dist/webui/components/Messages.d.ts.map +0 -1
  435. package/dist/webui/components/Messages.js +0 -352
  436. package/dist/webui/components/Messages.js.map +0 -1
  437. package/dist/webui/components/ProviderKeyInput.d.ts +0 -16
  438. package/dist/webui/components/ProviderKeyInput.d.ts.map +0 -1
  439. package/dist/webui/components/ProviderKeyInput.js +0 -171
  440. package/dist/webui/components/ProviderKeyInput.js.map +0 -1
  441. package/dist/webui/components/SandboxedIframe.d.ts +0 -85
  442. package/dist/webui/components/SandboxedIframe.d.ts.map +0 -1
  443. package/dist/webui/components/SandboxedIframe.js +0 -511
  444. package/dist/webui/components/SandboxedIframe.js.map +0 -1
  445. package/dist/webui/components/StreamingMessageContainer.d.ts +0 -19
  446. package/dist/webui/components/StreamingMessageContainer.d.ts.map +0 -1
  447. package/dist/webui/components/StreamingMessageContainer.js +0 -117
  448. package/dist/webui/components/StreamingMessageContainer.js.map +0 -1
  449. package/dist/webui/components/ThinkingBlock.d.ts +0 -11
  450. package/dist/webui/components/ThinkingBlock.d.ts.map +0 -1
  451. package/dist/webui/components/ThinkingBlock.js +0 -58
  452. package/dist/webui/components/ThinkingBlock.js.map +0 -1
  453. package/dist/webui/components/message-renderer-registry.d.ts +0 -12
  454. package/dist/webui/components/message-renderer-registry.d.ts.map +0 -1
  455. package/dist/webui/components/message-renderer-registry.js +0 -12
  456. package/dist/webui/components/message-renderer-registry.js.map +0 -1
  457. package/dist/webui/components/sandbox/ArtifactsRuntimeProvider.d.ts +0 -35
  458. package/dist/webui/components/sandbox/ArtifactsRuntimeProvider.d.ts.map +0 -1
  459. package/dist/webui/components/sandbox/ArtifactsRuntimeProvider.js +0 -189
  460. package/dist/webui/components/sandbox/ArtifactsRuntimeProvider.js.map +0 -1
  461. package/dist/webui/components/sandbox/AttachmentsRuntimeProvider.d.ts +0 -17
  462. package/dist/webui/components/sandbox/AttachmentsRuntimeProvider.d.ts.map +0 -1
  463. package/dist/webui/components/sandbox/AttachmentsRuntimeProvider.js +0 -64
  464. package/dist/webui/components/sandbox/AttachmentsRuntimeProvider.js.map +0 -1
  465. package/dist/webui/components/sandbox/ConsoleRuntimeProvider.d.ts +0 -42
  466. package/dist/webui/components/sandbox/ConsoleRuntimeProvider.d.ts.map +0 -1
  467. package/dist/webui/components/sandbox/ConsoleRuntimeProvider.js +0 -161
  468. package/dist/webui/components/sandbox/ConsoleRuntimeProvider.js.map +0 -1
  469. package/dist/webui/components/sandbox/FileDownloadRuntimeProvider.d.ts +0 -30
  470. package/dist/webui/components/sandbox/FileDownloadRuntimeProvider.d.ts.map +0 -1
  471. package/dist/webui/components/sandbox/FileDownloadRuntimeProvider.js +0 -97
  472. package/dist/webui/components/sandbox/FileDownloadRuntimeProvider.js.map +0 -1
  473. package/dist/webui/components/sandbox/RuntimeMessageBridge.d.ts +0 -19
  474. package/dist/webui/components/sandbox/RuntimeMessageBridge.d.ts.map +0 -1
  475. package/dist/webui/components/sandbox/RuntimeMessageBridge.js +0 -74
  476. package/dist/webui/components/sandbox/RuntimeMessageBridge.js.map +0 -1
  477. package/dist/webui/components/sandbox/RuntimeMessageRouter.d.ts +0 -65
  478. package/dist/webui/components/sandbox/RuntimeMessageRouter.d.ts.map +0 -1
  479. package/dist/webui/components/sandbox/RuntimeMessageRouter.js +0 -168
  480. package/dist/webui/components/sandbox/RuntimeMessageRouter.js.map +0 -1
  481. package/dist/webui/components/sandbox/SandboxRuntimeProvider.d.ts +0 -48
  482. package/dist/webui/components/sandbox/SandboxRuntimeProvider.d.ts.map +0 -1
  483. package/dist/webui/components/sandbox/SandboxRuntimeProvider.js +0 -2
  484. package/dist/webui/components/sandbox/SandboxRuntimeProvider.js.map +0 -1
  485. package/dist/webui/dialogs/ApiKeyPromptDialog.d.ts +0 -15
  486. package/dist/webui/dialogs/ApiKeyPromptDialog.d.ts.map +0 -1
  487. package/dist/webui/dialogs/ApiKeyPromptDialog.js +0 -79
  488. package/dist/webui/dialogs/ApiKeyPromptDialog.js.map +0 -1
  489. package/dist/webui/dialogs/AttachmentOverlay.d.ts +0 -32
  490. package/dist/webui/dialogs/AttachmentOverlay.d.ts.map +0 -1
  491. package/dist/webui/dialogs/AttachmentOverlay.js +0 -576
  492. package/dist/webui/dialogs/AttachmentOverlay.js.map +0 -1
  493. package/dist/webui/dialogs/CustomProviderDialog.d.ts +0 -25
  494. package/dist/webui/dialogs/CustomProviderDialog.d.ts.map +0 -1
  495. package/dist/webui/dialogs/CustomProviderDialog.js +0 -270
  496. package/dist/webui/dialogs/CustomProviderDialog.js.map +0 -1
  497. package/dist/webui/dialogs/ModelSelector.d.ts +0 -27
  498. package/dist/webui/dialogs/ModelSelector.d.ts.map +0 -1
  499. package/dist/webui/dialogs/ModelSelector.js +0 -320
  500. package/dist/webui/dialogs/ModelSelector.js.map +0 -1
  501. package/dist/webui/dialogs/PersistentStorageDialog.d.ts +0 -17
  502. package/dist/webui/dialogs/PersistentStorageDialog.d.ts.map +0 -1
  503. package/dist/webui/dialogs/PersistentStorageDialog.js +0 -147
  504. package/dist/webui/dialogs/PersistentStorageDialog.js.map +0 -1
  505. package/dist/webui/dialogs/ProvidersModelsTab.d.ts +0 -20
  506. package/dist/webui/dialogs/ProvidersModelsTab.d.ts.map +0 -1
  507. package/dist/webui/dialogs/ProvidersModelsTab.js +0 -191
  508. package/dist/webui/dialogs/ProvidersModelsTab.js.map +0 -1
  509. package/dist/webui/dialogs/SessionListDialog.d.ts +0 -19
  510. package/dist/webui/dialogs/SessionListDialog.d.ts.map +0 -1
  511. package/dist/webui/dialogs/SessionListDialog.js +0 -154
  512. package/dist/webui/dialogs/SessionListDialog.js.map +0 -1
  513. package/dist/webui/dialogs/SettingsDialog.d.ts +0 -30
  514. package/dist/webui/dialogs/SettingsDialog.d.ts.map +0 -1
  515. package/dist/webui/dialogs/SettingsDialog.js +0 -229
  516. package/dist/webui/dialogs/SettingsDialog.js.map +0 -1
  517. package/dist/webui/index.d.ts +0 -65
  518. package/dist/webui/index.d.ts.map +0 -1
  519. package/dist/webui/index.js +0 -68
  520. package/dist/webui/index.js.map +0 -1
  521. package/dist/webui/prompts/prompts.d.ts +0 -11
  522. package/dist/webui/prompts/prompts.d.ts.map +0 -1
  523. package/dist/webui/prompts/prompts.js +0 -272
  524. package/dist/webui/prompts/prompts.js.map +0 -1
  525. package/dist/webui/storage/app-storage.d.ts +0 -33
  526. package/dist/webui/storage/app-storage.d.ts.map +0 -1
  527. package/dist/webui/storage/app-storage.js +0 -38
  528. package/dist/webui/storage/app-storage.js.map +0 -1
  529. package/dist/webui/storage/backends/indexeddb-storage-backend.d.ts +0 -27
  530. package/dist/webui/storage/backends/indexeddb-storage-backend.d.ts.map +0 -1
  531. package/dist/webui/storage/backends/indexeddb-storage-backend.js +0 -166
  532. package/dist/webui/storage/backends/indexeddb-storage-backend.js.map +0 -1
  533. package/dist/webui/storage/store.d.ts +0 -23
  534. package/dist/webui/storage/store.d.ts.map +0 -1
  535. package/dist/webui/storage/store.js +0 -26
  536. package/dist/webui/storage/store.js.map +0 -1
  537. package/dist/webui/storage/stores/custom-providers-store.d.ts +0 -25
  538. package/dist/webui/storage/stores/custom-providers-store.d.ts.map +0 -1
  539. package/dist/webui/storage/stores/custom-providers-store.js +0 -35
  540. package/dist/webui/storage/stores/custom-providers-store.js.map +0 -1
  541. package/dist/webui/storage/stores/provider-keys-store.d.ts +0 -14
  542. package/dist/webui/storage/stores/provider-keys-store.d.ts.map +0 -1
  543. package/dist/webui/storage/stores/provider-keys-store.js +0 -27
  544. package/dist/webui/storage/stores/provider-keys-store.js.map +0 -1
  545. package/dist/webui/storage/stores/sessions-store.d.ts +0 -32
  546. package/dist/webui/storage/stores/sessions-store.d.ts.map +0 -1
  547. package/dist/webui/storage/stores/sessions-store.js +0 -113
  548. package/dist/webui/storage/stores/sessions-store.js.map +0 -1
  549. package/dist/webui/storage/stores/settings-store.d.ts +0 -14
  550. package/dist/webui/storage/stores/settings-store.d.ts.map +0 -1
  551. package/dist/webui/storage/stores/settings-store.js +0 -28
  552. package/dist/webui/storage/stores/settings-store.js.map +0 -1
  553. package/dist/webui/storage/types.d.ts +0 -176
  554. package/dist/webui/storage/types.d.ts.map +0 -1
  555. package/dist/webui/storage/types.js +0 -2
  556. package/dist/webui/storage/types.js.map +0 -1
  557. package/dist/webui/tools/artifacts/ArtifactElement.d.ts +0 -9
  558. package/dist/webui/tools/artifacts/ArtifactElement.d.ts.map +0 -1
  559. package/dist/webui/tools/artifacts/ArtifactElement.js +0 -11
  560. package/dist/webui/tools/artifacts/ArtifactElement.js.map +0 -1
  561. package/dist/webui/tools/artifacts/ArtifactPill.d.ts +0 -4
  562. package/dist/webui/tools/artifacts/ArtifactPill.d.ts.map +0 -1
  563. package/dist/webui/tools/artifacts/ArtifactPill.js +0 -23
  564. package/dist/webui/tools/artifacts/ArtifactPill.js.map +0 -1
  565. package/dist/webui/tools/artifacts/Console.d.ts +0 -18
  566. package/dist/webui/tools/artifacts/Console.d.ts.map +0 -1
  567. package/dist/webui/tools/artifacts/Console.js +0 -95
  568. package/dist/webui/tools/artifacts/Console.js.map +0 -1
  569. package/dist/webui/tools/artifacts/DocxArtifact.d.ts +0 -22
  570. package/dist/webui/tools/artifacts/DocxArtifact.d.ts.map +0 -1
  571. package/dist/webui/tools/artifacts/DocxArtifact.js +0 -208
  572. package/dist/webui/tools/artifacts/DocxArtifact.js.map +0 -1
  573. package/dist/webui/tools/artifacts/ExcelArtifact.d.ts +0 -24
  574. package/dist/webui/tools/artifacts/ExcelArtifact.d.ts.map +0 -1
  575. package/dist/webui/tools/artifacts/ExcelArtifact.js +0 -216
  576. package/dist/webui/tools/artifacts/ExcelArtifact.js.map +0 -1
  577. package/dist/webui/tools/artifacts/GenericArtifact.d.ts +0 -19
  578. package/dist/webui/tools/artifacts/GenericArtifact.d.ts.map +0 -1
  579. package/dist/webui/tools/artifacts/GenericArtifact.js +0 -117
  580. package/dist/webui/tools/artifacts/GenericArtifact.js.map +0 -1
  581. package/dist/webui/tools/artifacts/HtmlArtifact.d.ts +0 -27
  582. package/dist/webui/tools/artifacts/HtmlArtifact.d.ts.map +0 -1
  583. package/dist/webui/tools/artifacts/HtmlArtifact.js +0 -189
  584. package/dist/webui/tools/artifacts/HtmlArtifact.js.map +0 -1
  585. package/dist/webui/tools/artifacts/ImageArtifact.d.ts +0 -20
  586. package/dist/webui/tools/artifacts/ImageArtifact.d.ts.map +0 -1
  587. package/dist/webui/tools/artifacts/ImageArtifact.js +0 -120
  588. package/dist/webui/tools/artifacts/ImageArtifact.js.map +0 -1
  589. package/dist/webui/tools/artifacts/MarkdownArtifact.d.ts +0 -19
  590. package/dist/webui/tools/artifacts/MarkdownArtifact.d.ts.map +0 -1
  591. package/dist/webui/tools/artifacts/MarkdownArtifact.js +0 -82
  592. package/dist/webui/tools/artifacts/MarkdownArtifact.js.map +0 -1
  593. package/dist/webui/tools/artifacts/PdfArtifact.d.ts +0 -25
  594. package/dist/webui/tools/artifacts/PdfArtifact.d.ts.map +0 -1
  595. package/dist/webui/tools/artifacts/PdfArtifact.js +0 -184
  596. package/dist/webui/tools/artifacts/PdfArtifact.js.map +0 -1
  597. package/dist/webui/tools/artifacts/SvgArtifact.d.ts +0 -18
  598. package/dist/webui/tools/artifacts/SvgArtifact.d.ts.map +0 -1
  599. package/dist/webui/tools/artifacts/SvgArtifact.js +0 -78
  600. package/dist/webui/tools/artifacts/SvgArtifact.js.map +0 -1
  601. package/dist/webui/tools/artifacts/TextArtifact.d.ts +0 -19
  602. package/dist/webui/tools/artifacts/TextArtifact.d.ts.map +0 -1
  603. package/dist/webui/tools/artifacts/TextArtifact.js +0 -144
  604. package/dist/webui/tools/artifacts/TextArtifact.js.map +0 -1
  605. package/dist/webui/tools/artifacts/artifacts-tool-renderer.d.ts +0 -11
  606. package/dist/webui/tools/artifacts/artifacts-tool-renderer.d.ts.map +0 -1
  607. package/dist/webui/tools/artifacts/artifacts-tool-renderer.js +0 -272
  608. package/dist/webui/tools/artifacts/artifacts-tool-renderer.js.map +0 -1
  609. package/dist/webui/tools/artifacts/artifacts.d.ts +0 -63
  610. package/dist/webui/tools/artifacts/artifacts.d.ts.map +0 -1
  611. package/dist/webui/tools/artifacts/artifacts.js +0 -659
  612. package/dist/webui/tools/artifacts/artifacts.js.map +0 -1
  613. package/dist/webui/tools/artifacts/index.d.ts +0 -8
  614. package/dist/webui/tools/artifacts/index.d.ts.map +0 -1
  615. package/dist/webui/tools/artifacts/index.js +0 -8
  616. package/dist/webui/tools/artifacts/index.js.map +0 -1
  617. package/dist/webui/tools/extract-document.d.ts +0 -24
  618. package/dist/webui/tools/extract-document.d.ts.map +0 -1
  619. package/dist/webui/tools/extract-document.js +0 -216
  620. package/dist/webui/tools/extract-document.js.map +0 -1
  621. package/dist/webui/tools/index.d.ts +0 -16
  622. package/dist/webui/tools/index.d.ts.map +0 -1
  623. package/dist/webui/tools/index.js +0 -33
  624. package/dist/webui/tools/index.js.map +0 -1
  625. package/dist/webui/tools/javascript-repl.d.ts +0 -44
  626. package/dist/webui/tools/javascript-repl.d.ts.map +0 -1
  627. package/dist/webui/tools/javascript-repl.js +0 -224
  628. package/dist/webui/tools/javascript-repl.js.map +0 -1
  629. package/dist/webui/tools/renderer-registry.d.ts +0 -23
  630. package/dist/webui/tools/renderer-registry.d.ts.map +0 -1
  631. package/dist/webui/tools/renderer-registry.js +0 -107
  632. package/dist/webui/tools/renderer-registry.js.map +0 -1
  633. package/dist/webui/tools/renderers/BashRenderer.d.ts +0 -10
  634. package/dist/webui/tools/renderers/BashRenderer.d.ts.map +0 -1
  635. package/dist/webui/tools/renderers/BashRenderer.js +0 -42
  636. package/dist/webui/tools/renderers/BashRenderer.js.map +0 -1
  637. package/dist/webui/tools/renderers/CalculateRenderer.d.ts +0 -10
  638. package/dist/webui/tools/renderers/CalculateRenderer.d.ts.map +0 -1
  639. package/dist/webui/tools/renderers/CalculateRenderer.js +0 -45
  640. package/dist/webui/tools/renderers/CalculateRenderer.js.map +0 -1
  641. package/dist/webui/tools/renderers/DefaultRenderer.d.ts +0 -6
  642. package/dist/webui/tools/renderers/DefaultRenderer.d.ts.map +0 -1
  643. package/dist/webui/tools/renderers/DefaultRenderer.js +0 -94
  644. package/dist/webui/tools/renderers/DefaultRenderer.js.map +0 -1
  645. package/dist/webui/tools/renderers/GetCurrentTimeRenderer.d.ts +0 -10
  646. package/dist/webui/tools/renderers/GetCurrentTimeRenderer.d.ts.map +0 -1
  647. package/dist/webui/tools/renderers/GetCurrentTimeRenderer.js +0 -72
  648. package/dist/webui/tools/renderers/GetCurrentTimeRenderer.js.map +0 -1
  649. package/dist/webui/tools/types.d.ts +0 -10
  650. package/dist/webui/tools/types.d.ts.map +0 -1
  651. package/dist/webui/tools/types.js +0 -2
  652. package/dist/webui/tools/types.js.map +0 -1
  653. package/dist/webui/utils/attachment-utils.d.ts +0 -19
  654. package/dist/webui/utils/attachment-utils.d.ts.map +0 -1
  655. package/dist/webui/utils/attachment-utils.js +0 -415
  656. package/dist/webui/utils/attachment-utils.js.map +0 -1
  657. package/dist/webui/utils/auth-token.d.ts +0 -3
  658. package/dist/webui/utils/auth-token.d.ts.map +0 -1
  659. package/dist/webui/utils/auth-token.js +0 -19
  660. package/dist/webui/utils/auth-token.js.map +0 -1
  661. package/dist/webui/utils/format.d.ts +0 -6
  662. package/dist/webui/utils/format.d.ts.map +0 -1
  663. package/dist/webui/utils/format.js +0 -47
  664. package/dist/webui/utils/format.js.map +0 -1
  665. package/dist/webui/utils/i18n.d.ts +0 -636
  666. package/dist/webui/utils/i18n.d.ts.map +0 -1
  667. package/dist/webui/utils/i18n.js +0 -418
  668. package/dist/webui/utils/i18n.js.map +0 -1
  669. package/dist/webui/utils/model-discovery.d.ts +0 -38
  670. package/dist/webui/utils/model-discovery.d.ts.map +0 -1
  671. package/dist/webui/utils/model-discovery.js +0 -243
  672. package/dist/webui/utils/model-discovery.js.map +0 -1
  673. package/dist/webui/utils/proxy-utils.d.ts +0 -45
  674. package/dist/webui/utils/proxy-utils.d.ts.map +0 -1
  675. package/dist/webui/utils/proxy-utils.js +0 -116
  676. package/dist/webui/utils/proxy-utils.js.map +0 -1
  677. package/dist/webui/utils/test-sessions.d.ts +0 -359
  678. package/dist/webui/utils/test-sessions.d.ts.map +0 -1
  679. package/dist/webui/utils/test-sessions.js +0 -2325
  680. package/dist/webui/utils/test-sessions.js.map +0 -1
  681. package/dist/webui.d.ts +0 -2
  682. package/dist/webui.d.ts.map +0 -1
  683. package/dist/webui.js +0 -2
  684. package/dist/webui.js.map +0 -1
package/dist/tui/fuzzy.js CHANGED
@@ -3,85 +3,107 @@
3
3
  * Matches if all query characters appear in order (not necessarily consecutive).
4
4
  * Lower score = better match.
5
5
  */
6
- export function fuzzyMatch(query, text) {
7
- const queryLower = query.toLowerCase();
8
- const textLower = text.toLowerCase();
9
- const matchQuery = (normalizedQuery) => {
10
- if (normalizedQuery.length === 0) {
6
+ const DEFAULT_FUZZY_CONFIG = {
7
+ gapPenalty: 2,
8
+ consecutiveReward: 5,
9
+ wordBoundaryReward: 10,
10
+ lateMatchPenalty: 0.1,
11
+ swappedTokenPenalty: 5,
12
+ };
13
+ class SequentialFuzzyStrategy {
14
+ match(query, text, config) {
15
+ const queryLower = query.toLowerCase();
16
+ const textLower = text.toLowerCase();
17
+ if (queryLower.length === 0) {
11
18
  return { matches: true, score: 0 };
12
19
  }
13
- if (normalizedQuery.length > textLower.length) {
20
+ if (queryLower.length > textLower.length) {
14
21
  return { matches: false, score: 0 };
15
22
  }
16
23
  let queryIndex = 0;
17
24
  let score = 0;
18
25
  let lastMatchIndex = -1;
19
26
  let consecutiveMatches = 0;
20
- for (let i = 0; i < textLower.length && queryIndex < normalizedQuery.length; i++) {
21
- if (textLower[i] === normalizedQuery[queryIndex]) {
22
- const isWordBoundary = i === 0 || /[\s\-_./:]/.test(textLower[i - 1]);
23
- // Reward consecutive matches
24
- if (lastMatchIndex === i - 1) {
25
- consecutiveMatches++;
26
- score -= consecutiveMatches * 5;
27
- }
28
- else {
29
- consecutiveMatches = 0;
30
- // Penalize gaps
31
- if (lastMatchIndex >= 0) {
32
- score += (i - lastMatchIndex - 1) * 2;
33
- }
34
- }
35
- // Reward word boundary matches
36
- if (isWordBoundary) {
37
- score -= 10;
27
+ for (let i = 0; i < textLower.length && queryIndex < queryLower.length; i++) {
28
+ if (textLower[i] !== queryLower[queryIndex])
29
+ continue;
30
+ const isWordBoundary = i === 0 || /[\s\-_./:]/.test(textLower[i - 1]);
31
+ if (lastMatchIndex === i - 1) {
32
+ consecutiveMatches++;
33
+ score -= consecutiveMatches * config.consecutiveReward;
34
+ }
35
+ else {
36
+ consecutiveMatches = 0;
37
+ if (lastMatchIndex >= 0) {
38
+ score += (i - lastMatchIndex - 1) * config.gapPenalty;
38
39
  }
39
- // Slight penalty for later matches
40
- score += i * 0.1;
41
- lastMatchIndex = i;
42
- queryIndex++;
43
40
  }
41
+ if (isWordBoundary)
42
+ score -= config.wordBoundaryReward;
43
+ score += i * config.lateMatchPenalty;
44
+ lastMatchIndex = i;
45
+ queryIndex++;
44
46
  }
45
- if (queryIndex < normalizedQuery.length) {
47
+ if (queryIndex < queryLower.length)
46
48
  return { matches: false, score: 0 };
47
- }
48
49
  return { matches: true, score };
49
- };
50
- const primaryMatch = matchQuery(queryLower);
51
- if (primaryMatch.matches) {
52
- return primaryMatch;
53
50
  }
54
- const alphaNumericMatch = queryLower.match(/^(?<letters>[a-z]+)(?<digits>[0-9]+)$/);
55
- const numericAlphaMatch = queryLower.match(/^(?<digits>[0-9]+)(?<letters>[a-z]+)$/);
51
+ }
52
+ class CachedFuzzyMatcher {
53
+ constructor(strategy, config, maxSize = 2000) {
54
+ this.strategy = strategy;
55
+ this.config = config;
56
+ this.maxSize = maxSize;
57
+ this.cache = new Map();
58
+ }
59
+ match(query, text) {
60
+ const key = `${query}\u0000${text}`;
61
+ const cached = this.cache.get(key);
62
+ if (cached)
63
+ return cached;
64
+ const result = this.strategy.match(query, text, this.config);
65
+ if (this.cache.size >= this.maxSize) {
66
+ const oldest = this.cache.keys().next().value;
67
+ if (oldest)
68
+ this.cache.delete(oldest);
69
+ }
70
+ this.cache.set(key, result);
71
+ return result;
72
+ }
73
+ clear() {
74
+ this.cache.clear();
75
+ }
76
+ }
77
+ const defaultMatcher = new CachedFuzzyMatcher(new SequentialFuzzyStrategy(), DEFAULT_FUZZY_CONFIG);
78
+ export function fuzzyMatch(query, text) {
79
+ const primaryMatch = defaultMatcher.match(query, text);
80
+ if (primaryMatch.matches)
81
+ return primaryMatch;
82
+ const q = query.toLowerCase();
83
+ const alphaNumericMatch = q.match(/^(?<letters>[a-z]+)(?<digits>[0-9]+)$/);
84
+ const numericAlphaMatch = q.match(/^(?<digits>[0-9]+)(?<letters>[a-z]+)$/);
56
85
  const swappedQuery = alphaNumericMatch
57
86
  ? `${alphaNumericMatch.groups?.digits ?? ""}${alphaNumericMatch.groups?.letters ?? ""}`
58
87
  : numericAlphaMatch
59
88
  ? `${numericAlphaMatch.groups?.letters ?? ""}${numericAlphaMatch.groups?.digits ?? ""}`
60
89
  : "";
61
- if (!swappedQuery) {
90
+ if (!swappedQuery)
62
91
  return primaryMatch;
63
- }
64
- const swappedMatch = matchQuery(swappedQuery);
65
- if (!swappedMatch.matches) {
92
+ const swappedMatch = defaultMatcher.match(swappedQuery, text);
93
+ if (!swappedMatch.matches)
66
94
  return primaryMatch;
67
- }
68
- return { matches: true, score: swappedMatch.score + 5 };
95
+ return { matches: true, score: swappedMatch.score + DEFAULT_FUZZY_CONFIG.swappedTokenPenalty };
69
96
  }
70
97
  /**
71
98
  * Filter and sort items by fuzzy match quality (best matches first).
72
99
  * Supports space-separated tokens: all tokens must match.
73
100
  */
74
101
  export function fuzzyFilter(items, query, getText) {
75
- if (!query.trim()) {
102
+ if (!query.trim())
76
103
  return items;
77
- }
78
- const tokens = query
79
- .trim()
80
- .split(/\s+/)
81
- .filter((t) => t.length > 0);
82
- if (tokens.length === 0) {
104
+ const tokens = query.trim().split(/\s+/).filter((t) => t.length > 0);
105
+ if (tokens.length === 0)
83
106
  return items;
84
- }
85
107
  const results = [];
86
108
  for (const item of items) {
87
109
  const text = getText(item);
@@ -89,17 +111,14 @@ export function fuzzyFilter(items, query, getText) {
89
111
  let allMatch = true;
90
112
  for (const token of tokens) {
91
113
  const match = fuzzyMatch(token, text);
92
- if (match.matches) {
93
- totalScore += match.score;
94
- }
95
- else {
114
+ if (!match.matches) {
96
115
  allMatch = false;
97
116
  break;
98
117
  }
118
+ totalScore += match.score;
99
119
  }
100
- if (allMatch) {
120
+ if (allMatch)
101
121
  results.push({ item, totalScore });
102
- }
103
122
  }
104
123
  results.sort((a, b) => a.totalScore - b.totalScore);
105
124
  return results.map((r) => r.item);
@@ -1 +1 @@
1
- {"version":3,"file":"fuzzy.js","sourceRoot":"","sources":["../../src/tui/fuzzy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fuzzy.js","sourceRoot":"","sources":["../../src/tui/fuzzy.ts"],"names":[],"mappings":"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"}
@@ -10,29 +10,42 @@ export type { KeyId };
10
10
  export type EditorKeybindingsConfig = {
11
11
  [K in EditorAction]?: KeyId | KeyId[];
12
12
  };
13
+ export type KeybindingPreset = "default" | "vim";
14
+ export interface KeybindingConflict {
15
+ key: string;
16
+ actions: EditorAction[];
17
+ }
13
18
  /**
14
19
  * Default editor keybindings.
15
20
  */
16
21
  export declare const DEFAULT_EDITOR_KEYBINDINGS: Required<EditorKeybindingsConfig>;
22
+ export declare const VIM_EDITOR_KEYBINDINGS: Partial<Required<EditorKeybindingsConfig>>;
17
23
  /**
18
24
  * Manages keybindings for the editor.
19
25
  */
20
26
  export declare class EditorKeybindingsManager {
21
27
  private actionToKeys;
22
- constructor(config?: EditorKeybindingsConfig);
28
+ private componentOverrides;
29
+ private readonly registeredActions;
30
+ constructor(config?: EditorKeybindingsConfig, preset?: KeybindingPreset);
23
31
  private buildMaps;
24
32
  /**
25
33
  * Check if input matches a specific action.
26
34
  */
27
- matches(data: string, action: EditorAction): boolean;
35
+ matches(data: string, action: EditorAction, componentId?: string): boolean;
28
36
  /**
29
37
  * Get keys bound to an action.
30
38
  */
31
39
  getKeys(action: EditorAction): KeyId[];
40
+ registerAction(action: EditorAction, keys: KeyId | KeyId[]): void;
41
+ getRegisteredActions(): EditorAction[];
32
42
  /**
33
43
  * Update configuration.
34
44
  */
35
- setConfig(config: EditorKeybindingsConfig): void;
45
+ setConfig(config: EditorKeybindingsConfig, preset?: KeybindingPreset): void;
46
+ setComponentOverride(componentId: string, config: EditorKeybindingsConfig): void;
47
+ clearComponentOverride(componentId: string): void;
48
+ detectConflicts(): KeybindingConflict[];
36
49
  }
37
50
  export declare function getEditorKeybindings(): EditorKeybindingsManager;
38
51
  export declare function setEditorKeybindings(manager: EditorKeybindingsManager): void;
@@ -1 +1 @@
1
- {"version":3,"file":"keybindings.d.ts","sourceRoot":"","sources":["../../src/tui/keybindings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,KAAK,EAAc,MAAM,WAAW,CAAC;AAEnD;;GAEG;AACH,MAAM,MAAM,YAAY,GAErB,UAAU,GACV,YAAY,GACZ,YAAY,GACZ,aAAa,GACb,gBAAgB,GAChB,iBAAiB,GACjB,iBAAiB,GACjB,eAAe,GACf,QAAQ,GACR,UAAU,GAEV,oBAAoB,GACpB,mBAAmB,GACnB,oBAAoB,GACpB,mBAAmB,GACnB,mBAAmB,GACnB,iBAAiB,GAEjB,SAAS,GACT,QAAQ,GACR,KAAK,GAEL,UAAU,GACV,YAAY,GACZ,cAAc,GACd,gBAAgB,GAChB,eAAe,GACf,cAAc,GAEd,MAAM,GAEN,MAAM,GACN,SAAS,GAET,MAAM,GAEN,aAAa,GAEb,mBAAmB,GACnB,mBAAmB,GACnB,eAAe,GACf,eAAe,GACf,0BAA0B,CAAC;AAG9B,YAAY,EAAE,KAAK,EAAE,CAAC;AAEtB;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG;KACpC,CAAC,IAAI,YAAY,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE;CACrC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,uBAAuB,CA6CxE,CAAC;AAEF;;GAEG;AACH,qBAAa,wBAAwB;IACpC,OAAO,CAAC,YAAY,CAA6B;gBAErC,MAAM,GAAE,uBAA4B;IAKhD,OAAO,CAAC,SAAS;IAiBjB;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO;IASpD;;OAEG;IACH,OAAO,CAAC,MAAM,EAAE,YAAY,GAAG,KAAK,EAAE;IAItC;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,uBAAuB,GAAG,IAAI;CAGhD;AAKD,wBAAgB,oBAAoB,IAAI,wBAAwB,CAK/D;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,wBAAwB,GAAG,IAAI,CAE5E"}
1
+ {"version":3,"file":"keybindings.d.ts","sourceRoot":"","sources":["../../src/tui/keybindings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,KAAK,EAA8B,MAAM,WAAW,CAAC;AAEnE;;GAEG;AACH,MAAM,MAAM,YAAY,GAErB,UAAU,GACV,YAAY,GACZ,YAAY,GACZ,aAAa,GACb,gBAAgB,GAChB,iBAAiB,GACjB,iBAAiB,GACjB,eAAe,GACf,QAAQ,GACR,UAAU,GAEV,oBAAoB,GACpB,mBAAmB,GACnB,oBAAoB,GACpB,mBAAmB,GACnB,mBAAmB,GACnB,iBAAiB,GAEjB,SAAS,GACT,QAAQ,GACR,KAAK,GAEL,UAAU,GACV,YAAY,GACZ,cAAc,GACd,gBAAgB,GAChB,eAAe,GACf,cAAc,GAEd,MAAM,GAEN,MAAM,GACN,SAAS,GAET,MAAM,GAEN,aAAa,GAEb,mBAAmB,GACnB,mBAAmB,GACnB,eAAe,GACf,eAAe,GACf,0BAA0B,CAAC;AAG9B,YAAY,EAAE,KAAK,EAAE,CAAC;AAEtB;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG;KACpC,CAAC,IAAI,YAAY,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE;CACrC,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,KAAK,CAAC;AAEjD,MAAM,WAAW,kBAAkB;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,YAAY,EAAE,CAAC;CACxB;AAED;;GAEG;AACH,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,uBAAuB,CA6CxE,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAM7E,CAAC;AAEF;;GAEG;AACH,qBAAa,wBAAwB;IACpC,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,kBAAkB,CAA8C;IACxE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA2B;gBAEjD,MAAM,GAAE,uBAA4B,EAAE,MAAM,GAAE,gBAA4B;IAKtF,OAAO,CAAC,SAAS;IA8BjB;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO;IAY1E;;OAEG;IACH,OAAO,CAAC,MAAM,EAAE,YAAY,GAAG,KAAK,EAAE;IAItC,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,GAAG,KAAK,EAAE,GAAG,IAAI;IAMjE,oBAAoB,IAAI,YAAY,EAAE;IAItC;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,uBAAuB,EAAE,MAAM,GAAE,gBAA4B,GAAG,IAAI;IAItF,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,uBAAuB,GAAG,IAAI;IAIhF,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAIjD,eAAe,IAAI,kBAAkB,EAAE;CAevC;AAKD,wBAAgB,oBAAoB,IAAI,wBAAwB,CAK/D;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,wBAAwB,GAAG,IAAI,CAE5E"}
@@ -1,4 +1,4 @@
1
- import { matchesKey } from "./keys.js";
1
+ import { matchesKey, normalizeKeyId } from "./keys.js";
2
2
  /**
3
3
  * Default editor keybindings.
4
4
  */
@@ -48,34 +48,59 @@ export const DEFAULT_EDITOR_KEYBINDINGS = {
48
48
  deleteSession: "ctrl+d",
49
49
  deleteSessionNoninvasive: "ctrl+backspace",
50
50
  };
51
+ export const VIM_EDITOR_KEYBINDINGS = {
52
+ cursorUp: ["up", "k"],
53
+ cursorDown: ["down", "j"],
54
+ cursorLeft: ["left", "h"],
55
+ cursorRight: ["right", "l"],
56
+ deleteCharBackward: ["backspace", "x"],
57
+ };
51
58
  /**
52
59
  * Manages keybindings for the editor.
53
60
  */
54
61
  export class EditorKeybindingsManager {
55
- constructor(config = {}) {
62
+ constructor(config = {}, preset = "default") {
63
+ this.componentOverrides = new Map();
64
+ this.registeredActions = new Set();
56
65
  this.actionToKeys = new Map();
57
- this.buildMaps(config);
66
+ this.buildMaps(config, preset);
58
67
  }
59
- buildMaps(config) {
68
+ buildMaps(config, preset = "default") {
60
69
  this.actionToKeys.clear();
61
- // Start with defaults
70
+ this.registeredActions.clear();
62
71
  for (const [action, keys] of Object.entries(DEFAULT_EDITOR_KEYBINDINGS)) {
72
+ const typedAction = action;
63
73
  const keyArray = Array.isArray(keys) ? keys : [keys];
64
- this.actionToKeys.set(action, [...keyArray]);
74
+ this.actionToKeys.set(typedAction, keyArray.map((k) => normalizeKeyId(k)));
75
+ this.registeredActions.add(typedAction);
76
+ }
77
+ if (preset === "vim") {
78
+ for (const [action, keys] of Object.entries(VIM_EDITOR_KEYBINDINGS)) {
79
+ if (!keys)
80
+ continue;
81
+ const typedAction = action;
82
+ const keyArray = Array.isArray(keys) ? keys : [keys];
83
+ this.actionToKeys.set(typedAction, keyArray.map((k) => normalizeKeyId(k)));
84
+ this.registeredActions.add(typedAction);
85
+ }
65
86
  }
66
- // Override with user config
67
87
  for (const [action, keys] of Object.entries(config)) {
68
88
  if (keys === undefined)
69
89
  continue;
90
+ const typedAction = action;
70
91
  const keyArray = Array.isArray(keys) ? keys : [keys];
71
- this.actionToKeys.set(action, keyArray);
92
+ this.actionToKeys.set(typedAction, keyArray.map((k) => normalizeKeyId(k)));
93
+ this.registeredActions.add(typedAction);
72
94
  }
73
95
  }
74
96
  /**
75
97
  * Check if input matches a specific action.
76
98
  */
77
- matches(data, action) {
78
- const keys = this.actionToKeys.get(action);
99
+ matches(data, action, componentId) {
100
+ const override = componentId ? this.componentOverrides.get(componentId)?.[action] : undefined;
101
+ const keys = override
102
+ ? (Array.isArray(override) ? override : [override]).map((k) => normalizeKeyId(k))
103
+ : this.actionToKeys.get(action);
79
104
  if (!keys)
80
105
  return false;
81
106
  for (const key of keys) {
@@ -90,11 +115,42 @@ export class EditorKeybindingsManager {
90
115
  getKeys(action) {
91
116
  return this.actionToKeys.get(action) ?? [];
92
117
  }
118
+ registerAction(action, keys) {
119
+ const keyArray = (Array.isArray(keys) ? keys : [keys]).map((k) => normalizeKeyId(k));
120
+ this.actionToKeys.set(action, keyArray);
121
+ this.registeredActions.add(action);
122
+ }
123
+ getRegisteredActions() {
124
+ return [...this.registeredActions];
125
+ }
93
126
  /**
94
127
  * Update configuration.
95
128
  */
96
- setConfig(config) {
97
- this.buildMaps(config);
129
+ setConfig(config, preset = "default") {
130
+ this.buildMaps(config, preset);
131
+ }
132
+ setComponentOverride(componentId, config) {
133
+ this.componentOverrides.set(componentId, config);
134
+ }
135
+ clearComponentOverride(componentId) {
136
+ this.componentOverrides.delete(componentId);
137
+ }
138
+ detectConflicts() {
139
+ const keyToActions = new Map();
140
+ for (const [action, keys] of this.actionToKeys.entries()) {
141
+ for (const key of keys) {
142
+ const normalized = normalizeKeyId(key);
143
+ if (!keyToActions.has(normalized))
144
+ keyToActions.set(normalized, new Set());
145
+ keyToActions.get(normalized).add(action);
146
+ }
147
+ }
148
+ const conflicts = [];
149
+ for (const [key, actions] of keyToActions.entries()) {
150
+ if (actions.size > 1)
151
+ conflicts.push({ key, actions: [...actions] });
152
+ }
153
+ return conflicts;
98
154
  }
99
155
  }
100
156
  // Global instance
@@ -1 +1 @@
1
- {"version":3,"file":"keybindings.js","sourceRoot":"","sources":["../../src/tui/keybindings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"keybindings.js","sourceRoot":"","sources":["../../src/tui/keybindings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,UAAU,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAoEnE;;GAEG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAsC;IAC5E,kBAAkB;IAClB,QAAQ,EAAE,IAAI;IACd,UAAU,EAAE,MAAM;IAClB,UAAU,EAAE,MAAM;IAClB,WAAW,EAAE,OAAO;IACpB,cAAc,EAAE,CAAC,UAAU,EAAE,WAAW,CAAC;IACzC,eAAe,EAAE,CAAC,WAAW,EAAE,YAAY,CAAC;IAC5C,eAAe,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;IACnC,aAAa,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC;IAChC,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;IACpB,WAAW;IACX,kBAAkB,EAAE,WAAW;IAC/B,iBAAiB,EAAE,QAAQ;IAC3B,kBAAkB,EAAE,CAAC,QAAQ,EAAE,eAAe,CAAC;IAC/C,iBAAiB,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC;IAC1C,iBAAiB,EAAE,QAAQ;IAC3B,eAAe,EAAE,QAAQ;IACzB,aAAa;IACb,OAAO,EAAE,aAAa;IACtB,MAAM,EAAE,OAAO;IACf,GAAG,EAAE,KAAK;IACV,yBAAyB;IACzB,QAAQ,EAAE,IAAI;IACd,UAAU,EAAE,MAAM;IAClB,YAAY,EAAE,QAAQ;IACtB,cAAc,EAAE,UAAU;IAC1B,aAAa,EAAE,OAAO;IACtB,YAAY,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAClC,YAAY;IACZ,IAAI,EAAE,QAAQ;IACd,YAAY;IACZ,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,OAAO;IAChB,OAAO;IACP,IAAI,EAAE,QAAQ;IACd,cAAc;IACd,WAAW,EAAE,QAAQ;IACrB,UAAU;IACV,iBAAiB,EAAE,QAAQ;IAC3B,iBAAiB,EAAE,QAAQ;IAC3B,aAAa,EAAE,QAAQ;IACvB,aAAa,EAAE,QAAQ;IACvB,wBAAwB,EAAE,gBAAgB;CAC1C,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAA+C;IACjF,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC;IACrB,UAAU,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC;IACzB,UAAU,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC;IACzB,WAAW,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC;IAC3B,kBAAkB,EAAE,CAAC,WAAW,EAAE,GAAG,CAAC;CACtC,CAAC;AAEF;;GAEG;AACH,MAAM,OAAO,wBAAwB;IAKpC,YAAY,SAAkC,EAAE,EAAE,SAA2B,SAAS;QAH9E,uBAAkB,GAAG,IAAI,GAAG,EAAmC,CAAC;QACvD,sBAAiB,GAAG,IAAI,GAAG,EAAgB,CAAC;QAG5D,IAAI,CAAC,YAAY,GAAG,IAAI,GAAG,EAAE,CAAC;QAC9B,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,CAAC;IAEO,SAAS,CAAC,MAA+B,EAAE,SAA2B,SAAS;QACtF,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;QAE/B,KAAK,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,0BAA0B,CAAC,EAAE,CAAC;YACzE,MAAM,WAAW,GAAG,MAAsB,CAAC;YAC3C,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACrD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAU,CAAC,CAAC,CAAC;YACpF,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACzC,CAAC;QAED,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;YACtB,KAAK,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,sBAAsB,CAAC,EAAE,CAAC;gBACrE,IAAI,CAAC,IAAI;oBAAE,SAAS;gBACpB,MAAM,WAAW,GAAG,MAAsB,CAAC;gBAC3C,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBACrD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAU,CAAC,CAAC,CAAC;gBACpF,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YACzC,CAAC;QACF,CAAC;QAED,KAAK,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACrD,IAAI,IAAI,KAAK,SAAS;gBAAE,SAAS;YACjC,MAAM,WAAW,GAAG,MAAsB,CAAC;YAC3C,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACrD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAU,CAAC,CAAC,CAAC;YACpF,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACzC,CAAC;IACF,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,IAAY,EAAE,MAAoB,EAAE,WAAoB;QAC/D,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9F,MAAM,IAAI,GAAG,QAAQ;YACpB,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAU,CAAC;YAC1F,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QACxB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACxB,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC;gBAAE,OAAO,IAAI,CAAC;QACxC,CAAC;QACD,OAAO,KAAK,CAAC;IACd,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,MAAoB;QAC3B,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAC5C,CAAC;IAED,cAAc,CAAC,MAAoB,EAAE,IAAqB;QACzD,MAAM,QAAQ,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAU,CAAC,CAAC;QAC9F,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACxC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IAED,oBAAoB;QACnB,OAAO,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,MAA+B,EAAE,SAA2B,SAAS;QAC9E,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,CAAC;IAED,oBAAoB,CAAC,WAAmB,EAAE,MAA+B;QACxE,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAClD,CAAC;IAED,sBAAsB,CAAC,WAAmB;QACzC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAC7C,CAAC;IAED,eAAe;QACd,MAAM,YAAY,GAAG,IAAI,GAAG,EAA6B,CAAC;QAC1D,KAAK,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,CAAC;YAC1D,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACxB,MAAM,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;gBACvC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC;oBAAE,YAAY,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;gBAC3E,YAAY,CAAC,GAAG,CAAC,UAAU,CAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC3C,CAAC;QACF,CAAC;QACD,MAAM,SAAS,GAAyB,EAAE,CAAC;QAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,YAAY,CAAC,OAAO,EAAE,EAAE,CAAC;YACrD,IAAI,OAAO,CAAC,IAAI,GAAG,CAAC;gBAAE,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;QACtE,CAAC;QACD,OAAO,SAAS,CAAC;IAClB,CAAC;CACD;AAED,kBAAkB;AAClB,IAAI,uBAAuB,GAAoC,IAAI,CAAC;AAEpE,MAAM,UAAU,oBAAoB;IACnC,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC9B,uBAAuB,GAAG,IAAI,wBAAwB,EAAE,CAAC;IAC1D,CAAC;IACD,OAAO,uBAAuB,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAAiC;IACrE,uBAAuB,GAAG,OAAO,CAAC;AACnC,CAAC"}
@@ -132,6 +132,11 @@ export declare function isKeyRelease(data: string): boolean;
132
132
  * Only meaningful when Kitty keyboard protocol with flag 2 is active.
133
133
  */
134
134
  export declare function isKeyRepeat(data: string): boolean;
135
+ export declare function normalizeKeyId(keyId: string): string;
136
+ export declare class KeyValidator {
137
+ normalize(keyId: string): string;
138
+ isValid(keyId: string): boolean;
139
+ }
135
140
  /**
136
141
  * Match input data against a key identifier string.
137
142
  *
@@ -1 +1 @@
1
- {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../src/tui/keys.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../src/tui/keys.ts"],"names":[],"mappings":"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"}
package/dist/tui/keys.js CHANGED
@@ -485,8 +485,79 @@ function rawCtrlChar(key) {
485
485
  }
486
486
  return null;
487
487
  }
488
+ const SPECIAL_KEY_ALIASES = {
489
+ esc: "escape",
490
+ return: "enter",
491
+ pageup: "pageUp",
492
+ pagedown: "pageDown",
493
+ };
494
+ const SPECIAL_KEY_SET = new Set([
495
+ "escape",
496
+ "enter",
497
+ "tab",
498
+ "space",
499
+ "backspace",
500
+ "delete",
501
+ "insert",
502
+ "clear",
503
+ "home",
504
+ "end",
505
+ "pageUp",
506
+ "pageDown",
507
+ "up",
508
+ "down",
509
+ "left",
510
+ "right",
511
+ "f1",
512
+ "f2",
513
+ "f3",
514
+ "f4",
515
+ "f5",
516
+ "f6",
517
+ "f7",
518
+ "f8",
519
+ "f9",
520
+ "f10",
521
+ "f11",
522
+ "f12",
523
+ ]);
524
+ export function normalizeKeyId(keyId) {
525
+ const parts = keyId.split("+").map((p) => p.trim()).filter(Boolean);
526
+ if (parts.length === 0)
527
+ return "";
528
+ const key = parts[parts.length - 1].toLowerCase();
529
+ const normalizedKey = SPECIAL_KEY_ALIASES[key] ?? key;
530
+ const modifierSet = new Set(parts.slice(0, -1).map((p) => p.toLowerCase()));
531
+ const modifiers = [];
532
+ if (modifierSet.has("ctrl"))
533
+ modifiers.push("ctrl");
534
+ if (modifierSet.has("shift"))
535
+ modifiers.push("shift");
536
+ if (modifierSet.has("alt"))
537
+ modifiers.push("alt");
538
+ return modifiers.length > 0 ? `${modifiers.join("+")}+${normalizedKey}` : normalizedKey;
539
+ }
540
+ export class KeyValidator {
541
+ normalize(keyId) {
542
+ return normalizeKeyId(keyId);
543
+ }
544
+ isValid(keyId) {
545
+ const normalized = normalizeKeyId(keyId);
546
+ if (!normalized)
547
+ return false;
548
+ const parts = normalized.split("+");
549
+ const key = parts[parts.length - 1];
550
+ if (key.length === 1)
551
+ return (key >= "a" && key <= "z") || SYMBOL_KEYS.has(key);
552
+ return SPECIAL_KEY_SET.has(key);
553
+ }
554
+ }
555
+ const keyValidator = new KeyValidator();
488
556
  function parseKeyId(keyId) {
489
- const parts = keyId.toLowerCase().split("+");
557
+ const normalized = normalizeKeyId(keyId);
558
+ if (!normalized || !keyValidator.isValid(normalized))
559
+ return null;
560
+ const parts = normalized.split("+");
490
561
  const key = parts[parts.length - 1];
491
562
  if (!key)
492
563
  return null;