@compilr-dev/cli 0.5.0 → 0.5.1

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 (591) hide show
  1. package/README.md +236 -68
  2. package/dist/.tsbuildinfo.app +1 -0
  3. package/dist/.tsbuildinfo.data +1 -0
  4. package/dist/.tsbuildinfo.domain +1 -0
  5. package/dist/.tsbuildinfo.foundation +1 -0
  6. package/dist/agent.d.ts +61 -4
  7. package/dist/agent.js +241 -245
  8. package/dist/anchors/index.d.ts +1 -1
  9. package/dist/anchors/index.js +1 -1
  10. package/dist/anchors/project-anchors.d.ts +2 -2
  11. package/dist/anchors/project-anchors.js +1 -1
  12. package/dist/auth/api-client.d.ts +124 -0
  13. package/dist/auth/api-client.js +261 -0
  14. package/dist/auth/index.d.ts +172 -0
  15. package/dist/auth/index.js +545 -0
  16. package/dist/auth/storage.d.ts +52 -0
  17. package/dist/auth/storage.js +118 -0
  18. package/dist/changelog/index.d.ts +16 -0
  19. package/dist/changelog/index.js +24 -0
  20. package/dist/changelog/releases.d.ts +17 -0
  21. package/dist/changelog/releases.js +63 -0
  22. package/dist/commands-v2/handlers/auth.d.ts +10 -0
  23. package/dist/commands-v2/handlers/auth.js +118 -0
  24. package/dist/commands-v2/handlers/background.d.ts +14 -0
  25. package/dist/commands-v2/handlers/background.js +276 -0
  26. package/dist/commands-v2/handlers/context.js +266 -81
  27. package/dist/commands-v2/handlers/core.d.ts +1 -0
  28. package/dist/commands-v2/handlers/core.js +133 -8
  29. package/dist/commands-v2/handlers/debug.js +18 -0
  30. package/dist/commands-v2/handlers/delegations.d.ts +8 -0
  31. package/dist/commands-v2/handlers/delegations.js +29 -0
  32. package/dist/commands-v2/handlers/files.d.ts +8 -0
  33. package/dist/commands-v2/handlers/files.js +162 -0
  34. package/dist/commands-v2/handlers/filter.d.ts +9 -0
  35. package/dist/commands-v2/handlers/filter.js +130 -0
  36. package/dist/commands-v2/handlers/games.d.ts +7 -0
  37. package/dist/commands-v2/handlers/games.js +57 -0
  38. package/dist/commands-v2/handlers/index.d.ts +13 -0
  39. package/dist/commands-v2/handlers/index.js +39 -0
  40. package/dist/commands-v2/handlers/mcp.d.ts +8 -0
  41. package/dist/commands-v2/handlers/mcp.js +39 -0
  42. package/dist/commands-v2/handlers/notifications.d.ts +9 -0
  43. package/dist/commands-v2/handlers/notifications.js +34 -0
  44. package/dist/commands-v2/handlers/project.js +244 -23
  45. package/dist/commands-v2/handlers/reset.d.ts +11 -0
  46. package/dist/commands-v2/handlers/reset.js +118 -0
  47. package/dist/commands-v2/handlers/session.d.ts +161 -0
  48. package/dist/commands-v2/handlers/session.js +805 -0
  49. package/dist/commands-v2/handlers/settings.d.ts +2 -0
  50. package/dist/commands-v2/handlers/settings.js +217 -35
  51. package/dist/commands-v2/handlers/tasks.d.ts +5 -0
  52. package/dist/commands-v2/handlers/tasks.js +36 -0
  53. package/dist/commands-v2/handlers/team.d.ts +9 -0
  54. package/dist/commands-v2/handlers/team.js +549 -0
  55. package/dist/commands-v2/handlers/terminals.d.ts +9 -0
  56. package/dist/commands-v2/handlers/terminals.js +34 -0
  57. package/dist/commands-v2/index.d.ts +3 -2
  58. package/dist/commands-v2/index.js +4 -1
  59. package/dist/commands-v2/registry.d.ts +15 -0
  60. package/dist/commands-v2/registry.js +34 -0
  61. package/dist/commands-v2/types.d.ts +81 -3
  62. package/dist/commands.js +13 -0
  63. package/dist/compilr-diff-companion.vsix +0 -0
  64. package/dist/db/index.js +98 -4
  65. package/dist/db/repositories/document-repository.d.ts +2 -0
  66. package/dist/db/repositories/document-repository.js +5 -1
  67. package/dist/db/repositories/index.d.ts +2 -0
  68. package/dist/db/repositories/index.js +1 -0
  69. package/dist/db/repositories/plan-repository.d.ts +101 -0
  70. package/dist/db/repositories/plan-repository.js +275 -0
  71. package/dist/db/repositories/project-repository.d.ts +6 -0
  72. package/dist/db/repositories/project-repository.js +41 -0
  73. package/dist/db/repositories/work-item-repository.d.ts +15 -0
  74. package/dist/db/repositories/work-item-repository.js +69 -4
  75. package/dist/db/schema.d.ts +40 -3
  76. package/dist/db/schema.js +66 -3
  77. package/dist/episodes/index.d.ts +20 -0
  78. package/dist/episodes/index.js +27 -0
  79. package/dist/episodes/recorder.d.ts +51 -0
  80. package/dist/episodes/recorder.js +195 -0
  81. package/dist/episodes/significant-work.d.ts +21 -0
  82. package/dist/episodes/significant-work.js +56 -0
  83. package/dist/episodes/store.d.ts +38 -0
  84. package/dist/episodes/store.js +199 -0
  85. package/dist/episodes/types.d.ts +35 -0
  86. package/dist/episodes/types.js +6 -0
  87. package/dist/episodes/work-at-risk.d.ts +12 -0
  88. package/dist/episodes/work-at-risk.js +38 -0
  89. package/dist/episodes/work-summary-anchor.d.ts +23 -0
  90. package/dist/episodes/work-summary-anchor.js +73 -0
  91. package/dist/games/coins.d.ts +66 -0
  92. package/dist/games/coins.js +165 -0
  93. package/dist/games/game-base.d.ts +84 -0
  94. package/dist/games/game-base.js +204 -0
  95. package/dist/games/index.d.ts +16 -0
  96. package/dist/games/index.js +49 -0
  97. package/dist/games/scores.d.ts +69 -0
  98. package/dist/games/scores.js +191 -0
  99. package/dist/games/tetris/board.d.ts +59 -0
  100. package/dist/games/tetris/board.js +170 -0
  101. package/dist/games/tetris/index.d.ts +109 -0
  102. package/dist/games/tetris/index.js +610 -0
  103. package/dist/games/tetris/pieces.d.ts +44 -0
  104. package/dist/games/tetris/pieces.js +271 -0
  105. package/dist/games/tetris/renderer.d.ts +26 -0
  106. package/dist/games/tetris/renderer.js +77 -0
  107. package/dist/guide/guide-content.d.ts +23 -0
  108. package/dist/guide/guide-content.js +196 -0
  109. package/dist/guide/index.d.ts +8 -0
  110. package/dist/guide/index.js +7 -0
  111. package/dist/guide/shared-content.d.ts +37 -0
  112. package/dist/guide/shared-content.js +1272 -0
  113. package/dist/guide/tutorial-helpers.d.ts +57 -0
  114. package/dist/guide/tutorial-helpers.js +147 -0
  115. package/dist/handlers/ask-user-handlers.d.ts +32 -0
  116. package/dist/handlers/ask-user-handlers.js +104 -0
  117. package/dist/handlers/delegation-handlers.d.ts +34 -0
  118. package/dist/handlers/delegation-handlers.js +291 -0
  119. package/dist/handlers/permission-handler.d.ts +30 -0
  120. package/dist/handlers/permission-handler.js +205 -0
  121. package/dist/index.d.ts +11 -1
  122. package/dist/index.js +448 -271
  123. package/dist/input-handlers/memory-handler.d.ts +1 -1
  124. package/dist/input-handlers/memory-handler.js +2 -1
  125. package/dist/models/index.d.ts +10 -0
  126. package/dist/models/index.js +12 -0
  127. package/dist/models/model-registry.d.ts +38 -0
  128. package/dist/models/model-registry.js +69 -0
  129. package/dist/models/model-tiers.d.ts +28 -0
  130. package/dist/models/model-tiers.js +71 -0
  131. package/dist/models/model-validation.d.ts +25 -0
  132. package/dist/models/model-validation.js +291 -0
  133. package/dist/models/ollama-models.d.ts +73 -0
  134. package/dist/models/ollama-models.js +178 -0
  135. package/dist/models/provider-types.d.ts +6 -0
  136. package/dist/models/provider-types.js +1 -0
  137. package/dist/models/providers.d.ts +35 -0
  138. package/dist/models/providers.js +58 -0
  139. package/dist/models/types.d.ts +4 -0
  140. package/dist/models/types.js +4 -0
  141. package/dist/multi-agent/activity.d.ts +21 -0
  142. package/dist/multi-agent/activity.js +34 -0
  143. package/dist/multi-agent/agent-selection.d.ts +55 -0
  144. package/dist/multi-agent/agent-selection.js +90 -0
  145. package/dist/multi-agent/artifacts.d.ts +197 -0
  146. package/dist/multi-agent/artifacts.js +379 -0
  147. package/dist/multi-agent/checkpointer.d.ts +138 -0
  148. package/dist/multi-agent/checkpointer.js +471 -0
  149. package/dist/multi-agent/collision-utils.d.ts +16 -0
  150. package/dist/multi-agent/collision-utils.js +28 -0
  151. package/dist/multi-agent/context-resolver.d.ts +97 -0
  152. package/dist/multi-agent/context-resolver.js +316 -0
  153. package/dist/multi-agent/custom-agents.d.ts +83 -0
  154. package/dist/multi-agent/custom-agents.js +227 -0
  155. package/dist/multi-agent/delegation-tracker.d.ts +157 -0
  156. package/dist/multi-agent/delegation-tracker.js +243 -0
  157. package/dist/multi-agent/file-lock-hook.d.ts +29 -0
  158. package/dist/multi-agent/file-lock-hook.js +97 -0
  159. package/dist/multi-agent/file-locks.d.ts +58 -0
  160. package/dist/multi-agent/file-locks.js +194 -0
  161. package/dist/multi-agent/index.d.ts +24 -0
  162. package/dist/multi-agent/index.js +30 -0
  163. package/dist/multi-agent/mention-parser.d.ts +64 -0
  164. package/dist/multi-agent/mention-parser.js +146 -0
  165. package/dist/multi-agent/notification-manager.d.ts +84 -0
  166. package/dist/multi-agent/notification-manager.js +224 -0
  167. package/dist/multi-agent/pending-requests.d.ts +122 -0
  168. package/dist/multi-agent/pending-requests.js +155 -0
  169. package/dist/multi-agent/session-registry.d.ts +139 -0
  170. package/dist/multi-agent/session-registry.js +514 -0
  171. package/dist/multi-agent/shared-context.d.ts +293 -0
  172. package/dist/multi-agent/shared-context.js +671 -0
  173. package/dist/multi-agent/skill-requirements.d.ts +66 -0
  174. package/dist/multi-agent/skill-requirements.js +178 -0
  175. package/dist/multi-agent/task-assignment.d.ts +69 -0
  176. package/dist/multi-agent/task-assignment.js +123 -0
  177. package/dist/multi-agent/task-suggestion.d.ts +31 -0
  178. package/dist/multi-agent/task-suggestion.js +72 -0
  179. package/dist/multi-agent/team-agent.d.ts +201 -0
  180. package/dist/multi-agent/team-agent.js +488 -0
  181. package/dist/multi-agent/team.d.ts +286 -0
  182. package/dist/multi-agent/team.js +610 -0
  183. package/dist/multi-agent/tool-config.d.ts +110 -0
  184. package/dist/multi-agent/tool-config.js +661 -0
  185. package/dist/multi-agent/types.d.ts +211 -0
  186. package/dist/multi-agent/types.js +617 -0
  187. package/dist/prompts/plan-mode-prompt.d.ts +11 -0
  188. package/dist/prompts/plan-mode-prompt.js +95 -0
  189. package/dist/repl-helpers.js +3 -2
  190. package/dist/repl-v2.d.ts +401 -2
  191. package/dist/repl-v2.js +2577 -65
  192. package/dist/session/index.d.ts +6 -0
  193. package/dist/session/index.js +6 -0
  194. package/dist/session/project-session-manager.d.ts +158 -0
  195. package/dist/session/project-session-manager.js +650 -0
  196. package/dist/settings/index.d.ts +133 -13
  197. package/dist/settings/index.js +329 -24
  198. package/dist/settings/mcp-config.d.ts +76 -0
  199. package/dist/settings/mcp-config.js +143 -0
  200. package/dist/settings/paths.d.ts +4 -0
  201. package/dist/settings/paths.js +6 -0
  202. package/dist/shared-handlers.d.ts +62 -0
  203. package/dist/shared-handlers.js +48 -0
  204. package/dist/system-prompt/builder.d.ts +5 -0
  205. package/dist/system-prompt/builder.js +4 -0
  206. package/dist/system-prompt/index.d.ts +18 -0
  207. package/dist/system-prompt/index.js +18 -0
  208. package/dist/system-prompt/modules.d.ts +5 -0
  209. package/dist/system-prompt/modules.js +4 -0
  210. package/dist/tabbed-menu.js +2 -1
  211. package/dist/templates/compilr-md-import.d.ts +16 -0
  212. package/dist/templates/compilr-md-import.js +241 -0
  213. package/dist/templates/compilr-md.js +10 -61
  214. package/dist/templates/config-json.d.ts +1 -25
  215. package/dist/templates/index.d.ts +2 -0
  216. package/dist/templates/index.js +34 -73
  217. package/dist/tool-names.d.ts +108 -0
  218. package/dist/tool-names.js +227 -0
  219. package/dist/tools/anchor-tools.d.ts +4 -4
  220. package/dist/tools/anchor-tools.js +1 -1
  221. package/dist/tools/artifact-tools.d.ts +42 -0
  222. package/dist/tools/artifact-tools.js +328 -0
  223. package/dist/tools/ask-user-simple.d.ts +1 -1
  224. package/dist/tools/ask-user-simple.js +2 -1
  225. package/dist/tools/ask-user.d.ts +1 -1
  226. package/dist/tools/ask-user.js +2 -1
  227. package/dist/tools/backlog-wrappers.d.ts +5 -3
  228. package/dist/tools/backlog-wrappers.js +16 -1
  229. package/dist/tools/backlog.d.ts +2 -2
  230. package/dist/tools/backlog.js +1 -1
  231. package/dist/tools/db-tools.d.ts +8 -61
  232. package/dist/tools/db-tools.js +8 -13
  233. package/dist/tools/delegate-background.d.ts +27 -0
  234. package/dist/tools/delegate-background.js +115 -0
  235. package/dist/tools/delegate.d.ts +22 -0
  236. package/dist/tools/delegate.js +97 -0
  237. package/dist/tools/delegation-status.d.ts +16 -0
  238. package/dist/tools/delegation-status.js +128 -0
  239. package/dist/tools/document-db.d.ts +5 -5
  240. package/dist/tools/document-db.js +1 -1
  241. package/dist/tools/guide-tool.d.ts +12 -0
  242. package/dist/tools/guide-tool.js +59 -0
  243. package/dist/tools/handoff.d.ts +25 -0
  244. package/dist/tools/handoff.js +99 -0
  245. package/dist/tools/meta-tools.d.ts +26 -0
  246. package/dist/tools/meta-tools.js +47 -0
  247. package/dist/tools/plan-tools.d.ts +54 -0
  248. package/dist/tools/plan-tools.js +338 -0
  249. package/dist/tools/platform-adapter.d.ts +29 -0
  250. package/dist/tools/platform-adapter.js +394 -0
  251. package/dist/tools/project-db.d.ts +5 -73
  252. package/dist/tools/project-db.js +5 -336
  253. package/dist/tools/recall-work-tool.d.ts +18 -0
  254. package/dist/tools/recall-work-tool.js +82 -0
  255. package/dist/tools/workitem-db.d.ts +43 -11
  256. package/dist/tools/workitem-db.js +186 -5
  257. package/dist/tools.d.ts +67 -2
  258. package/dist/tools.js +237 -47
  259. package/dist/ui/autocomplete-controller.d.ts +42 -0
  260. package/dist/ui/autocomplete-controller.js +384 -0
  261. package/dist/ui/base/index.d.ts +1 -1
  262. package/dist/ui/base/index.js +1 -1
  263. package/dist/ui/base/overlay-base-v2.d.ts +10 -0
  264. package/dist/ui/base/overlay-base-v2.js +14 -0
  265. package/dist/ui/base/render-utils.d.ts +19 -0
  266. package/dist/ui/base/render-utils.js +25 -0
  267. package/dist/ui/base/tabbed-list-overlay-v2.d.ts +16 -1
  268. package/dist/ui/base/tabbed-list-overlay-v2.js +19 -1
  269. package/dist/ui/constants/labels.d.ts +14 -0
  270. package/dist/ui/constants/labels.js +51 -0
  271. package/dist/ui/conversation-store.d.ts +55 -0
  272. package/dist/ui/conversation-store.js +107 -0
  273. package/dist/ui/conversation.js +11 -13
  274. package/dist/ui/diff.d.ts +7 -1
  275. package/dist/ui/diff.js +85 -48
  276. package/dist/ui/ephemeral.js +3 -9
  277. package/dist/ui/file-autocomplete.d.ts +24 -0
  278. package/dist/ui/file-autocomplete.js +56 -0
  279. package/dist/ui/footer-renderer.d.ts +69 -0
  280. package/dist/ui/footer-renderer.js +431 -0
  281. package/dist/ui/footer.d.ts +74 -7
  282. package/dist/ui/footer.js +173 -16
  283. package/dist/ui/input-controller.d.ts +51 -0
  284. package/dist/ui/input-controller.js +176 -0
  285. package/dist/ui/input-prompt.d.ts +19 -0
  286. package/dist/ui/input-prompt.js +206 -14
  287. package/dist/ui/keyboard-handler.d.ts +57 -0
  288. package/dist/ui/keyboard-handler.js +557 -0
  289. package/dist/ui/live-region-facade.d.ts +42 -0
  290. package/dist/ui/live-region-facade.js +205 -0
  291. package/dist/ui/live-region.d.ts +0 -4
  292. package/dist/ui/live-region.js +6 -14
  293. package/dist/ui/mascot/renderer.d.ts +1 -1
  294. package/dist/ui/mascot/renderer.js +37 -2
  295. package/dist/ui/overlay/data/tutorial-content.d.ts +9 -0
  296. package/dist/ui/overlay/data/tutorial-content.js +9 -0
  297. package/dist/ui/overlay/data/tutorial-registry.d.ts +12 -0
  298. package/dist/ui/overlay/data/tutorial-registry.js +116 -0
  299. package/dist/ui/overlay/data/tutorial-types.d.ts +35 -0
  300. package/dist/ui/overlay/data/tutorial-types.js +6 -0
  301. package/dist/ui/overlay/data/tutorials/basics/first-conversation.d.ts +7 -0
  302. package/dist/ui/overlay/data/tutorials/basics/first-conversation.js +220 -0
  303. package/dist/ui/overlay/data/tutorials/basics/first-project.d.ts +7 -0
  304. package/dist/ui/overlay/data/tutorials/basics/first-project.js +284 -0
  305. package/dist/ui/overlay/data/tutorials/basics/navigation.d.ts +8 -0
  306. package/dist/ui/overlay/data/tutorials/basics/navigation.js +22 -0
  307. package/dist/ui/overlay/data/tutorials/basics/welcome.d.ts +7 -0
  308. package/dist/ui/overlay/data/tutorials/basics/welcome.js +174 -0
  309. package/dist/ui/overlay/data/tutorials/config/context-management.d.ts +7 -0
  310. package/dist/ui/overlay/data/tutorials/config/context-management.js +158 -0
  311. package/dist/ui/overlay/data/tutorials/config/mcp-servers.d.ts +8 -0
  312. package/dist/ui/overlay/data/tutorials/config/mcp-servers.js +155 -0
  313. package/dist/ui/overlay/data/tutorials/config/model-selection.d.ts +7 -0
  314. package/dist/ui/overlay/data/tutorials/config/model-selection.js +162 -0
  315. package/dist/ui/overlay/data/tutorials/config/permissions-safety.d.ts +7 -0
  316. package/dist/ui/overlay/data/tutorials/config/permissions-safety.js +163 -0
  317. package/dist/ui/overlay/data/tutorials/config/settings-config.d.ts +7 -0
  318. package/dist/ui/overlay/data/tutorials/config/settings-config.js +166 -0
  319. package/dist/ui/overlay/data/tutorials/planning/arch.d.ts +7 -0
  320. package/dist/ui/overlay/data/tutorials/planning/arch.js +168 -0
  321. package/dist/ui/overlay/data/tutorials/planning/backlog.d.ts +7 -0
  322. package/dist/ui/overlay/data/tutorials/planning/backlog.js +103 -0
  323. package/dist/ui/overlay/data/tutorials/planning/build.d.ts +7 -0
  324. package/dist/ui/overlay/data/tutorials/planning/build.js +173 -0
  325. package/dist/ui/overlay/data/tutorials/planning/design.d.ts +7 -0
  326. package/dist/ui/overlay/data/tutorials/planning/design.js +205 -0
  327. package/dist/ui/overlay/data/tutorials/planning/docs.d.ts +7 -0
  328. package/dist/ui/overlay/data/tutorials/planning/docs.js +143 -0
  329. package/dist/ui/overlay/data/tutorials/planning/prd.d.ts +7 -0
  330. package/dist/ui/overlay/data/tutorials/planning/prd.js +173 -0
  331. package/dist/ui/overlay/data/tutorials/planning/scaffold.d.ts +7 -0
  332. package/dist/ui/overlay/data/tutorials/planning/scaffold.js +164 -0
  333. package/dist/ui/overlay/data/tutorials/planning/sketch.d.ts +7 -0
  334. package/dist/ui/overlay/data/tutorials/planning/sketch.js +58 -0
  335. package/dist/ui/overlay/data/tutorials/projects/anchors.d.ts +7 -0
  336. package/dist/ui/overlay/data/tutorials/projects/anchors.js +248 -0
  337. package/dist/ui/overlay/data/tutorials/projects/import-project.d.ts +7 -0
  338. package/dist/ui/overlay/data/tutorials/projects/import-project.js +172 -0
  339. package/dist/ui/overlay/data/tutorials/projects/managing-projects.d.ts +8 -0
  340. package/dist/ui/overlay/data/tutorials/projects/managing-projects.js +212 -0
  341. package/dist/ui/overlay/data/tutorials/projects/new-project.d.ts +7 -0
  342. package/dist/ui/overlay/data/tutorials/projects/new-project.js +251 -0
  343. package/dist/ui/overlay/data/tutorials/projects/session-management.d.ts +7 -0
  344. package/dist/ui/overlay/data/tutorials/projects/session-management.js +169 -0
  345. package/dist/ui/overlay/data/tutorials/teams/background-execution.d.ts +7 -0
  346. package/dist/ui/overlay/data/tutorials/teams/background-execution.js +171 -0
  347. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.d.ts +8 -0
  348. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.js +147 -0
  349. package/dist/ui/overlay/data/tutorials/teams/task-assignment.d.ts +7 -0
  350. package/dist/ui/overlay/data/tutorials/teams/task-assignment.js +204 -0
  351. package/dist/ui/overlay/data/tutorials/teams/team-overview.d.ts +7 -0
  352. package/dist/ui/overlay/data/tutorials/teams/team-overview.js +165 -0
  353. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.d.ts +7 -0
  354. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.js +172 -0
  355. package/dist/ui/overlay/impl/agents-overlay-v2.js +6 -17
  356. package/dist/ui/overlay/impl/anchors-overlay-v2.js +30 -64
  357. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.d.ts +43 -0
  358. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.js +232 -0
  359. package/dist/ui/overlay/impl/artifact-overlay-v2.d.ts +40 -0
  360. package/dist/ui/overlay/impl/artifact-overlay-v2.js +115 -0
  361. package/dist/ui/overlay/impl/ask-user-overlay-v2.js +2 -5
  362. package/dist/ui/overlay/impl/background-overlay-v2.d.ts +40 -0
  363. package/dist/ui/overlay/impl/background-overlay-v2.js +147 -0
  364. package/dist/ui/overlay/impl/backlog-overlay-v2.d.ts +4 -1
  365. package/dist/ui/overlay/impl/backlog-overlay-v2.js +55 -16
  366. package/dist/ui/overlay/impl/changelog-overlay-v2.d.ts +44 -0
  367. package/dist/ui/overlay/impl/changelog-overlay-v2.js +165 -0
  368. package/dist/ui/overlay/impl/commands-overlay-v2.js +4 -6
  369. package/dist/ui/overlay/impl/config-overlay-v2.d.ts +12 -1
  370. package/dist/ui/overlay/impl/config-overlay-v2.js +164 -100
  371. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.d.ts +83 -0
  372. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.js +711 -0
  373. package/dist/ui/overlay/impl/dashboard-overlay-v2.d.ts +2 -0
  374. package/dist/ui/overlay/impl/dashboard-overlay-v2.js +26 -3
  375. package/dist/ui/overlay/impl/delegations-overlay-v2.d.ts +28 -0
  376. package/dist/ui/overlay/impl/delegations-overlay-v2.js +279 -0
  377. package/dist/ui/overlay/impl/docs-overlay-v2.js +12 -9
  378. package/dist/ui/overlay/impl/document-detail-overlay-v2.d.ts +7 -0
  379. package/dist/ui/overlay/impl/document-detail-overlay-v2.js +119 -78
  380. package/dist/ui/overlay/impl/filter-overlay-v2.d.ts +41 -0
  381. package/dist/ui/overlay/impl/filter-overlay-v2.js +110 -0
  382. package/dist/ui/overlay/impl/games-overlay-v2.d.ts +31 -0
  383. package/dist/ui/overlay/impl/games-overlay-v2.js +135 -0
  384. package/dist/ui/overlay/impl/help-overlay-v2.d.ts +26 -3
  385. package/dist/ui/overlay/impl/help-overlay-v2.js +20 -42
  386. package/dist/ui/overlay/impl/login-overlay-v2.d.ts +49 -0
  387. package/dist/ui/overlay/impl/login-overlay-v2.js +277 -0
  388. package/dist/ui/overlay/impl/mcp-overlay-v2.d.ts +63 -0
  389. package/dist/ui/overlay/impl/mcp-overlay-v2.js +907 -0
  390. package/dist/ui/overlay/impl/model-overlay-v2.d.ts +57 -13
  391. package/dist/ui/overlay/impl/model-overlay-v2.js +1086 -61
  392. package/dist/ui/overlay/impl/new-overlay-v2.d.ts +37 -6
  393. package/dist/ui/overlay/impl/new-overlay-v2.js +715 -65
  394. package/dist/ui/overlay/impl/notifications-overlay-v2.d.ts +20 -0
  395. package/dist/ui/overlay/impl/notifications-overlay-v2.js +116 -0
  396. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.d.ts +76 -0
  397. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.js +728 -0
  398. package/dist/ui/overlay/impl/pending-overlay-v2.d.ts +51 -0
  399. package/dist/ui/overlay/impl/pending-overlay-v2.js +445 -0
  400. package/dist/ui/overlay/impl/permission-overlay-v2.js +5 -5
  401. package/dist/ui/overlay/impl/permissions-overlay-v2.d.ts +85 -0
  402. package/dist/ui/overlay/impl/permissions-overlay-v2.js +820 -0
  403. package/dist/ui/overlay/impl/plan-approval-overlay-v2.d.ts +35 -0
  404. package/dist/ui/overlay/impl/plan-approval-overlay-v2.js +181 -0
  405. package/dist/ui/overlay/impl/project-edit-overlay-v2.d.ts +36 -0
  406. package/dist/ui/overlay/impl/project-edit-overlay-v2.js +195 -0
  407. package/dist/ui/overlay/impl/projects-overlay-v2.d.ts +1 -0
  408. package/dist/ui/overlay/impl/projects-overlay-v2.js +278 -44
  409. package/dist/ui/overlay/impl/reset-overlay-v2.d.ts +39 -0
  410. package/dist/ui/overlay/impl/reset-overlay-v2.js +107 -0
  411. package/dist/ui/overlay/impl/resume-overlay-v2.d.ts +60 -0
  412. package/dist/ui/overlay/impl/resume-overlay-v2.js +414 -0
  413. package/dist/ui/overlay/impl/session-mode-overlay-v2.d.ts +43 -0
  414. package/dist/ui/overlay/impl/session-mode-overlay-v2.js +124 -0
  415. package/dist/ui/overlay/impl/tasks-overlay-v2.d.ts +28 -0
  416. package/dist/ui/overlay/impl/tasks-overlay-v2.js +283 -0
  417. package/dist/ui/overlay/impl/team-overlay-v2.d.ts +86 -0
  418. package/dist/ui/overlay/impl/team-overlay-v2.js +692 -0
  419. package/dist/ui/overlay/impl/terminals-overlay-v2.d.ts +26 -0
  420. package/dist/ui/overlay/impl/terminals-overlay-v2.js +217 -0
  421. package/dist/ui/overlay/impl/tools-overlay-v2.js +3 -7
  422. package/dist/ui/overlay/impl/tutorial-overlay-v2.d.ts +30 -16
  423. package/dist/ui/overlay/impl/tutorial-overlay-v2.js +133 -956
  424. package/dist/ui/overlay/impl/workflow-overlay-v2.js +5 -1
  425. package/dist/ui/overlay/index.d.ts +20 -1
  426. package/dist/ui/overlay/index.js +19 -0
  427. package/dist/ui/overlay/types.d.ts +5 -0
  428. package/dist/ui/overlay-manager.d.ts +43 -0
  429. package/dist/ui/overlay-manager.js +238 -0
  430. package/dist/ui/overlays.js +4 -16
  431. package/dist/ui/permission-overlay.js +6 -5
  432. package/dist/ui/status-bar-controller.d.ts +33 -0
  433. package/dist/ui/status-bar-controller.js +99 -0
  434. package/dist/ui/subagent-renderer.js +3 -19
  435. package/dist/ui/terminal-autocomplete-utils.d.ts +23 -0
  436. package/dist/ui/terminal-autocomplete-utils.js +83 -0
  437. package/dist/ui/terminal-line-builders.d.ts +17 -0
  438. package/dist/ui/terminal-line-builders.js +42 -0
  439. package/dist/ui/terminal-render-item.d.ts +16 -0
  440. package/dist/ui/terminal-render-item.js +267 -0
  441. package/dist/ui/terminal-renderer.d.ts +7 -8
  442. package/dist/ui/terminal-renderer.js +7 -8
  443. package/dist/ui/terminal-types.d.ts +179 -0
  444. package/dist/ui/terminal-types.js +34 -0
  445. package/dist/ui/terminal-ui.d.ts +144 -276
  446. package/dist/ui/terminal-ui.js +384 -1861
  447. package/dist/ui/todo-zone.d.ts +19 -1
  448. package/dist/ui/todo-zone.js +71 -13
  449. package/dist/ui/tool-formatters.js +512 -1
  450. package/dist/ui/turn-metrics.d.ts +56 -0
  451. package/dist/ui/turn-metrics.js +75 -0
  452. package/dist/ui/types.d.ts +28 -0
  453. package/dist/ui/types.js +1 -0
  454. package/dist/ui/vscode-diff-ipc.d.ts +102 -0
  455. package/dist/ui/vscode-diff-ipc.js +385 -0
  456. package/dist/utils/credentials.d.ts +24 -5
  457. package/dist/utils/credentials.js +123 -9
  458. package/dist/utils/format-tokens.d.ts +13 -0
  459. package/dist/utils/format-tokens.js +18 -0
  460. package/dist/utils/git-config.d.ts +26 -0
  461. package/dist/utils/git-config.js +54 -0
  462. package/dist/utils/message-utils.d.ts +61 -0
  463. package/dist/utils/message-utils.js +72 -0
  464. package/dist/utils/model-tiers.d.ts +8 -1
  465. package/dist/utils/model-tiers.js +38 -16
  466. package/dist/utils/open-browser.d.ts +5 -0
  467. package/dist/utils/open-browser.js +32 -0
  468. package/dist/utils/path-safety.js +3 -2
  469. package/dist/utils/project-detection.d.ts +58 -0
  470. package/dist/utils/project-detection.js +424 -0
  471. package/dist/utils/project-memory.js +2 -1
  472. package/dist/utils/project-status.d.ts +2 -2
  473. package/dist/utils/startup-perf.d.ts +18 -0
  474. package/dist/utils/startup-perf.js +60 -0
  475. package/dist/utils/token-tracker.d.ts +62 -0
  476. package/dist/utils/token-tracker.js +150 -0
  477. package/dist/utils/token-types.d.ts +23 -0
  478. package/dist/utils/token-types.js +18 -0
  479. package/dist/utils/types/config-types.d.ts +32 -0
  480. package/dist/utils/types/config-types.js +8 -0
  481. package/dist/utils/update-checker.d.ts +28 -0
  482. package/dist/utils/update-checker.js +106 -0
  483. package/dist/utils/version.d.ts +7 -0
  484. package/dist/utils/version.js +10 -0
  485. package/dist/utils/vscode-detect.d.ts +39 -0
  486. package/dist/utils/vscode-detect.js +137 -0
  487. package/package.json +25 -12
  488. package/dist/commands/handler-types.d.ts +0 -68
  489. package/dist/commands/handler-types.js +0 -8
  490. package/dist/commands/handlers/agent-commands.d.ts +0 -13
  491. package/dist/commands/handlers/agent-commands.js +0 -305
  492. package/dist/commands/handlers/design-commands.d.ts +0 -15
  493. package/dist/commands/handlers/design-commands.js +0 -334
  494. package/dist/commands/handlers/index.d.ts +0 -20
  495. package/dist/commands/handlers/index.js +0 -43
  496. package/dist/commands/handlers/overlay-commands.d.ts +0 -21
  497. package/dist/commands/handlers/overlay-commands.js +0 -287
  498. package/dist/commands/handlers/project-commands.d.ts +0 -11
  499. package/dist/commands/handlers/project-commands.js +0 -167
  500. package/dist/commands/handlers/simple-commands.d.ts +0 -19
  501. package/dist/commands/handlers/simple-commands.js +0 -144
  502. package/dist/commands/registry.d.ts +0 -50
  503. package/dist/commands/registry.js +0 -75
  504. package/dist/index.old.d.ts +0 -7
  505. package/dist/index.old.js +0 -1014
  506. package/dist/repl.d.ts +0 -149
  507. package/dist/repl.js +0 -1151
  508. package/dist/templates/claude-md.d.ts +0 -7
  509. package/dist/templates/claude-md.js +0 -189
  510. package/dist/test-autocomplete.d.ts +0 -7
  511. package/dist/test-autocomplete.js +0 -85
  512. package/dist/test-tabbed-menu.d.ts +0 -7
  513. package/dist/test-tabbed-menu.js +0 -25
  514. package/dist/tool-selector.d.ts +0 -71
  515. package/dist/tool-selector.js +0 -184
  516. package/dist/ui/agents-overlay-v2.d.ts +0 -43
  517. package/dist/ui/agents-overlay-v2.js +0 -809
  518. package/dist/ui/agents-overlay.d.ts +0 -12
  519. package/dist/ui/agents-overlay.js +0 -863
  520. package/dist/ui/anchors-overlay.d.ts +0 -12
  521. package/dist/ui/anchors-overlay.js +0 -775
  522. package/dist/ui/arch-type-overlay.d.ts +0 -15
  523. package/dist/ui/arch-type-overlay.js +0 -201
  524. package/dist/ui/ask-user-overlay-v2.d.ts +0 -26
  525. package/dist/ui/ask-user-overlay-v2.js +0 -555
  526. package/dist/ui/ask-user-simple-overlay-v2.d.ts +0 -25
  527. package/dist/ui/ask-user-simple-overlay-v2.js +0 -215
  528. package/dist/ui/backlog-overlay.d.ts +0 -32
  529. package/dist/ui/backlog-overlay.js +0 -652
  530. package/dist/ui/commands-overlay-v2.d.ts +0 -33
  531. package/dist/ui/commands-overlay-v2.js +0 -441
  532. package/dist/ui/commands-overlay.d.ts +0 -16
  533. package/dist/ui/commands-overlay.js +0 -439
  534. package/dist/ui/config-overlay.d.ts +0 -35
  535. package/dist/ui/config-overlay.js +0 -707
  536. package/dist/ui/docs-overlay.d.ts +0 -17
  537. package/dist/ui/docs-overlay.js +0 -303
  538. package/dist/ui/footer-v2.d.ts +0 -222
  539. package/dist/ui/footer-v2.js +0 -1349
  540. package/dist/ui/help-overlay-v2.d.ts +0 -34
  541. package/dist/ui/help-overlay-v2.js +0 -309
  542. package/dist/ui/help-overlay.d.ts +0 -16
  543. package/dist/ui/help-overlay.js +0 -316
  544. package/dist/ui/init-overlay-v2.d.ts +0 -34
  545. package/dist/ui/init-overlay-v2.js +0 -600
  546. package/dist/ui/init-overlay.d.ts +0 -34
  547. package/dist/ui/init-overlay.js +0 -604
  548. package/dist/ui/input-prompt-v2.d.ts +0 -180
  549. package/dist/ui/input-prompt-v2.js +0 -999
  550. package/dist/ui/iteration-limit-overlay-v2.d.ts +0 -21
  551. package/dist/ui/iteration-limit-overlay-v2.js +0 -114
  552. package/dist/ui/keys-overlay-v2.d.ts +0 -41
  553. package/dist/ui/keys-overlay-v2.js +0 -248
  554. package/dist/ui/mascot-overlay-v2.d.ts +0 -41
  555. package/dist/ui/mascot-overlay-v2.js +0 -138
  556. package/dist/ui/mascot-overlay.d.ts +0 -21
  557. package/dist/ui/mascot-overlay.js +0 -146
  558. package/dist/ui/model-overlay-v2.d.ts +0 -49
  559. package/dist/ui/model-overlay-v2.js +0 -118
  560. package/dist/ui/model-overlay.d.ts +0 -27
  561. package/dist/ui/model-overlay.js +0 -221
  562. package/dist/ui/model-warning-overlay.d.ts +0 -30
  563. package/dist/ui/model-warning-overlay.js +0 -169
  564. package/dist/ui/new-overlay.d.ts +0 -34
  565. package/dist/ui/new-overlay.js +0 -604
  566. package/dist/ui/overlay/impl/init-overlay-v2.d.ts +0 -77
  567. package/dist/ui/overlay/impl/init-overlay-v2.js +0 -593
  568. package/dist/ui/overlay/overlay-types.d.ts +0 -128
  569. package/dist/ui/overlay/overlay-types.js +0 -22
  570. package/dist/ui/overlays/help-overlay-v2.d.ts +0 -28
  571. package/dist/ui/overlays/help-overlay-v2.js +0 -198
  572. package/dist/ui/overlays/index.d.ts +0 -11
  573. package/dist/ui/overlays/index.js +0 -11
  574. package/dist/ui/permission-overlay-v2.d.ts +0 -36
  575. package/dist/ui/permission-overlay-v2.js +0 -380
  576. package/dist/ui/projects-overlay.d.ts +0 -19
  577. package/dist/ui/projects-overlay.js +0 -484
  578. package/dist/ui/theme-overlay-v2.d.ts +0 -42
  579. package/dist/ui/theme-overlay-v2.js +0 -135
  580. package/dist/ui/theme-overlay.d.ts +0 -24
  581. package/dist/ui/theme-overlay.js +0 -127
  582. package/dist/ui/tools-overlay-v2.d.ts +0 -47
  583. package/dist/ui/tools-overlay-v2.js +0 -218
  584. package/dist/ui/tools-overlay.d.ts +0 -34
  585. package/dist/ui/tools-overlay.js +0 -230
  586. package/dist/ui/tutorial-overlay-v2.d.ts +0 -31
  587. package/dist/ui/tutorial-overlay-v2.js +0 -1035
  588. package/dist/ui/tutorial-overlay.d.ts +0 -11
  589. package/dist/ui/tutorial-overlay.js +0 -1034
  590. package/dist/ui/workflow-overlay.d.ts +0 -22
  591. package/dist/ui/workflow-overlay.js +0 -636
@@ -0,0 +1,414 @@
1
+ /**
2
+ * Resume Overlay V2
3
+ *
4
+ * Modal overlay for viewing and resuming saved sessions.
5
+ * Uses TabbedListOverlayV2 for consistent list/tab/search behavior.
6
+ *
7
+ * Features:
8
+ * - List saved sessions with relative timestamps
9
+ * - Preview of last user message
10
+ * - Search sessions by content
11
+ * - Delete sessions
12
+ * - Resume selected session
13
+ */
14
+ import * as terminal from '../../terminal.js';
15
+ import { TabbedListOverlayV2, BaseScreen, stay, popScreen, closeOverlay, isEscape, isCtrlC, isEnter, isClose, extractPrintable, renderBorder, wrapText, truncate, } from '../../base/index.js';
16
+ const TABS = [
17
+ { id: 'recent', label: 'Recent' },
18
+ { id: 'all', label: 'All' },
19
+ ];
20
+ // =============================================================================
21
+ // Helper Functions
22
+ // =============================================================================
23
+ /**
24
+ * Format a date as a relative time string.
25
+ */
26
+ function formatRelativeTime(date) {
27
+ const now = Date.now();
28
+ const then = new Date(date).getTime();
29
+ const diff = now - then;
30
+ const seconds = Math.floor(diff / 1000);
31
+ const minutes = Math.floor(seconds / 60);
32
+ const hours = Math.floor(minutes / 60);
33
+ const days = Math.floor(hours / 24);
34
+ if (days > 7) {
35
+ return new Date(date).toLocaleDateString();
36
+ }
37
+ if (days > 1) {
38
+ return `${String(days)} days ago`;
39
+ }
40
+ if (days === 1) {
41
+ return 'Yesterday';
42
+ }
43
+ if (hours >= 1) {
44
+ return `${String(hours)} hour${hours > 1 ? 's' : ''} ago`;
45
+ }
46
+ if (minutes >= 1) {
47
+ return `${String(minutes)} minute${minutes > 1 ? 's' : ''} ago`;
48
+ }
49
+ return 'Just now';
50
+ }
51
+ /**
52
+ * Convert SessionInfo to SessionItem with relative time.
53
+ */
54
+ function toSessionItem(session, currentProjectId) {
55
+ // Check if this is a ProjectSessionInfo with project metadata
56
+ const projectSession = session;
57
+ const projectId = projectSession.projectId;
58
+ const projectName = projectSession.projectName;
59
+ const isCurrentProject = projectId === currentProjectId;
60
+ return {
61
+ sessionId: session.sessionId,
62
+ preview: session.preview || 'No preview available',
63
+ messageCount: session.messageCount,
64
+ createdAt: session.createdAt,
65
+ updatedAt: session.updatedAt,
66
+ relativeTime: formatRelativeTime(session.updatedAt),
67
+ projectId,
68
+ projectName,
69
+ isCurrentProject,
70
+ terminalPrefix: projectSession.terminalPrefix ?? null,
71
+ terminalLabel: projectSession.terminalLabel ?? null,
72
+ isActiveTerminal: projectSession.isActiveTerminal ?? false,
73
+ teamAgentCount: projectSession.teamAgentCount ?? 0,
74
+ };
75
+ }
76
+ // =============================================================================
77
+ // Detail Screen (Session Details)
78
+ // =============================================================================
79
+ /**
80
+ * Screen for viewing session details before resuming.
81
+ */
82
+ class DetailScreen extends BaseScreen {
83
+ item;
84
+ styles;
85
+ onDelete;
86
+ confirmDelete = false;
87
+ confirmCrossProject = false;
88
+ confirmSelected = 1; // 0 = Yes, 1 = No (for both confirmations)
89
+ constructor(item, styles, onDelete) {
90
+ super();
91
+ this.item = item;
92
+ this.styles = styles;
93
+ this.onDelete = onDelete;
94
+ }
95
+ render() {
96
+ const s = this.styles;
97
+ const cols = terminal.getTerminalWidth();
98
+ const border = renderBorder(cols, s);
99
+ const lines = [];
100
+ lines.push(border);
101
+ lines.push(` ${s.primaryBold('Session Details')}`);
102
+ lines.push('');
103
+ // Delete confirmation
104
+ if (this.confirmDelete) {
105
+ lines.push(` ${s.error('Delete this session?')}`);
106
+ lines.push('');
107
+ lines.push(` ${s.muted('Session ID:')} ${s.secondary(this.item.sessionId)}`);
108
+ lines.push(` ${s.muted('Messages:')} ${s.secondary(String(this.item.messageCount))}`);
109
+ lines.push('');
110
+ lines.push(this.confirmSelected === 0
111
+ ? ` ${s.error('> Yes, delete')}`
112
+ : ` ${s.muted(' Yes, delete')}`);
113
+ lines.push(this.confirmSelected === 1
114
+ ? ` ${s.primary('> No, cancel')}`
115
+ : ` ${s.muted(' No, cancel')}`);
116
+ lines.push('');
117
+ lines.push(border);
118
+ lines.push(` ${s.muted('↑/↓ Navigate · Enter Select · Esc Cancel')}`);
119
+ lines.push(border);
120
+ return lines;
121
+ }
122
+ // Cross-project confirmation
123
+ if (this.confirmCrossProject) {
124
+ const projName = this.item.projectName ?? `Project ${String(this.item.projectId)}`;
125
+ lines.push(` ${s.warning('⚠ This session is from a different project')}`);
126
+ lines.push('');
127
+ lines.push(` ${s.muted('Project:')} ${s.primary(projName)}`);
128
+ lines.push(` ${s.muted('Messages:')} ${s.secondary(String(this.item.messageCount))}`);
129
+ lines.push('');
130
+ lines.push(` ${s.secondary('Resuming will load conversation history from that project.')}`);
131
+ lines.push(` ${s.secondary('Your current project context will remain unchanged.')}`);
132
+ lines.push('');
133
+ lines.push(this.confirmSelected === 0
134
+ ? ` ${s.warning('> Yes, resume anyway')}`
135
+ : ` ${s.muted(' Yes, resume anyway')}`);
136
+ lines.push(this.confirmSelected === 1
137
+ ? ` ${s.primary('> No, cancel')}`
138
+ : ` ${s.muted(' No, cancel')}`);
139
+ lines.push('');
140
+ lines.push(border);
141
+ lines.push(` ${s.muted('↑/↓ Navigate · Enter Select · Esc Cancel')}`);
142
+ lines.push(border);
143
+ return lines;
144
+ }
145
+ // Show cross-project warning banner if applicable
146
+ if (!this.item.isCurrentProject && this.item.projectId !== null) {
147
+ const projName = this.item.projectName ?? `Project ${String(this.item.projectId)}`;
148
+ lines.push(` ${s.warning(`⚠ From different project: ${projName}`)}`);
149
+ lines.push('');
150
+ }
151
+ // Active terminal warning
152
+ if (this.item.isActiveTerminal) {
153
+ lines.push(` ${s.warning('\u26A0 This session is in use by another terminal')}`);
154
+ lines.push('');
155
+ }
156
+ // Session info
157
+ lines.push(` ${s.muted('Updated:')} ${s.primary(this.item.relativeTime)}`);
158
+ lines.push(` ${s.muted('Created:')} ${s.secondary(new Date(this.item.createdAt).toLocaleString())}`);
159
+ if (this.item.messageCount > 0) {
160
+ lines.push(` ${s.muted('Messages:')} ${s.secondary(String(this.item.messageCount))}`);
161
+ }
162
+ else if (this.item.teamAgentCount && this.item.teamAgentCount > 1) {
163
+ lines.push(` ${s.muted('Messages:')} ${s.secondary('None (team only)')}`);
164
+ }
165
+ else {
166
+ lines.push(` ${s.muted('Messages:')} ${s.secondary(String(this.item.messageCount))}`);
167
+ }
168
+ if (this.item.teamAgentCount && this.item.teamAgentCount > 1) {
169
+ lines.push(` ${s.muted('Team:')} ${s.secondary(`${String(this.item.teamAgentCount)} agents`)}`);
170
+ }
171
+ lines.push(` ${s.muted('Session ID:')} ${s.secondary(this.item.sessionId)}`);
172
+ // Terminal info (for multi-terminal sessions)
173
+ if (this.item.terminalLabel) {
174
+ const prefixStr = this.item.terminalPrefix ? ` (${this.item.terminalPrefix})` : '';
175
+ const statusStr = this.item.isActiveTerminal
176
+ ? s.success('\u25CF Active')
177
+ : s.muted('\u2014 Exited');
178
+ lines.push(` ${s.muted('Terminal:')} ${s.secondary(this.item.terminalLabel + prefixStr)} ${statusStr}`);
179
+ }
180
+ lines.push('');
181
+ // Preview
182
+ lines.push(` ${s.muted('Last message:')}`);
183
+ const previewLines = wrapText(this.item.preview, cols - 6);
184
+ for (const line of previewLines.slice(0, 3)) {
185
+ lines.push(` ${s.secondary(line)}`);
186
+ }
187
+ if (previewLines.length > 3) {
188
+ lines.push(` ${s.muted('...')}`);
189
+ }
190
+ lines.push('');
191
+ lines.push(border);
192
+ if (this.item.isActiveTerminal) {
193
+ lines.push(` ${s.muted('d Delete · q/Esc Back')} ${s.warning('(in use — cannot resume)')}`);
194
+ }
195
+ else {
196
+ lines.push(` ${s.muted('Enter Resume · d Delete · q/Esc Back')}`);
197
+ }
198
+ lines.push(border);
199
+ return lines;
200
+ }
201
+ handleKey(data) {
202
+ const char = extractPrintable(data);
203
+ const key = data.toString();
204
+ // Ctrl+C closes everything
205
+ if (isCtrlC(data)) {
206
+ return closeOverlay(undefined);
207
+ }
208
+ // Confirm delete mode
209
+ if (this.confirmDelete) {
210
+ if (isEscape(data)) {
211
+ this.confirmDelete = false;
212
+ return stay();
213
+ }
214
+ if (char === 'j' || char === 'k' || key === '\x1b[A' || key === '\x1b[B') {
215
+ this.confirmSelected = this.confirmSelected === 0 ? 1 : 0;
216
+ return stay();
217
+ }
218
+ if (isEnter(data)) {
219
+ if (this.confirmSelected === 0) {
220
+ // Yes - delete the session
221
+ void this.handleDelete();
222
+ return closeOverlay({ deleted: this.item.sessionId });
223
+ }
224
+ else {
225
+ // No - cancel
226
+ this.confirmDelete = false;
227
+ return stay();
228
+ }
229
+ }
230
+ return stay(false);
231
+ }
232
+ // Cross-project confirmation mode
233
+ if (this.confirmCrossProject) {
234
+ if (isEscape(data)) {
235
+ this.confirmCrossProject = false;
236
+ return stay();
237
+ }
238
+ if (char === 'j' || char === 'k' || key === '\x1b[A' || key === '\x1b[B') {
239
+ this.confirmSelected = this.confirmSelected === 0 ? 1 : 0;
240
+ return stay();
241
+ }
242
+ if (isEnter(data)) {
243
+ if (this.confirmSelected === 0) {
244
+ // Yes - resume anyway
245
+ return closeOverlay({ sessionId: this.item.sessionId });
246
+ }
247
+ else {
248
+ // No - cancel
249
+ this.confirmCrossProject = false;
250
+ return stay();
251
+ }
252
+ }
253
+ return stay(false);
254
+ }
255
+ // Normal mode
256
+ if (isEscape(data) || isClose(data)) {
257
+ return popScreen();
258
+ }
259
+ // Enter resumes the session (with confirmation if cross-project)
260
+ if (isEnter(data)) {
261
+ // Active terminal sessions cannot be resumed
262
+ if (this.item.isActiveTerminal) {
263
+ return stay(false);
264
+ }
265
+ // Check if this is a cross-project session
266
+ if (!this.item.isCurrentProject && this.item.projectId !== null) {
267
+ this.confirmCrossProject = true;
268
+ this.confirmSelected = 1; // Default to "No"
269
+ return stay();
270
+ }
271
+ return closeOverlay({ sessionId: this.item.sessionId });
272
+ }
273
+ // 'd' deletes the session
274
+ if (char === 'd' && this.onDelete) {
275
+ this.confirmDelete = true;
276
+ this.confirmSelected = 1; // Default to "No"
277
+ return stay();
278
+ }
279
+ return stay(false);
280
+ }
281
+ async handleDelete() {
282
+ if (this.onDelete) {
283
+ await this.onDelete(this.item.sessionId);
284
+ }
285
+ }
286
+ /**
287
+ * Minimum height for stable rendering.
288
+ */
289
+ getMinHeight() {
290
+ return 20;
291
+ }
292
+ }
293
+ // =============================================================================
294
+ // Resume Overlay V2 Class
295
+ // =============================================================================
296
+ export class ResumeOverlayV2 extends TabbedListOverlayV2 {
297
+ type = 'inline';
298
+ id = 'resume-overlay-v2';
299
+ onDeleteSession;
300
+ constructor(options) {
301
+ const currentProjectId = options.currentProjectId;
302
+ const items = options.sessions.map((s) => toSessionItem(s, currentProjectId));
303
+ super({
304
+ title: 'Resume Session',
305
+ tabs: TABS,
306
+ items,
307
+ pageSize: 10,
308
+ filterByTab: (item, tabId) => {
309
+ if (tabId === 'all')
310
+ return true;
311
+ if (tabId === 'recent') {
312
+ // Show sessions from last 24 hours
313
+ const twentyFourHoursAgo = Date.now() - 24 * 60 * 60 * 1000;
314
+ return new Date(item.updatedAt).getTime() > twentyFourHoursAgo;
315
+ }
316
+ return true;
317
+ },
318
+ getSearchText: (item) => `${item.preview} ${item.sessionId} ${item.projectName ?? ''} ${item.terminalLabel ?? ''}`,
319
+ renderItem: (item, isSelected, styles) => {
320
+ const prefix = isSelected ? styles.primary('❯ ') : ' ';
321
+ // Fixed-width columns for alignment (visual character widths)
322
+ const PROJECT_COL_WIDTH = 18; // [Project Long Na..] or [Global]
323
+ const TERMINAL_COL_WIDTH = 16; // [Terminal 1 ●] or [Terminal d772]
324
+ const TIME_COL_WIDTH = 16; // "33 minutes ago"
325
+ const COUNT_COL_WIDTH = 10; // " 82 msgs " or " 2 agents"
326
+ // Project indicator (fixed width)
327
+ let projectName;
328
+ let isCurrentProj = false;
329
+ if (item.projectId !== null && item.projectId !== undefined) {
330
+ projectName = item.projectName ?? `Project ${String(item.projectId)}`;
331
+ isCurrentProj = item.isCurrentProject ?? false;
332
+ }
333
+ else {
334
+ projectName = 'Global';
335
+ }
336
+ // Truncate project name to fit in brackets
337
+ const maxProjLen = PROJECT_COL_WIDTH - 2; // -2 for brackets
338
+ const truncatedProj = truncate(projectName, maxProjLen);
339
+ const projectStr = `[${truncatedProj}]`.padEnd(PROJECT_COL_WIDTH);
340
+ const projectIndicator = isCurrentProj
341
+ ? styles.success(projectStr)
342
+ : styles.muted(projectStr);
343
+ // Terminal indicator (fixed width — pad inner label, then wrap + style)
344
+ let terminalStr = '';
345
+ if (item.terminalLabel) {
346
+ // Pad inner label to fixed width: TERMINAL_COL_WIDTH - 2 for brackets
347
+ const innerWidth = TERMINAL_COL_WIDTH - 2;
348
+ if (item.isActiveTerminal) {
349
+ const inner = `${item.terminalLabel} \u25CF`.padEnd(innerWidth);
350
+ terminalStr = styles.warning(`[${inner}]`);
351
+ }
352
+ else {
353
+ const inner = item.terminalLabel.padEnd(innerWidth);
354
+ terminalStr = styles.muted(`[${inner}]`);
355
+ }
356
+ }
357
+ else {
358
+ terminalStr = ''.padEnd(TERMINAL_COL_WIDTH);
359
+ }
360
+ // Time (fixed width)
361
+ const timeStr = item.relativeTime.padEnd(TIME_COL_WIDTH);
362
+ const timeStyled = isSelected ? styles.primary(timeStr) : styles.muted(timeStr);
363
+ // Message count or team-only indicator (fixed width, left-aligned)
364
+ let countStr;
365
+ if (item.messageCount === 0 && item.teamAgentCount && item.teamAgentCount > 1) {
366
+ countStr = `${String(item.teamAgentCount)} agents`.padEnd(COUNT_COL_WIDTH);
367
+ }
368
+ else {
369
+ const label = item.messageCount !== 1 ? 'msgs' : 'msg';
370
+ countStr = `${String(item.messageCount)} ${label}`.padEnd(COUNT_COL_WIDTH);
371
+ }
372
+ const countStyled = isSelected ? styles.secondary(countStr) : styles.muted(countStr);
373
+ // Sanitize preview: remove newlines, carriage returns, and collapse whitespace
374
+ const sanitized = item.preview
375
+ .replace(/[\r\n]+/g, ' ')
376
+ .replace(/\s+/g, ' ')
377
+ .replace(/^#+\s*/g, '')
378
+ .trim();
379
+ // Calculate remaining space for preview
380
+ const usedWidth = 2 + PROJECT_COL_WIDTH + 1 + TERMINAL_COL_WIDTH + 1 + TIME_COL_WIDTH + COUNT_COL_WIDTH + 1;
381
+ const cols = terminal.getTerminalWidth();
382
+ const maxPreview = Math.max(20, cols - usedWidth - 2);
383
+ const preview = truncate(sanitized, maxPreview);
384
+ const previewStyled = isSelected ? styles.secondary(preview) : styles.muted(preview);
385
+ return `${prefix}${projectIndicator} ${terminalStr} ${timeStyled}${countStyled} ${previewStyled}`;
386
+ },
387
+ showCount: true,
388
+ emptyMessage: 'No saved sessions found.',
389
+ noResultsMessage: 'No sessions match the search.',
390
+ footerHints: (searchMode) => {
391
+ if (searchMode) {
392
+ return 'Type to search Enter Select Esc Exit search';
393
+ }
394
+ return 'j/k Navigate / Search Enter Resume d Delete q/Esc Close';
395
+ },
396
+ });
397
+ this.onDeleteSession = options.onDelete;
398
+ }
399
+ createDetailScreen(item) {
400
+ return new DetailScreen(item, this.getStyles(), this.onDeleteSession);
401
+ }
402
+ onItemSelected(item) {
403
+ // Active terminal sessions cannot be resumed (in use by another terminal)
404
+ if (item.isActiveTerminal) {
405
+ return undefined; // Stay on list - no action
406
+ }
407
+ // Cross-project sessions need confirmation - go to detail screen
408
+ if (!item.isCurrentProject && item.projectId !== null) {
409
+ return undefined; // Fall through to detail screen for confirmation
410
+ }
411
+ // Same project - resume directly
412
+ return { sessionId: item.sessionId };
413
+ }
414
+ }
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Session Mode Overlay V2
3
+ *
4
+ * Modal overlay shown at startup when projectSessionMode='ask' and a previous session exists.
5
+ * Gives the user control over how to handle the existing session:
6
+ * - Resume full: Continue where you left off (conversation + context)
7
+ * - Resume messages: Keep conversation, refresh project context
8
+ * - Start fresh: Clear conversation, fresh project context
9
+ */
10
+ import { BaseOverlayV2 } from '../../base/index.js';
11
+ import type { RenderContext, OverlayAction, KeyEvent } from '../types.js';
12
+ export type SessionModeOption = 'resume-full' | 'resume-messages' | 'start-fresh';
13
+ interface SessionModeState {
14
+ /** Selected option index */
15
+ selectedIndex: number;
16
+ }
17
+ export interface SessionModeOverlayV2Options {
18
+ /** Project name for display */
19
+ projectName: string;
20
+ /** Number of messages in existing session */
21
+ messageCount: number;
22
+ /** Last activity timestamp */
23
+ lastActivity: Date;
24
+ /** Preview of last user message (optional) */
25
+ lastMessagePreview?: string;
26
+ }
27
+ export interface SessionModeOverlayV2Result {
28
+ /** Selected option */
29
+ option: SessionModeOption;
30
+ }
31
+ export declare class SessionModeOverlayV2 extends BaseOverlayV2<SessionModeState, SessionModeOverlayV2Result> {
32
+ readonly type: "inline";
33
+ readonly id = "session-mode-overlay-v2";
34
+ private readonly projectName;
35
+ private readonly messageCount;
36
+ private readonly lastActivity;
37
+ private readonly lastMessagePreview?;
38
+ constructor(options: SessionModeOverlayV2Options);
39
+ protected renderContent(context: RenderContext): string[];
40
+ handleKey(key: KeyEvent): OverlayAction<SessionModeOverlayV2Result>;
41
+ private formatTimeAgo;
42
+ }
43
+ export {};
@@ -0,0 +1,124 @@
1
+ /**
2
+ * Session Mode Overlay V2
3
+ *
4
+ * Modal overlay shown at startup when projectSessionMode='ask' and a previous session exists.
5
+ * Gives the user control over how to handle the existing session:
6
+ * - Resume full: Continue where you left off (conversation + context)
7
+ * - Resume messages: Keep conversation, refresh project context
8
+ * - Start fresh: Clear conversation, fresh project context
9
+ */
10
+ import { BaseOverlayV2, renderBorder, truncate } from '../../base/index.js';
11
+ const SESSION_MODE_OPTIONS = [
12
+ {
13
+ id: 'resume-full',
14
+ label: 'Resume full',
15
+ description: 'Continue where you left off',
16
+ },
17
+ {
18
+ id: 'resume-messages',
19
+ label: 'Resume messages',
20
+ description: 'Keep conversation, refresh project context',
21
+ },
22
+ {
23
+ id: 'start-fresh',
24
+ label: 'Start fresh',
25
+ description: 'Clear conversation, fresh project context',
26
+ },
27
+ ];
28
+ // =============================================================================
29
+ // Session Mode Overlay V2 Class
30
+ // =============================================================================
31
+ export class SessionModeOverlayV2 extends BaseOverlayV2 {
32
+ type = 'inline';
33
+ id = 'session-mode-overlay-v2';
34
+ projectName;
35
+ messageCount;
36
+ lastActivity;
37
+ lastMessagePreview;
38
+ constructor(options) {
39
+ super({ selectedIndex: 0 });
40
+ this.projectName = options.projectName;
41
+ this.messageCount = options.messageCount;
42
+ this.lastActivity = options.lastActivity;
43
+ this.lastMessagePreview = options.lastMessagePreview;
44
+ this.minHeight = 18;
45
+ }
46
+ renderContent(context) {
47
+ const s = context.styles;
48
+ const border = renderBorder(context.width, s);
49
+ const lines = [];
50
+ lines.push(border);
51
+ lines.push(` ${s.primaryBold('Previous Session Found')}`);
52
+ lines.push('');
53
+ // Session info
54
+ lines.push(` ${s.muted('Project:')} ${s.primary(this.projectName)}`);
55
+ lines.push(` ${s.muted('Messages:')} ${s.secondary(String(this.messageCount))}`);
56
+ // Format time ago
57
+ const timeAgo = this.formatTimeAgo(this.lastActivity);
58
+ lines.push(` ${s.muted('Last active:')} ${s.secondary(timeAgo)}`);
59
+ // Last message preview if available
60
+ if (this.lastMessagePreview) {
61
+ const preview = truncate(this.lastMessagePreview, 50);
62
+ lines.push(` ${s.muted('Last message:')} ${s.secondary(`"${preview}"`)}`);
63
+ }
64
+ lines.push('');
65
+ lines.push(` ${s.muted('How would you like to continue?')}`);
66
+ lines.push('');
67
+ // Options
68
+ for (let i = 0; i < SESSION_MODE_OPTIONS.length; i++) {
69
+ const opt = SESSION_MODE_OPTIONS[i];
70
+ const isSelected = i === this.state.selectedIndex;
71
+ const prefix = isSelected ? s.primary('> ') : ' ';
72
+ const label = isSelected ? s.primaryBold(opt.label) : s.secondary(opt.label);
73
+ const desc = s.muted(` - ${opt.description}`);
74
+ lines.push(` ${prefix}${label}${desc}`);
75
+ }
76
+ lines.push('');
77
+ lines.push(border);
78
+ lines.push(` ${s.muted('j/k Navigate Enter Select')}`);
79
+ lines.push(border);
80
+ return lines;
81
+ }
82
+ handleKey(key) {
83
+ // Ctrl+C closes with start-fresh (safest default for interrupt)
84
+ if (key.ctrl && key.name === 'c') {
85
+ return this.close({ option: 'start-fresh' });
86
+ }
87
+ // Escape defaults to resume-full (most common expectation)
88
+ if (key.name === 'escape') {
89
+ return this.close({ option: 'resume-full' });
90
+ }
91
+ // Navigation with j/k
92
+ if (key.char === 'j' || key.name === 'down') {
93
+ this.state.selectedIndex = Math.min(this.state.selectedIndex + 1, SESSION_MODE_OPTIONS.length - 1);
94
+ return this.rerender();
95
+ }
96
+ if (key.char === 'k' || key.name === 'up') {
97
+ this.state.selectedIndex = Math.max(this.state.selectedIndex - 1, 0);
98
+ return this.rerender();
99
+ }
100
+ // Enter selects
101
+ if (key.name === 'return') {
102
+ const selected = SESSION_MODE_OPTIONS[this.state.selectedIndex];
103
+ return this.close({ option: selected.id });
104
+ }
105
+ return this.rerender();
106
+ }
107
+ formatTimeAgo(date) {
108
+ const now = new Date();
109
+ const diffMs = now.getTime() - date.getTime();
110
+ const diffMins = Math.floor(diffMs / (1000 * 60));
111
+ const diffHours = Math.floor(diffMs / (1000 * 60 * 60));
112
+ const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24));
113
+ if (diffMins < 1)
114
+ return 'just now';
115
+ if (diffMins < 60)
116
+ return `${String(diffMins)} minute${diffMins === 1 ? '' : 's'} ago`;
117
+ if (diffHours < 24)
118
+ return `${String(diffHours)} hour${diffHours === 1 ? '' : 's'} ago`;
119
+ if (diffDays < 7)
120
+ return `${String(diffDays)} day${diffDays === 1 ? '' : 's'} ago`;
121
+ // For older sessions, show the date
122
+ return date.toLocaleDateString();
123
+ }
124
+ }
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Tasks Overlay V2 - View and manage background shell tasks
3
+ *
4
+ * Shows background shells started via `bash` with `run_in_background=true`.
5
+ * Allows viewing output, killing running tasks, and clearing completed ones.
6
+ */
7
+ import { BaseOverlayV2 } from '../../base/overlay-base-v2.js';
8
+ import type { RenderContext, OverlayAction, KeyEvent } from '../index.js';
9
+ interface TasksOverlayState {
10
+ selectedIndex: number;
11
+ screen: 'list' | 'detail';
12
+ detailShellId: string | null;
13
+ lastRefresh: number;
14
+ }
15
+ export declare class TasksOverlayV2 extends BaseOverlayV2<TasksOverlayState> {
16
+ readonly type: "inline";
17
+ readonly id = "tasks-overlay";
18
+ constructor();
19
+ protected renderContent(context: RenderContext): string[];
20
+ private renderList;
21
+ private formatShellLine;
22
+ private formatDuration;
23
+ private renderDetail;
24
+ handleKey(key: KeyEvent): OverlayAction<void>;
25
+ private handleListKey;
26
+ private handleDetailKey;
27
+ }
28
+ export {};