@compilr-dev/cli 0.5.0 → 0.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (587) hide show
  1. package/LICENSE +108 -0
  2. package/README.md +237 -69
  3. package/dist/.tsbuildinfo.app +1 -0
  4. package/dist/.tsbuildinfo.data +1 -0
  5. package/dist/.tsbuildinfo.domain +1 -0
  6. package/dist/.tsbuildinfo.foundation +1 -0
  7. package/dist/agent.d.ts +61 -4
  8. package/dist/agent.js +241 -245
  9. package/dist/anchors/index.d.ts +1 -1
  10. package/dist/anchors/index.js +1 -1
  11. package/dist/anchors/project-anchors.d.ts +2 -2
  12. package/dist/anchors/project-anchors.js +1 -1
  13. package/dist/auth/api-client.d.ts +124 -0
  14. package/dist/auth/api-client.js +261 -0
  15. package/dist/auth/index.d.ts +172 -0
  16. package/dist/auth/index.js +545 -0
  17. package/dist/auth/storage.d.ts +52 -0
  18. package/dist/auth/storage.js +118 -0
  19. package/dist/changelog/index.d.ts +16 -0
  20. package/dist/changelog/index.js +24 -0
  21. package/dist/changelog/releases.d.ts +17 -0
  22. package/dist/changelog/releases.js +63 -0
  23. package/dist/commands-v2/handlers/auth.d.ts +10 -0
  24. package/dist/commands-v2/handlers/auth.js +118 -0
  25. package/dist/commands-v2/handlers/background.d.ts +14 -0
  26. package/dist/commands-v2/handlers/background.js +276 -0
  27. package/dist/commands-v2/handlers/context.js +286 -81
  28. package/dist/commands-v2/handlers/core.d.ts +1 -0
  29. package/dist/commands-v2/handlers/core.js +133 -8
  30. package/dist/commands-v2/handlers/debug.js +18 -0
  31. package/dist/commands-v2/handlers/delegations.d.ts +8 -0
  32. package/dist/commands-v2/handlers/delegations.js +29 -0
  33. package/dist/commands-v2/handlers/files.d.ts +8 -0
  34. package/dist/commands-v2/handlers/files.js +162 -0
  35. package/dist/commands-v2/handlers/filter.d.ts +9 -0
  36. package/dist/commands-v2/handlers/filter.js +130 -0
  37. package/dist/commands-v2/handlers/games.d.ts +7 -0
  38. package/dist/commands-v2/handlers/games.js +57 -0
  39. package/dist/commands-v2/handlers/index.d.ts +13 -0
  40. package/dist/commands-v2/handlers/index.js +39 -0
  41. package/dist/commands-v2/handlers/mcp.d.ts +8 -0
  42. package/dist/commands-v2/handlers/mcp.js +39 -0
  43. package/dist/commands-v2/handlers/notifications.d.ts +9 -0
  44. package/dist/commands-v2/handlers/notifications.js +34 -0
  45. package/dist/commands-v2/handlers/project.js +295 -31
  46. package/dist/commands-v2/handlers/reset.d.ts +11 -0
  47. package/dist/commands-v2/handlers/reset.js +118 -0
  48. package/dist/commands-v2/handlers/session.d.ts +161 -0
  49. package/dist/commands-v2/handlers/session.js +805 -0
  50. package/dist/commands-v2/handlers/settings.d.ts +2 -0
  51. package/dist/commands-v2/handlers/settings.js +217 -35
  52. package/dist/commands-v2/handlers/tasks.d.ts +5 -0
  53. package/dist/commands-v2/handlers/tasks.js +36 -0
  54. package/dist/commands-v2/handlers/team.d.ts +9 -0
  55. package/dist/commands-v2/handlers/team.js +549 -0
  56. package/dist/commands-v2/handlers/terminals.d.ts +9 -0
  57. package/dist/commands-v2/handlers/terminals.js +34 -0
  58. package/dist/commands-v2/index.d.ts +3 -2
  59. package/dist/commands-v2/index.js +4 -1
  60. package/dist/commands-v2/registry.d.ts +15 -0
  61. package/dist/commands-v2/registry.js +34 -0
  62. package/dist/commands-v2/types.d.ts +81 -3
  63. package/dist/commands.js +13 -0
  64. package/dist/compilr-diff-companion.vsix +0 -0
  65. package/dist/db/index.js +98 -4
  66. package/dist/db/repositories/document-repository.d.ts +2 -0
  67. package/dist/db/repositories/document-repository.js +6 -1
  68. package/dist/db/repositories/index.d.ts +2 -0
  69. package/dist/db/repositories/index.js +1 -0
  70. package/dist/db/repositories/plan-repository.d.ts +101 -0
  71. package/dist/db/repositories/plan-repository.js +275 -0
  72. package/dist/db/repositories/project-repository.d.ts +6 -0
  73. package/dist/db/repositories/project-repository.js +41 -0
  74. package/dist/db/repositories/work-item-repository.d.ts +15 -0
  75. package/dist/db/repositories/work-item-repository.js +69 -4
  76. package/dist/db/schema.d.ts +40 -3
  77. package/dist/db/schema.js +66 -3
  78. package/dist/episodes/index.d.ts +20 -0
  79. package/dist/episodes/index.js +27 -0
  80. package/dist/episodes/recorder.d.ts +51 -0
  81. package/dist/episodes/recorder.js +195 -0
  82. package/dist/episodes/significant-work.d.ts +21 -0
  83. package/dist/episodes/significant-work.js +56 -0
  84. package/dist/episodes/store.d.ts +38 -0
  85. package/dist/episodes/store.js +199 -0
  86. package/dist/episodes/types.d.ts +35 -0
  87. package/dist/episodes/types.js +6 -0
  88. package/dist/episodes/work-at-risk.d.ts +12 -0
  89. package/dist/episodes/work-at-risk.js +38 -0
  90. package/dist/episodes/work-summary-anchor.d.ts +23 -0
  91. package/dist/episodes/work-summary-anchor.js +73 -0
  92. package/dist/games/coins.d.ts +66 -0
  93. package/dist/games/coins.js +165 -0
  94. package/dist/games/game-base.d.ts +84 -0
  95. package/dist/games/game-base.js +204 -0
  96. package/dist/games/index.d.ts +16 -0
  97. package/dist/games/index.js +49 -0
  98. package/dist/games/scores.d.ts +69 -0
  99. package/dist/games/scores.js +191 -0
  100. package/dist/games/tetris/board.d.ts +59 -0
  101. package/dist/games/tetris/board.js +170 -0
  102. package/dist/games/tetris/index.d.ts +109 -0
  103. package/dist/games/tetris/index.js +610 -0
  104. package/dist/games/tetris/pieces.d.ts +44 -0
  105. package/dist/games/tetris/pieces.js +271 -0
  106. package/dist/games/tetris/renderer.d.ts +26 -0
  107. package/dist/games/tetris/renderer.js +77 -0
  108. package/dist/guide/guide-content.d.ts +23 -0
  109. package/dist/guide/guide-content.js +196 -0
  110. package/dist/guide/index.d.ts +8 -0
  111. package/dist/guide/index.js +7 -0
  112. package/dist/guide/shared-content.d.ts +37 -0
  113. package/dist/guide/shared-content.js +1272 -0
  114. package/dist/guide/tutorial-helpers.d.ts +57 -0
  115. package/dist/guide/tutorial-helpers.js +147 -0
  116. package/dist/handlers/ask-user-handlers.d.ts +32 -0
  117. package/dist/handlers/ask-user-handlers.js +104 -0
  118. package/dist/handlers/delegation-handlers.d.ts +34 -0
  119. package/dist/handlers/delegation-handlers.js +291 -0
  120. package/dist/handlers/permission-handler.d.ts +30 -0
  121. package/dist/handlers/permission-handler.js +205 -0
  122. package/dist/index.d.ts +11 -1
  123. package/dist/index.js +448 -271
  124. package/dist/input-handlers/memory-handler.d.ts +1 -1
  125. package/dist/input-handlers/memory-handler.js +2 -1
  126. package/dist/models/index.d.ts +10 -0
  127. package/dist/models/index.js +12 -0
  128. package/dist/models/model-registry.d.ts +38 -0
  129. package/dist/models/model-registry.js +69 -0
  130. package/dist/models/model-tiers.d.ts +28 -0
  131. package/dist/models/model-tiers.js +71 -0
  132. package/dist/models/model-validation.d.ts +25 -0
  133. package/dist/models/model-validation.js +291 -0
  134. package/dist/models/ollama-models.d.ts +73 -0
  135. package/dist/models/ollama-models.js +178 -0
  136. package/dist/models/provider-types.d.ts +6 -0
  137. package/dist/models/provider-types.js +1 -0
  138. package/dist/models/providers.d.ts +35 -0
  139. package/dist/models/providers.js +58 -0
  140. package/dist/models/types.d.ts +4 -0
  141. package/dist/models/types.js +4 -0
  142. package/dist/multi-agent/activity.d.ts +21 -0
  143. package/dist/multi-agent/activity.js +34 -0
  144. package/dist/multi-agent/agent-selection.d.ts +55 -0
  145. package/dist/multi-agent/agent-selection.js +90 -0
  146. package/dist/multi-agent/artifacts.d.ts +197 -0
  147. package/dist/multi-agent/artifacts.js +379 -0
  148. package/dist/multi-agent/checkpointer.d.ts +138 -0
  149. package/dist/multi-agent/checkpointer.js +471 -0
  150. package/dist/multi-agent/collision-utils.d.ts +16 -0
  151. package/dist/multi-agent/collision-utils.js +28 -0
  152. package/dist/multi-agent/context-resolver.d.ts +97 -0
  153. package/dist/multi-agent/context-resolver.js +316 -0
  154. package/dist/multi-agent/custom-agents.d.ts +83 -0
  155. package/dist/multi-agent/custom-agents.js +227 -0
  156. package/dist/multi-agent/delegation-tracker.d.ts +157 -0
  157. package/dist/multi-agent/delegation-tracker.js +243 -0
  158. package/dist/multi-agent/file-lock-hook.d.ts +29 -0
  159. package/dist/multi-agent/file-lock-hook.js +97 -0
  160. package/dist/multi-agent/file-locks.d.ts +58 -0
  161. package/dist/multi-agent/file-locks.js +194 -0
  162. package/dist/multi-agent/index.d.ts +24 -0
  163. package/dist/multi-agent/index.js +30 -0
  164. package/dist/multi-agent/mention-parser.d.ts +64 -0
  165. package/dist/multi-agent/mention-parser.js +146 -0
  166. package/dist/multi-agent/notification-manager.d.ts +84 -0
  167. package/dist/multi-agent/notification-manager.js +224 -0
  168. package/dist/multi-agent/pending-requests.d.ts +122 -0
  169. package/dist/multi-agent/pending-requests.js +155 -0
  170. package/dist/multi-agent/session-registry.d.ts +139 -0
  171. package/dist/multi-agent/session-registry.js +514 -0
  172. package/dist/multi-agent/shared-context.d.ts +293 -0
  173. package/dist/multi-agent/shared-context.js +671 -0
  174. package/dist/multi-agent/skill-requirements.d.ts +66 -0
  175. package/dist/multi-agent/skill-requirements.js +178 -0
  176. package/dist/multi-agent/task-assignment.d.ts +69 -0
  177. package/dist/multi-agent/task-assignment.js +123 -0
  178. package/dist/multi-agent/task-suggestion.d.ts +31 -0
  179. package/dist/multi-agent/task-suggestion.js +72 -0
  180. package/dist/multi-agent/team-agent.d.ts +201 -0
  181. package/dist/multi-agent/team-agent.js +488 -0
  182. package/dist/multi-agent/team.d.ts +286 -0
  183. package/dist/multi-agent/team.js +610 -0
  184. package/dist/multi-agent/tool-config.d.ts +110 -0
  185. package/dist/multi-agent/tool-config.js +661 -0
  186. package/dist/multi-agent/types.d.ts +211 -0
  187. package/dist/multi-agent/types.js +617 -0
  188. package/dist/prompts/plan-mode-prompt.d.ts +11 -0
  189. package/dist/prompts/plan-mode-prompt.js +95 -0
  190. package/dist/repl-helpers.js +5 -2
  191. package/dist/repl-v2.d.ts +401 -2
  192. package/dist/repl-v2.js +2588 -65
  193. package/dist/session/index.d.ts +6 -0
  194. package/dist/session/index.js +6 -0
  195. package/dist/session/project-session-manager.d.ts +158 -0
  196. package/dist/session/project-session-manager.js +650 -0
  197. package/dist/settings/index.d.ts +133 -13
  198. package/dist/settings/index.js +329 -24
  199. package/dist/settings/mcp-config.d.ts +76 -0
  200. package/dist/settings/mcp-config.js +143 -0
  201. package/dist/settings/paths.d.ts +4 -0
  202. package/dist/settings/paths.js +6 -0
  203. package/dist/shared-handlers.d.ts +62 -0
  204. package/dist/shared-handlers.js +48 -0
  205. package/dist/system-prompt/builder.d.ts +5 -0
  206. package/dist/system-prompt/builder.js +4 -0
  207. package/dist/system-prompt/index.d.ts +18 -0
  208. package/dist/system-prompt/index.js +18 -0
  209. package/dist/system-prompt/modules.d.ts +5 -0
  210. package/dist/system-prompt/modules.js +4 -0
  211. package/dist/tabbed-menu.js +2 -1
  212. package/dist/templates/compilr-md-import.d.ts +16 -0
  213. package/dist/templates/compilr-md-import.js +241 -0
  214. package/dist/templates/compilr-md.js +10 -61
  215. package/dist/templates/config-json.d.ts +1 -25
  216. package/dist/templates/index.d.ts +2 -0
  217. package/dist/templates/index.js +34 -73
  218. package/dist/tool-names.d.ts +113 -0
  219. package/dist/tool-names.js +239 -0
  220. package/dist/tools/ask-user-simple.d.ts +1 -1
  221. package/dist/tools/ask-user-simple.js +2 -1
  222. package/dist/tools/ask-user.d.ts +1 -1
  223. package/dist/tools/ask-user.js +2 -1
  224. package/dist/tools/backlog.d.ts +2 -2
  225. package/dist/tools/backlog.js +1 -1
  226. package/dist/tools/db-tools.d.ts +13 -61
  227. package/dist/tools/db-tools.js +12 -13
  228. package/dist/tools/delegate-background.d.ts +27 -0
  229. package/dist/tools/delegate-background.js +115 -0
  230. package/dist/tools/delegate.d.ts +22 -0
  231. package/dist/tools/delegate.js +97 -0
  232. package/dist/tools/delegation-status.d.ts +16 -0
  233. package/dist/tools/delegation-status.js +128 -0
  234. package/dist/tools/guide-tool.d.ts +12 -0
  235. package/dist/tools/guide-tool.js +59 -0
  236. package/dist/tools/handoff.d.ts +25 -0
  237. package/dist/tools/handoff.js +99 -0
  238. package/dist/tools/meta-tools.d.ts +26 -0
  239. package/dist/tools/meta-tools.js +47 -0
  240. package/dist/tools/platform-adapter.d.ts +35 -0
  241. package/dist/tools/platform-adapter.js +404 -0
  242. package/dist/tools/project-db.d.ts +5 -73
  243. package/dist/tools/project-db.js +5 -336
  244. package/dist/tools.d.ts +67 -2
  245. package/dist/tools.js +240 -48
  246. package/dist/ui/autocomplete-controller.d.ts +42 -0
  247. package/dist/ui/autocomplete-controller.js +384 -0
  248. package/dist/ui/base/index.d.ts +1 -1
  249. package/dist/ui/base/index.js +1 -1
  250. package/dist/ui/base/overlay-base-v2.d.ts +10 -0
  251. package/dist/ui/base/overlay-base-v2.js +14 -0
  252. package/dist/ui/base/render-utils.d.ts +19 -0
  253. package/dist/ui/base/render-utils.js +25 -0
  254. package/dist/ui/base/tabbed-list-overlay-v2.d.ts +16 -1
  255. package/dist/ui/base/tabbed-list-overlay-v2.js +19 -1
  256. package/dist/ui/constants/labels.d.ts +14 -0
  257. package/dist/ui/constants/labels.js +52 -0
  258. package/dist/ui/conversation-store.d.ts +55 -0
  259. package/dist/ui/conversation-store.js +107 -0
  260. package/dist/ui/conversation.js +11 -13
  261. package/dist/ui/diff.d.ts +7 -1
  262. package/dist/ui/diff.js +85 -48
  263. package/dist/ui/ephemeral.js +3 -9
  264. package/dist/ui/file-autocomplete.d.ts +24 -0
  265. package/dist/ui/file-autocomplete.js +56 -0
  266. package/dist/ui/footer-renderer.d.ts +69 -0
  267. package/dist/ui/footer-renderer.js +431 -0
  268. package/dist/ui/footer.d.ts +74 -7
  269. package/dist/ui/footer.js +173 -16
  270. package/dist/ui/input-controller.d.ts +51 -0
  271. package/dist/ui/input-controller.js +176 -0
  272. package/dist/ui/input-prompt.d.ts +19 -0
  273. package/dist/ui/input-prompt.js +206 -14
  274. package/dist/ui/keyboard-handler.d.ts +57 -0
  275. package/dist/ui/keyboard-handler.js +557 -0
  276. package/dist/ui/live-region-facade.d.ts +42 -0
  277. package/dist/ui/live-region-facade.js +205 -0
  278. package/dist/ui/live-region.d.ts +0 -4
  279. package/dist/ui/live-region.js +6 -14
  280. package/dist/ui/mascot/renderer.d.ts +1 -1
  281. package/dist/ui/mascot/renderer.js +37 -2
  282. package/dist/ui/overlay/data/tutorial-content.d.ts +9 -0
  283. package/dist/ui/overlay/data/tutorial-content.js +9 -0
  284. package/dist/ui/overlay/data/tutorial-registry.d.ts +12 -0
  285. package/dist/ui/overlay/data/tutorial-registry.js +116 -0
  286. package/dist/ui/overlay/data/tutorial-types.d.ts +35 -0
  287. package/dist/ui/overlay/data/tutorial-types.js +6 -0
  288. package/dist/ui/overlay/data/tutorials/basics/first-conversation.d.ts +7 -0
  289. package/dist/ui/overlay/data/tutorials/basics/first-conversation.js +220 -0
  290. package/dist/ui/overlay/data/tutorials/basics/first-project.d.ts +7 -0
  291. package/dist/ui/overlay/data/tutorials/basics/first-project.js +284 -0
  292. package/dist/ui/overlay/data/tutorials/basics/navigation.d.ts +8 -0
  293. package/dist/ui/overlay/data/tutorials/basics/navigation.js +22 -0
  294. package/dist/ui/overlay/data/tutorials/basics/welcome.d.ts +7 -0
  295. package/dist/ui/overlay/data/tutorials/basics/welcome.js +174 -0
  296. package/dist/ui/overlay/data/tutorials/config/context-management.d.ts +7 -0
  297. package/dist/ui/overlay/data/tutorials/config/context-management.js +158 -0
  298. package/dist/ui/overlay/data/tutorials/config/mcp-servers.d.ts +8 -0
  299. package/dist/ui/overlay/data/tutorials/config/mcp-servers.js +155 -0
  300. package/dist/ui/overlay/data/tutorials/config/model-selection.d.ts +7 -0
  301. package/dist/ui/overlay/data/tutorials/config/model-selection.js +162 -0
  302. package/dist/ui/overlay/data/tutorials/config/permissions-safety.d.ts +7 -0
  303. package/dist/ui/overlay/data/tutorials/config/permissions-safety.js +163 -0
  304. package/dist/ui/overlay/data/tutorials/config/settings-config.d.ts +7 -0
  305. package/dist/ui/overlay/data/tutorials/config/settings-config.js +166 -0
  306. package/dist/ui/overlay/data/tutorials/planning/arch.d.ts +7 -0
  307. package/dist/ui/overlay/data/tutorials/planning/arch.js +168 -0
  308. package/dist/ui/overlay/data/tutorials/planning/backlog.d.ts +7 -0
  309. package/dist/ui/overlay/data/tutorials/planning/backlog.js +103 -0
  310. package/dist/ui/overlay/data/tutorials/planning/build.d.ts +7 -0
  311. package/dist/ui/overlay/data/tutorials/planning/build.js +173 -0
  312. package/dist/ui/overlay/data/tutorials/planning/design.d.ts +7 -0
  313. package/dist/ui/overlay/data/tutorials/planning/design.js +205 -0
  314. package/dist/ui/overlay/data/tutorials/planning/docs.d.ts +7 -0
  315. package/dist/ui/overlay/data/tutorials/planning/docs.js +143 -0
  316. package/dist/ui/overlay/data/tutorials/planning/prd.d.ts +7 -0
  317. package/dist/ui/overlay/data/tutorials/planning/prd.js +173 -0
  318. package/dist/ui/overlay/data/tutorials/planning/scaffold.d.ts +7 -0
  319. package/dist/ui/overlay/data/tutorials/planning/scaffold.js +164 -0
  320. package/dist/ui/overlay/data/tutorials/planning/sketch.d.ts +7 -0
  321. package/dist/ui/overlay/data/tutorials/planning/sketch.js +58 -0
  322. package/dist/ui/overlay/data/tutorials/projects/anchors.d.ts +7 -0
  323. package/dist/ui/overlay/data/tutorials/projects/anchors.js +248 -0
  324. package/dist/ui/overlay/data/tutorials/projects/import-project.d.ts +7 -0
  325. package/dist/ui/overlay/data/tutorials/projects/import-project.js +172 -0
  326. package/dist/ui/overlay/data/tutorials/projects/managing-projects.d.ts +8 -0
  327. package/dist/ui/overlay/data/tutorials/projects/managing-projects.js +212 -0
  328. package/dist/ui/overlay/data/tutorials/projects/new-project.d.ts +7 -0
  329. package/dist/ui/overlay/data/tutorials/projects/new-project.js +251 -0
  330. package/dist/ui/overlay/data/tutorials/projects/session-management.d.ts +7 -0
  331. package/dist/ui/overlay/data/tutorials/projects/session-management.js +169 -0
  332. package/dist/ui/overlay/data/tutorials/teams/background-execution.d.ts +7 -0
  333. package/dist/ui/overlay/data/tutorials/teams/background-execution.js +171 -0
  334. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.d.ts +8 -0
  335. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.js +147 -0
  336. package/dist/ui/overlay/data/tutorials/teams/task-assignment.d.ts +7 -0
  337. package/dist/ui/overlay/data/tutorials/teams/task-assignment.js +204 -0
  338. package/dist/ui/overlay/data/tutorials/teams/team-overview.d.ts +7 -0
  339. package/dist/ui/overlay/data/tutorials/teams/team-overview.js +165 -0
  340. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.d.ts +7 -0
  341. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.js +172 -0
  342. package/dist/ui/overlay/impl/agents-overlay-v2.js +6 -17
  343. package/dist/ui/overlay/impl/anchors-overlay-v2.js +30 -64
  344. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.d.ts +43 -0
  345. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.js +232 -0
  346. package/dist/ui/overlay/impl/artifact-overlay-v2.d.ts +40 -0
  347. package/dist/ui/overlay/impl/artifact-overlay-v2.js +115 -0
  348. package/dist/ui/overlay/impl/ask-user-overlay-v2.js +2 -5
  349. package/dist/ui/overlay/impl/background-overlay-v2.d.ts +40 -0
  350. package/dist/ui/overlay/impl/background-overlay-v2.js +147 -0
  351. package/dist/ui/overlay/impl/backlog-overlay-v2.d.ts +4 -1
  352. package/dist/ui/overlay/impl/backlog-overlay-v2.js +55 -16
  353. package/dist/ui/overlay/impl/changelog-overlay-v2.d.ts +44 -0
  354. package/dist/ui/overlay/impl/changelog-overlay-v2.js +165 -0
  355. package/dist/ui/overlay/impl/commands-overlay-v2.js +4 -6
  356. package/dist/ui/overlay/impl/config-overlay-v2.d.ts +12 -1
  357. package/dist/ui/overlay/impl/config-overlay-v2.js +164 -100
  358. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.d.ts +83 -0
  359. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.js +711 -0
  360. package/dist/ui/overlay/impl/dashboard-overlay-v2.d.ts +2 -0
  361. package/dist/ui/overlay/impl/dashboard-overlay-v2.js +26 -3
  362. package/dist/ui/overlay/impl/delegations-overlay-v2.d.ts +28 -0
  363. package/dist/ui/overlay/impl/delegations-overlay-v2.js +279 -0
  364. package/dist/ui/overlay/impl/docs-overlay-v2.js +12 -9
  365. package/dist/ui/overlay/impl/document-detail-overlay-v2.d.ts +7 -0
  366. package/dist/ui/overlay/impl/document-detail-overlay-v2.js +119 -78
  367. package/dist/ui/overlay/impl/filter-overlay-v2.d.ts +41 -0
  368. package/dist/ui/overlay/impl/filter-overlay-v2.js +110 -0
  369. package/dist/ui/overlay/impl/games-overlay-v2.d.ts +31 -0
  370. package/dist/ui/overlay/impl/games-overlay-v2.js +135 -0
  371. package/dist/ui/overlay/impl/help-overlay-v2.d.ts +26 -3
  372. package/dist/ui/overlay/impl/help-overlay-v2.js +20 -42
  373. package/dist/ui/overlay/impl/login-overlay-v2.d.ts +49 -0
  374. package/dist/ui/overlay/impl/login-overlay-v2.js +277 -0
  375. package/dist/ui/overlay/impl/mcp-overlay-v2.d.ts +63 -0
  376. package/dist/ui/overlay/impl/mcp-overlay-v2.js +907 -0
  377. package/dist/ui/overlay/impl/model-overlay-v2.d.ts +57 -13
  378. package/dist/ui/overlay/impl/model-overlay-v2.js +1086 -61
  379. package/dist/ui/overlay/impl/new-overlay-v2.d.ts +37 -6
  380. package/dist/ui/overlay/impl/new-overlay-v2.js +715 -65
  381. package/dist/ui/overlay/impl/notifications-overlay-v2.d.ts +20 -0
  382. package/dist/ui/overlay/impl/notifications-overlay-v2.js +116 -0
  383. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.d.ts +76 -0
  384. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.js +728 -0
  385. package/dist/ui/overlay/impl/pending-overlay-v2.d.ts +51 -0
  386. package/dist/ui/overlay/impl/pending-overlay-v2.js +445 -0
  387. package/dist/ui/overlay/impl/permission-overlay-v2.js +5 -5
  388. package/dist/ui/overlay/impl/permissions-overlay-v2.d.ts +85 -0
  389. package/dist/ui/overlay/impl/permissions-overlay-v2.js +820 -0
  390. package/dist/ui/overlay/impl/plan-approval-overlay-v2.d.ts +35 -0
  391. package/dist/ui/overlay/impl/plan-approval-overlay-v2.js +181 -0
  392. package/dist/ui/overlay/impl/project-edit-overlay-v2.d.ts +36 -0
  393. package/dist/ui/overlay/impl/project-edit-overlay-v2.js +195 -0
  394. package/dist/ui/overlay/impl/projects-overlay-v2.d.ts +1 -0
  395. package/dist/ui/overlay/impl/projects-overlay-v2.js +278 -44
  396. package/dist/ui/overlay/impl/reset-overlay-v2.d.ts +39 -0
  397. package/dist/ui/overlay/impl/reset-overlay-v2.js +107 -0
  398. package/dist/ui/overlay/impl/resume-overlay-v2.d.ts +60 -0
  399. package/dist/ui/overlay/impl/resume-overlay-v2.js +414 -0
  400. package/dist/ui/overlay/impl/session-mode-overlay-v2.d.ts +43 -0
  401. package/dist/ui/overlay/impl/session-mode-overlay-v2.js +124 -0
  402. package/dist/ui/overlay/impl/tasks-overlay-v2.d.ts +28 -0
  403. package/dist/ui/overlay/impl/tasks-overlay-v2.js +283 -0
  404. package/dist/ui/overlay/impl/team-overlay-v2.d.ts +86 -0
  405. package/dist/ui/overlay/impl/team-overlay-v2.js +692 -0
  406. package/dist/ui/overlay/impl/terminals-overlay-v2.d.ts +26 -0
  407. package/dist/ui/overlay/impl/terminals-overlay-v2.js +217 -0
  408. package/dist/ui/overlay/impl/tools-overlay-v2.js +3 -7
  409. package/dist/ui/overlay/impl/tutorial-overlay-v2.d.ts +30 -16
  410. package/dist/ui/overlay/impl/tutorial-overlay-v2.js +133 -956
  411. package/dist/ui/overlay/impl/workflow-overlay-v2.d.ts +1 -0
  412. package/dist/ui/overlay/impl/workflow-overlay-v2.js +10 -4
  413. package/dist/ui/overlay/index.d.ts +20 -1
  414. package/dist/ui/overlay/index.js +19 -0
  415. package/dist/ui/overlay/types.d.ts +5 -0
  416. package/dist/ui/overlay-manager.d.ts +43 -0
  417. package/dist/ui/overlay-manager.js +238 -0
  418. package/dist/ui/overlays.js +4 -16
  419. package/dist/ui/permission-overlay.js +6 -5
  420. package/dist/ui/status-bar-controller.d.ts +33 -0
  421. package/dist/ui/status-bar-controller.js +99 -0
  422. package/dist/ui/subagent-renderer.js +3 -19
  423. package/dist/ui/terminal-autocomplete-utils.d.ts +23 -0
  424. package/dist/ui/terminal-autocomplete-utils.js +83 -0
  425. package/dist/ui/terminal-line-builders.d.ts +17 -0
  426. package/dist/ui/terminal-line-builders.js +42 -0
  427. package/dist/ui/terminal-render-item.d.ts +16 -0
  428. package/dist/ui/terminal-render-item.js +267 -0
  429. package/dist/ui/terminal-renderer.d.ts +7 -8
  430. package/dist/ui/terminal-renderer.js +7 -8
  431. package/dist/ui/terminal-types.d.ts +179 -0
  432. package/dist/ui/terminal-types.js +34 -0
  433. package/dist/ui/terminal-ui.d.ts +144 -276
  434. package/dist/ui/terminal-ui.js +384 -1861
  435. package/dist/ui/todo-zone.d.ts +19 -1
  436. package/dist/ui/todo-zone.js +71 -13
  437. package/dist/ui/tool-formatters.js +696 -1
  438. package/dist/ui/turn-metrics.d.ts +56 -0
  439. package/dist/ui/turn-metrics.js +75 -0
  440. package/dist/ui/types.d.ts +28 -0
  441. package/dist/ui/types.js +1 -0
  442. package/dist/ui/vscode-diff-ipc.d.ts +102 -0
  443. package/dist/ui/vscode-diff-ipc.js +385 -0
  444. package/dist/utils/credentials.d.ts +24 -5
  445. package/dist/utils/credentials.js +123 -9
  446. package/dist/utils/format-tokens.d.ts +13 -0
  447. package/dist/utils/format-tokens.js +18 -0
  448. package/dist/utils/git-config.d.ts +26 -0
  449. package/dist/utils/git-config.js +54 -0
  450. package/dist/utils/message-utils.d.ts +61 -0
  451. package/dist/utils/message-utils.js +72 -0
  452. package/dist/utils/model-tiers.d.ts +8 -1
  453. package/dist/utils/model-tiers.js +38 -16
  454. package/dist/utils/open-browser.d.ts +5 -0
  455. package/dist/utils/open-browser.js +32 -0
  456. package/dist/utils/path-safety.js +3 -2
  457. package/dist/utils/project-detection.d.ts +58 -0
  458. package/dist/utils/project-detection.js +424 -0
  459. package/dist/utils/project-memory.js +2 -1
  460. package/dist/utils/project-status.d.ts +2 -2
  461. package/dist/utils/startup-perf.d.ts +18 -0
  462. package/dist/utils/startup-perf.js +60 -0
  463. package/dist/utils/token-tracker.d.ts +62 -0
  464. package/dist/utils/token-tracker.js +150 -0
  465. package/dist/utils/token-types.d.ts +23 -0
  466. package/dist/utils/token-types.js +18 -0
  467. package/dist/utils/types/config-types.d.ts +32 -0
  468. package/dist/utils/types/config-types.js +8 -0
  469. package/dist/utils/update-checker.d.ts +28 -0
  470. package/dist/utils/update-checker.js +106 -0
  471. package/dist/utils/version.d.ts +7 -0
  472. package/dist/utils/version.js +10 -0
  473. package/dist/utils/vscode-detect.d.ts +39 -0
  474. package/dist/utils/vscode-detect.js +137 -0
  475. package/package.json +27 -13
  476. package/dist/commands/handler-types.d.ts +0 -68
  477. package/dist/commands/handler-types.js +0 -8
  478. package/dist/commands/handlers/agent-commands.d.ts +0 -13
  479. package/dist/commands/handlers/agent-commands.js +0 -305
  480. package/dist/commands/handlers/design-commands.d.ts +0 -15
  481. package/dist/commands/handlers/design-commands.js +0 -334
  482. package/dist/commands/handlers/index.d.ts +0 -20
  483. package/dist/commands/handlers/index.js +0 -43
  484. package/dist/commands/handlers/overlay-commands.d.ts +0 -21
  485. package/dist/commands/handlers/overlay-commands.js +0 -287
  486. package/dist/commands/handlers/project-commands.d.ts +0 -11
  487. package/dist/commands/handlers/project-commands.js +0 -167
  488. package/dist/commands/handlers/simple-commands.d.ts +0 -19
  489. package/dist/commands/handlers/simple-commands.js +0 -144
  490. package/dist/commands/registry.d.ts +0 -50
  491. package/dist/commands/registry.js +0 -75
  492. package/dist/index.old.d.ts +0 -7
  493. package/dist/index.old.js +0 -1014
  494. package/dist/repl.d.ts +0 -149
  495. package/dist/repl.js +0 -1151
  496. package/dist/templates/claude-md.d.ts +0 -7
  497. package/dist/templates/claude-md.js +0 -189
  498. package/dist/test-autocomplete.d.ts +0 -7
  499. package/dist/test-autocomplete.js +0 -85
  500. package/dist/test-tabbed-menu.d.ts +0 -7
  501. package/dist/test-tabbed-menu.js +0 -25
  502. package/dist/tool-selector.d.ts +0 -71
  503. package/dist/tool-selector.js +0 -184
  504. package/dist/tools/anchor-tools.d.ts +0 -31
  505. package/dist/tools/anchor-tools.js +0 -255
  506. package/dist/tools/backlog-wrappers.d.ts +0 -54
  507. package/dist/tools/backlog-wrappers.js +0 -338
  508. package/dist/tools/document-db.d.ts +0 -43
  509. package/dist/tools/document-db.js +0 -220
  510. package/dist/tools/workitem-db.d.ts +0 -103
  511. package/dist/tools/workitem-db.js +0 -549
  512. package/dist/ui/agents-overlay-v2.d.ts +0 -43
  513. package/dist/ui/agents-overlay-v2.js +0 -809
  514. package/dist/ui/agents-overlay.d.ts +0 -12
  515. package/dist/ui/agents-overlay.js +0 -863
  516. package/dist/ui/anchors-overlay.d.ts +0 -12
  517. package/dist/ui/anchors-overlay.js +0 -775
  518. package/dist/ui/arch-type-overlay.d.ts +0 -15
  519. package/dist/ui/arch-type-overlay.js +0 -201
  520. package/dist/ui/ask-user-overlay-v2.d.ts +0 -26
  521. package/dist/ui/ask-user-overlay-v2.js +0 -555
  522. package/dist/ui/ask-user-simple-overlay-v2.d.ts +0 -25
  523. package/dist/ui/ask-user-simple-overlay-v2.js +0 -215
  524. package/dist/ui/backlog-overlay.d.ts +0 -32
  525. package/dist/ui/backlog-overlay.js +0 -652
  526. package/dist/ui/commands-overlay-v2.d.ts +0 -33
  527. package/dist/ui/commands-overlay-v2.js +0 -441
  528. package/dist/ui/commands-overlay.d.ts +0 -16
  529. package/dist/ui/commands-overlay.js +0 -439
  530. package/dist/ui/config-overlay.d.ts +0 -35
  531. package/dist/ui/config-overlay.js +0 -707
  532. package/dist/ui/docs-overlay.d.ts +0 -17
  533. package/dist/ui/docs-overlay.js +0 -303
  534. package/dist/ui/footer-v2.d.ts +0 -222
  535. package/dist/ui/footer-v2.js +0 -1349
  536. package/dist/ui/help-overlay-v2.d.ts +0 -34
  537. package/dist/ui/help-overlay-v2.js +0 -309
  538. package/dist/ui/help-overlay.d.ts +0 -16
  539. package/dist/ui/help-overlay.js +0 -316
  540. package/dist/ui/init-overlay-v2.d.ts +0 -34
  541. package/dist/ui/init-overlay-v2.js +0 -600
  542. package/dist/ui/init-overlay.d.ts +0 -34
  543. package/dist/ui/init-overlay.js +0 -604
  544. package/dist/ui/input-prompt-v2.d.ts +0 -180
  545. package/dist/ui/input-prompt-v2.js +0 -999
  546. package/dist/ui/iteration-limit-overlay-v2.d.ts +0 -21
  547. package/dist/ui/iteration-limit-overlay-v2.js +0 -114
  548. package/dist/ui/keys-overlay-v2.d.ts +0 -41
  549. package/dist/ui/keys-overlay-v2.js +0 -248
  550. package/dist/ui/mascot-overlay-v2.d.ts +0 -41
  551. package/dist/ui/mascot-overlay-v2.js +0 -138
  552. package/dist/ui/mascot-overlay.d.ts +0 -21
  553. package/dist/ui/mascot-overlay.js +0 -146
  554. package/dist/ui/model-overlay-v2.d.ts +0 -49
  555. package/dist/ui/model-overlay-v2.js +0 -118
  556. package/dist/ui/model-overlay.d.ts +0 -27
  557. package/dist/ui/model-overlay.js +0 -221
  558. package/dist/ui/model-warning-overlay.d.ts +0 -30
  559. package/dist/ui/model-warning-overlay.js +0 -169
  560. package/dist/ui/new-overlay.d.ts +0 -34
  561. package/dist/ui/new-overlay.js +0 -604
  562. package/dist/ui/overlay/impl/init-overlay-v2.d.ts +0 -77
  563. package/dist/ui/overlay/impl/init-overlay-v2.js +0 -593
  564. package/dist/ui/overlay/overlay-types.d.ts +0 -128
  565. package/dist/ui/overlay/overlay-types.js +0 -22
  566. package/dist/ui/overlays/help-overlay-v2.d.ts +0 -28
  567. package/dist/ui/overlays/help-overlay-v2.js +0 -198
  568. package/dist/ui/overlays/index.d.ts +0 -11
  569. package/dist/ui/overlays/index.js +0 -11
  570. package/dist/ui/permission-overlay-v2.d.ts +0 -36
  571. package/dist/ui/permission-overlay-v2.js +0 -380
  572. package/dist/ui/projects-overlay.d.ts +0 -19
  573. package/dist/ui/projects-overlay.js +0 -484
  574. package/dist/ui/theme-overlay-v2.d.ts +0 -42
  575. package/dist/ui/theme-overlay-v2.js +0 -135
  576. package/dist/ui/theme-overlay.d.ts +0 -24
  577. package/dist/ui/theme-overlay.js +0 -127
  578. package/dist/ui/tools-overlay-v2.d.ts +0 -47
  579. package/dist/ui/tools-overlay-v2.js +0 -218
  580. package/dist/ui/tools-overlay.d.ts +0 -34
  581. package/dist/ui/tools-overlay.js +0 -230
  582. package/dist/ui/tutorial-overlay-v2.d.ts +0 -31
  583. package/dist/ui/tutorial-overlay-v2.js +0 -1035
  584. package/dist/ui/tutorial-overlay.d.ts +0 -11
  585. package/dist/ui/tutorial-overlay.js +0 -1034
  586. package/dist/ui/workflow-overlay.d.ts +0 -22
  587. package/dist/ui/workflow-overlay.js +0 -636
@@ -65,10 +65,12 @@ setupAlternateScreenCleanup();
65
65
  import { marked } from 'marked';
66
66
  import { markedTerminal } from 'marked-terminal';
67
67
  import { BaseOverlayV2 } from '../../base/overlay-base-v2.js';
68
- import { renderBorder, isCtrlC, isClose } from '../../base/index.js';
68
+ import { renderBorder, isCtrlC, isClose, isNavigateUp, isNavigateDown, isUpArrow, isDownArrow, isLeftArrow, isRightArrow, isHome, isEnd, isPageUp, isPageDown, isSpace, isBackspace, isDelete, isEnter, isTab, isEscape, isE, getPrintableChar, } from '../../base/index.js';
69
69
  import { documentRepository } from '../../../db/repositories/document-repository.js';
70
+ import { planRepository } from '../../../db/repositories/plan-repository.js';
70
71
  import { getCurrentTheme } from '../../../themes/index.js';
71
72
  import * as terminal from '../../terminal.js';
73
+ import { DOC_TYPE_LABELS, PLAN_STATUS_LABELS, PLAN_STATUS_COLORS } from '../../constants/labels.js';
72
74
  // =============================================================================
73
75
  // Register Additional Languages for Syntax Highlighting
74
76
  // =============================================================================
@@ -168,11 +170,14 @@ hljs.registerAliases('graphviz', { languageName: 'dot' });
168
170
  // =============================================================================
169
171
  // Constants
170
172
  // =============================================================================
171
- const DOC_TYPE_LABELS = {
172
- 'prd': 'PRD',
173
- 'architecture': 'ARCH',
174
- 'design': 'DESIGN',
175
- 'notes': 'NOTES',
173
+ // DOC_TYPE_LABELS, PLAN_STATUS_LABELS, PLAN_STATUS_COLORS imported from '../../constants/labels.js'
174
+ // Valid status transitions
175
+ const VALID_TRANSITIONS = {
176
+ draft: ['approved', 'abandoned'],
177
+ approved: ['in_progress', 'abandoned'],
178
+ in_progress: ['completed', 'abandoned'],
179
+ completed: [],
180
+ abandoned: ['draft'],
176
181
  };
177
182
  const TAB_SIZE = 2;
178
183
  // =============================================================================
@@ -401,74 +406,16 @@ function highlightInlineMarkdown(text, theme) {
401
406
  return result;
402
407
  }
403
408
  // =============================================================================
404
- // Key Detection Helpers
409
+ // Key Detection Helpers (local functions not in ui-core)
405
410
  // =============================================================================
406
- function isNavigateUp(data) {
407
- const str = data.toString();
408
- return str === '\x1b[A' || str === 'k';
409
- }
410
- function isNavigateDown(data) {
411
- const str = data.toString();
412
- return str === '\x1b[B' || str === 'j';
413
- }
414
- function isArrowUp(data) {
415
- return data.toString() === '\x1b[A';
416
- }
417
- function isArrowDown(data) {
418
- return data.toString() === '\x1b[B';
419
- }
420
- function isArrowLeft(data) {
421
- return data.toString() === '\x1b[D';
422
- }
423
- function isArrowRight(data) {
424
- return data.toString() === '\x1b[C';
425
- }
426
- function isHome(data) {
427
- const str = data.toString();
428
- return str === '\x1b[H' || str === '\x1b[1~';
429
- }
430
- function isEnd(data) {
431
- const str = data.toString();
432
- return str === '\x1b[F' || str === '\x1b[4~';
433
- }
434
- function isPageUp(data) {
435
- return data.toString() === '\x1b[5~';
436
- }
437
- function isPageDown(data) {
438
- return data.toString() === '\x1b[6~';
439
- }
440
- function isSpace(data) {
441
- return data.length === 1 && data[0] === 0x20;
442
- }
443
- function isBackspace(data) {
444
- return data.length === 1 && (data[0] === 0x7f || data[0] === 0x08);
445
- }
446
- function isDelete(data) {
447
- return data.toString() === '\x1b[3~';
448
- }
449
- function isEnter(data) {
450
- return data.length === 1 && (data[0] === 0x0d || data[0] === 0x0a);
451
- }
452
- function isTab(data) {
453
- return data.length === 1 && data[0] === 0x09;
454
- }
411
+ // Most key detection functions are imported from '../../base/index.js'.
412
+ // Only custom/specialized ones are defined locally here.
455
413
  function isCtrlS(data) {
456
414
  return data.length === 1 && data[0] === 0x13;
457
415
  }
458
- function isEscape(data) {
459
- return data.length === 1 && data[0] === 0x1b;
460
- }
461
416
  function isEditKey(data) {
462
- const char = data.length === 1 && data[0] >= 0x20 && data[0] < 0x7f
463
- ? String.fromCharCode(data[0])
464
- : null;
465
- return char === 'e' || char === 'i';
466
- }
467
- function isPrintableChar(data) {
468
- if (data.length === 1 && data[0] >= 0x20 && data[0] < 0x7f) {
469
- return String.fromCharCode(data[0]);
470
- }
471
- return null;
417
+ // Check if 'e' or 'i' key is pressed (to enter edit mode)
418
+ return isE(data) || (data.length === 1 && data[0] === 0x69); // 'i' = 0x69
472
419
  }
473
420
  // =============================================================================
474
421
  // Document Detail Overlay V2
@@ -490,6 +437,10 @@ export class DocumentDetailOverlayV2 extends BaseOverlayV2 {
490
437
  const termWidth = terminal.getTerminalWidth();
491
438
  const contentLines = renderMarkdownSync(document.content, termWidth);
492
439
  const rawLines = document.content.split('\n');
440
+ // Initialize plan-specific state
441
+ const isPlan = document.docType === 'plan';
442
+ const planStatus = isPlan ? document.status ?? 'draft' : null;
443
+ const availableStatuses = planStatus ? VALID_TRANSITIONS[planStatus] : [];
493
444
  super({
494
445
  contentLines,
495
446
  scrollOffset: 0,
@@ -502,6 +453,10 @@ export class DocumentDetailOverlayV2 extends BaseOverlayV2 {
502
453
  originalContent: document.content,
503
454
  showSavePrompt: false,
504
455
  saveMessage: null,
456
+ planStatus,
457
+ showStatusMenu: false,
458
+ statusMenuIndex: 0,
459
+ availableStatuses,
505
460
  });
506
461
  this.document = document;
507
462
  }
@@ -537,7 +492,16 @@ export class DocumentDetailOverlayV2 extends BaseOverlayV2 {
537
492
  // Header
538
493
  const typeLabel = DOC_TYPE_LABELS[this.document.docType] || this.document.docType.toUpperCase();
539
494
  lines.push(border);
540
- lines.push(` ${s.primaryBold(typeLabel)}${s.muted(' ')}${chalk.bold(this.document.title)}`);
495
+ // For plans, show status in header
496
+ if (this.state.planStatus) {
497
+ const statusLabel = PLAN_STATUS_LABELS[this.state.planStatus];
498
+ const statusColor = PLAN_STATUS_COLORS[this.state.planStatus];
499
+ const styledStatus = s[statusColor](statusLabel);
500
+ lines.push(` ${s.primaryBold(typeLabel)}${s.muted(' │ ')}${chalk.bold(this.document.title)} ${styledStatus}`);
501
+ }
502
+ else {
503
+ lines.push(` ${s.primaryBold(typeLabel)}${s.muted(' │ ')}${chalk.bold(this.document.title)}`);
504
+ }
541
505
  lines.push(border);
542
506
  // Calculate content area
543
507
  const headerLines = 3;
@@ -579,7 +543,19 @@ export class DocumentDetailOverlayV2 extends BaseOverlayV2 {
579
543
  ? Math.round(((this.state.scrollOffset + contentHeight) / totalLines) * 100)
580
544
  : 100;
581
545
  lines.push(border);
582
- lines.push(s.muted(` ${arrows} ${position} (${String(scrollPercent)}%) ↑↓/jk Scroll · e/i Edit · q/Esc Back`));
546
+ // Show status menu if open
547
+ if (this.state.showStatusMenu && this.state.availableStatuses.length > 0) {
548
+ const statusOptions = this.state.availableStatuses.map((status, idx) => {
549
+ const label = PLAN_STATUS_LABELS[status];
550
+ return idx === this.state.statusMenuIndex ? s.primary(`[${label}]`) : s.muted(label);
551
+ }).join(' ');
552
+ lines.push(s.warning(' Change status: ') + statusOptions + s.muted(' ↑↓ Select · Enter Confirm · Esc Cancel'));
553
+ }
554
+ else {
555
+ // Normal footer with plan-specific hint
556
+ const planHint = this.state.planStatus && this.state.availableStatuses.length > 0 ? ' · s Status' : '';
557
+ lines.push(s.muted(` ${arrows} ${position} (${String(scrollPercent)}%) ↑↓/jk Scroll · e/i Edit${planHint} · q/Esc Back`));
558
+ }
583
559
  lines.push(border);
584
560
  return lines;
585
561
  }
@@ -735,6 +711,10 @@ export class DocumentDetailOverlayV2 extends BaseOverlayV2 {
735
711
  if (this.state.showSavePrompt) {
736
712
  return this.handleSavePromptKey(data);
737
713
  }
714
+ // Handle status menu
715
+ if (this.state.showStatusMenu) {
716
+ return this.handleStatusMenuKey(data);
717
+ }
738
718
  // Handle edit mode
739
719
  if (this.state.isEditMode) {
740
720
  return this.handleEditModeKey(data);
@@ -746,7 +726,7 @@ export class DocumentDetailOverlayV2 extends BaseOverlayV2 {
746
726
  // View Mode Key Handling
747
727
  // ===========================================================================
748
728
  handleViewModeKey(data) {
749
- const char = isPrintableChar(data);
729
+ const char = getPrintableChar(data);
750
730
  const keyStr = data.toString();
751
731
  const rows = terminal.getTerminalHeight();
752
732
  const contentHeight = rows - 6;
@@ -769,6 +749,12 @@ export class DocumentDetailOverlayV2 extends BaseOverlayV2 {
769
749
  this.state.saveMessage = null;
770
750
  return this.rerender();
771
751
  }
752
+ // s - open status menu (plans only)
753
+ if (char === 's' && this.state.planStatus && this.state.availableStatuses.length > 0) {
754
+ this.state.showStatusMenu = true;
755
+ this.state.statusMenuIndex = 0;
756
+ return this.rerender();
757
+ }
772
758
  // Up / k
773
759
  if (isNavigateUp(data)) {
774
760
  if (this.state.scrollOffset > 0) {
@@ -844,16 +830,16 @@ export class DocumentDetailOverlayV2 extends BaseOverlayV2 {
844
830
  return this.exitEditMode();
845
831
  }
846
832
  // Navigation
847
- if (isArrowUp(data)) {
833
+ if (isUpArrow(data)) {
848
834
  return this.moveCursorUp();
849
835
  }
850
- if (isArrowDown(data)) {
836
+ if (isDownArrow(data)) {
851
837
  return this.moveCursorDown();
852
838
  }
853
- if (isArrowLeft(data)) {
839
+ if (isLeftArrow(data)) {
854
840
  return this.moveCursorLeft();
855
841
  }
856
- if (isArrowRight(data)) {
842
+ if (isRightArrow(data)) {
857
843
  return this.moveCursorRight();
858
844
  }
859
845
  if (isHome(data)) {
@@ -892,7 +878,7 @@ export class DocumentDetailOverlayV2 extends BaseOverlayV2 {
892
878
  return this.insertText(' '.repeat(TAB_SIZE));
893
879
  }
894
880
  // Printable characters
895
- const char = isPrintableChar(data);
881
+ const char = getPrintableChar(data);
896
882
  if (char) {
897
883
  return this.insertText(char);
898
884
  }
@@ -902,7 +888,7 @@ export class DocumentDetailOverlayV2 extends BaseOverlayV2 {
902
888
  // Save Prompt Key Handling
903
889
  // ===========================================================================
904
890
  handleSavePromptKey(data) {
905
- const char = isPrintableChar(data);
891
+ const char = getPrintableChar(data);
906
892
  // y = save and exit edit mode
907
893
  if (char === 'y' || char === 'Y') {
908
894
  this.saveDocument();
@@ -929,6 +915,61 @@ export class DocumentDetailOverlayV2 extends BaseOverlayV2 {
929
915
  return this.noAction();
930
916
  }
931
917
  // ===========================================================================
918
+ // Status Menu Key Handling (Plans only)
919
+ // ===========================================================================
920
+ handleStatusMenuKey(data) {
921
+ // Ctrl+C closes everything
922
+ if (isCtrlC(data)) {
923
+ return this.close({ goBack: false });
924
+ }
925
+ // Escape - close status menu
926
+ if (isEscape(data)) {
927
+ this.state.showStatusMenu = false;
928
+ return this.rerender();
929
+ }
930
+ // Up arrow - previous status
931
+ if (isUpArrow(data)) {
932
+ if (this.state.statusMenuIndex > 0) {
933
+ this.state.statusMenuIndex--;
934
+ return this.rerender();
935
+ }
936
+ return this.noAction();
937
+ }
938
+ // Down arrow - next status
939
+ if (isDownArrow(data)) {
940
+ if (this.state.statusMenuIndex < this.state.availableStatuses.length - 1) {
941
+ this.state.statusMenuIndex++;
942
+ return this.rerender();
943
+ }
944
+ return this.noAction();
945
+ }
946
+ // Enter - confirm status change
947
+ if (isEnter(data)) {
948
+ const newStatus = this.state.availableStatuses[this.state.statusMenuIndex];
949
+ return this.changeStatus(newStatus);
950
+ }
951
+ return this.noAction();
952
+ }
953
+ changeStatus(newStatus) {
954
+ try {
955
+ // Update the plan status in the database
956
+ planRepository.update(this.document.id, { status: newStatus });
957
+ // Update local state
958
+ this.state.planStatus = newStatus;
959
+ this.state.availableStatuses = VALID_TRANSITIONS[newStatus];
960
+ this.state.showStatusMenu = false;
961
+ this.state.statusMenuIndex = 0;
962
+ // Also update the document's status field for consistency
963
+ this.document.status = newStatus;
964
+ return this.rerender();
965
+ }
966
+ catch {
967
+ // On error, just close the menu
968
+ this.state.showStatusMenu = false;
969
+ return this.rerender();
970
+ }
971
+ }
972
+ // ===========================================================================
932
973
  // Cursor Movement
933
974
  // ===========================================================================
934
975
  moveCursorUp() {
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Filter Overlay V2
3
+ *
4
+ * Modal overlay for selecting which agents to show in conversation.
5
+ * The filter is display-only - full history is preserved.
6
+ */
7
+ import { BaseOverlayV2 } from '../../base/index.js';
8
+ import type { RenderContext, OverlayAction, KeyEvent } from '../index.js';
9
+ export interface FilterOverlayV2Config {
10
+ /** All agents available for filtering */
11
+ agents: Array<{
12
+ id: string;
13
+ displayName: string;
14
+ mascot: string;
15
+ selected: boolean;
16
+ }>;
17
+ /** Currently filtered agent IDs (empty = show all) */
18
+ currentFilter: string[];
19
+ }
20
+ export type FilterOverlayV2Result = {
21
+ type: 'apply';
22
+ agentIds: string[];
23
+ } | {
24
+ type: 'cancelled';
25
+ };
26
+ interface FilterOverlayState {
27
+ /** Currently selected agent index */
28
+ selectedIndex: number;
29
+ /** Selection state for each agent */
30
+ selections: Map<string, boolean>;
31
+ /** Agent list */
32
+ agents: FilterOverlayV2Config['agents'];
33
+ }
34
+ export declare class FilterOverlayV2 extends BaseOverlayV2<FilterOverlayState, FilterOverlayV2Result> {
35
+ readonly type: "inline";
36
+ readonly id = "filter-overlay-v2";
37
+ constructor(config: FilterOverlayV2Config);
38
+ protected renderContent(context: RenderContext): string[];
39
+ handleKey(event: KeyEvent): OverlayAction<FilterOverlayV2Result>;
40
+ }
41
+ export {};
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Filter Overlay V2
3
+ *
4
+ * Modal overlay for selecting which agents to show in conversation.
5
+ * The filter is display-only - full history is preserved.
6
+ */
7
+ import chalk from 'chalk';
8
+ import { BaseOverlayV2 } from '../../base/index.js';
9
+ import * as terminal from '../../terminal.js';
10
+ // =============================================================================
11
+ // Filter Overlay V2 Class
12
+ // =============================================================================
13
+ export class FilterOverlayV2 extends BaseOverlayV2 {
14
+ type = 'inline';
15
+ id = 'filter-overlay-v2';
16
+ constructor(config) {
17
+ // Initialize selections from config
18
+ const selections = new Map();
19
+ for (const agent of config.agents) {
20
+ selections.set(agent.id, agent.selected);
21
+ }
22
+ super({
23
+ selectedIndex: 0,
24
+ selections,
25
+ agents: config.agents,
26
+ });
27
+ this.minHeight = 8 + config.agents.length;
28
+ }
29
+ renderContent(context) {
30
+ const s = context.styles;
31
+ const lines = [];
32
+ const cols = terminal.getTerminalWidth();
33
+ const border = s.muted('─'.repeat(Math.max(1, cols - 1)));
34
+ // Header
35
+ lines.push(border);
36
+ lines.push(' ' + chalk.bold('Conversation Filter'));
37
+ lines.push(border);
38
+ lines.push('');
39
+ // Instructions
40
+ lines.push(s.muted(' Show messages from:'));
41
+ lines.push('');
42
+ // Agent list with checkboxes
43
+ for (let i = 0; i < this.state.agents.length; i++) {
44
+ const agent = this.state.agents[i];
45
+ const isSelected = i === this.state.selectedIndex;
46
+ const isChecked = this.state.selections.get(agent.id) ?? true;
47
+ const checkbox = isChecked ? s.success('[x]') : s.muted('[ ]');
48
+ const mascot = agent.mascot;
49
+ const id = `$${agent.id}`;
50
+ const name = `(${agent.displayName})`;
51
+ const line = ` ${checkbox} ${mascot} ${id} ${s.muted(name)}`;
52
+ if (isSelected) {
53
+ lines.push(s.primary(line));
54
+ }
55
+ else {
56
+ lines.push(line);
57
+ }
58
+ }
59
+ lines.push('');
60
+ // Footer with shortcuts
61
+ lines.push(border);
62
+ lines.push(s.muted(' ↑↓ Navigate · Space Toggle · a All · n None · Enter Apply · Esc Cancel'));
63
+ return lines;
64
+ }
65
+ handleKey(event) {
66
+ const { name, raw } = event;
67
+ // Navigation
68
+ if (name === 'up' || (raw.length === 3 && raw[0] === 0x1b && raw[1] === 0x5b && raw[2] === 0x41)) {
69
+ this.state.selectedIndex = Math.max(0, this.state.selectedIndex - 1);
70
+ return { type: 'render' };
71
+ }
72
+ if (name === 'down' || (raw.length === 3 && raw[0] === 0x1b && raw[1] === 0x5b && raw[2] === 0x42)) {
73
+ this.state.selectedIndex = Math.min(this.state.agents.length - 1, this.state.selectedIndex + 1);
74
+ return { type: 'render' };
75
+ }
76
+ // Toggle selection
77
+ if (name === 'space') {
78
+ const agent = this.state.agents[this.state.selectedIndex];
79
+ const current = this.state.selections.get(agent.id) ?? true;
80
+ this.state.selections.set(agent.id, !current);
81
+ return { type: 'render' };
82
+ }
83
+ // Select all
84
+ if (name === 'a') {
85
+ for (const agent of this.state.agents) {
86
+ this.state.selections.set(agent.id, true);
87
+ }
88
+ return { type: 'render' };
89
+ }
90
+ // Select none
91
+ if (name === 'n') {
92
+ for (const agent of this.state.agents) {
93
+ this.state.selections.set(agent.id, false);
94
+ }
95
+ return { type: 'render' };
96
+ }
97
+ // Apply
98
+ if (name === 'return' || name === 'enter') {
99
+ const selectedIds = this.state.agents
100
+ .filter(agent => this.state.selections.get(agent.id))
101
+ .map(agent => agent.id);
102
+ return { type: 'close', result: { type: 'apply', agentIds: selectedIds } };
103
+ }
104
+ // Cancel
105
+ if (name === 'escape') {
106
+ return { type: 'close', cancelled: true };
107
+ }
108
+ return { type: 'none' };
109
+ }
110
+ }
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Games Overlay V2
3
+ *
4
+ * Arcade menu for the games easter egg.
5
+ */
6
+ import { BaseOverlayV2 } from '../../base/index.js';
7
+ import type { RenderContext, OverlayAction, KeyEvent } from '../types.js';
8
+ import { type GameInfo } from '../../../games/index.js';
9
+ export interface GamesOverlayV2Result {
10
+ action: 'close' | 'play';
11
+ game?: GameInfo;
12
+ }
13
+ interface GamesState {
14
+ selectedIndex: number;
15
+ showInsertCoin: boolean;
16
+ gameToPlay: GameInfo | null;
17
+ gotDailyBonus: boolean;
18
+ }
19
+ export interface GamesOverlayV2Options {
20
+ gotDailyBonus?: boolean;
21
+ }
22
+ export declare class GamesOverlayV2 extends BaseOverlayV2<GamesState, GamesOverlayV2Result> {
23
+ readonly type: "inline";
24
+ readonly id = "games";
25
+ constructor(options?: GamesOverlayV2Options);
26
+ protected renderContent(ctx: RenderContext): string[];
27
+ private renderGamesList;
28
+ private renderInsertCoinScreen;
29
+ handleKey(event: KeyEvent): OverlayAction<GamesOverlayV2Result>;
30
+ }
31
+ export {};
@@ -0,0 +1,135 @@
1
+ /**
2
+ * Games Overlay V2
3
+ *
4
+ * Arcade menu for the games easter egg.
5
+ */
6
+ import { BaseOverlayV2 } from '../../base/index.js';
7
+ import { getAvailableGames, getCoins, hasCoins, formatCoinsDisplay, getBestScore, formatScore, COIN_COST_START_GAME, } from '../../../games/index.js';
8
+ export class GamesOverlayV2 extends BaseOverlayV2 {
9
+ type = 'inline';
10
+ id = 'games';
11
+ constructor(options) {
12
+ super({
13
+ selectedIndex: 0,
14
+ showInsertCoin: false,
15
+ gameToPlay: null,
16
+ gotDailyBonus: options?.gotDailyBonus ?? false,
17
+ });
18
+ this.minHeight = 20;
19
+ }
20
+ renderContent(ctx) {
21
+ const s = ctx.styles;
22
+ const games = getAvailableGames();
23
+ const coins = getCoins();
24
+ if (this.state.showInsertCoin) {
25
+ return this.renderInsertCoinScreen(s, coins);
26
+ }
27
+ return this.renderGamesList(s, games, coins);
28
+ }
29
+ renderGamesList(s, games, coins) {
30
+ const lines = [];
31
+ // Title
32
+ lines.push('');
33
+ lines.push(s.primaryBold(' ╔═══════════════════════════════════════════════════╗'));
34
+ lines.push(s.primaryBold(' ║ A R C A D E ║'));
35
+ lines.push(s.primaryBold(' ╚═══════════════════════════════════════════════════╝'));
36
+ // Daily bonus notification
37
+ if (this.state.gotDailyBonus) {
38
+ lines.push(s.success(' 🎁 Daily bonus: +1 coin!'));
39
+ }
40
+ else {
41
+ lines.push('');
42
+ }
43
+ // Games list
44
+ lines.push(s.muted(' ┌─────────────────────────────────────────────────┐'));
45
+ for (let i = 0; i < games.length; i++) {
46
+ const game = games[i];
47
+ const isSelected = i === this.state.selectedIndex;
48
+ const cursor = isSelected ? s.primary('❯') : ' ';
49
+ if (game.available) {
50
+ const bestScore = getBestScore(game.id);
51
+ const scoreText = bestScore ? `Best: ${formatScore(bestScore.score)}` : '';
52
+ if (isSelected) {
53
+ lines.push(` │ ${cursor} ${s.primaryBold(game.name.padEnd(18))} ${s.muted(scoreText.padStart(20))} │`);
54
+ }
55
+ else {
56
+ lines.push(` │ ${cursor} ${s.primary(game.name.padEnd(18))} ${s.muted(scoreText.padStart(20))} │`);
57
+ }
58
+ }
59
+ else {
60
+ // Coming soon
61
+ lines.push(` │ ${cursor} ${s.muted(game.name.padEnd(18))} ${s.muted('Coming Soon...'.padStart(20))} │`);
62
+ }
63
+ }
64
+ lines.push(s.muted(' └─────────────────────────────────────────────────┘'));
65
+ lines.push('');
66
+ // Coins display
67
+ const coinsDisplay = formatCoinsDisplay(coins, 10);
68
+ lines.push(` ${s.warning('COINS:')} ${s.primary(coinsDisplay)} (${String(coins)})`);
69
+ lines.push('');
70
+ // Controls
71
+ lines.push(s.muted(' ↑↓ Select Enter Play Q Exit'));
72
+ lines.push('');
73
+ return lines;
74
+ }
75
+ renderInsertCoinScreen(s, coins) {
76
+ const lines = [];
77
+ lines.push('');
78
+ lines.push('');
79
+ lines.push('');
80
+ lines.push(s.warning(' ╔═════════════════════════════╗'));
81
+ lines.push(s.warning(' ║ ║'));
82
+ lines.push(s.warning(' ║ I N S E R T C O I N ║'));
83
+ lines.push(s.warning(' ║ ║'));
84
+ lines.push(s.warning(' ╚═════════════════════════════╝'));
85
+ lines.push('');
86
+ lines.push(` ${s.muted(`You have ${String(coins)} coin${coins !== 1 ? 's' : ''}.`)}`);
87
+ lines.push('');
88
+ lines.push(s.muted(' Earn coins by:'));
89
+ lines.push(s.muted(' • Completing work items'));
90
+ lines.push(s.muted(' • Creating projects'));
91
+ lines.push(s.muted(' • Daily usage'));
92
+ lines.push('');
93
+ lines.push(s.muted(' [Press any key to go back]'));
94
+ lines.push('');
95
+ return lines;
96
+ }
97
+ handleKey(event) {
98
+ const games = getAvailableGames();
99
+ // Handle insert coin screen
100
+ if (this.state.showInsertCoin) {
101
+ this.state.showInsertCoin = false;
102
+ return this.rerender();
103
+ }
104
+ // Navigation
105
+ if (this.isUpKey(event)) {
106
+ this.state.selectedIndex = Math.max(0, this.state.selectedIndex - 1);
107
+ return this.rerender();
108
+ }
109
+ if (this.isDownKey(event)) {
110
+ this.state.selectedIndex = Math.min(games.length - 1, this.state.selectedIndex + 1);
111
+ return this.rerender();
112
+ }
113
+ // Play game
114
+ if (this.isEnterKey(event)) {
115
+ const game = games[this.state.selectedIndex];
116
+ if (!game.available) {
117
+ // Game not available yet
118
+ return this.rerender();
119
+ }
120
+ // Check coins (but don't spend yet - game will spend when actually starting)
121
+ if (!hasCoins(COIN_COST_START_GAME)) {
122
+ this.state.showInsertCoin = true;
123
+ return this.rerender();
124
+ }
125
+ // Launch game (coin will be spent after pre-game screen)
126
+ this.state.gameToPlay = game;
127
+ return this.close({ action: 'play', game: game });
128
+ }
129
+ // Close
130
+ if (this.isCloseKey(event)) {
131
+ return this.close({ action: 'close' });
132
+ }
133
+ return this.noAction();
134
+ }
135
+ }
@@ -11,6 +11,28 @@
11
11
  * - Works with TerminalUI's overlay management
12
12
  */
13
13
  import { TabbedListOverlayV2, BaseScreen } from '../../base/index.js';
14
+ /** Command detail info returned by getCommand(). */
15
+ interface CommandDetail {
16
+ name: string;
17
+ description: string;
18
+ details?: string;
19
+ aliases?: string[];
20
+ examples?: {
21
+ code: string;
22
+ description?: string;
23
+ }[];
24
+ interactions?: string[];
25
+ }
26
+ /** Options for creating HelpOverlayV2. */
27
+ export interface HelpOverlayV2Options {
28
+ /** Get all commands for the help list. */
29
+ getHelpCommands: () => {
30
+ name: string;
31
+ description: string;
32
+ }[];
33
+ /** Get detailed info for a single command. */
34
+ getCommand: (name: string) => CommandDetail | undefined;
35
+ }
14
36
  interface HelpItem {
15
37
  name: string;
16
38
  description: string;
@@ -18,8 +40,8 @@ interface HelpItem {
18
40
  /** For custom commands */
19
41
  prompt?: string;
20
42
  location?: 'project' | 'personal';
21
- /** Index in COMMANDS array for built-in commands */
22
- commandIndex?: number;
43
+ /** Command name for built-in commands (without leading /) */
44
+ commandName?: string;
23
45
  }
24
46
  /**
25
47
  * Help overlay using the new Overlay interface.
@@ -28,7 +50,8 @@ interface HelpItem {
28
50
  export declare class HelpOverlayV2 extends TabbedListOverlayV2<HelpItem> {
29
51
  readonly type: "inline";
30
52
  readonly id = "help-overlay-v2";
31
- constructor();
53
+ private readonly getCommandDetail;
54
+ constructor(options: HelpOverlayV2Options);
32
55
  protected createDetailScreen(item: HelpItem): BaseScreen | null;
33
56
  }
34
57
  export {};