@compilr-dev/cli 0.5.0 → 0.5.2

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 (587) hide show
  1. package/LICENSE +108 -0
  2. package/README.md +237 -69
  3. package/dist/.tsbuildinfo.app +1 -0
  4. package/dist/.tsbuildinfo.data +1 -0
  5. package/dist/.tsbuildinfo.domain +1 -0
  6. package/dist/.tsbuildinfo.foundation +1 -0
  7. package/dist/agent.d.ts +61 -4
  8. package/dist/agent.js +241 -245
  9. package/dist/anchors/index.d.ts +1 -1
  10. package/dist/anchors/index.js +1 -1
  11. package/dist/anchors/project-anchors.d.ts +2 -2
  12. package/dist/anchors/project-anchors.js +1 -1
  13. package/dist/auth/api-client.d.ts +124 -0
  14. package/dist/auth/api-client.js +261 -0
  15. package/dist/auth/index.d.ts +172 -0
  16. package/dist/auth/index.js +545 -0
  17. package/dist/auth/storage.d.ts +52 -0
  18. package/dist/auth/storage.js +118 -0
  19. package/dist/changelog/index.d.ts +16 -0
  20. package/dist/changelog/index.js +24 -0
  21. package/dist/changelog/releases.d.ts +17 -0
  22. package/dist/changelog/releases.js +63 -0
  23. package/dist/commands-v2/handlers/auth.d.ts +10 -0
  24. package/dist/commands-v2/handlers/auth.js +118 -0
  25. package/dist/commands-v2/handlers/background.d.ts +14 -0
  26. package/dist/commands-v2/handlers/background.js +276 -0
  27. package/dist/commands-v2/handlers/context.js +286 -81
  28. package/dist/commands-v2/handlers/core.d.ts +1 -0
  29. package/dist/commands-v2/handlers/core.js +133 -8
  30. package/dist/commands-v2/handlers/debug.js +18 -0
  31. package/dist/commands-v2/handlers/delegations.d.ts +8 -0
  32. package/dist/commands-v2/handlers/delegations.js +29 -0
  33. package/dist/commands-v2/handlers/files.d.ts +8 -0
  34. package/dist/commands-v2/handlers/files.js +162 -0
  35. package/dist/commands-v2/handlers/filter.d.ts +9 -0
  36. package/dist/commands-v2/handlers/filter.js +130 -0
  37. package/dist/commands-v2/handlers/games.d.ts +7 -0
  38. package/dist/commands-v2/handlers/games.js +57 -0
  39. package/dist/commands-v2/handlers/index.d.ts +13 -0
  40. package/dist/commands-v2/handlers/index.js +39 -0
  41. package/dist/commands-v2/handlers/mcp.d.ts +8 -0
  42. package/dist/commands-v2/handlers/mcp.js +39 -0
  43. package/dist/commands-v2/handlers/notifications.d.ts +9 -0
  44. package/dist/commands-v2/handlers/notifications.js +34 -0
  45. package/dist/commands-v2/handlers/project.js +295 -31
  46. package/dist/commands-v2/handlers/reset.d.ts +11 -0
  47. package/dist/commands-v2/handlers/reset.js +118 -0
  48. package/dist/commands-v2/handlers/session.d.ts +161 -0
  49. package/dist/commands-v2/handlers/session.js +805 -0
  50. package/dist/commands-v2/handlers/settings.d.ts +2 -0
  51. package/dist/commands-v2/handlers/settings.js +217 -35
  52. package/dist/commands-v2/handlers/tasks.d.ts +5 -0
  53. package/dist/commands-v2/handlers/tasks.js +36 -0
  54. package/dist/commands-v2/handlers/team.d.ts +9 -0
  55. package/dist/commands-v2/handlers/team.js +549 -0
  56. package/dist/commands-v2/handlers/terminals.d.ts +9 -0
  57. package/dist/commands-v2/handlers/terminals.js +34 -0
  58. package/dist/commands-v2/index.d.ts +3 -2
  59. package/dist/commands-v2/index.js +4 -1
  60. package/dist/commands-v2/registry.d.ts +15 -0
  61. package/dist/commands-v2/registry.js +34 -0
  62. package/dist/commands-v2/types.d.ts +81 -3
  63. package/dist/commands.js +13 -0
  64. package/dist/compilr-diff-companion.vsix +0 -0
  65. package/dist/db/index.js +98 -4
  66. package/dist/db/repositories/document-repository.d.ts +2 -0
  67. package/dist/db/repositories/document-repository.js +6 -1
  68. package/dist/db/repositories/index.d.ts +2 -0
  69. package/dist/db/repositories/index.js +1 -0
  70. package/dist/db/repositories/plan-repository.d.ts +101 -0
  71. package/dist/db/repositories/plan-repository.js +275 -0
  72. package/dist/db/repositories/project-repository.d.ts +6 -0
  73. package/dist/db/repositories/project-repository.js +41 -0
  74. package/dist/db/repositories/work-item-repository.d.ts +15 -0
  75. package/dist/db/repositories/work-item-repository.js +69 -4
  76. package/dist/db/schema.d.ts +40 -3
  77. package/dist/db/schema.js +66 -3
  78. package/dist/episodes/index.d.ts +20 -0
  79. package/dist/episodes/index.js +27 -0
  80. package/dist/episodes/recorder.d.ts +51 -0
  81. package/dist/episodes/recorder.js +195 -0
  82. package/dist/episodes/significant-work.d.ts +21 -0
  83. package/dist/episodes/significant-work.js +56 -0
  84. package/dist/episodes/store.d.ts +38 -0
  85. package/dist/episodes/store.js +199 -0
  86. package/dist/episodes/types.d.ts +35 -0
  87. package/dist/episodes/types.js +6 -0
  88. package/dist/episodes/work-at-risk.d.ts +12 -0
  89. package/dist/episodes/work-at-risk.js +38 -0
  90. package/dist/episodes/work-summary-anchor.d.ts +23 -0
  91. package/dist/episodes/work-summary-anchor.js +73 -0
  92. package/dist/games/coins.d.ts +66 -0
  93. package/dist/games/coins.js +165 -0
  94. package/dist/games/game-base.d.ts +84 -0
  95. package/dist/games/game-base.js +204 -0
  96. package/dist/games/index.d.ts +16 -0
  97. package/dist/games/index.js +49 -0
  98. package/dist/games/scores.d.ts +69 -0
  99. package/dist/games/scores.js +191 -0
  100. package/dist/games/tetris/board.d.ts +59 -0
  101. package/dist/games/tetris/board.js +170 -0
  102. package/dist/games/tetris/index.d.ts +109 -0
  103. package/dist/games/tetris/index.js +610 -0
  104. package/dist/games/tetris/pieces.d.ts +44 -0
  105. package/dist/games/tetris/pieces.js +271 -0
  106. package/dist/games/tetris/renderer.d.ts +26 -0
  107. package/dist/games/tetris/renderer.js +77 -0
  108. package/dist/guide/guide-content.d.ts +23 -0
  109. package/dist/guide/guide-content.js +196 -0
  110. package/dist/guide/index.d.ts +8 -0
  111. package/dist/guide/index.js +7 -0
  112. package/dist/guide/shared-content.d.ts +37 -0
  113. package/dist/guide/shared-content.js +1272 -0
  114. package/dist/guide/tutorial-helpers.d.ts +57 -0
  115. package/dist/guide/tutorial-helpers.js +147 -0
  116. package/dist/handlers/ask-user-handlers.d.ts +32 -0
  117. package/dist/handlers/ask-user-handlers.js +104 -0
  118. package/dist/handlers/delegation-handlers.d.ts +34 -0
  119. package/dist/handlers/delegation-handlers.js +291 -0
  120. package/dist/handlers/permission-handler.d.ts +30 -0
  121. package/dist/handlers/permission-handler.js +205 -0
  122. package/dist/index.d.ts +11 -1
  123. package/dist/index.js +448 -271
  124. package/dist/input-handlers/memory-handler.d.ts +1 -1
  125. package/dist/input-handlers/memory-handler.js +2 -1
  126. package/dist/models/index.d.ts +10 -0
  127. package/dist/models/index.js +12 -0
  128. package/dist/models/model-registry.d.ts +38 -0
  129. package/dist/models/model-registry.js +69 -0
  130. package/dist/models/model-tiers.d.ts +28 -0
  131. package/dist/models/model-tiers.js +71 -0
  132. package/dist/models/model-validation.d.ts +25 -0
  133. package/dist/models/model-validation.js +291 -0
  134. package/dist/models/ollama-models.d.ts +73 -0
  135. package/dist/models/ollama-models.js +178 -0
  136. package/dist/models/provider-types.d.ts +6 -0
  137. package/dist/models/provider-types.js +1 -0
  138. package/dist/models/providers.d.ts +35 -0
  139. package/dist/models/providers.js +58 -0
  140. package/dist/models/types.d.ts +4 -0
  141. package/dist/models/types.js +4 -0
  142. package/dist/multi-agent/activity.d.ts +21 -0
  143. package/dist/multi-agent/activity.js +34 -0
  144. package/dist/multi-agent/agent-selection.d.ts +55 -0
  145. package/dist/multi-agent/agent-selection.js +90 -0
  146. package/dist/multi-agent/artifacts.d.ts +197 -0
  147. package/dist/multi-agent/artifacts.js +379 -0
  148. package/dist/multi-agent/checkpointer.d.ts +138 -0
  149. package/dist/multi-agent/checkpointer.js +471 -0
  150. package/dist/multi-agent/collision-utils.d.ts +16 -0
  151. package/dist/multi-agent/collision-utils.js +28 -0
  152. package/dist/multi-agent/context-resolver.d.ts +97 -0
  153. package/dist/multi-agent/context-resolver.js +316 -0
  154. package/dist/multi-agent/custom-agents.d.ts +83 -0
  155. package/dist/multi-agent/custom-agents.js +227 -0
  156. package/dist/multi-agent/delegation-tracker.d.ts +157 -0
  157. package/dist/multi-agent/delegation-tracker.js +243 -0
  158. package/dist/multi-agent/file-lock-hook.d.ts +29 -0
  159. package/dist/multi-agent/file-lock-hook.js +97 -0
  160. package/dist/multi-agent/file-locks.d.ts +58 -0
  161. package/dist/multi-agent/file-locks.js +194 -0
  162. package/dist/multi-agent/index.d.ts +24 -0
  163. package/dist/multi-agent/index.js +30 -0
  164. package/dist/multi-agent/mention-parser.d.ts +64 -0
  165. package/dist/multi-agent/mention-parser.js +146 -0
  166. package/dist/multi-agent/notification-manager.d.ts +84 -0
  167. package/dist/multi-agent/notification-manager.js +224 -0
  168. package/dist/multi-agent/pending-requests.d.ts +122 -0
  169. package/dist/multi-agent/pending-requests.js +155 -0
  170. package/dist/multi-agent/session-registry.d.ts +139 -0
  171. package/dist/multi-agent/session-registry.js +514 -0
  172. package/dist/multi-agent/shared-context.d.ts +293 -0
  173. package/dist/multi-agent/shared-context.js +671 -0
  174. package/dist/multi-agent/skill-requirements.d.ts +66 -0
  175. package/dist/multi-agent/skill-requirements.js +178 -0
  176. package/dist/multi-agent/task-assignment.d.ts +69 -0
  177. package/dist/multi-agent/task-assignment.js +123 -0
  178. package/dist/multi-agent/task-suggestion.d.ts +31 -0
  179. package/dist/multi-agent/task-suggestion.js +72 -0
  180. package/dist/multi-agent/team-agent.d.ts +201 -0
  181. package/dist/multi-agent/team-agent.js +488 -0
  182. package/dist/multi-agent/team.d.ts +286 -0
  183. package/dist/multi-agent/team.js +610 -0
  184. package/dist/multi-agent/tool-config.d.ts +110 -0
  185. package/dist/multi-agent/tool-config.js +661 -0
  186. package/dist/multi-agent/types.d.ts +211 -0
  187. package/dist/multi-agent/types.js +617 -0
  188. package/dist/prompts/plan-mode-prompt.d.ts +11 -0
  189. package/dist/prompts/plan-mode-prompt.js +95 -0
  190. package/dist/repl-helpers.js +5 -2
  191. package/dist/repl-v2.d.ts +401 -2
  192. package/dist/repl-v2.js +2588 -65
  193. package/dist/session/index.d.ts +6 -0
  194. package/dist/session/index.js +6 -0
  195. package/dist/session/project-session-manager.d.ts +158 -0
  196. package/dist/session/project-session-manager.js +650 -0
  197. package/dist/settings/index.d.ts +133 -13
  198. package/dist/settings/index.js +329 -24
  199. package/dist/settings/mcp-config.d.ts +76 -0
  200. package/dist/settings/mcp-config.js +143 -0
  201. package/dist/settings/paths.d.ts +4 -0
  202. package/dist/settings/paths.js +6 -0
  203. package/dist/shared-handlers.d.ts +62 -0
  204. package/dist/shared-handlers.js +48 -0
  205. package/dist/system-prompt/builder.d.ts +5 -0
  206. package/dist/system-prompt/builder.js +4 -0
  207. package/dist/system-prompt/index.d.ts +18 -0
  208. package/dist/system-prompt/index.js +18 -0
  209. package/dist/system-prompt/modules.d.ts +5 -0
  210. package/dist/system-prompt/modules.js +4 -0
  211. package/dist/tabbed-menu.js +2 -1
  212. package/dist/templates/compilr-md-import.d.ts +16 -0
  213. package/dist/templates/compilr-md-import.js +241 -0
  214. package/dist/templates/compilr-md.js +10 -61
  215. package/dist/templates/config-json.d.ts +1 -25
  216. package/dist/templates/index.d.ts +2 -0
  217. package/dist/templates/index.js +34 -73
  218. package/dist/tool-names.d.ts +113 -0
  219. package/dist/tool-names.js +239 -0
  220. package/dist/tools/ask-user-simple.d.ts +1 -1
  221. package/dist/tools/ask-user-simple.js +2 -1
  222. package/dist/tools/ask-user.d.ts +1 -1
  223. package/dist/tools/ask-user.js +2 -1
  224. package/dist/tools/backlog.d.ts +2 -2
  225. package/dist/tools/backlog.js +1 -1
  226. package/dist/tools/db-tools.d.ts +13 -61
  227. package/dist/tools/db-tools.js +12 -13
  228. package/dist/tools/delegate-background.d.ts +27 -0
  229. package/dist/tools/delegate-background.js +115 -0
  230. package/dist/tools/delegate.d.ts +22 -0
  231. package/dist/tools/delegate.js +97 -0
  232. package/dist/tools/delegation-status.d.ts +16 -0
  233. package/dist/tools/delegation-status.js +128 -0
  234. package/dist/tools/guide-tool.d.ts +12 -0
  235. package/dist/tools/guide-tool.js +59 -0
  236. package/dist/tools/handoff.d.ts +25 -0
  237. package/dist/tools/handoff.js +99 -0
  238. package/dist/tools/meta-tools.d.ts +26 -0
  239. package/dist/tools/meta-tools.js +47 -0
  240. package/dist/tools/platform-adapter.d.ts +35 -0
  241. package/dist/tools/platform-adapter.js +404 -0
  242. package/dist/tools/project-db.d.ts +5 -73
  243. package/dist/tools/project-db.js +5 -336
  244. package/dist/tools.d.ts +67 -2
  245. package/dist/tools.js +240 -48
  246. package/dist/ui/autocomplete-controller.d.ts +42 -0
  247. package/dist/ui/autocomplete-controller.js +384 -0
  248. package/dist/ui/base/index.d.ts +1 -1
  249. package/dist/ui/base/index.js +1 -1
  250. package/dist/ui/base/overlay-base-v2.d.ts +10 -0
  251. package/dist/ui/base/overlay-base-v2.js +14 -0
  252. package/dist/ui/base/render-utils.d.ts +19 -0
  253. package/dist/ui/base/render-utils.js +25 -0
  254. package/dist/ui/base/tabbed-list-overlay-v2.d.ts +16 -1
  255. package/dist/ui/base/tabbed-list-overlay-v2.js +19 -1
  256. package/dist/ui/constants/labels.d.ts +14 -0
  257. package/dist/ui/constants/labels.js +52 -0
  258. package/dist/ui/conversation-store.d.ts +55 -0
  259. package/dist/ui/conversation-store.js +107 -0
  260. package/dist/ui/conversation.js +11 -13
  261. package/dist/ui/diff.d.ts +7 -1
  262. package/dist/ui/diff.js +85 -48
  263. package/dist/ui/ephemeral.js +3 -9
  264. package/dist/ui/file-autocomplete.d.ts +24 -0
  265. package/dist/ui/file-autocomplete.js +56 -0
  266. package/dist/ui/footer-renderer.d.ts +69 -0
  267. package/dist/ui/footer-renderer.js +431 -0
  268. package/dist/ui/footer.d.ts +74 -7
  269. package/dist/ui/footer.js +173 -16
  270. package/dist/ui/input-controller.d.ts +51 -0
  271. package/dist/ui/input-controller.js +176 -0
  272. package/dist/ui/input-prompt.d.ts +19 -0
  273. package/dist/ui/input-prompt.js +206 -14
  274. package/dist/ui/keyboard-handler.d.ts +57 -0
  275. package/dist/ui/keyboard-handler.js +557 -0
  276. package/dist/ui/live-region-facade.d.ts +42 -0
  277. package/dist/ui/live-region-facade.js +205 -0
  278. package/dist/ui/live-region.d.ts +0 -4
  279. package/dist/ui/live-region.js +6 -14
  280. package/dist/ui/mascot/renderer.d.ts +1 -1
  281. package/dist/ui/mascot/renderer.js +37 -2
  282. package/dist/ui/overlay/data/tutorial-content.d.ts +9 -0
  283. package/dist/ui/overlay/data/tutorial-content.js +9 -0
  284. package/dist/ui/overlay/data/tutorial-registry.d.ts +12 -0
  285. package/dist/ui/overlay/data/tutorial-registry.js +116 -0
  286. package/dist/ui/overlay/data/tutorial-types.d.ts +35 -0
  287. package/dist/ui/overlay/data/tutorial-types.js +6 -0
  288. package/dist/ui/overlay/data/tutorials/basics/first-conversation.d.ts +7 -0
  289. package/dist/ui/overlay/data/tutorials/basics/first-conversation.js +220 -0
  290. package/dist/ui/overlay/data/tutorials/basics/first-project.d.ts +7 -0
  291. package/dist/ui/overlay/data/tutorials/basics/first-project.js +284 -0
  292. package/dist/ui/overlay/data/tutorials/basics/navigation.d.ts +8 -0
  293. package/dist/ui/overlay/data/tutorials/basics/navigation.js +22 -0
  294. package/dist/ui/overlay/data/tutorials/basics/welcome.d.ts +7 -0
  295. package/dist/ui/overlay/data/tutorials/basics/welcome.js +174 -0
  296. package/dist/ui/overlay/data/tutorials/config/context-management.d.ts +7 -0
  297. package/dist/ui/overlay/data/tutorials/config/context-management.js +158 -0
  298. package/dist/ui/overlay/data/tutorials/config/mcp-servers.d.ts +8 -0
  299. package/dist/ui/overlay/data/tutorials/config/mcp-servers.js +155 -0
  300. package/dist/ui/overlay/data/tutorials/config/model-selection.d.ts +7 -0
  301. package/dist/ui/overlay/data/tutorials/config/model-selection.js +162 -0
  302. package/dist/ui/overlay/data/tutorials/config/permissions-safety.d.ts +7 -0
  303. package/dist/ui/overlay/data/tutorials/config/permissions-safety.js +163 -0
  304. package/dist/ui/overlay/data/tutorials/config/settings-config.d.ts +7 -0
  305. package/dist/ui/overlay/data/tutorials/config/settings-config.js +166 -0
  306. package/dist/ui/overlay/data/tutorials/planning/arch.d.ts +7 -0
  307. package/dist/ui/overlay/data/tutorials/planning/arch.js +168 -0
  308. package/dist/ui/overlay/data/tutorials/planning/backlog.d.ts +7 -0
  309. package/dist/ui/overlay/data/tutorials/planning/backlog.js +103 -0
  310. package/dist/ui/overlay/data/tutorials/planning/build.d.ts +7 -0
  311. package/dist/ui/overlay/data/tutorials/planning/build.js +173 -0
  312. package/dist/ui/overlay/data/tutorials/planning/design.d.ts +7 -0
  313. package/dist/ui/overlay/data/tutorials/planning/design.js +205 -0
  314. package/dist/ui/overlay/data/tutorials/planning/docs.d.ts +7 -0
  315. package/dist/ui/overlay/data/tutorials/planning/docs.js +143 -0
  316. package/dist/ui/overlay/data/tutorials/planning/prd.d.ts +7 -0
  317. package/dist/ui/overlay/data/tutorials/planning/prd.js +173 -0
  318. package/dist/ui/overlay/data/tutorials/planning/scaffold.d.ts +7 -0
  319. package/dist/ui/overlay/data/tutorials/planning/scaffold.js +164 -0
  320. package/dist/ui/overlay/data/tutorials/planning/sketch.d.ts +7 -0
  321. package/dist/ui/overlay/data/tutorials/planning/sketch.js +58 -0
  322. package/dist/ui/overlay/data/tutorials/projects/anchors.d.ts +7 -0
  323. package/dist/ui/overlay/data/tutorials/projects/anchors.js +248 -0
  324. package/dist/ui/overlay/data/tutorials/projects/import-project.d.ts +7 -0
  325. package/dist/ui/overlay/data/tutorials/projects/import-project.js +172 -0
  326. package/dist/ui/overlay/data/tutorials/projects/managing-projects.d.ts +8 -0
  327. package/dist/ui/overlay/data/tutorials/projects/managing-projects.js +212 -0
  328. package/dist/ui/overlay/data/tutorials/projects/new-project.d.ts +7 -0
  329. package/dist/ui/overlay/data/tutorials/projects/new-project.js +251 -0
  330. package/dist/ui/overlay/data/tutorials/projects/session-management.d.ts +7 -0
  331. package/dist/ui/overlay/data/tutorials/projects/session-management.js +169 -0
  332. package/dist/ui/overlay/data/tutorials/teams/background-execution.d.ts +7 -0
  333. package/dist/ui/overlay/data/tutorials/teams/background-execution.js +171 -0
  334. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.d.ts +8 -0
  335. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.js +147 -0
  336. package/dist/ui/overlay/data/tutorials/teams/task-assignment.d.ts +7 -0
  337. package/dist/ui/overlay/data/tutorials/teams/task-assignment.js +204 -0
  338. package/dist/ui/overlay/data/tutorials/teams/team-overview.d.ts +7 -0
  339. package/dist/ui/overlay/data/tutorials/teams/team-overview.js +165 -0
  340. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.d.ts +7 -0
  341. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.js +172 -0
  342. package/dist/ui/overlay/impl/agents-overlay-v2.js +6 -17
  343. package/dist/ui/overlay/impl/anchors-overlay-v2.js +30 -64
  344. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.d.ts +43 -0
  345. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.js +232 -0
  346. package/dist/ui/overlay/impl/artifact-overlay-v2.d.ts +40 -0
  347. package/dist/ui/overlay/impl/artifact-overlay-v2.js +115 -0
  348. package/dist/ui/overlay/impl/ask-user-overlay-v2.js +2 -5
  349. package/dist/ui/overlay/impl/background-overlay-v2.d.ts +40 -0
  350. package/dist/ui/overlay/impl/background-overlay-v2.js +147 -0
  351. package/dist/ui/overlay/impl/backlog-overlay-v2.d.ts +4 -1
  352. package/dist/ui/overlay/impl/backlog-overlay-v2.js +55 -16
  353. package/dist/ui/overlay/impl/changelog-overlay-v2.d.ts +44 -0
  354. package/dist/ui/overlay/impl/changelog-overlay-v2.js +165 -0
  355. package/dist/ui/overlay/impl/commands-overlay-v2.js +4 -6
  356. package/dist/ui/overlay/impl/config-overlay-v2.d.ts +12 -1
  357. package/dist/ui/overlay/impl/config-overlay-v2.js +164 -100
  358. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.d.ts +83 -0
  359. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.js +711 -0
  360. package/dist/ui/overlay/impl/dashboard-overlay-v2.d.ts +2 -0
  361. package/dist/ui/overlay/impl/dashboard-overlay-v2.js +26 -3
  362. package/dist/ui/overlay/impl/delegations-overlay-v2.d.ts +28 -0
  363. package/dist/ui/overlay/impl/delegations-overlay-v2.js +279 -0
  364. package/dist/ui/overlay/impl/docs-overlay-v2.js +12 -9
  365. package/dist/ui/overlay/impl/document-detail-overlay-v2.d.ts +7 -0
  366. package/dist/ui/overlay/impl/document-detail-overlay-v2.js +119 -78
  367. package/dist/ui/overlay/impl/filter-overlay-v2.d.ts +41 -0
  368. package/dist/ui/overlay/impl/filter-overlay-v2.js +110 -0
  369. package/dist/ui/overlay/impl/games-overlay-v2.d.ts +31 -0
  370. package/dist/ui/overlay/impl/games-overlay-v2.js +135 -0
  371. package/dist/ui/overlay/impl/help-overlay-v2.d.ts +26 -3
  372. package/dist/ui/overlay/impl/help-overlay-v2.js +20 -42
  373. package/dist/ui/overlay/impl/login-overlay-v2.d.ts +49 -0
  374. package/dist/ui/overlay/impl/login-overlay-v2.js +277 -0
  375. package/dist/ui/overlay/impl/mcp-overlay-v2.d.ts +63 -0
  376. package/dist/ui/overlay/impl/mcp-overlay-v2.js +907 -0
  377. package/dist/ui/overlay/impl/model-overlay-v2.d.ts +57 -13
  378. package/dist/ui/overlay/impl/model-overlay-v2.js +1086 -61
  379. package/dist/ui/overlay/impl/new-overlay-v2.d.ts +37 -6
  380. package/dist/ui/overlay/impl/new-overlay-v2.js +715 -65
  381. package/dist/ui/overlay/impl/notifications-overlay-v2.d.ts +20 -0
  382. package/dist/ui/overlay/impl/notifications-overlay-v2.js +116 -0
  383. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.d.ts +76 -0
  384. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.js +728 -0
  385. package/dist/ui/overlay/impl/pending-overlay-v2.d.ts +51 -0
  386. package/dist/ui/overlay/impl/pending-overlay-v2.js +445 -0
  387. package/dist/ui/overlay/impl/permission-overlay-v2.js +5 -5
  388. package/dist/ui/overlay/impl/permissions-overlay-v2.d.ts +85 -0
  389. package/dist/ui/overlay/impl/permissions-overlay-v2.js +820 -0
  390. package/dist/ui/overlay/impl/plan-approval-overlay-v2.d.ts +35 -0
  391. package/dist/ui/overlay/impl/plan-approval-overlay-v2.js +181 -0
  392. package/dist/ui/overlay/impl/project-edit-overlay-v2.d.ts +36 -0
  393. package/dist/ui/overlay/impl/project-edit-overlay-v2.js +195 -0
  394. package/dist/ui/overlay/impl/projects-overlay-v2.d.ts +1 -0
  395. package/dist/ui/overlay/impl/projects-overlay-v2.js +278 -44
  396. package/dist/ui/overlay/impl/reset-overlay-v2.d.ts +39 -0
  397. package/dist/ui/overlay/impl/reset-overlay-v2.js +107 -0
  398. package/dist/ui/overlay/impl/resume-overlay-v2.d.ts +60 -0
  399. package/dist/ui/overlay/impl/resume-overlay-v2.js +414 -0
  400. package/dist/ui/overlay/impl/session-mode-overlay-v2.d.ts +43 -0
  401. package/dist/ui/overlay/impl/session-mode-overlay-v2.js +124 -0
  402. package/dist/ui/overlay/impl/tasks-overlay-v2.d.ts +28 -0
  403. package/dist/ui/overlay/impl/tasks-overlay-v2.js +283 -0
  404. package/dist/ui/overlay/impl/team-overlay-v2.d.ts +86 -0
  405. package/dist/ui/overlay/impl/team-overlay-v2.js +692 -0
  406. package/dist/ui/overlay/impl/terminals-overlay-v2.d.ts +26 -0
  407. package/dist/ui/overlay/impl/terminals-overlay-v2.js +217 -0
  408. package/dist/ui/overlay/impl/tools-overlay-v2.js +3 -7
  409. package/dist/ui/overlay/impl/tutorial-overlay-v2.d.ts +30 -16
  410. package/dist/ui/overlay/impl/tutorial-overlay-v2.js +133 -956
  411. package/dist/ui/overlay/impl/workflow-overlay-v2.d.ts +1 -0
  412. package/dist/ui/overlay/impl/workflow-overlay-v2.js +10 -4
  413. package/dist/ui/overlay/index.d.ts +20 -1
  414. package/dist/ui/overlay/index.js +19 -0
  415. package/dist/ui/overlay/types.d.ts +5 -0
  416. package/dist/ui/overlay-manager.d.ts +43 -0
  417. package/dist/ui/overlay-manager.js +238 -0
  418. package/dist/ui/overlays.js +4 -16
  419. package/dist/ui/permission-overlay.js +6 -5
  420. package/dist/ui/status-bar-controller.d.ts +33 -0
  421. package/dist/ui/status-bar-controller.js +99 -0
  422. package/dist/ui/subagent-renderer.js +3 -19
  423. package/dist/ui/terminal-autocomplete-utils.d.ts +23 -0
  424. package/dist/ui/terminal-autocomplete-utils.js +83 -0
  425. package/dist/ui/terminal-line-builders.d.ts +17 -0
  426. package/dist/ui/terminal-line-builders.js +42 -0
  427. package/dist/ui/terminal-render-item.d.ts +16 -0
  428. package/dist/ui/terminal-render-item.js +267 -0
  429. package/dist/ui/terminal-renderer.d.ts +7 -8
  430. package/dist/ui/terminal-renderer.js +7 -8
  431. package/dist/ui/terminal-types.d.ts +179 -0
  432. package/dist/ui/terminal-types.js +34 -0
  433. package/dist/ui/terminal-ui.d.ts +144 -276
  434. package/dist/ui/terminal-ui.js +384 -1861
  435. package/dist/ui/todo-zone.d.ts +19 -1
  436. package/dist/ui/todo-zone.js +71 -13
  437. package/dist/ui/tool-formatters.js +696 -1
  438. package/dist/ui/turn-metrics.d.ts +56 -0
  439. package/dist/ui/turn-metrics.js +75 -0
  440. package/dist/ui/types.d.ts +28 -0
  441. package/dist/ui/types.js +1 -0
  442. package/dist/ui/vscode-diff-ipc.d.ts +102 -0
  443. package/dist/ui/vscode-diff-ipc.js +385 -0
  444. package/dist/utils/credentials.d.ts +24 -5
  445. package/dist/utils/credentials.js +123 -9
  446. package/dist/utils/format-tokens.d.ts +13 -0
  447. package/dist/utils/format-tokens.js +18 -0
  448. package/dist/utils/git-config.d.ts +26 -0
  449. package/dist/utils/git-config.js +54 -0
  450. package/dist/utils/message-utils.d.ts +61 -0
  451. package/dist/utils/message-utils.js +72 -0
  452. package/dist/utils/model-tiers.d.ts +8 -1
  453. package/dist/utils/model-tiers.js +38 -16
  454. package/dist/utils/open-browser.d.ts +5 -0
  455. package/dist/utils/open-browser.js +32 -0
  456. package/dist/utils/path-safety.js +3 -2
  457. package/dist/utils/project-detection.d.ts +58 -0
  458. package/dist/utils/project-detection.js +424 -0
  459. package/dist/utils/project-memory.js +2 -1
  460. package/dist/utils/project-status.d.ts +2 -2
  461. package/dist/utils/startup-perf.d.ts +18 -0
  462. package/dist/utils/startup-perf.js +60 -0
  463. package/dist/utils/token-tracker.d.ts +62 -0
  464. package/dist/utils/token-tracker.js +150 -0
  465. package/dist/utils/token-types.d.ts +23 -0
  466. package/dist/utils/token-types.js +18 -0
  467. package/dist/utils/types/config-types.d.ts +32 -0
  468. package/dist/utils/types/config-types.js +8 -0
  469. package/dist/utils/update-checker.d.ts +28 -0
  470. package/dist/utils/update-checker.js +106 -0
  471. package/dist/utils/version.d.ts +7 -0
  472. package/dist/utils/version.js +10 -0
  473. package/dist/utils/vscode-detect.d.ts +39 -0
  474. package/dist/utils/vscode-detect.js +137 -0
  475. package/package.json +27 -13
  476. package/dist/commands/handler-types.d.ts +0 -68
  477. package/dist/commands/handler-types.js +0 -8
  478. package/dist/commands/handlers/agent-commands.d.ts +0 -13
  479. package/dist/commands/handlers/agent-commands.js +0 -305
  480. package/dist/commands/handlers/design-commands.d.ts +0 -15
  481. package/dist/commands/handlers/design-commands.js +0 -334
  482. package/dist/commands/handlers/index.d.ts +0 -20
  483. package/dist/commands/handlers/index.js +0 -43
  484. package/dist/commands/handlers/overlay-commands.d.ts +0 -21
  485. package/dist/commands/handlers/overlay-commands.js +0 -287
  486. package/dist/commands/handlers/project-commands.d.ts +0 -11
  487. package/dist/commands/handlers/project-commands.js +0 -167
  488. package/dist/commands/handlers/simple-commands.d.ts +0 -19
  489. package/dist/commands/handlers/simple-commands.js +0 -144
  490. package/dist/commands/registry.d.ts +0 -50
  491. package/dist/commands/registry.js +0 -75
  492. package/dist/index.old.d.ts +0 -7
  493. package/dist/index.old.js +0 -1014
  494. package/dist/repl.d.ts +0 -149
  495. package/dist/repl.js +0 -1151
  496. package/dist/templates/claude-md.d.ts +0 -7
  497. package/dist/templates/claude-md.js +0 -189
  498. package/dist/test-autocomplete.d.ts +0 -7
  499. package/dist/test-autocomplete.js +0 -85
  500. package/dist/test-tabbed-menu.d.ts +0 -7
  501. package/dist/test-tabbed-menu.js +0 -25
  502. package/dist/tool-selector.d.ts +0 -71
  503. package/dist/tool-selector.js +0 -184
  504. package/dist/tools/anchor-tools.d.ts +0 -31
  505. package/dist/tools/anchor-tools.js +0 -255
  506. package/dist/tools/backlog-wrappers.d.ts +0 -54
  507. package/dist/tools/backlog-wrappers.js +0 -338
  508. package/dist/tools/document-db.d.ts +0 -43
  509. package/dist/tools/document-db.js +0 -220
  510. package/dist/tools/workitem-db.d.ts +0 -103
  511. package/dist/tools/workitem-db.js +0 -549
  512. package/dist/ui/agents-overlay-v2.d.ts +0 -43
  513. package/dist/ui/agents-overlay-v2.js +0 -809
  514. package/dist/ui/agents-overlay.d.ts +0 -12
  515. package/dist/ui/agents-overlay.js +0 -863
  516. package/dist/ui/anchors-overlay.d.ts +0 -12
  517. package/dist/ui/anchors-overlay.js +0 -775
  518. package/dist/ui/arch-type-overlay.d.ts +0 -15
  519. package/dist/ui/arch-type-overlay.js +0 -201
  520. package/dist/ui/ask-user-overlay-v2.d.ts +0 -26
  521. package/dist/ui/ask-user-overlay-v2.js +0 -555
  522. package/dist/ui/ask-user-simple-overlay-v2.d.ts +0 -25
  523. package/dist/ui/ask-user-simple-overlay-v2.js +0 -215
  524. package/dist/ui/backlog-overlay.d.ts +0 -32
  525. package/dist/ui/backlog-overlay.js +0 -652
  526. package/dist/ui/commands-overlay-v2.d.ts +0 -33
  527. package/dist/ui/commands-overlay-v2.js +0 -441
  528. package/dist/ui/commands-overlay.d.ts +0 -16
  529. package/dist/ui/commands-overlay.js +0 -439
  530. package/dist/ui/config-overlay.d.ts +0 -35
  531. package/dist/ui/config-overlay.js +0 -707
  532. package/dist/ui/docs-overlay.d.ts +0 -17
  533. package/dist/ui/docs-overlay.js +0 -303
  534. package/dist/ui/footer-v2.d.ts +0 -222
  535. package/dist/ui/footer-v2.js +0 -1349
  536. package/dist/ui/help-overlay-v2.d.ts +0 -34
  537. package/dist/ui/help-overlay-v2.js +0 -309
  538. package/dist/ui/help-overlay.d.ts +0 -16
  539. package/dist/ui/help-overlay.js +0 -316
  540. package/dist/ui/init-overlay-v2.d.ts +0 -34
  541. package/dist/ui/init-overlay-v2.js +0 -600
  542. package/dist/ui/init-overlay.d.ts +0 -34
  543. package/dist/ui/init-overlay.js +0 -604
  544. package/dist/ui/input-prompt-v2.d.ts +0 -180
  545. package/dist/ui/input-prompt-v2.js +0 -999
  546. package/dist/ui/iteration-limit-overlay-v2.d.ts +0 -21
  547. package/dist/ui/iteration-limit-overlay-v2.js +0 -114
  548. package/dist/ui/keys-overlay-v2.d.ts +0 -41
  549. package/dist/ui/keys-overlay-v2.js +0 -248
  550. package/dist/ui/mascot-overlay-v2.d.ts +0 -41
  551. package/dist/ui/mascot-overlay-v2.js +0 -138
  552. package/dist/ui/mascot-overlay.d.ts +0 -21
  553. package/dist/ui/mascot-overlay.js +0 -146
  554. package/dist/ui/model-overlay-v2.d.ts +0 -49
  555. package/dist/ui/model-overlay-v2.js +0 -118
  556. package/dist/ui/model-overlay.d.ts +0 -27
  557. package/dist/ui/model-overlay.js +0 -221
  558. package/dist/ui/model-warning-overlay.d.ts +0 -30
  559. package/dist/ui/model-warning-overlay.js +0 -169
  560. package/dist/ui/new-overlay.d.ts +0 -34
  561. package/dist/ui/new-overlay.js +0 -604
  562. package/dist/ui/overlay/impl/init-overlay-v2.d.ts +0 -77
  563. package/dist/ui/overlay/impl/init-overlay-v2.js +0 -593
  564. package/dist/ui/overlay/overlay-types.d.ts +0 -128
  565. package/dist/ui/overlay/overlay-types.js +0 -22
  566. package/dist/ui/overlays/help-overlay-v2.d.ts +0 -28
  567. package/dist/ui/overlays/help-overlay-v2.js +0 -198
  568. package/dist/ui/overlays/index.d.ts +0 -11
  569. package/dist/ui/overlays/index.js +0 -11
  570. package/dist/ui/permission-overlay-v2.d.ts +0 -36
  571. package/dist/ui/permission-overlay-v2.js +0 -380
  572. package/dist/ui/projects-overlay.d.ts +0 -19
  573. package/dist/ui/projects-overlay.js +0 -484
  574. package/dist/ui/theme-overlay-v2.d.ts +0 -42
  575. package/dist/ui/theme-overlay-v2.js +0 -135
  576. package/dist/ui/theme-overlay.d.ts +0 -24
  577. package/dist/ui/theme-overlay.js +0 -127
  578. package/dist/ui/tools-overlay-v2.d.ts +0 -47
  579. package/dist/ui/tools-overlay-v2.js +0 -218
  580. package/dist/ui/tools-overlay.d.ts +0 -34
  581. package/dist/ui/tools-overlay.js +0 -230
  582. package/dist/ui/tutorial-overlay-v2.d.ts +0 -31
  583. package/dist/ui/tutorial-overlay-v2.js +0 -1035
  584. package/dist/ui/tutorial-overlay.d.ts +0 -11
  585. package/dist/ui/tutorial-overlay.js +0 -1034
  586. package/dist/ui/workflow-overlay.d.ts +0 -22
  587. 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>;