@simon_he/vue-tui 1.0.1 → 1.1.0

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 (128) hide show
  1. package/README.md +139 -46
  2. package/dist/TMermaidText-frVr8Ysb.js +885 -0
  3. package/dist/{TSelect-HzILuti9.js → TSelect-tJ87rKPM.js} +59 -242
  4. package/dist/{TTree-ChOot2Bh.js → TTree-CGdE-CYu.js} +138 -102
  5. package/dist/agent/mermaid.cjs +2 -0
  6. package/dist/agent/mermaid.d.cts +2 -0
  7. package/dist/agent/mermaid.d.ts +2 -0
  8. package/dist/agent/mermaid.js +1 -0
  9. package/dist/agent.cjs +31188 -24907
  10. package/dist/agent.d.cts +11 -1
  11. package/dist/agent.d.ts +11 -1
  12. package/dist/agent.js +516 -11
  13. package/dist/{block-source-CKUOnkgT.js → block-source-CrlmaBM5.js} +1039 -66
  14. package/dist/cli/input.d.ts +8 -0
  15. package/dist/cli/stdin-buffer.d.ts +1 -1
  16. package/dist/cli/video/ffmpeg-frame-source.d.ts +10 -0
  17. package/dist/cli/video/png-frame-parser.d.ts +4 -0
  18. package/dist/cli/video/raw-frame-parser.d.ts +1 -0
  19. package/dist/cli/video/yt-dlp-frame-source.d.ts +11 -0
  20. package/dist/cli.cjs +5470 -6176
  21. package/dist/cli.d.cts +6 -2
  22. package/dist/cli.d.ts +6 -2
  23. package/dist/cli.js +3747 -350
  24. package/dist/core/buffer/buffer.d.ts +2 -2
  25. package/dist/core/buffer/eaw-ranges-unicode-17.d.ts +14 -0
  26. package/dist/core/perf/instrumentation-noop.d.ts +48 -0
  27. package/dist/core/perf/instrumentation.d.ts +136 -0
  28. package/dist/core/terminal/create-terminal.d.ts +1 -0
  29. package/dist/core/types.d.ts +0 -4
  30. package/dist/core.cjs +851 -1462
  31. package/dist/core.js +4 -5
  32. package/dist/create-terminal-app.d.ts +24 -1
  33. package/dist/debug-logger-CmsGI4of.js +74 -0
  34. package/dist/{dom-renderer-BqGijQID.js → dom-renderer-DXx8fWzD.js} +2 -3
  35. package/dist/experimental/3d/bun/contributor-avatar-atlas.d.ts +12 -0
  36. package/dist/experimental/3d/bun/png.d.ts +1 -0
  37. package/dist/experimental/3d/bun/terminal-badge-scene.d.ts +11 -0
  38. package/dist/experimental/3d/bun/terminal-badge.wgsl.d.ts +1 -0
  39. package/dist/experimental/3d/bun/webgpu-renderer.d.ts +26 -0
  40. package/dist/experimental/3d/bun.cjs +7271 -0
  41. package/dist/experimental/3d/bun.d.cts +4 -0
  42. package/dist/experimental/3d/bun.d.ts +4 -0
  43. package/dist/experimental/3d/bun.js +7390 -0
  44. package/dist/experimental/video/node.cjs +497 -0
  45. package/dist/experimental/video/node.d.cts +4 -0
  46. package/dist/experimental/video/node.d.ts +4 -0
  47. package/dist/experimental/video/node.js +610 -0
  48. package/dist/experimental.cjs +6876 -6192
  49. package/dist/experimental.d.cts +7 -0
  50. package/dist/experimental.d.ts +7 -0
  51. package/dist/experimental.js +3005 -9
  52. package/dist/frame-perf-CHpWhbC4.js +111 -0
  53. package/dist/{create-terminal-C2oiWFJU.js → hyperlink-_1FAj7Wq.js} +455 -19
  54. package/dist/index.cjs +5025 -10332
  55. package/dist/index.js +14 -13
  56. package/dist/{linkify-D_gzn9Xq.js → linkify-D68T7rdW.js} +193 -3
  57. package/dist/markdown.cjs +21295 -12691
  58. package/dist/markdown.d.cts +1 -1
  59. package/dist/markdown.d.ts +1 -1
  60. package/dist/markdown.js +211 -51
  61. package/dist/mermaid-BNhM1jAZ.js +123 -0
  62. package/dist/mermaid.cjs +1707 -0
  63. package/dist/mermaid.d.cts +3 -0
  64. package/dist/mermaid.d.ts +3 -0
  65. package/dist/mermaid.js +6 -0
  66. package/dist/observability/frame-perf-store.d.ts +2 -1
  67. package/dist/observability/frame-perf.d.ts +33 -0
  68. package/dist/observability.cjs +106 -107
  69. package/dist/observability.d.cts +2 -2
  70. package/dist/observability.d.ts +2 -2
  71. package/dist/observability.js +3 -3
  72. package/dist/{wheel-scroll-vBRaQ7p-.js → rect-DUpeDfBg.js} +253 -117
  73. package/dist/renderer/cli/index.d.ts +1 -1
  74. package/dist/renderer/cli/stdout-metrics.d.ts +10 -0
  75. package/dist/renderer/cli/stdout-renderer.d.ts +53 -7
  76. package/dist/renderer/terminal-graphic-render-queue.d.ts +50 -0
  77. package/dist/renderer/terminal-graphics-trace.d.ts +53 -0
  78. package/dist/renderer/terminal-graphics.d.ts +147 -0
  79. package/dist/renderer-dom.cjs +364 -903
  80. package/dist/renderer-dom.js +4 -5
  81. package/dist/runtime/index.d.ts +2 -0
  82. package/dist/{runtime-rfcZCyJq.js → runtime-Byf8XXOT.js} +28 -15
  83. package/dist/runtime.cjs +427 -889
  84. package/dist/runtime.js +2 -2
  85. package/dist/terminal-graphics-Bbe83wSr.js +597 -0
  86. package/dist/{terminal-selection-DBinO6p5.js → terminal-selection-4W1SJj4c.js} +4 -1
  87. package/dist/{tlog-theme-CvLFNMwk.js → tlog-theme-Bul2Na3u.js} +1237 -12
  88. package/dist/{trace-CjzYeIxN.js → trace-Bh8WnoMo.js} +5 -0
  89. package/dist/vue/agent/create-png-terminal-graphic-renderer.d.ts +19 -0
  90. package/dist/vue/components/T3DViewport.d.ts +473 -0
  91. package/dist/vue/components/TAgentTerminalGraphic.d.ts +494 -0
  92. package/dist/vue/components/TCharts.d.ts +1121 -0
  93. package/dist/vue/components/TFeedback.d.ts +1 -1
  94. package/dist/vue/components/TFlex.d.ts +389 -0
  95. package/dist/vue/components/TForm.d.ts +4 -4
  96. package/dist/vue/components/TLogSearchBar.d.ts +3 -3
  97. package/dist/vue/components/TLogSearchPager.d.ts +2 -2
  98. package/dist/vue/components/TMarkdownText.d.ts +162 -4
  99. package/dist/vue/components/TMermaidText.d.ts +900 -0
  100. package/dist/vue/components/TVideo.d.ts +291 -0
  101. package/dist/vue/components/TVirtualList.d.ts +9 -0
  102. package/dist/vue/components/TVirtualMarkdown.d.ts +170 -9
  103. package/dist/vue/components/TVirtualRows.d.ts +9 -0
  104. package/dist/vue/components/TerminalProvider.d.ts +2 -0
  105. package/dist/vue/context.d.ts +24 -0
  106. package/dist/vue/index.d.ts +5 -0
  107. package/dist/vue/layout/flex.d.ts +67 -0
  108. package/dist/vue/markdown/ast.d.ts +5 -2
  109. package/dist/vue/markdown/document.d.ts +5 -0
  110. package/dist/vue/markdown/image-actions.d.ts +14 -0
  111. package/dist/vue/markdown/image.d.ts +11 -0
  112. package/dist/vue/markdown/link-actions.d.ts +14 -0
  113. package/dist/vue/markdown/math-actions.d.ts +14 -0
  114. package/dist/vue/markdown/math.d.ts +6 -0
  115. package/dist/vue/markdown/render.d.ts +28 -0
  116. package/dist/vue/markdown/types.d.ts +78 -0
  117. package/dist/vue/mermaid/beautiful-mermaid.d.ts +1436 -0
  118. package/dist/vue/render/render-manager.d.ts +7 -0
  119. package/dist/vue/video/types.d.ts +39 -0
  120. package/dist/vue.cjs +7215 -12430
  121. package/dist/vue.js +704 -38
  122. package/dist/wheel-scroll-DASkEZr-.js +106 -0
  123. package/dist/{hyperlink-Bn02UXJb.js → width-GqllnV8C.js} +166 -111
  124. package/package.json +141 -18
  125. package/dist/frame-perf-C6Xfg85O.js +0 -24
  126. package/dist/sgr-BmzxEjAO.js +0 -304
  127. /package/dist/{ansi-palette-CNXqFciC.js → ansi-palette-CH6jc2Z7.js} +0 -0
  128. /package/dist/{path-suggest-BNqcuE3-.js → path-suggest-Dndu4dTi.js} +0 -0
package/package.json CHANGED
@@ -1,23 +1,43 @@
1
1
  {
2
2
  "name": "@simon_he/vue-tui",
3
- "version": "1.0.1",
4
- "description": "Vue 3 terminal UI toolkit for browser DOM and CLI stdout renderers",
3
+ "version": "1.1.0",
4
+ "description": "Vue 3 terminal UI components and renderers for browser DOM, CLI stdout, logs, markdown transcripts, and agent consoles",
5
5
  "keywords": [
6
+ "agent-console",
7
+ "agent-ui",
8
+ "ai-agent",
6
9
  "ansi",
10
+ "ansi-renderer",
11
+ "browser-terminal",
12
+ "chat-ui",
7
13
  "cli",
14
+ "cli-ui",
8
15
  "component-library",
9
16
  "dom-renderer",
10
17
  "log-viewer",
11
18
  "markdown",
19
+ "markdown-renderer",
20
+ "markdown-transcript",
12
21
  "stdout",
22
+ "stdout-renderer",
23
+ "streaming-markdown",
13
24
  "terminal",
25
+ "terminal-components",
26
+ "terminal-dashboard",
27
+ "terminal-log-viewer",
28
+ "terminal-renderer",
14
29
  "terminal-ui",
15
30
  "tui",
31
+ "typescript",
16
32
  "virtual-list",
17
33
  "vue",
34
+ "vue-cli-ui",
35
+ "vue-component-library",
36
+ "vue-terminal",
37
+ "vue-tui",
18
38
  "vue3"
19
39
  ],
20
- "homepage": "https://github.com/Simon-He95/vue-tui#readme",
40
+ "homepage": "https://vue-tui.pages.dev/",
21
41
  "bugs": {
22
42
  "url": "https://github.com/Simon-He95/vue-tui/issues"
23
43
  },
@@ -41,6 +61,9 @@
41
61
  "core": [
42
62
  "./dist/core.d.ts"
43
63
  ],
64
+ "mermaid": [
65
+ "./dist/mermaid.d.ts"
66
+ ],
44
67
  "runtime": [
45
68
  "./dist/runtime.d.ts"
46
69
  ],
@@ -62,8 +85,17 @@
62
85
  "experimental": [
63
86
  "./dist/experimental.d.ts"
64
87
  ],
88
+ "experimental/video/node": [
89
+ "./dist/experimental/video/node.d.ts"
90
+ ],
91
+ "experimental/3d/bun": [
92
+ "./dist/experimental/3d/bun.d.ts"
93
+ ],
65
94
  "agent": [
66
95
  "./dist/agent.d.ts"
96
+ ],
97
+ "agent/mermaid": [
98
+ "./dist/agent/mermaid.d.ts"
67
99
  ]
68
100
  }
69
101
  },
@@ -158,6 +190,26 @@
158
190
  "default": "./dist/experimental.cjs"
159
191
  }
160
192
  },
193
+ "./experimental/video/node": {
194
+ "import": {
195
+ "types": "./dist/experimental/video/node.d.ts",
196
+ "default": "./dist/experimental/video/node.js"
197
+ },
198
+ "require": {
199
+ "types": "./dist/experimental/video/node.d.cts",
200
+ "default": "./dist/experimental/video/node.cjs"
201
+ }
202
+ },
203
+ "./experimental/3d/bun": {
204
+ "import": {
205
+ "types": "./dist/experimental/3d/bun.d.ts",
206
+ "default": "./dist/experimental/3d/bun.js"
207
+ },
208
+ "require": {
209
+ "types": "./dist/experimental/3d/bun.d.cts",
210
+ "default": "./dist/experimental/3d/bun.cjs"
211
+ }
212
+ },
161
213
  "./agent": {
162
214
  "import": {
163
215
  "types": "./dist/agent.d.ts",
@@ -168,40 +220,73 @@
168
220
  "default": "./dist/agent.cjs"
169
221
  }
170
222
  },
223
+ "./agent/mermaid": {
224
+ "import": {
225
+ "types": "./dist/agent/mermaid.d.ts",
226
+ "default": "./dist/agent/mermaid.js"
227
+ },
228
+ "require": {
229
+ "types": "./dist/agent/mermaid.d.cts",
230
+ "default": "./dist/agent/mermaid.cjs"
231
+ }
232
+ },
233
+ "./mermaid": {
234
+ "import": {
235
+ "types": "./dist/mermaid.d.ts",
236
+ "default": "./dist/mermaid.js"
237
+ },
238
+ "require": {
239
+ "types": "./dist/mermaid.d.cts",
240
+ "default": "./dist/mermaid.cjs"
241
+ }
242
+ },
171
243
  "./package.json": "./package.json"
172
244
  },
173
245
  "publishConfig": {
174
246
  "access": "public"
175
247
  },
176
248
  "dependencies": {
177
- "stream-markdown-parser": "1.0.0"
249
+ "katex": "^0.16.47",
250
+ "stream-markdown-parser": "1.0.7"
178
251
  },
179
252
  "devDependencies": {
180
- "@arethetypeswrong/core": "^0.18.2",
181
- "@playwright/test": "^1.60.0",
253
+ "@arethetypeswrong/core": "^0.18.3",
254
+ "@playwright/test": "^1.61.0",
182
255
  "@types/node": "^18.19.130",
183
- "@vitest/coverage-v8": "^4.1.7",
256
+ "@vitest/coverage-v8": "^4.1.9",
257
+ "beautiful-mermaid": "^1.1.3",
184
258
  "bumpp": "^8.2.1",
259
+ "bun-webgpu": "0.1.7",
185
260
  "esbuild": "^0.20.2",
186
261
  "happy-dom": "^17.6.3",
187
262
  "lint-staged": "^13.3.0",
188
263
  "oxfmt": "^0.47.0",
189
- "oxlint": "^1.67.0",
264
+ "oxlint": "^1.70.0",
190
265
  "picocolors": "^1.1.1",
191
266
  "pinia": "^3.0.4",
192
267
  "publint": "^0.3.21",
193
268
  "rimraf": "^3.0.2",
194
269
  "tsdown": "^0.9.9",
195
- "tsx": "^4.22.3",
270
+ "tsx": "^4.22.4",
196
271
  "typescript": "^5.9.3",
197
- "vite": "6.4.1",
272
+ "vite": "8.0.16",
198
273
  "vitepress": "^1.6.4",
199
- "vitest": "^4.1.7",
200
- "vue": "^3.5.34"
274
+ "vitest": "^4.1.9",
275
+ "vue": "^3.5.38"
201
276
  },
202
277
  "peerDependencies": {
278
+ "beautiful-mermaid": "^1.1.3",
279
+ "bun-webgpu": "^0.1.7",
203
280
  "vue": ">=3.3.0 <4"
204
281
  },
282
+ "peerDependenciesMeta": {
283
+ "beautiful-mermaid": {
284
+ "optional": true
285
+ },
286
+ "bun-webgpu": {
287
+ "optional": true
288
+ }
289
+ },
205
290
  "lint-staged": {
206
291
  "*": "oxfmt --write",
207
292
  "*.{vue,js,ts,jsx,tsx}": "oxlint --fix"
@@ -212,16 +297,25 @@
212
297
  "scripts": {
213
298
  "build": "pnpm run build:checked",
214
299
  "build:fast": "pnpm run build:raw",
215
- "build:raw": "rimraf dist && tsdown && node scripts/build-cjs.mjs && tsc -p tsconfig.build.json --emitDeclarationOnly && node scripts/fix-vue-dts-compat.mjs && node scripts/create-cjs-dts.mjs",
300
+ "build:raw": "rimraf dist && node scripts/prepare-build-metafiles.mjs && tsdown && node scripts/build-cjs.mjs && tsc -p tsconfig.build.json --emitDeclarationOnly && node scripts/fix-vue-dts-compat.mjs && node scripts/create-cjs-dts.mjs",
216
301
  "build:checked": "node scripts/run-build-checked.mjs && node scripts/check-build-warnings.mjs .tmp/build.log",
217
302
  "dev": "tsdown --watch",
218
303
  "build:examples": "pnpm run build && pnpm -C examples/basic build",
219
304
  "build:examples:terminal": "pnpm run build && pnpm -C examples/basic build:terminal",
305
+ "showcase": "pnpm -C examples/basic dev",
306
+ "showcase:terminal": "pnpm run build && pnpm -C examples/basic terminal",
220
307
  "example:basic:terminal-table:smoke": "pnpm run build && VT_SMOKE=1 pnpm -C examples/basic terminal:table",
221
308
  "example:agent-console": "pnpm run build && pnpm -C examples/agent-console dev",
222
309
  "example:agent-console:smoke": "pnpm run build && pnpm -C examples/agent-console smoke",
223
310
  "example:agent-console:terminal": "pnpm run build && pnpm -C examples/agent-console terminal",
224
311
  "example:agent-console:terminal:smoke": "pnpm run build && pnpm -C examples/agent-console terminal:smoke",
312
+ "profile:agent-console:cli": "tsx scripts/profile-agent-console-cli.ts",
313
+ "profile:agent-console:browser": "tsx scripts/profile-agent-console-browser.ts",
314
+ "profile:agent-console:summarize": "tsx scripts/summarize-agent-console-profile.ts",
315
+ "profile:agent-console": "tsx scripts/profile-agent-console.ts",
316
+ "profile:agent-console:smoke": "AGENT_CONSOLE_PROFILE_SMOKE=1 pnpm run profile:agent-console",
317
+ "profile:agent-console:abc": "tsx scripts/profile-agent-console-abc.ts",
318
+ "profile:agent-console:abc:smoke": "AGENT_CONSOLE_PROFILE_SMOKE=1 tsx scripts/profile-agent-console-abc.ts",
225
319
  "example:tlog-view-lab": "pnpm run build && VT_SMOKE=1 tsx examples/tlog-view-lab.ts",
226
320
  "run:basic:terminal": "pnpm run build && pnpm -C examples/basic terminal",
227
321
  "run:agent-console:terminal": "pnpm run build && pnpm -C examples/agent-console terminal",
@@ -229,7 +323,16 @@
229
323
  "run:tlog-view-lab": "pnpm run build && VT_INTERACTIVE=1 tsx examples/tlog-view-lab.ts",
230
324
  "run:component:terminal": "tsx scripts/run-component-terminal.ts",
231
325
  "run:component:terminal:list": "tsx scripts/run-component-terminal.ts --list",
326
+ "run:github-contribution-card": "pnpm -C apps/simon-terminal-card dev",
327
+ "run:logo:terminal": "tsx examples/vue-tui-logo-terminal.ts",
328
+ "run:3d:terminal": "bun examples/t3d-terminal-badge.ts",
329
+ "example:3d:smoke": "VT_SMOKE=1 bun examples/t3d-terminal-badge.ts",
330
+ "test:3d:bun": "bun scripts/smoke-bun-3d.ts",
331
+ "run:image-showcase:terminal": "tsx examples/image-showcase.ts",
332
+ "run:katex-showcase:terminal": "tsx examples/katex-showcase.ts",
333
+ "trace:terminal-resize": "node scripts/trace-terminal-resize.mjs",
232
334
  "test:component-terminal:smoke": "VT_SMOKE=1 tsx scripts/run-component-terminal.ts --all",
335
+ "e2e:component-terminal-charts": "tsx scripts/run-component-terminal.ts --capture-charts",
233
336
  "docs:gen": "tsx scripts/generate-component-api-docs.ts",
234
337
  "docs:check-public-descriptions": "tsx scripts/check-public-api-docs.ts",
235
338
  "docs:dev": "pnpm run docs:gen && vitepress dev docs",
@@ -243,6 +346,10 @@
243
346
  "lint:fix": "oxlint . --fix",
244
347
  "check:hidden-unicode": "node scripts/check-hidden-unicode.cjs",
245
348
  "check:tracked-build-output": "node scripts/check-tracked-build-output.cjs",
349
+ "check:production-instrumentation-strip": "node scripts/check-production-instrumentation-strip.mjs && node scripts/check-production-instrumentation-negative-control.mjs",
350
+ "check:consumer-bundle": "tsx scripts/check-consumer-bundle.ts",
351
+ "validate:consumer-bundle-abc": "tsx scripts/validate-consumer-bundle-abc.ts",
352
+ "validate:built-dist-abc": "tsx scripts/validate-built-dist-abc.ts",
246
353
  "release:workflow-only": "node -e \"console.error('Use GitHub Release workflow'); process.exit(1)\"",
247
354
  "release": "pnpm run release:workflow-only",
248
355
  "release:verify": "pnpm run release:dry-run",
@@ -250,16 +357,16 @@
250
357
  "publish:npm:patch": "pnpm exec bumpp patch --yes --no-commit --no-tag --no-push && (npm whoami >/dev/null 2>&1 || npm login) && VUE_TUI_ALLOW_DIRECT_PUBLISH=1 pnpm publish --access public --no-git-checks",
251
358
  "release:local": "pnpm run release:dry-run && VUE_TUI_ALLOW_DIRECT_PUBLISH=1 npm publish .release/*.tgz --access public --tag rc",
252
359
  "release:local:dry-run": "pnpm run release:dry-run && VUE_TUI_ALLOW_DIRECT_PUBLISH=1 npm publish .release/*.tgz --access public --dry-run --tag rc",
253
- "release:bench": "pnpm run bench:baseline",
254
- "release:check": "pnpm run check:hidden-unicode && pnpm run format:check && pnpm run lint && pnpm run typecheck && pnpm run test && pnpm run test:coverage:core && pnpm run build:checked && pnpm run test:package-exports:dist && pnpm run check:dist-dts && pnpm run test:types:dist && pnpm run test:browser-vite-import:dist && pnpm run docs:build && pnpm run api:diff && git diff --exit-code -- docs/generated",
360
+ "release:bench": "pnpm run bench:baseline && pnpm run bench:perf-baseline:smoke && FRAMES=2000 pnpm run bench:stdout-column-diff",
361
+ "release:check": "pnpm run check:hidden-unicode && pnpm run format:check && pnpm run lint && pnpm run typecheck && pnpm run test && pnpm run test:coverage:core && pnpm run build:checked && pnpm run check:production-instrumentation-strip && pnpm run check:consumer-bundle && pnpm run test:package-exports:dist && pnpm run check:dist-dts && pnpm run test:types:dist && pnpm run test:browser-vite-import:dist && pnpm run docs:build && pnpm run api:diff && git diff --exit-code -- docs/generated",
255
362
  "release:dry-run": "pnpm run release:check && pnpm run release:bench && pnpm run release:smoke && pnpm run release:pack-smoke",
256
363
  "release:pack": "rimraf .release && pnpm run build:checked && pnpm pack --pack-destination .release",
257
364
  "release:pack-smoke": "pnpm run release:pack && pnpm run test:package-contract:existing && pnpm run release:pack-smoke:existing",
258
- "release:pack-smoke:existing": "node scripts/smoke-packed-package.mjs .release/*.tgz && node scripts/smoke-packed-ssr-import.mjs .release/*.tgz",
365
+ "release:pack-smoke:existing": "node scripts/smoke-packed-package.mjs .release/*.tgz && node scripts/smoke-packed-ssr-import.mjs .release/*.tgz && node scripts/smoke-packed-no-mermaid-peer.mjs .release/*.tgz",
259
366
  "release:smoke": "pnpm run example:tlog-view-lab && pnpm run example:agent-console:smoke && pnpm run example:agent-console:terminal:smoke && pnpm run example:basic:terminal-table:smoke",
260
367
  "start": "esno src/index.ts",
261
368
  "test": "vitest run",
262
- "test:coverage:core": "vitest run test/unicode-width.test.ts test/hyperlink-sanitizer.test.ts test/dom-renderer.test.ts test/render-manager.test.ts test/terminal-selection.test.ts test/terminal-scroll-operations.test.ts test/plane-compositor.test.ts --coverage.enabled true --coverage.reporter text-summary",
369
+ "test:coverage:core": "vitest run test/unicode-width.test.ts test/core/buffer/unicode-17-eaw.test.ts test/hyperlink-sanitizer.test.ts test/dom-renderer.test.ts test/render-manager.test.ts test/terminal-selection.test.ts test/terminal-scroll-operations.test.ts test/plane-compositor.test.ts --coverage.enabled true --coverage.reporter text-summary",
263
370
  "test:browser-packed-vite-import": "pnpm run test:browser-vite-import:package",
264
371
  "test:browser-vite-import": "pnpm run build:checked && pnpm run test:browser-vite-import:dist",
265
372
  "test:browser-vite-import:dist": "pnpm exec vite build --config test/fixtures/browser-vite-import/vite.config.ts && node scripts/check-browser-vite-import.mjs",
@@ -276,12 +383,28 @@
276
383
  "typecheck": "tsc -p tsconfig.runtime.json --noEmit && tsc -p tsconfig.json --noEmit",
277
384
  "e2e": "playwright test --project=smoke",
278
385
  "e2e:smoke": "playwright test --project=smoke",
386
+ "e2e:charts": "tsx scripts/e2e-charts.ts",
387
+ "e2e:terminal-resize": "tsx scripts/e2e-terminal-resize.ts",
279
388
  "e2e:browser-regressions": "playwright test --project=browser-regressions-chromium --project=browser-regressions-firefox --project=browser-regressions-webkit",
280
389
  "bench:vfor": "tsx scripts/bench-vfor.ts",
281
390
  "bench:dom-renderer": "tsx scripts/bench-dom-renderer.ts",
282
391
  "bench:baseline": "tsx scripts/check-bench-baselines.ts",
283
392
  "bench:baseline:timing": "BENCH_TIMING=1 tsx scripts/check-bench-baselines.ts",
284
393
  "bench:phase2": "tsx scripts/bench-phase2.ts",
285
- "bench:scroll-mailbox": "tsx scripts/bench-scroll-mailbox.ts"
394
+ "bench:scroll-mailbox": "tsx scripts/bench-scroll-mailbox.ts",
395
+ "bench:stdout-column-diff": "tsx scripts/bench-stdout-column-diff.ts",
396
+ "unicode:eaw:generate": "tsx scripts/generate-eaw-ranges.ts",
397
+ "unicode:eaw:check": "tsx scripts/generate-eaw-ranges.ts && git diff --exit-code -- src/core/buffer/eaw-ranges-unicode-17.ts",
398
+ "bench:perf-baseline": "tsx scripts/bench-perf-baseline.ts",
399
+ "bench:perf-baseline:json": "tsx scripts/bench-perf-baseline.ts --output .tmp/perf-baseline.json",
400
+ "bench:perf-baseline:smoke": "BENCH_SMOKE=1 tsx scripts/bench-perf-baseline.ts --output .tmp/perf-baseline-smoke.json",
401
+ "bench:profiler": "tsx scripts/bench-profiler-complete.ts",
402
+ "bench:profiler:gc": "node --expose-gc --import=tsx scripts/bench-profiler-complete.ts",
403
+ "bench:profiler:legacy": "tsx scripts/bench-profiler-legacy.ts",
404
+ "bench:overhead": "tsx scripts/bench-instrumentation-overhead.ts",
405
+ "bench:bundle-size": "tsx scripts/bench-bundle-size.ts",
406
+ "validate:agent-console:abc": "tsx scripts/validate-agent-console-abc.ts",
407
+ "profile:agent-console:record": "tsx scripts/record-agent-console-profile.ts",
408
+ "check:agent-console-profile-baseline": "tsx scripts/check-agent-console-profile-baseline.ts"
286
409
  }
287
410
  }
@@ -1,24 +0,0 @@
1
- //#region src/observability/frame-perf.ts
2
- const FRAME_PERF_REASON_PRIORITY = {
3
- unknown: 0,
4
- manual: 1,
5
- data: 2,
6
- selection: 3,
7
- stream: 4,
8
- resize: 5,
9
- scroll: 6,
10
- input: 7
11
- };
12
- function framePerfNow() {
13
- const p = globalThis.performance;
14
- if (p && typeof p.now === "function") return p.now();
15
- return Date.now();
16
- }
17
- function mergeFramePerfReason(prev, next) {
18
- const a = prev ?? "unknown";
19
- const b = next ?? "unknown";
20
- return FRAME_PERF_REASON_PRIORITY[b] > FRAME_PERF_REASON_PRIORITY[a] ? b : a;
21
- }
22
-
23
- //#endregion
24
- export { framePerfNow, mergeFramePerfReason };
@@ -1,304 +0,0 @@
1
- //#region src/core/ansi/sgr.ts
2
- const ESC = "\x1B";
3
- function ansi16ToColorName(code) {
4
- switch (code) {
5
- case 30: return "black";
6
- case 31: return "red";
7
- case 32: return "green";
8
- case 33: return "yellow";
9
- case 34: return "blue";
10
- case 35: return "magenta";
11
- case 36: return "cyan";
12
- case 37: return "white";
13
- case 90: return "blackBright";
14
- case 91: return "redBright";
15
- case 92: return "greenBright";
16
- case 93: return "yellowBright";
17
- case 94: return "blueBright";
18
- case 95: return "magentaBright";
19
- case 96: return "cyanBright";
20
- case 97: return "whiteBright";
21
- default: return void 0;
22
- }
23
- }
24
- function ansi16BgToColorName(code) {
25
- const fgCode = code >= 40 && code <= 47 ? code - 10 : code >= 100 && code <= 107 ? code - 10 : null;
26
- if (fgCode == null) return void 0;
27
- return ansi16ToColorName(fgCode);
28
- }
29
- const ANSI16_RGB = {
30
- black: {
31
- r: 0,
32
- g: 0,
33
- b: 0
34
- },
35
- red: {
36
- r: 201,
37
- g: 27,
38
- b: 0
39
- },
40
- green: {
41
- r: 0,
42
- g: 194,
43
- b: 0
44
- },
45
- yellow: {
46
- r: 199,
47
- g: 196,
48
- b: 0
49
- },
50
- blue: {
51
- r: 2,
52
- g: 37,
53
- b: 199
54
- },
55
- magenta: {
56
- r: 201,
57
- g: 48,
58
- b: 199
59
- },
60
- cyan: {
61
- r: 0,
62
- g: 197,
63
- b: 199
64
- },
65
- white: {
66
- r: 199,
67
- g: 199,
68
- b: 199
69
- },
70
- blackBright: {
71
- r: 104,
72
- g: 104,
73
- b: 104
74
- },
75
- redBright: {
76
- r: 255,
77
- g: 110,
78
- b: 103
79
- },
80
- greenBright: {
81
- r: 95,
82
- g: 250,
83
- b: 104
84
- },
85
- yellowBright: {
86
- r: 255,
87
- g: 252,
88
- b: 103
89
- },
90
- blueBright: {
91
- r: 104,
92
- g: 113,
93
- b: 255
94
- },
95
- magentaBright: {
96
- r: 255,
97
- g: 118,
98
- b: 255
99
- },
100
- cyanBright: {
101
- r: 95,
102
- g: 253,
103
- b: 255
104
- },
105
- whiteBright: {
106
- r: 255,
107
- g: 255,
108
- b: 255
109
- }
110
- };
111
- function nearestAnsi16(r, g, b) {
112
- let best = "white";
113
- let bestDist = Number.POSITIVE_INFINITY;
114
- for (const [name, rgb] of Object.entries(ANSI16_RGB)) {
115
- const dr = r - rgb.r;
116
- const dg = g - rgb.g;
117
- const db = b - rgb.b;
118
- const d = dr * dr + dg * dg + db * db;
119
- if (d < bestDist) {
120
- bestDist = d;
121
- best = name;
122
- }
123
- }
124
- return best;
125
- }
126
- function ansi256ToRgb(index) {
127
- const n = Math.max(0, Math.min(255, Math.trunc(index)));
128
- if (n < 16) {
129
- const map = [
130
- "black",
131
- "red",
132
- "green",
133
- "yellow",
134
- "blue",
135
- "magenta",
136
- "cyan",
137
- "white",
138
- "blackBright",
139
- "redBright",
140
- "greenBright",
141
- "yellowBright",
142
- "blueBright",
143
- "magentaBright",
144
- "cyanBright",
145
- "whiteBright"
146
- ];
147
- const name = map[n] ?? "white";
148
- return ANSI16_RGB[name];
149
- }
150
- if (n >= 232) {
151
- const c = 8 + (n - 232) * 10;
152
- return {
153
- r: c,
154
- g: c,
155
- b: c
156
- };
157
- }
158
- const i = n - 16;
159
- const rr = Math.floor(i / 36);
160
- const gg = Math.floor(i % 36 / 6);
161
- const bb = i % 6;
162
- const toComponent = (v) => v === 0 ? 0 : 55 + v * 40;
163
- return {
164
- r: toComponent(rr),
165
- g: toComponent(gg),
166
- b: toComponent(bb)
167
- };
168
- }
169
- function applyAnsiSgrStyle(current, codes) {
170
- let next = { ...current };
171
- for (let i = 0; i < codes.length; i++) {
172
- const code = codes[i];
173
- if (code === 0) {
174
- next = {};
175
- continue;
176
- }
177
- if (code === 1) next = {
178
- ...next,
179
- bold: true
180
- };
181
- else if (code === 2) next = {
182
- ...next,
183
- dim: true
184
- };
185
- else if (code === 3) next = {
186
- ...next,
187
- italic: true
188
- };
189
- else if (code === 4) next = {
190
- ...next,
191
- underline: true
192
- };
193
- else if (code === 7) next = {
194
- ...next,
195
- inverse: true
196
- };
197
- else if (code === 22) next = {
198
- ...next,
199
- bold: false,
200
- dim: false
201
- };
202
- else if (code === 23) next = {
203
- ...next,
204
- italic: false
205
- };
206
- else if (code === 24) next = {
207
- ...next,
208
- underline: false
209
- };
210
- else if (code === 27) next = {
211
- ...next,
212
- inverse: false
213
- };
214
- else if (code === 39) next = {
215
- ...next,
216
- fg: void 0
217
- };
218
- else if (code === 49) next = {
219
- ...next,
220
- bg: void 0
221
- };
222
- else if (code >= 30 && code <= 37 || code >= 90 && code <= 97) {
223
- const fg = ansi16ToColorName(code);
224
- next = {
225
- ...next,
226
- fg: fg ?? next.fg
227
- };
228
- } else if (code >= 40 && code <= 47 || code >= 100 && code <= 107) {
229
- const bg = ansi16BgToColorName(code);
230
- next = {
231
- ...next,
232
- bg: bg ?? next.bg
233
- };
234
- } else if (code === 38 || code === 48) {
235
- const mode = codes[i + 1];
236
- if (mode === 5) {
237
- const idx = codes[i + 2];
238
- if (idx != null) {
239
- const { r, g, b } = ansi256ToRgb(idx);
240
- const name = nearestAnsi16(r, g, b);
241
- next = code === 38 ? {
242
- ...next,
243
- fg: name
244
- } : {
245
- ...next,
246
- bg: name
247
- };
248
- }
249
- i += 2;
250
- } else if (mode === 2) {
251
- const r = codes[i + 2];
252
- const g = codes[i + 3];
253
- const b = codes[i + 4];
254
- if (r != null && g != null && b != null) {
255
- const name = nearestAnsi16(r, g, b);
256
- next = code === 38 ? {
257
- ...next,
258
- fg: name
259
- } : {
260
- ...next,
261
- bg: name
262
- };
263
- }
264
- i += 4;
265
- }
266
- }
267
- }
268
- return next;
269
- }
270
- function parseAnsiSgr(input, baseStyle = {}) {
271
- const segments = [];
272
- let style = { ...baseStyle };
273
- let lastIndex = 0;
274
- for (let i = 0; i < input.length; i++) {
275
- if (input[i] !== ESC || input[i + 1] !== "[") continue;
276
- let j = i + 2;
277
- while (j < input.length) {
278
- const c = input.charCodeAt(j);
279
- if (c >= 48 && c <= 57 || c === 59) {
280
- j++;
281
- continue;
282
- }
283
- break;
284
- }
285
- if (j >= input.length || input[j] !== "m") continue;
286
- if (i > lastIndex) segments.push({
287
- text: input.slice(lastIndex, i),
288
- style
289
- });
290
- const body = input.slice(i + 2, j);
291
- const codes = body.split(";").filter(Boolean).map((n) => Number.parseInt(n, 10)).filter((n) => Number.isFinite(n));
292
- style = applyAnsiSgrStyle(style, codes.length ? codes : [0]);
293
- lastIndex = j + 1;
294
- i = j;
295
- }
296
- if (lastIndex < input.length) segments.push({
297
- text: input.slice(lastIndex),
298
- style
299
- });
300
- return segments;
301
- }
302
-
303
- //#endregion
304
- export { applyAnsiSgrStyle, parseAnsiSgr };