pi-namespace-patch 1.0.0-namespace.2 → 1.0.2-namespace.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (185) hide show
  1. package/CHANGELOG.md +54 -0
  2. package/README.md +22 -4
  3. package/dist/bundle/chunks/{anthropic-messages-UID2PALB.js → anthropic-messages-MVG2FL56.js} +3 -3
  4. package/dist/bundle/chunks/azure-openai-responses-7AMFUIWJ.js +2 -0
  5. package/dist/bundle/chunks/bedrock-converse-stream.js +2 -2
  6. package/dist/bundle/chunks/chunk-2KAZSACP.js +2 -0
  7. package/dist/bundle/chunks/{chunk-2KTBZM5G.js → chunk-6FX7UEPL.js} +5 -5
  8. package/dist/bundle/chunks/{chunk-2VNGUWBO.js → chunk-BYB6ZAAQ.js} +1 -1
  9. package/dist/bundle/chunks/chunk-DN3QEIXS.js +2 -0
  10. package/dist/bundle/chunks/chunk-F5ZABL6Z.js +20 -0
  11. package/dist/bundle/chunks/{chunk-3LH3ZQKY.js → chunk-G7EDXK4D.js} +1 -1
  12. package/dist/bundle/chunks/chunk-IKZJX7ZT.js +2 -0
  13. package/dist/bundle/chunks/{chunk-4N5K4RKC.js → chunk-OLBCNJCL.js} +31 -32
  14. package/dist/bundle/chunks/{chunk-PRD6WYBT.js → chunk-OYBSLV7Y.js} +1 -1
  15. package/dist/bundle/chunks/{chunk-IBCPYVFK.js → chunk-PDFMCAOZ.js} +4 -4
  16. package/dist/bundle/chunks/{chunk-LTXEMVMA.js → chunk-SYF2TF6W.js} +2 -2
  17. package/dist/bundle/chunks/chunk-WCQZGZ6I.js +82 -0
  18. package/dist/bundle/chunks/{chunk-KDN6RCEQ.js → chunk-ZSI3BL5Q.js} +2 -2
  19. package/dist/bundle/chunks/{cli-QOMC26IJ.js → cli-KILDDGW3.js} +2 -2
  20. package/dist/bundle/chunks/{cloudflare-workers-ai-system-one-NPQN263E.js → cloudflare-workers-ai-system-one-X5PVWWYJ.js} +1 -1
  21. package/dist/bundle/chunks/codemode-worker.js +24 -3
  22. package/dist/bundle/chunks/easter-egg-3d-T5FFWIBR.js +2 -0
  23. package/dist/bundle/chunks/{execute-GVRSEGHL.js → execute-RYVK27GT.js} +25 -4
  24. package/dist/bundle/chunks/{google-generative-ai-APTPZOQL.js → google-generative-ai-ZOK6CV7D.js} +1 -1
  25. package/dist/bundle/chunks/{google-vertex-MXCOSOY3.js → google-vertex-VKWZQ3AY.js} +1 -1
  26. package/dist/bundle/chunks/{mistral-conversations-DKVFNQL6.js → mistral-conversations-7DAUEE4N.js} +1 -1
  27. package/dist/bundle/chunks/node-N5BSDOA5.js +16 -0
  28. package/dist/bundle/chunks/openai-chatgpt.js +1 -1
  29. package/dist/bundle/chunks/{openai-codex-responses-GK67DQQJ.js → openai-codex-responses-TC3OK7B4.js} +1 -1
  30. package/dist/bundle/chunks/openai-completions-GWHGMQ3T.js +7 -0
  31. package/dist/bundle/chunks/openai-responses-EZ7FJ2KL.js +3 -0
  32. package/dist/bundle/chunks/{runtime-2SO2JDWM.js → runtime-D5I2NTIF.js} +1 -1
  33. package/dist/bundle/chunks/virtual-modules-J2M3WAR2.js +2 -0
  34. package/dist/bundle/cli-runtime.js +1 -1
  35. package/dist/bundle/index.js +1 -1
  36. package/dist/bundle/rpc-entry.js +1 -1
  37. package/dist/cli/args.d.ts.map +1 -1
  38. package/dist/cli/args.js +4 -1
  39. package/dist/cli/args.js.map +1 -1
  40. package/dist/config.d.ts.map +1 -1
  41. package/dist/config.js +3 -0
  42. package/dist/config.js.map +1 -1
  43. package/dist/core/agent-session.d.ts.map +1 -1
  44. package/dist/core/agent-session.js +1 -1
  45. package/dist/core/agent-session.js.map +1 -1
  46. package/dist/core/export-html/tool-renderer.d.ts +3 -3
  47. package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
  48. package/dist/core/export-html/tool-renderer.js +3 -3
  49. package/dist/core/export-html/tool-renderer.js.map +1 -1
  50. package/dist/core/extensions/index.d.ts +1 -1
  51. package/dist/core/extensions/index.d.ts.map +1 -1
  52. package/dist/core/extensions/index.js.map +1 -1
  53. package/dist/core/extensions/loader.d.ts.map +1 -1
  54. package/dist/core/extensions/loader.js +5 -0
  55. package/dist/core/extensions/loader.js.map +1 -1
  56. package/dist/core/extensions/runner.d.ts +3 -1
  57. package/dist/core/extensions/runner.d.ts.map +1 -1
  58. package/dist/core/extensions/runner.js +6 -0
  59. package/dist/core/extensions/runner.js.map +1 -1
  60. package/dist/core/extensions/types.d.ts +9 -0
  61. package/dist/core/extensions/types.d.ts.map +1 -1
  62. package/dist/core/extensions/types.js.map +1 -1
  63. package/dist/core/mcp-servers.d.ts +6 -0
  64. package/dist/core/mcp-servers.d.ts.map +1 -1
  65. package/dist/core/mcp-servers.js +11 -0
  66. package/dist/core/mcp-servers.js.map +1 -1
  67. package/dist/core/model-config.d.ts +36 -0
  68. package/dist/core/model-config.d.ts.map +1 -1
  69. package/dist/core/model-config.js +14 -2
  70. package/dist/core/model-config.js.map +1 -1
  71. package/dist/core/model-resolver.js +1 -1
  72. package/dist/core/model-resolver.js.map +1 -1
  73. package/dist/core/provider-composer.d.ts +2 -1
  74. package/dist/core/provider-composer.d.ts.map +1 -1
  75. package/dist/core/provider-composer.js +13 -0
  76. package/dist/core/provider-composer.js.map +1 -1
  77. package/dist/core/tools/renderers/index.d.ts +2 -2
  78. package/dist/core/tools/renderers/index.d.ts.map +1 -1
  79. package/dist/core/tools/renderers/index.js.map +1 -1
  80. package/dist/extensions/mcp/cli.d.ts.map +1 -1
  81. package/dist/extensions/mcp/cli.js +3 -0
  82. package/dist/extensions/mcp/cli.js.map +1 -1
  83. package/dist/extensions/mcp/config.d.ts +15 -3
  84. package/dist/extensions/mcp/config.d.ts.map +1 -1
  85. package/dist/extensions/mcp/config.js +46 -10
  86. package/dist/extensions/mcp/config.js.map +1 -1
  87. package/dist/extensions/mcp/index.d.ts +4 -1
  88. package/dist/extensions/mcp/index.d.ts.map +1 -1
  89. package/dist/extensions/mcp/index.js +80 -45
  90. package/dist/extensions/mcp/index.js.map +1 -1
  91. package/dist/extensions/mcp/oauth.d.ts +4 -1
  92. package/dist/extensions/mcp/oauth.d.ts.map +1 -1
  93. package/dist/extensions/mcp/oauth.js +54 -10
  94. package/dist/extensions/mcp/oauth.js.map +1 -1
  95. package/dist/extensions/mcp/runtime.d.ts.map +1 -1
  96. package/dist/extensions/mcp/runtime.js +1 -0
  97. package/dist/extensions/mcp/runtime.js.map +1 -1
  98. package/dist/extensions/mcp/tools.d.ts +3 -1
  99. package/dist/extensions/mcp/tools.d.ts.map +1 -1
  100. package/dist/extensions/mcp/tools.js +19 -13
  101. package/dist/extensions/mcp/tools.js.map +1 -1
  102. package/dist/extensions/mcp/ui.d.ts.map +1 -1
  103. package/dist/extensions/mcp/ui.js +8 -4
  104. package/dist/extensions/mcp/ui.js.map +1 -1
  105. package/dist/index.d.ts +1 -1
  106. package/dist/index.d.ts.map +1 -1
  107. package/dist/index.js.map +1 -1
  108. package/dist/modes/interactive/components/armin.d.ts +3 -0
  109. package/dist/modes/interactive/components/armin.d.ts.map +1 -1
  110. package/dist/modes/interactive/components/armin.js +7 -5
  111. package/dist/modes/interactive/components/armin.js.map +1 -1
  112. package/dist/modes/interactive/components/auth-url.d.ts +14 -0
  113. package/dist/modes/interactive/components/auth-url.d.ts.map +1 -0
  114. package/dist/modes/interactive/components/auth-url.js +37 -0
  115. package/dist/modes/interactive/components/auth-url.js.map +1 -0
  116. package/dist/modes/interactive/components/easter-egg-3d.d.ts +104 -0
  117. package/dist/modes/interactive/components/easter-egg-3d.d.ts.map +1 -0
  118. package/dist/modes/interactive/components/{pi-logo-animation.js → easter-egg-3d.js} +127 -74
  119. package/dist/modes/interactive/components/easter-egg-3d.js.map +1 -0
  120. package/dist/modes/interactive/components/easter-egg-3d.lazy.d.ts +6 -0
  121. package/dist/modes/interactive/components/easter-egg-3d.lazy.d.ts.map +1 -0
  122. package/dist/modes/interactive/components/easter-egg-3d.lazy.js +23 -0
  123. package/dist/modes/interactive/components/easter-egg-3d.lazy.js.map +1 -0
  124. package/dist/modes/interactive/components/index.d.ts +0 -1
  125. package/dist/modes/interactive/components/index.d.ts.map +1 -1
  126. package/dist/modes/interactive/components/index.js +0 -1
  127. package/dist/modes/interactive/components/index.js.map +1 -1
  128. package/dist/modes/interactive/components/login-dialog.d.ts +2 -0
  129. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  130. package/dist/modes/interactive/components/login-dialog.js +11 -5
  131. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  132. package/dist/modes/interactive/components/tool-execution.d.ts +6 -18
  133. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  134. package/dist/modes/interactive/components/tool-execution.js +22 -45
  135. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  136. package/dist/modes/interactive/interactive-mode.d.ts +2 -2
  137. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  138. package/dist/modes/interactive/interactive-mode.js +15 -17
  139. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  140. package/dist/package-manager-cli.d.ts.map +1 -1
  141. package/dist/package-manager-cli.js +12 -0
  142. package/dist/package-manager-cli.js.map +1 -1
  143. package/dist/utils/image-convert.d.ts +12 -0
  144. package/dist/utils/image-convert.d.ts.map +1 -1
  145. package/dist/utils/image-convert.js +45 -6
  146. package/dist/utils/image-convert.js.map +1 -1
  147. package/docs/cli.md +2 -0
  148. package/docs/codemode.md +1 -1
  149. package/docs/extensions.md +4 -0
  150. package/docs/keybindings.md +1 -1
  151. package/docs/mcp.md +23 -1
  152. package/docs/models.md +28 -2
  153. package/docs/quickstart.md +16 -2
  154. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  155. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  156. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  157. package/examples/extensions/gondolin/package-lock.json +2 -2
  158. package/examples/extensions/gondolin/package.json +1 -1
  159. package/examples/extensions/sandbox/package-lock.json +2 -2
  160. package/examples/extensions/sandbox/package.json +1 -1
  161. package/examples/extensions/with-deps/package-lock.json +2 -2
  162. package/examples/extensions/with-deps/package.json +1 -1
  163. package/package.json +13 -14
  164. package/dist/bundle/chunks/azure-openai-responses-AFMVM6NP.js +0 -2
  165. package/dist/bundle/chunks/chunk-6D7LHLKG.js +0 -2
  166. package/dist/bundle/chunks/chunk-7FH3BDRG.js +0 -82
  167. package/dist/bundle/chunks/chunk-DTD7JQ7Y.js +0 -42
  168. package/dist/bundle/chunks/chunk-MJOHEBV7.js +0 -2
  169. package/dist/bundle/chunks/node-O3RIBJRH.js +0 -16
  170. package/dist/bundle/chunks/openai-completions-JXDDPZ23.js +0 -7
  171. package/dist/bundle/chunks/openai-responses-CQDDLDQF.js +0 -3
  172. package/dist/bundle/chunks/pi-logo-animation-MPKZE4EK.js +0 -2
  173. package/dist/bundle/chunks/virtual-modules-3THEGRQQ.js +0 -2
  174. package/dist/modes/interactive/components/daxnuts.d.ts +0 -23
  175. package/dist/modes/interactive/components/daxnuts.d.ts.map +0 -1
  176. package/dist/modes/interactive/components/daxnuts.js +0 -140
  177. package/dist/modes/interactive/components/daxnuts.js.map +0 -1
  178. package/dist/modes/interactive/components/pi-logo-animation.d.ts +0 -68
  179. package/dist/modes/interactive/components/pi-logo-animation.d.ts.map +0 -1
  180. package/dist/modes/interactive/components/pi-logo-animation.js.map +0 -1
  181. package/dist/modes/interactive/components/pi-logo-animation.lazy.d.ts +0 -7
  182. package/dist/modes/interactive/components/pi-logo-animation.lazy.d.ts.map +0 -1
  183. package/dist/modes/interactive/components/pi-logo-animation.lazy.js +0 -12
  184. package/dist/modes/interactive/components/pi-logo-animation.lazy.js.map +0 -1
  185. package/npm-shrinkwrap.json +0 -1952
@@ -0,0 +1 @@
1
+ {"version":3,"file":"easter-egg-3d.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/easter-egg-3d.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tbackgroundAnsi,\n\ttype Color,\n\ttype Component,\n\tcolorToRgb,\n\tforegroundAnsi,\n\tgetKeybindings,\n\tindexedColor,\n\trgbColor,\n\ttype TUI,\n\ttype TuiMouseEvent,\n\ttype TuiMouseEventResult,\n\tvisibleWidth,\n} from \"@earendil-works/pi-tui\";\nimport { theme } from \"../theme/theme.ts\";\nimport { ARMIN_HEIGHT, ARMIN_WIDTH, isArminPixel } from \"./armin.ts\";\nimport { formatKeyText } from \"./keybinding-hints.ts\";\n\n/**\n * Fullscreen 3D easter eggs: the pi logo (header logo click) and Armin (/arminsayshi). Both are bitmaps built from\n * one block per pixel. The current screen dissolves into braille dust while the model spins in the center and its\n * blocks play a sliding puzzle. Leaving plays the same timeline backwards, so the screen reassembles.\n *\n * The pi logo lifts off the header, flies to the center, and grows; the dust spreads out from the header logo.\n * Armin grows out of a speck at the center; the dust spreads out from the center.\n *\n * The blocks are ray cast per braille dot. A braille cell holds 2x4 roughly square dots, so one pixel of a\n * half-block bitmap is exactly 2x2 dots, and the header logo (4x2 cells) is 8x8 dots when it lifts off.\n */\n\ntype Rgb = readonly [number, number, number];\n\ninterface ScreenCell {\n\ttext: string;\n\t/** 1 or 2 for a grapheme, 0 for the second column of a wide grapheme. */\n\twidth: number;\n\tfg: Rgb;\n\t/** Undefined when the cell uses the terminal's default background. */\n\tbg: Rgb | undefined;\n\t/** Seconds until the cell turns into braille dust. */\n\tdelay: number;\n\t/** Number of braille dots the glyph turns into. */\n\tink: number;\n\tseed: number;\n}\n\ninterface Star {\n\t/** Braille character with the single dot the star occupies. */\n\tglyph: string;\n\t/** Color the star leans toward; it only ever shows a small step from the background toward it. */\n\ttint: Rgb;\n\t/** Largest step from the background toward the tint, from 0 to 1. */\n\tstrength: number;\n\tphase: number;\n\t/** Flicker speed in radians per second. */\n\tspeed: number;\n}\n\ninterface Box {\n\tmin: readonly [number, number, number];\n\tmax: readonly [number, number, number];\n\tcolor: Rgb;\n}\n\ninterface Pose {\n\tcenterX: number;\n\tcenterY: number;\n\t/** Braille dots per model pixel at depth 0. */\n\tscale: number;\n\tyaw: number;\n\tpitch: number;\n\troll: number;\n}\n\nconst DEPTH = 0.7;\nconst FLY_START = 0.1;\nconst FLY_DURATION = 1.3;\n/** Braille dots per pixel when a model without an origin appears, growing from a speck at the center. */\nconst START_SCALE = 0.1;\n\n/** Grid position of a block: column and row in the bitmap, and layer (-1, 0, 1) in depth. */\ntype Cell3 = readonly [number, number, number];\n\n/** A bitmap built from one block per foreground pixel. Each is a block that the puzzle slides around. */\ninterface Model {\n\t/** Bitmap size in pixels. */\n\tcolumns: number;\n\trows: number;\n\tblocks: Array<{ home: Cell3; color: Rgb }>;\n\t/** Camera distance from the model's center, in pixels. */\n\tcameraDistance: number;\n\t/** Farthest distance of any block corner from the center, with blocks on the outer depth layers. */\n\tradius: number;\n\t/** Largest share of the screen width the spinning model covers. */\n\twidthShare: number;\n\t/** Number of blocks the puzzle moves per step, given a random number from 0 to 1. */\n\tpuzzleMoves: (random: number) => number;\n\t/**\n\t * Top-left cell of the model's half-block rendering on screen. The model lifts off from there and replaces it.\n\t * Undefined to grow out of the center.\n\t */\n\torigin: { column: number; row: number } | undefined;\n}\n\nfunction createModel(\n\tcolumns: number,\n\trows: number,\n\tpixel: (column: number, row: number) => Rgb | undefined,\n\toptions: Pick<Model, \"cameraDistance\" | \"widthShare\" | \"origin\"> & {\n\t\tpuzzleMoves: (random: number, blockCount: number) => number;\n\t},\n): Model {\n\tconst blocks: Model[\"blocks\"] = [];\n\tfor (let row = 0; row < rows; row++) {\n\t\tfor (let column = 0; column < columns; column++) {\n\t\t\tconst color = pixel(column, row);\n\t\t\tif (color) blocks.push({ home: [column, row, 0], color });\n\t\t}\n\t}\n\treturn {\n\t\tcolumns,\n\t\trows,\n\t\tblocks,\n\t\tcameraDistance: options.cameraDistance,\n\t\tradius: Math.hypot(columns / 2, rows / 2, 1 + DEPTH / 2),\n\t\twidthShare: options.widthShare,\n\t\tpuzzleMoves: (random) => options.puzzleMoves(random, blocks.length),\n\t\torigin: options.origin,\n\t};\n}\n\nconst CORAL: Rgb = [228, 138, 122];\nconst BLUE: Rgb = [79, 142, 179];\nconst YELLOW: Rgb = [234, 182, 93];\nconst PI_LOGO_PIXELS = [\"ccc.\", \"b.c.\", \"bb.y\", \"b..y\"];\nconst PI_LOGO_COLORS: Record<string, Rgb> = { c: CORAL, b: BLUE, y: YELLOW };\n\nfunction piLogoModel(origin: { column: number; row: number }): Model {\n\treturn createModel(4, 4, (column, row) => PI_LOGO_COLORS[PI_LOGO_PIXELS[row]![column]!], {\n\t\tcameraDistance: 10,\n\t\twidthShare: 0.35,\n\t\tpuzzleMoves: (random) => (random < 0.4 ? 2 : 1),\n\t\torigin,\n\t});\n}\n\nfunction arminModel(color: Rgb): Model {\n\treturn createModel(ARMIN_WIDTH, ARMIN_HEIGHT, (column, row) => (isArminPixel(column, row) ? color : undefined), {\n\t\t// Far enough that the perspective stays mild for a figure about 36 blocks tall.\n\t\tcameraDistance: 80,\n\t\twidthShare: 0.45,\n\t\tpuzzleMoves: (random, blockCount) => Math.round(blockCount * (0.03 + random * 0.04)),\n\t\torigin: undefined,\n\t});\n}\n\n// The sliding puzzle: after the model spun for a while, blocks slide into free neighboring cells, a few at a time.\n// Each cycle shuffles, flies every block back home, and holds the model briefly.\nconst PUZZLE_START = FLY_START + FLY_DURATION + 3;\nconst PUZZLE_STEP = 0.3;\nconst PUZZLE_STEPS = 12;\nconst PUZZLE_RETURN = 1;\nconst PUZZLE_HOLD = 0.6;\nconst PUZZLE_CYCLE = PUZZLE_STEP * PUZZLE_STEPS + PUZZLE_RETURN + PUZZLE_HOLD;\nconst PUZZLE_MOVES: Cell3[] = [\n\t[1, 0, 0],\n\t[-1, 0, 0],\n\t[0, 1, 0],\n\t[0, -1, 0],\n\t[1, 0, 0],\n\t[-1, 0, 0],\n\t[0, 1, 0],\n\t[0, -1, 0],\n\t[0, 0, 1],\n\t[0, 0, -1],\n];\n\n/** Block positions after each step of one shuffle cycle, starting at home. Deterministic per cycle. */\nfunction shuffleSteps(model: Model, cycle: number): Cell3[][] {\n\tconst { columns, rows } = model;\n\tlet positions: Cell3[] = model.blocks.map((block) => block.home);\n\tconst steps = [positions];\n\tconst lastMoved = new Set<number>();\n\tlet random = cycle * 7_919 + 1;\n\tconst next = () => hash(random++);\n\tconst key = ([x, y, z]: Cell3) => ((z + 1) * rows + y) * columns + x;\n\tfor (let step = 0; step < PUZZLE_STEPS; step++) {\n\t\tconst occupied = new Set(positions.map(key));\n\t\tconst nextPositions = [...positions];\n\t\tconst moved = new Set<number>();\n\t\tconst moveCount = model.puzzleMoves(next());\n\t\tfor (let move = 0; move < moveCount; move++) {\n\t\t\tconst candidates: Array<{ block: number; target: Cell3 }> = [];\n\t\t\tfor (let block = 0; block < positions.length; block++) {\n\t\t\t\tif (moved.has(block)) continue;\n\t\t\t\tconst [x, y, z] = positions[block]!;\n\t\t\t\tfor (const [dx, dy, dz] of PUZZLE_MOVES) {\n\t\t\t\t\tconst target: Cell3 = [x + dx, y + dy, z + dz];\n\t\t\t\t\tif (target[0] < 0 || target[0] >= columns || target[1] < 0 || target[1] >= rows) continue;\n\t\t\t\t\tif (target[2] < -1 || target[2] > 1 || occupied.has(key(target))) continue;\n\t\t\t\t\tcandidates.push({ block, target });\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Prefer blocks that did not just move, so the puzzle does not look like one block jittering.\n\t\t\tconst fresh = candidates.filter((candidate) => !lastMoved.has(candidate.block));\n\t\t\tconst pool = fresh.length > 0 ? fresh : candidates;\n\t\t\tconst choice = pool[Math.floor(next() * pool.length)];\n\t\t\tif (!choice) break;\n\t\t\toccupied.add(key(choice.target));\n\t\t\tnextPositions[choice.block] = choice.target;\n\t\t\tmoved.add(choice.block);\n\t\t}\n\t\tlastMoved.clear();\n\t\tfor (const block of moved) lastMoved.add(block);\n\t\tpositions = nextPositions;\n\t\tsteps.push(positions);\n\t}\n\treturn steps;\n}\n\nconst FRAME_MS = 1000 / 30;\nconst DUST_DURATION = 0.35;\nconst WAVE_SPREAD = 0.55;\nconst WAVE_JITTER = 0.12;\nconst DISSOLVE_END = FLY_START + WAVE_SPREAD + WAVE_JITTER + DUST_DURATION;\nconst BACKGROUND_FADE = 0.5;\nconst EXIT_DURATION = 1.1;\n// A faint starfield fades in behind the logo once the screen has dissolved.\nconst STARS_START = 2.5;\nconst STARS_FADE = 2;\nconst STAR_DENSITY = 0.018;\n// Star tints: neutral, pale blue, pale gold, and pale rose, each mixed half with the terminal's foreground.\nconst STAR_TINTS: Rgb[] = [\n\t[255, 255, 255],\n\t[170, 195, 255],\n\t[255, 225, 170],\n\t[255, 190, 205],\n];\nconst LOGO_COLOR_STEP = 5;\n// On light backgrounds most of each braille cell shows the bright background, which washes the logo out. There,\n// the logo gets a halo: its colors and coverage blurred into the cell backgrounds, strongest under the logo and\n// fading out over HALO_RADIUS_X columns and HALO_RADIUS_Y rows (cells are about twice as tall as wide).\nconst LIGHT_HALO_STRENGTH = 0.3;\nconst HALO_RADIUS_X = 6;\nconst HALO_RADIUS_Y = 3;\nconst HALO_LEVELS = 32;\nconst STAR_ALPHA_LEVELS = 8;\nconst STAR_FLICKER_LEVELS = 3;\nconst HINT_FADE = 0.5;\n\n// Braille dot bits, indexed by row * 2 + column within the 2x4 cell.\nconst DOT_BITS = [0x01, 0x08, 0x02, 0x10, 0x04, 0x20, 0x40, 0x80];\nconst BRAILLE = Array.from({ length: 256 }, (_, bits) => String.fromCharCode(0x2800 + bits));\nconst LIGHT = normalize([-0.45, -0.6, 0.75]);\nconst HALF_VECTOR = normalize([LIGHT[0], LIGHT[1], LIGHT[2] + 1]);\n\nfunction normalize(v: readonly [number, number, number]): [number, number, number] {\n\tconst length = Math.hypot(v[0], v[1], v[2]);\n\treturn [v[0] / length, v[1] / length, v[2] / length];\n}\n\nfunction clamp01(value: number): number {\n\treturn value < 0 ? 0 : value > 1 ? 1 : value;\n}\n\n/** Quintic smoothstep. */\nfunction smooth(value: number): number {\n\tconst t = clamp01(value);\n\treturn t * t * t * (t * (t * 6 - 15) + 10);\n}\n\nfunction easeOut(value: number): number {\n\tconst t = 1 - clamp01(value);\n\treturn 1 - t * t * t;\n}\n\nfunction mix(a: Rgb, b: Rgb, amount: number): Rgb {\n\treturn [a[0] + (b[0] - a[0]) * amount, a[1] + (b[1] - a[1]) * amount, a[2] + (b[2] - a[2]) * amount];\n}\n\nfunction hash(value: number): number {\n\tlet x = Math.imul(value ^ 0x9e3779b9, 0x85ebca6b);\n\tx ^= x >>> 13;\n\tx = Math.imul(x, 0xc2b2ae35);\n\tx ^= x >>> 16;\n\treturn (x >>> 0) / 0x100000000;\n}\n\n/** Whether a background is light, by relative luminance. */\nfunction isLight([r, g, b]: Rgb): boolean {\n\treturn 0.2126 * r + 0.7152 * g + 0.0722 * b > 128;\n}\n\nfunction toRgb(color: Color): Rgb {\n\tconst { r, g, b } = colorToRgb(color);\n\treturn [r, g, b];\n}\n\n/** Braille dots a glyph turns into, a rough measure of how much ink it has. */\nfunction glyphInk(text: string, seed: number): number {\n\tif (text.trim() === \"\") return 0;\n\tif (/^[.,:;'`\\-_·]$/.test(text)) return 2;\n\tif (/^[\\u2500-\\u257f]$/.test(text)) return 3;\n\treturn 4 + Math.floor(seed * 3);\n}\n\nconst segmenter = new Intl.Segmenter();\n\n/** Parse rendered lines into cells with resolved colors. Other escape sequences (OSC, APC, cursor) are skipped. */\nfunction parseScreen(\n\tlines: readonly string[],\n\twidth: number,\n\tforeground: Rgb,\n\tbackground: Rgb,\n): Array<Array<ScreenCell>> {\n\tconst palette = (index: number): Rgb => toRgb(indexedColor(index));\n\treturn lines.map((line) => {\n\t\tconst cells: ScreenCell[] = [];\n\t\tlet fg: Rgb | undefined;\n\t\tlet bg: Rgb | undefined;\n\t\tlet dim = false;\n\t\tlet inverse = false;\n\t\tconst applySgr = (params: string) => {\n\t\t\tconst codes = params === \"\" ? [\"0\"] : params.split(\";\");\n\t\t\tfor (let i = 0; i < codes.length; i++) {\n\t\t\t\tconst parts = codes[i]!.split(\":\").map((part) => Number.parseInt(part, 10));\n\t\t\t\tconst code = parts[0] ?? 0;\n\t\t\t\tif (code === 38 || code === 48) {\n\t\t\t\t\t// Extended color, either as `38;5;n` / `38;2;r;g;b` or colon sub-parameters.\n\t\t\t\t\tlet args: number[];\n\t\t\t\t\tif (parts.length > 1) {\n\t\t\t\t\t\targs = parts.slice(1).filter((part) => !Number.isNaN(part));\n\t\t\t\t\t\t// `38:2::r:g:b` has an empty color space id, dropped above.\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst kind = Number.parseInt(codes[i + 1] ?? \"\", 10);\n\t\t\t\t\t\tconst count = kind === 5 ? 2 : kind === 2 ? 4 : 1;\n\t\t\t\t\t\targs = codes.slice(i + 1, i + 1 + count).map((part) => Number.parseInt(part, 10));\n\t\t\t\t\t\ti += count;\n\t\t\t\t\t}\n\t\t\t\t\tlet color: Rgb | undefined;\n\t\t\t\t\tif (args[0] === 5 && args[1] !== undefined) color = palette(args[1]);\n\t\t\t\t\telse if (args[0] === 2 && args.length >= 4) color = [args[1]!, args[2]!, args[3]!];\n\t\t\t\t\tif (color) {\n\t\t\t\t\t\tif (code === 38) fg = color;\n\t\t\t\t\t\telse bg = color;\n\t\t\t\t\t}\n\t\t\t\t} else if (code === 0) {\n\t\t\t\t\tfg = undefined;\n\t\t\t\t\tbg = undefined;\n\t\t\t\t\tdim = false;\n\t\t\t\t\tinverse = false;\n\t\t\t\t} else if (code === 2) dim = true;\n\t\t\t\telse if (code === 22) dim = false;\n\t\t\t\telse if (code === 7) inverse = true;\n\t\t\t\telse if (code === 27) inverse = false;\n\t\t\t\telse if (code >= 30 && code <= 37) fg = palette(code - 30);\n\t\t\t\telse if (code >= 90 && code <= 97) fg = palette(code - 90 + 8);\n\t\t\t\telse if (code === 39) fg = undefined;\n\t\t\t\telse if (code >= 40 && code <= 47) bg = palette(code - 40);\n\t\t\t\telse if (code >= 100 && code <= 107) bg = palette(code - 100 + 8);\n\t\t\t\telse if (code === 49) bg = undefined;\n\t\t\t}\n\t\t};\n\t\tconst pushText = (text: string) => {\n\t\t\tfor (const { segment } of segmenter.segment(text)) {\n\t\t\t\tconst glyphWidth = visibleWidth(segment);\n\t\t\t\tif (glyphWidth === 0 || cells.length + glyphWidth > width) continue;\n\t\t\t\tlet cellFg = fg ?? foreground;\n\t\t\t\tlet cellBg = bg;\n\t\t\t\tif (inverse) {\n\t\t\t\t\tcellFg = bg ?? background;\n\t\t\t\t\tcellBg = fg ?? foreground;\n\t\t\t\t}\n\t\t\t\tif (dim) cellFg = mix(cellFg, cellBg ?? background, 0.4);\n\t\t\t\tconst cell = { text: segment, width: glyphWidth, fg: cellFg, bg: cellBg, delay: 0, ink: 0, seed: 0 };\n\t\t\t\tcells.push(cell);\n\t\t\t\tif (glyphWidth === 2) cells.push({ ...cell, text: \"\", width: 0 });\n\t\t\t}\n\t\t};\n\t\tlet i = 0;\n\t\twhile (i < line.length) {\n\t\t\tconst sequenceStart = line.indexOf(\"\\x1b\", i);\n\t\t\tif (sequenceStart === -1) {\n\t\t\t\tpushText(line.slice(i));\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (sequenceStart > i) pushText(line.slice(i, sequenceStart));\n\t\t\tconst kind = line[sequenceStart + 1];\n\t\t\tif (kind === \"[\") {\n\t\t\t\tlet end = sequenceStart + 2;\n\t\t\t\twhile (end < line.length && (line.charCodeAt(end) < 0x40 || line.charCodeAt(end) > 0x7e)) end++;\n\t\t\t\tif (line[end] === \"m\") applySgr(line.slice(sequenceStart + 2, end));\n\t\t\t\ti = end + 1;\n\t\t\t} else if (kind === \"]\" || kind === \"_\" || kind === \"P\" || kind === \"^\") {\n\t\t\t\t// String sequences end at BEL or ST (ESC \\).\n\t\t\t\tconst bell = line.indexOf(\"\\x07\", sequenceStart + 2);\n\t\t\t\tconst st = line.indexOf(\"\\x1b\\\\\", sequenceStart + 2);\n\t\t\t\tif (bell === -1 && st === -1) break;\n\t\t\t\ti = bell !== -1 && (st === -1 || bell < st) ? bell + 1 : st + 2;\n\t\t\t} else {\n\t\t\t\ti = sequenceStart + 2;\n\t\t\t}\n\t\t}\n\t\treturn cells;\n\t});\n}\n\n/** Row-major 3x3 rotation matrix for yaw (y), then pitch (x), then roll (z). */\nfunction rotation(yaw: number, pitch: number, roll: number): number[] {\n\tconst [sy, cy, sx, cx, sz, cz] = [\n\t\tMath.sin(yaw),\n\t\tMath.cos(yaw),\n\t\tMath.sin(pitch),\n\t\tMath.cos(pitch),\n\t\tMath.sin(roll),\n\t\tMath.cos(roll),\n\t];\n\t// Rz * Rx * Ry\n\tconst ry = [cy, 0, sy, 0, 1, 0, -sy, 0, cy];\n\tconst rx = [1, 0, 0, 0, cx, -sx, 0, sx, cx];\n\tconst rz = [cz, -sz, 0, sz, cz, 0, 0, 0, 1];\n\treturn multiply(rz, multiply(rx, ry));\n}\n\nfunction multiply(a: number[], b: number[]): number[] {\n\tconst result = new Array<number>(9);\n\tfor (let row = 0; row < 3; row++) {\n\t\tfor (let column = 0; column < 3; column++) {\n\t\t\tresult[row * 3 + column] =\n\t\t\t\ta[row * 3]! * b[column]! + a[row * 3 + 1]! * b[3 + column]! + a[row * 3 + 2]! * b[6 + column]!;\n\t\t}\n\t}\n\treturn result;\n}\n\n// The spin is locked to the puzzle: one turn per cycle, facing the camera in the middle of each hold.\nconst SPIN_RAMP = 1.4;\nconst SPIN_SPEED = (Math.PI * 2) / PUZZLE_CYCLE;\n// How much the spin slows down while facing the camera (and speeds up while facing away), from 0 to 1.\nconst SPIN_LINGER = 0.6;\nconst FIRST_FRONT_VIEW = PUZZLE_START + PUZZLE_STEP * PUZZLE_STEPS + PUZZLE_RETURN + PUZZLE_HOLD / 2;\n\n/** Uniform spin that accelerates from rest over SPIN_RAMP, then turns at SPIN_SPEED. */\nfunction baseSpinPhase(time: number): number {\n\tconst elapsed = time - FLY_START;\n\tif (elapsed <= 0) return 0;\n\tconst u = elapsed / SPIN_RAMP;\n\t// Integral of the quintic smoothstep ramp.\n\tif (u < 1) return SPIN_SPEED * SPIN_RAMP * (u ** 6 - 3 * u ** 5 + 2.5 * u ** 4);\n\treturn SPIN_SPEED * (SPIN_RAMP * 0.5 + elapsed - SPIN_RAMP);\n}\n\n// Extra rotation added during the flight, so the phase is a whole number of turns at every assembled front view.\nconst SPIN_ALIGNMENT = Math.PI * 2 - (baseSpinPhase(FIRST_FRONT_VIEW) % (Math.PI * 2));\n\n/** Spin phase: whole turns exactly when the reassembled logo faces the camera. */\nfunction spinPhase(time: number): number {\n\treturn baseSpinPhase(time) + SPIN_ALIGNMENT * smooth((time - FLY_START) / FLY_DURATION);\n}\n\n/** Yaw of the logo. It matches the phase at whole turns but lingers there, so the logo reads from the front. */\nfunction spinAngle(time: number): number {\n\tconst phase = spinPhase(time);\n\treturn phase - SPIN_LINGER * Math.sin(phase);\n}\n\ninterface Face {\n\taxis: number;\n\t/** Plane coordinate on `axis` in object space. */\n\tplane: number;\n\tuMin: number;\n\tuMax: number;\n\tvMin: number;\n\tvMax: number;\n\t/** Projected bounds in braille dots, inclusive. */\n\tminX: number;\n\tminY: number;\n\tmaxX: number;\n\tmaxY: number;\n\tred: number;\n\tgreen: number;\n\tblue: number;\n}\n\n/**\n * Renders the model's blocks into braille cells. Only faces that point at the camera and are not covered by a\n * touching block are drawn. Each face is rasterized over its projected bounds by intersecting each dot's ray\n * with the face's plane, with a depth buffer resolving overlaps. Buffers are reused between frames.\n */\nclass BlockRaster {\n\t/** Braille dot bits per cell. */\n\tbits = new Uint8Array(0);\n\t/** Lit dots per cell. */\n\tcounts = new Uint8Array(0);\n\t/** Summed RGB of the lit dots per cell. */\n\trgb = new Float32Array(0);\n\t/** Halo tint strength per cell, from 0 to 1. Only set when a halo was requested. */\n\thaloAmount = new Float32Array(0);\n\t/** Halo color per cell. */\n\thaloRgb = new Float32Array(0);\n\tprivate width = 0;\n\tprivate height = 0;\n\t/** Ray parameter of the nearest hit per dot; smaller is nearer. */\n\tprivate depth = new Float32Array(0);\n\t/** Face index + 1 of the nearest hit per dot, 0 for none. */\n\tprivate faceIds = new Uint16Array(0);\n\t/** Cells written by the previous frame, cleared before the next one. */\n\tprivate dirty: { minX: number; minY: number; maxX: number; maxY: number } | undefined;\n\t/** Cells with a halo from the previous frame, cleared before the next one. */\n\tprivate haloDirty: { minX: number; minY: number; maxX: number; maxY: number } | undefined;\n\tprivate readonly cameraDistance: number;\n\n\tconstructor(cameraDistance: number) {\n\t\tthis.cameraDistance = cameraDistance;\n\t}\n\n\trender(\n\t\twidth: number,\n\t\theight: number,\n\t\tpose: Pose,\n\t\tboxes: readonly Box[],\n\t\tbackground: Rgb,\n\t\thaloStrength: number,\n\t): void {\n\t\tconst dotWidth = width * 2;\n\t\tconst dotHeight = height * 4;\n\t\tif (width !== this.width || height !== this.height) {\n\t\t\tthis.width = width;\n\t\t\tthis.height = height;\n\t\t\tthis.bits = new Uint8Array(width * height);\n\t\t\tthis.counts = new Uint8Array(width * height);\n\t\t\tthis.rgb = new Float32Array(width * height * 3);\n\t\t\tthis.haloAmount = new Float32Array(width * height);\n\t\t\tthis.haloRgb = new Float32Array(width * height * 3);\n\t\t\tthis.haloDirty = undefined;\n\t\t\tthis.depth = new Float32Array(dotWidth * dotHeight).fill(Infinity);\n\t\t\tthis.faceIds = new Uint16Array(dotWidth * dotHeight);\n\t\t\tthis.dirty = undefined;\n\t\t} else if (this.dirty) {\n\t\t\tconst { minX, minY, maxX, maxY } = this.dirty;\n\t\t\tfor (let row = minY; row <= maxY; row++) {\n\t\t\t\tthis.bits.fill(0, row * width + minX, row * width + maxX + 1);\n\t\t\t\tthis.counts.fill(0, row * width + minX, row * width + maxX + 1);\n\t\t\t\tthis.rgb.fill(0, (row * width + minX) * 3, (row * width + maxX + 1) * 3);\n\t\t\t}\n\t\t\tthis.dirty = undefined;\n\t\t}\n\t\tif (this.haloDirty) {\n\t\t\tconst { minX, minY, maxX, maxY } = this.haloDirty;\n\t\t\tfor (let row = minY; row <= maxY; row++) {\n\t\t\t\tthis.haloAmount.fill(0, row * width + minX, row * width + maxX + 1);\n\t\t\t\tthis.haloRgb.fill(0, (row * width + minX) * 3, (row * width + maxX + 1) * 3);\n\t\t\t}\n\t\t\tthis.haloDirty = undefined;\n\t\t}\n\n\t\tconst m = rotation(pose.yaw, pose.pitch, pose.roll);\n\t\tconst { centerX, centerY, scale } = pose;\n\t\tconst cameraDistance = this.cameraDistance;\n\t\t// The camera sits at (0, 0, cameraDistance) in camera space; object space is the transpose rotation.\n\t\tconst origin = [m[6]! * cameraDistance, m[7]! * cameraDistance, m[8]! * cameraDistance];\n\t\tconst light = isLight(background);\n\t\tconst faces = this.visibleFaces(m, origin, pose, boxes, dotWidth, dotHeight, light);\n\t\tif (faces.length === 0) return;\n\t\tlet minX = dotWidth;\n\t\tlet minY = dotHeight;\n\t\tlet maxX = -1;\n\t\tlet maxY = -1;\n\t\tfor (const face of faces) {\n\t\t\tminX = Math.min(minX, face.minX);\n\t\t\tminY = Math.min(minY, face.minY);\n\t\t\tmaxX = Math.max(maxX, face.maxX);\n\t\t\tmaxY = Math.max(maxY, face.maxY);\n\t\t}\n\t\tif (maxX < minX || maxY < minY) return;\n\n\t\tconst depth = this.depth;\n\t\tconst faceIds = this.faceIds;\n\t\tfor (let faceIndex = 0; faceIndex < faces.length; faceIndex++) {\n\t\t\tconst face = faces[faceIndex]!;\n\t\t\tconst a = face.axis;\n\t\t\tconst u = (a + 1) % 3;\n\t\t\tconst v = (a + 2) % 3;\n\t\t\tconst originA = origin[a]!;\n\t\t\tconst originU = origin[u]!;\n\t\t\tconst originV = origin[v]!;\n\t\t\t// The ray direction in object space is linear in the dot position, so it is stepped per dot.\n\t\t\tconst stepA = m[a]! / scale;\n\t\t\tconst stepU = m[u]! / scale;\n\t\t\tconst stepV = m[v]! / scale;\n\t\t\tconst sx = (face.minX + 0.5 - centerX) / scale;\n\t\t\tfor (let dotY = face.minY; dotY <= face.maxY; dotY++) {\n\t\t\t\tconst sy = (dotY + 0.5 - centerY) / scale;\n\t\t\t\tlet directionA = m[a]! * sx + m[3 + a]! * sy - m[6 + a]! * cameraDistance;\n\t\t\t\tlet directionU = m[u]! * sx + m[3 + u]! * sy - m[6 + u]! * cameraDistance;\n\t\t\t\tlet directionV = m[v]! * sx + m[3 + v]! * sy - m[6 + v]! * cameraDistance;\n\t\t\t\tlet index = dotY * dotWidth + face.minX;\n\t\t\t\tfor (let dotX = face.minX; dotX <= face.maxX; dotX++, index++) {\n\t\t\t\t\tconst t = (face.plane - originA) / directionA;\n\t\t\t\t\tif (t > 0 && t < depth[index]!) {\n\t\t\t\t\t\tconst hitU = originU + t * directionU;\n\t\t\t\t\t\tconst hitV = originV + t * directionV;\n\t\t\t\t\t\tif (hitU >= face.uMin && hitU <= face.uMax && hitV >= face.vMin && hitV <= face.vMax) {\n\t\t\t\t\t\t\tdepth[index] = t;\n\t\t\t\t\t\t\tfaceIds[index] = faceIndex + 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdirectionA += stepA;\n\t\t\t\t\tdirectionU += stepU;\n\t\t\t\t\tdirectionV += stepV;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Shade the hit dots, pack them into braille cells, and reset the dot buffers for the next frame.\n\t\tconst bits = this.bits;\n\t\tconst counts = this.counts;\n\t\tconst rgb = this.rgb;\n\t\tlet cellMinX = width;\n\t\tlet cellMinY = height;\n\t\tlet cellMaxX = -1;\n\t\tlet cellMaxY = -1;\n\t\tfor (let dotY = minY; dotY <= maxY; dotY++) {\n\t\t\tlet index = dotY * dotWidth + minX;\n\t\t\tfor (let dotX = minX; dotX <= maxX; dotX++, index++) {\n\t\t\t\tconst id = faceIds[index]!;\n\t\t\t\tif (id === 0) continue;\n\t\t\t\tconst face = faces[id - 1]!;\n\t\t\t\t// Points farther from the camera fade slightly toward the background for depth.\n\t\t\t\tconst fog = clamp01(0.15 - cameraDistance * (1 - depth[index]!) * 0.12) * (light ? 0.5 : 1);\n\t\t\t\tfaceIds[index] = 0;\n\t\t\t\tdepth[index] = Infinity;\n\t\t\t\tconst cellX = dotX >> 1;\n\t\t\t\tconst cellY = dotY >> 2;\n\t\t\t\tconst cell = cellY * width + cellX;\n\t\t\t\tbits[cell]! |= DOT_BITS[(dotY & 3) * 2 + (dotX & 1)];\n\t\t\t\tcounts[cell]!++;\n\t\t\t\trgb[cell * 3] += face.red + (background[0] - face.red) * fog;\n\t\t\t\trgb[cell * 3 + 1] += face.green + (background[1] - face.green) * fog;\n\t\t\t\trgb[cell * 3 + 2] += face.blue + (background[2] - face.blue) * fog;\n\t\t\t\tif (cellX < cellMinX) cellMinX = cellX;\n\t\t\t\tif (cellX > cellMaxX) cellMaxX = cellX;\n\t\t\t\tif (cellY < cellMinY) cellMinY = cellY;\n\t\t\t\tif (cellY > cellMaxY) cellMaxY = cellY;\n\t\t\t}\n\t\t}\n\t\tif (cellMaxX >= 0) this.dirty = { minX: cellMinX, minY: cellMinY, maxX: cellMaxX, maxY: cellMaxY };\n\t\tif (haloStrength > 0) this.renderHalo(haloStrength);\n\t}\n\n\t/**\n\t * Blur the logo's coverage and color over neighboring cells with a separable tent filter, so the tint falls\n\t * off smoothly past the logo's edges.\n\t */\n\tprivate renderHalo(strength: number): void {\n\t\tconst cells = this.dirty;\n\t\tif (!cells) return;\n\t\tconst { width, height, counts, rgb } = this;\n\t\tconst minX = Math.max(0, cells.minX - HALO_RADIUS_X);\n\t\tconst maxX = Math.min(width - 1, cells.maxX + HALO_RADIUS_X);\n\t\tconst minY = Math.max(0, cells.minY - HALO_RADIUS_Y);\n\t\tconst maxY = Math.min(height - 1, cells.maxY + HALO_RADIUS_Y);\n\t\tconst regionWidth = maxX - minX + 1;\n\t\tconst tent = (radius: number) => {\n\t\t\tconst weights = Array.from({ length: radius * 2 + 1 }, (_, i) => radius + 1 - Math.abs(i - radius));\n\t\t\tconst total = weights.reduce((sum, weight) => sum + weight, 0);\n\t\t\treturn weights.map((weight) => weight / total);\n\t\t};\n\t\tconst weightsX = tent(HALO_RADIUS_X);\n\t\tconst weightsY = tent(HALO_RADIUS_Y);\n\n\t\t// Horizontal pass over the rows that contain the logo: coverage and premultiplied color per cell.\n\t\tconst rows = cells.maxY - cells.minY + 1;\n\t\tconst horizontal = new Float32Array(rows * regionWidth * 4);\n\t\tfor (let y = cells.minY; y <= cells.maxY; y++) {\n\t\t\tfor (let x = minX; x <= maxX; x++) {\n\t\t\t\tlet coverage = 0;\n\t\t\t\tlet red = 0;\n\t\t\t\tlet green = 0;\n\t\t\t\tlet blue = 0;\n\t\t\t\tfor (let dx = -HALO_RADIUS_X; dx <= HALO_RADIUS_X; dx++) {\n\t\t\t\t\tconst sourceX = x + dx;\n\t\t\t\t\tif (sourceX < cells.minX || sourceX > cells.maxX) continue;\n\t\t\t\t\tconst source = y * width + sourceX;\n\t\t\t\t\tconst count = counts[source]!;\n\t\t\t\t\tif (count === 0) continue;\n\t\t\t\t\tconst weight = weightsX[dx + HALO_RADIUS_X]! / 8;\n\t\t\t\t\tcoverage += count * weight;\n\t\t\t\t\tred += rgb[source * 3]! * weight;\n\t\t\t\t\tgreen += rgb[source * 3 + 1]! * weight;\n\t\t\t\t\tblue += rgb[source * 3 + 2]! * weight;\n\t\t\t\t}\n\t\t\t\tconst target = ((y - cells.minY) * regionWidth + (x - minX)) * 4;\n\t\t\t\thorizontal[target] = coverage;\n\t\t\t\thorizontal[target + 1] = red;\n\t\t\t\thorizontal[target + 2] = green;\n\t\t\t\thorizontal[target + 3] = blue;\n\t\t\t}\n\t\t}\n\n\t\t// Vertical pass into the halo buffers.\n\t\tfor (let y = minY; y <= maxY; y++) {\n\t\t\tfor (let x = minX; x <= maxX; x++) {\n\t\t\t\tlet coverage = 0;\n\t\t\t\tlet red = 0;\n\t\t\t\tlet green = 0;\n\t\t\t\tlet blue = 0;\n\t\t\t\tfor (let dy = -HALO_RADIUS_Y; dy <= HALO_RADIUS_Y; dy++) {\n\t\t\t\t\tconst sourceY = y + dy;\n\t\t\t\t\tif (sourceY < cells.minY || sourceY > cells.maxY) continue;\n\t\t\t\t\tconst weight = weightsY[dy + HALO_RADIUS_Y]!;\n\t\t\t\t\tconst source = ((sourceY - cells.minY) * regionWidth + (x - minX)) * 4;\n\t\t\t\t\tcoverage += horizontal[source]! * weight;\n\t\t\t\t\tred += horizontal[source + 1]! * weight;\n\t\t\t\t\tgreen += horizontal[source + 2]! * weight;\n\t\t\t\t\tblue += horizontal[source + 3]! * weight;\n\t\t\t\t}\n\t\t\t\tconst target = y * width + x;\n\t\t\t\t// Cells under the logo keep at least their own coverage, so faces stay solidly tinted.\n\t\t\t\tconst count = counts[target]!;\n\t\t\t\tif (count > 0 && count / 8 > coverage) {\n\t\t\t\t\tcoverage = count / 8;\n\t\t\t\t\tred = (rgb[target * 3]! / count) * coverage;\n\t\t\t\t\tgreen = (rgb[target * 3 + 1]! / count) * coverage;\n\t\t\t\t\tblue = (rgb[target * 3 + 2]! / count) * coverage;\n\t\t\t\t}\n\t\t\t\tif (coverage <= 0) continue;\n\t\t\t\t// Quantized so neighboring cells usually share a background and its escape sequence.\n\t\t\t\tconst amount = Math.round(strength * Math.min(1, coverage) ** 0.7 * HALO_LEVELS) / HALO_LEVELS;\n\t\t\t\tif (amount <= 0) continue;\n\t\t\t\tthis.haloAmount[target] = amount;\n\t\t\t\tthis.haloRgb[target * 3] = Math.round(red / coverage / LOGO_COLOR_STEP) * LOGO_COLOR_STEP;\n\t\t\t\tthis.haloRgb[target * 3 + 1] = Math.round(green / coverage / LOGO_COLOR_STEP) * LOGO_COLOR_STEP;\n\t\t\t\tthis.haloRgb[target * 3 + 2] = Math.round(blue / coverage / LOGO_COLOR_STEP) * LOGO_COLOR_STEP;\n\t\t\t}\n\t\t}\n\t\tthis.haloDirty = { minX, minY, maxX, maxY };\n\t}\n\n\tprivate visibleFaces(\n\t\tm: number[],\n\t\torigin: number[],\n\t\tpose: Pose,\n\t\tboxes: readonly Box[],\n\t\tdotWidth: number,\n\t\tdotHeight: number,\n\t\tlightBackground: boolean,\n\t): Face[] {\n\t\tconst faces: Face[] = [];\n\t\tconst cameraDistance = this.cameraDistance;\n\t\tfor (const box of boxes) {\n\t\t\tfor (let a = 0; a < 3; a++) {\n\t\t\t\tconst u = (a + 1) % 3;\n\t\t\t\tconst v = (a + 2) % 3;\n\t\t\t\tfor (const side of [-1, 1]) {\n\t\t\t\t\tconst plane = side > 0 ? box.max[a]! : box.min[a]!;\n\t\t\t\t\t// Back faces point away from the camera.\n\t\t\t\t\tif ((origin[a]! - plane) * side <= 0) continue;\n\t\t\t\t\t// Faces pressed against a neighboring block are hidden. Positions are exact while blocks rest.\n\t\t\t\t\tconst covered = boxes.some(\n\t\t\t\t\t\t(other) =>\n\t\t\t\t\t\t\tother !== box &&\n\t\t\t\t\t\t\t(side > 0 ? other.min[a] : other.max[a]) === plane &&\n\t\t\t\t\t\t\tother.min[u]! <= box.min[u]! &&\n\t\t\t\t\t\t\tother.max[u]! >= box.max[u]! &&\n\t\t\t\t\t\t\tother.min[v]! <= box.min[v]! &&\n\t\t\t\t\t\t\tother.max[v]! >= box.max[v]!,\n\t\t\t\t\t);\n\t\t\t\t\tif (covered) continue;\n\n\t\t\t\t\tlet minX = Infinity;\n\t\t\t\t\tlet minY = Infinity;\n\t\t\t\t\tlet maxX = -Infinity;\n\t\t\t\t\tlet maxY = -Infinity;\n\t\t\t\t\tconst corner = [0, 0, 0];\n\t\t\t\t\tfor (const cornerU of [box.min[u]!, box.max[u]!]) {\n\t\t\t\t\t\tfor (const cornerV of [box.min[v]!, box.max[v]!]) {\n\t\t\t\t\t\t\tcorner[a] = plane;\n\t\t\t\t\t\t\tcorner[u] = cornerU;\n\t\t\t\t\t\t\tcorner[v] = cornerV;\n\t\t\t\t\t\t\tconst x = m[0]! * corner[0]! + m[1]! * corner[1]! + m[2]! * corner[2]!;\n\t\t\t\t\t\t\tconst y = m[3]! * corner[0]! + m[4]! * corner[1]! + m[5]! * corner[2]!;\n\t\t\t\t\t\t\tconst z = m[6]! * corner[0]! + m[7]! * corner[1]! + m[8]! * corner[2]!;\n\t\t\t\t\t\t\tconst perspective = (pose.scale * cameraDistance) / (cameraDistance - z);\n\t\t\t\t\t\t\tconst screenX = pose.centerX + x * perspective;\n\t\t\t\t\t\t\tconst screenY = pose.centerY + y * perspective;\n\t\t\t\t\t\t\tminX = Math.min(minX, screenX);\n\t\t\t\t\t\t\tminY = Math.min(minY, screenY);\n\t\t\t\t\t\t\tmaxX = Math.max(maxX, screenX);\n\t\t\t\t\t\t\tmaxY = Math.max(maxY, screenY);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tconst face = {\n\t\t\t\t\t\tminX: Math.max(0, Math.floor(minX)),\n\t\t\t\t\t\tminY: Math.max(0, Math.floor(minY)),\n\t\t\t\t\t\tmaxX: Math.min(dotWidth - 1, Math.ceil(maxX)),\n\t\t\t\t\t\tmaxY: Math.min(dotHeight - 1, Math.ceil(maxY)),\n\t\t\t\t\t};\n\t\t\t\t\tif (face.maxX < face.minX || face.maxY < face.minY) continue;\n\n\t\t\t\t\t// Faces are flat, so lighting is computed once per face. The normal in camera space is a\n\t\t\t\t\t// column of the rotation matrix.\n\t\t\t\t\tconst nx = m[a]! * side;\n\t\t\t\t\tconst ny = m[3 + a]! * side;\n\t\t\t\t\tconst nz = m[6 + a]! * side;\n\t\t\t\t\tconst diffuse = Math.max(0, nx * LIGHT[0] + ny * LIGHT[1] + nz * LIGHT[2]);\n\t\t\t\t\tconst rim = Math.max(0, nx * 0.8 - nz * 0.3);\n\t\t\t\t\t// On light backgrounds, highlights toward white would vanish, so faces only get darker than\n\t\t\t\t\t// the brand colors there.\n\t\t\t\t\tconst specular = lightBackground\n\t\t\t\t\t\t? 0\n\t\t\t\t\t\t: Math.max(0, nx * HALF_VECTOR[0] + ny * HALF_VECTOR[1] + nz * HALF_VECTOR[2]) ** 24 * 0.6 * 255;\n\t\t\t\t\tconst light = lightBackground\n\t\t\t\t\t\t? Math.min(1, 0.55 + diffuse * 0.45 + rim * 0.1)\n\t\t\t\t\t\t: 0.45 + diffuse * 0.78 + rim * 0.25;\n\t\t\t\t\tfaces.push({\n\t\t\t\t\t\taxis: a,\n\t\t\t\t\t\tplane,\n\t\t\t\t\t\tuMin: box.min[u]!,\n\t\t\t\t\t\tuMax: box.max[u]!,\n\t\t\t\t\t\tvMin: box.min[v]!,\n\t\t\t\t\t\tvMax: box.max[v]!,\n\t\t\t\t\t\t...face,\n\t\t\t\t\t\tred: Math.min(255, box.color[0] * light + specular),\n\t\t\t\t\t\tgreen: Math.min(255, box.color[1] * light + specular),\n\t\t\t\t\t\tblue: Math.min(255, box.color[2] * light + specular),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn faces;\n\t}\n}\n\n/**\n * Which easter egg to play. The pi logo lifts off the header logo, whose top-left cell is at `column`, `row`.\n */\nexport type EasterEgg3d = { kind: \"pi-logo\"; column: number; row: number } | { kind: \"armin\" };\n\nlet playing = false;\n\n/**\n * Show the animation as a fullscreen overlay until it is dismissed. The overlay takes focus and mouse input and\n * returns focus when hidden, so the rest of the UI keeps running underneath untouched.\n */\nexport async function playEasterEgg3d(tui: TUI, screen: readonly string[], egg: EasterEgg3d): Promise<void> {\n\tif (playing) return;\n\tplaying = true;\n\t// Fading needs the terminal's actual default colors; the theme only knows its own.\n\tconst reported = await tui.queryTerminalColors({ timeoutMs: 100 });\n\tconst dark = theme.appearance === \"dark\";\n\tconst toRgbTuple = (rgb: { r: number; g: number; b: number } | undefined, fallback: Rgb): Rgb =>\n\t\trgb ? [rgb.r, rgb.g, rgb.b] : fallback;\n\tconst colors = {\n\t\tforeground: toRgbTuple(reported.foreground, toRgb(theme.colors.text)),\n\t\tbackground: toRgbTuple(reported.background, dark ? [0, 0, 0] : [255, 255, 255]),\n\t};\n\tif (tui.hasOverlay()) {\n\t\tplaying = false;\n\t\treturn;\n\t}\n\tconst model =\n\t\tegg.kind === \"armin\" ? arminModel(toRgb(theme.colors.accent)) : piLogoModel({ column: egg.column, row: egg.row });\n\tconst animation = new EasterEgg3dAnimation(tui, screen, model, colors, () => {\n\t\tplaying = false;\n\t\toverlay.hide();\n\t});\n\tconst overlay = tui.showOverlay(animation, { anchor: \"top-left\", width: \"100%\", maxHeight: \"100%\" });\n}\n\nexport class EasterEgg3dAnimation implements Component {\n\tprivate readonly tui: TUI;\n\t/** The screen to dissolve, as rendered lines. */\n\tprivate readonly screen: readonly string[];\n\tprivate readonly model: Model;\n\tprivate readonly foreground: Rgb;\n\tprivate readonly background: Rgb;\n\tprivate readonly onDone: () => void;\n\tprivate readonly startTime = performance.now();\n\tprivate lastRender = performance.now();\n\tprivate timer: ReturnType<typeof setInterval> | undefined;\n\tprivate exit:\n\t\t| { start: number; time: number; yaw: number; targetYaw: number; offsets: Array<[number, number, number]> }\n\t\t| undefined;\n\tprivate shuffle: { cycle: number; steps: Cell3[][] } | undefined;\n\tprivate screenWidth = -1;\n\tprivate screenHeight = -1;\n\t/** Star per cell index, or undefined. */\n\tprivate stars: Array<Star | undefined> = [];\n\tprivate cells: ScreenCell[][] = [];\n\tprivate readonly ansiCache = new Map<number, string>();\n\tprivate readonly raster: BlockRaster;\n\n\tconstructor(\n\t\ttui: TUI,\n\t\tscreen: readonly string[],\n\t\tmodel: Model,\n\t\tcolors: { foreground: Rgb; background: Rgb },\n\t\tonDone: () => void,\n\t) {\n\t\tthis.tui = tui;\n\t\tthis.screen = screen;\n\t\tthis.model = model;\n\t\tthis.raster = new BlockRaster(model.cameraDistance);\n\t\tthis.foreground = colors.foreground;\n\t\tthis.background = colors.background;\n\t\tthis.onDone = onDone;\n\t\tthis.timer = setInterval(() => {\n\t\t\t// Also stop when no longer rendered, e.g. when pi hides all overlays on exit.\n\t\t\tif ((this.exit && this.exitProgress() >= 1) || performance.now() - this.lastRender > 1000) this.finish();\n\t\t\telse this.tui.requestRender();\n\t\t}, FRAME_MS);\n\t\tthis.timer.unref?.();\n\t}\n\n\t/** Play the exit animation. A second call skips it. */\n\tclose(): void {\n\t\tif (this.exit) {\n\t\t\tthis.finish();\n\t\t\treturn;\n\t\t}\n\t\tconst time = this.elapsed();\n\t\tconst yaw = spinAngle(time);\n\t\tconst turn = Math.PI * 2;\n\t\tthis.exit = {\n\t\t\tstart: performance.now(),\n\t\t\ttime,\n\t\t\tyaw,\n\t\t\ttargetYaw: Math.ceil(yaw / turn) * turn,\n\t\t\toffsets: this.blockOffsets(time),\n\t\t};\n\t}\n\n\thandleInput(data: string): void {\n\t\tconst keybindings = getKeybindings();\n\t\tif (keybindings.matches(data, \"tui.select.cancel\") || keybindings.matches(data, \"app.clear\")) this.close();\n\t}\n\n\thandleMouse(event: TuiMouseEvent): TuiMouseEventResult {\n\t\tif (event.type === \"click\") this.close();\n\t\treturn { handled: true, render: false };\n\t}\n\n\tinvalidate(): void {\n\t\tthis.screenWidth = -1;\n\t\tthis.screenHeight = -1;\n\t\tthis.ansiCache.clear();\n\t}\n\n\trender(width: number): string[] {\n\t\tconst height = Math.max(1, this.tui.terminal.rows);\n\t\tconst foreground = this.foreground;\n\t\tconst background = this.background;\n\t\tthis.lastRender = performance.now();\n\t\tif (width !== this.screenWidth || height !== this.screenHeight) {\n\t\t\tthis.screenWidth = width;\n\t\t\tthis.screenHeight = height;\n\t\t\tthis.cells = this.prepareCells(width, foreground);\n\t\t\tthis.stars = this.prepareStars(width, height);\n\t\t}\n\n\t\t// Dissolve time runs forward on entry and backward on exit, so the screen reassembles in reverse order.\n\t\tlet dissolveTime: number;\n\t\tlet pose: Pose;\n\t\tlet hintAlpha: number;\n\t\tlet starAlpha: number;\n\t\tlet offsets: Array<[number, number, number]>;\n\t\tif (this.exit) {\n\t\t\tconst progress = this.exitProgress();\n\t\t\tconst landing = clamp01(progress / 0.8);\n\t\t\tconst settle = 1 - smooth(landing);\n\t\t\tdissolveTime = Math.min(this.exit.time, DISSOLVE_END) * (1 - progress);\n\t\t\tpose = this.pose(width, height, this.flyProgress(this.exit.time) * settle, this.exit.time);\n\t\t\tpose.yaw = this.exit.yaw + (this.exit.targetYaw - this.exit.yaw) * easeOut(landing);\n\t\t\tpose.pitch *= settle;\n\t\t\tpose.roll *= settle;\n\t\t\thintAlpha = this.hintAlpha(this.exit.time) * (1 - smooth(progress / 0.2));\n\t\t\tstarAlpha = this.starAlpha(this.exit.time) * (1 - smooth(progress / 0.3));\n\t\t\t// Blocks are home well before the logo lands.\n\t\t\tconst gather = 1 - smooth(progress / 0.5);\n\t\t\toffsets = this.exit.offsets.map(([x, y, z]) => [x * gather, y * gather, z * gather]);\n\t\t} else {\n\t\t\tconst time = this.elapsed();\n\t\t\tdissolveTime = time;\n\t\t\tpose = this.pose(width, height, this.flyProgress(time), time);\n\t\t\thintAlpha = this.hintAlpha(time);\n\t\t\tstarAlpha = this.starAlpha(time);\n\t\t\toffsets = this.blockOffsets(time);\n\t\t}\n\n\t\tconst { columns, rows } = this.model;\n\t\tconst boxes: Box[] = this.model.blocks.map((block, index) => {\n\t\t\tconst [dx, dy, dz] = offsets[index]!;\n\t\t\tconst x = block.home[0] - columns / 2 + dx;\n\t\t\tconst y = block.home[1] - rows / 2 + dy;\n\t\t\treturn { min: [x, y, dz - DEPTH / 2], max: [x + 1, y + 1, dz + DEPTH / 2], color: block.color };\n\t\t});\n\t\tconst raster = this.raster;\n\t\traster.render(width, height, pose, boxes, background, isLight(background) ? LIGHT_HALO_STRENGTH : 0);\n\t\tconst halo = (index: number, base: Rgb | undefined): Rgb | undefined => {\n\t\t\tconst amount = raster.haloAmount[index]!;\n\t\t\tif (amount <= 0) return base;\n\t\t\tconst color = raster.haloRgb;\n\t\t\treturn mix(base ?? background, [color[index * 3]!, color[index * 3 + 1]!, color[index * 3 + 2]!], amount);\n\t\t};\n\t\tconst backgroundFade = smooth(dissolveTime / BACKGROUND_FADE);\n\t\tconst textFade = smooth(dissolveTime / 0.6) * 0.3;\n\t\t// Once the screen has fully dissolved, the text layer is empty and can be skipped.\n\t\tconst textActive = dissolveTime < DISSOLVE_END || backgroundFade < 1;\n\t\tconst hint = this.hint(width, height, hintAlpha, background);\n\t\tconst frame = Math.floor(dissolveTime * 14);\n\t\tconst now = this.elapsed();\n\t\t// Star brightness is quantized, so a row only changes when one of its stars steps to another level\n\t\t// instead of on every frame.\n\t\tconst starLevel = Math.round(starAlpha * STAR_ALPHA_LEVELS) / STAR_ALPHA_LEVELS;\n\t\tconst starfield = (index: number): { text: string; fg: Rgb } | undefined => {\n\t\t\tif (starLevel <= 0) return undefined;\n\t\t\tconst star = this.stars[index];\n\t\t\tif (!star) return undefined;\n\t\t\tconst flicker =\n\t\t\t\tMath.round((0.5 + 0.5 * Math.sin(now * star.speed + star.phase)) * STAR_FLICKER_LEVELS) /\n\t\t\t\tSTAR_FLICKER_LEVELS;\n\t\t\treturn {\n\t\t\t\ttext: star.glyph,\n\t\t\t\tfg: mix(background, mix(foreground, star.tint, 0.5), star.strength * (0.7 + 0.3 * flicker) * starLevel),\n\t\t\t};\n\t\t};\n\t\tconst lines: string[] = [];\n\t\tfor (let row = 0; row < height; row++) {\n\t\t\tconst cells = this.cells[row] ?? [];\n\t\t\tlet line = \"\";\n\t\t\tlet currentFg = -1;\n\t\t\tlet currentBg = -1;\n\t\t\tconst emit = (text: string, fg: Rgb | undefined, bg: Rgb | undefined) => {\n\t\t\t\tconst fgKey = fg ? this.pack(fg) : -1;\n\t\t\t\tconst bgKey = bg ? this.pack(bg) : -1;\n\t\t\t\tif (fgKey !== currentFg && text !== \" \") {\n\t\t\t\t\tline += fg ? this.ansi(fgKey, false) : \"\\x1b[39m\";\n\t\t\t\t\tcurrentFg = fgKey;\n\t\t\t\t}\n\t\t\t\tif (bgKey !== currentBg) {\n\t\t\t\t\tline += bg ? this.ansi(bgKey, true) : \"\\x1b[49m\";\n\t\t\t\t\tcurrentBg = bgKey;\n\t\t\t\t}\n\t\t\t\tline += text;\n\t\t\t};\n\t\t\tfor (let column = 0; column < width; column++) {\n\t\t\t\tconst index = row * width + column;\n\t\t\t\tconst cell = textActive ? cells[column] : undefined;\n\t\t\t\tconst cellBg = halo(\n\t\t\t\t\tindex,\n\t\t\t\t\tcell?.bg && backgroundFade < 1 ? mix(cell.bg, background, backgroundFade) : undefined,\n\t\t\t\t);\n\t\t\t\tif (hint && row === hint.row && column >= hint.start && column < hint.start + hint.text.length) {\n\t\t\t\t\tconst offset = column - hint.start;\n\t\t\t\t\temit(hint.text[offset]!, offset < hint.keyLength ? hint.keyColor : hint.color, cellBg);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst dots = raster.bits[index]!;\n\t\t\t\tif (dots) {\n\t\t\t\t\t// Quantized so neighboring cells on one face usually share a color and its escape sequence.\n\t\t\t\t\tconst step = LOGO_COLOR_STEP * raster.counts[index]!;\n\t\t\t\t\tconst rgb = raster.rgb;\n\t\t\t\t\tconst color: Rgb = [\n\t\t\t\t\t\tMath.round(rgb[index * 3]! / step) * LOGO_COLOR_STEP,\n\t\t\t\t\t\tMath.round(rgb[index * 3 + 1]! / step) * LOGO_COLOR_STEP,\n\t\t\t\t\t\tMath.round(rgb[index * 3 + 2]! / step) * LOGO_COLOR_STEP,\n\t\t\t\t\t];\n\t\t\t\t\temit(BRAILLE[dots]!, color, cellBg);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (!cell) {\n\t\t\t\t\tconst star = starfield(index);\n\t\t\t\t\temit(star?.text ?? \" \", star?.fg, cellBg);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst dust = (dissolveTime - cell.delay) / DUST_DURATION;\n\t\t\t\tif (dust < 0 && cell.width === 2 && !raster.bits[index + 1]) {\n\t\t\t\t\temit(cell.text, mix(cell.fg, background, textFade), cellBg);\n\t\t\t\t\tcolumn++;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (dust < 0 && cell.width === 1) {\n\t\t\t\t\temit(cell.text, mix(cell.fg, background, textFade), cellBg);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst dotCount = dust < 0 ? cell.ink : Math.round(cell.ink * (1 - clamp01(dust)));\n\t\t\t\tif (dotCount <= 0) {\n\t\t\t\t\tconst star = starfield(index);\n\t\t\t\t\temit(star?.text ?? \" \", star?.fg, cellBg);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// Pick `dotCount` distinct dots; the choice changes a few times per second so the dust shimmers.\n\t\t\t\tlet bits = 0;\n\t\t\t\tlet placed = 0;\n\t\t\t\tfor (let attempt = 0; placed < dotCount && attempt < 32; attempt++) {\n\t\t\t\t\tconst bit = DOT_BITS[Math.floor(hash(cell.seed * 7919 + frame * 131 + attempt) * 8)]!;\n\t\t\t\t\tif (bits & bit) continue;\n\t\t\t\t\tbits |= bit;\n\t\t\t\t\tplaced++;\n\t\t\t\t}\n\t\t\t\tconst fade = textFade + (1 - textFade) * clamp01(dust) ** 0.8;\n\t\t\t\temit(BRAILLE[bits]!, mix(cell.fg, background, fade), cellBg);\n\t\t\t}\n\t\t\tlines.push(`${line}\\x1b[0m`);\n\t\t}\n\t\treturn lines;\n\t}\n\n\tprivate elapsed(): number {\n\t\treturn (performance.now() - this.startTime) / 1000;\n\t}\n\n\tprivate exitProgress(): number {\n\t\treturn this.exit ? clamp01((performance.now() - this.exit.start) / 1000 / EXIT_DURATION) : 0;\n\t}\n\n\tprivate finish(): void {\n\t\tif (!this.timer) return;\n\t\tclearInterval(this.timer);\n\t\tthis.timer = undefined;\n\t\tthis.onDone();\n\t}\n\n\t/** Each block's displacement from its place in the model at `time`, in grid units. */\n\tprivate blockOffsets(time: number): Array<[number, number, number]> {\n\t\tconst blocks = this.model.blocks;\n\t\tconst home = (): Array<[number, number, number]> => blocks.map(() => [0, 0, 0]);\n\t\tif (time < PUZZLE_START) return home();\n\t\tconst cycle = Math.floor((time - PUZZLE_START) / PUZZLE_CYCLE);\n\t\tconst local = time - PUZZLE_START - cycle * PUZZLE_CYCLE;\n\t\tif (this.shuffle?.cycle !== cycle) this.shuffle = { cycle, steps: shuffleSteps(this.model, cycle) };\n\t\tconst steps = this.shuffle.steps;\n\t\tconst offset = (position: Cell3, index: number): [number, number, number] => {\n\t\t\tconst block = blocks[index]!.home;\n\t\t\treturn [position[0] - block[0], position[1] - block[1], position[2] - block[2]];\n\t\t};\n\t\tconst shuffleEnd = PUZZLE_STEP * PUZZLE_STEPS;\n\t\tif (local < shuffleEnd) {\n\t\t\tconst step = Math.floor(local / PUZZLE_STEP);\n\t\t\tconst progress = smooth((local - step * PUZZLE_STEP) / PUZZLE_STEP);\n\t\t\treturn steps[step]!.map((from, index) => {\n\t\t\t\tconst a = offset(from, index);\n\t\t\t\tconst b = offset(steps[step + 1]![index]!, index);\n\t\t\t\treturn [a[0] + (b[0] - a[0]) * progress, a[1] + (b[1] - a[1]) * progress, a[2] + (b[2] - a[2]) * progress];\n\t\t\t});\n\t\t}\n\t\tif (local < shuffleEnd + PUZZLE_RETURN) {\n\t\t\t// All blocks fly home at once. Alternating arcs in depth keep them from passing through each other.\n\t\t\tconst u = (local - shuffleEnd) / PUZZLE_RETURN;\n\t\t\tconst remaining = 1 - smooth(u);\n\t\t\tconst arc = Math.sin(Math.PI * clamp01(u)) * 0.8;\n\t\t\treturn steps[PUZZLE_STEPS]!.map((position, index) => {\n\t\t\t\tconst [x, y, z] = offset(position, index);\n\t\t\t\treturn [x * remaining, y * remaining, z * remaining + (index % 2 === 0 ? arc : -arc)];\n\t\t\t});\n\t\t}\n\t\treturn home();\n\t}\n\n\tprivate flyProgress(time: number): number {\n\t\treturn smooth((time - FLY_START) / FLY_DURATION);\n\t}\n\n\tprivate starAlpha(time: number): number {\n\t\treturn smooth((time - STARS_START) / STARS_FADE);\n\t}\n\n\tprivate hintAlpha(time: number): number {\n\t\treturn smooth((time - FLY_START - FLY_DURATION) / HINT_FADE);\n\t}\n\n\tprivate pose(width: number, height: number, progress: number, time: number): Pose {\n\t\tconst { columns, rows, cameraDistance, radius, widthShare, origin } = this.model;\n\t\tconst reach = radius * (cameraDistance / (cameraDistance - radius));\n\t\t// Lifting off, the front face must cover exactly the half-block cells (2x2 dots per pixel) despite the\n\t\t// perspective.\n\t\tconst startScale = origin ? (2 * (cameraDistance - DEPTH / 2)) / cameraDistance : START_SCALE;\n\t\tconst endScale = Math.max(startScale, Math.min(width * 2 * widthShare, (height * 4 - 8) * 0.48) / reach);\n\t\tconst endX = width;\n\t\tconst endY = height * 2 - 2;\n\t\tconst startX = origin ? origin.column * 2 + columns : endX;\n\t\tconst startY = origin ? origin.row * 4 + rows : endY;\n\t\treturn {\n\t\t\tcenterX: startX + (endX - startX) * progress,\n\t\t\tcenterY: startY + (endY - startY) * progress,\n\t\t\t// Interpolate the zoom geometrically so it feels uniform.\n\t\t\tscale: startScale * (endScale / startScale) ** progress,\n\t\t\tyaw: spinAngle(time),\n\t\t\t// Tilts are zero at whole turns, so the camera looks straight at the front of the reassembled logo.\n\t\t\tpitch: 0.3 * Math.sin(spinPhase(time)) * progress,\n\t\t\troll: 0.06 * Math.sin(2 * spinPhase(time)) * progress,\n\t\t};\n\t}\n\n\tprivate hint(\n\t\twidth: number,\n\t\theight: number,\n\t\talpha: number,\n\t\tbackground: Rgb,\n\t): { row: number; start: number; text: string; keyLength: number; keyColor: Rgb; color: Rgb } | undefined {\n\t\tif (alpha <= 0) return undefined;\n\t\tconst key = formatKeyText(getKeybindings().getKeys(\"tui.select.cancel\")[0] ?? \"escape\");\n\t\tconst text = `${key} to return`;\n\t\tif (text.length > width) return undefined;\n\t\treturn {\n\t\t\trow: height - 2,\n\t\t\tstart: Math.floor((width - text.length) / 2),\n\t\t\ttext,\n\t\t\tkeyLength: key.length,\n\t\t\tkeyColor: mix(background, toRgb(theme.colors.muted), alpha),\n\t\t\tcolor: mix(background, toRgb(theme.colors.dim), alpha),\n\t\t};\n\t}\n\n\t/** A sparse, deterministic starfield: one braille dot in about STAR_DENSITY of all cells. */\n\tprivate prepareStars(width: number, height: number): Array<Star | undefined> {\n\t\tconst stars = new Array<Star | undefined>(width * height);\n\t\tfor (let index = 0; index < width * height; index++) {\n\t\t\tif (hash(index * 3 + 0x51ed) >= STAR_DENSITY) continue;\n\t\t\tconst random = (salt: number) => hash(index * 7 + salt * 0x9e37);\n\t\t\tstars[index] = {\n\t\t\t\tglyph: BRAILLE[DOT_BITS[Math.floor(random(1) * 8)]!]!,\n\t\t\t\ttint: STAR_TINTS[Math.floor(random(2) * STAR_TINTS.length)]!,\n\t\t\t\tstrength: 0.1 + random(3) * 0.12,\n\t\t\t\tphase: random(4) * Math.PI * 2,\n\t\t\t\tspeed: 0.4 + random(5) * 0.8,\n\t\t\t};\n\t\t}\n\t\treturn stars;\n\t}\n\n\tprivate prepareCells(width: number, foreground: Rgb): ScreenCell[][] {\n\t\tconst cells = parseScreen(this.screen, width, foreground, this.background);\n\t\tconst height = Math.max(1, this.tui.terminal.rows);\n\t\tconst { columns, rows, origin } = this.model;\n\t\t// The dust spreads out from where the model starts.\n\t\tconst centerX = origin ? origin.column + columns / 2 : width / 2;\n\t\tconst centerY = origin ? origin.row + rows / 4 : height / 2;\n\t\tconst farthest = Math.hypot(Math.max(centerX, width - centerX), Math.max(centerY, height - centerY) * 2);\n\t\tfor (let row = 0; row < cells.length; row++) {\n\t\t\tconst line = cells[row]!;\n\t\t\tfor (let column = 0; column < line.length; column++) {\n\t\t\t\tconst cell = line[column]!;\n\t\t\t\t// Wide graphemes share their first column's timing so both halves change together.\n\t\t\t\tconst owner = cell.width === 0 ? line[column - 1]! : cell;\n\t\t\t\tconst seed = hash(row * 65_537 + column);\n\t\t\t\tif (cell.width !== 0) {\n\t\t\t\t\tconst distance = Math.hypot(column - centerX, (row - centerY) * 2) / farthest;\n\t\t\t\t\tcell.delay = FLY_START + distance * WAVE_SPREAD + seed * WAVE_JITTER;\n\t\t\t\t} else {\n\t\t\t\t\tcell.delay = owner.delay;\n\t\t\t\t}\n\t\t\t\tcell.seed = row * 65_537 + column;\n\t\t\t\tcell.ink = glyphInk(owner.text, seed);\n\t\t\t}\n\t\t}\n\t\t// The 3D model replaces its half-block rendering on screen.\n\t\tif (origin) {\n\t\t\tfor (let row = origin.row; row < origin.row + Math.ceil(rows / 2); row++) {\n\t\t\t\tconst line = cells[row];\n\t\t\t\tif (!line) continue;\n\t\t\t\tfor (let column = origin.column; column < origin.column + columns; column++) {\n\t\t\t\t\tconst cell = line[column];\n\t\t\t\t\tif (cell) {\n\t\t\t\t\t\tcell.text = \" \";\n\t\t\t\t\t\tcell.width = 1;\n\t\t\t\t\t\tcell.ink = 0;\n\t\t\t\t\t\tcell.bg = undefined;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn cells;\n\t}\n\n\tprivate pack(color: Rgb): number {\n\t\treturn (Math.round(color[0]) << 16) | (Math.round(color[1]) << 8) | Math.round(color[2]);\n\t}\n\n\tprivate ansi(key: number, isBackground: boolean): string {\n\t\tconst cacheKey = key * 2 + (isBackground ? 1 : 0);\n\t\tlet value = this.ansiCache.get(cacheKey);\n\t\tif (value === undefined) {\n\t\t\tconst color = rgbColor((key >> 16) & 255, (key >> 8) & 255, key & 255);\n\t\t\tconst mode = theme.getColorMode();\n\t\t\tvalue = isBackground ? backgroundAnsi(color, mode) : foregroundAnsi(color, mode);\n\t\t\tthis.ansiCache.set(cacheKey, value);\n\t\t}\n\t\treturn value;\n\t}\n}\n"]}
@@ -0,0 +1,6 @@
1
+ import { type TUI } from "@earendil-works/pi-tui";
2
+ /** Plays the 3D pi logo, lifting off the header logo whose top-left cell is at `column`, `row`. */
3
+ export declare function playPiLogo3d(tui: TUI, column: number, row: number): void;
4
+ /** Plays the 3D Armin. Returns false when it cannot play, so the caller can fall back to the inline version. */
5
+ export declare function playArmin3d(tui: TUI): boolean;
6
+ //# sourceMappingURL=easter-egg-3d.lazy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"easter-egg-3d.lazy.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/easter-egg-3d.lazy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAgB,MAAM,wBAAwB,CAAC;AAkBhE,mGAAmG;AACnG,wBAAgB,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAExE;AAED,gHAAgH;AAChH,wBAAgB,WAAW,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAE7C"}
@@ -0,0 +1,23 @@
1
+ import { TuiAltScreen } from "@earendil-works/pi-tui";
2
+ /**
3
+ * Plays a 3D easter egg (see easter-egg-3d.ts), which loads on first use. Only fullscreen mode can show it, because
4
+ * it dissolves the rendered screen. The screen is captured before loading. Returns false when it cannot play.
5
+ */
6
+ function playEasterEgg3d(tui, egg) {
7
+ if (!(tui instanceof TuiAltScreen))
8
+ return false;
9
+ if (tui.hasOverlay())
10
+ return true;
11
+ const screen = tui.getScreenLines();
12
+ import("./easter-egg-3d.js").then((module) => module.playEasterEgg3d(tui, screen, egg), () => { });
13
+ return true;
14
+ }
15
+ /** Plays the 3D pi logo, lifting off the header logo whose top-left cell is at `column`, `row`. */
16
+ export function playPiLogo3d(tui, column, row) {
17
+ playEasterEgg3d(tui, { kind: "pi-logo", column, row });
18
+ }
19
+ /** Plays the 3D Armin. Returns false when it cannot play, so the caller can fall back to the inline version. */
20
+ export function playArmin3d(tui) {
21
+ return playEasterEgg3d(tui, { kind: "armin" });
22
+ }
23
+ //# sourceMappingURL=easter-egg-3d.lazy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"easter-egg-3d.lazy.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/easter-egg-3d.lazy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAGhE;;;GAGG;AACH,SAAS,eAAe,CAAC,GAAQ,EAAE,GAAgB;IAClD,IAAI,CAAC,CAAC,GAAG,YAAY,YAAY,CAAC;QAAE,OAAO,KAAK,CAAC;IACjD,IAAI,GAAG,CAAC,UAAU,EAAE;QAAE,OAAO,IAAI,CAAC;IAClC,MAAM,MAAM,GAAG,GAAG,CAAC,cAAc,EAAE,CAAC;IACpC,MAAM,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAChC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EACpD,GAAG,EAAE,GAAE,CAAC,CACR,CAAC;IACF,OAAO,IAAI,CAAC;AACb,CAAC;AAED,mGAAmG;AACnG,MAAM,UAAU,YAAY,CAAC,GAAQ,EAAE,MAAc,EAAE,GAAW;IACjE,eAAe,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;AACxD,CAAC;AAED,gHAAgH;AAChH,MAAM,UAAU,WAAW,CAAC,GAAQ;IACnC,OAAO,eAAe,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AAChD,CAAC","sourcesContent":["import { type TUI, TuiAltScreen } from \"@earendil-works/pi-tui\";\nimport type { EasterEgg3d } from \"./easter-egg-3d.ts\";\n\n/**\n * Plays a 3D easter egg (see easter-egg-3d.ts), which loads on first use. Only fullscreen mode can show it, because\n * it dissolves the rendered screen. The screen is captured before loading. Returns false when it cannot play.\n */\nfunction playEasterEgg3d(tui: TUI, egg: EasterEgg3d): boolean {\n\tif (!(tui instanceof TuiAltScreen)) return false;\n\tif (tui.hasOverlay()) return true;\n\tconst screen = tui.getScreenLines();\n\timport(\"./easter-egg-3d.ts\").then(\n\t\t(module) => module.playEasterEgg3d(tui, screen, egg),\n\t\t() => {},\n\t);\n\treturn true;\n}\n\n/** Plays the 3D pi logo, lifting off the header logo whose top-left cell is at `column`, `row`. */\nexport function playPiLogo3d(tui: TUI, column: number, row: number): void {\n\tplayEasterEgg3d(tui, { kind: \"pi-logo\", column, row });\n}\n\n/** Plays the 3D Armin. Returns false when it cannot play, so the caller can fall back to the inline version. */\nexport function playArmin3d(tui: TUI): boolean {\n\treturn playEasterEgg3d(tui, { kind: \"armin\" });\n}\n"]}
@@ -6,7 +6,6 @@ export { BranchSummaryMessageComponent } from "./branch-summary-message.ts";
6
6
  export { CompactionSummaryMessageComponent } from "./compaction-summary-message.ts";
7
7
  export { CustomEditor, type CustomEditorOptions } from "./custom-editor.ts";
8
8
  export { CustomMessageComponent } from "./custom-message.ts";
9
- export { DaxnutsComponent } from "./daxnuts.ts";
10
9
  export { type RenderDiffOptions, renderDiff } from "./diff.ts";
11
10
  export { DynamicBorder } from "./dynamic-border.ts";
12
11
  export { ExtensionEditorComponent } from "./extension-editor.ts";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,iCAAiC,EAAE,MAAM,iCAAiC,CAAC;AACpF,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,KAAK,iBAAiB,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EACN,uBAAuB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,GACzB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,YAAY,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AACrH,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,cAAc,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAChH,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,EAAE,+BAA+B,EAAE,MAAM,+BAA+B,CAAC;AAChF,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AACxF,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,4BAA4B,EAAE,MAAM,4BAA4B,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,iCAAiC,EAAE,MAAM,iCAAiC,CAAC;AACpF,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,KAAK,iBAAiB,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EACN,uBAAuB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,GACzB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,YAAY,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AACrH,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,cAAc,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAChH,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,EAAE,+BAA+B,EAAE,MAAM,+BAA+B,CAAC;AAChF,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AACxF,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,4BAA4B,EAAE,MAAM,4BAA4B,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -7,7 +7,6 @@ export { BranchSummaryMessageComponent } from "./branch-summary-message.js";
7
7
  export { CompactionSummaryMessageComponent } from "./compaction-summary-message.js";
8
8
  export { CustomEditor } from "./custom-editor.js";
9
9
  export { CustomMessageComponent } from "./custom-message.js";
10
- export { DaxnutsComponent } from "./daxnuts.js";
11
10
  export { renderDiff } from "./diff.js";
12
11
  export { DynamicBorder } from "./dynamic-border.js";
13
12
  export { ExtensionEditorComponent } from "./extension-editor.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/index.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,iCAAiC,EAAE,MAAM,iCAAiC,CAAC;AACpF,OAAO,EAAE,YAAY,EAA4B,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAA0B,UAAU,EAAE,MAAM,WAAW,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EACN,uBAAuB,GAGvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAA2C,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AACrH,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAA+C,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAChH,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,EAAE,+BAA+B,EAAE,MAAM,+BAA+B,CAAC;AAChF,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAA6B,MAAM,qBAAqB,CAAC;AACxF,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,4BAA4B,EAAE,MAAM,4BAA4B,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAA6B,MAAM,sBAAsB,CAAC","sourcesContent":["// UI Components for extensions\nexport { ArminComponent } from \"./armin.ts\";\nexport { AssistantMessageComponent } from \"./assistant-message.ts\";\nexport { BashExecutionComponent } from \"./bash-execution.ts\";\nexport { BorderedLoader } from \"./bordered-loader.ts\";\nexport { BranchSummaryMessageComponent } from \"./branch-summary-message.ts\";\nexport { CompactionSummaryMessageComponent } from \"./compaction-summary-message.ts\";\nexport { CustomEditor, type CustomEditorOptions } from \"./custom-editor.ts\";\nexport { CustomMessageComponent } from \"./custom-message.ts\";\nexport { DaxnutsComponent } from \"./daxnuts.ts\";\nexport { type RenderDiffOptions, renderDiff } from \"./diff.ts\";\nexport { DynamicBorder } from \"./dynamic-border.ts\";\nexport { ExtensionEditorComponent } from \"./extension-editor.ts\";\nexport { ExtensionInputComponent } from \"./extension-input.ts\";\nexport { ExtensionSelectorComponent } from \"./extension-selector.ts\";\nexport {\n\tFirstTimeSetupComponent,\n\ttype FirstTimeSetupOptions,\n\ttype FirstTimeSetupResult,\n} from \"./first-time-setup.ts\";\nexport { FooterComponent } from \"./footer.ts\";\nexport { keyHint, keyText, rawKeyHint } from \"./keybinding-hints.ts\";\nexport { LoginDialogComponent } from \"./login-dialog.ts\";\nexport { ModelSelectorComponent } from \"./model-selector.ts\";\nexport { OAuthSelectorComponent } from \"./oauth-selector.ts\";\nexport { type ModelsCallbacks, type ModelsConfig, ScopedModelsSelectorComponent } from \"./scoped-models-selector.ts\";\nexport { SessionSelectorComponent } from \"./session-selector.ts\";\nexport { type SettingsCallbacks, type SettingsConfig, SettingsSelectorComponent } from \"./settings-selector.ts\";\nexport { ShowImagesSelectorComponent } from \"./show-images-selector.ts\";\nexport { SkillInvocationMessageComponent } from \"./skill-invocation-message.ts\";\nexport { ThemeSelectorComponent } from \"./theme-selector.ts\";\nexport { ThinkingSelectorComponent } from \"./thinking-selector.ts\";\nexport { ToolExecutionComponent, type ToolExecutionOptions } from \"./tool-execution.ts\";\nexport { TreeSelectorComponent } from \"./tree-selector.ts\";\nexport { TrustSelectorComponent } from \"./trust-selector.ts\";\nexport { UserMessageComponent } from \"./user-message.ts\";\nexport { UserMessageSelectorComponent } from \"./user-message-selector.ts\";\nexport { truncateToVisualLines, type VisualTruncateResult } from \"./visual-truncate.ts\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/index.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,iCAAiC,EAAE,MAAM,iCAAiC,CAAC;AACpF,OAAO,EAAE,YAAY,EAA4B,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAA0B,UAAU,EAAE,MAAM,WAAW,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EACN,uBAAuB,GAGvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAA2C,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AACrH,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAA+C,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAChH,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,EAAE,+BAA+B,EAAE,MAAM,+BAA+B,CAAC;AAChF,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAA6B,MAAM,qBAAqB,CAAC;AACxF,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,4BAA4B,EAAE,MAAM,4BAA4B,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAA6B,MAAM,sBAAsB,CAAC","sourcesContent":["// UI Components for extensions\nexport { ArminComponent } from \"./armin.ts\";\nexport { AssistantMessageComponent } from \"./assistant-message.ts\";\nexport { BashExecutionComponent } from \"./bash-execution.ts\";\nexport { BorderedLoader } from \"./bordered-loader.ts\";\nexport { BranchSummaryMessageComponent } from \"./branch-summary-message.ts\";\nexport { CompactionSummaryMessageComponent } from \"./compaction-summary-message.ts\";\nexport { CustomEditor, type CustomEditorOptions } from \"./custom-editor.ts\";\nexport { CustomMessageComponent } from \"./custom-message.ts\";\nexport { type RenderDiffOptions, renderDiff } from \"./diff.ts\";\nexport { DynamicBorder } from \"./dynamic-border.ts\";\nexport { ExtensionEditorComponent } from \"./extension-editor.ts\";\nexport { ExtensionInputComponent } from \"./extension-input.ts\";\nexport { ExtensionSelectorComponent } from \"./extension-selector.ts\";\nexport {\n\tFirstTimeSetupComponent,\n\ttype FirstTimeSetupOptions,\n\ttype FirstTimeSetupResult,\n} from \"./first-time-setup.ts\";\nexport { FooterComponent } from \"./footer.ts\";\nexport { keyHint, keyText, rawKeyHint } from \"./keybinding-hints.ts\";\nexport { LoginDialogComponent } from \"./login-dialog.ts\";\nexport { ModelSelectorComponent } from \"./model-selector.ts\";\nexport { OAuthSelectorComponent } from \"./oauth-selector.ts\";\nexport { type ModelsCallbacks, type ModelsConfig, ScopedModelsSelectorComponent } from \"./scoped-models-selector.ts\";\nexport { SessionSelectorComponent } from \"./session-selector.ts\";\nexport { type SettingsCallbacks, type SettingsConfig, SettingsSelectorComponent } from \"./settings-selector.ts\";\nexport { ShowImagesSelectorComponent } from \"./show-images-selector.ts\";\nexport { SkillInvocationMessageComponent } from \"./skill-invocation-message.ts\";\nexport { ThemeSelectorComponent } from \"./theme-selector.ts\";\nexport { ThinkingSelectorComponent } from \"./thinking-selector.ts\";\nexport { ToolExecutionComponent, type ToolExecutionOptions } from \"./tool-execution.ts\";\nexport { TreeSelectorComponent } from \"./tree-selector.ts\";\nexport { TrustSelectorComponent } from \"./trust-selector.ts\";\nexport { UserMessageComponent } from \"./user-message.ts\";\nexport { UserMessageSelectorComponent } from \"./user-message-selector.ts\";\nexport { truncateToVisualLines, type VisualTruncateResult } from \"./visual-truncate.ts\";\n"]}
@@ -7,6 +7,8 @@ export declare class LoginDialogComponent extends Container implements Focusable
7
7
  private contentContainer;
8
8
  private input;
9
9
  private tui;
10
+ /** The shown sign-in URL, which `app.message.copy` copies. */
11
+ private authUrl?;
10
12
  private abortController;
11
13
  private inputResolver?;
12
14
  private inputRejecter?;
@@ -1 +1 @@
1
- {"version":3,"file":"login-dialog.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/login-dialog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC/E,OAAO,EAAE,SAAS,EAAE,KAAK,SAAS,EAAuC,KAAK,GAAG,EAAE,MAAM,wBAAwB,CAAC;AAMlH;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,SAAU,YAAW,SAAS;IACvE,OAAO,CAAC,gBAAgB,CAAY;IACpC,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,eAAe,CAAyB;IAChD,OAAO,CAAC,aAAa,CAAC,CAA0B;IAChD,OAAO,CAAC,aAAa,CAAC,CAAyB;IAC/C,OAAO,CAAC,UAAU,CAA+C;IAGjE,OAAO,CAAC,QAAQ,CAAS;IACzB,IAAI,OAAO,IAAI,OAAO,CAErB;IACD,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAGzB;IAED,YACC,GAAG,EAAE,GAAG,EACR,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,EACxD,oBAAoB,CAAC,EAAE,MAAM,EAC7B,aAAa,CAAC,EAAE,MAAM,EAoCtB;IAED,IAAI,MAAM,IAAI,WAAW,CAExB;IAED,OAAO,CAAC,6BAA6B;IAMrC,OAAO,CAAC,MAAM;IAUd;;OAEG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAiBjD;IAED;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI,CAa9C;IAED;;OAEG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAY/C;IAED;;;OAGG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAsBjE;IAED,yDAAyD;IACzD,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAOjC;IAED,wFAAwF;IACxF,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,GAAE,SAAS,YAAY,EAAO,EAAE,aAAa,UAAQ,GAAG,IAAI,CAa1F;IAED;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAKjC;IAED;;OAEG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAGlC;IAED,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAU9B;CACD"}
1
+ {"version":3,"file":"login-dialog.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/login-dialog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC/E,OAAO,EAAE,SAAS,EAAE,KAAK,SAAS,EAAuC,KAAK,GAAG,EAAE,MAAM,wBAAwB,CAAC;AAOlH;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,SAAU,YAAW,SAAS;IACvE,OAAO,CAAC,gBAAgB,CAAY;IACpC,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,GAAG,CAAM;IACjB,8DAA8D;IAC9D,OAAO,CAAC,OAAO,CAAC,CAAmB;IACnC,OAAO,CAAC,eAAe,CAAyB;IAChD,OAAO,CAAC,aAAa,CAAC,CAA0B;IAChD,OAAO,CAAC,aAAa,CAAC,CAAyB;IAC/C,OAAO,CAAC,UAAU,CAA+C;IAGjE,OAAO,CAAC,QAAQ,CAAS;IACzB,IAAI,OAAO,IAAI,OAAO,CAErB;IACD,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAGzB;IAED,YACC,GAAG,EAAE,GAAG,EACR,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,EACxD,oBAAoB,CAAC,EAAE,MAAM,EAC7B,aAAa,CAAC,EAAE,MAAM,EAoCtB;IAED,IAAI,MAAM,IAAI,WAAW,CAExB;IAED,OAAO,CAAC,6BAA6B;IAMrC,OAAO,CAAC,MAAM;IAUd;;OAEG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAajD;IAED;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI,CAc9C;IAED;;OAEG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAY/C;IAED;;;OAGG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAsBjE;IAED,yDAAyD;IACzD,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAQjC;IAED,wFAAwF;IACxF,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,GAAE,SAAS,YAAY,EAAO,EAAE,aAAa,UAAQ,GAAG,IAAI,CAa1F;IAED;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAKjC;IAED;;OAEG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAGlC;IAED,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAc9B;CACD"}
@@ -1,6 +1,7 @@
1
1
  import { Container, getKeybindings, Input, Spacer, Text } from "@earendil-works/pi-tui";
2
2
  import { openBrowser } from "../../../utils/open-browser.js";
3
3
  import { theme } from "../theme/theme.js";
4
+ import { AuthUrlComponent } from "./auth-url.js";
4
5
  import { DynamicBorder } from "./dynamic-border.js";
5
6
  import { keyHint } from "./keybinding-hints.js";
6
7
  /**
@@ -10,6 +11,8 @@ export class LoginDialogComponent extends Container {
10
11
  contentContainer;
11
12
  input;
12
13
  tui;
14
+ /** The shown sign-in URL, which `app.message.copy` copies. */
15
+ authUrl;
13
16
  abortController = new AbortController();
14
17
  inputResolver;
15
18
  inputRejecter;
@@ -74,11 +77,8 @@ export class LoginDialogComponent extends Container {
74
77
  showAuth(url, instructions) {
75
78
  this.contentContainer.clear();
76
79
  this.contentContainer.addChild(new Spacer(1));
77
- const linkedUrl = `\x1b]8;;${url}\x07${url}\x1b]8;;\x07`;
78
- this.contentContainer.addChild(new Text(theme.fg("accent", linkedUrl), 1, 0));
79
- const clickHint = process.platform === "darwin" ? "Cmd+click to open" : "Ctrl+click to open";
80
- const hyperlink = `\x1b]8;;${url}\x07${clickHint}\x1b]8;;\x07`;
81
- this.contentContainer.addChild(new Text(theme.fg("dim", hyperlink), 1, 0));
80
+ this.authUrl = new AuthUrlComponent(this.tui, url);
81
+ this.contentContainer.addChild(this.authUrl);
82
82
  if (instructions) {
83
83
  this.contentContainer.addChild(new Spacer(1));
84
84
  this.contentContainer.addChild(new Text(theme.fg("warning", instructions), 1, 0));
@@ -90,6 +90,7 @@ export class LoginDialogComponent extends Container {
90
90
  * Called by onDeviceCode callback - show URL and user code.
91
91
  */
92
92
  showDeviceCode(info) {
93
+ this.authUrl = undefined;
93
94
  this.contentContainer.clear();
94
95
  this.contentContainer.addChild(new Spacer(1));
95
96
  const linkedUrl = `\x1b]8;;${info.verificationUri}\x07${info.verificationUri}\x1b]8;;\x07`;
@@ -137,6 +138,7 @@ export class LoginDialogComponent extends Container {
137
138
  }
138
139
  /** Show informational text before another login step. */
139
140
  showDetails(lines) {
141
+ this.authUrl = undefined;
140
142
  this.contentContainer.clear();
141
143
  this.contentContainer.addChild(new Spacer(1));
142
144
  for (const line of lines) {
@@ -181,6 +183,10 @@ export class LoginDialogComponent extends Container {
181
183
  this.cancel();
182
184
  return;
183
185
  }
186
+ if (this.authUrl && kb.matches(data, "app.message.copy")) {
187
+ void this.authUrl.copy();
188
+ return;
189
+ }
184
190
  // Pass to input
185
191
  this.input.handleInput(data);
186
192
  }
@@ -1 +1 @@
1
- {"version":3,"file":"login-dialog.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/login-dialog.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AuthInfoLink, OAuthDeviceCodeInfo } from \"@earendil-works/pi-ai\";\nimport { Container, type Focusable, getKeybindings, Input, Spacer, Text, type TUI } from \"@earendil-works/pi-tui\";\nimport { openBrowser } from \"../../../utils/open-browser.ts\";\nimport { theme } from \"../theme/theme.ts\";\nimport { DynamicBorder } from \"./dynamic-border.ts\";\nimport { keyHint } from \"./keybinding-hints.ts\";\n\n/**\n * Login dialog component - replaces editor during OAuth login flow\n */\nexport class LoginDialogComponent extends Container implements Focusable {\n\tprivate contentContainer: Container;\n\tprivate input: Input;\n\tprivate tui: TUI;\n\tprivate abortController = new AbortController();\n\tprivate inputResolver?: (value: string) => void;\n\tprivate inputRejecter?: (error: Error) => void;\n\tprivate onComplete: (success: boolean, message?: string) => void;\n\n\t// Focusable implementation - propagate to input for IME cursor positioning\n\tprivate _focused = false;\n\tget focused(): boolean {\n\t\treturn this._focused;\n\t}\n\tset focused(value: boolean) {\n\t\tthis._focused = value;\n\t\tthis.input.focused = value;\n\t}\n\n\tconstructor(\n\t\ttui: TUI,\n\t\tproviderId: string,\n\t\tonComplete: (success: boolean, message?: string) => void,\n\t\tproviderNameOverride?: string,\n\t\ttitleOverride?: string,\n\t) {\n\t\tsuper();\n\t\tthis.tui = tui;\n\t\tthis.onComplete = onComplete;\n\n\t\tconst providerName = providerNameOverride || providerId;\n\t\tconst title = titleOverride ?? `Login to ${providerName}`;\n\n\t\t// Top border\n\t\tthis.addChild(new DynamicBorder());\n\n\t\t// Title\n\t\tthis.addChild(new Text(theme.fg(\"accent\", theme.bold(title)), 1, 0));\n\n\t\t// Dynamic content area\n\t\tthis.contentContainer = new Container();\n\t\tthis.addChild(this.contentContainer);\n\n\t\t// Input (always present, used when needed)\n\t\tthis.input = new Input();\n\t\tthis.input.onSubmit = () => {\n\t\t\tif (this.inputResolver) {\n\t\t\t\tconst value = this.input.getValue();\n\t\t\t\tthis.replaceInputWithSubmittedText(value);\n\t\t\t\tthis.inputResolver(value);\n\t\t\t\tthis.inputResolver = undefined;\n\t\t\t\tthis.inputRejecter = undefined;\n\t\t\t}\n\t\t};\n\t\tthis.input.onEscape = () => {\n\t\t\tthis.cancel();\n\t\t};\n\n\t\t// Bottom border\n\t\tthis.addChild(new DynamicBorder());\n\t}\n\n\tget signal(): AbortSignal {\n\t\treturn this.abortController.signal;\n\t}\n\n\tprivate replaceInputWithSubmittedText(value: string): void {\n\t\tthis.contentContainer.children = this.contentContainer.children.map((child) =>\n\t\t\tchild === this.input ? new Text(`> ${value}`, 0, 0) : child,\n\t\t);\n\t}\n\n\tprivate cancel(): void {\n\t\tthis.abortController.abort();\n\t\tif (this.inputRejecter) {\n\t\t\tthis.inputRejecter(new Error(\"Login cancelled\"));\n\t\t\tthis.inputResolver = undefined;\n\t\t\tthis.inputRejecter = undefined;\n\t\t}\n\t\tthis.onComplete(false, \"Login cancelled\");\n\t}\n\n\t/**\n\t * Called by onAuth callback - show URL and optional instructions\n\t */\n\tshowAuth(url: string, instructions?: string): void {\n\t\tthis.contentContainer.clear();\n\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\tconst linkedUrl = `\\x1b]8;;${url}\\x07${url}\\x1b]8;;\\x07`;\n\t\tthis.contentContainer.addChild(new Text(theme.fg(\"accent\", linkedUrl), 1, 0));\n\n\t\tconst clickHint = process.platform === \"darwin\" ? \"Cmd+click to open\" : \"Ctrl+click to open\";\n\t\tconst hyperlink = `\\x1b]8;;${url}\\x07${clickHint}\\x1b]8;;\\x07`;\n\t\tthis.contentContainer.addChild(new Text(theme.fg(\"dim\", hyperlink), 1, 0));\n\n\t\tif (instructions) {\n\t\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\t\tthis.contentContainer.addChild(new Text(theme.fg(\"warning\", instructions), 1, 0));\n\t\t}\n\n\t\topenBrowser(url);\n\t\tthis.tui.requestRender();\n\t}\n\n\t/**\n\t * Called by onDeviceCode callback - show URL and user code.\n\t */\n\tshowDeviceCode(info: OAuthDeviceCodeInfo): void {\n\t\tthis.contentContainer.clear();\n\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\tconst linkedUrl = `\\x1b]8;;${info.verificationUri}\\x07${info.verificationUri}\\x1b]8;;\\x07`;\n\t\tthis.contentContainer.addChild(new Text(theme.fg(\"accent\", linkedUrl), 1, 0));\n\n\t\tconst clickHint = process.platform === \"darwin\" ? \"Cmd+click to open\" : \"Ctrl+click to open\";\n\t\tconst hyperlink = `\\x1b]8;;${info.verificationUri}\\x07${clickHint}\\x1b]8;;\\x07`;\n\t\tthis.contentContainer.addChild(new Text(theme.fg(\"dim\", hyperlink), 1, 0));\n\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\tthis.contentContainer.addChild(new Text(theme.fg(\"warning\", `Enter code: ${info.userCode}`), 1, 0));\n\n\t\tthis.tui.requestRender();\n\t}\n\n\t/**\n\t * Show input for manual code/URL entry (for callback server providers)\n\t */\n\tshowManualInput(prompt: string): Promise<string> {\n\t\tthis.input.setValue(\"\");\n\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\tthis.contentContainer.addChild(new Text(theme.fg(\"dim\", prompt), 1, 0));\n\t\tthis.contentContainer.addChild(this.input);\n\t\tthis.contentContainer.addChild(new Text(`(${keyHint(\"tui.select.cancel\", \"to cancel\")})`, 1, 0));\n\t\tthis.tui.requestRender();\n\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.inputResolver = resolve;\n\t\t\tthis.inputRejecter = reject;\n\t\t});\n\t}\n\n\t/**\n\t * Called by onPrompt callback - show prompt and wait for input\n\t * Note: Does NOT clear content, appends to existing (preserves URL from showAuth)\n\t */\n\tshowPrompt(message: string, placeholder?: string): Promise<string> {\n\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\tthis.contentContainer.addChild(new Text(theme.fg(\"text\", message), 1, 0));\n\t\tif (placeholder) {\n\t\t\tthis.contentContainer.addChild(new Text(theme.fg(\"dim\", `e.g., ${placeholder}`), 1, 0));\n\t\t}\n\t\tthis.contentContainer.addChild(this.input);\n\t\tthis.contentContainer.addChild(\n\t\t\tnew Text(\n\t\t\t\t`(${keyHint(\"tui.select.cancel\", \"to cancel,\")} ${keyHint(\"tui.select.confirm\", \"to submit\")})`,\n\t\t\t\t1,\n\t\t\t\t0,\n\t\t\t),\n\t\t);\n\n\t\tthis.input.setValue(\"\");\n\t\tthis.tui.requestRender();\n\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.inputResolver = resolve;\n\t\t\tthis.inputRejecter = reject;\n\t\t});\n\t}\n\n\t/** Show informational text before another login step. */\n\tshowDetails(lines: string[]): void {\n\t\tthis.contentContainer.clear();\n\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\tfor (const line of lines) {\n\t\t\tthis.contentContainer.addChild(new Text(line, 1, 0));\n\t\t}\n\t\tthis.tui.requestRender();\n\t}\n\n\t/** Show provider-owned information and links without starting an auth callback flow. */\n\tshowInfo(message: string, links: readonly AuthInfoLink[] = [], showCloseHint = false): void {\n\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\tthis.contentContainer.addChild(new Text(theme.fg(\"text\", message), 1, 0));\n\t\tfor (const link of links) {\n\t\t\tconst text = link.label ? `${link.label}: ${link.url}` : link.url;\n\t\t\tconst hyperlink = `\\x1b]8;;${link.url}\\x07${text}\\x1b]8;;\\x07`;\n\t\t\tthis.contentContainer.addChild(new Text(theme.fg(\"accent\", hyperlink), 1, 0));\n\t\t}\n\t\tif (showCloseHint) {\n\t\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\t\tthis.contentContainer.addChild(new Text(`(${keyHint(\"tui.select.cancel\", \"to close\")})`, 1, 0));\n\t\t}\n\t\tthis.tui.requestRender();\n\t}\n\n\t/**\n\t * Show waiting message (for polling flows like GitHub Copilot)\n\t */\n\tshowWaiting(message: string): void {\n\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\tthis.contentContainer.addChild(new Text(theme.fg(\"dim\", message), 1, 0));\n\t\tthis.contentContainer.addChild(new Text(`(${keyHint(\"tui.select.cancel\", \"to cancel\")})`, 1, 0));\n\t\tthis.tui.requestRender();\n\t}\n\n\t/**\n\t * Called by onProgress callback\n\t */\n\tshowProgress(message: string): void {\n\t\tthis.contentContainer.addChild(new Text(theme.fg(\"dim\", message), 1, 0));\n\t\tthis.tui.requestRender();\n\t}\n\n\thandleInput(data: string): void {\n\t\tconst kb = getKeybindings();\n\n\t\tif (kb.matches(data, \"tui.select.cancel\")) {\n\t\t\tthis.cancel();\n\t\t\treturn;\n\t\t}\n\n\t\t// Pass to input\n\t\tthis.input.handleInput(data);\n\t}\n}\n"]}
1
+ {"version":3,"file":"login-dialog.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/login-dialog.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AuthInfoLink, OAuthDeviceCodeInfo } from \"@earendil-works/pi-ai\";\nimport { Container, type Focusable, getKeybindings, Input, Spacer, Text, type TUI } from \"@earendil-works/pi-tui\";\nimport { openBrowser } from \"../../../utils/open-browser.ts\";\nimport { theme } from \"../theme/theme.ts\";\nimport { AuthUrlComponent } from \"./auth-url.ts\";\nimport { DynamicBorder } from \"./dynamic-border.ts\";\nimport { keyHint } from \"./keybinding-hints.ts\";\n\n/**\n * Login dialog component - replaces editor during OAuth login flow\n */\nexport class LoginDialogComponent extends Container implements Focusable {\n\tprivate contentContainer: Container;\n\tprivate input: Input;\n\tprivate tui: TUI;\n\t/** The shown sign-in URL, which `app.message.copy` copies. */\n\tprivate authUrl?: AuthUrlComponent;\n\tprivate abortController = new AbortController();\n\tprivate inputResolver?: (value: string) => void;\n\tprivate inputRejecter?: (error: Error) => void;\n\tprivate onComplete: (success: boolean, message?: string) => void;\n\n\t// Focusable implementation - propagate to input for IME cursor positioning\n\tprivate _focused = false;\n\tget focused(): boolean {\n\t\treturn this._focused;\n\t}\n\tset focused(value: boolean) {\n\t\tthis._focused = value;\n\t\tthis.input.focused = value;\n\t}\n\n\tconstructor(\n\t\ttui: TUI,\n\t\tproviderId: string,\n\t\tonComplete: (success: boolean, message?: string) => void,\n\t\tproviderNameOverride?: string,\n\t\ttitleOverride?: string,\n\t) {\n\t\tsuper();\n\t\tthis.tui = tui;\n\t\tthis.onComplete = onComplete;\n\n\t\tconst providerName = providerNameOverride || providerId;\n\t\tconst title = titleOverride ?? `Login to ${providerName}`;\n\n\t\t// Top border\n\t\tthis.addChild(new DynamicBorder());\n\n\t\t// Title\n\t\tthis.addChild(new Text(theme.fg(\"accent\", theme.bold(title)), 1, 0));\n\n\t\t// Dynamic content area\n\t\tthis.contentContainer = new Container();\n\t\tthis.addChild(this.contentContainer);\n\n\t\t// Input (always present, used when needed)\n\t\tthis.input = new Input();\n\t\tthis.input.onSubmit = () => {\n\t\t\tif (this.inputResolver) {\n\t\t\t\tconst value = this.input.getValue();\n\t\t\t\tthis.replaceInputWithSubmittedText(value);\n\t\t\t\tthis.inputResolver(value);\n\t\t\t\tthis.inputResolver = undefined;\n\t\t\t\tthis.inputRejecter = undefined;\n\t\t\t}\n\t\t};\n\t\tthis.input.onEscape = () => {\n\t\t\tthis.cancel();\n\t\t};\n\n\t\t// Bottom border\n\t\tthis.addChild(new DynamicBorder());\n\t}\n\n\tget signal(): AbortSignal {\n\t\treturn this.abortController.signal;\n\t}\n\n\tprivate replaceInputWithSubmittedText(value: string): void {\n\t\tthis.contentContainer.children = this.contentContainer.children.map((child) =>\n\t\t\tchild === this.input ? new Text(`> ${value}`, 0, 0) : child,\n\t\t);\n\t}\n\n\tprivate cancel(): void {\n\t\tthis.abortController.abort();\n\t\tif (this.inputRejecter) {\n\t\t\tthis.inputRejecter(new Error(\"Login cancelled\"));\n\t\t\tthis.inputResolver = undefined;\n\t\t\tthis.inputRejecter = undefined;\n\t\t}\n\t\tthis.onComplete(false, \"Login cancelled\");\n\t}\n\n\t/**\n\t * Called by onAuth callback - show URL and optional instructions\n\t */\n\tshowAuth(url: string, instructions?: string): void {\n\t\tthis.contentContainer.clear();\n\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\tthis.authUrl = new AuthUrlComponent(this.tui, url);\n\t\tthis.contentContainer.addChild(this.authUrl);\n\n\t\tif (instructions) {\n\t\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\t\tthis.contentContainer.addChild(new Text(theme.fg(\"warning\", instructions), 1, 0));\n\t\t}\n\n\t\topenBrowser(url);\n\t\tthis.tui.requestRender();\n\t}\n\n\t/**\n\t * Called by onDeviceCode callback - show URL and user code.\n\t */\n\tshowDeviceCode(info: OAuthDeviceCodeInfo): void {\n\t\tthis.authUrl = undefined;\n\t\tthis.contentContainer.clear();\n\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\tconst linkedUrl = `\\x1b]8;;${info.verificationUri}\\x07${info.verificationUri}\\x1b]8;;\\x07`;\n\t\tthis.contentContainer.addChild(new Text(theme.fg(\"accent\", linkedUrl), 1, 0));\n\n\t\tconst clickHint = process.platform === \"darwin\" ? \"Cmd+click to open\" : \"Ctrl+click to open\";\n\t\tconst hyperlink = `\\x1b]8;;${info.verificationUri}\\x07${clickHint}\\x1b]8;;\\x07`;\n\t\tthis.contentContainer.addChild(new Text(theme.fg(\"dim\", hyperlink), 1, 0));\n\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\tthis.contentContainer.addChild(new Text(theme.fg(\"warning\", `Enter code: ${info.userCode}`), 1, 0));\n\n\t\tthis.tui.requestRender();\n\t}\n\n\t/**\n\t * Show input for manual code/URL entry (for callback server providers)\n\t */\n\tshowManualInput(prompt: string): Promise<string> {\n\t\tthis.input.setValue(\"\");\n\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\tthis.contentContainer.addChild(new Text(theme.fg(\"dim\", prompt), 1, 0));\n\t\tthis.contentContainer.addChild(this.input);\n\t\tthis.contentContainer.addChild(new Text(`(${keyHint(\"tui.select.cancel\", \"to cancel\")})`, 1, 0));\n\t\tthis.tui.requestRender();\n\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.inputResolver = resolve;\n\t\t\tthis.inputRejecter = reject;\n\t\t});\n\t}\n\n\t/**\n\t * Called by onPrompt callback - show prompt and wait for input\n\t * Note: Does NOT clear content, appends to existing (preserves URL from showAuth)\n\t */\n\tshowPrompt(message: string, placeholder?: string): Promise<string> {\n\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\tthis.contentContainer.addChild(new Text(theme.fg(\"text\", message), 1, 0));\n\t\tif (placeholder) {\n\t\t\tthis.contentContainer.addChild(new Text(theme.fg(\"dim\", `e.g., ${placeholder}`), 1, 0));\n\t\t}\n\t\tthis.contentContainer.addChild(this.input);\n\t\tthis.contentContainer.addChild(\n\t\t\tnew Text(\n\t\t\t\t`(${keyHint(\"tui.select.cancel\", \"to cancel,\")} ${keyHint(\"tui.select.confirm\", \"to submit\")})`,\n\t\t\t\t1,\n\t\t\t\t0,\n\t\t\t),\n\t\t);\n\n\t\tthis.input.setValue(\"\");\n\t\tthis.tui.requestRender();\n\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.inputResolver = resolve;\n\t\t\tthis.inputRejecter = reject;\n\t\t});\n\t}\n\n\t/** Show informational text before another login step. */\n\tshowDetails(lines: string[]): void {\n\t\tthis.authUrl = undefined;\n\t\tthis.contentContainer.clear();\n\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\tfor (const line of lines) {\n\t\t\tthis.contentContainer.addChild(new Text(line, 1, 0));\n\t\t}\n\t\tthis.tui.requestRender();\n\t}\n\n\t/** Show provider-owned information and links without starting an auth callback flow. */\n\tshowInfo(message: string, links: readonly AuthInfoLink[] = [], showCloseHint = false): void {\n\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\tthis.contentContainer.addChild(new Text(theme.fg(\"text\", message), 1, 0));\n\t\tfor (const link of links) {\n\t\t\tconst text = link.label ? `${link.label}: ${link.url}` : link.url;\n\t\t\tconst hyperlink = `\\x1b]8;;${link.url}\\x07${text}\\x1b]8;;\\x07`;\n\t\t\tthis.contentContainer.addChild(new Text(theme.fg(\"accent\", hyperlink), 1, 0));\n\t\t}\n\t\tif (showCloseHint) {\n\t\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\t\tthis.contentContainer.addChild(new Text(`(${keyHint(\"tui.select.cancel\", \"to close\")})`, 1, 0));\n\t\t}\n\t\tthis.tui.requestRender();\n\t}\n\n\t/**\n\t * Show waiting message (for polling flows like GitHub Copilot)\n\t */\n\tshowWaiting(message: string): void {\n\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\tthis.contentContainer.addChild(new Text(theme.fg(\"dim\", message), 1, 0));\n\t\tthis.contentContainer.addChild(new Text(`(${keyHint(\"tui.select.cancel\", \"to cancel\")})`, 1, 0));\n\t\tthis.tui.requestRender();\n\t}\n\n\t/**\n\t * Called by onProgress callback\n\t */\n\tshowProgress(message: string): void {\n\t\tthis.contentContainer.addChild(new Text(theme.fg(\"dim\", message), 1, 0));\n\t\tthis.tui.requestRender();\n\t}\n\n\thandleInput(data: string): void {\n\t\tconst kb = getKeybindings();\n\n\t\tif (kb.matches(data, \"tui.select.cancel\")) {\n\t\t\tthis.cancel();\n\t\t\treturn;\n\t\t}\n\t\tif (this.authUrl && kb.matches(data, \"app.message.copy\")) {\n\t\t\tvoid this.authUrl.copy();\n\t\t\treturn;\n\t\t}\n\n\t\t// Pass to input\n\t\tthis.input.handleInput(data);\n\t}\n}\n"]}
@@ -1,19 +1,7 @@
1
- import type { AgentToolResult } from "@earendil-works/pi-agent-core";
2
- import { type Component, Container, type TUI, type TuiMouseEvent } from "@earendil-works/pi-tui";
3
- import type { ToolDefinition, ToolRenderContext, ToolRenderResultOptions } from "../../../core/extensions/types.ts";
4
- import type { Theme } from "../theme/theme.ts";
5
- /**
6
- * What this component needs from a tool: how to draw it. It neither executes tools nor reads their
7
- * parameter schemas, so a definition and a bare renderer pair are equally acceptable.
8
- *
9
- * The renderer parameters are `any` on purpose: a `ToolDefinition` types them from its schema, and
10
- * narrowing them here would make those definitions unassignable.
11
- */
12
- export interface ToolRenderers {
13
- renderShell?: "default" | "self";
14
- renderCall?: (args: any, theme: Theme, context: ToolRenderContext<any, any>) => Component;
15
- renderResult?: (result: AgentToolResult<any>, options: ToolRenderResultOptions, theme: Theme, context: ToolRenderContext<any, any>) => Component;
16
- }
1
+ import { Container, type TUI, type TuiMouseEvent } from "@earendil-works/pi-tui";
2
+ import type { ToolDefinition, ToolRenderers } from "../../../core/extensions/types.ts";
3
+ /** What this component needs from a tool: how to draw it, without executing it. */
4
+ export type { ToolRenderers };
17
5
  export interface ToolExecutionOptions {
18
6
  showImages?: boolean;
19
7
  imageWidthCells?: number;
@@ -28,6 +16,8 @@ export declare class ToolExecutionComponent extends Container {
28
16
  private resultRendererComponent?;
29
17
  private rendererState;
30
18
  private imageComponents;
19
+ /** Inputs of imageComponents, so updateDisplay can reuse images and keep their converted PNG data. */
20
+ private imageSources;
31
21
  private imageSpacers;
32
22
  private toolName;
33
23
  private toolCallId;
@@ -42,7 +32,6 @@ export declare class ToolExecutionComponent extends Container {
42
32
  private executionStarted;
43
33
  private argsComplete;
44
34
  private result?;
45
- private convertedImages;
46
35
  private hideComponent;
47
36
  constructor(toolName: string, toolCallId: string, args: any, options: ToolExecutionOptions | undefined, toolDefinition: ToolRenderers | ToolDefinition<any, any, any> | undefined, ui: TUI, cwd: string);
48
37
  private getCallRenderer;
@@ -66,7 +55,6 @@ export declare class ToolExecutionComponent extends Container {
66
55
  details?: any;
67
56
  isError: boolean;
68
57
  }, isPartial?: boolean): void;
69
- private maybeConvertImagesForKitty;
70
58
  setExpanded(expanded: boolean): void;
71
59
  setShowImages(show: boolean): void;
72
60
  setImageWidthCells(width: number): void;
@@ -1 +1 @@
1
- {"version":3,"file":"tool-execution.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/tool-execution.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tool-execution.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/tool-execution.ts"],"names":[],"mappings":"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"}