@subimpact/e 0.100.0 → 0.100.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 (911) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/README.md +7 -1
  3. package/dist/bundle/chunks/{chunk-KAXC2ESR.js → chunk-GICF34HK.js} +8 -8
  4. package/dist/bundle/chunks/{chunk-FBZU53S6.js → chunk-NBSSK56J.js} +1 -1
  5. package/dist/bundle/chunks/{chunk-QSDAQKAU.js → chunk-RAB4RJZ2.js} +11 -12
  6. package/dist/bundle/chunks/{easter-egg-3d-DD22MRM3.js → easter-egg-3d-JQPBRQEU.js} +1 -1
  7. package/dist/bundle/chunks/{openai-codex-responses-YOLBMQOC.js → openai-codex-responses-WGH4GHLE.js} +1 -1
  8. package/dist/bundle/chunks/{virtual-modules-YQUQNKDN.js → virtual-modules-L22CHFWU.js} +1 -1
  9. package/dist/bundle/cli-runtime.js +1 -1
  10. package/dist/bundle/index.js +1 -1
  11. package/dist/bundle/rpc-entry.js +1 -1
  12. package/docs/compaction.md +2 -2
  13. package/docs/extensions.md +4 -10
  14. package/docs/message-types.md +2 -4
  15. package/docs/session-format.md +4 -4
  16. package/docs/settings.md +1 -1
  17. package/docs/tui.md +1 -1
  18. package/examples/extensions/overlay-test.ts +2 -2
  19. package/package.json +31 -31
  20. package/dist/bun/cli.d.ts +0 -5
  21. package/dist/bun/cli.d.ts.map +0 -1
  22. package/dist/bun/cli.js +0 -5
  23. package/dist/bun/cli.js.map +0 -1
  24. package/dist/bun/restore-sandbox-env.d.ts +0 -17
  25. package/dist/bun/restore-sandbox-env.d.ts.map +0 -1
  26. package/dist/bun/restore-sandbox-env.js +0 -36
  27. package/dist/bun/restore-sandbox-env.js.map +0 -1
  28. package/dist/bun/runtime-setup.d.ts +0 -2
  29. package/dist/bun/runtime-setup.d.ts.map +0 -1
  30. package/dist/bun/runtime-setup.js +0 -9
  31. package/dist/bun/runtime-setup.js.map +0 -1
  32. package/dist/bun/sandbox-env-setup.d.ts +0 -2
  33. package/dist/bun/sandbox-env-setup.d.ts.map +0 -1
  34. package/dist/bun/sandbox-env-setup.js +0 -4
  35. package/dist/bun/sandbox-env-setup.js.map +0 -1
  36. package/dist/cli/args.d.ts +0 -61
  37. package/dist/cli/args.d.ts.map +0 -1
  38. package/dist/cli/args.js +0 -453
  39. package/dist/cli/args.js.map +0 -1
  40. package/dist/cli/auth-check.d.ts +0 -19
  41. package/dist/cli/auth-check.d.ts.map +0 -1
  42. package/dist/cli/auth-check.js +0 -50
  43. package/dist/cli/auth-check.js.map +0 -1
  44. package/dist/cli/auth-command.d.ts +0 -24
  45. package/dist/cli/auth-command.d.ts.map +0 -1
  46. package/dist/cli/auth-command.js +0 -103
  47. package/dist/cli/auth-command.js.map +0 -1
  48. package/dist/cli/config-selector.d.ts +0 -16
  49. package/dist/cli/config-selector.d.ts.map +0 -1
  50. package/dist/cli/config-selector.js +0 -32
  51. package/dist/cli/config-selector.js.map +0 -1
  52. package/dist/cli/credential-print.d.ts +0 -13
  53. package/dist/cli/credential-print.d.ts.map +0 -1
  54. package/dist/cli/credential-print.js +0 -76
  55. package/dist/cli/credential-print.js.map +0 -1
  56. package/dist/cli/file-processor.d.ts +0 -15
  57. package/dist/cli/file-processor.d.ts.map +0 -1
  58. package/dist/cli/file-processor.js +0 -71
  59. package/dist/cli/file-processor.js.map +0 -1
  60. package/dist/cli/initial-message.d.ts +0 -18
  61. package/dist/cli/initial-message.d.ts.map +0 -1
  62. package/dist/cli/initial-message.js +0 -22
  63. package/dist/cli/initial-message.js.map +0 -1
  64. package/dist/cli/list-models.d.ts +0 -9
  65. package/dist/cli/list-models.d.ts.map +0 -1
  66. package/dist/cli/list-models.js +0 -98
  67. package/dist/cli/list-models.js.map +0 -1
  68. package/dist/cli/project-trust.d.ts +0 -10
  69. package/dist/cli/project-trust.d.ts.map +0 -1
  70. package/dist/cli/project-trust.js +0 -48
  71. package/dist/cli/project-trust.js.map +0 -1
  72. package/dist/cli/session-picker.d.ts +0 -10
  73. package/dist/cli/session-picker.d.ts.map +0 -1
  74. package/dist/cli/session-picker.js +0 -36
  75. package/dist/cli/session-picker.js.map +0 -1
  76. package/dist/cli/setup.d.ts +0 -2
  77. package/dist/cli/setup.d.ts.map +0 -1
  78. package/dist/cli/setup.js +0 -12
  79. package/dist/cli/setup.js.map +0 -1
  80. package/dist/cli/startup-ui.d.ts +0 -20
  81. package/dist/cli/startup-ui.d.ts.map +0 -1
  82. package/dist/cli/startup-ui.js +0 -193
  83. package/dist/cli/startup-ui.js.map +0 -1
  84. package/dist/cli.d.ts +0 -3
  85. package/dist/cli.d.ts.map +0 -1
  86. package/dist/cli.js +0 -6
  87. package/dist/cli.js.map +0 -1
  88. package/dist/config.d.ts +0 -107
  89. package/dist/config.d.ts.map +0 -1
  90. package/dist/config.js +0 -486
  91. package/dist/config.js.map +0 -1
  92. package/dist/core/agent-session-runtime.d.ts +0 -119
  93. package/dist/core/agent-session-runtime.d.ts.map +0 -1
  94. package/dist/core/agent-session-runtime.js +0 -317
  95. package/dist/core/agent-session-runtime.js.map +0 -1
  96. package/dist/core/agent-session-services.d.ts +0 -86
  97. package/dist/core/agent-session-services.d.ts.map +0 -1
  98. package/dist/core/agent-session-services.js +0 -147
  99. package/dist/core/agent-session-services.js.map +0 -1
  100. package/dist/core/agent-session.d.ts +0 -859
  101. package/dist/core/agent-session.d.ts.map +0 -1
  102. package/dist/core/agent-session.js +0 -3416
  103. package/dist/core/agent-session.js.map +0 -1
  104. package/dist/core/auth-guidance.d.ts +0 -5
  105. package/dist/core/auth-guidance.d.ts.map +0 -1
  106. package/dist/core/auth-guidance.js +0 -21
  107. package/dist/core/auth-guidance.js.map +0 -1
  108. package/dist/core/auth-storage.d.ts +0 -72
  109. package/dist/core/auth-storage.d.ts.map +0 -1
  110. package/dist/core/auth-storage.js +0 -426
  111. package/dist/core/auth-storage.js.map +0 -1
  112. package/dist/core/bash-executor.d.ts +0 -32
  113. package/dist/core/bash-executor.d.ts.map +0 -1
  114. package/dist/core/bash-executor.js +0 -106
  115. package/dist/core/bash-executor.js.map +0 -1
  116. package/dist/core/bug-report-upload.d.ts +0 -12
  117. package/dist/core/bug-report-upload.d.ts.map +0 -1
  118. package/dist/core/bug-report-upload.js +0 -22
  119. package/dist/core/bug-report-upload.js.map +0 -1
  120. package/dist/core/bug-report.d.ts +0 -176
  121. package/dist/core/bug-report.d.ts.map +0 -1
  122. package/dist/core/bug-report.js +0 -292
  123. package/dist/core/bug-report.js.map +0 -1
  124. package/dist/core/cache-stats.d.ts +0 -49
  125. package/dist/core/cache-stats.d.ts.map +0 -1
  126. package/dist/core/cache-stats.js +0 -112
  127. package/dist/core/cache-stats.js.map +0 -1
  128. package/dist/core/cache-warmer.d.ts +0 -103
  129. package/dist/core/cache-warmer.d.ts.map +0 -1
  130. package/dist/core/cache-warmer.js +0 -359
  131. package/dist/core/cache-warmer.js.map +0 -1
  132. package/dist/core/compaction/branch-summarization.d.ts +0 -98
  133. package/dist/core/compaction/branch-summarization.d.ts.map +0 -1
  134. package/dist/core/compaction/branch-summarization.js +0 -251
  135. package/dist/core/compaction/branch-summarization.js.map +0 -1
  136. package/dist/core/compaction/compaction.d.ts +0 -145
  137. package/dist/core/compaction/compaction.d.ts.map +0 -1
  138. package/dist/core/compaction/compaction.js +0 -744
  139. package/dist/core/compaction/compaction.js.map +0 -1
  140. package/dist/core/compaction/index.d.ts +0 -7
  141. package/dist/core/compaction/index.d.ts.map +0 -1
  142. package/dist/core/compaction/index.js +0 -7
  143. package/dist/core/compaction/index.js.map +0 -1
  144. package/dist/core/compaction/utils.d.ts +0 -39
  145. package/dist/core/compaction/utils.d.ts.map +0 -1
  146. package/dist/core/compaction/utils.js +0 -149
  147. package/dist/core/compaction/utils.js.map +0 -1
  148. package/dist/core/crash-log.d.ts +0 -27
  149. package/dist/core/crash-log.d.ts.map +0 -1
  150. package/dist/core/crash-log.js +0 -140
  151. package/dist/core/crash-log.js.map +0 -1
  152. package/dist/core/defaults.d.ts +0 -4
  153. package/dist/core/defaults.d.ts.map +0 -1
  154. package/dist/core/defaults.js +0 -11
  155. package/dist/core/defaults.js.map +0 -1
  156. package/dist/core/diagnostics.d.ts +0 -15
  157. package/dist/core/diagnostics.d.ts.map +0 -1
  158. package/dist/core/diagnostics.js +0 -2
  159. package/dist/core/diagnostics.js.map +0 -1
  160. package/dist/core/event-bus.d.ts +0 -9
  161. package/dist/core/event-bus.d.ts.map +0 -1
  162. package/dist/core/event-bus.js +0 -25
  163. package/dist/core/event-bus.js.map +0 -1
  164. package/dist/core/exec.d.ts +0 -29
  165. package/dist/core/exec.d.ts.map +0 -1
  166. package/dist/core/exec.js +0 -75
  167. package/dist/core/exec.js.map +0 -1
  168. package/dist/core/experimental.d.ts +0 -2
  169. package/dist/core/experimental.d.ts.map +0 -1
  170. package/dist/core/experimental.js +0 -6
  171. package/dist/core/experimental.js.map +0 -1
  172. package/dist/core/export-html/ansi-to-html.d.ts +0 -22
  173. package/dist/core/export-html/ansi-to-html.d.ts.map +0 -1
  174. package/dist/core/export-html/ansi-to-html.js +0 -249
  175. package/dist/core/export-html/ansi-to-html.js.map +0 -1
  176. package/dist/core/export-html/index.d.ts +0 -37
  177. package/dist/core/export-html/index.d.ts.map +0 -1
  178. package/dist/core/export-html/index.js +0 -226
  179. package/dist/core/export-html/index.js.map +0 -1
  180. package/dist/core/export-html/tool-renderer.d.ts +0 -34
  181. package/dist/core/export-html/tool-renderer.d.ts.map +0 -1
  182. package/dist/core/export-html/tool-renderer.js +0 -109
  183. package/dist/core/export-html/tool-renderer.js.map +0 -1
  184. package/dist/core/extensions/compat-check.d.ts +0 -26
  185. package/dist/core/extensions/compat-check.d.ts.map +0 -1
  186. package/dist/core/extensions/compat-check.js +0 -129
  187. package/dist/core/extensions/compat-check.js.map +0 -1
  188. package/dist/core/extensions/index.d.ts +0 -12
  189. package/dist/core/extensions/index.d.ts.map +0 -1
  190. package/dist/core/extensions/index.js +0 -9
  191. package/dist/core/extensions/index.js.map +0 -1
  192. package/dist/core/extensions/jiti-loader.d.ts +0 -2
  193. package/dist/core/extensions/jiti-loader.d.ts.map +0 -1
  194. package/dist/core/extensions/jiti-loader.js +0 -4
  195. package/dist/core/extensions/jiti-loader.js.map +0 -1
  196. package/dist/core/extensions/jiti-static-loader.d.ts +0 -2
  197. package/dist/core/extensions/jiti-static-loader.d.ts.map +0 -1
  198. package/dist/core/extensions/jiti-static-loader.js +0 -4
  199. package/dist/core/extensions/jiti-static-loader.js.map +0 -1
  200. package/dist/core/extensions/loader.d.ts +0 -23
  201. package/dist/core/extensions/loader.d.ts.map +0 -1
  202. package/dist/core/extensions/loader.js +0 -689
  203. package/dist/core/extensions/loader.js.map +0 -1
  204. package/dist/core/extensions/runner.d.ts +0 -204
  205. package/dist/core/extensions/runner.d.ts.map +0 -1
  206. package/dist/core/extensions/runner.js +0 -1207
  207. package/dist/core/extensions/runner.js.map +0 -1
  208. package/dist/core/extensions/types.d.ts +0 -1623
  209. package/dist/core/extensions/types.d.ts.map +0 -1
  210. package/dist/core/extensions/types.js +0 -48
  211. package/dist/core/extensions/types.js.map +0 -1
  212. package/dist/core/extensions/virtual-modules.d.ts +0 -3
  213. package/dist/core/extensions/virtual-modules.d.ts.map +0 -1
  214. package/dist/core/extensions/virtual-modules.js +0 -38
  215. package/dist/core/extensions/virtual-modules.js.map +0 -1
  216. package/dist/core/extensions/wrapper.d.ts +0 -20
  217. package/dist/core/extensions/wrapper.d.ts.map +0 -1
  218. package/dist/core/extensions/wrapper.js +0 -22
  219. package/dist/core/extensions/wrapper.js.map +0 -1
  220. package/dist/core/footer-data-provider.d.ts +0 -64
  221. package/dist/core/footer-data-provider.d.ts.map +0 -1
  222. package/dist/core/footer-data-provider.js +0 -338
  223. package/dist/core/footer-data-provider.js.map +0 -1
  224. package/dist/core/http-dispatcher.d.ts +0 -22
  225. package/dist/core/http-dispatcher.d.ts.map +0 -1
  226. package/dist/core/http-dispatcher.js +0 -98
  227. package/dist/core/http-dispatcher.js.map +0 -1
  228. package/dist/core/index.d.ts +0 -14
  229. package/dist/core/index.d.ts.map +0 -1
  230. package/dist/core/index.js +0 -13
  231. package/dist/core/index.js.map +0 -1
  232. package/dist/core/keybindings.d.ts +0 -428
  233. package/dist/core/keybindings.d.ts.map +0 -1
  234. package/dist/core/keybindings.js +0 -321
  235. package/dist/core/keybindings.js.map +0 -1
  236. package/dist/core/messages.d.ts +0 -77
  237. package/dist/core/messages.d.ts.map +0 -1
  238. package/dist/core/messages.js +0 -124
  239. package/dist/core/messages.js.map +0 -1
  240. package/dist/core/model-config.d.ts +0 -760
  241. package/dist/core/model-config.d.ts.map +0 -1
  242. package/dist/core/model-config.js +0 -294
  243. package/dist/core/model-config.js.map +0 -1
  244. package/dist/core/model-registry.d.ts +0 -61
  245. package/dist/core/model-registry.d.ts.map +0 -1
  246. package/dist/core/model-registry.js +0 -140
  247. package/dist/core/model-registry.js.map +0 -1
  248. package/dist/core/model-resolver.d.ts +0 -124
  249. package/dist/core/model-resolver.d.ts.map +0 -1
  250. package/dist/core/model-resolver.js +0 -590
  251. package/dist/core/model-resolver.js.map +0 -1
  252. package/dist/core/model-runtime.d.ts +0 -145
  253. package/dist/core/model-runtime.d.ts.map +0 -1
  254. package/dist/core/model-runtime.js +0 -758
  255. package/dist/core/model-runtime.js.map +0 -1
  256. package/dist/core/models-store.d.ts +0 -22
  257. package/dist/core/models-store.d.ts.map +0 -1
  258. package/dist/core/models-store.js +0 -115
  259. package/dist/core/models-store.js.map +0 -1
  260. package/dist/core/nested-tool-calls.d.ts +0 -102
  261. package/dist/core/nested-tool-calls.d.ts.map +0 -1
  262. package/dist/core/nested-tool-calls.js +0 -178
  263. package/dist/core/nested-tool-calls.js.map +0 -1
  264. package/dist/core/output-guard.d.ts +0 -7
  265. package/dist/core/output-guard.d.ts.map +0 -1
  266. package/dist/core/output-guard.js +0 -89
  267. package/dist/core/output-guard.js.map +0 -1
  268. package/dist/core/package-manager.d.ts +0 -222
  269. package/dist/core/package-manager.d.ts.map +0 -1
  270. package/dist/core/package-manager.js +0 -2258
  271. package/dist/core/package-manager.js.map +0 -1
  272. package/dist/core/pi-manifest.d.ts +0 -8
  273. package/dist/core/pi-manifest.d.ts.map +0 -1
  274. package/dist/core/pi-manifest.js +0 -26
  275. package/dist/core/pi-manifest.js.map +0 -1
  276. package/dist/core/project-trust.d.ts +0 -15
  277. package/dist/core/project-trust.d.ts.map +0 -1
  278. package/dist/core/project-trust.js +0 -59
  279. package/dist/core/project-trust.js.map +0 -1
  280. package/dist/core/prompt-templates.d.ts +0 -59
  281. package/dist/core/prompt-templates.d.ts.map +0 -1
  282. package/dist/core/prompt-templates.js +0 -262
  283. package/dist/core/prompt-templates.js.map +0 -1
  284. package/dist/core/provider-attribution.d.ts +0 -4
  285. package/dist/core/provider-attribution.d.ts.map +0 -1
  286. package/dist/core/provider-attribution.js +0 -72
  287. package/dist/core/provider-attribution.js.map +0 -1
  288. package/dist/core/provider-composer.d.ts +0 -80
  289. package/dist/core/provider-composer.d.ts.map +0 -1
  290. package/dist/core/provider-composer.js +0 -488
  291. package/dist/core/provider-composer.js.map +0 -1
  292. package/dist/core/radius.d.ts +0 -5
  293. package/dist/core/radius.d.ts.map +0 -1
  294. package/dist/core/radius.js +0 -9
  295. package/dist/core/radius.js.map +0 -1
  296. package/dist/core/remote-catalog-provider.d.ts +0 -12
  297. package/dist/core/remote-catalog-provider.d.ts.map +0 -1
  298. package/dist/core/remote-catalog-provider.js +0 -132
  299. package/dist/core/remote-catalog-provider.js.map +0 -1
  300. package/dist/core/resolve-config-value.d.ts +0 -30
  301. package/dist/core/resolve-config-value.d.ts.map +0 -1
  302. package/dist/core/resolve-config-value.js +0 -247
  303. package/dist/core/resolve-config-value.js.map +0 -1
  304. package/dist/core/resource-loader.d.ts +0 -227
  305. package/dist/core/resource-loader.d.ts.map +0 -1
  306. package/dist/core/resource-loader.js +0 -1008
  307. package/dist/core/resource-loader.js.map +0 -1
  308. package/dist/core/runtime-credentials.d.ts +0 -15
  309. package/dist/core/runtime-credentials.d.ts.map +0 -1
  310. package/dist/core/runtime-credentials.js +0 -39
  311. package/dist/core/runtime-credentials.js.map +0 -1
  312. package/dist/core/sdk.d.ts +0 -108
  313. package/dist/core/sdk.d.ts.map +0 -1
  314. package/dist/core/sdk.js +0 -315
  315. package/dist/core/sdk.js.map +0 -1
  316. package/dist/core/session-cwd.d.ts +0 -19
  317. package/dist/core/session-cwd.d.ts.map +0 -1
  318. package/dist/core/session-cwd.js +0 -38
  319. package/dist/core/session-cwd.js.map +0 -1
  320. package/dist/core/session-export.d.ts +0 -8
  321. package/dist/core/session-export.d.ts.map +0 -1
  322. package/dist/core/session-export.js +0 -33
  323. package/dist/core/session-export.js.map +0 -1
  324. package/dist/core/session-manager.d.ts +0 -416
  325. package/dist/core/session-manager.d.ts.map +0 -1
  326. package/dist/core/session-manager.js +0 -1537
  327. package/dist/core/session-manager.js.map +0 -1
  328. package/dist/core/settings-diagnostics.d.ts +0 -9
  329. package/dist/core/settings-diagnostics.d.ts.map +0 -1
  330. package/dist/core/settings-diagnostics.js +0 -21
  331. package/dist/core/settings-diagnostics.js.map +0 -1
  332. package/dist/core/settings-manager.d.ts +0 -362
  333. package/dist/core/settings-manager.d.ts.map +0 -1
  334. package/dist/core/settings-manager.js +0 -1107
  335. package/dist/core/settings-manager.js.map +0 -1
  336. package/dist/core/skills.d.ts +0 -60
  337. package/dist/core/skills.d.ts.map +0 -1
  338. package/dist/core/skills.js +0 -407
  339. package/dist/core/skills.js.map +0 -1
  340. package/dist/core/slash-commands.d.ts +0 -15
  341. package/dist/core/slash-commands.d.ts.map +0 -1
  342. package/dist/core/slash-commands.js +0 -28
  343. package/dist/core/slash-commands.js.map +0 -1
  344. package/dist/core/source-info.d.ts +0 -26
  345. package/dist/core/source-info.d.ts.map +0 -1
  346. package/dist/core/source-info.js +0 -35
  347. package/dist/core/source-info.js.map +0 -1
  348. package/dist/core/system-prompt.d.ts +0 -71
  349. package/dist/core/system-prompt.d.ts.map +0 -1
  350. package/dist/core/system-prompt.js +0 -147
  351. package/dist/core/system-prompt.js.map +0 -1
  352. package/dist/core/telemetry.d.ts +0 -3
  353. package/dist/core/telemetry.d.ts.map +0 -1
  354. package/dist/core/telemetry.js +0 -10
  355. package/dist/core/telemetry.js.map +0 -1
  356. package/dist/core/timings.d.ts +0 -6
  357. package/dist/core/timings.d.ts.map +0 -1
  358. package/dist/core/timings.js +0 -42
  359. package/dist/core/timings.js.map +0 -1
  360. package/dist/core/tools/bash.d.ts +0 -101
  361. package/dist/core/tools/bash.d.ts.map +0 -1
  362. package/dist/core/tools/bash.js +0 -348
  363. package/dist/core/tools/bash.js.map +0 -1
  364. package/dist/core/tools/edit-diff.d.ts +0 -101
  365. package/dist/core/tools/edit-diff.d.ts.map +0 -1
  366. package/dist/core/tools/edit-diff.js +0 -421
  367. package/dist/core/tools/edit-diff.js.map +0 -1
  368. package/dist/core/tools/edit.d.ts +0 -44
  369. package/dist/core/tools/edit.d.ts.map +0 -1
  370. package/dist/core/tools/edit.js +0 -147
  371. package/dist/core/tools/edit.js.map +0 -1
  372. package/dist/core/tools/file-mutation-queue.d.ts +0 -6
  373. package/dist/core/tools/file-mutation-queue.d.ts.map +0 -1
  374. package/dist/core/tools/file-mutation-queue.js +0 -52
  375. package/dist/core/tools/file-mutation-queue.js.map +0 -1
  376. package/dist/core/tools/find.d.ts +0 -42
  377. package/dist/core/tools/find.d.ts.map +0 -1
  378. package/dist/core/tools/find.js +0 -251
  379. package/dist/core/tools/find.js.map +0 -1
  380. package/dist/core/tools/grep.d.ts +0 -41
  381. package/dist/core/tools/grep.d.ts.map +0 -1
  382. package/dist/core/tools/grep.js +0 -252
  383. package/dist/core/tools/grep.js.map +0 -1
  384. package/dist/core/tools/index.d.ts +0 -43
  385. package/dist/core/tools/index.d.ts.map +0 -1
  386. package/dist/core/tools/index.js +0 -129
  387. package/dist/core/tools/index.js.map +0 -1
  388. package/dist/core/tools/ls.d.ts +0 -41
  389. package/dist/core/tools/ls.d.ts.map +0 -1
  390. package/dist/core/tools/ls.js +0 -126
  391. package/dist/core/tools/ls.js.map +0 -1
  392. package/dist/core/tools/output-accumulator.d.ts +0 -63
  393. package/dist/core/tools/output-accumulator.d.ts.map +0 -1
  394. package/dist/core/tools/output-accumulator.js +0 -220
  395. package/dist/core/tools/output-accumulator.js.map +0 -1
  396. package/dist/core/tools/path-utils.d.ts +0 -10
  397. package/dist/core/tools/path-utils.d.ts.map +0 -1
  398. package/dist/core/tools/path-utils.js +0 -99
  399. package/dist/core/tools/path-utils.js.map +0 -1
  400. package/dist/core/tools/powershell.d.ts +0 -16
  401. package/dist/core/tools/powershell.d.ts.map +0 -1
  402. package/dist/core/tools/powershell.js +0 -39
  403. package/dist/core/tools/powershell.js.map +0 -1
  404. package/dist/core/tools/read.d.ts +0 -42
  405. package/dist/core/tools/read.d.ts.map +0 -1
  406. package/dist/core/tools/read.js +0 -169
  407. package/dist/core/tools/read.js.map +0 -1
  408. package/dist/core/tools/render-utils.d.ts +0 -30
  409. package/dist/core/tools/render-utils.d.ts.map +0 -1
  410. package/dist/core/tools/render-utils.js +0 -91
  411. package/dist/core/tools/render-utils.js.map +0 -1
  412. package/dist/core/tools/renderers/bash.d.ts +0 -12
  413. package/dist/core/tools/renderers/bash.d.ts.map +0 -1
  414. package/dist/core/tools/renderers/bash.js +0 -117
  415. package/dist/core/tools/renderers/bash.js.map +0 -1
  416. package/dist/core/tools/renderers/edit.d.ts +0 -23
  417. package/dist/core/tools/renderers/edit.d.ts.map +0 -1
  418. package/dist/core/tools/renderers/edit.js +0 -168
  419. package/dist/core/tools/renderers/edit.js.map +0 -1
  420. package/dist/core/tools/renderers/find.d.ts +0 -10
  421. package/dist/core/tools/renderers/find.d.ts.map +0 -1
  422. package/dist/core/tools/renderers/find.js +0 -64
  423. package/dist/core/tools/renderers/find.js.map +0 -1
  424. package/dist/core/tools/renderers/grep.d.ts +0 -10
  425. package/dist/core/tools/renderers/grep.d.ts.map +0 -1
  426. package/dist/core/tools/renderers/grep.js +0 -69
  427. package/dist/core/tools/renderers/grep.js.map +0 -1
  428. package/dist/core/tools/renderers/index.d.ts +0 -28
  429. package/dist/core/tools/renderers/index.d.ts.map +0 -1
  430. package/dist/core/tools/renderers/index.js +0 -47
  431. package/dist/core/tools/renderers/index.js.map +0 -1
  432. package/dist/core/tools/renderers/ls.d.ts +0 -10
  433. package/dist/core/tools/renderers/ls.d.ts.map +0 -1
  434. package/dist/core/tools/renderers/ls.js +0 -58
  435. package/dist/core/tools/renderers/ls.js.map +0 -1
  436. package/dist/core/tools/renderers/read.d.ts +0 -11
  437. package/dist/core/tools/renderers/read.d.ts.map +0 -1
  438. package/dist/core/tools/renderers/read.js +0 -130
  439. package/dist/core/tools/renderers/read.js.map +0 -1
  440. package/dist/core/tools/renderers/write.d.ts +0 -10
  441. package/dist/core/tools/renderers/write.d.ts.map +0 -1
  442. package/dist/core/tools/renderers/write.js +0 -153
  443. package/dist/core/tools/renderers/write.js.map +0 -1
  444. package/dist/core/tools/tool-definition-wrapper.d.ts +0 -16
  445. package/dist/core/tools/tool-definition-wrapper.d.ts.map +0 -1
  446. package/dist/core/tools/tool-definition-wrapper.js +0 -38
  447. package/dist/core/tools/tool-definition-wrapper.js.map +0 -1
  448. package/dist/core/tools/truncate.d.ts +0 -84
  449. package/dist/core/tools/truncate.d.ts.map +0 -1
  450. package/dist/core/tools/truncate.js +0 -244
  451. package/dist/core/tools/truncate.js.map +0 -1
  452. package/dist/core/tools/write.d.ts +0 -30
  453. package/dist/core/tools/write.d.ts.map +0 -1
  454. package/dist/core/tools/write.js +0 -61
  455. package/dist/core/tools/write.js.map +0 -1
  456. package/dist/core/trust-manager.d.ts +0 -36
  457. package/dist/core/trust-manager.d.ts.map +0 -1
  458. package/dist/core/trust-manager.js +0 -203
  459. package/dist/core/trust-manager.js.map +0 -1
  460. package/dist/core/usage-totals.d.ts +0 -21
  461. package/dist/core/usage-totals.d.ts.map +0 -1
  462. package/dist/core/usage-totals.js +0 -79
  463. package/dist/core/usage-totals.js.map +0 -1
  464. package/dist/core/virtual-models.d.ts +0 -117
  465. package/dist/core/virtual-models.d.ts.map +0 -1
  466. package/dist/core/virtual-models.js +0 -124
  467. package/dist/core/virtual-models.js.map +0 -1
  468. package/dist/extensions/index.d.ts +0 -3
  469. package/dist/extensions/index.d.ts.map +0 -1
  470. package/dist/extensions/index.js +0 -3
  471. package/dist/extensions/index.js.map +0 -1
  472. package/dist/extensions/llama/client.d.ts +0 -69
  473. package/dist/extensions/llama/client.d.ts.map +0 -1
  474. package/dist/extensions/llama/client.js +0 -313
  475. package/dist/extensions/llama/client.js.map +0 -1
  476. package/dist/extensions/llama/huggingface.d.ts +0 -23
  477. package/dist/extensions/llama/huggingface.d.ts.map +0 -1
  478. package/dist/extensions/llama/huggingface.js +0 -141
  479. package/dist/extensions/llama/huggingface.js.map +0 -1
  480. package/dist/extensions/llama/index.d.ts +0 -3
  481. package/dist/extensions/llama/index.d.ts.map +0 -1
  482. package/dist/extensions/llama/index.js +0 -219
  483. package/dist/extensions/llama/index.js.map +0 -1
  484. package/dist/extensions/llama/provider.d.ts +0 -12
  485. package/dist/extensions/llama/provider.d.ts.map +0 -1
  486. package/dist/extensions/llama/provider.js +0 -213
  487. package/dist/extensions/llama/provider.js.map +0 -1
  488. package/dist/extensions/llama/ui.d.ts +0 -42
  489. package/dist/extensions/llama/ui.d.ts.map +0 -1
  490. package/dist/extensions/llama/ui.js +0 -416
  491. package/dist/extensions/llama/ui.js.map +0 -1
  492. package/dist/index.d.ts +0 -38
  493. package/dist/index.d.ts.map +0 -1
  494. package/dist/index.js +0 -49
  495. package/dist/index.js.map +0 -1
  496. package/dist/main.d.ts +0 -16
  497. package/dist/main.d.ts.map +0 -1
  498. package/dist/main.js +0 -819
  499. package/dist/main.js.map +0 -1
  500. package/dist/migrations.d.ts +0 -33
  501. package/dist/migrations.d.ts.map +0 -1
  502. package/dist/migrations.js +0 -282
  503. package/dist/migrations.js.map +0 -1
  504. package/dist/modes/index.d.ts +0 -10
  505. package/dist/modes/index.d.ts.map +0 -1
  506. package/dist/modes/index.js +0 -8
  507. package/dist/modes/index.js.map +0 -1
  508. package/dist/modes/interactive/bug-report.d.ts +0 -16
  509. package/dist/modes/interactive/bug-report.d.ts.map +0 -1
  510. package/dist/modes/interactive/bug-report.js +0 -210
  511. package/dist/modes/interactive/bug-report.js.map +0 -1
  512. package/dist/modes/interactive/chat-viewport.d.ts +0 -20
  513. package/dist/modes/interactive/chat-viewport.d.ts.map +0 -1
  514. package/dist/modes/interactive/chat-viewport.js +0 -28
  515. package/dist/modes/interactive/chat-viewport.js.map +0 -1
  516. package/dist/modes/interactive/components/armin.d.ts +0 -37
  517. package/dist/modes/interactive/components/armin.d.ts.map +0 -1
  518. package/dist/modes/interactive/components/armin.js +0 -335
  519. package/dist/modes/interactive/components/armin.js.map +0 -1
  520. package/dist/modes/interactive/components/assistant-message.d.ts +0 -26
  521. package/dist/modes/interactive/components/assistant-message.d.ts.map +0 -1
  522. package/dist/modes/interactive/components/assistant-message.js +0 -158
  523. package/dist/modes/interactive/components/assistant-message.js.map +0 -1
  524. package/dist/modes/interactive/components/bash-execution.d.ts +0 -38
  525. package/dist/modes/interactive/components/bash-execution.d.ts.map +0 -1
  526. package/dist/modes/interactive/components/bash-execution.js +0 -178
  527. package/dist/modes/interactive/components/bash-execution.js.map +0 -1
  528. package/dist/modes/interactive/components/bordered-loader.d.ts +0 -16
  529. package/dist/modes/interactive/components/bordered-loader.d.ts.map +0 -1
  530. package/dist/modes/interactive/components/bordered-loader.js +0 -54
  531. package/dist/modes/interactive/components/bordered-loader.js.map +0 -1
  532. package/dist/modes/interactive/components/branch-summary-message.d.ts +0 -17
  533. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +0 -1
  534. package/dist/modes/interactive/components/branch-summary-message.js +0 -54
  535. package/dist/modes/interactive/components/branch-summary-message.js.map +0 -1
  536. package/dist/modes/interactive/components/compaction-summary-message.d.ts +0 -17
  537. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +0 -1
  538. package/dist/modes/interactive/components/compaction-summary-message.js +0 -55
  539. package/dist/modes/interactive/components/compaction-summary-message.js.map +0 -1
  540. package/dist/modes/interactive/components/config-selector.d.ts +0 -102
  541. package/dist/modes/interactive/components/config-selector.d.ts.map +0 -1
  542. package/dist/modes/interactive/components/config-selector.js +0 -771
  543. package/dist/modes/interactive/components/config-selector.js.map +0 -1
  544. package/dist/modes/interactive/components/countdown-timer.d.ts +0 -14
  545. package/dist/modes/interactive/components/countdown-timer.d.ts.map +0 -1
  546. package/dist/modes/interactive/components/countdown-timer.js +0 -33
  547. package/dist/modes/interactive/components/countdown-timer.js.map +0 -1
  548. package/dist/modes/interactive/components/custom-editor.d.ts +0 -30
  549. package/dist/modes/interactive/components/custom-editor.d.ts.map +0 -1
  550. package/dist/modes/interactive/components/custom-editor.js +0 -115
  551. package/dist/modes/interactive/components/custom-editor.js.map +0 -1
  552. package/dist/modes/interactive/components/custom-entry.d.ts +0 -21
  553. package/dist/modes/interactive/components/custom-entry.d.ts.map +0 -1
  554. package/dist/modes/interactive/components/custom-entry.js +0 -58
  555. package/dist/modes/interactive/components/custom-entry.js.map +0 -1
  556. package/dist/modes/interactive/components/custom-message.d.ts +0 -22
  557. package/dist/modes/interactive/components/custom-message.d.ts.map +0 -1
  558. package/dist/modes/interactive/components/custom-message.js +0 -88
  559. package/dist/modes/interactive/components/custom-message.js.map +0 -1
  560. package/dist/modes/interactive/components/diff.d.ts +0 -12
  561. package/dist/modes/interactive/components/diff.d.ts.map +0 -1
  562. package/dist/modes/interactive/components/diff.js +0 -133
  563. package/dist/modes/interactive/components/diff.js.map +0 -1
  564. package/dist/modes/interactive/components/dynamic-border.d.ts +0 -15
  565. package/dist/modes/interactive/components/dynamic-border.d.ts.map +0 -1
  566. package/dist/modes/interactive/components/dynamic-border.js +0 -21
  567. package/dist/modes/interactive/components/dynamic-border.js.map +0 -1
  568. package/dist/modes/interactive/components/e-logo.d.ts +0 -16
  569. package/dist/modes/interactive/components/e-logo.d.ts.map +0 -1
  570. package/dist/modes/interactive/components/e-logo.js +0 -29
  571. package/dist/modes/interactive/components/e-logo.js.map +0 -1
  572. package/dist/modes/interactive/components/earendil-announcement.d.ts +0 -5
  573. package/dist/modes/interactive/components/earendil-announcement.d.ts.map +0 -1
  574. package/dist/modes/interactive/components/earendil-announcement.js +0 -40
  575. package/dist/modes/interactive/components/earendil-announcement.js.map +0 -1
  576. package/dist/modes/interactive/components/easter-egg-3d.d.ts +0 -104
  577. package/dist/modes/interactive/components/easter-egg-3d.d.ts.map +0 -1
  578. package/dist/modes/interactive/components/easter-egg-3d.js +0 -1138
  579. package/dist/modes/interactive/components/easter-egg-3d.js.map +0 -1
  580. package/dist/modes/interactive/components/easter-egg-3d.lazy.d.ts +0 -6
  581. package/dist/modes/interactive/components/easter-egg-3d.lazy.d.ts.map +0 -1
  582. package/dist/modes/interactive/components/easter-egg-3d.lazy.js +0 -23
  583. package/dist/modes/interactive/components/easter-egg-3d.lazy.js.map +0 -1
  584. package/dist/modes/interactive/components/extension-editor.d.ts +0 -24
  585. package/dist/modes/interactive/components/extension-editor.d.ts.map +0 -1
  586. package/dist/modes/interactive/components/extension-editor.js +0 -103
  587. package/dist/modes/interactive/components/extension-editor.js.map +0 -1
  588. package/dist/modes/interactive/components/extension-input.d.ts +0 -25
  589. package/dist/modes/interactive/components/extension-input.d.ts.map +0 -1
  590. package/dist/modes/interactive/components/extension-input.js +0 -67
  591. package/dist/modes/interactive/components/extension-input.js.map +0 -1
  592. package/dist/modes/interactive/components/extension-selector.d.ts +0 -27
  593. package/dist/modes/interactive/components/extension-selector.d.ts.map +0 -1
  594. package/dist/modes/interactive/components/extension-selector.js +0 -87
  595. package/dist/modes/interactive/components/extension-selector.js.map +0 -1
  596. package/dist/modes/interactive/components/first-time-setup.d.ts +0 -25
  597. package/dist/modes/interactive/components/first-time-setup.d.ts.map +0 -1
  598. package/dist/modes/interactive/components/first-time-setup.js +0 -109
  599. package/dist/modes/interactive/components/first-time-setup.js.map +0 -1
  600. package/dist/modes/interactive/components/footer.d.ts +0 -39
  601. package/dist/modes/interactive/components/footer.d.ts.map +0 -1
  602. package/dist/modes/interactive/components/footer.js +0 -265
  603. package/dist/modes/interactive/components/footer.js.map +0 -1
  604. package/dist/modes/interactive/components/index.d.ts +0 -33
  605. package/dist/modes/interactive/components/index.d.ts.map +0 -1
  606. package/dist/modes/interactive/components/index.js +0 -34
  607. package/dist/modes/interactive/components/index.js.map +0 -1
  608. package/dist/modes/interactive/components/keybinding-hints.d.ts +0 -13
  609. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +0 -1
  610. package/dist/modes/interactive/components/keybinding-hints.js +0 -36
  611. package/dist/modes/interactive/components/keybinding-hints.js.map +0 -1
  612. package/dist/modes/interactive/components/login-dialog.d.ts +0 -52
  613. package/dist/modes/interactive/components/login-dialog.d.ts.map +0 -1
  614. package/dist/modes/interactive/components/login-dialog.js +0 -188
  615. package/dist/modes/interactive/components/login-dialog.js.map +0 -1
  616. package/dist/modes/interactive/components/markdown-transform.d.ts +0 -3
  617. package/dist/modes/interactive/components/markdown-transform.d.ts.map +0 -1
  618. package/dist/modes/interactive/components/markdown-transform.js +0 -19
  619. package/dist/modes/interactive/components/markdown-transform.js.map +0 -1
  620. package/dist/modes/interactive/components/mermaid.d.ts +0 -11
  621. package/dist/modes/interactive/components/mermaid.d.ts.map +0 -1
  622. package/dist/modes/interactive/components/mermaid.js +0 -75
  623. package/dist/modes/interactive/components/mermaid.js.map +0 -1
  624. package/dist/modes/interactive/components/model-selector.d.ts +0 -60
  625. package/dist/modes/interactive/components/model-selector.d.ts.map +0 -1
  626. package/dist/modes/interactive/components/model-selector.js +0 -361
  627. package/dist/modes/interactive/components/model-selector.js.map +0 -1
  628. package/dist/modes/interactive/components/oauth-selector.d.ts +0 -33
  629. package/dist/modes/interactive/components/oauth-selector.d.ts.map +0 -1
  630. package/dist/modes/interactive/components/oauth-selector.js +0 -163
  631. package/dist/modes/interactive/components/oauth-selector.js.map +0 -1
  632. package/dist/modes/interactive/components/scoped-models-selector.d.ts +0 -46
  633. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +0 -1
  634. package/dist/modes/interactive/components/scoped-models-selector.js +0 -326
  635. package/dist/modes/interactive/components/scoped-models-selector.js.map +0 -1
  636. package/dist/modes/interactive/components/session-selector-search.d.ts +0 -23
  637. package/dist/modes/interactive/components/session-selector-search.d.ts.map +0 -1
  638. package/dist/modes/interactive/components/session-selector-search.js +0 -155
  639. package/dist/modes/interactive/components/session-selector-search.js.map +0 -1
  640. package/dist/modes/interactive/components/session-selector.d.ts +0 -95
  641. package/dist/modes/interactive/components/session-selector.d.ts.map +0 -1
  642. package/dist/modes/interactive/components/session-selector.js +0 -893
  643. package/dist/modes/interactive/components/session-selector.js.map +0 -1
  644. package/dist/modes/interactive/components/settings-selector.d.ts +0 -96
  645. package/dist/modes/interactive/components/settings-selector.d.ts.map +0 -1
  646. package/dist/modes/interactive/components/settings-selector.js +0 -742
  647. package/dist/modes/interactive/components/settings-selector.js.map +0 -1
  648. package/dist/modes/interactive/components/settings-submenu.d.ts +0 -72
  649. package/dist/modes/interactive/components/settings-submenu.d.ts.map +0 -1
  650. package/dist/modes/interactive/components/settings-submenu.js +0 -165
  651. package/dist/modes/interactive/components/settings-submenu.js.map +0 -1
  652. package/dist/modes/interactive/components/show-images-selector.d.ts +0 -10
  653. package/dist/modes/interactive/components/show-images-selector.d.ts.map +0 -1
  654. package/dist/modes/interactive/components/show-images-selector.js +0 -39
  655. package/dist/modes/interactive/components/show-images-selector.js.map +0 -1
  656. package/dist/modes/interactive/components/skill-invocation-message.d.ts +0 -18
  657. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +0 -1
  658. package/dist/modes/interactive/components/skill-invocation-message.js +0 -57
  659. package/dist/modes/interactive/components/skill-invocation-message.js.map +0 -1
  660. package/dist/modes/interactive/components/status-indicator.d.ts +0 -30
  661. package/dist/modes/interactive/components/status-indicator.d.ts.map +0 -1
  662. package/dist/modes/interactive/components/status-indicator.js +0 -67
  663. package/dist/modes/interactive/components/status-indicator.js.map +0 -1
  664. package/dist/modes/interactive/components/theme-selector.d.ts +0 -11
  665. package/dist/modes/interactive/components/theme-selector.d.ts.map +0 -1
  666. package/dist/modes/interactive/components/theme-selector.js +0 -50
  667. package/dist/modes/interactive/components/theme-selector.js.map +0 -1
  668. package/dist/modes/interactive/components/themed-text.d.ts +0 -17
  669. package/dist/modes/interactive/components/themed-text.d.ts.map +0 -1
  670. package/dist/modes/interactive/components/themed-text.js +0 -29
  671. package/dist/modes/interactive/components/themed-text.js.map +0 -1
  672. package/dist/modes/interactive/components/thinking-selector.d.ts +0 -23
  673. package/dist/modes/interactive/components/thinking-selector.d.ts.map +0 -1
  674. package/dist/modes/interactive/components/thinking-selector.js +0 -109
  675. package/dist/modes/interactive/components/thinking-selector.js.map +0 -1
  676. package/dist/modes/interactive/components/tool-execution.d.ts +0 -83
  677. package/dist/modes/interactive/components/tool-execution.d.ts.map +0 -1
  678. package/dist/modes/interactive/components/tool-execution.js +0 -323
  679. package/dist/modes/interactive/components/tool-execution.js.map +0 -1
  680. package/dist/modes/interactive/components/tree-selector.d.ts +0 -94
  681. package/dist/modes/interactive/components/tree-selector.d.ts.map +0 -1
  682. package/dist/modes/interactive/components/tree-selector.js +0 -1254
  683. package/dist/modes/interactive/components/tree-selector.js.map +0 -1
  684. package/dist/modes/interactive/components/trust-selector.d.ts +0 -23
  685. package/dist/modes/interactive/components/trust-selector.d.ts.map +0 -1
  686. package/dist/modes/interactive/components/trust-selector.js +0 -91
  687. package/dist/modes/interactive/components/trust-selector.js.map +0 -1
  688. package/dist/modes/interactive/components/user-message-selector.d.ts +0 -30
  689. package/dist/modes/interactive/components/user-message-selector.d.ts.map +0 -1
  690. package/dist/modes/interactive/components/user-message-selector.js +0 -114
  691. package/dist/modes/interactive/components/user-message-selector.js.map +0 -1
  692. package/dist/modes/interactive/components/user-message.d.ts +0 -16
  693. package/dist/modes/interactive/components/user-message.d.ts.map +0 -1
  694. package/dist/modes/interactive/components/user-message.js +0 -50
  695. package/dist/modes/interactive/components/user-message.js.map +0 -1
  696. package/dist/modes/interactive/components/visual-truncate.d.ts +0 -48
  697. package/dist/modes/interactive/components/visual-truncate.d.ts.map +0 -1
  698. package/dist/modes/interactive/components/visual-truncate.js +0 -66
  699. package/dist/modes/interactive/components/visual-truncate.js.map +0 -1
  700. package/dist/modes/interactive/external-editor.d.ts +0 -12
  701. package/dist/modes/interactive/external-editor.d.ts.map +0 -1
  702. package/dist/modes/interactive/external-editor.js +0 -38
  703. package/dist/modes/interactive/external-editor.js.map +0 -1
  704. package/dist/modes/interactive/interactive-mode.d.ts +0 -470
  705. package/dist/modes/interactive/interactive-mode.d.ts.map +0 -1
  706. package/dist/modes/interactive/interactive-mode.js +0 -5795
  707. package/dist/modes/interactive/interactive-mode.js.map +0 -1
  708. package/dist/modes/interactive/model-catalog-refresh.d.ts +0 -7
  709. package/dist/modes/interactive/model-catalog-refresh.d.ts.map +0 -1
  710. package/dist/modes/interactive/model-catalog-refresh.js +0 -34
  711. package/dist/modes/interactive/model-catalog-refresh.js.map +0 -1
  712. package/dist/modes/interactive/model-search.d.ts +0 -12
  713. package/dist/modes/interactive/model-search.d.ts.map +0 -1
  714. package/dist/modes/interactive/model-search.js +0 -15
  715. package/dist/modes/interactive/model-search.js.map +0 -1
  716. package/dist/modes/interactive/session-share.d.ts +0 -18
  717. package/dist/modes/interactive/session-share.d.ts.map +0 -1
  718. package/dist/modes/interactive/session-share.js +0 -188
  719. package/dist/modes/interactive/session-share.js.map +0 -1
  720. package/dist/modes/interactive/theme/system-theme.d.ts +0 -55
  721. package/dist/modes/interactive/theme/system-theme.d.ts.map +0 -1
  722. package/dist/modes/interactive/theme/system-theme.js +0 -546
  723. package/dist/modes/interactive/theme/system-theme.js.map +0 -1
  724. package/dist/modes/interactive/theme/theme-controller.d.ts +0 -81
  725. package/dist/modes/interactive/theme/theme-controller.d.ts.map +0 -1
  726. package/dist/modes/interactive/theme/theme-controller.js +0 -210
  727. package/dist/modes/interactive/theme/theme-controller.js.map +0 -1
  728. package/dist/modes/interactive/theme/theme-json.d.ts +0 -85
  729. package/dist/modes/interactive/theme/theme-json.d.ts.map +0 -1
  730. package/dist/modes/interactive/theme/theme-json.js +0 -132
  731. package/dist/modes/interactive/theme/theme-json.js.map +0 -1
  732. package/dist/modes/interactive/theme/theme.d.ts +0 -158
  733. package/dist/modes/interactive/theme/theme.d.ts.map +0 -1
  734. package/dist/modes/interactive/theme/theme.js +0 -913
  735. package/dist/modes/interactive/theme/theme.js.map +0 -1
  736. package/dist/modes/interactive/tui-renderer.d.ts +0 -22
  737. package/dist/modes/interactive/tui-renderer.d.ts.map +0 -1
  738. package/dist/modes/interactive/tui-renderer.js +0 -67
  739. package/dist/modes/interactive/tui-renderer.js.map +0 -1
  740. package/dist/modes/json-event.d.ts +0 -34
  741. package/dist/modes/json-event.d.ts.map +0 -1
  742. package/dist/modes/json-event.js +0 -29
  743. package/dist/modes/json-event.js.map +0 -1
  744. package/dist/modes/print-mode.d.ts +0 -28
  745. package/dist/modes/print-mode.d.ts.map +0 -1
  746. package/dist/modes/print-mode.js +0 -142
  747. package/dist/modes/print-mode.js.map +0 -1
  748. package/dist/modes/rpc/jsonl.d.ts +0 -17
  749. package/dist/modes/rpc/jsonl.d.ts.map +0 -1
  750. package/dist/modes/rpc/jsonl.js +0 -49
  751. package/dist/modes/rpc/jsonl.js.map +0 -1
  752. package/dist/modes/rpc/rpc-client.d.ts +0 -254
  753. package/dist/modes/rpc/rpc-client.d.ts.map +0 -1
  754. package/dist/modes/rpc/rpc-client.js +0 -499
  755. package/dist/modes/rpc/rpc-client.js.map +0 -1
  756. package/dist/modes/rpc/rpc-mode.d.ts +0 -20
  757. package/dist/modes/rpc/rpc-mode.d.ts.map +0 -1
  758. package/dist/modes/rpc/rpc-mode.js +0 -655
  759. package/dist/modes/rpc/rpc-mode.js.map +0 -1
  760. package/dist/modes/rpc/rpc-types.d.ts +0 -478
  761. package/dist/modes/rpc/rpc-types.d.ts.map +0 -1
  762. package/dist/modes/rpc/rpc-types.js +0 -8
  763. package/dist/modes/rpc/rpc-types.js.map +0 -1
  764. package/dist/package-manager-cli.d.ts +0 -9
  765. package/dist/package-manager-cli.d.ts.map +0 -1
  766. package/dist/package-manager-cli.js +0 -1003
  767. package/dist/package-manager-cli.js.map +0 -1
  768. package/dist/rpc-entry.d.ts +0 -3
  769. package/dist/rpc-entry.d.ts.map +0 -1
  770. package/dist/rpc-entry.js +0 -11
  771. package/dist/rpc-entry.js.map +0 -1
  772. package/dist/utils/abort.d.ts +0 -5
  773. package/dist/utils/abort.d.ts.map +0 -1
  774. package/dist/utils/abort.js +0 -48
  775. package/dist/utils/abort.js.map +0 -1
  776. package/dist/utils/ansi.d.ts +0 -10
  777. package/dist/utils/ansi.d.ts.map +0 -1
  778. package/dist/utils/ansi.js +0 -71
  779. package/dist/utils/ansi.js.map +0 -1
  780. package/dist/utils/changelog.d.ts +0 -22
  781. package/dist/utils/changelog.d.ts.map +0 -1
  782. package/dist/utils/changelog.js +0 -165
  783. package/dist/utils/changelog.js.map +0 -1
  784. package/dist/utils/child-process.d.ts +0 -18
  785. package/dist/utils/child-process.d.ts.map +0 -1
  786. package/dist/utils/child-process.js +0 -106
  787. package/dist/utils/child-process.js.map +0 -1
  788. package/dist/utils/clipboard-command.d.ts +0 -7
  789. package/dist/utils/clipboard-command.d.ts.map +0 -1
  790. package/dist/utils/clipboard-command.js +0 -45
  791. package/dist/utils/clipboard-command.js.map +0 -1
  792. package/dist/utils/clipboard-image.d.ts +0 -11
  793. package/dist/utils/clipboard-image.d.ts.map +0 -1
  794. package/dist/utils/clipboard-image.js +0 -214
  795. package/dist/utils/clipboard-image.js.map +0 -1
  796. package/dist/utils/clipboard.d.ts +0 -6
  797. package/dist/utils/clipboard.d.ts.map +0 -1
  798. package/dist/utils/clipboard.js +0 -157
  799. package/dist/utils/clipboard.js.map +0 -1
  800. package/dist/utils/deprecation.d.ts +0 -4
  801. package/dist/utils/deprecation.d.ts.map +0 -1
  802. package/dist/utils/deprecation.js +0 -13
  803. package/dist/utils/deprecation.js.map +0 -1
  804. package/dist/utils/exif-orientation.d.ts +0 -5
  805. package/dist/utils/exif-orientation.d.ts.map +0 -1
  806. package/dist/utils/exif-orientation.js +0 -157
  807. package/dist/utils/exif-orientation.js.map +0 -1
  808. package/dist/utils/frontmatter.d.ts +0 -8
  809. package/dist/utils/frontmatter.d.ts.map +0 -1
  810. package/dist/utils/frontmatter.js +0 -27
  811. package/dist/utils/frontmatter.js.map +0 -1
  812. package/dist/utils/fs-watch.d.ts +0 -5
  813. package/dist/utils/fs-watch.d.ts.map +0 -1
  814. package/dist/utils/fs-watch.js +0 -25
  815. package/dist/utils/fs-watch.js.map +0 -1
  816. package/dist/utils/git.d.ts +0 -26
  817. package/dist/utils/git.d.ts.map +0 -1
  818. package/dist/utils/git.js +0 -195
  819. package/dist/utils/git.js.map +0 -1
  820. package/dist/utils/html.d.ts +0 -7
  821. package/dist/utils/html.d.ts.map +0 -1
  822. package/dist/utils/html.js +0 -40
  823. package/dist/utils/html.js.map +0 -1
  824. package/dist/utils/image-convert.d.ts +0 -22
  825. package/dist/utils/image-convert.d.ts.map +0 -1
  826. package/dist/utils/image-convert.js +0 -84
  827. package/dist/utils/image-convert.js.map +0 -1
  828. package/dist/utils/image-process.d.ts +0 -18
  829. package/dist/utils/image-process.d.ts.map +0 -1
  830. package/dist/utils/image-process.js +0 -83
  831. package/dist/utils/image-process.js.map +0 -1
  832. package/dist/utils/image-resize-core.d.ts +0 -42
  833. package/dist/utils/image-resize-core.d.ts.map +0 -1
  834. package/dist/utils/image-resize-core.js +0 -129
  835. package/dist/utils/image-resize-core.js.map +0 -1
  836. package/dist/utils/image-resize-worker.d.ts +0 -2
  837. package/dist/utils/image-resize-worker.d.ts.map +0 -1
  838. package/dist/utils/image-resize-worker.js +0 -32
  839. package/dist/utils/image-resize-worker.js.map +0 -1
  840. package/dist/utils/image-resize.d.ts +0 -16
  841. package/dist/utils/image-resize.d.ts.map +0 -1
  842. package/dist/utils/image-resize.js +0 -96
  843. package/dist/utils/image-resize.js.map +0 -1
  844. package/dist/utils/json.d.ts +0 -3
  845. package/dist/utils/json.d.ts.map +0 -1
  846. package/dist/utils/json.js +0 -7
  847. package/dist/utils/json.js.map +0 -1
  848. package/dist/utils/management-http.d.ts +0 -25
  849. package/dist/utils/management-http.d.ts.map +0 -1
  850. package/dist/utils/management-http.js +0 -54
  851. package/dist/utils/management-http.js.map +0 -1
  852. package/dist/utils/mime.d.ts +0 -3
  853. package/dist/utils/mime.d.ts.map +0 -1
  854. package/dist/utils/mime.js +0 -110
  855. package/dist/utils/mime.js.map +0 -1
  856. package/dist/utils/open-browser.d.ts +0 -9
  857. package/dist/utils/open-browser.d.ts.map +0 -1
  858. package/dist/utils/open-browser.js +0 -22
  859. package/dist/utils/open-browser.js.map +0 -1
  860. package/dist/utils/paths.d.ts +0 -34
  861. package/dist/utils/paths.d.ts.map +0 -1
  862. package/dist/utils/paths.js +0 -115
  863. package/dist/utils/paths.js.map +0 -1
  864. package/dist/utils/photon.d.ts +0 -21
  865. package/dist/utils/photon.d.ts.map +0 -1
  866. package/dist/utils/photon.js +0 -121
  867. package/dist/utils/photon.js.map +0 -1
  868. package/dist/utils/pi-user-agent.d.ts +0 -2
  869. package/dist/utils/pi-user-agent.d.ts.map +0 -1
  870. package/dist/utils/pi-user-agent.js +0 -5
  871. package/dist/utils/pi-user-agent.js.map +0 -1
  872. package/dist/utils/shell.d.ts +0 -32
  873. package/dist/utils/shell.d.ts.map +0 -1
  874. package/dist/utils/shell.js +0 -189
  875. package/dist/utils/shell.js.map +0 -1
  876. package/dist/utils/sleep.d.ts +0 -5
  877. package/dist/utils/sleep.d.ts.map +0 -1
  878. package/dist/utils/sleep.js +0 -17
  879. package/dist/utils/sleep.js.map +0 -1
  880. package/dist/utils/syntax-highlight.d.ts +0 -13
  881. package/dist/utils/syntax-highlight.d.ts.map +0 -1
  882. package/dist/utils/syntax-highlight.js +0 -184
  883. package/dist/utils/syntax-highlight.js.map +0 -1
  884. package/dist/utils/text.d.ts +0 -8
  885. package/dist/utils/text.d.ts.map +0 -1
  886. package/dist/utils/text.js +0 -9
  887. package/dist/utils/text.js.map +0 -1
  888. package/dist/utils/tool-result-images.d.ts +0 -21
  889. package/dist/utils/tool-result-images.d.ts.map +0 -1
  890. package/dist/utils/tool-result-images.js +0 -48
  891. package/dist/utils/tool-result-images.js.map +0 -1
  892. package/dist/utils/tools-manager.d.ts +0 -13
  893. package/dist/utils/tools-manager.d.ts.map +0 -1
  894. package/dist/utils/tools-manager.js +0 -343
  895. package/dist/utils/tools-manager.js.map +0 -1
  896. package/dist/utils/version-check.d.ts +0 -19
  897. package/dist/utils/version-check.d.ts.map +0 -1
  898. package/dist/utils/version-check.js +0 -72
  899. package/dist/utils/version-check.js.map +0 -1
  900. package/dist/utils/windows-self-update.d.ts +0 -3
  901. package/dist/utils/windows-self-update.d.ts.map +0 -1
  902. package/dist/utils/windows-self-update.js +0 -77
  903. package/dist/utils/windows-self-update.js.map +0 -1
  904. package/dist/utils/wsl.d.ts +0 -3
  905. package/dist/utils/wsl.d.ts.map +0 -1
  906. package/dist/utils/wsl.js +0 -15
  907. package/dist/utils/wsl.js.map +0 -1
  908. package/dist/utils/zip.d.ts +0 -7
  909. package/dist/utils/zip.d.ts.map +0 -1
  910. package/dist/utils/zip.js +0 -60
  911. package/dist/utils/zip.js.map +0 -1
@@ -1,1138 +0,0 @@
1
- import { backgroundAnsi, colorToRgb, foregroundAnsi, getKeybindings, indexedColor, rgbColor, visibleWidth, } from "@earendil-works/pi-tui";
2
- import { theme } from "../theme/theme.js";
3
- import { ARMIN_HEIGHT, ARMIN_WIDTH, isArminPixel } from "./armin.js";
4
- import { formatKeyText } from "./keybinding-hints.js";
5
- const DEPTH = 0.7;
6
- const FLY_START = 0.1;
7
- const FLY_DURATION = 1.3;
8
- /** Braille dots per pixel when a model without an origin appears, growing from a speck at the center. */
9
- const START_SCALE = 0.1;
10
- function createModel(columns, rows, pixel, options) {
11
- const blocks = [];
12
- for (let row = 0; row < rows; row++) {
13
- for (let column = 0; column < columns; column++) {
14
- const color = pixel(column, row);
15
- if (color)
16
- blocks.push({ home: [column, row, 0], color });
17
- }
18
- }
19
- return {
20
- columns,
21
- rows,
22
- blocks,
23
- cameraDistance: options.cameraDistance,
24
- radius: Math.hypot(columns / 2, rows / 2, 1 + DEPTH / 2),
25
- widthShare: options.widthShare,
26
- puzzleMoves: (random) => options.puzzleMoves(random, blocks.length),
27
- origin: options.origin,
28
- };
29
- }
30
- const CORAL = [228, 138, 122];
31
- const BLUE = [79, 142, 179];
32
- const E_LOGO_PIXELS = ["c..c", "cccc", "bbbc", "b..b"];
33
- const E_LOGO_COLORS = { c: CORAL, b: BLUE };
34
- function eLogoModel(origin) {
35
- return createModel(4, 4, (column, row) => E_LOGO_COLORS[E_LOGO_PIXELS[row][column]], {
36
- cameraDistance: 10,
37
- widthShare: 0.35,
38
- puzzleMoves: (random) => (random < 0.4 ? 2 : 1),
39
- origin,
40
- });
41
- }
42
- function arminModel(color) {
43
- return createModel(ARMIN_WIDTH, ARMIN_HEIGHT, (column, row) => (isArminPixel(column, row) ? color : undefined), {
44
- // Far enough that the perspective stays mild for a figure about 36 blocks tall.
45
- cameraDistance: 80,
46
- widthShare: 0.45,
47
- puzzleMoves: (random, blockCount) => Math.round(blockCount * (0.03 + random * 0.04)),
48
- origin: undefined,
49
- });
50
- }
51
- // The sliding puzzle: after the model spun for a while, blocks slide into free neighboring cells, a few at a time.
52
- // Each cycle shuffles, flies every block back home, and holds the model briefly.
53
- const PUZZLE_START = FLY_START + FLY_DURATION + 3;
54
- const PUZZLE_STEP = 0.3;
55
- const PUZZLE_STEPS = 12;
56
- const PUZZLE_RETURN = 1;
57
- const PUZZLE_HOLD = 0.6;
58
- const PUZZLE_CYCLE = PUZZLE_STEP * PUZZLE_STEPS + PUZZLE_RETURN + PUZZLE_HOLD;
59
- const PUZZLE_MOVES = [
60
- [1, 0, 0],
61
- [-1, 0, 0],
62
- [0, 1, 0],
63
- [0, -1, 0],
64
- [1, 0, 0],
65
- [-1, 0, 0],
66
- [0, 1, 0],
67
- [0, -1, 0],
68
- [0, 0, 1],
69
- [0, 0, -1],
70
- ];
71
- /** Block positions after each step of one shuffle cycle, starting at home. Deterministic per cycle. */
72
- function shuffleSteps(model, cycle) {
73
- const { columns, rows } = model;
74
- let positions = model.blocks.map((block) => block.home);
75
- const steps = [positions];
76
- const lastMoved = new Set();
77
- let random = cycle * 7_919 + 1;
78
- const next = () => hash(random++);
79
- const key = ([x, y, z]) => ((z + 1) * rows + y) * columns + x;
80
- for (let step = 0; step < PUZZLE_STEPS; step++) {
81
- const occupied = new Set(positions.map(key));
82
- const nextPositions = [...positions];
83
- const moved = new Set();
84
- const moveCount = model.puzzleMoves(next());
85
- for (let move = 0; move < moveCount; move++) {
86
- const candidates = [];
87
- for (let block = 0; block < positions.length; block++) {
88
- if (moved.has(block))
89
- continue;
90
- const [x, y, z] = positions[block];
91
- for (const [dx, dy, dz] of PUZZLE_MOVES) {
92
- const target = [x + dx, y + dy, z + dz];
93
- if (target[0] < 0 || target[0] >= columns || target[1] < 0 || target[1] >= rows)
94
- continue;
95
- if (target[2] < -1 || target[2] > 1 || occupied.has(key(target)))
96
- continue;
97
- candidates.push({ block, target });
98
- }
99
- }
100
- // Prefer blocks that did not just move, so the puzzle does not look like one block jittering.
101
- const fresh = candidates.filter((candidate) => !lastMoved.has(candidate.block));
102
- const pool = fresh.length > 0 ? fresh : candidates;
103
- const choice = pool[Math.floor(next() * pool.length)];
104
- if (!choice)
105
- break;
106
- occupied.add(key(choice.target));
107
- nextPositions[choice.block] = choice.target;
108
- moved.add(choice.block);
109
- }
110
- lastMoved.clear();
111
- for (const block of moved)
112
- lastMoved.add(block);
113
- positions = nextPositions;
114
- steps.push(positions);
115
- }
116
- return steps;
117
- }
118
- const FRAME_MS = 1000 / 30;
119
- const DUST_DURATION = 0.35;
120
- const WAVE_SPREAD = 0.55;
121
- const WAVE_JITTER = 0.12;
122
- const DISSOLVE_END = FLY_START + WAVE_SPREAD + WAVE_JITTER + DUST_DURATION;
123
- const BACKGROUND_FADE = 0.5;
124
- const EXIT_DURATION = 1.1;
125
- // A faint starfield fades in behind the logo once the screen has dissolved.
126
- const STARS_START = 2.5;
127
- const STARS_FADE = 2;
128
- const STAR_DENSITY = 0.018;
129
- // Star tints: neutral, pale blue, pale gold, and pale rose, each mixed half with the terminal's foreground.
130
- const STAR_TINTS = [
131
- [255, 255, 255],
132
- [170, 195, 255],
133
- [255, 225, 170],
134
- [255, 190, 205],
135
- ];
136
- const LOGO_COLOR_STEP = 5;
137
- // On light backgrounds most of each braille cell shows the bright background, which washes the logo out. There,
138
- // the logo gets a halo: its colors and coverage blurred into the cell backgrounds, strongest under the logo and
139
- // fading out over HALO_RADIUS_X columns and HALO_RADIUS_Y rows (cells are about twice as tall as wide).
140
- const LIGHT_HALO_STRENGTH = 0.3;
141
- const HALO_RADIUS_X = 6;
142
- const HALO_RADIUS_Y = 3;
143
- const HALO_LEVELS = 32;
144
- const STAR_ALPHA_LEVELS = 8;
145
- const STAR_FLICKER_LEVELS = 3;
146
- const HINT_FADE = 0.5;
147
- // Braille dot bits, indexed by row * 2 + column within the 2x4 cell.
148
- const DOT_BITS = [0x01, 0x08, 0x02, 0x10, 0x04, 0x20, 0x40, 0x80];
149
- const BRAILLE = Array.from({ length: 256 }, (_, bits) => String.fromCharCode(0x2800 + bits));
150
- const LIGHT = normalize([-0.45, -0.6, 0.75]);
151
- const HALF_VECTOR = normalize([LIGHT[0], LIGHT[1], LIGHT[2] + 1]);
152
- function normalize(v) {
153
- const length = Math.hypot(v[0], v[1], v[2]);
154
- return [v[0] / length, v[1] / length, v[2] / length];
155
- }
156
- function clamp01(value) {
157
- return value < 0 ? 0 : value > 1 ? 1 : value;
158
- }
159
- /** Quintic smoothstep. */
160
- function smooth(value) {
161
- const t = clamp01(value);
162
- return t * t * t * (t * (t * 6 - 15) + 10);
163
- }
164
- function easeOut(value) {
165
- const t = 1 - clamp01(value);
166
- return 1 - t * t * t;
167
- }
168
- function mix(a, b, amount) {
169
- return [a[0] + (b[0] - a[0]) * amount, a[1] + (b[1] - a[1]) * amount, a[2] + (b[2] - a[2]) * amount];
170
- }
171
- function hash(value) {
172
- let x = Math.imul(value ^ 0x9e3779b9, 0x85ebca6b);
173
- x ^= x >>> 13;
174
- x = Math.imul(x, 0xc2b2ae35);
175
- x ^= x >>> 16;
176
- return (x >>> 0) / 0x100000000;
177
- }
178
- /** Whether a background is light, by relative luminance. */
179
- function isLight([r, g, b]) {
180
- return 0.2126 * r + 0.7152 * g + 0.0722 * b > 128;
181
- }
182
- function toRgb(color) {
183
- const { r, g, b } = colorToRgb(color);
184
- return [r, g, b];
185
- }
186
- /** Braille dots a glyph turns into, a rough measure of how much ink it has. */
187
- function glyphInk(text, seed) {
188
- if (text.trim() === "")
189
- return 0;
190
- if (/^[.,:;'`\-_·]$/.test(text))
191
- return 2;
192
- if (/^[\u2500-\u257f]$/.test(text))
193
- return 3;
194
- return 4 + Math.floor(seed * 3);
195
- }
196
- const segmenter = new Intl.Segmenter();
197
- /** Parse rendered lines into cells with resolved colors. Other escape sequences (OSC, APC, cursor) are skipped. */
198
- function parseScreen(lines, width, foreground, background) {
199
- const palette = (index) => toRgb(indexedColor(index));
200
- return lines.map((line) => {
201
- const cells = [];
202
- let fg;
203
- let bg;
204
- let dim = false;
205
- let inverse = false;
206
- const applySgr = (params) => {
207
- const codes = params === "" ? ["0"] : params.split(";");
208
- for (let i = 0; i < codes.length; i++) {
209
- const parts = codes[i].split(":").map((part) => Number.parseInt(part, 10));
210
- const code = parts[0] ?? 0;
211
- if (code === 38 || code === 48) {
212
- // Extended color, either as `38;5;n` / `38;2;r;g;b` or colon sub-parameters.
213
- let args;
214
- if (parts.length > 1) {
215
- args = parts.slice(1).filter((part) => !Number.isNaN(part));
216
- // `38:2::r:g:b` has an empty color space id, dropped above.
217
- }
218
- else {
219
- const kind = Number.parseInt(codes[i + 1] ?? "", 10);
220
- const count = kind === 5 ? 2 : kind === 2 ? 4 : 1;
221
- args = codes.slice(i + 1, i + 1 + count).map((part) => Number.parseInt(part, 10));
222
- i += count;
223
- }
224
- let color;
225
- if (args[0] === 5 && args[1] !== undefined)
226
- color = palette(args[1]);
227
- else if (args[0] === 2 && args.length >= 4)
228
- color = [args[1], args[2], args[3]];
229
- if (color) {
230
- if (code === 38)
231
- fg = color;
232
- else
233
- bg = color;
234
- }
235
- }
236
- else if (code === 0) {
237
- fg = undefined;
238
- bg = undefined;
239
- dim = false;
240
- inverse = false;
241
- }
242
- else if (code === 2)
243
- dim = true;
244
- else if (code === 22)
245
- dim = false;
246
- else if (code === 7)
247
- inverse = true;
248
- else if (code === 27)
249
- inverse = false;
250
- else if (code >= 30 && code <= 37)
251
- fg = palette(code - 30);
252
- else if (code >= 90 && code <= 97)
253
- fg = palette(code - 90 + 8);
254
- else if (code === 39)
255
- fg = undefined;
256
- else if (code >= 40 && code <= 47)
257
- bg = palette(code - 40);
258
- else if (code >= 100 && code <= 107)
259
- bg = palette(code - 100 + 8);
260
- else if (code === 49)
261
- bg = undefined;
262
- }
263
- };
264
- const pushText = (text) => {
265
- for (const { segment } of segmenter.segment(text)) {
266
- const glyphWidth = visibleWidth(segment);
267
- if (glyphWidth === 0 || cells.length + glyphWidth > width)
268
- continue;
269
- let cellFg = fg ?? foreground;
270
- let cellBg = bg;
271
- if (inverse) {
272
- cellFg = bg ?? background;
273
- cellBg = fg ?? foreground;
274
- }
275
- if (dim)
276
- cellFg = mix(cellFg, cellBg ?? background, 0.4);
277
- const cell = { text: segment, width: glyphWidth, fg: cellFg, bg: cellBg, delay: 0, ink: 0, seed: 0 };
278
- cells.push(cell);
279
- if (glyphWidth === 2)
280
- cells.push({ ...cell, text: "", width: 0 });
281
- }
282
- };
283
- let i = 0;
284
- while (i < line.length) {
285
- const sequenceStart = line.indexOf("\x1b", i);
286
- if (sequenceStart === -1) {
287
- pushText(line.slice(i));
288
- break;
289
- }
290
- if (sequenceStart > i)
291
- pushText(line.slice(i, sequenceStart));
292
- const kind = line[sequenceStart + 1];
293
- if (kind === "[") {
294
- let end = sequenceStart + 2;
295
- while (end < line.length && (line.charCodeAt(end) < 0x40 || line.charCodeAt(end) > 0x7e))
296
- end++;
297
- if (line[end] === "m")
298
- applySgr(line.slice(sequenceStart + 2, end));
299
- i = end + 1;
300
- }
301
- else if (kind === "]" || kind === "_" || kind === "P" || kind === "^") {
302
- // String sequences end at BEL or ST (ESC \).
303
- const bell = line.indexOf("\x07", sequenceStart + 2);
304
- const st = line.indexOf("\x1b\\", sequenceStart + 2);
305
- if (bell === -1 && st === -1)
306
- break;
307
- i = bell !== -1 && (st === -1 || bell < st) ? bell + 1 : st + 2;
308
- }
309
- else {
310
- i = sequenceStart + 2;
311
- }
312
- }
313
- return cells;
314
- });
315
- }
316
- /** Row-major 3x3 rotation matrix for yaw (y), then pitch (x), then roll (z). */
317
- function rotation(yaw, pitch, roll) {
318
- const [sy, cy, sx, cx, sz, cz] = [
319
- Math.sin(yaw),
320
- Math.cos(yaw),
321
- Math.sin(pitch),
322
- Math.cos(pitch),
323
- Math.sin(roll),
324
- Math.cos(roll),
325
- ];
326
- // Rz * Rx * Ry
327
- const ry = [cy, 0, sy, 0, 1, 0, -sy, 0, cy];
328
- const rx = [1, 0, 0, 0, cx, -sx, 0, sx, cx];
329
- const rz = [cz, -sz, 0, sz, cz, 0, 0, 0, 1];
330
- return multiply(rz, multiply(rx, ry));
331
- }
332
- function multiply(a, b) {
333
- const result = new Array(9);
334
- for (let row = 0; row < 3; row++) {
335
- for (let column = 0; column < 3; column++) {
336
- result[row * 3 + column] =
337
- a[row * 3] * b[column] + a[row * 3 + 1] * b[3 + column] + a[row * 3 + 2] * b[6 + column];
338
- }
339
- }
340
- return result;
341
- }
342
- // The spin is locked to the puzzle: one turn per cycle, facing the camera in the middle of each hold.
343
- const SPIN_RAMP = 1.4;
344
- const SPIN_SPEED = (Math.PI * 2) / PUZZLE_CYCLE;
345
- // How much the spin slows down while facing the camera (and speeds up while facing away), from 0 to 1.
346
- const SPIN_LINGER = 0.6;
347
- const FIRST_FRONT_VIEW = PUZZLE_START + PUZZLE_STEP * PUZZLE_STEPS + PUZZLE_RETURN + PUZZLE_HOLD / 2;
348
- /** Uniform spin that accelerates from rest over SPIN_RAMP, then turns at SPIN_SPEED. */
349
- function baseSpinPhase(time) {
350
- const elapsed = time - FLY_START;
351
- if (elapsed <= 0)
352
- return 0;
353
- const u = elapsed / SPIN_RAMP;
354
- // Integral of the quintic smoothstep ramp.
355
- if (u < 1)
356
- return SPIN_SPEED * SPIN_RAMP * (u ** 6 - 3 * u ** 5 + 2.5 * u ** 4);
357
- return SPIN_SPEED * (SPIN_RAMP * 0.5 + elapsed - SPIN_RAMP);
358
- }
359
- // Extra rotation added during the flight, so the phase is a whole number of turns at every assembled front view.
360
- const SPIN_ALIGNMENT = Math.PI * 2 - (baseSpinPhase(FIRST_FRONT_VIEW) % (Math.PI * 2));
361
- /** Spin phase: whole turns exactly when the reassembled logo faces the camera. */
362
- function spinPhase(time) {
363
- return baseSpinPhase(time) + SPIN_ALIGNMENT * smooth((time - FLY_START) / FLY_DURATION);
364
- }
365
- /** Yaw of the logo. It matches the phase at whole turns but lingers there, so the logo reads from the front. */
366
- function spinAngle(time) {
367
- const phase = spinPhase(time);
368
- return phase - SPIN_LINGER * Math.sin(phase);
369
- }
370
- /**
371
- * Renders the model's blocks into braille cells. Only faces that point at the camera and are not covered by a
372
- * touching block are drawn. Each face is rasterized over its projected bounds by intersecting each dot's ray
373
- * with the face's plane, with a depth buffer resolving overlaps. Buffers are reused between frames.
374
- */
375
- class BlockRaster {
376
- /** Braille dot bits per cell. */
377
- bits = new Uint8Array(0);
378
- /** Lit dots per cell. */
379
- counts = new Uint8Array(0);
380
- /** Summed RGB of the lit dots per cell. */
381
- rgb = new Float32Array(0);
382
- /** Halo tint strength per cell, from 0 to 1. Only set when a halo was requested. */
383
- haloAmount = new Float32Array(0);
384
- /** Halo color per cell. */
385
- haloRgb = new Float32Array(0);
386
- width = 0;
387
- height = 0;
388
- /** Ray parameter of the nearest hit per dot; smaller is nearer. */
389
- depth = new Float32Array(0);
390
- /** Face index + 1 of the nearest hit per dot, 0 for none. */
391
- faceIds = new Uint16Array(0);
392
- /** Cells written by the previous frame, cleared before the next one. */
393
- dirty;
394
- /** Cells with a halo from the previous frame, cleared before the next one. */
395
- haloDirty;
396
- cameraDistance;
397
- constructor(cameraDistance) {
398
- this.cameraDistance = cameraDistance;
399
- }
400
- render(width, height, pose, boxes, background, haloStrength) {
401
- const dotWidth = width * 2;
402
- const dotHeight = height * 4;
403
- if (width !== this.width || height !== this.height) {
404
- this.width = width;
405
- this.height = height;
406
- this.bits = new Uint8Array(width * height);
407
- this.counts = new Uint8Array(width * height);
408
- this.rgb = new Float32Array(width * height * 3);
409
- this.haloAmount = new Float32Array(width * height);
410
- this.haloRgb = new Float32Array(width * height * 3);
411
- this.haloDirty = undefined;
412
- this.depth = new Float32Array(dotWidth * dotHeight).fill(Infinity);
413
- this.faceIds = new Uint16Array(dotWidth * dotHeight);
414
- this.dirty = undefined;
415
- }
416
- else if (this.dirty) {
417
- const { minX, minY, maxX, maxY } = this.dirty;
418
- for (let row = minY; row <= maxY; row++) {
419
- this.bits.fill(0, row * width + minX, row * width + maxX + 1);
420
- this.counts.fill(0, row * width + minX, row * width + maxX + 1);
421
- this.rgb.fill(0, (row * width + minX) * 3, (row * width + maxX + 1) * 3);
422
- }
423
- this.dirty = undefined;
424
- }
425
- if (this.haloDirty) {
426
- const { minX, minY, maxX, maxY } = this.haloDirty;
427
- for (let row = minY; row <= maxY; row++) {
428
- this.haloAmount.fill(0, row * width + minX, row * width + maxX + 1);
429
- this.haloRgb.fill(0, (row * width + minX) * 3, (row * width + maxX + 1) * 3);
430
- }
431
- this.haloDirty = undefined;
432
- }
433
- const m = rotation(pose.yaw, pose.pitch, pose.roll);
434
- const { centerX, centerY, scale } = pose;
435
- const cameraDistance = this.cameraDistance;
436
- // The camera sits at (0, 0, cameraDistance) in camera space; object space is the transpose rotation.
437
- const origin = [m[6] * cameraDistance, m[7] * cameraDistance, m[8] * cameraDistance];
438
- const light = isLight(background);
439
- const faces = this.visibleFaces(m, origin, pose, boxes, dotWidth, dotHeight, light);
440
- if (faces.length === 0)
441
- return;
442
- let minX = dotWidth;
443
- let minY = dotHeight;
444
- let maxX = -1;
445
- let maxY = -1;
446
- for (const face of faces) {
447
- minX = Math.min(minX, face.minX);
448
- minY = Math.min(minY, face.minY);
449
- maxX = Math.max(maxX, face.maxX);
450
- maxY = Math.max(maxY, face.maxY);
451
- }
452
- if (maxX < minX || maxY < minY)
453
- return;
454
- const depth = this.depth;
455
- const faceIds = this.faceIds;
456
- for (let faceIndex = 0; faceIndex < faces.length; faceIndex++) {
457
- const face = faces[faceIndex];
458
- const a = face.axis;
459
- const u = (a + 1) % 3;
460
- const v = (a + 2) % 3;
461
- const originA = origin[a];
462
- const originU = origin[u];
463
- const originV = origin[v];
464
- // The ray direction in object space is linear in the dot position, so it is stepped per dot.
465
- const stepA = m[a] / scale;
466
- const stepU = m[u] / scale;
467
- const stepV = m[v] / scale;
468
- const sx = (face.minX + 0.5 - centerX) / scale;
469
- for (let dotY = face.minY; dotY <= face.maxY; dotY++) {
470
- const sy = (dotY + 0.5 - centerY) / scale;
471
- let directionA = m[a] * sx + m[3 + a] * sy - m[6 + a] * cameraDistance;
472
- let directionU = m[u] * sx + m[3 + u] * sy - m[6 + u] * cameraDistance;
473
- let directionV = m[v] * sx + m[3 + v] * sy - m[6 + v] * cameraDistance;
474
- let index = dotY * dotWidth + face.minX;
475
- for (let dotX = face.minX; dotX <= face.maxX; dotX++, index++) {
476
- const t = (face.plane - originA) / directionA;
477
- if (t > 0 && t < depth[index]) {
478
- const hitU = originU + t * directionU;
479
- const hitV = originV + t * directionV;
480
- if (hitU >= face.uMin && hitU <= face.uMax && hitV >= face.vMin && hitV <= face.vMax) {
481
- depth[index] = t;
482
- faceIds[index] = faceIndex + 1;
483
- }
484
- }
485
- directionA += stepA;
486
- directionU += stepU;
487
- directionV += stepV;
488
- }
489
- }
490
- }
491
- // Shade the hit dots, pack them into braille cells, and reset the dot buffers for the next frame.
492
- const bits = this.bits;
493
- const counts = this.counts;
494
- const rgb = this.rgb;
495
- let cellMinX = width;
496
- let cellMinY = height;
497
- let cellMaxX = -1;
498
- let cellMaxY = -1;
499
- for (let dotY = minY; dotY <= maxY; dotY++) {
500
- let index = dotY * dotWidth + minX;
501
- for (let dotX = minX; dotX <= maxX; dotX++, index++) {
502
- const id = faceIds[index];
503
- if (id === 0)
504
- continue;
505
- const face = faces[id - 1];
506
- // Points farther from the camera fade slightly toward the background for depth.
507
- const fog = clamp01(0.15 - cameraDistance * (1 - depth[index]) * 0.12) * (light ? 0.5 : 1);
508
- faceIds[index] = 0;
509
- depth[index] = Infinity;
510
- const cellX = dotX >> 1;
511
- const cellY = dotY >> 2;
512
- const cell = cellY * width + cellX;
513
- bits[cell] |= DOT_BITS[(dotY & 3) * 2 + (dotX & 1)];
514
- counts[cell]++;
515
- rgb[cell * 3] += face.red + (background[0] - face.red) * fog;
516
- rgb[cell * 3 + 1] += face.green + (background[1] - face.green) * fog;
517
- rgb[cell * 3 + 2] += face.blue + (background[2] - face.blue) * fog;
518
- if (cellX < cellMinX)
519
- cellMinX = cellX;
520
- if (cellX > cellMaxX)
521
- cellMaxX = cellX;
522
- if (cellY < cellMinY)
523
- cellMinY = cellY;
524
- if (cellY > cellMaxY)
525
- cellMaxY = cellY;
526
- }
527
- }
528
- if (cellMaxX >= 0)
529
- this.dirty = { minX: cellMinX, minY: cellMinY, maxX: cellMaxX, maxY: cellMaxY };
530
- if (haloStrength > 0)
531
- this.renderHalo(haloStrength);
532
- }
533
- /**
534
- * Blur the logo's coverage and color over neighboring cells with a separable tent filter, so the tint falls
535
- * off smoothly past the logo's edges.
536
- */
537
- renderHalo(strength) {
538
- const cells = this.dirty;
539
- if (!cells)
540
- return;
541
- const { width, height, counts, rgb } = this;
542
- const minX = Math.max(0, cells.minX - HALO_RADIUS_X);
543
- const maxX = Math.min(width - 1, cells.maxX + HALO_RADIUS_X);
544
- const minY = Math.max(0, cells.minY - HALO_RADIUS_Y);
545
- const maxY = Math.min(height - 1, cells.maxY + HALO_RADIUS_Y);
546
- const regionWidth = maxX - minX + 1;
547
- const tent = (radius) => {
548
- const weights = Array.from({ length: radius * 2 + 1 }, (_, i) => radius + 1 - Math.abs(i - radius));
549
- const total = weights.reduce((sum, weight) => sum + weight, 0);
550
- return weights.map((weight) => weight / total);
551
- };
552
- const weightsX = tent(HALO_RADIUS_X);
553
- const weightsY = tent(HALO_RADIUS_Y);
554
- // Horizontal pass over the rows that contain the logo: coverage and premultiplied color per cell.
555
- const rows = cells.maxY - cells.minY + 1;
556
- const horizontal = new Float32Array(rows * regionWidth * 4);
557
- for (let y = cells.minY; y <= cells.maxY; y++) {
558
- for (let x = minX; x <= maxX; x++) {
559
- let coverage = 0;
560
- let red = 0;
561
- let green = 0;
562
- let blue = 0;
563
- for (let dx = -HALO_RADIUS_X; dx <= HALO_RADIUS_X; dx++) {
564
- const sourceX = x + dx;
565
- if (sourceX < cells.minX || sourceX > cells.maxX)
566
- continue;
567
- const source = y * width + sourceX;
568
- const count = counts[source];
569
- if (count === 0)
570
- continue;
571
- const weight = weightsX[dx + HALO_RADIUS_X] / 8;
572
- coverage += count * weight;
573
- red += rgb[source * 3] * weight;
574
- green += rgb[source * 3 + 1] * weight;
575
- blue += rgb[source * 3 + 2] * weight;
576
- }
577
- const target = ((y - cells.minY) * regionWidth + (x - minX)) * 4;
578
- horizontal[target] = coverage;
579
- horizontal[target + 1] = red;
580
- horizontal[target + 2] = green;
581
- horizontal[target + 3] = blue;
582
- }
583
- }
584
- // Vertical pass into the halo buffers.
585
- for (let y = minY; y <= maxY; y++) {
586
- for (let x = minX; x <= maxX; x++) {
587
- let coverage = 0;
588
- let red = 0;
589
- let green = 0;
590
- let blue = 0;
591
- for (let dy = -HALO_RADIUS_Y; dy <= HALO_RADIUS_Y; dy++) {
592
- const sourceY = y + dy;
593
- if (sourceY < cells.minY || sourceY > cells.maxY)
594
- continue;
595
- const weight = weightsY[dy + HALO_RADIUS_Y];
596
- const source = ((sourceY - cells.minY) * regionWidth + (x - minX)) * 4;
597
- coverage += horizontal[source] * weight;
598
- red += horizontal[source + 1] * weight;
599
- green += horizontal[source + 2] * weight;
600
- blue += horizontal[source + 3] * weight;
601
- }
602
- const target = y * width + x;
603
- // Cells under the logo keep at least their own coverage, so faces stay solidly tinted.
604
- const count = counts[target];
605
- if (count > 0 && count / 8 > coverage) {
606
- coverage = count / 8;
607
- red = (rgb[target * 3] / count) * coverage;
608
- green = (rgb[target * 3 + 1] / count) * coverage;
609
- blue = (rgb[target * 3 + 2] / count) * coverage;
610
- }
611
- if (coverage <= 0)
612
- continue;
613
- // Quantized so neighboring cells usually share a background and its escape sequence.
614
- const amount = Math.round(strength * Math.min(1, coverage) ** 0.7 * HALO_LEVELS) / HALO_LEVELS;
615
- if (amount <= 0)
616
- continue;
617
- this.haloAmount[target] = amount;
618
- this.haloRgb[target * 3] = Math.round(red / coverage / LOGO_COLOR_STEP) * LOGO_COLOR_STEP;
619
- this.haloRgb[target * 3 + 1] = Math.round(green / coverage / LOGO_COLOR_STEP) * LOGO_COLOR_STEP;
620
- this.haloRgb[target * 3 + 2] = Math.round(blue / coverage / LOGO_COLOR_STEP) * LOGO_COLOR_STEP;
621
- }
622
- }
623
- this.haloDirty = { minX, minY, maxX, maxY };
624
- }
625
- visibleFaces(m, origin, pose, boxes, dotWidth, dotHeight, lightBackground) {
626
- const faces = [];
627
- const cameraDistance = this.cameraDistance;
628
- for (const box of boxes) {
629
- for (let a = 0; a < 3; a++) {
630
- const u = (a + 1) % 3;
631
- const v = (a + 2) % 3;
632
- for (const side of [-1, 1]) {
633
- const plane = side > 0 ? box.max[a] : box.min[a];
634
- // Back faces point away from the camera.
635
- if ((origin[a] - plane) * side <= 0)
636
- continue;
637
- // Faces pressed against a neighboring block are hidden. Positions are exact while blocks rest.
638
- const covered = boxes.some((other) => other !== box &&
639
- (side > 0 ? other.min[a] : other.max[a]) === plane &&
640
- other.min[u] <= box.min[u] &&
641
- other.max[u] >= box.max[u] &&
642
- other.min[v] <= box.min[v] &&
643
- other.max[v] >= box.max[v]);
644
- if (covered)
645
- continue;
646
- let minX = Infinity;
647
- let minY = Infinity;
648
- let maxX = -Infinity;
649
- let maxY = -Infinity;
650
- const corner = [0, 0, 0];
651
- for (const cornerU of [box.min[u], box.max[u]]) {
652
- for (const cornerV of [box.min[v], box.max[v]]) {
653
- corner[a] = plane;
654
- corner[u] = cornerU;
655
- corner[v] = cornerV;
656
- const x = m[0] * corner[0] + m[1] * corner[1] + m[2] * corner[2];
657
- const y = m[3] * corner[0] + m[4] * corner[1] + m[5] * corner[2];
658
- const z = m[6] * corner[0] + m[7] * corner[1] + m[8] * corner[2];
659
- const perspective = (pose.scale * cameraDistance) / (cameraDistance - z);
660
- const screenX = pose.centerX + x * perspective;
661
- const screenY = pose.centerY + y * perspective;
662
- minX = Math.min(minX, screenX);
663
- minY = Math.min(minY, screenY);
664
- maxX = Math.max(maxX, screenX);
665
- maxY = Math.max(maxY, screenY);
666
- }
667
- }
668
- const face = {
669
- minX: Math.max(0, Math.floor(minX)),
670
- minY: Math.max(0, Math.floor(minY)),
671
- maxX: Math.min(dotWidth - 1, Math.ceil(maxX)),
672
- maxY: Math.min(dotHeight - 1, Math.ceil(maxY)),
673
- };
674
- if (face.maxX < face.minX || face.maxY < face.minY)
675
- continue;
676
- // Faces are flat, so lighting is computed once per face. The normal in camera space is a
677
- // column of the rotation matrix.
678
- const nx = m[a] * side;
679
- const ny = m[3 + a] * side;
680
- const nz = m[6 + a] * side;
681
- const diffuse = Math.max(0, nx * LIGHT[0] + ny * LIGHT[1] + nz * LIGHT[2]);
682
- const rim = Math.max(0, nx * 0.8 - nz * 0.3);
683
- // On light backgrounds, highlights toward white would vanish, so faces only get darker than
684
- // the brand colors there.
685
- const specular = lightBackground
686
- ? 0
687
- : Math.max(0, nx * HALF_VECTOR[0] + ny * HALF_VECTOR[1] + nz * HALF_VECTOR[2]) ** 24 * 0.6 * 255;
688
- const light = lightBackground
689
- ? Math.min(1, 0.55 + diffuse * 0.45 + rim * 0.1)
690
- : 0.45 + diffuse * 0.78 + rim * 0.25;
691
- faces.push({
692
- axis: a,
693
- plane,
694
- uMin: box.min[u],
695
- uMax: box.max[u],
696
- vMin: box.min[v],
697
- vMax: box.max[v],
698
- ...face,
699
- red: Math.min(255, box.color[0] * light + specular),
700
- green: Math.min(255, box.color[1] * light + specular),
701
- blue: Math.min(255, box.color[2] * light + specular),
702
- });
703
- }
704
- }
705
- }
706
- return faces;
707
- }
708
- }
709
- let playing = false;
710
- /**
711
- * Show the animation as a fullscreen overlay until it is dismissed. The overlay takes focus and mouse input and
712
- * returns focus when hidden, so the rest of the UI keeps running underneath untouched.
713
- */
714
- export async function playEasterEgg3d(tui, screen, egg) {
715
- if (playing)
716
- return;
717
- playing = true;
718
- // Fading needs the terminal's actual default colors; the theme only knows its own.
719
- const reported = await tui.queryTerminalColors({ timeoutMs: 100 });
720
- const dark = theme.appearance === "dark";
721
- const toRgbTuple = (rgb, fallback) => rgb ? [rgb.r, rgb.g, rgb.b] : fallback;
722
- const colors = {
723
- foreground: toRgbTuple(reported.foreground, toRgb(theme.colors.text)),
724
- background: toRgbTuple(reported.background, dark ? [0, 0, 0] : [255, 255, 255]),
725
- };
726
- if (tui.hasOverlay()) {
727
- playing = false;
728
- return;
729
- }
730
- const model = egg.kind === "armin" ? arminModel(toRgb(theme.colors.accent)) : eLogoModel({ column: egg.column, row: egg.row });
731
- const animation = new EasterEgg3dAnimation(tui, screen, model, colors, () => {
732
- playing = false;
733
- overlay.hide();
734
- });
735
- const overlay = tui.showOverlay(animation, { anchor: "top-left", width: "100%", maxHeight: "100%" });
736
- }
737
- export class EasterEgg3dAnimation {
738
- tui;
739
- /** The screen to dissolve, as rendered lines. */
740
- screen;
741
- model;
742
- foreground;
743
- background;
744
- onDone;
745
- startTime = performance.now();
746
- lastRender = performance.now();
747
- timer;
748
- exit;
749
- shuffle;
750
- screenWidth = -1;
751
- screenHeight = -1;
752
- /** Star per cell index, or undefined. */
753
- stars = [];
754
- cells = [];
755
- ansiCache = new Map();
756
- raster;
757
- constructor(tui, screen, model, colors, onDone) {
758
- this.tui = tui;
759
- this.screen = screen;
760
- this.model = model;
761
- this.raster = new BlockRaster(model.cameraDistance);
762
- this.foreground = colors.foreground;
763
- this.background = colors.background;
764
- this.onDone = onDone;
765
- this.timer = setInterval(() => {
766
- // Also stop when no longer rendered, e.g. when pi hides all overlays on exit.
767
- if ((this.exit && this.exitProgress() >= 1) || performance.now() - this.lastRender > 1000)
768
- this.finish();
769
- else
770
- this.tui.requestRender();
771
- }, FRAME_MS);
772
- this.timer.unref?.();
773
- }
774
- /** Play the exit animation. A second call skips it. */
775
- close() {
776
- if (this.exit) {
777
- this.finish();
778
- return;
779
- }
780
- const time = this.elapsed();
781
- const yaw = spinAngle(time);
782
- const turn = Math.PI * 2;
783
- this.exit = {
784
- start: performance.now(),
785
- time,
786
- yaw,
787
- targetYaw: Math.ceil(yaw / turn) * turn,
788
- offsets: this.blockOffsets(time),
789
- };
790
- }
791
- handleInput(data) {
792
- const keybindings = getKeybindings();
793
- if (keybindings.matches(data, "tui.select.cancel") || keybindings.matches(data, "app.clear"))
794
- this.close();
795
- }
796
- handleMouse(event) {
797
- if (event.type === "click")
798
- this.close();
799
- return { handled: true, render: false };
800
- }
801
- invalidate() {
802
- this.screenWidth = -1;
803
- this.screenHeight = -1;
804
- this.ansiCache.clear();
805
- }
806
- render(width) {
807
- const height = Math.max(1, this.tui.terminal.rows);
808
- const foreground = this.foreground;
809
- const background = this.background;
810
- this.lastRender = performance.now();
811
- if (width !== this.screenWidth || height !== this.screenHeight) {
812
- this.screenWidth = width;
813
- this.screenHeight = height;
814
- this.cells = this.prepareCells(width, foreground);
815
- this.stars = this.prepareStars(width, height);
816
- }
817
- // Dissolve time runs forward on entry and backward on exit, so the screen reassembles in reverse order.
818
- let dissolveTime;
819
- let pose;
820
- let hintAlpha;
821
- let starAlpha;
822
- let offsets;
823
- if (this.exit) {
824
- const progress = this.exitProgress();
825
- const landing = clamp01(progress / 0.8);
826
- const settle = 1 - smooth(landing);
827
- dissolveTime = Math.min(this.exit.time, DISSOLVE_END) * (1 - progress);
828
- pose = this.pose(width, height, this.flyProgress(this.exit.time) * settle, this.exit.time);
829
- pose.yaw = this.exit.yaw + (this.exit.targetYaw - this.exit.yaw) * easeOut(landing);
830
- pose.pitch *= settle;
831
- pose.roll *= settle;
832
- hintAlpha = this.hintAlpha(this.exit.time) * (1 - smooth(progress / 0.2));
833
- starAlpha = this.starAlpha(this.exit.time) * (1 - smooth(progress / 0.3));
834
- // Blocks are home well before the logo lands.
835
- const gather = 1 - smooth(progress / 0.5);
836
- offsets = this.exit.offsets.map(([x, y, z]) => [x * gather, y * gather, z * gather]);
837
- }
838
- else {
839
- const time = this.elapsed();
840
- dissolveTime = time;
841
- pose = this.pose(width, height, this.flyProgress(time), time);
842
- hintAlpha = this.hintAlpha(time);
843
- starAlpha = this.starAlpha(time);
844
- offsets = this.blockOffsets(time);
845
- }
846
- const { columns, rows } = this.model;
847
- const boxes = this.model.blocks.map((block, index) => {
848
- const [dx, dy, dz] = offsets[index];
849
- const x = block.home[0] - columns / 2 + dx;
850
- const y = block.home[1] - rows / 2 + dy;
851
- return { min: [x, y, dz - DEPTH / 2], max: [x + 1, y + 1, dz + DEPTH / 2], color: block.color };
852
- });
853
- const raster = this.raster;
854
- raster.render(width, height, pose, boxes, background, isLight(background) ? LIGHT_HALO_STRENGTH : 0);
855
- const halo = (index, base) => {
856
- const amount = raster.haloAmount[index];
857
- if (amount <= 0)
858
- return base;
859
- const color = raster.haloRgb;
860
- return mix(base ?? background, [color[index * 3], color[index * 3 + 1], color[index * 3 + 2]], amount);
861
- };
862
- const backgroundFade = smooth(dissolveTime / BACKGROUND_FADE);
863
- const textFade = smooth(dissolveTime / 0.6) * 0.3;
864
- // Once the screen has fully dissolved, the text layer is empty and can be skipped.
865
- const textActive = dissolveTime < DISSOLVE_END || backgroundFade < 1;
866
- const hint = this.hint(width, height, hintAlpha, background);
867
- const frame = Math.floor(dissolveTime * 14);
868
- const now = this.elapsed();
869
- // Star brightness is quantized, so a row only changes when one of its stars steps to another level
870
- // instead of on every frame.
871
- const starLevel = Math.round(starAlpha * STAR_ALPHA_LEVELS) / STAR_ALPHA_LEVELS;
872
- const starfield = (index) => {
873
- if (starLevel <= 0)
874
- return undefined;
875
- const star = this.stars[index];
876
- if (!star)
877
- return undefined;
878
- const flicker = Math.round((0.5 + 0.5 * Math.sin(now * star.speed + star.phase)) * STAR_FLICKER_LEVELS) /
879
- STAR_FLICKER_LEVELS;
880
- return {
881
- text: star.glyph,
882
- fg: mix(background, mix(foreground, star.tint, 0.5), star.strength * (0.7 + 0.3 * flicker) * starLevel),
883
- };
884
- };
885
- const lines = [];
886
- for (let row = 0; row < height; row++) {
887
- const cells = this.cells[row] ?? [];
888
- let line = "";
889
- let currentFg = -1;
890
- let currentBg = -1;
891
- const emit = (text, fg, bg) => {
892
- const fgKey = fg ? this.pack(fg) : -1;
893
- const bgKey = bg ? this.pack(bg) : -1;
894
- if (fgKey !== currentFg && text !== " ") {
895
- line += fg ? this.ansi(fgKey, false) : "\x1b[39m";
896
- currentFg = fgKey;
897
- }
898
- if (bgKey !== currentBg) {
899
- line += bg ? this.ansi(bgKey, true) : "\x1b[49m";
900
- currentBg = bgKey;
901
- }
902
- line += text;
903
- };
904
- for (let column = 0; column < width; column++) {
905
- const index = row * width + column;
906
- const cell = textActive ? cells[column] : undefined;
907
- const cellBg = halo(index, cell?.bg && backgroundFade < 1 ? mix(cell.bg, background, backgroundFade) : undefined);
908
- if (hint && row === hint.row && column >= hint.start && column < hint.start + hint.text.length) {
909
- const offset = column - hint.start;
910
- emit(hint.text[offset], offset < hint.keyLength ? hint.keyColor : hint.color, cellBg);
911
- continue;
912
- }
913
- const dots = raster.bits[index];
914
- if (dots) {
915
- // Quantized so neighboring cells on one face usually share a color and its escape sequence.
916
- const step = LOGO_COLOR_STEP * raster.counts[index];
917
- const rgb = raster.rgb;
918
- const color = [
919
- Math.round(rgb[index * 3] / step) * LOGO_COLOR_STEP,
920
- Math.round(rgb[index * 3 + 1] / step) * LOGO_COLOR_STEP,
921
- Math.round(rgb[index * 3 + 2] / step) * LOGO_COLOR_STEP,
922
- ];
923
- emit(BRAILLE[dots], color, cellBg);
924
- continue;
925
- }
926
- if (!cell) {
927
- const star = starfield(index);
928
- emit(star?.text ?? " ", star?.fg, cellBg);
929
- continue;
930
- }
931
- const dust = (dissolveTime - cell.delay) / DUST_DURATION;
932
- if (dust < 0 && cell.width === 2 && !raster.bits[index + 1]) {
933
- emit(cell.text, mix(cell.fg, background, textFade), cellBg);
934
- column++;
935
- continue;
936
- }
937
- if (dust < 0 && cell.width === 1) {
938
- emit(cell.text, mix(cell.fg, background, textFade), cellBg);
939
- continue;
940
- }
941
- const dotCount = dust < 0 ? cell.ink : Math.round(cell.ink * (1 - clamp01(dust)));
942
- if (dotCount <= 0) {
943
- const star = starfield(index);
944
- emit(star?.text ?? " ", star?.fg, cellBg);
945
- continue;
946
- }
947
- // Pick `dotCount` distinct dots; the choice changes a few times per second so the dust shimmers.
948
- let bits = 0;
949
- let placed = 0;
950
- for (let attempt = 0; placed < dotCount && attempt < 32; attempt++) {
951
- const bit = DOT_BITS[Math.floor(hash(cell.seed * 7919 + frame * 131 + attempt) * 8)];
952
- if (bits & bit)
953
- continue;
954
- bits |= bit;
955
- placed++;
956
- }
957
- const fade = textFade + (1 - textFade) * clamp01(dust) ** 0.8;
958
- emit(BRAILLE[bits], mix(cell.fg, background, fade), cellBg);
959
- }
960
- lines.push(`${line}\x1b[0m`);
961
- }
962
- return lines;
963
- }
964
- elapsed() {
965
- return (performance.now() - this.startTime) / 1000;
966
- }
967
- exitProgress() {
968
- return this.exit ? clamp01((performance.now() - this.exit.start) / 1000 / EXIT_DURATION) : 0;
969
- }
970
- finish() {
971
- if (!this.timer)
972
- return;
973
- clearInterval(this.timer);
974
- this.timer = undefined;
975
- this.onDone();
976
- }
977
- /** Each block's displacement from its place in the model at `time`, in grid units. */
978
- blockOffsets(time) {
979
- const blocks = this.model.blocks;
980
- const home = () => blocks.map(() => [0, 0, 0]);
981
- if (time < PUZZLE_START)
982
- return home();
983
- const cycle = Math.floor((time - PUZZLE_START) / PUZZLE_CYCLE);
984
- const local = time - PUZZLE_START - cycle * PUZZLE_CYCLE;
985
- if (this.shuffle?.cycle !== cycle)
986
- this.shuffle = { cycle, steps: shuffleSteps(this.model, cycle) };
987
- const steps = this.shuffle.steps;
988
- const offset = (position, index) => {
989
- const block = blocks[index].home;
990
- return [position[0] - block[0], position[1] - block[1], position[2] - block[2]];
991
- };
992
- const shuffleEnd = PUZZLE_STEP * PUZZLE_STEPS;
993
- if (local < shuffleEnd) {
994
- const step = Math.floor(local / PUZZLE_STEP);
995
- const progress = smooth((local - step * PUZZLE_STEP) / PUZZLE_STEP);
996
- return steps[step].map((from, index) => {
997
- const a = offset(from, index);
998
- const b = offset(steps[step + 1][index], index);
999
- return [a[0] + (b[0] - a[0]) * progress, a[1] + (b[1] - a[1]) * progress, a[2] + (b[2] - a[2]) * progress];
1000
- });
1001
- }
1002
- if (local < shuffleEnd + PUZZLE_RETURN) {
1003
- // All blocks fly home at once. Alternating arcs in depth keep them from passing through each other.
1004
- const u = (local - shuffleEnd) / PUZZLE_RETURN;
1005
- const remaining = 1 - smooth(u);
1006
- const arc = Math.sin(Math.PI * clamp01(u)) * 0.8;
1007
- return steps[PUZZLE_STEPS].map((position, index) => {
1008
- const [x, y, z] = offset(position, index);
1009
- return [x * remaining, y * remaining, z * remaining + (index % 2 === 0 ? arc : -arc)];
1010
- });
1011
- }
1012
- return home();
1013
- }
1014
- flyProgress(time) {
1015
- return smooth((time - FLY_START) / FLY_DURATION);
1016
- }
1017
- starAlpha(time) {
1018
- return smooth((time - STARS_START) / STARS_FADE);
1019
- }
1020
- hintAlpha(time) {
1021
- return smooth((time - FLY_START - FLY_DURATION) / HINT_FADE);
1022
- }
1023
- pose(width, height, progress, time) {
1024
- const { columns, rows, cameraDistance, radius, widthShare, origin } = this.model;
1025
- const reach = radius * (cameraDistance / (cameraDistance - radius));
1026
- // Lifting off, the front face must cover exactly the half-block cells (2x2 dots per pixel) despite the
1027
- // perspective.
1028
- const startScale = origin ? (2 * (cameraDistance - DEPTH / 2)) / cameraDistance : START_SCALE;
1029
- const endScale = Math.max(startScale, Math.min(width * 2 * widthShare, (height * 4 - 8) * 0.48) / reach);
1030
- const endX = width;
1031
- const endY = height * 2 - 2;
1032
- const startX = origin ? origin.column * 2 + columns : endX;
1033
- const startY = origin ? origin.row * 4 + rows : endY;
1034
- return {
1035
- centerX: startX + (endX - startX) * progress,
1036
- centerY: startY + (endY - startY) * progress,
1037
- // Interpolate the zoom geometrically so it feels uniform.
1038
- scale: startScale * (endScale / startScale) ** progress,
1039
- yaw: spinAngle(time),
1040
- // Tilts are zero at whole turns, so the camera looks straight at the front of the reassembled logo.
1041
- pitch: 0.3 * Math.sin(spinPhase(time)) * progress,
1042
- roll: 0.06 * Math.sin(2 * spinPhase(time)) * progress,
1043
- };
1044
- }
1045
- hint(width, height, alpha, background) {
1046
- if (alpha <= 0)
1047
- return undefined;
1048
- const key = formatKeyText(getKeybindings().getKeys("tui.select.cancel")[0] ?? "escape");
1049
- const text = `${key} to return`;
1050
- if (text.length > width)
1051
- return undefined;
1052
- return {
1053
- row: height - 2,
1054
- start: Math.floor((width - text.length) / 2),
1055
- text,
1056
- keyLength: key.length,
1057
- keyColor: mix(background, toRgb(theme.colors.muted), alpha),
1058
- color: mix(background, toRgb(theme.colors.dim), alpha),
1059
- };
1060
- }
1061
- /** A sparse, deterministic starfield: one braille dot in about STAR_DENSITY of all cells. */
1062
- prepareStars(width, height) {
1063
- const stars = new Array(width * height);
1064
- for (let index = 0; index < width * height; index++) {
1065
- if (hash(index * 3 + 0x51ed) >= STAR_DENSITY)
1066
- continue;
1067
- const random = (salt) => hash(index * 7 + salt * 0x9e37);
1068
- stars[index] = {
1069
- glyph: BRAILLE[DOT_BITS[Math.floor(random(1) * 8)]],
1070
- tint: STAR_TINTS[Math.floor(random(2) * STAR_TINTS.length)],
1071
- strength: 0.1 + random(3) * 0.12,
1072
- phase: random(4) * Math.PI * 2,
1073
- speed: 0.4 + random(5) * 0.8,
1074
- };
1075
- }
1076
- return stars;
1077
- }
1078
- prepareCells(width, foreground) {
1079
- const cells = parseScreen(this.screen, width, foreground, this.background);
1080
- const height = Math.max(1, this.tui.terminal.rows);
1081
- const { columns, rows, origin } = this.model;
1082
- // The dust spreads out from where the model starts.
1083
- const centerX = origin ? origin.column + columns / 2 : width / 2;
1084
- const centerY = origin ? origin.row + rows / 4 : height / 2;
1085
- const farthest = Math.hypot(Math.max(centerX, width - centerX), Math.max(centerY, height - centerY) * 2);
1086
- for (let row = 0; row < cells.length; row++) {
1087
- const line = cells[row];
1088
- for (let column = 0; column < line.length; column++) {
1089
- const cell = line[column];
1090
- // Wide graphemes share their first column's timing so both halves change together.
1091
- const owner = cell.width === 0 ? line[column - 1] : cell;
1092
- const seed = hash(row * 65_537 + column);
1093
- if (cell.width !== 0) {
1094
- const distance = Math.hypot(column - centerX, (row - centerY) * 2) / farthest;
1095
- cell.delay = FLY_START + distance * WAVE_SPREAD + seed * WAVE_JITTER;
1096
- }
1097
- else {
1098
- cell.delay = owner.delay;
1099
- }
1100
- cell.seed = row * 65_537 + column;
1101
- cell.ink = glyphInk(owner.text, seed);
1102
- }
1103
- }
1104
- // The 3D model replaces its half-block rendering on screen.
1105
- if (origin) {
1106
- for (let row = origin.row; row < origin.row + Math.ceil(rows / 2); row++) {
1107
- const line = cells[row];
1108
- if (!line)
1109
- continue;
1110
- for (let column = origin.column; column < origin.column + columns; column++) {
1111
- const cell = line[column];
1112
- if (cell) {
1113
- cell.text = " ";
1114
- cell.width = 1;
1115
- cell.ink = 0;
1116
- cell.bg = undefined;
1117
- }
1118
- }
1119
- }
1120
- }
1121
- return cells;
1122
- }
1123
- pack(color) {
1124
- return (Math.round(color[0]) << 16) | (Math.round(color[1]) << 8) | Math.round(color[2]);
1125
- }
1126
- ansi(key, isBackground) {
1127
- const cacheKey = key * 2 + (isBackground ? 1 : 0);
1128
- let value = this.ansiCache.get(cacheKey);
1129
- if (value === undefined) {
1130
- const color = rgbColor((key >> 16) & 255, (key >> 8) & 255, key & 255);
1131
- const mode = theme.getColorMode();
1132
- value = isBackground ? backgroundAnsi(color, mode) : foregroundAnsi(color, mode);
1133
- this.ansiCache.set(cacheKey, value);
1134
- }
1135
- return value;
1136
- }
1137
- }
1138
- //# sourceMappingURL=easter-egg-3d.js.map