@compilr-dev/cli 0.4.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 (634) hide show
  1. package/README.md +254 -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 +134 -4
  7. package/dist/agent.js +345 -166
  8. package/dist/anchors/index.d.ts +9 -0
  9. package/dist/anchors/index.js +9 -0
  10. package/dist/anchors/project-anchors.d.ts +79 -0
  11. package/dist/anchors/project-anchors.js +202 -0
  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/index.d.ts +2 -1
  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.d.ts +13 -0
  28. package/dist/commands-v2/handlers/context.js +533 -0
  29. package/dist/commands-v2/handlers/core.d.ts +14 -0
  30. package/dist/commands-v2/handlers/core.js +290 -0
  31. package/dist/commands-v2/handlers/debug.d.ts +11 -0
  32. package/dist/commands-v2/handlers/debug.js +177 -0
  33. package/dist/commands-v2/handlers/delegations.d.ts +8 -0
  34. package/dist/commands-v2/handlers/delegations.js +29 -0
  35. package/dist/commands-v2/handlers/files.d.ts +8 -0
  36. package/dist/commands-v2/handlers/files.js +162 -0
  37. package/dist/commands-v2/handlers/filter.d.ts +9 -0
  38. package/dist/commands-v2/handlers/filter.js +130 -0
  39. package/dist/commands-v2/handlers/games.d.ts +7 -0
  40. package/dist/commands-v2/handlers/games.js +57 -0
  41. package/dist/commands-v2/handlers/index.d.ts +25 -0
  42. package/dist/commands-v2/handlers/index.js +63 -0
  43. package/dist/commands-v2/handlers/mcp.d.ts +8 -0
  44. package/dist/commands-v2/handlers/mcp.js +39 -0
  45. package/dist/commands-v2/handlers/notifications.d.ts +9 -0
  46. package/dist/commands-v2/handlers/notifications.js +34 -0
  47. package/dist/commands-v2/handlers/project.d.ts +22 -0
  48. package/dist/commands-v2/handlers/project.js +1035 -0
  49. package/dist/commands-v2/handlers/reset.d.ts +11 -0
  50. package/dist/commands-v2/handlers/reset.js +118 -0
  51. package/dist/commands-v2/handlers/session.d.ts +161 -0
  52. package/dist/commands-v2/handlers/session.js +805 -0
  53. package/dist/commands-v2/handlers/settings.d.ts +17 -0
  54. package/dist/commands-v2/handlers/settings.js +417 -0
  55. package/dist/commands-v2/handlers/tasks.d.ts +5 -0
  56. package/dist/commands-v2/handlers/tasks.js +36 -0
  57. package/dist/commands-v2/handlers/team.d.ts +9 -0
  58. package/dist/commands-v2/handlers/team.js +549 -0
  59. package/dist/commands-v2/handlers/terminals.d.ts +9 -0
  60. package/dist/commands-v2/handlers/terminals.js +34 -0
  61. package/dist/commands-v2/index.d.ts +14 -0
  62. package/dist/commands-v2/index.js +18 -0
  63. package/dist/commands-v2/registry.d.ts +52 -0
  64. package/dist/commands-v2/registry.js +114 -0
  65. package/dist/commands-v2/types.d.ts +153 -0
  66. package/dist/commands-v2/types.js +7 -0
  67. package/dist/commands.js +123 -7
  68. package/dist/compilr-diff-companion.vsix +0 -0
  69. package/dist/db/index.js +98 -4
  70. package/dist/db/repositories/document-repository.d.ts +2 -0
  71. package/dist/db/repositories/document-repository.js +5 -1
  72. package/dist/db/repositories/index.d.ts +2 -0
  73. package/dist/db/repositories/index.js +1 -0
  74. package/dist/db/repositories/plan-repository.d.ts +101 -0
  75. package/dist/db/repositories/plan-repository.js +275 -0
  76. package/dist/db/repositories/project-repository.d.ts +6 -0
  77. package/dist/db/repositories/project-repository.js +41 -0
  78. package/dist/db/repositories/work-item-repository.d.ts +15 -0
  79. package/dist/db/repositories/work-item-repository.js +69 -4
  80. package/dist/db/schema.d.ts +40 -3
  81. package/dist/db/schema.js +66 -3
  82. package/dist/episodes/index.d.ts +20 -0
  83. package/dist/episodes/index.js +27 -0
  84. package/dist/episodes/recorder.d.ts +51 -0
  85. package/dist/episodes/recorder.js +195 -0
  86. package/dist/episodes/significant-work.d.ts +21 -0
  87. package/dist/episodes/significant-work.js +56 -0
  88. package/dist/episodes/store.d.ts +38 -0
  89. package/dist/episodes/store.js +199 -0
  90. package/dist/episodes/types.d.ts +35 -0
  91. package/dist/episodes/types.js +6 -0
  92. package/dist/episodes/work-at-risk.d.ts +12 -0
  93. package/dist/episodes/work-at-risk.js +38 -0
  94. package/dist/episodes/work-summary-anchor.d.ts +23 -0
  95. package/dist/episodes/work-summary-anchor.js +73 -0
  96. package/dist/games/coins.d.ts +66 -0
  97. package/dist/games/coins.js +165 -0
  98. package/dist/games/game-base.d.ts +84 -0
  99. package/dist/games/game-base.js +204 -0
  100. package/dist/games/index.d.ts +16 -0
  101. package/dist/games/index.js +49 -0
  102. package/dist/games/scores.d.ts +69 -0
  103. package/dist/games/scores.js +191 -0
  104. package/dist/games/tetris/board.d.ts +59 -0
  105. package/dist/games/tetris/board.js +170 -0
  106. package/dist/games/tetris/index.d.ts +109 -0
  107. package/dist/games/tetris/index.js +610 -0
  108. package/dist/games/tetris/pieces.d.ts +44 -0
  109. package/dist/games/tetris/pieces.js +271 -0
  110. package/dist/games/tetris/renderer.d.ts +26 -0
  111. package/dist/games/tetris/renderer.js +77 -0
  112. package/dist/guide/guide-content.d.ts +23 -0
  113. package/dist/guide/guide-content.js +196 -0
  114. package/dist/guide/index.d.ts +8 -0
  115. package/dist/guide/index.js +7 -0
  116. package/dist/guide/shared-content.d.ts +37 -0
  117. package/dist/guide/shared-content.js +1272 -0
  118. package/dist/guide/tutorial-helpers.d.ts +57 -0
  119. package/dist/guide/tutorial-helpers.js +147 -0
  120. package/dist/handlers/ask-user-handlers.d.ts +32 -0
  121. package/dist/handlers/ask-user-handlers.js +104 -0
  122. package/dist/handlers/delegation-handlers.d.ts +34 -0
  123. package/dist/handlers/delegation-handlers.js +291 -0
  124. package/dist/handlers/permission-handler.d.ts +30 -0
  125. package/dist/handlers/permission-handler.js +205 -0
  126. package/dist/index.d.ts +11 -1
  127. package/dist/index.js +615 -179
  128. package/dist/input-handlers/index.d.ts +7 -0
  129. package/dist/input-handlers/index.js +7 -0
  130. package/dist/input-handlers/memory-handler.d.ts +26 -0
  131. package/dist/input-handlers/memory-handler.js +69 -0
  132. package/dist/models/index.d.ts +10 -0
  133. package/dist/models/index.js +12 -0
  134. package/dist/models/model-registry.d.ts +38 -0
  135. package/dist/models/model-registry.js +69 -0
  136. package/dist/models/model-tiers.d.ts +28 -0
  137. package/dist/models/model-tiers.js +71 -0
  138. package/dist/models/model-validation.d.ts +25 -0
  139. package/dist/models/model-validation.js +291 -0
  140. package/dist/models/ollama-models.d.ts +73 -0
  141. package/dist/models/ollama-models.js +178 -0
  142. package/dist/models/provider-types.d.ts +6 -0
  143. package/dist/models/provider-types.js +1 -0
  144. package/dist/models/providers.d.ts +35 -0
  145. package/dist/models/providers.js +58 -0
  146. package/dist/models/types.d.ts +4 -0
  147. package/dist/models/types.js +4 -0
  148. package/dist/multi-agent/activity.d.ts +21 -0
  149. package/dist/multi-agent/activity.js +34 -0
  150. package/dist/multi-agent/agent-selection.d.ts +55 -0
  151. package/dist/multi-agent/agent-selection.js +90 -0
  152. package/dist/multi-agent/artifacts.d.ts +197 -0
  153. package/dist/multi-agent/artifacts.js +379 -0
  154. package/dist/multi-agent/checkpointer.d.ts +138 -0
  155. package/dist/multi-agent/checkpointer.js +471 -0
  156. package/dist/multi-agent/collision-utils.d.ts +16 -0
  157. package/dist/multi-agent/collision-utils.js +28 -0
  158. package/dist/multi-agent/context-resolver.d.ts +97 -0
  159. package/dist/multi-agent/context-resolver.js +316 -0
  160. package/dist/multi-agent/custom-agents.d.ts +83 -0
  161. package/dist/multi-agent/custom-agents.js +227 -0
  162. package/dist/multi-agent/delegation-tracker.d.ts +157 -0
  163. package/dist/multi-agent/delegation-tracker.js +243 -0
  164. package/dist/multi-agent/file-lock-hook.d.ts +29 -0
  165. package/dist/multi-agent/file-lock-hook.js +97 -0
  166. package/dist/multi-agent/file-locks.d.ts +58 -0
  167. package/dist/multi-agent/file-locks.js +194 -0
  168. package/dist/multi-agent/index.d.ts +24 -0
  169. package/dist/multi-agent/index.js +30 -0
  170. package/dist/multi-agent/mention-parser.d.ts +64 -0
  171. package/dist/multi-agent/mention-parser.js +146 -0
  172. package/dist/multi-agent/notification-manager.d.ts +84 -0
  173. package/dist/multi-agent/notification-manager.js +224 -0
  174. package/dist/multi-agent/pending-requests.d.ts +122 -0
  175. package/dist/multi-agent/pending-requests.js +155 -0
  176. package/dist/multi-agent/session-registry.d.ts +139 -0
  177. package/dist/multi-agent/session-registry.js +514 -0
  178. package/dist/multi-agent/shared-context.d.ts +293 -0
  179. package/dist/multi-agent/shared-context.js +671 -0
  180. package/dist/multi-agent/skill-requirements.d.ts +66 -0
  181. package/dist/multi-agent/skill-requirements.js +178 -0
  182. package/dist/multi-agent/task-assignment.d.ts +69 -0
  183. package/dist/multi-agent/task-assignment.js +123 -0
  184. package/dist/multi-agent/task-suggestion.d.ts +31 -0
  185. package/dist/multi-agent/task-suggestion.js +72 -0
  186. package/dist/multi-agent/team-agent.d.ts +201 -0
  187. package/dist/multi-agent/team-agent.js +488 -0
  188. package/dist/multi-agent/team.d.ts +286 -0
  189. package/dist/multi-agent/team.js +610 -0
  190. package/dist/multi-agent/tool-config.d.ts +110 -0
  191. package/dist/multi-agent/tool-config.js +661 -0
  192. package/dist/multi-agent/types.d.ts +211 -0
  193. package/dist/multi-agent/types.js +617 -0
  194. package/dist/prompts/plan-mode-prompt.d.ts +11 -0
  195. package/dist/prompts/plan-mode-prompt.js +95 -0
  196. package/dist/repl-helpers.d.ts +63 -0
  197. package/dist/repl-helpers.js +319 -0
  198. package/dist/repl-v2.d.ts +554 -0
  199. package/dist/repl-v2.js +3286 -0
  200. package/dist/session/index.d.ts +6 -0
  201. package/dist/session/index.js +6 -0
  202. package/dist/session/project-session-manager.d.ts +158 -0
  203. package/dist/session/project-session-manager.js +650 -0
  204. package/dist/settings/index.d.ts +156 -13
  205. package/dist/settings/index.js +377 -24
  206. package/dist/settings/mcp-config.d.ts +76 -0
  207. package/dist/settings/mcp-config.js +143 -0
  208. package/dist/settings/paths.d.ts +114 -0
  209. package/dist/settings/paths.js +270 -0
  210. package/dist/shared-handlers.d.ts +62 -0
  211. package/dist/shared-handlers.js +48 -0
  212. package/dist/system-prompt/builder.d.ts +5 -0
  213. package/dist/system-prompt/builder.js +4 -0
  214. package/dist/system-prompt/index.d.ts +18 -0
  215. package/dist/system-prompt/index.js +18 -0
  216. package/dist/system-prompt/modules.d.ts +5 -0
  217. package/dist/system-prompt/modules.js +4 -0
  218. package/dist/tabbed-menu.js +2 -1
  219. package/dist/templates/compilr-md-import.d.ts +16 -0
  220. package/dist/templates/compilr-md-import.js +241 -0
  221. package/dist/templates/compilr-md.js +10 -58
  222. package/dist/templates/config-json.d.ts +1 -25
  223. package/dist/templates/index.d.ts +2 -0
  224. package/dist/templates/index.js +35 -75
  225. package/dist/themes/colors.js +3 -1
  226. package/dist/themes/registry.d.ts +5 -36
  227. package/dist/themes/registry.js +11 -95
  228. package/dist/themes/types.d.ts +3 -38
  229. package/dist/themes/types.js +2 -2
  230. package/dist/tool-names.d.ts +108 -0
  231. package/dist/tool-names.js +227 -0
  232. package/dist/tools/anchor-tools.d.ts +31 -0
  233. package/dist/tools/anchor-tools.js +255 -0
  234. package/dist/tools/artifact-tools.d.ts +42 -0
  235. package/dist/tools/artifact-tools.js +328 -0
  236. package/dist/tools/ask-user-simple.d.ts +1 -1
  237. package/dist/tools/ask-user-simple.js +2 -1
  238. package/dist/tools/ask-user.d.ts +1 -1
  239. package/dist/tools/ask-user.js +2 -1
  240. package/dist/tools/backlog-wrappers.d.ts +56 -0
  241. package/dist/tools/backlog-wrappers.js +353 -0
  242. package/dist/tools/backlog.d.ts +2 -2
  243. package/dist/tools/backlog.js +2 -2
  244. package/dist/tools/db-tools.d.ts +12 -0
  245. package/dist/tools/db-tools.js +14 -0
  246. package/dist/tools/delegate-background.d.ts +27 -0
  247. package/dist/tools/delegate-background.js +115 -0
  248. package/dist/tools/delegate.d.ts +22 -0
  249. package/dist/tools/delegate.js +97 -0
  250. package/dist/tools/delegation-status.d.ts +16 -0
  251. package/dist/tools/delegation-status.js +128 -0
  252. package/dist/tools/document-db.d.ts +43 -0
  253. package/dist/tools/document-db.js +220 -0
  254. package/dist/tools/guide-tool.d.ts +12 -0
  255. package/dist/tools/guide-tool.js +59 -0
  256. package/dist/tools/handoff.d.ts +25 -0
  257. package/dist/tools/handoff.js +99 -0
  258. package/dist/tools/meta-tools.d.ts +26 -0
  259. package/dist/tools/meta-tools.js +47 -0
  260. package/dist/tools/plan-tools.d.ts +54 -0
  261. package/dist/tools/plan-tools.js +338 -0
  262. package/dist/tools/platform-adapter.d.ts +29 -0
  263. package/dist/tools/platform-adapter.js +394 -0
  264. package/dist/tools/project-db.d.ts +34 -0
  265. package/dist/tools/project-db.js +39 -0
  266. package/dist/tools/recall-work-tool.d.ts +18 -0
  267. package/dist/tools/recall-work-tool.js +82 -0
  268. package/dist/tools/workitem-db.d.ts +135 -0
  269. package/dist/tools/workitem-db.js +730 -0
  270. package/dist/tools.d.ts +67 -2
  271. package/dist/tools.js +238 -38
  272. package/dist/ui/ask-user-overlay.d.ts +2 -2
  273. package/dist/ui/ask-user-overlay.js +443 -535
  274. package/dist/ui/ask-user-simple-overlay.d.ts +2 -2
  275. package/dist/ui/ask-user-simple-overlay.js +182 -209
  276. package/dist/ui/autocomplete-controller.d.ts +42 -0
  277. package/dist/ui/autocomplete-controller.js +384 -0
  278. package/dist/ui/base/index.d.ts +26 -0
  279. package/dist/ui/base/index.js +33 -0
  280. package/dist/ui/base/inline-overlay-utils.d.ts +217 -0
  281. package/dist/ui/base/inline-overlay-utils.js +320 -0
  282. package/dist/ui/base/inline-overlay.d.ts +159 -0
  283. package/dist/ui/base/inline-overlay.js +257 -0
  284. package/dist/ui/base/key-utils.d.ts +15 -0
  285. package/dist/ui/base/key-utils.js +30 -0
  286. package/dist/ui/base/overlay-base-v2.d.ts +203 -0
  287. package/dist/ui/base/overlay-base-v2.js +260 -0
  288. package/dist/ui/base/overlay-base.d.ts +156 -0
  289. package/dist/ui/base/overlay-base.js +238 -0
  290. package/dist/ui/base/overlay-lifecycle.d.ts +65 -0
  291. package/dist/ui/base/overlay-lifecycle.js +159 -0
  292. package/dist/ui/base/overlay-types.d.ts +185 -0
  293. package/dist/ui/base/overlay-types.js +7 -0
  294. package/dist/ui/base/render-utils.d.ts +27 -0
  295. package/dist/ui/base/render-utils.js +36 -0
  296. package/dist/ui/base/screen-stack.d.ts +148 -0
  297. package/dist/ui/base/screen-stack.js +184 -0
  298. package/dist/ui/base/tabbed-list-overlay-v2.d.ts +118 -0
  299. package/dist/ui/base/tabbed-list-overlay-v2.js +335 -0
  300. package/dist/ui/base/tabbed-list-overlay.d.ts +153 -0
  301. package/dist/ui/base/tabbed-list-overlay.js +369 -0
  302. package/dist/ui/constants/labels.d.ts +14 -0
  303. package/dist/ui/constants/labels.js +51 -0
  304. package/dist/ui/conversation-store.d.ts +55 -0
  305. package/dist/ui/conversation-store.js +107 -0
  306. package/dist/ui/conversation.d.ts +75 -4
  307. package/dist/ui/conversation.js +376 -165
  308. package/dist/ui/diff.d.ts +7 -1
  309. package/dist/ui/diff.js +85 -48
  310. package/dist/ui/ephemeral.d.ts +1 -1
  311. package/dist/ui/ephemeral.js +4 -10
  312. package/dist/ui/features/index.d.ts +34 -0
  313. package/dist/ui/features/index.js +34 -0
  314. package/dist/ui/features/input-feature.d.ts +85 -0
  315. package/dist/ui/features/input-feature.js +238 -0
  316. package/dist/ui/features/list-feature.d.ts +155 -0
  317. package/dist/ui/features/list-feature.js +244 -0
  318. package/dist/ui/features/pagination-feature.d.ts +154 -0
  319. package/dist/ui/features/pagination-feature.js +238 -0
  320. package/dist/ui/features/search-feature.d.ts +148 -0
  321. package/dist/ui/features/search-feature.js +185 -0
  322. package/dist/ui/features/tab-feature.d.ts +194 -0
  323. package/dist/ui/features/tab-feature.js +307 -0
  324. package/dist/ui/file-autocomplete.d.ts +24 -0
  325. package/dist/ui/file-autocomplete.js +56 -0
  326. package/dist/ui/footer-renderer.d.ts +69 -0
  327. package/dist/ui/footer-renderer.js +431 -0
  328. package/dist/ui/footer.d.ts +181 -7
  329. package/dist/ui/footer.js +523 -74
  330. package/dist/ui/guardrail-overlay.d.ts +29 -0
  331. package/dist/ui/guardrail-overlay.js +145 -0
  332. package/dist/ui/index.d.ts +1 -1
  333. package/dist/ui/index.js +1 -3
  334. package/dist/ui/input-controller.d.ts +51 -0
  335. package/dist/ui/input-controller.js +176 -0
  336. package/dist/ui/input-prompt.d.ts +135 -33
  337. package/dist/ui/input-prompt.js +728 -337
  338. package/dist/ui/iteration-limit-overlay.d.ts +2 -2
  339. package/dist/ui/iteration-limit-overlay.js +92 -128
  340. package/dist/ui/keyboard-handler.d.ts +57 -0
  341. package/dist/ui/keyboard-handler.js +557 -0
  342. package/dist/ui/keys-overlay.d.ts +1 -0
  343. package/dist/ui/keys-overlay.js +203 -141
  344. package/dist/ui/line-utils.d.ts +88 -0
  345. package/dist/ui/line-utils.js +150 -0
  346. package/dist/ui/live-region-facade.d.ts +42 -0
  347. package/dist/ui/live-region-facade.js +205 -0
  348. package/dist/ui/live-region.d.ts +157 -0
  349. package/dist/ui/live-region.js +379 -0
  350. package/dist/ui/mascot/expressions.d.ts +32 -0
  351. package/dist/ui/mascot/expressions.js +213 -0
  352. package/dist/ui/mascot/index.d.ts +8 -0
  353. package/dist/ui/mascot/index.js +8 -0
  354. package/dist/ui/mascot/renderer.d.ts +19 -0
  355. package/dist/ui/mascot/renderer.js +132 -0
  356. package/dist/ui/overlay/data/tutorial-content.d.ts +9 -0
  357. package/dist/ui/overlay/data/tutorial-content.js +9 -0
  358. package/dist/ui/overlay/data/tutorial-registry.d.ts +12 -0
  359. package/dist/ui/overlay/data/tutorial-registry.js +116 -0
  360. package/dist/ui/overlay/data/tutorial-types.d.ts +35 -0
  361. package/dist/ui/overlay/data/tutorial-types.js +6 -0
  362. package/dist/ui/overlay/data/tutorials/basics/first-conversation.d.ts +7 -0
  363. package/dist/ui/overlay/data/tutorials/basics/first-conversation.js +220 -0
  364. package/dist/ui/overlay/data/tutorials/basics/first-project.d.ts +7 -0
  365. package/dist/ui/overlay/data/tutorials/basics/first-project.js +284 -0
  366. package/dist/ui/overlay/data/tutorials/basics/navigation.d.ts +8 -0
  367. package/dist/ui/overlay/data/tutorials/basics/navigation.js +22 -0
  368. package/dist/ui/overlay/data/tutorials/basics/welcome.d.ts +7 -0
  369. package/dist/ui/overlay/data/tutorials/basics/welcome.js +174 -0
  370. package/dist/ui/overlay/data/tutorials/config/context-management.d.ts +7 -0
  371. package/dist/ui/overlay/data/tutorials/config/context-management.js +158 -0
  372. package/dist/ui/overlay/data/tutorials/config/mcp-servers.d.ts +8 -0
  373. package/dist/ui/overlay/data/tutorials/config/mcp-servers.js +155 -0
  374. package/dist/ui/overlay/data/tutorials/config/model-selection.d.ts +7 -0
  375. package/dist/ui/overlay/data/tutorials/config/model-selection.js +162 -0
  376. package/dist/ui/overlay/data/tutorials/config/permissions-safety.d.ts +7 -0
  377. package/dist/ui/overlay/data/tutorials/config/permissions-safety.js +163 -0
  378. package/dist/ui/overlay/data/tutorials/config/settings-config.d.ts +7 -0
  379. package/dist/ui/overlay/data/tutorials/config/settings-config.js +166 -0
  380. package/dist/ui/overlay/data/tutorials/planning/arch.d.ts +7 -0
  381. package/dist/ui/overlay/data/tutorials/planning/arch.js +168 -0
  382. package/dist/ui/overlay/data/tutorials/planning/backlog.d.ts +7 -0
  383. package/dist/ui/overlay/data/tutorials/planning/backlog.js +103 -0
  384. package/dist/ui/overlay/data/tutorials/planning/build.d.ts +7 -0
  385. package/dist/ui/overlay/data/tutorials/planning/build.js +173 -0
  386. package/dist/ui/overlay/data/tutorials/planning/design.d.ts +7 -0
  387. package/dist/ui/overlay/data/tutorials/planning/design.js +205 -0
  388. package/dist/ui/overlay/data/tutorials/planning/docs.d.ts +7 -0
  389. package/dist/ui/overlay/data/tutorials/planning/docs.js +143 -0
  390. package/dist/ui/overlay/data/tutorials/planning/prd.d.ts +7 -0
  391. package/dist/ui/overlay/data/tutorials/planning/prd.js +173 -0
  392. package/dist/ui/overlay/data/tutorials/planning/scaffold.d.ts +7 -0
  393. package/dist/ui/overlay/data/tutorials/planning/scaffold.js +164 -0
  394. package/dist/ui/overlay/data/tutorials/planning/sketch.d.ts +7 -0
  395. package/dist/ui/overlay/data/tutorials/planning/sketch.js +58 -0
  396. package/dist/ui/overlay/data/tutorials/projects/anchors.d.ts +7 -0
  397. package/dist/ui/overlay/data/tutorials/projects/anchors.js +248 -0
  398. package/dist/ui/overlay/data/tutorials/projects/import-project.d.ts +7 -0
  399. package/dist/ui/overlay/data/tutorials/projects/import-project.js +172 -0
  400. package/dist/ui/overlay/data/tutorials/projects/managing-projects.d.ts +8 -0
  401. package/dist/ui/overlay/data/tutorials/projects/managing-projects.js +212 -0
  402. package/dist/ui/overlay/data/tutorials/projects/new-project.d.ts +7 -0
  403. package/dist/ui/overlay/data/tutorials/projects/new-project.js +251 -0
  404. package/dist/ui/overlay/data/tutorials/projects/session-management.d.ts +7 -0
  405. package/dist/ui/overlay/data/tutorials/projects/session-management.js +169 -0
  406. package/dist/ui/overlay/data/tutorials/teams/background-execution.d.ts +7 -0
  407. package/dist/ui/overlay/data/tutorials/teams/background-execution.js +171 -0
  408. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.d.ts +8 -0
  409. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.js +147 -0
  410. package/dist/ui/overlay/data/tutorials/teams/task-assignment.d.ts +7 -0
  411. package/dist/ui/overlay/data/tutorials/teams/task-assignment.js +204 -0
  412. package/dist/ui/overlay/data/tutorials/teams/team-overview.d.ts +7 -0
  413. package/dist/ui/overlay/data/tutorials/teams/team-overview.js +165 -0
  414. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.d.ts +7 -0
  415. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.js +172 -0
  416. package/dist/ui/overlay/impl/agents-overlay-v2.d.ts +45 -0
  417. package/dist/ui/overlay/impl/agents-overlay-v2.js +814 -0
  418. package/dist/ui/overlay/impl/anchors-overlay-v2.d.ts +47 -0
  419. package/dist/ui/overlay/impl/anchors-overlay-v2.js +749 -0
  420. package/dist/ui/overlay/impl/arch-type-overlay-v2.d.ts +37 -0
  421. package/dist/ui/overlay/impl/arch-type-overlay-v2.js +240 -0
  422. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.d.ts +43 -0
  423. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.js +232 -0
  424. package/dist/ui/overlay/impl/artifact-overlay-v2.d.ts +40 -0
  425. package/dist/ui/overlay/impl/artifact-overlay-v2.js +115 -0
  426. package/dist/ui/overlay/impl/ask-user-overlay-v2.d.ts +72 -0
  427. package/dist/ui/overlay/impl/ask-user-overlay-v2.js +581 -0
  428. package/dist/ui/overlay/impl/ask-user-simple-overlay-v2.d.ts +46 -0
  429. package/dist/ui/overlay/impl/ask-user-simple-overlay-v2.js +204 -0
  430. package/dist/ui/overlay/impl/background-overlay-v2.d.ts +40 -0
  431. package/dist/ui/overlay/impl/background-overlay-v2.js +147 -0
  432. package/dist/ui/overlay/impl/backlog-overlay-v2.d.ts +52 -0
  433. package/dist/ui/overlay/impl/backlog-overlay-v2.js +681 -0
  434. package/dist/ui/overlay/impl/changelog-overlay-v2.d.ts +44 -0
  435. package/dist/ui/overlay/impl/changelog-overlay-v2.js +165 -0
  436. package/dist/ui/overlay/impl/commands-overlay-v2.d.ts +33 -0
  437. package/dist/ui/overlay/impl/commands-overlay-v2.js +439 -0
  438. package/dist/ui/overlay/impl/config-overlay-v2.d.ts +111 -0
  439. package/dist/ui/overlay/impl/config-overlay-v2.js +718 -0
  440. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.d.ts +83 -0
  441. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.js +711 -0
  442. package/dist/ui/overlay/impl/dashboard-overlay-v2.d.ts +57 -0
  443. package/dist/ui/overlay/impl/dashboard-overlay-v2.js +382 -0
  444. package/dist/ui/overlay/impl/delegations-overlay-v2.d.ts +28 -0
  445. package/dist/ui/overlay/impl/delegations-overlay-v2.js +279 -0
  446. package/dist/ui/overlay/impl/docs-overlay-v2.d.ts +45 -0
  447. package/dist/ui/overlay/impl/docs-overlay-v2.js +117 -0
  448. package/dist/ui/overlay/impl/document-detail-overlay-v2.d.ts +84 -0
  449. package/dist/ui/overlay/impl/document-detail-overlay-v2.js +1112 -0
  450. package/dist/ui/overlay/impl/filter-overlay-v2.d.ts +41 -0
  451. package/dist/ui/overlay/impl/filter-overlay-v2.js +110 -0
  452. package/dist/ui/overlay/impl/games-overlay-v2.d.ts +31 -0
  453. package/dist/ui/overlay/impl/games-overlay-v2.js +135 -0
  454. package/dist/ui/overlay/impl/guardrail-overlay-v2.d.ts +43 -0
  455. package/dist/ui/overlay/impl/guardrail-overlay-v2.js +114 -0
  456. package/dist/ui/overlay/impl/help-overlay-v2.d.ts +57 -0
  457. package/dist/ui/overlay/impl/help-overlay-v2.js +287 -0
  458. package/dist/ui/overlay/impl/init-setup-overlay-v2.d.ts +25 -0
  459. package/dist/ui/overlay/impl/init-setup-overlay-v2.js +97 -0
  460. package/dist/ui/overlay/impl/iteration-limit-overlay-v2.d.ts +35 -0
  461. package/dist/ui/overlay/impl/iteration-limit-overlay-v2.js +105 -0
  462. package/dist/ui/overlay/impl/keys-overlay-v2.d.ts +41 -0
  463. package/dist/ui/overlay/impl/keys-overlay-v2.js +248 -0
  464. package/dist/ui/overlay/impl/login-overlay-v2.d.ts +49 -0
  465. package/dist/ui/overlay/impl/login-overlay-v2.js +277 -0
  466. package/dist/ui/overlay/impl/mascot-overlay-v2.d.ts +41 -0
  467. package/dist/ui/overlay/impl/mascot-overlay-v2.js +138 -0
  468. package/dist/ui/overlay/impl/mcp-overlay-v2.d.ts +63 -0
  469. package/dist/ui/overlay/impl/mcp-overlay-v2.js +907 -0
  470. package/dist/ui/overlay/impl/model-overlay-v2.d.ts +93 -0
  471. package/dist/ui/overlay/impl/model-overlay-v2.js +1143 -0
  472. package/dist/ui/overlay/impl/model-warning-overlay-v2.d.ts +46 -0
  473. package/dist/ui/overlay/impl/model-warning-overlay-v2.js +132 -0
  474. package/dist/ui/overlay/impl/new-overlay-v2.d.ts +108 -0
  475. package/dist/ui/overlay/impl/new-overlay-v2.js +1243 -0
  476. package/dist/ui/overlay/impl/notifications-overlay-v2.d.ts +20 -0
  477. package/dist/ui/overlay/impl/notifications-overlay-v2.js +116 -0
  478. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.d.ts +76 -0
  479. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.js +728 -0
  480. package/dist/ui/overlay/impl/pending-overlay-v2.d.ts +51 -0
  481. package/dist/ui/overlay/impl/pending-overlay-v2.js +445 -0
  482. package/dist/ui/overlay/impl/permission-overlay-v2.d.ts +36 -0
  483. package/dist/ui/overlay/impl/permission-overlay-v2.js +380 -0
  484. package/dist/ui/overlay/impl/permissions-overlay-v2.d.ts +85 -0
  485. package/dist/ui/overlay/impl/permissions-overlay-v2.js +820 -0
  486. package/dist/ui/overlay/impl/plan-approval-overlay-v2.d.ts +35 -0
  487. package/dist/ui/overlay/impl/plan-approval-overlay-v2.js +181 -0
  488. package/dist/ui/overlay/impl/project-edit-overlay-v2.d.ts +36 -0
  489. package/dist/ui/overlay/impl/project-edit-overlay-v2.js +195 -0
  490. package/dist/ui/overlay/impl/projects-overlay-v2.d.ts +37 -0
  491. package/dist/ui/overlay/impl/projects-overlay-v2.js +733 -0
  492. package/dist/ui/overlay/impl/reset-overlay-v2.d.ts +39 -0
  493. package/dist/ui/overlay/impl/reset-overlay-v2.js +107 -0
  494. package/dist/ui/overlay/impl/resume-overlay-v2.d.ts +60 -0
  495. package/dist/ui/overlay/impl/resume-overlay-v2.js +414 -0
  496. package/dist/ui/overlay/impl/session-mode-overlay-v2.d.ts +43 -0
  497. package/dist/ui/overlay/impl/session-mode-overlay-v2.js +124 -0
  498. package/dist/ui/overlay/impl/tasks-overlay-v2.d.ts +28 -0
  499. package/dist/ui/overlay/impl/tasks-overlay-v2.js +283 -0
  500. package/dist/ui/overlay/impl/team-overlay-v2.d.ts +86 -0
  501. package/dist/ui/overlay/impl/team-overlay-v2.js +692 -0
  502. package/dist/ui/overlay/impl/terminals-overlay-v2.d.ts +26 -0
  503. package/dist/ui/overlay/impl/terminals-overlay-v2.js +217 -0
  504. package/dist/ui/overlay/impl/theme-overlay-v2.d.ts +42 -0
  505. package/dist/ui/overlay/impl/theme-overlay-v2.js +135 -0
  506. package/dist/ui/overlay/impl/tools-overlay-v2.d.ts +47 -0
  507. package/dist/ui/overlay/impl/tools-overlay-v2.js +214 -0
  508. package/dist/ui/overlay/impl/tutorial-overlay-v2.d.ts +45 -0
  509. package/dist/ui/overlay/impl/tutorial-overlay-v2.js +212 -0
  510. package/dist/ui/overlay/impl/workflow-overlay-v2.d.ts +80 -0
  511. package/dist/ui/overlay/impl/workflow-overlay-v2.js +641 -0
  512. package/dist/ui/overlay/index.d.ts +52 -0
  513. package/dist/ui/overlay/index.js +54 -0
  514. package/dist/ui/overlay/key-utils.d.ts +6 -0
  515. package/dist/ui/overlay/key-utils.js +6 -0
  516. package/dist/ui/overlay/types.d.ts +140 -0
  517. package/dist/ui/overlay/types.js +22 -0
  518. package/dist/ui/overlay-manager.d.ts +43 -0
  519. package/dist/ui/overlay-manager.js +238 -0
  520. package/dist/ui/overlays.d.ts +0 -4
  521. package/dist/ui/overlays.js +4 -460
  522. package/dist/ui/permission-overlay.d.ts +1 -1
  523. package/dist/ui/permission-overlay.js +189 -300
  524. package/dist/ui/providers/types.d.ts +178 -0
  525. package/dist/ui/providers/types.js +9 -0
  526. package/dist/ui/render-modes.d.ts +36 -0
  527. package/dist/ui/render-modes.js +44 -0
  528. package/dist/ui/startup-menu.d.ts +36 -0
  529. package/dist/ui/startup-menu.js +236 -0
  530. package/dist/ui/status-bar-controller.d.ts +33 -0
  531. package/dist/ui/status-bar-controller.js +99 -0
  532. package/dist/ui/subagent-renderer.d.ts +117 -0
  533. package/dist/ui/subagent-renderer.js +318 -0
  534. package/dist/ui/terminal-autocomplete-utils.d.ts +23 -0
  535. package/dist/ui/terminal-autocomplete-utils.js +83 -0
  536. package/dist/ui/terminal-codes.d.ts +94 -0
  537. package/dist/ui/terminal-codes.js +124 -0
  538. package/dist/ui/terminal-line-builders.d.ts +17 -0
  539. package/dist/ui/terminal-line-builders.js +42 -0
  540. package/dist/ui/terminal-render-item.d.ts +16 -0
  541. package/dist/ui/terminal-render-item.js +267 -0
  542. package/dist/ui/terminal-renderer.d.ts +220 -0
  543. package/dist/ui/terminal-renderer.js +750 -0
  544. package/dist/ui/terminal-types.d.ts +179 -0
  545. package/dist/ui/terminal-types.js +34 -0
  546. package/dist/ui/terminal-ui.d.ts +331 -0
  547. package/dist/ui/terminal-ui.js +819 -0
  548. package/dist/ui/terminal.d.ts +20 -0
  549. package/dist/ui/terminal.js +72 -0
  550. package/dist/ui/todo-zone.d.ts +19 -1
  551. package/dist/ui/todo-zone.js +124 -38
  552. package/dist/ui/tool-formatters.d.ts +16 -0
  553. package/dist/ui/tool-formatters.js +1027 -0
  554. package/dist/ui/turn-metrics.d.ts +56 -0
  555. package/dist/ui/turn-metrics.js +75 -0
  556. package/dist/ui/types.d.ts +28 -0
  557. package/dist/ui/types.js +1 -0
  558. package/dist/ui/vscode-diff-ipc.d.ts +102 -0
  559. package/dist/ui/vscode-diff-ipc.js +385 -0
  560. package/dist/utils/credentials.d.ts +24 -5
  561. package/dist/utils/credentials.js +123 -9
  562. package/dist/utils/debug-log.d.ts +28 -0
  563. package/dist/utils/debug-log.js +57 -0
  564. package/dist/utils/format-tokens.d.ts +13 -0
  565. package/dist/utils/format-tokens.js +18 -0
  566. package/dist/utils/git-config.d.ts +26 -0
  567. package/dist/utils/git-config.js +54 -0
  568. package/dist/utils/message-utils.d.ts +61 -0
  569. package/dist/utils/message-utils.js +72 -0
  570. package/dist/utils/model-tiers.d.ts +8 -1
  571. package/dist/utils/model-tiers.js +39 -17
  572. package/dist/utils/open-browser.d.ts +5 -0
  573. package/dist/utils/open-browser.js +32 -0
  574. package/dist/utils/path-safety.d.ts +56 -0
  575. package/dist/utils/path-safety.js +240 -0
  576. package/dist/utils/project-detection.d.ts +58 -0
  577. package/dist/utils/project-detection.js +424 -0
  578. package/dist/utils/project-memory.js +2 -1
  579. package/dist/utils/project-status.d.ts +2 -2
  580. package/dist/utils/startup-perf.d.ts +18 -0
  581. package/dist/utils/startup-perf.js +60 -0
  582. package/dist/utils/token-tracker.d.ts +62 -0
  583. package/dist/utils/token-tracker.js +150 -0
  584. package/dist/utils/token-types.d.ts +23 -0
  585. package/dist/utils/token-types.js +18 -0
  586. package/dist/utils/types/config-types.d.ts +32 -0
  587. package/dist/utils/types/config-types.js +8 -0
  588. package/dist/utils/update-checker.d.ts +28 -0
  589. package/dist/utils/update-checker.js +106 -0
  590. package/dist/utils/version.d.ts +7 -0
  591. package/dist/utils/version.js +10 -0
  592. package/dist/utils/vscode-detect.d.ts +39 -0
  593. package/dist/utils/vscode-detect.js +137 -0
  594. package/dist/workflow/guided-mode-injector.d.ts +42 -0
  595. package/dist/workflow/guided-mode-injector.js +191 -0
  596. package/dist/workflow/index.d.ts +8 -0
  597. package/dist/workflow/index.js +8 -0
  598. package/dist/workflow/step-criteria.d.ts +62 -0
  599. package/dist/workflow/step-criteria.js +150 -0
  600. package/dist/workflow/step-tracker.d.ts +92 -0
  601. package/dist/workflow/step-tracker.js +141 -0
  602. package/package.json +32 -12
  603. package/dist/index.old.d.ts +0 -7
  604. package/dist/index.old.js +0 -1014
  605. package/dist/repl.d.ts +0 -121
  606. package/dist/repl.js +0 -1878
  607. package/dist/templates/claude-md.d.ts +0 -7
  608. package/dist/templates/claude-md.js +0 -189
  609. package/dist/test-autocomplete.d.ts +0 -7
  610. package/dist/test-autocomplete.js +0 -85
  611. package/dist/test-tabbed-menu.d.ts +0 -7
  612. package/dist/test-tabbed-menu.js +0 -25
  613. package/dist/tool-selector.d.ts +0 -71
  614. package/dist/tool-selector.js +0 -184
  615. package/dist/ui/agents-overlay.d.ts +0 -12
  616. package/dist/ui/agents-overlay.js +0 -501
  617. package/dist/ui/arch-type-overlay.d.ts +0 -20
  618. package/dist/ui/arch-type-overlay.js +0 -229
  619. package/dist/ui/backlog-overlay.d.ts +0 -17
  620. package/dist/ui/backlog-overlay.js +0 -786
  621. package/dist/ui/commands-overlay.d.ts +0 -11
  622. package/dist/ui/commands-overlay.js +0 -410
  623. package/dist/ui/config-overlay.d.ts +0 -34
  624. package/dist/ui/config-overlay.js +0 -977
  625. package/dist/ui/init-overlay.d.ts +0 -24
  626. package/dist/ui/init-overlay.js +0 -525
  627. package/dist/ui/input-prompt-v2.d.ts +0 -179
  628. package/dist/ui/input-prompt-v2.js +0 -991
  629. package/dist/ui/model-warning-overlay.d.ts +0 -30
  630. package/dist/ui/model-warning-overlay.js +0 -171
  631. package/dist/ui/tools-overlay.d.ts +0 -26
  632. package/dist/ui/tools-overlay.js +0 -278
  633. package/dist/ui/tutorial-overlay.d.ts +0 -10
  634. package/dist/ui/tutorial-overlay.js +0 -936
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Base class for terminal games
3
+ *
4
+ * Handles alternate screen, raw input, game loop, and clean exit.
5
+ */
6
+ import { EventEmitter } from 'events';
7
+ export interface GameConfig {
8
+ title: string;
9
+ minWidth: number;
10
+ minHeight: number;
11
+ targetFps: number;
12
+ }
13
+ export declare abstract class GameBase extends EventEmitter {
14
+ protected config: GameConfig;
15
+ protected running: boolean;
16
+ protected paused: boolean;
17
+ protected gameLoopInterval: ReturnType<typeof setInterval> | null;
18
+ protected lastFrameTime: number;
19
+ protected stdin: NodeJS.ReadStream;
20
+ protected stdout: NodeJS.WriteStream;
21
+ constructor(config: GameConfig);
22
+ /**
23
+ * Check if terminal is large enough
24
+ */
25
+ protected checkTerminalSize(): {
26
+ ok: boolean;
27
+ message?: string;
28
+ };
29
+ /**
30
+ * Enter alternate screen buffer
31
+ */
32
+ protected enterAlternateScreen(): void;
33
+ /**
34
+ * Exit alternate screen buffer
35
+ */
36
+ protected exitAlternateScreen(): void;
37
+ /**
38
+ * Set up raw input mode
39
+ */
40
+ protected setupInput(): void;
41
+ /**
42
+ * Restore normal input mode
43
+ */
44
+ protected restoreInput(): void;
45
+ /**
46
+ * Handle raw input data
47
+ */
48
+ private handleInput;
49
+ /**
50
+ * Start the game loop
51
+ */
52
+ protected startGameLoop(): void;
53
+ /**
54
+ * Stop the game loop
55
+ */
56
+ protected stopGameLoop(): void;
57
+ /**
58
+ * Move cursor to position
59
+ */
60
+ protected moveCursor(x: number, y: number): void;
61
+ /**
62
+ * Write text at position
63
+ */
64
+ protected writeAt(x: number, y: number, text: string): void;
65
+ /**
66
+ * Clear screen
67
+ */
68
+ protected clearScreen(): void;
69
+ /**
70
+ * Start the game
71
+ */
72
+ start(): Promise<void>;
73
+ /**
74
+ * Quit the game
75
+ */
76
+ quit(): void;
77
+ protected abstract onStart(): void;
78
+ protected abstract onQuit(): void;
79
+ protected abstract onPause(): void;
80
+ protected abstract onResume(): void;
81
+ protected abstract onKeyPress(key: string, raw: Buffer): void;
82
+ protected abstract update(delta: number): void;
83
+ protected abstract render(): void;
84
+ }
@@ -0,0 +1,204 @@
1
+ /**
2
+ * Base class for terminal games
3
+ *
4
+ * Handles alternate screen, raw input, game loop, and clean exit.
5
+ */
6
+ import { EventEmitter } from 'events';
7
+ export class GameBase extends EventEmitter {
8
+ config;
9
+ running = false;
10
+ paused = false;
11
+ gameLoopInterval = null;
12
+ lastFrameTime = 0;
13
+ stdin;
14
+ stdout;
15
+ constructor(config) {
16
+ super();
17
+ this.config = config;
18
+ this.stdin = process.stdin;
19
+ this.stdout = process.stdout;
20
+ }
21
+ /**
22
+ * Check if terminal is large enough
23
+ */
24
+ checkTerminalSize() {
25
+ const cols = this.stdout.columns || 80;
26
+ const rows = this.stdout.rows || 24;
27
+ if (cols < this.config.minWidth || rows < this.config.minHeight) {
28
+ return {
29
+ ok: false,
30
+ message: `Terminal too small. Need ${String(this.config.minWidth)}x${String(this.config.minHeight)}, got ${String(cols)}x${String(rows)}`,
31
+ };
32
+ }
33
+ return { ok: true };
34
+ }
35
+ /**
36
+ * Enter alternate screen buffer
37
+ */
38
+ enterAlternateScreen() {
39
+ // Save cursor position and switch to alternate buffer
40
+ this.stdout.write('\x1b[?1049h');
41
+ // Hide cursor
42
+ this.stdout.write('\x1b[?25l');
43
+ // Clear screen
44
+ this.stdout.write('\x1b[2J');
45
+ // Move to top-left
46
+ this.stdout.write('\x1b[H');
47
+ }
48
+ /**
49
+ * Exit alternate screen buffer
50
+ */
51
+ exitAlternateScreen() {
52
+ // Clear the alternate screen first to prevent flash
53
+ this.stdout.write('\x1b[2J\x1b[H');
54
+ // Show cursor
55
+ this.stdout.write('\x1b[?25h');
56
+ // Restore main buffer
57
+ this.stdout.write('\x1b[?1049l');
58
+ }
59
+ /**
60
+ * Set up raw input mode
61
+ */
62
+ setupInput() {
63
+ if (this.stdin.isTTY) {
64
+ this.stdin.setRawMode(true);
65
+ }
66
+ this.stdin.resume();
67
+ this.stdin.on('data', this.handleInput.bind(this));
68
+ }
69
+ /**
70
+ * Restore normal input mode
71
+ */
72
+ restoreInput() {
73
+ this.stdin.removeAllListeners('data');
74
+ // Pause to prevent any buffered input from leaking
75
+ this.stdin.pause();
76
+ if (this.stdin.isTTY) {
77
+ this.stdin.setRawMode(false);
78
+ }
79
+ }
80
+ /**
81
+ * Handle raw input data
82
+ */
83
+ handleInput(data) {
84
+ const key = data.toString();
85
+ // Check for quit keys first
86
+ // q or Ctrl+C always quit
87
+ if (key === 'q' || key === '\x03') {
88
+ this.quit();
89
+ return;
90
+ }
91
+ // Standalone Escape quits (but not escape sequences like arrow keys \x1b[A)
92
+ // Escape is a single byte (0x1b), arrow keys are 3+ bytes
93
+ if (data.length === 1 && data[0] === 0x1b) {
94
+ this.quit();
95
+ return;
96
+ }
97
+ // Pause/unpause
98
+ if (key === 'p') {
99
+ this.paused = !this.paused;
100
+ if (this.paused) {
101
+ this.onPause();
102
+ }
103
+ else {
104
+ this.onResume();
105
+ }
106
+ return;
107
+ }
108
+ // Pass to game-specific handler
109
+ if (!this.paused) {
110
+ this.onKeyPress(key, data);
111
+ }
112
+ }
113
+ /**
114
+ * Start the game loop
115
+ */
116
+ startGameLoop() {
117
+ const frameInterval = 1000 / this.config.targetFps;
118
+ this.lastFrameTime = Date.now();
119
+ this.gameLoopInterval = setInterval(() => {
120
+ if (!this.paused && this.running) {
121
+ const now = Date.now();
122
+ const delta = now - this.lastFrameTime;
123
+ this.lastFrameTime = now;
124
+ this.update(delta);
125
+ this.render();
126
+ }
127
+ }, frameInterval);
128
+ }
129
+ /**
130
+ * Stop the game loop
131
+ */
132
+ stopGameLoop() {
133
+ if (this.gameLoopInterval) {
134
+ clearInterval(this.gameLoopInterval);
135
+ this.gameLoopInterval = null;
136
+ }
137
+ }
138
+ /**
139
+ * Move cursor to position
140
+ */
141
+ moveCursor(x, y) {
142
+ this.stdout.write(`\x1b[${String(y)};${String(x)}H`);
143
+ }
144
+ /**
145
+ * Write text at position
146
+ */
147
+ writeAt(x, y, text) {
148
+ this.moveCursor(x, y);
149
+ this.stdout.write(text);
150
+ }
151
+ /**
152
+ * Clear screen
153
+ */
154
+ clearScreen() {
155
+ this.stdout.write('\x1b[2J\x1b[H');
156
+ }
157
+ /**
158
+ * Start the game
159
+ */
160
+ async start() {
161
+ // Check terminal size
162
+ const sizeCheck = this.checkTerminalSize();
163
+ if (!sizeCheck.ok) {
164
+ console.log(sizeCheck.message);
165
+ return;
166
+ }
167
+ // Set up signal handlers for clean exit
168
+ const cleanup = () => {
169
+ this.quit();
170
+ };
171
+ process.on('SIGINT', cleanup);
172
+ process.on('SIGTERM', cleanup);
173
+ try {
174
+ this.running = true;
175
+ this.enterAlternateScreen();
176
+ this.setupInput();
177
+ this.onStart();
178
+ this.startGameLoop();
179
+ // Wait for game to end
180
+ await new Promise((resolve) => {
181
+ this.once('quit', resolve);
182
+ });
183
+ }
184
+ finally {
185
+ process.removeListener('SIGINT', cleanup);
186
+ process.removeListener('SIGTERM', cleanup);
187
+ this.stopGameLoop();
188
+ this.restoreInput();
189
+ this.exitAlternateScreen();
190
+ // Small delay to ensure terminal state is fully restored
191
+ await new Promise((resolve) => setTimeout(resolve, 50));
192
+ }
193
+ }
194
+ /**
195
+ * Quit the game
196
+ */
197
+ quit() {
198
+ if (this.running) {
199
+ this.running = false;
200
+ this.onQuit();
201
+ this.emit('quit');
202
+ }
203
+ }
204
+ }
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Games Module
3
+ *
4
+ * Entry point for the terminal games easter egg.
5
+ */
6
+ export { playTetris, TetrisGame } from './tetris/index.js';
7
+ export { getCoins, hasCoins, spendCoins, earnCoins, checkDailyBonus, formatCoinsDisplay, getCoinsDisplayShort, COIN_COST_START_GAME, COIN_COST_CONTINUE } from './coins.js';
8
+ export { getHighScores, isLeaderboardScore, isNewHighScore, getBestScore, formatScore, formatHighScoreEntry } from './scores.js';
9
+ export interface GameInfo {
10
+ id: string;
11
+ name: string;
12
+ description: string;
13
+ available: boolean;
14
+ play: () => Promise<void>;
15
+ }
16
+ export declare function getAvailableGames(): GameInfo[];
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Games Module
3
+ *
4
+ * Entry point for the terminal games easter egg.
5
+ */
6
+ export { playTetris, TetrisGame } from './tetris/index.js';
7
+ export { getCoins, hasCoins, spendCoins, earnCoins, checkDailyBonus, formatCoinsDisplay, getCoinsDisplayShort, COIN_COST_START_GAME, COIN_COST_CONTINUE } from './coins.js';
8
+ export { getHighScores, isLeaderboardScore, isNewHighScore, getBestScore, formatScore, formatHighScoreEntry } from './scores.js';
9
+ export function getAvailableGames() {
10
+ return [
11
+ {
12
+ id: 'tetris',
13
+ name: 'TETRIS',
14
+ description: 'Classic block-stacking puzzle',
15
+ available: true,
16
+ play: async () => {
17
+ const { playTetris } = await import('./tetris/index.js');
18
+ await playTetris();
19
+ },
20
+ },
21
+ {
22
+ id: 'snake',
23
+ name: 'SNAKE',
24
+ description: 'Eat food, grow longer',
25
+ available: false,
26
+ play: async () => {
27
+ // Coming soon
28
+ },
29
+ },
30
+ {
31
+ id: 'invaders',
32
+ name: 'SPACE INVADERS',
33
+ description: 'Defend Earth from aliens',
34
+ available: false,
35
+ play: async () => {
36
+ // Coming soon
37
+ },
38
+ },
39
+ {
40
+ id: 'breakout',
41
+ name: 'BREAKOUT',
42
+ description: 'Break all the bricks',
43
+ available: false,
44
+ play: async () => {
45
+ // Coming soon
46
+ },
47
+ },
48
+ ];
49
+ }
@@ -0,0 +1,69 @@
1
+ /**
2
+ * High Scores System
3
+ *
4
+ * Manages high scores for all games.
5
+ */
6
+ export interface HighScore {
7
+ name: string;
8
+ score: number;
9
+ level: number;
10
+ date: string;
11
+ }
12
+ export interface ScoresData {
13
+ [gameId: string]: HighScore[];
14
+ }
15
+ /**
16
+ * Get all scores data
17
+ */
18
+ export declare function getScoresData(): ScoresData;
19
+ /**
20
+ * Get high scores for a specific game
21
+ */
22
+ export declare function getHighScores(gameId: string): HighScore[];
23
+ /**
24
+ * Check if a score qualifies for the leaderboard (top 10)
25
+ */
26
+ export declare function isLeaderboardScore(gameId: string, score: number): boolean;
27
+ /**
28
+ * Check if a score beats the current high score (#1)
29
+ * This is the "NEW HIGH SCORE!" condition for coin award
30
+ */
31
+ export declare function isNewHighScore(gameId: string, score: number): boolean;
32
+ /**
33
+ * Check if a score qualifies for the leaderboard
34
+ * @deprecated Use isLeaderboardScore for top-10 check, isNewHighScore for #1 check
35
+ */
36
+ export declare function isHighScore(gameId: string, score: number): boolean;
37
+ /**
38
+ * Get the rank a score would achieve (1-based, or null if not a high score)
39
+ */
40
+ export declare function getScoreRank(gameId: string, score: number): number | null;
41
+ /**
42
+ * Add a new high score
43
+ * Returns the rank achieved (1-based) or null if didn't make the leaderboard
44
+ */
45
+ export declare function addHighScore(gameId: string, name: string, score: number, level: number): number | null;
46
+ /**
47
+ * Get the player's best score for a game
48
+ */
49
+ export declare function getBestScore(gameId: string): HighScore | null;
50
+ /**
51
+ * Clear high scores for a game (for testing)
52
+ */
53
+ export declare function clearHighScores(gameId: string): void;
54
+ /**
55
+ * Clear all high scores (for testing)
56
+ */
57
+ export declare function clearAllHighScores(): void;
58
+ /**
59
+ * Clear cache (for testing)
60
+ */
61
+ export declare function clearScoresCache(): void;
62
+ /**
63
+ * Format a score number with commas
64
+ */
65
+ export declare function formatScore(score: number): string;
66
+ /**
67
+ * Format a high score entry for display
68
+ */
69
+ export declare function formatHighScoreEntry(rank: number, entry: HighScore, maxScoreWidth?: number): string;
@@ -0,0 +1,191 @@
1
+ /**
2
+ * High Scores System
3
+ *
4
+ * Manages high scores for all games.
5
+ */
6
+ import * as fs from 'fs';
7
+ import * as path from 'path';
8
+ import * as os from 'os';
9
+ // =============================================================================
10
+ // Constants
11
+ // =============================================================================
12
+ const CONFIG_DIR = path.join(os.homedir(), '.compilr-dev');
13
+ const SCORES_FILE = path.join(CONFIG_DIR, 'highscores.json');
14
+ const MAX_SCORES_PER_GAME = 10;
15
+ // =============================================================================
16
+ // In-memory cache
17
+ // =============================================================================
18
+ let scoresCache = null;
19
+ // =============================================================================
20
+ // Persistence
21
+ // =============================================================================
22
+ function loadFromDisk() {
23
+ try {
24
+ if (fs.existsSync(SCORES_FILE)) {
25
+ const data = fs.readFileSync(SCORES_FILE, 'utf-8');
26
+ return JSON.parse(data);
27
+ }
28
+ }
29
+ catch {
30
+ // Ignore errors
31
+ }
32
+ return {};
33
+ }
34
+ function saveToDisk(data) {
35
+ try {
36
+ fs.mkdirSync(CONFIG_DIR, { recursive: true });
37
+ fs.writeFileSync(SCORES_FILE, JSON.stringify(data, null, 2), 'utf-8');
38
+ }
39
+ catch (error) {
40
+ console.error('Failed to save high scores:', error);
41
+ }
42
+ }
43
+ // =============================================================================
44
+ // Public API
45
+ // =============================================================================
46
+ /**
47
+ * Get all scores data
48
+ */
49
+ export function getScoresData() {
50
+ if (scoresCache) {
51
+ return scoresCache;
52
+ }
53
+ scoresCache = loadFromDisk();
54
+ return scoresCache;
55
+ }
56
+ /**
57
+ * Get high scores for a specific game
58
+ */
59
+ export function getHighScores(gameId) {
60
+ const data = getScoresData();
61
+ return data[gameId] ?? [];
62
+ }
63
+ /**
64
+ * Check if a score qualifies for the leaderboard (top 10)
65
+ */
66
+ export function isLeaderboardScore(gameId, score) {
67
+ const scores = getHighScores(gameId);
68
+ if (scores.length < MAX_SCORES_PER_GAME) {
69
+ return true;
70
+ }
71
+ const lowestScore = scores[scores.length - 1].score;
72
+ return score > lowestScore;
73
+ }
74
+ /**
75
+ * Check if a score beats the current high score (#1)
76
+ * This is the "NEW HIGH SCORE!" condition for coin award
77
+ */
78
+ export function isNewHighScore(gameId, score) {
79
+ const scores = getHighScores(gameId);
80
+ if (scores.length === 0) {
81
+ return true; // First score is always a high score
82
+ }
83
+ return score > scores[0].score; // Must beat #1
84
+ }
85
+ /**
86
+ * Check if a score qualifies for the leaderboard
87
+ * @deprecated Use isLeaderboardScore for top-10 check, isNewHighScore for #1 check
88
+ */
89
+ export function isHighScore(gameId, score) {
90
+ return isLeaderboardScore(gameId, score);
91
+ }
92
+ /**
93
+ * Get the rank a score would achieve (1-based, or null if not a high score)
94
+ */
95
+ export function getScoreRank(gameId, score) {
96
+ const scores = getHighScores(gameId);
97
+ // Find where this score would be inserted
98
+ let rank = 1;
99
+ for (const existing of scores) {
100
+ if (score > existing.score) {
101
+ break;
102
+ }
103
+ rank++;
104
+ }
105
+ // Check if it makes the leaderboard
106
+ if (rank > MAX_SCORES_PER_GAME) {
107
+ return null;
108
+ }
109
+ return rank;
110
+ }
111
+ /**
112
+ * Add a new high score
113
+ * Returns the rank achieved (1-based) or null if didn't make the leaderboard
114
+ */
115
+ export function addHighScore(gameId, name, score, level) {
116
+ const data = getScoresData();
117
+ const partialData = data;
118
+ const scores = partialData[gameId] ?? [];
119
+ const newScore = {
120
+ name: name.toUpperCase().slice(0, 3).padEnd(3, ' '),
121
+ score,
122
+ level,
123
+ date: new Date().toISOString().split('T')[0],
124
+ };
125
+ // Insert in sorted order (descending by score)
126
+ let insertIndex = 0;
127
+ for (let i = 0; i < scores.length; i++) {
128
+ if (score > scores[i].score) {
129
+ break;
130
+ }
131
+ insertIndex++;
132
+ }
133
+ scores.splice(insertIndex, 0, newScore);
134
+ // Keep only top scores
135
+ if (scores.length > MAX_SCORES_PER_GAME) {
136
+ scores.length = MAX_SCORES_PER_GAME;
137
+ }
138
+ data[gameId] = scores;
139
+ scoresCache = data;
140
+ saveToDisk(data);
141
+ // Return rank if made the leaderboard
142
+ if (insertIndex < MAX_SCORES_PER_GAME) {
143
+ return insertIndex + 1;
144
+ }
145
+ return null;
146
+ }
147
+ /**
148
+ * Get the player's best score for a game
149
+ */
150
+ export function getBestScore(gameId) {
151
+ const scores = getHighScores(gameId);
152
+ return scores.length > 0 ? scores[0] : null;
153
+ }
154
+ /**
155
+ * Clear high scores for a game (for testing)
156
+ */
157
+ export function clearHighScores(gameId) {
158
+ const data = getScoresData();
159
+ // Create a new object without the specified gameId
160
+ const { [gameId]: _removed, ...rest } = data;
161
+ scoresCache = rest;
162
+ saveToDisk(rest);
163
+ }
164
+ /**
165
+ * Clear all high scores (for testing)
166
+ */
167
+ export function clearAllHighScores() {
168
+ scoresCache = {};
169
+ saveToDisk({});
170
+ }
171
+ /**
172
+ * Clear cache (for testing)
173
+ */
174
+ export function clearScoresCache() {
175
+ scoresCache = null;
176
+ }
177
+ /**
178
+ * Format a score number with commas
179
+ */
180
+ export function formatScore(score) {
181
+ return score.toLocaleString();
182
+ }
183
+ /**
184
+ * Format a high score entry for display
185
+ */
186
+ export function formatHighScoreEntry(rank, entry, maxScoreWidth = 10) {
187
+ const rankStr = String(rank).padStart(2, ' ');
188
+ const scoreStr = formatScore(entry.score).padStart(maxScoreWidth, '.');
189
+ const levelStr = `Lv.${String(entry.level).padStart(2, ' ')}`;
190
+ return `${rankStr}. ${entry.name} ${scoreStr} ${levelStr} ${entry.date}`;
191
+ }
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Tetris Board
3
+ *
4
+ * Game board logic - collision detection, line clearing, etc.
5
+ */
6
+ import type { Piece } from './pieces.js';
7
+ export declare const BOARD_WIDTH = 10;
8
+ export declare const BOARD_HEIGHT = 20;
9
+ export declare const HIDDEN_ROWS = 2;
10
+ export interface Position {
11
+ x: number;
12
+ y: number;
13
+ }
14
+ export type Board = number[][];
15
+ /**
16
+ * Create an empty board
17
+ */
18
+ export declare function createBoard(): Board;
19
+ /**
20
+ * Check if a position is within bounds
21
+ */
22
+ export declare function isInBounds(x: number, y: number): boolean;
23
+ /**
24
+ * Check if a piece can be placed at a position
25
+ */
26
+ export declare function canPlace(board: Board, piece: Piece, position: Position): boolean;
27
+ /**
28
+ * Place a piece on the board (mutates board)
29
+ */
30
+ export declare function placePiece(board: Board, piece: Piece, position: Position): void;
31
+ /**
32
+ * Check for and clear completed lines
33
+ * Returns the number of lines cleared
34
+ */
35
+ export declare function clearLines(board: Board): number;
36
+ /**
37
+ * Get the spawn position for a new piece
38
+ */
39
+ export declare function getSpawnPosition(piece: Piece): Position;
40
+ /**
41
+ * Get the ghost piece position (where piece would land)
42
+ */
43
+ export declare function getGhostPosition(board: Board, piece: Piece, position: Position): Position;
44
+ /**
45
+ * Check if the game is over (piece can't spawn)
46
+ */
47
+ export declare function isGameOver(board: Board, piece: Piece): boolean;
48
+ /**
49
+ * Calculate drop distance for hard drop scoring
50
+ */
51
+ export declare function getDropDistance(board: Board, piece: Piece, position: Position): number;
52
+ /**
53
+ * Clone a board (for preview/undo)
54
+ */
55
+ export declare function cloneBoard(board: Board): Board;
56
+ /**
57
+ * Get the board with current piece overlaid (for rendering)
58
+ */
59
+ export declare function getBoardWithPiece(board: Board, piece: Piece | null, position: Position | null, showGhost?: boolean): Board;