@eminent337/aery 0.1.62 → 0.1.64

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 (714) hide show
  1. package/CHANGELOG.md +0 -0
  2. package/README.md +0 -0
  3. package/docs/compaction.md +0 -0
  4. package/docs/custom-provider.md +1 -1
  5. package/docs/development.md +0 -0
  6. package/docs/docs.json +0 -0
  7. package/docs/extensions.md +18 -18
  8. package/docs/images/doom-extension.png +0 -0
  9. package/docs/images/exy.png +0 -0
  10. package/docs/images/interactive-mode.png +0 -0
  11. package/docs/images/tree-view.png +0 -0
  12. package/docs/index.md +5 -5
  13. package/docs/json.md +1 -1
  14. package/docs/keybindings.md +2 -2
  15. package/docs/models.md +2 -2
  16. package/docs/packages.md +13 -13
  17. package/docs/prompt-templates.md +0 -0
  18. package/docs/providers.md +5 -5
  19. package/docs/quickstart.md +19 -19
  20. package/docs/rpc.md +3 -3
  21. package/docs/sdk.md +1 -1
  22. package/docs/session-format.md +3 -3
  23. package/docs/sessions.md +10 -10
  24. package/docs/settings.md +7 -5
  25. package/docs/shell-aliases.md +0 -0
  26. package/docs/skills.md +2 -2
  27. package/docs/terminal-setup.md +6 -6
  28. package/docs/termux.md +3 -3
  29. package/docs/themes.md +3 -3
  30. package/docs/tmux.md +1 -1
  31. package/docs/tui.md +2 -2
  32. package/docs/usage.md +33 -33
  33. package/docs/windows.md +0 -0
  34. package/examples/README.md +0 -0
  35. package/examples/extensions/README.md +3 -3
  36. package/examples/extensions/antigravity-image-gen.ts +6 -6
  37. package/examples/extensions/auto-commit-on-exit.ts +1 -1
  38. package/examples/extensions/bash-spawn-hook.ts +1 -1
  39. package/examples/extensions/bookmark.ts +0 -0
  40. package/examples/extensions/border-status-editor.ts +0 -0
  41. package/examples/extensions/built-in-tool-renderer.ts +1 -1
  42. package/examples/extensions/claude-rules.ts +1 -1
  43. package/examples/extensions/commands.ts +1 -1
  44. package/examples/extensions/confirm-destructive.ts +0 -0
  45. package/examples/extensions/custom-compaction.ts +1 -1
  46. package/examples/extensions/custom-footer.ts +0 -0
  47. package/examples/extensions/custom-header.ts +2 -2
  48. package/examples/extensions/custom-provider-anthropic/index.ts +2 -2
  49. package/examples/extensions/custom-provider-anthropic/package-lock.json +0 -0
  50. package/examples/extensions/custom-provider-anthropic/package.json +0 -0
  51. package/examples/extensions/custom-provider-gitlab-duo/index.ts +2 -2
  52. package/examples/extensions/custom-provider-gitlab-duo/package.json +0 -0
  53. package/examples/extensions/custom-provider-gitlab-duo/test.ts +0 -0
  54. package/examples/extensions/custom-provider-qwen-cli/index.ts +1 -1
  55. package/examples/extensions/custom-provider-qwen-cli/package.json +0 -0
  56. package/examples/extensions/dirty-repo-guard.ts +0 -0
  57. package/examples/extensions/doom-overlay/README.md +2 -2
  58. package/examples/extensions/doom-overlay/doom/build/doom.js +0 -0
  59. package/examples/extensions/doom-overlay/doom/build.sh +2 -2
  60. package/examples/extensions/doom-overlay/doom/doomgeneric_pi.c +0 -0
  61. package/examples/extensions/doom-overlay/doom-component.ts +0 -0
  62. package/examples/extensions/doom-overlay/doom-engine.ts +0 -0
  63. package/examples/extensions/doom-overlay/doom-keys.ts +0 -0
  64. package/examples/extensions/doom-overlay/index.ts +1 -1
  65. package/examples/extensions/doom-overlay/wad-finder.ts +0 -0
  66. package/examples/extensions/dynamic-resources/SKILL.md +0 -0
  67. package/examples/extensions/dynamic-resources/dynamic.json +0 -0
  68. package/examples/extensions/dynamic-resources/dynamic.md +0 -0
  69. package/examples/extensions/dynamic-resources/index.ts +0 -0
  70. package/examples/extensions/dynamic-tools.ts +0 -0
  71. package/examples/extensions/event-bus.ts +0 -0
  72. package/examples/extensions/file-trigger.ts +0 -0
  73. package/examples/extensions/git-checkpoint.ts +0 -0
  74. package/examples/extensions/github-issue-autocomplete.ts +0 -0
  75. package/examples/extensions/handoff.ts +0 -0
  76. package/examples/extensions/hello.ts +0 -0
  77. package/examples/extensions/hidden-thinking-label.ts +1 -1
  78. package/examples/extensions/inline-bash.ts +2 -2
  79. package/examples/extensions/input-transform.ts +3 -3
  80. package/examples/extensions/interactive-shell.ts +1 -1
  81. package/examples/extensions/mac-system-theme.ts +2 -2
  82. package/examples/extensions/message-renderer.ts +0 -0
  83. package/examples/extensions/minimal-mode.ts +1 -1
  84. package/examples/extensions/modal-editor.ts +1 -1
  85. package/examples/extensions/model-status.ts +1 -1
  86. package/examples/extensions/notify.ts +0 -0
  87. package/examples/extensions/overlay-qa-tests.ts +1 -1
  88. package/examples/extensions/overlay-test.ts +1 -1
  89. package/examples/extensions/permission-gate.ts +0 -0
  90. package/examples/extensions/pirate.ts +1 -1
  91. package/examples/extensions/plan-mode/README.md +0 -0
  92. package/examples/extensions/plan-mode/index.ts +0 -0
  93. package/examples/extensions/plan-mode/utils.ts +0 -0
  94. package/examples/extensions/preset.ts +12 -6
  95. package/examples/extensions/prompt-customizer.ts +1 -1
  96. package/examples/extensions/protected-paths.ts +0 -0
  97. package/examples/extensions/provider-payload.ts +1 -1
  98. package/examples/extensions/qna.ts +0 -0
  99. package/examples/extensions/question.ts +0 -0
  100. package/examples/extensions/questionnaire.ts +0 -0
  101. package/examples/extensions/rainbow-editor.ts +1 -1
  102. package/examples/extensions/reload-runtime.ts +0 -0
  103. package/examples/extensions/rpc-demo.ts +1 -1
  104. package/examples/extensions/sandbox/index.ts +8 -8
  105. package/examples/extensions/sandbox/package-lock.json +0 -0
  106. package/examples/extensions/sandbox/package.json +0 -0
  107. package/examples/extensions/send-user-message.ts +0 -0
  108. package/examples/extensions/session-name.ts +0 -0
  109. package/examples/extensions/shutdown-command.ts +5 -5
  110. package/examples/extensions/snake.ts +0 -0
  111. package/examples/extensions/space-invaders.ts +0 -0
  112. package/examples/extensions/ssh.ts +2 -2
  113. package/examples/extensions/status-line.ts +0 -0
  114. package/examples/extensions/structured-output.ts +0 -0
  115. package/examples/extensions/subagent/README.md +13 -13
  116. package/examples/extensions/subagent/agents/planner.md +0 -0
  117. package/examples/extensions/subagent/agents/reviewer.md +0 -0
  118. package/examples/extensions/subagent/agents/scout.md +0 -0
  119. package/examples/extensions/subagent/agents/worker.md +0 -0
  120. package/examples/extensions/subagent/agents.ts +1 -1
  121. package/examples/extensions/subagent/index.ts +5 -5
  122. package/examples/extensions/subagent/prompts/implement-and-review.md +0 -0
  123. package/examples/extensions/subagent/prompts/implement.md +0 -0
  124. package/examples/extensions/subagent/prompts/scout-and-plan.md +0 -0
  125. package/examples/extensions/summarize.ts +0 -0
  126. package/examples/extensions/system-prompt-header.ts +0 -0
  127. package/examples/extensions/tic-tac-toe.ts +0 -0
  128. package/examples/extensions/timed-confirm.ts +0 -0
  129. package/examples/extensions/titlebar-spinner.ts +1 -1
  130. package/examples/extensions/todo.ts +0 -0
  131. package/examples/extensions/tool-override.ts +2 -2
  132. package/examples/extensions/tools.ts +1 -1
  133. package/examples/extensions/trigger-compact.ts +0 -0
  134. package/examples/extensions/truncated-tool.ts +1 -1
  135. package/examples/extensions/widget-placement.ts +0 -0
  136. package/examples/extensions/with-deps/index.ts +0 -0
  137. package/examples/extensions/with-deps/package-lock.json +0 -0
  138. package/examples/extensions/with-deps/package.json +0 -0
  139. package/examples/extensions/working-indicator.ts +4 -4
  140. package/examples/extensions/working-message-test.ts +1 -1
  141. package/examples/rpc-extension-ui.ts +0 -0
  142. package/examples/sdk/01-minimal.ts +1 -1
  143. package/examples/sdk/02-custom-model.ts +0 -0
  144. package/examples/sdk/03-custom-prompt.ts +1 -1
  145. package/examples/sdk/04-skills.ts +1 -1
  146. package/examples/sdk/05-tools.ts +0 -0
  147. package/examples/sdk/06-extensions.ts +2 -2
  148. package/examples/sdk/07-context-files.ts +0 -0
  149. package/examples/sdk/08-prompt-templates.ts +1 -1
  150. package/examples/sdk/09-api-keys-and-oauth.ts +2 -2
  151. package/examples/sdk/10-settings.ts +0 -0
  152. package/examples/sdk/11-sessions.ts +0 -0
  153. package/examples/sdk/12-full-control.ts +0 -0
  154. package/examples/sdk/13-session-runtime.ts +0 -0
  155. package/examples/sdk/README.md +1 -1
  156. package/package.json +4 -4
  157. package/dist/bun/cli.d.ts +0 -3
  158. package/dist/bun/cli.d.ts.map +0 -1
  159. package/dist/bun/cli.js +0 -8
  160. package/dist/bun/cli.js.map +0 -1
  161. package/dist/bun/register-bedrock.d.ts +0 -2
  162. package/dist/bun/register-bedrock.d.ts.map +0 -1
  163. package/dist/bun/register-bedrock.js +0 -4
  164. package/dist/bun/register-bedrock.js.map +0 -1
  165. package/dist/bun/restore-sandbox-env.d.ts +0 -13
  166. package/dist/bun/restore-sandbox-env.d.ts.map +0 -1
  167. package/dist/bun/restore-sandbox-env.js +0 -32
  168. package/dist/bun/restore-sandbox-env.js.map +0 -1
  169. package/dist/cli/args.d.ts +0 -53
  170. package/dist/cli/args.d.ts.map +0 -1
  171. package/dist/cli/args.js +0 -329
  172. package/dist/cli/args.js.map +0 -1
  173. package/dist/cli/config-selector.d.ts +0 -14
  174. package/dist/cli/config-selector.d.ts.map +0 -1
  175. package/dist/cli/config-selector.js +0 -31
  176. package/dist/cli/config-selector.js.map +0 -1
  177. package/dist/cli/file-processor.d.ts +0 -15
  178. package/dist/cli/file-processor.d.ts.map +0 -1
  179. package/dist/cli/file-processor.js +0 -83
  180. package/dist/cli/file-processor.js.map +0 -1
  181. package/dist/cli/initial-message.d.ts +0 -18
  182. package/dist/cli/initial-message.d.ts.map +0 -1
  183. package/dist/cli/initial-message.js +0 -22
  184. package/dist/cli/initial-message.js.map +0 -1
  185. package/dist/cli/list-models.d.ts +0 -9
  186. package/dist/cli/list-models.d.ts.map +0 -1
  187. package/dist/cli/list-models.js +0 -98
  188. package/dist/cli/list-models.js.map +0 -1
  189. package/dist/cli/session-picker.d.ts +0 -9
  190. package/dist/cli/session-picker.d.ts.map +0 -1
  191. package/dist/cli/session-picker.js +0 -35
  192. package/dist/cli/session-picker.js.map +0 -1
  193. package/dist/cli.d.ts +0 -3
  194. package/dist/cli.d.ts.map +0 -1
  195. package/dist/cli.js +0 -19
  196. package/dist/cli.js.map +0 -1
  197. package/dist/config.d.ts +0 -86
  198. package/dist/config.d.ts.map +0 -1
  199. package/dist/config.js +0 -332
  200. package/dist/config.js.map +0 -1
  201. package/dist/core/agent-session-runtime.d.ts +0 -117
  202. package/dist/core/agent-session-runtime.d.ts.map +0 -1
  203. package/dist/core/agent-session-runtime.js +0 -300
  204. package/dist/core/agent-session-runtime.js.map +0 -1
  205. package/dist/core/agent-session-services.d.ts +0 -86
  206. package/dist/core/agent-session-services.d.ts.map +0 -1
  207. package/dist/core/agent-session-services.js +0 -117
  208. package/dist/core/agent-session-services.js.map +0 -1
  209. package/dist/core/agent-session.d.ts +0 -595
  210. package/dist/core/agent-session.d.ts.map +0 -1
  211. package/dist/core/agent-session.js +0 -2520
  212. package/dist/core/agent-session.js.map +0 -1
  213. package/dist/core/auth-guidance.d.ts +0 -5
  214. package/dist/core/auth-guidance.d.ts.map +0 -1
  215. package/dist/core/auth-guidance.js +0 -21
  216. package/dist/core/auth-guidance.js.map +0 -1
  217. package/dist/core/auth-storage.d.ts +0 -141
  218. package/dist/core/auth-storage.d.ts.map +0 -1
  219. package/dist/core/auth-storage.js +0 -441
  220. package/dist/core/auth-storage.js.map +0 -1
  221. package/dist/core/bash-executor.d.ts +0 -32
  222. package/dist/core/bash-executor.d.ts.map +0 -1
  223. package/dist/core/bash-executor.js +0 -111
  224. package/dist/core/bash-executor.js.map +0 -1
  225. package/dist/core/compaction/branch-summarization.d.ts +0 -88
  226. package/dist/core/compaction/branch-summarization.d.ts.map +0 -1
  227. package/dist/core/compaction/branch-summarization.js +0 -243
  228. package/dist/core/compaction/branch-summarization.js.map +0 -1
  229. package/dist/core/compaction/compaction.d.ts +0 -121
  230. package/dist/core/compaction/compaction.d.ts.map +0 -1
  231. package/dist/core/compaction/compaction.js +0 -615
  232. package/dist/core/compaction/compaction.js.map +0 -1
  233. package/dist/core/compaction/index.d.ts +0 -7
  234. package/dist/core/compaction/index.d.ts.map +0 -1
  235. package/dist/core/compaction/index.js +0 -7
  236. package/dist/core/compaction/index.js.map +0 -1
  237. package/dist/core/compaction/utils.d.ts +0 -38
  238. package/dist/core/compaction/utils.d.ts.map +0 -1
  239. package/dist/core/compaction/utils.js +0 -153
  240. package/dist/core/compaction/utils.js.map +0 -1
  241. package/dist/core/defaults.d.ts +0 -3
  242. package/dist/core/defaults.d.ts.map +0 -1
  243. package/dist/core/defaults.js +0 -2
  244. package/dist/core/defaults.js.map +0 -1
  245. package/dist/core/diagnostics.d.ts +0 -15
  246. package/dist/core/diagnostics.d.ts.map +0 -1
  247. package/dist/core/diagnostics.js +0 -2
  248. package/dist/core/diagnostics.js.map +0 -1
  249. package/dist/core/event-bus.d.ts +0 -9
  250. package/dist/core/event-bus.d.ts.map +0 -1
  251. package/dist/core/event-bus.js +0 -25
  252. package/dist/core/event-bus.js.map +0 -1
  253. package/dist/core/exec.d.ts +0 -29
  254. package/dist/core/exec.d.ts.map +0 -1
  255. package/dist/core/exec.js +0 -75
  256. package/dist/core/exec.js.map +0 -1
  257. package/dist/core/export-html/ansi-to-html.d.ts +0 -22
  258. package/dist/core/export-html/ansi-to-html.d.ts.map +0 -1
  259. package/dist/core/export-html/ansi-to-html.js +0 -249
  260. package/dist/core/export-html/ansi-to-html.js.map +0 -1
  261. package/dist/core/export-html/index.d.ts +0 -37
  262. package/dist/core/export-html/index.d.ts.map +0 -1
  263. package/dist/core/export-html/index.js +0 -224
  264. package/dist/core/export-html/index.js.map +0 -1
  265. package/dist/core/export-html/template.css +0 -1022
  266. package/dist/core/export-html/template.html +0 -55
  267. package/dist/core/export-html/template.js +0 -1770
  268. package/dist/core/export-html/tool-renderer.d.ts +0 -34
  269. package/dist/core/export-html/tool-renderer.d.ts.map +0 -1
  270. package/dist/core/export-html/tool-renderer.js +0 -108
  271. package/dist/core/export-html/tool-renderer.js.map +0 -1
  272. package/dist/core/export-html/vendor/highlight.min.js +0 -1213
  273. package/dist/core/export-html/vendor/marked.min.js +0 -6
  274. package/dist/core/extensions/index.d.ts +0 -12
  275. package/dist/core/extensions/index.d.ts.map +0 -1
  276. package/dist/core/extensions/index.js +0 -9
  277. package/dist/core/extensions/index.js.map +0 -1
  278. package/dist/core/extensions/loader.d.ts +0 -25
  279. package/dist/core/extensions/loader.d.ts.map +0 -1
  280. package/dist/core/extensions/loader.js +0 -476
  281. package/dist/core/extensions/loader.js.map +0 -1
  282. package/dist/core/extensions/runner.d.ts +0 -158
  283. package/dist/core/extensions/runner.d.ts.map +0 -1
  284. package/dist/core/extensions/runner.js +0 -784
  285. package/dist/core/extensions/runner.js.map +0 -1
  286. package/dist/core/extensions/types.d.ts +0 -1153
  287. package/dist/core/extensions/types.d.ts.map +0 -1
  288. package/dist/core/extensions/types.js +0 -45
  289. package/dist/core/extensions/types.js.map +0 -1
  290. package/dist/core/extensions/wrapper.d.ts +0 -20
  291. package/dist/core/extensions/wrapper.d.ts.map +0 -1
  292. package/dist/core/extensions/wrapper.js +0 -22
  293. package/dist/core/extensions/wrapper.js.map +0 -1
  294. package/dist/core/footer-data-provider.d.ts +0 -52
  295. package/dist/core/footer-data-provider.d.ts.map +0 -1
  296. package/dist/core/footer-data-provider.js +0 -310
  297. package/dist/core/footer-data-provider.js.map +0 -1
  298. package/dist/core/index.d.ts +0 -12
  299. package/dist/core/index.d.ts.map +0 -1
  300. package/dist/core/index.js +0 -12
  301. package/dist/core/index.js.map +0 -1
  302. package/dist/core/keybindings.d.ts +0 -353
  303. package/dist/core/keybindings.d.ts.map +0 -1
  304. package/dist/core/keybindings.js +0 -295
  305. package/dist/core/keybindings.js.map +0 -1
  306. package/dist/core/messages.d.ts +0 -77
  307. package/dist/core/messages.d.ts.map +0 -1
  308. package/dist/core/messages.js +0 -123
  309. package/dist/core/messages.js.map +0 -1
  310. package/dist/core/model-registry.d.ts +0 -144
  311. package/dist/core/model-registry.d.ts.map +0 -1
  312. package/dist/core/model-registry.js +0 -699
  313. package/dist/core/model-registry.js.map +0 -1
  314. package/dist/core/model-resolver.d.ts +0 -110
  315. package/dist/core/model-resolver.d.ts.map +0 -1
  316. package/dist/core/model-resolver.js +0 -489
  317. package/dist/core/model-resolver.js.map +0 -1
  318. package/dist/core/output-guard.d.ts +0 -6
  319. package/dist/core/output-guard.d.ts.map +0 -1
  320. package/dist/core/output-guard.js +0 -59
  321. package/dist/core/output-guard.js.map +0 -1
  322. package/dist/core/package-manager.d.ts +0 -199
  323. package/dist/core/package-manager.d.ts.map +0 -1
  324. package/dist/core/package-manager.js +0 -1973
  325. package/dist/core/package-manager.js.map +0 -1
  326. package/dist/core/prompt-templates.d.ts +0 -52
  327. package/dist/core/prompt-templates.d.ts.map +0 -1
  328. package/dist/core/prompt-templates.js +0 -250
  329. package/dist/core/prompt-templates.js.map +0 -1
  330. package/dist/core/resolve-config-value.d.ts +0 -23
  331. package/dist/core/resolve-config-value.d.ts.map +0 -1
  332. package/dist/core/resolve-config-value.js +0 -126
  333. package/dist/core/resolve-config-value.js.map +0 -1
  334. package/dist/core/resource-loader.d.ts +0 -194
  335. package/dist/core/resource-loader.d.ts.map +0 -1
  336. package/dist/core/resource-loader.js +0 -727
  337. package/dist/core/resource-loader.js.map +0 -1
  338. package/dist/core/sdk.d.ts +0 -107
  339. package/dist/core/sdk.d.ts.map +0 -1
  340. package/dist/core/sdk.js +0 -274
  341. package/dist/core/sdk.js.map +0 -1
  342. package/dist/core/session-cwd.d.ts +0 -19
  343. package/dist/core/session-cwd.d.ts.map +0 -1
  344. package/dist/core/session-cwd.js +0 -38
  345. package/dist/core/session-cwd.js.map +0 -1
  346. package/dist/core/session-manager.d.ts +0 -333
  347. package/dist/core/session-manager.d.ts.map +0 -1
  348. package/dist/core/session-manager.js +0 -1109
  349. package/dist/core/session-manager.js.map +0 -1
  350. package/dist/core/settings-manager.d.ts +0 -261
  351. package/dist/core/settings-manager.d.ts.map +0 -1
  352. package/dist/core/settings-manager.js +0 -782
  353. package/dist/core/settings-manager.js.map +0 -1
  354. package/dist/core/skills.d.ts +0 -60
  355. package/dist/core/skills.d.ts.map +0 -1
  356. package/dist/core/skills.js +0 -404
  357. package/dist/core/skills.js.map +0 -1
  358. package/dist/core/slash-commands.d.ts +0 -14
  359. package/dist/core/slash-commands.d.ts.map +0 -1
  360. package/dist/core/slash-commands.js +0 -25
  361. package/dist/core/slash-commands.js.map +0 -1
  362. package/dist/core/source-info.d.ts +0 -18
  363. package/dist/core/source-info.d.ts.map +0 -1
  364. package/dist/core/source-info.js +0 -19
  365. package/dist/core/source-info.js.map +0 -1
  366. package/dist/core/system-prompt.d.ts +0 -28
  367. package/dist/core/system-prompt.d.ts.map +0 -1
  368. package/dist/core/system-prompt.js +0 -120
  369. package/dist/core/system-prompt.js.map +0 -1
  370. package/dist/core/telemetry.d.ts +0 -3
  371. package/dist/core/telemetry.d.ts.map +0 -1
  372. package/dist/core/telemetry.js +0 -9
  373. package/dist/core/telemetry.js.map +0 -1
  374. package/dist/core/timings.d.ts +0 -8
  375. package/dist/core/timings.d.ts.map +0 -1
  376. package/dist/core/timings.js +0 -31
  377. package/dist/core/timings.js.map +0 -1
  378. package/dist/core/tools/bash.d.ts +0 -68
  379. package/dist/core/tools/bash.d.ts.map +0 -1
  380. package/dist/core/tools/bash.js +0 -355
  381. package/dist/core/tools/bash.js.map +0 -1
  382. package/dist/core/tools/edit-diff.d.ts +0 -85
  383. package/dist/core/tools/edit-diff.d.ts.map +0 -1
  384. package/dist/core/tools/edit-diff.js +0 -337
  385. package/dist/core/tools/edit-diff.js.map +0 -1
  386. package/dist/core/tools/edit.d.ts +0 -49
  387. package/dist/core/tools/edit.d.ts.map +0 -1
  388. package/dist/core/tools/edit.js +0 -323
  389. package/dist/core/tools/edit.js.map +0 -1
  390. package/dist/core/tools/file-mutation-queue.d.ts +0 -6
  391. package/dist/core/tools/file-mutation-queue.d.ts.map +0 -1
  392. package/dist/core/tools/file-mutation-queue.js +0 -37
  393. package/dist/core/tools/file-mutation-queue.js.map +0 -1
  394. package/dist/core/tools/find.d.ts +0 -35
  395. package/dist/core/tools/find.d.ts.map +0 -1
  396. package/dist/core/tools/find.js +0 -298
  397. package/dist/core/tools/find.js.map +0 -1
  398. package/dist/core/tools/grep.d.ts +0 -37
  399. package/dist/core/tools/grep.d.ts.map +0 -1
  400. package/dist/core/tools/grep.js +0 -304
  401. package/dist/core/tools/grep.js.map +0 -1
  402. package/dist/core/tools/index.d.ts +0 -40
  403. package/dist/core/tools/index.d.ts.map +0 -1
  404. package/dist/core/tools/index.js +0 -112
  405. package/dist/core/tools/index.js.map +0 -1
  406. package/dist/core/tools/ls.d.ts +0 -37
  407. package/dist/core/tools/ls.d.ts.map +0 -1
  408. package/dist/core/tools/ls.js +0 -169
  409. package/dist/core/tools/ls.js.map +0 -1
  410. package/dist/core/tools/path-utils.d.ts +0 -8
  411. package/dist/core/tools/path-utils.d.ts.map +0 -1
  412. package/dist/core/tools/path-utils.js +0 -81
  413. package/dist/core/tools/path-utils.js.map +0 -1
  414. package/dist/core/tools/read.d.ts +0 -35
  415. package/dist/core/tools/read.d.ts.map +0 -1
  416. package/dist/core/tools/read.js +0 -232
  417. package/dist/core/tools/read.js.map +0 -1
  418. package/dist/core/tools/render-utils.d.ts +0 -21
  419. package/dist/core/tools/render-utils.d.ts.map +0 -1
  420. package/dist/core/tools/render-utils.js +0 -49
  421. package/dist/core/tools/render-utils.js.map +0 -1
  422. package/dist/core/tools/tool-definition-wrapper.d.ts +0 -14
  423. package/dist/core/tools/tool-definition-wrapper.d.ts.map +0 -1
  424. package/dist/core/tools/tool-definition-wrapper.js +0 -34
  425. package/dist/core/tools/tool-definition-wrapper.js.map +0 -1
  426. package/dist/core/tools/truncate.d.ts +0 -70
  427. package/dist/core/tools/truncate.d.ts.map +0 -1
  428. package/dist/core/tools/truncate.js +0 -205
  429. package/dist/core/tools/truncate.js.map +0 -1
  430. package/dist/core/tools/write.d.ts +0 -26
  431. package/dist/core/tools/write.d.ts.map +0 -1
  432. package/dist/core/tools/write.js +0 -213
  433. package/dist/core/tools/write.js.map +0 -1
  434. package/dist/index.d.ts +0 -28
  435. package/dist/index.d.ts.map +0 -1
  436. package/dist/index.js +0 -41
  437. package/dist/index.js.map +0 -1
  438. package/dist/main.d.ts +0 -12
  439. package/dist/main.d.ts.map +0 -1
  440. package/dist/main.js +0 -589
  441. package/dist/main.js.map +0 -1
  442. package/dist/migrations.d.ts +0 -33
  443. package/dist/migrations.d.ts.map +0 -1
  444. package/dist/migrations.js +0 -281
  445. package/dist/migrations.js.map +0 -1
  446. package/dist/modes/index.d.ts +0 -9
  447. package/dist/modes/index.d.ts.map +0 -1
  448. package/dist/modes/index.js +0 -8
  449. package/dist/modes/index.js.map +0 -1
  450. package/dist/modes/interactive/assets/clankolas.png +0 -0
  451. package/dist/modes/interactive/components/aery-splash.d.ts +0 -18
  452. package/dist/modes/interactive/components/aery-splash.d.ts.map +0 -1
  453. package/dist/modes/interactive/components/aery-splash.js +0 -60
  454. package/dist/modes/interactive/components/aery-splash.js.map +0 -1
  455. package/dist/modes/interactive/components/armin.d.ts +0 -34
  456. package/dist/modes/interactive/components/armin.d.ts.map +0 -1
  457. package/dist/modes/interactive/components/armin.js +0 -333
  458. package/dist/modes/interactive/components/armin.js.map +0 -1
  459. package/dist/modes/interactive/components/assistant-message.d.ts +0 -20
  460. package/dist/modes/interactive/components/assistant-message.d.ts.map +0 -1
  461. package/dist/modes/interactive/components/assistant-message.js +0 -121
  462. package/dist/modes/interactive/components/assistant-message.js.map +0 -1
  463. package/dist/modes/interactive/components/bash-execution.d.ts +0 -34
  464. package/dist/modes/interactive/components/bash-execution.d.ts.map +0 -1
  465. package/dist/modes/interactive/components/bash-execution.js +0 -175
  466. package/dist/modes/interactive/components/bash-execution.js.map +0 -1
  467. package/dist/modes/interactive/components/bordered-loader.d.ts +0 -16
  468. package/dist/modes/interactive/components/bordered-loader.d.ts.map +0 -1
  469. package/dist/modes/interactive/components/bordered-loader.js +0 -54
  470. package/dist/modes/interactive/components/bordered-loader.js.map +0 -1
  471. package/dist/modes/interactive/components/branch-summary-message.d.ts +0 -16
  472. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +0 -1
  473. package/dist/modes/interactive/components/branch-summary-message.js +0 -44
  474. package/dist/modes/interactive/components/branch-summary-message.js.map +0 -1
  475. package/dist/modes/interactive/components/compaction-summary-message.d.ts +0 -16
  476. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +0 -1
  477. package/dist/modes/interactive/components/compaction-summary-message.js +0 -45
  478. package/dist/modes/interactive/components/compaction-summary-message.js.map +0 -1
  479. package/dist/modes/interactive/components/config-selector.d.ts +0 -71
  480. package/dist/modes/interactive/components/config-selector.d.ts.map +0 -1
  481. package/dist/modes/interactive/components/config-selector.js +0 -481
  482. package/dist/modes/interactive/components/config-selector.js.map +0 -1
  483. package/dist/modes/interactive/components/countdown-timer.d.ts +0 -14
  484. package/dist/modes/interactive/components/countdown-timer.d.ts.map +0 -1
  485. package/dist/modes/interactive/components/countdown-timer.js +0 -33
  486. package/dist/modes/interactive/components/countdown-timer.js.map +0 -1
  487. package/dist/modes/interactive/components/custom-editor.d.ts +0 -21
  488. package/dist/modes/interactive/components/custom-editor.d.ts.map +0 -1
  489. package/dist/modes/interactive/components/custom-editor.js +0 -70
  490. package/dist/modes/interactive/components/custom-editor.js.map +0 -1
  491. package/dist/modes/interactive/components/custom-message.d.ts +0 -20
  492. package/dist/modes/interactive/components/custom-message.d.ts.map +0 -1
  493. package/dist/modes/interactive/components/custom-message.js +0 -79
  494. package/dist/modes/interactive/components/custom-message.js.map +0 -1
  495. package/dist/modes/interactive/components/daxnuts.d.ts +0 -23
  496. package/dist/modes/interactive/components/daxnuts.d.ts.map +0 -1
  497. package/dist/modes/interactive/components/daxnuts.js +0 -140
  498. package/dist/modes/interactive/components/daxnuts.js.map +0 -1
  499. package/dist/modes/interactive/components/diff.d.ts +0 -12
  500. package/dist/modes/interactive/components/diff.d.ts.map +0 -1
  501. package/dist/modes/interactive/components/diff.js +0 -133
  502. package/dist/modes/interactive/components/diff.js.map +0 -1
  503. package/dist/modes/interactive/components/dynamic-border.d.ts +0 -15
  504. package/dist/modes/interactive/components/dynamic-border.d.ts.map +0 -1
  505. package/dist/modes/interactive/components/dynamic-border.js +0 -21
  506. package/dist/modes/interactive/components/dynamic-border.js.map +0 -1
  507. package/dist/modes/interactive/components/earendil-announcement.d.ts +0 -5
  508. package/dist/modes/interactive/components/earendil-announcement.d.ts.map +0 -1
  509. package/dist/modes/interactive/components/earendil-announcement.js +0 -40
  510. package/dist/modes/interactive/components/earendil-announcement.js.map +0 -1
  511. package/dist/modes/interactive/components/extension-editor.d.ts +0 -20
  512. package/dist/modes/interactive/components/extension-editor.d.ts.map +0 -1
  513. package/dist/modes/interactive/components/extension-editor.js +0 -111
  514. package/dist/modes/interactive/components/extension-editor.js.map +0 -1
  515. package/dist/modes/interactive/components/extension-input.d.ts +0 -23
  516. package/dist/modes/interactive/components/extension-input.d.ts.map +0 -1
  517. package/dist/modes/interactive/components/extension-input.js +0 -61
  518. package/dist/modes/interactive/components/extension-input.js.map +0 -1
  519. package/dist/modes/interactive/components/extension-selector.d.ts +0 -24
  520. package/dist/modes/interactive/components/extension-selector.d.ts.map +0 -1
  521. package/dist/modes/interactive/components/extension-selector.js +0 -78
  522. package/dist/modes/interactive/components/extension-selector.js.map +0 -1
  523. package/dist/modes/interactive/components/footer.d.ts +0 -27
  524. package/dist/modes/interactive/components/footer.d.ts.map +0 -1
  525. package/dist/modes/interactive/components/footer.js +0 -201
  526. package/dist/modes/interactive/components/footer.js.map +0 -1
  527. package/dist/modes/interactive/components/index.d.ts +0 -32
  528. package/dist/modes/interactive/components/index.d.ts.map +0 -1
  529. package/dist/modes/interactive/components/index.js +0 -33
  530. package/dist/modes/interactive/components/index.js.map +0 -1
  531. package/dist/modes/interactive/components/keybinding-hints.d.ts +0 -8
  532. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +0 -1
  533. package/dist/modes/interactive/components/keybinding-hints.js +0 -22
  534. package/dist/modes/interactive/components/keybinding-hints.js.map +0 -1
  535. package/dist/modes/interactive/components/login-dialog.d.ts +0 -46
  536. package/dist/modes/interactive/components/login-dialog.d.ts.map +0 -1
  537. package/dist/modes/interactive/components/login-dialog.js +0 -158
  538. package/dist/modes/interactive/components/login-dialog.js.map +0 -1
  539. package/dist/modes/interactive/components/model-selector.d.ts +0 -47
  540. package/dist/modes/interactive/components/model-selector.d.ts.map +0 -1
  541. package/dist/modes/interactive/components/model-selector.js +0 -278
  542. package/dist/modes/interactive/components/model-selector.js.map +0 -1
  543. package/dist/modes/interactive/components/oauth-selector.d.ts +0 -29
  544. package/dist/modes/interactive/components/oauth-selector.d.ts.map +0 -1
  545. package/dist/modes/interactive/components/oauth-selector.js +0 -141
  546. package/dist/modes/interactive/components/oauth-selector.js.map +0 -1
  547. package/dist/modes/interactive/components/scoped-models-selector.d.ts +0 -42
  548. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +0 -1
  549. package/dist/modes/interactive/components/scoped-models-selector.js +0 -290
  550. package/dist/modes/interactive/components/scoped-models-selector.js.map +0 -1
  551. package/dist/modes/interactive/components/session-selector-search.d.ts +0 -23
  552. package/dist/modes/interactive/components/session-selector-search.d.ts.map +0 -1
  553. package/dist/modes/interactive/components/session-selector-search.js +0 -155
  554. package/dist/modes/interactive/components/session-selector-search.js.map +0 -1
  555. package/dist/modes/interactive/components/session-selector.d.ts +0 -96
  556. package/dist/modes/interactive/components/session-selector.d.ts.map +0 -1
  557. package/dist/modes/interactive/components/session-selector.js +0 -861
  558. package/dist/modes/interactive/components/session-selector.js.map +0 -1
  559. package/dist/modes/interactive/components/settings-selector.d.ts +0 -67
  560. package/dist/modes/interactive/components/settings-selector.d.ts.map +0 -1
  561. package/dist/modes/interactive/components/settings-selector.js +0 -373
  562. package/dist/modes/interactive/components/settings-selector.js.map +0 -1
  563. package/dist/modes/interactive/components/show-images-selector.d.ts +0 -10
  564. package/dist/modes/interactive/components/show-images-selector.d.ts.map +0 -1
  565. package/dist/modes/interactive/components/show-images-selector.js +0 -39
  566. package/dist/modes/interactive/components/show-images-selector.js.map +0 -1
  567. package/dist/modes/interactive/components/skill-invocation-message.d.ts +0 -17
  568. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +0 -1
  569. package/dist/modes/interactive/components/skill-invocation-message.js +0 -47
  570. package/dist/modes/interactive/components/skill-invocation-message.js.map +0 -1
  571. package/dist/modes/interactive/components/theme-selector.d.ts +0 -11
  572. package/dist/modes/interactive/components/theme-selector.d.ts.map +0 -1
  573. package/dist/modes/interactive/components/theme-selector.js +0 -50
  574. package/dist/modes/interactive/components/theme-selector.js.map +0 -1
  575. package/dist/modes/interactive/components/thinking-selector.d.ts +0 -11
  576. package/dist/modes/interactive/components/thinking-selector.d.ts.map +0 -1
  577. package/dist/modes/interactive/components/thinking-selector.js +0 -51
  578. package/dist/modes/interactive/components/thinking-selector.js.map +0 -1
  579. package/dist/modes/interactive/components/tool-execution.d.ts +0 -63
  580. package/dist/modes/interactive/components/tool-execution.d.ts.map +0 -1
  581. package/dist/modes/interactive/components/tool-execution.js +0 -295
  582. package/dist/modes/interactive/components/tool-execution.js.map +0 -1
  583. package/dist/modes/interactive/components/tree-selector.d.ts +0 -89
  584. package/dist/modes/interactive/components/tree-selector.d.ts.map +0 -1
  585. package/dist/modes/interactive/components/tree-selector.js +0 -1092
  586. package/dist/modes/interactive/components/tree-selector.js.map +0 -1
  587. package/dist/modes/interactive/components/user-message-selector.d.ts +0 -30
  588. package/dist/modes/interactive/components/user-message-selector.d.ts.map +0 -1
  589. package/dist/modes/interactive/components/user-message-selector.js +0 -114
  590. package/dist/modes/interactive/components/user-message-selector.js.map +0 -1
  591. package/dist/modes/interactive/components/user-message.d.ts +0 -10
  592. package/dist/modes/interactive/components/user-message.d.ts.map +0 -1
  593. package/dist/modes/interactive/components/user-message.js +0 -29
  594. package/dist/modes/interactive/components/user-message.js.map +0 -1
  595. package/dist/modes/interactive/components/visual-truncate.d.ts +0 -24
  596. package/dist/modes/interactive/components/visual-truncate.d.ts.map +0 -1
  597. package/dist/modes/interactive/components/visual-truncate.js +0 -33
  598. package/dist/modes/interactive/components/visual-truncate.js.map +0 -1
  599. package/dist/modes/interactive/interactive-mode.d.ts +0 -359
  600. package/dist/modes/interactive/interactive-mode.d.ts.map +0 -1
  601. package/dist/modes/interactive/interactive-mode.js +0 -4573
  602. package/dist/modes/interactive/interactive-mode.js.map +0 -1
  603. package/dist/modes/interactive/theme/aery.json +0 -84
  604. package/dist/modes/interactive/theme/catppuccin-mocha.json +0 -81
  605. package/dist/modes/interactive/theme/dark.json +0 -85
  606. package/dist/modes/interactive/theme/dracula.json +0 -81
  607. package/dist/modes/interactive/theme/light.json +0 -84
  608. package/dist/modes/interactive/theme/nord.json +0 -81
  609. package/dist/modes/interactive/theme/theme-schema.json +0 -335
  610. package/dist/modes/interactive/theme/theme.d.ts +0 -81
  611. package/dist/modes/interactive/theme/theme.d.ts.map +0 -1
  612. package/dist/modes/interactive/theme/theme.js +0 -975
  613. package/dist/modes/interactive/theme/theme.js.map +0 -1
  614. package/dist/modes/interactive/theme/tokyo-night.json +0 -81
  615. package/dist/modes/print-mode.d.ts +0 -28
  616. package/dist/modes/print-mode.d.ts.map +0 -1
  617. package/dist/modes/print-mode.js +0 -131
  618. package/dist/modes/print-mode.js.map +0 -1
  619. package/dist/modes/rpc/jsonl.d.ts +0 -17
  620. package/dist/modes/rpc/jsonl.d.ts.map +0 -1
  621. package/dist/modes/rpc/jsonl.js +0 -49
  622. package/dist/modes/rpc/jsonl.js.map +0 -1
  623. package/dist/modes/rpc/rpc-client.d.ts +0 -224
  624. package/dist/modes/rpc/rpc-client.d.ts.map +0 -1
  625. package/dist/modes/rpc/rpc-client.js +0 -410
  626. package/dist/modes/rpc/rpc-client.js.map +0 -1
  627. package/dist/modes/rpc/rpc-mode.d.ts +0 -20
  628. package/dist/modes/rpc/rpc-mode.d.ts.map +0 -1
  629. package/dist/modes/rpc/rpc-mode.js +0 -597
  630. package/dist/modes/rpc/rpc-mode.js.map +0 -1
  631. package/dist/modes/rpc/rpc-types.d.ts +0 -419
  632. package/dist/modes/rpc/rpc-types.d.ts.map +0 -1
  633. package/dist/modes/rpc/rpc-types.js +0 -8
  634. package/dist/modes/rpc/rpc-types.js.map +0 -1
  635. package/dist/package-manager-cli.d.ts +0 -4
  636. package/dist/package-manager-cli.d.ts.map +0 -1
  637. package/dist/package-manager-cli.js +0 -468
  638. package/dist/package-manager-cli.js.map +0 -1
  639. package/dist/utils/aery-user-agent.d.ts +0 -2
  640. package/dist/utils/aery-user-agent.d.ts.map +0 -1
  641. package/dist/utils/aery-user-agent.js +0 -5
  642. package/dist/utils/aery-user-agent.js.map +0 -1
  643. package/dist/utils/changelog.d.ts +0 -21
  644. package/dist/utils/changelog.d.ts.map +0 -1
  645. package/dist/utils/changelog.js +0 -87
  646. package/dist/utils/changelog.js.map +0 -1
  647. package/dist/utils/child-process.d.ts +0 -11
  648. package/dist/utils/child-process.d.ts.map +0 -1
  649. package/dist/utils/child-process.js +0 -78
  650. package/dist/utils/child-process.js.map +0 -1
  651. package/dist/utils/clipboard-image.d.ts +0 -11
  652. package/dist/utils/clipboard-image.d.ts.map +0 -1
  653. package/dist/utils/clipboard-image.js +0 -245
  654. package/dist/utils/clipboard-image.js.map +0 -1
  655. package/dist/utils/clipboard-native.d.ts +0 -8
  656. package/dist/utils/clipboard-native.d.ts.map +0 -1
  657. package/dist/utils/clipboard-native.js +0 -14
  658. package/dist/utils/clipboard-native.js.map +0 -1
  659. package/dist/utils/clipboard.d.ts +0 -2
  660. package/dist/utils/clipboard.d.ts.map +0 -1
  661. package/dist/utils/clipboard.js +0 -110
  662. package/dist/utils/clipboard.js.map +0 -1
  663. package/dist/utils/exif-orientation.d.ts +0 -5
  664. package/dist/utils/exif-orientation.d.ts.map +0 -1
  665. package/dist/utils/exif-orientation.js +0 -158
  666. package/dist/utils/exif-orientation.js.map +0 -1
  667. package/dist/utils/frontmatter.d.ts +0 -8
  668. package/dist/utils/frontmatter.d.ts.map +0 -1
  669. package/dist/utils/frontmatter.js +0 -26
  670. package/dist/utils/frontmatter.js.map +0 -1
  671. package/dist/utils/fs-watch.d.ts +0 -5
  672. package/dist/utils/fs-watch.d.ts.map +0 -1
  673. package/dist/utils/fs-watch.js +0 -25
  674. package/dist/utils/fs-watch.js.map +0 -1
  675. package/dist/utils/git.d.ts +0 -26
  676. package/dist/utils/git.d.ts.map +0 -1
  677. package/dist/utils/git.js +0 -163
  678. package/dist/utils/git.js.map +0 -1
  679. package/dist/utils/image-convert.d.ts +0 -9
  680. package/dist/utils/image-convert.d.ts.map +0 -1
  681. package/dist/utils/image-convert.js +0 -39
  682. package/dist/utils/image-convert.js.map +0 -1
  683. package/dist/utils/image-resize.d.ts +0 -36
  684. package/dist/utils/image-resize.d.ts.map +0 -1
  685. package/dist/utils/image-resize.js +0 -137
  686. package/dist/utils/image-resize.js.map +0 -1
  687. package/dist/utils/mime.d.ts +0 -2
  688. package/dist/utils/mime.d.ts.map +0 -1
  689. package/dist/utils/mime.js +0 -26
  690. package/dist/utils/mime.js.map +0 -1
  691. package/dist/utils/paths.d.ts +0 -14
  692. package/dist/utils/paths.d.ts.map +0 -1
  693. package/dist/utils/paths.js +0 -34
  694. package/dist/utils/paths.js.map +0 -1
  695. package/dist/utils/photon.d.ts +0 -21
  696. package/dist/utils/photon.d.ts.map +0 -1
  697. package/dist/utils/photon.js +0 -121
  698. package/dist/utils/photon.js.map +0 -1
  699. package/dist/utils/shell.d.ts +0 -30
  700. package/dist/utils/shell.d.ts.map +0 -1
  701. package/dist/utils/shell.js +0 -190
  702. package/dist/utils/shell.js.map +0 -1
  703. package/dist/utils/sleep.d.ts +0 -5
  704. package/dist/utils/sleep.d.ts.map +0 -1
  705. package/dist/utils/sleep.js +0 -17
  706. package/dist/utils/sleep.js.map +0 -1
  707. package/dist/utils/tools-manager.d.ts +0 -3
  708. package/dist/utils/tools-manager.d.ts.map +0 -1
  709. package/dist/utils/tools-manager.js +0 -256
  710. package/dist/utils/tools-manager.js.map +0 -1
  711. package/dist/utils/version-check.d.ts +0 -7
  712. package/dist/utils/version-check.d.ts.map +0 -1
  713. package/dist/utils/version-check.js +0 -70
  714. package/dist/utils/version-check.js.map +0 -1
@@ -1,861 +0,0 @@
1
- import { spawnSync } from "node:child_process";
2
- import { existsSync } from "node:fs";
3
- import { unlink } from "node:fs/promises";
4
- import * as os from "node:os";
5
- import { Container, getKeybindings, Input, Spacer, Text, truncateToWidth, visibleWidth, } from "@eminent337/aery-tui";
6
- import { KeybindingsManager } from "../../../core/keybindings.js";
7
- import { canonicalizePath as _canonicalizePath } from "../../../utils/paths.js";
8
- import { theme } from "../theme/theme.js";
9
- import { DynamicBorder } from "./dynamic-border.js";
10
- import { keyHint, keyText } from "./keybinding-hints.js";
11
- import { filterAndSortSessions, hasSessionName } from "./session-selector-search.js";
12
- function shortenPath(path) {
13
- const home = os.homedir();
14
- if (!path)
15
- return path;
16
- if (path.startsWith(home)) {
17
- return `~${path.slice(home.length)}`;
18
- }
19
- return path;
20
- }
21
- function formatSessionDate(date) {
22
- const now = new Date();
23
- const diffMs = now.getTime() - date.getTime();
24
- const diffMins = Math.floor(diffMs / 60000);
25
- const diffHours = Math.floor(diffMs / 3600000);
26
- const diffDays = Math.floor(diffMs / 86400000);
27
- if (diffMins < 1)
28
- return "now";
29
- if (diffMins < 60)
30
- return `${diffMins}m`;
31
- if (diffHours < 24)
32
- return `${diffHours}h`;
33
- if (diffDays < 7)
34
- return `${diffDays}d`;
35
- if (diffDays < 30)
36
- return `${Math.floor(diffDays / 7)}w`;
37
- if (diffDays < 365)
38
- return `${Math.floor(diffDays / 30)}mo`;
39
- return `${Math.floor(diffDays / 365)}y`;
40
- }
41
- function canonicalizePath(path) {
42
- if (!path)
43
- return path;
44
- return _canonicalizePath(path);
45
- }
46
- class SessionSelectorHeader {
47
- scope;
48
- sortMode;
49
- nameFilter;
50
- requestRender;
51
- loading = false;
52
- loadProgress = null;
53
- showPath = false;
54
- confirmingDeletePath = null;
55
- statusMessage = null;
56
- statusTimeout = null;
57
- showRenameHint = false;
58
- constructor(scope, sortMode, nameFilter, requestRender) {
59
- this.scope = scope;
60
- this.sortMode = sortMode;
61
- this.nameFilter = nameFilter;
62
- this.requestRender = requestRender;
63
- }
64
- setScope(scope) {
65
- this.scope = scope;
66
- }
67
- setSortMode(sortMode) {
68
- this.sortMode = sortMode;
69
- }
70
- setNameFilter(nameFilter) {
71
- this.nameFilter = nameFilter;
72
- }
73
- setLoading(loading) {
74
- this.loading = loading;
75
- // Progress is scoped to the current load; clear whenever the loading state is set
76
- this.loadProgress = null;
77
- }
78
- setProgress(loaded, total) {
79
- this.loadProgress = { loaded, total };
80
- }
81
- setShowPath(showPath) {
82
- this.showPath = showPath;
83
- }
84
- setShowRenameHint(show) {
85
- this.showRenameHint = show;
86
- }
87
- setConfirmingDeletePath(path) {
88
- this.confirmingDeletePath = path;
89
- }
90
- clearStatusTimeout() {
91
- if (!this.statusTimeout)
92
- return;
93
- clearTimeout(this.statusTimeout);
94
- this.statusTimeout = null;
95
- }
96
- setStatusMessage(msg, autoHideMs) {
97
- this.clearStatusTimeout();
98
- this.statusMessage = msg;
99
- if (!msg || !autoHideMs)
100
- return;
101
- this.statusTimeout = setTimeout(() => {
102
- this.statusMessage = null;
103
- this.statusTimeout = null;
104
- this.requestRender();
105
- }, autoHideMs);
106
- }
107
- invalidate() { }
108
- render(width) {
109
- const title = this.scope === "current" ? "Resume Session (Current Folder)" : "Resume Session (All)";
110
- const leftText = theme.bold(title);
111
- const sortLabel = this.sortMode === "threaded" ? "Threaded" : this.sortMode === "recent" ? "Recent" : "Fuzzy";
112
- const sortText = theme.fg("muted", "Sort: ") + theme.fg("accent", sortLabel);
113
- const nameLabel = this.nameFilter === "all" ? "All" : "Named";
114
- const nameText = theme.fg("muted", "Name: ") + theme.fg("accent", nameLabel);
115
- let scopeText;
116
- if (this.loading) {
117
- const progressText = this.loadProgress ? `${this.loadProgress.loaded}/${this.loadProgress.total}` : "...";
118
- scopeText = `${theme.fg("muted", "○ Current Folder | ")}${theme.fg("accent", `Loading ${progressText}`)}`;
119
- }
120
- else if (this.scope === "current") {
121
- scopeText = `${theme.fg("accent", "◉ Current Folder")}${theme.fg("muted", " | ○ All")}`;
122
- }
123
- else {
124
- scopeText = `${theme.fg("muted", "○ Current Folder | ")}${theme.fg("accent", "◉ All")}`;
125
- }
126
- const rightText = truncateToWidth(`${scopeText} ${nameText} ${sortText}`, width, "");
127
- const availableLeft = Math.max(0, width - visibleWidth(rightText) - 1);
128
- const left = truncateToWidth(leftText, availableLeft, "");
129
- const spacing = Math.max(0, width - visibleWidth(left) - visibleWidth(rightText));
130
- // Build hint lines - changes based on state (all branches truncate to width)
131
- let hintLine1;
132
- let hintLine2;
133
- if (this.confirmingDeletePath !== null) {
134
- const confirmHint = `Delete session? ${keyHint("tui.select.confirm", "confirm")} · ${keyHint("tui.select.cancel", "cancel")}`;
135
- hintLine1 = theme.fg("error", truncateToWidth(confirmHint, width, "…"));
136
- hintLine2 = "";
137
- }
138
- else if (this.statusMessage) {
139
- const color = this.statusMessage.type === "error" ? "error" : "accent";
140
- hintLine1 = theme.fg(color, truncateToWidth(this.statusMessage.message, width, "…"));
141
- hintLine2 = "";
142
- }
143
- else {
144
- const pathState = this.showPath ? "(on)" : "(off)";
145
- const sep = theme.fg("muted", " · ");
146
- const hint1 = keyHint("tui.input.tab", "scope") + sep + theme.fg("muted", 're:<pattern> regex · "phrase" exact');
147
- const hint2Parts = [
148
- keyHint("app.session.toggleSort", "sort"),
149
- keyHint("app.session.toggleNamedFilter", "named"),
150
- keyHint("app.session.delete", "delete"),
151
- keyHint("app.session.togglePath", `path ${pathState}`),
152
- ];
153
- if (this.showRenameHint) {
154
- hint2Parts.push(keyHint("app.session.rename", "rename"));
155
- }
156
- const hint2 = hint2Parts.join(sep);
157
- hintLine1 = truncateToWidth(hint1, width, "…");
158
- hintLine2 = truncateToWidth(hint2, width, "…");
159
- }
160
- return [`${left}${" ".repeat(spacing)}${rightText}`, hintLine1, hintLine2];
161
- }
162
- }
163
- /**
164
- * Build a tree structure from sessions based on parentSessionPath.
165
- * Returns root nodes sorted by modified date (descending).
166
- */
167
- function buildSessionTree(sessions) {
168
- const byPath = new Map();
169
- for (const session of sessions) {
170
- const sessionPath = canonicalizePath(session.path) ?? session.path;
171
- byPath.set(sessionPath, { session, children: [] });
172
- }
173
- const roots = [];
174
- for (const session of sessions) {
175
- const sessionPath = canonicalizePath(session.path) ?? session.path;
176
- const node = byPath.get(sessionPath);
177
- const parentPath = canonicalizePath(session.parentSessionPath);
178
- if (parentPath && byPath.has(parentPath)) {
179
- byPath.get(parentPath).children.push(node);
180
- }
181
- else {
182
- roots.push(node);
183
- }
184
- }
185
- // Sort children and roots by modified date (descending)
186
- const sortNodes = (nodes) => {
187
- nodes.sort((a, b) => b.session.modified.getTime() - a.session.modified.getTime());
188
- for (const node of nodes) {
189
- sortNodes(node.children);
190
- }
191
- };
192
- sortNodes(roots);
193
- return roots;
194
- }
195
- /**
196
- * Flatten tree into display list with tree structure metadata.
197
- */
198
- function flattenSessionTree(roots) {
199
- const result = [];
200
- const walk = (node, depth, ancestorContinues, isLast) => {
201
- result.push({ session: node.session, depth, isLast, ancestorContinues });
202
- for (let i = 0; i < node.children.length; i++) {
203
- const childIsLast = i === node.children.length - 1;
204
- // Only show continuation line for non-root ancestors
205
- const continues = depth > 0 ? !isLast : false;
206
- walk(node.children[i], depth + 1, [...ancestorContinues, continues], childIsLast);
207
- }
208
- };
209
- for (let i = 0; i < roots.length; i++) {
210
- walk(roots[i], 0, [], i === roots.length - 1);
211
- }
212
- return result;
213
- }
214
- /**
215
- * Custom session list component with multi-line items and search
216
- */
217
- class SessionList {
218
- getSelectedSessionPath() {
219
- const selected = this.filteredSessions[this.selectedIndex];
220
- return selected?.session.path;
221
- }
222
- allSessions = [];
223
- filteredSessions = [];
224
- selectedIndex = 0;
225
- searchInput;
226
- showCwd = false;
227
- sortMode = "threaded";
228
- nameFilter = "all";
229
- keybindings;
230
- showPath = false;
231
- confirmingDeletePath = null;
232
- currentSessionCanonicalPath;
233
- onSelect;
234
- onCancel;
235
- onExit = () => { };
236
- onToggleScope;
237
- onToggleSort;
238
- onToggleNameFilter;
239
- onTogglePath;
240
- onDeleteConfirmationChange;
241
- onDeleteSession;
242
- onRenameSession;
243
- onError;
244
- maxVisible = 10; // Max sessions visible (one line each)
245
- // Focusable implementation - propagate to searchInput for IME cursor positioning
246
- _focused = false;
247
- get focused() {
248
- return this._focused;
249
- }
250
- set focused(value) {
251
- this._focused = value;
252
- this.searchInput.focused = value;
253
- }
254
- constructor(sessions, showCwd, sortMode, nameFilter, keybindings, currentSessionFilePath) {
255
- this.allSessions = sessions;
256
- this.filteredSessions = [];
257
- this.searchInput = new Input();
258
- this.showCwd = showCwd;
259
- this.sortMode = sortMode;
260
- this.nameFilter = nameFilter;
261
- this.keybindings = keybindings;
262
- this.currentSessionCanonicalPath = canonicalizePath(currentSessionFilePath);
263
- this.filterSessions("");
264
- // Handle Enter in search input - select current item
265
- this.searchInput.onSubmit = () => {
266
- if (this.filteredSessions[this.selectedIndex]) {
267
- const selected = this.filteredSessions[this.selectedIndex];
268
- if (this.onSelect) {
269
- this.onSelect(selected.session.path);
270
- }
271
- }
272
- };
273
- }
274
- setSortMode(sortMode) {
275
- this.sortMode = sortMode;
276
- this.filterSessions(this.searchInput.getValue());
277
- }
278
- setNameFilter(nameFilter) {
279
- this.nameFilter = nameFilter;
280
- this.filterSessions(this.searchInput.getValue());
281
- }
282
- setSessions(sessions, showCwd) {
283
- this.allSessions = sessions;
284
- this.showCwd = showCwd;
285
- this.filterSessions(this.searchInput.getValue());
286
- }
287
- filterSessions(query) {
288
- const trimmed = query.trim();
289
- const nameFiltered = this.nameFilter === "all" ? this.allSessions : this.allSessions.filter((session) => hasSessionName(session));
290
- if (this.sortMode === "threaded" && !trimmed) {
291
- // Threaded mode without search: show tree structure
292
- const roots = buildSessionTree(nameFiltered);
293
- this.filteredSessions = flattenSessionTree(roots);
294
- }
295
- else {
296
- // Other modes or with search: flat list
297
- const filtered = filterAndSortSessions(nameFiltered, query, this.sortMode, "all");
298
- this.filteredSessions = filtered.map((session) => ({
299
- session,
300
- depth: 0,
301
- isLast: true,
302
- ancestorContinues: [],
303
- }));
304
- }
305
- this.selectedIndex = Math.min(this.selectedIndex, Math.max(0, this.filteredSessions.length - 1));
306
- }
307
- setConfirmingDeletePath(path) {
308
- this.confirmingDeletePath = path;
309
- this.onDeleteConfirmationChange?.(path);
310
- }
311
- startDeleteConfirmationForSelectedSession() {
312
- const selected = this.filteredSessions[this.selectedIndex];
313
- if (!selected)
314
- return;
315
- // Prevent deleting current session
316
- if (this.isCurrentSessionPath(selected.session.path)) {
317
- this.onError?.("Cannot delete the currently active session");
318
- return;
319
- }
320
- this.setConfirmingDeletePath(selected.session.path);
321
- }
322
- isCurrentSessionPath(path) {
323
- if (!this.currentSessionCanonicalPath)
324
- return false;
325
- return (canonicalizePath(path) ?? path) === this.currentSessionCanonicalPath;
326
- }
327
- invalidate() { }
328
- render(width) {
329
- const lines = [];
330
- // Render search input
331
- lines.push(...this.searchInput.render(width));
332
- lines.push(""); // Blank line after search
333
- if (this.filteredSessions.length === 0) {
334
- let emptyMessage;
335
- if (this.nameFilter === "named") {
336
- const toggleKey = keyText("app.session.toggleNamedFilter");
337
- if (this.showCwd) {
338
- emptyMessage = ` No named sessions found. Press ${toggleKey} to show all.`;
339
- }
340
- else {
341
- emptyMessage = ` No named sessions in current folder. Press ${toggleKey} to show all, or Tab to view all.`;
342
- }
343
- }
344
- else if (this.showCwd) {
345
- // "All" scope - no sessions anywhere that match filter
346
- emptyMessage = " No sessions found";
347
- }
348
- else {
349
- // "Current folder" scope - hint to try "all"
350
- emptyMessage = " No sessions in current folder. Press Tab to view all.";
351
- }
352
- lines.push(theme.fg("muted", truncateToWidth(emptyMessage, width, "…")));
353
- return lines;
354
- }
355
- // Calculate visible range with scrolling
356
- const startIndex = Math.max(0, Math.min(this.selectedIndex - Math.floor(this.maxVisible / 2), this.filteredSessions.length - this.maxVisible));
357
- const endIndex = Math.min(startIndex + this.maxVisible, this.filteredSessions.length);
358
- // Render visible sessions (one line each with tree structure)
359
- for (let i = startIndex; i < endIndex; i++) {
360
- const node = this.filteredSessions[i];
361
- const session = node.session;
362
- const isSelected = i === this.selectedIndex;
363
- const isConfirmingDelete = session.path === this.confirmingDeletePath;
364
- const isCurrent = this.isCurrentSessionPath(session.path);
365
- // Build tree prefix
366
- const prefix = this.buildTreePrefix(node);
367
- // Session display text (name or first message)
368
- const hasName = !!session.name;
369
- const displayText = session.name ?? session.firstMessage;
370
- const normalizedMessage = displayText.replace(/[\x00-\x1f\x7f]/g, " ").trim();
371
- // Right side: message count and age
372
- const age = formatSessionDate(session.modified);
373
- const msgCount = String(session.messageCount);
374
- let rightPart = `${msgCount} ${age}`;
375
- if (this.showCwd && session.cwd) {
376
- rightPart = `${shortenPath(session.cwd)} ${rightPart}`;
377
- }
378
- if (this.showPath) {
379
- rightPart = `${shortenPath(session.path)} ${rightPart}`;
380
- }
381
- // Cursor
382
- const cursor = isSelected ? theme.fg("accent", "› ") : " ";
383
- // Calculate available width for message
384
- const prefixWidth = visibleWidth(prefix);
385
- const rightWidth = visibleWidth(rightPart) + 2; // +2 for spacing
386
- const availableForMsg = width - 2 - prefixWidth - rightWidth; // -2 for cursor
387
- const truncatedMsg = truncateToWidth(normalizedMessage, Math.max(10, availableForMsg), "…");
388
- // Style message
389
- let messageColor = null;
390
- if (isConfirmingDelete) {
391
- messageColor = "error";
392
- }
393
- else if (isCurrent) {
394
- messageColor = "accent";
395
- }
396
- else if (hasName) {
397
- messageColor = "warning";
398
- }
399
- let styledMsg = messageColor ? theme.fg(messageColor, truncatedMsg) : truncatedMsg;
400
- if (isSelected) {
401
- styledMsg = theme.bold(styledMsg);
402
- }
403
- // Build line
404
- const leftPart = cursor + theme.fg("dim", prefix) + styledMsg;
405
- const leftWidth = visibleWidth(leftPart);
406
- const spacing = Math.max(1, width - leftWidth - visibleWidth(rightPart));
407
- const styledRight = theme.fg(isConfirmingDelete ? "error" : "dim", rightPart);
408
- let line = leftPart + " ".repeat(spacing) + styledRight;
409
- if (isSelected) {
410
- line = theme.bg("selectedBg", line);
411
- }
412
- lines.push(truncateToWidth(line, width));
413
- }
414
- // Add scroll indicator if needed
415
- if (startIndex > 0 || endIndex < this.filteredSessions.length) {
416
- const scrollText = ` (${this.selectedIndex + 1}/${this.filteredSessions.length})`;
417
- const scrollInfo = theme.fg("muted", truncateToWidth(scrollText, width, ""));
418
- lines.push(scrollInfo);
419
- }
420
- return lines;
421
- }
422
- buildTreePrefix(node) {
423
- if (node.depth === 0) {
424
- return "";
425
- }
426
- const parts = node.ancestorContinues.map((continues) => (continues ? "│ " : " "));
427
- const branch = node.isLast ? "└─ " : "├─ ";
428
- return parts.join("") + branch;
429
- }
430
- handleInput(keyData) {
431
- const kb = getKeybindings();
432
- // Handle delete confirmation state first - intercept all keys
433
- if (this.confirmingDeletePath !== null) {
434
- if (kb.matches(keyData, "tui.select.confirm")) {
435
- const pathToDelete = this.confirmingDeletePath;
436
- this.setConfirmingDeletePath(null);
437
- void this.onDeleteSession?.(pathToDelete);
438
- return;
439
- }
440
- if (kb.matches(keyData, "tui.select.cancel")) {
441
- this.setConfirmingDeletePath(null);
442
- return;
443
- }
444
- // Ignore all other keys while confirming
445
- return;
446
- }
447
- if (kb.matches(keyData, "tui.input.tab")) {
448
- if (this.onToggleScope) {
449
- this.onToggleScope();
450
- }
451
- return;
452
- }
453
- if (kb.matches(keyData, "app.session.toggleSort")) {
454
- this.onToggleSort?.();
455
- return;
456
- }
457
- if (this.keybindings.matches(keyData, "app.session.toggleNamedFilter")) {
458
- this.onToggleNameFilter?.();
459
- return;
460
- }
461
- // Ctrl+P: toggle path display
462
- if (kb.matches(keyData, "app.session.togglePath")) {
463
- this.showPath = !this.showPath;
464
- this.onTogglePath?.(this.showPath);
465
- return;
466
- }
467
- // Ctrl+D: initiate delete confirmation (useful on terminals that don't distinguish Ctrl+Backspace from Backspace)
468
- if (kb.matches(keyData, "app.session.delete")) {
469
- this.startDeleteConfirmationForSelectedSession();
470
- return;
471
- }
472
- // Rename selected session
473
- if (kb.matches(keyData, "app.session.rename")) {
474
- const selected = this.filteredSessions[this.selectedIndex];
475
- if (selected) {
476
- this.onRenameSession?.(selected.session.path);
477
- }
478
- return;
479
- }
480
- // Ctrl+Backspace: non-invasive convenience alias for delete
481
- // Only triggers deletion when the query is empty; otherwise it is forwarded to the input
482
- if (kb.matches(keyData, "app.session.deleteNoninvasive")) {
483
- if (this.searchInput.getValue().length > 0) {
484
- this.searchInput.handleInput(keyData);
485
- this.filterSessions(this.searchInput.getValue());
486
- return;
487
- }
488
- this.startDeleteConfirmationForSelectedSession();
489
- return;
490
- }
491
- // Up arrow
492
- if (kb.matches(keyData, "tui.select.up")) {
493
- this.selectedIndex = Math.max(0, this.selectedIndex - 1);
494
- }
495
- // Down arrow
496
- else if (kb.matches(keyData, "tui.select.down")) {
497
- this.selectedIndex = Math.min(this.filteredSessions.length - 1, this.selectedIndex + 1);
498
- }
499
- // Page up - jump up by maxVisible items
500
- else if (kb.matches(keyData, "tui.select.pageUp")) {
501
- this.selectedIndex = Math.max(0, this.selectedIndex - this.maxVisible);
502
- }
503
- // Page down - jump down by maxVisible items
504
- else if (kb.matches(keyData, "tui.select.pageDown")) {
505
- this.selectedIndex = Math.min(this.filteredSessions.length - 1, this.selectedIndex + this.maxVisible);
506
- }
507
- // Enter
508
- else if (kb.matches(keyData, "tui.select.confirm")) {
509
- const selected = this.filteredSessions[this.selectedIndex];
510
- if (selected && this.onSelect) {
511
- this.onSelect(selected.session.path);
512
- }
513
- }
514
- // Escape - cancel
515
- else if (kb.matches(keyData, "tui.select.cancel")) {
516
- if (this.onCancel) {
517
- this.onCancel();
518
- }
519
- }
520
- // Pass everything else to search input
521
- else {
522
- this.searchInput.handleInput(keyData);
523
- this.filterSessions(this.searchInput.getValue());
524
- }
525
- }
526
- }
527
- /**
528
- * Delete a session file, trying the `trash` CLI first, then falling back to unlink
529
- */
530
- async function deleteSessionFile(sessionPath) {
531
- // Try `trash` first (if installed)
532
- const trashArgs = sessionPath.startsWith("-") ? ["--", sessionPath] : [sessionPath];
533
- const trashResult = spawnSync("trash", trashArgs, { encoding: "utf-8" });
534
- const getTrashErrorHint = () => {
535
- const parts = [];
536
- if (trashResult.error) {
537
- parts.push(trashResult.error.message);
538
- }
539
- const stderr = trashResult.stderr?.trim();
540
- if (stderr) {
541
- parts.push(stderr.split("\n")[0] ?? stderr);
542
- }
543
- if (parts.length === 0)
544
- return null;
545
- return `trash: ${parts.join(" · ").slice(0, 200)}`;
546
- };
547
- // If trash reports success, or the file is gone afterwards, treat it as successful
548
- if (trashResult.status === 0 || !existsSync(sessionPath)) {
549
- return { ok: true, method: "trash" };
550
- }
551
- // Fallback to permanent deletion
552
- try {
553
- await unlink(sessionPath);
554
- return { ok: true, method: "unlink" };
555
- }
556
- catch (err) {
557
- const unlinkError = err instanceof Error ? err.message : String(err);
558
- const trashErrorHint = getTrashErrorHint();
559
- const error = trashErrorHint ? `${unlinkError} (${trashErrorHint})` : unlinkError;
560
- return { ok: false, method: "unlink", error };
561
- }
562
- }
563
- /**
564
- * Component that renders a session selector
565
- */
566
- export class SessionSelectorComponent extends Container {
567
- handleInput(data) {
568
- if (this.mode === "rename") {
569
- const kb = getKeybindings();
570
- if (kb.matches(data, "tui.select.cancel")) {
571
- this.exitRenameMode();
572
- return;
573
- }
574
- this.renameInput.handleInput(data);
575
- return;
576
- }
577
- this.sessionList.handleInput(data);
578
- }
579
- canRename = true;
580
- sessionList;
581
- header;
582
- keybindings;
583
- scope = "current";
584
- sortMode = "threaded";
585
- nameFilter = "all";
586
- currentSessions = null;
587
- allSessions = null;
588
- currentSessionsLoader;
589
- allSessionsLoader;
590
- onCancel;
591
- requestRender;
592
- renameSession;
593
- currentLoading = false;
594
- allLoading = false;
595
- allLoadSeq = 0;
596
- mode = "list";
597
- renameInput = new Input();
598
- renameTargetPath = null;
599
- // Focusable implementation - propagate to sessionList for IME cursor positioning
600
- _focused = false;
601
- get focused() {
602
- return this._focused;
603
- }
604
- set focused(value) {
605
- this._focused = value;
606
- this.sessionList.focused = value;
607
- this.renameInput.focused = value;
608
- if (value && this.mode === "rename") {
609
- this.renameInput.focused = true;
610
- }
611
- }
612
- buildBaseLayout(content, options) {
613
- this.clear();
614
- this.addChild(new Spacer(1));
615
- this.addChild(new DynamicBorder((s) => theme.fg("accent", s)));
616
- this.addChild(new Spacer(1));
617
- if (options?.showHeader ?? true) {
618
- this.addChild(this.header);
619
- this.addChild(new Spacer(1));
620
- }
621
- this.addChild(content);
622
- this.addChild(new Spacer(1));
623
- this.addChild(new DynamicBorder((s) => theme.fg("accent", s)));
624
- }
625
- constructor(currentSessionsLoader, allSessionsLoader, onSelect, onCancel, onExit, requestRender, options, currentSessionFilePath) {
626
- super();
627
- this.keybindings = options?.keybindings ?? KeybindingsManager.create();
628
- this.currentSessionsLoader = currentSessionsLoader;
629
- this.allSessionsLoader = allSessionsLoader;
630
- this.onCancel = onCancel;
631
- this.requestRender = requestRender;
632
- this.header = new SessionSelectorHeader(this.scope, this.sortMode, this.nameFilter, this.requestRender);
633
- const renameSession = options?.renameSession;
634
- this.renameSession = renameSession;
635
- this.canRename = !!renameSession;
636
- this.header.setShowRenameHint(options?.showRenameHint ?? this.canRename);
637
- // Create session list (starts empty, will be populated after load)
638
- this.sessionList = new SessionList([], false, this.sortMode, this.nameFilter, this.keybindings, currentSessionFilePath);
639
- this.buildBaseLayout(this.sessionList);
640
- this.renameInput.onSubmit = (value) => {
641
- void this.confirmRename(value);
642
- };
643
- // Ensure header status timeouts are cleared when leaving the selector
644
- const clearStatusMessage = () => this.header.setStatusMessage(null);
645
- this.sessionList.onSelect = (sessionPath) => {
646
- clearStatusMessage();
647
- onSelect(sessionPath);
648
- };
649
- this.sessionList.onCancel = () => {
650
- clearStatusMessage();
651
- onCancel();
652
- };
653
- this.sessionList.onExit = () => {
654
- clearStatusMessage();
655
- onExit();
656
- };
657
- this.sessionList.onToggleScope = () => this.toggleScope();
658
- this.sessionList.onToggleSort = () => this.toggleSortMode();
659
- this.sessionList.onToggleNameFilter = () => this.toggleNameFilter();
660
- this.sessionList.onRenameSession = (sessionPath) => {
661
- if (!renameSession)
662
- return;
663
- if (this.scope === "current" && this.currentLoading)
664
- return;
665
- if (this.scope === "all" && this.allLoading)
666
- return;
667
- const sessions = this.scope === "all" ? (this.allSessions ?? []) : (this.currentSessions ?? []);
668
- const session = sessions.find((s) => s.path === sessionPath);
669
- this.enterRenameMode(sessionPath, session?.name);
670
- };
671
- // Sync list events to header
672
- this.sessionList.onTogglePath = (showPath) => {
673
- this.header.setShowPath(showPath);
674
- this.requestRender();
675
- };
676
- this.sessionList.onDeleteConfirmationChange = (path) => {
677
- this.header.setConfirmingDeletePath(path);
678
- this.requestRender();
679
- };
680
- this.sessionList.onError = (msg) => {
681
- this.header.setStatusMessage({ type: "error", message: msg }, 3000);
682
- this.requestRender();
683
- };
684
- // Handle session deletion
685
- this.sessionList.onDeleteSession = async (sessionPath) => {
686
- const result = await deleteSessionFile(sessionPath);
687
- if (result.ok) {
688
- if (this.currentSessions) {
689
- this.currentSessions = this.currentSessions.filter((s) => s.path !== sessionPath);
690
- }
691
- if (this.allSessions) {
692
- this.allSessions = this.allSessions.filter((s) => s.path !== sessionPath);
693
- }
694
- const sessions = this.scope === "all" ? (this.allSessions ?? []) : (this.currentSessions ?? []);
695
- const showCwd = this.scope === "all";
696
- this.sessionList.setSessions(sessions, showCwd);
697
- const msg = result.method === "trash" ? "Session moved to trash" : "Session deleted";
698
- this.header.setStatusMessage({ type: "info", message: msg }, 2000);
699
- await this.refreshSessionsAfterMutation();
700
- }
701
- else {
702
- const errorMessage = result.error ?? "Unknown error";
703
- this.header.setStatusMessage({ type: "error", message: `Failed to delete: ${errorMessage}` }, 3000);
704
- }
705
- this.requestRender();
706
- };
707
- // Start loading current sessions immediately
708
- this.loadCurrentSessions();
709
- }
710
- loadCurrentSessions() {
711
- void this.loadScope("current", "initial");
712
- }
713
- enterRenameMode(sessionPath, currentName) {
714
- this.mode = "rename";
715
- this.renameTargetPath = sessionPath;
716
- this.renameInput.setValue(currentName ?? "");
717
- this.renameInput.focused = true;
718
- const panel = new Container();
719
- panel.addChild(new Text(theme.bold("Rename Session"), 1, 0));
720
- panel.addChild(new Spacer(1));
721
- panel.addChild(this.renameInput);
722
- panel.addChild(new Spacer(1));
723
- panel.addChild(new Text(theme.fg("muted", `${keyText("tui.select.confirm")} to save · ${keyText("tui.select.cancel")} to cancel`), 1, 0));
724
- this.buildBaseLayout(panel, { showHeader: false });
725
- this.requestRender();
726
- }
727
- exitRenameMode() {
728
- this.mode = "list";
729
- this.renameTargetPath = null;
730
- this.buildBaseLayout(this.sessionList);
731
- this.requestRender();
732
- }
733
- async confirmRename(value) {
734
- const next = value.trim();
735
- if (!next)
736
- return;
737
- const target = this.renameTargetPath;
738
- if (!target) {
739
- this.exitRenameMode();
740
- return;
741
- }
742
- // Find current name for callback
743
- const renameSession = this.renameSession;
744
- if (!renameSession) {
745
- this.exitRenameMode();
746
- return;
747
- }
748
- try {
749
- await renameSession(target, next);
750
- await this.refreshSessionsAfterMutation();
751
- }
752
- finally {
753
- this.exitRenameMode();
754
- }
755
- }
756
- async loadScope(scope, reason) {
757
- const showCwd = scope === "all";
758
- // Mark loading
759
- if (scope === "current") {
760
- this.currentLoading = true;
761
- }
762
- else {
763
- this.allLoading = true;
764
- }
765
- const seq = scope === "all" ? ++this.allLoadSeq : undefined;
766
- this.header.setScope(scope);
767
- this.header.setLoading(true);
768
- this.requestRender();
769
- const onProgress = (loaded, total) => {
770
- if (scope !== this.scope)
771
- return;
772
- if (seq !== undefined && seq !== this.allLoadSeq)
773
- return;
774
- this.header.setProgress(loaded, total);
775
- this.requestRender();
776
- };
777
- try {
778
- const sessions = await (scope === "current"
779
- ? this.currentSessionsLoader(onProgress)
780
- : this.allSessionsLoader(onProgress));
781
- if (scope === "current") {
782
- this.currentSessions = sessions;
783
- this.currentLoading = false;
784
- }
785
- else {
786
- this.allSessions = sessions;
787
- this.allLoading = false;
788
- }
789
- if (scope !== this.scope)
790
- return;
791
- if (seq !== undefined && seq !== this.allLoadSeq)
792
- return;
793
- this.header.setLoading(false);
794
- this.sessionList.setSessions(sessions, showCwd);
795
- this.requestRender();
796
- if (scope === "all" && sessions.length === 0 && (this.currentSessions?.length ?? 0) === 0) {
797
- this.onCancel();
798
- }
799
- }
800
- catch (err) {
801
- if (scope === "current") {
802
- this.currentLoading = false;
803
- }
804
- else {
805
- this.allLoading = false;
806
- }
807
- if (scope !== this.scope)
808
- return;
809
- if (seq !== undefined && seq !== this.allLoadSeq)
810
- return;
811
- const message = err instanceof Error ? err.message : String(err);
812
- this.header.setLoading(false);
813
- this.header.setStatusMessage({ type: "error", message: `Failed to load sessions: ${message}` }, 4000);
814
- if (reason === "initial") {
815
- this.sessionList.setSessions([], showCwd);
816
- }
817
- this.requestRender();
818
- }
819
- }
820
- toggleSortMode() {
821
- // Cycle: threaded -> recent -> relevance -> threaded
822
- this.sortMode = this.sortMode === "threaded" ? "recent" : this.sortMode === "recent" ? "relevance" : "threaded";
823
- this.header.setSortMode(this.sortMode);
824
- this.sessionList.setSortMode(this.sortMode);
825
- this.requestRender();
826
- }
827
- toggleNameFilter() {
828
- this.nameFilter = this.nameFilter === "all" ? "named" : "all";
829
- this.header.setNameFilter(this.nameFilter);
830
- this.sessionList.setNameFilter(this.nameFilter);
831
- this.requestRender();
832
- }
833
- async refreshSessionsAfterMutation() {
834
- await this.loadScope(this.scope, "refresh");
835
- }
836
- toggleScope() {
837
- if (this.scope === "current") {
838
- this.scope = "all";
839
- this.header.setScope(this.scope);
840
- if (this.allSessions !== null) {
841
- this.header.setLoading(false);
842
- this.sessionList.setSessions(this.allSessions, true);
843
- this.requestRender();
844
- return;
845
- }
846
- if (!this.allLoading) {
847
- void this.loadScope("all", "toggle");
848
- }
849
- return;
850
- }
851
- this.scope = "current";
852
- this.header.setScope(this.scope);
853
- this.header.setLoading(this.currentLoading);
854
- this.sessionList.setSessions(this.currentSessions ?? [], false);
855
- this.requestRender();
856
- }
857
- getSessionList() {
858
- return this.sessionList;
859
- }
860
- }
861
- //# sourceMappingURL=session-selector.js.map