@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,153 @@
1
+ /**
2
+ * Tabbed List Overlay Base Class
3
+ *
4
+ * A reusable base for overlays that display:
5
+ * - Tabs for filtering/categorizing
6
+ * - A paginated list of items
7
+ * - Search mode (activated with /)
8
+ * - Detail view (via ScreenStack)
9
+ *
10
+ * This provides ~80% of the common overlay functionality,
11
+ * leaving only item-specific rendering to be customized.
12
+ *
13
+ * Usage:
14
+ * ```typescript
15
+ * interface MyItem { name: string; description: string; }
16
+ *
17
+ * const TABS = [
18
+ * { id: 'all', label: 'All' },
19
+ * { id: 'active', label: 'Active' },
20
+ * ];
21
+ *
22
+ * class MyOverlay extends TabbedListOverlay<MyItem, MyResult> {
23
+ * constructor(items: MyItem[]) {
24
+ * super({
25
+ * title: 'My Items',
26
+ * tabs: TABS,
27
+ * items,
28
+ * pageSize: 12,
29
+ * filterByTab: (item, tabId) => tabId === 'all' || item.active,
30
+ * getSearchText: (item) => `${item.name} ${item.description}`,
31
+ * renderItem: (item, isSelected, styles) => {
32
+ * const prefix = isSelected ? '❯ ' : ' ';
33
+ * return prefix + item.name;
34
+ * },
35
+ * });
36
+ * }
37
+ *
38
+ * // Optional: Override to add detail view
39
+ * protected createDetailScreen(item: MyItem): BaseScreen | null {
40
+ * return new MyDetailScreen(item, this.styles);
41
+ * }
42
+ * }
43
+ * ```
44
+ */
45
+ import { BaseOverlay, type OverlayState } from './overlay-base.js';
46
+ import { BaseScreen, ScreenStack } from './screen-stack.js';
47
+ import { type PaginationState } from '../features/pagination-feature.js';
48
+ import { type SearchState } from '../features/search-feature.js';
49
+ import type { TabDefinition, TabState } from './overlay-types.js';
50
+ /**
51
+ * Configuration for a TabbedListOverlay.
52
+ */
53
+ export interface TabbedListConfig<TItem> {
54
+ /** Title shown in header */
55
+ title: string;
56
+ /** Tab definitions */
57
+ tabs: TabDefinition[];
58
+ /** All items (will be filtered by tab and search) */
59
+ items: TItem[];
60
+ /** Number of items per page (default: 12) */
61
+ pageSize?: number;
62
+ /**
63
+ * Filter items by tab.
64
+ * Return true to include item in the current tab.
65
+ */
66
+ filterByTab: (item: TItem, tabId: string) => boolean;
67
+ /**
68
+ * Get searchable text from an item.
69
+ * Used for search filtering.
70
+ */
71
+ getSearchText: (item: TItem) => string;
72
+ /**
73
+ * Render an item as a string line.
74
+ * @param item - The item to render
75
+ * @param isSelected - Whether this item is currently selected
76
+ * @param styles - Theme styles
77
+ * @returns Single line string
78
+ */
79
+ renderItem: (item: TItem, isSelected: boolean, styles: ReturnType<typeof import('../../themes/index.js').getStyles>) => string;
80
+ /**
81
+ * Optional: Show count badge in header (default: true)
82
+ */
83
+ showCount?: boolean;
84
+ /**
85
+ * Optional: Custom empty state message
86
+ */
87
+ emptyMessage?: string;
88
+ /**
89
+ * Optional: Custom no-results message
90
+ */
91
+ noResultsMessage?: string;
92
+ /**
93
+ * Optional: Custom footer hints
94
+ * @param searchMode - Whether search mode is active
95
+ * @returns Footer hints string
96
+ */
97
+ footerHints?: (searchMode: boolean) => string;
98
+ /**
99
+ * Optional: Render preview content for the selected item
100
+ * Displayed between the list and footer
101
+ * @param item - The currently selected item
102
+ * @param styles - Theme styles
103
+ * @returns Array of lines to render
104
+ */
105
+ renderSelectedPreview?: (item: TItem, styles: ReturnType<typeof import('../../themes/index.js').getStyles>) => string[];
106
+ /**
107
+ * Optional: Whether detail screens take over full screen.
108
+ * When true (default), returning from a detail screen clears the screen.
109
+ * When false, screens render in-place without clearing.
110
+ */
111
+ detailScreensFullScreen?: boolean;
112
+ }
113
+ /**
114
+ * State for TabbedListOverlay.
115
+ */
116
+ export interface TabbedListState<TItem> extends OverlayState, TabState, PaginationState, SearchState {
117
+ /** All items */
118
+ items: TItem[];
119
+ /** Filtered items (by tab and search) */
120
+ filteredItems: TItem[];
121
+ /** Whether search mode is active */
122
+ searchMode: boolean;
123
+ }
124
+ /**
125
+ * Abstract base class for tabbed list overlays.
126
+ *
127
+ * Provides:
128
+ * - Tab-based filtering
129
+ * - Search mode with / toggle
130
+ * - Paginated item display
131
+ * - ScreenStack for detail views
132
+ *
133
+ * Subclasses can override createDetailScreen() to add detail views.
134
+ */
135
+ export declare abstract class TabbedListOverlay<TItem, TResult = void> extends BaseOverlay<TabbedListState<TItem>, TResult> {
136
+ protected readonly screenStack: ScreenStack;
137
+ protected readonly listConfig: TabbedListConfig<TItem>;
138
+ private resizeHandler;
139
+ constructor(config: TabbedListConfig<TItem>);
140
+ /**
141
+ * Override to create a detail screen for an item.
142
+ * Return null to disable detail view.
143
+ */
144
+ protected createDetailScreen(_item: TItem): BaseScreen | null;
145
+ show(): Promise<TResult>;
146
+ protected close(result: TResult): void;
147
+ render(): string[];
148
+ handleKey(data: Buffer): void;
149
+ /**
150
+ * Get the currently selected item.
151
+ */
152
+ protected getSelectedItem(): TItem | undefined;
153
+ }
@@ -0,0 +1,369 @@
1
+ /**
2
+ * Tabbed List Overlay Base Class
3
+ *
4
+ * A reusable base for overlays that display:
5
+ * - Tabs for filtering/categorizing
6
+ * - A paginated list of items
7
+ * - Search mode (activated with /)
8
+ * - Detail view (via ScreenStack)
9
+ *
10
+ * This provides ~80% of the common overlay functionality,
11
+ * leaving only item-specific rendering to be customized.
12
+ *
13
+ * Usage:
14
+ * ```typescript
15
+ * interface MyItem { name: string; description: string; }
16
+ *
17
+ * const TABS = [
18
+ * { id: 'all', label: 'All' },
19
+ * { id: 'active', label: 'Active' },
20
+ * ];
21
+ *
22
+ * class MyOverlay extends TabbedListOverlay<MyItem, MyResult> {
23
+ * constructor(items: MyItem[]) {
24
+ * super({
25
+ * title: 'My Items',
26
+ * tabs: TABS,
27
+ * items,
28
+ * pageSize: 12,
29
+ * filterByTab: (item, tabId) => tabId === 'all' || item.active,
30
+ * getSearchText: (item) => `${item.name} ${item.description}`,
31
+ * renderItem: (item, isSelected, styles) => {
32
+ * const prefix = isSelected ? '❯ ' : ' ';
33
+ * return prefix + item.name;
34
+ * },
35
+ * });
36
+ * }
37
+ *
38
+ * // Optional: Override to add detail view
39
+ * protected createDetailScreen(item: MyItem): BaseScreen | null {
40
+ * return new MyDetailScreen(item, this.styles);
41
+ * }
42
+ * }
43
+ * ```
44
+ */
45
+ import * as terminal from '../terminal.js';
46
+ import { BaseOverlay } from './overlay-base.js';
47
+ import { BaseScreen, ScreenStack, stay, pushScreen, closeOverlay } from './screen-stack.js';
48
+ import { TabFeature } from '../features/tab-feature.js';
49
+ import { PaginationFeature } from '../features/pagination-feature.js';
50
+ import { SearchFeature } from '../features/search-feature.js';
51
+ import { isCtrlC, isClose, isEscape, isSlash, isEnter } from './key-utils.js';
52
+ import { renderBorder } from './render-utils.js';
53
+ // =============================================================================
54
+ // List Screen (Main View)
55
+ // =============================================================================
56
+ /**
57
+ * The main list screen for TabbedListOverlay.
58
+ * Handles tabs, search, pagination, and item display.
59
+ */
60
+ class ListScreen extends BaseScreen {
61
+ config;
62
+ state;
63
+ styles;
64
+ createDetailScreen;
65
+ tabFeature;
66
+ pagination;
67
+ searchFeature;
68
+ hasBeenPushedTo = false;
69
+ constructor(config, state, styles, createDetailScreen) {
70
+ super();
71
+ this.config = config;
72
+ this.state = state;
73
+ this.styles = styles;
74
+ this.createDetailScreen = createDetailScreen;
75
+ this.tabFeature = new TabFeature(config.tabs, () => {
76
+ this.onTabChange();
77
+ });
78
+ this.pagination = new PaginationFeature({
79
+ pageSize: config.pageSize ?? 12,
80
+ });
81
+ this.searchFeature = new SearchFeature({
82
+ onSearch: () => { this.applyFilters(); },
83
+ escapeClearsSearch: false,
84
+ });
85
+ }
86
+ /**
87
+ * Called when returning from a detail screen.
88
+ * Clear screen if we came back from a full-screen view.
89
+ * (resetRenderState() will handle cursor positioning)
90
+ */
91
+ onEnter() {
92
+ if (this.hasBeenPushedTo && this.config.detailScreensFullScreen !== false) {
93
+ // Returning from a full-screen detail screen - clear screen
94
+ terminal.clearScreen();
95
+ }
96
+ }
97
+ /**
98
+ * Called when navigating to a detail screen.
99
+ */
100
+ onExit() {
101
+ this.hasBeenPushedTo = true;
102
+ }
103
+ onTabChange() {
104
+ this.state.selectedIndex = 0;
105
+ this.state.scrollOffset = 0;
106
+ this.state.searchMode = false;
107
+ this.state.searchQuery = '';
108
+ this.applyFilters();
109
+ }
110
+ applyFilters() {
111
+ const tabId = this.tabFeature.getCurrentTabId(this.state);
112
+ // Filter by tab
113
+ let filtered = this.state.items.filter((item) => this.config.filterByTab(item, tabId));
114
+ // Filter by search
115
+ if (this.state.searchQuery) {
116
+ filtered = this.searchFeature.filterItems(filtered, this.state, this.config.getSearchText);
117
+ }
118
+ this.state.filteredItems = filtered;
119
+ this.state.selectedIndex = 0;
120
+ this.state.scrollOffset = 0;
121
+ }
122
+ render() {
123
+ const s = this.styles;
124
+ const cols = terminal.getTerminalWidth();
125
+ const border = renderBorder(cols, s);
126
+ const pageSize = this.config.pageSize ?? 12;
127
+ const lines = [];
128
+ // Header
129
+ lines.push(border);
130
+ const showCount = this.config.showCount ?? true;
131
+ const countBadge = showCount
132
+ ? s.muted(` [${String(this.state.filteredItems.length)}/${String(this.state.items.length)}]`)
133
+ : '';
134
+ lines.push(` ${s.primaryBold(this.config.title)}${countBadge}`);
135
+ lines.push('');
136
+ // Tab bar with hint
137
+ const tabBar = this.tabFeature.renderTabs(this.state, s);
138
+ const tabHint = s.muted(`(${this.tabFeature.renderHints()})`);
139
+ lines.push(` ${tabBar} ${tabHint}`);
140
+ lines.push('');
141
+ // Search box (if in search mode)
142
+ if (this.state.searchMode) {
143
+ const query = this.state.searchQuery;
144
+ lines.push(` ${s.muted('Search:')} ${query ? s.primary(query) : ''}█`);
145
+ lines.push('');
146
+ }
147
+ // Items
148
+ const visibleItems = this.pagination.getVisibleItems(this.state, this.state.filteredItems);
149
+ if (visibleItems.length === 0) {
150
+ const msg = this.state.searchQuery
151
+ ? (this.config.noResultsMessage ?? 'No items match the search.')
152
+ : (this.config.emptyMessage ?? 'No items available.');
153
+ lines.push(` ${s.muted(msg)}`);
154
+ for (let i = 0; i < pageSize - 1; i++) {
155
+ lines.push('');
156
+ }
157
+ }
158
+ else {
159
+ for (let i = 0; i < visibleItems.length; i++) {
160
+ const item = visibleItems[i];
161
+ const absoluteIndex = this.state.scrollOffset + i;
162
+ const isSelected = absoluteIndex === this.state.selectedIndex;
163
+ lines.push(this.config.renderItem(item, isSelected, s));
164
+ }
165
+ // Pad to fixed height
166
+ for (let i = visibleItems.length; i < pageSize; i++) {
167
+ lines.push('');
168
+ }
169
+ }
170
+ // Pagination indicator
171
+ lines.push('');
172
+ const indicator = this.pagination.renderIndicator(this.state, this.state.filteredItems.length, s);
173
+ if (indicator) {
174
+ lines.push(indicator);
175
+ }
176
+ // Selected item preview (if configured)
177
+ if (this.config.renderSelectedPreview && visibleItems.length > 0) {
178
+ const selectedItem = this.state.filteredItems[this.state.selectedIndex];
179
+ if (selectedItem) {
180
+ lines.push('');
181
+ const previewLines = this.config.renderSelectedPreview(selectedItem, s);
182
+ lines.push(...previewLines);
183
+ }
184
+ }
185
+ // Footer
186
+ lines.push(border);
187
+ lines.push(` ${s.muted(this.getFooterHints())}`);
188
+ lines.push(border);
189
+ return lines;
190
+ }
191
+ getFooterHints() {
192
+ // Use custom footer hints if provided
193
+ if (this.config.footerHints) {
194
+ return this.config.footerHints(this.state.searchMode);
195
+ }
196
+ // Default footer hints
197
+ if (this.state.searchMode) {
198
+ return 'Type to filter · ↑↓/jk Navigate · Enter Details · Esc Exit search';
199
+ }
200
+ return this.pagination.renderHints() + ' · / Search · Enter Details · q/Esc Close';
201
+ }
202
+ handleKey(data) {
203
+ // Ctrl+C always closes
204
+ if (isCtrlC(data)) {
205
+ return closeOverlay(undefined);
206
+ }
207
+ // Search mode handling
208
+ if (this.state.searchMode) {
209
+ if (isEscape(data)) {
210
+ this.state.searchMode = false;
211
+ if (this.state.searchQuery) {
212
+ this.state.searchQuery = '';
213
+ this.applyFilters();
214
+ }
215
+ return stay();
216
+ }
217
+ const searchResult = this.searchFeature.handleKey(data, this.state);
218
+ if (searchResult?.handled) {
219
+ return searchResult.action === 'render' ? stay() : stay(false);
220
+ }
221
+ if (isEnter(data)) {
222
+ return this.handleEnter();
223
+ }
224
+ const paginationResult = this.pagination.handleKey(data, this.state, this.state.filteredItems.length);
225
+ if (paginationResult?.handled) {
226
+ return paginationResult.action === 'render' ? stay() : stay(false);
227
+ }
228
+ return stay(false);
229
+ }
230
+ // Not in search mode
231
+ if (isSlash(data)) {
232
+ this.state.searchMode = true;
233
+ return stay();
234
+ }
235
+ if (isClose(data)) {
236
+ return closeOverlay(undefined);
237
+ }
238
+ // Tab navigation
239
+ const tabResult = this.tabFeature.handleKey(data, this.state);
240
+ if (tabResult?.handled) {
241
+ return tabResult.action === 'render' ? stay() : stay(false);
242
+ }
243
+ // Enter shows detail
244
+ if (isEnter(data)) {
245
+ return this.handleEnter();
246
+ }
247
+ // Pagination
248
+ const paginationResult = this.pagination.handleKey(data, this.state, this.state.filteredItems.length);
249
+ if (paginationResult?.handled) {
250
+ return paginationResult.action === 'render' ? stay() : stay(false);
251
+ }
252
+ return stay(false);
253
+ }
254
+ handleEnter() {
255
+ if (this.state.filteredItems.length === 0) {
256
+ return stay(false);
257
+ }
258
+ const item = this.state.filteredItems[this.state.selectedIndex];
259
+ const detailScreen = this.createDetailScreen(item);
260
+ if (detailScreen) {
261
+ return pushScreen(detailScreen);
262
+ }
263
+ return stay(false);
264
+ }
265
+ }
266
+ // =============================================================================
267
+ // TabbedListOverlay Base Class
268
+ // =============================================================================
269
+ /**
270
+ * Abstract base class for tabbed list overlays.
271
+ *
272
+ * Provides:
273
+ * - Tab-based filtering
274
+ * - Search mode with / toggle
275
+ * - Paginated item display
276
+ * - ScreenStack for detail views
277
+ *
278
+ * Subclasses can override createDetailScreen() to add detail views.
279
+ */
280
+ export class TabbedListOverlay extends BaseOverlay {
281
+ screenStack;
282
+ listConfig;
283
+ resizeHandler = null;
284
+ constructor(config) {
285
+ const initialState = {
286
+ lineCount: 0,
287
+ maxLineCount: 0,
288
+ currentTab: 0,
289
+ selectedIndex: 0,
290
+ scrollOffset: 0,
291
+ searchQuery: '',
292
+ searchMode: false,
293
+ items: config.items,
294
+ filteredItems: config.items.filter((item) => config.filterByTab(item, config.tabs[0]?.id ?? 'all')),
295
+ };
296
+ super(initialState);
297
+ this.listConfig = config;
298
+ this.screenStack = new ScreenStack();
299
+ this.screenStack.push(new ListScreen(config, this.state, this.styles, (item) => this.createDetailScreen(item)));
300
+ }
301
+ /**
302
+ * Override to create a detail screen for an item.
303
+ * Return null to disable detail view.
304
+ */
305
+ createDetailScreen(_item) {
306
+ return null;
307
+ }
308
+ async show() {
309
+ // Add resize handler
310
+ this.resizeHandler = () => {
311
+ this.update();
312
+ };
313
+ process.stdout.on('resize', this.resizeHandler);
314
+ return super.show();
315
+ }
316
+ close(result) {
317
+ if (this.resizeHandler) {
318
+ process.stdout.removeListener('resize', this.resizeHandler);
319
+ this.resizeHandler = null;
320
+ }
321
+ super.close(result);
322
+ }
323
+ render() {
324
+ const screen = this.screenStack.current();
325
+ return screen?.render() ?? [];
326
+ }
327
+ handleKey(data) {
328
+ const screen = this.screenStack.current();
329
+ if (!screen) {
330
+ this.close(undefined);
331
+ return;
332
+ }
333
+ const result = screen.handleKey(data);
334
+ switch (result.action) {
335
+ case 'stay':
336
+ if (result.render) {
337
+ this.update();
338
+ }
339
+ break;
340
+ case 'push':
341
+ this.screenStack.push(result.screen);
342
+ // Reset overlay state after screen change (screen's onEnter may have cleared screen)
343
+ // Skip for in-place rendering (detailScreensFullScreen: false)
344
+ if (this.listConfig.detailScreensFullScreen !== false) {
345
+ this.resetRenderState();
346
+ }
347
+ this.update();
348
+ break;
349
+ case 'pop':
350
+ this.screenStack.pop();
351
+ // Reset overlay state after screen change (screen's onEnter may have cleared screen)
352
+ // Skip for in-place rendering (detailScreensFullScreen: false)
353
+ if (this.listConfig.detailScreensFullScreen !== false) {
354
+ this.resetRenderState();
355
+ }
356
+ this.update();
357
+ break;
358
+ case 'close':
359
+ this.close(result.result);
360
+ break;
361
+ }
362
+ }
363
+ /**
364
+ * Get the currently selected item.
365
+ */
366
+ getSelectedItem() {
367
+ return this.state.filteredItems[this.state.selectedIndex];
368
+ }
369
+ }
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Shared Label Constants
3
+ *
4
+ * Centralized display labels for domain types used across multiple overlays.
5
+ */
6
+ import type { ArtifactType } from '../../multi-agent/index.js';
7
+ import type { DocumentType, PlanStatus } from '../../db/schema.js';
8
+ export declare const ARTIFACT_TYPE_LABELS: Record<ArtifactType, string>;
9
+ export declare const DOC_TYPE_LABELS: Record<DocumentType, string>;
10
+ /** Icon-only labels for compact display (e.g., list views) */
11
+ export declare const PLAN_STATUS_ICONS: Record<PlanStatus, string>;
12
+ /** Icon + text labels for detailed display (e.g., detail views) */
13
+ export declare const PLAN_STATUS_LABELS: Record<PlanStatus, string>;
14
+ export declare const PLAN_STATUS_COLORS: Record<PlanStatus, 'muted' | 'warning' | 'primary' | 'success' | 'error'>;
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Shared Label Constants
3
+ *
4
+ * Centralized display labels for domain types used across multiple overlays.
5
+ */
6
+ // =============================================================================
7
+ // Artifact Labels
8
+ // =============================================================================
9
+ export const ARTIFACT_TYPE_LABELS = {
10
+ 'design': 'DESIGN',
11
+ 'plan': 'PLAN',
12
+ 'review': 'REVIEW',
13
+ 'decision': 'DECISION',
14
+ 'note': 'NOTE',
15
+ };
16
+ // =============================================================================
17
+ // Document Labels
18
+ // =============================================================================
19
+ export const DOC_TYPE_LABELS = {
20
+ 'prd': 'PRD',
21
+ 'architecture': 'ARCH',
22
+ 'design': 'DESIGN',
23
+ 'notes': 'NOTES',
24
+ 'plan': 'PLAN',
25
+ };
26
+ // =============================================================================
27
+ // Plan Status Labels
28
+ // =============================================================================
29
+ /** Icon-only labels for compact display (e.g., list views) */
30
+ export const PLAN_STATUS_ICONS = {
31
+ 'draft': '○',
32
+ 'approved': '◐',
33
+ 'in_progress': '◑',
34
+ 'completed': '●',
35
+ 'abandoned': '✗',
36
+ };
37
+ /** Icon + text labels for detailed display (e.g., detail views) */
38
+ export const PLAN_STATUS_LABELS = {
39
+ 'draft': '○ Draft',
40
+ 'approved': '◐ Approved',
41
+ 'in_progress': '◑ In Progress',
42
+ 'completed': '● Completed',
43
+ 'abandoned': '✗ Abandoned',
44
+ };
45
+ export const PLAN_STATUS_COLORS = {
46
+ 'draft': 'muted',
47
+ 'approved': 'warning',
48
+ 'in_progress': 'primary',
49
+ 'completed': 'success',
50
+ 'abandoned': 'error',
51
+ };
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Conversation history and filtering.
3
+ *
4
+ * Extracted from TerminalUI — owns conversation data, restored history,
5
+ * and agent-based filtering. Rendering orchestration stays on TerminalUI.
6
+ */
7
+ import type { PrintableItem } from './terminal-types.js';
8
+ export declare class ConversationStore {
9
+ /** All printed items (stored for re-rendering on config change). */
10
+ history: PrintableItem[];
11
+ /** Session history for Ctrl+R replay. */
12
+ restoredHistory: PrintableItem[];
13
+ /** Agent-based conversation filter. */
14
+ private filter;
15
+ /** Add an item to conversation history. */
16
+ addItem(item: PrintableItem): void;
17
+ /** Get a copy of conversation history. */
18
+ getHistory(): PrintableItem[];
19
+ /** Clear all conversation history. */
20
+ clearHistory(): void;
21
+ /** Store restored conversation items for Ctrl+R history view. */
22
+ setRestoredHistory(items: PrintableItem[]): void;
23
+ /** Check if there is restored history available. */
24
+ hasRestoredHistory(): boolean;
25
+ /**
26
+ * Set conversation filter to show only specific agents.
27
+ * Pass empty array to show all agents.
28
+ */
29
+ setFilter(agentIds: string[]): void;
30
+ /** Clear conversation filter (show all agents). */
31
+ clearFilter(): void;
32
+ /** Get current conversation filter state. */
33
+ getFilter(): {
34
+ agentIds: string[];
35
+ isActive: boolean;
36
+ };
37
+ /** Whether the filter is currently active. */
38
+ get isFilterActive(): boolean;
39
+ /** Get the set of filtered agent IDs (for display). */
40
+ get filterAgentIds(): ReadonlySet<string>;
41
+ /**
42
+ * Add an agent to the conversation filter (auto-expand).
43
+ * Returns true if agent was added, false if filter not active or agent already included.
44
+ */
45
+ addToFilter(agentId: string): boolean;
46
+ /**
47
+ * Check if an agent is in the current filter (or filter is inactive).
48
+ * Returns true if messages from this agent would be shown.
49
+ */
50
+ isAgentInFilter(agentId: string): boolean;
51
+ /**
52
+ * Check if an item should be shown based on current filter.
53
+ */
54
+ shouldShowItem(item: PrintableItem): boolean;
55
+ }