@compilr-dev/cli 0.5.0 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (591) hide show
  1. package/README.md +236 -68
  2. package/dist/.tsbuildinfo.app +1 -0
  3. package/dist/.tsbuildinfo.data +1 -0
  4. package/dist/.tsbuildinfo.domain +1 -0
  5. package/dist/.tsbuildinfo.foundation +1 -0
  6. package/dist/agent.d.ts +61 -4
  7. package/dist/agent.js +241 -245
  8. package/dist/anchors/index.d.ts +1 -1
  9. package/dist/anchors/index.js +1 -1
  10. package/dist/anchors/project-anchors.d.ts +2 -2
  11. package/dist/anchors/project-anchors.js +1 -1
  12. package/dist/auth/api-client.d.ts +124 -0
  13. package/dist/auth/api-client.js +261 -0
  14. package/dist/auth/index.d.ts +172 -0
  15. package/dist/auth/index.js +545 -0
  16. package/dist/auth/storage.d.ts +52 -0
  17. package/dist/auth/storage.js +118 -0
  18. package/dist/changelog/index.d.ts +16 -0
  19. package/dist/changelog/index.js +24 -0
  20. package/dist/changelog/releases.d.ts +17 -0
  21. package/dist/changelog/releases.js +63 -0
  22. package/dist/commands-v2/handlers/auth.d.ts +10 -0
  23. package/dist/commands-v2/handlers/auth.js +118 -0
  24. package/dist/commands-v2/handlers/background.d.ts +14 -0
  25. package/dist/commands-v2/handlers/background.js +276 -0
  26. package/dist/commands-v2/handlers/context.js +266 -81
  27. package/dist/commands-v2/handlers/core.d.ts +1 -0
  28. package/dist/commands-v2/handlers/core.js +133 -8
  29. package/dist/commands-v2/handlers/debug.js +18 -0
  30. package/dist/commands-v2/handlers/delegations.d.ts +8 -0
  31. package/dist/commands-v2/handlers/delegations.js +29 -0
  32. package/dist/commands-v2/handlers/files.d.ts +8 -0
  33. package/dist/commands-v2/handlers/files.js +162 -0
  34. package/dist/commands-v2/handlers/filter.d.ts +9 -0
  35. package/dist/commands-v2/handlers/filter.js +130 -0
  36. package/dist/commands-v2/handlers/games.d.ts +7 -0
  37. package/dist/commands-v2/handlers/games.js +57 -0
  38. package/dist/commands-v2/handlers/index.d.ts +13 -0
  39. package/dist/commands-v2/handlers/index.js +39 -0
  40. package/dist/commands-v2/handlers/mcp.d.ts +8 -0
  41. package/dist/commands-v2/handlers/mcp.js +39 -0
  42. package/dist/commands-v2/handlers/notifications.d.ts +9 -0
  43. package/dist/commands-v2/handlers/notifications.js +34 -0
  44. package/dist/commands-v2/handlers/project.js +244 -23
  45. package/dist/commands-v2/handlers/reset.d.ts +11 -0
  46. package/dist/commands-v2/handlers/reset.js +118 -0
  47. package/dist/commands-v2/handlers/session.d.ts +161 -0
  48. package/dist/commands-v2/handlers/session.js +805 -0
  49. package/dist/commands-v2/handlers/settings.d.ts +2 -0
  50. package/dist/commands-v2/handlers/settings.js +217 -35
  51. package/dist/commands-v2/handlers/tasks.d.ts +5 -0
  52. package/dist/commands-v2/handlers/tasks.js +36 -0
  53. package/dist/commands-v2/handlers/team.d.ts +9 -0
  54. package/dist/commands-v2/handlers/team.js +549 -0
  55. package/dist/commands-v2/handlers/terminals.d.ts +9 -0
  56. package/dist/commands-v2/handlers/terminals.js +34 -0
  57. package/dist/commands-v2/index.d.ts +3 -2
  58. package/dist/commands-v2/index.js +4 -1
  59. package/dist/commands-v2/registry.d.ts +15 -0
  60. package/dist/commands-v2/registry.js +34 -0
  61. package/dist/commands-v2/types.d.ts +81 -3
  62. package/dist/commands.js +13 -0
  63. package/dist/compilr-diff-companion.vsix +0 -0
  64. package/dist/db/index.js +98 -4
  65. package/dist/db/repositories/document-repository.d.ts +2 -0
  66. package/dist/db/repositories/document-repository.js +5 -1
  67. package/dist/db/repositories/index.d.ts +2 -0
  68. package/dist/db/repositories/index.js +1 -0
  69. package/dist/db/repositories/plan-repository.d.ts +101 -0
  70. package/dist/db/repositories/plan-repository.js +275 -0
  71. package/dist/db/repositories/project-repository.d.ts +6 -0
  72. package/dist/db/repositories/project-repository.js +41 -0
  73. package/dist/db/repositories/work-item-repository.d.ts +15 -0
  74. package/dist/db/repositories/work-item-repository.js +69 -4
  75. package/dist/db/schema.d.ts +40 -3
  76. package/dist/db/schema.js +66 -3
  77. package/dist/episodes/index.d.ts +20 -0
  78. package/dist/episodes/index.js +27 -0
  79. package/dist/episodes/recorder.d.ts +51 -0
  80. package/dist/episodes/recorder.js +195 -0
  81. package/dist/episodes/significant-work.d.ts +21 -0
  82. package/dist/episodes/significant-work.js +56 -0
  83. package/dist/episodes/store.d.ts +38 -0
  84. package/dist/episodes/store.js +199 -0
  85. package/dist/episodes/types.d.ts +35 -0
  86. package/dist/episodes/types.js +6 -0
  87. package/dist/episodes/work-at-risk.d.ts +12 -0
  88. package/dist/episodes/work-at-risk.js +38 -0
  89. package/dist/episodes/work-summary-anchor.d.ts +23 -0
  90. package/dist/episodes/work-summary-anchor.js +73 -0
  91. package/dist/games/coins.d.ts +66 -0
  92. package/dist/games/coins.js +165 -0
  93. package/dist/games/game-base.d.ts +84 -0
  94. package/dist/games/game-base.js +204 -0
  95. package/dist/games/index.d.ts +16 -0
  96. package/dist/games/index.js +49 -0
  97. package/dist/games/scores.d.ts +69 -0
  98. package/dist/games/scores.js +191 -0
  99. package/dist/games/tetris/board.d.ts +59 -0
  100. package/dist/games/tetris/board.js +170 -0
  101. package/dist/games/tetris/index.d.ts +109 -0
  102. package/dist/games/tetris/index.js +610 -0
  103. package/dist/games/tetris/pieces.d.ts +44 -0
  104. package/dist/games/tetris/pieces.js +271 -0
  105. package/dist/games/tetris/renderer.d.ts +26 -0
  106. package/dist/games/tetris/renderer.js +77 -0
  107. package/dist/guide/guide-content.d.ts +23 -0
  108. package/dist/guide/guide-content.js +196 -0
  109. package/dist/guide/index.d.ts +8 -0
  110. package/dist/guide/index.js +7 -0
  111. package/dist/guide/shared-content.d.ts +37 -0
  112. package/dist/guide/shared-content.js +1272 -0
  113. package/dist/guide/tutorial-helpers.d.ts +57 -0
  114. package/dist/guide/tutorial-helpers.js +147 -0
  115. package/dist/handlers/ask-user-handlers.d.ts +32 -0
  116. package/dist/handlers/ask-user-handlers.js +104 -0
  117. package/dist/handlers/delegation-handlers.d.ts +34 -0
  118. package/dist/handlers/delegation-handlers.js +291 -0
  119. package/dist/handlers/permission-handler.d.ts +30 -0
  120. package/dist/handlers/permission-handler.js +205 -0
  121. package/dist/index.d.ts +11 -1
  122. package/dist/index.js +448 -271
  123. package/dist/input-handlers/memory-handler.d.ts +1 -1
  124. package/dist/input-handlers/memory-handler.js +2 -1
  125. package/dist/models/index.d.ts +10 -0
  126. package/dist/models/index.js +12 -0
  127. package/dist/models/model-registry.d.ts +38 -0
  128. package/dist/models/model-registry.js +69 -0
  129. package/dist/models/model-tiers.d.ts +28 -0
  130. package/dist/models/model-tiers.js +71 -0
  131. package/dist/models/model-validation.d.ts +25 -0
  132. package/dist/models/model-validation.js +291 -0
  133. package/dist/models/ollama-models.d.ts +73 -0
  134. package/dist/models/ollama-models.js +178 -0
  135. package/dist/models/provider-types.d.ts +6 -0
  136. package/dist/models/provider-types.js +1 -0
  137. package/dist/models/providers.d.ts +35 -0
  138. package/dist/models/providers.js +58 -0
  139. package/dist/models/types.d.ts +4 -0
  140. package/dist/models/types.js +4 -0
  141. package/dist/multi-agent/activity.d.ts +21 -0
  142. package/dist/multi-agent/activity.js +34 -0
  143. package/dist/multi-agent/agent-selection.d.ts +55 -0
  144. package/dist/multi-agent/agent-selection.js +90 -0
  145. package/dist/multi-agent/artifacts.d.ts +197 -0
  146. package/dist/multi-agent/artifacts.js +379 -0
  147. package/dist/multi-agent/checkpointer.d.ts +138 -0
  148. package/dist/multi-agent/checkpointer.js +471 -0
  149. package/dist/multi-agent/collision-utils.d.ts +16 -0
  150. package/dist/multi-agent/collision-utils.js +28 -0
  151. package/dist/multi-agent/context-resolver.d.ts +97 -0
  152. package/dist/multi-agent/context-resolver.js +316 -0
  153. package/dist/multi-agent/custom-agents.d.ts +83 -0
  154. package/dist/multi-agent/custom-agents.js +227 -0
  155. package/dist/multi-agent/delegation-tracker.d.ts +157 -0
  156. package/dist/multi-agent/delegation-tracker.js +243 -0
  157. package/dist/multi-agent/file-lock-hook.d.ts +29 -0
  158. package/dist/multi-agent/file-lock-hook.js +97 -0
  159. package/dist/multi-agent/file-locks.d.ts +58 -0
  160. package/dist/multi-agent/file-locks.js +194 -0
  161. package/dist/multi-agent/index.d.ts +24 -0
  162. package/dist/multi-agent/index.js +30 -0
  163. package/dist/multi-agent/mention-parser.d.ts +64 -0
  164. package/dist/multi-agent/mention-parser.js +146 -0
  165. package/dist/multi-agent/notification-manager.d.ts +84 -0
  166. package/dist/multi-agent/notification-manager.js +224 -0
  167. package/dist/multi-agent/pending-requests.d.ts +122 -0
  168. package/dist/multi-agent/pending-requests.js +155 -0
  169. package/dist/multi-agent/session-registry.d.ts +139 -0
  170. package/dist/multi-agent/session-registry.js +514 -0
  171. package/dist/multi-agent/shared-context.d.ts +293 -0
  172. package/dist/multi-agent/shared-context.js +671 -0
  173. package/dist/multi-agent/skill-requirements.d.ts +66 -0
  174. package/dist/multi-agent/skill-requirements.js +178 -0
  175. package/dist/multi-agent/task-assignment.d.ts +69 -0
  176. package/dist/multi-agent/task-assignment.js +123 -0
  177. package/dist/multi-agent/task-suggestion.d.ts +31 -0
  178. package/dist/multi-agent/task-suggestion.js +72 -0
  179. package/dist/multi-agent/team-agent.d.ts +201 -0
  180. package/dist/multi-agent/team-agent.js +488 -0
  181. package/dist/multi-agent/team.d.ts +286 -0
  182. package/dist/multi-agent/team.js +610 -0
  183. package/dist/multi-agent/tool-config.d.ts +110 -0
  184. package/dist/multi-agent/tool-config.js +661 -0
  185. package/dist/multi-agent/types.d.ts +211 -0
  186. package/dist/multi-agent/types.js +617 -0
  187. package/dist/prompts/plan-mode-prompt.d.ts +11 -0
  188. package/dist/prompts/plan-mode-prompt.js +95 -0
  189. package/dist/repl-helpers.js +3 -2
  190. package/dist/repl-v2.d.ts +401 -2
  191. package/dist/repl-v2.js +2577 -65
  192. package/dist/session/index.d.ts +6 -0
  193. package/dist/session/index.js +6 -0
  194. package/dist/session/project-session-manager.d.ts +158 -0
  195. package/dist/session/project-session-manager.js +650 -0
  196. package/dist/settings/index.d.ts +133 -13
  197. package/dist/settings/index.js +329 -24
  198. package/dist/settings/mcp-config.d.ts +76 -0
  199. package/dist/settings/mcp-config.js +143 -0
  200. package/dist/settings/paths.d.ts +4 -0
  201. package/dist/settings/paths.js +6 -0
  202. package/dist/shared-handlers.d.ts +62 -0
  203. package/dist/shared-handlers.js +48 -0
  204. package/dist/system-prompt/builder.d.ts +5 -0
  205. package/dist/system-prompt/builder.js +4 -0
  206. package/dist/system-prompt/index.d.ts +18 -0
  207. package/dist/system-prompt/index.js +18 -0
  208. package/dist/system-prompt/modules.d.ts +5 -0
  209. package/dist/system-prompt/modules.js +4 -0
  210. package/dist/tabbed-menu.js +2 -1
  211. package/dist/templates/compilr-md-import.d.ts +16 -0
  212. package/dist/templates/compilr-md-import.js +241 -0
  213. package/dist/templates/compilr-md.js +10 -61
  214. package/dist/templates/config-json.d.ts +1 -25
  215. package/dist/templates/index.d.ts +2 -0
  216. package/dist/templates/index.js +34 -73
  217. package/dist/tool-names.d.ts +108 -0
  218. package/dist/tool-names.js +227 -0
  219. package/dist/tools/anchor-tools.d.ts +4 -4
  220. package/dist/tools/anchor-tools.js +1 -1
  221. package/dist/tools/artifact-tools.d.ts +42 -0
  222. package/dist/tools/artifact-tools.js +328 -0
  223. package/dist/tools/ask-user-simple.d.ts +1 -1
  224. package/dist/tools/ask-user-simple.js +2 -1
  225. package/dist/tools/ask-user.d.ts +1 -1
  226. package/dist/tools/ask-user.js +2 -1
  227. package/dist/tools/backlog-wrappers.d.ts +5 -3
  228. package/dist/tools/backlog-wrappers.js +16 -1
  229. package/dist/tools/backlog.d.ts +2 -2
  230. package/dist/tools/backlog.js +1 -1
  231. package/dist/tools/db-tools.d.ts +8 -61
  232. package/dist/tools/db-tools.js +8 -13
  233. package/dist/tools/delegate-background.d.ts +27 -0
  234. package/dist/tools/delegate-background.js +115 -0
  235. package/dist/tools/delegate.d.ts +22 -0
  236. package/dist/tools/delegate.js +97 -0
  237. package/dist/tools/delegation-status.d.ts +16 -0
  238. package/dist/tools/delegation-status.js +128 -0
  239. package/dist/tools/document-db.d.ts +5 -5
  240. package/dist/tools/document-db.js +1 -1
  241. package/dist/tools/guide-tool.d.ts +12 -0
  242. package/dist/tools/guide-tool.js +59 -0
  243. package/dist/tools/handoff.d.ts +25 -0
  244. package/dist/tools/handoff.js +99 -0
  245. package/dist/tools/meta-tools.d.ts +26 -0
  246. package/dist/tools/meta-tools.js +47 -0
  247. package/dist/tools/plan-tools.d.ts +54 -0
  248. package/dist/tools/plan-tools.js +338 -0
  249. package/dist/tools/platform-adapter.d.ts +29 -0
  250. package/dist/tools/platform-adapter.js +394 -0
  251. package/dist/tools/project-db.d.ts +5 -73
  252. package/dist/tools/project-db.js +5 -336
  253. package/dist/tools/recall-work-tool.d.ts +18 -0
  254. package/dist/tools/recall-work-tool.js +82 -0
  255. package/dist/tools/workitem-db.d.ts +43 -11
  256. package/dist/tools/workitem-db.js +186 -5
  257. package/dist/tools.d.ts +67 -2
  258. package/dist/tools.js +237 -47
  259. package/dist/ui/autocomplete-controller.d.ts +42 -0
  260. package/dist/ui/autocomplete-controller.js +384 -0
  261. package/dist/ui/base/index.d.ts +1 -1
  262. package/dist/ui/base/index.js +1 -1
  263. package/dist/ui/base/overlay-base-v2.d.ts +10 -0
  264. package/dist/ui/base/overlay-base-v2.js +14 -0
  265. package/dist/ui/base/render-utils.d.ts +19 -0
  266. package/dist/ui/base/render-utils.js +25 -0
  267. package/dist/ui/base/tabbed-list-overlay-v2.d.ts +16 -1
  268. package/dist/ui/base/tabbed-list-overlay-v2.js +19 -1
  269. package/dist/ui/constants/labels.d.ts +14 -0
  270. package/dist/ui/constants/labels.js +51 -0
  271. package/dist/ui/conversation-store.d.ts +55 -0
  272. package/dist/ui/conversation-store.js +107 -0
  273. package/dist/ui/conversation.js +11 -13
  274. package/dist/ui/diff.d.ts +7 -1
  275. package/dist/ui/diff.js +85 -48
  276. package/dist/ui/ephemeral.js +3 -9
  277. package/dist/ui/file-autocomplete.d.ts +24 -0
  278. package/dist/ui/file-autocomplete.js +56 -0
  279. package/dist/ui/footer-renderer.d.ts +69 -0
  280. package/dist/ui/footer-renderer.js +431 -0
  281. package/dist/ui/footer.d.ts +74 -7
  282. package/dist/ui/footer.js +173 -16
  283. package/dist/ui/input-controller.d.ts +51 -0
  284. package/dist/ui/input-controller.js +176 -0
  285. package/dist/ui/input-prompt.d.ts +19 -0
  286. package/dist/ui/input-prompt.js +206 -14
  287. package/dist/ui/keyboard-handler.d.ts +57 -0
  288. package/dist/ui/keyboard-handler.js +557 -0
  289. package/dist/ui/live-region-facade.d.ts +42 -0
  290. package/dist/ui/live-region-facade.js +205 -0
  291. package/dist/ui/live-region.d.ts +0 -4
  292. package/dist/ui/live-region.js +6 -14
  293. package/dist/ui/mascot/renderer.d.ts +1 -1
  294. package/dist/ui/mascot/renderer.js +37 -2
  295. package/dist/ui/overlay/data/tutorial-content.d.ts +9 -0
  296. package/dist/ui/overlay/data/tutorial-content.js +9 -0
  297. package/dist/ui/overlay/data/tutorial-registry.d.ts +12 -0
  298. package/dist/ui/overlay/data/tutorial-registry.js +116 -0
  299. package/dist/ui/overlay/data/tutorial-types.d.ts +35 -0
  300. package/dist/ui/overlay/data/tutorial-types.js +6 -0
  301. package/dist/ui/overlay/data/tutorials/basics/first-conversation.d.ts +7 -0
  302. package/dist/ui/overlay/data/tutorials/basics/first-conversation.js +220 -0
  303. package/dist/ui/overlay/data/tutorials/basics/first-project.d.ts +7 -0
  304. package/dist/ui/overlay/data/tutorials/basics/first-project.js +284 -0
  305. package/dist/ui/overlay/data/tutorials/basics/navigation.d.ts +8 -0
  306. package/dist/ui/overlay/data/tutorials/basics/navigation.js +22 -0
  307. package/dist/ui/overlay/data/tutorials/basics/welcome.d.ts +7 -0
  308. package/dist/ui/overlay/data/tutorials/basics/welcome.js +174 -0
  309. package/dist/ui/overlay/data/tutorials/config/context-management.d.ts +7 -0
  310. package/dist/ui/overlay/data/tutorials/config/context-management.js +158 -0
  311. package/dist/ui/overlay/data/tutorials/config/mcp-servers.d.ts +8 -0
  312. package/dist/ui/overlay/data/tutorials/config/mcp-servers.js +155 -0
  313. package/dist/ui/overlay/data/tutorials/config/model-selection.d.ts +7 -0
  314. package/dist/ui/overlay/data/tutorials/config/model-selection.js +162 -0
  315. package/dist/ui/overlay/data/tutorials/config/permissions-safety.d.ts +7 -0
  316. package/dist/ui/overlay/data/tutorials/config/permissions-safety.js +163 -0
  317. package/dist/ui/overlay/data/tutorials/config/settings-config.d.ts +7 -0
  318. package/dist/ui/overlay/data/tutorials/config/settings-config.js +166 -0
  319. package/dist/ui/overlay/data/tutorials/planning/arch.d.ts +7 -0
  320. package/dist/ui/overlay/data/tutorials/planning/arch.js +168 -0
  321. package/dist/ui/overlay/data/tutorials/planning/backlog.d.ts +7 -0
  322. package/dist/ui/overlay/data/tutorials/planning/backlog.js +103 -0
  323. package/dist/ui/overlay/data/tutorials/planning/build.d.ts +7 -0
  324. package/dist/ui/overlay/data/tutorials/planning/build.js +173 -0
  325. package/dist/ui/overlay/data/tutorials/planning/design.d.ts +7 -0
  326. package/dist/ui/overlay/data/tutorials/planning/design.js +205 -0
  327. package/dist/ui/overlay/data/tutorials/planning/docs.d.ts +7 -0
  328. package/dist/ui/overlay/data/tutorials/planning/docs.js +143 -0
  329. package/dist/ui/overlay/data/tutorials/planning/prd.d.ts +7 -0
  330. package/dist/ui/overlay/data/tutorials/planning/prd.js +173 -0
  331. package/dist/ui/overlay/data/tutorials/planning/scaffold.d.ts +7 -0
  332. package/dist/ui/overlay/data/tutorials/planning/scaffold.js +164 -0
  333. package/dist/ui/overlay/data/tutorials/planning/sketch.d.ts +7 -0
  334. package/dist/ui/overlay/data/tutorials/planning/sketch.js +58 -0
  335. package/dist/ui/overlay/data/tutorials/projects/anchors.d.ts +7 -0
  336. package/dist/ui/overlay/data/tutorials/projects/anchors.js +248 -0
  337. package/dist/ui/overlay/data/tutorials/projects/import-project.d.ts +7 -0
  338. package/dist/ui/overlay/data/tutorials/projects/import-project.js +172 -0
  339. package/dist/ui/overlay/data/tutorials/projects/managing-projects.d.ts +8 -0
  340. package/dist/ui/overlay/data/tutorials/projects/managing-projects.js +212 -0
  341. package/dist/ui/overlay/data/tutorials/projects/new-project.d.ts +7 -0
  342. package/dist/ui/overlay/data/tutorials/projects/new-project.js +251 -0
  343. package/dist/ui/overlay/data/tutorials/projects/session-management.d.ts +7 -0
  344. package/dist/ui/overlay/data/tutorials/projects/session-management.js +169 -0
  345. package/dist/ui/overlay/data/tutorials/teams/background-execution.d.ts +7 -0
  346. package/dist/ui/overlay/data/tutorials/teams/background-execution.js +171 -0
  347. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.d.ts +8 -0
  348. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.js +147 -0
  349. package/dist/ui/overlay/data/tutorials/teams/task-assignment.d.ts +7 -0
  350. package/dist/ui/overlay/data/tutorials/teams/task-assignment.js +204 -0
  351. package/dist/ui/overlay/data/tutorials/teams/team-overview.d.ts +7 -0
  352. package/dist/ui/overlay/data/tutorials/teams/team-overview.js +165 -0
  353. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.d.ts +7 -0
  354. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.js +172 -0
  355. package/dist/ui/overlay/impl/agents-overlay-v2.js +6 -17
  356. package/dist/ui/overlay/impl/anchors-overlay-v2.js +30 -64
  357. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.d.ts +43 -0
  358. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.js +232 -0
  359. package/dist/ui/overlay/impl/artifact-overlay-v2.d.ts +40 -0
  360. package/dist/ui/overlay/impl/artifact-overlay-v2.js +115 -0
  361. package/dist/ui/overlay/impl/ask-user-overlay-v2.js +2 -5
  362. package/dist/ui/overlay/impl/background-overlay-v2.d.ts +40 -0
  363. package/dist/ui/overlay/impl/background-overlay-v2.js +147 -0
  364. package/dist/ui/overlay/impl/backlog-overlay-v2.d.ts +4 -1
  365. package/dist/ui/overlay/impl/backlog-overlay-v2.js +55 -16
  366. package/dist/ui/overlay/impl/changelog-overlay-v2.d.ts +44 -0
  367. package/dist/ui/overlay/impl/changelog-overlay-v2.js +165 -0
  368. package/dist/ui/overlay/impl/commands-overlay-v2.js +4 -6
  369. package/dist/ui/overlay/impl/config-overlay-v2.d.ts +12 -1
  370. package/dist/ui/overlay/impl/config-overlay-v2.js +164 -100
  371. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.d.ts +83 -0
  372. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.js +711 -0
  373. package/dist/ui/overlay/impl/dashboard-overlay-v2.d.ts +2 -0
  374. package/dist/ui/overlay/impl/dashboard-overlay-v2.js +26 -3
  375. package/dist/ui/overlay/impl/delegations-overlay-v2.d.ts +28 -0
  376. package/dist/ui/overlay/impl/delegations-overlay-v2.js +279 -0
  377. package/dist/ui/overlay/impl/docs-overlay-v2.js +12 -9
  378. package/dist/ui/overlay/impl/document-detail-overlay-v2.d.ts +7 -0
  379. package/dist/ui/overlay/impl/document-detail-overlay-v2.js +119 -78
  380. package/dist/ui/overlay/impl/filter-overlay-v2.d.ts +41 -0
  381. package/dist/ui/overlay/impl/filter-overlay-v2.js +110 -0
  382. package/dist/ui/overlay/impl/games-overlay-v2.d.ts +31 -0
  383. package/dist/ui/overlay/impl/games-overlay-v2.js +135 -0
  384. package/dist/ui/overlay/impl/help-overlay-v2.d.ts +26 -3
  385. package/dist/ui/overlay/impl/help-overlay-v2.js +20 -42
  386. package/dist/ui/overlay/impl/login-overlay-v2.d.ts +49 -0
  387. package/dist/ui/overlay/impl/login-overlay-v2.js +277 -0
  388. package/dist/ui/overlay/impl/mcp-overlay-v2.d.ts +63 -0
  389. package/dist/ui/overlay/impl/mcp-overlay-v2.js +907 -0
  390. package/dist/ui/overlay/impl/model-overlay-v2.d.ts +57 -13
  391. package/dist/ui/overlay/impl/model-overlay-v2.js +1086 -61
  392. package/dist/ui/overlay/impl/new-overlay-v2.d.ts +37 -6
  393. package/dist/ui/overlay/impl/new-overlay-v2.js +715 -65
  394. package/dist/ui/overlay/impl/notifications-overlay-v2.d.ts +20 -0
  395. package/dist/ui/overlay/impl/notifications-overlay-v2.js +116 -0
  396. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.d.ts +76 -0
  397. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.js +728 -0
  398. package/dist/ui/overlay/impl/pending-overlay-v2.d.ts +51 -0
  399. package/dist/ui/overlay/impl/pending-overlay-v2.js +445 -0
  400. package/dist/ui/overlay/impl/permission-overlay-v2.js +5 -5
  401. package/dist/ui/overlay/impl/permissions-overlay-v2.d.ts +85 -0
  402. package/dist/ui/overlay/impl/permissions-overlay-v2.js +820 -0
  403. package/dist/ui/overlay/impl/plan-approval-overlay-v2.d.ts +35 -0
  404. package/dist/ui/overlay/impl/plan-approval-overlay-v2.js +181 -0
  405. package/dist/ui/overlay/impl/project-edit-overlay-v2.d.ts +36 -0
  406. package/dist/ui/overlay/impl/project-edit-overlay-v2.js +195 -0
  407. package/dist/ui/overlay/impl/projects-overlay-v2.d.ts +1 -0
  408. package/dist/ui/overlay/impl/projects-overlay-v2.js +278 -44
  409. package/dist/ui/overlay/impl/reset-overlay-v2.d.ts +39 -0
  410. package/dist/ui/overlay/impl/reset-overlay-v2.js +107 -0
  411. package/dist/ui/overlay/impl/resume-overlay-v2.d.ts +60 -0
  412. package/dist/ui/overlay/impl/resume-overlay-v2.js +414 -0
  413. package/dist/ui/overlay/impl/session-mode-overlay-v2.d.ts +43 -0
  414. package/dist/ui/overlay/impl/session-mode-overlay-v2.js +124 -0
  415. package/dist/ui/overlay/impl/tasks-overlay-v2.d.ts +28 -0
  416. package/dist/ui/overlay/impl/tasks-overlay-v2.js +283 -0
  417. package/dist/ui/overlay/impl/team-overlay-v2.d.ts +86 -0
  418. package/dist/ui/overlay/impl/team-overlay-v2.js +692 -0
  419. package/dist/ui/overlay/impl/terminals-overlay-v2.d.ts +26 -0
  420. package/dist/ui/overlay/impl/terminals-overlay-v2.js +217 -0
  421. package/dist/ui/overlay/impl/tools-overlay-v2.js +3 -7
  422. package/dist/ui/overlay/impl/tutorial-overlay-v2.d.ts +30 -16
  423. package/dist/ui/overlay/impl/tutorial-overlay-v2.js +133 -956
  424. package/dist/ui/overlay/impl/workflow-overlay-v2.js +5 -1
  425. package/dist/ui/overlay/index.d.ts +20 -1
  426. package/dist/ui/overlay/index.js +19 -0
  427. package/dist/ui/overlay/types.d.ts +5 -0
  428. package/dist/ui/overlay-manager.d.ts +43 -0
  429. package/dist/ui/overlay-manager.js +238 -0
  430. package/dist/ui/overlays.js +4 -16
  431. package/dist/ui/permission-overlay.js +6 -5
  432. package/dist/ui/status-bar-controller.d.ts +33 -0
  433. package/dist/ui/status-bar-controller.js +99 -0
  434. package/dist/ui/subagent-renderer.js +3 -19
  435. package/dist/ui/terminal-autocomplete-utils.d.ts +23 -0
  436. package/dist/ui/terminal-autocomplete-utils.js +83 -0
  437. package/dist/ui/terminal-line-builders.d.ts +17 -0
  438. package/dist/ui/terminal-line-builders.js +42 -0
  439. package/dist/ui/terminal-render-item.d.ts +16 -0
  440. package/dist/ui/terminal-render-item.js +267 -0
  441. package/dist/ui/terminal-renderer.d.ts +7 -8
  442. package/dist/ui/terminal-renderer.js +7 -8
  443. package/dist/ui/terminal-types.d.ts +179 -0
  444. package/dist/ui/terminal-types.js +34 -0
  445. package/dist/ui/terminal-ui.d.ts +144 -276
  446. package/dist/ui/terminal-ui.js +384 -1861
  447. package/dist/ui/todo-zone.d.ts +19 -1
  448. package/dist/ui/todo-zone.js +71 -13
  449. package/dist/ui/tool-formatters.js +512 -1
  450. package/dist/ui/turn-metrics.d.ts +56 -0
  451. package/dist/ui/turn-metrics.js +75 -0
  452. package/dist/ui/types.d.ts +28 -0
  453. package/dist/ui/types.js +1 -0
  454. package/dist/ui/vscode-diff-ipc.d.ts +102 -0
  455. package/dist/ui/vscode-diff-ipc.js +385 -0
  456. package/dist/utils/credentials.d.ts +24 -5
  457. package/dist/utils/credentials.js +123 -9
  458. package/dist/utils/format-tokens.d.ts +13 -0
  459. package/dist/utils/format-tokens.js +18 -0
  460. package/dist/utils/git-config.d.ts +26 -0
  461. package/dist/utils/git-config.js +54 -0
  462. package/dist/utils/message-utils.d.ts +61 -0
  463. package/dist/utils/message-utils.js +72 -0
  464. package/dist/utils/model-tiers.d.ts +8 -1
  465. package/dist/utils/model-tiers.js +38 -16
  466. package/dist/utils/open-browser.d.ts +5 -0
  467. package/dist/utils/open-browser.js +32 -0
  468. package/dist/utils/path-safety.js +3 -2
  469. package/dist/utils/project-detection.d.ts +58 -0
  470. package/dist/utils/project-detection.js +424 -0
  471. package/dist/utils/project-memory.js +2 -1
  472. package/dist/utils/project-status.d.ts +2 -2
  473. package/dist/utils/startup-perf.d.ts +18 -0
  474. package/dist/utils/startup-perf.js +60 -0
  475. package/dist/utils/token-tracker.d.ts +62 -0
  476. package/dist/utils/token-tracker.js +150 -0
  477. package/dist/utils/token-types.d.ts +23 -0
  478. package/dist/utils/token-types.js +18 -0
  479. package/dist/utils/types/config-types.d.ts +32 -0
  480. package/dist/utils/types/config-types.js +8 -0
  481. package/dist/utils/update-checker.d.ts +28 -0
  482. package/dist/utils/update-checker.js +106 -0
  483. package/dist/utils/version.d.ts +7 -0
  484. package/dist/utils/version.js +10 -0
  485. package/dist/utils/vscode-detect.d.ts +39 -0
  486. package/dist/utils/vscode-detect.js +137 -0
  487. package/package.json +25 -12
  488. package/dist/commands/handler-types.d.ts +0 -68
  489. package/dist/commands/handler-types.js +0 -8
  490. package/dist/commands/handlers/agent-commands.d.ts +0 -13
  491. package/dist/commands/handlers/agent-commands.js +0 -305
  492. package/dist/commands/handlers/design-commands.d.ts +0 -15
  493. package/dist/commands/handlers/design-commands.js +0 -334
  494. package/dist/commands/handlers/index.d.ts +0 -20
  495. package/dist/commands/handlers/index.js +0 -43
  496. package/dist/commands/handlers/overlay-commands.d.ts +0 -21
  497. package/dist/commands/handlers/overlay-commands.js +0 -287
  498. package/dist/commands/handlers/project-commands.d.ts +0 -11
  499. package/dist/commands/handlers/project-commands.js +0 -167
  500. package/dist/commands/handlers/simple-commands.d.ts +0 -19
  501. package/dist/commands/handlers/simple-commands.js +0 -144
  502. package/dist/commands/registry.d.ts +0 -50
  503. package/dist/commands/registry.js +0 -75
  504. package/dist/index.old.d.ts +0 -7
  505. package/dist/index.old.js +0 -1014
  506. package/dist/repl.d.ts +0 -149
  507. package/dist/repl.js +0 -1151
  508. package/dist/templates/claude-md.d.ts +0 -7
  509. package/dist/templates/claude-md.js +0 -189
  510. package/dist/test-autocomplete.d.ts +0 -7
  511. package/dist/test-autocomplete.js +0 -85
  512. package/dist/test-tabbed-menu.d.ts +0 -7
  513. package/dist/test-tabbed-menu.js +0 -25
  514. package/dist/tool-selector.d.ts +0 -71
  515. package/dist/tool-selector.js +0 -184
  516. package/dist/ui/agents-overlay-v2.d.ts +0 -43
  517. package/dist/ui/agents-overlay-v2.js +0 -809
  518. package/dist/ui/agents-overlay.d.ts +0 -12
  519. package/dist/ui/agents-overlay.js +0 -863
  520. package/dist/ui/anchors-overlay.d.ts +0 -12
  521. package/dist/ui/anchors-overlay.js +0 -775
  522. package/dist/ui/arch-type-overlay.d.ts +0 -15
  523. package/dist/ui/arch-type-overlay.js +0 -201
  524. package/dist/ui/ask-user-overlay-v2.d.ts +0 -26
  525. package/dist/ui/ask-user-overlay-v2.js +0 -555
  526. package/dist/ui/ask-user-simple-overlay-v2.d.ts +0 -25
  527. package/dist/ui/ask-user-simple-overlay-v2.js +0 -215
  528. package/dist/ui/backlog-overlay.d.ts +0 -32
  529. package/dist/ui/backlog-overlay.js +0 -652
  530. package/dist/ui/commands-overlay-v2.d.ts +0 -33
  531. package/dist/ui/commands-overlay-v2.js +0 -441
  532. package/dist/ui/commands-overlay.d.ts +0 -16
  533. package/dist/ui/commands-overlay.js +0 -439
  534. package/dist/ui/config-overlay.d.ts +0 -35
  535. package/dist/ui/config-overlay.js +0 -707
  536. package/dist/ui/docs-overlay.d.ts +0 -17
  537. package/dist/ui/docs-overlay.js +0 -303
  538. package/dist/ui/footer-v2.d.ts +0 -222
  539. package/dist/ui/footer-v2.js +0 -1349
  540. package/dist/ui/help-overlay-v2.d.ts +0 -34
  541. package/dist/ui/help-overlay-v2.js +0 -309
  542. package/dist/ui/help-overlay.d.ts +0 -16
  543. package/dist/ui/help-overlay.js +0 -316
  544. package/dist/ui/init-overlay-v2.d.ts +0 -34
  545. package/dist/ui/init-overlay-v2.js +0 -600
  546. package/dist/ui/init-overlay.d.ts +0 -34
  547. package/dist/ui/init-overlay.js +0 -604
  548. package/dist/ui/input-prompt-v2.d.ts +0 -180
  549. package/dist/ui/input-prompt-v2.js +0 -999
  550. package/dist/ui/iteration-limit-overlay-v2.d.ts +0 -21
  551. package/dist/ui/iteration-limit-overlay-v2.js +0 -114
  552. package/dist/ui/keys-overlay-v2.d.ts +0 -41
  553. package/dist/ui/keys-overlay-v2.js +0 -248
  554. package/dist/ui/mascot-overlay-v2.d.ts +0 -41
  555. package/dist/ui/mascot-overlay-v2.js +0 -138
  556. package/dist/ui/mascot-overlay.d.ts +0 -21
  557. package/dist/ui/mascot-overlay.js +0 -146
  558. package/dist/ui/model-overlay-v2.d.ts +0 -49
  559. package/dist/ui/model-overlay-v2.js +0 -118
  560. package/dist/ui/model-overlay.d.ts +0 -27
  561. package/dist/ui/model-overlay.js +0 -221
  562. package/dist/ui/model-warning-overlay.d.ts +0 -30
  563. package/dist/ui/model-warning-overlay.js +0 -169
  564. package/dist/ui/new-overlay.d.ts +0 -34
  565. package/dist/ui/new-overlay.js +0 -604
  566. package/dist/ui/overlay/impl/init-overlay-v2.d.ts +0 -77
  567. package/dist/ui/overlay/impl/init-overlay-v2.js +0 -593
  568. package/dist/ui/overlay/overlay-types.d.ts +0 -128
  569. package/dist/ui/overlay/overlay-types.js +0 -22
  570. package/dist/ui/overlays/help-overlay-v2.d.ts +0 -28
  571. package/dist/ui/overlays/help-overlay-v2.js +0 -198
  572. package/dist/ui/overlays/index.d.ts +0 -11
  573. package/dist/ui/overlays/index.js +0 -11
  574. package/dist/ui/permission-overlay-v2.d.ts +0 -36
  575. package/dist/ui/permission-overlay-v2.js +0 -380
  576. package/dist/ui/projects-overlay.d.ts +0 -19
  577. package/dist/ui/projects-overlay.js +0 -484
  578. package/dist/ui/theme-overlay-v2.d.ts +0 -42
  579. package/dist/ui/theme-overlay-v2.js +0 -135
  580. package/dist/ui/theme-overlay.d.ts +0 -24
  581. package/dist/ui/theme-overlay.js +0 -127
  582. package/dist/ui/tools-overlay-v2.d.ts +0 -47
  583. package/dist/ui/tools-overlay-v2.js +0 -218
  584. package/dist/ui/tools-overlay.d.ts +0 -34
  585. package/dist/ui/tools-overlay.js +0 -230
  586. package/dist/ui/tutorial-overlay-v2.d.ts +0 -31
  587. package/dist/ui/tutorial-overlay-v2.js +0 -1035
  588. package/dist/ui/tutorial-overlay.d.ts +0 -11
  589. package/dist/ui/tutorial-overlay.js +0 -1034
  590. package/dist/ui/workflow-overlay.d.ts +0 -22
  591. package/dist/ui/workflow-overlay.js +0 -636
@@ -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
+ }
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Token Tracker
3
+ *
4
+ * Tracks token usage breakdown for debugging and optimization.
5
+ * Estimates are calculated when the agent is created and updated
6
+ * as context changes (messages added, etc.).
7
+ */
8
+ import type { TokenBreakdown } from './token-types.js';
9
+ export interface TokenEstimates {
10
+ system: number;
11
+ role: number;
12
+ tools: number;
13
+ context: number;
14
+ history: number;
15
+ }
16
+ /**
17
+ * Count tokens using tiktoken (cl100k_base encoding)
18
+ */
19
+ export declare function estimateTokens(text: string | undefined): number;
20
+ /**
21
+ * Count tokens for a JSON object (tool definition, etc.)
22
+ */
23
+ export declare function estimateJsonTokens(obj: unknown): number;
24
+ /**
25
+ * Set static token estimates (called at agent creation)
26
+ */
27
+ export declare function setStaticEstimates(estimates: {
28
+ system: number;
29
+ role: number;
30
+ tools: number;
31
+ context: number;
32
+ }): void;
33
+ /**
34
+ * Update history token estimate (called before each request)
35
+ */
36
+ export declare function updateHistoryEstimate(historyTokens: number): void;
37
+ /**
38
+ * Update cache info from API response
39
+ */
40
+ export declare function updateCacheInfo(cacheRead: number, cacheCreation: number): void;
41
+ /**
42
+ * Get current breakdown for display
43
+ */
44
+ export declare function getTokenBreakdown(): TokenBreakdown;
45
+ /**
46
+ * Get total estimated tokens
47
+ */
48
+ export declare function getTotalEstimate(): number;
49
+ /**
50
+ * Reset all estimates (for new agent/session)
51
+ */
52
+ export declare function resetEstimates(): void;
53
+ /**
54
+ * Format breakdown for display (compact form)
55
+ * Example: "sys:2k role:1k tools:12k ctx:0.4k hist:3k"
56
+ */
57
+ export declare function formatBreakdownCompact(): string;
58
+ /**
59
+ * Format cache info for display
60
+ * Example: "cached:18k new:5k"
61
+ */
62
+ export declare function formatCacheInfo(): string | null;