@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
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Open a URL in the default browser.
3
+ * Returns true if browser was opened successfully.
4
+ */
5
+ import { exec } from 'child_process';
6
+ import * as os from 'os';
7
+ export function openBrowser(url) {
8
+ return new Promise((resolve) => {
9
+ const platform = os.platform();
10
+ let cmd;
11
+ switch (platform) {
12
+ case 'darwin':
13
+ cmd = `open "${url}"`;
14
+ break;
15
+ case 'win32':
16
+ cmd = `start "" "${url}"`;
17
+ break;
18
+ default:
19
+ // Linux and others
20
+ cmd = `xdg-open "${url}"`;
21
+ break;
22
+ }
23
+ exec(cmd, (error) => {
24
+ if (error) {
25
+ resolve(false);
26
+ }
27
+ else {
28
+ resolve(true);
29
+ }
30
+ });
31
+ });
32
+ }
@@ -8,6 +8,7 @@ import * as fs from 'fs';
8
8
  import * as path from 'path';
9
9
  import * as os from 'os';
10
10
  import { getAllowedDeletePaths, isDeleteProtectionEnabled, isProjectMatchRequired } from '../settings/paths.js';
11
+ import { truncatePlain as truncate } from '@compilr-dev/ui-core/utils';
11
12
  // =============================================================================
12
13
  // Dangerous Paths
13
14
  // =============================================================================
@@ -227,7 +228,7 @@ export function getSafeDisplayPath(targetPath, maxLength = 50) {
227
228
  }
228
229
  const parts = targetPath.split(path.sep);
229
230
  if (parts.length <= 2) {
230
- return targetPath.slice(0, maxLength - 3) + '...';
231
+ return truncate(targetPath, maxLength);
231
232
  }
232
233
  // Show first and last parts with ellipsis
233
234
  const first = parts.slice(0, 2).join(path.sep);
@@ -235,5 +236,5 @@ export function getSafeDisplayPath(targetPath, maxLength = 50) {
235
236
  if (first.length + last.length + 4 <= maxLength) {
236
237
  return first + '/.../' + last;
237
238
  }
238
- return targetPath.slice(0, maxLength - 3) + '...';
239
+ return truncate(targetPath, maxLength);
239
240
  }
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Project Detection Utilities
3
+ *
4
+ * Utilities for detecting project information from an existing directory.
5
+ * Used by the import project feature in /new wizard.
6
+ */
7
+ export interface DetectedProject {
8
+ /** Project name from package.json or folder name */
9
+ name: string;
10
+ /** Prettified display name */
11
+ displayName: string;
12
+ /** Source of the name (package.json, go.mod, folder) */
13
+ nameSource: 'package.json' | 'go.mod' | 'pyproject.toml' | 'Cargo.toml' | 'folder';
14
+ /** Detected primary language (null if unknown) */
15
+ language: string | null;
16
+ /** Detected framework (null if not detected) */
17
+ framework: string | null;
18
+ /** Detected package manager (null if not detected) */
19
+ packageManager: string | null;
20
+ /** Whether .git directory exists */
21
+ hasGit: boolean;
22
+ /** Git remote URL (null if not configured) */
23
+ gitRemote: string | null;
24
+ /** Current git branch (null if not in git repo) */
25
+ gitBranch: string | null;
26
+ /** Whether COMPILR.md exists */
27
+ hasCompilrMd: boolean;
28
+ /** Whether CLAUDE.md exists (alternative) */
29
+ hasClaudeMd: boolean;
30
+ }
31
+ export interface GitInfo {
32
+ hasGit: boolean;
33
+ remote: string | null;
34
+ branch: string | null;
35
+ }
36
+ /**
37
+ * Detect project information from a directory path
38
+ */
39
+ export declare function detectProjectInfo(projectPath: string): DetectedProject;
40
+ /**
41
+ * Detect git repository information
42
+ */
43
+ export declare function detectGitInfo(projectPath: string): GitInfo;
44
+ /**
45
+ * Get a human-readable label for detected language
46
+ */
47
+ export declare function getLanguageLabel(language: string | null): string;
48
+ /**
49
+ * Get a human-readable label for detected framework
50
+ */
51
+ export declare function getFrameworkLabel(framework: string | null): string;
52
+ /**
53
+ * Check if a path is a valid directory that can be imported
54
+ */
55
+ export declare function validateImportPath(importPath: string): {
56
+ valid: boolean;
57
+ error?: string;
58
+ };
@@ -0,0 +1,424 @@
1
+ /**
2
+ * Project Detection Utilities
3
+ *
4
+ * Utilities for detecting project information from an existing directory.
5
+ * Used by the import project feature in /new wizard.
6
+ */
7
+ import * as fs from 'fs';
8
+ import * as path from 'path';
9
+ import { execSync } from 'child_process';
10
+ const LANGUAGE_MARKERS = [
11
+ // Node.js / JavaScript / TypeScript
12
+ {
13
+ file: 'package.json',
14
+ language: 'node',
15
+ packageManager: 'npm', // Will be overridden if yarn.lock or pnpm-lock.yaml exists
16
+ frameworkDetector: (content) => {
17
+ try {
18
+ const pkg = JSON.parse(content);
19
+ const deps = { ...pkg.dependencies, ...pkg.devDependencies };
20
+ if (deps['next'])
21
+ return 'next';
22
+ if (deps['nuxt'])
23
+ return 'nuxt';
24
+ if (deps['react'])
25
+ return 'react';
26
+ if (deps['vue'])
27
+ return 'vue';
28
+ if (deps['svelte'])
29
+ return 'svelte';
30
+ if (deps['@angular/core'])
31
+ return 'angular';
32
+ if (deps['express'])
33
+ return 'express';
34
+ if (deps['fastify'])
35
+ return 'fastify';
36
+ if (deps['koa'])
37
+ return 'koa';
38
+ if (deps['hono'])
39
+ return 'hono';
40
+ if (deps['electron'])
41
+ return 'electron';
42
+ return null;
43
+ }
44
+ catch {
45
+ return null;
46
+ }
47
+ },
48
+ nameExtractor: (content) => {
49
+ try {
50
+ const pkg = JSON.parse(content);
51
+ return pkg.name ?? null;
52
+ }
53
+ catch {
54
+ return null;
55
+ }
56
+ },
57
+ },
58
+ // Go
59
+ {
60
+ file: 'go.mod',
61
+ language: 'go',
62
+ packageManager: 'go',
63
+ nameExtractor: (content) => {
64
+ const match = content.match(/^module\s+(.+)$/m);
65
+ if (match) {
66
+ // Extract just the last part of the module path
67
+ const parts = match[1].split('/');
68
+ return parts[parts.length - 1];
69
+ }
70
+ return null;
71
+ },
72
+ },
73
+ // Python
74
+ {
75
+ file: 'pyproject.toml',
76
+ language: 'python',
77
+ packageManager: 'pip', // Could be poetry, pdm, etc.
78
+ frameworkDetector: (content) => {
79
+ if (content.includes('fastapi'))
80
+ return 'fastapi';
81
+ if (content.includes('django'))
82
+ return 'django';
83
+ if (content.includes('flask'))
84
+ return 'flask';
85
+ return null;
86
+ },
87
+ nameExtractor: (content) => {
88
+ const match = content.match(/^name\s*=\s*["'](.+)["']/m);
89
+ return match ? match[1] : null;
90
+ },
91
+ },
92
+ {
93
+ file: 'requirements.txt',
94
+ language: 'python',
95
+ packageManager: 'pip',
96
+ frameworkDetector: (content) => {
97
+ if (content.includes('fastapi'))
98
+ return 'fastapi';
99
+ if (content.includes('django'))
100
+ return 'django';
101
+ if (content.includes('flask'))
102
+ return 'flask';
103
+ return null;
104
+ },
105
+ },
106
+ {
107
+ file: 'setup.py',
108
+ language: 'python',
109
+ packageManager: 'pip',
110
+ },
111
+ // Rust
112
+ {
113
+ file: 'Cargo.toml',
114
+ language: 'rust',
115
+ packageManager: 'cargo',
116
+ nameExtractor: (content) => {
117
+ const match = content.match(/^name\s*=\s*["'](.+)["']/m);
118
+ return match ? match[1] : null;
119
+ },
120
+ },
121
+ // Java
122
+ {
123
+ file: 'pom.xml',
124
+ language: 'java',
125
+ packageManager: 'maven',
126
+ },
127
+ {
128
+ file: 'build.gradle',
129
+ language: 'java',
130
+ packageManager: 'gradle',
131
+ },
132
+ {
133
+ file: 'build.gradle.kts',
134
+ language: 'kotlin',
135
+ packageManager: 'gradle',
136
+ },
137
+ // PHP
138
+ {
139
+ file: 'composer.json',
140
+ language: 'php',
141
+ packageManager: 'composer',
142
+ frameworkDetector: (content) => {
143
+ try {
144
+ const pkg = JSON.parse(content);
145
+ const deps = pkg.require ?? {};
146
+ if (deps['laravel/framework'])
147
+ return 'laravel';
148
+ if (deps['symfony/framework-bundle'])
149
+ return 'symfony';
150
+ return null;
151
+ }
152
+ catch {
153
+ return null;
154
+ }
155
+ },
156
+ nameExtractor: (content) => {
157
+ try {
158
+ const pkg = JSON.parse(content);
159
+ if (pkg.name) {
160
+ // composer names are vendor/package, extract just package
161
+ const parts = pkg.name.split('/');
162
+ return parts[parts.length - 1];
163
+ }
164
+ return null;
165
+ }
166
+ catch {
167
+ return null;
168
+ }
169
+ },
170
+ },
171
+ // Ruby
172
+ {
173
+ file: 'Gemfile',
174
+ language: 'ruby',
175
+ packageManager: 'bundler',
176
+ frameworkDetector: (content) => {
177
+ if (content.includes("'rails'") || content.includes('"rails"'))
178
+ return 'rails';
179
+ if (content.includes("'sinatra'") || content.includes('"sinatra"'))
180
+ return 'sinatra';
181
+ return null;
182
+ },
183
+ },
184
+ // .NET
185
+ {
186
+ file: '*.csproj',
187
+ language: 'dotnet',
188
+ packageManager: 'nuget',
189
+ },
190
+ {
191
+ file: '*.fsproj',
192
+ language: 'dotnet',
193
+ packageManager: 'nuget',
194
+ },
195
+ ];
196
+ // =============================================================================
197
+ // Main Detection Functions
198
+ // =============================================================================
199
+ /**
200
+ * Detect project information from a directory path
201
+ */
202
+ export function detectProjectInfo(projectPath) {
203
+ const folderName = path.basename(projectPath);
204
+ // Initialize with defaults
205
+ const result = {
206
+ name: folderName,
207
+ displayName: prettifyName(folderName),
208
+ nameSource: 'folder',
209
+ language: null,
210
+ framework: null,
211
+ packageManager: null,
212
+ hasGit: false,
213
+ gitRemote: null,
214
+ gitBranch: null,
215
+ hasCompilrMd: false,
216
+ hasClaudeMd: false,
217
+ };
218
+ // Check for COMPILR.md and CLAUDE.md
219
+ result.hasCompilrMd = fs.existsSync(path.join(projectPath, 'COMPILR.md'));
220
+ result.hasClaudeMd = fs.existsSync(path.join(projectPath, 'CLAUDE.md'));
221
+ // Detect git info
222
+ const gitInfo = detectGitInfo(projectPath);
223
+ result.hasGit = gitInfo.hasGit;
224
+ result.gitRemote = gitInfo.remote;
225
+ result.gitBranch = gitInfo.branch;
226
+ // Detect language and framework from markers
227
+ for (const marker of LANGUAGE_MARKERS) {
228
+ // Handle glob patterns (*.csproj)
229
+ let filePath = null;
230
+ if (marker.file.includes('*')) {
231
+ const pattern = marker.file.replace('*', '');
232
+ try {
233
+ const files = fs.readdirSync(projectPath);
234
+ const match = files.find((f) => f.endsWith(pattern));
235
+ if (match) {
236
+ filePath = path.join(projectPath, match);
237
+ }
238
+ }
239
+ catch {
240
+ continue;
241
+ }
242
+ }
243
+ else {
244
+ filePath = path.join(projectPath, marker.file);
245
+ }
246
+ if (filePath && fs.existsSync(filePath)) {
247
+ // First match wins for language
248
+ if (!result.language) {
249
+ result.language = marker.language;
250
+ }
251
+ // Try to read content for framework detection and name extraction
252
+ try {
253
+ const content = fs.readFileSync(filePath, 'utf-8');
254
+ // Extract name if possible
255
+ if (marker.nameExtractor && result.nameSource === 'folder') {
256
+ const extractedName = marker.nameExtractor(content);
257
+ if (extractedName) {
258
+ result.name = extractedName;
259
+ result.displayName = prettifyName(extractedName);
260
+ result.nameSource = marker.file;
261
+ }
262
+ }
263
+ // Detect framework
264
+ if (!result.framework && marker.frameworkDetector) {
265
+ result.framework = marker.frameworkDetector(content);
266
+ }
267
+ // Set package manager
268
+ if (!result.packageManager && marker.packageManager) {
269
+ result.packageManager = marker.packageManager;
270
+ }
271
+ }
272
+ catch {
273
+ // File read failed, continue
274
+ }
275
+ }
276
+ }
277
+ // Detect package manager overrides for Node.js
278
+ if (result.language === 'node') {
279
+ if (fs.existsSync(path.join(projectPath, 'pnpm-lock.yaml'))) {
280
+ result.packageManager = 'pnpm';
281
+ }
282
+ else if (fs.existsSync(path.join(projectPath, 'yarn.lock'))) {
283
+ result.packageManager = 'yarn';
284
+ }
285
+ else if (fs.existsSync(path.join(projectPath, 'bun.lockb'))) {
286
+ result.packageManager = 'bun';
287
+ }
288
+ }
289
+ // Detect package manager overrides for Python
290
+ if (result.language === 'python') {
291
+ if (fs.existsSync(path.join(projectPath, 'poetry.lock'))) {
292
+ result.packageManager = 'poetry';
293
+ }
294
+ else if (fs.existsSync(path.join(projectPath, 'pdm.lock'))) {
295
+ result.packageManager = 'pdm';
296
+ }
297
+ else if (fs.existsSync(path.join(projectPath, 'uv.lock'))) {
298
+ result.packageManager = 'uv';
299
+ }
300
+ }
301
+ return result;
302
+ }
303
+ /**
304
+ * Detect git repository information
305
+ */
306
+ export function detectGitInfo(projectPath) {
307
+ const result = {
308
+ hasGit: false,
309
+ remote: null,
310
+ branch: null,
311
+ };
312
+ const gitPath = path.join(projectPath, '.git');
313
+ if (!fs.existsSync(gitPath)) {
314
+ return result;
315
+ }
316
+ result.hasGit = true;
317
+ // Try to get remote URL using git command
318
+ try {
319
+ const remote = execSync('git remote get-url origin', {
320
+ cwd: projectPath,
321
+ encoding: 'utf8',
322
+ stdio: ['pipe', 'pipe', 'pipe'],
323
+ }).trim();
324
+ if (remote) {
325
+ result.remote = remote;
326
+ }
327
+ }
328
+ catch {
329
+ // No remote configured or git command failed
330
+ }
331
+ // Try to get current branch
332
+ try {
333
+ const branch = execSync('git branch --show-current', {
334
+ cwd: projectPath,
335
+ encoding: 'utf8',
336
+ stdio: ['pipe', 'pipe', 'pipe'],
337
+ }).trim();
338
+ if (branch) {
339
+ result.branch = branch;
340
+ }
341
+ }
342
+ catch {
343
+ // Not on a branch (detached HEAD) or git command failed
344
+ }
345
+ return result;
346
+ }
347
+ // =============================================================================
348
+ // Helper Functions
349
+ // =============================================================================
350
+ /**
351
+ * Convert kebab-case or snake_case to Title Case
352
+ */
353
+ function prettifyName(name) {
354
+ return name
355
+ .replace(/[-_]/g, ' ')
356
+ .replace(/\b\w/g, (c) => c.toUpperCase());
357
+ }
358
+ /**
359
+ * Get a human-readable label for detected language
360
+ */
361
+ export function getLanguageLabel(language) {
362
+ if (!language)
363
+ return 'Unknown';
364
+ const labels = {
365
+ node: 'Node.js / TypeScript',
366
+ go: 'Go',
367
+ python: 'Python',
368
+ rust: 'Rust',
369
+ java: 'Java',
370
+ kotlin: 'Kotlin',
371
+ php: 'PHP',
372
+ ruby: 'Ruby',
373
+ dotnet: '.NET (C#/F#)',
374
+ };
375
+ return labels[language] ?? language;
376
+ }
377
+ /**
378
+ * Get a human-readable label for detected framework
379
+ */
380
+ export function getFrameworkLabel(framework) {
381
+ if (!framework)
382
+ return 'Not detected';
383
+ const labels = {
384
+ react: 'React',
385
+ vue: 'Vue.js',
386
+ svelte: 'Svelte',
387
+ angular: 'Angular',
388
+ next: 'Next.js',
389
+ nuxt: 'Nuxt.js',
390
+ express: 'Express.js',
391
+ fastify: 'Fastify',
392
+ koa: 'Koa',
393
+ hono: 'Hono',
394
+ electron: 'Electron',
395
+ fastapi: 'FastAPI',
396
+ django: 'Django',
397
+ flask: 'Flask',
398
+ rails: 'Ruby on Rails',
399
+ sinatra: 'Sinatra',
400
+ laravel: 'Laravel',
401
+ symfony: 'Symfony',
402
+ };
403
+ return labels[framework] ?? framework;
404
+ }
405
+ /**
406
+ * Check if a path is a valid directory that can be imported
407
+ */
408
+ export function validateImportPath(importPath) {
409
+ // Check if path exists
410
+ if (!fs.existsSync(importPath)) {
411
+ return { valid: false, error: 'Path does not exist' };
412
+ }
413
+ // Check if it's a directory
414
+ try {
415
+ const stats = fs.statSync(importPath);
416
+ if (!stats.isDirectory()) {
417
+ return { valid: false, error: 'Path is not a directory' };
418
+ }
419
+ }
420
+ catch {
421
+ return { valid: false, error: 'Cannot access path' };
422
+ }
423
+ return { valid: true };
424
+ }
@@ -6,6 +6,7 @@
6
6
  */
7
7
  import * as fs from 'fs';
8
8
  import * as path from 'path';
9
+ import { estimateTokens } from './token-tracker.js';
9
10
  // =============================================================================
10
11
  // Constants
11
12
  // =============================================================================
@@ -59,7 +60,7 @@ export function loadProjectMemory(options = {}) {
59
60
  filePath,
60
61
  originalSize,
61
62
  truncated,
62
- estimatedTokens: Math.ceil(content.length / 4),
63
+ estimatedTokens: estimateTokens(content),
63
64
  };
64
65
  }
65
66
  catch {
@@ -2,8 +2,8 @@
2
2
  * Project Status Detection
3
3
  * Detects project state for startup message guidance
4
4
  */
5
- import type { CompilrConfig } from '../templates/config-json.js';
6
- export type { CompilrConfig } from '../templates/config-json.js';
5
+ import type { CompilrConfig } from './types/config-types.js';
6
+ export type { CompilrConfig } from './types/config-types.js';
7
7
  export interface ProjectStatus {
8
8
  /** .compilr/ folder exists */
9
9
  initialized: boolean;
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Startup Performance Profiler
3
+ *
4
+ * Lightweight timing utility for diagnosing CLI startup latency.
5
+ * Always collects timestamps (Date.now() is ~nanosecond cost).
6
+ * Writes results to ~/.compilr-dev/startup-perf.log on flush.
7
+ *
8
+ * Foundation layer — no imports from domain or app layers.
9
+ */
10
+ /**
11
+ * Record a timing mark. Cheap — just pushes to an array.
12
+ */
13
+ export declare function perf(label: string): void;
14
+ /**
15
+ * Flush the startup profile to ~/.compilr-dev/startup-perf.log.
16
+ * Overwrites previous log (only the latest startup matters).
17
+ */
18
+ export declare function flushStartupPerf(): void;
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Startup Performance Profiler
3
+ *
4
+ * Lightweight timing utility for diagnosing CLI startup latency.
5
+ * Always collects timestamps (Date.now() is ~nanosecond cost).
6
+ * Writes results to ~/.compilr-dev/startup-perf.log on flush.
7
+ *
8
+ * Foundation layer — no imports from domain or app layers.
9
+ */
10
+ import * as fs from 'fs';
11
+ import * as path from 'path';
12
+ import { getDataPath } from '../settings/paths.js';
13
+ const marks = [];
14
+ const t0 = Date.now();
15
+ /**
16
+ * Record a timing mark. Cheap — just pushes to an array.
17
+ */
18
+ export function perf(label) {
19
+ marks.push({ label, time: Date.now() });
20
+ }
21
+ /**
22
+ * Flush the startup profile to ~/.compilr-dev/startup-perf.log.
23
+ * Overwrites previous log (only the latest startup matters).
24
+ */
25
+ export function flushStartupPerf() {
26
+ if (marks.length === 0)
27
+ return;
28
+ const lines = [];
29
+ const totalMs = marks[marks.length - 1].time - t0;
30
+ lines.push(`=== Startup Profile: ${new Date().toISOString()} ===`);
31
+ lines.push(`Total: ${String(totalMs)}ms (${String(marks.length)} marks)\n`);
32
+ let prev = t0;
33
+ for (const mark of marks) {
34
+ const elapsed = mark.time - t0;
35
+ const delta = mark.time - prev;
36
+ const bar = delta > 50 ? ` ${'█'.repeat(Math.min(40, Math.round(delta / 50)))}` : '';
37
+ lines.push(` ${String(elapsed).padStart(6)}ms +${String(delta).padStart(5)}ms ${mark.label}${bar}`);
38
+ prev = mark.time;
39
+ }
40
+ lines.push('');
41
+ // Highlight slow steps (>100ms)
42
+ const slow = marks
43
+ .map((m, i) => ({ label: m.label, delta: m.time - (i > 0 ? marks[i - 1].time : t0) }))
44
+ .filter(m => m.delta > 100)
45
+ .sort((a, b) => b.delta - a.delta);
46
+ if (slow.length > 0) {
47
+ lines.push('Slow steps (>100ms):');
48
+ for (const s of slow) {
49
+ lines.push(` ${String(s.delta).padStart(5)}ms ${s.label}`);
50
+ }
51
+ lines.push('');
52
+ }
53
+ try {
54
+ const logPath = path.join(getDataPath(), 'startup-perf.log');
55
+ fs.writeFileSync(logPath, lines.join('\n'), 'utf-8');
56
+ }
57
+ catch {
58
+ // Best effort — don't crash on log write failure
59
+ }
60
+ }