@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
@@ -1,484 +0,0 @@
1
- /**
2
- * Projects Overlay
3
- *
4
- * Interactive overlay for viewing and managing projects.
5
- * Uses TabbedListOverlay for consistent tabbed list behavior.
6
- *
7
- * Features:
8
- * - Tabbed filtering by status (All, Active, Paused, Completed, Archived)
9
- * - Paginated list with search
10
- * - Project detail preview
11
- * - Archive/Restore workflow
12
- * - Delete workflow with path validation
13
- * - Keyboard navigation (vim-style + arrows)
14
- */
15
- import * as fs from 'fs';
16
- import * as terminal from './terminal.js';
17
- import { TabbedListOverlay, BaseScreen, stay, popScreen, closeOverlay, isEnter, isCtrlC, isEscape, isBackspace, isClose, renderBorder, } from './base/index.js';
18
- import { projectRepository, workItemRepository } from '../db/repositories/index.js';
19
- import { clearActiveProject, getActiveProject } from '../tools/project-db.js';
20
- import { validateDeletePath } from '../utils/path-safety.js';
21
- import { getAllowedDeletePaths } from '../settings/paths.js';
22
- import { clearProjectAnchors } from '../anchors/index.js';
23
- // =============================================================================
24
- // Constants
25
- // =============================================================================
26
- const PAGE_SIZE = 10;
27
- const TABS = [
28
- { id: 'all', label: 'All' },
29
- { id: 'active', label: 'Active' },
30
- { id: 'paused', label: 'Paused' },
31
- { id: 'completed', label: 'Complete' },
32
- { id: 'archived', label: 'Archived' },
33
- ];
34
- const STATUS_ICONS = {
35
- active: '●',
36
- paused: '◐',
37
- completed: '✓',
38
- archived: '◌',
39
- };
40
- const STATUS_LABELS = {
41
- active: 'Active',
42
- paused: 'Paused',
43
- completed: 'Complete',
44
- archived: 'Archived',
45
- };
46
- // =============================================================================
47
- // Helper Functions
48
- // =============================================================================
49
- function truncate(str, maxLen) {
50
- if (str.length <= maxLen)
51
- return str;
52
- return str.slice(0, maxLen - 3) + '...';
53
- }
54
- function renderProgressBar(percent, width, s) {
55
- const filled = Math.round((percent / 100) * width);
56
- const empty = width - filled;
57
- return s.primary('█'.repeat(filled)) + s.muted('░'.repeat(empty));
58
- }
59
- // =============================================================================
60
- // Archive Confirm Screen
61
- // =============================================================================
62
- class ArchiveConfirmScreen extends BaseScreen {
63
- confirmState;
64
- styles;
65
- onComplete;
66
- constructor(confirmState, styles, onComplete) {
67
- super();
68
- this.confirmState = confirmState;
69
- this.styles = styles;
70
- this.onComplete = onComplete;
71
- }
72
- render() {
73
- const s = this.styles;
74
- const cols = terminal.getTerminalWidth();
75
- const border = renderBorder(cols, s);
76
- const project = this.confirmState.targetProject;
77
- const lines = [];
78
- if (!project) {
79
- lines.push(border);
80
- lines.push(s.error(' No project selected'));
81
- lines.push(border);
82
- return lines;
83
- }
84
- const isArchived = project.status === 'archived';
85
- const action = isArchived ? 'RESTORE' : 'ARCHIVE';
86
- lines.push(border);
87
- lines.push(` ${s.primaryBold(action + ' PROJECT')}`);
88
- lines.push('');
89
- if (isArchived) {
90
- lines.push(` ${s.foreground('Restore this project?')}`);
91
- lines.push('');
92
- lines.push(s.muted(' Project: ') + project.displayName);
93
- lines.push('');
94
- lines.push(s.foreground(' The project will be marked as "active" and visible again.'));
95
- }
96
- else {
97
- lines.push(` ${s.warning('Archive this project?')}`);
98
- lines.push('');
99
- lines.push(s.muted(' Project: ') + project.displayName);
100
- lines.push('');
101
- lines.push(s.foreground(' The project will be hidden from the active view.'));
102
- lines.push(s.foreground(' You can restore it later from the Archived tab.'));
103
- }
104
- lines.push('');
105
- lines.push(border);
106
- lines.push(s.muted(' Enter Confirm · Esc Cancel'));
107
- lines.push(border);
108
- return lines;
109
- }
110
- handleKey(data) {
111
- if (isCtrlC(data)) {
112
- return closeOverlay({ action: 'cancel' });
113
- }
114
- if (isEscape(data)) {
115
- this.confirmState.targetProject = null;
116
- return popScreen();
117
- }
118
- if (isEnter(data)) {
119
- const project = this.confirmState.targetProject;
120
- if (!project)
121
- return popScreen();
122
- const isArchived = project.status === 'archived';
123
- const newStatus = isArchived ? 'active' : 'archived';
124
- projectRepository.update(project.id, { status: newStatus });
125
- // Clear as active if archiving the active project
126
- if (!isArchived && getActiveProject()?.id === project.id) {
127
- clearActiveProject();
128
- }
129
- this.onComplete();
130
- this.confirmState.targetProject = null;
131
- return popScreen();
132
- }
133
- return stay(false);
134
- }
135
- }
136
- // =============================================================================
137
- // Delete Confirm Screen
138
- // =============================================================================
139
- class DeleteConfirmScreen extends BaseScreen {
140
- confirmState;
141
- styles;
142
- onComplete;
143
- constructor(confirmState, styles, onComplete) {
144
- super();
145
- this.confirmState = confirmState;
146
- this.styles = styles;
147
- this.onComplete = onComplete;
148
- }
149
- render() {
150
- const s = this.styles;
151
- const cols = terminal.getTerminalWidth();
152
- const border = renderBorder(cols, s);
153
- const project = this.confirmState.targetProject;
154
- const validation = this.confirmState.deleteValidation;
155
- const lines = [];
156
- if (!project) {
157
- lines.push(border);
158
- lines.push(s.error(' No project selected'));
159
- lines.push(border);
160
- return lines;
161
- }
162
- lines.push(border);
163
- lines.push(` ${s.error('DELETE PROJECT')}`);
164
- lines.push('');
165
- // If validation failed, show error state
166
- if (validation && !validation.valid) {
167
- lines.push(s.error(' CANNOT DELETE: Path validation failed'));
168
- lines.push('');
169
- lines.push(s.muted(' Project: ') + project.displayName);
170
- lines.push(s.muted(' Path: ') + project.path);
171
- lines.push('');
172
- lines.push(s.error(` Error: ${validation.reason || 'Unknown error'}`));
173
- lines.push('');
174
- lines.push(s.foreground(' Allowed directories:'));
175
- for (const allowed of getAllowedDeletePaths()) {
176
- lines.push(s.muted(` • ${allowed}`));
177
- }
178
- lines.push('');
179
- lines.push(s.foreground(' Options:'));
180
- lines.push(s.muted(' 1. Move the project to an allowed directory'));
181
- lines.push(s.muted(' 2. Add path to allowedPaths in /config'));
182
- lines.push(s.muted(' 3. Delete files manually and remove from database only'));
183
- lines.push('');
184
- lines.push(border);
185
- lines.push(s.muted(' Esc Back'));
186
- lines.push(border);
187
- return lines;
188
- }
189
- lines.push(s.warning(' WARNING: This action cannot be undone!'));
190
- lines.push('');
191
- lines.push(s.muted(' Project: ') + project.displayName);
192
- lines.push(s.muted(' Name: ') + project.name);
193
- lines.push(s.muted(' Path: ') + project.path);
194
- lines.push('');
195
- // Show validation status
196
- if (validation && validation.valid) {
197
- if (fs.existsSync(project.path + '/.compilr')) {
198
- lines.push(s.success(' ✓ Path is within allowed directory'));
199
- lines.push(s.success(' ✓ Project has .compilr marker'));
200
- }
201
- else if (fs.existsSync(project.path + '/.git')) {
202
- lines.push(s.success(' ✓ Path is within allowed directory'));
203
- lines.push(s.success(' ✓ Project has .git repository'));
204
- }
205
- else if (fs.existsSync(project.path + '/package.json')) {
206
- lines.push(s.success(' ✓ Path is within allowed directory'));
207
- lines.push(s.success(' ✓ Project has package.json'));
208
- }
209
- else {
210
- lines.push(s.success(' ✓ Path is within allowed directory'));
211
- }
212
- if (validation.warnings && validation.warnings.length > 0) {
213
- lines.push('');
214
- for (const warning of validation.warnings) {
215
- lines.push(s.warning(` ⚠ ${warning}`));
216
- }
217
- }
218
- lines.push('');
219
- }
220
- lines.push(s.foreground(' This will permanently delete:'));
221
- lines.push(s.muted(' • Database record (project, work items, documents)'));
222
- lines.push(s.muted(' • Project files on disk'));
223
- if (project.status !== 'archived') {
224
- lines.push('');
225
- lines.push(s.warning(' Note: Project will be archived first, then deleted.'));
226
- }
227
- lines.push('');
228
- lines.push(s.muted(' ' + '─'.repeat(cols - 4)));
229
- lines.push('');
230
- lines.push(s.foreground(' Type the project name to confirm deletion:'));
231
- lines.push('');
232
- lines.push(` > ${this.confirmState.deleteConfirmInput}█`);
233
- if (this.confirmState.deleteError) {
234
- lines.push('');
235
- lines.push(s.error(` ${this.confirmState.deleteError}`));
236
- }
237
- lines.push('');
238
- lines.push(border);
239
- lines.push(s.muted(' Enter Confirm · Esc Cancel'));
240
- lines.push(border);
241
- return lines;
242
- }
243
- handleKey(data) {
244
- const char = data.length === 1 && data[0] >= 0x20 && data[0] < 0x7f
245
- ? String.fromCharCode(data[0])
246
- : null;
247
- if (isCtrlC(data)) {
248
- return closeOverlay({ action: 'cancel' });
249
- }
250
- if (isEscape(data)) {
251
- this.confirmState.targetProject = null;
252
- this.confirmState.deleteConfirmInput = '';
253
- this.confirmState.deleteError = null;
254
- this.confirmState.deleteValidation = null;
255
- return popScreen();
256
- }
257
- if (isBackspace(data)) {
258
- this.confirmState.deleteConfirmInput = this.confirmState.deleteConfirmInput.slice(0, -1);
259
- this.confirmState.deleteError = null;
260
- return stay();
261
- }
262
- if (char) {
263
- this.confirmState.deleteConfirmInput += char;
264
- this.confirmState.deleteError = null;
265
- return stay();
266
- }
267
- if (isEnter(data)) {
268
- const project = this.confirmState.targetProject;
269
- if (!project)
270
- return popScreen();
271
- // If validation failed, don't allow Enter to proceed
272
- if (this.confirmState.deleteValidation && !this.confirmState.deleteValidation.valid) {
273
- return stay(false);
274
- }
275
- if (this.confirmState.deleteConfirmInput !== project.name) {
276
- this.confirmState.deleteError = `Type "${project.name}" exactly to confirm`;
277
- return stay();
278
- }
279
- // Archive first if not already archived
280
- if (project.status !== 'archived') {
281
- projectRepository.update(project.id, { status: 'archived' });
282
- }
283
- // Delete from database
284
- projectRepository.delete(project.id);
285
- // Clear project-specific anchors
286
- clearProjectAnchors(String(project.id));
287
- // Clear as active project if needed
288
- if (getActiveProject()?.id === project.id) {
289
- clearActiveProject();
290
- }
291
- // Delete filesystem folder (only if validation passed and path exists)
292
- const projectPath = project.path;
293
- const validation = this.confirmState.deleteValidation;
294
- if (projectPath && validation?.valid && fs.existsSync(projectPath)) {
295
- try {
296
- fs.rmSync(projectPath, { recursive: true, force: true });
297
- }
298
- catch {
299
- // Ignore delete errors - DB is already cleaned up
300
- }
301
- }
302
- this.onComplete();
303
- this.confirmState.targetProject = null;
304
- this.confirmState.deleteConfirmInput = '';
305
- this.confirmState.deleteError = null;
306
- this.confirmState.deleteValidation = null;
307
- return popScreen();
308
- }
309
- return stay(false);
310
- }
311
- }
312
- // =============================================================================
313
- // Projects Overlay
314
- // =============================================================================
315
- class ProjectsOverlay extends TabbedListOverlay {
316
- /** State for confirmation screens */
317
- confirmState = {
318
- targetProject: null,
319
- deleteConfirmInput: '',
320
- deleteError: null,
321
- deleteValidation: null,
322
- };
323
- constructor() {
324
- // Load projects from database
325
- const { projects } = projectRepository.list({ status: 'all' });
326
- const config = {
327
- title: 'Projects',
328
- tabs: TABS,
329
- items: projects,
330
- pageSize: PAGE_SIZE,
331
- filterByTab: (project, tabId) => {
332
- if (tabId === 'all') {
333
- // 'all' shows everything except archived
334
- return project.status !== 'archived';
335
- }
336
- return project.status === tabId;
337
- },
338
- getSearchText: (project) => `${project.displayName} ${project.name} ${project.path} ${project.type}`,
339
- renderItem: (project, isSelected, s) => {
340
- const cols = terminal.getTerminalWidth();
341
- const nameW = Math.min(24, Math.floor(cols * 0.25));
342
- const typeW = 10;
343
- const statusW = 12;
344
- const pathW = Math.max(20, cols - nameW - typeW - statusW - 12);
345
- const cursor = isSelected ? s.primary('❯ ') : ' ';
346
- const statusIcon = STATUS_ICONS[project.status];
347
- const statusLabel = `${statusIcon} ${STATUS_LABELS[project.status]}`;
348
- const row = [
349
- truncate(project.displayName, nameW - 1).padEnd(nameW),
350
- project.type.padEnd(typeW),
351
- statusLabel.padEnd(statusW),
352
- truncate(project.path, pathW - 1),
353
- ].join('');
354
- if (isSelected) {
355
- return `${cursor}${s.primary(row)}`;
356
- }
357
- return `${cursor}${row}`;
358
- },
359
- showCount: true,
360
- emptyMessage: 'No projects found. Use /new to create one.',
361
- noResultsMessage: 'No projects match the search.',
362
- footerHints: (searchMode) => {
363
- if (searchMode) {
364
- return 'Type to filter · ↑↓/jk Navigate · Enter Open · Esc Exit search';
365
- }
366
- return '↑↓/jk Navigate · ←→/hl Tabs · / Search · Enter Open · x Archive · d Delete · q/Esc Close';
367
- },
368
- renderSelectedPreview: (project, s) => {
369
- const lines = [];
370
- lines.push(s.muted(' ' + '─'.repeat(60)));
371
- // Last activity
372
- const lastActivity = project.lastActivityAt
373
- ? new Date(project.lastActivityAt).toLocaleDateString('en-US', {
374
- year: 'numeric',
375
- month: 'short',
376
- day: 'numeric',
377
- hour: '2-digit',
378
- minute: '2-digit',
379
- })
380
- : 'Never';
381
- lines.push(` ${s.muted('Last Activity:')} ${lastActivity}`);
382
- // Work items progress
383
- const { items: workItems, total } = workItemRepository.query({ project_id: project.id });
384
- const completed = workItems.filter(w => w.status === 'completed').length;
385
- if (total > 0) {
386
- const percent = Math.round((completed / total) * 100);
387
- const progressBar = renderProgressBar(percent, 20, s);
388
- lines.push(` ${s.muted('Work Items:')} ${progressBar} ${String(completed)}/${String(total)} (${String(percent)}%)`);
389
- }
390
- else {
391
- lines.push(` ${s.muted('Work Items:')} ${s.muted('None')}`);
392
- }
393
- return lines;
394
- },
395
- };
396
- super(config);
397
- }
398
- /**
399
- * No detail screen - we handle Enter to close with result instead
400
- */
401
- createDetailScreen(_project) {
402
- return null;
403
- }
404
- /**
405
- * Refresh projects from database after archive/delete
406
- */
407
- refreshProjects() {
408
- const { projects } = projectRepository.list({ status: 'all' });
409
- this.state.items = projects;
410
- // Re-apply tab filter
411
- const tabId = TABS[this.state.currentTab]?.id ?? 'all';
412
- let filtered = projects.filter((p) => {
413
- if (tabId === 'all')
414
- return p.status !== 'archived';
415
- return p.status === tabId;
416
- });
417
- // Re-apply search filter
418
- if (this.state.searchQuery) {
419
- const query = this.state.searchQuery.toLowerCase();
420
- filtered = filtered.filter((p) => p.displayName.toLowerCase().includes(query) ||
421
- p.name.toLowerCase().includes(query) ||
422
- p.path.toLowerCase().includes(query));
423
- }
424
- this.state.filteredItems = filtered;
425
- this.state.selectedIndex = Math.min(this.state.selectedIndex, Math.max(0, filtered.length - 1));
426
- }
427
- /**
428
- * Override to intercept custom keys before TabbedListOverlay handles them
429
- */
430
- handleKey(data) {
431
- const char = data.length === 1 && data[0] >= 0x20 && data[0] < 0x7f
432
- ? String.fromCharCode(data[0])
433
- : null;
434
- // Only intercept when on the main list screen (screen stack size = 1)
435
- if (this.screenStack.size() === 1) {
436
- // Ctrl+C always closes with cancel result
437
- if (isCtrlC(data)) {
438
- this.close({ action: 'cancel' });
439
- return;
440
- }
441
- // Don't intercept if in search mode
442
- if (!this.state.searchMode) {
443
- // q/Esc closes with cancel result
444
- if (isClose(data)) {
445
- this.close({ action: 'cancel' });
446
- return;
447
- }
448
- // Enter opens workflow (instead of detail view)
449
- if (isEnter(data) && this.state.filteredItems.length > 0) {
450
- const selected = this.state.filteredItems[this.state.selectedIndex];
451
- this.close({ action: 'open-workflow', projectId: selected.id });
452
- return;
453
- }
454
- // 'x' archive/restore
455
- if ((char === 'x' || char === 'X') && this.state.filteredItems.length > 0) {
456
- const project = this.state.filteredItems[this.state.selectedIndex];
457
- this.confirmState.targetProject = project;
458
- this.screenStack.push(new ArchiveConfirmScreen(this.confirmState, this.styles, () => { this.refreshProjects(); }));
459
- this.update();
460
- return;
461
- }
462
- // 'd' delete
463
- if ((char === 'd' || char === 'D') && this.state.filteredItems.length > 0) {
464
- const project = this.state.filteredItems[this.state.selectedIndex];
465
- this.confirmState.targetProject = project;
466
- this.confirmState.deleteConfirmInput = '';
467
- this.confirmState.deleteError = null;
468
- this.confirmState.deleteValidation = validateDeletePath(project.path);
469
- this.screenStack.push(new DeleteConfirmScreen(this.confirmState, this.styles, () => { this.refreshProjects(); }));
470
- this.update();
471
- return;
472
- }
473
- }
474
- }
475
- // Let TabbedListOverlay handle everything else
476
- super.handleKey(data);
477
- }
478
- }
479
- // =============================================================================
480
- // Export Function (Backward Compatible)
481
- // =============================================================================
482
- export async function showProjectsOverlay() {
483
- return new ProjectsOverlay().show();
484
- }
@@ -1,42 +0,0 @@
1
- /**
2
- * Theme Overlay V2
3
- *
4
- * Theme selection overlay using TabbedListOverlayV2 for the new Overlay interface.
5
- * Works with TerminalUI's overlay management.
6
- *
7
- * Features:
8
- * - Tabs: Curated (top picks), All, Dark, Light
9
- * - Search mode with / toggle
10
- * - Live preview with syntax highlighting
11
- * - Persists selection to settings
12
- */
13
- import { TabbedListOverlayV2 } from './base/index.js';
14
- import type { KeyEvent, OverlayAction } from './overlay/index.js';
15
- import { type Theme } from '../themes/index.js';
16
- export interface ThemeOverlayOptions {
17
- /** Current theme ID (for highlighting current selection) */
18
- currentThemeId?: string;
19
- }
20
- export interface ThemeOverlayResult {
21
- /** Selected theme ID (if changed) */
22
- themeChanged?: string;
23
- /** Selected theme name */
24
- themeName?: string;
25
- }
26
- /**
27
- * Theme overlay using the new Overlay interface.
28
- * Displays available themes in a searchable, tabbed list with preview.
29
- */
30
- export declare class ThemeOverlayV2 extends TabbedListOverlayV2<Theme, ThemeOverlayResult> {
31
- readonly type: "inline";
32
- readonly id = "theme-overlay-v2";
33
- private readonly currentThemeId;
34
- private readonly curatedIds;
35
- constructor(options?: ThemeOverlayOptions);
36
- handleKey(key: KeyEvent): OverlayAction<ThemeOverlayResult>;
37
- private selectTheme;
38
- /**
39
- * Optional summary shown after overlay closes.
40
- */
41
- getCloseSummary(result: ThemeOverlayResult): string | null;
42
- }
@@ -1,135 +0,0 @@
1
- /**
2
- * Theme Overlay V2
3
- *
4
- * Theme selection overlay using TabbedListOverlayV2 for the new Overlay interface.
5
- * Works with TerminalUI's overlay management.
6
- *
7
- * Features:
8
- * - Tabs: Curated (top picks), All, Dark, Light
9
- * - Search mode with / toggle
10
- * - Live preview with syntax highlighting
11
- * - Persists selection to settings
12
- */
13
- import chalk from 'chalk';
14
- import { TabbedListOverlayV2, } from './base/index.js';
15
- import { getCuratedThemes, getCurrentTheme, setCurrentTheme, getAllThemes, getThemeCount, clearStyleCache, } from '../themes/index.js';
16
- // =============================================================================
17
- // Constants
18
- // =============================================================================
19
- const PAGE_SIZE = 10;
20
- const TABS = [
21
- { id: 'curated', label: 'Curated' },
22
- { id: 'all', label: 'All' },
23
- { id: 'dark', label: 'Dark' },
24
- { id: 'light', label: 'Light' },
25
- ];
26
- // =============================================================================
27
- // Helper Functions
28
- // =============================================================================
29
- function renderPreview(theme, styles) {
30
- const lines = [];
31
- const colors = theme.colors;
32
- lines.push(styles.muted(' Preview:'));
33
- // Use chalk for hex colors in preview
34
- const primary = chalk.hex(colors.primary);
35
- const secondary = chalk.hex(colors.secondary || colors.primary);
36
- const muted = chalk.hex(colors.muted);
37
- const fg = chalk.hex(colors.foreground);
38
- lines.push(' ' + primary.bold('function') + ' ' + secondary('greet') + fg('() {'));
39
- lines.push(' ' + muted('// Say hello'));
40
- lines.push(' ' + fg('console.') + secondary('log') + fg('("Hello, ') + primary('World') + fg('!");'));
41
- lines.push(' ' + fg('}'));
42
- return lines;
43
- }
44
- // =============================================================================
45
- // Theme Overlay V2 Class
46
- // =============================================================================
47
- /**
48
- * Theme overlay using the new Overlay interface.
49
- * Displays available themes in a searchable, tabbed list with preview.
50
- */
51
- export class ThemeOverlayV2 extends TabbedListOverlayV2 {
52
- type = 'inline';
53
- id = 'theme-overlay-v2';
54
- currentThemeId;
55
- curatedIds;
56
- constructor(options = {}) {
57
- const currentTheme = getCurrentTheme();
58
- const currentThemeId = options.currentThemeId ?? currentTheme.id;
59
- const curatedThemes = getCuratedThemes();
60
- const curatedIds = new Set(curatedThemes.map(t => t.id));
61
- const allThemes = getAllThemes();
62
- const counts = getThemeCount();
63
- super({
64
- title: `Select Theme (${String(counts.total)})`,
65
- tabs: TABS,
66
- items: allThemes,
67
- pageSize: PAGE_SIZE,
68
- showCount: false, // We show count in title
69
- filterByTab: (theme, tabId) => {
70
- switch (tabId) {
71
- case 'curated':
72
- return curatedIds.has(theme.id);
73
- case 'dark':
74
- return theme.type === 'dark';
75
- case 'light':
76
- return theme.type === 'light';
77
- default:
78
- return true; // 'all'
79
- }
80
- },
81
- getSearchText: (theme) => {
82
- return `${theme.name} ${theme.id}`;
83
- },
84
- renderItem: (theme, isSelected, styles) => {
85
- const isCurrent = theme.id === currentThemeId;
86
- const prefix = isSelected ? styles.primary('> ') : ' ';
87
- const icon = theme.type === 'dark' ? 'D' : 'L';
88
- const checkmark = isCurrent ? styles.success(' *') : '';
89
- // Pad the plain name first, then apply styling (ANSI codes break padEnd)
90
- const paddedName = theme.name.padEnd(33);
91
- const label = isSelected ? styles.primary(paddedName) : paddedName;
92
- return ` ${prefix}${label}${icon}${checkmark}`;
93
- },
94
- renderSelectedPreview: (theme, styles) => {
95
- return renderPreview(theme, styles);
96
- },
97
- footerHints: (searchMode) => {
98
- if (searchMode) {
99
- return 'Type to filter · ↑↓/jk Navigate · Enter Select · Esc Exit search';
100
- }
101
- return 'Tab Filter · ↑↓/jk · ←→/hl Pages · / Search · Enter Select · q/Esc Close';
102
- },
103
- emptyMessage: 'No themes available.',
104
- noResultsMessage: 'No themes match the search.',
105
- });
106
- this.currentThemeId = currentThemeId;
107
- this.curatedIds = curatedIds;
108
- }
109
- handleKey(key) {
110
- // Handle Enter/Space to select theme
111
- if ((key.name === 'return' || key.name === 'space') && this.state.filteredItems.length > 0) {
112
- const theme = this.state.filteredItems[this.state.selectedIndex];
113
- return this.selectTheme(theme);
114
- }
115
- // Let parent handle other keys
116
- return super.handleKey(key);
117
- }
118
- selectTheme(theme) {
119
- setCurrentTheme(theme.id);
120
- clearStyleCache();
121
- return this.close({
122
- themeChanged: theme.id,
123
- themeName: theme.name,
124
- });
125
- }
126
- /**
127
- * Optional summary shown after overlay closes.
128
- */
129
- getCloseSummary(result) {
130
- if (result.themeName) {
131
- return `Theme changed to: ${result.themeName}`;
132
- }
133
- return null;
134
- }
135
- }
@@ -1,24 +0,0 @@
1
- /**
2
- * Theme Overlay
3
- *
4
- * Standalone theme selection overlay using TabbedListOverlay.
5
- * Accessible via /theme command or from Config overlay.
6
- *
7
- * Features:
8
- * - Tabs: Curated (top picks), All, Dark, Light
9
- * - Search mode with / toggle
10
- * - Live preview with syntax highlighting
11
- * - Quick select with number keys (1-9,0) in Curated tab
12
- * - Persists selection to settings
13
- */
14
- export interface ThemeOverlayOptions {
15
- /** Current theme ID (for highlighting current selection) */
16
- currentThemeId?: string;
17
- }
18
- export interface ThemeOverlayResult {
19
- /** Selected theme ID (if changed) */
20
- themeChanged?: string;
21
- /** Selected theme name */
22
- themeName?: string;
23
- }
24
- export declare function showThemeOverlay(options?: ThemeOverlayOptions): Promise<ThemeOverlayResult>;