@compilr-dev/cli 0.5.0 → 0.5.1

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