orient-cli 0.1.0-alpha.0 → 0.2.0

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 (936) hide show
  1. package/LICENSE +0 -0
  2. package/NOTICE.md +0 -0
  3. package/README.md +0 -0
  4. package/dist/cli.d.ts +0 -0
  5. package/dist/cli.js +1 -1
  6. package/dist/cli.js.map +1 -1
  7. package/dist/extensions/orient-core.d.ts +0 -0
  8. package/dist/extensions/orient-core.js +0 -0
  9. package/dist/extensions/orient-core.js.map +0 -0
  10. package/dist/extensions/orient-notebooklm.d.ts +0 -0
  11. package/dist/extensions/orient-notebooklm.js +0 -0
  12. package/dist/extensions/orient-notebooklm.js.map +0 -0
  13. package/dist/index.d.ts +1 -1
  14. package/dist/index.js +1 -1
  15. package/dist/index.js.map +1 -1
  16. package/dist/integrations/notebooklm/bridge.d.ts +0 -0
  17. package/dist/integrations/notebooklm/bridge.js +0 -0
  18. package/dist/integrations/notebooklm/bridge.js.map +0 -0
  19. package/dist/integrations/notebooklm/notebooklm-extension.d.ts +1 -1
  20. package/dist/integrations/notebooklm/notebooklm-extension.js +1 -1
  21. package/dist/integrations/notebooklm/notebooklm-extension.js.map +1 -1
  22. package/dist/orient/artifact-graph.d.ts +0 -0
  23. package/dist/orient/artifact-graph.js +0 -0
  24. package/dist/orient/artifact-graph.js.map +0 -0
  25. package/dist/orient/change-packet.d.ts +2 -1
  26. package/dist/orient/change-packet.js +25 -8
  27. package/dist/orient/change-packet.js.map +1 -1
  28. package/dist/orient/clarify.d.ts +114 -0
  29. package/dist/orient/clarify.js +186 -0
  30. package/dist/orient/clarify.js.map +1 -0
  31. package/dist/orient/clear-command.d.ts +79 -0
  32. package/dist/orient/clear-command.js +117 -0
  33. package/dist/orient/clear-command.js.map +1 -0
  34. package/dist/orient/mode.d.ts +70 -0
  35. package/dist/orient/mode.js +124 -0
  36. package/dist/orient/mode.js.map +1 -0
  37. package/dist/orient/orient-extension.d.ts +1 -1
  38. package/dist/orient/orient-extension.js +306 -17
  39. package/dist/orient/orient-extension.js.map +1 -1
  40. package/dist/orient/phases.d.ts +0 -0
  41. package/dist/orient/phases.js +0 -0
  42. package/dist/orient/phases.js.map +0 -0
  43. package/dist/orient/plan-execute.d.ts +137 -0
  44. package/dist/orient/plan-execute.js +333 -0
  45. package/dist/orient/plan-execute.js.map +1 -0
  46. package/dist/orient/state-machine.d.ts +0 -0
  47. package/dist/orient/state-machine.js +0 -0
  48. package/dist/orient/state-machine.js.map +0 -0
  49. package/dist/orient/tiers.d.ts +109 -0
  50. package/dist/orient/tiers.js +162 -0
  51. package/dist/orient/tiers.js.map +1 -0
  52. package/dist/orient/types.d.ts +0 -0
  53. package/dist/orient/types.js +0 -0
  54. package/dist/orient/types.js.map +0 -0
  55. package/dist/orient/wizard.d.ts +108 -0
  56. package/dist/orient/wizard.js +183 -0
  57. package/dist/orient/wizard.js.map +1 -0
  58. package/dist/package-paths.d.ts +0 -0
  59. package/dist/package-paths.js +0 -0
  60. package/dist/package-paths.js.map +0 -0
  61. package/docs/architecture.md +0 -0
  62. package/docs/artifacts.md +0 -0
  63. package/docs/commands.md +0 -0
  64. package/docs/configuration.md +0 -0
  65. package/docs/getting-started.md +0 -0
  66. package/docs/open-source-resources.md +1 -1
  67. package/docs/phases.md +0 -0
  68. package/docs/research-integration.md +0 -0
  69. package/docs/workflows.md +0 -0
  70. package/node_modules/@orient-cli/agent-core/README.md +456 -0
  71. package/node_modules/@orient-cli/agent-core/dist/agent-loop.d.ts +24 -0
  72. package/node_modules/@orient-cli/agent-core/dist/agent-loop.d.ts.map +1 -0
  73. package/node_modules/@orient-cli/agent-core/dist/agent-loop.js +404 -0
  74. package/node_modules/@orient-cli/agent-core/dist/agent-loop.js.map +1 -0
  75. package/node_modules/@orient-cli/agent-core/dist/agent.d.ts +115 -0
  76. package/node_modules/@orient-cli/agent-core/dist/agent.d.ts.map +1 -0
  77. package/node_modules/@orient-cli/agent-core/dist/agent.js +395 -0
  78. package/node_modules/@orient-cli/agent-core/dist/agent.js.map +1 -0
  79. package/node_modules/@orient-cli/agent-core/dist/index.d.ts +5 -0
  80. package/node_modules/@orient-cli/agent-core/dist/index.d.ts.map +1 -0
  81. package/node_modules/@orient-cli/agent-core/dist/index.js +9 -0
  82. package/node_modules/@orient-cli/agent-core/dist/index.js.map +1 -0
  83. package/node_modules/@orient-cli/agent-core/dist/proxy.d.ts +85 -0
  84. package/node_modules/@orient-cli/agent-core/dist/proxy.d.ts.map +1 -0
  85. package/node_modules/@orient-cli/agent-core/dist/proxy.js +268 -0
  86. package/node_modules/@orient-cli/agent-core/dist/proxy.js.map +1 -0
  87. package/node_modules/@orient-cli/agent-core/dist/types.d.ts +323 -0
  88. package/node_modules/@orient-cli/agent-core/dist/types.d.ts.map +1 -0
  89. package/node_modules/@orient-cli/agent-core/dist/types.js +2 -0
  90. package/node_modules/@orient-cli/agent-core/dist/types.js.map +1 -0
  91. package/node_modules/@orient-cli/agent-core/package.json +44 -0
  92. package/node_modules/@orient-cli/ai/README.md +1315 -0
  93. package/node_modules/@orient-cli/ai/dist/api-registry.d.ts +20 -0
  94. package/node_modules/@orient-cli/ai/dist/api-registry.d.ts.map +1 -0
  95. package/node_modules/@orient-cli/ai/dist/api-registry.js +44 -0
  96. package/node_modules/@orient-cli/ai/dist/api-registry.js.map +1 -0
  97. package/node_modules/@orient-cli/ai/dist/bedrock-provider.d.ts +5 -0
  98. package/node_modules/@orient-cli/ai/dist/bedrock-provider.d.ts.map +1 -0
  99. package/node_modules/@orient-cli/ai/dist/bedrock-provider.js +6 -0
  100. package/node_modules/@orient-cli/ai/dist/bedrock-provider.js.map +1 -0
  101. package/node_modules/@orient-cli/ai/dist/cli.d.ts +3 -0
  102. package/node_modules/@orient-cli/ai/dist/cli.d.ts.map +1 -0
  103. package/node_modules/@orient-cli/ai/dist/cli.js +116 -0
  104. package/node_modules/@orient-cli/ai/dist/cli.js.map +1 -0
  105. package/node_modules/@orient-cli/ai/dist/env-api-keys.d.ts +9 -0
  106. package/node_modules/@orient-cli/ai/dist/env-api-keys.d.ts.map +1 -0
  107. package/node_modules/@orient-cli/ai/dist/env-api-keys.js +107 -0
  108. package/node_modules/@orient-cli/ai/dist/env-api-keys.js.map +1 -0
  109. package/node_modules/@orient-cli/ai/dist/index.d.ts +26 -0
  110. package/node_modules/@orient-cli/ai/dist/index.d.ts.map +1 -0
  111. package/node_modules/@orient-cli/ai/dist/index.js +14 -0
  112. package/node_modules/@orient-cli/ai/dist/index.js.map +1 -0
  113. package/node_modules/@orient-cli/ai/dist/models.d.ts +24 -0
  114. package/node_modules/@orient-cli/ai/dist/models.d.ts.map +1 -0
  115. package/node_modules/@orient-cli/ai/dist/models.generated.d.ts +14473 -0
  116. package/node_modules/@orient-cli/ai/dist/models.generated.d.ts.map +1 -0
  117. package/node_modules/@orient-cli/ai/dist/models.generated.js +14241 -0
  118. package/node_modules/@orient-cli/ai/dist/models.generated.js.map +1 -0
  119. package/node_modules/@orient-cli/ai/dist/models.js +55 -0
  120. package/node_modules/@orient-cli/ai/dist/models.js.map +1 -0
  121. package/node_modules/@orient-cli/ai/dist/oauth.d.ts +2 -0
  122. package/node_modules/@orient-cli/ai/dist/oauth.d.ts.map +1 -0
  123. package/node_modules/@orient-cli/ai/dist/oauth.js +2 -0
  124. package/node_modules/@orient-cli/ai/dist/oauth.js.map +1 -0
  125. package/node_modules/@orient-cli/ai/dist/providers/amazon-bedrock.d.ts +20 -0
  126. package/node_modules/@orient-cli/ai/dist/providers/amazon-bedrock.d.ts.map +1 -0
  127. package/node_modules/@orient-cli/ai/dist/providers/amazon-bedrock.js +651 -0
  128. package/node_modules/@orient-cli/ai/dist/providers/amazon-bedrock.js.map +1 -0
  129. package/node_modules/@orient-cli/ai/dist/providers/anthropic.d.ts +40 -0
  130. package/node_modules/@orient-cli/ai/dist/providers/anthropic.d.ts.map +1 -0
  131. package/node_modules/@orient-cli/ai/dist/providers/anthropic.js +749 -0
  132. package/node_modules/@orient-cli/ai/dist/providers/anthropic.js.map +1 -0
  133. package/node_modules/@orient-cli/ai/dist/providers/azure-openai-responses.d.ts +15 -0
  134. package/node_modules/@orient-cli/ai/dist/providers/azure-openai-responses.d.ts.map +1 -0
  135. package/node_modules/@orient-cli/ai/dist/providers/azure-openai-responses.js +176 -0
  136. package/node_modules/@orient-cli/ai/dist/providers/azure-openai-responses.js.map +1 -0
  137. package/node_modules/@orient-cli/ai/dist/providers/faux.d.ts +56 -0
  138. package/node_modules/@orient-cli/ai/dist/providers/faux.d.ts.map +1 -0
  139. package/node_modules/@orient-cli/ai/dist/providers/faux.js +367 -0
  140. package/node_modules/@orient-cli/ai/dist/providers/faux.js.map +1 -0
  141. package/node_modules/@orient-cli/ai/dist/providers/github-copilot-headers.d.ts +8 -0
  142. package/node_modules/@orient-cli/ai/dist/providers/github-copilot-headers.d.ts.map +1 -0
  143. package/node_modules/@orient-cli/ai/dist/providers/github-copilot-headers.js +29 -0
  144. package/node_modules/@orient-cli/ai/dist/providers/github-copilot-headers.js.map +1 -0
  145. package/node_modules/@orient-cli/ai/dist/providers/google-gemini-cli.d.ts +74 -0
  146. package/node_modules/@orient-cli/ai/dist/providers/google-gemini-cli.d.ts.map +1 -0
  147. package/node_modules/@orient-cli/ai/dist/providers/google-gemini-cli.js +776 -0
  148. package/node_modules/@orient-cli/ai/dist/providers/google-gemini-cli.js.map +1 -0
  149. package/node_modules/@orient-cli/ai/dist/providers/google-shared.d.ts +65 -0
  150. package/node_modules/@orient-cli/ai/dist/providers/google-shared.d.ts.map +1 -0
  151. package/node_modules/@orient-cli/ai/dist/providers/google-shared.js +312 -0
  152. package/node_modules/@orient-cli/ai/dist/providers/google-shared.js.map +1 -0
  153. package/node_modules/@orient-cli/ai/dist/providers/google-vertex.d.ts +15 -0
  154. package/node_modules/@orient-cli/ai/dist/providers/google-vertex.d.ts.map +1 -0
  155. package/node_modules/@orient-cli/ai/dist/providers/google-vertex.js +419 -0
  156. package/node_modules/@orient-cli/ai/dist/providers/google-vertex.js.map +1 -0
  157. package/node_modules/@orient-cli/ai/dist/providers/google.d.ts +13 -0
  158. package/node_modules/@orient-cli/ai/dist/providers/google.d.ts.map +1 -0
  159. package/node_modules/@orient-cli/ai/dist/providers/google.js +399 -0
  160. package/node_modules/@orient-cli/ai/dist/providers/google.js.map +1 -0
  161. package/node_modules/@orient-cli/ai/dist/providers/mistral.d.ts +22 -0
  162. package/node_modules/@orient-cli/ai/dist/providers/mistral.d.ts.map +1 -0
  163. package/node_modules/@orient-cli/ai/dist/providers/mistral.js +501 -0
  164. package/node_modules/@orient-cli/ai/dist/providers/mistral.js.map +1 -0
  165. package/node_modules/@orient-cli/ai/dist/providers/openai-codex-responses.d.ts +9 -0
  166. package/node_modules/@orient-cli/ai/dist/providers/openai-codex-responses.d.ts.map +1 -0
  167. package/node_modules/@orient-cli/ai/dist/providers/openai-codex-responses.js +741 -0
  168. package/node_modules/@orient-cli/ai/dist/providers/openai-codex-responses.js.map +1 -0
  169. package/node_modules/@orient-cli/ai/dist/providers/openai-completions.d.ts +15 -0
  170. package/node_modules/@orient-cli/ai/dist/providers/openai-completions.d.ts.map +1 -0
  171. package/node_modules/@orient-cli/ai/dist/providers/openai-completions.js +753 -0
  172. package/node_modules/@orient-cli/ai/dist/providers/openai-completions.js.map +1 -0
  173. package/node_modules/@orient-cli/ai/dist/providers/openai-responses-shared.d.ts +17 -0
  174. package/node_modules/@orient-cli/ai/dist/providers/openai-responses-shared.d.ts.map +1 -0
  175. package/node_modules/@orient-cli/ai/dist/providers/openai-responses-shared.js +470 -0
  176. package/node_modules/@orient-cli/ai/dist/providers/openai-responses-shared.js.map +1 -0
  177. package/node_modules/@orient-cli/ai/dist/providers/openai-responses.d.ts +13 -0
  178. package/node_modules/@orient-cli/ai/dist/providers/openai-responses.d.ts.map +1 -0
  179. package/node_modules/@orient-cli/ai/dist/providers/openai-responses.js +190 -0
  180. package/node_modules/@orient-cli/ai/dist/providers/openai-responses.js.map +1 -0
  181. package/node_modules/@orient-cli/ai/dist/providers/register-builtins.d.ts +38 -0
  182. package/node_modules/@orient-cli/ai/dist/providers/register-builtins.d.ts.map +1 -0
  183. package/node_modules/@orient-cli/ai/dist/providers/register-builtins.js +261 -0
  184. package/node_modules/@orient-cli/ai/dist/providers/register-builtins.js.map +1 -0
  185. package/node_modules/@orient-cli/ai/dist/providers/simple-options.d.ts +8 -0
  186. package/node_modules/@orient-cli/ai/dist/providers/simple-options.d.ts.map +1 -0
  187. package/node_modules/@orient-cli/ai/dist/providers/simple-options.js +35 -0
  188. package/node_modules/@orient-cli/ai/dist/providers/simple-options.js.map +1 -0
  189. package/node_modules/@orient-cli/ai/dist/providers/transform-messages.d.ts +8 -0
  190. package/node_modules/@orient-cli/ai/dist/providers/transform-messages.d.ts.map +1 -0
  191. package/node_modules/@orient-cli/ai/dist/providers/transform-messages.js +155 -0
  192. package/node_modules/@orient-cli/ai/dist/providers/transform-messages.js.map +1 -0
  193. package/node_modules/@orient-cli/ai/dist/stream.d.ts +8 -0
  194. package/node_modules/@orient-cli/ai/dist/stream.d.ts.map +1 -0
  195. package/node_modules/@orient-cli/ai/dist/stream.js +27 -0
  196. package/node_modules/@orient-cli/ai/dist/stream.js.map +1 -0
  197. package/node_modules/@orient-cli/ai/dist/types.d.ts +353 -0
  198. package/node_modules/@orient-cli/ai/dist/types.d.ts.map +1 -0
  199. package/node_modules/@orient-cli/ai/dist/types.js +2 -0
  200. package/node_modules/@orient-cli/ai/dist/types.js.map +1 -0
  201. package/node_modules/@orient-cli/ai/dist/utils/event-stream.d.ts +21 -0
  202. package/node_modules/@orient-cli/ai/dist/utils/event-stream.d.ts.map +1 -0
  203. package/node_modules/@orient-cli/ai/dist/utils/event-stream.js +81 -0
  204. package/node_modules/@orient-cli/ai/dist/utils/event-stream.js.map +1 -0
  205. package/node_modules/@orient-cli/ai/dist/utils/hash.d.ts +3 -0
  206. package/node_modules/@orient-cli/ai/dist/utils/hash.d.ts.map +1 -0
  207. package/node_modules/@orient-cli/ai/dist/utils/hash.js +14 -0
  208. package/node_modules/@orient-cli/ai/dist/utils/hash.js.map +1 -0
  209. package/node_modules/@orient-cli/ai/dist/utils/json-parse.d.ts +9 -0
  210. package/node_modules/@orient-cli/ai/dist/utils/json-parse.d.ts.map +1 -0
  211. package/node_modules/@orient-cli/ai/dist/utils/json-parse.js +29 -0
  212. package/node_modules/@orient-cli/ai/dist/utils/json-parse.js.map +1 -0
  213. package/node_modules/@orient-cli/ai/dist/utils/oauth/anthropic.d.ts +25 -0
  214. package/node_modules/@orient-cli/ai/dist/utils/oauth/anthropic.d.ts.map +1 -0
  215. package/node_modules/@orient-cli/ai/dist/utils/oauth/anthropic.js +335 -0
  216. package/node_modules/@orient-cli/ai/dist/utils/oauth/anthropic.js.map +1 -0
  217. package/node_modules/@orient-cli/ai/dist/utils/oauth/github-copilot.d.ts +30 -0
  218. package/node_modules/@orient-cli/ai/dist/utils/oauth/github-copilot.d.ts.map +1 -0
  219. package/node_modules/@orient-cli/ai/dist/utils/oauth/github-copilot.js +292 -0
  220. package/node_modules/@orient-cli/ai/dist/utils/oauth/github-copilot.js.map +1 -0
  221. package/node_modules/@orient-cli/ai/dist/utils/oauth/google-antigravity.d.ts +26 -0
  222. package/node_modules/@orient-cli/ai/dist/utils/oauth/google-antigravity.d.ts.map +1 -0
  223. package/node_modules/@orient-cli/ai/dist/utils/oauth/google-antigravity.js +376 -0
  224. package/node_modules/@orient-cli/ai/dist/utils/oauth/google-antigravity.js.map +1 -0
  225. package/node_modules/@orient-cli/ai/dist/utils/oauth/google-gemini-cli.d.ts +26 -0
  226. package/node_modules/@orient-cli/ai/dist/utils/oauth/google-gemini-cli.d.ts.map +1 -0
  227. package/node_modules/@orient-cli/ai/dist/utils/oauth/google-gemini-cli.js +481 -0
  228. package/node_modules/@orient-cli/ai/dist/utils/oauth/google-gemini-cli.js.map +1 -0
  229. package/node_modules/@orient-cli/ai/dist/utils/oauth/index.d.ts +61 -0
  230. package/node_modules/@orient-cli/ai/dist/utils/oauth/index.d.ts.map +1 -0
  231. package/node_modules/@orient-cli/ai/dist/utils/oauth/index.js +131 -0
  232. package/node_modules/@orient-cli/ai/dist/utils/oauth/index.js.map +1 -0
  233. package/node_modules/@orient-cli/ai/dist/utils/oauth/oauth-page.d.ts +3 -0
  234. package/node_modules/@orient-cli/ai/dist/utils/oauth/oauth-page.d.ts.map +1 -0
  235. package/node_modules/@orient-cli/ai/dist/utils/oauth/oauth-page.js +105 -0
  236. package/node_modules/@orient-cli/ai/dist/utils/oauth/oauth-page.js.map +1 -0
  237. package/node_modules/@orient-cli/ai/dist/utils/oauth/openai-codex.d.ts +34 -0
  238. package/node_modules/@orient-cli/ai/dist/utils/oauth/openai-codex.d.ts.map +1 -0
  239. package/node_modules/@orient-cli/ai/dist/utils/oauth/openai-codex.js +373 -0
  240. package/node_modules/@orient-cli/ai/dist/utils/oauth/openai-codex.js.map +1 -0
  241. package/node_modules/@orient-cli/ai/dist/utils/oauth/pkce.d.ts +13 -0
  242. package/node_modules/@orient-cli/ai/dist/utils/oauth/pkce.d.ts.map +1 -0
  243. package/node_modules/@orient-cli/ai/dist/utils/oauth/pkce.js +31 -0
  244. package/node_modules/@orient-cli/ai/dist/utils/oauth/pkce.js.map +1 -0
  245. package/node_modules/@orient-cli/ai/dist/utils/oauth/types.d.ts +47 -0
  246. package/node_modules/@orient-cli/ai/dist/utils/oauth/types.d.ts.map +1 -0
  247. package/node_modules/@orient-cli/ai/dist/utils/oauth/types.js +2 -0
  248. package/node_modules/@orient-cli/ai/dist/utils/oauth/types.js.map +1 -0
  249. package/node_modules/@orient-cli/ai/dist/utils/overflow.d.ts +53 -0
  250. package/node_modules/@orient-cli/ai/dist/utils/overflow.d.ts.map +1 -0
  251. package/node_modules/@orient-cli/ai/dist/utils/overflow.js +132 -0
  252. package/node_modules/@orient-cli/ai/dist/utils/overflow.js.map +1 -0
  253. package/node_modules/@orient-cli/ai/dist/utils/sanitize-unicode.d.ts +22 -0
  254. package/node_modules/@orient-cli/ai/dist/utils/sanitize-unicode.d.ts.map +1 -0
  255. package/node_modules/@orient-cli/ai/dist/utils/sanitize-unicode.js +26 -0
  256. package/node_modules/@orient-cli/ai/dist/utils/sanitize-unicode.js.map +1 -0
  257. package/node_modules/@orient-cli/ai/dist/utils/typebox-helpers.d.ts +17 -0
  258. package/node_modules/@orient-cli/ai/dist/utils/typebox-helpers.d.ts.map +1 -0
  259. package/node_modules/@orient-cli/ai/dist/utils/typebox-helpers.js +21 -0
  260. package/node_modules/@orient-cli/ai/dist/utils/typebox-helpers.js.map +1 -0
  261. package/node_modules/@orient-cli/ai/dist/utils/validation.d.ts +18 -0
  262. package/node_modules/@orient-cli/ai/dist/utils/validation.d.ts.map +1 -0
  263. package/node_modules/@orient-cli/ai/dist/utils/validation.js +80 -0
  264. package/node_modules/@orient-cli/ai/dist/utils/validation.js.map +1 -0
  265. package/node_modules/@orient-cli/ai/package.json +114 -0
  266. package/node_modules/@orient-cli/coding-agent/README.md +618 -0
  267. package/node_modules/@orient-cli/coding-agent/dist/bun/cli.d.ts +3 -0
  268. package/node_modules/@orient-cli/coding-agent/dist/bun/cli.d.ts.map +1 -0
  269. package/node_modules/@orient-cli/coding-agent/dist/bun/cli.js +7 -0
  270. package/node_modules/@orient-cli/coding-agent/dist/bun/cli.js.map +1 -0
  271. package/node_modules/@orient-cli/coding-agent/dist/bun/register-bedrock.d.ts +2 -0
  272. package/node_modules/@orient-cli/coding-agent/dist/bun/register-bedrock.d.ts.map +1 -0
  273. package/node_modules/@orient-cli/coding-agent/dist/bun/register-bedrock.js +4 -0
  274. package/node_modules/@orient-cli/coding-agent/dist/bun/register-bedrock.js.map +1 -0
  275. package/node_modules/@orient-cli/coding-agent/dist/cli/args.d.ts +52 -0
  276. package/node_modules/@orient-cli/coding-agent/dist/cli/args.d.ts.map +1 -0
  277. package/node_modules/@orient-cli/coding-agent/dist/cli/args.js +326 -0
  278. package/node_modules/@orient-cli/coding-agent/dist/cli/args.js.map +1 -0
  279. package/node_modules/@orient-cli/coding-agent/dist/cli/config-selector.d.ts +14 -0
  280. package/node_modules/@orient-cli/coding-agent/dist/cli/config-selector.d.ts.map +1 -0
  281. package/node_modules/@orient-cli/coding-agent/dist/cli/config-selector.js +31 -0
  282. package/node_modules/@orient-cli/coding-agent/dist/cli/config-selector.js.map +1 -0
  283. package/node_modules/@orient-cli/coding-agent/dist/cli/file-processor.d.ts +15 -0
  284. package/node_modules/@orient-cli/coding-agent/dist/cli/file-processor.d.ts.map +1 -0
  285. package/node_modules/@orient-cli/coding-agent/dist/cli/file-processor.js +83 -0
  286. package/node_modules/@orient-cli/coding-agent/dist/cli/file-processor.js.map +1 -0
  287. package/node_modules/@orient-cli/coding-agent/dist/cli/initial-message.d.ts +18 -0
  288. package/node_modules/@orient-cli/coding-agent/dist/cli/initial-message.d.ts.map +1 -0
  289. package/node_modules/@orient-cli/coding-agent/dist/cli/initial-message.js +22 -0
  290. package/node_modules/@orient-cli/coding-agent/dist/cli/initial-message.js.map +1 -0
  291. package/node_modules/@orient-cli/coding-agent/dist/cli/list-models.d.ts +9 -0
  292. package/node_modules/@orient-cli/coding-agent/dist/cli/list-models.d.ts.map +1 -0
  293. package/node_modules/@orient-cli/coding-agent/dist/cli/list-models.js +92 -0
  294. package/node_modules/@orient-cli/coding-agent/dist/cli/list-models.js.map +1 -0
  295. package/node_modules/@orient-cli/coding-agent/dist/cli/session-picker.d.ts +9 -0
  296. package/node_modules/@orient-cli/coding-agent/dist/cli/session-picker.d.ts.map +1 -0
  297. package/node_modules/@orient-cli/coding-agent/dist/cli/session-picker.js +35 -0
  298. package/node_modules/@orient-cli/coding-agent/dist/cli/session-picker.js.map +1 -0
  299. package/node_modules/@orient-cli/coding-agent/dist/cli.d.ts +3 -0
  300. package/node_modules/@orient-cli/coding-agent/dist/cli.d.ts.map +1 -0
  301. package/node_modules/@orient-cli/coding-agent/dist/cli.js +15 -0
  302. package/node_modules/@orient-cli/coding-agent/dist/cli.js.map +1 -0
  303. package/node_modules/@orient-cli/coding-agent/dist/config.d.ts +77 -0
  304. package/node_modules/@orient-cli/coding-agent/dist/config.d.ts.map +1 -0
  305. package/node_modules/@orient-cli/coding-agent/dist/config.js +229 -0
  306. package/node_modules/@orient-cli/coding-agent/dist/config.js.map +1 -0
  307. package/node_modules/@orient-cli/coding-agent/dist/core/agent-session-runtime.d.ts +83 -0
  308. package/node_modules/@orient-cli/coding-agent/dist/core/agent-session-runtime.d.ts.map +1 -0
  309. package/node_modules/@orient-cli/coding-agent/dist/core/agent-session-runtime.js +236 -0
  310. package/node_modules/@orient-cli/coding-agent/dist/core/agent-session-runtime.js.map +1 -0
  311. package/node_modules/@orient-cli/coding-agent/dist/core/agent-session-services.d.ts +86 -0
  312. package/node_modules/@orient-cli/coding-agent/dist/core/agent-session-services.d.ts.map +1 -0
  313. package/node_modules/@orient-cli/coding-agent/dist/core/agent-session-services.js +116 -0
  314. package/node_modules/@orient-cli/coding-agent/dist/core/agent-session-services.js.map +1 -0
  315. package/node_modules/@orient-cli/coding-agent/dist/core/agent-session.d.ts +585 -0
  316. package/node_modules/@orient-cli/coding-agent/dist/core/agent-session.d.ts.map +1 -0
  317. package/node_modules/@orient-cli/coding-agent/dist/core/agent-session.js +2497 -0
  318. package/node_modules/@orient-cli/coding-agent/dist/core/agent-session.js.map +1 -0
  319. package/node_modules/@orient-cli/coding-agent/dist/core/auth-storage.d.ts +132 -0
  320. package/node_modules/@orient-cli/coding-agent/dist/core/auth-storage.d.ts.map +1 -0
  321. package/node_modules/@orient-cli/coding-agent/dist/core/auth-storage.js +422 -0
  322. package/node_modules/@orient-cli/coding-agent/dist/core/auth-storage.js.map +1 -0
  323. package/node_modules/@orient-cli/coding-agent/dist/core/bash-executor.d.ts +46 -0
  324. package/node_modules/@orient-cli/coding-agent/dist/core/bash-executor.d.ts.map +1 -0
  325. package/node_modules/@orient-cli/coding-agent/dist/core/bash-executor.js +125 -0
  326. package/node_modules/@orient-cli/coding-agent/dist/core/bash-executor.js.map +1 -0
  327. package/node_modules/@orient-cli/coding-agent/dist/core/compaction/branch-summarization.d.ts +88 -0
  328. package/node_modules/@orient-cli/coding-agent/dist/core/compaction/branch-summarization.d.ts.map +1 -0
  329. package/node_modules/@orient-cli/coding-agent/dist/core/compaction/branch-summarization.js +243 -0
  330. package/node_modules/@orient-cli/coding-agent/dist/core/compaction/branch-summarization.js.map +1 -0
  331. package/node_modules/@orient-cli/coding-agent/dist/core/compaction/compaction.d.ts +121 -0
  332. package/node_modules/@orient-cli/coding-agent/dist/core/compaction/compaction.d.ts.map +1 -0
  333. package/node_modules/@orient-cli/coding-agent/dist/core/compaction/compaction.js +613 -0
  334. package/node_modules/@orient-cli/coding-agent/dist/core/compaction/compaction.js.map +1 -0
  335. package/node_modules/@orient-cli/coding-agent/dist/core/compaction/index.d.ts +7 -0
  336. package/node_modules/@orient-cli/coding-agent/dist/core/compaction/index.d.ts.map +1 -0
  337. package/node_modules/@orient-cli/coding-agent/dist/core/compaction/index.js +7 -0
  338. package/node_modules/@orient-cli/coding-agent/dist/core/compaction/index.js.map +1 -0
  339. package/node_modules/@orient-cli/coding-agent/dist/core/compaction/utils.d.ts +38 -0
  340. package/node_modules/@orient-cli/coding-agent/dist/core/compaction/utils.d.ts.map +1 -0
  341. package/node_modules/@orient-cli/coding-agent/dist/core/compaction/utils.js +153 -0
  342. package/node_modules/@orient-cli/coding-agent/dist/core/compaction/utils.js.map +1 -0
  343. package/node_modules/@orient-cli/coding-agent/dist/core/defaults.d.ts +3 -0
  344. package/node_modules/@orient-cli/coding-agent/dist/core/defaults.d.ts.map +1 -0
  345. package/node_modules/@orient-cli/coding-agent/dist/core/defaults.js +2 -0
  346. package/node_modules/@orient-cli/coding-agent/dist/core/defaults.js.map +1 -0
  347. package/node_modules/@orient-cli/coding-agent/dist/core/diagnostics.d.ts +15 -0
  348. package/node_modules/@orient-cli/coding-agent/dist/core/diagnostics.d.ts.map +1 -0
  349. package/node_modules/@orient-cli/coding-agent/dist/core/diagnostics.js +2 -0
  350. package/node_modules/@orient-cli/coding-agent/dist/core/diagnostics.js.map +1 -0
  351. package/node_modules/@orient-cli/coding-agent/dist/core/event-bus.d.ts +9 -0
  352. package/node_modules/@orient-cli/coding-agent/dist/core/event-bus.d.ts.map +1 -0
  353. package/node_modules/@orient-cli/coding-agent/dist/core/event-bus.js +25 -0
  354. package/node_modules/@orient-cli/coding-agent/dist/core/event-bus.js.map +1 -0
  355. package/node_modules/@orient-cli/coding-agent/dist/core/exec.d.ts +29 -0
  356. package/node_modules/@orient-cli/coding-agent/dist/core/exec.d.ts.map +1 -0
  357. package/node_modules/@orient-cli/coding-agent/dist/core/exec.js +75 -0
  358. package/node_modules/@orient-cli/coding-agent/dist/core/exec.js.map +1 -0
  359. package/node_modules/@orient-cli/coding-agent/dist/core/export-html/ansi-to-html.d.ts +22 -0
  360. package/node_modules/@orient-cli/coding-agent/dist/core/export-html/ansi-to-html.d.ts.map +1 -0
  361. package/node_modules/@orient-cli/coding-agent/dist/core/export-html/ansi-to-html.js +249 -0
  362. package/node_modules/@orient-cli/coding-agent/dist/core/export-html/ansi-to-html.js.map +1 -0
  363. package/node_modules/@orient-cli/coding-agent/dist/core/export-html/index.d.ts +37 -0
  364. package/node_modules/@orient-cli/coding-agent/dist/core/export-html/index.d.ts.map +1 -0
  365. package/node_modules/@orient-cli/coding-agent/dist/core/export-html/index.js +224 -0
  366. package/node_modules/@orient-cli/coding-agent/dist/core/export-html/index.js.map +1 -0
  367. package/node_modules/@orient-cli/coding-agent/dist/core/export-html/template.css +1001 -0
  368. package/node_modules/@orient-cli/coding-agent/dist/core/export-html/template.html +55 -0
  369. package/node_modules/@orient-cli/coding-agent/dist/core/export-html/template.js +1690 -0
  370. package/node_modules/@orient-cli/coding-agent/dist/core/export-html/tool-renderer.d.ts +40 -0
  371. package/node_modules/@orient-cli/coding-agent/dist/core/export-html/tool-renderer.d.ts.map +1 -0
  372. package/node_modules/@orient-cli/coding-agent/dist/core/export-html/tool-renderer.js +95 -0
  373. package/node_modules/@orient-cli/coding-agent/dist/core/export-html/tool-renderer.js.map +1 -0
  374. package/node_modules/@orient-cli/coding-agent/dist/core/export-html/vendor/highlight.min.js +1213 -0
  375. package/node_modules/@orient-cli/coding-agent/dist/core/export-html/vendor/marked.min.js +6 -0
  376. package/node_modules/@orient-cli/coding-agent/dist/core/extensions/index.d.ts +12 -0
  377. package/node_modules/@orient-cli/coding-agent/dist/core/extensions/index.d.ts.map +1 -0
  378. package/node_modules/@orient-cli/coding-agent/dist/core/extensions/index.js +9 -0
  379. package/node_modules/@orient-cli/coding-agent/dist/core/extensions/index.js.map +1 -0
  380. package/node_modules/@orient-cli/coding-agent/dist/core/extensions/loader.d.ts +25 -0
  381. package/node_modules/@orient-cli/coding-agent/dist/core/extensions/loader.d.ts.map +1 -0
  382. package/node_modules/@orient-cli/coding-agent/dist/core/extensions/loader.js +438 -0
  383. package/node_modules/@orient-cli/coding-agent/dist/core/extensions/loader.js.map +1 -0
  384. package/node_modules/@orient-cli/coding-agent/dist/core/extensions/runner.d.ts +148 -0
  385. package/node_modules/@orient-cli/coding-agent/dist/core/extensions/runner.d.ts.map +1 -0
  386. package/node_modules/@orient-cli/coding-agent/dist/core/extensions/runner.js +700 -0
  387. package/node_modules/@orient-cli/coding-agent/dist/core/extensions/runner.js.map +1 -0
  388. package/node_modules/@orient-cli/coding-agent/dist/core/extensions/types.d.ts +1073 -0
  389. package/node_modules/@orient-cli/coding-agent/dist/core/extensions/types.d.ts.map +1 -0
  390. package/node_modules/@orient-cli/coding-agent/dist/core/extensions/types.js +45 -0
  391. package/node_modules/@orient-cli/coding-agent/dist/core/extensions/types.js.map +1 -0
  392. package/node_modules/@orient-cli/coding-agent/dist/core/extensions/wrapper.d.ts +20 -0
  393. package/node_modules/@orient-cli/coding-agent/dist/core/extensions/wrapper.d.ts.map +1 -0
  394. package/node_modules/@orient-cli/coding-agent/dist/core/extensions/wrapper.js +22 -0
  395. package/node_modules/@orient-cli/coding-agent/dist/core/extensions/wrapper.js.map +1 -0
  396. package/node_modules/@orient-cli/coding-agent/dist/core/footer-data-provider.d.ts +48 -0
  397. package/node_modules/@orient-cli/coding-agent/dist/core/footer-data-provider.d.ts.map +1 -0
  398. package/node_modules/@orient-cli/coding-agent/dist/core/footer-data-provider.js +314 -0
  399. package/node_modules/@orient-cli/coding-agent/dist/core/footer-data-provider.js.map +1 -0
  400. package/node_modules/@orient-cli/coding-agent/dist/core/index.d.ts +12 -0
  401. package/node_modules/@orient-cli/coding-agent/dist/core/index.d.ts.map +1 -0
  402. package/node_modules/@orient-cli/coding-agent/dist/core/index.js +12 -0
  403. package/node_modules/@orient-cli/coding-agent/dist/core/index.js.map +1 -0
  404. package/node_modules/@orient-cli/coding-agent/dist/core/keybindings.d.ts +288 -0
  405. package/node_modules/@orient-cli/coding-agent/dist/core/keybindings.d.ts.map +1 -0
  406. package/node_modules/@orient-cli/coding-agent/dist/core/keybindings.js +240 -0
  407. package/node_modules/@orient-cli/coding-agent/dist/core/keybindings.js.map +1 -0
  408. package/node_modules/@orient-cli/coding-agent/dist/core/messages.d.ts +77 -0
  409. package/node_modules/@orient-cli/coding-agent/dist/core/messages.d.ts.map +1 -0
  410. package/node_modules/@orient-cli/coding-agent/dist/core/messages.js +123 -0
  411. package/node_modules/@orient-cli/coding-agent/dist/core/messages.js.map +1 -0
  412. package/node_modules/@orient-cli/coding-agent/dist/core/model-registry.d.ts +132 -0
  413. package/node_modules/@orient-cli/coding-agent/dist/core/model-registry.d.ts.map +1 -0
  414. package/node_modules/@orient-cli/coding-agent/dist/core/model-registry.js +612 -0
  415. package/node_modules/@orient-cli/coding-agent/dist/core/model-registry.js.map +1 -0
  416. package/node_modules/@orient-cli/coding-agent/dist/core/model-resolver.d.ts +110 -0
  417. package/node_modules/@orient-cli/coding-agent/dist/core/model-resolver.d.ts.map +1 -0
  418. package/node_modules/@orient-cli/coding-agent/dist/core/model-resolver.js +486 -0
  419. package/node_modules/@orient-cli/coding-agent/dist/core/model-resolver.js.map +1 -0
  420. package/node_modules/@orient-cli/coding-agent/dist/core/output-guard.d.ts +6 -0
  421. package/node_modules/@orient-cli/coding-agent/dist/core/output-guard.d.ts.map +1 -0
  422. package/node_modules/@orient-cli/coding-agent/dist/core/output-guard.js +59 -0
  423. package/node_modules/@orient-cli/coding-agent/dist/core/output-guard.js.map +1 -0
  424. package/node_modules/@orient-cli/coding-agent/dist/core/package-manager.d.ts +192 -0
  425. package/node_modules/@orient-cli/coding-agent/dist/core/package-manager.d.ts.map +1 -0
  426. package/node_modules/@orient-cli/coding-agent/dist/core/package-manager.js +1829 -0
  427. package/node_modules/@orient-cli/coding-agent/dist/core/package-manager.js.map +1 -0
  428. package/node_modules/@orient-cli/coding-agent/dist/core/prompt-templates.d.ts +51 -0
  429. package/node_modules/@orient-cli/coding-agent/dist/core/prompt-templates.d.ts.map +1 -0
  430. package/node_modules/@orient-cli/coding-agent/dist/core/prompt-templates.js +249 -0
  431. package/node_modules/@orient-cli/coding-agent/dist/core/prompt-templates.js.map +1 -0
  432. package/node_modules/@orient-cli/coding-agent/dist/core/resolve-config-value.d.ts +23 -0
  433. package/node_modules/@orient-cli/coding-agent/dist/core/resolve-config-value.d.ts.map +1 -0
  434. package/node_modules/@orient-cli/coding-agent/dist/core/resolve-config-value.js +126 -0
  435. package/node_modules/@orient-cli/coding-agent/dist/core/resolve-config-value.js.map +1 -0
  436. package/node_modules/@orient-cli/coding-agent/dist/core/resource-loader.d.ts +185 -0
  437. package/node_modules/@orient-cli/coding-agent/dist/core/resource-loader.d.ts.map +1 -0
  438. package/node_modules/@orient-cli/coding-agent/dist/core/resource-loader.js +720 -0
  439. package/node_modules/@orient-cli/coding-agent/dist/core/resource-loader.js.map +1 -0
  440. package/node_modules/@orient-cli/coding-agent/dist/core/sdk.d.ts +93 -0
  441. package/node_modules/@orient-cli/coding-agent/dist/core/sdk.d.ts.map +1 -0
  442. package/node_modules/@orient-cli/coding-agent/dist/core/sdk.js +236 -0
  443. package/node_modules/@orient-cli/coding-agent/dist/core/sdk.js.map +1 -0
  444. package/node_modules/@orient-cli/coding-agent/dist/core/session-cwd.d.ts +19 -0
  445. package/node_modules/@orient-cli/coding-agent/dist/core/session-cwd.d.ts.map +1 -0
  446. package/node_modules/@orient-cli/coding-agent/dist/core/session-cwd.js +38 -0
  447. package/node_modules/@orient-cli/coding-agent/dist/core/session-cwd.js.map +1 -0
  448. package/node_modules/@orient-cli/coding-agent/dist/core/session-manager.d.ts +333 -0
  449. package/node_modules/@orient-cli/coding-agent/dist/core/session-manager.d.ts.map +1 -0
  450. package/node_modules/@orient-cli/coding-agent/dist/core/session-manager.js +1105 -0
  451. package/node_modules/@orient-cli/coding-agent/dist/core/session-manager.js.map +1 -0
  452. package/node_modules/@orient-cli/coding-agent/dist/core/settings-manager.d.ts +237 -0
  453. package/node_modules/@orient-cli/coding-agent/dist/core/settings-manager.d.ts.map +1 -0
  454. package/node_modules/@orient-cli/coding-agent/dist/core/settings-manager.js +708 -0
  455. package/node_modules/@orient-cli/coding-agent/dist/core/settings-manager.js.map +1 -0
  456. package/node_modules/@orient-cli/coding-agent/dist/core/skills.d.ts +60 -0
  457. package/node_modules/@orient-cli/coding-agent/dist/core/skills.d.ts.map +1 -0
  458. package/node_modules/@orient-cli/coding-agent/dist/core/skills.js +409 -0
  459. package/node_modules/@orient-cli/coding-agent/dist/core/skills.js.map +1 -0
  460. package/node_modules/@orient-cli/coding-agent/dist/core/slash-commands.d.ts +14 -0
  461. package/node_modules/@orient-cli/coding-agent/dist/core/slash-commands.d.ts.map +1 -0
  462. package/node_modules/@orient-cli/coding-agent/dist/core/slash-commands.js +23 -0
  463. package/node_modules/@orient-cli/coding-agent/dist/core/slash-commands.js.map +1 -0
  464. package/node_modules/@orient-cli/coding-agent/dist/core/source-info.d.ts +18 -0
  465. package/node_modules/@orient-cli/coding-agent/dist/core/source-info.d.ts.map +1 -0
  466. package/node_modules/@orient-cli/coding-agent/dist/core/source-info.js +19 -0
  467. package/node_modules/@orient-cli/coding-agent/dist/core/source-info.js.map +1 -0
  468. package/node_modules/@orient-cli/coding-agent/dist/core/system-prompt.d.ts +28 -0
  469. package/node_modules/@orient-cli/coding-agent/dist/core/system-prompt.d.ts.map +1 -0
  470. package/node_modules/@orient-cli/coding-agent/dist/core/system-prompt.js +116 -0
  471. package/node_modules/@orient-cli/coding-agent/dist/core/system-prompt.js.map +1 -0
  472. package/node_modules/@orient-cli/coding-agent/dist/core/timings.d.ts +8 -0
  473. package/node_modules/@orient-cli/coding-agent/dist/core/timings.d.ts.map +1 -0
  474. package/node_modules/@orient-cli/coding-agent/dist/core/timings.js +31 -0
  475. package/node_modules/@orient-cli/coding-agent/dist/core/timings.js.map +1 -0
  476. package/node_modules/@orient-cli/coding-agent/dist/core/tools/bash.d.ts +73 -0
  477. package/node_modules/@orient-cli/coding-agent/dist/core/tools/bash.d.ts.map +1 -0
  478. package/node_modules/@orient-cli/coding-agent/dist/core/tools/bash.js +352 -0
  479. package/node_modules/@orient-cli/coding-agent/dist/core/tools/bash.js.map +1 -0
  480. package/node_modules/@orient-cli/coding-agent/dist/core/tools/edit-diff.d.ts +85 -0
  481. package/node_modules/@orient-cli/coding-agent/dist/core/tools/edit-diff.d.ts.map +1 -0
  482. package/node_modules/@orient-cli/coding-agent/dist/core/tools/edit-diff.js +337 -0
  483. package/node_modules/@orient-cli/coding-agent/dist/core/tools/edit-diff.js.map +1 -0
  484. package/node_modules/@orient-cli/coding-agent/dist/core/tools/edit.d.ts +53 -0
  485. package/node_modules/@orient-cli/coding-agent/dist/core/tools/edit.d.ts.map +1 -0
  486. package/node_modules/@orient-cli/coding-agent/dist/core/tools/edit.js +196 -0
  487. package/node_modules/@orient-cli/coding-agent/dist/core/tools/edit.js.map +1 -0
  488. package/node_modules/@orient-cli/coding-agent/dist/core/tools/file-mutation-queue.d.ts +6 -0
  489. package/node_modules/@orient-cli/coding-agent/dist/core/tools/file-mutation-queue.d.ts.map +1 -0
  490. package/node_modules/@orient-cli/coding-agent/dist/core/tools/file-mutation-queue.js +37 -0
  491. package/node_modules/@orient-cli/coding-agent/dist/core/tools/file-mutation-queue.js.map +1 -0
  492. package/node_modules/@orient-cli/coding-agent/dist/core/tools/find.d.ts +46 -0
  493. package/node_modules/@orient-cli/coding-agent/dist/core/tools/find.d.ts.map +1 -0
  494. package/node_modules/@orient-cli/coding-agent/dist/core/tools/find.js +258 -0
  495. package/node_modules/@orient-cli/coding-agent/dist/core/tools/find.js.map +1 -0
  496. package/node_modules/@orient-cli/coding-agent/dist/core/tools/grep.d.ts +56 -0
  497. package/node_modules/@orient-cli/coding-agent/dist/core/tools/grep.d.ts.map +1 -0
  498. package/node_modules/@orient-cli/coding-agent/dist/core/tools/grep.js +293 -0
  499. package/node_modules/@orient-cli/coding-agent/dist/core/tools/grep.js.map +1 -0
  500. package/node_modules/@orient-cli/coding-agent/dist/core/tools/index.d.ts +115 -0
  501. package/node_modules/@orient-cli/coding-agent/dist/core/tools/index.d.ts.map +1 -0
  502. package/node_modules/@orient-cli/coding-agent/dist/core/tools/index.js +86 -0
  503. package/node_modules/@orient-cli/coding-agent/dist/core/tools/index.js.map +1 -0
  504. package/node_modules/@orient-cli/coding-agent/dist/core/tools/ls.d.ts +46 -0
  505. package/node_modules/@orient-cli/coding-agent/dist/core/tools/ls.d.ts.map +1 -0
  506. package/node_modules/@orient-cli/coding-agent/dist/core/tools/ls.js +172 -0
  507. package/node_modules/@orient-cli/coding-agent/dist/core/tools/ls.js.map +1 -0
  508. package/node_modules/@orient-cli/coding-agent/dist/core/tools/path-utils.d.ts +8 -0
  509. package/node_modules/@orient-cli/coding-agent/dist/core/tools/path-utils.d.ts.map +1 -0
  510. package/node_modules/@orient-cli/coding-agent/dist/core/tools/path-utils.js +81 -0
  511. package/node_modules/@orient-cli/coding-agent/dist/core/tools/path-utils.js.map +1 -0
  512. package/node_modules/@orient-cli/coding-agent/dist/core/tools/read.d.ts +46 -0
  513. package/node_modules/@orient-cli/coding-agent/dist/core/tools/read.d.ts.map +1 -0
  514. package/node_modules/@orient-cli/coding-agent/dist/core/tools/read.js +225 -0
  515. package/node_modules/@orient-cli/coding-agent/dist/core/tools/read.js.map +1 -0
  516. package/node_modules/@orient-cli/coding-agent/dist/core/tools/render-utils.d.ts +21 -0
  517. package/node_modules/@orient-cli/coding-agent/dist/core/tools/render-utils.d.ts.map +1 -0
  518. package/node_modules/@orient-cli/coding-agent/dist/core/tools/render-utils.js +49 -0
  519. package/node_modules/@orient-cli/coding-agent/dist/core/tools/render-utils.js.map +1 -0
  520. package/node_modules/@orient-cli/coding-agent/dist/core/tools/tool-definition-wrapper.d.ts +14 -0
  521. package/node_modules/@orient-cli/coding-agent/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -0
  522. package/node_modules/@orient-cli/coding-agent/dist/core/tools/tool-definition-wrapper.js +32 -0
  523. package/node_modules/@orient-cli/coding-agent/dist/core/tools/tool-definition-wrapper.js.map +1 -0
  524. package/node_modules/@orient-cli/coding-agent/dist/core/tools/truncate.d.ts +70 -0
  525. package/node_modules/@orient-cli/coding-agent/dist/core/tools/truncate.d.ts.map +1 -0
  526. package/node_modules/@orient-cli/coding-agent/dist/core/tools/truncate.js +205 -0
  527. package/node_modules/@orient-cli/coding-agent/dist/core/tools/truncate.js.map +1 -0
  528. package/node_modules/@orient-cli/coding-agent/dist/core/tools/write.d.ts +35 -0
  529. package/node_modules/@orient-cli/coding-agent/dist/core/tools/write.d.ts.map +1 -0
  530. package/node_modules/@orient-cli/coding-agent/dist/core/tools/write.js +216 -0
  531. package/node_modules/@orient-cli/coding-agent/dist/core/tools/write.js.map +1 -0
  532. package/node_modules/@orient-cli/coding-agent/dist/index.d.ts +28 -0
  533. package/node_modules/@orient-cli/coding-agent/dist/index.d.ts.map +1 -0
  534. package/node_modules/@orient-cli/coding-agent/dist/index.js +43 -0
  535. package/node_modules/@orient-cli/coding-agent/dist/index.js.map +1 -0
  536. package/node_modules/@orient-cli/coding-agent/dist/main.d.ts +8 -0
  537. package/node_modules/@orient-cli/coding-agent/dist/main.d.ts.map +1 -0
  538. package/node_modules/@orient-cli/coding-agent/dist/main.js +593 -0
  539. package/node_modules/@orient-cli/coding-agent/dist/main.js.map +1 -0
  540. package/node_modules/@orient-cli/coding-agent/dist/migrations.d.ts +33 -0
  541. package/node_modules/@orient-cli/coding-agent/dist/migrations.d.ts.map +1 -0
  542. package/node_modules/@orient-cli/coding-agent/dist/migrations.js +281 -0
  543. package/node_modules/@orient-cli/coding-agent/dist/migrations.js.map +1 -0
  544. package/node_modules/@orient-cli/coding-agent/dist/modes/index.d.ts +9 -0
  545. package/node_modules/@orient-cli/coding-agent/dist/modes/index.d.ts.map +1 -0
  546. package/node_modules/@orient-cli/coding-agent/dist/modes/index.js +8 -0
  547. package/node_modules/@orient-cli/coding-agent/dist/modes/index.js.map +1 -0
  548. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/assistant-message.d.ts +18 -0
  549. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/assistant-message.d.ts.map +1 -0
  550. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/assistant-message.js +107 -0
  551. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/assistant-message.js.map +1 -0
  552. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/bash-execution.d.ts +34 -0
  553. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/bash-execution.d.ts.map +1 -0
  554. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/bash-execution.js +175 -0
  555. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/bash-execution.js.map +1 -0
  556. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/bordered-loader.d.ts +16 -0
  557. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -0
  558. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/bordered-loader.js +51 -0
  559. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/bordered-loader.js.map +1 -0
  560. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/branch-summary-message.d.ts +16 -0
  561. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -0
  562. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/branch-summary-message.js +44 -0
  563. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/branch-summary-message.js.map +1 -0
  564. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/compaction-summary-message.d.ts +16 -0
  565. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -0
  566. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/compaction-summary-message.js +45 -0
  567. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/compaction-summary-message.js.map +1 -0
  568. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/config-selector.d.ts +71 -0
  569. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/config-selector.d.ts.map +1 -0
  570. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/config-selector.js +479 -0
  571. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/config-selector.js.map +1 -0
  572. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/countdown-timer.d.ts +14 -0
  573. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -0
  574. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/countdown-timer.js +33 -0
  575. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/countdown-timer.js.map +1 -0
  576. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/custom-editor.d.ts +21 -0
  577. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/custom-editor.d.ts.map +1 -0
  578. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/custom-editor.js +70 -0
  579. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/custom-editor.js.map +1 -0
  580. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/custom-message.d.ts +20 -0
  581. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/custom-message.d.ts.map +1 -0
  582. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/custom-message.js +79 -0
  583. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/custom-message.js.map +1 -0
  584. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/diff.d.ts +12 -0
  585. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/diff.d.ts.map +1 -0
  586. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/diff.js +133 -0
  587. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/diff.js.map +1 -0
  588. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/dynamic-border.d.ts +15 -0
  589. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -0
  590. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/dynamic-border.js +21 -0
  591. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/dynamic-border.js.map +1 -0
  592. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/extension-editor.d.ts +20 -0
  593. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/extension-editor.d.ts.map +1 -0
  594. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/extension-editor.js +111 -0
  595. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/extension-editor.js.map +1 -0
  596. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/extension-input.d.ts +23 -0
  597. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/extension-input.d.ts.map +1 -0
  598. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/extension-input.js +61 -0
  599. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/extension-input.js.map +1 -0
  600. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/extension-selector.d.ts +24 -0
  601. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/extension-selector.d.ts.map +1 -0
  602. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/extension-selector.js +78 -0
  603. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/extension-selector.js.map +1 -0
  604. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/footer.d.ts +27 -0
  605. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/footer.d.ts.map +1 -0
  606. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/footer.js +201 -0
  607. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/footer.js.map +1 -0
  608. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/index.d.ts +31 -0
  609. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/index.d.ts.map +1 -0
  610. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/index.js +34 -0
  611. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/index.js.map +1 -0
  612. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/keybinding-hints.d.ts +8 -0
  613. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -0
  614. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/keybinding-hints.js +22 -0
  615. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/keybinding-hints.js.map +1 -0
  616. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/login-dialog.d.ts +42 -0
  617. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/login-dialog.d.ts.map +1 -0
  618. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/login-dialog.js +145 -0
  619. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/login-dialog.js.map +1 -0
  620. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/model-selector.d.ts +47 -0
  621. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/model-selector.d.ts.map +1 -0
  622. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/model-selector.js +275 -0
  623. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/model-selector.js.map +1 -0
  624. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/oauth-selector.d.ts +19 -0
  625. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -0
  626. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/oauth-selector.js +97 -0
  627. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/oauth-selector.js.map +1 -0
  628. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/orient-banner.d.ts +53 -0
  629. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/orient-banner.d.ts.map +1 -0
  630. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/orient-banner.js +204 -0
  631. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/orient-banner.js.map +1 -0
  632. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/scoped-models-selector.d.ts +49 -0
  633. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -0
  634. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/scoped-models-selector.js +275 -0
  635. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/scoped-models-selector.js.map +1 -0
  636. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/session-selector-search.d.ts +23 -0
  637. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -0
  638. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/session-selector-search.js +155 -0
  639. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/session-selector-search.js.map +1 -0
  640. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/session-selector.d.ts +95 -0
  641. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/session-selector.d.ts.map +1 -0
  642. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/session-selector.js +848 -0
  643. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/session-selector.js.map +1 -0
  644. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/settings-selector.d.ts +58 -0
  645. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/settings-selector.d.ts.map +1 -0
  646. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/settings-selector.js +301 -0
  647. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/settings-selector.js.map +1 -0
  648. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/show-images-selector.d.ts +10 -0
  649. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -0
  650. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/show-images-selector.js +39 -0
  651. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/show-images-selector.js.map +1 -0
  652. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/skill-invocation-message.d.ts +17 -0
  653. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -0
  654. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/skill-invocation-message.js +47 -0
  655. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/skill-invocation-message.js.map +1 -0
  656. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/theme-selector.d.ts +11 -0
  657. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/theme-selector.d.ts.map +1 -0
  658. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/theme-selector.js +50 -0
  659. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/theme-selector.js.map +1 -0
  660. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/thinking-selector.d.ts +11 -0
  661. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -0
  662. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/thinking-selector.js +51 -0
  663. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/thinking-selector.js.map +1 -0
  664. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/tool-execution.d.ts +58 -0
  665. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/tool-execution.d.ts.map +1 -0
  666. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/tool-execution.js +274 -0
  667. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -0
  668. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/tree-selector.d.ts +89 -0
  669. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/tree-selector.d.ts.map +1 -0
  670. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/tree-selector.js +1084 -0
  671. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/tree-selector.js.map +1 -0
  672. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/user-message-selector.d.ts +30 -0
  673. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -0
  674. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/user-message-selector.js +113 -0
  675. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/user-message-selector.js.map +1 -0
  676. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/user-message.d.ts +9 -0
  677. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/user-message.d.ts.map +1 -0
  678. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/user-message.js +28 -0
  679. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/user-message.js.map +1 -0
  680. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/visual-truncate.d.ts +24 -0
  681. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -0
  682. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/visual-truncate.js +33 -0
  683. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/components/visual-truncate.js.map +1 -0
  684. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/interactive-mode.d.ts +321 -0
  685. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -0
  686. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/interactive-mode.js +4000 -0
  687. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -0
  688. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/theme/dark.json +85 -0
  689. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/theme/light.json +84 -0
  690. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/theme/theme-schema.json +335 -0
  691. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/theme/theme.d.ts +81 -0
  692. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/theme/theme.d.ts.map +1 -0
  693. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/theme/theme.js +979 -0
  694. package/node_modules/@orient-cli/coding-agent/dist/modes/interactive/theme/theme.js.map +1 -0
  695. package/node_modules/@orient-cli/coding-agent/dist/modes/print-mode.d.ts +28 -0
  696. package/node_modules/@orient-cli/coding-agent/dist/modes/print-mode.d.ts.map +1 -0
  697. package/node_modules/@orient-cli/coding-agent/dist/modes/print-mode.js +112 -0
  698. package/node_modules/@orient-cli/coding-agent/dist/modes/print-mode.js.map +1 -0
  699. package/node_modules/@orient-cli/coding-agent/dist/modes/rpc/jsonl.d.ts +17 -0
  700. package/node_modules/@orient-cli/coding-agent/dist/modes/rpc/jsonl.d.ts.map +1 -0
  701. package/node_modules/@orient-cli/coding-agent/dist/modes/rpc/jsonl.js +49 -0
  702. package/node_modules/@orient-cli/coding-agent/dist/modes/rpc/jsonl.js.map +1 -0
  703. package/node_modules/@orient-cli/coding-agent/dist/modes/rpc/rpc-client.d.ts +217 -0
  704. package/node_modules/@orient-cli/coding-agent/dist/modes/rpc/rpc-client.d.ts.map +1 -0
  705. package/node_modules/@orient-cli/coding-agent/dist/modes/rpc/rpc-client.js +402 -0
  706. package/node_modules/@orient-cli/coding-agent/dist/modes/rpc/rpc-client.js.map +1 -0
  707. package/node_modules/@orient-cli/coding-agent/dist/modes/rpc/rpc-mode.d.ts +20 -0
  708. package/node_modules/@orient-cli/coding-agent/dist/modes/rpc/rpc-mode.d.ts.map +1 -0
  709. package/node_modules/@orient-cli/coding-agent/dist/modes/rpc/rpc-mode.js +550 -0
  710. package/node_modules/@orient-cli/coding-agent/dist/modes/rpc/rpc-mode.js.map +1 -0
  711. package/node_modules/@orient-cli/coding-agent/dist/modes/rpc/rpc-types.d.ts +408 -0
  712. package/node_modules/@orient-cli/coding-agent/dist/modes/rpc/rpc-types.d.ts.map +1 -0
  713. package/node_modules/@orient-cli/coding-agent/dist/modes/rpc/rpc-types.js +8 -0
  714. package/node_modules/@orient-cli/coding-agent/dist/modes/rpc/rpc-types.js.map +1 -0
  715. package/node_modules/@orient-cli/coding-agent/dist/package-manager-cli.d.ts +4 -0
  716. package/node_modules/@orient-cli/coding-agent/dist/package-manager-cli.d.ts.map +1 -0
  717. package/node_modules/@orient-cli/coding-agent/dist/package-manager-cli.js +234 -0
  718. package/node_modules/@orient-cli/coding-agent/dist/package-manager-cli.js.map +1 -0
  719. package/node_modules/@orient-cli/coding-agent/dist/utils/changelog.d.ts +21 -0
  720. package/node_modules/@orient-cli/coding-agent/dist/utils/changelog.d.ts.map +1 -0
  721. package/node_modules/@orient-cli/coding-agent/dist/utils/changelog.js +87 -0
  722. package/node_modules/@orient-cli/coding-agent/dist/utils/changelog.js.map +1 -0
  723. package/node_modules/@orient-cli/coding-agent/dist/utils/child-process.d.ts +11 -0
  724. package/node_modules/@orient-cli/coding-agent/dist/utils/child-process.d.ts.map +1 -0
  725. package/node_modules/@orient-cli/coding-agent/dist/utils/child-process.js +78 -0
  726. package/node_modules/@orient-cli/coding-agent/dist/utils/child-process.js.map +1 -0
  727. package/node_modules/@orient-cli/coding-agent/dist/utils/clipboard-image.d.ts +11 -0
  728. package/node_modules/@orient-cli/coding-agent/dist/utils/clipboard-image.d.ts.map +1 -0
  729. package/node_modules/@orient-cli/coding-agent/dist/utils/clipboard-image.js +245 -0
  730. package/node_modules/@orient-cli/coding-agent/dist/utils/clipboard-image.js.map +1 -0
  731. package/node_modules/@orient-cli/coding-agent/dist/utils/clipboard-native.d.ts +8 -0
  732. package/node_modules/@orient-cli/coding-agent/dist/utils/clipboard-native.d.ts.map +1 -0
  733. package/node_modules/@orient-cli/coding-agent/dist/utils/clipboard-native.js +14 -0
  734. package/node_modules/@orient-cli/coding-agent/dist/utils/clipboard-native.js.map +1 -0
  735. package/node_modules/@orient-cli/coding-agent/dist/utils/clipboard.d.ts +2 -0
  736. package/node_modules/@orient-cli/coding-agent/dist/utils/clipboard.d.ts.map +1 -0
  737. package/node_modules/@orient-cli/coding-agent/dist/utils/clipboard.js +78 -0
  738. package/node_modules/@orient-cli/coding-agent/dist/utils/clipboard.js.map +1 -0
  739. package/node_modules/@orient-cli/coding-agent/dist/utils/exif-orientation.d.ts +5 -0
  740. package/node_modules/@orient-cli/coding-agent/dist/utils/exif-orientation.d.ts.map +1 -0
  741. package/node_modules/@orient-cli/coding-agent/dist/utils/exif-orientation.js +158 -0
  742. package/node_modules/@orient-cli/coding-agent/dist/utils/exif-orientation.js.map +1 -0
  743. package/node_modules/@orient-cli/coding-agent/dist/utils/frontmatter.d.ts +8 -0
  744. package/node_modules/@orient-cli/coding-agent/dist/utils/frontmatter.d.ts.map +1 -0
  745. package/node_modules/@orient-cli/coding-agent/dist/utils/frontmatter.js +26 -0
  746. package/node_modules/@orient-cli/coding-agent/dist/utils/frontmatter.js.map +1 -0
  747. package/node_modules/@orient-cli/coding-agent/dist/utils/git.d.ts +26 -0
  748. package/node_modules/@orient-cli/coding-agent/dist/utils/git.d.ts.map +1 -0
  749. package/node_modules/@orient-cli/coding-agent/dist/utils/git.js +163 -0
  750. package/node_modules/@orient-cli/coding-agent/dist/utils/git.js.map +1 -0
  751. package/node_modules/@orient-cli/coding-agent/dist/utils/image-convert.d.ts +9 -0
  752. package/node_modules/@orient-cli/coding-agent/dist/utils/image-convert.d.ts.map +1 -0
  753. package/node_modules/@orient-cli/coding-agent/dist/utils/image-convert.js +39 -0
  754. package/node_modules/@orient-cli/coding-agent/dist/utils/image-convert.js.map +1 -0
  755. package/node_modules/@orient-cli/coding-agent/dist/utils/image-resize.d.ts +36 -0
  756. package/node_modules/@orient-cli/coding-agent/dist/utils/image-resize.d.ts.map +1 -0
  757. package/node_modules/@orient-cli/coding-agent/dist/utils/image-resize.js +137 -0
  758. package/node_modules/@orient-cli/coding-agent/dist/utils/image-resize.js.map +1 -0
  759. package/node_modules/@orient-cli/coding-agent/dist/utils/mime.d.ts +2 -0
  760. package/node_modules/@orient-cli/coding-agent/dist/utils/mime.d.ts.map +1 -0
  761. package/node_modules/@orient-cli/coding-agent/dist/utils/mime.js +26 -0
  762. package/node_modules/@orient-cli/coding-agent/dist/utils/mime.js.map +1 -0
  763. package/node_modules/@orient-cli/coding-agent/dist/utils/paths.d.ts +7 -0
  764. package/node_modules/@orient-cli/coding-agent/dist/utils/paths.d.ts.map +1 -0
  765. package/node_modules/@orient-cli/coding-agent/dist/utils/paths.js +19 -0
  766. package/node_modules/@orient-cli/coding-agent/dist/utils/paths.js.map +1 -0
  767. package/node_modules/@orient-cli/coding-agent/dist/utils/photon.d.ts +21 -0
  768. package/node_modules/@orient-cli/coding-agent/dist/utils/photon.d.ts.map +1 -0
  769. package/node_modules/@orient-cli/coding-agent/dist/utils/photon.js +121 -0
  770. package/node_modules/@orient-cli/coding-agent/dist/utils/photon.js.map +1 -0
  771. package/node_modules/@orient-cli/coding-agent/dist/utils/shell.d.ts +26 -0
  772. package/node_modules/@orient-cli/coding-agent/dist/utils/shell.d.ts.map +1 -0
  773. package/node_modules/@orient-cli/coding-agent/dist/utils/shell.js +186 -0
  774. package/node_modules/@orient-cli/coding-agent/dist/utils/shell.js.map +1 -0
  775. package/node_modules/@orient-cli/coding-agent/dist/utils/sleep.d.ts +5 -0
  776. package/node_modules/@orient-cli/coding-agent/dist/utils/sleep.d.ts.map +1 -0
  777. package/node_modules/@orient-cli/coding-agent/dist/utils/sleep.js +17 -0
  778. package/node_modules/@orient-cli/coding-agent/dist/utils/sleep.js.map +1 -0
  779. package/node_modules/@orient-cli/coding-agent/dist/utils/tools-manager.d.ts +3 -0
  780. package/node_modules/@orient-cli/coding-agent/dist/utils/tools-manager.d.ts.map +1 -0
  781. package/node_modules/@orient-cli/coding-agent/dist/utils/tools-manager.js +252 -0
  782. package/node_modules/@orient-cli/coding-agent/dist/utils/tools-manager.js.map +1 -0
  783. package/node_modules/@orient-cli/coding-agent/package.json +104 -0
  784. package/node_modules/@orient-cli/tui/README.md +767 -0
  785. package/node_modules/@orient-cli/tui/dist/autocomplete.d.ts +52 -0
  786. package/node_modules/@orient-cli/tui/dist/autocomplete.d.ts.map +1 -0
  787. package/node_modules/@orient-cli/tui/dist/autocomplete.js +623 -0
  788. package/node_modules/@orient-cli/tui/dist/autocomplete.js.map +1 -0
  789. package/node_modules/@orient-cli/tui/dist/components/box.d.ts +22 -0
  790. package/node_modules/@orient-cli/tui/dist/components/box.d.ts.map +1 -0
  791. package/node_modules/@orient-cli/tui/dist/components/box.js +104 -0
  792. package/node_modules/@orient-cli/tui/dist/components/box.js.map +1 -0
  793. package/node_modules/@orient-cli/tui/dist/components/cancellable-loader.d.ts +22 -0
  794. package/node_modules/@orient-cli/tui/dist/components/cancellable-loader.d.ts.map +1 -0
  795. package/node_modules/@orient-cli/tui/dist/components/cancellable-loader.js +35 -0
  796. package/node_modules/@orient-cli/tui/dist/components/cancellable-loader.js.map +1 -0
  797. package/node_modules/@orient-cli/tui/dist/components/editor.d.ts +244 -0
  798. package/node_modules/@orient-cli/tui/dist/components/editor.d.ts.map +1 -0
  799. package/node_modules/@orient-cli/tui/dist/components/editor.js +1861 -0
  800. package/node_modules/@orient-cli/tui/dist/components/editor.js.map +1 -0
  801. package/node_modules/@orient-cli/tui/dist/components/image.d.ts +28 -0
  802. package/node_modules/@orient-cli/tui/dist/components/image.d.ts.map +1 -0
  803. package/node_modules/@orient-cli/tui/dist/components/image.js +69 -0
  804. package/node_modules/@orient-cli/tui/dist/components/image.js.map +1 -0
  805. package/node_modules/@orient-cli/tui/dist/components/input.d.ts +37 -0
  806. package/node_modules/@orient-cli/tui/dist/components/input.d.ts.map +1 -0
  807. package/node_modules/@orient-cli/tui/dist/components/input.js +426 -0
  808. package/node_modules/@orient-cli/tui/dist/components/input.js.map +1 -0
  809. package/node_modules/@orient-cli/tui/dist/components/loader.d.ts +21 -0
  810. package/node_modules/@orient-cli/tui/dist/components/loader.d.ts.map +1 -0
  811. package/node_modules/@orient-cli/tui/dist/components/loader.js +49 -0
  812. package/node_modules/@orient-cli/tui/dist/components/loader.js.map +1 -0
  813. package/node_modules/@orient-cli/tui/dist/components/markdown.d.ts +95 -0
  814. package/node_modules/@orient-cli/tui/dist/components/markdown.d.ts.map +1 -0
  815. package/node_modules/@orient-cli/tui/dist/components/markdown.js +663 -0
  816. package/node_modules/@orient-cli/tui/dist/components/markdown.js.map +1 -0
  817. package/node_modules/@orient-cli/tui/dist/components/select-list.d.ts +50 -0
  818. package/node_modules/@orient-cli/tui/dist/components/select-list.d.ts.map +1 -0
  819. package/node_modules/@orient-cli/tui/dist/components/select-list.js +159 -0
  820. package/node_modules/@orient-cli/tui/dist/components/select-list.js.map +1 -0
  821. package/node_modules/@orient-cli/tui/dist/components/settings-list.d.ts +50 -0
  822. package/node_modules/@orient-cli/tui/dist/components/settings-list.d.ts.map +1 -0
  823. package/node_modules/@orient-cli/tui/dist/components/settings-list.js +185 -0
  824. package/node_modules/@orient-cli/tui/dist/components/settings-list.js.map +1 -0
  825. package/node_modules/@orient-cli/tui/dist/components/spacer.d.ts +12 -0
  826. package/node_modules/@orient-cli/tui/dist/components/spacer.d.ts.map +1 -0
  827. package/node_modules/@orient-cli/tui/dist/components/spacer.js +23 -0
  828. package/node_modules/@orient-cli/tui/dist/components/spacer.js.map +1 -0
  829. package/node_modules/@orient-cli/tui/dist/components/text.d.ts +19 -0
  830. package/node_modules/@orient-cli/tui/dist/components/text.d.ts.map +1 -0
  831. package/node_modules/@orient-cli/tui/dist/components/text.js +89 -0
  832. package/node_modules/@orient-cli/tui/dist/components/text.js.map +1 -0
  833. package/node_modules/@orient-cli/tui/dist/components/truncated-text.d.ts +13 -0
  834. package/node_modules/@orient-cli/tui/dist/components/truncated-text.d.ts.map +1 -0
  835. package/node_modules/@orient-cli/tui/dist/components/truncated-text.js +51 -0
  836. package/node_modules/@orient-cli/tui/dist/components/truncated-text.js.map +1 -0
  837. package/node_modules/@orient-cli/tui/dist/editor-component.d.ts +39 -0
  838. package/node_modules/@orient-cli/tui/dist/editor-component.d.ts.map +1 -0
  839. package/node_modules/@orient-cli/tui/dist/editor-component.js +2 -0
  840. package/node_modules/@orient-cli/tui/dist/editor-component.js.map +1 -0
  841. package/node_modules/@orient-cli/tui/dist/fuzzy.d.ts +16 -0
  842. package/node_modules/@orient-cli/tui/dist/fuzzy.d.ts.map +1 -0
  843. package/node_modules/@orient-cli/tui/dist/fuzzy.js +107 -0
  844. package/node_modules/@orient-cli/tui/dist/fuzzy.js.map +1 -0
  845. package/node_modules/@orient-cli/tui/dist/index.d.ts +23 -0
  846. package/node_modules/@orient-cli/tui/dist/index.d.ts.map +1 -0
  847. package/node_modules/@orient-cli/tui/dist/index.js +32 -0
  848. package/node_modules/@orient-cli/tui/dist/index.js.map +1 -0
  849. package/node_modules/@orient-cli/tui/dist/keybindings.d.ts +193 -0
  850. package/node_modules/@orient-cli/tui/dist/keybindings.d.ts.map +1 -0
  851. package/node_modules/@orient-cli/tui/dist/keybindings.js +174 -0
  852. package/node_modules/@orient-cli/tui/dist/keybindings.js.map +1 -0
  853. package/node_modules/@orient-cli/tui/dist/keys.d.ts +170 -0
  854. package/node_modules/@orient-cli/tui/dist/keys.d.ts.map +1 -0
  855. package/node_modules/@orient-cli/tui/dist/keys.js +1124 -0
  856. package/node_modules/@orient-cli/tui/dist/keys.js.map +1 -0
  857. package/node_modules/@orient-cli/tui/dist/kill-ring.d.ts +28 -0
  858. package/node_modules/@orient-cli/tui/dist/kill-ring.d.ts.map +1 -0
  859. package/node_modules/@orient-cli/tui/dist/kill-ring.js +44 -0
  860. package/node_modules/@orient-cli/tui/dist/kill-ring.js.map +1 -0
  861. package/node_modules/@orient-cli/tui/dist/stdin-buffer.d.ts +48 -0
  862. package/node_modules/@orient-cli/tui/dist/stdin-buffer.d.ts.map +1 -0
  863. package/node_modules/@orient-cli/tui/dist/stdin-buffer.js +317 -0
  864. package/node_modules/@orient-cli/tui/dist/stdin-buffer.js.map +1 -0
  865. package/node_modules/@orient-cli/tui/dist/terminal-image.d.ts +68 -0
  866. package/node_modules/@orient-cli/tui/dist/terminal-image.d.ts.map +1 -0
  867. package/node_modules/@orient-cli/tui/dist/terminal-image.js +288 -0
  868. package/node_modules/@orient-cli/tui/dist/terminal-image.js.map +1 -0
  869. package/node_modules/@orient-cli/tui/dist/terminal.d.ts +84 -0
  870. package/node_modules/@orient-cli/tui/dist/terminal.d.ts.map +1 -0
  871. package/node_modules/@orient-cli/tui/dist/terminal.js +285 -0
  872. package/node_modules/@orient-cli/tui/dist/terminal.js.map +1 -0
  873. package/node_modules/@orient-cli/tui/dist/tui.d.ts +222 -0
  874. package/node_modules/@orient-cli/tui/dist/tui.d.ts.map +1 -0
  875. package/node_modules/@orient-cli/tui/dist/tui.js +1008 -0
  876. package/node_modules/@orient-cli/tui/dist/tui.js.map +1 -0
  877. package/node_modules/@orient-cli/tui/dist/undo-stack.d.ts +17 -0
  878. package/node_modules/@orient-cli/tui/dist/undo-stack.d.ts.map +1 -0
  879. package/node_modules/@orient-cli/tui/dist/undo-stack.js +25 -0
  880. package/node_modules/@orient-cli/tui/dist/undo-stack.js.map +1 -0
  881. package/node_modules/@orient-cli/tui/dist/utils.d.ts +78 -0
  882. package/node_modules/@orient-cli/tui/dist/utils.d.ts.map +1 -0
  883. package/node_modules/@orient-cli/tui/dist/utils.js +960 -0
  884. package/node_modules/@orient-cli/tui/dist/utils.js.map +1 -0
  885. package/node_modules/@orient-cli/tui/package.json +52 -0
  886. package/package.json +47 -8
  887. package/prompts/orient-blockers.md +0 -0
  888. package/prompts/orient-handoff.md +0 -0
  889. package/prompts/orient-recap.md +0 -0
  890. package/schemas/orient-full/schema.yaml +0 -0
  891. package/schemas/orient-minimal/schema.yaml +0 -0
  892. package/schemas/orient-standard/schema.yaml +0 -0
  893. package/schemas/orient-standard/templates/archive-summary.md +0 -0
  894. package/schemas/orient-standard/templates/brief.md +0 -0
  895. package/schemas/orient-standard/templates/constitution.md +0 -0
  896. package/schemas/orient-standard/templates/current-system-audit.md +0 -0
  897. package/schemas/orient-standard/templates/current-truth-sync.md +0 -0
  898. package/schemas/orient-standard/templates/decisions.md +0 -0
  899. package/schemas/orient-standard/templates/normalize-checklist.md +0 -0
  900. package/schemas/orient-standard/templates/plan.md +0 -0
  901. package/schemas/orient-standard/templates/qa-checklist.md +0 -0
  902. package/schemas/orient-standard/templates/research.md +0 -0
  903. package/schemas/orient-standard/templates/sources.md +0 -0
  904. package/schemas/orient-standard/templates/spec.md +0 -0
  905. package/schemas/orient-standard/templates/state.md +0 -0
  906. package/schemas/orient-standard/templates/tasks.md +0 -0
  907. package/schemas/orient-standard/templates/traceability-matrix.md +0 -0
  908. package/schemas/orient-standard/templates/verify.md +0 -0
  909. package/schemas/orient-standard/templates/work-log.md +0 -0
  910. package/schemas/orient-standard/templates-tier-1/brief.md +22 -0
  911. package/schemas/orient-standard/templates-tier-1/plan.md +17 -0
  912. package/schemas/orient-standard/templates-tier-1/spec.md +23 -0
  913. package/schemas/orient-standard/templates-tier-1/tasks.md +14 -0
  914. package/schemas/orient-standard/templates-tier-2/brief.md +32 -0
  915. package/schemas/orient-standard/templates-tier-2/plan.md +44 -0
  916. package/schemas/orient-standard/templates-tier-2/spec.md +46 -0
  917. package/schemas/orient-standard/templates-tier-2/tasks.md +34 -0
  918. package/schemas/orient-standard/templates-tier-3/brief.md +54 -0
  919. package/schemas/orient-standard/templates-tier-3/plan.md +67 -0
  920. package/schemas/orient-standard/templates-tier-3/spec.md +65 -0
  921. package/schemas/orient-standard/templates-tier-3/tasks.md +79 -0
  922. package/skills/orient-analyze/SKILL.md +0 -0
  923. package/skills/orient-archive/SKILL.md +0 -0
  924. package/skills/orient-clarify/SKILL.md +0 -0
  925. package/skills/orient-constitution/SKILL.md +0 -0
  926. package/skills/orient-decide/SKILL.md +0 -0
  927. package/skills/orient-execute/SKILL.md +0 -0
  928. package/skills/orient-integrate/SKILL.md +0 -0
  929. package/skills/orient-normalize/SKILL.md +0 -0
  930. package/skills/orient-orient/SKILL.md +0 -0
  931. package/skills/orient-plan/SKILL.md +0 -0
  932. package/skills/orient-research/SKILL.md +0 -0
  933. package/skills/orient-state/SKILL.md +0 -0
  934. package/skills/orient-tasks/SKILL.md +0 -0
  935. package/skills/orient-test/SKILL.md +0 -0
  936. package/skills/orient-verify/SKILL.md +0 -0
@@ -0,0 +1,23 @@
1
+ import type { SessionInfo } from "../../../core/session-manager.js";
2
+ export type SortMode = "threaded" | "recent" | "relevance";
3
+ export type NameFilter = "all" | "named";
4
+ export interface ParsedSearchQuery {
5
+ mode: "tokens" | "regex";
6
+ tokens: {
7
+ kind: "fuzzy" | "phrase";
8
+ value: string;
9
+ }[];
10
+ regex: RegExp | null;
11
+ /** If set, parsing failed and we should treat query as non-matching. */
12
+ error?: string;
13
+ }
14
+ export interface MatchResult {
15
+ matches: boolean;
16
+ /** Lower is better; only meaningful when matches === true */
17
+ score: number;
18
+ }
19
+ export declare function hasSessionName(session: SessionInfo): boolean;
20
+ export declare function parseSearchQuery(query: string): ParsedSearchQuery;
21
+ export declare function matchSession(session: SessionInfo, parsed: ParsedSearchQuery): MatchResult;
22
+ export declare function filterAndSortSessions(sessions: SessionInfo[], query: string, sortMode: SortMode, nameFilter?: NameFilter): SessionInfo[];
23
+ //# sourceMappingURL=session-selector-search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-selector-search.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/session-selector-search.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAEpE,MAAM,MAAM,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE3D,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,OAAO,CAAC;AAEzC,MAAM,WAAW,iBAAiB;IACjC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC;IACzB,MAAM,EAAE;QAAE,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACtD,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,wEAAwE;IACxE,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,6DAA6D;IAC7D,KAAK,EAAE,MAAM,CAAC;CACd;AAUD,wBAAgB,cAAc,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAE5D;AAOD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,iBAAiB,CA2EjE;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,iBAAiB,GAAG,WAAW,CAsCzF;AAED,wBAAgB,qBAAqB,CACpC,QAAQ,EAAE,WAAW,EAAE,EACvB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,QAAQ,EAClB,UAAU,GAAE,UAAkB,GAC5B,WAAW,EAAE,CAiCf","sourcesContent":["import { fuzzyMatch } from \"@orient-cli/tui\";\nimport type { SessionInfo } from \"../../../core/session-manager.js\";\n\nexport type SortMode = \"threaded\" | \"recent\" | \"relevance\";\n\nexport type NameFilter = \"all\" | \"named\";\n\nexport interface ParsedSearchQuery {\n\tmode: \"tokens\" | \"regex\";\n\ttokens: { kind: \"fuzzy\" | \"phrase\"; value: string }[];\n\tregex: RegExp | null;\n\t/** If set, parsing failed and we should treat query as non-matching. */\n\terror?: string;\n}\n\nexport interface MatchResult {\n\tmatches: boolean;\n\t/** Lower is better; only meaningful when matches === true */\n\tscore: number;\n}\n\nfunction normalizeWhitespaceLower(text: string): string {\n\treturn text.toLowerCase().replace(/\\s+/g, \" \").trim();\n}\n\nfunction getSessionSearchText(session: SessionInfo): string {\n\treturn `${session.id} ${session.name ?? \"\"} ${session.allMessagesText} ${session.cwd}`;\n}\n\nexport function hasSessionName(session: SessionInfo): boolean {\n\treturn Boolean(session.name?.trim());\n}\n\nfunction matchesNameFilter(session: SessionInfo, filter: NameFilter): boolean {\n\tif (filter === \"all\") return true;\n\treturn hasSessionName(session);\n}\n\nexport function parseSearchQuery(query: string): ParsedSearchQuery {\n\tconst trimmed = query.trim();\n\tif (!trimmed) {\n\t\treturn { mode: \"tokens\", tokens: [], regex: null };\n\t}\n\n\t// Regex mode: re:<pattern>\n\tif (trimmed.startsWith(\"re:\")) {\n\t\tconst pattern = trimmed.slice(3).trim();\n\t\tif (!pattern) {\n\t\t\treturn { mode: \"regex\", tokens: [], regex: null, error: \"Empty regex\" };\n\t\t}\n\t\ttry {\n\t\t\treturn { mode: \"regex\", tokens: [], regex: new RegExp(pattern, \"i\") };\n\t\t} catch (err) {\n\t\t\tconst msg = err instanceof Error ? err.message : String(err);\n\t\t\treturn { mode: \"regex\", tokens: [], regex: null, error: msg };\n\t\t}\n\t}\n\n\t// Token mode with quote support.\n\t// Example: foo \"node cve\" bar\n\tconst tokens: { kind: \"fuzzy\" | \"phrase\"; value: string }[] = [];\n\tlet buf = \"\";\n\tlet inQuote = false;\n\tlet hadUnclosedQuote = false;\n\n\tconst flush = (kind: \"fuzzy\" | \"phrase\"): void => {\n\t\tconst v = buf.trim();\n\t\tbuf = \"\";\n\t\tif (!v) return;\n\t\ttokens.push({ kind, value: v });\n\t};\n\n\tfor (let i = 0; i < trimmed.length; i++) {\n\t\tconst ch = trimmed[i]!;\n\t\tif (ch === '\"') {\n\t\t\tif (inQuote) {\n\t\t\t\tflush(\"phrase\");\n\t\t\t\tinQuote = false;\n\t\t\t} else {\n\t\t\t\tflush(\"fuzzy\");\n\t\t\t\tinQuote = true;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!inQuote && /\\s/.test(ch)) {\n\t\t\tflush(\"fuzzy\");\n\t\t\tcontinue;\n\t\t}\n\n\t\tbuf += ch;\n\t}\n\n\tif (inQuote) {\n\t\thadUnclosedQuote = true;\n\t}\n\n\t// If quotes were unbalanced, fall back to plain whitespace tokenization.\n\tif (hadUnclosedQuote) {\n\t\treturn {\n\t\t\tmode: \"tokens\",\n\t\t\ttokens: trimmed\n\t\t\t\t.split(/\\s+/)\n\t\t\t\t.map((t) => t.trim())\n\t\t\t\t.filter((t) => t.length > 0)\n\t\t\t\t.map((t) => ({ kind: \"fuzzy\" as const, value: t })),\n\t\t\tregex: null,\n\t\t};\n\t}\n\n\tflush(inQuote ? \"phrase\" : \"fuzzy\");\n\n\treturn { mode: \"tokens\", tokens, regex: null };\n}\n\nexport function matchSession(session: SessionInfo, parsed: ParsedSearchQuery): MatchResult {\n\tconst text = getSessionSearchText(session);\n\n\tif (parsed.mode === \"regex\") {\n\t\tif (!parsed.regex) {\n\t\t\treturn { matches: false, score: 0 };\n\t\t}\n\t\tconst idx = text.search(parsed.regex);\n\t\tif (idx < 0) return { matches: false, score: 0 };\n\t\treturn { matches: true, score: idx * 0.1 };\n\t}\n\n\tif (parsed.tokens.length === 0) {\n\t\treturn { matches: true, score: 0 };\n\t}\n\n\tlet totalScore = 0;\n\tlet normalizedText: string | null = null;\n\n\tfor (const token of parsed.tokens) {\n\t\tif (token.kind === \"phrase\") {\n\t\t\tif (normalizedText === null) {\n\t\t\t\tnormalizedText = normalizeWhitespaceLower(text);\n\t\t\t}\n\t\t\tconst phrase = normalizeWhitespaceLower(token.value);\n\t\t\tif (!phrase) continue;\n\t\t\tconst idx = normalizedText.indexOf(phrase);\n\t\t\tif (idx < 0) return { matches: false, score: 0 };\n\t\t\ttotalScore += idx * 0.1;\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst m = fuzzyMatch(token.value, text);\n\t\tif (!m.matches) return { matches: false, score: 0 };\n\t\ttotalScore += m.score;\n\t}\n\n\treturn { matches: true, score: totalScore };\n}\n\nexport function filterAndSortSessions(\n\tsessions: SessionInfo[],\n\tquery: string,\n\tsortMode: SortMode,\n\tnameFilter: NameFilter = \"all\",\n): SessionInfo[] {\n\tconst nameFiltered =\n\t\tnameFilter === \"all\" ? sessions : sessions.filter((session) => matchesNameFilter(session, nameFilter));\n\tconst trimmed = query.trim();\n\tif (!trimmed) return nameFiltered;\n\n\tconst parsed = parseSearchQuery(query);\n\tif (parsed.error) return [];\n\n\t// Recent mode: filter only, keep incoming order.\n\tif (sortMode === \"recent\") {\n\t\tconst filtered: SessionInfo[] = [];\n\t\tfor (const s of nameFiltered) {\n\t\t\tconst res = matchSession(s, parsed);\n\t\t\tif (res.matches) filtered.push(s);\n\t\t}\n\t\treturn filtered;\n\t}\n\n\t// Relevance mode: sort by score, tie-break by modified desc.\n\tconst scored: { session: SessionInfo; score: number }[] = [];\n\tfor (const s of nameFiltered) {\n\t\tconst res = matchSession(s, parsed);\n\t\tif (!res.matches) continue;\n\t\tscored.push({ session: s, score: res.score });\n\t}\n\n\tscored.sort((a, b) => {\n\t\tif (a.score !== b.score) return a.score - b.score;\n\t\treturn b.session.modified.getTime() - a.session.modified.getTime();\n\t});\n\n\treturn scored.map((r) => r.session);\n}\n"]}
@@ -0,0 +1,155 @@
1
+ import { fuzzyMatch } from "@orient-cli/tui";
2
+ function normalizeWhitespaceLower(text) {
3
+ return text.toLowerCase().replace(/\s+/g, " ").trim();
4
+ }
5
+ function getSessionSearchText(session) {
6
+ return `${session.id} ${session.name ?? ""} ${session.allMessagesText} ${session.cwd}`;
7
+ }
8
+ export function hasSessionName(session) {
9
+ return Boolean(session.name?.trim());
10
+ }
11
+ function matchesNameFilter(session, filter) {
12
+ if (filter === "all")
13
+ return true;
14
+ return hasSessionName(session);
15
+ }
16
+ export function parseSearchQuery(query) {
17
+ const trimmed = query.trim();
18
+ if (!trimmed) {
19
+ return { mode: "tokens", tokens: [], regex: null };
20
+ }
21
+ // Regex mode: re:<pattern>
22
+ if (trimmed.startsWith("re:")) {
23
+ const pattern = trimmed.slice(3).trim();
24
+ if (!pattern) {
25
+ return { mode: "regex", tokens: [], regex: null, error: "Empty regex" };
26
+ }
27
+ try {
28
+ return { mode: "regex", tokens: [], regex: new RegExp(pattern, "i") };
29
+ }
30
+ catch (err) {
31
+ const msg = err instanceof Error ? err.message : String(err);
32
+ return { mode: "regex", tokens: [], regex: null, error: msg };
33
+ }
34
+ }
35
+ // Token mode with quote support.
36
+ // Example: foo "node cve" bar
37
+ const tokens = [];
38
+ let buf = "";
39
+ let inQuote = false;
40
+ let hadUnclosedQuote = false;
41
+ const flush = (kind) => {
42
+ const v = buf.trim();
43
+ buf = "";
44
+ if (!v)
45
+ return;
46
+ tokens.push({ kind, value: v });
47
+ };
48
+ for (let i = 0; i < trimmed.length; i++) {
49
+ const ch = trimmed[i];
50
+ if (ch === '"') {
51
+ if (inQuote) {
52
+ flush("phrase");
53
+ inQuote = false;
54
+ }
55
+ else {
56
+ flush("fuzzy");
57
+ inQuote = true;
58
+ }
59
+ continue;
60
+ }
61
+ if (!inQuote && /\s/.test(ch)) {
62
+ flush("fuzzy");
63
+ continue;
64
+ }
65
+ buf += ch;
66
+ }
67
+ if (inQuote) {
68
+ hadUnclosedQuote = true;
69
+ }
70
+ // If quotes were unbalanced, fall back to plain whitespace tokenization.
71
+ if (hadUnclosedQuote) {
72
+ return {
73
+ mode: "tokens",
74
+ tokens: trimmed
75
+ .split(/\s+/)
76
+ .map((t) => t.trim())
77
+ .filter((t) => t.length > 0)
78
+ .map((t) => ({ kind: "fuzzy", value: t })),
79
+ regex: null,
80
+ };
81
+ }
82
+ flush(inQuote ? "phrase" : "fuzzy");
83
+ return { mode: "tokens", tokens, regex: null };
84
+ }
85
+ export function matchSession(session, parsed) {
86
+ const text = getSessionSearchText(session);
87
+ if (parsed.mode === "regex") {
88
+ if (!parsed.regex) {
89
+ return { matches: false, score: 0 };
90
+ }
91
+ const idx = text.search(parsed.regex);
92
+ if (idx < 0)
93
+ return { matches: false, score: 0 };
94
+ return { matches: true, score: idx * 0.1 };
95
+ }
96
+ if (parsed.tokens.length === 0) {
97
+ return { matches: true, score: 0 };
98
+ }
99
+ let totalScore = 0;
100
+ let normalizedText = null;
101
+ for (const token of parsed.tokens) {
102
+ if (token.kind === "phrase") {
103
+ if (normalizedText === null) {
104
+ normalizedText = normalizeWhitespaceLower(text);
105
+ }
106
+ const phrase = normalizeWhitespaceLower(token.value);
107
+ if (!phrase)
108
+ continue;
109
+ const idx = normalizedText.indexOf(phrase);
110
+ if (idx < 0)
111
+ return { matches: false, score: 0 };
112
+ totalScore += idx * 0.1;
113
+ continue;
114
+ }
115
+ const m = fuzzyMatch(token.value, text);
116
+ if (!m.matches)
117
+ return { matches: false, score: 0 };
118
+ totalScore += m.score;
119
+ }
120
+ return { matches: true, score: totalScore };
121
+ }
122
+ export function filterAndSortSessions(sessions, query, sortMode, nameFilter = "all") {
123
+ const nameFiltered = nameFilter === "all" ? sessions : sessions.filter((session) => matchesNameFilter(session, nameFilter));
124
+ const trimmed = query.trim();
125
+ if (!trimmed)
126
+ return nameFiltered;
127
+ const parsed = parseSearchQuery(query);
128
+ if (parsed.error)
129
+ return [];
130
+ // Recent mode: filter only, keep incoming order.
131
+ if (sortMode === "recent") {
132
+ const filtered = [];
133
+ for (const s of nameFiltered) {
134
+ const res = matchSession(s, parsed);
135
+ if (res.matches)
136
+ filtered.push(s);
137
+ }
138
+ return filtered;
139
+ }
140
+ // Relevance mode: sort by score, tie-break by modified desc.
141
+ const scored = [];
142
+ for (const s of nameFiltered) {
143
+ const res = matchSession(s, parsed);
144
+ if (!res.matches)
145
+ continue;
146
+ scored.push({ session: s, score: res.score });
147
+ }
148
+ scored.sort((a, b) => {
149
+ if (a.score !== b.score)
150
+ return a.score - b.score;
151
+ return b.session.modified.getTime() - a.session.modified.getTime();
152
+ });
153
+ return scored.map((r) => r.session);
154
+ }
155
+ //# sourceMappingURL=session-selector-search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-selector-search.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/session-selector-search.ts"],"names":[],"mappings":"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","sourcesContent":["import { fuzzyMatch } from \"@orient-cli/tui\";\nimport type { SessionInfo } from \"../../../core/session-manager.js\";\n\nexport type SortMode = \"threaded\" | \"recent\" | \"relevance\";\n\nexport type NameFilter = \"all\" | \"named\";\n\nexport interface ParsedSearchQuery {\n\tmode: \"tokens\" | \"regex\";\n\ttokens: { kind: \"fuzzy\" | \"phrase\"; value: string }[];\n\tregex: RegExp | null;\n\t/** If set, parsing failed and we should treat query as non-matching. */\n\terror?: string;\n}\n\nexport interface MatchResult {\n\tmatches: boolean;\n\t/** Lower is better; only meaningful when matches === true */\n\tscore: number;\n}\n\nfunction normalizeWhitespaceLower(text: string): string {\n\treturn text.toLowerCase().replace(/\\s+/g, \" \").trim();\n}\n\nfunction getSessionSearchText(session: SessionInfo): string {\n\treturn `${session.id} ${session.name ?? \"\"} ${session.allMessagesText} ${session.cwd}`;\n}\n\nexport function hasSessionName(session: SessionInfo): boolean {\n\treturn Boolean(session.name?.trim());\n}\n\nfunction matchesNameFilter(session: SessionInfo, filter: NameFilter): boolean {\n\tif (filter === \"all\") return true;\n\treturn hasSessionName(session);\n}\n\nexport function parseSearchQuery(query: string): ParsedSearchQuery {\n\tconst trimmed = query.trim();\n\tif (!trimmed) {\n\t\treturn { mode: \"tokens\", tokens: [], regex: null };\n\t}\n\n\t// Regex mode: re:<pattern>\n\tif (trimmed.startsWith(\"re:\")) {\n\t\tconst pattern = trimmed.slice(3).trim();\n\t\tif (!pattern) {\n\t\t\treturn { mode: \"regex\", tokens: [], regex: null, error: \"Empty regex\" };\n\t\t}\n\t\ttry {\n\t\t\treturn { mode: \"regex\", tokens: [], regex: new RegExp(pattern, \"i\") };\n\t\t} catch (err) {\n\t\t\tconst msg = err instanceof Error ? err.message : String(err);\n\t\t\treturn { mode: \"regex\", tokens: [], regex: null, error: msg };\n\t\t}\n\t}\n\n\t// Token mode with quote support.\n\t// Example: foo \"node cve\" bar\n\tconst tokens: { kind: \"fuzzy\" | \"phrase\"; value: string }[] = [];\n\tlet buf = \"\";\n\tlet inQuote = false;\n\tlet hadUnclosedQuote = false;\n\n\tconst flush = (kind: \"fuzzy\" | \"phrase\"): void => {\n\t\tconst v = buf.trim();\n\t\tbuf = \"\";\n\t\tif (!v) return;\n\t\ttokens.push({ kind, value: v });\n\t};\n\n\tfor (let i = 0; i < trimmed.length; i++) {\n\t\tconst ch = trimmed[i]!;\n\t\tif (ch === '\"') {\n\t\t\tif (inQuote) {\n\t\t\t\tflush(\"phrase\");\n\t\t\t\tinQuote = false;\n\t\t\t} else {\n\t\t\t\tflush(\"fuzzy\");\n\t\t\t\tinQuote = true;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!inQuote && /\\s/.test(ch)) {\n\t\t\tflush(\"fuzzy\");\n\t\t\tcontinue;\n\t\t}\n\n\t\tbuf += ch;\n\t}\n\n\tif (inQuote) {\n\t\thadUnclosedQuote = true;\n\t}\n\n\t// If quotes were unbalanced, fall back to plain whitespace tokenization.\n\tif (hadUnclosedQuote) {\n\t\treturn {\n\t\t\tmode: \"tokens\",\n\t\t\ttokens: trimmed\n\t\t\t\t.split(/\\s+/)\n\t\t\t\t.map((t) => t.trim())\n\t\t\t\t.filter((t) => t.length > 0)\n\t\t\t\t.map((t) => ({ kind: \"fuzzy\" as const, value: t })),\n\t\t\tregex: null,\n\t\t};\n\t}\n\n\tflush(inQuote ? \"phrase\" : \"fuzzy\");\n\n\treturn { mode: \"tokens\", tokens, regex: null };\n}\n\nexport function matchSession(session: SessionInfo, parsed: ParsedSearchQuery): MatchResult {\n\tconst text = getSessionSearchText(session);\n\n\tif (parsed.mode === \"regex\") {\n\t\tif (!parsed.regex) {\n\t\t\treturn { matches: false, score: 0 };\n\t\t}\n\t\tconst idx = text.search(parsed.regex);\n\t\tif (idx < 0) return { matches: false, score: 0 };\n\t\treturn { matches: true, score: idx * 0.1 };\n\t}\n\n\tif (parsed.tokens.length === 0) {\n\t\treturn { matches: true, score: 0 };\n\t}\n\n\tlet totalScore = 0;\n\tlet normalizedText: string | null = null;\n\n\tfor (const token of parsed.tokens) {\n\t\tif (token.kind === \"phrase\") {\n\t\t\tif (normalizedText === null) {\n\t\t\t\tnormalizedText = normalizeWhitespaceLower(text);\n\t\t\t}\n\t\t\tconst phrase = normalizeWhitespaceLower(token.value);\n\t\t\tif (!phrase) continue;\n\t\t\tconst idx = normalizedText.indexOf(phrase);\n\t\t\tif (idx < 0) return { matches: false, score: 0 };\n\t\t\ttotalScore += idx * 0.1;\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst m = fuzzyMatch(token.value, text);\n\t\tif (!m.matches) return { matches: false, score: 0 };\n\t\ttotalScore += m.score;\n\t}\n\n\treturn { matches: true, score: totalScore };\n}\n\nexport function filterAndSortSessions(\n\tsessions: SessionInfo[],\n\tquery: string,\n\tsortMode: SortMode,\n\tnameFilter: NameFilter = \"all\",\n): SessionInfo[] {\n\tconst nameFiltered =\n\t\tnameFilter === \"all\" ? sessions : sessions.filter((session) => matchesNameFilter(session, nameFilter));\n\tconst trimmed = query.trim();\n\tif (!trimmed) return nameFiltered;\n\n\tconst parsed = parseSearchQuery(query);\n\tif (parsed.error) return [];\n\n\t// Recent mode: filter only, keep incoming order.\n\tif (sortMode === \"recent\") {\n\t\tconst filtered: SessionInfo[] = [];\n\t\tfor (const s of nameFiltered) {\n\t\t\tconst res = matchSession(s, parsed);\n\t\t\tif (res.matches) filtered.push(s);\n\t\t}\n\t\treturn filtered;\n\t}\n\n\t// Relevance mode: sort by score, tie-break by modified desc.\n\tconst scored: { session: SessionInfo; score: number }[] = [];\n\tfor (const s of nameFiltered) {\n\t\tconst res = matchSession(s, parsed);\n\t\tif (!res.matches) continue;\n\t\tscored.push({ session: s, score: res.score });\n\t}\n\n\tscored.sort((a, b) => {\n\t\tif (a.score !== b.score) return a.score - b.score;\n\t\treturn b.session.modified.getTime() - a.session.modified.getTime();\n\t});\n\n\treturn scored.map((r) => r.session);\n}\n"]}
@@ -0,0 +1,95 @@
1
+ import { type Component, Container, type Focusable } from "@orient-cli/tui";
2
+ import { KeybindingsManager } from "../../../core/keybindings.js";
3
+ import type { SessionInfo, SessionListProgress } from "../../../core/session-manager.js";
4
+ import { type NameFilter, type SortMode } from "./session-selector-search.js";
5
+ /**
6
+ * Custom session list component with multi-line items and search
7
+ */
8
+ declare class SessionList implements Component, Focusable {
9
+ getSelectedSessionPath(): string | undefined;
10
+ private allSessions;
11
+ private filteredSessions;
12
+ private selectedIndex;
13
+ private searchInput;
14
+ private showCwd;
15
+ private sortMode;
16
+ private nameFilter;
17
+ private keybindings;
18
+ private showPath;
19
+ private confirmingDeletePath;
20
+ private currentSessionFilePath?;
21
+ onSelect?: (sessionPath: string) => void;
22
+ onCancel?: () => void;
23
+ onExit: () => void;
24
+ onToggleScope?: () => void;
25
+ onToggleSort?: () => void;
26
+ onToggleNameFilter?: () => void;
27
+ onTogglePath?: (showPath: boolean) => void;
28
+ onDeleteConfirmationChange?: (path: string | null) => void;
29
+ onDeleteSession?: (sessionPath: string) => Promise<void>;
30
+ onRenameSession?: (sessionPath: string) => void;
31
+ onError?: (message: string) => void;
32
+ private maxVisible;
33
+ private _focused;
34
+ get focused(): boolean;
35
+ set focused(value: boolean);
36
+ constructor(sessions: SessionInfo[], showCwd: boolean, sortMode: SortMode, nameFilter: NameFilter, keybindings: KeybindingsManager, currentSessionFilePath?: string);
37
+ setSortMode(sortMode: SortMode): void;
38
+ setNameFilter(nameFilter: NameFilter): void;
39
+ setSessions(sessions: SessionInfo[], showCwd: boolean): void;
40
+ private filterSessions;
41
+ private setConfirmingDeletePath;
42
+ private startDeleteConfirmationForSelectedSession;
43
+ invalidate(): void;
44
+ render(width: number): string[];
45
+ private buildTreePrefix;
46
+ handleInput(keyData: string): void;
47
+ }
48
+ type SessionsLoader = (onProgress?: SessionListProgress) => Promise<SessionInfo[]>;
49
+ /**
50
+ * Component that renders a session selector
51
+ */
52
+ export declare class SessionSelectorComponent extends Container implements Focusable {
53
+ handleInput(data: string): void;
54
+ private canRename;
55
+ private sessionList;
56
+ private header;
57
+ private keybindings;
58
+ private scope;
59
+ private sortMode;
60
+ private nameFilter;
61
+ private currentSessions;
62
+ private allSessions;
63
+ private currentSessionsLoader;
64
+ private allSessionsLoader;
65
+ private onCancel;
66
+ private requestRender;
67
+ private renameSession?;
68
+ private currentLoading;
69
+ private allLoading;
70
+ private allLoadSeq;
71
+ private mode;
72
+ private renameInput;
73
+ private renameTargetPath;
74
+ private _focused;
75
+ get focused(): boolean;
76
+ set focused(value: boolean);
77
+ private buildBaseLayout;
78
+ constructor(currentSessionsLoader: SessionsLoader, allSessionsLoader: SessionsLoader, onSelect: (sessionPath: string) => void, onCancel: () => void, onExit: () => void, requestRender: () => void, options?: {
79
+ renameSession?: (sessionPath: string, currentName: string | undefined) => Promise<void>;
80
+ showRenameHint?: boolean;
81
+ keybindings?: KeybindingsManager;
82
+ }, currentSessionFilePath?: string);
83
+ private loadCurrentSessions;
84
+ private enterRenameMode;
85
+ private exitRenameMode;
86
+ private confirmRename;
87
+ private loadScope;
88
+ private toggleSortMode;
89
+ private toggleNameFilter;
90
+ private refreshSessionsAfterMutation;
91
+ private toggleScope;
92
+ getSessionList(): SessionList;
93
+ }
94
+ export {};
95
+ //# sourceMappingURL=session-selector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-selector.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/session-selector.ts"],"names":[],"mappings":"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","sourcesContent":["import { spawnSync } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\nimport { unlink } from \"node:fs/promises\";\nimport * as os from \"node:os\";\nimport {\n\ttype Component,\n\tContainer,\n\ttype Focusable,\n\tgetKeybindings,\n\tInput,\n\tSpacer,\n\tText,\n\ttruncateToWidth,\n\tvisibleWidth,\n} from \"@orient-cli/tui\";\nimport { KeybindingsManager } from \"../../../core/keybindings.js\";\nimport type { SessionInfo, SessionListProgress } from \"../../../core/session-manager.js\";\nimport { theme } from \"../theme/theme.js\";\nimport { DynamicBorder } from \"./dynamic-border.js\";\nimport { keyHint, keyText } from \"./keybinding-hints.js\";\nimport { filterAndSortSessions, hasSessionName, type NameFilter, type SortMode } from \"./session-selector-search.js\";\n\ntype SessionScope = \"current\" | \"all\";\n\nfunction shortenPath(path: string): string {\n\tconst home = os.homedir();\n\tif (!path) return path;\n\tif (path.startsWith(home)) {\n\t\treturn `~${path.slice(home.length)}`;\n\t}\n\treturn path;\n}\n\nfunction formatSessionDate(date: Date): string {\n\tconst now = new Date();\n\tconst diffMs = now.getTime() - date.getTime();\n\tconst diffMins = Math.floor(diffMs / 60000);\n\tconst diffHours = Math.floor(diffMs / 3600000);\n\tconst diffDays = Math.floor(diffMs / 86400000);\n\n\tif (diffMins < 1) return \"now\";\n\tif (diffMins < 60) return `${diffMins}m`;\n\tif (diffHours < 24) return `${diffHours}h`;\n\tif (diffDays < 7) return `${diffDays}d`;\n\tif (diffDays < 30) return `${Math.floor(diffDays / 7)}w`;\n\tif (diffDays < 365) return `${Math.floor(diffDays / 30)}mo`;\n\treturn `${Math.floor(diffDays / 365)}y`;\n}\n\nclass SessionSelectorHeader implements Component {\n\tprivate scope: SessionScope;\n\tprivate sortMode: SortMode;\n\tprivate nameFilter: NameFilter;\n\tprivate requestRender: () => void;\n\tprivate loading = false;\n\tprivate loadProgress: { loaded: number; total: number } | null = null;\n\tprivate showPath = false;\n\tprivate confirmingDeletePath: string | null = null;\n\tprivate statusMessage: { type: \"info\" | \"error\"; message: string } | null = null;\n\tprivate statusTimeout: ReturnType<typeof setTimeout> | null = null;\n\tprivate showRenameHint = false;\n\n\tconstructor(scope: SessionScope, sortMode: SortMode, nameFilter: NameFilter, requestRender: () => void) {\n\t\tthis.scope = scope;\n\t\tthis.sortMode = sortMode;\n\t\tthis.nameFilter = nameFilter;\n\t\tthis.requestRender = requestRender;\n\t}\n\n\tsetScope(scope: SessionScope): void {\n\t\tthis.scope = scope;\n\t}\n\n\tsetSortMode(sortMode: SortMode): void {\n\t\tthis.sortMode = sortMode;\n\t}\n\n\tsetNameFilter(nameFilter: NameFilter): void {\n\t\tthis.nameFilter = nameFilter;\n\t}\n\n\tsetLoading(loading: boolean): void {\n\t\tthis.loading = loading;\n\t\t// Progress is scoped to the current load; clear whenever the loading state is set\n\t\tthis.loadProgress = null;\n\t}\n\n\tsetProgress(loaded: number, total: number): void {\n\t\tthis.loadProgress = { loaded, total };\n\t}\n\n\tsetShowPath(showPath: boolean): void {\n\t\tthis.showPath = showPath;\n\t}\n\n\tsetShowRenameHint(show: boolean): void {\n\t\tthis.showRenameHint = show;\n\t}\n\n\tsetConfirmingDeletePath(path: string | null): void {\n\t\tthis.confirmingDeletePath = path;\n\t}\n\n\tprivate clearStatusTimeout(): void {\n\t\tif (!this.statusTimeout) return;\n\t\tclearTimeout(this.statusTimeout);\n\t\tthis.statusTimeout = null;\n\t}\n\n\tsetStatusMessage(msg: { type: \"info\" | \"error\"; message: string } | null, autoHideMs?: number): void {\n\t\tthis.clearStatusTimeout();\n\t\tthis.statusMessage = msg;\n\t\tif (!msg || !autoHideMs) return;\n\n\t\tthis.statusTimeout = setTimeout(() => {\n\t\t\tthis.statusMessage = null;\n\t\t\tthis.statusTimeout = null;\n\t\t\tthis.requestRender();\n\t\t}, autoHideMs);\n\t}\n\n\tinvalidate(): void {}\n\n\trender(width: number): string[] {\n\t\tconst title = this.scope === \"current\" ? \"Resume Session (Current Folder)\" : \"Resume Session (All)\";\n\t\tconst leftText = theme.bold(title);\n\n\t\tconst sortLabel = this.sortMode === \"threaded\" ? \"Threaded\" : this.sortMode === \"recent\" ? \"Recent\" : \"Fuzzy\";\n\t\tconst sortText = theme.fg(\"muted\", \"Sort: \") + theme.fg(\"accent\", sortLabel);\n\n\t\tconst nameLabel = this.nameFilter === \"all\" ? \"All\" : \"Named\";\n\t\tconst nameText = theme.fg(\"muted\", \"Name: \") + theme.fg(\"accent\", nameLabel);\n\n\t\tlet scopeText: string;\n\t\tif (this.loading) {\n\t\t\tconst progressText = this.loadProgress ? `${this.loadProgress.loaded}/${this.loadProgress.total}` : \"...\";\n\t\t\tscopeText = `${theme.fg(\"muted\", \"○ Current Folder | \")}${theme.fg(\"accent\", `Loading ${progressText}`)}`;\n\t\t} else if (this.scope === \"current\") {\n\t\t\tscopeText = `${theme.fg(\"accent\", \"◉ Current Folder\")}${theme.fg(\"muted\", \" | ○ All\")}`;\n\t\t} else {\n\t\t\tscopeText = `${theme.fg(\"muted\", \"○ Current Folder | \")}${theme.fg(\"accent\", \"◉ All\")}`;\n\t\t}\n\n\t\tconst rightText = truncateToWidth(`${scopeText} ${nameText} ${sortText}`, width, \"\");\n\t\tconst availableLeft = Math.max(0, width - visibleWidth(rightText) - 1);\n\t\tconst left = truncateToWidth(leftText, availableLeft, \"\");\n\t\tconst spacing = Math.max(0, width - visibleWidth(left) - visibleWidth(rightText));\n\n\t\t// Build hint lines - changes based on state (all branches truncate to width)\n\t\tlet hintLine1: string;\n\t\tlet hintLine2: string;\n\t\tif (this.confirmingDeletePath !== null) {\n\t\t\tconst confirmHint = `Delete session? ${keyHint(\"tui.select.confirm\", \"confirm\")} · ${keyHint(\"tui.select.cancel\", \"cancel\")}`;\n\t\t\thintLine1 = theme.fg(\"error\", truncateToWidth(confirmHint, width, \"…\"));\n\t\t\thintLine2 = \"\";\n\t\t} else if (this.statusMessage) {\n\t\t\tconst color = this.statusMessage.type === \"error\" ? \"error\" : \"accent\";\n\t\t\thintLine1 = theme.fg(color, truncateToWidth(this.statusMessage.message, width, \"…\"));\n\t\t\thintLine2 = \"\";\n\t\t} else {\n\t\t\tconst pathState = this.showPath ? \"(on)\" : \"(off)\";\n\t\t\tconst sep = theme.fg(\"muted\", \" · \");\n\t\t\tconst hint1 =\n\t\t\t\tkeyHint(\"tui.input.tab\", \"scope\") + sep + theme.fg(\"muted\", 're:<pattern> regex · \"phrase\" exact');\n\t\t\tconst hint2Parts = [\n\t\t\t\tkeyHint(\"app.session.toggleSort\", \"sort\"),\n\t\t\t\tkeyHint(\"app.session.toggleNamedFilter\", \"named\"),\n\t\t\t\tkeyHint(\"app.session.delete\", \"delete\"),\n\t\t\t\tkeyHint(\"app.session.togglePath\", `path ${pathState}`),\n\t\t\t];\n\t\t\tif (this.showRenameHint) {\n\t\t\t\thint2Parts.push(keyHint(\"app.session.rename\", \"rename\"));\n\t\t\t}\n\t\t\tconst hint2 = hint2Parts.join(sep);\n\t\t\thintLine1 = truncateToWidth(hint1, width, \"…\");\n\t\t\thintLine2 = truncateToWidth(hint2, width, \"…\");\n\t\t}\n\n\t\treturn [`${left}${\" \".repeat(spacing)}${rightText}`, hintLine1, hintLine2];\n\t}\n}\n\n/** A session tree node for hierarchical display */\ninterface SessionTreeNode {\n\tsession: SessionInfo;\n\tchildren: SessionTreeNode[];\n}\n\n/** Flattened node for display with tree structure info */\ninterface FlatSessionNode {\n\tsession: SessionInfo;\n\tdepth: number;\n\tisLast: boolean;\n\t/** For each ancestor level, whether there are more siblings after it */\n\tancestorContinues: boolean[];\n}\n\n/**\n * Build a tree structure from sessions based on parentSessionPath.\n * Returns root nodes sorted by modified date (descending).\n */\nfunction buildSessionTree(sessions: SessionInfo[]): SessionTreeNode[] {\n\tconst byPath = new Map<string, SessionTreeNode>();\n\n\tfor (const session of sessions) {\n\t\tbyPath.set(session.path, { session, children: [] });\n\t}\n\n\tconst roots: SessionTreeNode[] = [];\n\n\tfor (const session of sessions) {\n\t\tconst node = byPath.get(session.path)!;\n\t\tconst parentPath = session.parentSessionPath;\n\n\t\tif (parentPath && byPath.has(parentPath)) {\n\t\t\tbyPath.get(parentPath)!.children.push(node);\n\t\t} else {\n\t\t\troots.push(node);\n\t\t}\n\t}\n\n\t// Sort children and roots by modified date (descending)\n\tconst sortNodes = (nodes: SessionTreeNode[]): void => {\n\t\tnodes.sort((a, b) => b.session.modified.getTime() - a.session.modified.getTime());\n\t\tfor (const node of nodes) {\n\t\t\tsortNodes(node.children);\n\t\t}\n\t};\n\tsortNodes(roots);\n\n\treturn roots;\n}\n\n/**\n * Flatten tree into display list with tree structure metadata.\n */\nfunction flattenSessionTree(roots: SessionTreeNode[]): FlatSessionNode[] {\n\tconst result: FlatSessionNode[] = [];\n\n\tconst walk = (node: SessionTreeNode, depth: number, ancestorContinues: boolean[], isLast: boolean): void => {\n\t\tresult.push({ session: node.session, depth, isLast, ancestorContinues });\n\n\t\tfor (let i = 0; i < node.children.length; i++) {\n\t\t\tconst childIsLast = i === node.children.length - 1;\n\t\t\t// Only show continuation line for non-root ancestors\n\t\t\tconst continues = depth > 0 ? !isLast : false;\n\t\t\twalk(node.children[i]!, depth + 1, [...ancestorContinues, continues], childIsLast);\n\t\t}\n\t};\n\n\tfor (let i = 0; i < roots.length; i++) {\n\t\twalk(roots[i]!, 0, [], i === roots.length - 1);\n\t}\n\n\treturn result;\n}\n\n/**\n * Custom session list component with multi-line items and search\n */\nclass SessionList implements Component, Focusable {\n\tpublic getSelectedSessionPath(): string | undefined {\n\t\tconst selected = this.filteredSessions[this.selectedIndex];\n\t\treturn selected?.session.path;\n\t}\n\tprivate allSessions: SessionInfo[] = [];\n\tprivate filteredSessions: FlatSessionNode[] = [];\n\tprivate selectedIndex: number = 0;\n\tprivate searchInput: Input;\n\tprivate showCwd = false;\n\tprivate sortMode: SortMode = \"threaded\";\n\tprivate nameFilter: NameFilter = \"all\";\n\tprivate keybindings: KeybindingsManager;\n\tprivate showPath = false;\n\tprivate confirmingDeletePath: string | null = null;\n\tprivate currentSessionFilePath?: string;\n\tpublic onSelect?: (sessionPath: string) => void;\n\tpublic onCancel?: () => void;\n\tpublic onExit: () => void = () => {};\n\tpublic onToggleScope?: () => void;\n\tpublic onToggleSort?: () => void;\n\tpublic onToggleNameFilter?: () => void;\n\tpublic onTogglePath?: (showPath: boolean) => void;\n\tpublic onDeleteConfirmationChange?: (path: string | null) => void;\n\tpublic onDeleteSession?: (sessionPath: string) => Promise<void>;\n\tpublic onRenameSession?: (sessionPath: string) => void;\n\tpublic onError?: (message: string) => void;\n\tprivate maxVisible: number = 10; // Max sessions visible (one line each)\n\n\t// Focusable implementation - propagate to searchInput for IME cursor positioning\n\tprivate _focused = false;\n\tget focused(): boolean {\n\t\treturn this._focused;\n\t}\n\tset focused(value: boolean) {\n\t\tthis._focused = value;\n\t\tthis.searchInput.focused = value;\n\t}\n\n\tconstructor(\n\t\tsessions: SessionInfo[],\n\t\tshowCwd: boolean,\n\t\tsortMode: SortMode,\n\t\tnameFilter: NameFilter,\n\t\tkeybindings: KeybindingsManager,\n\t\tcurrentSessionFilePath?: string,\n\t) {\n\t\tthis.allSessions = sessions;\n\t\tthis.filteredSessions = [];\n\t\tthis.searchInput = new Input();\n\t\tthis.showCwd = showCwd;\n\t\tthis.sortMode = sortMode;\n\t\tthis.nameFilter = nameFilter;\n\t\tthis.keybindings = keybindings;\n\t\tthis.currentSessionFilePath = currentSessionFilePath;\n\t\tthis.filterSessions(\"\");\n\n\t\t// Handle Enter in search input - select current item\n\t\tthis.searchInput.onSubmit = () => {\n\t\t\tif (this.filteredSessions[this.selectedIndex]) {\n\t\t\t\tconst selected = this.filteredSessions[this.selectedIndex];\n\t\t\t\tif (this.onSelect) {\n\t\t\t\t\tthis.onSelect(selected.session.path);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\tsetSortMode(sortMode: SortMode): void {\n\t\tthis.sortMode = sortMode;\n\t\tthis.filterSessions(this.searchInput.getValue());\n\t}\n\n\tsetNameFilter(nameFilter: NameFilter): void {\n\t\tthis.nameFilter = nameFilter;\n\t\tthis.filterSessions(this.searchInput.getValue());\n\t}\n\n\tsetSessions(sessions: SessionInfo[], showCwd: boolean): void {\n\t\tthis.allSessions = sessions;\n\t\tthis.showCwd = showCwd;\n\t\tthis.filterSessions(this.searchInput.getValue());\n\t}\n\n\tprivate filterSessions(query: string): void {\n\t\tconst trimmed = query.trim();\n\t\tconst nameFiltered =\n\t\t\tthis.nameFilter === \"all\" ? this.allSessions : this.allSessions.filter((session) => hasSessionName(session));\n\n\t\tif (this.sortMode === \"threaded\" && !trimmed) {\n\t\t\t// Threaded mode without search: show tree structure\n\t\t\tconst roots = buildSessionTree(nameFiltered);\n\t\t\tthis.filteredSessions = flattenSessionTree(roots);\n\t\t} else {\n\t\t\t// Other modes or with search: flat list\n\t\t\tconst filtered = filterAndSortSessions(nameFiltered, query, this.sortMode, \"all\");\n\t\t\tthis.filteredSessions = filtered.map((session) => ({\n\t\t\t\tsession,\n\t\t\t\tdepth: 0,\n\t\t\t\tisLast: true,\n\t\t\t\tancestorContinues: [],\n\t\t\t}));\n\t\t}\n\t\tthis.selectedIndex = Math.min(this.selectedIndex, Math.max(0, this.filteredSessions.length - 1));\n\t}\n\n\tprivate setConfirmingDeletePath(path: string | null): void {\n\t\tthis.confirmingDeletePath = path;\n\t\tthis.onDeleteConfirmationChange?.(path);\n\t}\n\n\tprivate startDeleteConfirmationForSelectedSession(): void {\n\t\tconst selected = this.filteredSessions[this.selectedIndex];\n\t\tif (!selected) return;\n\n\t\t// Prevent deleting current session\n\t\tif (this.currentSessionFilePath && selected.session.path === this.currentSessionFilePath) {\n\t\t\tthis.onError?.(\"Cannot delete the currently active session\");\n\t\t\treturn;\n\t\t}\n\n\t\tthis.setConfirmingDeletePath(selected.session.path);\n\t}\n\n\tinvalidate(): void {}\n\n\trender(width: number): string[] {\n\t\tconst lines: string[] = [];\n\n\t\t// Render search input\n\t\tlines.push(...this.searchInput.render(width));\n\t\tlines.push(\"\"); // Blank line after search\n\n\t\tif (this.filteredSessions.length === 0) {\n\t\t\tlet emptyMessage: string;\n\t\t\tif (this.nameFilter === \"named\") {\n\t\t\t\tconst toggleKey = keyText(\"app.session.toggleNamedFilter\");\n\t\t\t\tif (this.showCwd) {\n\t\t\t\t\temptyMessage = ` No named sessions found. Press ${toggleKey} to show all.`;\n\t\t\t\t} else {\n\t\t\t\t\temptyMessage = ` No named sessions in current folder. Press ${toggleKey} to show all, or Tab to view all.`;\n\t\t\t\t}\n\t\t\t} else if (this.showCwd) {\n\t\t\t\t// \"All\" scope - no sessions anywhere that match filter\n\t\t\t\temptyMessage = \" No sessions found\";\n\t\t\t} else {\n\t\t\t\t// \"Current folder\" scope - hint to try \"all\"\n\t\t\t\temptyMessage = \" No sessions in current folder. Press Tab to view all.\";\n\t\t\t}\n\t\t\tlines.push(theme.fg(\"muted\", truncateToWidth(emptyMessage, width, \"…\")));\n\t\t\treturn lines;\n\t\t}\n\n\t\t// Calculate visible range with scrolling\n\t\tconst startIndex = Math.max(\n\t\t\t0,\n\t\t\tMath.min(this.selectedIndex - Math.floor(this.maxVisible / 2), this.filteredSessions.length - this.maxVisible),\n\t\t);\n\t\tconst endIndex = Math.min(startIndex + this.maxVisible, this.filteredSessions.length);\n\n\t\t// Render visible sessions (one line each with tree structure)\n\t\tfor (let i = startIndex; i < endIndex; i++) {\n\t\t\tconst node = this.filteredSessions[i]!;\n\t\t\tconst session = node.session;\n\t\t\tconst isSelected = i === this.selectedIndex;\n\t\t\tconst isConfirmingDelete = session.path === this.confirmingDeletePath;\n\t\t\tconst isCurrent = this.currentSessionFilePath === session.path;\n\n\t\t\t// Build tree prefix\n\t\t\tconst prefix = this.buildTreePrefix(node);\n\n\t\t\t// Session display text (name or first message)\n\t\t\tconst hasName = !!session.name;\n\t\t\tconst displayText = session.name ?? session.firstMessage;\n\t\t\tconst normalizedMessage = displayText.replace(/[\\x00-\\x1f\\x7f]/g, \" \").trim();\n\n\t\t\t// Right side: message count and age\n\t\t\tconst age = formatSessionDate(session.modified);\n\t\t\tconst msgCount = String(session.messageCount);\n\t\t\tlet rightPart = `${msgCount} ${age}`;\n\t\t\tif (this.showCwd && session.cwd) {\n\t\t\t\trightPart = `${shortenPath(session.cwd)} ${rightPart}`;\n\t\t\t}\n\t\t\tif (this.showPath) {\n\t\t\t\trightPart = `${shortenPath(session.path)} ${rightPart}`;\n\t\t\t}\n\n\t\t\t// Cursor\n\t\t\tconst cursor = isSelected ? theme.fg(\"accent\", \"› \") : \" \";\n\n\t\t\t// Calculate available width for message\n\t\t\tconst prefixWidth = visibleWidth(prefix);\n\t\t\tconst rightWidth = visibleWidth(rightPart) + 2; // +2 for spacing\n\t\t\tconst availableForMsg = width - 2 - prefixWidth - rightWidth; // -2 for cursor\n\n\t\t\tconst truncatedMsg = truncateToWidth(normalizedMessage, Math.max(10, availableForMsg), \"…\");\n\n\t\t\t// Style message\n\t\t\tlet messageColor: \"error\" | \"warning\" | \"accent\" | null = null;\n\t\t\tif (isConfirmingDelete) {\n\t\t\t\tmessageColor = \"error\";\n\t\t\t} else if (isCurrent) {\n\t\t\t\tmessageColor = \"accent\";\n\t\t\t} else if (hasName) {\n\t\t\t\tmessageColor = \"warning\";\n\t\t\t}\n\t\t\tlet styledMsg = messageColor ? theme.fg(messageColor, truncatedMsg) : truncatedMsg;\n\t\t\tif (isSelected) {\n\t\t\t\tstyledMsg = theme.bold(styledMsg);\n\t\t\t}\n\n\t\t\t// Build line\n\t\t\tconst leftPart = cursor + theme.fg(\"dim\", prefix) + styledMsg;\n\t\t\tconst leftWidth = visibleWidth(leftPart);\n\t\t\tconst spacing = Math.max(1, width - leftWidth - visibleWidth(rightPart));\n\t\t\tconst styledRight = theme.fg(isConfirmingDelete ? \"error\" : \"dim\", rightPart);\n\n\t\t\tlet line = leftPart + \" \".repeat(spacing) + styledRight;\n\t\t\tif (isSelected) {\n\t\t\t\tline = theme.bg(\"selectedBg\", line);\n\t\t\t}\n\t\t\tlines.push(truncateToWidth(line, width));\n\t\t}\n\n\t\t// Add scroll indicator if needed\n\t\tif (startIndex > 0 || endIndex < this.filteredSessions.length) {\n\t\t\tconst scrollText = ` (${this.selectedIndex + 1}/${this.filteredSessions.length})`;\n\t\t\tconst scrollInfo = theme.fg(\"muted\", truncateToWidth(scrollText, width, \"\"));\n\t\t\tlines.push(scrollInfo);\n\t\t}\n\n\t\treturn lines;\n\t}\n\n\tprivate buildTreePrefix(node: FlatSessionNode): string {\n\t\tif (node.depth === 0) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\tconst parts = node.ancestorContinues.map((continues) => (continues ? \"│ \" : \" \"));\n\t\tconst branch = node.isLast ? \"└─ \" : \"├─ \";\n\t\treturn parts.join(\"\") + branch;\n\t}\n\n\thandleInput(keyData: string): void {\n\t\tconst kb = getKeybindings();\n\n\t\t// Handle delete confirmation state first - intercept all keys\n\t\tif (this.confirmingDeletePath !== null) {\n\t\t\tif (kb.matches(keyData, \"tui.select.confirm\")) {\n\t\t\t\tconst pathToDelete = this.confirmingDeletePath;\n\t\t\t\tthis.setConfirmingDeletePath(null);\n\t\t\t\tvoid this.onDeleteSession?.(pathToDelete);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (kb.matches(keyData, \"tui.select.cancel\")) {\n\t\t\t\tthis.setConfirmingDeletePath(null);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Ignore all other keys while confirming\n\t\t\treturn;\n\t\t}\n\n\t\tif (kb.matches(keyData, \"tui.input.tab\")) {\n\t\t\tif (this.onToggleScope) {\n\t\t\t\tthis.onToggleScope();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (kb.matches(keyData, \"app.session.toggleSort\")) {\n\t\t\tthis.onToggleSort?.();\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.keybindings.matches(keyData, \"app.session.toggleNamedFilter\")) {\n\t\t\tthis.onToggleNameFilter?.();\n\t\t\treturn;\n\t\t}\n\n\t\t// Ctrl+P: toggle path display\n\t\tif (kb.matches(keyData, \"app.session.togglePath\")) {\n\t\t\tthis.showPath = !this.showPath;\n\t\t\tthis.onTogglePath?.(this.showPath);\n\t\t\treturn;\n\t\t}\n\n\t\t// Ctrl+D: initiate delete confirmation (useful on terminals that don't distinguish Ctrl+Backspace from Backspace)\n\t\tif (kb.matches(keyData, \"app.session.delete\")) {\n\t\t\tthis.startDeleteConfirmationForSelectedSession();\n\t\t\treturn;\n\t\t}\n\n\t\t// Rename selected session\n\t\tif (kb.matches(keyData, \"app.session.rename\")) {\n\t\t\tconst selected = this.filteredSessions[this.selectedIndex];\n\t\t\tif (selected) {\n\t\t\t\tthis.onRenameSession?.(selected.session.path);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Ctrl+Backspace: non-invasive convenience alias for delete\n\t\t// Only triggers deletion when the query is empty; otherwise it is forwarded to the input\n\t\tif (kb.matches(keyData, \"app.session.deleteNoninvasive\")) {\n\t\t\tif (this.searchInput.getValue().length > 0) {\n\t\t\t\tthis.searchInput.handleInput(keyData);\n\t\t\t\tthis.filterSessions(this.searchInput.getValue());\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.startDeleteConfirmationForSelectedSession();\n\t\t\treturn;\n\t\t}\n\n\t\t// Up arrow\n\t\tif (kb.matches(keyData, \"tui.select.up\")) {\n\t\t\tthis.selectedIndex = Math.max(0, this.selectedIndex - 1);\n\t\t}\n\t\t// Down arrow\n\t\telse if (kb.matches(keyData, \"tui.select.down\")) {\n\t\t\tthis.selectedIndex = Math.min(this.filteredSessions.length - 1, this.selectedIndex + 1);\n\t\t}\n\t\t// Page up - jump up by maxVisible items\n\t\telse if (kb.matches(keyData, \"tui.select.pageUp\")) {\n\t\t\tthis.selectedIndex = Math.max(0, this.selectedIndex - this.maxVisible);\n\t\t}\n\t\t// Page down - jump down by maxVisible items\n\t\telse if (kb.matches(keyData, \"tui.select.pageDown\")) {\n\t\t\tthis.selectedIndex = Math.min(this.filteredSessions.length - 1, this.selectedIndex + this.maxVisible);\n\t\t}\n\t\t// Enter\n\t\telse if (kb.matches(keyData, \"tui.select.confirm\")) {\n\t\t\tconst selected = this.filteredSessions[this.selectedIndex];\n\t\t\tif (selected && this.onSelect) {\n\t\t\t\tthis.onSelect(selected.session.path);\n\t\t\t}\n\t\t}\n\t\t// Escape - cancel\n\t\telse if (kb.matches(keyData, \"tui.select.cancel\")) {\n\t\t\tif (this.onCancel) {\n\t\t\t\tthis.onCancel();\n\t\t\t}\n\t\t}\n\t\t// Pass everything else to search input\n\t\telse {\n\t\t\tthis.searchInput.handleInput(keyData);\n\t\t\tthis.filterSessions(this.searchInput.getValue());\n\t\t}\n\t}\n}\n\ntype SessionsLoader = (onProgress?: SessionListProgress) => Promise<SessionInfo[]>;\n\n/**\n * Delete a session file, trying the `trash` CLI first, then falling back to unlink\n */\nasync function deleteSessionFile(\n\tsessionPath: string,\n): Promise<{ ok: boolean; method: \"trash\" | \"unlink\"; error?: string }> {\n\t// Try `trash` first (if installed)\n\tconst trashArgs = sessionPath.startsWith(\"-\") ? [\"--\", sessionPath] : [sessionPath];\n\tconst trashResult = spawnSync(\"trash\", trashArgs, { encoding: \"utf-8\" });\n\n\tconst getTrashErrorHint = (): string | null => {\n\t\tconst parts: string[] = [];\n\t\tif (trashResult.error) {\n\t\t\tparts.push(trashResult.error.message);\n\t\t}\n\t\tconst stderr = trashResult.stderr?.trim();\n\t\tif (stderr) {\n\t\t\tparts.push(stderr.split(\"\\n\")[0] ?? stderr);\n\t\t}\n\t\tif (parts.length === 0) return null;\n\t\treturn `trash: ${parts.join(\" · \").slice(0, 200)}`;\n\t};\n\n\t// If trash reports success, or the file is gone afterwards, treat it as successful\n\tif (trashResult.status === 0 || !existsSync(sessionPath)) {\n\t\treturn { ok: true, method: \"trash\" };\n\t}\n\n\t// Fallback to permanent deletion\n\ttry {\n\t\tawait unlink(sessionPath);\n\t\treturn { ok: true, method: \"unlink\" };\n\t} catch (err) {\n\t\tconst unlinkError = err instanceof Error ? err.message : String(err);\n\t\tconst trashErrorHint = getTrashErrorHint();\n\t\tconst error = trashErrorHint ? `${unlinkError} (${trashErrorHint})` : unlinkError;\n\t\treturn { ok: false, method: \"unlink\", error };\n\t}\n}\n\n/**\n * Component that renders a session selector\n */\nexport class SessionSelectorComponent extends Container implements Focusable {\n\thandleInput(data: string): void {\n\t\tif (this.mode === \"rename\") {\n\t\t\tconst kb = getKeybindings();\n\t\t\tif (kb.matches(data, \"tui.select.cancel\")) {\n\t\t\t\tthis.exitRenameMode();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.renameInput.handleInput(data);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.sessionList.handleInput(data);\n\t}\n\n\tprivate canRename = true;\n\tprivate sessionList: SessionList;\n\tprivate header: SessionSelectorHeader;\n\tprivate keybindings: KeybindingsManager;\n\tprivate scope: SessionScope = \"current\";\n\tprivate sortMode: SortMode = \"threaded\";\n\tprivate nameFilter: NameFilter = \"all\";\n\tprivate currentSessions: SessionInfo[] | null = null;\n\tprivate allSessions: SessionInfo[] | null = null;\n\tprivate currentSessionsLoader: SessionsLoader;\n\tprivate allSessionsLoader: SessionsLoader;\n\tprivate onCancel: () => void;\n\tprivate requestRender: () => void;\n\tprivate renameSession?: (sessionPath: string, currentName: string | undefined) => Promise<void>;\n\tprivate currentLoading = false;\n\tprivate allLoading = false;\n\tprivate allLoadSeq = 0;\n\n\tprivate mode: \"list\" | \"rename\" = \"list\";\n\tprivate renameInput = new Input();\n\tprivate renameTargetPath: string | null = null;\n\n\t// Focusable implementation - propagate to sessionList for IME cursor positioning\n\tprivate _focused = false;\n\tget focused(): boolean {\n\t\treturn this._focused;\n\t}\n\tset focused(value: boolean) {\n\t\tthis._focused = value;\n\t\tthis.sessionList.focused = value;\n\t\tthis.renameInput.focused = value;\n\t\tif (value && this.mode === \"rename\") {\n\t\t\tthis.renameInput.focused = true;\n\t\t}\n\t}\n\n\tprivate buildBaseLayout(content: Component, options?: { showHeader?: boolean }): void {\n\t\tthis.clear();\n\t\tthis.addChild(new Spacer(1));\n\t\tthis.addChild(new DynamicBorder((s) => theme.fg(\"accent\", s)));\n\t\tthis.addChild(new Spacer(1));\n\t\tif (options?.showHeader ?? true) {\n\t\t\tthis.addChild(this.header);\n\t\t\tthis.addChild(new Spacer(1));\n\t\t}\n\t\tthis.addChild(content);\n\t\tthis.addChild(new Spacer(1));\n\t\tthis.addChild(new DynamicBorder((s) => theme.fg(\"accent\", s)));\n\t}\n\n\tconstructor(\n\t\tcurrentSessionsLoader: SessionsLoader,\n\t\tallSessionsLoader: SessionsLoader,\n\t\tonSelect: (sessionPath: string) => void,\n\t\tonCancel: () => void,\n\t\tonExit: () => void,\n\t\trequestRender: () => void,\n\t\toptions?: {\n\t\t\trenameSession?: (sessionPath: string, currentName: string | undefined) => Promise<void>;\n\t\t\tshowRenameHint?: boolean;\n\t\t\tkeybindings?: KeybindingsManager;\n\t\t},\n\t\tcurrentSessionFilePath?: string,\n\t) {\n\t\tsuper();\n\t\tthis.keybindings = options?.keybindings ?? KeybindingsManager.create();\n\t\tthis.currentSessionsLoader = currentSessionsLoader;\n\t\tthis.allSessionsLoader = allSessionsLoader;\n\t\tthis.onCancel = onCancel;\n\t\tthis.requestRender = requestRender;\n\t\tthis.header = new SessionSelectorHeader(this.scope, this.sortMode, this.nameFilter, this.requestRender);\n\t\tconst renameSession = options?.renameSession;\n\t\tthis.renameSession = renameSession;\n\t\tthis.canRename = !!renameSession;\n\t\tthis.header.setShowRenameHint(options?.showRenameHint ?? this.canRename);\n\n\t\t// Create session list (starts empty, will be populated after load)\n\t\tthis.sessionList = new SessionList(\n\t\t\t[],\n\t\t\tfalse,\n\t\t\tthis.sortMode,\n\t\t\tthis.nameFilter,\n\t\t\tthis.keybindings,\n\t\t\tcurrentSessionFilePath,\n\t\t);\n\n\t\tthis.buildBaseLayout(this.sessionList);\n\n\t\tthis.renameInput.onSubmit = (value) => {\n\t\t\tvoid this.confirmRename(value);\n\t\t};\n\n\t\t// Ensure header status timeouts are cleared when leaving the selector\n\t\tconst clearStatusMessage = () => this.header.setStatusMessage(null);\n\t\tthis.sessionList.onSelect = (sessionPath) => {\n\t\t\tclearStatusMessage();\n\t\t\tonSelect(sessionPath);\n\t\t};\n\t\tthis.sessionList.onCancel = () => {\n\t\t\tclearStatusMessage();\n\t\t\tonCancel();\n\t\t};\n\t\tthis.sessionList.onExit = () => {\n\t\t\tclearStatusMessage();\n\t\t\tonExit();\n\t\t};\n\t\tthis.sessionList.onToggleScope = () => this.toggleScope();\n\t\tthis.sessionList.onToggleSort = () => this.toggleSortMode();\n\t\tthis.sessionList.onToggleNameFilter = () => this.toggleNameFilter();\n\t\tthis.sessionList.onRenameSession = (sessionPath) => {\n\t\t\tif (!renameSession) return;\n\t\t\tif (this.scope === \"current\" && this.currentLoading) return;\n\t\t\tif (this.scope === \"all\" && this.allLoading) return;\n\n\t\t\tconst sessions = this.scope === \"all\" ? (this.allSessions ?? []) : (this.currentSessions ?? []);\n\t\t\tconst session = sessions.find((s) => s.path === sessionPath);\n\t\t\tthis.enterRenameMode(sessionPath, session?.name);\n\t\t};\n\n\t\t// Sync list events to header\n\t\tthis.sessionList.onTogglePath = (showPath) => {\n\t\t\tthis.header.setShowPath(showPath);\n\t\t\tthis.requestRender();\n\t\t};\n\t\tthis.sessionList.onDeleteConfirmationChange = (path) => {\n\t\t\tthis.header.setConfirmingDeletePath(path);\n\t\t\tthis.requestRender();\n\t\t};\n\t\tthis.sessionList.onError = (msg) => {\n\t\t\tthis.header.setStatusMessage({ type: \"error\", message: msg }, 3000);\n\t\t\tthis.requestRender();\n\t\t};\n\n\t\t// Handle session deletion\n\t\tthis.sessionList.onDeleteSession = async (sessionPath: string) => {\n\t\t\tconst result = await deleteSessionFile(sessionPath);\n\n\t\t\tif (result.ok) {\n\t\t\t\tif (this.currentSessions) {\n\t\t\t\t\tthis.currentSessions = this.currentSessions.filter((s) => s.path !== sessionPath);\n\t\t\t\t}\n\t\t\t\tif (this.allSessions) {\n\t\t\t\t\tthis.allSessions = this.allSessions.filter((s) => s.path !== sessionPath);\n\t\t\t\t}\n\n\t\t\t\tconst sessions = this.scope === \"all\" ? (this.allSessions ?? []) : (this.currentSessions ?? []);\n\t\t\t\tconst showCwd = this.scope === \"all\";\n\t\t\t\tthis.sessionList.setSessions(sessions, showCwd);\n\n\t\t\t\tconst msg = result.method === \"trash\" ? \"Session moved to trash\" : \"Session deleted\";\n\t\t\t\tthis.header.setStatusMessage({ type: \"info\", message: msg }, 2000);\n\t\t\t\tawait this.refreshSessionsAfterMutation();\n\t\t\t} else {\n\t\t\t\tconst errorMessage = result.error ?? \"Unknown error\";\n\t\t\t\tthis.header.setStatusMessage({ type: \"error\", message: `Failed to delete: ${errorMessage}` }, 3000);\n\t\t\t}\n\n\t\t\tthis.requestRender();\n\t\t};\n\n\t\t// Start loading current sessions immediately\n\t\tthis.loadCurrentSessions();\n\t}\n\n\tprivate loadCurrentSessions(): void {\n\t\tvoid this.loadScope(\"current\", \"initial\");\n\t}\n\n\tprivate enterRenameMode(sessionPath: string, currentName: string | undefined): void {\n\t\tthis.mode = \"rename\";\n\t\tthis.renameTargetPath = sessionPath;\n\t\tthis.renameInput.setValue(currentName ?? \"\");\n\t\tthis.renameInput.focused = true;\n\n\t\tconst panel = new Container();\n\t\tpanel.addChild(new Text(theme.bold(\"Rename Session\"), 1, 0));\n\t\tpanel.addChild(new Spacer(1));\n\t\tpanel.addChild(this.renameInput);\n\t\tpanel.addChild(new Spacer(1));\n\t\tpanel.addChild(\n\t\t\tnew Text(\n\t\t\t\ttheme.fg(\"muted\", `${keyText(\"tui.select.confirm\")} to save · ${keyText(\"tui.select.cancel\")} to cancel`),\n\t\t\t\t1,\n\t\t\t\t0,\n\t\t\t),\n\t\t);\n\n\t\tthis.buildBaseLayout(panel, { showHeader: false });\n\t\tthis.requestRender();\n\t}\n\n\tprivate exitRenameMode(): void {\n\t\tthis.mode = \"list\";\n\t\tthis.renameTargetPath = null;\n\n\t\tthis.buildBaseLayout(this.sessionList);\n\n\t\tthis.requestRender();\n\t}\n\n\tprivate async confirmRename(value: string): Promise<void> {\n\t\tconst next = value.trim();\n\t\tif (!next) return;\n\t\tconst target = this.renameTargetPath;\n\t\tif (!target) {\n\t\t\tthis.exitRenameMode();\n\t\t\treturn;\n\t\t}\n\n\t\t// Find current name for callback\n\t\tconst renameSession = this.renameSession;\n\t\tif (!renameSession) {\n\t\t\tthis.exitRenameMode();\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tawait renameSession(target, next);\n\t\t\tawait this.refreshSessionsAfterMutation();\n\t\t} finally {\n\t\t\tthis.exitRenameMode();\n\t\t}\n\t}\n\n\tprivate async loadScope(scope: SessionScope, reason: \"initial\" | \"refresh\" | \"toggle\"): Promise<void> {\n\t\tconst showCwd = scope === \"all\";\n\n\t\t// Mark loading\n\t\tif (scope === \"current\") {\n\t\t\tthis.currentLoading = true;\n\t\t} else {\n\t\t\tthis.allLoading = true;\n\t\t}\n\n\t\tconst seq = scope === \"all\" ? ++this.allLoadSeq : undefined;\n\t\tthis.header.setScope(scope);\n\t\tthis.header.setLoading(true);\n\t\tthis.requestRender();\n\n\t\tconst onProgress = (loaded: number, total: number) => {\n\t\t\tif (scope !== this.scope) return;\n\t\t\tif (seq !== undefined && seq !== this.allLoadSeq) return;\n\t\t\tthis.header.setProgress(loaded, total);\n\t\t\tthis.requestRender();\n\t\t};\n\n\t\ttry {\n\t\t\tconst sessions = await (scope === \"current\"\n\t\t\t\t? this.currentSessionsLoader(onProgress)\n\t\t\t\t: this.allSessionsLoader(onProgress));\n\n\t\t\tif (scope === \"current\") {\n\t\t\t\tthis.currentSessions = sessions;\n\t\t\t\tthis.currentLoading = false;\n\t\t\t} else {\n\t\t\t\tthis.allSessions = sessions;\n\t\t\t\tthis.allLoading = false;\n\t\t\t}\n\n\t\t\tif (scope !== this.scope) return;\n\t\t\tif (seq !== undefined && seq !== this.allLoadSeq) return;\n\n\t\t\tthis.header.setLoading(false);\n\t\t\tthis.sessionList.setSessions(sessions, showCwd);\n\t\t\tthis.requestRender();\n\n\t\t\tif (scope === \"all\" && sessions.length === 0 && (this.currentSessions?.length ?? 0) === 0) {\n\t\t\t\tthis.onCancel();\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tif (scope === \"current\") {\n\t\t\t\tthis.currentLoading = false;\n\t\t\t} else {\n\t\t\t\tthis.allLoading = false;\n\t\t\t}\n\n\t\t\tif (scope !== this.scope) return;\n\t\t\tif (seq !== undefined && seq !== this.allLoadSeq) return;\n\n\t\t\tconst message = err instanceof Error ? err.message : String(err);\n\t\t\tthis.header.setLoading(false);\n\t\t\tthis.header.setStatusMessage({ type: \"error\", message: `Failed to load sessions: ${message}` }, 4000);\n\n\t\t\tif (reason === \"initial\") {\n\t\t\t\tthis.sessionList.setSessions([], showCwd);\n\t\t\t}\n\t\t\tthis.requestRender();\n\t\t}\n\t}\n\n\tprivate toggleSortMode(): void {\n\t\t// Cycle: threaded -> recent -> relevance -> threaded\n\t\tthis.sortMode = this.sortMode === \"threaded\" ? \"recent\" : this.sortMode === \"recent\" ? \"relevance\" : \"threaded\";\n\t\tthis.header.setSortMode(this.sortMode);\n\t\tthis.sessionList.setSortMode(this.sortMode);\n\t\tthis.requestRender();\n\t}\n\n\tprivate toggleNameFilter(): void {\n\t\tthis.nameFilter = this.nameFilter === \"all\" ? \"named\" : \"all\";\n\t\tthis.header.setNameFilter(this.nameFilter);\n\t\tthis.sessionList.setNameFilter(this.nameFilter);\n\t\tthis.requestRender();\n\t}\n\n\tprivate async refreshSessionsAfterMutation(): Promise<void> {\n\t\tawait this.loadScope(this.scope, \"refresh\");\n\t}\n\n\tprivate toggleScope(): void {\n\t\tif (this.scope === \"current\") {\n\t\t\tthis.scope = \"all\";\n\t\t\tthis.header.setScope(this.scope);\n\n\t\t\tif (this.allSessions !== null) {\n\t\t\t\tthis.header.setLoading(false);\n\t\t\t\tthis.sessionList.setSessions(this.allSessions, true);\n\t\t\t\tthis.requestRender();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!this.allLoading) {\n\t\t\t\tvoid this.loadScope(\"all\", \"toggle\");\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tthis.scope = \"current\";\n\t\tthis.header.setScope(this.scope);\n\t\tthis.header.setLoading(this.currentLoading);\n\t\tthis.sessionList.setSessions(this.currentSessions ?? [], false);\n\t\tthis.requestRender();\n\t}\n\n\tgetSessionList(): SessionList {\n\t\treturn this.sessionList;\n\t}\n}\n"]}