@compilr-dev/cli 0.4.0 → 0.5.0

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 (315) hide show
  1. package/README.md +30 -12
  2. package/dist/agent.d.ts +74 -1
  3. package/dist/agent.js +259 -76
  4. package/dist/anchors/index.d.ts +9 -0
  5. package/dist/anchors/index.js +9 -0
  6. package/dist/anchors/project-anchors.d.ts +79 -0
  7. package/dist/anchors/project-anchors.js +202 -0
  8. package/dist/commands/handler-types.d.ts +68 -0
  9. package/dist/commands/handler-types.js +8 -0
  10. package/dist/commands/handlers/agent-commands.d.ts +13 -0
  11. package/dist/commands/handlers/agent-commands.js +305 -0
  12. package/dist/commands/handlers/design-commands.d.ts +15 -0
  13. package/dist/commands/handlers/design-commands.js +334 -0
  14. package/dist/commands/handlers/index.d.ts +20 -0
  15. package/dist/commands/handlers/index.js +43 -0
  16. package/dist/commands/handlers/overlay-commands.d.ts +21 -0
  17. package/dist/commands/handlers/overlay-commands.js +287 -0
  18. package/dist/commands/handlers/project-commands.d.ts +11 -0
  19. package/dist/commands/handlers/project-commands.js +167 -0
  20. package/dist/commands/handlers/simple-commands.d.ts +19 -0
  21. package/dist/commands/handlers/simple-commands.js +144 -0
  22. package/dist/commands/index.d.ts +2 -1
  23. package/dist/commands/registry.d.ts +50 -0
  24. package/dist/commands/registry.js +75 -0
  25. package/dist/commands-v2/handlers/context.d.ts +13 -0
  26. package/dist/commands-v2/handlers/context.js +348 -0
  27. package/dist/commands-v2/handlers/core.d.ts +13 -0
  28. package/dist/commands-v2/handlers/core.js +165 -0
  29. package/dist/commands-v2/handlers/debug.d.ts +11 -0
  30. package/dist/commands-v2/handlers/debug.js +159 -0
  31. package/dist/commands-v2/handlers/index.d.ts +12 -0
  32. package/dist/commands-v2/handlers/index.js +24 -0
  33. package/dist/commands-v2/handlers/project.d.ts +22 -0
  34. package/dist/commands-v2/handlers/project.js +814 -0
  35. package/dist/commands-v2/handlers/settings.d.ts +15 -0
  36. package/dist/commands-v2/handlers/settings.js +235 -0
  37. package/dist/commands-v2/index.d.ts +13 -0
  38. package/dist/commands-v2/index.js +15 -0
  39. package/dist/commands-v2/registry.d.ts +37 -0
  40. package/dist/commands-v2/registry.js +80 -0
  41. package/dist/commands-v2/types.d.ts +75 -0
  42. package/dist/commands-v2/types.js +7 -0
  43. package/dist/commands.js +110 -7
  44. package/dist/index.js +288 -29
  45. package/dist/input-handlers/index.d.ts +7 -0
  46. package/dist/input-handlers/index.js +7 -0
  47. package/dist/input-handlers/memory-handler.d.ts +26 -0
  48. package/dist/input-handlers/memory-handler.js +68 -0
  49. package/dist/repl-helpers.d.ts +63 -0
  50. package/dist/repl-helpers.js +318 -0
  51. package/dist/repl-v2.d.ts +155 -0
  52. package/dist/repl-v2.js +774 -0
  53. package/dist/repl.d.ts +32 -4
  54. package/dist/repl.js +250 -977
  55. package/dist/settings/index.d.ts +23 -0
  56. package/dist/settings/index.js +48 -0
  57. package/dist/settings/paths.d.ts +110 -0
  58. package/dist/settings/paths.js +264 -0
  59. package/dist/templates/compilr-md.js +7 -4
  60. package/dist/templates/index.js +3 -4
  61. package/dist/themes/colors.js +3 -1
  62. package/dist/themes/registry.d.ts +5 -36
  63. package/dist/themes/registry.js +11 -95
  64. package/dist/themes/types.d.ts +3 -38
  65. package/dist/themes/types.js +2 -2
  66. package/dist/tools/anchor-tools.d.ts +31 -0
  67. package/dist/tools/anchor-tools.js +255 -0
  68. package/dist/tools/backlog-wrappers.d.ts +54 -0
  69. package/dist/tools/backlog-wrappers.js +338 -0
  70. package/dist/tools/backlog.js +1 -1
  71. package/dist/tools/db-tools.d.ts +65 -0
  72. package/dist/tools/db-tools.js +19 -0
  73. package/dist/tools/document-db.d.ts +43 -0
  74. package/dist/tools/document-db.js +220 -0
  75. package/dist/tools/project-db.d.ts +102 -0
  76. package/dist/tools/project-db.js +370 -0
  77. package/dist/tools/workitem-db.d.ts +103 -0
  78. package/dist/tools/workitem-db.js +549 -0
  79. package/dist/tools.js +13 -3
  80. package/dist/ui/agents-overlay-v2.d.ts +43 -0
  81. package/dist/ui/agents-overlay-v2.js +809 -0
  82. package/dist/ui/agents-overlay.d.ts +5 -5
  83. package/dist/ui/agents-overlay.js +782 -420
  84. package/dist/ui/anchors-overlay.d.ts +12 -0
  85. package/dist/ui/anchors-overlay.js +775 -0
  86. package/dist/ui/arch-type-overlay.d.ts +1 -6
  87. package/dist/ui/arch-type-overlay.js +175 -203
  88. package/dist/ui/ask-user-overlay-v2.d.ts +26 -0
  89. package/dist/ui/ask-user-overlay-v2.js +555 -0
  90. package/dist/ui/ask-user-overlay.d.ts +2 -2
  91. package/dist/ui/ask-user-overlay.js +443 -535
  92. package/dist/ui/ask-user-simple-overlay-v2.d.ts +25 -0
  93. package/dist/ui/ask-user-simple-overlay-v2.js +215 -0
  94. package/dist/ui/ask-user-simple-overlay.d.ts +2 -2
  95. package/dist/ui/ask-user-simple-overlay.js +182 -209
  96. package/dist/ui/backlog-overlay.d.ts +16 -1
  97. package/dist/ui/backlog-overlay.js +525 -659
  98. package/dist/ui/base/index.d.ts +26 -0
  99. package/dist/ui/base/index.js +33 -0
  100. package/dist/ui/base/inline-overlay-utils.d.ts +217 -0
  101. package/dist/ui/base/inline-overlay-utils.js +320 -0
  102. package/dist/ui/base/inline-overlay.d.ts +159 -0
  103. package/dist/ui/base/inline-overlay.js +257 -0
  104. package/dist/ui/base/key-utils.d.ts +15 -0
  105. package/dist/ui/base/key-utils.js +30 -0
  106. package/dist/ui/base/overlay-base-v2.d.ts +193 -0
  107. package/dist/ui/base/overlay-base-v2.js +246 -0
  108. package/dist/ui/base/overlay-base.d.ts +156 -0
  109. package/dist/ui/base/overlay-base.js +238 -0
  110. package/dist/ui/base/overlay-lifecycle.d.ts +65 -0
  111. package/dist/ui/base/overlay-lifecycle.js +159 -0
  112. package/dist/ui/base/overlay-types.d.ts +185 -0
  113. package/dist/ui/base/overlay-types.js +7 -0
  114. package/dist/ui/base/render-utils.d.ts +8 -0
  115. package/dist/ui/base/render-utils.js +11 -0
  116. package/dist/ui/base/screen-stack.d.ts +148 -0
  117. package/dist/ui/base/screen-stack.js +184 -0
  118. package/dist/ui/base/tabbed-list-overlay-v2.d.ts +103 -0
  119. package/dist/ui/base/tabbed-list-overlay-v2.js +317 -0
  120. package/dist/ui/base/tabbed-list-overlay.d.ts +153 -0
  121. package/dist/ui/base/tabbed-list-overlay.js +369 -0
  122. package/dist/ui/commands-overlay-v2.d.ts +33 -0
  123. package/dist/ui/commands-overlay-v2.js +441 -0
  124. package/dist/ui/commands-overlay.d.ts +7 -2
  125. package/dist/ui/commands-overlay.js +384 -355
  126. package/dist/ui/config-overlay.d.ts +5 -4
  127. package/dist/ui/config-overlay.js +243 -513
  128. package/dist/ui/conversation.d.ts +75 -4
  129. package/dist/ui/conversation.js +374 -161
  130. package/dist/ui/docs-overlay.d.ts +17 -0
  131. package/dist/ui/docs-overlay.js +303 -0
  132. package/dist/ui/ephemeral.d.ts +1 -1
  133. package/dist/ui/ephemeral.js +1 -1
  134. package/dist/ui/features/index.d.ts +34 -0
  135. package/dist/ui/features/index.js +34 -0
  136. package/dist/ui/features/input-feature.d.ts +85 -0
  137. package/dist/ui/features/input-feature.js +238 -0
  138. package/dist/ui/features/list-feature.d.ts +155 -0
  139. package/dist/ui/features/list-feature.js +244 -0
  140. package/dist/ui/features/pagination-feature.d.ts +154 -0
  141. package/dist/ui/features/pagination-feature.js +238 -0
  142. package/dist/ui/features/search-feature.d.ts +148 -0
  143. package/dist/ui/features/search-feature.js +185 -0
  144. package/dist/ui/features/tab-feature.d.ts +194 -0
  145. package/dist/ui/features/tab-feature.js +307 -0
  146. package/dist/ui/footer-v2.d.ts +222 -0
  147. package/dist/ui/footer-v2.js +1349 -0
  148. package/dist/ui/footer.d.ts +107 -0
  149. package/dist/ui/footer.js +359 -67
  150. package/dist/ui/guardrail-overlay.d.ts +29 -0
  151. package/dist/ui/guardrail-overlay.js +145 -0
  152. package/dist/ui/help-overlay-v2.d.ts +34 -0
  153. package/dist/ui/help-overlay-v2.js +309 -0
  154. package/dist/ui/help-overlay.d.ts +16 -0
  155. package/dist/ui/help-overlay.js +316 -0
  156. package/dist/ui/index.d.ts +1 -1
  157. package/dist/ui/index.js +1 -3
  158. package/dist/ui/init-overlay-v2.d.ts +34 -0
  159. package/dist/ui/init-overlay-v2.js +600 -0
  160. package/dist/ui/init-overlay.d.ts +12 -2
  161. package/dist/ui/init-overlay.js +349 -270
  162. package/dist/ui/input-prompt-v2.d.ts +1 -0
  163. package/dist/ui/input-prompt-v2.js +14 -6
  164. package/dist/ui/input-prompt.d.ts +116 -33
  165. package/dist/ui/input-prompt.js +536 -337
  166. package/dist/ui/iteration-limit-overlay-v2.d.ts +21 -0
  167. package/dist/ui/iteration-limit-overlay-v2.js +114 -0
  168. package/dist/ui/iteration-limit-overlay.d.ts +2 -2
  169. package/dist/ui/iteration-limit-overlay.js +92 -128
  170. package/dist/ui/keys-overlay-v2.d.ts +41 -0
  171. package/dist/ui/keys-overlay-v2.js +248 -0
  172. package/dist/ui/keys-overlay.d.ts +1 -0
  173. package/dist/ui/keys-overlay.js +203 -141
  174. package/dist/ui/line-utils.d.ts +88 -0
  175. package/dist/ui/line-utils.js +150 -0
  176. package/dist/ui/live-region.d.ts +161 -0
  177. package/dist/ui/live-region.js +387 -0
  178. package/dist/ui/mascot/expressions.d.ts +32 -0
  179. package/dist/ui/mascot/expressions.js +213 -0
  180. package/dist/ui/mascot/index.d.ts +8 -0
  181. package/dist/ui/mascot/index.js +8 -0
  182. package/dist/ui/mascot/renderer.d.ts +19 -0
  183. package/dist/ui/mascot/renderer.js +97 -0
  184. package/dist/ui/mascot-overlay-v2.d.ts +41 -0
  185. package/dist/ui/mascot-overlay-v2.js +138 -0
  186. package/dist/ui/mascot-overlay.d.ts +21 -0
  187. package/dist/ui/mascot-overlay.js +146 -0
  188. package/dist/ui/model-overlay-v2.d.ts +49 -0
  189. package/dist/ui/model-overlay-v2.js +118 -0
  190. package/dist/ui/model-overlay.d.ts +27 -0
  191. package/dist/ui/model-overlay.js +221 -0
  192. package/dist/ui/model-warning-overlay.js +3 -5
  193. package/dist/ui/new-overlay.d.ts +34 -0
  194. package/dist/ui/new-overlay.js +604 -0
  195. package/dist/ui/overlay/impl/agents-overlay-v2.d.ts +45 -0
  196. package/dist/ui/overlay/impl/agents-overlay-v2.js +825 -0
  197. package/dist/ui/overlay/impl/anchors-overlay-v2.d.ts +47 -0
  198. package/dist/ui/overlay/impl/anchors-overlay-v2.js +783 -0
  199. package/dist/ui/overlay/impl/arch-type-overlay-v2.d.ts +37 -0
  200. package/dist/ui/overlay/impl/arch-type-overlay-v2.js +240 -0
  201. package/dist/ui/overlay/impl/ask-user-overlay-v2.d.ts +72 -0
  202. package/dist/ui/overlay/impl/ask-user-overlay-v2.js +584 -0
  203. package/dist/ui/overlay/impl/ask-user-simple-overlay-v2.d.ts +46 -0
  204. package/dist/ui/overlay/impl/ask-user-simple-overlay-v2.js +204 -0
  205. package/dist/ui/overlay/impl/backlog-overlay-v2.d.ts +49 -0
  206. package/dist/ui/overlay/impl/backlog-overlay-v2.js +642 -0
  207. package/dist/ui/overlay/impl/commands-overlay-v2.d.ts +33 -0
  208. package/dist/ui/overlay/impl/commands-overlay-v2.js +441 -0
  209. package/dist/ui/overlay/impl/config-overlay-v2.d.ts +100 -0
  210. package/dist/ui/overlay/impl/config-overlay-v2.js +654 -0
  211. package/dist/ui/overlay/impl/dashboard-overlay-v2.d.ts +55 -0
  212. package/dist/ui/overlay/impl/dashboard-overlay-v2.js +359 -0
  213. package/dist/ui/overlay/impl/docs-overlay-v2.d.ts +45 -0
  214. package/dist/ui/overlay/impl/docs-overlay-v2.js +114 -0
  215. package/dist/ui/overlay/impl/document-detail-overlay-v2.d.ts +77 -0
  216. package/dist/ui/overlay/impl/document-detail-overlay-v2.js +1071 -0
  217. package/dist/ui/overlay/impl/guardrail-overlay-v2.d.ts +43 -0
  218. package/dist/ui/overlay/impl/guardrail-overlay-v2.js +114 -0
  219. package/dist/ui/overlay/impl/help-overlay-v2.d.ts +34 -0
  220. package/dist/ui/overlay/impl/help-overlay-v2.js +309 -0
  221. package/dist/ui/overlay/impl/init-overlay-v2.d.ts +77 -0
  222. package/dist/ui/overlay/impl/init-overlay-v2.js +593 -0
  223. package/dist/ui/overlay/impl/init-setup-overlay-v2.d.ts +25 -0
  224. package/dist/ui/overlay/impl/init-setup-overlay-v2.js +97 -0
  225. package/dist/ui/overlay/impl/iteration-limit-overlay-v2.d.ts +35 -0
  226. package/dist/ui/overlay/impl/iteration-limit-overlay-v2.js +105 -0
  227. package/dist/ui/overlay/impl/keys-overlay-v2.d.ts +41 -0
  228. package/dist/ui/overlay/impl/keys-overlay-v2.js +248 -0
  229. package/dist/ui/overlay/impl/mascot-overlay-v2.d.ts +41 -0
  230. package/dist/ui/overlay/impl/mascot-overlay-v2.js +138 -0
  231. package/dist/ui/overlay/impl/model-overlay-v2.d.ts +49 -0
  232. package/dist/ui/overlay/impl/model-overlay-v2.js +118 -0
  233. package/dist/ui/overlay/impl/model-warning-overlay-v2.d.ts +46 -0
  234. package/dist/ui/overlay/impl/model-warning-overlay-v2.js +132 -0
  235. package/dist/ui/overlay/impl/new-overlay-v2.d.ts +77 -0
  236. package/dist/ui/overlay/impl/new-overlay-v2.js +593 -0
  237. package/dist/ui/overlay/impl/permission-overlay-v2.d.ts +36 -0
  238. package/dist/ui/overlay/impl/permission-overlay-v2.js +380 -0
  239. package/dist/ui/overlay/impl/projects-overlay-v2.d.ts +36 -0
  240. package/dist/ui/overlay/impl/projects-overlay-v2.js +499 -0
  241. package/dist/ui/overlay/impl/theme-overlay-v2.d.ts +42 -0
  242. package/dist/ui/overlay/impl/theme-overlay-v2.js +135 -0
  243. package/dist/ui/overlay/impl/tools-overlay-v2.d.ts +47 -0
  244. package/dist/ui/overlay/impl/tools-overlay-v2.js +218 -0
  245. package/dist/ui/overlay/impl/tutorial-overlay-v2.d.ts +31 -0
  246. package/dist/ui/overlay/impl/tutorial-overlay-v2.js +1035 -0
  247. package/dist/ui/overlay/impl/workflow-overlay-v2.d.ts +80 -0
  248. package/dist/ui/overlay/impl/workflow-overlay-v2.js +637 -0
  249. package/dist/ui/overlay/index.d.ts +33 -0
  250. package/dist/ui/overlay/index.js +35 -0
  251. package/dist/ui/overlay/key-utils.d.ts +6 -0
  252. package/dist/ui/overlay/key-utils.js +6 -0
  253. package/dist/ui/overlay/overlay-types.d.ts +128 -0
  254. package/dist/ui/overlay/overlay-types.js +22 -0
  255. package/dist/ui/overlay/types.d.ts +135 -0
  256. package/dist/ui/overlay/types.js +22 -0
  257. package/dist/ui/overlays/help-overlay-v2.d.ts +28 -0
  258. package/dist/ui/overlays/help-overlay-v2.js +198 -0
  259. package/dist/ui/overlays/index.d.ts +11 -0
  260. package/dist/ui/overlays/index.js +11 -0
  261. package/dist/ui/overlays.d.ts +0 -4
  262. package/dist/ui/overlays.js +0 -444
  263. package/dist/ui/permission-overlay-v2.d.ts +36 -0
  264. package/dist/ui/permission-overlay-v2.js +380 -0
  265. package/dist/ui/permission-overlay.d.ts +1 -1
  266. package/dist/ui/permission-overlay.js +186 -298
  267. package/dist/ui/projects-overlay.d.ts +19 -0
  268. package/dist/ui/projects-overlay.js +484 -0
  269. package/dist/ui/providers/types.d.ts +178 -0
  270. package/dist/ui/providers/types.js +9 -0
  271. package/dist/ui/render-modes.d.ts +36 -0
  272. package/dist/ui/render-modes.js +44 -0
  273. package/dist/ui/startup-menu.d.ts +36 -0
  274. package/dist/ui/startup-menu.js +236 -0
  275. package/dist/ui/subagent-renderer.d.ts +117 -0
  276. package/dist/ui/subagent-renderer.js +334 -0
  277. package/dist/ui/terminal-codes.d.ts +94 -0
  278. package/dist/ui/terminal-codes.js +124 -0
  279. package/dist/ui/terminal-renderer.d.ts +221 -0
  280. package/dist/ui/terminal-renderer.js +751 -0
  281. package/dist/ui/terminal-ui.d.ts +463 -0
  282. package/dist/ui/terminal-ui.js +2296 -0
  283. package/dist/ui/terminal.d.ts +20 -0
  284. package/dist/ui/terminal.js +72 -0
  285. package/dist/ui/theme-overlay-v2.d.ts +42 -0
  286. package/dist/ui/theme-overlay-v2.js +135 -0
  287. package/dist/ui/theme-overlay.d.ts +24 -0
  288. package/dist/ui/theme-overlay.js +127 -0
  289. package/dist/ui/todo-zone.js +53 -25
  290. package/dist/ui/tool-formatters.d.ts +16 -0
  291. package/dist/ui/tool-formatters.js +516 -0
  292. package/dist/ui/tools-overlay-v2.d.ts +47 -0
  293. package/dist/ui/tools-overlay-v2.js +218 -0
  294. package/dist/ui/tools-overlay.d.ts +10 -2
  295. package/dist/ui/tools-overlay.js +172 -220
  296. package/dist/ui/tutorial-overlay-v2.d.ts +31 -0
  297. package/dist/ui/tutorial-overlay-v2.js +1035 -0
  298. package/dist/ui/tutorial-overlay.d.ts +1 -0
  299. package/dist/ui/tutorial-overlay.js +400 -302
  300. package/dist/ui/workflow-overlay.d.ts +22 -0
  301. package/dist/ui/workflow-overlay.js +636 -0
  302. package/dist/utils/debug-log.d.ts +28 -0
  303. package/dist/utils/debug-log.js +57 -0
  304. package/dist/utils/model-tiers.js +1 -1
  305. package/dist/utils/path-safety.d.ts +56 -0
  306. package/dist/utils/path-safety.js +239 -0
  307. package/dist/workflow/guided-mode-injector.d.ts +42 -0
  308. package/dist/workflow/guided-mode-injector.js +191 -0
  309. package/dist/workflow/index.d.ts +8 -0
  310. package/dist/workflow/index.js +8 -0
  311. package/dist/workflow/step-criteria.d.ts +62 -0
  312. package/dist/workflow/step-criteria.js +150 -0
  313. package/dist/workflow/step-tracker.d.ts +92 -0
  314. package/dist/workflow/step-tracker.js +141 -0
  315. package/package.json +12 -5
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Settings Commands for REPL V2
3
+ *
4
+ * Commands for configuration: theme, config, verbose, model, tools, agents
5
+ */
6
+ import type { CommandHandlerV2 } from '../types.js';
7
+ export declare const themeCommand: CommandHandlerV2;
8
+ export declare const configCommand: CommandHandlerV2;
9
+ export declare const verboseCommand: CommandHandlerV2;
10
+ export declare const modelCommand: CommandHandlerV2;
11
+ export declare const toolsCommand: CommandHandlerV2;
12
+ export declare const keysCommand: CommandHandlerV2;
13
+ export declare const mascotCommand: CommandHandlerV2;
14
+ export declare const agentsCommand: CommandHandlerV2;
15
+ export declare const settingsCommands: CommandHandlerV2[];
@@ -0,0 +1,235 @@
1
+ /**
2
+ * Settings Commands for REPL V2
3
+ *
4
+ * Commands for configuration: theme, config, verbose, model, tools, agents
5
+ */
6
+ import { ThemeOverlayV2, ModelOverlayV2, ToolsOverlayV2, KeysOverlayV2, MascotOverlayV2, AgentsOverlayV2, ConfigOverlayV2 } from '../../ui/overlay/index.js';
7
+ import { getSetting, getSettings } from '../../settings/index.js';
8
+ import { getToolPermissionInfo } from '../../agent.js';
9
+ // =============================================================================
10
+ // Theme Command
11
+ // =============================================================================
12
+ export const themeCommand = {
13
+ name: 'theme',
14
+ description: 'Change color theme',
15
+ async execute(_args, ctx) {
16
+ const themeOverlay = new ThemeOverlayV2();
17
+ await ctx.ui.showOverlay(themeOverlay);
18
+ return true;
19
+ },
20
+ };
21
+ // =============================================================================
22
+ // Config Command
23
+ // =============================================================================
24
+ export const configCommand = {
25
+ name: 'config',
26
+ description: 'Open settings panel',
27
+ async execute(_args, ctx) {
28
+ // Gather current session info
29
+ const currentModel = getSetting('defaultModel') || 'unknown';
30
+ const currentProvider = getSetting('defaultProvider');
31
+ const configOverlay = new ConfigOverlayV2({
32
+ version: ctx.version,
33
+ model: currentModel,
34
+ provider: currentProvider === 'auto' ? 'claude' : currentProvider,
35
+ cwd: process.cwd(),
36
+ toolCount: 13, // TODO: Get actual tool count from context
37
+ startTime: ctx.startTime ?? new Date(),
38
+ inputTokens: ctx.sessionInputTokens ?? 0,
39
+ outputTokens: ctx.sessionOutputTokens ?? 0,
40
+ requests: ctx.sessionRequests ?? 0,
41
+ contextUsed: 0, // TODO: Get from context manager
42
+ contextMax: 200000,
43
+ messageCount: ctx.getHistory?.().length ?? 0,
44
+ });
45
+ const result = await ctx.ui.showOverlay(configOverlay);
46
+ if (result?.settingsChanged) {
47
+ ctx.ui.print({ type: 'info', message: 'Settings updated' });
48
+ }
49
+ return true;
50
+ },
51
+ };
52
+ // =============================================================================
53
+ // Verbose Command
54
+ // =============================================================================
55
+ export const verboseCommand = {
56
+ name: 'verbose',
57
+ description: 'Toggle verbose mode',
58
+ execute(_args, ctx) {
59
+ const config = ctx.ui.getConfig();
60
+ const newVerbose = !config.verbose;
61
+ ctx.ui.setConfig({ verbose: newVerbose });
62
+ ctx.ui.print({
63
+ type: 'info',
64
+ message: `Verbose mode: ${newVerbose ? 'ON' : 'OFF'}`,
65
+ });
66
+ return Promise.resolve(true);
67
+ },
68
+ };
69
+ // =============================================================================
70
+ // Model Command
71
+ // =============================================================================
72
+ export const modelCommand = {
73
+ name: 'model',
74
+ description: 'Change AI model',
75
+ async execute(_args, ctx) {
76
+ const currentModel = getSetting('defaultModel') ?? undefined;
77
+ const currentProvider = getSetting('defaultProvider');
78
+ const modelOverlay = new ModelOverlayV2({
79
+ currentModel: currentModel ?? undefined,
80
+ currentProvider: currentProvider === 'auto' ? undefined : currentProvider,
81
+ });
82
+ const result = await ctx.ui.showOverlay(modelOverlay);
83
+ if (result?.modelChanged) {
84
+ if (result.requiresRestart) {
85
+ ctx.ui.print({
86
+ type: 'warning',
87
+ message: `Switched to ${result.provider ?? 'unknown'} provider. Restart required.`,
88
+ });
89
+ }
90
+ else {
91
+ ctx.ui.print({
92
+ type: 'success',
93
+ message: `Model changed to ${result.modelChanged}`,
94
+ });
95
+ }
96
+ }
97
+ return true;
98
+ },
99
+ };
100
+ // =============================================================================
101
+ // Tools Command
102
+ // =============================================================================
103
+ export const toolsCommand = {
104
+ name: 'tools',
105
+ description: 'Show available tools',
106
+ async execute(_args, ctx) {
107
+ // Get tools from agent if available, otherwise use fallback list
108
+ const tools = ctx.agent ? getAgentTools(ctx) : getDefaultTools();
109
+ const toolsOverlay = new ToolsOverlayV2({ tools });
110
+ await ctx.ui.showOverlay(toolsOverlay);
111
+ return true;
112
+ },
113
+ };
114
+ /**
115
+ * Get tool definitions from the agent with full parameter and permission info.
116
+ */
117
+ function getAgentTools(ctx) {
118
+ if (!ctx.agent)
119
+ return getDefaultTools();
120
+ return ctx.agent.getToolDefinitions().map((t) => {
121
+ // Extract parameters from inputSchema
122
+ const parameters = [];
123
+ const props = t.inputSchema.properties;
124
+ const required = t.inputSchema.required ?? [];
125
+ for (const [name, schema] of Object.entries(props)) {
126
+ parameters.push({
127
+ name,
128
+ type: schema.type ?? 'unknown',
129
+ description: schema.description,
130
+ required: required.includes(name),
131
+ });
132
+ }
133
+ // Look up permission info
134
+ const permissionInfo = getToolPermissionInfo(t.name);
135
+ const permission = permissionInfo
136
+ ? { level: permissionInfo.level, description: permissionInfo.description }
137
+ : undefined;
138
+ // For task tool, extract just the intro (before verbose agent types list)
139
+ let description = t.description;
140
+ if (t.name === 'task' && description.includes('Available agent types:')) {
141
+ description = description.split('Available agent types:')[0].trim();
142
+ }
143
+ return {
144
+ name: t.name,
145
+ description,
146
+ parameters,
147
+ permission,
148
+ };
149
+ });
150
+ }
151
+ /**
152
+ * Fallback tool definitions when agent is not available.
153
+ */
154
+ function getDefaultTools() {
155
+ return [
156
+ { name: 'read_file', description: 'Read contents of a file' },
157
+ { name: 'write_file', description: 'Write contents to a file' },
158
+ { name: 'edit', description: 'Edit a file with find/replace' },
159
+ { name: 'glob', description: 'Find files matching a pattern' },
160
+ { name: 'grep', description: 'Search for text in files' },
161
+ { name: 'bash', description: 'Execute a bash command' },
162
+ { name: 'task', description: 'Spawn a sub-agent for complex tasks' },
163
+ { name: 'todoWrite', description: 'Write items to the todo list' },
164
+ { name: 'todoRead', description: 'Read the current todo list' },
165
+ { name: 'suggest', description: 'Suggest text for the input prompt' },
166
+ { name: 'webFetch', description: 'Fetch content from a URL' },
167
+ { name: 'askUser', description: 'Ask the user a question' },
168
+ { name: 'askUserSimple', description: 'Ask the user a simple question' },
169
+ ];
170
+ }
171
+ // =============================================================================
172
+ // Keys Command
173
+ // =============================================================================
174
+ export const keysCommand = {
175
+ name: 'keys',
176
+ description: 'Manage API keys',
177
+ async execute(_args, ctx) {
178
+ const keysOverlay = new KeysOverlayV2();
179
+ const result = await ctx.ui.showOverlay(keysOverlay);
180
+ if (result?.changed) {
181
+ ctx.ui.print({ type: 'success', message: 'API keys updated' });
182
+ }
183
+ return true;
184
+ },
185
+ };
186
+ // =============================================================================
187
+ // Mascot Command
188
+ // =============================================================================
189
+ export const mascotCommand = {
190
+ name: 'mascot',
191
+ description: 'Select mascot expression',
192
+ async execute(_args, ctx) {
193
+ const currentMascot = getSettings().mascot;
194
+ const mascotOverlay = new MascotOverlayV2({ currentMascot });
195
+ const result = await ctx.ui.showOverlay(mascotOverlay);
196
+ if (result?.mascotChanged) {
197
+ ctx.ui.print({ type: 'success', message: `Mascot changed to: ${result.mascotChanged}` });
198
+ }
199
+ return true;
200
+ },
201
+ };
202
+ // =============================================================================
203
+ // Agents Command
204
+ // =============================================================================
205
+ export const agentsCommand = {
206
+ name: 'agents',
207
+ description: 'View and manage agents',
208
+ async execute(_args, ctx) {
209
+ const agentsOverlay = new AgentsOverlayV2();
210
+ const result = await ctx.ui.showOverlay(agentsOverlay);
211
+ if (result?.created) {
212
+ ctx.ui.print({ type: 'success', message: `Agent created: ${result.created}` });
213
+ }
214
+ else if (result?.edited) {
215
+ ctx.ui.print({ type: 'success', message: `Agent updated: ${result.edited}` });
216
+ }
217
+ else if (result?.deleted) {
218
+ ctx.ui.print({ type: 'info', message: `Agent deleted: ${result.deleted}` });
219
+ }
220
+ return true;
221
+ },
222
+ };
223
+ // =============================================================================
224
+ // Export All Settings Commands
225
+ // =============================================================================
226
+ export const settingsCommands = [
227
+ themeCommand,
228
+ configCommand,
229
+ verboseCommand,
230
+ modelCommand,
231
+ toolsCommand,
232
+ keysCommand,
233
+ mascotCommand,
234
+ agentsCommand,
235
+ ];
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Commands V2 Module
3
+ *
4
+ * Command system for the new TerminalUI-based REPL.
5
+ */
6
+ export type { CommandContextV2, CommandHandlerV2, CommandResultV2 } from './types.js';
7
+ export { registerCommand, registerCommands, getCommand, executeCommand, getCommandNames, hasCommand, clearCommands, } from './registry.js';
8
+ export { allCommands } from './handlers/index.js';
9
+ export { coreCommands } from './handlers/core.js';
10
+ export { settingsCommands } from './handlers/settings.js';
11
+ export { contextCommands } from './handlers/context.js';
12
+ export { projectCommands } from './handlers/project.js';
13
+ export { debugCommands } from './handlers/debug.js';
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Commands V2 Module
3
+ *
4
+ * Command system for the new TerminalUI-based REPL.
5
+ */
6
+ // Registry
7
+ export { registerCommand, registerCommands, getCommand, executeCommand, getCommandNames, hasCommand, clearCommands, } from './registry.js';
8
+ // All handlers
9
+ export { allCommands } from './handlers/index.js';
10
+ // Individual handler modules (for selective imports)
11
+ export { coreCommands } from './handlers/core.js';
12
+ export { settingsCommands } from './handlers/settings.js';
13
+ export { contextCommands } from './handlers/context.js';
14
+ export { projectCommands } from './handlers/project.js';
15
+ export { debugCommands } from './handlers/debug.js';
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Command Registry for REPL V2
3
+ *
4
+ * Central registry for all V2 command handlers.
5
+ * Handles command resolution (including aliases) and execution.
6
+ */
7
+ import type { CommandHandlerV2, CommandContextV2, CommandResultV2 } from './types.js';
8
+ /**
9
+ * Register a command handler.
10
+ */
11
+ export declare function registerCommand(handler: CommandHandlerV2): void;
12
+ /**
13
+ * Register multiple command handlers.
14
+ */
15
+ export declare function registerCommands(handlerList: CommandHandlerV2[]): void;
16
+ /**
17
+ * Get a command handler by name or alias.
18
+ */
19
+ export declare function getCommand(nameOrAlias: string): CommandHandlerV2 | undefined;
20
+ /**
21
+ * Execute a command by name or alias.
22
+ *
23
+ * @returns true to continue, false to exit, null if command not found
24
+ */
25
+ export declare function executeCommand(nameOrAlias: string, args: string, ctx: CommandContextV2): Promise<CommandResultV2>;
26
+ /**
27
+ * Get all registered command names (excluding aliases).
28
+ */
29
+ export declare function getCommandNames(): string[];
30
+ /**
31
+ * Check if a command exists (by name or alias).
32
+ */
33
+ export declare function hasCommand(nameOrAlias: string): boolean;
34
+ /**
35
+ * Clear all registered commands (for testing).
36
+ */
37
+ export declare function clearCommands(): void;
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Command Registry for REPL V2
3
+ *
4
+ * Central registry for all V2 command handlers.
5
+ * Handles command resolution (including aliases) and execution.
6
+ */
7
+ // =============================================================================
8
+ // Registry State
9
+ // =============================================================================
10
+ const handlers = new Map();
11
+ const aliasMap = new Map();
12
+ // =============================================================================
13
+ // Registry Functions
14
+ // =============================================================================
15
+ /**
16
+ * Register a command handler.
17
+ */
18
+ export function registerCommand(handler) {
19
+ handlers.set(handler.name, handler);
20
+ // Register aliases
21
+ if (handler.aliases) {
22
+ for (const alias of handler.aliases) {
23
+ aliasMap.set(alias, handler.name);
24
+ }
25
+ }
26
+ }
27
+ /**
28
+ * Register multiple command handlers.
29
+ */
30
+ export function registerCommands(handlerList) {
31
+ for (const handler of handlerList) {
32
+ registerCommand(handler);
33
+ }
34
+ }
35
+ /**
36
+ * Get a command handler by name or alias.
37
+ */
38
+ export function getCommand(nameOrAlias) {
39
+ // Try direct lookup first
40
+ const handler = handlers.get(nameOrAlias);
41
+ if (handler)
42
+ return handler;
43
+ // Try alias lookup
44
+ const resolvedName = aliasMap.get(nameOrAlias);
45
+ if (resolvedName) {
46
+ return handlers.get(resolvedName);
47
+ }
48
+ return undefined;
49
+ }
50
+ /**
51
+ * Execute a command by name or alias.
52
+ *
53
+ * @returns true to continue, false to exit, null if command not found
54
+ */
55
+ export async function executeCommand(nameOrAlias, args, ctx) {
56
+ const handler = getCommand(nameOrAlias);
57
+ if (!handler) {
58
+ return null; // Command not found
59
+ }
60
+ return handler.execute(args, ctx);
61
+ }
62
+ /**
63
+ * Get all registered command names (excluding aliases).
64
+ */
65
+ export function getCommandNames() {
66
+ return Array.from(handlers.keys());
67
+ }
68
+ /**
69
+ * Check if a command exists (by name or alias).
70
+ */
71
+ export function hasCommand(nameOrAlias) {
72
+ return handlers.has(nameOrAlias) || aliasMap.has(nameOrAlias);
73
+ }
74
+ /**
75
+ * Clear all registered commands (for testing).
76
+ */
77
+ export function clearCommands() {
78
+ handlers.clear();
79
+ aliasMap.clear();
80
+ }
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Command Handler Types for REPL V2
3
+ *
4
+ * Command system for the new TerminalUI-based REPL.
5
+ * Uses TerminalUI instead of Footer, with real agent integration.
6
+ */
7
+ import type { Agent, ContextManager } from '@compilr-dev/agents';
8
+ import type { TerminalUI, AgentMessage } from '../ui/terminal-ui.js';
9
+ /**
10
+ * Context passed to V2 command handlers.
11
+ * Provides access to agent, UI, and session information.
12
+ */
13
+ export interface CommandContextV2 {
14
+ /** TerminalUI instance for output and overlays */
15
+ ui: TerminalUI;
16
+ /** CLI version string */
17
+ version: string;
18
+ /** Re-print the welcome screen (logo + hints for REPL mode) */
19
+ printWelcome: () => void;
20
+ /** Print just the logo (for dashboard mode) */
21
+ printLogo: () => void;
22
+ /** The main agent instance (may be undefined in simulation mode) */
23
+ agent?: Agent;
24
+ /** Current LLM model ID */
25
+ model?: string;
26
+ /** Current LLM provider (claude, openai, gemini, ollama) */
27
+ provider?: string;
28
+ /** Get the context manager from agent (for token/context stats) */
29
+ getContextManager?: () => ContextManager | null;
30
+ /** Get conversation history from agent */
31
+ getHistory?: () => Array<{
32
+ role: string;
33
+ content: unknown;
34
+ }>;
35
+ /**
36
+ * Queue a message to be sent to the agent after the command returns.
37
+ * The displayMessage (if provided) is shown to the user, while the
38
+ * full message is sent to the agent.
39
+ */
40
+ queueAgentMessage: (options: AgentMessage) => void;
41
+ /** Session start time */
42
+ startTime?: Date;
43
+ /** Total input tokens used in session */
44
+ sessionInputTokens?: number;
45
+ /** Total output tokens used in session */
46
+ sessionOutputTokens?: number;
47
+ /** Total requests in session */
48
+ sessionRequests?: number;
49
+ }
50
+ /**
51
+ * Interface for a V2 command handler.
52
+ */
53
+ export interface CommandHandlerV2 {
54
+ /** Primary command name (without leading slash) */
55
+ name: string;
56
+ /** Optional aliases that resolve to this command */
57
+ aliases?: string[];
58
+ /** Short description for help text */
59
+ description: string;
60
+ /**
61
+ * Execute the command.
62
+ *
63
+ * @param args - Arguments passed after the command
64
+ * @param ctx - Command context with dependencies
65
+ * @returns true to continue REPL, false to exit
66
+ */
67
+ execute(args: string, ctx: CommandContextV2): Promise<boolean>;
68
+ }
69
+ /**
70
+ * Result of executing a command.
71
+ * - true: Command handled successfully, continue REPL
72
+ * - false: Exit REPL (e.g., /exit command)
73
+ * - null: Command not found in registry
74
+ */
75
+ export type CommandResultV2 = boolean | null;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Command Handler Types for REPL V2
3
+ *
4
+ * Command system for the new TerminalUI-based REPL.
5
+ * Uses TerminalUI instead of Footer, with real agent integration.
6
+ */
7
+ export {};
package/dist/commands.js CHANGED
@@ -21,6 +21,20 @@ export const COMMANDS = [
21
21
  'Esc to close',
22
22
  ],
23
23
  },
24
+ {
25
+ name: 'anchors',
26
+ description: 'View and manage anchors (persistent context)',
27
+ details: 'Anchors are critical pieces of information that survive context compaction. They are always included at the top of the context window. Manage both global anchors and project-specific anchors.',
28
+ examples: [{ code: '/anchors' }],
29
+ interactions: [
30
+ '↑/↓ to navigate anchors',
31
+ '[a] Add new anchor',
32
+ '[e] or Enter to edit',
33
+ '[d] to delete',
34
+ '[r] to refresh',
35
+ 'Esc to close',
36
+ ],
37
+ },
24
38
  {
25
39
  name: 'arch',
26
40
  description: 'Create architecture documentation (ADRs, diagrams, etc.)',
@@ -103,9 +117,23 @@ export const COMMANDS = [
103
117
  {
104
118
  name: 'design',
105
119
  description: 'Design your project and populate the backlog',
106
- details: 'Comprehensive requirements gathering workflow. The agent guides you through vision, features, and technical context phases, then creates a PRD and populates the backlog with 5-15 items. Best used after /init.',
120
+ details: 'Comprehensive requirements gathering workflow. The agent guides you through vision, features, and technical context phases, then creates a PRD and populates the backlog with 5-15 items. Best used after /new.',
107
121
  examples: [{ code: '/design' }],
108
122
  },
123
+ {
124
+ name: 'docs',
125
+ description: 'View project documents (PRD, architecture, etc.)',
126
+ details: 'Opens an overlay to browse and read documents stored in the database for the active project. Documents are created by /design, /arch, and other workflow commands.',
127
+ examples: [
128
+ { code: '/docs', description: 'List all documents' },
129
+ ],
130
+ interactions: [
131
+ '↑/↓ or j/k to navigate',
132
+ 'Enter to view document',
133
+ '↑/↓ to scroll content',
134
+ 'Esc to go back or close',
135
+ ],
136
+ },
109
137
  {
110
138
  name: 'exit',
111
139
  description: 'Exit the REPL',
@@ -152,21 +180,57 @@ export const COMMANDS = [
152
180
  ],
153
181
  },
154
182
  {
155
- name: 'init',
156
- description: 'Initialize a new project with structured workflow',
183
+ name: 'menu',
184
+ description: 'Return to Project Dashboard',
185
+ details: 'Opens the Project Dashboard where you can see current project info, switch projects, or start new work. From the dashboard you can create new projects, open existing ones, or start Quick Chat mode.',
186
+ examples: [{ code: '/menu' }],
187
+ interactions: [
188
+ '↑/↓ or j/k to navigate',
189
+ '←/→ or h/l to switch tabs (Dashboard ↔ More)',
190
+ 'Enter to select, q/Esc to exit',
191
+ 'n for /new, p for projects, c for chat, w for workflow',
192
+ ],
193
+ },
194
+ {
195
+ name: 'new',
196
+ description: 'Create a new project with structured workflow',
157
197
  details: 'Interactive wizard to scaffold a new project. Asks about project name, type, tech stack, and documentation preferences. Creates project structure with COMPILR.md, backlog, and optional separate docs repo.',
158
- examples: [{ code: '/init' }],
198
+ examples: [{ code: '/new' }],
159
199
  interactions: [
160
200
  '8-step wizard (0-7)',
161
201
  '↑/↓ for selection steps, type for input steps',
162
202
  'Enter to confirm, Esc to go back',
163
203
  ],
164
204
  },
205
+ {
206
+ name: 'init',
207
+ description: 'View CLI setup status (placeholder)',
208
+ details: 'Shows current CLI configuration status including API keys, provider settings, and startup preferences. Directs users to /config, /keys, and other commands for configuration. Full setup wizard coming in a future release.',
209
+ examples: [{ code: '/init' }],
210
+ },
211
+ {
212
+ name: 'mascot',
213
+ description: 'Select mascot expression',
214
+ details: 'Opens the mascot selector overlay. Choose the mascot expression shown in the CLI. Options include various expressions, random (changes each startup), or none.',
215
+ examples: [{ code: '/mascot' }],
216
+ interactions: [
217
+ '↑/↓ or j/k to navigate options',
218
+ 'Enter/Space to select mascot',
219
+ 'q/Esc to close without changing',
220
+ ],
221
+ },
165
222
  {
166
223
  name: 'model',
167
- description: 'Show the current model',
168
- details: 'Displays the currently active LLM model (e.g., claude-3-5-sonnet, gpt-4o).',
224
+ description: 'Select LLM model',
225
+ details: 'Opens the model selector overlay. Choose from Claude, OpenAI, Gemini, or Ollama models. Changes within the same provider apply immediately; switching providers requires restart.',
169
226
  examples: [{ code: '/model' }],
227
+ interactions: [
228
+ 'Tab/Shift+Tab to switch providers',
229
+ '1-4 for quick provider selection',
230
+ '↑/↓ or j/k to navigate models',
231
+ 'Enter to select model',
232
+ 'Esc to close',
233
+ ],
170
234
  },
171
235
  {
172
236
  name: 'note',
@@ -193,6 +257,21 @@ export const COMMANDS = [
193
257
  { code: '/prd scope', description: 'Update scope section' },
194
258
  ],
195
259
  },
260
+ {
261
+ name: 'projects',
262
+ description: 'View and manage projects',
263
+ details: 'Opens an interactive overlay to browse, filter, and manage projects tracked in the database. You can view details, open projects, archive, restore, or delete them.',
264
+ examples: [{ code: '/projects' }],
265
+ interactions: [
266
+ 'Tab cycles: All → Active → Paused → Completed → Archived',
267
+ '↑/↓ or j/k to navigate',
268
+ 'Enter to view details and actions',
269
+ 'x to archive/restore project',
270
+ 'd to delete project',
271
+ 'a to show/hide archived',
272
+ 'Esc to close',
273
+ ],
274
+ },
196
275
  {
197
276
  name: 'refine',
198
277
  description: 'Refine and expand existing requirements',
@@ -220,6 +299,19 @@ export const COMMANDS = [
220
299
  details: 'Displays current session status including CLI version, active model, mode, and context usage.',
221
300
  examples: [{ code: '/status' }],
222
301
  },
302
+ {
303
+ name: 'theme',
304
+ description: 'Select UI theme',
305
+ details: 'Opens the theme selector overlay. Browse themes with tabs for Curated, All, Dark, and Light. Themes are terminal color schemes that change the UI appearance.',
306
+ examples: [{ code: '/theme' }],
307
+ interactions: [
308
+ 'Tab cycles: Curated → All → Dark → Light',
309
+ '↑/↓ or j/k to navigate, ←/→ for pages',
310
+ '/ to search themes by name',
311
+ '1-9,0 for quick selection (Curated tab)',
312
+ 'Enter/Space to select, q/Esc to close',
313
+ ],
314
+ },
223
315
  {
224
316
  name: 'todos',
225
317
  description: 'List current todo items',
@@ -238,10 +330,21 @@ export const COMMANDS = [
238
330
  details: 'Shows all tools available to the agent including file operations, bash, git, and custom tools.',
239
331
  examples: [{ code: '/tools' }],
240
332
  },
333
+ {
334
+ name: 'workflow',
335
+ description: 'Show workflow status and next steps',
336
+ details: 'Displays the current project workflow status, progress through phases (init → design → backlog → scaffold → build), and recommended next actions. Helps you understand where you are in the development process.',
337
+ examples: [{ code: '/workflow' }],
338
+ interactions: [
339
+ '↑/↓ to navigate actions',
340
+ 'Enter to run selected action',
341
+ 'Esc to close',
342
+ ],
343
+ },
241
344
  {
242
345
  name: 'tutorial',
243
346
  description: 'Interactive tutorial for the workflow',
244
- details: 'Opens an interactive tutorial that guides you through the compilr.dev workflow. Choose a guided tour to learn everything step-by-step, or jump directly to specific topics like /init, /design, or /build.',
347
+ details: 'Opens an interactive tutorial that guides you through the compilr.dev workflow. Choose a guided tour to learn everything step-by-step, or jump directly to specific topics like /new, /design, or /build.',
245
348
  examples: [{ code: '/tutorial' }],
246
349
  interactions: [
247
350
  '↑/↓ to navigate options and topics',