@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,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 {};