@compilr-dev/cli 0.4.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 (634) hide show
  1. package/README.md +254 -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 +134 -4
  7. package/dist/agent.js +345 -166
  8. package/dist/anchors/index.d.ts +9 -0
  9. package/dist/anchors/index.js +9 -0
  10. package/dist/anchors/project-anchors.d.ts +79 -0
  11. package/dist/anchors/project-anchors.js +202 -0
  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/index.d.ts +2 -1
  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.d.ts +13 -0
  28. package/dist/commands-v2/handlers/context.js +533 -0
  29. package/dist/commands-v2/handlers/core.d.ts +14 -0
  30. package/dist/commands-v2/handlers/core.js +290 -0
  31. package/dist/commands-v2/handlers/debug.d.ts +11 -0
  32. package/dist/commands-v2/handlers/debug.js +177 -0
  33. package/dist/commands-v2/handlers/delegations.d.ts +8 -0
  34. package/dist/commands-v2/handlers/delegations.js +29 -0
  35. package/dist/commands-v2/handlers/files.d.ts +8 -0
  36. package/dist/commands-v2/handlers/files.js +162 -0
  37. package/dist/commands-v2/handlers/filter.d.ts +9 -0
  38. package/dist/commands-v2/handlers/filter.js +130 -0
  39. package/dist/commands-v2/handlers/games.d.ts +7 -0
  40. package/dist/commands-v2/handlers/games.js +57 -0
  41. package/dist/commands-v2/handlers/index.d.ts +25 -0
  42. package/dist/commands-v2/handlers/index.js +63 -0
  43. package/dist/commands-v2/handlers/mcp.d.ts +8 -0
  44. package/dist/commands-v2/handlers/mcp.js +39 -0
  45. package/dist/commands-v2/handlers/notifications.d.ts +9 -0
  46. package/dist/commands-v2/handlers/notifications.js +34 -0
  47. package/dist/commands-v2/handlers/project.d.ts +22 -0
  48. package/dist/commands-v2/handlers/project.js +1035 -0
  49. package/dist/commands-v2/handlers/reset.d.ts +11 -0
  50. package/dist/commands-v2/handlers/reset.js +118 -0
  51. package/dist/commands-v2/handlers/session.d.ts +161 -0
  52. package/dist/commands-v2/handlers/session.js +805 -0
  53. package/dist/commands-v2/handlers/settings.d.ts +17 -0
  54. package/dist/commands-v2/handlers/settings.js +417 -0
  55. package/dist/commands-v2/handlers/tasks.d.ts +5 -0
  56. package/dist/commands-v2/handlers/tasks.js +36 -0
  57. package/dist/commands-v2/handlers/team.d.ts +9 -0
  58. package/dist/commands-v2/handlers/team.js +549 -0
  59. package/dist/commands-v2/handlers/terminals.d.ts +9 -0
  60. package/dist/commands-v2/handlers/terminals.js +34 -0
  61. package/dist/commands-v2/index.d.ts +14 -0
  62. package/dist/commands-v2/index.js +18 -0
  63. package/dist/commands-v2/registry.d.ts +52 -0
  64. package/dist/commands-v2/registry.js +114 -0
  65. package/dist/commands-v2/types.d.ts +153 -0
  66. package/dist/commands-v2/types.js +7 -0
  67. package/dist/commands.js +123 -7
  68. package/dist/compilr-diff-companion.vsix +0 -0
  69. package/dist/db/index.js +98 -4
  70. package/dist/db/repositories/document-repository.d.ts +2 -0
  71. package/dist/db/repositories/document-repository.js +5 -1
  72. package/dist/db/repositories/index.d.ts +2 -0
  73. package/dist/db/repositories/index.js +1 -0
  74. package/dist/db/repositories/plan-repository.d.ts +101 -0
  75. package/dist/db/repositories/plan-repository.js +275 -0
  76. package/dist/db/repositories/project-repository.d.ts +6 -0
  77. package/dist/db/repositories/project-repository.js +41 -0
  78. package/dist/db/repositories/work-item-repository.d.ts +15 -0
  79. package/dist/db/repositories/work-item-repository.js +69 -4
  80. package/dist/db/schema.d.ts +40 -3
  81. package/dist/db/schema.js +66 -3
  82. package/dist/episodes/index.d.ts +20 -0
  83. package/dist/episodes/index.js +27 -0
  84. package/dist/episodes/recorder.d.ts +51 -0
  85. package/dist/episodes/recorder.js +195 -0
  86. package/dist/episodes/significant-work.d.ts +21 -0
  87. package/dist/episodes/significant-work.js +56 -0
  88. package/dist/episodes/store.d.ts +38 -0
  89. package/dist/episodes/store.js +199 -0
  90. package/dist/episodes/types.d.ts +35 -0
  91. package/dist/episodes/types.js +6 -0
  92. package/dist/episodes/work-at-risk.d.ts +12 -0
  93. package/dist/episodes/work-at-risk.js +38 -0
  94. package/dist/episodes/work-summary-anchor.d.ts +23 -0
  95. package/dist/episodes/work-summary-anchor.js +73 -0
  96. package/dist/games/coins.d.ts +66 -0
  97. package/dist/games/coins.js +165 -0
  98. package/dist/games/game-base.d.ts +84 -0
  99. package/dist/games/game-base.js +204 -0
  100. package/dist/games/index.d.ts +16 -0
  101. package/dist/games/index.js +49 -0
  102. package/dist/games/scores.d.ts +69 -0
  103. package/dist/games/scores.js +191 -0
  104. package/dist/games/tetris/board.d.ts +59 -0
  105. package/dist/games/tetris/board.js +170 -0
  106. package/dist/games/tetris/index.d.ts +109 -0
  107. package/dist/games/tetris/index.js +610 -0
  108. package/dist/games/tetris/pieces.d.ts +44 -0
  109. package/dist/games/tetris/pieces.js +271 -0
  110. package/dist/games/tetris/renderer.d.ts +26 -0
  111. package/dist/games/tetris/renderer.js +77 -0
  112. package/dist/guide/guide-content.d.ts +23 -0
  113. package/dist/guide/guide-content.js +196 -0
  114. package/dist/guide/index.d.ts +8 -0
  115. package/dist/guide/index.js +7 -0
  116. package/dist/guide/shared-content.d.ts +37 -0
  117. package/dist/guide/shared-content.js +1272 -0
  118. package/dist/guide/tutorial-helpers.d.ts +57 -0
  119. package/dist/guide/tutorial-helpers.js +147 -0
  120. package/dist/handlers/ask-user-handlers.d.ts +32 -0
  121. package/dist/handlers/ask-user-handlers.js +104 -0
  122. package/dist/handlers/delegation-handlers.d.ts +34 -0
  123. package/dist/handlers/delegation-handlers.js +291 -0
  124. package/dist/handlers/permission-handler.d.ts +30 -0
  125. package/dist/handlers/permission-handler.js +205 -0
  126. package/dist/index.d.ts +11 -1
  127. package/dist/index.js +615 -179
  128. package/dist/input-handlers/index.d.ts +7 -0
  129. package/dist/input-handlers/index.js +7 -0
  130. package/dist/input-handlers/memory-handler.d.ts +26 -0
  131. package/dist/input-handlers/memory-handler.js +69 -0
  132. package/dist/models/index.d.ts +10 -0
  133. package/dist/models/index.js +12 -0
  134. package/dist/models/model-registry.d.ts +38 -0
  135. package/dist/models/model-registry.js +69 -0
  136. package/dist/models/model-tiers.d.ts +28 -0
  137. package/dist/models/model-tiers.js +71 -0
  138. package/dist/models/model-validation.d.ts +25 -0
  139. package/dist/models/model-validation.js +291 -0
  140. package/dist/models/ollama-models.d.ts +73 -0
  141. package/dist/models/ollama-models.js +178 -0
  142. package/dist/models/provider-types.d.ts +6 -0
  143. package/dist/models/provider-types.js +1 -0
  144. package/dist/models/providers.d.ts +35 -0
  145. package/dist/models/providers.js +58 -0
  146. package/dist/models/types.d.ts +4 -0
  147. package/dist/models/types.js +4 -0
  148. package/dist/multi-agent/activity.d.ts +21 -0
  149. package/dist/multi-agent/activity.js +34 -0
  150. package/dist/multi-agent/agent-selection.d.ts +55 -0
  151. package/dist/multi-agent/agent-selection.js +90 -0
  152. package/dist/multi-agent/artifacts.d.ts +197 -0
  153. package/dist/multi-agent/artifacts.js +379 -0
  154. package/dist/multi-agent/checkpointer.d.ts +138 -0
  155. package/dist/multi-agent/checkpointer.js +471 -0
  156. package/dist/multi-agent/collision-utils.d.ts +16 -0
  157. package/dist/multi-agent/collision-utils.js +28 -0
  158. package/dist/multi-agent/context-resolver.d.ts +97 -0
  159. package/dist/multi-agent/context-resolver.js +316 -0
  160. package/dist/multi-agent/custom-agents.d.ts +83 -0
  161. package/dist/multi-agent/custom-agents.js +227 -0
  162. package/dist/multi-agent/delegation-tracker.d.ts +157 -0
  163. package/dist/multi-agent/delegation-tracker.js +243 -0
  164. package/dist/multi-agent/file-lock-hook.d.ts +29 -0
  165. package/dist/multi-agent/file-lock-hook.js +97 -0
  166. package/dist/multi-agent/file-locks.d.ts +58 -0
  167. package/dist/multi-agent/file-locks.js +194 -0
  168. package/dist/multi-agent/index.d.ts +24 -0
  169. package/dist/multi-agent/index.js +30 -0
  170. package/dist/multi-agent/mention-parser.d.ts +64 -0
  171. package/dist/multi-agent/mention-parser.js +146 -0
  172. package/dist/multi-agent/notification-manager.d.ts +84 -0
  173. package/dist/multi-agent/notification-manager.js +224 -0
  174. package/dist/multi-agent/pending-requests.d.ts +122 -0
  175. package/dist/multi-agent/pending-requests.js +155 -0
  176. package/dist/multi-agent/session-registry.d.ts +139 -0
  177. package/dist/multi-agent/session-registry.js +514 -0
  178. package/dist/multi-agent/shared-context.d.ts +293 -0
  179. package/dist/multi-agent/shared-context.js +671 -0
  180. package/dist/multi-agent/skill-requirements.d.ts +66 -0
  181. package/dist/multi-agent/skill-requirements.js +178 -0
  182. package/dist/multi-agent/task-assignment.d.ts +69 -0
  183. package/dist/multi-agent/task-assignment.js +123 -0
  184. package/dist/multi-agent/task-suggestion.d.ts +31 -0
  185. package/dist/multi-agent/task-suggestion.js +72 -0
  186. package/dist/multi-agent/team-agent.d.ts +201 -0
  187. package/dist/multi-agent/team-agent.js +488 -0
  188. package/dist/multi-agent/team.d.ts +286 -0
  189. package/dist/multi-agent/team.js +610 -0
  190. package/dist/multi-agent/tool-config.d.ts +110 -0
  191. package/dist/multi-agent/tool-config.js +661 -0
  192. package/dist/multi-agent/types.d.ts +211 -0
  193. package/dist/multi-agent/types.js +617 -0
  194. package/dist/prompts/plan-mode-prompt.d.ts +11 -0
  195. package/dist/prompts/plan-mode-prompt.js +95 -0
  196. package/dist/repl-helpers.d.ts +63 -0
  197. package/dist/repl-helpers.js +319 -0
  198. package/dist/repl-v2.d.ts +554 -0
  199. package/dist/repl-v2.js +3286 -0
  200. package/dist/session/index.d.ts +6 -0
  201. package/dist/session/index.js +6 -0
  202. package/dist/session/project-session-manager.d.ts +158 -0
  203. package/dist/session/project-session-manager.js +650 -0
  204. package/dist/settings/index.d.ts +156 -13
  205. package/dist/settings/index.js +377 -24
  206. package/dist/settings/mcp-config.d.ts +76 -0
  207. package/dist/settings/mcp-config.js +143 -0
  208. package/dist/settings/paths.d.ts +114 -0
  209. package/dist/settings/paths.js +270 -0
  210. package/dist/shared-handlers.d.ts +62 -0
  211. package/dist/shared-handlers.js +48 -0
  212. package/dist/system-prompt/builder.d.ts +5 -0
  213. package/dist/system-prompt/builder.js +4 -0
  214. package/dist/system-prompt/index.d.ts +18 -0
  215. package/dist/system-prompt/index.js +18 -0
  216. package/dist/system-prompt/modules.d.ts +5 -0
  217. package/dist/system-prompt/modules.js +4 -0
  218. package/dist/tabbed-menu.js +2 -1
  219. package/dist/templates/compilr-md-import.d.ts +16 -0
  220. package/dist/templates/compilr-md-import.js +241 -0
  221. package/dist/templates/compilr-md.js +10 -58
  222. package/dist/templates/config-json.d.ts +1 -25
  223. package/dist/templates/index.d.ts +2 -0
  224. package/dist/templates/index.js +35 -75
  225. package/dist/themes/colors.js +3 -1
  226. package/dist/themes/registry.d.ts +5 -36
  227. package/dist/themes/registry.js +11 -95
  228. package/dist/themes/types.d.ts +3 -38
  229. package/dist/themes/types.js +2 -2
  230. package/dist/tool-names.d.ts +108 -0
  231. package/dist/tool-names.js +227 -0
  232. package/dist/tools/anchor-tools.d.ts +31 -0
  233. package/dist/tools/anchor-tools.js +255 -0
  234. package/dist/tools/artifact-tools.d.ts +42 -0
  235. package/dist/tools/artifact-tools.js +328 -0
  236. package/dist/tools/ask-user-simple.d.ts +1 -1
  237. package/dist/tools/ask-user-simple.js +2 -1
  238. package/dist/tools/ask-user.d.ts +1 -1
  239. package/dist/tools/ask-user.js +2 -1
  240. package/dist/tools/backlog-wrappers.d.ts +56 -0
  241. package/dist/tools/backlog-wrappers.js +353 -0
  242. package/dist/tools/backlog.d.ts +2 -2
  243. package/dist/tools/backlog.js +2 -2
  244. package/dist/tools/db-tools.d.ts +12 -0
  245. package/dist/tools/db-tools.js +14 -0
  246. package/dist/tools/delegate-background.d.ts +27 -0
  247. package/dist/tools/delegate-background.js +115 -0
  248. package/dist/tools/delegate.d.ts +22 -0
  249. package/dist/tools/delegate.js +97 -0
  250. package/dist/tools/delegation-status.d.ts +16 -0
  251. package/dist/tools/delegation-status.js +128 -0
  252. package/dist/tools/document-db.d.ts +43 -0
  253. package/dist/tools/document-db.js +220 -0
  254. package/dist/tools/guide-tool.d.ts +12 -0
  255. package/dist/tools/guide-tool.js +59 -0
  256. package/dist/tools/handoff.d.ts +25 -0
  257. package/dist/tools/handoff.js +99 -0
  258. package/dist/tools/meta-tools.d.ts +26 -0
  259. package/dist/tools/meta-tools.js +47 -0
  260. package/dist/tools/plan-tools.d.ts +54 -0
  261. package/dist/tools/plan-tools.js +338 -0
  262. package/dist/tools/platform-adapter.d.ts +29 -0
  263. package/dist/tools/platform-adapter.js +394 -0
  264. package/dist/tools/project-db.d.ts +34 -0
  265. package/dist/tools/project-db.js +39 -0
  266. package/dist/tools/recall-work-tool.d.ts +18 -0
  267. package/dist/tools/recall-work-tool.js +82 -0
  268. package/dist/tools/workitem-db.d.ts +135 -0
  269. package/dist/tools/workitem-db.js +730 -0
  270. package/dist/tools.d.ts +67 -2
  271. package/dist/tools.js +238 -38
  272. package/dist/ui/ask-user-overlay.d.ts +2 -2
  273. package/dist/ui/ask-user-overlay.js +443 -535
  274. package/dist/ui/ask-user-simple-overlay.d.ts +2 -2
  275. package/dist/ui/ask-user-simple-overlay.js +182 -209
  276. package/dist/ui/autocomplete-controller.d.ts +42 -0
  277. package/dist/ui/autocomplete-controller.js +384 -0
  278. package/dist/ui/base/index.d.ts +26 -0
  279. package/dist/ui/base/index.js +33 -0
  280. package/dist/ui/base/inline-overlay-utils.d.ts +217 -0
  281. package/dist/ui/base/inline-overlay-utils.js +320 -0
  282. package/dist/ui/base/inline-overlay.d.ts +159 -0
  283. package/dist/ui/base/inline-overlay.js +257 -0
  284. package/dist/ui/base/key-utils.d.ts +15 -0
  285. package/dist/ui/base/key-utils.js +30 -0
  286. package/dist/ui/base/overlay-base-v2.d.ts +203 -0
  287. package/dist/ui/base/overlay-base-v2.js +260 -0
  288. package/dist/ui/base/overlay-base.d.ts +156 -0
  289. package/dist/ui/base/overlay-base.js +238 -0
  290. package/dist/ui/base/overlay-lifecycle.d.ts +65 -0
  291. package/dist/ui/base/overlay-lifecycle.js +159 -0
  292. package/dist/ui/base/overlay-types.d.ts +185 -0
  293. package/dist/ui/base/overlay-types.js +7 -0
  294. package/dist/ui/base/render-utils.d.ts +27 -0
  295. package/dist/ui/base/render-utils.js +36 -0
  296. package/dist/ui/base/screen-stack.d.ts +148 -0
  297. package/dist/ui/base/screen-stack.js +184 -0
  298. package/dist/ui/base/tabbed-list-overlay-v2.d.ts +118 -0
  299. package/dist/ui/base/tabbed-list-overlay-v2.js +335 -0
  300. package/dist/ui/base/tabbed-list-overlay.d.ts +153 -0
  301. package/dist/ui/base/tabbed-list-overlay.js +369 -0
  302. package/dist/ui/constants/labels.d.ts +14 -0
  303. package/dist/ui/constants/labels.js +51 -0
  304. package/dist/ui/conversation-store.d.ts +55 -0
  305. package/dist/ui/conversation-store.js +107 -0
  306. package/dist/ui/conversation.d.ts +75 -4
  307. package/dist/ui/conversation.js +376 -165
  308. package/dist/ui/diff.d.ts +7 -1
  309. package/dist/ui/diff.js +85 -48
  310. package/dist/ui/ephemeral.d.ts +1 -1
  311. package/dist/ui/ephemeral.js +4 -10
  312. package/dist/ui/features/index.d.ts +34 -0
  313. package/dist/ui/features/index.js +34 -0
  314. package/dist/ui/features/input-feature.d.ts +85 -0
  315. package/dist/ui/features/input-feature.js +238 -0
  316. package/dist/ui/features/list-feature.d.ts +155 -0
  317. package/dist/ui/features/list-feature.js +244 -0
  318. package/dist/ui/features/pagination-feature.d.ts +154 -0
  319. package/dist/ui/features/pagination-feature.js +238 -0
  320. package/dist/ui/features/search-feature.d.ts +148 -0
  321. package/dist/ui/features/search-feature.js +185 -0
  322. package/dist/ui/features/tab-feature.d.ts +194 -0
  323. package/dist/ui/features/tab-feature.js +307 -0
  324. package/dist/ui/file-autocomplete.d.ts +24 -0
  325. package/dist/ui/file-autocomplete.js +56 -0
  326. package/dist/ui/footer-renderer.d.ts +69 -0
  327. package/dist/ui/footer-renderer.js +431 -0
  328. package/dist/ui/footer.d.ts +181 -7
  329. package/dist/ui/footer.js +523 -74
  330. package/dist/ui/guardrail-overlay.d.ts +29 -0
  331. package/dist/ui/guardrail-overlay.js +145 -0
  332. package/dist/ui/index.d.ts +1 -1
  333. package/dist/ui/index.js +1 -3
  334. package/dist/ui/input-controller.d.ts +51 -0
  335. package/dist/ui/input-controller.js +176 -0
  336. package/dist/ui/input-prompt.d.ts +135 -33
  337. package/dist/ui/input-prompt.js +728 -337
  338. package/dist/ui/iteration-limit-overlay.d.ts +2 -2
  339. package/dist/ui/iteration-limit-overlay.js +92 -128
  340. package/dist/ui/keyboard-handler.d.ts +57 -0
  341. package/dist/ui/keyboard-handler.js +557 -0
  342. package/dist/ui/keys-overlay.d.ts +1 -0
  343. package/dist/ui/keys-overlay.js +203 -141
  344. package/dist/ui/line-utils.d.ts +88 -0
  345. package/dist/ui/line-utils.js +150 -0
  346. package/dist/ui/live-region-facade.d.ts +42 -0
  347. package/dist/ui/live-region-facade.js +205 -0
  348. package/dist/ui/live-region.d.ts +157 -0
  349. package/dist/ui/live-region.js +379 -0
  350. package/dist/ui/mascot/expressions.d.ts +32 -0
  351. package/dist/ui/mascot/expressions.js +213 -0
  352. package/dist/ui/mascot/index.d.ts +8 -0
  353. package/dist/ui/mascot/index.js +8 -0
  354. package/dist/ui/mascot/renderer.d.ts +19 -0
  355. package/dist/ui/mascot/renderer.js +132 -0
  356. package/dist/ui/overlay/data/tutorial-content.d.ts +9 -0
  357. package/dist/ui/overlay/data/tutorial-content.js +9 -0
  358. package/dist/ui/overlay/data/tutorial-registry.d.ts +12 -0
  359. package/dist/ui/overlay/data/tutorial-registry.js +116 -0
  360. package/dist/ui/overlay/data/tutorial-types.d.ts +35 -0
  361. package/dist/ui/overlay/data/tutorial-types.js +6 -0
  362. package/dist/ui/overlay/data/tutorials/basics/first-conversation.d.ts +7 -0
  363. package/dist/ui/overlay/data/tutorials/basics/first-conversation.js +220 -0
  364. package/dist/ui/overlay/data/tutorials/basics/first-project.d.ts +7 -0
  365. package/dist/ui/overlay/data/tutorials/basics/first-project.js +284 -0
  366. package/dist/ui/overlay/data/tutorials/basics/navigation.d.ts +8 -0
  367. package/dist/ui/overlay/data/tutorials/basics/navigation.js +22 -0
  368. package/dist/ui/overlay/data/tutorials/basics/welcome.d.ts +7 -0
  369. package/dist/ui/overlay/data/tutorials/basics/welcome.js +174 -0
  370. package/dist/ui/overlay/data/tutorials/config/context-management.d.ts +7 -0
  371. package/dist/ui/overlay/data/tutorials/config/context-management.js +158 -0
  372. package/dist/ui/overlay/data/tutorials/config/mcp-servers.d.ts +8 -0
  373. package/dist/ui/overlay/data/tutorials/config/mcp-servers.js +155 -0
  374. package/dist/ui/overlay/data/tutorials/config/model-selection.d.ts +7 -0
  375. package/dist/ui/overlay/data/tutorials/config/model-selection.js +162 -0
  376. package/dist/ui/overlay/data/tutorials/config/permissions-safety.d.ts +7 -0
  377. package/dist/ui/overlay/data/tutorials/config/permissions-safety.js +163 -0
  378. package/dist/ui/overlay/data/tutorials/config/settings-config.d.ts +7 -0
  379. package/dist/ui/overlay/data/tutorials/config/settings-config.js +166 -0
  380. package/dist/ui/overlay/data/tutorials/planning/arch.d.ts +7 -0
  381. package/dist/ui/overlay/data/tutorials/planning/arch.js +168 -0
  382. package/dist/ui/overlay/data/tutorials/planning/backlog.d.ts +7 -0
  383. package/dist/ui/overlay/data/tutorials/planning/backlog.js +103 -0
  384. package/dist/ui/overlay/data/tutorials/planning/build.d.ts +7 -0
  385. package/dist/ui/overlay/data/tutorials/planning/build.js +173 -0
  386. package/dist/ui/overlay/data/tutorials/planning/design.d.ts +7 -0
  387. package/dist/ui/overlay/data/tutorials/planning/design.js +205 -0
  388. package/dist/ui/overlay/data/tutorials/planning/docs.d.ts +7 -0
  389. package/dist/ui/overlay/data/tutorials/planning/docs.js +143 -0
  390. package/dist/ui/overlay/data/tutorials/planning/prd.d.ts +7 -0
  391. package/dist/ui/overlay/data/tutorials/planning/prd.js +173 -0
  392. package/dist/ui/overlay/data/tutorials/planning/scaffold.d.ts +7 -0
  393. package/dist/ui/overlay/data/tutorials/planning/scaffold.js +164 -0
  394. package/dist/ui/overlay/data/tutorials/planning/sketch.d.ts +7 -0
  395. package/dist/ui/overlay/data/tutorials/planning/sketch.js +58 -0
  396. package/dist/ui/overlay/data/tutorials/projects/anchors.d.ts +7 -0
  397. package/dist/ui/overlay/data/tutorials/projects/anchors.js +248 -0
  398. package/dist/ui/overlay/data/tutorials/projects/import-project.d.ts +7 -0
  399. package/dist/ui/overlay/data/tutorials/projects/import-project.js +172 -0
  400. package/dist/ui/overlay/data/tutorials/projects/managing-projects.d.ts +8 -0
  401. package/dist/ui/overlay/data/tutorials/projects/managing-projects.js +212 -0
  402. package/dist/ui/overlay/data/tutorials/projects/new-project.d.ts +7 -0
  403. package/dist/ui/overlay/data/tutorials/projects/new-project.js +251 -0
  404. package/dist/ui/overlay/data/tutorials/projects/session-management.d.ts +7 -0
  405. package/dist/ui/overlay/data/tutorials/projects/session-management.js +169 -0
  406. package/dist/ui/overlay/data/tutorials/teams/background-execution.d.ts +7 -0
  407. package/dist/ui/overlay/data/tutorials/teams/background-execution.js +171 -0
  408. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.d.ts +8 -0
  409. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.js +147 -0
  410. package/dist/ui/overlay/data/tutorials/teams/task-assignment.d.ts +7 -0
  411. package/dist/ui/overlay/data/tutorials/teams/task-assignment.js +204 -0
  412. package/dist/ui/overlay/data/tutorials/teams/team-overview.d.ts +7 -0
  413. package/dist/ui/overlay/data/tutorials/teams/team-overview.js +165 -0
  414. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.d.ts +7 -0
  415. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.js +172 -0
  416. package/dist/ui/overlay/impl/agents-overlay-v2.d.ts +45 -0
  417. package/dist/ui/overlay/impl/agents-overlay-v2.js +814 -0
  418. package/dist/ui/overlay/impl/anchors-overlay-v2.d.ts +47 -0
  419. package/dist/ui/overlay/impl/anchors-overlay-v2.js +749 -0
  420. package/dist/ui/overlay/impl/arch-type-overlay-v2.d.ts +37 -0
  421. package/dist/ui/overlay/impl/arch-type-overlay-v2.js +240 -0
  422. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.d.ts +43 -0
  423. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.js +232 -0
  424. package/dist/ui/overlay/impl/artifact-overlay-v2.d.ts +40 -0
  425. package/dist/ui/overlay/impl/artifact-overlay-v2.js +115 -0
  426. package/dist/ui/overlay/impl/ask-user-overlay-v2.d.ts +72 -0
  427. package/dist/ui/overlay/impl/ask-user-overlay-v2.js +581 -0
  428. package/dist/ui/overlay/impl/ask-user-simple-overlay-v2.d.ts +46 -0
  429. package/dist/ui/overlay/impl/ask-user-simple-overlay-v2.js +204 -0
  430. package/dist/ui/overlay/impl/background-overlay-v2.d.ts +40 -0
  431. package/dist/ui/overlay/impl/background-overlay-v2.js +147 -0
  432. package/dist/ui/overlay/impl/backlog-overlay-v2.d.ts +52 -0
  433. package/dist/ui/overlay/impl/backlog-overlay-v2.js +681 -0
  434. package/dist/ui/overlay/impl/changelog-overlay-v2.d.ts +44 -0
  435. package/dist/ui/overlay/impl/changelog-overlay-v2.js +165 -0
  436. package/dist/ui/overlay/impl/commands-overlay-v2.d.ts +33 -0
  437. package/dist/ui/overlay/impl/commands-overlay-v2.js +439 -0
  438. package/dist/ui/overlay/impl/config-overlay-v2.d.ts +111 -0
  439. package/dist/ui/overlay/impl/config-overlay-v2.js +718 -0
  440. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.d.ts +83 -0
  441. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.js +711 -0
  442. package/dist/ui/overlay/impl/dashboard-overlay-v2.d.ts +57 -0
  443. package/dist/ui/overlay/impl/dashboard-overlay-v2.js +382 -0
  444. package/dist/ui/overlay/impl/delegations-overlay-v2.d.ts +28 -0
  445. package/dist/ui/overlay/impl/delegations-overlay-v2.js +279 -0
  446. package/dist/ui/overlay/impl/docs-overlay-v2.d.ts +45 -0
  447. package/dist/ui/overlay/impl/docs-overlay-v2.js +117 -0
  448. package/dist/ui/overlay/impl/document-detail-overlay-v2.d.ts +84 -0
  449. package/dist/ui/overlay/impl/document-detail-overlay-v2.js +1112 -0
  450. package/dist/ui/overlay/impl/filter-overlay-v2.d.ts +41 -0
  451. package/dist/ui/overlay/impl/filter-overlay-v2.js +110 -0
  452. package/dist/ui/overlay/impl/games-overlay-v2.d.ts +31 -0
  453. package/dist/ui/overlay/impl/games-overlay-v2.js +135 -0
  454. package/dist/ui/overlay/impl/guardrail-overlay-v2.d.ts +43 -0
  455. package/dist/ui/overlay/impl/guardrail-overlay-v2.js +114 -0
  456. package/dist/ui/overlay/impl/help-overlay-v2.d.ts +57 -0
  457. package/dist/ui/overlay/impl/help-overlay-v2.js +287 -0
  458. package/dist/ui/overlay/impl/init-setup-overlay-v2.d.ts +25 -0
  459. package/dist/ui/overlay/impl/init-setup-overlay-v2.js +97 -0
  460. package/dist/ui/overlay/impl/iteration-limit-overlay-v2.d.ts +35 -0
  461. package/dist/ui/overlay/impl/iteration-limit-overlay-v2.js +105 -0
  462. package/dist/ui/overlay/impl/keys-overlay-v2.d.ts +41 -0
  463. package/dist/ui/overlay/impl/keys-overlay-v2.js +248 -0
  464. package/dist/ui/overlay/impl/login-overlay-v2.d.ts +49 -0
  465. package/dist/ui/overlay/impl/login-overlay-v2.js +277 -0
  466. package/dist/ui/overlay/impl/mascot-overlay-v2.d.ts +41 -0
  467. package/dist/ui/overlay/impl/mascot-overlay-v2.js +138 -0
  468. package/dist/ui/overlay/impl/mcp-overlay-v2.d.ts +63 -0
  469. package/dist/ui/overlay/impl/mcp-overlay-v2.js +907 -0
  470. package/dist/ui/overlay/impl/model-overlay-v2.d.ts +93 -0
  471. package/dist/ui/overlay/impl/model-overlay-v2.js +1143 -0
  472. package/dist/ui/overlay/impl/model-warning-overlay-v2.d.ts +46 -0
  473. package/dist/ui/overlay/impl/model-warning-overlay-v2.js +132 -0
  474. package/dist/ui/overlay/impl/new-overlay-v2.d.ts +108 -0
  475. package/dist/ui/overlay/impl/new-overlay-v2.js +1243 -0
  476. package/dist/ui/overlay/impl/notifications-overlay-v2.d.ts +20 -0
  477. package/dist/ui/overlay/impl/notifications-overlay-v2.js +116 -0
  478. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.d.ts +76 -0
  479. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.js +728 -0
  480. package/dist/ui/overlay/impl/pending-overlay-v2.d.ts +51 -0
  481. package/dist/ui/overlay/impl/pending-overlay-v2.js +445 -0
  482. package/dist/ui/overlay/impl/permission-overlay-v2.d.ts +36 -0
  483. package/dist/ui/overlay/impl/permission-overlay-v2.js +380 -0
  484. package/dist/ui/overlay/impl/permissions-overlay-v2.d.ts +85 -0
  485. package/dist/ui/overlay/impl/permissions-overlay-v2.js +820 -0
  486. package/dist/ui/overlay/impl/plan-approval-overlay-v2.d.ts +35 -0
  487. package/dist/ui/overlay/impl/plan-approval-overlay-v2.js +181 -0
  488. package/dist/ui/overlay/impl/project-edit-overlay-v2.d.ts +36 -0
  489. package/dist/ui/overlay/impl/project-edit-overlay-v2.js +195 -0
  490. package/dist/ui/overlay/impl/projects-overlay-v2.d.ts +37 -0
  491. package/dist/ui/overlay/impl/projects-overlay-v2.js +733 -0
  492. package/dist/ui/overlay/impl/reset-overlay-v2.d.ts +39 -0
  493. package/dist/ui/overlay/impl/reset-overlay-v2.js +107 -0
  494. package/dist/ui/overlay/impl/resume-overlay-v2.d.ts +60 -0
  495. package/dist/ui/overlay/impl/resume-overlay-v2.js +414 -0
  496. package/dist/ui/overlay/impl/session-mode-overlay-v2.d.ts +43 -0
  497. package/dist/ui/overlay/impl/session-mode-overlay-v2.js +124 -0
  498. package/dist/ui/overlay/impl/tasks-overlay-v2.d.ts +28 -0
  499. package/dist/ui/overlay/impl/tasks-overlay-v2.js +283 -0
  500. package/dist/ui/overlay/impl/team-overlay-v2.d.ts +86 -0
  501. package/dist/ui/overlay/impl/team-overlay-v2.js +692 -0
  502. package/dist/ui/overlay/impl/terminals-overlay-v2.d.ts +26 -0
  503. package/dist/ui/overlay/impl/terminals-overlay-v2.js +217 -0
  504. package/dist/ui/overlay/impl/theme-overlay-v2.d.ts +42 -0
  505. package/dist/ui/overlay/impl/theme-overlay-v2.js +135 -0
  506. package/dist/ui/overlay/impl/tools-overlay-v2.d.ts +47 -0
  507. package/dist/ui/overlay/impl/tools-overlay-v2.js +214 -0
  508. package/dist/ui/overlay/impl/tutorial-overlay-v2.d.ts +45 -0
  509. package/dist/ui/overlay/impl/tutorial-overlay-v2.js +212 -0
  510. package/dist/ui/overlay/impl/workflow-overlay-v2.d.ts +80 -0
  511. package/dist/ui/overlay/impl/workflow-overlay-v2.js +641 -0
  512. package/dist/ui/overlay/index.d.ts +52 -0
  513. package/dist/ui/overlay/index.js +54 -0
  514. package/dist/ui/overlay/key-utils.d.ts +6 -0
  515. package/dist/ui/overlay/key-utils.js +6 -0
  516. package/dist/ui/overlay/types.d.ts +140 -0
  517. package/dist/ui/overlay/types.js +22 -0
  518. package/dist/ui/overlay-manager.d.ts +43 -0
  519. package/dist/ui/overlay-manager.js +238 -0
  520. package/dist/ui/overlays.d.ts +0 -4
  521. package/dist/ui/overlays.js +4 -460
  522. package/dist/ui/permission-overlay.d.ts +1 -1
  523. package/dist/ui/permission-overlay.js +189 -300
  524. package/dist/ui/providers/types.d.ts +178 -0
  525. package/dist/ui/providers/types.js +9 -0
  526. package/dist/ui/render-modes.d.ts +36 -0
  527. package/dist/ui/render-modes.js +44 -0
  528. package/dist/ui/startup-menu.d.ts +36 -0
  529. package/dist/ui/startup-menu.js +236 -0
  530. package/dist/ui/status-bar-controller.d.ts +33 -0
  531. package/dist/ui/status-bar-controller.js +99 -0
  532. package/dist/ui/subagent-renderer.d.ts +117 -0
  533. package/dist/ui/subagent-renderer.js +318 -0
  534. package/dist/ui/terminal-autocomplete-utils.d.ts +23 -0
  535. package/dist/ui/terminal-autocomplete-utils.js +83 -0
  536. package/dist/ui/terminal-codes.d.ts +94 -0
  537. package/dist/ui/terminal-codes.js +124 -0
  538. package/dist/ui/terminal-line-builders.d.ts +17 -0
  539. package/dist/ui/terminal-line-builders.js +42 -0
  540. package/dist/ui/terminal-render-item.d.ts +16 -0
  541. package/dist/ui/terminal-render-item.js +267 -0
  542. package/dist/ui/terminal-renderer.d.ts +220 -0
  543. package/dist/ui/terminal-renderer.js +750 -0
  544. package/dist/ui/terminal-types.d.ts +179 -0
  545. package/dist/ui/terminal-types.js +34 -0
  546. package/dist/ui/terminal-ui.d.ts +331 -0
  547. package/dist/ui/terminal-ui.js +819 -0
  548. package/dist/ui/terminal.d.ts +20 -0
  549. package/dist/ui/terminal.js +72 -0
  550. package/dist/ui/todo-zone.d.ts +19 -1
  551. package/dist/ui/todo-zone.js +124 -38
  552. package/dist/ui/tool-formatters.d.ts +16 -0
  553. package/dist/ui/tool-formatters.js +1027 -0
  554. package/dist/ui/turn-metrics.d.ts +56 -0
  555. package/dist/ui/turn-metrics.js +75 -0
  556. package/dist/ui/types.d.ts +28 -0
  557. package/dist/ui/types.js +1 -0
  558. package/dist/ui/vscode-diff-ipc.d.ts +102 -0
  559. package/dist/ui/vscode-diff-ipc.js +385 -0
  560. package/dist/utils/credentials.d.ts +24 -5
  561. package/dist/utils/credentials.js +123 -9
  562. package/dist/utils/debug-log.d.ts +28 -0
  563. package/dist/utils/debug-log.js +57 -0
  564. package/dist/utils/format-tokens.d.ts +13 -0
  565. package/dist/utils/format-tokens.js +18 -0
  566. package/dist/utils/git-config.d.ts +26 -0
  567. package/dist/utils/git-config.js +54 -0
  568. package/dist/utils/message-utils.d.ts +61 -0
  569. package/dist/utils/message-utils.js +72 -0
  570. package/dist/utils/model-tiers.d.ts +8 -1
  571. package/dist/utils/model-tiers.js +39 -17
  572. package/dist/utils/open-browser.d.ts +5 -0
  573. package/dist/utils/open-browser.js +32 -0
  574. package/dist/utils/path-safety.d.ts +56 -0
  575. package/dist/utils/path-safety.js +240 -0
  576. package/dist/utils/project-detection.d.ts +58 -0
  577. package/dist/utils/project-detection.js +424 -0
  578. package/dist/utils/project-memory.js +2 -1
  579. package/dist/utils/project-status.d.ts +2 -2
  580. package/dist/utils/startup-perf.d.ts +18 -0
  581. package/dist/utils/startup-perf.js +60 -0
  582. package/dist/utils/token-tracker.d.ts +62 -0
  583. package/dist/utils/token-tracker.js +150 -0
  584. package/dist/utils/token-types.d.ts +23 -0
  585. package/dist/utils/token-types.js +18 -0
  586. package/dist/utils/types/config-types.d.ts +32 -0
  587. package/dist/utils/types/config-types.js +8 -0
  588. package/dist/utils/update-checker.d.ts +28 -0
  589. package/dist/utils/update-checker.js +106 -0
  590. package/dist/utils/version.d.ts +7 -0
  591. package/dist/utils/version.js +10 -0
  592. package/dist/utils/vscode-detect.d.ts +39 -0
  593. package/dist/utils/vscode-detect.js +137 -0
  594. package/dist/workflow/guided-mode-injector.d.ts +42 -0
  595. package/dist/workflow/guided-mode-injector.js +191 -0
  596. package/dist/workflow/index.d.ts +8 -0
  597. package/dist/workflow/index.js +8 -0
  598. package/dist/workflow/step-criteria.d.ts +62 -0
  599. package/dist/workflow/step-criteria.js +150 -0
  600. package/dist/workflow/step-tracker.d.ts +92 -0
  601. package/dist/workflow/step-tracker.js +141 -0
  602. package/package.json +32 -12
  603. package/dist/index.old.d.ts +0 -7
  604. package/dist/index.old.js +0 -1014
  605. package/dist/repl.d.ts +0 -121
  606. package/dist/repl.js +0 -1878
  607. package/dist/templates/claude-md.d.ts +0 -7
  608. package/dist/templates/claude-md.js +0 -189
  609. package/dist/test-autocomplete.d.ts +0 -7
  610. package/dist/test-autocomplete.js +0 -85
  611. package/dist/test-tabbed-menu.d.ts +0 -7
  612. package/dist/test-tabbed-menu.js +0 -25
  613. package/dist/tool-selector.d.ts +0 -71
  614. package/dist/tool-selector.js +0 -184
  615. package/dist/ui/agents-overlay.d.ts +0 -12
  616. package/dist/ui/agents-overlay.js +0 -501
  617. package/dist/ui/arch-type-overlay.d.ts +0 -20
  618. package/dist/ui/arch-type-overlay.js +0 -229
  619. package/dist/ui/backlog-overlay.d.ts +0 -17
  620. package/dist/ui/backlog-overlay.js +0 -786
  621. package/dist/ui/commands-overlay.d.ts +0 -11
  622. package/dist/ui/commands-overlay.js +0 -410
  623. package/dist/ui/config-overlay.d.ts +0 -34
  624. package/dist/ui/config-overlay.js +0 -977
  625. package/dist/ui/init-overlay.d.ts +0 -24
  626. package/dist/ui/init-overlay.js +0 -525
  627. package/dist/ui/input-prompt-v2.d.ts +0 -179
  628. package/dist/ui/input-prompt-v2.js +0 -991
  629. package/dist/ui/model-warning-overlay.d.ts +0 -30
  630. package/dist/ui/model-warning-overlay.js +0 -171
  631. package/dist/ui/tools-overlay.d.ts +0 -26
  632. package/dist/ui/tools-overlay.js +0 -278
  633. package/dist/ui/tutorial-overlay.d.ts +0 -10
  634. package/dist/ui/tutorial-overlay.js +0 -936
@@ -0,0 +1,681 @@
1
+ /**
2
+ * Backlog Overlay V2
3
+ *
4
+ * Modal overlay for viewing and managing the project backlog.
5
+ * Uses TabbedListOverlayV2 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 { TabbedListOverlayV2, BaseScreen, stay, popScreen, closeOverlay, isEscape, isCtrlC, isEnter, isSpace, isNavigateUp, isNavigateDown, isLeftArrow, isRightArrow, isVimLeft, isVimRight, isBackspace, extractPrintable, renderBorder, wrapText, truncate, } 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
+ owner: item.owner ?? undefined,
87
+ };
88
+ }
89
+ // =============================================================================
90
+ // Database Operations
91
+ // =============================================================================
92
+ /**
93
+ * Load items from database for a project
94
+ */
95
+ function loadItemsFromDb(projectId) {
96
+ const result = workItemRepository.query({
97
+ project_id: projectId,
98
+ limit: 1000, // Get all items
99
+ });
100
+ return result.items.map(workItemToBacklogItem);
101
+ }
102
+ /**
103
+ * Update an item's status in the database
104
+ */
105
+ function updateItemStatus(dbId, status) {
106
+ workItemRepository.update(dbId, {
107
+ status: emojiToDbStatus(status),
108
+ });
109
+ }
110
+ /**
111
+ * Update an item's type in the database
112
+ */
113
+ function updateItemType(dbId, type) {
114
+ workItemRepository.update(dbId, { type });
115
+ }
116
+ /**
117
+ * Update an item's priority in the database
118
+ */
119
+ function updateItemPriority(dbId, priority) {
120
+ workItemRepository.update(dbId, { priority });
121
+ }
122
+ /**
123
+ * Update an item's owner in the database
124
+ */
125
+ function updateItemOwner(dbId, owner) {
126
+ workItemRepository.update(dbId, { owner });
127
+ }
128
+ /**
129
+ * Create a new item in the database
130
+ */
131
+ function createItem(projectId, type, priority, title, description) {
132
+ const item = workItemRepository.create({
133
+ project_id: projectId,
134
+ type,
135
+ priority,
136
+ title,
137
+ description,
138
+ });
139
+ return workItemToBacklogItem(item);
140
+ }
141
+ // =============================================================================
142
+ // Helper Functions
143
+ // =============================================================================
144
+ function getStatusLabel(status) {
145
+ switch (status) {
146
+ case '๐Ÿ“‹': return 'Backlog';
147
+ case '๐Ÿšง': return 'In Progress';
148
+ case 'โœ…': return 'Completed';
149
+ default: return '';
150
+ }
151
+ }
152
+ // =============================================================================
153
+ // Detail Screen (In-Place Editing)
154
+ // =============================================================================
155
+ /**
156
+ * Screen for editing item type, status, priority, and owner.
157
+ * Renders in-place over the list.
158
+ */
159
+ class DetailScreen extends BaseScreen {
160
+ item;
161
+ editState;
162
+ styles;
163
+ selectedField = 0; // 0=type, 1=status, 2=priority, 3=owner
164
+ ownerOptions; // null = unassigned, then team agents
165
+ constructor(item, editState, styles, teamAgentIds = []) {
166
+ super();
167
+ this.item = item;
168
+ this.editState = editState;
169
+ this.styles = styles;
170
+ // Owner options: unassigned (null) + team agents
171
+ this.ownerOptions = [null, ...teamAgentIds];
172
+ }
173
+ render() {
174
+ const s = this.styles;
175
+ const cols = terminal.getTerminalWidth();
176
+ const border = renderBorder(cols, s);
177
+ const lines = [];
178
+ // Header
179
+ lines.push(border);
180
+ lines.push(` ${s.primaryBold('Edit Item')} ${s.muted(this.item.id)}`);
181
+ lines.push('');
182
+ // Title
183
+ lines.push(` ${chalk.bold(this.item.title)}`);
184
+ lines.push('');
185
+ // Editable fields with selection indicator
186
+ const typePrefix = this.selectedField === 0 ? s.primary('โฏ Type: ') : s.muted(' Type: ');
187
+ const typeValue = this.selectedField === 0 ? s.primary(TYPE_LABELS[this.item.type]) : TYPE_LABELS[this.item.type];
188
+ lines.push(` ${typePrefix}${typeValue}`);
189
+ const statusLabel = this.item.status + ' ' + getStatusLabel(this.item.status);
190
+ const statusPrefix = this.selectedField === 1 ? s.primary('โฏ Status: ') : s.muted(' Status: ');
191
+ const statusValue = this.selectedField === 1 ? s.primary(statusLabel) : statusLabel;
192
+ lines.push(` ${statusPrefix}${statusValue}`);
193
+ const priPrefix = this.selectedField === 2 ? s.primary('โฏ Priority: ') : s.muted(' Priority: ');
194
+ const priValue = this.selectedField === 2 ? s.primary(PRIORITY_LABELS[this.item.priority]) : PRIORITY_LABELS[this.item.priority];
195
+ lines.push(` ${priPrefix}${priValue}`);
196
+ // Owner field
197
+ const ownerDisplay = this.item.owner ? `@${this.item.owner}` : 'unassigned';
198
+ const ownerPrefix = this.selectedField === 3 ? s.primary('โฏ Owner: ') : s.muted(' Owner: ');
199
+ const ownerValue = this.selectedField === 3 ? s.primary(ownerDisplay) : ownerDisplay;
200
+ lines.push(` ${ownerPrefix}${ownerValue}`);
201
+ lines.push('');
202
+ // Description
203
+ lines.push(` ${s.muted('Description:')}`);
204
+ const descLines = wrapText(this.item.description, cols - 6);
205
+ for (const line of descLines) {
206
+ lines.push(` ${line}`);
207
+ }
208
+ // Commit info
209
+ if (this.item.commit) {
210
+ lines.push('');
211
+ lines.push(` ${s.muted('Commit:')} ${this.item.commit}`);
212
+ }
213
+ lines.push('');
214
+ lines.push(border);
215
+ lines.push(` ${s.muted('โ†‘โ†“/jk Select field ยท โ†โ†’/hl Change value ยท Esc Back')}`);
216
+ lines.push(border);
217
+ return lines;
218
+ }
219
+ handleKey(data) {
220
+ // Ctrl+C closes everything
221
+ if (isCtrlC(data)) {
222
+ return closeOverlay({ modified: this.editState.modified });
223
+ }
224
+ // Escape - back to list
225
+ if (isEscape(data)) {
226
+ return popScreen();
227
+ }
228
+ // Up/Down or k/j - navigate fields (0=type, 1=status, 2=priority, 3=owner)
229
+ if (isNavigateUp(data) && this.selectedField > 0) {
230
+ this.selectedField = (this.selectedField - 1);
231
+ return stay();
232
+ }
233
+ if (isNavigateDown(data) && this.selectedField < 3) {
234
+ this.selectedField = (this.selectedField + 1);
235
+ return stay();
236
+ }
237
+ // Left/Right or h/l - change value of selected field
238
+ const isLeft = isLeftArrow(data) || isVimLeft(data);
239
+ const isRight = isRightArrow(data) || isVimRight(data);
240
+ if (isLeft || isRight) {
241
+ const direction = isRight ? 1 : -1;
242
+ if (this.selectedField === 0) {
243
+ // Type
244
+ const currentIdx = TYPE_OPTIONS.indexOf(this.item.type);
245
+ const newIdx = (currentIdx + direction + TYPE_OPTIONS.length) % TYPE_OPTIONS.length;
246
+ const newType = TYPE_OPTIONS[newIdx];
247
+ updateItemType(this.item.dbId, newType);
248
+ this.item.type = newType;
249
+ }
250
+ else if (this.selectedField === 1) {
251
+ // Status
252
+ const currentIdx = STATUS_OPTIONS.indexOf(this.item.status);
253
+ const newIdx = (currentIdx + direction + STATUS_OPTIONS.length) % STATUS_OPTIONS.length;
254
+ const newStatus = STATUS_OPTIONS[newIdx];
255
+ updateItemStatus(this.item.dbId, newStatus);
256
+ this.item.status = newStatus;
257
+ }
258
+ else if (this.selectedField === 2) {
259
+ // Priority
260
+ const currentIdx = PRIORITY_OPTIONS.indexOf(this.item.priority);
261
+ const newIdx = (currentIdx + direction + PRIORITY_OPTIONS.length) % PRIORITY_OPTIONS.length;
262
+ const newPriority = PRIORITY_OPTIONS[newIdx];
263
+ updateItemPriority(this.item.dbId, newPriority);
264
+ this.item.priority = newPriority;
265
+ }
266
+ else {
267
+ // Owner - cycle through ownerOptions (null = unassigned, then team agents)
268
+ const currentOwner = this.item.owner ?? null;
269
+ const currentIdx = this.ownerOptions.indexOf(currentOwner);
270
+ const safeIdx = currentIdx === -1 ? 0 : currentIdx;
271
+ const newIdx = (safeIdx + direction + this.ownerOptions.length) % this.ownerOptions.length;
272
+ const newOwner = this.ownerOptions[newIdx];
273
+ updateItemOwner(this.item.dbId, newOwner);
274
+ this.item.owner = newOwner ?? undefined;
275
+ }
276
+ this.editState.modified = true;
277
+ this.editState.reloadItems();
278
+ return stay();
279
+ }
280
+ return stay(false);
281
+ }
282
+ /**
283
+ * Minimum height for stable rendering.
284
+ */
285
+ getMinHeight() {
286
+ return 20;
287
+ }
288
+ }
289
+ // =============================================================================
290
+ // Add Screen (Multi-Step Wizard)
291
+ // =============================================================================
292
+ /**
293
+ * Screen for adding a new backlog item.
294
+ * 5 steps: type, priority, title, description, confirm
295
+ */
296
+ class AddScreen extends BaseScreen {
297
+ editState;
298
+ styles;
299
+ step = 0;
300
+ selectedIndex = 0;
301
+ inputBuffer = '';
302
+ error = null;
303
+ newItem = { type: null, priority: null, title: '', description: '' };
304
+ constructor(editState, styles) {
305
+ super();
306
+ this.editState = editState;
307
+ this.styles = styles;
308
+ }
309
+ render() {
310
+ const s = this.styles;
311
+ const cols = terminal.getTerminalWidth();
312
+ const border = renderBorder(cols, s);
313
+ const lines = [];
314
+ // Header
315
+ lines.push(border);
316
+ lines.push(` ${s.primaryBold('Add Item')}`);
317
+ lines.push('');
318
+ const stepLabels = ['Type', 'Priority', 'Title', 'Description', 'Confirm'];
319
+ lines.push(` ${s.muted(`Step ${String(this.step + 1)}/5: ${stepLabels[this.step]}`)}`);
320
+ lines.push('');
321
+ switch (this.step) {
322
+ case 0: // Type
323
+ lines.push(` ${chalk.bold('What type of item?')}`);
324
+ lines.push('');
325
+ for (let i = 0; i < TYPE_OPTIONS.length; i++) {
326
+ const isSelected = this.selectedIndex === i;
327
+ const prefix = isSelected ? s.primary('โฏ ') : ' ';
328
+ const label = `${String(i + 1)}. ${TYPE_LABELS[TYPE_OPTIONS[i]]}`;
329
+ lines.push(` ${prefix}${isSelected ? s.primary(label) : s.muted(label)}`);
330
+ }
331
+ break;
332
+ case 1: // Priority
333
+ lines.push(` ${chalk.bold('Priority level?')}`);
334
+ lines.push('');
335
+ for (let i = 0; i < PRIORITY_OPTIONS.length; i++) {
336
+ const isSelected = this.selectedIndex === i;
337
+ const prefix = isSelected ? s.primary('โฏ ') : ' ';
338
+ const label = `${String(i + 1)}. ${PRIORITY_LABELS[PRIORITY_OPTIONS[i]]}`;
339
+ lines.push(` ${prefix}${isSelected ? s.primary(label) : s.muted(label)}`);
340
+ }
341
+ break;
342
+ case 2: // Title
343
+ lines.push(` ${chalk.bold('Title (short description)')}`);
344
+ lines.push('');
345
+ lines.push(` > ${this.inputBuffer}โ–ˆ`);
346
+ lines.push('');
347
+ if (this.error) {
348
+ lines.push(` ${s.error(this.error)}`);
349
+ }
350
+ else {
351
+ lines.push(` ${s.muted('Keep it concise (2-100 characters)')}`);
352
+ }
353
+ break;
354
+ case 3: // Description
355
+ lines.push(` ${chalk.bold('Description (details)')}`);
356
+ lines.push('');
357
+ lines.push(` > ${this.inputBuffer}โ–ˆ`);
358
+ lines.push('');
359
+ if (this.error) {
360
+ lines.push(` ${s.error(this.error)}`);
361
+ }
362
+ else {
363
+ lines.push(` ${s.muted('Explain the requirement or issue')}`);
364
+ }
365
+ break;
366
+ case 4: // Confirm
367
+ lines.push(` ${chalk.bold('Confirm new item:')}`);
368
+ lines.push('');
369
+ lines.push(` ${s.muted('Type:')} ${this.newItem.type ? TYPE_LABELS[this.newItem.type] : 'N/A'}`);
370
+ lines.push(` ${s.muted('Priority:')} ${this.newItem.priority ? PRIORITY_LABELS[this.newItem.priority] : 'N/A'}`);
371
+ lines.push(` ${s.muted('Title:')} ${this.newItem.title}`);
372
+ lines.push(` ${s.muted('Description:')} ${this.newItem.description}`);
373
+ lines.push('');
374
+ for (let i = 0; i < 2; i++) {
375
+ const isSelected = this.selectedIndex === i;
376
+ const prefix = isSelected ? s.primary('โฏ ') : ' ';
377
+ const label = i === 0 ? '1. Create item' : '2. Cancel';
378
+ lines.push(` ${prefix}${isSelected ? s.primary(label) : s.muted(label)}`);
379
+ }
380
+ break;
381
+ }
382
+ lines.push('');
383
+ lines.push(border);
384
+ if (this.step === 2 || this.step === 3) {
385
+ lines.push(` ${s.muted('Enter Confirm ยท Esc Back')}`);
386
+ }
387
+ else {
388
+ lines.push(` ${s.muted('โ†‘โ†“/jk Navigate ยท Enter Select ยท Esc Back')}`);
389
+ }
390
+ lines.push(border);
391
+ return lines;
392
+ }
393
+ handleKey(data) {
394
+ const char = extractPrintable(data);
395
+ // Ctrl+C closes everything
396
+ if (isCtrlC(data)) {
397
+ return closeOverlay({ modified: this.editState.modified });
398
+ }
399
+ // Text input steps (title and description)
400
+ if (this.step === 2 || this.step === 3) {
401
+ if (isEscape(data)) {
402
+ if (this.step === 2) {
403
+ this.step = 1;
404
+ this.selectedIndex = 0;
405
+ }
406
+ else {
407
+ this.step = 2;
408
+ this.inputBuffer = this.newItem.title;
409
+ }
410
+ this.error = null;
411
+ return stay();
412
+ }
413
+ if (isEnter(data)) {
414
+ const text = this.inputBuffer.trim();
415
+ if (this.step === 2) {
416
+ if (text.length < 2) {
417
+ this.error = 'Title too short (min 2 characters)';
418
+ }
419
+ else if (text.length > 100) {
420
+ this.error = 'Title too long (max 100 characters)';
421
+ }
422
+ else {
423
+ this.newItem.title = text;
424
+ this.step = 3;
425
+ this.inputBuffer = '';
426
+ this.error = null;
427
+ }
428
+ }
429
+ else {
430
+ if (text.length < 5) {
431
+ this.error = 'Description too short (min 5 characters)';
432
+ }
433
+ else {
434
+ this.newItem.description = text;
435
+ this.step = 4;
436
+ this.selectedIndex = 0;
437
+ this.error = null;
438
+ }
439
+ }
440
+ return stay();
441
+ }
442
+ if (isBackspace(data)) {
443
+ this.inputBuffer = this.inputBuffer.slice(0, -1);
444
+ return stay();
445
+ }
446
+ if (char) {
447
+ this.inputBuffer += char;
448
+ return stay();
449
+ }
450
+ return stay(false);
451
+ }
452
+ // Selection steps (type, priority, confirm)
453
+ if (isEscape(data)) {
454
+ if (this.step === 0) {
455
+ return popScreen();
456
+ }
457
+ else if (this.step === 4) {
458
+ this.step = 3;
459
+ this.inputBuffer = this.newItem.description;
460
+ }
461
+ else {
462
+ this.step = (this.step - 1);
463
+ this.selectedIndex = 0;
464
+ }
465
+ return stay();
466
+ }
467
+ if (isNavigateUp(data)) {
468
+ this.selectedIndex = Math.max(0, this.selectedIndex - 1);
469
+ return stay();
470
+ }
471
+ if (isNavigateDown(data)) {
472
+ const maxIdx = this.getMaxIndexForStep();
473
+ this.selectedIndex = Math.min(maxIdx, this.selectedIndex + 1);
474
+ return stay();
475
+ }
476
+ if (isEnter(data)) {
477
+ switch (this.step) {
478
+ case 0:
479
+ this.newItem.type = TYPE_OPTIONS[this.selectedIndex];
480
+ this.step = 1;
481
+ this.selectedIndex = 0;
482
+ break;
483
+ case 1:
484
+ this.newItem.priority = PRIORITY_OPTIONS[this.selectedIndex];
485
+ this.step = 2;
486
+ this.inputBuffer = '';
487
+ break;
488
+ case 4:
489
+ if (this.newItem.type && this.newItem.priority && this.editState.projectId) {
490
+ if (this.selectedIndex === 0) {
491
+ // Create item in database
492
+ createItem(this.editState.projectId, this.newItem.type, this.newItem.priority, this.newItem.title, this.newItem.description);
493
+ this.editState.modified = true;
494
+ this.editState.reloadItems();
495
+ }
496
+ return popScreen();
497
+ }
498
+ break;
499
+ }
500
+ return stay();
501
+ }
502
+ // Number keys for quick selection
503
+ if (char && char >= '1' && char <= '9') {
504
+ const numIdx = parseInt(char, 10) - 1;
505
+ const maxIdx = this.getMaxIndexForStep();
506
+ if (numIdx <= maxIdx) {
507
+ this.selectedIndex = numIdx;
508
+ return stay();
509
+ }
510
+ }
511
+ return stay(false);
512
+ }
513
+ getMaxIndexForStep() {
514
+ switch (this.step) {
515
+ case 0: return TYPE_OPTIONS.length - 1;
516
+ case 1: return PRIORITY_OPTIONS.length - 1;
517
+ case 4: return 1;
518
+ default: return 0;
519
+ }
520
+ }
521
+ /**
522
+ * Minimum height for stable rendering.
523
+ */
524
+ getMinHeight() {
525
+ return 18;
526
+ }
527
+ }
528
+ // =============================================================================
529
+ // Backlog Overlay V2 Class
530
+ // =============================================================================
531
+ export class BacklogOverlayV2 extends TabbedListOverlayV2 {
532
+ type = 'inline';
533
+ id = 'backlog-overlay-v2';
534
+ editState;
535
+ teamAgentIds;
536
+ /**
537
+ * @param projectId - Optional project ID to view backlog for.
538
+ * If not provided, uses the active project.
539
+ * Pass this when opening from workflow overlay for a specific project.
540
+ * @param teamAgentIds - List of agent IDs in the team for owner selection.
541
+ */
542
+ constructor(projectId, teamAgentIds = []) {
543
+ // Filter out 'default' from team agents for owner selection
544
+ const validOwners = teamAgentIds.filter(id => id !== 'default');
545
+ // Use provided projectId, or fall back to active project
546
+ const activeProject = getActiveProject();
547
+ const resolvedProjectId = projectId ?? activeProject?.id ?? null;
548
+ // Load items from database (empty if no project)
549
+ const items = resolvedProjectId ? loadItemsFromDb(resolvedProjectId) : [];
550
+ super({
551
+ title: 'Backlog',
552
+ tabs: TABS,
553
+ items,
554
+ pageSize: PAGE_SIZE,
555
+ filterByTab: (item, tabId) => {
556
+ if (tabId === 'all')
557
+ return true;
558
+ if (tabId === 'active') {
559
+ return item.status === '๐Ÿ“‹' || item.status === '๐Ÿšง';
560
+ }
561
+ return item.type === tabId;
562
+ },
563
+ getSearchText: (item) => `${item.id} ${item.title} ${item.description} ${item.owner ?? ''}`,
564
+ renderItem: (item, isSelected, styles) => {
565
+ const cols = terminal.getTerminalWidth();
566
+ const prefix = isSelected ? styles.primary('โฏ ') : ' ';
567
+ // Fixed column widths - owner as 3rd column for visibility
568
+ const idW = 10;
569
+ const typeW = 10;
570
+ const ownerW = 12; // "unassigned" = 10 chars + padding
571
+ const statusW = 4;
572
+ const priW = 9;
573
+ const titleW = Math.max(20, cols - idW - typeW - ownerW - statusW - priW - 6);
574
+ const ownerDisplay = (item.owner ?? 'unassigned').padEnd(ownerW);
575
+ const titleDisplay = item.title.slice(0, titleW);
576
+ // Order: id, type, owner, status, priority, title
577
+ const row = `${item.id.padEnd(idW)}${item.type.padEnd(typeW)}${ownerDisplay}${item.status.padEnd(statusW)}${item.priority.padEnd(priW)}${titleDisplay}`;
578
+ if (isSelected) {
579
+ return `${prefix}${styles.primary(row)}`;
580
+ }
581
+ return `${prefix}${styles.muted(row)}`;
582
+ },
583
+ showCount: true,
584
+ emptyMessage: resolvedProjectId === null
585
+ ? 'No active project. Use /projects to select one.'
586
+ : 'No items found. Use [a] to add or /design to create initial backlog.',
587
+ noResultsMessage: 'No items match the search.',
588
+ renderSelectedPreview: (item, styles) => {
589
+ const cols = terminal.getTerminalWidth();
590
+ const descPrefix = ' Desc: ';
591
+ const maxDescLen = cols - descPrefix.length - 2;
592
+ // Replace newlines with spaces to prevent height changes
593
+ const normalizedDesc = item.description.replace(/\n+/g, ' ').replace(/\s+/g, ' ').trim();
594
+ const truncatedDesc = truncate(normalizedDesc, maxDescLen);
595
+ const lines = [styles.muted(descPrefix) + truncatedDesc];
596
+ if (item.owner) {
597
+ lines.push(styles.muted(' Owner: ') + `@${item.owner}`);
598
+ }
599
+ if (item.commit) {
600
+ lines.push(styles.muted(' Commit: ') + item.commit);
601
+ }
602
+ return lines;
603
+ },
604
+ footerHints: (searchMode) => {
605
+ if (searchMode) {
606
+ return 'Type to search ยท Enter/Esc Exit search ยท Backspace Delete';
607
+ }
608
+ return '/ Search ยท โ†‘โ†“/jk Navigate ยท โ†โ†’/hl Pages ยท Tab Filter ยท Space Toggle ยท a Add ยท q/Esc Close';
609
+ },
610
+ });
611
+ // Create edit state that screens can share
612
+ this.editState = {
613
+ modified: false,
614
+ projectId: resolvedProjectId,
615
+ items,
616
+ reloadItems: () => {
617
+ if (this.editState.projectId) {
618
+ this.editState.items = loadItemsFromDb(this.editState.projectId);
619
+ // Update the overlay's internal state
620
+ this.state.items = this.editState.items;
621
+ // Re-apply filters
622
+ const currentTabId = this.listConfig.tabs[this.state.currentTab]?.id ?? 'all';
623
+ let filtered = this.state.items.filter((item) => this.listConfig.filterByTab(item, currentTabId));
624
+ if (this.state.searchQuery) {
625
+ const query = this.state.searchQuery.toLowerCase();
626
+ filtered = filtered.filter((item) => this.listConfig.getSearchText(item).toLowerCase().includes(query));
627
+ }
628
+ this.state.filteredItems = filtered;
629
+ }
630
+ },
631
+ };
632
+ // Store team agent IDs for owner selection (excluding 'default')
633
+ this.teamAgentIds = validOwners;
634
+ }
635
+ createDetailScreen(item) {
636
+ return new DetailScreen(item, this.editState, this.getStyles(), this.teamAgentIds);
637
+ }
638
+ /**
639
+ * Override handleKey to add custom behavior (Space toggle, 'a' add).
640
+ */
641
+ handleKey(key) {
642
+ const data = key.raw;
643
+ // Only intercept when on the main list screen
644
+ if (this.screenStack.size() === 1) {
645
+ // Ctrl+C always closes
646
+ if (isCtrlC(data)) {
647
+ return this.close({ modified: this.editState.modified });
648
+ }
649
+ // Only handle custom keys when not in search mode
650
+ if (!this.state.searchMode) {
651
+ const char = extractPrintable(data);
652
+ // Space - toggle status
653
+ if (isSpace(data) && this.state.filteredItems.length > 0) {
654
+ const item = this.state.filteredItems[this.state.selectedIndex];
655
+ // Cycle through statuses: ๐Ÿ“‹ โ†’ ๐Ÿšง โ†’ โœ… โ†’ ๐Ÿ“‹
656
+ const statusIdx = STATUS_OPTIONS.indexOf(item.status);
657
+ const newStatus = STATUS_OPTIONS[(statusIdx + 1) % STATUS_OPTIONS.length];
658
+ updateItemStatus(item.dbId, newStatus);
659
+ this.editState.modified = true;
660
+ this.editState.reloadItems();
661
+ return this.rerender();
662
+ }
663
+ // 'a' - add mode
664
+ if (char === 'a' || char === 'A') {
665
+ if (this.editState.projectId) {
666
+ const addScreen = new AddScreen(this.editState, this.getStyles());
667
+ this.screenStack.push(addScreen);
668
+ return this.rerender();
669
+ }
670
+ return this.noAction();
671
+ }
672
+ // 'q' or Esc closes with result
673
+ if (char === 'q' || isEscape(data)) {
674
+ return this.close({ modified: this.editState.modified });
675
+ }
676
+ }
677
+ }
678
+ // Let parent handle other keys (tabs, search, pagination, Enter for detail)
679
+ return super.handleKey(key);
680
+ }
681
+ }