@compilr-dev/cli 0.5.0 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (591) hide show
  1. package/README.md +236 -68
  2. package/dist/.tsbuildinfo.app +1 -0
  3. package/dist/.tsbuildinfo.data +1 -0
  4. package/dist/.tsbuildinfo.domain +1 -0
  5. package/dist/.tsbuildinfo.foundation +1 -0
  6. package/dist/agent.d.ts +61 -4
  7. package/dist/agent.js +241 -245
  8. package/dist/anchors/index.d.ts +1 -1
  9. package/dist/anchors/index.js +1 -1
  10. package/dist/anchors/project-anchors.d.ts +2 -2
  11. package/dist/anchors/project-anchors.js +1 -1
  12. package/dist/auth/api-client.d.ts +124 -0
  13. package/dist/auth/api-client.js +261 -0
  14. package/dist/auth/index.d.ts +172 -0
  15. package/dist/auth/index.js +545 -0
  16. package/dist/auth/storage.d.ts +52 -0
  17. package/dist/auth/storage.js +118 -0
  18. package/dist/changelog/index.d.ts +16 -0
  19. package/dist/changelog/index.js +24 -0
  20. package/dist/changelog/releases.d.ts +17 -0
  21. package/dist/changelog/releases.js +63 -0
  22. package/dist/commands-v2/handlers/auth.d.ts +10 -0
  23. package/dist/commands-v2/handlers/auth.js +118 -0
  24. package/dist/commands-v2/handlers/background.d.ts +14 -0
  25. package/dist/commands-v2/handlers/background.js +276 -0
  26. package/dist/commands-v2/handlers/context.js +266 -81
  27. package/dist/commands-v2/handlers/core.d.ts +1 -0
  28. package/dist/commands-v2/handlers/core.js +133 -8
  29. package/dist/commands-v2/handlers/debug.js +18 -0
  30. package/dist/commands-v2/handlers/delegations.d.ts +8 -0
  31. package/dist/commands-v2/handlers/delegations.js +29 -0
  32. package/dist/commands-v2/handlers/files.d.ts +8 -0
  33. package/dist/commands-v2/handlers/files.js +162 -0
  34. package/dist/commands-v2/handlers/filter.d.ts +9 -0
  35. package/dist/commands-v2/handlers/filter.js +130 -0
  36. package/dist/commands-v2/handlers/games.d.ts +7 -0
  37. package/dist/commands-v2/handlers/games.js +57 -0
  38. package/dist/commands-v2/handlers/index.d.ts +13 -0
  39. package/dist/commands-v2/handlers/index.js +39 -0
  40. package/dist/commands-v2/handlers/mcp.d.ts +8 -0
  41. package/dist/commands-v2/handlers/mcp.js +39 -0
  42. package/dist/commands-v2/handlers/notifications.d.ts +9 -0
  43. package/dist/commands-v2/handlers/notifications.js +34 -0
  44. package/dist/commands-v2/handlers/project.js +244 -23
  45. package/dist/commands-v2/handlers/reset.d.ts +11 -0
  46. package/dist/commands-v2/handlers/reset.js +118 -0
  47. package/dist/commands-v2/handlers/session.d.ts +161 -0
  48. package/dist/commands-v2/handlers/session.js +805 -0
  49. package/dist/commands-v2/handlers/settings.d.ts +2 -0
  50. package/dist/commands-v2/handlers/settings.js +217 -35
  51. package/dist/commands-v2/handlers/tasks.d.ts +5 -0
  52. package/dist/commands-v2/handlers/tasks.js +36 -0
  53. package/dist/commands-v2/handlers/team.d.ts +9 -0
  54. package/dist/commands-v2/handlers/team.js +549 -0
  55. package/dist/commands-v2/handlers/terminals.d.ts +9 -0
  56. package/dist/commands-v2/handlers/terminals.js +34 -0
  57. package/dist/commands-v2/index.d.ts +3 -2
  58. package/dist/commands-v2/index.js +4 -1
  59. package/dist/commands-v2/registry.d.ts +15 -0
  60. package/dist/commands-v2/registry.js +34 -0
  61. package/dist/commands-v2/types.d.ts +81 -3
  62. package/dist/commands.js +13 -0
  63. package/dist/compilr-diff-companion.vsix +0 -0
  64. package/dist/db/index.js +98 -4
  65. package/dist/db/repositories/document-repository.d.ts +2 -0
  66. package/dist/db/repositories/document-repository.js +5 -1
  67. package/dist/db/repositories/index.d.ts +2 -0
  68. package/dist/db/repositories/index.js +1 -0
  69. package/dist/db/repositories/plan-repository.d.ts +101 -0
  70. package/dist/db/repositories/plan-repository.js +275 -0
  71. package/dist/db/repositories/project-repository.d.ts +6 -0
  72. package/dist/db/repositories/project-repository.js +41 -0
  73. package/dist/db/repositories/work-item-repository.d.ts +15 -0
  74. package/dist/db/repositories/work-item-repository.js +69 -4
  75. package/dist/db/schema.d.ts +40 -3
  76. package/dist/db/schema.js +66 -3
  77. package/dist/episodes/index.d.ts +20 -0
  78. package/dist/episodes/index.js +27 -0
  79. package/dist/episodes/recorder.d.ts +51 -0
  80. package/dist/episodes/recorder.js +195 -0
  81. package/dist/episodes/significant-work.d.ts +21 -0
  82. package/dist/episodes/significant-work.js +56 -0
  83. package/dist/episodes/store.d.ts +38 -0
  84. package/dist/episodes/store.js +199 -0
  85. package/dist/episodes/types.d.ts +35 -0
  86. package/dist/episodes/types.js +6 -0
  87. package/dist/episodes/work-at-risk.d.ts +12 -0
  88. package/dist/episodes/work-at-risk.js +38 -0
  89. package/dist/episodes/work-summary-anchor.d.ts +23 -0
  90. package/dist/episodes/work-summary-anchor.js +73 -0
  91. package/dist/games/coins.d.ts +66 -0
  92. package/dist/games/coins.js +165 -0
  93. package/dist/games/game-base.d.ts +84 -0
  94. package/dist/games/game-base.js +204 -0
  95. package/dist/games/index.d.ts +16 -0
  96. package/dist/games/index.js +49 -0
  97. package/dist/games/scores.d.ts +69 -0
  98. package/dist/games/scores.js +191 -0
  99. package/dist/games/tetris/board.d.ts +59 -0
  100. package/dist/games/tetris/board.js +170 -0
  101. package/dist/games/tetris/index.d.ts +109 -0
  102. package/dist/games/tetris/index.js +610 -0
  103. package/dist/games/tetris/pieces.d.ts +44 -0
  104. package/dist/games/tetris/pieces.js +271 -0
  105. package/dist/games/tetris/renderer.d.ts +26 -0
  106. package/dist/games/tetris/renderer.js +77 -0
  107. package/dist/guide/guide-content.d.ts +23 -0
  108. package/dist/guide/guide-content.js +196 -0
  109. package/dist/guide/index.d.ts +8 -0
  110. package/dist/guide/index.js +7 -0
  111. package/dist/guide/shared-content.d.ts +37 -0
  112. package/dist/guide/shared-content.js +1272 -0
  113. package/dist/guide/tutorial-helpers.d.ts +57 -0
  114. package/dist/guide/tutorial-helpers.js +147 -0
  115. package/dist/handlers/ask-user-handlers.d.ts +32 -0
  116. package/dist/handlers/ask-user-handlers.js +104 -0
  117. package/dist/handlers/delegation-handlers.d.ts +34 -0
  118. package/dist/handlers/delegation-handlers.js +291 -0
  119. package/dist/handlers/permission-handler.d.ts +30 -0
  120. package/dist/handlers/permission-handler.js +205 -0
  121. package/dist/index.d.ts +11 -1
  122. package/dist/index.js +448 -271
  123. package/dist/input-handlers/memory-handler.d.ts +1 -1
  124. package/dist/input-handlers/memory-handler.js +2 -1
  125. package/dist/models/index.d.ts +10 -0
  126. package/dist/models/index.js +12 -0
  127. package/dist/models/model-registry.d.ts +38 -0
  128. package/dist/models/model-registry.js +69 -0
  129. package/dist/models/model-tiers.d.ts +28 -0
  130. package/dist/models/model-tiers.js +71 -0
  131. package/dist/models/model-validation.d.ts +25 -0
  132. package/dist/models/model-validation.js +291 -0
  133. package/dist/models/ollama-models.d.ts +73 -0
  134. package/dist/models/ollama-models.js +178 -0
  135. package/dist/models/provider-types.d.ts +6 -0
  136. package/dist/models/provider-types.js +1 -0
  137. package/dist/models/providers.d.ts +35 -0
  138. package/dist/models/providers.js +58 -0
  139. package/dist/models/types.d.ts +4 -0
  140. package/dist/models/types.js +4 -0
  141. package/dist/multi-agent/activity.d.ts +21 -0
  142. package/dist/multi-agent/activity.js +34 -0
  143. package/dist/multi-agent/agent-selection.d.ts +55 -0
  144. package/dist/multi-agent/agent-selection.js +90 -0
  145. package/dist/multi-agent/artifacts.d.ts +197 -0
  146. package/dist/multi-agent/artifacts.js +379 -0
  147. package/dist/multi-agent/checkpointer.d.ts +138 -0
  148. package/dist/multi-agent/checkpointer.js +471 -0
  149. package/dist/multi-agent/collision-utils.d.ts +16 -0
  150. package/dist/multi-agent/collision-utils.js +28 -0
  151. package/dist/multi-agent/context-resolver.d.ts +97 -0
  152. package/dist/multi-agent/context-resolver.js +316 -0
  153. package/dist/multi-agent/custom-agents.d.ts +83 -0
  154. package/dist/multi-agent/custom-agents.js +227 -0
  155. package/dist/multi-agent/delegation-tracker.d.ts +157 -0
  156. package/dist/multi-agent/delegation-tracker.js +243 -0
  157. package/dist/multi-agent/file-lock-hook.d.ts +29 -0
  158. package/dist/multi-agent/file-lock-hook.js +97 -0
  159. package/dist/multi-agent/file-locks.d.ts +58 -0
  160. package/dist/multi-agent/file-locks.js +194 -0
  161. package/dist/multi-agent/index.d.ts +24 -0
  162. package/dist/multi-agent/index.js +30 -0
  163. package/dist/multi-agent/mention-parser.d.ts +64 -0
  164. package/dist/multi-agent/mention-parser.js +146 -0
  165. package/dist/multi-agent/notification-manager.d.ts +84 -0
  166. package/dist/multi-agent/notification-manager.js +224 -0
  167. package/dist/multi-agent/pending-requests.d.ts +122 -0
  168. package/dist/multi-agent/pending-requests.js +155 -0
  169. package/dist/multi-agent/session-registry.d.ts +139 -0
  170. package/dist/multi-agent/session-registry.js +514 -0
  171. package/dist/multi-agent/shared-context.d.ts +293 -0
  172. package/dist/multi-agent/shared-context.js +671 -0
  173. package/dist/multi-agent/skill-requirements.d.ts +66 -0
  174. package/dist/multi-agent/skill-requirements.js +178 -0
  175. package/dist/multi-agent/task-assignment.d.ts +69 -0
  176. package/dist/multi-agent/task-assignment.js +123 -0
  177. package/dist/multi-agent/task-suggestion.d.ts +31 -0
  178. package/dist/multi-agent/task-suggestion.js +72 -0
  179. package/dist/multi-agent/team-agent.d.ts +201 -0
  180. package/dist/multi-agent/team-agent.js +488 -0
  181. package/dist/multi-agent/team.d.ts +286 -0
  182. package/dist/multi-agent/team.js +610 -0
  183. package/dist/multi-agent/tool-config.d.ts +110 -0
  184. package/dist/multi-agent/tool-config.js +661 -0
  185. package/dist/multi-agent/types.d.ts +211 -0
  186. package/dist/multi-agent/types.js +617 -0
  187. package/dist/prompts/plan-mode-prompt.d.ts +11 -0
  188. package/dist/prompts/plan-mode-prompt.js +95 -0
  189. package/dist/repl-helpers.js +3 -2
  190. package/dist/repl-v2.d.ts +401 -2
  191. package/dist/repl-v2.js +2577 -65
  192. package/dist/session/index.d.ts +6 -0
  193. package/dist/session/index.js +6 -0
  194. package/dist/session/project-session-manager.d.ts +158 -0
  195. package/dist/session/project-session-manager.js +650 -0
  196. package/dist/settings/index.d.ts +133 -13
  197. package/dist/settings/index.js +329 -24
  198. package/dist/settings/mcp-config.d.ts +76 -0
  199. package/dist/settings/mcp-config.js +143 -0
  200. package/dist/settings/paths.d.ts +4 -0
  201. package/dist/settings/paths.js +6 -0
  202. package/dist/shared-handlers.d.ts +62 -0
  203. package/dist/shared-handlers.js +48 -0
  204. package/dist/system-prompt/builder.d.ts +5 -0
  205. package/dist/system-prompt/builder.js +4 -0
  206. package/dist/system-prompt/index.d.ts +18 -0
  207. package/dist/system-prompt/index.js +18 -0
  208. package/dist/system-prompt/modules.d.ts +5 -0
  209. package/dist/system-prompt/modules.js +4 -0
  210. package/dist/tabbed-menu.js +2 -1
  211. package/dist/templates/compilr-md-import.d.ts +16 -0
  212. package/dist/templates/compilr-md-import.js +241 -0
  213. package/dist/templates/compilr-md.js +10 -61
  214. package/dist/templates/config-json.d.ts +1 -25
  215. package/dist/templates/index.d.ts +2 -0
  216. package/dist/templates/index.js +34 -73
  217. package/dist/tool-names.d.ts +108 -0
  218. package/dist/tool-names.js +227 -0
  219. package/dist/tools/anchor-tools.d.ts +4 -4
  220. package/dist/tools/anchor-tools.js +1 -1
  221. package/dist/tools/artifact-tools.d.ts +42 -0
  222. package/dist/tools/artifact-tools.js +328 -0
  223. package/dist/tools/ask-user-simple.d.ts +1 -1
  224. package/dist/tools/ask-user-simple.js +2 -1
  225. package/dist/tools/ask-user.d.ts +1 -1
  226. package/dist/tools/ask-user.js +2 -1
  227. package/dist/tools/backlog-wrappers.d.ts +5 -3
  228. package/dist/tools/backlog-wrappers.js +16 -1
  229. package/dist/tools/backlog.d.ts +2 -2
  230. package/dist/tools/backlog.js +1 -1
  231. package/dist/tools/db-tools.d.ts +8 -61
  232. package/dist/tools/db-tools.js +8 -13
  233. package/dist/tools/delegate-background.d.ts +27 -0
  234. package/dist/tools/delegate-background.js +115 -0
  235. package/dist/tools/delegate.d.ts +22 -0
  236. package/dist/tools/delegate.js +97 -0
  237. package/dist/tools/delegation-status.d.ts +16 -0
  238. package/dist/tools/delegation-status.js +128 -0
  239. package/dist/tools/document-db.d.ts +5 -5
  240. package/dist/tools/document-db.js +1 -1
  241. package/dist/tools/guide-tool.d.ts +12 -0
  242. package/dist/tools/guide-tool.js +59 -0
  243. package/dist/tools/handoff.d.ts +25 -0
  244. package/dist/tools/handoff.js +99 -0
  245. package/dist/tools/meta-tools.d.ts +26 -0
  246. package/dist/tools/meta-tools.js +47 -0
  247. package/dist/tools/plan-tools.d.ts +54 -0
  248. package/dist/tools/plan-tools.js +338 -0
  249. package/dist/tools/platform-adapter.d.ts +29 -0
  250. package/dist/tools/platform-adapter.js +394 -0
  251. package/dist/tools/project-db.d.ts +5 -73
  252. package/dist/tools/project-db.js +5 -336
  253. package/dist/tools/recall-work-tool.d.ts +18 -0
  254. package/dist/tools/recall-work-tool.js +82 -0
  255. package/dist/tools/workitem-db.d.ts +43 -11
  256. package/dist/tools/workitem-db.js +186 -5
  257. package/dist/tools.d.ts +67 -2
  258. package/dist/tools.js +237 -47
  259. package/dist/ui/autocomplete-controller.d.ts +42 -0
  260. package/dist/ui/autocomplete-controller.js +384 -0
  261. package/dist/ui/base/index.d.ts +1 -1
  262. package/dist/ui/base/index.js +1 -1
  263. package/dist/ui/base/overlay-base-v2.d.ts +10 -0
  264. package/dist/ui/base/overlay-base-v2.js +14 -0
  265. package/dist/ui/base/render-utils.d.ts +19 -0
  266. package/dist/ui/base/render-utils.js +25 -0
  267. package/dist/ui/base/tabbed-list-overlay-v2.d.ts +16 -1
  268. package/dist/ui/base/tabbed-list-overlay-v2.js +19 -1
  269. package/dist/ui/constants/labels.d.ts +14 -0
  270. package/dist/ui/constants/labels.js +51 -0
  271. package/dist/ui/conversation-store.d.ts +55 -0
  272. package/dist/ui/conversation-store.js +107 -0
  273. package/dist/ui/conversation.js +11 -13
  274. package/dist/ui/diff.d.ts +7 -1
  275. package/dist/ui/diff.js +85 -48
  276. package/dist/ui/ephemeral.js +3 -9
  277. package/dist/ui/file-autocomplete.d.ts +24 -0
  278. package/dist/ui/file-autocomplete.js +56 -0
  279. package/dist/ui/footer-renderer.d.ts +69 -0
  280. package/dist/ui/footer-renderer.js +431 -0
  281. package/dist/ui/footer.d.ts +74 -7
  282. package/dist/ui/footer.js +173 -16
  283. package/dist/ui/input-controller.d.ts +51 -0
  284. package/dist/ui/input-controller.js +176 -0
  285. package/dist/ui/input-prompt.d.ts +19 -0
  286. package/dist/ui/input-prompt.js +206 -14
  287. package/dist/ui/keyboard-handler.d.ts +57 -0
  288. package/dist/ui/keyboard-handler.js +557 -0
  289. package/dist/ui/live-region-facade.d.ts +42 -0
  290. package/dist/ui/live-region-facade.js +205 -0
  291. package/dist/ui/live-region.d.ts +0 -4
  292. package/dist/ui/live-region.js +6 -14
  293. package/dist/ui/mascot/renderer.d.ts +1 -1
  294. package/dist/ui/mascot/renderer.js +37 -2
  295. package/dist/ui/overlay/data/tutorial-content.d.ts +9 -0
  296. package/dist/ui/overlay/data/tutorial-content.js +9 -0
  297. package/dist/ui/overlay/data/tutorial-registry.d.ts +12 -0
  298. package/dist/ui/overlay/data/tutorial-registry.js +116 -0
  299. package/dist/ui/overlay/data/tutorial-types.d.ts +35 -0
  300. package/dist/ui/overlay/data/tutorial-types.js +6 -0
  301. package/dist/ui/overlay/data/tutorials/basics/first-conversation.d.ts +7 -0
  302. package/dist/ui/overlay/data/tutorials/basics/first-conversation.js +220 -0
  303. package/dist/ui/overlay/data/tutorials/basics/first-project.d.ts +7 -0
  304. package/dist/ui/overlay/data/tutorials/basics/first-project.js +284 -0
  305. package/dist/ui/overlay/data/tutorials/basics/navigation.d.ts +8 -0
  306. package/dist/ui/overlay/data/tutorials/basics/navigation.js +22 -0
  307. package/dist/ui/overlay/data/tutorials/basics/welcome.d.ts +7 -0
  308. package/dist/ui/overlay/data/tutorials/basics/welcome.js +174 -0
  309. package/dist/ui/overlay/data/tutorials/config/context-management.d.ts +7 -0
  310. package/dist/ui/overlay/data/tutorials/config/context-management.js +158 -0
  311. package/dist/ui/overlay/data/tutorials/config/mcp-servers.d.ts +8 -0
  312. package/dist/ui/overlay/data/tutorials/config/mcp-servers.js +155 -0
  313. package/dist/ui/overlay/data/tutorials/config/model-selection.d.ts +7 -0
  314. package/dist/ui/overlay/data/tutorials/config/model-selection.js +162 -0
  315. package/dist/ui/overlay/data/tutorials/config/permissions-safety.d.ts +7 -0
  316. package/dist/ui/overlay/data/tutorials/config/permissions-safety.js +163 -0
  317. package/dist/ui/overlay/data/tutorials/config/settings-config.d.ts +7 -0
  318. package/dist/ui/overlay/data/tutorials/config/settings-config.js +166 -0
  319. package/dist/ui/overlay/data/tutorials/planning/arch.d.ts +7 -0
  320. package/dist/ui/overlay/data/tutorials/planning/arch.js +168 -0
  321. package/dist/ui/overlay/data/tutorials/planning/backlog.d.ts +7 -0
  322. package/dist/ui/overlay/data/tutorials/planning/backlog.js +103 -0
  323. package/dist/ui/overlay/data/tutorials/planning/build.d.ts +7 -0
  324. package/dist/ui/overlay/data/tutorials/planning/build.js +173 -0
  325. package/dist/ui/overlay/data/tutorials/planning/design.d.ts +7 -0
  326. package/dist/ui/overlay/data/tutorials/planning/design.js +205 -0
  327. package/dist/ui/overlay/data/tutorials/planning/docs.d.ts +7 -0
  328. package/dist/ui/overlay/data/tutorials/planning/docs.js +143 -0
  329. package/dist/ui/overlay/data/tutorials/planning/prd.d.ts +7 -0
  330. package/dist/ui/overlay/data/tutorials/planning/prd.js +173 -0
  331. package/dist/ui/overlay/data/tutorials/planning/scaffold.d.ts +7 -0
  332. package/dist/ui/overlay/data/tutorials/planning/scaffold.js +164 -0
  333. package/dist/ui/overlay/data/tutorials/planning/sketch.d.ts +7 -0
  334. package/dist/ui/overlay/data/tutorials/planning/sketch.js +58 -0
  335. package/dist/ui/overlay/data/tutorials/projects/anchors.d.ts +7 -0
  336. package/dist/ui/overlay/data/tutorials/projects/anchors.js +248 -0
  337. package/dist/ui/overlay/data/tutorials/projects/import-project.d.ts +7 -0
  338. package/dist/ui/overlay/data/tutorials/projects/import-project.js +172 -0
  339. package/dist/ui/overlay/data/tutorials/projects/managing-projects.d.ts +8 -0
  340. package/dist/ui/overlay/data/tutorials/projects/managing-projects.js +212 -0
  341. package/dist/ui/overlay/data/tutorials/projects/new-project.d.ts +7 -0
  342. package/dist/ui/overlay/data/tutorials/projects/new-project.js +251 -0
  343. package/dist/ui/overlay/data/tutorials/projects/session-management.d.ts +7 -0
  344. package/dist/ui/overlay/data/tutorials/projects/session-management.js +169 -0
  345. package/dist/ui/overlay/data/tutorials/teams/background-execution.d.ts +7 -0
  346. package/dist/ui/overlay/data/tutorials/teams/background-execution.js +171 -0
  347. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.d.ts +8 -0
  348. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.js +147 -0
  349. package/dist/ui/overlay/data/tutorials/teams/task-assignment.d.ts +7 -0
  350. package/dist/ui/overlay/data/tutorials/teams/task-assignment.js +204 -0
  351. package/dist/ui/overlay/data/tutorials/teams/team-overview.d.ts +7 -0
  352. package/dist/ui/overlay/data/tutorials/teams/team-overview.js +165 -0
  353. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.d.ts +7 -0
  354. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.js +172 -0
  355. package/dist/ui/overlay/impl/agents-overlay-v2.js +6 -17
  356. package/dist/ui/overlay/impl/anchors-overlay-v2.js +30 -64
  357. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.d.ts +43 -0
  358. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.js +232 -0
  359. package/dist/ui/overlay/impl/artifact-overlay-v2.d.ts +40 -0
  360. package/dist/ui/overlay/impl/artifact-overlay-v2.js +115 -0
  361. package/dist/ui/overlay/impl/ask-user-overlay-v2.js +2 -5
  362. package/dist/ui/overlay/impl/background-overlay-v2.d.ts +40 -0
  363. package/dist/ui/overlay/impl/background-overlay-v2.js +147 -0
  364. package/dist/ui/overlay/impl/backlog-overlay-v2.d.ts +4 -1
  365. package/dist/ui/overlay/impl/backlog-overlay-v2.js +55 -16
  366. package/dist/ui/overlay/impl/changelog-overlay-v2.d.ts +44 -0
  367. package/dist/ui/overlay/impl/changelog-overlay-v2.js +165 -0
  368. package/dist/ui/overlay/impl/commands-overlay-v2.js +4 -6
  369. package/dist/ui/overlay/impl/config-overlay-v2.d.ts +12 -1
  370. package/dist/ui/overlay/impl/config-overlay-v2.js +164 -100
  371. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.d.ts +83 -0
  372. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.js +711 -0
  373. package/dist/ui/overlay/impl/dashboard-overlay-v2.d.ts +2 -0
  374. package/dist/ui/overlay/impl/dashboard-overlay-v2.js +26 -3
  375. package/dist/ui/overlay/impl/delegations-overlay-v2.d.ts +28 -0
  376. package/dist/ui/overlay/impl/delegations-overlay-v2.js +279 -0
  377. package/dist/ui/overlay/impl/docs-overlay-v2.js +12 -9
  378. package/dist/ui/overlay/impl/document-detail-overlay-v2.d.ts +7 -0
  379. package/dist/ui/overlay/impl/document-detail-overlay-v2.js +119 -78
  380. package/dist/ui/overlay/impl/filter-overlay-v2.d.ts +41 -0
  381. package/dist/ui/overlay/impl/filter-overlay-v2.js +110 -0
  382. package/dist/ui/overlay/impl/games-overlay-v2.d.ts +31 -0
  383. package/dist/ui/overlay/impl/games-overlay-v2.js +135 -0
  384. package/dist/ui/overlay/impl/help-overlay-v2.d.ts +26 -3
  385. package/dist/ui/overlay/impl/help-overlay-v2.js +20 -42
  386. package/dist/ui/overlay/impl/login-overlay-v2.d.ts +49 -0
  387. package/dist/ui/overlay/impl/login-overlay-v2.js +277 -0
  388. package/dist/ui/overlay/impl/mcp-overlay-v2.d.ts +63 -0
  389. package/dist/ui/overlay/impl/mcp-overlay-v2.js +907 -0
  390. package/dist/ui/overlay/impl/model-overlay-v2.d.ts +57 -13
  391. package/dist/ui/overlay/impl/model-overlay-v2.js +1086 -61
  392. package/dist/ui/overlay/impl/new-overlay-v2.d.ts +37 -6
  393. package/dist/ui/overlay/impl/new-overlay-v2.js +715 -65
  394. package/dist/ui/overlay/impl/notifications-overlay-v2.d.ts +20 -0
  395. package/dist/ui/overlay/impl/notifications-overlay-v2.js +116 -0
  396. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.d.ts +76 -0
  397. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.js +728 -0
  398. package/dist/ui/overlay/impl/pending-overlay-v2.d.ts +51 -0
  399. package/dist/ui/overlay/impl/pending-overlay-v2.js +445 -0
  400. package/dist/ui/overlay/impl/permission-overlay-v2.js +5 -5
  401. package/dist/ui/overlay/impl/permissions-overlay-v2.d.ts +85 -0
  402. package/dist/ui/overlay/impl/permissions-overlay-v2.js +820 -0
  403. package/dist/ui/overlay/impl/plan-approval-overlay-v2.d.ts +35 -0
  404. package/dist/ui/overlay/impl/plan-approval-overlay-v2.js +181 -0
  405. package/dist/ui/overlay/impl/project-edit-overlay-v2.d.ts +36 -0
  406. package/dist/ui/overlay/impl/project-edit-overlay-v2.js +195 -0
  407. package/dist/ui/overlay/impl/projects-overlay-v2.d.ts +1 -0
  408. package/dist/ui/overlay/impl/projects-overlay-v2.js +278 -44
  409. package/dist/ui/overlay/impl/reset-overlay-v2.d.ts +39 -0
  410. package/dist/ui/overlay/impl/reset-overlay-v2.js +107 -0
  411. package/dist/ui/overlay/impl/resume-overlay-v2.d.ts +60 -0
  412. package/dist/ui/overlay/impl/resume-overlay-v2.js +414 -0
  413. package/dist/ui/overlay/impl/session-mode-overlay-v2.d.ts +43 -0
  414. package/dist/ui/overlay/impl/session-mode-overlay-v2.js +124 -0
  415. package/dist/ui/overlay/impl/tasks-overlay-v2.d.ts +28 -0
  416. package/dist/ui/overlay/impl/tasks-overlay-v2.js +283 -0
  417. package/dist/ui/overlay/impl/team-overlay-v2.d.ts +86 -0
  418. package/dist/ui/overlay/impl/team-overlay-v2.js +692 -0
  419. package/dist/ui/overlay/impl/terminals-overlay-v2.d.ts +26 -0
  420. package/dist/ui/overlay/impl/terminals-overlay-v2.js +217 -0
  421. package/dist/ui/overlay/impl/tools-overlay-v2.js +3 -7
  422. package/dist/ui/overlay/impl/tutorial-overlay-v2.d.ts +30 -16
  423. package/dist/ui/overlay/impl/tutorial-overlay-v2.js +133 -956
  424. package/dist/ui/overlay/impl/workflow-overlay-v2.js +5 -1
  425. package/dist/ui/overlay/index.d.ts +20 -1
  426. package/dist/ui/overlay/index.js +19 -0
  427. package/dist/ui/overlay/types.d.ts +5 -0
  428. package/dist/ui/overlay-manager.d.ts +43 -0
  429. package/dist/ui/overlay-manager.js +238 -0
  430. package/dist/ui/overlays.js +4 -16
  431. package/dist/ui/permission-overlay.js +6 -5
  432. package/dist/ui/status-bar-controller.d.ts +33 -0
  433. package/dist/ui/status-bar-controller.js +99 -0
  434. package/dist/ui/subagent-renderer.js +3 -19
  435. package/dist/ui/terminal-autocomplete-utils.d.ts +23 -0
  436. package/dist/ui/terminal-autocomplete-utils.js +83 -0
  437. package/dist/ui/terminal-line-builders.d.ts +17 -0
  438. package/dist/ui/terminal-line-builders.js +42 -0
  439. package/dist/ui/terminal-render-item.d.ts +16 -0
  440. package/dist/ui/terminal-render-item.js +267 -0
  441. package/dist/ui/terminal-renderer.d.ts +7 -8
  442. package/dist/ui/terminal-renderer.js +7 -8
  443. package/dist/ui/terminal-types.d.ts +179 -0
  444. package/dist/ui/terminal-types.js +34 -0
  445. package/dist/ui/terminal-ui.d.ts +144 -276
  446. package/dist/ui/terminal-ui.js +384 -1861
  447. package/dist/ui/todo-zone.d.ts +19 -1
  448. package/dist/ui/todo-zone.js +71 -13
  449. package/dist/ui/tool-formatters.js +512 -1
  450. package/dist/ui/turn-metrics.d.ts +56 -0
  451. package/dist/ui/turn-metrics.js +75 -0
  452. package/dist/ui/types.d.ts +28 -0
  453. package/dist/ui/types.js +1 -0
  454. package/dist/ui/vscode-diff-ipc.d.ts +102 -0
  455. package/dist/ui/vscode-diff-ipc.js +385 -0
  456. package/dist/utils/credentials.d.ts +24 -5
  457. package/dist/utils/credentials.js +123 -9
  458. package/dist/utils/format-tokens.d.ts +13 -0
  459. package/dist/utils/format-tokens.js +18 -0
  460. package/dist/utils/git-config.d.ts +26 -0
  461. package/dist/utils/git-config.js +54 -0
  462. package/dist/utils/message-utils.d.ts +61 -0
  463. package/dist/utils/message-utils.js +72 -0
  464. package/dist/utils/model-tiers.d.ts +8 -1
  465. package/dist/utils/model-tiers.js +38 -16
  466. package/dist/utils/open-browser.d.ts +5 -0
  467. package/dist/utils/open-browser.js +32 -0
  468. package/dist/utils/path-safety.js +3 -2
  469. package/dist/utils/project-detection.d.ts +58 -0
  470. package/dist/utils/project-detection.js +424 -0
  471. package/dist/utils/project-memory.js +2 -1
  472. package/dist/utils/project-status.d.ts +2 -2
  473. package/dist/utils/startup-perf.d.ts +18 -0
  474. package/dist/utils/startup-perf.js +60 -0
  475. package/dist/utils/token-tracker.d.ts +62 -0
  476. package/dist/utils/token-tracker.js +150 -0
  477. package/dist/utils/token-types.d.ts +23 -0
  478. package/dist/utils/token-types.js +18 -0
  479. package/dist/utils/types/config-types.d.ts +32 -0
  480. package/dist/utils/types/config-types.js +8 -0
  481. package/dist/utils/update-checker.d.ts +28 -0
  482. package/dist/utils/update-checker.js +106 -0
  483. package/dist/utils/version.d.ts +7 -0
  484. package/dist/utils/version.js +10 -0
  485. package/dist/utils/vscode-detect.d.ts +39 -0
  486. package/dist/utils/vscode-detect.js +137 -0
  487. package/package.json +25 -12
  488. package/dist/commands/handler-types.d.ts +0 -68
  489. package/dist/commands/handler-types.js +0 -8
  490. package/dist/commands/handlers/agent-commands.d.ts +0 -13
  491. package/dist/commands/handlers/agent-commands.js +0 -305
  492. package/dist/commands/handlers/design-commands.d.ts +0 -15
  493. package/dist/commands/handlers/design-commands.js +0 -334
  494. package/dist/commands/handlers/index.d.ts +0 -20
  495. package/dist/commands/handlers/index.js +0 -43
  496. package/dist/commands/handlers/overlay-commands.d.ts +0 -21
  497. package/dist/commands/handlers/overlay-commands.js +0 -287
  498. package/dist/commands/handlers/project-commands.d.ts +0 -11
  499. package/dist/commands/handlers/project-commands.js +0 -167
  500. package/dist/commands/handlers/simple-commands.d.ts +0 -19
  501. package/dist/commands/handlers/simple-commands.js +0 -144
  502. package/dist/commands/registry.d.ts +0 -50
  503. package/dist/commands/registry.js +0 -75
  504. package/dist/index.old.d.ts +0 -7
  505. package/dist/index.old.js +0 -1014
  506. package/dist/repl.d.ts +0 -149
  507. package/dist/repl.js +0 -1151
  508. package/dist/templates/claude-md.d.ts +0 -7
  509. package/dist/templates/claude-md.js +0 -189
  510. package/dist/test-autocomplete.d.ts +0 -7
  511. package/dist/test-autocomplete.js +0 -85
  512. package/dist/test-tabbed-menu.d.ts +0 -7
  513. package/dist/test-tabbed-menu.js +0 -25
  514. package/dist/tool-selector.d.ts +0 -71
  515. package/dist/tool-selector.js +0 -184
  516. package/dist/ui/agents-overlay-v2.d.ts +0 -43
  517. package/dist/ui/agents-overlay-v2.js +0 -809
  518. package/dist/ui/agents-overlay.d.ts +0 -12
  519. package/dist/ui/agents-overlay.js +0 -863
  520. package/dist/ui/anchors-overlay.d.ts +0 -12
  521. package/dist/ui/anchors-overlay.js +0 -775
  522. package/dist/ui/arch-type-overlay.d.ts +0 -15
  523. package/dist/ui/arch-type-overlay.js +0 -201
  524. package/dist/ui/ask-user-overlay-v2.d.ts +0 -26
  525. package/dist/ui/ask-user-overlay-v2.js +0 -555
  526. package/dist/ui/ask-user-simple-overlay-v2.d.ts +0 -25
  527. package/dist/ui/ask-user-simple-overlay-v2.js +0 -215
  528. package/dist/ui/backlog-overlay.d.ts +0 -32
  529. package/dist/ui/backlog-overlay.js +0 -652
  530. package/dist/ui/commands-overlay-v2.d.ts +0 -33
  531. package/dist/ui/commands-overlay-v2.js +0 -441
  532. package/dist/ui/commands-overlay.d.ts +0 -16
  533. package/dist/ui/commands-overlay.js +0 -439
  534. package/dist/ui/config-overlay.d.ts +0 -35
  535. package/dist/ui/config-overlay.js +0 -707
  536. package/dist/ui/docs-overlay.d.ts +0 -17
  537. package/dist/ui/docs-overlay.js +0 -303
  538. package/dist/ui/footer-v2.d.ts +0 -222
  539. package/dist/ui/footer-v2.js +0 -1349
  540. package/dist/ui/help-overlay-v2.d.ts +0 -34
  541. package/dist/ui/help-overlay-v2.js +0 -309
  542. package/dist/ui/help-overlay.d.ts +0 -16
  543. package/dist/ui/help-overlay.js +0 -316
  544. package/dist/ui/init-overlay-v2.d.ts +0 -34
  545. package/dist/ui/init-overlay-v2.js +0 -600
  546. package/dist/ui/init-overlay.d.ts +0 -34
  547. package/dist/ui/init-overlay.js +0 -604
  548. package/dist/ui/input-prompt-v2.d.ts +0 -180
  549. package/dist/ui/input-prompt-v2.js +0 -999
  550. package/dist/ui/iteration-limit-overlay-v2.d.ts +0 -21
  551. package/dist/ui/iteration-limit-overlay-v2.js +0 -114
  552. package/dist/ui/keys-overlay-v2.d.ts +0 -41
  553. package/dist/ui/keys-overlay-v2.js +0 -248
  554. package/dist/ui/mascot-overlay-v2.d.ts +0 -41
  555. package/dist/ui/mascot-overlay-v2.js +0 -138
  556. package/dist/ui/mascot-overlay.d.ts +0 -21
  557. package/dist/ui/mascot-overlay.js +0 -146
  558. package/dist/ui/model-overlay-v2.d.ts +0 -49
  559. package/dist/ui/model-overlay-v2.js +0 -118
  560. package/dist/ui/model-overlay.d.ts +0 -27
  561. package/dist/ui/model-overlay.js +0 -221
  562. package/dist/ui/model-warning-overlay.d.ts +0 -30
  563. package/dist/ui/model-warning-overlay.js +0 -169
  564. package/dist/ui/new-overlay.d.ts +0 -34
  565. package/dist/ui/new-overlay.js +0 -604
  566. package/dist/ui/overlay/impl/init-overlay-v2.d.ts +0 -77
  567. package/dist/ui/overlay/impl/init-overlay-v2.js +0 -593
  568. package/dist/ui/overlay/overlay-types.d.ts +0 -128
  569. package/dist/ui/overlay/overlay-types.js +0 -22
  570. package/dist/ui/overlays/help-overlay-v2.d.ts +0 -28
  571. package/dist/ui/overlays/help-overlay-v2.js +0 -198
  572. package/dist/ui/overlays/index.d.ts +0 -11
  573. package/dist/ui/overlays/index.js +0 -11
  574. package/dist/ui/permission-overlay-v2.d.ts +0 -36
  575. package/dist/ui/permission-overlay-v2.js +0 -380
  576. package/dist/ui/projects-overlay.d.ts +0 -19
  577. package/dist/ui/projects-overlay.js +0 -484
  578. package/dist/ui/theme-overlay-v2.d.ts +0 -42
  579. package/dist/ui/theme-overlay-v2.js +0 -135
  580. package/dist/ui/theme-overlay.d.ts +0 -24
  581. package/dist/ui/theme-overlay.js +0 -127
  582. package/dist/ui/tools-overlay-v2.d.ts +0 -47
  583. package/dist/ui/tools-overlay-v2.js +0 -218
  584. package/dist/ui/tools-overlay.d.ts +0 -34
  585. package/dist/ui/tools-overlay.js +0 -230
  586. package/dist/ui/tutorial-overlay-v2.d.ts +0 -31
  587. package/dist/ui/tutorial-overlay-v2.js +0 -1035
  588. package/dist/ui/tutorial-overlay.d.ts +0 -11
  589. package/dist/ui/tutorial-overlay.js +0 -1034
  590. package/dist/ui/workflow-overlay.d.ts +0 -22
  591. package/dist/ui/workflow-overlay.js +0 -636
@@ -1,1034 +0,0 @@
1
- /**
2
- * Tutorial Overlay
3
- *
4
- * Interactive tutorial that guides users through the compilr.dev workflow.
5
- * Supports guided sequential tour and topic-based navigation.
6
- * Refactored to use BaseOverlay + ScreenStack.
7
- */
8
- import * as terminal from './terminal.js';
9
- import { BaseOverlay, BaseScreen, ScreenStack, stay, pushScreen, popScreen, closeOverlay, isEscape, isEnter, isCtrlC, isClose, isNavigateUp, isNavigateDown, isLeftArrow, isRightArrow, isVimLeft, isVimRight, isBackspace, } from './base/index.js';
10
- // =============================================================================
11
- // Helper
12
- // =============================================================================
13
- /**
14
- * Strip ANSI codes from string to get visible length
15
- */
16
- function stripAnsi(str) {
17
- // eslint-disable-next-line no-control-regex
18
- return str.replace(/\x1B\[[0-9;]*[a-zA-Z]/g, '');
19
- }
20
- // =============================================================================
21
- // Content
22
- // =============================================================================
23
- function buildTopics(s) {
24
- return [
25
- // =========================================================================
26
- // Topic 1: Workflow Overview
27
- // =========================================================================
28
- {
29
- id: 'overview',
30
- name: 'Workflow Overview',
31
- description: 'The philosophy and stages',
32
- pages: [
33
- {
34
- title: 'Philosophy',
35
- lines: [
36
- '',
37
- ` ${s.primaryBold('compilr.dev')} is built on five core principles:`,
38
- '',
39
- ` ${s.primary('1. Structured')}`,
40
- ` Follow an organized workflow instead of ad-hoc coding.`,
41
- ` Every project has clear phases and documentation.`,
42
- '',
43
- ` ${s.primary('2. Disciplined')}`,
44
- ` Move through clear phases from design to delivery.`,
45
- ` Don't skip steps - each builds on the previous.`,
46
- '',
47
- ` ${s.primary('3. Intentional')}`,
48
- ` Every feature starts with requirements, not code.`,
49
- ` Know what you're building before you build it.`,
50
- '',
51
- ],
52
- },
53
- {
54
- title: 'Philosophy (continued)',
55
- lines: [
56
- '',
57
- ` ${s.primary('4. Engineering-First')}`,
58
- ` Follow best practices: testing, documentation, code review.`,
59
- ` Build software that's maintainable long-term.`,
60
- '',
61
- ` ${s.primary('5. Flexible')}`,
62
- ` Adapt the workflow to your needs.`,
63
- ` Use what works, skip what doesn't.`,
64
- '',
65
- ` The AI assistant guides you through each stage, helping you build`,
66
- ` projects with ${s.primary('structure')} and ${s.primary('discipline')} - not just generating random code.`,
67
- '',
68
- ` ${s.muted('The goal: sustainable development with AI assistance.')}`,
69
- '',
70
- ],
71
- },
72
- {
73
- title: 'The Workflow Stages',
74
- lines: [
75
- '',
76
- ` The development workflow has five main stages:`,
77
- '',
78
- ` ${s.primary('/new')} Set up your project structure`,
79
- ` Creates project in database with configuration`,
80
- '',
81
- ` ${s.primary('/design')} Gather requirements and create a PRD`,
82
- ` Documents stored in database for persistence`,
83
- '',
84
- ` ${s.primary('/backlog')} Manage your work items`,
85
- ` Track status, prioritize, break down tasks`,
86
- '',
87
- ` ${s.primary('/build')} Implement features from the backlog`,
88
- ` AI-assisted coding with your approval`,
89
- '',
90
- ` ${s.primary('/workflow')} Check progress and next steps`,
91
- ` See where you are and what's next`,
92
- '',
93
- ],
94
- },
95
- {
96
- title: 'Project Management',
97
- lines: [
98
- '',
99
- ` ${s.secondary('Track Your Progress')}`,
100
- '',
101
- ` ${s.primaryBold('/projects')}`,
102
- ` View all your projects in one place.`,
103
- ` Filter by status: Active, Paused, Completed, Archived.`,
104
- ` Switch between projects or open project directories.`,
105
- '',
106
- ` ${s.primaryBold('/workflow')}`,
107
- ` See your current project's workflow status.`,
108
- ` Shows which phases are complete and what's next.`,
109
- ` Quick actions to jump to the right command.`,
110
- '',
111
- ` ${s.primaryBold('/docs')}`,
112
- ` Browse documents created during design.`,
113
- ` View PRDs, architecture docs, and notes.`,
114
- '',
115
- ],
116
- },
117
- ],
118
- },
119
- // =========================================================================
120
- // Topic 2: Initialize
121
- // =========================================================================
122
- {
123
- id: 'init',
124
- name: 'Initialize',
125
- description: 'Setting up a new project',
126
- pages: [
127
- {
128
- title: '/new Command',
129
- lines: [
130
- '',
131
- ` ${s.primaryBold('/new')} creates your project foundation through an 8-step wizard.`,
132
- '',
133
- ` ${s.secondary('What it creates:')}`,
134
- '',
135
- ` ${s.success('+')} ${s.primary('Project in database')} - Tracked for easy management`,
136
- ` ${s.success('+')} ${s.primary('COMPILR.md')} - Context file for the AI assistant`,
137
- ` ${s.success('+')} ${s.primary('.compilr/config.json')} - Project configuration`,
138
- ` ${s.success('+')} Tech stack setup based on your choices`,
139
- '',
140
- ` ${s.secondary('The wizard asks about:')}`,
141
- ` - Project name and description`,
142
- ` - Project type (web, api, cli, fullstack)`,
143
- ` - Tech stack preferences`,
144
- ` - Workflow mode (flexible or guided)`,
145
- '',
146
- ],
147
- },
148
- {
149
- title: '/new - Database Tracking',
150
- lines: [
151
- '',
152
- ` ${s.secondary('Project Database')}`,
153
- ` All projects are tracked in a local SQLite database.`,
154
- ` This enables: multi-project switching, progress tracking,`,
155
- ` and persistent work item management.`,
156
- '',
157
- ` ${s.secondary('View Your Projects')}`,
158
- ` Use ${s.primary('/projects')} to see all your projects.`,
159
- ` Use ${s.primary('/workflow')} to see current project status.`,
160
- '',
161
- ` ${s.muted('Tip: Run /new in an empty directory to start fresh.')}`,
162
- '',
163
- ` After /new completes, the AI reads your COMPILR.md to understand`,
164
- ` your project context. You're ready for the next step: ${s.primary('/design')}`,
165
- '',
166
- ],
167
- },
168
- ],
169
- },
170
- // =========================================================================
171
- // Topic 3: Design
172
- // =========================================================================
173
- {
174
- id: 'design',
175
- name: 'Design Your Project',
176
- description: 'Requirements gathering',
177
- pages: [
178
- {
179
- title: '/design Command',
180
- lines: [
181
- '',
182
- ` ${s.primaryBold('/design')} is comprehensive requirements gathering through conversation.`,
183
- '',
184
- ` The AI guides you through three phases:`,
185
- '',
186
- ` ${s.primary('Phase 1: Vision & Goals')}`,
187
- ` - What problem are you solving?`,
188
- ` - Who is your target user?`,
189
- ` - What does success look like?`,
190
- '',
191
- ` ${s.primary('Phase 2: Features & Scope')}`,
192
- ` - What are the core features?`,
193
- ` - What's nice-to-have vs essential?`,
194
- ` - What's explicitly out of scope?`,
195
- '',
196
- ` ${s.primary('Phase 3: Technical Context')}`,
197
- ` - What constraints exist?`,
198
- ` - What integrations are needed?`,
199
- ` - What are your preferences?`,
200
- '',
201
- ],
202
- },
203
- {
204
- title: '/design - Output',
205
- lines: [
206
- '',
207
- ` ${s.secondary('What /design creates:')}`,
208
- '',
209
- ` ${s.success('+')} ${s.primary('Product Requirements Document (PRD)')}`,
210
- ` Stored in the database for persistence.`,
211
- ` Use ${s.primary('/docs')} to view it anytime.`,
212
- '',
213
- ` ${s.success('+')} ${s.primary('5-15 Backlog Items')}`,
214
- ` Stored in database with status tracking.`,
215
- ` Use ${s.primary('/backlog')} to manage them.`,
216
- '',
217
- ` ${s.success('+')} ${s.primary('Clear Acceptance Criteria')}`,
218
- ` Each backlog item has defined done criteria`,
219
- ` so you know when it's complete.`,
220
- '',
221
- ` ${s.muted('Best for: serious projects that need thorough planning upfront.')}`,
222
- '',
223
- ],
224
- },
225
- {
226
- title: '/sketch Command',
227
- lines: [
228
- '',
229
- ` ${s.primaryBold('/sketch')} is a quick alternative to /design.`,
230
- '',
231
- ` Instead of a long conversation, it asks 6 simple questions:`,
232
- '',
233
- ` ${s.muted('1.')} What are you building?`,
234
- ` ${s.muted('2.')} Who is it for?`,
235
- ` ${s.muted('3.')} What are the 3-5 main features?`,
236
- ` ${s.muted('4.')} What tech stack?`,
237
- ` ${s.muted('5.')} Any constraints or requirements?`,
238
- ` ${s.muted('6.')} What's the MVP scope?`,
239
- '',
240
- ` ${s.secondary('Output:')} 3-8 backlog items, ready to build.`,
241
- '',
242
- ` ${s.muted('Best for: small projects, prototypes, or when you just')}`,
243
- ` ${s.muted('want to get started quickly without detailed planning.')}`,
244
- '',
245
- ],
246
- },
247
- {
248
- title: '/refine Command',
249
- lines: [
250
- '',
251
- ` ${s.primaryBold('/refine')} improves existing backlog items.`,
252
- '',
253
- ` ${s.secondary('Use it to:')}`,
254
- '',
255
- ` ${s.muted('+')} Break down large items into smaller, actionable tasks`,
256
- ` ${s.muted('+')} Add acceptance criteria to vague items`,
257
- ` ${s.muted('+')} Clarify ambiguous requirements`,
258
- ` ${s.muted('+')} Add technical details discovered during work`,
259
- '',
260
- ` ${s.secondary('Usage:')}`,
261
- ` ${s.primary('/refine')} Let the AI suggest what to refine`,
262
- ` ${s.primary('/refine REQ-003')} Refine a specific item`,
263
- '',
264
- ` ${s.muted('Best for: after initial design when you discover items')}`,
265
- ` ${s.muted('are too big or need more detail before building.')}`,
266
- '',
267
- ],
268
- },
269
- {
270
- title: '/arch Command',
271
- lines: [
272
- '',
273
- ` ${s.primaryBold('/arch')} creates architecture documentation.`,
274
- '',
275
- ` ${s.secondary('Document types you can create:')}`,
276
- '',
277
- ` ${s.muted('1.')} ${s.primary('ADR')} - Architecture Decision Record`,
278
- ` Document key technical decisions and their rationale`,
279
- '',
280
- ` ${s.muted('2.')} ${s.primary('System Diagram')} - Visual system overview`,
281
- ` Components, connections, data flow`,
282
- '',
283
- ` ${s.muted('3.')} ${s.primary('Data Model')} - Database/entity design`,
284
- ` Tables, relationships, constraints`,
285
- '',
286
- ` ${s.muted('4.')} ${s.primary('API Design')} - Endpoint documentation`,
287
- ` Routes, methods, request/response formats`,
288
- '',
289
- ` ${s.muted('5.')} ${s.primary('Component Overview')} - Module documentation`,
290
- ` How pieces fit together`,
291
- '',
292
- ],
293
- },
294
- {
295
- title: '/prd Command',
296
- lines: [
297
- '',
298
- ` ${s.primaryBold('/prd')} lets you update your Product Requirements Document.`,
299
- '',
300
- ` After /design creates your PRD, use /prd to amend it as`,
301
- ` your understanding evolves.`,
302
- '',
303
- ` ${s.secondary('Usage:')}`,
304
- ` ${s.primary('/prd')} Interactive section selection`,
305
- ` ${s.primary('/prd vision')} Update vision section directly`,
306
- ` ${s.primary('/prd scope')} Update scope section directly`,
307
- ` ${s.primary('/prd features')} Update features section directly`,
308
- '',
309
- ` ${s.secondary('Sections you can update:')}`,
310
- ` - Vision and goals`,
311
- ` - Features and scope`,
312
- ` - Technical context`,
313
- ` - Non-functional requirements`,
314
- '',
315
- ],
316
- },
317
- ],
318
- },
319
- // =========================================================================
320
- // Topic 4: Backlog
321
- // =========================================================================
322
- {
323
- id: 'backlog',
324
- name: 'Manage Backlog',
325
- description: 'Track and prioritize work',
326
- pages: [
327
- {
328
- title: '/backlog Command',
329
- lines: [
330
- '',
331
- ` ${s.primaryBold('/backlog')} opens an interactive overlay to manage your work items.`,
332
- '',
333
- ` ${s.secondary('Navigation:')}`,
334
- ` ${s.primary('↑/↓')} Navigate through items`,
335
- ` ${s.primary('←/→')} Navigate pages (if many items)`,
336
- ` ${s.primary('Tab')} Switch filter (All, Feature, Bug, etc.)`,
337
- ` ${s.primary('/')} Search items`,
338
- ` ${s.primary('Enter')} View/edit item details`,
339
- '',
340
- ` ${s.secondary('Actions:')}`,
341
- ` ${s.primary('n')} Create new item`,
342
- ` ${s.primary('Space')} Toggle item status`,
343
- ` ${s.primary('p')} Change priority`,
344
- ` ${s.primary('Esc')} Close overlay`,
345
- '',
346
- ],
347
- },
348
- {
349
- title: '/backlog - Status Workflow',
350
- lines: [
351
- '',
352
- ` Items move through three statuses:`,
353
- '',
354
- ` ${s.warning('backlog')} Not started yet`,
355
- ` ${s.muted('↓')}`,
356
- ` ${s.primary('in-progress')} Currently being worked on`,
357
- ` ${s.muted('↓')}`,
358
- ` ${s.success('completed')} Done!`,
359
- '',
360
- ` ${s.secondary('Item Types:')}`,
361
- ` ${s.muted('Feature')} New functionality to build`,
362
- ` ${s.muted('Bug')} Something broken to fix`,
363
- ` ${s.muted('Tech-Debt')} Code improvements needed`,
364
- ` ${s.muted('Chore')} Maintenance tasks`,
365
- '',
366
- ` Items are stored in the ${s.primary('database')} and persist across sessions.`,
367
- '',
368
- ],
369
- },
370
- ],
371
- },
372
- // =========================================================================
373
- // Topic 5: Build
374
- // =========================================================================
375
- {
376
- id: 'build',
377
- name: 'Build',
378
- description: 'Scaffold and implement',
379
- pages: [
380
- {
381
- title: '/scaffold Command',
382
- lines: [
383
- '',
384
- ` ${s.primaryBold('/scaffold')} creates your project's foundation structure.`,
385
- '',
386
- ` ${s.secondary('What it creates:')}`,
387
- '',
388
- ` ${s.success('+')} Directory structure (src/, tests/, etc.)`,
389
- ` ${s.success('+')} Configuration files (package.json, tsconfig, etc.)`,
390
- ` ${s.success('+')} Dependencies installation`,
391
- ` ${s.success('+')} Basic boilerplate code`,
392
- ` ${s.success('+')} Development scripts`,
393
- '',
394
- ` The agent reads your ${s.primary('COMPILR.md')} to understand your tech stack`,
395
- ` and creates an appropriate project structure.`,
396
- '',
397
- ` ${s.muted('When to use: before implementing features, when starting')}`,
398
- ` ${s.muted('from an empty project directory.')}`,
399
- '',
400
- ],
401
- },
402
- {
403
- title: '/build Command',
404
- lines: [
405
- '',
406
- ` ${s.primaryBold('/build')} implements backlog items.`,
407
- '',
408
- ` ${s.secondary('Usage:')}`,
409
- ` ${s.primary('/build')} Pick the highest priority pending item`,
410
- ` ${s.primary('/build REQ-003')} Build a specific item by ID`,
411
- ` ${s.primary('/build scaffold')} Same as /scaffold`,
412
- '',
413
- ` ${s.secondary('The agent will:')}`,
414
- ` ${s.muted('1.')} Read and analyze the requirement`,
415
- ` ${s.muted('2.')} Plan the implementation approach`,
416
- ` ${s.muted('3.')} Write the code (with your approval)`,
417
- ` ${s.muted('4.')} Run tests if available`,
418
- ` ${s.muted('5.')} Update the backlog status to done`,
419
- '',
420
- ],
421
- },
422
- {
423
- title: '/build - Permissions',
424
- lines: [
425
- '',
426
- ` During /build, you'll see permission prompts for:`,
427
- '',
428
- ` ${s.warning('File changes')}`,
429
- ` The AI shows exactly what will be changed`,
430
- ` with a diff view before you approve.`,
431
- '',
432
- ` ${s.warning('Shell commands')}`,
433
- ` Commands like npm install or running tests`,
434
- ` require your explicit approval.`,
435
- '',
436
- ` ${s.secondary('Review carefully before approving!')}`,
437
- ` The AI shows exactly what will happen so you stay in control.`,
438
- '',
439
- ` ${s.muted('Tip: If /build detects an empty project, it will')}`,
440
- ` ${s.muted('suggest running /scaffold first.')}`,
441
- '',
442
- ],
443
- },
444
- ],
445
- },
446
- // =========================================================================
447
- // Topic 6: Configuration
448
- // =========================================================================
449
- {
450
- id: 'config',
451
- name: 'Configuration',
452
- description: 'Settings, keys, and themes',
453
- pages: [
454
- {
455
- title: '/config Command',
456
- lines: [
457
- '',
458
- ` ${s.primaryBold('/config')} opens the settings panel.`,
459
- '',
460
- ` ${s.secondary('Tabs:')}`,
461
- ` ${s.primary('Status')} Version, model, session info`,
462
- ` ${s.primary('Config')} Interactive settings`,
463
- ` ${s.primary('Usage')} Token usage statistics`,
464
- '',
465
- ` ${s.secondary('Settings you can change:')}`,
466
- ` ${s.muted('Model')} Switch AI model/provider`,
467
- ` ${s.muted('Theme')} Choose from 400+ terminal themes`,
468
- ` ${s.muted('Permissions')} Control approval prompts`,
469
- ` ${s.muted('Output')} Verbose or minimal mode`,
470
- ` ${s.muted('Auto-compact')} Automatic context management`,
471
- '',
472
- ],
473
- },
474
- {
475
- title: '/keys Command',
476
- lines: [
477
- '',
478
- ` ${s.primaryBold('/keys')} manages your API keys for LLM providers.`,
479
- '',
480
- ` ${s.secondary('Supported providers:')}`,
481
- ` ${s.primary('Claude')} Anthropic's models (best reasoning)`,
482
- ` ${s.primary('OpenAI')} GPT-4o and other models`,
483
- ` ${s.primary('Gemini')} Google AI models`,
484
- ` ${s.primary('Ollama')} Local models (no API key needed)`,
485
- '',
486
- ` Keys are encrypted and stored locally in:`,
487
- ` ${s.muted('~/.compilr-dev/credentials.enc')}`,
488
- '',
489
- ` ${s.muted('The CLI automatically opens /keys on first run')}`,
490
- ` ${s.muted('if no API key is configured.')}`,
491
- '',
492
- ],
493
- },
494
- ],
495
- },
496
- // =========================================================================
497
- // Topic 7: Working with the Agent
498
- // =========================================================================
499
- {
500
- id: 'agent',
501
- name: 'Working with the Agent',
502
- description: 'Chat, permissions, tips',
503
- pages: [
504
- {
505
- title: 'Chatting with the AI',
506
- lines: [
507
- '',
508
- ` Just type naturally. The AI understands context and can help with:`,
509
- '',
510
- ` ${s.muted('+')} Answering questions about your code`,
511
- ` ${s.muted('+')} Explaining how something works`,
512
- ` ${s.muted('+')} Writing new code or features`,
513
- ` ${s.muted('+')} Debugging issues`,
514
- ` ${s.muted('+')} Refactoring existing code`,
515
- ` ${s.muted('+')} Running commands and tests`,
516
- '',
517
- ` ${s.secondary('File References')}`,
518
- ` Type ${s.primary('@')} to autocomplete file paths.`,
519
- ` Example: ${s.muted('"Fix the bug in @src/utils.ts"')}`,
520
- '',
521
- ` The AI will read the file and understand the context.`,
522
- '',
523
- ],
524
- },
525
- {
526
- title: 'Permissions',
527
- lines: [
528
- '',
529
- ` The agent asks permission before:`,
530
- '',
531
- ` ${s.warning('+')} Modifying or creating files`,
532
- ` ${s.warning('+')} Running shell commands`,
533
- ` ${s.warning('+')} Making git commits`,
534
- '',
535
- ` ${s.secondary('For each action, you can:')}`,
536
- ` ${s.primary('Allow')} Approve this specific action`,
537
- ` ${s.primary('Allow Always')} Auto-approve this tool for the session`,
538
- ` ${s.primary('Deny')} Reject this action`,
539
- '',
540
- ` For file edits, you'll see a diff showing exactly what changes.`,
541
- ` Review carefully - you're always in control.`,
542
- '',
543
- ],
544
- },
545
- {
546
- title: 'Suggestions',
547
- lines: [
548
- '',
549
- ` After completing tasks, the AI suggests next actions.`,
550
- '',
551
- ` ${s.secondary('How it works:')}`,
552
- ` Suggestions appear as ${s.muted('ghost text')} in your input prompt.`,
553
- ` Press ${s.primary('Tab')} to accept the suggestion.`,
554
- ` Or just keep typing to ignore it.`,
555
- '',
556
- ` ${s.secondary('Common suggestions:')}`,
557
- ` ${s.muted('"run the tests"')}`,
558
- ` ${s.muted('"commit the changes"')}`,
559
- ` ${s.muted('"build the next item"')}`,
560
- '',
561
- ` Suggestions help maintain workflow momentum.`,
562
- '',
563
- ],
564
- },
565
- {
566
- title: 'Context Management',
567
- lines: [
568
- '',
569
- ` The AI has a limited context window. When it fills up:`,
570
- '',
571
- ` ${s.primaryBold('/compact')}`,
572
- ` Summarizes old messages to free up space.`,
573
- ` The AI creates a summary and removes old messages.`,
574
- '',
575
- ` ${s.primaryBold('/context')}`,
576
- ` Shows current context usage (tokens used / available).`,
577
- '',
578
- ` ${s.primaryBold('/tokens')}`,
579
- ` Shows token usage statistics for the session.`,
580
- '',
581
- ` ${s.muted('Tip: Auto-compact is enabled by default in settings.')}`,
582
- ` ${s.muted('The AI will automatically summarize when needed.')}`,
583
- '',
584
- ],
585
- },
586
- {
587
- title: 'Anchors - Persistent Context',
588
- lines: [
589
- '',
590
- ` ${s.secondary('Anchors')} are critical pieces of information that survive`,
591
- ` context compaction. They're always included at the top of context.`,
592
- '',
593
- ` ${s.primaryBold('/anchors')}`,
594
- ` View and manage your anchors.`,
595
- ` Add, edit, or remove persistent context.`,
596
- '',
597
- ` ${s.secondary('When to use anchors:')}`,
598
- ` ${s.muted('+')} Project context that must never be forgotten`,
599
- ` ${s.muted('+')} Key architectural decisions`,
600
- ` ${s.muted('+')} User preferences for code style`,
601
- ` ${s.muted('+')} Important constraints or requirements`,
602
- '',
603
- ` ${s.secondary('Scope:')}`,
604
- ` ${s.primary('Global')} - Persists across all projects`,
605
- ` ${s.primary('Project')} - Specific to current project`,
606
- '',
607
- ],
608
- },
609
- ],
610
- },
611
- // =========================================================================
612
- // Topic 8: Tips & Tricks
613
- // =========================================================================
614
- {
615
- id: 'tips',
616
- name: 'Tips & Tricks',
617
- description: 'Shortcuts and best practices',
618
- pages: [
619
- {
620
- title: 'Keyboard Shortcuts',
621
- lines: [
622
- '',
623
- ` ${s.secondary('Input:')}`,
624
- ` ${s.primary('Tab')} Accept suggestion or autocomplete`,
625
- ` ${s.primary('Esc')} Cancel current operation`,
626
- ` ${s.primary('Ctrl+C')} Stop the agent or exit`,
627
- '',
628
- ` ${s.secondary('In Overlays:')}`,
629
- ` ${s.primary('↑/↓')} Navigate options`,
630
- ` ${s.primary('←/→')} Navigate pages or tabs`,
631
- ` ${s.primary('Tab')} Switch tabs (where applicable)`,
632
- ` ${s.primary('Enter')} Confirm selection`,
633
- ` ${s.primary('Esc')} Go back or close`,
634
- '',
635
- ` ${s.secondary('Special:')}`,
636
- ` ${s.primary('@')} Start file autocomplete`,
637
- ` ${s.primary('/')} Start command autocomplete`,
638
- '',
639
- ],
640
- },
641
- {
642
- title: 'Useful Commands',
643
- lines: [
644
- '',
645
- ` ${s.secondary('Information:')}`,
646
- ` ${s.primary('/help')} Full command reference`,
647
- ` ${s.primary('/status')} Version, model, mode info`,
648
- ` ${s.primary('/tools')} List available tools`,
649
- '',
650
- ` ${s.secondary('Session:')}`,
651
- ` ${s.primary('/note')} Create session documentation`,
652
- ` ${s.primary('/export')} Export conversation`,
653
- ` ${s.primary('/clear')} Clear the screen`,
654
- '',
655
- ` ${s.secondary('Mode:')}`,
656
- ` ${s.primary('/plan')} Switch to planning mode`,
657
- ` (focus on design, not implementation)`,
658
- '',
659
- ],
660
- },
661
- {
662
- title: 'Best Practices',
663
- lines: [
664
- '',
665
- ` ${s.primary('1.')} Start with ${s.primaryBold('/new')}, then ${s.primaryBold('/design')} or ${s.primaryBold('/sketch')}`,
666
- ` Don't skip planning - it pays off later.`,
667
- '',
668
- ` ${s.primary('2.')} Keep backlog items small and focused`,
669
- ` Break large features into smaller tasks.`,
670
- '',
671
- ` ${s.primary('3.')} Review AI suggestions before approving`,
672
- ` You're in control - understand what's changing.`,
673
- '',
674
- ` ${s.primary('4.')} Use ${s.primaryBold('/arch')} to document key decisions`,
675
- ` Future you will thank present you.`,
676
- '',
677
- ` ${s.primary('5.')} Try ${s.primaryBold('Ollama')} for offline development`,
678
- ` No API key needed, runs locally.`,
679
- '',
680
- ],
681
- },
682
- ],
683
- },
684
- ];
685
- }
686
- // =============================================================================
687
- // Screens
688
- // =============================================================================
689
- /**
690
- * Welcome screen - shows entry options (guided tour or topic list)
691
- */
692
- class WelcomeScreen extends BaseScreen {
693
- state;
694
- styles;
695
- topics;
696
- selectedIndex = 0;
697
- constructor(state, styles, topics) {
698
- super();
699
- this.state = state;
700
- this.styles = styles;
701
- this.topics = topics;
702
- }
703
- render() {
704
- const s = this.styles;
705
- const cols = terminal.getTerminalWidth();
706
- const border = s.muted('─'.repeat(Math.max(1, cols - 1)));
707
- const lines = [];
708
- lines.push(border);
709
- lines.push(` ${s.primaryBold('compilr.dev Tutorial')}`);
710
- lines.push('');
711
- lines.push(` Learn the AI-powered development workflow that takes you`);
712
- lines.push(` from idea to implementation with structure and discipline.`);
713
- lines.push('');
714
- lines.push(` This tutorial covers: initialization, design, backlog`);
715
- lines.push(` management, building, configuration, and best practices.`);
716
- lines.push('');
717
- lines.push(` ${s.muted('How would you like to explore?')}`);
718
- lines.push('');
719
- const options = [
720
- { label: 'Start Guided Tour', desc: 'Step-by-step walkthrough (recommended)' },
721
- { label: 'Jump to Topic', desc: 'Go directly to a specific topic' },
722
- ];
723
- for (let i = 0; i < options.length; i++) {
724
- const opt = options[i];
725
- const selected = i === this.selectedIndex;
726
- const prefix = selected ? s.primary(' ❯ ') : ' ';
727
- const label = selected ? s.primary(opt.label) : opt.label;
728
- const desc = s.muted(opt.desc);
729
- lines.push(`${prefix}${label.padEnd(22)} ${desc}`);
730
- }
731
- lines.push('');
732
- lines.push(border);
733
- lines.push(s.muted(' ↑↓/jk Navigate · Enter Select · q/Esc Exit'));
734
- return lines;
735
- }
736
- handleKey(data) {
737
- // Close keys
738
- if (isCtrlC(data) || isClose(data)) {
739
- return closeOverlay({ completed: false });
740
- }
741
- // Navigation
742
- if (isNavigateUp(data) && this.selectedIndex > 0) {
743
- this.selectedIndex--;
744
- return stay();
745
- }
746
- if (isNavigateDown(data) && this.selectedIndex < 1) {
747
- this.selectedIndex++;
748
- return stay();
749
- }
750
- // Enter - select option
751
- if (isEnter(data)) {
752
- if (this.selectedIndex === 0) {
753
- // Guided mode
754
- this.state.isGuidedMode = true;
755
- this.state.currentTopicIndex = 0;
756
- this.state.currentPageIndex = 0;
757
- return pushScreen(new ViewingScreen(this.state, this.styles, this.topics));
758
- }
759
- else {
760
- // Topic list mode
761
- return pushScreen(new TopicListScreen(this.state, this.styles, this.topics));
762
- }
763
- }
764
- return stay(false);
765
- }
766
- }
767
- /**
768
- * Topic list screen - shows all topics to choose from
769
- */
770
- class TopicListScreen extends BaseScreen {
771
- state;
772
- styles;
773
- topics;
774
- constructor(state, styles, topics) {
775
- super();
776
- this.state = state;
777
- this.styles = styles;
778
- this.topics = topics;
779
- }
780
- render() {
781
- const s = this.styles;
782
- const cols = terminal.getTerminalWidth();
783
- const border = s.muted('─'.repeat(Math.max(1, cols - 1)));
784
- const lines = [];
785
- lines.push(border);
786
- lines.push(` ${s.primaryBold('Tutorial Topics')}`);
787
- lines.push('');
788
- for (let i = 0; i < this.topics.length; i++) {
789
- const topic = this.topics[i];
790
- const selected = i === this.state.topicListIndex;
791
- const prefix = selected ? s.primary(' ❯ ') : ' ';
792
- const name = selected ? s.primary(topic.name) : topic.name;
793
- const desc = s.muted(topic.description);
794
- const pages = s.muted(`(${String(topic.pages.length)} ${topic.pages.length === 1 ? 'page' : 'pages'})`);
795
- lines.push(`${prefix}${name.padEnd(26)} ${desc.padEnd(30)} ${pages}`);
796
- }
797
- lines.push('');
798
- lines.push(border);
799
- lines.push(s.muted(' ↑↓/jk Navigate · Enter View · q/Esc Close'));
800
- return lines;
801
- }
802
- handleKey(data) {
803
- // Ctrl+C or q closes overlay
804
- if (isCtrlC(data)) {
805
- return closeOverlay({ completed: false });
806
- }
807
- // Escape goes back to welcome
808
- if (isEscape(data)) {
809
- return popScreen();
810
- }
811
- // Navigation
812
- if (isNavigateUp(data) && this.state.topicListIndex > 0) {
813
- this.state.topicListIndex--;
814
- return stay();
815
- }
816
- if (isNavigateDown(data) && this.state.topicListIndex < this.topics.length - 1) {
817
- this.state.topicListIndex++;
818
- return stay();
819
- }
820
- // Enter - view topic
821
- if (isEnter(data)) {
822
- this.state.isGuidedMode = false;
823
- this.state.currentTopicIndex = this.state.topicListIndex;
824
- this.state.currentPageIndex = 0;
825
- return pushScreen(new ViewingScreen(this.state, this.styles, this.topics));
826
- }
827
- return stay(false);
828
- }
829
- }
830
- /**
831
- * Viewing screen - shows a page from a topic with navigation
832
- */
833
- class ViewingScreen extends BaseScreen {
834
- state;
835
- styles;
836
- topics;
837
- constructor(state, styles, topics) {
838
- super();
839
- this.state = state;
840
- this.styles = styles;
841
- this.topics = topics;
842
- }
843
- render() {
844
- const s = this.styles;
845
- const cols = terminal.getTerminalWidth();
846
- const border = s.muted('─'.repeat(Math.max(1, cols - 1)));
847
- const lines = [];
848
- const topic = this.topics[this.state.currentTopicIndex];
849
- const page = topic.pages[this.state.currentPageIndex];
850
- const totalPages = topic.pages.length;
851
- // Calculate overall progress for guided mode
852
- let progressText = `[${String(this.state.currentPageIndex + 1)}/${String(totalPages)}]`;
853
- if (this.state.isGuidedMode) {
854
- let totalPagesAll = 0;
855
- let currentPageAll = 0;
856
- for (let i = 0; i < this.topics.length; i++) {
857
- if (i < this.state.currentTopicIndex) {
858
- currentPageAll += this.topics[i].pages.length;
859
- }
860
- else if (i === this.state.currentTopicIndex) {
861
- currentPageAll += this.state.currentPageIndex + 1;
862
- }
863
- totalPagesAll += this.topics[i].pages.length;
864
- }
865
- progressText = `[${String(currentPageAll)}/${String(totalPagesAll)}]`;
866
- }
867
- // Header - calculate padding to right-align progress indicator
868
- const titleStyled = s.primaryBold(page.title);
869
- const progressStyled = s.muted(progressText);
870
- const titleLen = stripAnsi(titleStyled).length + 1; // +1 for leading space
871
- const progressLen = stripAnsi(progressStyled).length;
872
- const padding = Math.max(1, cols - titleLen - progressLen - 2); // -2 for margins
873
- lines.push(border);
874
- lines.push(` ${titleStyled}${' '.repeat(padding)}${progressStyled}`);
875
- lines.push('');
876
- // Content
877
- for (const line of page.lines) {
878
- lines.push(line);
879
- }
880
- // Pad to consistent height
881
- while (lines.length < 20) {
882
- lines.push('');
883
- }
884
- // Navigation footer
885
- lines.push(border);
886
- if (this.state.isGuidedMode) {
887
- lines.push(s.muted(' ←/→/hl Navigate · Esc Exit Tour'));
888
- }
889
- else {
890
- lines.push(s.muted(' ←/→/hl Navigate · Esc Back to Topics'));
891
- }
892
- return lines;
893
- }
894
- handleKey(data) {
895
- // Ctrl+C closes overlay
896
- if (isCtrlC(data)) {
897
- return closeOverlay({ completed: false });
898
- }
899
- const topic = this.topics[this.state.currentTopicIndex];
900
- const totalPages = topic.pages.length;
901
- // Escape goes back
902
- if (isEscape(data)) {
903
- return popScreen();
904
- }
905
- // Previous page (left arrow, h, or backspace)
906
- if (isLeftArrow(data) || isVimLeft(data) || isBackspace(data)) {
907
- if (this.state.currentPageIndex > 0) {
908
- this.state.currentPageIndex--;
909
- return stay();
910
- }
911
- else if (this.state.isGuidedMode && this.state.currentTopicIndex > 0) {
912
- this.state.currentTopicIndex--;
913
- this.state.currentPageIndex = this.topics[this.state.currentTopicIndex].pages.length - 1;
914
- return stay();
915
- }
916
- return stay(false);
917
- }
918
- // Next page (right arrow, l, or enter)
919
- if (isRightArrow(data) || isVimRight(data) || isEnter(data)) {
920
- if (this.state.currentPageIndex < totalPages - 1) {
921
- this.state.currentPageIndex++;
922
- return stay();
923
- }
924
- else if (this.state.isGuidedMode) {
925
- if (this.state.currentTopicIndex < this.topics.length - 1) {
926
- this.state.currentTopicIndex++;
927
- this.state.currentPageIndex = 0;
928
- return stay();
929
- }
930
- else {
931
- // End of guided tour - show complete screen
932
- return pushScreen(new CompleteScreen(this.styles));
933
- }
934
- }
935
- return stay(false);
936
- }
937
- return stay(false);
938
- }
939
- }
940
- /**
941
- * Complete screen - shows completion message
942
- */
943
- class CompleteScreen extends BaseScreen {
944
- styles;
945
- constructor(styles) {
946
- super();
947
- this.styles = styles;
948
- }
949
- render() {
950
- const s = this.styles;
951
- const cols = terminal.getTerminalWidth();
952
- const border = s.muted('─'.repeat(Math.max(1, cols - 1)));
953
- const lines = [];
954
- lines.push(border);
955
- lines.push(` ${s.success('Tutorial Complete!')}`);
956
- lines.push('');
957
- lines.push(` You've learned the compilr.dev workflow!`);
958
- lines.push('');
959
- lines.push(` ${s.secondary('Key commands to remember:')}`);
960
- lines.push('');
961
- lines.push(` ${s.primary('/new')} Start a new project`);
962
- lines.push(` ${s.primary('/design')} Plan your requirements`);
963
- lines.push(` ${s.primary('/backlog')} Manage your work items`);
964
- lines.push(` ${s.primary('/build')} Implement features`);
965
- lines.push(` ${s.primary('/help')} See all commands`);
966
- lines.push('');
967
- lines.push(` ${s.secondary('Ready to start?')}`);
968
- lines.push(` Try ${s.primary('/new')} in a new directory!`);
969
- lines.push('');
970
- lines.push(border);
971
- lines.push(s.muted(' Press any key to exit...'));
972
- return lines;
973
- }
974
- handleKey(_data) {
975
- // Any key closes the overlay with completed = true
976
- return closeOverlay({ completed: true });
977
- }
978
- }
979
- // =============================================================================
980
- // Overlay Class
981
- // =============================================================================
982
- class TutorialOverlay extends BaseOverlay {
983
- screenStack;
984
- topics;
985
- constructor() {
986
- super({
987
- lineCount: 0,
988
- maxLineCount: 0,
989
- topicListIndex: 0,
990
- currentTopicIndex: 0,
991
- currentPageIndex: 0,
992
- isGuidedMode: false,
993
- });
994
- this.topics = buildTopics(this.styles);
995
- this.screenStack = new ScreenStack();
996
- this.screenStack.push(new WelcomeScreen(this.state, this.styles, this.topics));
997
- }
998
- render() {
999
- const screen = this.screenStack.current();
1000
- return screen?.render() ?? [];
1001
- }
1002
- handleKey(data) {
1003
- const screen = this.screenStack.current();
1004
- if (!screen) {
1005
- this.close({ completed: false });
1006
- return;
1007
- }
1008
- const result = screen.handleKey(data);
1009
- switch (result.action) {
1010
- case 'stay':
1011
- if (result.render) {
1012
- this.update();
1013
- }
1014
- break;
1015
- case 'push':
1016
- this.screenStack.push(result.screen);
1017
- this.update();
1018
- break;
1019
- case 'pop':
1020
- this.screenStack.pop();
1021
- this.update();
1022
- break;
1023
- case 'close':
1024
- this.close(result.result);
1025
- break;
1026
- }
1027
- }
1028
- }
1029
- // =============================================================================
1030
- // Export Function (Backward Compatible)
1031
- // =============================================================================
1032
- export async function showTutorialOverlay() {
1033
- return new TutorialOverlay().show();
1034
- }