@compilr-dev/cli 0.5.0 → 0.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (587) hide show
  1. package/LICENSE +108 -0
  2. package/README.md +237 -69
  3. package/dist/.tsbuildinfo.app +1 -0
  4. package/dist/.tsbuildinfo.data +1 -0
  5. package/dist/.tsbuildinfo.domain +1 -0
  6. package/dist/.tsbuildinfo.foundation +1 -0
  7. package/dist/agent.d.ts +61 -4
  8. package/dist/agent.js +241 -245
  9. package/dist/anchors/index.d.ts +1 -1
  10. package/dist/anchors/index.js +1 -1
  11. package/dist/anchors/project-anchors.d.ts +2 -2
  12. package/dist/anchors/project-anchors.js +1 -1
  13. package/dist/auth/api-client.d.ts +124 -0
  14. package/dist/auth/api-client.js +261 -0
  15. package/dist/auth/index.d.ts +172 -0
  16. package/dist/auth/index.js +545 -0
  17. package/dist/auth/storage.d.ts +52 -0
  18. package/dist/auth/storage.js +118 -0
  19. package/dist/changelog/index.d.ts +16 -0
  20. package/dist/changelog/index.js +24 -0
  21. package/dist/changelog/releases.d.ts +17 -0
  22. package/dist/changelog/releases.js +63 -0
  23. package/dist/commands-v2/handlers/auth.d.ts +10 -0
  24. package/dist/commands-v2/handlers/auth.js +118 -0
  25. package/dist/commands-v2/handlers/background.d.ts +14 -0
  26. package/dist/commands-v2/handlers/background.js +276 -0
  27. package/dist/commands-v2/handlers/context.js +286 -81
  28. package/dist/commands-v2/handlers/core.d.ts +1 -0
  29. package/dist/commands-v2/handlers/core.js +133 -8
  30. package/dist/commands-v2/handlers/debug.js +18 -0
  31. package/dist/commands-v2/handlers/delegations.d.ts +8 -0
  32. package/dist/commands-v2/handlers/delegations.js +29 -0
  33. package/dist/commands-v2/handlers/files.d.ts +8 -0
  34. package/dist/commands-v2/handlers/files.js +162 -0
  35. package/dist/commands-v2/handlers/filter.d.ts +9 -0
  36. package/dist/commands-v2/handlers/filter.js +130 -0
  37. package/dist/commands-v2/handlers/games.d.ts +7 -0
  38. package/dist/commands-v2/handlers/games.js +57 -0
  39. package/dist/commands-v2/handlers/index.d.ts +13 -0
  40. package/dist/commands-v2/handlers/index.js +39 -0
  41. package/dist/commands-v2/handlers/mcp.d.ts +8 -0
  42. package/dist/commands-v2/handlers/mcp.js +39 -0
  43. package/dist/commands-v2/handlers/notifications.d.ts +9 -0
  44. package/dist/commands-v2/handlers/notifications.js +34 -0
  45. package/dist/commands-v2/handlers/project.js +295 -31
  46. package/dist/commands-v2/handlers/reset.d.ts +11 -0
  47. package/dist/commands-v2/handlers/reset.js +118 -0
  48. package/dist/commands-v2/handlers/session.d.ts +161 -0
  49. package/dist/commands-v2/handlers/session.js +805 -0
  50. package/dist/commands-v2/handlers/settings.d.ts +2 -0
  51. package/dist/commands-v2/handlers/settings.js +217 -35
  52. package/dist/commands-v2/handlers/tasks.d.ts +5 -0
  53. package/dist/commands-v2/handlers/tasks.js +36 -0
  54. package/dist/commands-v2/handlers/team.d.ts +9 -0
  55. package/dist/commands-v2/handlers/team.js +549 -0
  56. package/dist/commands-v2/handlers/terminals.d.ts +9 -0
  57. package/dist/commands-v2/handlers/terminals.js +34 -0
  58. package/dist/commands-v2/index.d.ts +3 -2
  59. package/dist/commands-v2/index.js +4 -1
  60. package/dist/commands-v2/registry.d.ts +15 -0
  61. package/dist/commands-v2/registry.js +34 -0
  62. package/dist/commands-v2/types.d.ts +81 -3
  63. package/dist/commands.js +13 -0
  64. package/dist/compilr-diff-companion.vsix +0 -0
  65. package/dist/db/index.js +98 -4
  66. package/dist/db/repositories/document-repository.d.ts +2 -0
  67. package/dist/db/repositories/document-repository.js +6 -1
  68. package/dist/db/repositories/index.d.ts +2 -0
  69. package/dist/db/repositories/index.js +1 -0
  70. package/dist/db/repositories/plan-repository.d.ts +101 -0
  71. package/dist/db/repositories/plan-repository.js +275 -0
  72. package/dist/db/repositories/project-repository.d.ts +6 -0
  73. package/dist/db/repositories/project-repository.js +41 -0
  74. package/dist/db/repositories/work-item-repository.d.ts +15 -0
  75. package/dist/db/repositories/work-item-repository.js +69 -4
  76. package/dist/db/schema.d.ts +40 -3
  77. package/dist/db/schema.js +66 -3
  78. package/dist/episodes/index.d.ts +20 -0
  79. package/dist/episodes/index.js +27 -0
  80. package/dist/episodes/recorder.d.ts +51 -0
  81. package/dist/episodes/recorder.js +195 -0
  82. package/dist/episodes/significant-work.d.ts +21 -0
  83. package/dist/episodes/significant-work.js +56 -0
  84. package/dist/episodes/store.d.ts +38 -0
  85. package/dist/episodes/store.js +199 -0
  86. package/dist/episodes/types.d.ts +35 -0
  87. package/dist/episodes/types.js +6 -0
  88. package/dist/episodes/work-at-risk.d.ts +12 -0
  89. package/dist/episodes/work-at-risk.js +38 -0
  90. package/dist/episodes/work-summary-anchor.d.ts +23 -0
  91. package/dist/episodes/work-summary-anchor.js +73 -0
  92. package/dist/games/coins.d.ts +66 -0
  93. package/dist/games/coins.js +165 -0
  94. package/dist/games/game-base.d.ts +84 -0
  95. package/dist/games/game-base.js +204 -0
  96. package/dist/games/index.d.ts +16 -0
  97. package/dist/games/index.js +49 -0
  98. package/dist/games/scores.d.ts +69 -0
  99. package/dist/games/scores.js +191 -0
  100. package/dist/games/tetris/board.d.ts +59 -0
  101. package/dist/games/tetris/board.js +170 -0
  102. package/dist/games/tetris/index.d.ts +109 -0
  103. package/dist/games/tetris/index.js +610 -0
  104. package/dist/games/tetris/pieces.d.ts +44 -0
  105. package/dist/games/tetris/pieces.js +271 -0
  106. package/dist/games/tetris/renderer.d.ts +26 -0
  107. package/dist/games/tetris/renderer.js +77 -0
  108. package/dist/guide/guide-content.d.ts +23 -0
  109. package/dist/guide/guide-content.js +196 -0
  110. package/dist/guide/index.d.ts +8 -0
  111. package/dist/guide/index.js +7 -0
  112. package/dist/guide/shared-content.d.ts +37 -0
  113. package/dist/guide/shared-content.js +1272 -0
  114. package/dist/guide/tutorial-helpers.d.ts +57 -0
  115. package/dist/guide/tutorial-helpers.js +147 -0
  116. package/dist/handlers/ask-user-handlers.d.ts +32 -0
  117. package/dist/handlers/ask-user-handlers.js +104 -0
  118. package/dist/handlers/delegation-handlers.d.ts +34 -0
  119. package/dist/handlers/delegation-handlers.js +291 -0
  120. package/dist/handlers/permission-handler.d.ts +30 -0
  121. package/dist/handlers/permission-handler.js +205 -0
  122. package/dist/index.d.ts +11 -1
  123. package/dist/index.js +448 -271
  124. package/dist/input-handlers/memory-handler.d.ts +1 -1
  125. package/dist/input-handlers/memory-handler.js +2 -1
  126. package/dist/models/index.d.ts +10 -0
  127. package/dist/models/index.js +12 -0
  128. package/dist/models/model-registry.d.ts +38 -0
  129. package/dist/models/model-registry.js +69 -0
  130. package/dist/models/model-tiers.d.ts +28 -0
  131. package/dist/models/model-tiers.js +71 -0
  132. package/dist/models/model-validation.d.ts +25 -0
  133. package/dist/models/model-validation.js +291 -0
  134. package/dist/models/ollama-models.d.ts +73 -0
  135. package/dist/models/ollama-models.js +178 -0
  136. package/dist/models/provider-types.d.ts +6 -0
  137. package/dist/models/provider-types.js +1 -0
  138. package/dist/models/providers.d.ts +35 -0
  139. package/dist/models/providers.js +58 -0
  140. package/dist/models/types.d.ts +4 -0
  141. package/dist/models/types.js +4 -0
  142. package/dist/multi-agent/activity.d.ts +21 -0
  143. package/dist/multi-agent/activity.js +34 -0
  144. package/dist/multi-agent/agent-selection.d.ts +55 -0
  145. package/dist/multi-agent/agent-selection.js +90 -0
  146. package/dist/multi-agent/artifacts.d.ts +197 -0
  147. package/dist/multi-agent/artifacts.js +379 -0
  148. package/dist/multi-agent/checkpointer.d.ts +138 -0
  149. package/dist/multi-agent/checkpointer.js +471 -0
  150. package/dist/multi-agent/collision-utils.d.ts +16 -0
  151. package/dist/multi-agent/collision-utils.js +28 -0
  152. package/dist/multi-agent/context-resolver.d.ts +97 -0
  153. package/dist/multi-agent/context-resolver.js +316 -0
  154. package/dist/multi-agent/custom-agents.d.ts +83 -0
  155. package/dist/multi-agent/custom-agents.js +227 -0
  156. package/dist/multi-agent/delegation-tracker.d.ts +157 -0
  157. package/dist/multi-agent/delegation-tracker.js +243 -0
  158. package/dist/multi-agent/file-lock-hook.d.ts +29 -0
  159. package/dist/multi-agent/file-lock-hook.js +97 -0
  160. package/dist/multi-agent/file-locks.d.ts +58 -0
  161. package/dist/multi-agent/file-locks.js +194 -0
  162. package/dist/multi-agent/index.d.ts +24 -0
  163. package/dist/multi-agent/index.js +30 -0
  164. package/dist/multi-agent/mention-parser.d.ts +64 -0
  165. package/dist/multi-agent/mention-parser.js +146 -0
  166. package/dist/multi-agent/notification-manager.d.ts +84 -0
  167. package/dist/multi-agent/notification-manager.js +224 -0
  168. package/dist/multi-agent/pending-requests.d.ts +122 -0
  169. package/dist/multi-agent/pending-requests.js +155 -0
  170. package/dist/multi-agent/session-registry.d.ts +139 -0
  171. package/dist/multi-agent/session-registry.js +514 -0
  172. package/dist/multi-agent/shared-context.d.ts +293 -0
  173. package/dist/multi-agent/shared-context.js +671 -0
  174. package/dist/multi-agent/skill-requirements.d.ts +66 -0
  175. package/dist/multi-agent/skill-requirements.js +178 -0
  176. package/dist/multi-agent/task-assignment.d.ts +69 -0
  177. package/dist/multi-agent/task-assignment.js +123 -0
  178. package/dist/multi-agent/task-suggestion.d.ts +31 -0
  179. package/dist/multi-agent/task-suggestion.js +72 -0
  180. package/dist/multi-agent/team-agent.d.ts +201 -0
  181. package/dist/multi-agent/team-agent.js +488 -0
  182. package/dist/multi-agent/team.d.ts +286 -0
  183. package/dist/multi-agent/team.js +610 -0
  184. package/dist/multi-agent/tool-config.d.ts +110 -0
  185. package/dist/multi-agent/tool-config.js +661 -0
  186. package/dist/multi-agent/types.d.ts +211 -0
  187. package/dist/multi-agent/types.js +617 -0
  188. package/dist/prompts/plan-mode-prompt.d.ts +11 -0
  189. package/dist/prompts/plan-mode-prompt.js +95 -0
  190. package/dist/repl-helpers.js +5 -2
  191. package/dist/repl-v2.d.ts +401 -2
  192. package/dist/repl-v2.js +2588 -65
  193. package/dist/session/index.d.ts +6 -0
  194. package/dist/session/index.js +6 -0
  195. package/dist/session/project-session-manager.d.ts +158 -0
  196. package/dist/session/project-session-manager.js +650 -0
  197. package/dist/settings/index.d.ts +133 -13
  198. package/dist/settings/index.js +329 -24
  199. package/dist/settings/mcp-config.d.ts +76 -0
  200. package/dist/settings/mcp-config.js +143 -0
  201. package/dist/settings/paths.d.ts +4 -0
  202. package/dist/settings/paths.js +6 -0
  203. package/dist/shared-handlers.d.ts +62 -0
  204. package/dist/shared-handlers.js +48 -0
  205. package/dist/system-prompt/builder.d.ts +5 -0
  206. package/dist/system-prompt/builder.js +4 -0
  207. package/dist/system-prompt/index.d.ts +18 -0
  208. package/dist/system-prompt/index.js +18 -0
  209. package/dist/system-prompt/modules.d.ts +5 -0
  210. package/dist/system-prompt/modules.js +4 -0
  211. package/dist/tabbed-menu.js +2 -1
  212. package/dist/templates/compilr-md-import.d.ts +16 -0
  213. package/dist/templates/compilr-md-import.js +241 -0
  214. package/dist/templates/compilr-md.js +10 -61
  215. package/dist/templates/config-json.d.ts +1 -25
  216. package/dist/templates/index.d.ts +2 -0
  217. package/dist/templates/index.js +34 -73
  218. package/dist/tool-names.d.ts +113 -0
  219. package/dist/tool-names.js +239 -0
  220. package/dist/tools/ask-user-simple.d.ts +1 -1
  221. package/dist/tools/ask-user-simple.js +2 -1
  222. package/dist/tools/ask-user.d.ts +1 -1
  223. package/dist/tools/ask-user.js +2 -1
  224. package/dist/tools/backlog.d.ts +2 -2
  225. package/dist/tools/backlog.js +1 -1
  226. package/dist/tools/db-tools.d.ts +13 -61
  227. package/dist/tools/db-tools.js +12 -13
  228. package/dist/tools/delegate-background.d.ts +27 -0
  229. package/dist/tools/delegate-background.js +115 -0
  230. package/dist/tools/delegate.d.ts +22 -0
  231. package/dist/tools/delegate.js +97 -0
  232. package/dist/tools/delegation-status.d.ts +16 -0
  233. package/dist/tools/delegation-status.js +128 -0
  234. package/dist/tools/guide-tool.d.ts +12 -0
  235. package/dist/tools/guide-tool.js +59 -0
  236. package/dist/tools/handoff.d.ts +25 -0
  237. package/dist/tools/handoff.js +99 -0
  238. package/dist/tools/meta-tools.d.ts +26 -0
  239. package/dist/tools/meta-tools.js +47 -0
  240. package/dist/tools/platform-adapter.d.ts +35 -0
  241. package/dist/tools/platform-adapter.js +404 -0
  242. package/dist/tools/project-db.d.ts +5 -73
  243. package/dist/tools/project-db.js +5 -336
  244. package/dist/tools.d.ts +67 -2
  245. package/dist/tools.js +240 -48
  246. package/dist/ui/autocomplete-controller.d.ts +42 -0
  247. package/dist/ui/autocomplete-controller.js +384 -0
  248. package/dist/ui/base/index.d.ts +1 -1
  249. package/dist/ui/base/index.js +1 -1
  250. package/dist/ui/base/overlay-base-v2.d.ts +10 -0
  251. package/dist/ui/base/overlay-base-v2.js +14 -0
  252. package/dist/ui/base/render-utils.d.ts +19 -0
  253. package/dist/ui/base/render-utils.js +25 -0
  254. package/dist/ui/base/tabbed-list-overlay-v2.d.ts +16 -1
  255. package/dist/ui/base/tabbed-list-overlay-v2.js +19 -1
  256. package/dist/ui/constants/labels.d.ts +14 -0
  257. package/dist/ui/constants/labels.js +52 -0
  258. package/dist/ui/conversation-store.d.ts +55 -0
  259. package/dist/ui/conversation-store.js +107 -0
  260. package/dist/ui/conversation.js +11 -13
  261. package/dist/ui/diff.d.ts +7 -1
  262. package/dist/ui/diff.js +85 -48
  263. package/dist/ui/ephemeral.js +3 -9
  264. package/dist/ui/file-autocomplete.d.ts +24 -0
  265. package/dist/ui/file-autocomplete.js +56 -0
  266. package/dist/ui/footer-renderer.d.ts +69 -0
  267. package/dist/ui/footer-renderer.js +431 -0
  268. package/dist/ui/footer.d.ts +74 -7
  269. package/dist/ui/footer.js +173 -16
  270. package/dist/ui/input-controller.d.ts +51 -0
  271. package/dist/ui/input-controller.js +176 -0
  272. package/dist/ui/input-prompt.d.ts +19 -0
  273. package/dist/ui/input-prompt.js +206 -14
  274. package/dist/ui/keyboard-handler.d.ts +57 -0
  275. package/dist/ui/keyboard-handler.js +557 -0
  276. package/dist/ui/live-region-facade.d.ts +42 -0
  277. package/dist/ui/live-region-facade.js +205 -0
  278. package/dist/ui/live-region.d.ts +0 -4
  279. package/dist/ui/live-region.js +6 -14
  280. package/dist/ui/mascot/renderer.d.ts +1 -1
  281. package/dist/ui/mascot/renderer.js +37 -2
  282. package/dist/ui/overlay/data/tutorial-content.d.ts +9 -0
  283. package/dist/ui/overlay/data/tutorial-content.js +9 -0
  284. package/dist/ui/overlay/data/tutorial-registry.d.ts +12 -0
  285. package/dist/ui/overlay/data/tutorial-registry.js +116 -0
  286. package/dist/ui/overlay/data/tutorial-types.d.ts +35 -0
  287. package/dist/ui/overlay/data/tutorial-types.js +6 -0
  288. package/dist/ui/overlay/data/tutorials/basics/first-conversation.d.ts +7 -0
  289. package/dist/ui/overlay/data/tutorials/basics/first-conversation.js +220 -0
  290. package/dist/ui/overlay/data/tutorials/basics/first-project.d.ts +7 -0
  291. package/dist/ui/overlay/data/tutorials/basics/first-project.js +284 -0
  292. package/dist/ui/overlay/data/tutorials/basics/navigation.d.ts +8 -0
  293. package/dist/ui/overlay/data/tutorials/basics/navigation.js +22 -0
  294. package/dist/ui/overlay/data/tutorials/basics/welcome.d.ts +7 -0
  295. package/dist/ui/overlay/data/tutorials/basics/welcome.js +174 -0
  296. package/dist/ui/overlay/data/tutorials/config/context-management.d.ts +7 -0
  297. package/dist/ui/overlay/data/tutorials/config/context-management.js +158 -0
  298. package/dist/ui/overlay/data/tutorials/config/mcp-servers.d.ts +8 -0
  299. package/dist/ui/overlay/data/tutorials/config/mcp-servers.js +155 -0
  300. package/dist/ui/overlay/data/tutorials/config/model-selection.d.ts +7 -0
  301. package/dist/ui/overlay/data/tutorials/config/model-selection.js +162 -0
  302. package/dist/ui/overlay/data/tutorials/config/permissions-safety.d.ts +7 -0
  303. package/dist/ui/overlay/data/tutorials/config/permissions-safety.js +163 -0
  304. package/dist/ui/overlay/data/tutorials/config/settings-config.d.ts +7 -0
  305. package/dist/ui/overlay/data/tutorials/config/settings-config.js +166 -0
  306. package/dist/ui/overlay/data/tutorials/planning/arch.d.ts +7 -0
  307. package/dist/ui/overlay/data/tutorials/planning/arch.js +168 -0
  308. package/dist/ui/overlay/data/tutorials/planning/backlog.d.ts +7 -0
  309. package/dist/ui/overlay/data/tutorials/planning/backlog.js +103 -0
  310. package/dist/ui/overlay/data/tutorials/planning/build.d.ts +7 -0
  311. package/dist/ui/overlay/data/tutorials/planning/build.js +173 -0
  312. package/dist/ui/overlay/data/tutorials/planning/design.d.ts +7 -0
  313. package/dist/ui/overlay/data/tutorials/planning/design.js +205 -0
  314. package/dist/ui/overlay/data/tutorials/planning/docs.d.ts +7 -0
  315. package/dist/ui/overlay/data/tutorials/planning/docs.js +143 -0
  316. package/dist/ui/overlay/data/tutorials/planning/prd.d.ts +7 -0
  317. package/dist/ui/overlay/data/tutorials/planning/prd.js +173 -0
  318. package/dist/ui/overlay/data/tutorials/planning/scaffold.d.ts +7 -0
  319. package/dist/ui/overlay/data/tutorials/planning/scaffold.js +164 -0
  320. package/dist/ui/overlay/data/tutorials/planning/sketch.d.ts +7 -0
  321. package/dist/ui/overlay/data/tutorials/planning/sketch.js +58 -0
  322. package/dist/ui/overlay/data/tutorials/projects/anchors.d.ts +7 -0
  323. package/dist/ui/overlay/data/tutorials/projects/anchors.js +248 -0
  324. package/dist/ui/overlay/data/tutorials/projects/import-project.d.ts +7 -0
  325. package/dist/ui/overlay/data/tutorials/projects/import-project.js +172 -0
  326. package/dist/ui/overlay/data/tutorials/projects/managing-projects.d.ts +8 -0
  327. package/dist/ui/overlay/data/tutorials/projects/managing-projects.js +212 -0
  328. package/dist/ui/overlay/data/tutorials/projects/new-project.d.ts +7 -0
  329. package/dist/ui/overlay/data/tutorials/projects/new-project.js +251 -0
  330. package/dist/ui/overlay/data/tutorials/projects/session-management.d.ts +7 -0
  331. package/dist/ui/overlay/data/tutorials/projects/session-management.js +169 -0
  332. package/dist/ui/overlay/data/tutorials/teams/background-execution.d.ts +7 -0
  333. package/dist/ui/overlay/data/tutorials/teams/background-execution.js +171 -0
  334. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.d.ts +8 -0
  335. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.js +147 -0
  336. package/dist/ui/overlay/data/tutorials/teams/task-assignment.d.ts +7 -0
  337. package/dist/ui/overlay/data/tutorials/teams/task-assignment.js +204 -0
  338. package/dist/ui/overlay/data/tutorials/teams/team-overview.d.ts +7 -0
  339. package/dist/ui/overlay/data/tutorials/teams/team-overview.js +165 -0
  340. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.d.ts +7 -0
  341. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.js +172 -0
  342. package/dist/ui/overlay/impl/agents-overlay-v2.js +6 -17
  343. package/dist/ui/overlay/impl/anchors-overlay-v2.js +30 -64
  344. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.d.ts +43 -0
  345. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.js +232 -0
  346. package/dist/ui/overlay/impl/artifact-overlay-v2.d.ts +40 -0
  347. package/dist/ui/overlay/impl/artifact-overlay-v2.js +115 -0
  348. package/dist/ui/overlay/impl/ask-user-overlay-v2.js +2 -5
  349. package/dist/ui/overlay/impl/background-overlay-v2.d.ts +40 -0
  350. package/dist/ui/overlay/impl/background-overlay-v2.js +147 -0
  351. package/dist/ui/overlay/impl/backlog-overlay-v2.d.ts +4 -1
  352. package/dist/ui/overlay/impl/backlog-overlay-v2.js +55 -16
  353. package/dist/ui/overlay/impl/changelog-overlay-v2.d.ts +44 -0
  354. package/dist/ui/overlay/impl/changelog-overlay-v2.js +165 -0
  355. package/dist/ui/overlay/impl/commands-overlay-v2.js +4 -6
  356. package/dist/ui/overlay/impl/config-overlay-v2.d.ts +12 -1
  357. package/dist/ui/overlay/impl/config-overlay-v2.js +164 -100
  358. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.d.ts +83 -0
  359. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.js +711 -0
  360. package/dist/ui/overlay/impl/dashboard-overlay-v2.d.ts +2 -0
  361. package/dist/ui/overlay/impl/dashboard-overlay-v2.js +26 -3
  362. package/dist/ui/overlay/impl/delegations-overlay-v2.d.ts +28 -0
  363. package/dist/ui/overlay/impl/delegations-overlay-v2.js +279 -0
  364. package/dist/ui/overlay/impl/docs-overlay-v2.js +12 -9
  365. package/dist/ui/overlay/impl/document-detail-overlay-v2.d.ts +7 -0
  366. package/dist/ui/overlay/impl/document-detail-overlay-v2.js +119 -78
  367. package/dist/ui/overlay/impl/filter-overlay-v2.d.ts +41 -0
  368. package/dist/ui/overlay/impl/filter-overlay-v2.js +110 -0
  369. package/dist/ui/overlay/impl/games-overlay-v2.d.ts +31 -0
  370. package/dist/ui/overlay/impl/games-overlay-v2.js +135 -0
  371. package/dist/ui/overlay/impl/help-overlay-v2.d.ts +26 -3
  372. package/dist/ui/overlay/impl/help-overlay-v2.js +20 -42
  373. package/dist/ui/overlay/impl/login-overlay-v2.d.ts +49 -0
  374. package/dist/ui/overlay/impl/login-overlay-v2.js +277 -0
  375. package/dist/ui/overlay/impl/mcp-overlay-v2.d.ts +63 -0
  376. package/dist/ui/overlay/impl/mcp-overlay-v2.js +907 -0
  377. package/dist/ui/overlay/impl/model-overlay-v2.d.ts +57 -13
  378. package/dist/ui/overlay/impl/model-overlay-v2.js +1086 -61
  379. package/dist/ui/overlay/impl/new-overlay-v2.d.ts +37 -6
  380. package/dist/ui/overlay/impl/new-overlay-v2.js +715 -65
  381. package/dist/ui/overlay/impl/notifications-overlay-v2.d.ts +20 -0
  382. package/dist/ui/overlay/impl/notifications-overlay-v2.js +116 -0
  383. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.d.ts +76 -0
  384. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.js +728 -0
  385. package/dist/ui/overlay/impl/pending-overlay-v2.d.ts +51 -0
  386. package/dist/ui/overlay/impl/pending-overlay-v2.js +445 -0
  387. package/dist/ui/overlay/impl/permission-overlay-v2.js +5 -5
  388. package/dist/ui/overlay/impl/permissions-overlay-v2.d.ts +85 -0
  389. package/dist/ui/overlay/impl/permissions-overlay-v2.js +820 -0
  390. package/dist/ui/overlay/impl/plan-approval-overlay-v2.d.ts +35 -0
  391. package/dist/ui/overlay/impl/plan-approval-overlay-v2.js +181 -0
  392. package/dist/ui/overlay/impl/project-edit-overlay-v2.d.ts +36 -0
  393. package/dist/ui/overlay/impl/project-edit-overlay-v2.js +195 -0
  394. package/dist/ui/overlay/impl/projects-overlay-v2.d.ts +1 -0
  395. package/dist/ui/overlay/impl/projects-overlay-v2.js +278 -44
  396. package/dist/ui/overlay/impl/reset-overlay-v2.d.ts +39 -0
  397. package/dist/ui/overlay/impl/reset-overlay-v2.js +107 -0
  398. package/dist/ui/overlay/impl/resume-overlay-v2.d.ts +60 -0
  399. package/dist/ui/overlay/impl/resume-overlay-v2.js +414 -0
  400. package/dist/ui/overlay/impl/session-mode-overlay-v2.d.ts +43 -0
  401. package/dist/ui/overlay/impl/session-mode-overlay-v2.js +124 -0
  402. package/dist/ui/overlay/impl/tasks-overlay-v2.d.ts +28 -0
  403. package/dist/ui/overlay/impl/tasks-overlay-v2.js +283 -0
  404. package/dist/ui/overlay/impl/team-overlay-v2.d.ts +86 -0
  405. package/dist/ui/overlay/impl/team-overlay-v2.js +692 -0
  406. package/dist/ui/overlay/impl/terminals-overlay-v2.d.ts +26 -0
  407. package/dist/ui/overlay/impl/terminals-overlay-v2.js +217 -0
  408. package/dist/ui/overlay/impl/tools-overlay-v2.js +3 -7
  409. package/dist/ui/overlay/impl/tutorial-overlay-v2.d.ts +30 -16
  410. package/dist/ui/overlay/impl/tutorial-overlay-v2.js +133 -956
  411. package/dist/ui/overlay/impl/workflow-overlay-v2.d.ts +1 -0
  412. package/dist/ui/overlay/impl/workflow-overlay-v2.js +10 -4
  413. package/dist/ui/overlay/index.d.ts +20 -1
  414. package/dist/ui/overlay/index.js +19 -0
  415. package/dist/ui/overlay/types.d.ts +5 -0
  416. package/dist/ui/overlay-manager.d.ts +43 -0
  417. package/dist/ui/overlay-manager.js +238 -0
  418. package/dist/ui/overlays.js +4 -16
  419. package/dist/ui/permission-overlay.js +6 -5
  420. package/dist/ui/status-bar-controller.d.ts +33 -0
  421. package/dist/ui/status-bar-controller.js +99 -0
  422. package/dist/ui/subagent-renderer.js +3 -19
  423. package/dist/ui/terminal-autocomplete-utils.d.ts +23 -0
  424. package/dist/ui/terminal-autocomplete-utils.js +83 -0
  425. package/dist/ui/terminal-line-builders.d.ts +17 -0
  426. package/dist/ui/terminal-line-builders.js +42 -0
  427. package/dist/ui/terminal-render-item.d.ts +16 -0
  428. package/dist/ui/terminal-render-item.js +267 -0
  429. package/dist/ui/terminal-renderer.d.ts +7 -8
  430. package/dist/ui/terminal-renderer.js +7 -8
  431. package/dist/ui/terminal-types.d.ts +179 -0
  432. package/dist/ui/terminal-types.js +34 -0
  433. package/dist/ui/terminal-ui.d.ts +144 -276
  434. package/dist/ui/terminal-ui.js +384 -1861
  435. package/dist/ui/todo-zone.d.ts +19 -1
  436. package/dist/ui/todo-zone.js +71 -13
  437. package/dist/ui/tool-formatters.js +696 -1
  438. package/dist/ui/turn-metrics.d.ts +56 -0
  439. package/dist/ui/turn-metrics.js +75 -0
  440. package/dist/ui/types.d.ts +28 -0
  441. package/dist/ui/types.js +1 -0
  442. package/dist/ui/vscode-diff-ipc.d.ts +102 -0
  443. package/dist/ui/vscode-diff-ipc.js +385 -0
  444. package/dist/utils/credentials.d.ts +24 -5
  445. package/dist/utils/credentials.js +123 -9
  446. package/dist/utils/format-tokens.d.ts +13 -0
  447. package/dist/utils/format-tokens.js +18 -0
  448. package/dist/utils/git-config.d.ts +26 -0
  449. package/dist/utils/git-config.js +54 -0
  450. package/dist/utils/message-utils.d.ts +61 -0
  451. package/dist/utils/message-utils.js +72 -0
  452. package/dist/utils/model-tiers.d.ts +8 -1
  453. package/dist/utils/model-tiers.js +38 -16
  454. package/dist/utils/open-browser.d.ts +5 -0
  455. package/dist/utils/open-browser.js +32 -0
  456. package/dist/utils/path-safety.js +3 -2
  457. package/dist/utils/project-detection.d.ts +58 -0
  458. package/dist/utils/project-detection.js +424 -0
  459. package/dist/utils/project-memory.js +2 -1
  460. package/dist/utils/project-status.d.ts +2 -2
  461. package/dist/utils/startup-perf.d.ts +18 -0
  462. package/dist/utils/startup-perf.js +60 -0
  463. package/dist/utils/token-tracker.d.ts +62 -0
  464. package/dist/utils/token-tracker.js +150 -0
  465. package/dist/utils/token-types.d.ts +23 -0
  466. package/dist/utils/token-types.js +18 -0
  467. package/dist/utils/types/config-types.d.ts +32 -0
  468. package/dist/utils/types/config-types.js +8 -0
  469. package/dist/utils/update-checker.d.ts +28 -0
  470. package/dist/utils/update-checker.js +106 -0
  471. package/dist/utils/version.d.ts +7 -0
  472. package/dist/utils/version.js +10 -0
  473. package/dist/utils/vscode-detect.d.ts +39 -0
  474. package/dist/utils/vscode-detect.js +137 -0
  475. package/package.json +27 -13
  476. package/dist/commands/handler-types.d.ts +0 -68
  477. package/dist/commands/handler-types.js +0 -8
  478. package/dist/commands/handlers/agent-commands.d.ts +0 -13
  479. package/dist/commands/handlers/agent-commands.js +0 -305
  480. package/dist/commands/handlers/design-commands.d.ts +0 -15
  481. package/dist/commands/handlers/design-commands.js +0 -334
  482. package/dist/commands/handlers/index.d.ts +0 -20
  483. package/dist/commands/handlers/index.js +0 -43
  484. package/dist/commands/handlers/overlay-commands.d.ts +0 -21
  485. package/dist/commands/handlers/overlay-commands.js +0 -287
  486. package/dist/commands/handlers/project-commands.d.ts +0 -11
  487. package/dist/commands/handlers/project-commands.js +0 -167
  488. package/dist/commands/handlers/simple-commands.d.ts +0 -19
  489. package/dist/commands/handlers/simple-commands.js +0 -144
  490. package/dist/commands/registry.d.ts +0 -50
  491. package/dist/commands/registry.js +0 -75
  492. package/dist/index.old.d.ts +0 -7
  493. package/dist/index.old.js +0 -1014
  494. package/dist/repl.d.ts +0 -149
  495. package/dist/repl.js +0 -1151
  496. package/dist/templates/claude-md.d.ts +0 -7
  497. package/dist/templates/claude-md.js +0 -189
  498. package/dist/test-autocomplete.d.ts +0 -7
  499. package/dist/test-autocomplete.js +0 -85
  500. package/dist/test-tabbed-menu.d.ts +0 -7
  501. package/dist/test-tabbed-menu.js +0 -25
  502. package/dist/tool-selector.d.ts +0 -71
  503. package/dist/tool-selector.js +0 -184
  504. package/dist/tools/anchor-tools.d.ts +0 -31
  505. package/dist/tools/anchor-tools.js +0 -255
  506. package/dist/tools/backlog-wrappers.d.ts +0 -54
  507. package/dist/tools/backlog-wrappers.js +0 -338
  508. package/dist/tools/document-db.d.ts +0 -43
  509. package/dist/tools/document-db.js +0 -220
  510. package/dist/tools/workitem-db.d.ts +0 -103
  511. package/dist/tools/workitem-db.js +0 -549
  512. package/dist/ui/agents-overlay-v2.d.ts +0 -43
  513. package/dist/ui/agents-overlay-v2.js +0 -809
  514. package/dist/ui/agents-overlay.d.ts +0 -12
  515. package/dist/ui/agents-overlay.js +0 -863
  516. package/dist/ui/anchors-overlay.d.ts +0 -12
  517. package/dist/ui/anchors-overlay.js +0 -775
  518. package/dist/ui/arch-type-overlay.d.ts +0 -15
  519. package/dist/ui/arch-type-overlay.js +0 -201
  520. package/dist/ui/ask-user-overlay-v2.d.ts +0 -26
  521. package/dist/ui/ask-user-overlay-v2.js +0 -555
  522. package/dist/ui/ask-user-simple-overlay-v2.d.ts +0 -25
  523. package/dist/ui/ask-user-simple-overlay-v2.js +0 -215
  524. package/dist/ui/backlog-overlay.d.ts +0 -32
  525. package/dist/ui/backlog-overlay.js +0 -652
  526. package/dist/ui/commands-overlay-v2.d.ts +0 -33
  527. package/dist/ui/commands-overlay-v2.js +0 -441
  528. package/dist/ui/commands-overlay.d.ts +0 -16
  529. package/dist/ui/commands-overlay.js +0 -439
  530. package/dist/ui/config-overlay.d.ts +0 -35
  531. package/dist/ui/config-overlay.js +0 -707
  532. package/dist/ui/docs-overlay.d.ts +0 -17
  533. package/dist/ui/docs-overlay.js +0 -303
  534. package/dist/ui/footer-v2.d.ts +0 -222
  535. package/dist/ui/footer-v2.js +0 -1349
  536. package/dist/ui/help-overlay-v2.d.ts +0 -34
  537. package/dist/ui/help-overlay-v2.js +0 -309
  538. package/dist/ui/help-overlay.d.ts +0 -16
  539. package/dist/ui/help-overlay.js +0 -316
  540. package/dist/ui/init-overlay-v2.d.ts +0 -34
  541. package/dist/ui/init-overlay-v2.js +0 -600
  542. package/dist/ui/init-overlay.d.ts +0 -34
  543. package/dist/ui/init-overlay.js +0 -604
  544. package/dist/ui/input-prompt-v2.d.ts +0 -180
  545. package/dist/ui/input-prompt-v2.js +0 -999
  546. package/dist/ui/iteration-limit-overlay-v2.d.ts +0 -21
  547. package/dist/ui/iteration-limit-overlay-v2.js +0 -114
  548. package/dist/ui/keys-overlay-v2.d.ts +0 -41
  549. package/dist/ui/keys-overlay-v2.js +0 -248
  550. package/dist/ui/mascot-overlay-v2.d.ts +0 -41
  551. package/dist/ui/mascot-overlay-v2.js +0 -138
  552. package/dist/ui/mascot-overlay.d.ts +0 -21
  553. package/dist/ui/mascot-overlay.js +0 -146
  554. package/dist/ui/model-overlay-v2.d.ts +0 -49
  555. package/dist/ui/model-overlay-v2.js +0 -118
  556. package/dist/ui/model-overlay.d.ts +0 -27
  557. package/dist/ui/model-overlay.js +0 -221
  558. package/dist/ui/model-warning-overlay.d.ts +0 -30
  559. package/dist/ui/model-warning-overlay.js +0 -169
  560. package/dist/ui/new-overlay.d.ts +0 -34
  561. package/dist/ui/new-overlay.js +0 -604
  562. package/dist/ui/overlay/impl/init-overlay-v2.d.ts +0 -77
  563. package/dist/ui/overlay/impl/init-overlay-v2.js +0 -593
  564. package/dist/ui/overlay/overlay-types.d.ts +0 -128
  565. package/dist/ui/overlay/overlay-types.js +0 -22
  566. package/dist/ui/overlays/help-overlay-v2.d.ts +0 -28
  567. package/dist/ui/overlays/help-overlay-v2.js +0 -198
  568. package/dist/ui/overlays/index.d.ts +0 -11
  569. package/dist/ui/overlays/index.js +0 -11
  570. package/dist/ui/permission-overlay-v2.d.ts +0 -36
  571. package/dist/ui/permission-overlay-v2.js +0 -380
  572. package/dist/ui/projects-overlay.d.ts +0 -19
  573. package/dist/ui/projects-overlay.js +0 -484
  574. package/dist/ui/theme-overlay-v2.d.ts +0 -42
  575. package/dist/ui/theme-overlay-v2.js +0 -135
  576. package/dist/ui/theme-overlay.d.ts +0 -24
  577. package/dist/ui/theme-overlay.js +0 -127
  578. package/dist/ui/tools-overlay-v2.d.ts +0 -47
  579. package/dist/ui/tools-overlay-v2.js +0 -218
  580. package/dist/ui/tools-overlay.d.ts +0 -34
  581. package/dist/ui/tools-overlay.js +0 -230
  582. package/dist/ui/tutorial-overlay-v2.d.ts +0 -31
  583. package/dist/ui/tutorial-overlay-v2.js +0 -1035
  584. package/dist/ui/tutorial-overlay.d.ts +0 -11
  585. package/dist/ui/tutorial-overlay.js +0 -1034
  586. package/dist/ui/workflow-overlay.d.ts +0 -22
  587. package/dist/ui/workflow-overlay.js +0 -636
@@ -1,707 +0,0 @@
1
- /**
2
- * Config Overlay
3
- *
4
- * Claude Code-style settings overlay with 4 tabs:
5
- * - Status: Read-only info (version, model, provider, cwd, session)
6
- * - Config: Interactive settings (toggle/cycle with Enter/Space)
7
- * - Paths: Path configuration and safety settings
8
- * - Usage: Usage statistics with progress bars
9
- *
10
- * Theme, Model, and Mascot selection are delegated to standalone overlays.
11
- */
12
- import chalk from 'chalk';
13
- import * as fs from 'fs';
14
- import * as path from 'path';
15
- import * as terminal from './terminal.js';
16
- import { isEscape, isTab, isShiftTab, isEnter, isSpace, isCtrlC, isQuit, isNavigateUp, isNavigateDown, isBackspace, getNumberKey, isPrintable, extractPrintable, } from './base/key-utils.js';
17
- import { getCurrentTheme, getStyles, } from '../themes/index.js';
18
- import { getSettings, setSetting, permissionModeToDisplay, displayToPermissionMode, notificationModeToDisplay, displayToNotificationMode, projectStartupModeToDisplay, displayToProjectStartupMode, } from '../settings/index.js';
19
- import { getResolvedPathConfig, setDeleteProtection, setProjectMatchRequired, setWorkspacePath, setProjectsPath, setDataPath, } from '../settings/paths.js';
20
- import { pauseForOverlay, resumeAfterOverlay } from './overlay-controller.js';
21
- import { MASCOT_LABELS, } from './mascot/index.js';
22
- // =============================================================================
23
- // Constants
24
- // =============================================================================
25
- const VERSION = '0.4.0';
26
- const TABS = [
27
- { id: 'status', label: 'Status' },
28
- { id: 'config', label: 'Config' },
29
- { id: 'paths', label: 'Paths' },
30
- { id: 'usage', label: 'Usage' },
31
- ];
32
- const MODEL_OPTIONS = [
33
- // Claude
34
- { id: 'claude-sonnet-4-20250514', name: 'Sonnet 4', description: 'Best for everyday tasks', provider: 'claude' },
35
- { id: 'claude-opus-4-20250514', name: 'Opus 4', description: 'Most capable for complex work', provider: 'claude' },
36
- { id: 'claude-3-5-haiku-20241022', name: 'Haiku 3.5', description: 'Fastest for quick answers', provider: 'claude' },
37
- // OpenAI
38
- { id: 'gpt-4o', name: 'GPT-4o', description: 'Best overall', provider: 'openai' },
39
- { id: 'gpt-4o-mini', name: 'GPT-4o Mini', description: 'Fast and affordable', provider: 'openai' },
40
- // Gemini (1.5 models retired April 2025, use 2.0+ only)
41
- { id: 'gemini-2.0-flash', name: 'Gemini 2.0 Flash', description: 'Fast multimodal', provider: 'gemini' },
42
- { id: 'gemini-2.5-flash', name: 'Gemini 2.5 Flash', description: 'Latest stable flash', provider: 'gemini' },
43
- { id: 'gemini-2.5-pro', name: 'Gemini 2.5 Pro', description: 'Most capable Gemini', provider: 'gemini' },
44
- // Ollama
45
- { id: 'llama3.2', name: 'Llama 3.2', description: 'Local model', provider: 'ollama' },
46
- { id: 'mistral', name: 'Mistral', description: 'Local model', provider: 'ollama' },
47
- { id: 'codellama', name: 'Code Llama', description: 'Code-focused local model', provider: 'ollama' },
48
- ];
49
- // =============================================================================
50
- // Config Items (loaded from settings)
51
- // =============================================================================
52
- function getConfigItems(currentModel) {
53
- const currentTheme = getCurrentTheme();
54
- const settings = getSettings();
55
- // Find display name for current model
56
- const modelOption = MODEL_OPTIONS.find(m => m.id === currentModel);
57
- const modelDisplay = modelOption ? modelOption.name : currentModel || 'Default';
58
- return [
59
- { id: 'autoCompact', label: 'Auto-compact', type: 'boolean', value: settings.autoCompact },
60
- { id: 'showTips', label: 'Show tips', type: 'boolean', value: settings.showTips },
61
- { id: 'reviseCode', label: 'Revise code (checkpoints)', type: 'boolean', value: settings.reviseCode },
62
- { id: 'verbose', label: 'Verbose output', type: 'boolean', value: settings.verbose },
63
- { id: 'progressBar', label: 'Terminal progress bar', type: 'boolean', value: settings.progressBar },
64
- {
65
- id: 'permissionMode',
66
- label: 'Default permission mode',
67
- type: 'cycle',
68
- value: permissionModeToDisplay(settings.permissionMode),
69
- options: ['Default', 'Plan', 'Bypass prompts'],
70
- },
71
- { id: 'gitignore', label: 'Respect .gitignore in file picker', type: 'boolean', value: settings.gitignore },
72
- { id: 'theme', label: 'Theme', type: 'submenu', value: currentTheme.name },
73
- { id: 'model', label: 'Model', type: 'submenu', value: modelDisplay },
74
- {
75
- id: 'notifications',
76
- label: 'Notifications',
77
- type: 'cycle',
78
- value: notificationModeToDisplay(settings.notifications),
79
- options: ['Auto', 'Enabled', 'Disabled'],
80
- },
81
- {
82
- id: 'outputStyle',
83
- label: 'Output style',
84
- type: 'cycle',
85
- value: settings.outputStyle,
86
- options: ['default', 'compact', 'verbose'],
87
- },
88
- {
89
- id: 'editorMode',
90
- label: 'Editor mode',
91
- type: 'cycle',
92
- value: settings.editorMode,
93
- options: ['normal', 'vim', 'emacs'],
94
- },
95
- { id: 'autoInstall', label: 'Auto-install IDE extension', type: 'boolean', value: settings.autoInstall },
96
- {
97
- id: 'startupMode',
98
- label: 'Startup behavior',
99
- type: 'cycle',
100
- value: settings.startupMode === 'menu' ? 'Show menu' : 'Direct to REPL',
101
- options: ['Show menu', 'Direct to REPL'],
102
- },
103
- {
104
- id: 'projectStartup',
105
- label: 'Auto-open project',
106
- type: 'cycle',
107
- value: projectStartupModeToDisplay(settings.projectStartup),
108
- options: ['Last opened', 'Off'],
109
- },
110
- { id: 'mascot', label: 'Mascot', type: 'submenu', value: MASCOT_LABELS[settings.mascot] },
111
- ];
112
- }
113
- // Unused helper function - removed to fix lint error
114
- // function getDefaultUsageStats(): UsageStats {
115
- // return {
116
- // inputTokens: 0,
117
- // outputTokens: 0,
118
- // requests: 0,
119
- // contextUsed: 0,
120
- // contextMax: 200000,
121
- // messageCount: 0,
122
- // };
123
- // }
124
- // =============================================================================
125
- // Rendering - Header
126
- // =============================================================================
127
- function renderHeader(state) {
128
- const s = getStyles();
129
- const lines = [];
130
- const cols = terminal.getTerminalWidth();
131
- lines.push(s.muted('─'.repeat(Math.max(1, cols - 1))));
132
- // Tab row
133
- let tabLine = ' Settings: ';
134
- for (let i = 0; i < TABS.length; i++) {
135
- const tab = TABS[i];
136
- if (i === state.currentTab) {
137
- tabLine += s.selected(` ${tab.label} `) + ' ';
138
- }
139
- else {
140
- tabLine += s.muted(` ${tab.label} `) + ' ';
141
- }
142
- }
143
- tabLine += s.muted('(Tab · 1-4)');
144
- lines.push(tabLine);
145
- lines.push('');
146
- return lines;
147
- }
148
- // =============================================================================
149
- // Rendering - Status Tab
150
- // =============================================================================
151
- function renderStatusTab(state) {
152
- const s = getStyles();
153
- const lines = [];
154
- const info = state.statusInfo;
155
- // Calculate uptime
156
- const uptimeMs = Date.now() - info.startTime.getTime();
157
- const uptimeSecs = Math.floor(uptimeMs / 1000);
158
- const uptimeMins = Math.floor(uptimeSecs / 60);
159
- const uptimeStr = uptimeMins > 0
160
- ? `${String(uptimeMins)}m ${String(uptimeSecs % 60)}s`
161
- : `${String(uptimeSecs)}s`;
162
- lines.push(` Version: ${s.primary(info.version)}`);
163
- lines.push(` Session: ${s.muted(info.sessionId)}`);
164
- lines.push(` Uptime: ${s.muted(uptimeStr)}`);
165
- lines.push('');
166
- lines.push(` Provider: ${s.primary(info.provider)}`);
167
- lines.push(` Model: ${s.primary(info.model)}`);
168
- lines.push(` Tools: ${s.muted(String(info.toolCount))}`);
169
- lines.push('');
170
- lines.push(` Cwd: ${s.muted(info.cwd)}`);
171
- lines.push(` Memory: ${s.muted(info.memoryFile || 'none')}`);
172
- lines.push(` Settings: ${s.muted('~/.compilr-dev/settings.json')}`);
173
- return lines;
174
- }
175
- // =============================================================================
176
- // Rendering - Config Tab
177
- // =============================================================================
178
- function renderConfigTab(state) {
179
- const s = getStyles();
180
- const lines = [];
181
- lines.push(chalk.bold(' Configure Claude Code preferences'));
182
- lines.push('');
183
- for (let i = 0; i < state.configItems.length; i++) {
184
- const item = state.configItems[i];
185
- const isSelected = i === state.selectedItem;
186
- const prefix = isSelected ? s.primary(' ❯ ') : ' ';
187
- let valueStr;
188
- if (item.type === 'boolean') {
189
- valueStr = item.value ? s.success('true') : s.muted('false');
190
- }
191
- else if (item.type === 'submenu') {
192
- valueStr = s.primary(String(item.value));
193
- }
194
- else {
195
- valueStr = s.primary(String(item.value));
196
- }
197
- const labelStyled = isSelected
198
- ? s.primary(item.label.padEnd(35))
199
- : item.label.padEnd(35);
200
- lines.push(prefix + labelStyled + valueStr);
201
- }
202
- return lines;
203
- }
204
- // =============================================================================
205
- // Rendering - Usage Tab
206
- // =============================================================================
207
- function renderUsageTab(state) {
208
- const s = getStyles();
209
- const lines = [];
210
- const stats = state.usageStats;
211
- // Format numbers with K suffix
212
- const formatNum = (n) => {
213
- if (n >= 1000)
214
- return `${(n / 1000).toFixed(1)}k`;
215
- return String(n);
216
- };
217
- lines.push(chalk.bold(' Session Tokens'));
218
- lines.push(` Input: ${s.primary(formatNum(stats.inputTokens).padStart(8))}`);
219
- lines.push(` Output: ${s.primary(formatNum(stats.outputTokens).padStart(8))}`);
220
- lines.push(` Total: ${s.primary(formatNum(stats.inputTokens + stats.outputTokens).padStart(8))}`);
221
- lines.push('');
222
- lines.push(chalk.bold(' Context Window'));
223
- const contextPct = stats.contextMax > 0 ? stats.contextUsed / stats.contextMax : 0;
224
- const contextPctDisplay = Math.round(contextPct * 100);
225
- lines.push(` ${renderProgressBar(contextPct, 30)} ${String(contextPctDisplay)}% used`);
226
- lines.push(s.muted(` ${formatNum(Math.round(stats.contextUsed))} / ${formatNum(stats.contextMax)} tokens`));
227
- lines.push('');
228
- lines.push(chalk.bold(' Session Activity'));
229
- lines.push(` Requests: ${s.primary(String(stats.requests))}`);
230
- lines.push(` Messages: ${s.primary(String(stats.messageCount))}`);
231
- return lines;
232
- }
233
- function renderProgressBar(value, width) {
234
- const s = getStyles();
235
- const filled = Math.round(value * width);
236
- const empty = width - filled;
237
- let color = s.success;
238
- if (value > 0.8)
239
- color = s.error;
240
- else if (value > 0.6)
241
- color = s.warning;
242
- return color('█'.repeat(filled)) + s.muted('░'.repeat(empty));
243
- }
244
- // =============================================================================
245
- // Rendering - Paths Tab
246
- // =============================================================================
247
- function renderPathsTab(state) {
248
- const s = getStyles();
249
- const lines = [];
250
- const pathConfig = getResolvedPathConfig();
251
- const cols = terminal.getTerminalWidth();
252
- // Layout constants
253
- const labelWidth = 24;
254
- const valueWidth = Math.max(30, cols - labelWidth - 8);
255
- lines.push(chalk.bold(' Path Configuration'));
256
- lines.push('');
257
- // Helper to render a path item
258
- const renderPathItem = (index, label, value) => {
259
- const isSelected = state.pathSelectedItem === index;
260
- const prefix = isSelected ? s.primary(' ❯ ') : ' ';
261
- if (state.pathEditMode && isSelected) {
262
- // Edit mode - show input field
263
- const labelStyled = s.primary(label.padEnd(labelWidth));
264
- const inputDisplay = state.pathEditInput + '█';
265
- lines.push(`${prefix}${labelStyled}${inputDisplay}`);
266
- }
267
- else {
268
- // Normal mode - show value
269
- const labelStyled = isSelected ? s.primary(label.padEnd(labelWidth)) : label.padEnd(labelWidth);
270
- const valueStyled = isSelected ? s.primary(value) : s.muted(value);
271
- const truncatedValue = value.length > valueWidth ? value.slice(0, valueWidth - 3) + '...' : value;
272
- lines.push(`${prefix}${labelStyled}${valueStyled === s.primary(value) ? s.primary(truncatedValue) : s.muted(truncatedValue)}`);
273
- }
274
- };
275
- // Path items (0-2)
276
- renderPathItem(0, 'Workspace path', pathConfig.workspacePath);
277
- renderPathItem(1, 'Projects path', pathConfig.projectsPath);
278
- renderPathItem(2, 'Data path', pathConfig.dataPath);
279
- lines.push('');
280
- lines.push(chalk.bold(' Safety Settings'));
281
- lines.push('');
282
- // Helper to render a toggle item with consistent alignment
283
- const renderToggleItem = (index, label, enabled, hint) => {
284
- const isSelected = state.pathSelectedItem === index;
285
- const prefix = isSelected ? s.primary(' ❯ ') : ' ';
286
- const labelStyled = isSelected ? s.primary(label.padEnd(labelWidth)) : label.padEnd(labelWidth);
287
- const valueStyled = enabled ? s.success('enabled'.padStart(10)) : s.warning('disabled'.padStart(10));
288
- lines.push(`${prefix}${labelStyled}${valueStyled}`);
289
- lines.push(s.muted(` ${hint}`));
290
- };
291
- // Toggle items (3-4)
292
- renderToggleItem(3, 'Delete protection', pathConfig.deleteProtection, 'Only allow file deletion within projects path');
293
- renderToggleItem(4, 'CWD mismatch warning', pathConfig.requireProjectMatch, 'Warn when current directory differs from active project');
294
- lines.push('');
295
- // Allowed paths (if any)
296
- if (pathConfig.allowedPaths.length > 0) {
297
- lines.push(chalk.bold(' Additional Allowed Paths'));
298
- for (const allowed of pathConfig.allowedPaths) {
299
- lines.push(` ${s.muted('•')} ${allowed}`);
300
- }
301
- lines.push('');
302
- }
303
- return lines;
304
- }
305
- // =============================================================================
306
- // Rendering - Footer
307
- // =============================================================================
308
- function renderFooter(state) {
309
- const s = getStyles();
310
- const lines = [];
311
- lines.push('');
312
- const tabId = TABS[state.currentTab].id;
313
- if (tabId === 'config') {
314
- // Config tab
315
- lines.push(s.muted(' ↑↓/jk Navigate · Enter/Space Change · q/Esc Close'));
316
- }
317
- else if (tabId === 'paths') {
318
- // Paths tab
319
- if (state.pathEditMode) {
320
- lines.push(s.muted(' Type path · Enter Save · Esc Cancel'));
321
- }
322
- else {
323
- lines.push(s.muted(' ↑↓/jk Navigate · Enter Edit/Toggle · q/Esc Close'));
324
- }
325
- }
326
- else {
327
- lines.push(s.muted(' q/Esc Close'));
328
- }
329
- return lines;
330
- }
331
- // Target height for consistent screen sizes
332
- const TARGET_HEIGHT = 25;
333
- function padToHeight(lines, targetHeight) {
334
- while (lines.length < targetHeight) {
335
- lines.push('');
336
- }
337
- return lines;
338
- }
339
- function buildLines(state) {
340
- const allLines = [];
341
- allLines.push(...renderHeader(state));
342
- switch (TABS[state.currentTab].id) {
343
- case 'status':
344
- allLines.push(...renderStatusTab(state));
345
- break;
346
- case 'config':
347
- allLines.push(...renderConfigTab(state));
348
- break;
349
- case 'paths':
350
- allLines.push(...renderPathsTab(state));
351
- break;
352
- case 'usage':
353
- allLines.push(...renderUsageTab(state));
354
- break;
355
- }
356
- allLines.push(...renderFooter(state));
357
- return padToHeight(allLines, TARGET_HEIGHT);
358
- }
359
- function render(state, prevLineCount) {
360
- const lines = buildLines(state);
361
- // Clear previous content
362
- terminal.clearLinesAbove(prevLineCount);
363
- // Write new content
364
- terminal.write(lines.join('\n'));
365
- return lines.length;
366
- }
367
- // =============================================================================
368
- // Config Item Actions
369
- // =============================================================================
370
- function toggleOrCycleItem(state) {
371
- const item = state.configItems[state.selectedItem];
372
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
373
- if (!item)
374
- return;
375
- if (item.type === 'boolean') {
376
- item.value = !item.value;
377
- // Persist boolean settings - id is always a valid settings key
378
- switch (item.id) {
379
- case 'autoCompact':
380
- setSetting('autoCompact', item.value);
381
- break;
382
- case 'showTips':
383
- setSetting('showTips', item.value);
384
- break;
385
- case 'reviseCode':
386
- setSetting('reviseCode', item.value);
387
- break;
388
- case 'verbose':
389
- setSetting('verbose', item.value);
390
- break;
391
- case 'progressBar':
392
- setSetting('progressBar', item.value);
393
- break;
394
- case 'gitignore':
395
- setSetting('gitignore', item.value);
396
- break;
397
- case 'autoInstall':
398
- setSetting('autoInstall', item.value);
399
- break;
400
- }
401
- }
402
- else if (item.type === 'cycle' && item.options) {
403
- const currentIndex = item.options.indexOf(String(item.value));
404
- const nextIndex = (currentIndex + 1) % item.options.length;
405
- item.value = item.options[nextIndex];
406
- // Persist cycle settings
407
- switch (item.id) {
408
- case 'permissionMode':
409
- setSetting('permissionMode', displayToPermissionMode(item.value));
410
- break;
411
- case 'notifications':
412
- setSetting('notifications', displayToNotificationMode(item.value));
413
- break;
414
- case 'outputStyle':
415
- setSetting('outputStyle', item.value);
416
- break;
417
- case 'editorMode':
418
- setSetting('editorMode', item.value);
419
- break;
420
- case 'startupMode':
421
- setSetting('startupMode', item.value === 'Show menu' ? 'menu' : 'repl');
422
- break;
423
- case 'projectStartup':
424
- setSetting('projectStartup', displayToProjectStartupMode(item.value));
425
- break;
426
- // 'model' is not persisted (would need provider integration)
427
- }
428
- }
429
- else if (item.type === 'submenu' && item.id === 'theme') {
430
- // Request standalone theme overlay
431
- state.requestSubOverlay = 'theme';
432
- }
433
- else if (item.type === 'submenu' && item.id === 'model') {
434
- // Request standalone model overlay
435
- state.requestSubOverlay = 'model';
436
- }
437
- else if (item.type === 'submenu' && item.id === 'mascot') {
438
- // Request standalone mascot overlay
439
- state.requestSubOverlay = 'mascot';
440
- }
441
- }
442
- /**
443
- * Show the config overlay
444
- */
445
- export async function showConfigOverlay(options = {}) {
446
- const result = {};
447
- const state = {
448
- currentTab: 1, // Start on Config tab (like Claude Code)
449
- selectedItem: 0,
450
- scrollOffset: 0,
451
- // Path settings state
452
- pathSelectedItem: 0,
453
- pathEditMode: false,
454
- pathEditInput: '',
455
- configItems: getConfigItems(options.model),
456
- statusInfo: {
457
- version: options.version || VERSION,
458
- sessionId: options.sessionId || generateSessionId(),
459
- cwd: options.cwd || process.cwd(),
460
- model: options.model || 'unknown',
461
- provider: options.provider || 'unknown',
462
- toolCount: options.toolCount ?? 0,
463
- startTime: options.startTime || new Date(),
464
- memoryFile: findMemoryFile(options.cwd),
465
- },
466
- usageStats: {
467
- inputTokens: options.inputTokens ?? 0,
468
- outputTokens: options.outputTokens ?? 0,
469
- requests: options.requests ?? 0,
470
- contextUsed: options.contextUsed ?? 0,
471
- contextMax: options.contextMax ?? 200000,
472
- messageCount: options.messageCount ?? 0,
473
- },
474
- };
475
- let lineCount = 0;
476
- let maxLineCount = 0;
477
- // Pause footer and setup terminal
478
- pauseForOverlay();
479
- terminal.hideCursor();
480
- const wasRawMode = process.stdin.isRaw;
481
- terminal.enableRawMode();
482
- lineCount = render(state, 0);
483
- maxLineCount = lineCount;
484
- return new Promise((resolve) => {
485
- const cleanup = () => {
486
- // Remove event listener first
487
- process.stdin.removeListener('data', onData);
488
- // Clear all lines (use maxLineCount to ensure complete cleanup)
489
- if (maxLineCount > 0) {
490
- terminal.clearLinesAbove(maxLineCount);
491
- }
492
- terminal.showCursor();
493
- if (!wasRawMode) {
494
- terminal.disableRawMode();
495
- }
496
- // Resume footer
497
- resumeAfterOverlay();
498
- };
499
- const onData = (data) => {
500
- const char = extractPrintable(data);
501
- // Handle path edit mode first (when editing a path in Paths tab)
502
- if (state.pathEditMode) {
503
- if (isEscape(data)) {
504
- // Cancel edit
505
- state.pathEditMode = false;
506
- state.pathEditInput = '';
507
- lineCount = render(state, lineCount);
508
- maxLineCount = Math.max(maxLineCount, lineCount);
509
- return;
510
- }
511
- if (isEnter(data)) {
512
- // Save the path
513
- const newPath = state.pathEditInput.trim();
514
- if (newPath) {
515
- switch (state.pathSelectedItem) {
516
- case 0:
517
- setWorkspacePath(newPath);
518
- break;
519
- case 1:
520
- setProjectsPath(newPath);
521
- break;
522
- case 2:
523
- setDataPath(newPath);
524
- break;
525
- }
526
- }
527
- state.pathEditMode = false;
528
- state.pathEditInput = '';
529
- lineCount = render(state, lineCount);
530
- maxLineCount = Math.max(maxLineCount, lineCount);
531
- return;
532
- }
533
- if (isBackspace(data)) {
534
- state.pathEditInput = state.pathEditInput.slice(0, -1);
535
- lineCount = render(state, lineCount);
536
- maxLineCount = Math.max(maxLineCount, lineCount);
537
- return;
538
- }
539
- if (isPrintable(data)) {
540
- state.pathEditInput += char;
541
- lineCount = render(state, lineCount);
542
- maxLineCount = Math.max(maxLineCount, lineCount);
543
- return;
544
- }
545
- return; // Ignore other keys in edit mode
546
- }
547
- // q or Esc closes (not in path edit mode)
548
- if (isEscape(data) || isCtrlC(data) || isQuit(data)) {
549
- cleanup();
550
- resolve(result);
551
- return;
552
- }
553
- // Tab switching: Tab for next, Shift+Tab for previous
554
- if (isTab(data)) {
555
- state.currentTab = (state.currentTab + 1) % TABS.length;
556
- state.selectedItem = 0;
557
- state.pathSelectedItem = 0;
558
- lineCount = render(state, lineCount);
559
- maxLineCount = Math.max(maxLineCount, lineCount);
560
- return;
561
- }
562
- if (isShiftTab(data)) {
563
- state.currentTab = (state.currentTab - 1 + TABS.length) % TABS.length;
564
- state.selectedItem = 0;
565
- state.pathSelectedItem = 0;
566
- lineCount = render(state, lineCount);
567
- maxLineCount = Math.max(maxLineCount, lineCount);
568
- return;
569
- }
570
- // Number keys 1-4 to directly select tabs
571
- const tabNumKey = getNumberKey(data);
572
- if (tabNumKey !== null && tabNumKey >= 1 && tabNumKey <= TABS.length) {
573
- state.currentTab = tabNumKey - 1;
574
- state.selectedItem = 0;
575
- state.pathSelectedItem = 0;
576
- lineCount = render(state, lineCount);
577
- maxLineCount = Math.max(maxLineCount, lineCount);
578
- return;
579
- }
580
- // Navigation only in Config tab (↑↓ or j/k)
581
- if (TABS[state.currentTab].id === 'config') {
582
- if (isNavigateUp(data) && state.selectedItem > 0) {
583
- state.selectedItem--;
584
- lineCount = render(state, lineCount);
585
- maxLineCount = Math.max(maxLineCount, lineCount);
586
- return;
587
- }
588
- if (isNavigateDown(data) && state.selectedItem < state.configItems.length - 1) {
589
- state.selectedItem++;
590
- lineCount = render(state, lineCount);
591
- maxLineCount = Math.max(maxLineCount, lineCount);
592
- return;
593
- }
594
- if (isEnter(data) || isSpace(data)) {
595
- toggleOrCycleItem(state);
596
- // Check if a sub-overlay was requested
597
- if (state.requestSubOverlay) {
598
- result.requestSubOverlay = state.requestSubOverlay;
599
- cleanup();
600
- resolve(result);
601
- return;
602
- }
603
- lineCount = render(state, lineCount);
604
- maxLineCount = Math.max(maxLineCount, lineCount);
605
- return;
606
- }
607
- }
608
- // Navigation in Paths tab (5 items: 0-2 paths, 3-4 toggles)
609
- if (TABS[state.currentTab].id === 'paths') {
610
- const pathItemCount = 5; // 3 paths + 2 toggles
611
- if (isNavigateUp(data) && state.pathSelectedItem > 0) {
612
- state.pathSelectedItem--;
613
- lineCount = render(state, lineCount);
614
- maxLineCount = Math.max(maxLineCount, lineCount);
615
- return;
616
- }
617
- if (isNavigateDown(data) && state.pathSelectedItem < pathItemCount - 1) {
618
- state.pathSelectedItem++;
619
- lineCount = render(state, lineCount);
620
- maxLineCount = Math.max(maxLineCount, lineCount);
621
- return;
622
- }
623
- if (isEnter(data) || isSpace(data)) {
624
- const currentConfig = getResolvedPathConfig();
625
- if (state.pathSelectedItem <= 2) {
626
- // Path items (0-2) - enter edit mode
627
- state.pathEditMode = true;
628
- // Pre-populate with current value
629
- switch (state.pathSelectedItem) {
630
- case 0:
631
- state.pathEditInput = currentConfig.workspacePath;
632
- break;
633
- case 1:
634
- state.pathEditInput = currentConfig.projectsPath;
635
- break;
636
- case 2:
637
- state.pathEditInput = currentConfig.dataPath;
638
- break;
639
- }
640
- lineCount = render(state, lineCount);
641
- maxLineCount = Math.max(maxLineCount, lineCount);
642
- return;
643
- }
644
- else if (state.pathSelectedItem === 3) {
645
- // Toggle delete protection
646
- setDeleteProtection(!currentConfig.deleteProtection);
647
- lineCount = render(state, lineCount);
648
- maxLineCount = Math.max(maxLineCount, lineCount);
649
- return;
650
- }
651
- else if (state.pathSelectedItem === 4) {
652
- // Toggle CWD match warning
653
- setProjectMatchRequired(!currentConfig.requireProjectMatch);
654
- lineCount = render(state, lineCount);
655
- maxLineCount = Math.max(maxLineCount, lineCount);
656
- return;
657
- }
658
- }
659
- }
660
- };
661
- process.stdin.on('data', onData);
662
- });
663
- }
664
- // =============================================================================
665
- // Helpers
666
- // =============================================================================
667
- function generateSessionId() {
668
- const chars = '0123456789abcdef';
669
- let id = '';
670
- for (let i = 0; i < 8; i++) {
671
- id += chars[Math.floor(Math.random() * chars.length)];
672
- }
673
- id += '-';
674
- for (let i = 0; i < 4; i++) {
675
- id += chars[Math.floor(Math.random() * chars.length)];
676
- }
677
- id += '-';
678
- for (let i = 0; i < 4; i++) {
679
- id += chars[Math.floor(Math.random() * chars.length)];
680
- }
681
- id += '-';
682
- for (let i = 0; i < 12; i++) {
683
- id += chars[Math.floor(Math.random() * chars.length)];
684
- }
685
- return id;
686
- }
687
- /**
688
- * Find memory/instruction file in cwd
689
- * Checks for COMPILR.md, .compilr/instructions.md, etc.
690
- */
691
- function findMemoryFile(cwd) {
692
- const dir = cwd || process.cwd();
693
- const candidates = [
694
- 'COMPILR.md',
695
- '.compilr/instructions.md',
696
- 'CLAUDE.md', // Legacy support
697
- '.claude/instructions.md', // Legacy support
698
- 'AGENTS.md',
699
- ];
700
- for (const candidate of candidates) {
701
- const fullPath = path.join(dir, candidate);
702
- if (fs.existsSync(fullPath)) {
703
- return fullPath;
704
- }
705
- }
706
- return null;
707
- }