@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
@@ -15,7 +15,9 @@
15
15
  */
16
16
  import * as fs from 'fs';
17
17
  import { TabbedListOverlayV2 } from '../../base/tabbed-list-overlay-v2.js';
18
- import { BaseScreen, stay, popScreen, closeOverlay, renderBorder, } from '../../base/index.js';
18
+ import { BaseScreen, stay, popScreen, closeOverlay, renderBorder, renderProgressBar, truncate,
19
+ // Key detection functions (consolidated from ui-core)
20
+ isCtrlC, isEscape, isEnter, isBackspace, extractPrintable, } from '../../base/index.js';
19
21
  import { projectRepository, workItemRepository } from '../../../db/repositories/index.js';
20
22
  import { clearActiveProject, getActiveProject } from '../../../tools/project-db.js';
21
23
  import { validateDeletePath } from '../../../utils/path-safety.js';
@@ -49,37 +51,7 @@ const STATUS_LABELS = {
49
51
  // =============================================================================
50
52
  // Helper Functions
51
53
  // =============================================================================
52
- function truncate(str, maxLen) {
53
- if (str.length <= maxLen)
54
- return str;
55
- return str.slice(0, maxLen - 3) + '...';
56
- }
57
- function renderProgressBar(percent, width, s) {
58
- const filled = Math.round((percent / 100) * width);
59
- const empty = width - filled;
60
- return s.primary('█'.repeat(filled)) + s.muted('░'.repeat(empty));
61
- }
62
- // =============================================================================
63
- // Key Detection Helpers
64
- // =============================================================================
65
- function isCtrlC(data) {
66
- return data.length === 1 && data[0] === 0x03;
67
- }
68
- function isEscape(data) {
69
- return data.length === 1 && data[0] === 0x1b;
70
- }
71
- function isEnter(data) {
72
- return data.length === 1 && (data[0] === 0x0d || data[0] === 0x0a);
73
- }
74
- function isBackspace(data) {
75
- return data.length === 1 && (data[0] === 0x7f || data[0] === 0x08);
76
- }
77
- function extractPrintable(data) {
78
- if (data.length === 1 && data[0] >= 0x20 && data[0] < 0x7f) {
79
- return String.fromCharCode(data[0]);
80
- }
81
- return null;
82
- }
54
+ // Key detection, renderProgressBar, and truncate are imported from '../../base/index.js'
83
55
  // =============================================================================
84
56
  // Archive Confirm Screen
85
57
  // =============================================================================
@@ -162,6 +134,53 @@ class ArchiveConfirmScreen extends BaseScreen {
162
134
  }
163
135
  }
164
136
  // =============================================================================
137
+ // Delete Blocked Screen (project not archived)
138
+ // =============================================================================
139
+ class DeleteBlockedScreen extends BaseScreen {
140
+ confirmState;
141
+ styles;
142
+ constructor(confirmState, styles) {
143
+ super();
144
+ this.confirmState = confirmState;
145
+ this.styles = styles;
146
+ }
147
+ render() {
148
+ const s = this.styles;
149
+ const cols = terminal.getTerminalWidth();
150
+ const border = renderBorder(cols, s);
151
+ const project = this.confirmState.targetProject;
152
+ const lines = [];
153
+ lines.push(border);
154
+ lines.push(` ${s.error('Cannot Delete Project')}`);
155
+ lines.push('');
156
+ if (project) {
157
+ lines.push(` ${s.primaryBold(project.displayName)}`);
158
+ lines.push(` ${s.muted(`Status: ${project.status}`)}`);
159
+ lines.push('');
160
+ }
161
+ lines.push(` ${s.warning('Projects must be archived before deletion.')}`);
162
+ lines.push('');
163
+ lines.push(` ${s.muted('This is a safety measure to prevent accidental deletion.')}`);
164
+ lines.push(` ${s.muted('Archive the project first (press x), then try deleting again.')}`);
165
+ lines.push('');
166
+ lines.push(` ${s.muted('Press Esc to go back')}`);
167
+ lines.push('');
168
+ lines.push(border);
169
+ return lines;
170
+ }
171
+ handleKey(data) {
172
+ if (isEscape(data) || isEnter(data) || isCtrlC(data)) {
173
+ this.confirmState.targetProject = null;
174
+ this.confirmState.deleteError = null;
175
+ return popScreen();
176
+ }
177
+ return stay(false);
178
+ }
179
+ getMinHeight() {
180
+ return 14;
181
+ }
182
+ }
183
+ // =============================================================================
165
184
  // Delete Confirm Screen
166
185
  // =============================================================================
167
186
  class DeleteConfirmScreen extends BaseScreen {
@@ -248,10 +267,6 @@ class DeleteConfirmScreen extends BaseScreen {
248
267
  lines.push(s.foreground(' This will permanently delete:'));
249
268
  lines.push(s.muted(' • Database record (project, work items, documents)'));
250
269
  lines.push(s.muted(' • Project files on disk'));
251
- if (project.status !== 'archived') {
252
- lines.push('');
253
- lines.push(s.warning(' Note: Project will be archived first, then deleted.'));
254
- }
255
270
  lines.push('');
256
271
  lines.push(s.muted(' ' + '─'.repeat(cols - 4)));
257
272
  lines.push('');
@@ -302,11 +317,7 @@ class DeleteConfirmScreen extends BaseScreen {
302
317
  this.confirmState.deleteError = `Type "${project.name}" exactly to confirm`;
303
318
  return stay();
304
319
  }
305
- // Archive first if not already archived
306
- if (project.status !== 'archived') {
307
- projectRepository.update(project.id, { status: 'archived' });
308
- }
309
- // Delete from database
320
+ // Delete from database (project must already be archived - checked before showing this screen)
310
321
  projectRepository.delete(project.id);
311
322
  // Clear project-specific anchors
312
323
  clearProjectAnchors(String(project.id));
@@ -339,6 +350,195 @@ class DeleteConfirmScreen extends BaseScreen {
339
350
  return 28;
340
351
  }
341
352
  }
353
+ class ProjectEditScreen extends BaseScreen {
354
+ editState;
355
+ styles;
356
+ onComplete;
357
+ constructor(editState, styles, onComplete) {
358
+ super();
359
+ this.editState = editState;
360
+ this.styles = styles;
361
+ this.onComplete = onComplete;
362
+ }
363
+ render() {
364
+ const s = this.styles;
365
+ const cols = terminal.getTerminalWidth();
366
+ const border = renderBorder(cols, s);
367
+ const project = this.editState.targetProject;
368
+ const lines = [];
369
+ if (!project) {
370
+ lines.push(border);
371
+ lines.push(s.error(' No project selected'));
372
+ lines.push(border);
373
+ return lines;
374
+ }
375
+ lines.push(border);
376
+ lines.push(` ${s.primaryBold('EDIT PROJECT')}`);
377
+ lines.push('');
378
+ lines.push(s.muted(` ID: ${String(project.id)} · Name: ${project.name}`));
379
+ lines.push(s.muted(` Status: ${STATUS_LABELS[project.status]} · Type: ${project.type}`));
380
+ lines.push(s.muted(` Created: ${new Date(project.createdAt).toLocaleDateString()}`));
381
+ lines.push('');
382
+ lines.push(s.muted(' ' + '─'.repeat(cols - 6)));
383
+ lines.push('');
384
+ // Render fields
385
+ for (let i = 0; i < this.editState.fields.length; i++) {
386
+ const field = this.editState.fields[i];
387
+ const isSelected = i === this.editState.selectedFieldIndex;
388
+ const isEditing = isSelected && this.editState.editingField;
389
+ const cursor = isSelected ? s.primary('❯ ') : ' ';
390
+ const label = field.label.padEnd(14);
391
+ if (isEditing) {
392
+ // Show input buffer with cursor
393
+ const inputDisplay = this.editState.inputBuffer || '';
394
+ lines.push(`${cursor}${s.muted(label)} ${s.primary(inputDisplay)}█`);
395
+ }
396
+ else {
397
+ const value = field.value || s.muted(field.placeholder || '(not set)');
398
+ if (isSelected) {
399
+ lines.push(`${cursor}${s.primary(label)} ${value}`);
400
+ }
401
+ else {
402
+ lines.push(`${cursor}${s.muted(label)} ${value}`);
403
+ }
404
+ }
405
+ }
406
+ if (this.editState.error) {
407
+ lines.push('');
408
+ lines.push(s.error(` ${this.editState.error}`));
409
+ }
410
+ lines.push('');
411
+ lines.push(border);
412
+ if (this.editState.editingField) {
413
+ lines.push(s.muted(' Enter Save field · Esc Cancel edit'));
414
+ }
415
+ else {
416
+ lines.push(s.muted(' ↑↓/jk Navigate · Enter Edit field · s Save & close · Esc Cancel'));
417
+ }
418
+ lines.push(border);
419
+ return lines;
420
+ }
421
+ handleKey(data) {
422
+ const char = extractPrintable(data);
423
+ if (isCtrlC(data)) {
424
+ return closeOverlay({ action: 'cancel' });
425
+ }
426
+ // Handle field editing mode
427
+ if (this.editState.editingField) {
428
+ if (isEscape(data)) {
429
+ // Cancel field edit - restore original value
430
+ const field = this.editState.fields[this.editState.selectedFieldIndex];
431
+ this.editState.inputBuffer = field.value;
432
+ this.editState.editingField = false;
433
+ return stay();
434
+ }
435
+ if (isEnter(data)) {
436
+ // Save field value
437
+ const field = this.editState.fields[this.editState.selectedFieldIndex];
438
+ field.value = this.editState.inputBuffer;
439
+ this.editState.editingField = false;
440
+ this.editState.modified = true;
441
+ return stay();
442
+ }
443
+ if (isBackspace(data)) {
444
+ this.editState.inputBuffer = this.editState.inputBuffer.slice(0, -1);
445
+ return stay();
446
+ }
447
+ if (char) {
448
+ this.editState.inputBuffer += char;
449
+ return stay();
450
+ }
451
+ return stay(false);
452
+ }
453
+ // Handle navigation mode
454
+ if (isEscape(data)) {
455
+ // Cancel without saving
456
+ this.editState.targetProject = null;
457
+ this.editState.error = null;
458
+ return popScreen();
459
+ }
460
+ // Navigate up
461
+ if (data.length === 3 && data[0] === 0x1b && data[1] === 0x5b && data[2] === 0x41) {
462
+ // Up arrow
463
+ if (this.editState.selectedFieldIndex > 0) {
464
+ this.editState.selectedFieldIndex--;
465
+ }
466
+ return stay();
467
+ }
468
+ if (char === 'k') {
469
+ if (this.editState.selectedFieldIndex > 0) {
470
+ this.editState.selectedFieldIndex--;
471
+ }
472
+ return stay();
473
+ }
474
+ // Navigate down
475
+ if (data.length === 3 && data[0] === 0x1b && data[1] === 0x5b && data[2] === 0x42) {
476
+ // Down arrow
477
+ if (this.editState.selectedFieldIndex < this.editState.fields.length - 1) {
478
+ this.editState.selectedFieldIndex++;
479
+ }
480
+ return stay();
481
+ }
482
+ if (char === 'j') {
483
+ if (this.editState.selectedFieldIndex < this.editState.fields.length - 1) {
484
+ this.editState.selectedFieldIndex++;
485
+ }
486
+ return stay();
487
+ }
488
+ // Enter to edit field
489
+ if (isEnter(data)) {
490
+ const field = this.editState.fields[this.editState.selectedFieldIndex];
491
+ this.editState.inputBuffer = field.value;
492
+ this.editState.editingField = true;
493
+ return stay();
494
+ }
495
+ // 's' to save and close
496
+ if (char === 's' || char === 'S') {
497
+ return this.saveAndClose();
498
+ }
499
+ return stay(false);
500
+ }
501
+ saveAndClose() {
502
+ const project = this.editState.targetProject;
503
+ if (!project)
504
+ return popScreen();
505
+ // Build update object from fields
506
+ const updates = {};
507
+ for (const field of this.editState.fields) {
508
+ if (field.key === 'displayName') {
509
+ updates.display_name = field.value || undefined;
510
+ }
511
+ else if (field.key === 'description') {
512
+ updates.description = field.value || undefined;
513
+ }
514
+ else if (field.key === 'gitRemote') {
515
+ updates.git_remote = field.value || undefined;
516
+ }
517
+ else if (field.key === 'gitBranch') {
518
+ updates.git_branch = field.value || undefined;
519
+ }
520
+ else {
521
+ // field.key === 'path'
522
+ updates.path = field.value || undefined;
523
+ }
524
+ }
525
+ try {
526
+ projectRepository.update(project.id, updates);
527
+ this.editState.modified = true;
528
+ this.onComplete();
529
+ }
530
+ catch (err) {
531
+ this.editState.error = err.message;
532
+ return stay();
533
+ }
534
+ this.editState.targetProject = null;
535
+ this.editState.error = null;
536
+ return popScreen();
537
+ }
538
+ getMinHeight() {
539
+ return 22;
540
+ }
541
+ }
342
542
  // =============================================================================
343
543
  // Projects Overlay V2
344
544
  // =============================================================================
@@ -352,6 +552,15 @@ export class ProjectsOverlayV2 extends TabbedListOverlayV2 {
352
552
  deleteValidation: null,
353
553
  modified: false,
354
554
  };
555
+ editState = {
556
+ targetProject: null,
557
+ fields: [],
558
+ selectedFieldIndex: 0,
559
+ editingField: false,
560
+ inputBuffer: '',
561
+ error: null,
562
+ modified: false,
563
+ };
355
564
  constructor() {
356
565
  // Load projects from database
357
566
  const { projects } = projectRepository.list({ status: 'all' });
@@ -395,7 +604,7 @@ export class ProjectsOverlayV2 extends TabbedListOverlayV2 {
395
604
  if (searchMode) {
396
605
  return 'Type to filter · ↑↓/jk Navigate · Enter Open · Esc Exit search';
397
606
  }
398
- return '↑↓/jk Navigate · ←→/hl Tabs · / Search · Enter Open · x Archive · d Delete · q/Esc Close';
607
+ return '↑↓/jk Navigate · ←→/hl Tabs · / Search · Enter Open · e Edit · x Archive · d Delete · q/Esc Close';
399
608
  },
400
609
  renderSelectedPreview: (project, s) => {
401
610
  const lines = [];
@@ -416,7 +625,7 @@ export class ProjectsOverlayV2 extends TabbedListOverlayV2 {
416
625
  const completed = workItems.filter(w => w.status === 'completed').length;
417
626
  if (total > 0) {
418
627
  const percent = Math.round((completed / total) * 100);
419
- const progressBar = renderProgressBar(percent, 20, s);
628
+ const progressBar = renderProgressBar(percent / 100, 20, s);
420
629
  lines.push(` ${s.muted('Work Items:')} ${progressBar} ${String(completed)}/${String(total)} (${String(percent)}%)`);
421
630
  }
422
631
  else {
@@ -469,6 +678,24 @@ export class ProjectsOverlayV2 extends TabbedListOverlayV2 {
469
678
  const project = this.state.filteredItems[this.state.selectedIndex];
470
679
  return this.push(new WorkflowOverlayV2(project.id));
471
680
  }
681
+ // 'e' edit project
682
+ if ((key.char === 'e' || key.char === 'E') && this.state.filteredItems.length > 0) {
683
+ const project = this.state.filteredItems[this.state.selectedIndex];
684
+ this.editState.targetProject = project;
685
+ this.editState.selectedFieldIndex = 0;
686
+ this.editState.editingField = false;
687
+ this.editState.inputBuffer = '';
688
+ this.editState.error = null;
689
+ this.editState.fields = [
690
+ { key: 'displayName', label: 'Display Name', value: project.displayName, placeholder: 'Project display name' },
691
+ { key: 'description', label: 'Description', value: project.description || '', placeholder: 'Brief description' },
692
+ { key: 'path', label: 'Path', value: project.path || '', placeholder: '/path/to/project' },
693
+ { key: 'gitRemote', label: 'Git Remote', value: project.gitRemote || '', placeholder: 'https://github.com/...' },
694
+ { key: 'gitBranch', label: 'Git Branch', value: project.gitBranch || '', placeholder: 'main' },
695
+ ];
696
+ this.screenStack.push(new ProjectEditScreen(this.editState, this.getStyles(), () => { this.refreshProjects(); }));
697
+ return this.rerender();
698
+ }
472
699
  // 'x' archive/restore
473
700
  if ((key.char === 'x' || key.char === 'X') && this.state.filteredItems.length > 0) {
474
701
  const project = this.state.filteredItems[this.state.selectedIndex];
@@ -476,9 +703,16 @@ export class ProjectsOverlayV2 extends TabbedListOverlayV2 {
476
703
  this.screenStack.push(new ArchiveConfirmScreen(this.confirmState, this.getStyles(), () => { this.refreshProjects(); }));
477
704
  return this.rerender();
478
705
  }
479
- // 'd' delete
706
+ // 'd' delete (only for archived projects)
480
707
  if ((key.char === 'd' || key.char === 'D') && this.state.filteredItems.length > 0) {
481
708
  const project = this.state.filteredItems[this.state.selectedIndex];
709
+ // Block deletion of non-archived projects
710
+ if (project.status !== 'archived') {
711
+ this.confirmState.targetProject = project;
712
+ this.confirmState.deleteError = 'Archive the project first (press x), then delete';
713
+ this.screenStack.push(new DeleteBlockedScreen(this.confirmState, this.getStyles()));
714
+ return this.rerender();
715
+ }
482
716
  this.confirmState.targetProject = project;
483
717
  this.confirmState.deleteConfirmInput = '';
484
718
  this.confirmState.deleteError = null;
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Reset Overlay V2
3
+ *
4
+ * Modal overlay for resetting/clearing the conversation within the current project.
5
+ * Provides options for:
6
+ * - Reset & reload context: Clear messages, refresh COMPILR.md
7
+ * - Reset only: Clear messages, keep current context
8
+ * - Cancel: Keep current session
9
+ */
10
+ import { BaseOverlayV2 } from '../../base/index.js';
11
+ import type { RenderContext, OverlayAction, KeyEvent } from '../types.js';
12
+ export type ResetOption = 'reset-reload' | 'reset-only' | 'delete-history' | 'cancel';
13
+ interface ResetState {
14
+ /** Selected option index */
15
+ selectedIndex: number;
16
+ }
17
+ export interface ResetOverlayV2Options {
18
+ /** Project name for display */
19
+ projectName: string;
20
+ /** Number of messages in current session */
21
+ messageCount: number;
22
+ /** Estimated token usage */
23
+ tokenCount?: number;
24
+ }
25
+ export interface ResetOverlayV2Result {
26
+ /** Selected option */
27
+ option: ResetOption;
28
+ }
29
+ export declare class ResetOverlayV2 extends BaseOverlayV2<ResetState, ResetOverlayV2Result> {
30
+ readonly type: "inline";
31
+ readonly id = "reset-overlay-v2";
32
+ private readonly projectName;
33
+ private readonly messageCount;
34
+ private readonly tokenCount?;
35
+ constructor(options: ResetOverlayV2Options);
36
+ protected renderContent(context: RenderContext): string[];
37
+ handleKey(key: KeyEvent): OverlayAction<ResetOverlayV2Result>;
38
+ }
39
+ export {};
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Reset Overlay V2
3
+ *
4
+ * Modal overlay for resetting/clearing the conversation within the current project.
5
+ * Provides options for:
6
+ * - Reset & reload context: Clear messages, refresh COMPILR.md
7
+ * - Reset only: Clear messages, keep current context
8
+ * - Cancel: Keep current session
9
+ */
10
+ import { BaseOverlayV2, renderBorder, formatTokens } from '../../base/index.js';
11
+ const RESET_OPTIONS = [
12
+ {
13
+ id: 'reset-reload',
14
+ label: 'Reset & reload context',
15
+ description: 'Clear messages, refresh COMPILR.md and project context',
16
+ },
17
+ {
18
+ id: 'reset-only',
19
+ label: 'Reset only',
20
+ description: 'Clear messages, keep current context',
21
+ },
22
+ {
23
+ id: 'delete-history',
24
+ label: 'Delete conversation history',
25
+ description: 'Delete all archived sessions for this project',
26
+ },
27
+ {
28
+ id: 'cancel',
29
+ label: 'Cancel',
30
+ description: 'Keep current session',
31
+ },
32
+ ];
33
+ // =============================================================================
34
+ // Reset Overlay V2 Class
35
+ // =============================================================================
36
+ export class ResetOverlayV2 extends BaseOverlayV2 {
37
+ type = 'inline';
38
+ id = 'reset-overlay-v2';
39
+ projectName;
40
+ messageCount;
41
+ tokenCount;
42
+ constructor(options) {
43
+ super({ selectedIndex: 0 });
44
+ this.projectName = options.projectName;
45
+ this.messageCount = options.messageCount;
46
+ this.tokenCount = options.tokenCount;
47
+ this.minHeight = 18;
48
+ }
49
+ renderContent(context) {
50
+ const s = context.styles;
51
+ const border = renderBorder(context.width, s);
52
+ const lines = [];
53
+ lines.push(border);
54
+ lines.push(` ${s.primaryBold('Reset Conversation')}`);
55
+ lines.push('');
56
+ // Session info
57
+ lines.push(` ${s.muted('Project:')} ${s.primary(this.projectName)}`);
58
+ const sessionInfo = this.tokenCount
59
+ ? `${String(this.messageCount)} messages · ~${formatTokens(this.tokenCount)} tokens`
60
+ : `${String(this.messageCount)} messages`;
61
+ lines.push(` ${s.muted('Session:')} ${s.secondary(sessionInfo)}`);
62
+ lines.push('');
63
+ // Warning
64
+ lines.push(` ${s.warning('This will clear your conversation history.')}`);
65
+ lines.push(` ${s.muted('Previous session will be archived.')}`);
66
+ lines.push('');
67
+ // Options
68
+ for (let i = 0; i < RESET_OPTIONS.length; i++) {
69
+ const opt = RESET_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 Esc Cancel')}`);
79
+ lines.push(border);
80
+ return lines;
81
+ }
82
+ handleKey(key) {
83
+ // Ctrl+C closes everything
84
+ if (key.ctrl && key.name === 'c') {
85
+ return this.close({ option: 'cancel' });
86
+ }
87
+ // Escape cancels
88
+ if (key.name === 'escape') {
89
+ return this.close({ option: 'cancel' });
90
+ }
91
+ // Navigation with j/k
92
+ if (key.char === 'j' || key.name === 'down') {
93
+ this.state.selectedIndex = Math.min(this.state.selectedIndex + 1, RESET_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 = RESET_OPTIONS[this.state.selectedIndex];
103
+ return this.close({ option: selected.id });
104
+ }
105
+ return this.rerender();
106
+ }
107
+ }
@@ -0,0 +1,60 @@
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 { TabbedListOverlayV2, BaseScreen } from '../../base/index.js';
15
+ import type { SessionInfo } from '@compilr-dev/sdk';
16
+ export interface SessionItem {
17
+ sessionId: string;
18
+ preview: string;
19
+ messageCount: number;
20
+ createdAt: string;
21
+ updatedAt: string;
22
+ /** Relative time string like "2 minutes ago" */
23
+ relativeTime: string;
24
+ /** Project ID (null for global sessions) */
25
+ projectId?: number | null;
26
+ /** Project name for display */
27
+ projectName?: string | null;
28
+ /** Whether this is the current project's session */
29
+ isCurrentProject?: boolean;
30
+ /** 8-hex terminal prefix from session filename */
31
+ terminalPrefix?: string | null;
32
+ /** Human-readable terminal label, e.g. "Terminal 1" */
33
+ terminalLabel?: string | null;
34
+ /** Whether the terminal that owns this session is still running */
35
+ isActiveTerminal?: boolean;
36
+ /** Number of agents in the team roster for this session */
37
+ teamAgentCount?: number;
38
+ }
39
+ export interface ResumeOverlayV2Options {
40
+ /** Sessions to display */
41
+ sessions: SessionInfo[];
42
+ /** Current project ID (null for global) */
43
+ currentProjectId?: number | null;
44
+ /** Callback to delete a session */
45
+ onDelete?: (sessionId: string) => Promise<boolean>;
46
+ }
47
+ export interface ResumeOverlayV2Result {
48
+ /** Session ID to resume */
49
+ sessionId?: string;
50
+ /** Session was deleted */
51
+ deleted?: string;
52
+ }
53
+ export declare class ResumeOverlayV2 extends TabbedListOverlayV2<SessionItem, ResumeOverlayV2Result> {
54
+ readonly type: "inline";
55
+ readonly id = "resume-overlay-v2";
56
+ private readonly onDeleteSession?;
57
+ constructor(options: ResumeOverlayV2Options);
58
+ protected createDetailScreen(item: SessionItem): BaseScreen | null;
59
+ protected onItemSelected(item: SessionItem): ResumeOverlayV2Result | undefined;
60
+ }