@compilr-dev/cli 0.5.0 → 0.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (587) hide show
  1. package/LICENSE +108 -0
  2. package/README.md +237 -69
  3. package/dist/.tsbuildinfo.app +1 -0
  4. package/dist/.tsbuildinfo.data +1 -0
  5. package/dist/.tsbuildinfo.domain +1 -0
  6. package/dist/.tsbuildinfo.foundation +1 -0
  7. package/dist/agent.d.ts +61 -4
  8. package/dist/agent.js +241 -245
  9. package/dist/anchors/index.d.ts +1 -1
  10. package/dist/anchors/index.js +1 -1
  11. package/dist/anchors/project-anchors.d.ts +2 -2
  12. package/dist/anchors/project-anchors.js +1 -1
  13. package/dist/auth/api-client.d.ts +124 -0
  14. package/dist/auth/api-client.js +261 -0
  15. package/dist/auth/index.d.ts +172 -0
  16. package/dist/auth/index.js +545 -0
  17. package/dist/auth/storage.d.ts +52 -0
  18. package/dist/auth/storage.js +118 -0
  19. package/dist/changelog/index.d.ts +16 -0
  20. package/dist/changelog/index.js +24 -0
  21. package/dist/changelog/releases.d.ts +17 -0
  22. package/dist/changelog/releases.js +63 -0
  23. package/dist/commands-v2/handlers/auth.d.ts +10 -0
  24. package/dist/commands-v2/handlers/auth.js +118 -0
  25. package/dist/commands-v2/handlers/background.d.ts +14 -0
  26. package/dist/commands-v2/handlers/background.js +276 -0
  27. package/dist/commands-v2/handlers/context.js +286 -81
  28. package/dist/commands-v2/handlers/core.d.ts +1 -0
  29. package/dist/commands-v2/handlers/core.js +133 -8
  30. package/dist/commands-v2/handlers/debug.js +18 -0
  31. package/dist/commands-v2/handlers/delegations.d.ts +8 -0
  32. package/dist/commands-v2/handlers/delegations.js +29 -0
  33. package/dist/commands-v2/handlers/files.d.ts +8 -0
  34. package/dist/commands-v2/handlers/files.js +162 -0
  35. package/dist/commands-v2/handlers/filter.d.ts +9 -0
  36. package/dist/commands-v2/handlers/filter.js +130 -0
  37. package/dist/commands-v2/handlers/games.d.ts +7 -0
  38. package/dist/commands-v2/handlers/games.js +57 -0
  39. package/dist/commands-v2/handlers/index.d.ts +13 -0
  40. package/dist/commands-v2/handlers/index.js +39 -0
  41. package/dist/commands-v2/handlers/mcp.d.ts +8 -0
  42. package/dist/commands-v2/handlers/mcp.js +39 -0
  43. package/dist/commands-v2/handlers/notifications.d.ts +9 -0
  44. package/dist/commands-v2/handlers/notifications.js +34 -0
  45. package/dist/commands-v2/handlers/project.js +295 -31
  46. package/dist/commands-v2/handlers/reset.d.ts +11 -0
  47. package/dist/commands-v2/handlers/reset.js +118 -0
  48. package/dist/commands-v2/handlers/session.d.ts +161 -0
  49. package/dist/commands-v2/handlers/session.js +805 -0
  50. package/dist/commands-v2/handlers/settings.d.ts +2 -0
  51. package/dist/commands-v2/handlers/settings.js +217 -35
  52. package/dist/commands-v2/handlers/tasks.d.ts +5 -0
  53. package/dist/commands-v2/handlers/tasks.js +36 -0
  54. package/dist/commands-v2/handlers/team.d.ts +9 -0
  55. package/dist/commands-v2/handlers/team.js +549 -0
  56. package/dist/commands-v2/handlers/terminals.d.ts +9 -0
  57. package/dist/commands-v2/handlers/terminals.js +34 -0
  58. package/dist/commands-v2/index.d.ts +3 -2
  59. package/dist/commands-v2/index.js +4 -1
  60. package/dist/commands-v2/registry.d.ts +15 -0
  61. package/dist/commands-v2/registry.js +34 -0
  62. package/dist/commands-v2/types.d.ts +81 -3
  63. package/dist/commands.js +13 -0
  64. package/dist/compilr-diff-companion.vsix +0 -0
  65. package/dist/db/index.js +98 -4
  66. package/dist/db/repositories/document-repository.d.ts +2 -0
  67. package/dist/db/repositories/document-repository.js +6 -1
  68. package/dist/db/repositories/index.d.ts +2 -0
  69. package/dist/db/repositories/index.js +1 -0
  70. package/dist/db/repositories/plan-repository.d.ts +101 -0
  71. package/dist/db/repositories/plan-repository.js +275 -0
  72. package/dist/db/repositories/project-repository.d.ts +6 -0
  73. package/dist/db/repositories/project-repository.js +41 -0
  74. package/dist/db/repositories/work-item-repository.d.ts +15 -0
  75. package/dist/db/repositories/work-item-repository.js +69 -4
  76. package/dist/db/schema.d.ts +40 -3
  77. package/dist/db/schema.js +66 -3
  78. package/dist/episodes/index.d.ts +20 -0
  79. package/dist/episodes/index.js +27 -0
  80. package/dist/episodes/recorder.d.ts +51 -0
  81. package/dist/episodes/recorder.js +195 -0
  82. package/dist/episodes/significant-work.d.ts +21 -0
  83. package/dist/episodes/significant-work.js +56 -0
  84. package/dist/episodes/store.d.ts +38 -0
  85. package/dist/episodes/store.js +199 -0
  86. package/dist/episodes/types.d.ts +35 -0
  87. package/dist/episodes/types.js +6 -0
  88. package/dist/episodes/work-at-risk.d.ts +12 -0
  89. package/dist/episodes/work-at-risk.js +38 -0
  90. package/dist/episodes/work-summary-anchor.d.ts +23 -0
  91. package/dist/episodes/work-summary-anchor.js +73 -0
  92. package/dist/games/coins.d.ts +66 -0
  93. package/dist/games/coins.js +165 -0
  94. package/dist/games/game-base.d.ts +84 -0
  95. package/dist/games/game-base.js +204 -0
  96. package/dist/games/index.d.ts +16 -0
  97. package/dist/games/index.js +49 -0
  98. package/dist/games/scores.d.ts +69 -0
  99. package/dist/games/scores.js +191 -0
  100. package/dist/games/tetris/board.d.ts +59 -0
  101. package/dist/games/tetris/board.js +170 -0
  102. package/dist/games/tetris/index.d.ts +109 -0
  103. package/dist/games/tetris/index.js +610 -0
  104. package/dist/games/tetris/pieces.d.ts +44 -0
  105. package/dist/games/tetris/pieces.js +271 -0
  106. package/dist/games/tetris/renderer.d.ts +26 -0
  107. package/dist/games/tetris/renderer.js +77 -0
  108. package/dist/guide/guide-content.d.ts +23 -0
  109. package/dist/guide/guide-content.js +196 -0
  110. package/dist/guide/index.d.ts +8 -0
  111. package/dist/guide/index.js +7 -0
  112. package/dist/guide/shared-content.d.ts +37 -0
  113. package/dist/guide/shared-content.js +1272 -0
  114. package/dist/guide/tutorial-helpers.d.ts +57 -0
  115. package/dist/guide/tutorial-helpers.js +147 -0
  116. package/dist/handlers/ask-user-handlers.d.ts +32 -0
  117. package/dist/handlers/ask-user-handlers.js +104 -0
  118. package/dist/handlers/delegation-handlers.d.ts +34 -0
  119. package/dist/handlers/delegation-handlers.js +291 -0
  120. package/dist/handlers/permission-handler.d.ts +30 -0
  121. package/dist/handlers/permission-handler.js +205 -0
  122. package/dist/index.d.ts +11 -1
  123. package/dist/index.js +448 -271
  124. package/dist/input-handlers/memory-handler.d.ts +1 -1
  125. package/dist/input-handlers/memory-handler.js +2 -1
  126. package/dist/models/index.d.ts +10 -0
  127. package/dist/models/index.js +12 -0
  128. package/dist/models/model-registry.d.ts +38 -0
  129. package/dist/models/model-registry.js +69 -0
  130. package/dist/models/model-tiers.d.ts +28 -0
  131. package/dist/models/model-tiers.js +71 -0
  132. package/dist/models/model-validation.d.ts +25 -0
  133. package/dist/models/model-validation.js +291 -0
  134. package/dist/models/ollama-models.d.ts +73 -0
  135. package/dist/models/ollama-models.js +178 -0
  136. package/dist/models/provider-types.d.ts +6 -0
  137. package/dist/models/provider-types.js +1 -0
  138. package/dist/models/providers.d.ts +35 -0
  139. package/dist/models/providers.js +58 -0
  140. package/dist/models/types.d.ts +4 -0
  141. package/dist/models/types.js +4 -0
  142. package/dist/multi-agent/activity.d.ts +21 -0
  143. package/dist/multi-agent/activity.js +34 -0
  144. package/dist/multi-agent/agent-selection.d.ts +55 -0
  145. package/dist/multi-agent/agent-selection.js +90 -0
  146. package/dist/multi-agent/artifacts.d.ts +197 -0
  147. package/dist/multi-agent/artifacts.js +379 -0
  148. package/dist/multi-agent/checkpointer.d.ts +138 -0
  149. package/dist/multi-agent/checkpointer.js +471 -0
  150. package/dist/multi-agent/collision-utils.d.ts +16 -0
  151. package/dist/multi-agent/collision-utils.js +28 -0
  152. package/dist/multi-agent/context-resolver.d.ts +97 -0
  153. package/dist/multi-agent/context-resolver.js +316 -0
  154. package/dist/multi-agent/custom-agents.d.ts +83 -0
  155. package/dist/multi-agent/custom-agents.js +227 -0
  156. package/dist/multi-agent/delegation-tracker.d.ts +157 -0
  157. package/dist/multi-agent/delegation-tracker.js +243 -0
  158. package/dist/multi-agent/file-lock-hook.d.ts +29 -0
  159. package/dist/multi-agent/file-lock-hook.js +97 -0
  160. package/dist/multi-agent/file-locks.d.ts +58 -0
  161. package/dist/multi-agent/file-locks.js +194 -0
  162. package/dist/multi-agent/index.d.ts +24 -0
  163. package/dist/multi-agent/index.js +30 -0
  164. package/dist/multi-agent/mention-parser.d.ts +64 -0
  165. package/dist/multi-agent/mention-parser.js +146 -0
  166. package/dist/multi-agent/notification-manager.d.ts +84 -0
  167. package/dist/multi-agent/notification-manager.js +224 -0
  168. package/dist/multi-agent/pending-requests.d.ts +122 -0
  169. package/dist/multi-agent/pending-requests.js +155 -0
  170. package/dist/multi-agent/session-registry.d.ts +139 -0
  171. package/dist/multi-agent/session-registry.js +514 -0
  172. package/dist/multi-agent/shared-context.d.ts +293 -0
  173. package/dist/multi-agent/shared-context.js +671 -0
  174. package/dist/multi-agent/skill-requirements.d.ts +66 -0
  175. package/dist/multi-agent/skill-requirements.js +178 -0
  176. package/dist/multi-agent/task-assignment.d.ts +69 -0
  177. package/dist/multi-agent/task-assignment.js +123 -0
  178. package/dist/multi-agent/task-suggestion.d.ts +31 -0
  179. package/dist/multi-agent/task-suggestion.js +72 -0
  180. package/dist/multi-agent/team-agent.d.ts +201 -0
  181. package/dist/multi-agent/team-agent.js +488 -0
  182. package/dist/multi-agent/team.d.ts +286 -0
  183. package/dist/multi-agent/team.js +610 -0
  184. package/dist/multi-agent/tool-config.d.ts +110 -0
  185. package/dist/multi-agent/tool-config.js +661 -0
  186. package/dist/multi-agent/types.d.ts +211 -0
  187. package/dist/multi-agent/types.js +617 -0
  188. package/dist/prompts/plan-mode-prompt.d.ts +11 -0
  189. package/dist/prompts/plan-mode-prompt.js +95 -0
  190. package/dist/repl-helpers.js +5 -2
  191. package/dist/repl-v2.d.ts +401 -2
  192. package/dist/repl-v2.js +2588 -65
  193. package/dist/session/index.d.ts +6 -0
  194. package/dist/session/index.js +6 -0
  195. package/dist/session/project-session-manager.d.ts +158 -0
  196. package/dist/session/project-session-manager.js +650 -0
  197. package/dist/settings/index.d.ts +133 -13
  198. package/dist/settings/index.js +329 -24
  199. package/dist/settings/mcp-config.d.ts +76 -0
  200. package/dist/settings/mcp-config.js +143 -0
  201. package/dist/settings/paths.d.ts +4 -0
  202. package/dist/settings/paths.js +6 -0
  203. package/dist/shared-handlers.d.ts +62 -0
  204. package/dist/shared-handlers.js +48 -0
  205. package/dist/system-prompt/builder.d.ts +5 -0
  206. package/dist/system-prompt/builder.js +4 -0
  207. package/dist/system-prompt/index.d.ts +18 -0
  208. package/dist/system-prompt/index.js +18 -0
  209. package/dist/system-prompt/modules.d.ts +5 -0
  210. package/dist/system-prompt/modules.js +4 -0
  211. package/dist/tabbed-menu.js +2 -1
  212. package/dist/templates/compilr-md-import.d.ts +16 -0
  213. package/dist/templates/compilr-md-import.js +241 -0
  214. package/dist/templates/compilr-md.js +10 -61
  215. package/dist/templates/config-json.d.ts +1 -25
  216. package/dist/templates/index.d.ts +2 -0
  217. package/dist/templates/index.js +34 -73
  218. package/dist/tool-names.d.ts +113 -0
  219. package/dist/tool-names.js +239 -0
  220. package/dist/tools/ask-user-simple.d.ts +1 -1
  221. package/dist/tools/ask-user-simple.js +2 -1
  222. package/dist/tools/ask-user.d.ts +1 -1
  223. package/dist/tools/ask-user.js +2 -1
  224. package/dist/tools/backlog.d.ts +2 -2
  225. package/dist/tools/backlog.js +1 -1
  226. package/dist/tools/db-tools.d.ts +13 -61
  227. package/dist/tools/db-tools.js +12 -13
  228. package/dist/tools/delegate-background.d.ts +27 -0
  229. package/dist/tools/delegate-background.js +115 -0
  230. package/dist/tools/delegate.d.ts +22 -0
  231. package/dist/tools/delegate.js +97 -0
  232. package/dist/tools/delegation-status.d.ts +16 -0
  233. package/dist/tools/delegation-status.js +128 -0
  234. package/dist/tools/guide-tool.d.ts +12 -0
  235. package/dist/tools/guide-tool.js +59 -0
  236. package/dist/tools/handoff.d.ts +25 -0
  237. package/dist/tools/handoff.js +99 -0
  238. package/dist/tools/meta-tools.d.ts +26 -0
  239. package/dist/tools/meta-tools.js +47 -0
  240. package/dist/tools/platform-adapter.d.ts +35 -0
  241. package/dist/tools/platform-adapter.js +404 -0
  242. package/dist/tools/project-db.d.ts +5 -73
  243. package/dist/tools/project-db.js +5 -336
  244. package/dist/tools.d.ts +67 -2
  245. package/dist/tools.js +240 -48
  246. package/dist/ui/autocomplete-controller.d.ts +42 -0
  247. package/dist/ui/autocomplete-controller.js +384 -0
  248. package/dist/ui/base/index.d.ts +1 -1
  249. package/dist/ui/base/index.js +1 -1
  250. package/dist/ui/base/overlay-base-v2.d.ts +10 -0
  251. package/dist/ui/base/overlay-base-v2.js +14 -0
  252. package/dist/ui/base/render-utils.d.ts +19 -0
  253. package/dist/ui/base/render-utils.js +25 -0
  254. package/dist/ui/base/tabbed-list-overlay-v2.d.ts +16 -1
  255. package/dist/ui/base/tabbed-list-overlay-v2.js +19 -1
  256. package/dist/ui/constants/labels.d.ts +14 -0
  257. package/dist/ui/constants/labels.js +52 -0
  258. package/dist/ui/conversation-store.d.ts +55 -0
  259. package/dist/ui/conversation-store.js +107 -0
  260. package/dist/ui/conversation.js +11 -13
  261. package/dist/ui/diff.d.ts +7 -1
  262. package/dist/ui/diff.js +85 -48
  263. package/dist/ui/ephemeral.js +3 -9
  264. package/dist/ui/file-autocomplete.d.ts +24 -0
  265. package/dist/ui/file-autocomplete.js +56 -0
  266. package/dist/ui/footer-renderer.d.ts +69 -0
  267. package/dist/ui/footer-renderer.js +431 -0
  268. package/dist/ui/footer.d.ts +74 -7
  269. package/dist/ui/footer.js +173 -16
  270. package/dist/ui/input-controller.d.ts +51 -0
  271. package/dist/ui/input-controller.js +176 -0
  272. package/dist/ui/input-prompt.d.ts +19 -0
  273. package/dist/ui/input-prompt.js +206 -14
  274. package/dist/ui/keyboard-handler.d.ts +57 -0
  275. package/dist/ui/keyboard-handler.js +557 -0
  276. package/dist/ui/live-region-facade.d.ts +42 -0
  277. package/dist/ui/live-region-facade.js +205 -0
  278. package/dist/ui/live-region.d.ts +0 -4
  279. package/dist/ui/live-region.js +6 -14
  280. package/dist/ui/mascot/renderer.d.ts +1 -1
  281. package/dist/ui/mascot/renderer.js +37 -2
  282. package/dist/ui/overlay/data/tutorial-content.d.ts +9 -0
  283. package/dist/ui/overlay/data/tutorial-content.js +9 -0
  284. package/dist/ui/overlay/data/tutorial-registry.d.ts +12 -0
  285. package/dist/ui/overlay/data/tutorial-registry.js +116 -0
  286. package/dist/ui/overlay/data/tutorial-types.d.ts +35 -0
  287. package/dist/ui/overlay/data/tutorial-types.js +6 -0
  288. package/dist/ui/overlay/data/tutorials/basics/first-conversation.d.ts +7 -0
  289. package/dist/ui/overlay/data/tutorials/basics/first-conversation.js +220 -0
  290. package/dist/ui/overlay/data/tutorials/basics/first-project.d.ts +7 -0
  291. package/dist/ui/overlay/data/tutorials/basics/first-project.js +284 -0
  292. package/dist/ui/overlay/data/tutorials/basics/navigation.d.ts +8 -0
  293. package/dist/ui/overlay/data/tutorials/basics/navigation.js +22 -0
  294. package/dist/ui/overlay/data/tutorials/basics/welcome.d.ts +7 -0
  295. package/dist/ui/overlay/data/tutorials/basics/welcome.js +174 -0
  296. package/dist/ui/overlay/data/tutorials/config/context-management.d.ts +7 -0
  297. package/dist/ui/overlay/data/tutorials/config/context-management.js +158 -0
  298. package/dist/ui/overlay/data/tutorials/config/mcp-servers.d.ts +8 -0
  299. package/dist/ui/overlay/data/tutorials/config/mcp-servers.js +155 -0
  300. package/dist/ui/overlay/data/tutorials/config/model-selection.d.ts +7 -0
  301. package/dist/ui/overlay/data/tutorials/config/model-selection.js +162 -0
  302. package/dist/ui/overlay/data/tutorials/config/permissions-safety.d.ts +7 -0
  303. package/dist/ui/overlay/data/tutorials/config/permissions-safety.js +163 -0
  304. package/dist/ui/overlay/data/tutorials/config/settings-config.d.ts +7 -0
  305. package/dist/ui/overlay/data/tutorials/config/settings-config.js +166 -0
  306. package/dist/ui/overlay/data/tutorials/planning/arch.d.ts +7 -0
  307. package/dist/ui/overlay/data/tutorials/planning/arch.js +168 -0
  308. package/dist/ui/overlay/data/tutorials/planning/backlog.d.ts +7 -0
  309. package/dist/ui/overlay/data/tutorials/planning/backlog.js +103 -0
  310. package/dist/ui/overlay/data/tutorials/planning/build.d.ts +7 -0
  311. package/dist/ui/overlay/data/tutorials/planning/build.js +173 -0
  312. package/dist/ui/overlay/data/tutorials/planning/design.d.ts +7 -0
  313. package/dist/ui/overlay/data/tutorials/planning/design.js +205 -0
  314. package/dist/ui/overlay/data/tutorials/planning/docs.d.ts +7 -0
  315. package/dist/ui/overlay/data/tutorials/planning/docs.js +143 -0
  316. package/dist/ui/overlay/data/tutorials/planning/prd.d.ts +7 -0
  317. package/dist/ui/overlay/data/tutorials/planning/prd.js +173 -0
  318. package/dist/ui/overlay/data/tutorials/planning/scaffold.d.ts +7 -0
  319. package/dist/ui/overlay/data/tutorials/planning/scaffold.js +164 -0
  320. package/dist/ui/overlay/data/tutorials/planning/sketch.d.ts +7 -0
  321. package/dist/ui/overlay/data/tutorials/planning/sketch.js +58 -0
  322. package/dist/ui/overlay/data/tutorials/projects/anchors.d.ts +7 -0
  323. package/dist/ui/overlay/data/tutorials/projects/anchors.js +248 -0
  324. package/dist/ui/overlay/data/tutorials/projects/import-project.d.ts +7 -0
  325. package/dist/ui/overlay/data/tutorials/projects/import-project.js +172 -0
  326. package/dist/ui/overlay/data/tutorials/projects/managing-projects.d.ts +8 -0
  327. package/dist/ui/overlay/data/tutorials/projects/managing-projects.js +212 -0
  328. package/dist/ui/overlay/data/tutorials/projects/new-project.d.ts +7 -0
  329. package/dist/ui/overlay/data/tutorials/projects/new-project.js +251 -0
  330. package/dist/ui/overlay/data/tutorials/projects/session-management.d.ts +7 -0
  331. package/dist/ui/overlay/data/tutorials/projects/session-management.js +169 -0
  332. package/dist/ui/overlay/data/tutorials/teams/background-execution.d.ts +7 -0
  333. package/dist/ui/overlay/data/tutorials/teams/background-execution.js +171 -0
  334. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.d.ts +8 -0
  335. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.js +147 -0
  336. package/dist/ui/overlay/data/tutorials/teams/task-assignment.d.ts +7 -0
  337. package/dist/ui/overlay/data/tutorials/teams/task-assignment.js +204 -0
  338. package/dist/ui/overlay/data/tutorials/teams/team-overview.d.ts +7 -0
  339. package/dist/ui/overlay/data/tutorials/teams/team-overview.js +165 -0
  340. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.d.ts +7 -0
  341. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.js +172 -0
  342. package/dist/ui/overlay/impl/agents-overlay-v2.js +6 -17
  343. package/dist/ui/overlay/impl/anchors-overlay-v2.js +30 -64
  344. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.d.ts +43 -0
  345. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.js +232 -0
  346. package/dist/ui/overlay/impl/artifact-overlay-v2.d.ts +40 -0
  347. package/dist/ui/overlay/impl/artifact-overlay-v2.js +115 -0
  348. package/dist/ui/overlay/impl/ask-user-overlay-v2.js +2 -5
  349. package/dist/ui/overlay/impl/background-overlay-v2.d.ts +40 -0
  350. package/dist/ui/overlay/impl/background-overlay-v2.js +147 -0
  351. package/dist/ui/overlay/impl/backlog-overlay-v2.d.ts +4 -1
  352. package/dist/ui/overlay/impl/backlog-overlay-v2.js +55 -16
  353. package/dist/ui/overlay/impl/changelog-overlay-v2.d.ts +44 -0
  354. package/dist/ui/overlay/impl/changelog-overlay-v2.js +165 -0
  355. package/dist/ui/overlay/impl/commands-overlay-v2.js +4 -6
  356. package/dist/ui/overlay/impl/config-overlay-v2.d.ts +12 -1
  357. package/dist/ui/overlay/impl/config-overlay-v2.js +164 -100
  358. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.d.ts +83 -0
  359. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.js +711 -0
  360. package/dist/ui/overlay/impl/dashboard-overlay-v2.d.ts +2 -0
  361. package/dist/ui/overlay/impl/dashboard-overlay-v2.js +26 -3
  362. package/dist/ui/overlay/impl/delegations-overlay-v2.d.ts +28 -0
  363. package/dist/ui/overlay/impl/delegations-overlay-v2.js +279 -0
  364. package/dist/ui/overlay/impl/docs-overlay-v2.js +12 -9
  365. package/dist/ui/overlay/impl/document-detail-overlay-v2.d.ts +7 -0
  366. package/dist/ui/overlay/impl/document-detail-overlay-v2.js +119 -78
  367. package/dist/ui/overlay/impl/filter-overlay-v2.d.ts +41 -0
  368. package/dist/ui/overlay/impl/filter-overlay-v2.js +110 -0
  369. package/dist/ui/overlay/impl/games-overlay-v2.d.ts +31 -0
  370. package/dist/ui/overlay/impl/games-overlay-v2.js +135 -0
  371. package/dist/ui/overlay/impl/help-overlay-v2.d.ts +26 -3
  372. package/dist/ui/overlay/impl/help-overlay-v2.js +20 -42
  373. package/dist/ui/overlay/impl/login-overlay-v2.d.ts +49 -0
  374. package/dist/ui/overlay/impl/login-overlay-v2.js +277 -0
  375. package/dist/ui/overlay/impl/mcp-overlay-v2.d.ts +63 -0
  376. package/dist/ui/overlay/impl/mcp-overlay-v2.js +907 -0
  377. package/dist/ui/overlay/impl/model-overlay-v2.d.ts +57 -13
  378. package/dist/ui/overlay/impl/model-overlay-v2.js +1086 -61
  379. package/dist/ui/overlay/impl/new-overlay-v2.d.ts +37 -6
  380. package/dist/ui/overlay/impl/new-overlay-v2.js +715 -65
  381. package/dist/ui/overlay/impl/notifications-overlay-v2.d.ts +20 -0
  382. package/dist/ui/overlay/impl/notifications-overlay-v2.js +116 -0
  383. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.d.ts +76 -0
  384. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.js +728 -0
  385. package/dist/ui/overlay/impl/pending-overlay-v2.d.ts +51 -0
  386. package/dist/ui/overlay/impl/pending-overlay-v2.js +445 -0
  387. package/dist/ui/overlay/impl/permission-overlay-v2.js +5 -5
  388. package/dist/ui/overlay/impl/permissions-overlay-v2.d.ts +85 -0
  389. package/dist/ui/overlay/impl/permissions-overlay-v2.js +820 -0
  390. package/dist/ui/overlay/impl/plan-approval-overlay-v2.d.ts +35 -0
  391. package/dist/ui/overlay/impl/plan-approval-overlay-v2.js +181 -0
  392. package/dist/ui/overlay/impl/project-edit-overlay-v2.d.ts +36 -0
  393. package/dist/ui/overlay/impl/project-edit-overlay-v2.js +195 -0
  394. package/dist/ui/overlay/impl/projects-overlay-v2.d.ts +1 -0
  395. package/dist/ui/overlay/impl/projects-overlay-v2.js +278 -44
  396. package/dist/ui/overlay/impl/reset-overlay-v2.d.ts +39 -0
  397. package/dist/ui/overlay/impl/reset-overlay-v2.js +107 -0
  398. package/dist/ui/overlay/impl/resume-overlay-v2.d.ts +60 -0
  399. package/dist/ui/overlay/impl/resume-overlay-v2.js +414 -0
  400. package/dist/ui/overlay/impl/session-mode-overlay-v2.d.ts +43 -0
  401. package/dist/ui/overlay/impl/session-mode-overlay-v2.js +124 -0
  402. package/dist/ui/overlay/impl/tasks-overlay-v2.d.ts +28 -0
  403. package/dist/ui/overlay/impl/tasks-overlay-v2.js +283 -0
  404. package/dist/ui/overlay/impl/team-overlay-v2.d.ts +86 -0
  405. package/dist/ui/overlay/impl/team-overlay-v2.js +692 -0
  406. package/dist/ui/overlay/impl/terminals-overlay-v2.d.ts +26 -0
  407. package/dist/ui/overlay/impl/terminals-overlay-v2.js +217 -0
  408. package/dist/ui/overlay/impl/tools-overlay-v2.js +3 -7
  409. package/dist/ui/overlay/impl/tutorial-overlay-v2.d.ts +30 -16
  410. package/dist/ui/overlay/impl/tutorial-overlay-v2.js +133 -956
  411. package/dist/ui/overlay/impl/workflow-overlay-v2.d.ts +1 -0
  412. package/dist/ui/overlay/impl/workflow-overlay-v2.js +10 -4
  413. package/dist/ui/overlay/index.d.ts +20 -1
  414. package/dist/ui/overlay/index.js +19 -0
  415. package/dist/ui/overlay/types.d.ts +5 -0
  416. package/dist/ui/overlay-manager.d.ts +43 -0
  417. package/dist/ui/overlay-manager.js +238 -0
  418. package/dist/ui/overlays.js +4 -16
  419. package/dist/ui/permission-overlay.js +6 -5
  420. package/dist/ui/status-bar-controller.d.ts +33 -0
  421. package/dist/ui/status-bar-controller.js +99 -0
  422. package/dist/ui/subagent-renderer.js +3 -19
  423. package/dist/ui/terminal-autocomplete-utils.d.ts +23 -0
  424. package/dist/ui/terminal-autocomplete-utils.js +83 -0
  425. package/dist/ui/terminal-line-builders.d.ts +17 -0
  426. package/dist/ui/terminal-line-builders.js +42 -0
  427. package/dist/ui/terminal-render-item.d.ts +16 -0
  428. package/dist/ui/terminal-render-item.js +267 -0
  429. package/dist/ui/terminal-renderer.d.ts +7 -8
  430. package/dist/ui/terminal-renderer.js +7 -8
  431. package/dist/ui/terminal-types.d.ts +179 -0
  432. package/dist/ui/terminal-types.js +34 -0
  433. package/dist/ui/terminal-ui.d.ts +144 -276
  434. package/dist/ui/terminal-ui.js +384 -1861
  435. package/dist/ui/todo-zone.d.ts +19 -1
  436. package/dist/ui/todo-zone.js +71 -13
  437. package/dist/ui/tool-formatters.js +696 -1
  438. package/dist/ui/turn-metrics.d.ts +56 -0
  439. package/dist/ui/turn-metrics.js +75 -0
  440. package/dist/ui/types.d.ts +28 -0
  441. package/dist/ui/types.js +1 -0
  442. package/dist/ui/vscode-diff-ipc.d.ts +102 -0
  443. package/dist/ui/vscode-diff-ipc.js +385 -0
  444. package/dist/utils/credentials.d.ts +24 -5
  445. package/dist/utils/credentials.js +123 -9
  446. package/dist/utils/format-tokens.d.ts +13 -0
  447. package/dist/utils/format-tokens.js +18 -0
  448. package/dist/utils/git-config.d.ts +26 -0
  449. package/dist/utils/git-config.js +54 -0
  450. package/dist/utils/message-utils.d.ts +61 -0
  451. package/dist/utils/message-utils.js +72 -0
  452. package/dist/utils/model-tiers.d.ts +8 -1
  453. package/dist/utils/model-tiers.js +38 -16
  454. package/dist/utils/open-browser.d.ts +5 -0
  455. package/dist/utils/open-browser.js +32 -0
  456. package/dist/utils/path-safety.js +3 -2
  457. package/dist/utils/project-detection.d.ts +58 -0
  458. package/dist/utils/project-detection.js +424 -0
  459. package/dist/utils/project-memory.js +2 -1
  460. package/dist/utils/project-status.d.ts +2 -2
  461. package/dist/utils/startup-perf.d.ts +18 -0
  462. package/dist/utils/startup-perf.js +60 -0
  463. package/dist/utils/token-tracker.d.ts +62 -0
  464. package/dist/utils/token-tracker.js +150 -0
  465. package/dist/utils/token-types.d.ts +23 -0
  466. package/dist/utils/token-types.js +18 -0
  467. package/dist/utils/types/config-types.d.ts +32 -0
  468. package/dist/utils/types/config-types.js +8 -0
  469. package/dist/utils/update-checker.d.ts +28 -0
  470. package/dist/utils/update-checker.js +106 -0
  471. package/dist/utils/version.d.ts +7 -0
  472. package/dist/utils/version.js +10 -0
  473. package/dist/utils/vscode-detect.d.ts +39 -0
  474. package/dist/utils/vscode-detect.js +137 -0
  475. package/package.json +27 -13
  476. package/dist/commands/handler-types.d.ts +0 -68
  477. package/dist/commands/handler-types.js +0 -8
  478. package/dist/commands/handlers/agent-commands.d.ts +0 -13
  479. package/dist/commands/handlers/agent-commands.js +0 -305
  480. package/dist/commands/handlers/design-commands.d.ts +0 -15
  481. package/dist/commands/handlers/design-commands.js +0 -334
  482. package/dist/commands/handlers/index.d.ts +0 -20
  483. package/dist/commands/handlers/index.js +0 -43
  484. package/dist/commands/handlers/overlay-commands.d.ts +0 -21
  485. package/dist/commands/handlers/overlay-commands.js +0 -287
  486. package/dist/commands/handlers/project-commands.d.ts +0 -11
  487. package/dist/commands/handlers/project-commands.js +0 -167
  488. package/dist/commands/handlers/simple-commands.d.ts +0 -19
  489. package/dist/commands/handlers/simple-commands.js +0 -144
  490. package/dist/commands/registry.d.ts +0 -50
  491. package/dist/commands/registry.js +0 -75
  492. package/dist/index.old.d.ts +0 -7
  493. package/dist/index.old.js +0 -1014
  494. package/dist/repl.d.ts +0 -149
  495. package/dist/repl.js +0 -1151
  496. package/dist/templates/claude-md.d.ts +0 -7
  497. package/dist/templates/claude-md.js +0 -189
  498. package/dist/test-autocomplete.d.ts +0 -7
  499. package/dist/test-autocomplete.js +0 -85
  500. package/dist/test-tabbed-menu.d.ts +0 -7
  501. package/dist/test-tabbed-menu.js +0 -25
  502. package/dist/tool-selector.d.ts +0 -71
  503. package/dist/tool-selector.js +0 -184
  504. package/dist/tools/anchor-tools.d.ts +0 -31
  505. package/dist/tools/anchor-tools.js +0 -255
  506. package/dist/tools/backlog-wrappers.d.ts +0 -54
  507. package/dist/tools/backlog-wrappers.js +0 -338
  508. package/dist/tools/document-db.d.ts +0 -43
  509. package/dist/tools/document-db.js +0 -220
  510. package/dist/tools/workitem-db.d.ts +0 -103
  511. package/dist/tools/workitem-db.js +0 -549
  512. package/dist/ui/agents-overlay-v2.d.ts +0 -43
  513. package/dist/ui/agents-overlay-v2.js +0 -809
  514. package/dist/ui/agents-overlay.d.ts +0 -12
  515. package/dist/ui/agents-overlay.js +0 -863
  516. package/dist/ui/anchors-overlay.d.ts +0 -12
  517. package/dist/ui/anchors-overlay.js +0 -775
  518. package/dist/ui/arch-type-overlay.d.ts +0 -15
  519. package/dist/ui/arch-type-overlay.js +0 -201
  520. package/dist/ui/ask-user-overlay-v2.d.ts +0 -26
  521. package/dist/ui/ask-user-overlay-v2.js +0 -555
  522. package/dist/ui/ask-user-simple-overlay-v2.d.ts +0 -25
  523. package/dist/ui/ask-user-simple-overlay-v2.js +0 -215
  524. package/dist/ui/backlog-overlay.d.ts +0 -32
  525. package/dist/ui/backlog-overlay.js +0 -652
  526. package/dist/ui/commands-overlay-v2.d.ts +0 -33
  527. package/dist/ui/commands-overlay-v2.js +0 -441
  528. package/dist/ui/commands-overlay.d.ts +0 -16
  529. package/dist/ui/commands-overlay.js +0 -439
  530. package/dist/ui/config-overlay.d.ts +0 -35
  531. package/dist/ui/config-overlay.js +0 -707
  532. package/dist/ui/docs-overlay.d.ts +0 -17
  533. package/dist/ui/docs-overlay.js +0 -303
  534. package/dist/ui/footer-v2.d.ts +0 -222
  535. package/dist/ui/footer-v2.js +0 -1349
  536. package/dist/ui/help-overlay-v2.d.ts +0 -34
  537. package/dist/ui/help-overlay-v2.js +0 -309
  538. package/dist/ui/help-overlay.d.ts +0 -16
  539. package/dist/ui/help-overlay.js +0 -316
  540. package/dist/ui/init-overlay-v2.d.ts +0 -34
  541. package/dist/ui/init-overlay-v2.js +0 -600
  542. package/dist/ui/init-overlay.d.ts +0 -34
  543. package/dist/ui/init-overlay.js +0 -604
  544. package/dist/ui/input-prompt-v2.d.ts +0 -180
  545. package/dist/ui/input-prompt-v2.js +0 -999
  546. package/dist/ui/iteration-limit-overlay-v2.d.ts +0 -21
  547. package/dist/ui/iteration-limit-overlay-v2.js +0 -114
  548. package/dist/ui/keys-overlay-v2.d.ts +0 -41
  549. package/dist/ui/keys-overlay-v2.js +0 -248
  550. package/dist/ui/mascot-overlay-v2.d.ts +0 -41
  551. package/dist/ui/mascot-overlay-v2.js +0 -138
  552. package/dist/ui/mascot-overlay.d.ts +0 -21
  553. package/dist/ui/mascot-overlay.js +0 -146
  554. package/dist/ui/model-overlay-v2.d.ts +0 -49
  555. package/dist/ui/model-overlay-v2.js +0 -118
  556. package/dist/ui/model-overlay.d.ts +0 -27
  557. package/dist/ui/model-overlay.js +0 -221
  558. package/dist/ui/model-warning-overlay.d.ts +0 -30
  559. package/dist/ui/model-warning-overlay.js +0 -169
  560. package/dist/ui/new-overlay.d.ts +0 -34
  561. package/dist/ui/new-overlay.js +0 -604
  562. package/dist/ui/overlay/impl/init-overlay-v2.d.ts +0 -77
  563. package/dist/ui/overlay/impl/init-overlay-v2.js +0 -593
  564. package/dist/ui/overlay/overlay-types.d.ts +0 -128
  565. package/dist/ui/overlay/overlay-types.js +0 -22
  566. package/dist/ui/overlays/help-overlay-v2.d.ts +0 -28
  567. package/dist/ui/overlays/help-overlay-v2.js +0 -198
  568. package/dist/ui/overlays/index.d.ts +0 -11
  569. package/dist/ui/overlays/index.js +0 -11
  570. package/dist/ui/permission-overlay-v2.d.ts +0 -36
  571. package/dist/ui/permission-overlay-v2.js +0 -380
  572. package/dist/ui/projects-overlay.d.ts +0 -19
  573. package/dist/ui/projects-overlay.js +0 -484
  574. package/dist/ui/theme-overlay-v2.d.ts +0 -42
  575. package/dist/ui/theme-overlay-v2.js +0 -135
  576. package/dist/ui/theme-overlay.d.ts +0 -24
  577. package/dist/ui/theme-overlay.js +0 -127
  578. package/dist/ui/tools-overlay-v2.d.ts +0 -47
  579. package/dist/ui/tools-overlay-v2.js +0 -218
  580. package/dist/ui/tools-overlay.d.ts +0 -34
  581. package/dist/ui/tools-overlay.js +0 -230
  582. package/dist/ui/tutorial-overlay-v2.d.ts +0 -31
  583. package/dist/ui/tutorial-overlay-v2.js +0 -1035
  584. package/dist/ui/tutorial-overlay.d.ts +0 -11
  585. package/dist/ui/tutorial-overlay.js +0 -1034
  586. package/dist/ui/workflow-overlay.d.ts +0 -22
  587. package/dist/ui/workflow-overlay.js +0 -636
@@ -0,0 +1,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;
@@ -0,0 +1,170 @@
1
+ /**
2
+ * Tetris Board
3
+ *
4
+ * Game board logic - collision detection, line clearing, etc.
5
+ */
6
+ // =============================================================================
7
+ // Constants
8
+ // =============================================================================
9
+ export const BOARD_WIDTH = 10;
10
+ export const BOARD_HEIGHT = 20;
11
+ export const HIDDEN_ROWS = 2; // Extra rows above visible area for spawning
12
+ // =============================================================================
13
+ // Board Functions
14
+ // =============================================================================
15
+ /**
16
+ * Create an empty board
17
+ */
18
+ export function createBoard() {
19
+ const board = [];
20
+ for (let row = 0; row < BOARD_HEIGHT + HIDDEN_ROWS; row++) {
21
+ board.push(new Array(BOARD_WIDTH).fill(0));
22
+ }
23
+ return board;
24
+ }
25
+ /**
26
+ * Check if a position is within bounds
27
+ */
28
+ export function isInBounds(x, y) {
29
+ return x >= 0 && x < BOARD_WIDTH && y >= 0 && y < BOARD_HEIGHT + HIDDEN_ROWS;
30
+ }
31
+ /**
32
+ * Check if a piece can be placed at a position
33
+ */
34
+ export function canPlace(board, piece, position) {
35
+ for (let row = 0; row < piece.shape.length; row++) {
36
+ for (let col = 0; col < piece.shape[row].length; col++) {
37
+ if (piece.shape[row][col]) {
38
+ const boardX = position.x + col;
39
+ const boardY = position.y + row;
40
+ // Check bounds
41
+ if (!isInBounds(boardX, boardY)) {
42
+ return false;
43
+ }
44
+ // Check collision with existing pieces
45
+ if (board[boardY][boardX] !== 0) {
46
+ return false;
47
+ }
48
+ }
49
+ }
50
+ }
51
+ return true;
52
+ }
53
+ /**
54
+ * Place a piece on the board (mutates board)
55
+ */
56
+ export function placePiece(board, piece, position) {
57
+ for (let row = 0; row < piece.shape.length; row++) {
58
+ for (let col = 0; col < piece.shape[row].length; col++) {
59
+ if (piece.shape[row][col]) {
60
+ const boardX = position.x + col;
61
+ const boardY = position.y + row;
62
+ if (isInBounds(boardX, boardY)) {
63
+ board[boardY][boardX] = piece.color;
64
+ }
65
+ }
66
+ }
67
+ }
68
+ }
69
+ /**
70
+ * Check for and clear completed lines
71
+ * Returns the number of lines cleared
72
+ */
73
+ export function clearLines(board) {
74
+ let linesCleared = 0;
75
+ // Check from bottom to top
76
+ for (let row = BOARD_HEIGHT + HIDDEN_ROWS - 1; row >= 0; row--) {
77
+ if (isLineFull(board, row)) {
78
+ // Remove the line
79
+ board.splice(row, 1);
80
+ // Add a new empty line at the top
81
+ board.unshift(new Array(BOARD_WIDTH).fill(0));
82
+ linesCleared++;
83
+ // Check the same row again (since we shifted down)
84
+ row++;
85
+ }
86
+ }
87
+ return linesCleared;
88
+ }
89
+ /**
90
+ * Check if a line is full
91
+ */
92
+ function isLineFull(board, row) {
93
+ return board[row].every(cell => cell !== 0);
94
+ }
95
+ /**
96
+ * Get the spawn position for a new piece
97
+ */
98
+ export function getSpawnPosition(piece) {
99
+ // Center horizontally
100
+ const x = Math.floor((BOARD_WIDTH - piece.shape[0].length) / 2);
101
+ // Start at top (in hidden area)
102
+ const y = 0;
103
+ return { x, y };
104
+ }
105
+ /**
106
+ * Get the ghost piece position (where piece would land)
107
+ */
108
+ export function getGhostPosition(board, piece, position) {
109
+ let ghostY = position.y;
110
+ while (canPlace(board, piece, { x: position.x, y: ghostY + 1 })) {
111
+ ghostY++;
112
+ }
113
+ return { x: position.x, y: ghostY };
114
+ }
115
+ /**
116
+ * Check if the game is over (piece can't spawn)
117
+ */
118
+ export function isGameOver(board, piece) {
119
+ const spawnPos = getSpawnPosition(piece);
120
+ return !canPlace(board, piece, spawnPos);
121
+ }
122
+ /**
123
+ * Calculate drop distance for hard drop scoring
124
+ */
125
+ export function getDropDistance(board, piece, position) {
126
+ const ghostPos = getGhostPosition(board, piece, position);
127
+ return ghostPos.y - position.y;
128
+ }
129
+ /**
130
+ * Clone a board (for preview/undo)
131
+ */
132
+ export function cloneBoard(board) {
133
+ return board.map(row => [...row]);
134
+ }
135
+ /**
136
+ * Get the board with current piece overlaid (for rendering)
137
+ */
138
+ export function getBoardWithPiece(board, piece, position, showGhost = true) {
139
+ const display = cloneBoard(board);
140
+ if (piece && position) {
141
+ // Draw ghost piece first (if enabled)
142
+ if (showGhost) {
143
+ const ghostPos = getGhostPosition(board, piece, position);
144
+ for (let row = 0; row < piece.shape.length; row++) {
145
+ for (let col = 0; col < piece.shape[row].length; col++) {
146
+ if (piece.shape[row][col]) {
147
+ const boardX = ghostPos.x + col;
148
+ const boardY = ghostPos.y + row;
149
+ if (isInBounds(boardX, boardY) && display[boardY][boardX] === 0) {
150
+ display[boardY][boardX] = -piece.color; // Negative for ghost
151
+ }
152
+ }
153
+ }
154
+ }
155
+ }
156
+ // Draw actual piece
157
+ for (let row = 0; row < piece.shape.length; row++) {
158
+ for (let col = 0; col < piece.shape[row].length; col++) {
159
+ if (piece.shape[row][col]) {
160
+ const boardX = position.x + col;
161
+ const boardY = position.y + row;
162
+ if (isInBounds(boardX, boardY)) {
163
+ display[boardY][boardX] = piece.color;
164
+ }
165
+ }
166
+ }
167
+ }
168
+ }
169
+ return display;
170
+ }
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Tetris Game
3
+ *
4
+ * The main Tetris game implementation.
5
+ */
6
+ import { GameBase } from "../game-base.js";
7
+ import { type Board, type Position } from "./board.js";
8
+ import { type Piece, type PieceType } from "./pieces.js";
9
+ export interface TetrisState {
10
+ board: Board;
11
+ currentPiece: Piece | null;
12
+ nextPiece: Piece | null;
13
+ heldPiece: Piece | null;
14
+ canHold: boolean;
15
+ position: Position;
16
+ rotation: number;
17
+ score: number;
18
+ level: number;
19
+ lines: number;
20
+ gameOver: boolean;
21
+ pieceBag: PieceType[];
22
+ }
23
+ export declare class TetrisGame extends GameBase {
24
+ private readonly state;
25
+ private dropTimer;
26
+ private dropInterval;
27
+ private readonly colors;
28
+ private softDropping;
29
+ private enteringInitials;
30
+ private initials;
31
+ private initialIndex;
32
+ private finalScore;
33
+ private finalLevel;
34
+ private showingPreGame;
35
+ private isNewRecord;
36
+ constructor();
37
+ /**
38
+ * Create initial game state
39
+ */
40
+ private createInitialState;
41
+ /**
42
+ * Get next piece from bag (refill if empty)
43
+ */
44
+ private getNextPiece;
45
+ /**
46
+ * Spawn a new piece
47
+ */
48
+ private spawnPiece;
49
+ /**
50
+ * Move piece horizontally
51
+ */
52
+ private move;
53
+ /**
54
+ * Move piece down (soft drop)
55
+ */
56
+ private moveDown;
57
+ /**
58
+ * Rotate piece
59
+ */
60
+ private rotate;
61
+ /**
62
+ * Hard drop - instantly place piece
63
+ */
64
+ private hardDrop;
65
+ /**
66
+ * Lock piece in place and check for line clears
67
+ * Returns true if game ended
68
+ */
69
+ private lockPiece;
70
+ /**
71
+ * Hold piece
72
+ */
73
+ private holdPiece;
74
+ /**
75
+ * Update drop speed based on level
76
+ */
77
+ private updateDropSpeed;
78
+ /**
79
+ * Handle game over - check for high score
80
+ */
81
+ private handleGameOver;
82
+ /**
83
+ * Submit high score
84
+ */
85
+ private submitHighScore;
86
+ protected onStart(): void;
87
+ /**
88
+ * Start the actual game (after pre-game screen)
89
+ */
90
+ private startGame;
91
+ protected onQuit(): void;
92
+ protected onPause(): void;
93
+ protected onResume(): void;
94
+ protected onKeyPress(key: string, raw: Buffer): void;
95
+ private handleInitialsInput;
96
+ protected update(delta: number): void;
97
+ protected render(): void;
98
+ private drawBoard;
99
+ private drawSidePanel;
100
+ private drawPiecePreview;
101
+ private drawPauseOverlay;
102
+ private drawGameOverOverlay;
103
+ private drawHighScoreEntry;
104
+ private drawPreGameScreen;
105
+ }
106
+ /**
107
+ * Launch Tetris game
108
+ */
109
+ export declare function playTetris(): Promise<void>;