@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,652 +0,0 @@
1
- /**
2
- * Backlog Overlay
3
- *
4
- * Modal overlay for viewing and managing the project backlog.
5
- * Uses TabbedListOverlay for consistent list/tab/search behavior.
6
- *
7
- * Features:
8
- * - Search by title/description
9
- * - Filter tabs by type (All/Feature/Bug/Tech-Debt/Chore)
10
- * - Pagination for large backlogs
11
- * - Quick status toggle with Space
12
- * - Add new items with wizard
13
- * - Database-backed with project isolation
14
- */
15
- import chalk from 'chalk';
16
- import * as terminal from './terminal.js';
17
- import { TabbedListOverlay, BaseScreen, stay, popScreen, closeOverlay, isEscape, isCtrlC, isEnter, isSpace, isNavigateUp, isNavigateDown, isLeftArrow, isRightArrow, isVimLeft, isVimRight, isBackspace, extractPrintable, renderBorder, } from './base/index.js';
18
- import { workItemRepository } from '../db/repositories/work-item-repository.js';
19
- import { getActiveProject } from '../tools/project-db.js';
20
- // =============================================================================
21
- // Constants
22
- // =============================================================================
23
- const PAGE_SIZE = 8;
24
- const TYPE_OPTIONS = ['feature', 'bug', 'tech-debt', 'chore'];
25
- const STATUS_OPTIONS = ['📋', '🚧', '✅'];
26
- const PRIORITY_OPTIONS = ['critical', 'high', 'medium', 'low'];
27
- const TYPE_LABELS = {
28
- 'feature': 'Feature',
29
- 'bug': 'Bug',
30
- 'tech-debt': 'Tech Debt',
31
- 'chore': 'Chore',
32
- };
33
- const PRIORITY_LABELS = {
34
- 'critical': 'Critical',
35
- 'high': 'High',
36
- 'medium': 'Medium',
37
- 'low': 'Low',
38
- };
39
- const TABS = [
40
- { id: 'all', label: 'All' },
41
- { id: 'active', label: 'Active' },
42
- { id: 'feature', label: 'Feature' },
43
- { id: 'bug', label: 'Bug' },
44
- { id: 'tech-debt', label: 'Tech' },
45
- { id: 'chore', label: 'Chore' },
46
- ];
47
- // =============================================================================
48
- // Status Mapping (Database ↔ Display)
49
- // =============================================================================
50
- /**
51
- * Map database status to display emoji
52
- */
53
- function dbStatusToEmoji(status) {
54
- switch (status) {
55
- case 'backlog': return '📋';
56
- case 'in_progress': return '🚧';
57
- case 'completed': return '✅';
58
- case 'skipped': return '✅'; // Show skipped as completed for simplicity
59
- default: return '📋';
60
- }
61
- }
62
- /**
63
- * Map display emoji to database status
64
- */
65
- function emojiToDbStatus(emoji) {
66
- switch (emoji) {
67
- case '📋': return 'backlog';
68
- case '🚧': return 'in_progress';
69
- case '✅': return 'completed';
70
- default: return 'backlog';
71
- }
72
- }
73
- /**
74
- * Convert database WorkItem to display BacklogItem
75
- */
76
- function workItemToBacklogItem(item) {
77
- return {
78
- id: item.itemId,
79
- dbId: item.id,
80
- type: item.type,
81
- status: dbStatusToEmoji(item.status),
82
- priority: item.priority,
83
- title: item.title,
84
- description: item.description ?? '',
85
- commit: item.commitHash ?? undefined,
86
- };
87
- }
88
- // =============================================================================
89
- // Database Operations
90
- // =============================================================================
91
- /**
92
- * Load items from database for a project
93
- */
94
- function loadItemsFromDb(projectId) {
95
- const result = workItemRepository.query({
96
- project_id: projectId,
97
- limit: 1000, // Get all items
98
- });
99
- return result.items.map(workItemToBacklogItem);
100
- }
101
- /**
102
- * Update an item's status in the database
103
- */
104
- function updateItemStatus(dbId, status) {
105
- workItemRepository.update(dbId, {
106
- status: emojiToDbStatus(status),
107
- });
108
- }
109
- /**
110
- * Update an item's type in the database
111
- */
112
- function updateItemType(dbId, type) {
113
- workItemRepository.update(dbId, { type });
114
- }
115
- /**
116
- * Update an item's priority in the database
117
- */
118
- function updateItemPriority(dbId, priority) {
119
- workItemRepository.update(dbId, { priority });
120
- }
121
- /**
122
- * Create a new item in the database
123
- */
124
- function createItem(projectId, type, priority, title, description) {
125
- const item = workItemRepository.create({
126
- project_id: projectId,
127
- type,
128
- priority,
129
- title,
130
- description,
131
- });
132
- return workItemToBacklogItem(item);
133
- }
134
- // =============================================================================
135
- // Helper Functions
136
- // =============================================================================
137
- function getStatusLabel(status) {
138
- switch (status) {
139
- case '📋': return 'Backlog';
140
- case '🚧': return 'In Progress';
141
- case '✅': return 'Completed';
142
- default: return '';
143
- }
144
- }
145
- function wrapText(text, maxWidth) {
146
- if (!text || text.length <= maxWidth)
147
- return [text || ''];
148
- const words = text.split(' ');
149
- const lines = [];
150
- let currentLine = '';
151
- for (const word of words) {
152
- if (currentLine.length === 0) {
153
- currentLine = word;
154
- }
155
- else if (currentLine.length + 1 + word.length <= maxWidth) {
156
- currentLine += ' ' + word;
157
- }
158
- else {
159
- lines.push(currentLine);
160
- currentLine = word;
161
- }
162
- }
163
- if (currentLine.length > 0) {
164
- lines.push(currentLine);
165
- }
166
- return lines.length > 0 ? lines : [''];
167
- }
168
- // =============================================================================
169
- // Detail Screen (In-Place Editing)
170
- // =============================================================================
171
- /**
172
- * Screen for editing item type, status, and priority.
173
- * Renders in-place over the list.
174
- */
175
- class DetailScreen extends BaseScreen {
176
- item;
177
- editState;
178
- styles;
179
- selectedField = 0; // 0=type, 1=status, 2=priority
180
- constructor(item, editState, styles) {
181
- super();
182
- this.item = item;
183
- this.editState = editState;
184
- this.styles = styles;
185
- }
186
- render() {
187
- const s = this.styles;
188
- const cols = terminal.getTerminalWidth();
189
- const border = renderBorder(cols, s);
190
- const lines = [];
191
- // Header
192
- lines.push(border);
193
- lines.push(` ${s.primaryBold('Edit Item')} ${s.muted(this.item.id)}`);
194
- lines.push('');
195
- // Title
196
- lines.push(` ${chalk.bold(this.item.title)}`);
197
- lines.push('');
198
- // Editable fields with selection indicator
199
- const typePrefix = this.selectedField === 0 ? s.primary('❯ Type: ') : s.muted(' Type: ');
200
- const typeValue = this.selectedField === 0 ? s.primary(TYPE_LABELS[this.item.type]) : TYPE_LABELS[this.item.type];
201
- lines.push(` ${typePrefix}${typeValue}`);
202
- const statusLabel = this.item.status + ' ' + getStatusLabel(this.item.status);
203
- const statusPrefix = this.selectedField === 1 ? s.primary('❯ Status: ') : s.muted(' Status: ');
204
- const statusValue = this.selectedField === 1 ? s.primary(statusLabel) : statusLabel;
205
- lines.push(` ${statusPrefix}${statusValue}`);
206
- const priPrefix = this.selectedField === 2 ? s.primary('❯ Priority: ') : s.muted(' Priority: ');
207
- const priValue = this.selectedField === 2 ? s.primary(PRIORITY_LABELS[this.item.priority]) : PRIORITY_LABELS[this.item.priority];
208
- lines.push(` ${priPrefix}${priValue}`);
209
- lines.push('');
210
- // Description
211
- lines.push(` ${s.muted('Description:')}`);
212
- const descLines = wrapText(this.item.description, cols - 6);
213
- for (const line of descLines) {
214
- lines.push(` ${line}`);
215
- }
216
- // Commit info
217
- if (this.item.commit) {
218
- lines.push('');
219
- lines.push(` ${s.muted('Commit:')} ${this.item.commit}`);
220
- }
221
- lines.push('');
222
- lines.push(border);
223
- lines.push(` ${s.muted('↑↓/jk Select field · ←→/hl Change value · Esc Back')}`);
224
- lines.push(border);
225
- return lines;
226
- }
227
- handleKey(data) {
228
- // Ctrl+C closes everything
229
- if (isCtrlC(data)) {
230
- return closeOverlay({ modified: this.editState.modified });
231
- }
232
- // Escape - back to list
233
- if (isEscape(data)) {
234
- return popScreen();
235
- }
236
- // Up/Down or k/j - navigate fields
237
- if (isNavigateUp(data) && this.selectedField > 0) {
238
- this.selectedField = (this.selectedField - 1);
239
- return stay();
240
- }
241
- if (isNavigateDown(data) && this.selectedField < 2) {
242
- this.selectedField = (this.selectedField + 1);
243
- return stay();
244
- }
245
- // Left/Right or h/l - change value of selected field
246
- const isLeft = isLeftArrow(data) || isVimLeft(data);
247
- const isRight = isRightArrow(data) || isVimRight(data);
248
- if (isLeft || isRight) {
249
- const direction = isRight ? 1 : -1;
250
- if (this.selectedField === 0) {
251
- // Type
252
- const currentIdx = TYPE_OPTIONS.indexOf(this.item.type);
253
- const newIdx = (currentIdx + direction + TYPE_OPTIONS.length) % TYPE_OPTIONS.length;
254
- const newType = TYPE_OPTIONS[newIdx];
255
- updateItemType(this.item.dbId, newType);
256
- this.item.type = newType;
257
- }
258
- else if (this.selectedField === 1) {
259
- // Status
260
- const currentIdx = STATUS_OPTIONS.indexOf(this.item.status);
261
- const newIdx = (currentIdx + direction + STATUS_OPTIONS.length) % STATUS_OPTIONS.length;
262
- const newStatus = STATUS_OPTIONS[newIdx];
263
- updateItemStatus(this.item.dbId, newStatus);
264
- this.item.status = newStatus;
265
- }
266
- else {
267
- // Priority
268
- const currentIdx = PRIORITY_OPTIONS.indexOf(this.item.priority);
269
- const newIdx = (currentIdx + direction + PRIORITY_OPTIONS.length) % PRIORITY_OPTIONS.length;
270
- const newPriority = PRIORITY_OPTIONS[newIdx];
271
- updateItemPriority(this.item.dbId, newPriority);
272
- this.item.priority = newPriority;
273
- }
274
- this.editState.modified = true;
275
- this.editState.reloadItems();
276
- return stay();
277
- }
278
- return stay(false);
279
- }
280
- }
281
- // =============================================================================
282
- // Add Screen (Multi-Step Wizard)
283
- // =============================================================================
284
- /**
285
- * Screen for adding a new backlog item.
286
- * 5 steps: type, priority, title, description, confirm
287
- */
288
- class AddScreen extends BaseScreen {
289
- editState;
290
- styles;
291
- step = 0;
292
- selectedIndex = 0;
293
- inputBuffer = '';
294
- error = null;
295
- newItem = { type: null, priority: null, title: '', description: '' };
296
- constructor(editState, styles) {
297
- super();
298
- this.editState = editState;
299
- this.styles = styles;
300
- }
301
- render() {
302
- const s = this.styles;
303
- const cols = terminal.getTerminalWidth();
304
- const border = renderBorder(cols, s);
305
- const lines = [];
306
- // Header
307
- lines.push(border);
308
- lines.push(` ${s.primaryBold('Add Item')}`);
309
- lines.push('');
310
- const stepLabels = ['Type', 'Priority', 'Title', 'Description', 'Confirm'];
311
- lines.push(` ${s.muted(`Step ${String(this.step + 1)}/5: ${stepLabels[this.step]}`)}`);
312
- lines.push('');
313
- switch (this.step) {
314
- case 0: // Type
315
- lines.push(` ${chalk.bold('What type of item?')}`);
316
- lines.push('');
317
- for (let i = 0; i < TYPE_OPTIONS.length; i++) {
318
- const isSelected = this.selectedIndex === i;
319
- const prefix = isSelected ? s.primary('❯ ') : ' ';
320
- const label = `${String(i + 1)}. ${TYPE_LABELS[TYPE_OPTIONS[i]]}`;
321
- lines.push(` ${prefix}${isSelected ? s.primary(label) : s.muted(label)}`);
322
- }
323
- break;
324
- case 1: // Priority
325
- lines.push(` ${chalk.bold('Priority level?')}`);
326
- lines.push('');
327
- for (let i = 0; i < PRIORITY_OPTIONS.length; i++) {
328
- const isSelected = this.selectedIndex === i;
329
- const prefix = isSelected ? s.primary('❯ ') : ' ';
330
- const label = `${String(i + 1)}. ${PRIORITY_LABELS[PRIORITY_OPTIONS[i]]}`;
331
- lines.push(` ${prefix}${isSelected ? s.primary(label) : s.muted(label)}`);
332
- }
333
- break;
334
- case 2: // Title
335
- lines.push(` ${chalk.bold('Title (short description)')}`);
336
- lines.push('');
337
- lines.push(` > ${this.inputBuffer}█`);
338
- lines.push('');
339
- if (this.error) {
340
- lines.push(` ${s.error(this.error)}`);
341
- }
342
- else {
343
- lines.push(` ${s.muted('Keep it concise (2-100 characters)')}`);
344
- }
345
- break;
346
- case 3: // Description
347
- lines.push(` ${chalk.bold('Description (details)')}`);
348
- lines.push('');
349
- lines.push(` > ${this.inputBuffer}█`);
350
- lines.push('');
351
- if (this.error) {
352
- lines.push(` ${s.error(this.error)}`);
353
- }
354
- else {
355
- lines.push(` ${s.muted('Explain the requirement or issue')}`);
356
- }
357
- break;
358
- case 4: // Confirm
359
- lines.push(` ${chalk.bold('Confirm new item:')}`);
360
- lines.push('');
361
- lines.push(` ${s.muted('Type:')} ${this.newItem.type ? TYPE_LABELS[this.newItem.type] : 'N/A'}`);
362
- lines.push(` ${s.muted('Priority:')} ${this.newItem.priority ? PRIORITY_LABELS[this.newItem.priority] : 'N/A'}`);
363
- lines.push(` ${s.muted('Title:')} ${this.newItem.title}`);
364
- lines.push(` ${s.muted('Description:')} ${this.newItem.description}`);
365
- lines.push('');
366
- for (let i = 0; i < 2; i++) {
367
- const isSelected = this.selectedIndex === i;
368
- const prefix = isSelected ? s.primary('❯ ') : ' ';
369
- const label = i === 0 ? '1. Create item' : '2. Cancel';
370
- lines.push(` ${prefix}${isSelected ? s.primary(label) : s.muted(label)}`);
371
- }
372
- break;
373
- }
374
- lines.push('');
375
- lines.push(border);
376
- if (this.step === 2 || this.step === 3) {
377
- lines.push(` ${s.muted('Enter Confirm · Esc Back')}`);
378
- }
379
- else {
380
- lines.push(` ${s.muted('↑↓/jk Navigate · Enter Select · Esc Back')}`);
381
- }
382
- lines.push(border);
383
- return lines;
384
- }
385
- handleKey(data) {
386
- const char = extractPrintable(data);
387
- // Ctrl+C closes everything
388
- if (isCtrlC(data)) {
389
- return closeOverlay({ modified: this.editState.modified });
390
- }
391
- // Text input steps (title and description)
392
- if (this.step === 2 || this.step === 3) {
393
- if (isEscape(data)) {
394
- if (this.step === 2) {
395
- this.step = 1;
396
- this.selectedIndex = 0;
397
- }
398
- else {
399
- this.step = 2;
400
- this.inputBuffer = this.newItem.title;
401
- }
402
- this.error = null;
403
- return stay();
404
- }
405
- if (isEnter(data)) {
406
- const text = this.inputBuffer.trim();
407
- if (this.step === 2) {
408
- if (text.length < 2) {
409
- this.error = 'Title too short (min 2 characters)';
410
- }
411
- else if (text.length > 100) {
412
- this.error = 'Title too long (max 100 characters)';
413
- }
414
- else {
415
- this.newItem.title = text;
416
- this.step = 3;
417
- this.inputBuffer = '';
418
- this.error = null;
419
- }
420
- }
421
- else {
422
- if (text.length < 5) {
423
- this.error = 'Description too short (min 5 characters)';
424
- }
425
- else {
426
- this.newItem.description = text;
427
- this.step = 4;
428
- this.selectedIndex = 0;
429
- this.error = null;
430
- }
431
- }
432
- return stay();
433
- }
434
- if (isBackspace(data)) {
435
- this.inputBuffer = this.inputBuffer.slice(0, -1);
436
- return stay();
437
- }
438
- if (char) {
439
- this.inputBuffer += char;
440
- return stay();
441
- }
442
- return stay(false);
443
- }
444
- // Selection steps (type, priority, confirm)
445
- if (isEscape(data)) {
446
- if (this.step === 0) {
447
- return popScreen();
448
- }
449
- else if (this.step === 4) {
450
- this.step = 3;
451
- this.inputBuffer = this.newItem.description;
452
- }
453
- else {
454
- this.step = (this.step - 1);
455
- this.selectedIndex = 0;
456
- }
457
- return stay();
458
- }
459
- if (isNavigateUp(data)) {
460
- this.selectedIndex = Math.max(0, this.selectedIndex - 1);
461
- return stay();
462
- }
463
- if (isNavigateDown(data)) {
464
- const maxIdx = this.getMaxIndexForStep();
465
- this.selectedIndex = Math.min(maxIdx, this.selectedIndex + 1);
466
- return stay();
467
- }
468
- if (isEnter(data)) {
469
- switch (this.step) {
470
- case 0:
471
- this.newItem.type = TYPE_OPTIONS[this.selectedIndex];
472
- this.step = 1;
473
- this.selectedIndex = 0;
474
- break;
475
- case 1:
476
- this.newItem.priority = PRIORITY_OPTIONS[this.selectedIndex];
477
- this.step = 2;
478
- this.inputBuffer = '';
479
- break;
480
- case 4:
481
- if (this.newItem.type && this.newItem.priority && this.editState.projectId) {
482
- if (this.selectedIndex === 0) {
483
- // Create item in database
484
- createItem(this.editState.projectId, this.newItem.type, this.newItem.priority, this.newItem.title, this.newItem.description);
485
- this.editState.modified = true;
486
- this.editState.reloadItems();
487
- }
488
- return popScreen();
489
- }
490
- break;
491
- }
492
- return stay();
493
- }
494
- // Number keys for quick selection
495
- if (char && char >= '1' && char <= '9') {
496
- const numIdx = parseInt(char, 10) - 1;
497
- const maxIdx = this.getMaxIndexForStep();
498
- if (numIdx <= maxIdx) {
499
- this.selectedIndex = numIdx;
500
- return stay();
501
- }
502
- }
503
- return stay(false);
504
- }
505
- getMaxIndexForStep() {
506
- switch (this.step) {
507
- case 0: return TYPE_OPTIONS.length - 1;
508
- case 1: return PRIORITY_OPTIONS.length - 1;
509
- case 4: return 1;
510
- default: return 0;
511
- }
512
- }
513
- }
514
- // =============================================================================
515
- // Backlog Overlay
516
- // =============================================================================
517
- class BacklogOverlay extends TabbedListOverlay {
518
- editState;
519
- constructor() {
520
- const activeProject = getActiveProject();
521
- const projectId = activeProject?.id ?? null;
522
- // Load items from database (empty if no project)
523
- const items = projectId ? loadItemsFromDb(projectId) : [];
524
- const config = {
525
- title: 'Backlog',
526
- tabs: TABS,
527
- items,
528
- pageSize: PAGE_SIZE,
529
- detailScreensFullScreen: false, // Render screens in-place
530
- filterByTab: (item, tabId) => {
531
- if (tabId === 'all')
532
- return true;
533
- if (tabId === 'active') {
534
- return item.status === '📋' || item.status === '🚧';
535
- }
536
- return item.type === tabId;
537
- },
538
- getSearchText: (item) => `${item.id} ${item.title} ${item.description}`,
539
- renderItem: (item, isSelected, styles) => {
540
- const cols = terminal.getTerminalWidth();
541
- const prefix = isSelected ? styles.primary('❯ ') : ' ';
542
- const idW = 10;
543
- const typeW = 10;
544
- const statusW = 4;
545
- const priW = 8;
546
- const titleW = Math.max(20, cols - idW - typeW - statusW - priW - 10);
547
- const row = `${item.id.padEnd(idW)}${item.type.padEnd(typeW)}${item.status.padEnd(statusW)}${item.priority.padEnd(priW)}${item.title.slice(0, titleW - 2)}`;
548
- if (isSelected) {
549
- return `${prefix}${styles.primary(row)}`;
550
- }
551
- return `${prefix}${styles.muted(row)}`;
552
- },
553
- showCount: true,
554
- emptyMessage: projectId === null
555
- ? 'No active project. Use /projects to select one.'
556
- : 'No items found. Use [a] to add or /design to create initial backlog.',
557
- noResultsMessage: 'No items match the search.',
558
- renderSelectedPreview: (item, styles) => {
559
- const cols = terminal.getTerminalWidth();
560
- const descPrefix = ' Desc: ';
561
- const maxDescLen = cols - descPrefix.length - 2;
562
- const truncatedDesc = item.description.length > maxDescLen
563
- ? item.description.slice(0, maxDescLen - 3) + '...'
564
- : item.description;
565
- const lines = [styles.muted(descPrefix) + truncatedDesc];
566
- if (item.commit) {
567
- lines.push(styles.muted(' Commit: ') + item.commit);
568
- }
569
- return lines;
570
- },
571
- footerHints: (searchMode) => {
572
- if (searchMode) {
573
- return 'Type to search · Enter/Esc Exit search · Backspace Delete';
574
- }
575
- return '/ Search · ↑↓/jk Navigate · ←→/hl Pages · Tab Filter · Space Toggle · a Add · q/Esc Close';
576
- },
577
- };
578
- super(config);
579
- // Create edit state that screens can share
580
- this.editState = {
581
- modified: false,
582
- projectId,
583
- items,
584
- reloadItems: () => {
585
- if (this.editState.projectId) {
586
- this.editState.items = loadItemsFromDb(this.editState.projectId);
587
- // Update the overlay's internal state
588
- this.state.items = this.editState.items;
589
- // Re-apply filters
590
- const currentTabId = this.listConfig.tabs[this.state.currentTab]?.id ?? 'all';
591
- let filtered = this.state.items.filter((item) => this.listConfig.filterByTab(item, currentTabId));
592
- if (this.state.searchQuery) {
593
- const query = this.state.searchQuery.toLowerCase();
594
- filtered = filtered.filter((item) => this.listConfig.getSearchText(item).toLowerCase().includes(query));
595
- }
596
- this.state.filteredItems = filtered;
597
- }
598
- },
599
- };
600
- }
601
- createDetailScreen(item) {
602
- return new DetailScreen(item, this.editState, this.styles);
603
- }
604
- handleKey(data) {
605
- // Only intercept when on the main list screen
606
- if (this.screenStack.size() === 1) {
607
- // Ctrl+C always closes
608
- if (isCtrlC(data)) {
609
- this.close({ modified: this.editState.modified });
610
- return;
611
- }
612
- // Only handle custom keys when not in search mode
613
- if (!this.state.searchMode) {
614
- const char = extractPrintable(data);
615
- // Space - toggle status
616
- if (isSpace(data) && this.state.filteredItems.length > 0) {
617
- const item = this.state.filteredItems[this.state.selectedIndex];
618
- // Cycle through statuses: 📋 → 🚧 → ✅ → 📋
619
- const statusIdx = STATUS_OPTIONS.indexOf(item.status);
620
- const newStatus = STATUS_OPTIONS[(statusIdx + 1) % STATUS_OPTIONS.length];
621
- updateItemStatus(item.dbId, newStatus);
622
- this.editState.modified = true;
623
- this.editState.reloadItems();
624
- this.update();
625
- return;
626
- }
627
- // 'a' - add mode
628
- if (char === 'a' || char === 'A') {
629
- if (this.editState.projectId) {
630
- const addScreen = new AddScreen(this.editState, this.styles);
631
- this.screenStack.push(addScreen);
632
- this.update();
633
- }
634
- return;
635
- }
636
- // 'q' or Esc closes
637
- if (char === 'q' || isEscape(data)) {
638
- this.close({ modified: this.editState.modified });
639
- return;
640
- }
641
- }
642
- }
643
- // Let parent handle other keys (tabs, search, pagination, Enter for detail)
644
- super.handleKey(data);
645
- }
646
- }
647
- // =============================================================================
648
- // Export Function (Backward Compatible)
649
- // =============================================================================
650
- export async function showBacklogOverlay() {
651
- return new BacklogOverlay().show();
652
- }
@@ -1,33 +0,0 @@
1
- /**
2
- * Commands Overlay V2
3
- *
4
- * Modal overlay for viewing and managing custom command definitions.
5
- * Uses TabbedListOverlayV2 for consistent navigation patterns.
6
- *
7
- * Features:
8
- * - Tabs: All, Project, Personal
9
- * - Search with / toggle
10
- * - Detail view for command information
11
- * - Wizard for creating new commands
12
- */
13
- import { type CustomCommand } from '../commands/index.js';
14
- import { TabbedListOverlayV2, BaseScreen } from './base/index.js';
15
- export interface CommandsOverlayV2Result {
16
- /** Command that was created (if any) */
17
- created?: string;
18
- }
19
- type CommandItem = CustomCommand | {
20
- type: 'create';
21
- };
22
- /**
23
- * Commands overlay using TabbedListOverlayV2.
24
- * Displays custom commands in a searchable, tabbed list.
25
- */
26
- export declare class CommandsOverlayV2 extends TabbedListOverlayV2<CommandItem, CommandsOverlayV2Result> {
27
- readonly type: "inline";
28
- readonly id = "commands-overlay-v2";
29
- private readonly registry;
30
- constructor();
31
- protected createDetailScreen(item: CommandItem): BaseScreen | null;
32
- }
33
- export {};