@astralyn/pi 1.4.10 → 1.5.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 (595) hide show
  1. package/CHANGELOG.md +88 -0
  2. package/dist/bundle/chunks/anthropic-messages-G5ZGBHOH.js +6 -0
  3. package/dist/bundle/chunks/azure-openai-responses-EMPTMYNF.js +2 -0
  4. package/dist/bundle/chunks/bedrock-converse-stream.js +22 -15
  5. package/dist/bundle/chunks/chunk-AXX7FFFD.js +2 -0
  6. package/dist/bundle/chunks/chunk-FNGB3ASD.js +2 -0
  7. package/dist/bundle/chunks/chunk-FPALVF3F.js +4 -0
  8. package/dist/bundle/chunks/chunk-H3UF54OB.js +9 -0
  9. package/dist/bundle/chunks/chunk-IC6JXX2J.js +10 -0
  10. package/dist/bundle/chunks/{chunk-UCH27AVQ.js → chunk-IRUUTK4W.js} +1 -1
  11. package/dist/bundle/chunks/{chunk-MZJC45TM.js → chunk-J7L6O5XA.js} +3 -3
  12. package/dist/bundle/chunks/{chunk-DLVLAQEG.js → chunk-KBFO53OG.js} +3 -3
  13. package/dist/bundle/chunks/{chunk-TPVFPFJP.js → chunk-P7VXFB2M.js} +1 -1
  14. package/dist/bundle/chunks/chunk-PSYLMRL6.js +9 -0
  15. package/dist/bundle/chunks/chunk-QNZARXLE.js +82 -0
  16. package/dist/bundle/chunks/chunk-R3YHAMWH.js +1503 -0
  17. package/dist/bundle/chunks/chunk-RAIYJ5FC.js +4 -0
  18. package/dist/bundle/chunks/{chunk-OV2VMHBX.js → chunk-SR6EWNPW.js} +1 -1
  19. package/dist/bundle/chunks/chunk-TA3YH2ZI.js +16 -0
  20. package/dist/bundle/chunks/{chunk-MF3T3ETJ.js → chunk-THAJ4BZF.js} +58 -62
  21. package/dist/bundle/chunks/{chunk-24FY4C5S.js → chunk-TRSJS3FM.js} +1 -1
  22. package/dist/bundle/chunks/chunk-ZRI3ICDE.js +2 -0
  23. package/dist/bundle/chunks/{cli-MBFCFGI2.js → cli-LAZQG54B.js} +11 -9
  24. package/dist/bundle/chunks/{cloudflare-workers-ai-system-one-7BKATOEJ.js → cloudflare-workers-ai-system-one-4L2ABUJE.js} +1 -1
  25. package/dist/bundle/chunks/{execute-FQKRO4XJ.js → execute-ACWDKC3C.js} +1 -1
  26. package/dist/bundle/chunks/github-copilot.js +1 -1
  27. package/dist/bundle/chunks/{google-generative-ai-HTUSU45F.js → google-generative-ai-OOVDGS5W.js} +1 -1
  28. package/dist/bundle/chunks/{google-vertex-AVQV4P76.js → google-vertex-IK5RNG7J.js} +1 -1
  29. package/dist/bundle/chunks/image-resize-worker.js +1 -1
  30. package/dist/bundle/chunks/kimi-coding.js +1 -1
  31. package/dist/bundle/chunks/{llama-cpp-classify-27QYLJZY.js → llama-cpp-classify-XHAVT37C.js} +1 -1
  32. package/dist/bundle/chunks/meta.js +1 -1
  33. package/dist/bundle/chunks/mistral-conversations-Z56KY4OJ.js +5 -0
  34. package/dist/bundle/chunks/{openai-codex-responses-Q25MHDFX.js → openai-codex-responses-5NAH3SK6.js} +1 -1
  35. package/dist/bundle/chunks/openai-completions-S7S6PO3J.js +7 -0
  36. package/dist/bundle/chunks/{openai-decisions-3WYFPGSK.js → openai-decisions-7A36EAHE.js} +1 -1
  37. package/dist/bundle/chunks/{openai-responses-E4BNZIQK.js → openai-responses-ZQRZJKH4.js} +1 -1
  38. package/dist/bundle/chunks/{openrouter-images-CBP3OPOD.js → openrouter-images-X7PX72ON.js} +1 -1
  39. package/dist/bundle/chunks/pi-messages-TXNWPLI4.js +8 -0
  40. package/dist/bundle/chunks/radius.js +1 -1
  41. package/dist/bundle/chunks/{runtime-3RPOJS5T.js → runtime-X3XOMNXQ.js} +1 -1
  42. package/dist/bundle/chunks/{typesafe-system-one-BNICP2LS.js → typesafe-system-one-XJGMSHWL.js} +1 -1
  43. package/dist/bundle/chunks/virtual-modules-T2KLVAFL.js +2 -0
  44. package/dist/bundle/cli.js +1 -1
  45. package/dist/bundle/index.js +1 -1
  46. package/dist/bundle/rpc-entry.js +1 -1
  47. package/dist/cli/args.d.ts.map +1 -1
  48. package/dist/cli/args.js +8 -7
  49. package/dist/cli/args.js.map +1 -1
  50. package/dist/config.d.ts +10 -0
  51. package/dist/config.d.ts.map +1 -1
  52. package/dist/config.js +24 -5
  53. package/dist/config.js.map +1 -1
  54. package/dist/core/agent-session-runtime.d.ts +0 -5
  55. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  56. package/dist/core/agent-session-runtime.js +12 -28
  57. package/dist/core/agent-session-runtime.js.map +1 -1
  58. package/dist/core/agent-session.d.ts +21 -14
  59. package/dist/core/agent-session.d.ts.map +1 -1
  60. package/dist/core/agent-session.js +67 -96
  61. package/dist/core/agent-session.js.map +1 -1
  62. package/dist/core/compaction/branch-summarization.d.ts +4 -2
  63. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  64. package/dist/core/compaction/branch-summarization.js +16 -4
  65. package/dist/core/compaction/branch-summarization.js.map +1 -1
  66. package/dist/core/exec.d.ts +9 -1
  67. package/dist/core/exec.d.ts.map +1 -1
  68. package/dist/core/exec.js +104 -60
  69. package/dist/core/exec.js.map +1 -1
  70. package/dist/core/export-html/template.css +9 -0
  71. package/dist/core/export-html/template.js +165 -45
  72. package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
  73. package/dist/core/export-html/tool-renderer.js +5 -0
  74. package/dist/core/export-html/tool-renderer.js.map +1 -1
  75. package/dist/core/extensions/index.d.ts +2 -2
  76. package/dist/core/extensions/index.d.ts.map +1 -1
  77. package/dist/core/extensions/index.js.map +1 -1
  78. package/dist/core/extensions/loader.d.ts.map +1 -1
  79. package/dist/core/extensions/loader.js +20 -12
  80. package/dist/core/extensions/loader.js.map +1 -1
  81. package/dist/core/extensions/pi-ai-extension-view.d.ts +19 -0
  82. package/dist/core/extensions/pi-ai-extension-view.d.ts.map +1 -0
  83. package/dist/core/extensions/pi-ai-extension-view.js +22 -0
  84. package/dist/core/extensions/pi-ai-extension-view.js.map +1 -0
  85. package/dist/core/extensions/runner.d.ts +0 -1
  86. package/dist/core/extensions/runner.d.ts.map +1 -1
  87. package/dist/core/extensions/runner.js +7 -12
  88. package/dist/core/extensions/runner.js.map +1 -1
  89. package/dist/core/extensions/types.d.ts +41 -23
  90. package/dist/core/extensions/types.d.ts.map +1 -1
  91. package/dist/core/extensions/types.js.map +1 -1
  92. package/dist/core/extensions/virtual-modules.d.ts.map +1 -1
  93. package/dist/core/extensions/virtual-modules.js +8 -7
  94. package/dist/core/extensions/virtual-modules.js.map +1 -1
  95. package/dist/core/mcp-servers.d.ts +11 -4
  96. package/dist/core/mcp-servers.d.ts.map +1 -1
  97. package/dist/core/mcp-servers.js +15 -5
  98. package/dist/core/mcp-servers.js.map +1 -1
  99. package/dist/core/model-config.d.ts +1678 -2029
  100. package/dist/core/model-config.d.ts.map +1 -1
  101. package/dist/core/model-config.js +2 -3
  102. package/dist/core/model-config.js.map +1 -1
  103. package/dist/core/model-resolver.d.ts.map +1 -1
  104. package/dist/core/model-resolver.js +16 -10
  105. package/dist/core/model-resolver.js.map +1 -1
  106. package/dist/core/package-manager.d.ts +14 -0
  107. package/dist/core/package-manager.d.ts.map +1 -1
  108. package/dist/core/package-manager.js +160 -46
  109. package/dist/core/package-manager.js.map +1 -1
  110. package/dist/core/pi-ai-schemas.d.ts +163 -0
  111. package/dist/core/pi-ai-schemas.d.ts.map +1 -0
  112. package/dist/core/pi-ai-schemas.js +21 -0
  113. package/dist/core/pi-ai-schemas.js.map +1 -0
  114. package/dist/core/pi-manifest.d.ts +1 -0
  115. package/dist/core/pi-manifest.d.ts.map +1 -1
  116. package/dist/core/pi-manifest.js +4 -0
  117. package/dist/core/pi-manifest.js.map +1 -1
  118. package/dist/core/project-trust.js +1 -1
  119. package/dist/core/project-trust.js.map +1 -1
  120. package/dist/core/quiescence.d.ts +24 -0
  121. package/dist/core/quiescence.d.ts.map +1 -0
  122. package/dist/core/quiescence.js +81 -0
  123. package/dist/core/quiescence.js.map +1 -0
  124. package/dist/core/resource-loader.d.ts +4 -1
  125. package/dist/core/resource-loader.d.ts.map +1 -1
  126. package/dist/core/resource-loader.js +41 -28
  127. package/dist/core/resource-loader.js.map +1 -1
  128. package/dist/core/sdk.d.ts.map +1 -1
  129. package/dist/core/sdk.js +3 -1
  130. package/dist/core/sdk.js.map +1 -1
  131. package/dist/core/session-manager.d.ts +7 -0
  132. package/dist/core/session-manager.d.ts.map +1 -1
  133. package/dist/core/session-manager.js +32 -13
  134. package/dist/core/session-manager.js.map +1 -1
  135. package/dist/core/settings-manager.d.ts +2 -0
  136. package/dist/core/settings-manager.d.ts.map +1 -1
  137. package/dist/core/settings-manager.js +11 -0
  138. package/dist/core/settings-manager.js.map +1 -1
  139. package/dist/core/settings-schema.d.ts +4 -2
  140. package/dist/core/settings-schema.d.ts.map +1 -1
  141. package/dist/core/settings-schema.js +8 -1
  142. package/dist/core/settings-schema.js.map +1 -1
  143. package/dist/core/skills.d.ts.map +1 -1
  144. package/dist/core/skills.js +6 -14
  145. package/dist/core/skills.js.map +1 -1
  146. package/dist/core/slash-command-name.d.ts +6 -0
  147. package/dist/core/slash-command-name.d.ts.map +1 -0
  148. package/dist/core/slash-command-name.js +11 -0
  149. package/dist/core/slash-command-name.js.map +1 -0
  150. package/dist/core/slash-commands.js +2 -2
  151. package/dist/core/slash-commands.js.map +1 -1
  152. package/dist/core/source-info.d.ts +9 -0
  153. package/dist/core/source-info.d.ts.map +1 -1
  154. package/dist/core/source-info.js +13 -0
  155. package/dist/core/source-info.js.map +1 -1
  156. package/dist/core/system-prompt.d.ts.map +1 -1
  157. package/dist/core/system-prompt.js +5 -6
  158. package/dist/core/system-prompt.js.map +1 -1
  159. package/dist/core/tasks/codec.d.ts +14 -0
  160. package/dist/core/tasks/codec.d.ts.map +1 -1
  161. package/dist/core/tasks/codec.js +57 -4
  162. package/dist/core/tasks/codec.js.map +1 -1
  163. package/dist/core/tasks/delivery.d.ts +4 -20
  164. package/dist/core/tasks/delivery.d.ts.map +1 -1
  165. package/dist/core/tasks/delivery.js +5 -58
  166. package/dist/core/tasks/delivery.js.map +1 -1
  167. package/dist/core/tasks/limits.d.ts +3 -19
  168. package/dist/core/tasks/limits.d.ts.map +1 -1
  169. package/dist/core/tasks/limits.js +3 -24
  170. package/dist/core/tasks/limits.js.map +1 -1
  171. package/dist/core/tasks/record.d.ts +1 -7
  172. package/dist/core/tasks/record.d.ts.map +1 -1
  173. package/dist/core/tasks/record.js +0 -18
  174. package/dist/core/tasks/record.js.map +1 -1
  175. package/dist/core/tasks/reminder.d.ts +3 -2
  176. package/dist/core/tasks/reminder.d.ts.map +1 -1
  177. package/dist/core/tasks/reminder.js +4 -3
  178. package/dist/core/tasks/reminder.js.map +1 -1
  179. package/dist/core/tasks/runtime.d.ts +1 -14
  180. package/dist/core/tasks/runtime.d.ts.map +1 -1
  181. package/dist/core/tasks/runtime.js +3 -96
  182. package/dist/core/tasks/runtime.js.map +1 -1
  183. package/dist/core/tasks/session.d.ts +9 -5
  184. package/dist/core/tasks/session.d.ts.map +1 -1
  185. package/dist/core/tasks/session.js +22 -24
  186. package/dist/core/tasks/session.js.map +1 -1
  187. package/dist/core/tasks/types.d.ts +3 -92
  188. package/dist/core/tasks/types.d.ts.map +1 -1
  189. package/dist/core/tasks/types.js +3 -3
  190. package/dist/core/tasks/types.js.map +1 -1
  191. package/dist/core/tools/bash.d.ts +8 -7
  192. package/dist/core/tools/bash.d.ts.map +1 -1
  193. package/dist/core/tools/bash.js +6 -5
  194. package/dist/core/tools/bash.js.map +1 -1
  195. package/dist/core/tools/edit.d.ts +3 -3
  196. package/dist/core/tools/edit.d.ts.map +1 -1
  197. package/dist/core/tools/edit.js +2 -4
  198. package/dist/core/tools/edit.js.map +1 -1
  199. package/dist/core/tools/find.d.ts +2 -2
  200. package/dist/core/tools/find.d.ts.map +1 -1
  201. package/dist/core/tools/find.js.map +1 -1
  202. package/dist/core/tools/grep.d.ts +2 -2
  203. package/dist/core/tools/grep.d.ts.map +1 -1
  204. package/dist/core/tools/grep.js +1 -1
  205. package/dist/core/tools/grep.js.map +1 -1
  206. package/dist/core/tools/ls.d.ts +2 -2
  207. package/dist/core/tools/ls.d.ts.map +1 -1
  208. package/dist/core/tools/ls.js.map +1 -1
  209. package/dist/core/tools/powershell.d.ts +1 -5
  210. package/dist/core/tools/powershell.d.ts.map +1 -1
  211. package/dist/core/tools/read.d.ts +2 -2
  212. package/dist/core/tools/read.d.ts.map +1 -1
  213. package/dist/core/tools/read.js.map +1 -1
  214. package/dist/core/tools/render-utils.d.ts +4 -6
  215. package/dist/core/tools/render-utils.d.ts.map +1 -1
  216. package/dist/core/tools/render-utils.js +19 -41
  217. package/dist/core/tools/render-utils.js.map +1 -1
  218. package/dist/core/tools/renderers/bash.d.ts.map +1 -1
  219. package/dist/core/tools/renderers/bash.js +3 -25
  220. package/dist/core/tools/renderers/bash.js.map +1 -1
  221. package/dist/core/tools/renderers/write.d.ts.map +1 -1
  222. package/dist/core/tools/renderers/write.js +18 -19
  223. package/dist/core/tools/renderers/write.js.map +1 -1
  224. package/dist/core/tools/shell-execution.d.ts +20 -13
  225. package/dist/core/tools/shell-execution.d.ts.map +1 -1
  226. package/dist/core/tools/shell-execution.js +165 -183
  227. package/dist/core/tools/shell-execution.js.map +1 -1
  228. package/dist/core/tools/shell-tool.d.ts +9 -14
  229. package/dist/core/tools/shell-tool.d.ts.map +1 -1
  230. package/dist/core/tools/shell-tool.js +38 -66
  231. package/dist/core/tools/shell-tool.js.map +1 -1
  232. package/dist/core/tools/tool-definition-wrapper.d.ts +14 -4
  233. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  234. package/dist/core/tools/tool-definition-wrapper.js +2 -3
  235. package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
  236. package/dist/core/tools/write.d.ts +2 -2
  237. package/dist/core/tools/write.d.ts.map +1 -1
  238. package/dist/core/tools/write.js.map +1 -1
  239. package/dist/core/trust-manager.d.ts.map +1 -1
  240. package/dist/core/trust-manager.js +30 -13
  241. package/dist/core/trust-manager.js.map +1 -1
  242. package/dist/core/usage-totals.d.ts +0 -9
  243. package/dist/core/usage-totals.d.ts.map +1 -1
  244. package/dist/core/usage-totals.js +24 -91
  245. package/dist/core/usage-totals.js.map +1 -1
  246. package/dist/extensions/agent/activity-lines.d.ts +2 -3
  247. package/dist/extensions/agent/activity-lines.d.ts.map +1 -1
  248. package/dist/extensions/agent/activity-lines.js +5 -9
  249. package/dist/extensions/agent/activity-lines.js.map +1 -1
  250. package/dist/extensions/agent/activity.d.ts +0 -2
  251. package/dist/extensions/agent/activity.d.ts.map +1 -1
  252. package/dist/extensions/agent/activity.js +1 -1
  253. package/dist/extensions/agent/activity.js.map +1 -1
  254. package/dist/extensions/agent/progress.d.ts +0 -3
  255. package/dist/extensions/agent/progress.d.ts.map +1 -1
  256. package/dist/extensions/agent/progress.js +2 -8
  257. package/dist/extensions/agent/progress.js.map +1 -1
  258. package/dist/extensions/agent/render.js +1 -1
  259. package/dist/extensions/agent/render.js.map +1 -1
  260. package/dist/extensions/agent/tool.d.ts.map +1 -1
  261. package/dist/extensions/agent/tool.js +0 -6
  262. package/dist/extensions/agent/tool.js.map +1 -1
  263. package/dist/{core/isolated-session.d.ts → extensions/agent/worker-session.d.ts} +6 -6
  264. package/dist/extensions/agent/worker-session.d.ts.map +1 -0
  265. package/dist/{core/isolated-session.js → extensions/agent/worker-session.js} +9 -9
  266. package/dist/extensions/agent/worker-session.js.map +1 -0
  267. package/dist/extensions/agent/worker.d.ts +0 -3
  268. package/dist/extensions/agent/worker.d.ts.map +1 -1
  269. package/dist/extensions/agent/worker.js +2 -3
  270. package/dist/extensions/agent/worker.js.map +1 -1
  271. package/dist/extensions/btw/agent.d.ts.map +1 -1
  272. package/dist/extensions/btw/agent.js +2 -1
  273. package/dist/extensions/btw/agent.js.map +1 -1
  274. package/dist/extensions/cached-compaction/render.d.ts.map +1 -1
  275. package/dist/extensions/cached-compaction/render.js +3 -3
  276. package/dist/extensions/cached-compaction/render.js.map +1 -1
  277. package/dist/extensions/cached-compaction/summary.d.ts +1 -1
  278. package/dist/extensions/cached-compaction/summary.d.ts.map +1 -1
  279. package/dist/extensions/cached-compaction/summary.js +13 -16
  280. package/dist/extensions/cached-compaction/summary.js.map +1 -1
  281. package/dist/extensions/codemode/renderer.d.ts.map +1 -1
  282. package/dist/extensions/codemode/renderer.js +6 -2
  283. package/dist/extensions/codemode/renderer.js.map +1 -1
  284. package/dist/extensions/codemode/tool.d.ts +2 -1
  285. package/dist/extensions/codemode/tool.d.ts.map +1 -1
  286. package/dist/extensions/codemode/tool.js +33 -8
  287. package/dist/extensions/codemode/tool.js.map +1 -1
  288. package/dist/extensions/deepwiki/schema.d.ts.map +1 -1
  289. package/dist/extensions/deepwiki/schema.js +1 -1
  290. package/dist/extensions/deepwiki/schema.js.map +1 -1
  291. package/dist/extensions/llama/ui.d.ts.map +1 -1
  292. package/dist/extensions/llama/ui.js +16 -4
  293. package/dist/extensions/llama/ui.js.map +1 -1
  294. package/dist/extensions/mcp/cli.d.ts.map +1 -1
  295. package/dist/extensions/mcp/cli.js +34 -8
  296. package/dist/extensions/mcp/cli.js.map +1 -1
  297. package/dist/extensions/mcp/oauth.d.ts +1 -1
  298. package/dist/extensions/mcp/oauth.d.ts.map +1 -1
  299. package/dist/extensions/mcp/oauth.js +36 -13
  300. package/dist/extensions/mcp/oauth.js.map +1 -1
  301. package/dist/extensions/mcp/ui.d.ts +1 -0
  302. package/dist/extensions/mcp/ui.d.ts.map +1 -1
  303. package/dist/extensions/mcp/ui.js +33 -24
  304. package/dist/extensions/mcp/ui.js.map +1 -1
  305. package/dist/extensions/run-summary/index.d.ts +1 -1
  306. package/dist/extensions/run-summary/index.d.ts.map +1 -1
  307. package/dist/extensions/run-summary/index.js +11 -23
  308. package/dist/extensions/run-summary/index.js.map +1 -1
  309. package/dist/extensions/statusline/usage.d.ts.map +1 -1
  310. package/dist/extensions/statusline/usage.js +2 -1
  311. package/dist/extensions/statusline/usage.js.map +1 -1
  312. package/dist/extensions/tasks/tool/actions.d.ts +1 -2
  313. package/dist/extensions/tasks/tool/actions.d.ts.map +1 -1
  314. package/dist/extensions/tasks/tool/actions.js +7 -79
  315. package/dist/extensions/tasks/tool/actions.js.map +1 -1
  316. package/dist/extensions/tasks/tool/constants.d.ts +1 -3
  317. package/dist/extensions/tasks/tool/constants.d.ts.map +1 -1
  318. package/dist/extensions/tasks/tool/constants.js +1 -3
  319. package/dist/extensions/tasks/tool/constants.js.map +1 -1
  320. package/dist/extensions/tasks/tool/schema.d.ts +1 -2
  321. package/dist/extensions/tasks/tool/schema.d.ts.map +1 -1
  322. package/dist/extensions/tasks/tool/schema.js +7 -15
  323. package/dist/extensions/tasks/tool/schema.js.map +1 -1
  324. package/dist/extensions/tasks/tool/types.d.ts +1 -19
  325. package/dist/extensions/tasks/tool/types.d.ts.map +1 -1
  326. package/dist/extensions/tasks/tool/types.js.map +1 -1
  327. package/dist/extensions/tasks/tool.d.ts +1 -2
  328. package/dist/extensions/tasks/tool.d.ts.map +1 -1
  329. package/dist/extensions/tasks/tool.js +2 -4
  330. package/dist/extensions/tasks/tool.js.map +1 -1
  331. package/dist/extensions/tasks/ui/completion-render.d.ts +5 -1
  332. package/dist/extensions/tasks/ui/completion-render.d.ts.map +1 -1
  333. package/dist/extensions/tasks/ui/completion-render.js +25 -70
  334. package/dist/extensions/tasks/ui/completion-render.js.map +1 -1
  335. package/dist/extensions/tasks/ui/inspector.d.ts +1 -1
  336. package/dist/extensions/tasks/ui/inspector.d.ts.map +1 -1
  337. package/dist/extensions/tasks/ui/inspector.js +0 -6
  338. package/dist/extensions/tasks/ui/inspector.js.map +1 -1
  339. package/dist/extensions/tasks/ui/manager.d.ts +1 -1
  340. package/dist/extensions/tasks/ui/manager.d.ts.map +1 -1
  341. package/dist/extensions/tasks/ui/manager.js.map +1 -1
  342. package/dist/extensions/tasks/ui/render.d.ts +2 -16
  343. package/dist/extensions/tasks/ui/render.d.ts.map +1 -1
  344. package/dist/extensions/tasks/ui/render.js +3 -79
  345. package/dist/extensions/tasks/ui/render.js.map +1 -1
  346. package/dist/extensions/tasks/ui/views.d.ts +2 -4
  347. package/dist/extensions/tasks/ui/views.d.ts.map +1 -1
  348. package/dist/extensions/tasks/ui/views.js +3 -7
  349. package/dist/extensions/tasks/ui/views.js.map +1 -1
  350. package/dist/extensions/tool-presentation/fallback.d.ts.map +1 -0
  351. package/dist/{modes/interactive/tool-view → extensions/tool-presentation}/fallback.js +5 -5
  352. package/dist/extensions/tool-presentation/fallback.js.map +1 -0
  353. package/dist/extensions/tool-presentation/index.js +1 -1
  354. package/dist/extensions/tool-presentation/index.js.map +1 -1
  355. package/dist/{modes/interactive/tool-view → extensions/tool-presentation}/shell.d.ts +1 -1
  356. package/dist/extensions/tool-presentation/shell.d.ts.map +1 -0
  357. package/dist/{modes/interactive/tool-view → extensions/tool-presentation}/shell.js +3 -3
  358. package/dist/extensions/tool-presentation/shell.js.map +1 -0
  359. package/dist/extensions/tool-search/tool.d.ts +21 -6
  360. package/dist/extensions/tool-search/tool.d.ts.map +1 -1
  361. package/dist/extensions/tool-search/tool.js +104 -36
  362. package/dist/extensions/tool-search/tool.js.map +1 -1
  363. package/dist/index.d.ts +3 -3
  364. package/dist/index.d.ts.map +1 -1
  365. package/dist/index.js.map +1 -1
  366. package/dist/main.d.ts.map +1 -1
  367. package/dist/main.js +15 -8
  368. package/dist/main.js.map +1 -1
  369. package/dist/modes/interactive/components/assistant-message.d.ts +5 -3
  370. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  371. package/dist/modes/interactive/components/assistant-message.js +61 -45
  372. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  373. package/dist/modes/interactive/components/config-selector-skills.d.ts +54 -0
  374. package/dist/modes/interactive/components/config-selector-skills.d.ts.map +1 -0
  375. package/dist/modes/interactive/components/config-selector-skills.js +178 -0
  376. package/dist/modes/interactive/components/config-selector-skills.js.map +1 -0
  377. package/dist/modes/interactive/components/config-selector.d.ts +2 -11
  378. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  379. package/dist/modes/interactive/components/config-selector.js +31 -181
  380. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  381. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
  382. package/dist/modes/interactive/components/custom-editor.js +7 -0
  383. package/dist/modes/interactive/components/custom-editor.js.map +1 -1
  384. package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -1
  385. package/dist/modes/interactive/components/custom-entry.js +2 -1
  386. package/dist/modes/interactive/components/custom-entry.js.map +1 -1
  387. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
  388. package/dist/modes/interactive/components/custom-message.js +2 -1
  389. package/dist/modes/interactive/components/custom-message.js.map +1 -1
  390. package/dist/modes/interactive/components/extension-editor.d.ts +2 -0
  391. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
  392. package/dist/modes/interactive/components/extension-editor.js +4 -0
  393. package/dist/modes/interactive/components/extension-editor.js.map +1 -1
  394. package/dist/modes/interactive/components/login-dialog.d.ts +5 -0
  395. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  396. package/dist/modes/interactive/components/login-dialog.js +103 -10
  397. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  398. package/dist/modes/interactive/components/markdown-transform.d.ts +2 -1
  399. package/dist/modes/interactive/components/markdown-transform.d.ts.map +1 -1
  400. package/dist/modes/interactive/components/markdown-transform.js +3 -2
  401. package/dist/modes/interactive/components/markdown-transform.js.map +1 -1
  402. package/dist/modes/interactive/components/model-selector.d.ts +1 -0
  403. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  404. package/dist/modes/interactive/components/model-selector.js +17 -6
  405. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  406. package/dist/modes/interactive/components/oauth-selector.d.ts +1 -0
  407. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  408. package/dist/modes/interactive/components/oauth-selector.js +13 -4
  409. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  410. package/dist/modes/interactive/components/scoped-models-selector.d.ts +1 -0
  411. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  412. package/dist/modes/interactive/components/scoped-models-selector.js +14 -3
  413. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  414. package/dist/modes/interactive/components/session-selector-search.d.ts +4 -0
  415. package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
  416. package/dist/modes/interactive/components/session-selector-search.js +86 -22
  417. package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
  418. package/dist/modes/interactive/components/session-selector.d.ts +2 -1
  419. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  420. package/dist/modes/interactive/components/session-selector.js +15 -23
  421. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  422. package/dist/modes/interactive/components/settings-submenu.d.ts.map +1 -1
  423. package/dist/modes/interactive/components/settings-submenu.js +2 -0
  424. package/dist/modes/interactive/components/settings-submenu.js.map +1 -1
  425. package/dist/modes/interactive/components/tool-execution.d.ts +7 -0
  426. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  427. package/dist/modes/interactive/components/tool-execution.js +48 -9
  428. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  429. package/dist/modes/interactive/components/tree-selector.d.ts +1 -0
  430. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
  431. package/dist/modes/interactive/components/tree-selector.js +5 -6
  432. package/dist/modes/interactive/components/tree-selector.js.map +1 -1
  433. package/dist/modes/interactive/components/user-message-selector.d.ts +1 -0
  434. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
  435. package/dist/modes/interactive/components/user-message-selector.js +9 -1
  436. package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
  437. package/dist/modes/interactive/components/user-message.d.ts +3 -1
  438. package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  439. package/dist/modes/interactive/components/user-message.js +4 -2
  440. package/dist/modes/interactive/components/user-message.js.map +1 -1
  441. package/dist/modes/interactive/editor-host.d.ts.map +1 -1
  442. package/dist/modes/interactive/editor-host.js +3 -2
  443. package/dist/modes/interactive/editor-host.js.map +1 -1
  444. package/dist/modes/interactive/external-editor.d.ts +1 -0
  445. package/dist/modes/interactive/external-editor.d.ts.map +1 -1
  446. package/dist/modes/interactive/external-editor.js +17 -5
  447. package/dist/modes/interactive/external-editor.js.map +1 -1
  448. package/dist/modes/interactive/interactive-mode.d.ts +8 -12
  449. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  450. package/dist/modes/interactive/interactive-mode.js +169 -112
  451. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  452. package/dist/modes/interactive/model-search.d.ts +10 -0
  453. package/dist/modes/interactive/model-search.d.ts.map +1 -1
  454. package/dist/modes/interactive/model-search.js +21 -0
  455. package/dist/modes/interactive/model-search.js.map +1 -1
  456. package/dist/modes/interactive/theme/theme.d.ts +10 -0
  457. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  458. package/dist/modes/interactive/theme/theme.js +30 -23
  459. package/dist/modes/interactive/theme/theme.js.map +1 -1
  460. package/dist/modes/interactive/tool-view/chat.d.ts +2 -2
  461. package/dist/modes/interactive/tool-view/chat.d.ts.map +1 -1
  462. package/dist/modes/interactive/tool-view/chat.js +22 -19
  463. package/dist/modes/interactive/tool-view/chat.js.map +1 -1
  464. package/dist/modes/interactive/transcript-layout.d.ts +2 -0
  465. package/dist/modes/interactive/transcript-layout.d.ts.map +1 -1
  466. package/dist/modes/interactive/transcript-layout.js +5 -2
  467. package/dist/modes/interactive/transcript-layout.js.map +1 -1
  468. package/dist/modes/print-mode.d.ts.map +1 -1
  469. package/dist/modes/print-mode.js +1 -0
  470. package/dist/modes/print-mode.js.map +1 -1
  471. package/dist/modes/rpc/rpc-client.d.ts +9 -1
  472. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  473. package/dist/modes/rpc/rpc-client.js +23 -23
  474. package/dist/modes/rpc/rpc-client.js.map +1 -1
  475. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  476. package/dist/modes/rpc/rpc-mode.js +1 -3
  477. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  478. package/dist/package-manager-cli.d.ts.map +1 -1
  479. package/dist/package-manager-cli.js +55 -4
  480. package/dist/package-manager-cli.js.map +1 -1
  481. package/dist/utils/ansi.d.ts.map +1 -1
  482. package/dist/utils/ansi.js +5 -2
  483. package/dist/utils/ansi.js.map +1 -1
  484. package/dist/utils/clipboard-command.d.ts.map +1 -1
  485. package/dist/utils/clipboard-command.js +4 -0
  486. package/dist/utils/clipboard-command.js.map +1 -1
  487. package/dist/utils/git.d.ts +1 -1
  488. package/dist/utils/git.d.ts.map +1 -1
  489. package/dist/utils/git.js.map +1 -1
  490. package/dist/utils/image-resize-core.d.ts.map +1 -1
  491. package/dist/utils/image-resize-core.js +5 -3
  492. package/dist/utils/image-resize-core.js.map +1 -1
  493. package/dist/utils/open-browser.d.ts.map +1 -1
  494. package/dist/utils/open-browser.js +4 -1
  495. package/dist/utils/open-browser.js.map +1 -1
  496. package/dist/utils/paths.d.ts +17 -0
  497. package/dist/utils/paths.d.ts.map +1 -1
  498. package/dist/utils/paths.js +42 -1
  499. package/dist/utils/paths.js.map +1 -1
  500. package/dist/utils/shell.d.ts.map +1 -1
  501. package/dist/utils/shell.js +14 -0
  502. package/dist/utils/shell.js.map +1 -1
  503. package/dist/utils/syntax-highlight.d.ts +5 -0
  504. package/dist/utils/syntax-highlight.d.ts.map +1 -1
  505. package/dist/utils/syntax-highlight.js +7 -0
  506. package/dist/utils/syntax-highlight.js.map +1 -1
  507. package/dist/utils/tools-manager.d.ts.map +1 -1
  508. package/dist/utils/tools-manager.js +30 -35
  509. package/dist/utils/tools-manager.js.map +1 -1
  510. package/dist/utils/usage.d.ts +5 -0
  511. package/dist/utils/usage.d.ts.map +1 -0
  512. package/dist/utils/usage.js +16 -0
  513. package/dist/utils/usage.js.map +1 -0
  514. package/docs/bundled/README.md +1 -1
  515. package/docs/bundled/extensions/agent.md +7 -7
  516. package/docs/bundled/extensions/run-summary.md +4 -4
  517. package/docs/bundled/extensions/statusline.md +1 -1
  518. package/docs/bundled/tasks.md +12 -27
  519. package/docs/bundled/tool-presentation.md +2 -2
  520. package/docs/custom-provider.md +1 -1
  521. package/docs/environment-variables.md +2 -0
  522. package/docs/extensions.md +41 -28
  523. package/docs/keybindings.md +1 -1
  524. package/docs/llama-cpp.md +17 -12
  525. package/docs/mcp.md +6 -4
  526. package/docs/models-configuration.md +1 -1
  527. package/docs/models.md +7 -85
  528. package/docs/packages.md +26 -1
  529. package/docs/rpc.md +1 -1
  530. package/docs/sdk.md +10 -8
  531. package/docs/session-format.md +3 -3
  532. package/docs/sessions.md +10 -0
  533. package/docs/settings.md +5 -4
  534. package/docs/terminal-setup.md +2 -2
  535. package/docs/tmux.md +6 -0
  536. package/docs/tui.md +12 -7
  537. package/docs/usage.md +19 -9
  538. package/docs/windows.md +29 -0
  539. package/examples/extensions/README.md +2 -1
  540. package/examples/extensions/custom-provider-anthropic/index.ts +27 -31
  541. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  542. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  543. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  544. package/examples/extensions/debug-provider.ts +2 -2
  545. package/examples/extensions/gondolin/package-lock.json +19 -29
  546. package/examples/extensions/gondolin/package.json +2 -2
  547. package/examples/extensions/preset.ts +2 -0
  548. package/examples/extensions/reload-runtime.ts +17 -5
  549. package/examples/extensions/tools.ts +2 -0
  550. package/examples/extensions/with-deps/package-lock.json +2 -2
  551. package/examples/extensions/with-deps/package.json +1 -1
  552. package/package.json +11 -12
  553. package/schemas/models.schema.json +36 -36
  554. package/schemas/settings.schema.json +17 -0
  555. package/dist/bundle/chunks/anthropic-messages-HWL6AS7T.js +0 -6
  556. package/dist/bundle/chunks/azure-openai-responses-4YYPDYV5.js +0 -2
  557. package/dist/bundle/chunks/chunk-6GTUUUCJ.js +0 -1499
  558. package/dist/bundle/chunks/chunk-6JS2SOFO.js +0 -11
  559. package/dist/bundle/chunks/chunk-ANCZPKX7.js +0 -2
  560. package/dist/bundle/chunks/chunk-FEZ5RM2B.js +0 -2
  561. package/dist/bundle/chunks/chunk-LPF7HQ3S.js +0 -4
  562. package/dist/bundle/chunks/chunk-MMNIHCU7.js +0 -2
  563. package/dist/bundle/chunks/chunk-R267VV5T.js +0 -82
  564. package/dist/bundle/chunks/chunk-RVKT7OUB.js +0 -9
  565. package/dist/bundle/chunks/chunk-SA2AQYEI.js +0 -7
  566. package/dist/bundle/chunks/chunk-ZAIGBRV5.js +0 -16
  567. package/dist/bundle/chunks/mistral-conversations-V2JJTMJ5.js +0 -5
  568. package/dist/bundle/chunks/openai-completions-TXZXILJR.js +0 -7
  569. package/dist/bundle/chunks/pi-messages-LBJQ4NGP.js +0 -8
  570. package/dist/bundle/chunks/virtual-modules-6IJ6V2CG.js +0 -2
  571. package/dist/core/isolated-session.d.ts.map +0 -1
  572. package/dist/core/isolated-session.js.map +0 -1
  573. package/dist/core/tasks/wait.d.ts +0 -19
  574. package/dist/core/tasks/wait.d.ts.map +0 -1
  575. package/dist/core/tasks/wait.js +0 -45
  576. package/dist/core/tasks/wait.js.map +0 -1
  577. package/dist/modes/interactive/tool-view/fallback.d.ts.map +0 -1
  578. package/dist/modes/interactive/tool-view/fallback.js.map +0 -1
  579. package/dist/modes/interactive/tool-view/shell.d.ts.map +0 -1
  580. package/dist/modes/interactive/tool-view/shell.js.map +0 -1
  581. package/dist/modes/interactive/tool-view/tool-execution.d.ts +0 -14
  582. package/dist/modes/interactive/tool-view/tool-execution.d.ts.map +0 -1
  583. package/dist/modes/interactive/tool-view/tool-execution.js +0 -13
  584. package/dist/modes/interactive/tool-view/tool-execution.js.map +0 -1
  585. package/dist/utils/path-identity.d.ts +0 -12
  586. package/dist/utils/path-identity.d.ts.map +0 -1
  587. package/dist/utils/path-identity.js +0 -63
  588. package/dist/utils/path-identity.js.map +0 -1
  589. package/docs/images/doom-extension.png +0 -0
  590. package/docs/images/exy.png +0 -0
  591. package/examples/extensions/sandbox/index.ts +0 -321
  592. package/examples/extensions/sandbox/package-lock.json +0 -92
  593. package/examples/extensions/sandbox/package.json +0 -19
  594. package/npm-shrinkwrap.json +0 -4207
  595. /package/dist/{modes/interactive/tool-view → extensions/tool-presentation}/fallback.d.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"session-selector.js","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 { rm, 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 \"@earendil-works/pi-tui\";\nimport { KeybindingsManager } from \"../../../core/keybindings.ts\";\nimport {\n\tgetSessionArtifactDir,\n\tlistSessionOwnedPaths,\n\ttype SessionInfo,\n\ttype SessionListProgress,\n} from \"../../../core/session-manager.ts\";\nimport { canonicalizePath as _canonicalizePath } from \"../../../utils/paths.ts\";\nimport { theme } from \"../theme/theme.ts\";\nimport { DynamicBorder } from \"./dynamic-border.ts\";\nimport { keyHint, keyText } from \"./keybinding-hints.ts\";\nimport { filterAndSortSessions, hasSessionName, type NameFilter, type SortMode } from \"./session-selector-search.ts\";\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\nfunction canonicalizePath(path: string | undefined): string | undefined {\n\tif (!path) return path;\n\treturn _canonicalizePath(path);\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\tlatestActivity: number;\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\tconst sessionPath = canonicalizePath(session.path) ?? session.path;\n\t\tbyPath.set(sessionPath, { session, children: [], latestActivity: session.modified.getTime() });\n\t}\n\n\tconst roots: SessionTreeNode[] = [];\n\n\tfor (const session of sessions) {\n\t\tconst sessionPath = canonicalizePath(session.path) ?? session.path;\n\t\tconst node = byPath.get(sessionPath)!;\n\t\tconst parentPath = canonicalizePath(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\tconst updateLatestActivity = (node: SessionTreeNode): number => {\n\t\tlet latestActivity = node.session.modified.getTime();\n\t\tfor (const child of node.children) {\n\t\t\tlatestActivity = Math.max(latestActivity, updateLatestActivity(child));\n\t\t}\n\t\tnode.latestActivity = latestActivity;\n\t\treturn latestActivity;\n\t};\n\n\tfor (const root of roots) {\n\t\tupdateLatestActivity(root);\n\t}\n\n\t// Sort children and roots by latest activity in each subtree (descending)\n\tconst sortNodes = (nodes: SessionTreeNode[]): void => {\n\t\tnodes.sort((a, b) => b.latestActivity - a.latestActivity);\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 selectionTouched = false;\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 currentSessionCanonicalPath?: 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.currentSessionCanonicalPath = canonicalizePath(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\tconst selectedPath = this.selectionTouched ? this.getSelectedSessionPath() : undefined;\n\t\tthis.allSessions = sessions;\n\t\tthis.showCwd = showCwd;\n\t\tthis.filterSessions(this.searchInput.getValue());\n\t\tif (!this.selectionTouched) {\n\t\t\tthis.selectedIndex = 0;\n\t\t} else if (selectedPath) {\n\t\t\tconst selectedIndex = this.filteredSessions.findIndex((node) => node.session.path === selectedPath);\n\t\t\tif (selectedIndex >= 0) this.selectedIndex = selectedIndex;\n\t\t}\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.isCurrentSessionPath(selected.session.path)) {\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\tprivate isCurrentSessionPath(path: string): boolean {\n\t\tif (!this.currentSessionCanonicalPath) return false;\n\t\treturn (canonicalizePath(path) ?? path) === this.currentSessionCanonicalPath;\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.isCurrentSessionPath(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\tthis.selectionTouched = true;\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, signal?: AbortSignal) => Promise<SessionInfo[]>;\n\n/**\n * Delete a session file with everything it owns (its artifacts directory and late-task sidecar),\n * trying the `trash` CLI first, then falling back to permanent removal. Success means the session\n * file is gone; `error` on a successful result names owned files that could not be removed.\n */\nexport async function deleteSessionFile(\n\tsessionPath: string,\n): Promise<{ ok: boolean; method: \"trash\" | \"unlink\"; error?: string }> {\n\t// Try `trash` first (if installed), with every owned path in one invocation\n\tconst owned = listSessionOwnedPaths(sessionPath);\n\tconst targets = owned.length ? owned : [sessionPath];\n\tconst trashArgs = targets.some((path) => path.startsWith(\"-\")) ? [\"--\", ...targets] : targets;\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 everything is gone afterwards, treat it as successful\n\tconst remaining = listSessionOwnedPaths(sessionPath);\n\tif (trashResult.status === 0 || (!existsSync(sessionPath) && remaining.length === 0)) {\n\t\treturn { ok: true, method: \"trash\" };\n\t}\n\n\t// Fallback to permanent deletion of whatever is left; the session file goes last\n\tconst artifactDir = getSessionArtifactDir(sessionPath);\n\tconst failures: string[] = [];\n\tconst order = remaining.filter((path) => path !== sessionPath);\n\tif (remaining.includes(sessionPath)) order.push(sessionPath);\n\tfor (const path of order) {\n\t\ttry {\n\t\t\tif (path === artifactDir) await rm(path, { recursive: true, force: true });\n\t\t\telse await unlink(path);\n\t\t} catch (err) {\n\t\t\tif ((err as NodeJS.ErrnoException).code === \"ENOENT\") continue;\n\t\t\tfailures.push(err instanceof Error ? err.message : String(err));\n\t\t}\n\t}\n\tconst unlinkError = failures.join(\"; \");\n\tif (!existsSync(sessionPath)) {\n\t\treturn { ok: true, method: \"unlink\", ...(unlinkError ? { error: unlinkError } : {}) };\n\t}\n\tconst trashErrorHint = getTrashErrorHint();\n\tconst reason = unlinkError || \"Session file could not be removed\";\n\tconst error = trashErrorHint ? `${reason} (${trashErrorHint})` : reason;\n\treturn { ok: false, method: \"unlink\", error };\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 requestRender: () => void;\n\tprivate renameSession?: (sessionPath: string, currentName: string | undefined) => Promise<void>;\n\tprivate currentLoad: AbortController | null = null;\n\tprivate allLoad: AbortController | null = null;\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.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\tthis.cancelLoads();\n\t\t\tonSelect(sessionPath);\n\t\t};\n\t\tthis.sessionList.onCancel = () => {\n\t\t\tclearStatusMessage();\n\t\t\tthis.cancelLoads();\n\t\t\tonCancel();\n\t\t};\n\t\tthis.sessionList.onExit = () => {\n\t\t\tclearStatusMessage();\n\t\t\tthis.cancelLoads();\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.currentLoad : this.allLoad) 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\tif (result.error) {\n\t\t\t\t\tthis.header.setStatusMessage(\n\t\t\t\t\t\t{ type: \"error\", message: `${msg}, but cleanup failed: ${result.error}` },\n\t\t\t\t\t\t3000,\n\t\t\t\t\t);\n\t\t\t\t} else this.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\tvoid this.loadScope(\"current\");\n\t}\n\n\tprivate cancelLoads(): void {\n\t\tif (this.currentLoad) {\n\t\t\tthis.currentLoad.abort();\n\t\t\tthis.currentLoad = null;\n\t\t\tthis.currentSessions = null;\n\t\t}\n\t\tif (this.allLoad) {\n\t\t\tthis.allLoad.abort();\n\t\t\tthis.allLoad = null;\n\t\t\tthis.allSessions = null;\n\t\t}\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): Promise<void> {\n\t\tif (scope === \"current\" ? this.currentLoad : this.allLoad) return;\n\n\t\tconst showCwd = scope === \"all\";\n\t\tconst controller = new AbortController();\n\t\tif (scope === \"current\") {\n\t\t\tthis.currentLoad = controller;\n\t\t} else {\n\t\t\tthis.allLoad = controller;\n\t\t}\n\t\tthis.header.setScope(scope);\n\t\tthis.header.setLoading(true);\n\t\tthis.requestRender();\n\n\t\tconst isActive = () => (scope === \"current\" ? this.currentLoad : this.allLoad) === controller;\n\t\tconst onProgress: SessionListProgress = (loaded, total, partialSessions) => {\n\t\t\tif (!isActive()) return;\n\t\t\tif (partialSessions) {\n\t\t\t\tconst sessions = [...partialSessions];\n\t\t\t\tif (scope === \"current\") {\n\t\t\t\t\tthis.currentSessions = sessions;\n\t\t\t\t} else {\n\t\t\t\t\tthis.allSessions = sessions;\n\t\t\t\t}\n\t\t\t\tif (scope === this.scope) this.sessionList.setSessions(sessions, showCwd);\n\t\t\t}\n\t\t\tif (scope !== this.scope) 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, controller.signal)\n\t\t\t\t: this.allSessionsLoader(onProgress, controller.signal));\n\t\t\tif (!isActive()) return;\n\n\t\t\tif (scope === \"current\") {\n\t\t\t\tthis.currentSessions = sessions;\n\t\t\t\tthis.currentLoad = null;\n\t\t\t} else {\n\t\t\t\tthis.allSessions = sessions;\n\t\t\t\tthis.allLoad = null;\n\t\t\t}\n\n\t\t\tif (scope !== this.scope) return;\n\t\t\tthis.header.setLoading(false);\n\t\t\tthis.sessionList.setSessions(sessions, showCwd);\n\t\t\tthis.requestRender();\n\t\t} catch (err) {\n\t\t\tif (!isActive()) return;\n\t\t\tif (scope === \"current\") {\n\t\t\t\tthis.currentLoad = null;\n\t\t\t\tthis.currentSessions = null;\n\t\t\t} else {\n\t\t\t\tthis.allLoad = null;\n\t\t\t\tthis.allSessions = null;\n\t\t\t}\n\t\t\tif (scope !== this.scope) 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\t\t\tthis.sessionList.setSessions([], showCwd);\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\tthis.cancelLoads();\n\t\tthis.currentSessions = null;\n\t\tthis.allSessions = null;\n\t\tawait this.loadScope(this.scope);\n\t}\n\n\tprivate toggleScope(): void {\n\t\tthis.scope = this.scope === \"current\" ? \"all\" : \"current\";\n\t\tconst sessions = this.scope === \"current\" ? this.currentSessions : this.allSessions;\n\t\tconst loading = (this.scope === \"current\" ? this.currentLoad : this.allLoad) !== null;\n\t\tthis.header.setScope(this.scope);\n\t\tthis.header.setLoading(loading);\n\t\tthis.sessionList.setSessions(sessions ?? [], this.scope === \"all\");\n\t\tthis.requestRender();\n\t\tif (sessions === null && !loading) void this.loadScope(this.scope);\n\t}\n\n\tgetSessionList(): SessionList {\n\t\treturn this.sessionList;\n\t}\n}\n"]}
1
+ {"version":3,"file":"session-selector.js","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 { rm, unlink } from \"node:fs/promises\";\nimport {\n\ttype Component,\n\tContainer,\n\ttype Focusable,\n\tgetKeybindings,\n\tInput,\n\tSpacer,\n\tText,\n\ttruncateToWidth,\n\tvisibleWidth,\n} from \"@earendil-works/pi-tui\";\nimport { KeybindingsManager } from \"../../../core/keybindings.ts\";\nimport {\n\tgetSessionArtifactDir,\n\tlistSessionOwnedPaths,\n\ttype SessionInfo,\n\ttype SessionListProgress,\n} from \"../../../core/session-manager.ts\";\nimport { canonicalizePath, getPathComparisonKey, shortenHomePath } from \"../../../utils/paths.ts\";\nimport { theme } from \"../theme/theme.ts\";\nimport { DynamicBorder } from \"./dynamic-border.ts\";\nimport { keyHint, keyText } from \"./keybinding-hints.ts\";\nimport { filterAndSortSessions, hasSessionName, type NameFilter, type SortMode } from \"./session-selector-search.ts\";\n\ntype SessionScope = \"current\" | \"all\";\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\n/** Comparison key for a session file path; follows symlinks and ignores case on Windows. */\nfunction getSessionPathKey(path: string): string {\n\treturn getPathComparisonKey(canonicalizePath(path));\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\tlatestActivity: number;\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\tconst sessionPath = getSessionPathKey(session.path);\n\t\tbyPath.set(sessionPath, { session, children: [], latestActivity: session.modified.getTime() });\n\t}\n\n\tconst roots: SessionTreeNode[] = [];\n\n\tfor (const session of sessions) {\n\t\tconst sessionPath = getSessionPathKey(session.path);\n\t\tconst node = byPath.get(sessionPath)!;\n\t\tconst parentPath = session.parentSessionPath ? getSessionPathKey(session.parentSessionPath) : undefined;\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\tconst updateLatestActivity = (node: SessionTreeNode): number => {\n\t\tlet latestActivity = node.session.modified.getTime();\n\t\tfor (const child of node.children) {\n\t\t\tlatestActivity = Math.max(latestActivity, updateLatestActivity(child));\n\t\t}\n\t\tnode.latestActivity = latestActivity;\n\t\treturn latestActivity;\n\t};\n\n\tfor (const root of roots) {\n\t\tupdateLatestActivity(root);\n\t}\n\n\t// Sort children and roots by latest activity in each subtree (descending)\n\tconst sortNodes = (nodes: SessionTreeNode[]): void => {\n\t\tnodes.sort((a, b) => b.latestActivity - a.latestActivity);\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 selectionTouched = false;\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 currentSessionPathKey?: 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.currentSessionPathKey = currentSessionFilePath ? getSessionPathKey(currentSessionFilePath) : undefined;\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\tconst selectedPath = this.selectionTouched ? this.getSelectedSessionPath() : undefined;\n\t\tthis.allSessions = sessions;\n\t\tthis.showCwd = showCwd;\n\t\tthis.filterSessions(this.searchInput.getValue());\n\t\tif (!this.selectionTouched) {\n\t\t\tthis.selectedIndex = 0;\n\t\t} else if (selectedPath) {\n\t\t\tconst selectedIndex = this.filteredSessions.findIndex((node) => node.session.path === selectedPath);\n\t\t\tif (selectedIndex >= 0) this.selectedIndex = selectedIndex;\n\t\t}\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.isCurrentSessionPath(selected.session.path)) {\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\tprivate isCurrentSessionPath(path: string): boolean {\n\t\tif (!this.currentSessionPathKey) return false;\n\t\treturn getSessionPathKey(path) === this.currentSessionPathKey;\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.isCurrentSessionPath(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 = `${shortenHomePath(session.cwd)} ${rightPart}`;\n\t\t\t}\n\t\t\tif (this.showPath) {\n\t\t\t\trightPart = `${shortenHomePath(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\tthis.selectionTouched = true;\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, signal?: AbortSignal) => Promise<SessionInfo[]>;\n\n/**\n * Delete a session file with everything it owns (its artifacts directory and late-task sidecar),\n * trying the `trash` CLI first, then falling back to permanent removal. Success means the session\n * file is gone; `error` on a successful result names owned files that could not be removed.\n */\nexport async function deleteSessionFile(\n\tsessionPath: string,\n): Promise<{ ok: boolean; method: \"trash\" | \"unlink\"; error?: string }> {\n\t// Try `trash` first (if installed), with every owned path in one invocation\n\tconst owned = listSessionOwnedPaths(sessionPath);\n\tconst targets = owned.length ? owned : [sessionPath];\n\tconst trashArgs = targets.some((path) => path.startsWith(\"-\")) ? [\"--\", ...targets] : targets;\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 everything is gone afterwards, treat it as successful\n\tconst remaining = listSessionOwnedPaths(sessionPath);\n\tif (trashResult.status === 0 || (!existsSync(sessionPath) && remaining.length === 0)) {\n\t\treturn { ok: true, method: \"trash\" };\n\t}\n\n\t// Fallback to permanent deletion of whatever is left; the session file goes last\n\tconst artifactDir = getSessionArtifactDir(sessionPath);\n\tconst failures: string[] = [];\n\tconst order = remaining.filter((path) => path !== sessionPath);\n\tif (remaining.includes(sessionPath)) order.push(sessionPath);\n\tfor (const path of order) {\n\t\ttry {\n\t\t\tif (path === artifactDir) await rm(path, { recursive: true, force: true });\n\t\t\telse await unlink(path);\n\t\t} catch (err) {\n\t\t\tif ((err as NodeJS.ErrnoException).code === \"ENOENT\") continue;\n\t\t\tfailures.push(err instanceof Error ? err.message : String(err));\n\t\t}\n\t}\n\tconst unlinkError = failures.join(\"; \");\n\tif (!existsSync(sessionPath)) {\n\t\treturn { ok: true, method: \"unlink\", ...(unlinkError ? { error: unlinkError } : {}) };\n\t}\n\tconst trashErrorHint = getTrashErrorHint();\n\tconst reason = unlinkError || \"Session file could not be removed\";\n\tconst error = trashErrorHint ? `${reason} (${trashErrorHint})` : reason;\n\treturn { ok: false, method: \"unlink\", error };\n}\n\n/**\n * Component that renders a session selector\n */\nexport class SessionSelectorComponent extends Container implements Focusable {\n\tget capturesViewportInput(): boolean {\n\t\treturn this.mode !== \"rename\";\n\t}\n\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 requestRender: () => void;\n\tprivate renameSession?: (sessionPath: string, currentName: string | undefined) => Promise<void>;\n\tprivate currentLoad: AbortController | null = null;\n\tprivate allLoad: AbortController | null = null;\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.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\tthis.cancelLoads();\n\t\t\tonSelect(sessionPath);\n\t\t};\n\t\tthis.sessionList.onCancel = () => {\n\t\t\tclearStatusMessage();\n\t\t\tthis.cancelLoads();\n\t\t\tonCancel();\n\t\t};\n\t\tthis.sessionList.onExit = () => {\n\t\t\tclearStatusMessage();\n\t\t\tthis.cancelLoads();\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.currentLoad : this.allLoad) 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\tif (result.error) {\n\t\t\t\t\tthis.header.setStatusMessage(\n\t\t\t\t\t\t{ type: \"error\", message: `${msg}, but cleanup failed: ${result.error}` },\n\t\t\t\t\t\t3000,\n\t\t\t\t\t);\n\t\t\t\t} else this.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\tvoid this.loadScope(\"current\");\n\t}\n\n\tprivate cancelLoads(): void {\n\t\tif (this.currentLoad) {\n\t\t\tthis.currentLoad.abort();\n\t\t\tthis.currentLoad = null;\n\t\t\tthis.currentSessions = null;\n\t\t}\n\t\tif (this.allLoad) {\n\t\t\tthis.allLoad.abort();\n\t\t\tthis.allLoad = null;\n\t\t\tthis.allSessions = null;\n\t\t}\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): Promise<void> {\n\t\tif (scope === \"current\" ? this.currentLoad : this.allLoad) return;\n\n\t\tconst showCwd = scope === \"all\";\n\t\tconst controller = new AbortController();\n\t\tif (scope === \"current\") {\n\t\t\tthis.currentLoad = controller;\n\t\t} else {\n\t\t\tthis.allLoad = controller;\n\t\t}\n\t\tthis.header.setScope(scope);\n\t\tthis.header.setLoading(true);\n\t\tthis.requestRender();\n\n\t\tconst isActive = () => (scope === \"current\" ? this.currentLoad : this.allLoad) === controller;\n\t\tconst onProgress: SessionListProgress = (loaded, total, partialSessions) => {\n\t\t\tif (!isActive()) return;\n\t\t\tif (partialSessions) {\n\t\t\t\tconst sessions = [...partialSessions];\n\t\t\t\tif (scope === \"current\") {\n\t\t\t\t\tthis.currentSessions = sessions;\n\t\t\t\t} else {\n\t\t\t\t\tthis.allSessions = sessions;\n\t\t\t\t}\n\t\t\t\tif (scope === this.scope) this.sessionList.setSessions(sessions, showCwd);\n\t\t\t}\n\t\t\tif (scope !== this.scope) 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, controller.signal)\n\t\t\t\t: this.allSessionsLoader(onProgress, controller.signal));\n\t\t\tif (!isActive()) return;\n\n\t\t\tif (scope === \"current\") {\n\t\t\t\tthis.currentSessions = sessions;\n\t\t\t\tthis.currentLoad = null;\n\t\t\t} else {\n\t\t\t\tthis.allSessions = sessions;\n\t\t\t\tthis.allLoad = null;\n\t\t\t}\n\n\t\t\tif (scope !== this.scope) return;\n\t\t\tthis.header.setLoading(false);\n\t\t\tthis.sessionList.setSessions(sessions, showCwd);\n\t\t\tthis.requestRender();\n\t\t} catch (err) {\n\t\t\tif (!isActive()) return;\n\t\t\tif (scope === \"current\") {\n\t\t\t\tthis.currentLoad = null;\n\t\t\t\tthis.currentSessions = null;\n\t\t\t} else {\n\t\t\t\tthis.allLoad = null;\n\t\t\t\tthis.allSessions = null;\n\t\t\t}\n\t\t\tif (scope !== this.scope) 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\t\t\tthis.sessionList.setSessions([], showCwd);\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\tthis.cancelLoads();\n\t\tthis.currentSessions = null;\n\t\tthis.allSessions = null;\n\t\tawait this.loadScope(this.scope);\n\t}\n\n\tprivate toggleScope(): void {\n\t\tthis.scope = this.scope === \"current\" ? \"all\" : \"current\";\n\t\tconst sessions = this.scope === \"current\" ? this.currentSessions : this.allSessions;\n\t\tconst loading = (this.scope === \"current\" ? this.currentLoad : this.allLoad) !== null;\n\t\tthis.header.setScope(this.scope);\n\t\tthis.header.setLoading(loading);\n\t\tthis.sessionList.setSessions(sessions ?? [], this.scope === \"all\");\n\t\tthis.requestRender();\n\t\tif (sessions === null && !loading) void this.loadScope(this.scope);\n\t}\n\n\tgetSessionList(): SessionList {\n\t\treturn this.sessionList;\n\t}\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"settings-submenu.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/settings-submenu.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"settings-submenu.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/settings-submenu.ts"],"names":[],"mappings":"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"}
@@ -71,6 +71,8 @@ export class SelectSubmenu extends Container {
71
71
  const kb = getKeybindings();
72
72
  const isNav = kb.matches(data, "tui.select.up") ||
73
73
  kb.matches(data, "tui.select.down") ||
74
+ kb.matches(data, "tui.select.pageUp") ||
75
+ kb.matches(data, "tui.select.pageDown") ||
74
76
  kb.matches(data, "tui.select.confirm") ||
75
77
  kb.matches(data, "tui.select.cancel");
76
78
  if (isNav) {
@@ -1 +1 @@
1
- {"version":3,"file":"settings-submenu.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/settings-submenu.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\ttype Component,\n\tContainer,\n\tfuzzyFilter,\n\tgetKeybindings,\n\tInput,\n\ttype SelectItem,\n\tSelectList,\n\ttype SelectListLayoutOptions,\n\tSpacer,\n\tText,\n} from \"@earendil-works/pi-tui\";\nimport { getSelectListTheme, theme } from \"../theme/theme.ts\";\n\nconst SUBMENU_SELECT_LIST_LAYOUT: SelectListLayoutOptions = {\n\tminPrimaryColumnWidth: 12,\n\tmaxPrimaryColumnWidth: 32,\n};\n\nexport interface SelectSubmenuOptions {\n\t/** Enable type-to-search fuzzy filtering. */\n\tsearchable?: boolean;\n\t/** Override the select list layout (column widths). */\n\tlayout?: SelectListLayoutOptions;\n}\n\n/**\n * Single-step submenu that shows a titled select list.\n * With `searchable: true`, typing filters the list using fuzzy matching.\n */\nexport class SelectSubmenu extends Container {\n\tprivate selectList: SelectList;\n\tprivate listChildIndex: number;\n\tprivate allOptions: SelectItem[];\n\tprivate listLayout: SelectListLayoutOptions;\n\tprivate searchInput: Input | undefined;\n\tprivate onSelectCb: (value: string) => void;\n\tprivate onCancelCb: () => void;\n\tprivate onSelectionChangeCb?: (value: string) => void;\n\n\tconstructor(\n\t\ttitle: string,\n\t\tdescription: string,\n\t\toptions: SelectItem[],\n\t\tcurrentValue: string,\n\t\tonSelect: (value: string) => void,\n\t\tonCancel: () => void,\n\t\tonSelectionChange?: (value: string) => void,\n\t\tsubmenuOptions?: SelectSubmenuOptions,\n\t) {\n\t\tsuper();\n\n\t\tthis.allOptions = options;\n\t\tthis.listLayout = submenuOptions?.layout ?? SUBMENU_SELECT_LIST_LAYOUT;\n\t\tthis.onSelectCb = onSelect;\n\t\tthis.onCancelCb = onCancel;\n\t\tthis.onSelectionChangeCb = onSelectionChange;\n\n\t\t// Title\n\t\tthis.addChild(new Text(theme.bold(theme.fg(\"accent\", title)), 0, 0));\n\n\t\t// Description\n\t\tif (description) {\n\t\t\tthis.addChild(new Spacer(1));\n\t\t\tthis.addChild(new Text(theme.fg(\"muted\", description), 0, 0));\n\t\t}\n\n\t\t// Search input\n\t\tif (submenuOptions?.searchable) {\n\t\t\tthis.addChild(new Spacer(1));\n\t\t\tthis.searchInput = new Input();\n\t\t\tthis.searchInput.onSubmit = () => {\n\t\t\t\tthis.selectList.handleInput(\"\\r\");\n\t\t\t};\n\t\t\tthis.addChild(this.searchInput);\n\t\t}\n\n\t\t// Spacer\n\t\tthis.addChild(new Spacer(1));\n\n\t\t// Select list\n\t\tthis.selectList = this.buildSelectList(options, currentValue);\n\t\tthis.listChildIndex = this.children.length;\n\t\tthis.addChild(this.selectList);\n\n\t\t// Hint\n\t\tthis.addChild(new Spacer(1));\n\t\tconst hint = submenuOptions?.searchable\n\t\t\t? \" Type to filter \\u00b7 Enter to select \\u00b7 Esc to go back\"\n\t\t\t: \" Enter to select \\u00b7 Esc to go back\";\n\t\tthis.addChild(new Text(theme.fg(\"dim\", hint), 0, 0));\n\t}\n\n\tprivate buildSelectList(options: SelectItem[], preselect: string): SelectList {\n\t\tconst list = new SelectList(options, Math.min(options.length, 10), getSelectListTheme(), this.listLayout);\n\n\t\tconst idx = options.findIndex((o) => o.value === preselect);\n\t\tif (idx !== -1) list.setSelectedIndex(idx);\n\n\t\tlist.onSelect = (item) => this.onSelectCb(item.value);\n\t\tlist.onCancel = this.onCancelCb;\n\t\tif (this.onSelectionChangeCb) {\n\t\t\tconst cb = this.onSelectionChangeCb;\n\t\t\tlist.onSelectionChange = (item) => cb(item.value);\n\t\t}\n\n\t\treturn list;\n\t}\n\n\tprivate applyFilter(query: string): void {\n\t\tconst filtered = query\n\t\t\t? fuzzyFilter(this.allOptions, query, (item) => `${item.label} ${item.description ?? \"\"}`)\n\t\t\t: this.allOptions;\n\n\t\tconst newList = this.buildSelectList(filtered, \"\");\n\t\tthis.children[this.listChildIndex] = newList;\n\t\tthis.selectList = newList;\n\t}\n\n\thandleInput(data: string): void {\n\t\tif (this.searchInput) {\n\t\t\tconst kb = getKeybindings();\n\t\t\tconst isNav =\n\t\t\t\tkb.matches(data, \"tui.select.up\") ||\n\t\t\t\tkb.matches(data, \"tui.select.down\") ||\n\t\t\t\tkb.matches(data, \"tui.select.confirm\") ||\n\t\t\t\tkb.matches(data, \"tui.select.cancel\");\n\t\t\tif (isNav) {\n\t\t\t\tthis.selectList.handleInput(data);\n\t\t\t} else {\n\t\t\t\tthis.searchInput.handleInput(data);\n\t\t\t\tthis.applyFilter(this.searchInput.getValue());\n\t\t\t}\n\t\t} else {\n\t\t\tthis.selectList.handleInput(data);\n\t\t}\n\t}\n}\n\n// ============================================================================\n// SteppedSubmenu — reusable multi-step selector\n// ============================================================================\n\n/** One step in a {@link SteppedSubmenu}. */\nexport interface SteppedSubmenuStep {\n\t/** Unique key \\u2014 the selected value is stored in the result context under this key. */\n\tkey: string;\n\t/** Title shown at the top of the step. Receives prior selections. */\n\ttitle: string | ((context: Record<string, string>) => string);\n\t/** Description shown below the title. Receives prior selections. */\n\tdescription: string | ((context: Record<string, string>) => string);\n\t/** Build the option list for this step. Called fresh each time the step is shown. */\n\toptions: (context: Record<string, string>) => SelectItem[];\n\t/** Optionally pre-select a value when entering this step. */\n\tpreselect?: (context: Record<string, string>) => string | undefined;\n\t/** Enable type-to-search fuzzy filtering for this step. */\n\tsearchable?: boolean;\n\t/** Override the select list layout (column widths) for this step. */\n\tlayout?: SelectListLayoutOptions;\n}\n\ninterface SteppedSubmenuOptions {\n\t/** Start at this step index (0-based), skipping earlier steps. Requires initialContext for skipped keys. */\n\tstartAtStep?: number;\n\t/** Pre-fill selections for skipped steps. */\n\tinitialContext?: Record<string, string>;\n\t/** After completing the last step, loop back to step 0 instead of closing. */\n\tloop?: boolean;\n}\n\n/**\n * Generic N-step submenu built on top of {@link SelectSubmenu}.\n *\n * Each step's options can depend on prior selections via the shared context.\n * Esc goes back one step; Esc at step 0 cancels.\n * With `loop: true`, completing the final step invokes `onComplete` then returns to step 0.\n */\nexport class SteppedSubmenu extends Container {\n\tprivate readonly steps: SteppedSubmenuStep[];\n\tprivate readonly onComplete: (context: Record<string, string>) => void;\n\tprivate readonly onCancel: () => void;\n\tprivate readonly opts: SteppedSubmenuOptions;\n\tprivate activeComponent: Component;\n\tprivate context: Record<string, string>;\n\n\tconstructor(\n\t\tsteps: SteppedSubmenuStep[],\n\t\tonComplete: (context: Record<string, string>) => void,\n\t\tonCancel: () => void,\n\t\topts: SteppedSubmenuOptions = {},\n\t) {\n\t\tsuper();\n\t\tthis.steps = steps;\n\t\tthis.onComplete = onComplete;\n\t\tthis.onCancel = onCancel;\n\t\tthis.opts = opts;\n\t\tthis.context = { ...(opts.initialContext ?? {}) };\n\t\tthis.activeComponent = this.buildStep(opts.startAtStep ?? 0);\n\t}\n\n\tprivate buildStep(stepIndex: number): Component {\n\t\tconst step = this.steps[stepIndex];\n\t\tconst total = this.steps.length;\n\t\tconst stepLabel = total > 1 ? `Step ${stepIndex + 1}/${total} \\u00b7 ` : \"\";\n\n\t\tconst title = typeof step.title === \"function\" ? step.title(this.context) : step.title;\n\t\tconst desc = typeof step.description === \"function\" ? step.description(this.context) : step.description;\n\t\tconst items = step.options(this.context);\n\t\tconst preselect = step.preselect?.(this.context) ?? \"\";\n\n\t\treturn new SelectSubmenu(\n\t\t\ttitle,\n\t\t\t`${stepLabel}${desc}`,\n\t\t\titems,\n\t\t\tpreselect,\n\t\t\t(value) => {\n\t\t\t\tthis.context[step.key] = value;\n\n\t\t\t\tif (stepIndex < total - 1) {\n\t\t\t\t\t// Advance to next step\n\t\t\t\t\tthis.activeComponent = this.buildStep(stepIndex + 1);\n\t\t\t\t} else {\n\t\t\t\t\t// Final step \\u2014 deliver result\n\t\t\t\t\tthis.onComplete({ ...this.context });\n\n\t\t\t\t\tif (this.opts.loop) {\n\t\t\t\t\t\tthis.context = {};\n\t\t\t\t\t\tthis.activeComponent = this.buildStep(0);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.onCancel();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tif (stepIndex > 0) {\n\t\t\t\t\tdelete this.context[step.key];\n\t\t\t\t\tthis.activeComponent = this.buildStep(stepIndex - 1);\n\t\t\t\t} else {\n\t\t\t\t\tthis.onCancel();\n\t\t\t\t}\n\t\t\t},\n\t\t\tundefined,\n\t\t\tstep.searchable || step.layout ? { searchable: step.searchable, layout: step.layout } : undefined,\n\t\t);\n\t}\n\n\trender(width: number): string[] {\n\t\treturn this.activeComponent.render(width);\n\t}\n\n\thandleInput(data: string): void {\n\t\tthis.activeComponent.handleInput?.(data);\n\t}\n\n\tinvalidate(): void {\n\t\tthis.activeComponent.invalidate?.();\n\t}\n}\n"]}
1
+ {"version":3,"file":"settings-submenu.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/settings-submenu.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\ttype Component,\n\tContainer,\n\tfuzzyFilter,\n\tgetKeybindings,\n\tInput,\n\ttype SelectItem,\n\tSelectList,\n\ttype SelectListLayoutOptions,\n\tSpacer,\n\tText,\n} from \"@earendil-works/pi-tui\";\nimport { getSelectListTheme, theme } from \"../theme/theme.ts\";\n\nconst SUBMENU_SELECT_LIST_LAYOUT: SelectListLayoutOptions = {\n\tminPrimaryColumnWidth: 12,\n\tmaxPrimaryColumnWidth: 32,\n};\n\nexport interface SelectSubmenuOptions {\n\t/** Enable type-to-search fuzzy filtering. */\n\tsearchable?: boolean;\n\t/** Override the select list layout (column widths). */\n\tlayout?: SelectListLayoutOptions;\n}\n\n/**\n * Single-step submenu that shows a titled select list.\n * With `searchable: true`, typing filters the list using fuzzy matching.\n */\nexport class SelectSubmenu extends Container {\n\tprivate selectList: SelectList;\n\tprivate listChildIndex: number;\n\tprivate allOptions: SelectItem[];\n\tprivate listLayout: SelectListLayoutOptions;\n\tprivate searchInput: Input | undefined;\n\tprivate onSelectCb: (value: string) => void;\n\tprivate onCancelCb: () => void;\n\tprivate onSelectionChangeCb?: (value: string) => void;\n\n\tconstructor(\n\t\ttitle: string,\n\t\tdescription: string,\n\t\toptions: SelectItem[],\n\t\tcurrentValue: string,\n\t\tonSelect: (value: string) => void,\n\t\tonCancel: () => void,\n\t\tonSelectionChange?: (value: string) => void,\n\t\tsubmenuOptions?: SelectSubmenuOptions,\n\t) {\n\t\tsuper();\n\n\t\tthis.allOptions = options;\n\t\tthis.listLayout = submenuOptions?.layout ?? SUBMENU_SELECT_LIST_LAYOUT;\n\t\tthis.onSelectCb = onSelect;\n\t\tthis.onCancelCb = onCancel;\n\t\tthis.onSelectionChangeCb = onSelectionChange;\n\n\t\t// Title\n\t\tthis.addChild(new Text(theme.bold(theme.fg(\"accent\", title)), 0, 0));\n\n\t\t// Description\n\t\tif (description) {\n\t\t\tthis.addChild(new Spacer(1));\n\t\t\tthis.addChild(new Text(theme.fg(\"muted\", description), 0, 0));\n\t\t}\n\n\t\t// Search input\n\t\tif (submenuOptions?.searchable) {\n\t\t\tthis.addChild(new Spacer(1));\n\t\t\tthis.searchInput = new Input();\n\t\t\tthis.searchInput.onSubmit = () => {\n\t\t\t\tthis.selectList.handleInput(\"\\r\");\n\t\t\t};\n\t\t\tthis.addChild(this.searchInput);\n\t\t}\n\n\t\t// Spacer\n\t\tthis.addChild(new Spacer(1));\n\n\t\t// Select list\n\t\tthis.selectList = this.buildSelectList(options, currentValue);\n\t\tthis.listChildIndex = this.children.length;\n\t\tthis.addChild(this.selectList);\n\n\t\t// Hint\n\t\tthis.addChild(new Spacer(1));\n\t\tconst hint = submenuOptions?.searchable\n\t\t\t? \" Type to filter \\u00b7 Enter to select \\u00b7 Esc to go back\"\n\t\t\t: \" Enter to select \\u00b7 Esc to go back\";\n\t\tthis.addChild(new Text(theme.fg(\"dim\", hint), 0, 0));\n\t}\n\n\tprivate buildSelectList(options: SelectItem[], preselect: string): SelectList {\n\t\tconst list = new SelectList(options, Math.min(options.length, 10), getSelectListTheme(), this.listLayout);\n\n\t\tconst idx = options.findIndex((o) => o.value === preselect);\n\t\tif (idx !== -1) list.setSelectedIndex(idx);\n\n\t\tlist.onSelect = (item) => this.onSelectCb(item.value);\n\t\tlist.onCancel = this.onCancelCb;\n\t\tif (this.onSelectionChangeCb) {\n\t\t\tconst cb = this.onSelectionChangeCb;\n\t\t\tlist.onSelectionChange = (item) => cb(item.value);\n\t\t}\n\n\t\treturn list;\n\t}\n\n\tprivate applyFilter(query: string): void {\n\t\tconst filtered = query\n\t\t\t? fuzzyFilter(this.allOptions, query, (item) => `${item.label} ${item.description ?? \"\"}`)\n\t\t\t: this.allOptions;\n\n\t\tconst newList = this.buildSelectList(filtered, \"\");\n\t\tthis.children[this.listChildIndex] = newList;\n\t\tthis.selectList = newList;\n\t}\n\n\thandleInput(data: string): void {\n\t\tif (this.searchInput) {\n\t\t\tconst kb = getKeybindings();\n\t\t\tconst isNav =\n\t\t\t\tkb.matches(data, \"tui.select.up\") ||\n\t\t\t\tkb.matches(data, \"tui.select.down\") ||\n\t\t\t\tkb.matches(data, \"tui.select.pageUp\") ||\n\t\t\t\tkb.matches(data, \"tui.select.pageDown\") ||\n\t\t\t\tkb.matches(data, \"tui.select.confirm\") ||\n\t\t\t\tkb.matches(data, \"tui.select.cancel\");\n\t\t\tif (isNav) {\n\t\t\t\tthis.selectList.handleInput(data);\n\t\t\t} else {\n\t\t\t\tthis.searchInput.handleInput(data);\n\t\t\t\tthis.applyFilter(this.searchInput.getValue());\n\t\t\t}\n\t\t} else {\n\t\t\tthis.selectList.handleInput(data);\n\t\t}\n\t}\n}\n\n// ============================================================================\n// SteppedSubmenu — reusable multi-step selector\n// ============================================================================\n\n/** One step in a {@link SteppedSubmenu}. */\nexport interface SteppedSubmenuStep {\n\t/** Unique key \\u2014 the selected value is stored in the result context under this key. */\n\tkey: string;\n\t/** Title shown at the top of the step. Receives prior selections. */\n\ttitle: string | ((context: Record<string, string>) => string);\n\t/** Description shown below the title. Receives prior selections. */\n\tdescription: string | ((context: Record<string, string>) => string);\n\t/** Build the option list for this step. Called fresh each time the step is shown. */\n\toptions: (context: Record<string, string>) => SelectItem[];\n\t/** Optionally pre-select a value when entering this step. */\n\tpreselect?: (context: Record<string, string>) => string | undefined;\n\t/** Enable type-to-search fuzzy filtering for this step. */\n\tsearchable?: boolean;\n\t/** Override the select list layout (column widths) for this step. */\n\tlayout?: SelectListLayoutOptions;\n}\n\ninterface SteppedSubmenuOptions {\n\t/** Start at this step index (0-based), skipping earlier steps. Requires initialContext for skipped keys. */\n\tstartAtStep?: number;\n\t/** Pre-fill selections for skipped steps. */\n\tinitialContext?: Record<string, string>;\n\t/** After completing the last step, loop back to step 0 instead of closing. */\n\tloop?: boolean;\n}\n\n/**\n * Generic N-step submenu built on top of {@link SelectSubmenu}.\n *\n * Each step's options can depend on prior selections via the shared context.\n * Esc goes back one step; Esc at step 0 cancels.\n * With `loop: true`, completing the final step invokes `onComplete` then returns to step 0.\n */\nexport class SteppedSubmenu extends Container {\n\tprivate readonly steps: SteppedSubmenuStep[];\n\tprivate readonly onComplete: (context: Record<string, string>) => void;\n\tprivate readonly onCancel: () => void;\n\tprivate readonly opts: SteppedSubmenuOptions;\n\tprivate activeComponent: Component;\n\tprivate context: Record<string, string>;\n\n\tconstructor(\n\t\tsteps: SteppedSubmenuStep[],\n\t\tonComplete: (context: Record<string, string>) => void,\n\t\tonCancel: () => void,\n\t\topts: SteppedSubmenuOptions = {},\n\t) {\n\t\tsuper();\n\t\tthis.steps = steps;\n\t\tthis.onComplete = onComplete;\n\t\tthis.onCancel = onCancel;\n\t\tthis.opts = opts;\n\t\tthis.context = { ...(opts.initialContext ?? {}) };\n\t\tthis.activeComponent = this.buildStep(opts.startAtStep ?? 0);\n\t}\n\n\tprivate buildStep(stepIndex: number): Component {\n\t\tconst step = this.steps[stepIndex];\n\t\tconst total = this.steps.length;\n\t\tconst stepLabel = total > 1 ? `Step ${stepIndex + 1}/${total} \\u00b7 ` : \"\";\n\n\t\tconst title = typeof step.title === \"function\" ? step.title(this.context) : step.title;\n\t\tconst desc = typeof step.description === \"function\" ? step.description(this.context) : step.description;\n\t\tconst items = step.options(this.context);\n\t\tconst preselect = step.preselect?.(this.context) ?? \"\";\n\n\t\treturn new SelectSubmenu(\n\t\t\ttitle,\n\t\t\t`${stepLabel}${desc}`,\n\t\t\titems,\n\t\t\tpreselect,\n\t\t\t(value) => {\n\t\t\t\tthis.context[step.key] = value;\n\n\t\t\t\tif (stepIndex < total - 1) {\n\t\t\t\t\t// Advance to next step\n\t\t\t\t\tthis.activeComponent = this.buildStep(stepIndex + 1);\n\t\t\t\t} else {\n\t\t\t\t\t// Final step \\u2014 deliver result\n\t\t\t\t\tthis.onComplete({ ...this.context });\n\n\t\t\t\t\tif (this.opts.loop) {\n\t\t\t\t\t\tthis.context = {};\n\t\t\t\t\t\tthis.activeComponent = this.buildStep(0);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.onCancel();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tif (stepIndex > 0) {\n\t\t\t\t\tdelete this.context[step.key];\n\t\t\t\t\tthis.activeComponent = this.buildStep(stepIndex - 1);\n\t\t\t\t} else {\n\t\t\t\t\tthis.onCancel();\n\t\t\t\t}\n\t\t\t},\n\t\t\tundefined,\n\t\t\tstep.searchable || step.layout ? { searchable: step.searchable, layout: step.layout } : undefined,\n\t\t);\n\t}\n\n\trender(width: number): string[] {\n\t\treturn this.activeComponent.render(width);\n\t}\n\n\thandleInput(data: string): void {\n\t\tthis.activeComponent.handleInput?.(data);\n\t}\n\n\tinvalidate(): void {\n\t\tthis.activeComponent.invalidate?.();\n\t}\n}\n"]}
@@ -36,9 +36,12 @@ export declare class ToolExecutionComponent extends Container {
36
36
  private cwd;
37
37
  private executionStarted;
38
38
  private argsComplete;
39
+ /** `updateArgs()` ran since the last display update; the next render applies it. */
40
+ private argsPending;
39
41
  private result?;
40
42
  private hideComponent;
41
43
  private disposed;
44
+ private readonly disposers;
42
45
  constructor(toolName: string, toolCallId: string, args: any, options: ToolExecutionOptions | undefined, toolDefinition: ToolRenderers | ToolDefinition<any, any, any> | undefined, ui: TUI, cwd: string);
43
46
  private getShell;
44
47
  private getCallRenderer;
@@ -55,6 +58,10 @@ export declare class ToolExecutionComponent extends Container {
55
58
  private createResultFallback;
56
59
  private hidesCollapsedResult;
57
60
  private createResultRegion;
61
+ /**
62
+ * Show new partial arguments. Applied at the next render, so a call streaming many argument deltas between two
63
+ * frames runs its renderer once per frame, not once per delta (#9265).
64
+ */
58
65
  updateArgs(args: any): void;
59
66
  markExecutionStarted(): void;
60
67
  setArgsComplete(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"tool-execution.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/tool-execution.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tool-execution.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/tool-execution.ts"],"names":[],"mappings":"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"}