docs(B01): return YC-001 acceptance findings with Windows evidence

This commit is contained in:
xiaohan.yuan committed 2026-10-21 12:25:42 +08:00
1 parent b5eb6d8875
commit eaf0ed293a
15 files changed
+1813

No files matched your search

+108
View File
@@ -0,0 +1,108 @@
# B01 验收 01:YC-001 第一阶段
日期:2026-10-21(Asia/Shanghai)。验收端独立复测;**结论:YC-001 待修复,B01 未关闭**。本轮没有修改业务源码、测试脚本、依赖或构建配置;仅提交验收文档与证据。
## 1. 受测版本与范围
- 交付记录:[B01-交付-01](B01-交付-01.md);接收时 `gitea/master` 为 `b5eb6d8875d4f7367bde59dd367a8c02e28cce2e`。
- **固定受测代码 SHA:`51531dcae8d8ade85db9e203bc8c0f712805b2ae`**。独立 managed worktree 检出该提交,起止 `git status --short` 均为空,没有使用开发机 node_modules。
- 验证 `51531dc` 到接收时 `gitea/master` 的 `src/`、`scripts/`、package.json、package-lock.json 没有差异;随后文档与 merge 提交没有包含另一版待测产品代码。
- 本轮仅验 YC-001,即 A01、A03、A04。YC-002/003/004 没有交付,不将其缺失列为本轮新增回归,也不将它们记为已通过。
- 环境:Windows 11 IoT 企业版 LTSC 64 位,10.0.26100;Node 24.21.0、npm 11.19.0、React 19.3.0、jsdom 30.1.3,Electron 37.10.3。
- 独立执行 `npm ci --legacy-peer-deps --no-audit --no-fund`。当前 npm 提示 Electron postinstall 未自动执行,随后显式运行 `node node_modules/electron/install.js`,未修改锁文件。
- DOM 依赖单独安装到 `.tmp/b01-dom`;构建、回归、数据与探针均在隔离检出,未请求真实供应商模型或 SDK query。原用户 dev 保持原样,未用其窗口代替指定 SHA 验收。
## 2. 逐项验收
| 标准 | 结论 | 证据与边界 |
| --- | --- | --- |
| AC1.1 原生名称/别名与不可变性 | 通过 | `test:alignment` 中身份、普通工具与历史回归;真实 Windows 使用原生 `AskUserQuestion`,专用卡出现,无原始答案泄漏 |
| AC1.2 回答链与去重 | 通过(组件/历史与本地窗口) | 原生名称待答→已答→完成→展开→重开 DOM 回归通过;Windows 持久化消息中仅一份问答;无真实模型请求,不外推真实 SDK 执行 |
| AC1.3 局部状态保持 | **失败,见 F01** | 问答、普通工具、思考与局部摘要的现有嵌套回归通过;独立真实 MessageBubble 探针仍复现原生 plan/task 在终态校正后重开 |
| AC1.4 标题/灰卡/字号 | 通过(已确认结构与几何);原版像素未验证 | Windows 标题在壳外,14px/400/24.5px;内容 16px 圆角、12px 16px padding、300px 上限;浅深/窄窗与长内容实测。未取得新的同状态原版对照,不能宣称全像素 1:1 |
| AC1.5 顺序/默认与隐藏语义 | 指定回归通过,完整辅助技术未验证 | 既有顺序/正文锚点、键盘、inert/aria-hidden 与无复制树回归通过;真实窗口问答外层收起重开保持。F01 涉及的原生 part 稳定性必须补测;未运行真实屏幕阅读器 |
因此 A01 的已测分发问题、A04 的已测内容壳差异获得独立 Windows 证据;**A03 未关闭**,不能将 YC-001 或 B01 总体记为已完成。历史报告无需重写成“全部仍失败”,本记录保留已通过部分与具体失败。
## 3. F01 / P2:原生 Plan、Task 在 done 正文校正后丢失收起选择
对应 A03/AC1.3。**这是本轮未覆盖的既有问题,不是新增回归**:受测 `51531dc` 与基线 `37ddb2c` 均复现。
实际路径是 `applyAssistantEvent` 生成的真实消息,再由真实 `MessageBubble` 渲染;不是手写两个独立 disclosure,也没有启动 SDK/服务:
```text
流式事件生成 parts:
text("Draft one") → reasoning(id=r) → text("Draft two")
→ plan(plan.id=p) → task(task.id=x)
两张卡默认展开:true / true
用户分别收起:false / false
接收 done(content="Corrected final prose", tools=[], turnDurationMs=1000)
reducer 校正为:text → reasoning → plan → task
实际两张卡:true / true
预期保留用户选择:false / false
```
源码定位(均针对 `51531dc`):
- `src/renderer/src/workbuddy/conversation/CompletedFold.tsx:149`:`partDisclosureId` 只识别顶层 `part.id`、`toolId`,原生 plan/task 使用数组下标,没有使用 `part.plan.id`/`part.task.id`。
- `src/shared/message-parts.ts:74`:正常 `done` 全文校正会合并多个 text part,改变后续富内容的数组位置。
- `src/renderer/src/components/MessageBubble.tsx:182`、`:186`:原生 plan/task 是实际支持的渲染入口;缓存 scope 从 plan/3、task/4 变为 plan/2、task/3,保存的选择失配。
- `scripts/completed-fold-nested-regression.tsx:17`、`:21`:交付新增测试把 Plan/Task 构造成有 `toolId` 的 tool part,未覆盖真实 typed part。
开发端下一轮要求:为所有有稳定业务 ID 的原生 part 使用稳定身份,在终态校正、插入/重排和外层切换后保持用户选择;保留消息隔离和无 ID 旧历史 fallback。补真实 reducer→MessageBubble 的 plan/task 回归,不能只改测试 fixture 为工具节点或移除断言。
### 可复核反例
源码与结果:[typed-part-repro.mjs](evidence/B01-review-01/typed-part-repro.mjs)、[受测 JSON](evidence/B01-review-01/typed-part-repro-51531dc.json)、[基线 JSON](evidence/B01-review-01/typed-part-repro-baseline.json)。
在固定 `51531dc` 检出完成依赖安装,将本次 Git 证据中的 `typed-part-repro.mjs` 复制到该检出的 `.tmp/b01-readonly-review/`,再执行:
```powershell
npm install --prefix .tmp/b01-dom --ignore-scripts --no-audit --no-fund jsdom@30.1.3
node .tmp/b01-readonly-review/typed-part-repro.mjs --assert
node .tmp/b01-readonly-review/typed-part-repro.mjs --baseline --assert
```
两条都退出 `1`,因为 `retainsUserChoices=false`,不是探针启动失败。基线模式用 `git show 37ddb2c` 替换该渲染路径全部 7 个改动过的 React 模块,并验证全部实际加载;不是在新产品模块上假标基线。主线程已亲自重跑两条,结果与独立子 agent 一致。
## 4. 构建与回归结果
| 命令 | 实际退出码 | 说明 |
| --- | --- | --- |
| `npm run build` | 0 | 独立 Windows 安装,包含两个 tsconfig 类型检查与 main/preload/renderer 构建 |
| 设置 `YCODE_TEST_DOM_MODULE` 后 `npm run test:alignment` | 0 | 包含新增 30 项 question-identity、真实嵌套回归,以及原有 28 任务/24 问答/14 授权 DOM;宿主/SDK 部分仍为 mock |
| `npm run test:conversation` | 0 | SSR、composer、footer、completed-fold |
| `npm run test:workbuddy-import` | 0 | 历史导入回归 |
| `npm run test:artifacts` | 0 | artifact/特殊块回归 |
| 独立 Windows native probe | 0 | 实际 main/preload/renderer、隔离持久消息、无模型,4 个窗口场景,0 renderer errors |
| F01 独立反例 `--assert` | **1** | 发现未修复问题;原基线模式同为 1 |
| `npm run check:tokens` | **1** | 与修复前 f2b7c07 完全相同的 6 项失败集合,无本批新增门禁项;没有刷新 baseline |
| `npm run test:fold-summary` | **1** | 干净 Windows 检出的既存 CRLF 摘要可复现性问题;本次没有改生成物或 manifest,见下文 |
证据:[构建日志](evidence/B01-review-01/build.txt)、[alignment 日志](evidence/B01-review-01/alignment.txt)、[其他回归结果](evidence/B01-review-01/regression-results.json)、[token 前后对比](evidence/B01-review-01/token-comparison.json)。
fold-summary:生成模块有 717 个 CRLF,raw SHA 为 `a2239b45360fcaf5c986fbe2180217856029563f034db11328860dc5e01491ae`,归一 LF 后为 `645ea0848880aa7e89319af8e11440bdddd8c10783944736fd4f29b70e923a10`,与 manifest 一致;对应产品文件从 `37ddb2c` 到 `51531dc` 无改动。[哈希记录](evidence/B01-review-01/fold-hash.json)。这是既存 Windows 检出问题,未算作本轮新增回归,仍不能写成该命令通过;后续按 B01 共通要求处理,不删除摘要断言。
## 5. Windows 真实窗口证据
以固定 SHA 的 `out/main/index.mjs` 启动实际 Electron main/preload/renderer,使用全新临时 userData、home、workspace 和本地持久化消息。仅注入测试消息;没有模型、SDK query、真实工具执行或原版访问。
- 浅色与深色 1336×902;窄窗 820×902。
- 通过应用的 `ycode:theme`/storage 同步通路切换主题,等待 React 与样式状态生效,未仅修改根节点造成混合主题后下结论。
- 原生 `AskUserQuestion`:只有 1 张问答卡,RAW sentinel 不出现;外层收起重开后,内层问答 `aria-expanded=true` 保持。
- 浅色壳背景 `rgb(242, 242, 242)`;问题/答案实际 14px、400、24.5px;标题透明且不在灰壳内。
- 长问答内容 `scrollHeight=5688`、`clientHeight=300`,内部滚动;窄窗无页面横向溢出。
- 已人工查看下列四张截图;它们证明 YCode 修复后的同状态展示,不是原版逐像素通过。
证据:[native-probe.cjs](evidence/B01-review-01/native-probe.cjs)、[计算样式与结果](evidence/B01-review-01/native-report.json)、[浅色](evidence/B01-review-01/question-light.png)、[深色](evidence/B01-review-01/question-dark.png)、[窄窗](evidence/B01-review-01/question-narrow.png)、[长内容](evidence/B01-review-01/question-long.png)。
重跑 native probe 时,在固定 SHA 检出先独立构建,将证据脚本复制进 `.tmp/b01-acceptance/`,执行 `node .tmp/b01-acceptance/native-probe.cjs`。脚本自己创建隔离数据目录并输出结果位置,不启动用户正式数据或复用已有 dev。
## 6. 回传给开发端
1. **YC-001 退回修复 F01**,下一轮创建 `B01-交付-02.md`,记录新完整代码 SHA、原生 plan/task 回归及已通过问答/折叠路径的回归结果。
2. A01 分发、A04 内容壳与已有正常嵌套路径不要求推倒重做;只补未覆盖稳定身份及必要回归。原版像素/辅助技术边界继续明确。
3. YC-002、YC-003、YC-004 保持原状态。本次只交付 YC-001 第一阶段,验收端不擅自要求本轮补交其他任务;后续是否接续由开发端与用户安排。
4. 不将开发端注明撤回的骨架补丁自动恢复;B01 中后续加载需求的具体实施须尊重该决定,再明确范围。
**本验收记录推送成功后,推送窗口交回开发端。** 验收端保留文档/证据职责,不在这里代修产品代码。验收文档提交 SHA 与上述受测代码 SHA 分开报告。
@@ -0,0 +1,23 @@
> ycode@0.0.7 test:alignment
> node scripts/run-alignment-regression.mjs
PASS model alignment: fresh/legacy migration, new/edit/default/delete/reload, valid selection (offline host fixtures)
PASS model settings: deferred owner switch, rename mapping, addition selection, empty deletion, immutable history
PASS session factory: first-send preference, mode preservation, invalid permission rejection (isolated ports)
{"historyMessages":10000,"bytes":747781,"parseMs":4.300299999999993,"storeHydrationMs":0.16839999999999122,"note":"Node parsing/store benchmark only, not browser rendering or Windows IPC performance"}
session-composer-alignment: loading/cache/retry/races/model/permissions/modes/SSR passed
alignment-conversation: local groups, original expanded order, question projection and truthful status passed
A01 native MessageBubble identity aliases, immutable inputs and ordinary raw output passed
A01 imported native card, linked dedup and unknown-position compatibility passed
question-answer-shell: structural and recovered CSS contracts passed
question-answer-shell: DOM hierarchy, controls linkage, click, Enter, Space and inert contracts passed
Runtime progress, session-grant scope and approval lifecycle regressions passed
Permission intercept static rendering passed; interactive keyboard/focus remains UI acceptance
Claude host approval policy unit checks passed (no SDK process/application/matching verification)
Mock SDK replay lifecycle passed: fail closed, retry, session isolation, independent mode guard
task popconfirm DOM regression: 28 checks passed (jsdom, not pixel validation)
question-interaction: 24 DOM behavioral checks passed
question-identity: 30 A01 DOM checks passed (not Electron/pixel/SDK acceptance)
completed-fold-nested: real question/tool/thinking/local-summary remount, event, keyboard and identity contracts passed
Permission intercept DOM: 14 checks passed (not pixel/SDK verification)
@@ -0,0 +1,660 @@
> ycode@0.0.7 build
> npm run typecheck && electron-vite build
> ycode@0.0.7 typecheck
> tsc --noEmit -p tsconfig.node.json && tsc --noEmit -p tsconfig.web.json
vite v8.3.4 building ssr environment for production...
transforming...
✓ 444 modules transformed.
rendering chunks...
out/main/index.mjs 1,596.10 kB
✓ built in 354ms
vite v8.3.4 building ssr environment for production...
transforming...
✓ 2 modules transformed.
rendering chunks...
out/preload/index.cjs 15.89 kB
✓ built in 25ms
vite v8.3.4 building client environment for production...
transforming...
✓ 3039 modules transformed.
rendering chunks...
out/renderer/settings.html 1.57 kB
out/renderer/index.html 1.75 kB
out/renderer/assets/KaTeX_Size3-Regular-CTq5MqoE.woff 4.42 kB
out/renderer/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 4.92 kB
out/renderer/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 5.20 kB
out/renderer/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 5.46 kB
out/renderer/assets/KaTeX_Size4-Regular-BF-4gkZK.woff 5.98 kB
out/renderer/assets/KaTeX_Size2-Regular-oD1tc_U0.woff 6.18 kB
out/renderer/assets/KaTeX_Size1-Regular-C195tn64.woff 6.49 kB
out/renderer/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 6.90 kB
out/renderer/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 6.91 kB
out/renderer/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf 7.58 kB
out/renderer/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff 7.65 kB
out/renderer/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff 7.71 kB
out/renderer/assets/archify-owner-avatar-BdE-HOjX.jpg 9.46 kB
out/renderer/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 9.64 kB
out/renderer/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 10.34 kB
out/renderer/assets/KaTeX_Size4-Regular-DWFBv043.ttf 10.36 kB
out/renderer/assets/KaTeX_Script-Regular-D5yQViql.woff 10.58 kB
out/renderer/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 11.31 kB
out/renderer/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 11.34 kB
out/renderer/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf 11.50 kB
out/renderer/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 12.02 kB
out/renderer/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 12.21 kB
out/renderer/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf 12.22 kB
out/renderer/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff 12.31 kB
out/renderer/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf 12.34 kB
out/renderer/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf 12.36 kB
out/renderer/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff 13.20 kB
out/renderer/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff 13.29 kB
out/renderer/assets/workbuddy-buddy-thumbnail-2713ed5b-CUhW0EYr.png 13.42 kB
out/renderer/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 13.56 kB
out/renderer/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff 14.11 kB
out/renderer/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff 14.40 kB
out/renderer/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff 16.02 kB
out/renderer/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 16.40 kB
out/renderer/assets/KaTeX_Math-Italic-t53AETM-.woff2 16.44 kB
out/renderer/assets/KaTeX_Script-Regular-C5JkGWo-.ttf 16.64 kB
out/renderer/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 16.78 kB
out/renderer/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 16.98 kB
out/renderer/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff 18.66 kB
out/renderer/assets/KaTeX_Math-Italic-DA0__PXp.woff 18.74 kB
out/renderer/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff 19.41 kB
out/renderer/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf 19.43 kB
out/renderer/assets/KaTeX_Fraktur-Regular-CB_wures.ttf 19.57 kB
out/renderer/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf 19.58 kB
out/renderer/assets/KaTeX_Main-Italic-BMLOBm91.woff 19.67 kB
out/renderer/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf 22.36 kB
out/renderer/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf 24.50 kB
out/renderer/assets/KaTeX_Main-Bold-Cx986IdX.woff2 25.32 kB
out/renderer/assets/KaTeX_Main-Regular-B22Nviop.woff2 26.27 kB
out/renderer/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf 27.55 kB
out/renderer/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 28.07 kB
out/renderer/assets/KaTeX_Main-Bold-Jm3AIy58.woff 29.91 kB
out/renderer/assets/KaTeX_Main-Regular-Dr94JaBh.woff 30.77 kB
out/renderer/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf 31.19 kB
out/renderer/assets/KaTeX_Math-Italic-flOr_0UB.ttf 31.30 kB
out/renderer/assets/design-case-3-DaIvrslH.png 32.76 kB
out/renderer/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf 32.96 kB
out/renderer/assets/KaTeX_AMS-Regular-DMm9YOAa.woff 33.51 kB
out/renderer/assets/KaTeX_Main-Italic-3WenGoN9.ttf 33.58 kB
out/renderer/assets/design-case-4-0hVdAJQR.png 45.16 kB
out/renderer/assets/design-case-2-BH_iQ5r3.png 45.56 kB
out/renderer/assets/KaTeX_Main-Bold-waoOVXN0.ttf 51.33 kB
out/renderer/assets/design-case-1-DOYiafVz.png 52.97 kB
out/renderer/assets/KaTeX_Main-Regular-ypZvNtVU.ttf 53.58 kB
out/renderer/assets/KaTeX_AMS-Regular-DRggAlZN.ttf 63.63 kB
out/renderer/assets/workbuddy-appearance-dark-CXQX3TZX.png 109.34 kB
out/renderer/assets/workbuddy-appearance-light-BbpPCukh.png 113.02 kB
out/renderer/assets/codicon-ngg6Pgfi-ngg6Pgfi.ttf 121.97 kB
out/renderer/assets/kimi-DiLyRSiJ.svg 129.22 kB
out/renderer/assets/json.worker-DEWrzUkU-FVRG9O7E.js 438.21 kB
out/renderer/assets/worker-portable-D1lwTqsk-Dg0RNmO0.js 456.22 kB
out/renderer/assets/landing-hero-B6659kdy.png 629.28 kB
out/renderer/assets/html.worker-BC4B-9NY-BDdNc3ca.js 756.63 kB
out/renderer/assets/css.worker-D7wyZb8r-YRw1jg-F.js 1,086.92 kB
out/renderer/assets/ts.worker-BsXRl7a--BbqraoNr.js 8,187.30 kB
out/renderer/assets/ArtifactPierreDiff-CNAfnhAF.css 1.16 kB
out/renderer/assets/GeneralSettingsPanel-CntDyB52.css 1.25 kB
out/renderer/assets/AgentsSettingsPanel-R0teGDyD.css 2.56 kB
out/renderer/assets/AboutHelpSettingsPanel-ksqGLObi.css 5.72 kB
out/renderer/assets/updates-ui-COSnOGKS.css 6.84 kB
out/renderer/assets/AppearanceSettingsPanel-DcaRECSa.css 8.03 kB
out/renderer/assets/ShortcutsSettingsPanel-Bu_5_488.css 18.05 kB
out/renderer/assets/MemorySettingsPanel-C3dtDAif.css 32.49 kB
out/renderer/assets/ModelSettingsPanel-BjNmxQAH.css 88.98 kB
out/renderer/assets/PersonalizationSettingsPanel-DnAyzaM6.css 98.77 kB
out/renderer/assets/app-FUrmRTun.css 259.93 kB
out/renderer/assets/index-D8DFsKmP.css 2,683.38 kB
out/renderer/assets/pie-WAS4IAKB-BM688Qed.js 0.11 kB
out/renderer/assets/info-A6RAGUB7-bTNlUlsL.js 0.11 kB
out/renderer/assets/radar-RG4KPBEZ-B9UzoBsk.js 0.11 kB
out/renderer/assets/packet-AYTQ26CC-DM1-J9Hc.js 0.11 kB
out/renderer/assets/cynefin-OW5HDTMX-BVeGKPzH.js 0.11 kB
out/renderer/assets/treemap-WGGIJYW6-dTyINrIO.js 0.11 kB
out/renderer/assets/wardley-WFR3VGLG-CK3k4IVw.js 0.11 kB
out/renderer/assets/gitGraph-4MIJSDKK-Lnzglldc.js 0.12 kB
out/renderer/assets/railroad-74A4TZTK--aYG59DA.js 0.12 kB
out/renderer/assets/treeView-Q6P3EWNA-BQbXo5gl.js 0.12 kB
out/renderer/assets/railroad-peg-WCYAUIDC-JWkkQu_q.js 0.12 kB
out/renderer/assets/architecture-7GRP2DOG-Rcjkw8FN.js 0.12 kB
out/renderer/assets/railroad-abnf-HS5TGJTU-D3VduuJu.js 0.12 kB
out/renderer/assets/railroad-ebnf-LZEXJU2U-CPG7-L_h.js 0.12 kB
out/renderer/assets/eventmodeling-NTZA5JFV-C09adLXn.js 0.12 kB
out/renderer/assets/array-75Ih5Qg4.js 0.16 kB
out/renderer/assets/channel-twr7cTKo.js 0.25 kB
out/renderer/assets/init-DHdG6DHP.js 0.27 kB
out/renderer/assets/chunk-Y2CYZVJY-CrOJDJJy.js 0.38 kB
out/renderer/assets/chunk-JWPE2WC7-BWmaSNkB.js 0.42 kB
out/renderer/assets/chunk-2Q5K7J3B-BBOGhvIe.js 0.44 kB
out/renderer/assets/prism-tsx-BJWEHjlk.js 0.48 kB
out/renderer/assets/chunk-5VM5RSS4-D50WUAUX.js 0.52 kB
out/renderer/assets/chunk-XXDRQBXY-BsO966Nz.js 0.58 kB
out/renderer/assets/flowDiagram-HODETNUW-DeS6ymMG.js 0.59 kB
out/renderer/assets/prism-json-DxLGXN1o.js 0.62 kB
out/renderer/assets/codeowners-C7Y3CTAA-Cql6BEv4.js 0.75 kB
out/renderer/assets/prism-clike-BcH_eOfE.js 0.89 kB
out/renderer/assets/tsv-DVa1_Ovr-vBRdwBXR.js 0.94 kB
out/renderer/assets/shellsession-C0HwRpr0-BR3CRuW_.js 0.96 kB
out/renderer/assets/javascript-DGySzfUB-CQaVVFGk.js 0.99 kB
out/renderer/assets/settings-llhfE4_8.js 1.01 kB
out/renderer/assets/infoDiagram-27XIBGKW-BWoSUBIx.js 1.09 kB
out/renderer/assets/swimlanesDiagram-VR7AAH4N-7SwzrBEF.js 1.09 kB
out/renderer/assets/html-derivative-D3Jld805-ejOJ9Rod.js 1.10 kB
out/renderer/assets/prism-go-Cw8Jg9YT.js 1.11 kB
out/renderer/assets/classDiagram-ZZMXUADV-Bvgva5eH.js 1.16 kB
out/renderer/assets/classDiagram-v2-VYDZK3BY-BAE_9e9o.js 1.16 kB
out/renderer/assets/stateDiagram-v2-MP3YSRHH-C2G3Nge_.js 1.16 kB
out/renderer/assets/qmldir-DIq06gp2-XVepWno6.js 1.20 kB
out/renderer/assets/git-rebase-CgwCWTNR-CVQxRN4O.js 1.23 kB
out/renderer/assets/chunk-POPQ4Y6H-vc0o4Gte.js 1.23 kB
out/renderer/assets/azcli-Bsxmaz-H-Dgh56k5-.js 1.26 kB
out/renderer/assets/personalization-prefs-DASR3vwn.js 1.28 kB
out/renderer/assets/csv-BRhERoQG-CGiJ_6Ks.js 1.36 kB
out/renderer/assets/prism-latex-CHSuA_Lo.js 1.38 kB
out/renderer/assets/jsx-runtime-C48wkPcG.js 1.41 kB
out/renderer/assets/git-commit-DGtBy1vY-DRFjBUK8.js 1.47 kB
out/renderer/assets/AgentsSettingsPanel-CMYBwUKH.js 1.56 kB
out/renderer/assets/xsl-DV28r3Jw-DKCCYPB3.js 1.59 kB
out/renderer/assets/dotenv-DXc2fSbR-DICbdlhH.js 1.62 kB
out/renderer/assets/general-settings-icons-DOmPIusw.js 1.64 kB
out/renderer/assets/prism-scala-CRTYzCpy.js 1.65 kB
out/renderer/assets/ini-D4-1Iswn-DaNDgFS8.js 1.65 kB
out/renderer/assets/prism-typescript-D-7ZUUQ-.js 1.65 kB
out/renderer/assets/sizeCapture-INFHLROL-CCEMv_MJ.js 1.68 kB
out/renderer/assets/csp-Bsbijh2H-033SDyRW.js 1.69 kB
out/renderer/assets/sparql-Mj-YIaDH-C2rm_KXA.js 1.71 kB
out/renderer/assets/prism-css-Cmyw76Xa.js 1.73 kB
out/renderer/assets/ini-DMSv7OY2-Cn3K8pDf.js 1.74 kB
out/renderer/assets/rolldown-runtime-BJCASTsb-DKQFAHUF.js 1.78 kB
out/renderer/assets/line-CWSC3poT.js 1.89 kB
out/renderer/assets/fortran-fixed-form-D91DiZLE-D7agIQws.js 1.91 kB
out/renderer/assets/docker-B7J3eHK7-BATGFti-.js 1.96 kB
out/renderer/assets/hxml-938TheZ7-D0LocqjZ.js 1.97 kB
out/renderer/assets/desktop-BwI-o01e-BWTUZWmu.js 2.03 kB
out/renderer/assets/ordinal-CmpyCcm_.js 2.22 kB
out/renderer/assets/prism-c-B7tsC1jE.js 2.23 kB
out/renderer/assets/rolldown-runtime-EITvVbkG.js 2.32 kB
out/renderer/assets/erb-BgMB3Uiw-CZggf--g.js 2.40 kB
out/renderer/assets/prism-kotlin-Bc2NQYRR.js 2.43 kB
out/renderer/assets/jssm-CIisorE2-BrY14dMi.js 2.44 kB
out/renderer/assets/prism-python-CTkfasgb.js 2.48 kB
out/renderer/assets/reg-mzCtpvUf-whwPvsKo.js 2.54 kB
out/renderer/assets/bat-2PwuskcT-BbFmQdFU.js 2.55 kB
out/renderer/assets/prism-mermaid-DSoNsh6-.js 2.56 kB
out/renderer/assets/pla-HAHcX3CH-DHyEyFew.js 2.57 kB
out/renderer/assets/sb-O6mPt74--_nMcDiF8.js 2.60 kB
out/renderer/assets/chunk-GVQU2GXP-CWdeAhFo.js 2.61 kB
out/renderer/assets/edge-DcEd3r9D-BTaCZqN4.js 2.62 kB
out/renderer/assets/scheme-C-yCXfo--BHhgh59u.js 2.66 kB
out/renderer/assets/flow9-z3HgHIql-qOic_Sv2.js 2.72 kB
out/renderer/assets/prism-yaml-cmjQ_1eD.js 2.77 kB
out/renderer/assets/gleam-DEEAoY6G-B7AkfsES.js 2.78 kB
out/renderer/assets/railroadDiagram-O6MQD6OU-BNKzVPEs.js 2.78 kB
out/renderer/assets/diff-lAxbRYdS-CANKRkKW.js 2.79 kB
out/renderer/assets/hy-BKymZdC0-BZBUoAs0.js 2.86 kB
out/renderer/assets/dockerfile-CnkhFuxG-CfXHMZr-.js 3.01 kB
out/renderer/assets/openscad-BRTETpP_-CDkw47wh.js 3.03 kB
out/renderer/assets/pascaligo-DI1dd1Zd-D23AoFdQ.js 3.03 kB
out/renderer/assets/log-Cn1ZE6kb-CNfS4M2w.js 3.05 kB
out/renderer/assets/objective-c-gNYZndaF-4hkcNMcE.js 3.06 kB
out/renderer/assets/sparql-DxWbGozt-B7qTmycl.js 3.08 kB
out/renderer/assets/prism-markup-templating-D4pSJIpH.js 3.11 kB
out/renderer/assets/prism-cpp-CEgmwlDT.js 3.11 kB
out/renderer/assets/cameligo-B6LDhzzR-DSNRk43W.js 3.12 kB
out/renderer/assets/wenyan-BVgiL1tD-CaP0PDKh.js 3.12 kB
out/renderer/assets/cairo-D_LzMZ4I-DKL-xu7P.js 3.17 kB
out/renderer/assets/prism-rust-Du0Qa8GC.js 3.18 kB
out/renderer/assets/lua-CJt09SGy-3O0VAMVx.js 3.19 kB
out/renderer/assets/graphql-C0cKWTiE-BQOKksLE.js 3.20 kB
out/renderer/assets/berry-DTcSbIs7-DsYHGLaz.js 3.20 kB
out/renderer/assets/jsonl-Cn_fzNA8-D9apCnfy.js 3.21 kB
out/renderer/assets/json-CKKhFIOr-90BCCD5D.js 3.29 kB
out/renderer/assets/mips-Df5bwPtM-DJn7b529.js 3.29 kB
out/renderer/assets/jsonc-Bf3Xcgeq-CvnwGjUy.js 3.31 kB
out/renderer/assets/logo-BxqPaaID-CVrAYEcu.js 3.33 kB
out/renderer/assets/abnfDiagram-VCTEODGH-Bv59L9H6.js 3.36 kB
out/renderer/assets/go-BejFoqvR-BnGoIlsY.js 3.42 kB
out/renderer/assets/po-DI6EG-tz-C1hZfYcl.js 3.44 kB
out/renderer/assets/lexon-5NyrCfQ6-B1bdOCGH.js 3.45 kB
out/renderer/assets/prism-sql-BggiY1Ht.js 3.45 kB
out/renderer/assets/json5-BlijqrwT-Bqa7RqAq.js 3.45 kB
out/renderer/assets/mipsasm-U3SQfJCQ-BpaJHcf8.js 3.46 kB
out/renderer/assets/sophia-foSZ3xPI-DGYIHURw.js 3.47 kB
out/renderer/assets/tasl-C74Cvwdf-CmTGrVqg.js 3.49 kB
out/renderer/assets/genie-CjS3m_gh-Br-qoLq_.js 3.56 kB
out/renderer/assets/prism-swift-xplGsQ1n.js 3.56 kB
out/renderer/assets/vala-DMgevQbf-CmV4e3j_.js 3.57 kB
out/renderer/assets/pegDiagram-XKGWAZYB-dVjWvJkm.js 3.59 kB
out/renderer/assets/rel-D6dNeDZv-Bpkmk4eS.js 3.60 kB
out/renderer/assets/prism-java-6uFEGwWz.js 3.63 kB
out/renderer/assets/fsharp-Ba-cvOiG-BoxQhS9v.js 3.64 kB
out/renderer/assets/chunk-P2QGCYS3-CrqpykYB.js 3.65 kB
out/renderer/assets/ebnfDiagram-PWID7BFC-1-q_hdLp.js 3.66 kB
out/renderer/assets/qsharp-78iLGMHs-Dbh3PRIx.js 3.68 kB
out/renderer/assets/m3-Bu81_nWr-4t51Qx0i.js 3.69 kB
out/renderer/assets/chunk-F27PBJKO-Bu4CSazG.js 3.70 kB
out/renderer/assets/pascal-DyPgZbsX-Ba58YM7a.js 3.71 kB
out/renderer/assets/path-CSWwviF2.js 3.79 kB
out/renderer/assets/fluent-BSSEgVQa-Cn_pn_Wn.js 3.81 kB
out/renderer/assets/splunk-BdqSfgpd-YG2DKrtF.js 3.81 kB
out/renderer/assets/jsonnet-Bn71vRY8-Df8aCHo3.js 3.82 kB
out/renderer/assets/ssh-config-BO51LXox-BVx8icd8.js 3.82 kB
out/renderer/assets/bicep-DujF3y-4-DHww3ZLF.js 3.87 kB
out/renderer/assets/narrat-DdgkgBr0-CH981GBy.js 3.87 kB
out/renderer/assets/redis-Bo427DT4-DBDF4ZWx.js 3.88 kB
out/renderer/assets/turtle-DAmmiOda-BJFArKOq.js 3.92 kB
out/renderer/assets/dist-CE9GMTNb.js 3.97 kB
out/renderer/assets/prism-jsx-BO0yI1A3.js 3.97 kB
out/renderer/assets/xml-BBFzlEmT-CqLnJtYa.js 3.99 kB
out/renderer/assets/java-Z7anYNQ6-DdC7WVZS.js 4.01 kB
out/renderer/assets/r-Xh-gXEK4-DKEPC8dA.js 4.02 kB
out/renderer/assets/ron-CdysqNkW-BSUoGIHz.js 4.11 kB
out/renderer/assets/zenscript-XbBI4c9W-BFcBoeKG.js 4.12 kB
out/renderer/assets/glsl-CZF-bvQV-9IpKrYn6.js 4.14 kB
out/renderer/assets/shell-DGp7WuK3-X00pamiI.js 4.15 kB
out/renderer/assets/gn-DJxfXStl-DdOzUBon.js 4.20 kB
out/renderer/assets/kotlin-C61BvWgT-B7MkJpdU.js 4.20 kB
out/renderer/assets/typespec-B704GmX3-f1l-QmOw.js 4.26 kB
out/renderer/assets/kdl-YTd72GVl-BCuCzgSj.js 4.27 kB
out/renderer/assets/AppearanceSettingsPanel-B_352Jrg.js 4.28 kB
out/renderer/assets/hurl-CDXCvJNd-v3s0TGuH.js 4.28 kB
out/renderer/assets/cypher-CjfQI0Y9-9gjOyi6P.js 4.33 kB
out/renderer/assets/pascal-CLPA94yO-BYk8pXp0.js 4.35 kB
out/renderer/assets/powershell-CaPzBwIT-C9KgMPOP.js 4.50 kB
out/renderer/assets/tcl-D-NiFh9X-CSVMOw5D.js 4.63 kB
out/renderer/assets/apex-BE-040ts-wdfiR7V6.js 4.65 kB
out/renderer/assets/tcl-DowxIvU4-Bbhzqrsw.js 4.65 kB
out/renderer/assets/rosmsg-DDyuMVTo-BC70ArCp.js 4.72 kB
out/renderer/assets/nextflow-DVTlkzu9-BvWt64IR.js 4.75 kB
out/renderer/assets/http-DhxVjYFh-6dtHltQi.js 4.76 kB
out/renderer/assets/hcl-CbjaVS9i-DCS43mBd.js 4.79 kB
out/renderer/assets/rust-Ij2gfGoT-DLzaBWYs.js 4.83 kB
out/renderer/assets/polar-CwTxzzWE-DkKufc4x.js 4.87 kB
out/renderer/assets/prism-ruby-PgHh3fQm.js 4.91 kB
out/renderer/assets/fennel-COJTUo2O-DeaHY6dL.js 4.97 kB
out/renderer/assets/bibtex-yEKRWsaj-D8ShyJ1A.js 5.00 kB
out/renderer/assets/coffee-CcgZJF1B-DkN4xoBX.js 5.04 kB
out/renderer/assets/llvm-DiFwU398-DlWtUz0W.js 5.25 kB
out/renderer/assets/less-CXux59mP-BM7SkPLH.js 5.27 kB
out/renderer/assets/msdax-DEyWhkWP-CwdIr_-P.js 5.29 kB
out/renderer/assets/prism-javascript-B6zosBCV.js 5.31 kB
out/renderer/assets/wgsl-Ds7VVNHP-DbFOisvZ.js 5.34 kB
out/renderer/assets/markdown-CBag5COD-B_1rbk64.js 5.36 kB
out/renderer/assets/dart-DK8_VUW5-Bnb_Tn57.js 5.39 kB
out/renderer/assets/zig-BBWfbOQ5-Cd99xS_n.js 5.54 kB
out/renderer/assets/restructuredtext-D2p7PcFG-DDHAm_JI.js 5.55 kB
out/renderer/assets/dax-CmrIxjmL-Cm-IqJxd.js 5.56 kB
out/renderer/assets/gdresource-4lq4eh4q-BLZ-Xhb8.js 5.56 kB
out/renderer/assets/qml-D6gd64uC-COt5k1_j.js 5.57 kB
out/renderer/assets/bicep-wTwvD1CI-TpOHsxP3.js 5.58 kB
out/renderer/assets/cssMode-Z-o80aSY-B98aAd1G.js 5.59 kB
out/renderer/assets/awk-DTjcVAOD-DmWbT1GZ.js 5.66 kB
out/renderer/assets/liquid-Dv-zz5BA-D9ukCDuL.js 5.71 kB
out/renderer/assets/csharp-DpS7Vfy9-CbQzv1ql.js 5.76 kB
out/renderer/assets/coq-BFytDJOI-xQMFTtcz.js 5.81 kB
out/renderer/assets/swift-C3A42nmX-BBVToPkN.js 5.83 kB
out/renderer/assets/xml-bIkPj5aH-Dj17JXmX.js 5.89 kB
out/renderer/assets/ecl-CYzojQ6a-C8m0_osY.js 5.91 kB
out/renderer/assets/jinja-Dl-Ji_JA-DBtRU8XB.js 5.92 kB
out/renderer/assets/lean-Cu10prRO-qoDA2HH1.js 6.03 kB
out/renderer/assets/yaml-GEMDST6R-D-0AGe4F.js 6.09 kB
out/renderer/assets/moonbit-B8-g2u5v-CvSB9cV_.js 6.10 kB
out/renderer/assets/powerquery-tKWDTKOo-waMU16T7.js 6.11 kB
out/renderer/assets/SourceCodePreview-mEFD1Yau.js 6.11 kB
out/renderer/assets/python-CHafhQyI-DmJIfgbV.js 6.14 kB
out/renderer/assets/shaderlab-Df7nOKvI-yzLjKEuk.js 6.16 kB
out/renderer/assets/css-sG8ozMHf-pZGexMoj.js 6.17 kB
out/renderer/assets/cpp-CipCPBaT-7uQRIwsC.js 6.17 kB
out/renderer/assets/vb-BKV3Sgm5-BLc3NfGD.js 6.29 kB
out/renderer/assets/htmlMode-BDZbYlMj-C3ITpSKc.js 6.40 kB
out/renderer/assets/red-CYaKK_PD-B9rc2vJZ.js 6.45 kB
out/renderer/assets/min-dark-DGPfDRqJ-CdytMfp1.js 6.48 kB
out/renderer/assets/pug-EKWpNZSi-oQ708bsr.js 6.51 kB
out/renderer/assets/prisma-CdZyz3OC-BgUFK_C1.js 6.53 kB
out/renderer/assets/gdshader-ryZhEIxg-Do4kvC2U.js 6.55 kB
out/renderer/assets/ara-_lrJyEFe-im1DTHgp.js 6.56 kB
out/renderer/assets/clojure-WSq30mUj-CWeb8Ehm.js 6.61 kB
out/renderer/assets/toml-DPP887_3-40AtdxPk.js 6.62 kB
out/renderer/assets/postcss-CcIp2ENG-CVUE5tmq.js 6.64 kB
out/renderer/assets/verilog-bragEGMk-C8WJgOmh.js 6.64 kB
out/renderer/assets/solarized-light-BIMszn7B-B2U9KVBQ.js 6.68 kB
out/renderer/assets/cypher-COYrq2Yy-DzVg_woT.js 6.75 kB
out/renderer/assets/arc-LpCwTDer.js 6.75 kB
out/renderer/assets/proto-CQIfhs_g-BuRzi1Bh.js 6.77 kB
out/renderer/assets/smalltalk-BLGdLDJX-CBGuRCuH.js 6.79 kB
out/renderer/assets/vb-D1Cw85Ss-BSz-V9M4.js 6.86 kB
out/renderer/assets/talonscript-DA9pg7Tj-BHGvDWHP.js 6.96 kB
out/renderer/assets/r-Bb2Mu7Fo-Bft5r7V4.js 7.00 kB
out/renderer/assets/solarized-dark-D_I-4EGa-DXP7SqBa.js 7.04 kB
out/renderer/assets/diagram-Z3DM3KII-wA8bvl3k.js 7.08 kB
out/renderer/assets/riscv-CQHqXr1Z-AIE80Th9.js 7.11 kB
out/renderer/assets/soy-DybHqX1A-B0BHFfA4.js 7.15 kB
out/renderer/assets/min-light-BF0EjVgr-BN7wLXTt.js 7.16 kB
out/renderer/assets/scheme-Dn0tgEWN-B_dvvVHd.js 7.37 kB
out/renderer/assets/prism-bash-B2ETaHUm.js 7.43 kB
out/renderer/assets/typescript-sfPIqb8J-DtIl1kXb.js 7.44 kB
out/renderer/assets/hlsl-CAmjcFpk-BDAtqngO.js 7.48 kB
out/renderer/assets/mdx-Bdu4uO-C-BrzgNjCw.js 7.58 kB
out/renderer/assets/qss-DkzwWM0J-BOg2UcdG.js 7.67 kB
out/renderer/assets/html-DKbmsqz6-Cnkf6ew3.js 7.69 kB
out/renderer/assets/systemd-CS6mVasZ-UCFHYgiH.js 8.07 kB
out/renderer/assets/monokai-CYqILLdj-ZVQYJWcs.js 8.08 kB
out/renderer/assets/twig-r8vgPZrm-D2l24YwI.js 8.18 kB
out/renderer/assets/updates-ui-BoiWSsup.js 8.22 kB
out/renderer/assets/wgsl-D_5Qxf6T-D508aVGZ.js 8.27 kB
out/renderer/assets/sdbl-BXfz6d3_-CxhxK5lR.js 8.42 kB
out/renderer/assets/regexp-Dv0OUts_-A1jzFeWI.js 8.46 kB
out/renderer/assets/prism-php-dzcOOH50.js 8.49 kB
out/renderer/assets/systemverilog-BreNGkRs-RIXr4hNf.js 8.65 kB
out/renderer/assets/plsql-C-xpsZfV-KaeiwzmO.js 8.71 kB
out/renderer/assets/vue-html-DvuHo2mm-oEzkAGog.js 8.71 kB
out/renderer/assets/haml-CIYwkycC-zblUyJHT.js 8.81 kB
out/renderer/assets/scss-CLoW-2dr-BBC_GO_6.js 8.86 kB
out/renderer/assets/dart-CBkkDIWs-j8H02moM.js 8.94 kB
out/renderer/assets/horizon-CELVL8Ba-CV6Nlqvf.js 8.97 kB
out/renderer/assets/horizon-bright-DBDyMeUQ-BLA71491.js 8.98 kB
out/renderer/assets/julia-DvNkK6LK-Bi3Rlfah.js 9.04 kB
out/renderer/assets/clojure-886L7m2N-BhGJsUM7.js 9.14 kB
out/renderer/assets/make-CsAfL-jc-CpYGuuUh.js 9.18 kB
out/renderer/assets/andromeeda--j5Bq-48-DHms4eOb.js 9.21 kB
out/renderer/assets/dark-plus-FAPM6M6c-DVCL0euQ.js 9.29 kB
out/renderer/assets/sas-BQIEUTPQ-DaT5bHkC.js 9.31 kB
out/renderer/assets/slack-dark-nDxLkSCC-CkFKNzUY.js 9.31 kB
out/renderer/assets/perl-Bec3eWyr-CDmSu3_s.js 9.32 kB
out/renderer/assets/plastic-DY_h9Vzh-Dvw8LIYu.js 9.49 kB
out/renderer/assets/sass-Ysv8HTNa-BQlxUfIG.js 9.49 kB
out/renderer/assets/st-BrgXZ-Ag-BUs-RRgp.js 9.58 kB
out/renderer/assets/typst-Co5rZla4-IC5-Jo72.js 9.61 kB
out/renderer/assets/slack-ochin-7zJWY-K--DXNk4Zsd.js 9.63 kB
out/renderer/assets/defaultLocale-QNqK0iCN.js 9.84 kB
out/renderer/assets/handlebars-CIJAyfa9-6toBlNYk.js 9.94 kB
out/renderer/assets/jison-Cbw0l5It-BNFOqqwE.js 9.95 kB
out/renderer/assets/sql-DviNlDJO-CwV6bDIP.js 9.97 kB
out/renderer/assets/kotlin-DIw6ua6F-CMarmTrc.js 10.01 kB
out/renderer/assets/cmake-CyNDuJo8-BeWVlJUp.js 10.07 kB
out/renderer/assets/light-plus-DkScKIB5-B_KcDNlw.js 10.14 kB
out/renderer/assets/hcl-DoJdlYjN-BsGZHRyE.js 10.25 kB
out/renderer/assets/scala-Dj45wWzI-CAMCqIXS.js 10.40 kB
out/renderer/assets/postiats-SaHD9Qcv-FPvOr1pn.js 10.45 kB
out/renderer/assets/beancount-CyZf3Huc-3QIK9277.js 10.58 kB
out/renderer/assets/tex-gcnXexI3-DyL0fQZm.js 10.60 kB
out/renderer/assets/php-Bn8AF0uj-CBbpr2vs.js 10.62 kB
out/renderer/assets/nextflow-groovy-D4ZyOBoZ-Cxol6NUs.js 10.63 kB
out/renderer/assets/dream-maker-5oXa1Z51-BxOIhCiq.js 10.67 kB
out/renderer/assets/ts-tags-xeTAUNHG-CXHQ2bLP.js 10.70 kB
out/renderer/assets/raku-Bfr41qeN-sHjCwCt6.js 10.72 kB
out/renderer/assets/mysql-CZJtil0v-CP4gK9vT.js 10.73 kB
out/renderer/assets/task-menu-icons-BRdNqJF0.js 10.78 kB
out/renderer/assets/prism-csharp-D9xOwbIN.js 10.91 kB
out/renderer/assets/yaml-CsitfczK-fUDryoPr.js 10.97 kB
out/renderer/assets/diagram-UQ7AKVKN-DvkjvJ_z.js 11.05 kB
out/renderer/assets/elm-Dl1XrIiD-BleiAWFO.js 11.18 kB
out/renderer/assets/just-He7qscmV-DWClPT8I.js 11.19 kB
out/renderer/assets/redshift-Djb4PK3z-9Ar4PFWD.js 11.35 kB
out/renderer/assets/github-light-B_J7N1HZ-CNLpwkaR.js 11.38 kB
out/renderer/assets/ruby-CxOCB7_P-BzsjPJ6Z.js 11.48 kB
out/renderer/assets/prolog-DAqMMM08-BQ1K0xDW.js 11.56 kB
out/renderer/assets/terraform-BW8B2WXV-vO0iUEHq.js 11.59 kB
out/renderer/assets/github-dark-BgqEY2WG-CDuFyDvl.js 11.60 kB
out/renderer/assets/puppet-CaR8DEdW-BFTzELPt.js 11.65 kB
out/renderer/assets/pkl-DrXR3Dxy-MKe2lJ6v.js 11.67 kB
out/renderer/assets/laserwave-Clkc4Pj8-DVFQc3Jp.js 11.69 kB
out/renderer/assets/pieDiagram-E7YTZNPT-BWdg6XAo.js 11.95 kB
out/renderer/assets/rst-BJFdabDk-CCl67Ai5.js 12.04 kB
out/renderer/assets/linear-WS155L0r.js 12.11 kB
out/renderer/assets/wasm-DYwNZ-r4-LoLM9sp-.js 12.21 kB
out/renderer/assets/hjson-CmvCiVhY-Dv5-O_dE.js 12.25 kB
out/renderer/assets/razor-D5kquflS-CWY5AfCS.js 12.39 kB
out/renderer/assets/abap-BJyKdrbp-hWIyERPx.js 12.52 kB
out/renderer/assets/handlebars-B1z64YSt-D96aDeHo.js 12.52 kB
out/renderer/assets/apache-BUbWdjM2-er-kNq06.js 12.66 kB
out/renderer/assets/vesper-B5lCMuIY-C-L8SLS-.js 12.88 kB
out/renderer/assets/pgsql-BYm17UA1-Cvj1smQI.js 12.93 kB
out/renderer/assets/protobuf-BOGxqb2m-yTWn-oM_.js 12.98 kB
out/renderer/assets/bat-D2y8Uewi-Cl-ogcV8.js 13.09 kB
out/renderer/assets/fish-CaZR_ofm-D3csrVXO.js 13.24 kB
out/renderer/assets/elixir-Lipcswxh-DnZCznfr.js 13.27 kB
out/renderer/assets/v-wnWoBHkK-BSi04X8j.js 13.41 kB
out/renderer/assets/AboutHelpSettingsPanel-Ui_VOvh7.js 13.48 kB
out/renderer/assets/vitesse-light-DQXFiRFx-BsEdmZXn.js 13.81 kB
out/renderer/assets/aurora-x-9vUYYjHV-DuTT-s24.js 13.85 kB
out/renderer/assets/vitesse-black-cwK5rWgD-By5BPIiB.js 13.87 kB
out/renderer/assets/vitesse-dark-CsfgW0oH-B8FfVCVY.js 13.96 kB
out/renderer/assets/ShortcutsSettingsPanel-KgJeI7QZ.js 14.15 kB
out/renderer/assets/pug-D0UckVoV-Dc4dcKRI.js 14.16 kB
out/renderer/assets/synthwave-84-LX1B8mRG-BSQB2DTm.js 14.23 kB
out/renderer/assets/github-light-default-BRmIzqWc-BC58bqci.js 14.36 kB
out/renderer/assets/clarity-AxkJPY5c-CLkBleI8.js 14.48 kB
out/renderer/assets/github-light-high-contrast-BUKIZOxn-DTqDE4VZ.js 14.49 kB
out/renderer/assets/github-dark-dimmed-DoIdqTey-C4--1HeR.js 14.64 kB
out/renderer/assets/github-dark-default-CwWjzI40-CjtvvGKC.js 14.64 kB
out/renderer/assets/chunk-PWAF6VOD-C5TH65pY.js 14.76 kB
out/renderer/assets/github-dark-high-contrast-bFLNMLvK-B9mc4K5r.js 14.80 kB
out/renderer/assets/diagram-S7CK7UJ4-DIu-_iO3.js 14.98 kB
out/renderer/assets/gnuplot-Dw3FRha5-obFHGYeK.js 14.98 kB
out/renderer/assets/rust-C0Ih6nmc-DCi1zq7R.js 15.27 kB
out/renderer/assets/actionscript-3-O8jnLcvn-BbZ_4u0n.js 15.41 kB
out/renderer/assets/luau-BzxGbjcn-9_TbVyma.js 15.64 kB
out/renderer/assets/nix-zl191KBb-BbAYvczw.js 15.85 kB
out/renderer/assets/lua-BwTLfNCK-BBIgNBoM.js 16.04 kB
out/renderer/assets/abap-FvPUHv8B-CiFbcGXC.js 16.05 kB
out/renderer/assets/solidity-96fhzG-Q-C74Y2Opx.js 16.28 kB
out/renderer/assets/matlab-8ZQqHKQX-BJu9o6OA.js 16.29 kB
out/renderer/assets/cue-eHSfcyUV-BNbKRlrg.js 16.40 kB
out/renderer/assets/kusto-D8vBBISG-BfwhlBvh.js 16.45 kB
out/renderer/assets/powerquery-B7BjLMcF-BkVSWPtX.js 16.49 kB
out/renderer/assets/elixir-B1NaQxrO-CNOGHop-.js 16.50 kB
out/renderer/assets/react-DrereneL.js 16.50 kB
out/renderer/assets/odin-B-YqhW9I-DME2HDgP.js 16.71 kB
out/renderer/assets/solidity-Dpt2BLAA-BD_YSA0r.js 16.98 kB
out/renderer/assets/bird2-BMkLvc4r-rsPD8M30.js 17.17 kB
out/renderer/assets/kanagawa-wave-CM_o6oKV-CWyXUtcR.js 17.32 kB
out/renderer/assets/kanagawa-lotus-Cj3XDpoG-CDr5kPUh.js 17.32 kB
out/renderer/assets/kanagawa-dragon-D_NPnIy_-CknksS66.js 17.33 kB
out/renderer/assets/cynefinDiagram-5FMLGOSQ-D0qyeYc4.js 17.61 kB
out/renderer/assets/stateDiagram-D77RDMKH-tZzGzB97.js 18.11 kB
out/renderer/assets/chunk-L3NEJ4N5-DtjgD4ep.js 18.16 kB
out/renderer/assets/liquid-D_7zu7XR-uwWdG6fF.js 18.46 kB
out/renderer/assets/svelte-DUGqPubT-CTwTdp-n.js 18.60 kB
out/renderer/assets/graphql-ObxcfEHH-DDFQQ1P1.js 18.65 kB
out/renderer/assets/jsonMode-DdQpkp6D-BKPbFySU.js 18.79 kB
out/renderer/assets/material-theme-q28j4V_0-B-kj8Qoq.js 18.81 kB
out/renderer/assets/material-theme-ocean-DAvlEnSm-iaR_QhuU.js 18.83 kB
out/renderer/assets/material-theme-darker-CHEuMVX9-Bb6Gry5X.js 18.83 kB
out/renderer/assets/material-theme-lighter-DY4T1_JG-D-KxwMUM.js 18.84 kB
out/renderer/assets/material-theme-palenight-CqDFvQ-v-B7MYtC_l.js 18.84 kB
out/renderer/assets/gherkin-BcjDDslM-CWirluc4.js 19.20 kB
out/renderer/assets/gdscript-CekKc1U_-BX0yrYTi.js 19.21 kB
out/renderer/assets/groovy-DH3arekX-oAflmeEP.js 19.38 kB
out/renderer/assets/mdc-D-U85KZE-BZdF3UAh.js 19.85 kB
out/renderer/assets/diagram-VSXAHHWV-B78-YXJ8.js 20.01 kB
out/renderer/assets/move-CmExnPjU-D1_eV6y8.js 20.22 kB
out/renderer/assets/ayu-dark-BeByMiYw-DzuIgUGo.js 20.27 kB
out/renderer/assets/ayu-mirage-C1jJ6Jfs-BJ7bsANS.js 20.28 kB
out/renderer/assets/ayu-light-DmTZeN54-DSkP76Kn.js 20.35 kB
out/renderer/assets/glimmer-js-D9ZnrcNN-BIcuvWkY.js 20.44 kB
out/renderer/assets/glimmer-ts-DuhFj6qR-B5odMFJp.js 20.44 kB
out/renderer/assets/viml-DPVJ_KYe-CNoY3ri2.js 20.56 kB
out/renderer/assets/nushell-Cd8Dwa1M-D-ELzSxD.js 20.62 kB
out/renderer/assets/snazzy-light-B8znOqT6-igc5rBV_.js 20.97 kB
out/renderer/assets/dagre-GXQ25YYZ-q8Br2FA_.js 21.01 kB
out/renderer/assets/dracula-DeMffiYO-plA2G1by.js 21.26 kB
out/renderer/assets/dracula-soft-BnfvpcDv-CooEVcrD.js 21.27 kB
out/renderer/assets/twig-7zjsCqYg-DuWCMdWG.js 21.44 kB
out/renderer/assets/freemarker2-enkimFXA-0bWMkoTL.js 21.73 kB
out/renderer/assets/PersonalizationSettingsPanel-B06BA6F_.js 21.87 kB
out/renderer/assets/rose-pine-CEVQiaW0-FjrJKSJj.js 21.94 kB
out/renderer/assets/rose-pine-moon-B9bum7Ik-C1dPrIOG.js 21.96 kB
out/renderer/assets/rose-pine-dawn-2Q5fMoJp-D68V6_sX.js 21.96 kB
out/renderer/assets/powershell-ycAdP1r9-CFIipy6u.js 22.11 kB
out/renderer/assets/common-lisp-DcFHcTKh-CRmZ8u5g.js 22.81 kB
out/renderer/assets/gruvbox-dark-hard-gOzMLqif-0PofsLRE.js 22.83 kB
out/renderer/assets/gruvbox-dark-soft-CKvURktN-CpJBySQ9.js 22.83 kB
out/renderer/assets/gruvbox-light-hard-CMa_c48J-DhbHOF7k.js 22.84 kB
out/renderer/assets/gruvbox-light-soft-yfAGJYsX-B6V_VQqA.js 22.84 kB
out/renderer/assets/gruvbox-dark-medium-BQSVGwWb-BQ530p9o.js 22.84 kB
out/renderer/assets/gruvbox-light-medium-B9S5UNr1-GtfqbARl.js 22.84 kB
out/renderer/assets/nim-CD961Jl3-BXaHgcLA.js 22.91 kB
out/renderer/assets/cadence-C2JmJjDr-D0JIp-nV.js 23.87 kB
out/renderer/assets/sql-C_oMiPb0-CtC6YR3O.js 23.87 kB
out/renderer/assets/wit-CXpQol8Q-INBqmTeA.js 24.11 kB
out/renderer/assets/templ-gFcHJbF7-Cbr3Ety6.js 24.38 kB
out/renderer/assets/astro-kV3HjkbP-D9f7KDfO.js 24.46 kB
out/renderer/assets/vhdl-Ci4REirV-CQ9mlLyL.js 24.46 kB
out/renderer/assets/purescript-DCsDAdnX-Cot00nU8.js 24.97 kB
out/renderer/assets/vue-Cuk7Vimg-RQuL6vPZ.js 25.25 kB
out/renderer/assets/surrealql-GFjNBdcm-B_Zkuzeq.js 25.34 kB
out/renderer/assets/one-light-CMfGrl_P-CvXy-wp6.js 25.49 kB
out/renderer/assets/night-owl-light-CAEa42tO-lUpHCOnV.js 26.10 kB
out/renderer/assets/system-verilog-D_bVVpLE-D7j6RF1Y.js 26.41 kB
out/renderer/assets/angular-html-BrLPO2Fv-Bgbfj5Qp.js 26.48 kB
out/renderer/assets/typespec-D5WYs8C4-CiGKYijV.js 26.72 kB
out/renderer/assets/nord-DlCAGdjr-tqXbaCnO.js 26.91 kB
out/renderer/assets/codeql-DidIlXer-C0bd6k-b.js 27.08 kB
out/renderer/assets/scss-BhK8Ovpn-BQq6Frps.js 27.52 kB
out/renderer/assets/coffee-DrMWXxy6-BNvla_tH.js 27.68 kB
out/renderer/assets/java-DaupjRFz-DdE0uB2r.js 27.69 kB
out/renderer/assets/razor-B2hRAVmz-D9x1yc2J.js 27.72 kB
out/renderer/assets/apl-C42PBett-D2UJYGDR.js 27.87 kB
out/renderer/assets/chunk-SVP7TREG-35Cx1p7a.js 28.38 kB
out/renderer/assets/fsharp-BHFgIxsY-DSepk0af.js 28.48 kB
out/renderer/assets/marko-DXKHPFnH-CtKawwkY.js 28.74 kB
out/renderer/assets/GeneralSettingsPanel-BvWbjOtn.js 29.10 kB
out/renderer/assets/night-owl-DegwdXaM-UFUSPJU_.js 29.11 kB
out/renderer/assets/c3-BOs4FlGA-DJbgm1fi.js 29.17 kB
out/renderer/assets/MemorySettingsPanel-CURc90wI.js 29.75 kB
out/renderer/assets/crystal-DlzoxO28-Blr3y4JY.js 29.84 kB
out/renderer/assets/applescript-ij24h7OO-SZPADYv5.js 29.87 kB
out/renderer/assets/tsMode-SiG-Sp2b-D-duzWqc.js 30.55 kB
out/renderer/assets/pierre-dark-Daa2n9wr-DusEyx93.js 30.74 kB
out/renderer/assets/pierre-light-D_hZXvUj-BQz0OThR.js 30.75 kB
out/renderer/assets/pierre-dark-soft-BhNM3pgh-BF8Uifdk.js 30.76 kB
out/renderer/assets/pierre-light-soft-BVrSv6ZG-Ci0MDyEV.js 30.76 kB
out/renderer/assets/ishikawaDiagram-5VMMS53U-DLplA6vL.js 30.78 kB
out/renderer/assets/pierre-dark-tritanopia-CGKuoAZi-CCKbkm2i.js 30.78 kB
out/renderer/assets/pierre-light-tritanopia-BiDEaWaH-D0n7V4Ln.js 30.78 kB
out/renderer/assets/pierre-dark-protanopia-deuteranopia-Cs1lz9lE-CglVC82r.js 30.82 kB
out/renderer/assets/pierre-light-protanopia-deuteranopia-BM0RLBB_-BgccdHTL.js 30.82 kB
out/renderer/assets/stylus-ZCryC73G-Dz6KJMr2.js 31.29 kB
out/renderer/assets/diagram-VX7I27RA-CgHzhNUv.js 31.44 kB
out/renderer/assets/scala-BBsC3Oz3-DCgLzUzQ.js 31.48 kB
out/renderer/assets/mermaid-D6CQfUGU-BKGonhno.js 33.37 kB
out/renderer/assets/poimandres-EIt_jotH-ZWxYhJoY.js 33.69 kB
out/renderer/assets/kanban-definition-UXKFOSKX-BQjuw40N.js 33.91 kB
out/renderer/assets/one-dark-pro-DR9QpZM3-D3fuIaRQ.js 33.98 kB
out/renderer/assets/mermaid-parser.core-DQNESEqg.js 34.66 kB
out/renderer/assets/haxe-BWT5wSyZ-Bv2BMtCM.js 35.38 kB
out/renderer/assets/nginx-DhtViCEk-C8iMBHfd.js 35.58 kB
out/renderer/assets/houston-BdS5A_yD-BZRML7mO.js 35.61 kB
out/renderer/assets/tokyo-night-BS1_DFu7-DSQrDV8c.js 35.86 kB
out/renderer/assets/erlang-Dd62d0xZ-Dp-wNWfp.js 37.71 kB
out/renderer/assets/rough.esm-BX5QqLti.js 38.33 kB
out/renderer/assets/mindmap-definition-YA3MSWOX-DJVuJ8KA.js 38.59 kB
out/renderer/assets/cobol-D7RZfOK--CIRKo2If.js 39.37 kB
out/renderer/assets/journeyDiagram-3NMN7TZE-ClKmPdOn.js 40.13 kB
out/renderer/assets/julia-ZzkUXm0W-C7ui3eKu.js 40.32 kB
out/renderer/assets/lspLanguageFeatures-DK9zifhE-DeEqLmGO.js 40.76 kB
out/renderer/assets/asm-DYVIzeEk-6khYQ-a8.js 40.91 kB
out/renderer/assets/haskell-Ba6HbLj8-B3QEwyPk.js 41.78 kB
out/renderer/assets/sankeyDiagram-P5KCCOFB-Bkju2DSV.js 41.83 kB
out/renderer/assets/shellscript-B69gKcss-BUkt_jYS.js 41.97 kB
out/renderer/assets/wardleyDiagram-VM6X3IG4-BZQYC-il.js 42.40 kB
out/renderer/assets/perl-Dv6Cq_FS-BmabaTng.js 43.55 kB
out/renderer/assets/pierre-dark-vibrant-BMsyYliQ-DsmVysir.js 44.96 kB
out/renderer/assets/pierre-light-vibrant-CWzM4Pa_-B2g3j1aA.js 44.97 kB
out/renderer/assets/ruby-DWcdJvcx-CqBDeWg-.js 46.50 kB
out/renderer/assets/go-BOpYl7fu-D3CvqA3U.js 47.02 kB
out/renderer/assets/apex-B48ZHHzN-DiOaHZGq.js 47.18 kB
out/renderer/assets/catppuccin-mocha-cPsH7Lup-CgYflQPu.js 47.46 kB
out/renderer/assets/catppuccin-latte-DcEecI7n-hrZRgDR2.js 47.46 kB
out/renderer/assets/catppuccin-frappe-BdOW2tdI-Cia3gxbK.js 47.46 kB
out/renderer/assets/catppuccin-macchiato-Bvz_yAZY-OYdnuUzO.js 47.47 kB
out/renderer/assets/ada-BT0j8ine-DR2ZjGiA.js 48.28 kB
out/renderer/assets/d-B1HbH29p-Cvj3ChCf.js 49.10 kB
out/renderer/assets/css-NFwnoVns-DXH9z3fp.js 49.49 kB
out/renderer/assets/imba-C-oGt11l-BOyTfQ_E.js 50.13 kB
out/renderer/assets/requirementDiagram-BXWQKSXE-DDZyOEHK.js 51.39 kB
out/renderer/assets/erDiagram-RLTQ6QDP-CcpqimEg.js 52.41 kB
out/renderer/assets/browserify-C9uP_nIr.js 52.80 kB
out/renderer/assets/gitGraphDiagram-WWUBYQGX-C2rfskCX.js 53.82 kB
out/renderer/assets/everforest-dark-gCM8XhEI-3QAtV0yR.js 53.94 kB
out/renderer/assets/everforest-light-DhK35DkL-CfuPtloK.js 53.95 kB
out/renderer/assets/timeline-definition-24CTP7MA-ssvVRybZ.js 54.31 kB
out/renderer/assets/wikitext-CQNrXTmv-BiuWdMxa.js 56.09 kB
out/renderer/assets/stata-BUONSdsT-CKLpB3jF.js 57.23 kB
out/renderer/assets/quadrantDiagram-AXDQQJYC-D7XKVeeu.js 58.21 kB
out/renderer/assets/html-Dq1ixqYb-5Ez6yppp.js 58.25 kB
out/renderer/assets/chunk-OSK3NFVY-qf3h4lor.js 58.56 kB
out/renderer/assets/ocaml-CUdGm1iq-BuWvselV.js 62.65 kB
out/renderer/assets/model-settings-source-JYisGYmM.js 63.03 kB
out/renderer/assets/ballerina-CpYcPBJI-BnPqh2jl.js 64.89 kB
out/renderer/assets/markdown-BSrOIEaF-DY4at8q_.js 65.52 kB
out/renderer/assets/chunk-IMKFNOWR-Dx3k84kX.js 67.22 kB
out/renderer/assets/mojo-BNaitZ-7-DtFQFkWH.js 70.00 kB
out/renderer/assets/python-Cld0Iwtn-Coj7MLzk.js 70.17 kB
out/renderer/assets/blockDiagram-I7D4REHJ-nK66-7sK.js 71.01 kB
out/renderer/assets/bsl-CtP8370o-e0AdGB3U.js 71.07 kB
out/renderer/assets/c-B4augMcT-BGPd0Gr7.js 72.57 kB
out/renderer/assets/chunk-75Z2AOVW-BZiwzGEC.js 72.67 kB
out/renderer/assets/latex-g2Pus_l2-Cpe4lKbe.js 72.85 kB
out/renderer/assets/vyper-C1nscAY5-OZcp2uvX.js 74.85 kB
out/renderer/assets/ModelSettingsPanel-BRse78yu.js 76.64 kB
out/renderer/assets/xychartDiagram-S5SC5T6Z-CPCafBr_.js 76.79 kB
out/renderer/assets/chunk-GMAD6QVW-dfikwibL.js 77.76 kB
out/renderer/assets/hack-B1ag3l4X-DTTup4WH.js 80.58 kB
out/renderer/assets/src-DsgKm1PY.js 83.16 kB
out/renderer/assets/chunk-TICWLB2K-Dcn8_IYB.js 83.88 kB
out/renderer/assets/fortran-free-form-CsgtTAg3-Dcf0E5I4.js 89.20 kB
out/renderer/assets/vennDiagram-4TSXK5OY-B0x-Bje4.js 89.26 kB
out/renderer/assets/csharp-YOPVljXo-C-nVpPMU.js 89.91 kB
out/renderer/assets/racket--xYIV9-n-BkgwOEe4.js 92.62 kB
out/renderer/assets/swift-CgzYrGBX-DfGPZN4n.js 94.14 kB
out/renderer/assets/less-BGhX8xko-Diwi650w.js 99.00 kB
out/renderer/assets/chunk-SHT3W25Y-CjVXKa_k.js 104.10 kB
out/renderer/assets/objective-c-CmcWiAft-Cgiq1x-N.js 105.62 kB
out/renderer/assets/blade-Bq8WPf0E-DDPRfLTk.js 105.98 kB
out/renderer/assets/c4Diagram-7LVT6UL2-BDuXaT_h.js 107.96 kB
out/renderer/assets/php-X15vsN4N-Cw3x0PRH.js 111.49 kB
out/renderer/assets/dagre-CzI-C3sx.js 122.98 kB
out/renderer/assets/ganttDiagram-EL5Y4UJY-BpPa-hGj.js 123.77 kB
out/renderer/assets/graphlib-CoAzpIqe.js 127.44 kB
out/renderer/assets/asciidoc-DJWalVNM-CcfVx3iO.js 146.30 kB
out/renderer/assets/mdx-C_Ato9sK-DAoK042h.js 146.49 kB
out/renderer/assets/editor.main-POO0Vbhx-DUU9yksQ.js 161.32 kB
out/renderer/assets/cose-bilkent-JH36ORCC-CA60tZpq.js 165.63 kB
out/renderer/assets/objective-cpp-BggTCHV8-trr7fzYf.js 172.18 kB
out/renderer/assets/javascript-AfZCJ9Uc-CgnJvLVh.js 175.31 kB
out/renderer/assets/tsx-BOlKGefW-CUNUHmru.js 176.00 kB
out/renderer/assets/jsx-CPd9p36x-CEWEBIYH.js 178.26 kB
out/renderer/assets/sequenceDiagram-WJ2MYXX4-D0g8qqlR.js 190.05 kB
out/renderer/assets/typescript-4sRsPriL-oU8ptGzO.js 191.16 kB
out/renderer/assets/mermaid.core-B2Ma1qAB.js 191.57 kB
out/renderer/assets/angular-ts-YduEkmVa-B4Tf-ujw.js 193.82 kB
out/renderer/assets/vue-vine-DXhYlaTf-C0L6NEkT.js 201.27 kB
out/renderer/assets/SourceSelect-Bl6QD69o.js 203.20 kB
out/renderer/assets/chunk-4HAMMTFA-BtNkLLfX.js 210.32 kB
out/renderer/assets/swimlanes-42K2YHIH-BEf7ZX-J.js 265.51 kB
out/renderer/assets/wolfram-BVoTES0L-BbtnEQY1.js 267.14 kB
out/renderer/assets/chunk-DU6HZSFF-C3z8F-bw.js 271.07 kB
out/renderer/assets/architectureDiagram-5GKGNRK7-B1XyM6kv.js 318.23 kB
out/renderer/assets/katex-Y9ra-ykP.js 497.35 kB
out/renderer/assets/texmath-Bkeg3ZLn.js 594.25 kB
out/renderer/assets/wasm-CVjZL0jK-B6l5Bdg0.js 622.62 kB
out/renderer/assets/cpp-9jHBA231-B1v5BVd-.js 626.73 kB
out/renderer/assets/app-DF_dh0Fl.js 675.57 kB
out/renderer/assets/emacs-lisp-DjtOxg4j-dAO1046A.js 780.06 kB
out/renderer/assets/cytoscape.esm-bVGYt-iW.js 869.69 kB
out/renderer/assets/ArtifactPierreDiff-DrM9lg7t.js 1,119.58 kB
out/renderer/assets/chunk-FOHPRMQF-BCllzKJD.js 1,154.18 kB
out/renderer/assets/index-DFOcTr-o.js 3,759.50 kB
out/renderer/assets/editor.api2-dPwET-7w-BYIQ9bT3.js 4,889.23 kB
✓ built in 4.97s
@@ -0,0 +1,6 @@
{
"crlf": 717,
"rawSha": "a2239b45360fcaf5c986fbe2180217856029563f034db11328860dc5e01491ae",
"lfSha": "645ea0848880aa7e89319af8e11440bdddd8c10783944736fd4f29b70e923a10",
"expected": "645ea0848880aa7e89319af8e11440bdddd8c10783944736fd4f29b70e923a10"
}
@@ -0,0 +1,142 @@
const fs = require('node:fs/promises')
const path = require('node:path')
const assert = require('node:assert/strict')
const { pathToFileURL } = require('node:url')
if (!process.versions.electron) {
;(async () => {
const directory = await fs.mkdtemp(path.resolve('.tmp/b01-native-'))
const data = path.join(directory, 'data')
const workspace = path.join(directory, 'workspace')
await fs.mkdir(data); await fs.mkdir(workspace); await fs.mkdir(path.join(directory, 'home'))
const now = Date.now()
const question = { id: 'q1', question: '检查哪个本地目标? Which local target?', answers: ['本地测试目录 / Local fixture'] }
const longQuestions = Array.from({ length: 24 }, (_, i) => ({
id: `long-${i}`, question: `Question ${i}: ${'长文本与换行测试 '.repeat(12)}`,
answers: ['Long answer '.repeat(20)]
}))
const message = questions => ({
id: 'a1', role: 'assistant', content: 'Final answer after question.', createdAt: now - 9000, status: 'done',
turnStartedAt: now - 10000, turnFinishedAt: now, turnDurationMs: 10000,
tools: [
{ id: 'q-tool', name: 'AskUserQuestion', args: { questions }, argsRaw: '{}', status: 'ok', output: 'RAW_SDK_ANSWER_SENTINEL', metadata: { questionAnswer: { questions } } },
{ id: 't1', name: 'UnknownOrdinaryTool', args: {}, argsRaw: '{}', status: 'ok', output: 'ORDINARY_TOOL_OUTPUT' }
],
parts: [
{ type: 'reasoning', id: 'r1', text: 'First reasoning.', finished: true }, { type: 'tool', toolId: 't1' },
{ type: 'tool', toolId: 'q-tool' }, { type: 'text', text: 'Final answer after question.' }
]
})
const session = (id, questions) => ({
id, title: id, cwd: workspace, createdAt: now, updatedAt: now + (id === 'b01-short' ? 1 : 0),
messages: [{ id: 'u1', role: 'user', content: 'Inspect a local fixture.', status: 'done', createdAt: now - 10000 }, message(questions)]
})
await fs.writeFile(path.join(data, 'sessions.json'), JSON.stringify({ sessions: [session('b01-short', [question]), session('b01-long', longQuestions)] }))
const env = { ...process.env, YCODE_USER_DATA_DIR: data, YCODE_SKIP_KERNEL_DATA_RESET: '1', YCODE_QA_DIRECTORY: directory,
YCODE_QA_OFFSCREEN: '1', YCODE_DISABLE_GPU: '1', YCODE_DISABLE_SYSTEM_INTEGRATION: '1', B01_NATIVE_DIRECTORY: directory }
delete env.ELECTRON_RUN_AS_NODE; delete env.ELECTRON_RENDERER_URL
const child = require('node:child_process').spawn(require('electron'), [__filename], { env, windowsHide: true, stdio: ['ignore', 'pipe', 'pipe'] })
let output = ''
child.stdout.on('data', bytes => { output += bytes })
child.stderr.on('data', bytes => { output += bytes })
const timer = setTimeout(() => child.kill(), 90000)
child.once('exit', async code => {
clearTimeout(timer); await fs.writeFile(path.join(directory, 'process.log'), output)
console.log(JSON.stringify({ directory, exitCode: code }))
if (code !== 0) console.error(output.slice(-6000))
process.exitCode = code === 0 ? 0 : 1
})
})().catch(error => { console.error(error); process.exitCode = 1 })
} else {
const { app, BrowserWindow } = require('electron')
const directory = process.env.B01_NATIVE_DIRECTORY
app.disableHardwareAcceleration(); app.setPath('home', path.join(directory, 'home'))
let win
const errors = []
const read = code => win.webContents.executeJavaScript(code)
const pause = ms => new Promise(resolve => setTimeout(resolve, ms))
const outer = '.cr-collapse--completed > .cr-collapse__header'
const questionHeader = '.ask-user-question__header .cr-tool-head__main'
async function wait(code) {
for (let i = 0; i < 250; i++) { if (await read(code)) return; await pause(40) }
throw new Error(`Timeout: ${code}`)
}
const click = selector => read(`document.querySelector(${JSON.stringify(selector)}).click()`)
async function setTheme(theme) {
await read(`(() => { localStorage.setItem("ycode:theme", ${JSON.stringify(theme)});
window.dispatchEvent(new StorageEvent("storage", {key:"ycode:theme",newValue:${JSON.stringify(theme)}})); })()`)
await wait(`document.documentElement.dataset.theme === ${JSON.stringify(theme)}`)
await pause(150)
}
async function shot(name) {
await read('document.fonts.ready'); await pause(400)
await fs.writeFile(path.join(directory, name + '.png'), (await win.webContents.capturePage()).toPNG())
}
async function measure() {
return read(`(() => {
const probe = selector => {
const element = document.querySelector(selector); if (!element) return null;
const style = getComputedStyle(element), box = element.getBoundingClientRect();
return {selector, fontSize:style.fontSize,fontWeight:style.fontWeight,lineHeight:style.lineHeight,
background:style.backgroundColor,padding:style.padding,borderRadius:style.borderRadius,border:style.border,
overflow:style.overflow,maxHeight:style.maxHeight,width:box.width,height:box.height,
scrollHeight:element.scrollHeight,clientHeight:element.clientHeight};
};
const section = document.querySelector(".ask-user-question--completed");
const content = section.querySelector(".ask-user-question__content");
const header = section.querySelector(".ask-user-question__header");
return { theme:document.documentElement.dataset.theme, titleOutsideContent:!content.contains(header),
cardCount:document.querySelectorAll(".ask-user-question--completed").length,
rawAnswerVisible:document.body.textContent.includes("RAW_SDK_ANSWER_SENTINEL"),
horizontalOverflow:document.documentElement.scrollWidth > innerWidth,
styles:[".ask-user-question--completed",".ask-user-question__header",".ask-user-question__content",
".question-answer-transcript__question",".question-answer-transcript__answer"].map(probe) };
})()`)
}
;(async () => {
await import(pathToFileURL(path.resolve('out/main/index.mjs')).href)
await app.whenReady(); win = BrowserWindow.getAllWindows()[0]; win.setSize(1336, 902); win.showInactive()
win.webContents.on('console-message', (_e, level, message) => { if (level >= 3) errors.push(message) })
await wait(`!!document.querySelector(${JSON.stringify(outer)})`)
await click(outer); await wait(`!!document.querySelector(${JSON.stringify(questionHeader)})`)
await click(questionHeader)
await wait(`document.querySelector(${JSON.stringify(questionHeader)}).getAttribute("aria-expanded") === "true"`)
await setTheme('light')
const light = await measure(); await shot('question-light')
assert.equal(light.titleOutsideContent, true); assert.equal(light.cardCount, 1); assert.equal(light.rawAnswerVisible, false)
const contentStyle = light.styles[2]
assert.equal(contentStyle.padding, '12px 16px'); assert.equal(contentStyle.borderRadius, '16px')
assert.equal(contentStyle.maxHeight, '300px')
for (const style of light.styles.slice(3)) {
assert.equal(style.fontSize, '14px'); assert.equal(style.fontWeight, '400'); assert.equal(style.lineHeight, '24.5px')
}
await click(outer); await click(outer)
await wait(`document.querySelector(${JSON.stringify(questionHeader)}).getAttribute("aria-expanded") === "true"`)
const preserved = await read(`document.querySelector(${JSON.stringify(questionHeader)}).getAttribute("aria-expanded")`)
await setTheme('dark')
const dark = await measure(); await shot('question-dark')
await setTheme('light')
win.setSize(820, 902); await pause(150)
const narrow = await measure(); await shot('question-narrow')
assert.equal(narrow.horizontalOverflow, false)
await click('[data-session-id="b01-long"]')
await wait('document.querySelector(".source-chat-header")?.textContent.includes("b01-long") && !!document.querySelector(".cr-collapse--completed")')
await pause(300); await click(outer)
await wait(`!!document.querySelector(${JSON.stringify(questionHeader)})`); await click(questionHeader)
await pause(350)
const long = await measure(); await shot('question-long')
assert.ok(long.styles[2].scrollHeight > long.styles[2].clientHeight)
assert.ok(long.styles[2].clientHeight <= 300)
assert.equal(long.horizontalOverflow, false)
const report = { codeSha: '51531dcae8d8ade85db9e203bc8c0f712805b2ae', scope: 'Real isolated Windows Electron main/preload/renderer; synthetic persisted messages, no model/SDK or original app access.',
light, dark, narrow, long, innerQuestionPreserved: preserved, rendererErrors: errors }
await fs.writeFile(path.join(directory, 'report.json'), JSON.stringify(report, null, 2))
assert.equal(errors.length, 0)
app.exit(0)
})().catch(async error => {
console.error(error)
await fs.writeFile(path.join(directory, 'failure.txt'), String(error))
if (win) await shot('failure').catch(() => {})
app.exit(1)
})
}
@@ -0,0 +1,362 @@
{
"codeSha": "51531dcae8d8ade85db9e203bc8c0f712805b2ae",
"scope": "Real isolated Windows Electron main/preload/renderer; synthetic persisted messages, no model/SDK or original app access.",
"light": {
"theme": "light",
"titleOutsideContent": true,
"cardCount": 1,
"rawAnswerVisible": false,
"horizontalOverflow": false,
"styles": [
{
"selector": ".ask-user-question--completed",
"fontSize": "13px",
"fontWeight": "400",
"lineHeight": "19px",
"background": "rgba(0, 0, 0, 0)",
"padding": "2px 0px",
"borderRadius": "0px",
"border": "0px none rgb(51, 51, 51)",
"overflow": "visible",
"maxHeight": "none",
"width": 752,
"height": 117.5,
"scrollHeight": 118,
"clientHeight": 118
},
{
"selector": ".ask-user-question__header",
"fontSize": "14px",
"fontWeight": "400",
"lineHeight": "24.5px",
"background": "rgba(0, 0, 0, 0)",
"padding": "0px",
"borderRadius": "0px",
"border": "0px none rgba(0, 0, 0, 0.5)",
"overflow": "visible",
"maxHeight": "none",
"width": 752,
"height": 24.5,
"scrollHeight": 25,
"clientHeight": 25
},
{
"selector": ".ask-user-question__content",
"fontSize": "13px",
"fontWeight": "400",
"lineHeight": "19px",
"background": "rgb(242, 242, 242)",
"padding": "12px 16px",
"borderRadius": "16px",
"border": "0px none rgb(51, 51, 51)",
"overflow": "auto",
"maxHeight": "300px",
"width": 752,
"height": 77,
"scrollHeight": 77,
"clientHeight": 77
},
{
"selector": ".question-answer-transcript__question",
"fontSize": "14px",
"fontWeight": "400",
"lineHeight": "24.5px",
"background": "rgba(0, 0, 0, 0)",
"padding": "0px",
"borderRadius": "0px",
"border": "0px none rgb(128, 128, 128)",
"overflow": "visible",
"maxHeight": "none",
"width": 720,
"height": 24.5,
"scrollHeight": 25,
"clientHeight": 25
},
{
"selector": ".question-answer-transcript__answer",
"fontSize": "14px",
"fontWeight": "400",
"lineHeight": "24.5px",
"background": "rgba(0, 0, 0, 0)",
"padding": "0px",
"borderRadius": "0px",
"border": "0px none rgb(51, 51, 51)",
"overflow": "visible",
"maxHeight": "none",
"width": 720,
"height": 24.5,
"scrollHeight": 25,
"clientHeight": 25
}
]
},
"dark": {
"theme": "dark",
"titleOutsideContent": true,
"cardCount": 1,
"rawAnswerVisible": false,
"horizontalOverflow": false,
"styles": [
{
"selector": ".ask-user-question--completed",
"fontSize": "13px",
"fontWeight": "400",
"lineHeight": "19px",
"background": "rgba(0, 0, 0, 0)",
"padding": "2px 0px",
"borderRadius": "0px",
"border": "0px none rgb(210, 211, 224)",
"overflow": "visible",
"maxHeight": "none",
"width": 752,
"height": 117.5,
"scrollHeight": 118,
"clientHeight": 118
},
{
"selector": ".ask-user-question__header",
"fontSize": "14px",
"fontWeight": "400",
"lineHeight": "24.5px",
"background": "rgba(0, 0, 0, 0)",
"padding": "0px",
"borderRadius": "0px",
"border": "0px none rgba(255, 255, 255, 0.45)",
"overflow": "visible",
"maxHeight": "none",
"width": 752,
"height": 24.5,
"scrollHeight": 25,
"clientHeight": 25
},
{
"selector": ".ask-user-question__content",
"fontSize": "13px",
"fontWeight": "400",
"lineHeight": "19px",
"background": "rgb(42, 44, 49)",
"padding": "12px 16px",
"borderRadius": "16px",
"border": "0px none rgb(210, 211, 224)",
"overflow": "auto",
"maxHeight": "300px",
"width": 752,
"height": 77,
"scrollHeight": 77,
"clientHeight": 77
},
{
"selector": ".question-answer-transcript__question",
"fontSize": "14px",
"fontWeight": "400",
"lineHeight": "24.5px",
"background": "rgba(0, 0, 0, 0)",
"padding": "0px",
"borderRadius": "0px",
"border": "0px none rgb(160, 160, 160)",
"overflow": "visible",
"maxHeight": "none",
"width": 720,
"height": 24.5,
"scrollHeight": 25,
"clientHeight": 25
},
{
"selector": ".question-answer-transcript__answer",
"fontSize": "14px",
"fontWeight": "400",
"lineHeight": "24.5px",
"background": "rgba(0, 0, 0, 0)",
"padding": "0px",
"borderRadius": "0px",
"border": "0px none rgb(210, 211, 224)",
"overflow": "visible",
"maxHeight": "none",
"width": 720,
"height": 24.5,
"scrollHeight": 25,
"clientHeight": 25
}
]
},
"narrow": {
"theme": "light",
"titleOutsideContent": true,
"cardCount": 1,
"rawAnswerVisible": false,
"horizontalOverflow": false,
"styles": [
{
"selector": ".ask-user-question--completed",
"fontSize": "13px",
"fontWeight": "400",
"lineHeight": "19px",
"background": "rgba(0, 0, 0, 0)",
"padding": "2px 0px",
"borderRadius": "0px",
"border": "0px none rgb(51, 51, 51)",
"overflow": "visible",
"maxHeight": "none",
"width": 446,
"height": 117.5,
"scrollHeight": 118,
"clientHeight": 118
},
{
"selector": ".ask-user-question__header",
"fontSize": "14px",
"fontWeight": "400",
"lineHeight": "24.5px",
"background": "rgba(0, 0, 0, 0)",
"padding": "0px",
"borderRadius": "0px",
"border": "0px none rgba(0, 0, 0, 0.5)",
"overflow": "visible",
"maxHeight": "none",
"width": 446,
"height": 24.5,
"scrollHeight": 25,
"clientHeight": 25
},
{
"selector": ".ask-user-question__content",
"fontSize": "13px",
"fontWeight": "400",
"lineHeight": "19px",
"background": "rgb(242, 242, 242)",
"padding": "12px 16px",
"borderRadius": "16px",
"border": "0px none rgb(51, 51, 51)",
"overflow": "auto",
"maxHeight": "300px",
"width": 446,
"height": 77,
"scrollHeight": 77,
"clientHeight": 77
},
{
"selector": ".question-answer-transcript__question",
"fontSize": "14px",
"fontWeight": "400",
"lineHeight": "24.5px",
"background": "rgba(0, 0, 0, 0)",
"padding": "0px",
"borderRadius": "0px",
"border": "0px none rgb(128, 128, 128)",
"overflow": "visible",
"maxHeight": "none",
"width": 414,
"height": 24.5,
"scrollHeight": 25,
"clientHeight": 25
},
{
"selector": ".question-answer-transcript__answer",
"fontSize": "14px",
"fontWeight": "400",
"lineHeight": "24.5px",
"background": "rgba(0, 0, 0, 0)",
"padding": "0px",
"borderRadius": "0px",
"border": "0px none rgb(51, 51, 51)",
"overflow": "visible",
"maxHeight": "none",
"width": 414,
"height": 24.5,
"scrollHeight": 25,
"clientHeight": 25
}
]
},
"long": {
"theme": "light",
"titleOutsideContent": true,
"cardCount": 1,
"rawAnswerVisible": false,
"horizontalOverflow": false,
"styles": [
{
"selector": ".ask-user-question--completed",
"fontSize": "13px",
"fontWeight": "400",
"lineHeight": "19px",
"background": "rgba(0, 0, 0, 0)",
"padding": "2px 0px",
"borderRadius": "0px",
"border": "0px none rgb(51, 51, 51)",
"overflow": "visible",
"maxHeight": "none",
"width": 446,
"height": 340.5,
"scrollHeight": 341,
"clientHeight": 341
},
{
"selector": ".ask-user-question__header",
"fontSize": "14px",
"fontWeight": "400",
"lineHeight": "24.5px",
"background": "rgba(0, 0, 0, 0)",
"padding": "0px",
"borderRadius": "0px",
"border": "0px none rgba(0, 0, 0, 0.5)",
"overflow": "visible",
"maxHeight": "none",
"width": 446,
"height": 24.5,
"scrollHeight": 25,
"clientHeight": 25
},
{
"selector": ".ask-user-question__content",
"fontSize": "13px",
"fontWeight": "400",
"lineHeight": "19px",
"background": "rgb(242, 242, 242)",
"padding": "12px 16px",
"borderRadius": "16px",
"border": "0px none rgb(51, 51, 51)",
"overflow": "auto",
"maxHeight": "300px",
"width": 446,
"height": 300,
"scrollHeight": 5688,
"clientHeight": 300
},
{
"selector": ".question-answer-transcript__question",
"fontSize": "14px",
"fontWeight": "400",
"lineHeight": "24.5px",
"background": "rgba(0, 0, 0, 0)",
"padding": "0px",
"borderRadius": "0px",
"border": "0px none rgb(128, 128, 128)",
"overflow": "visible",
"maxHeight": "none",
"width": 404,
"height": 98,
"scrollHeight": 98,
"clientHeight": 98
},
{
"selector": ".question-answer-transcript__answer",
"fontSize": "14px",
"fontWeight": "400",
"lineHeight": "24.5px",
"background": "rgba(0, 0, 0, 0)",
"padding": "0px",
"borderRadius": "0px",
"border": "0px none rgb(51, 51, 51)",
"overflow": "visible",
"maxHeight": "none",
"width": 404,
"height": 122.5,
"scrollHeight": 123,
"clientHeight": 123
}
]
},
"innerQuestionPreserved": "true",
"rendererErrors": []
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

@@ -0,0 +1,27 @@
[
{
"Command": "npm run test:conversation",
"ExitCode": 0,
"Log": ".tmp\\b01-validation\\test-conversation.log"
},
{
"Command": "npm run test:workbuddy-import",
"ExitCode": 0,
"Log": ".tmp\\b01-validation\\test-workbuddy-import.log"
},
{
"Command": "npm run test:artifacts",
"ExitCode": 0,
"Log": ".tmp\\b01-validation\\test-artifacts.log"
},
{
"Command": "npm run test:fold-summary",
"ExitCode": 1,
"Log": ".tmp\\b01-validation\\test-fold-summary.log"
},
{
"Command": "npm run check:tokens",
"ExitCode": 1,
"Log": ".tmp\\b01-validation\\check-tokens.log"
}
]
@@ -0,0 +1,171 @@
{
"beforeSha": "f2b7c07",
"afterSha": "51531dc",
"beforeViolations": [
{
"type": "new-file",
"path": "src/renderer/src/capabilities/recommended-flow.css",
"class": "local",
"metrics": [
{
"metric": "barePx",
"current": 22
}
]
},
{
"type": "new-file",
"path": "src/renderer/src/capabilities/skill-detail-shell.css",
"class": "local",
"metrics": [
{
"metric": "barePx",
"current": 21
}
]
},
{
"type": "regression",
"path": "src/renderer/src/capabilities/skills-host.css",
"class": "local",
"increases": [
{
"metric": "barePx",
"from": 25,
"to": 46
}
]
},
{
"type": "new-file",
"path": "src/renderer/src/workbuddy/composer/capability-picker.css",
"class": "local",
"metrics": [
{
"metric": "bareHex",
"current": 26
},
{
"metric": "barePx",
"current": 48
}
]
},
{
"type": "regression",
"path": "src/renderer/src/workbuddy/composer/composer.css",
"class": "local",
"increases": [
{
"metric": "bareHex",
"from": 23,
"to": 38
},
{
"metric": "barePx",
"from": 83,
"to": 139
}
]
},
{
"type": "new-file",
"path": "src/renderer/src/workbuddy/composer/prompt-queue.css",
"class": "local",
"metrics": [
{
"metric": "bareHex",
"current": 8
},
{
"metric": "barePx",
"current": 35
}
]
}
],
"afterViolations": [
{
"type": "new-file",
"path": "src/renderer/src/capabilities/recommended-flow.css",
"class": "local",
"metrics": [
{
"metric": "barePx",
"current": 22
}
]
},
{
"type": "new-file",
"path": "src/renderer/src/capabilities/skill-detail-shell.css",
"class": "local",
"metrics": [
{
"metric": "barePx",
"current": 21
}
]
},
{
"type": "regression",
"path": "src/renderer/src/capabilities/skills-host.css",
"class": "local",
"increases": [
{
"metric": "barePx",
"from": 25,
"to": 46
}
]
},
{
"type": "new-file",
"path": "src/renderer/src/workbuddy/composer/capability-picker.css",
"class": "local",
"metrics": [
{
"metric": "bareHex",
"current": 26
},
{
"metric": "barePx",
"current": 48
}
]
},
{
"type": "regression",
"path": "src/renderer/src/workbuddy/composer/composer.css",
"class": "local",
"increases": [
{
"metric": "bareHex",
"from": 23,
"to": 38
},
{
"metric": "barePx",
"from": 83,
"to": 139
}
]
},
{
"type": "new-file",
"path": "src/renderer/src/workbuddy/composer/prompt-queue.css",
"class": "local",
"metrics": [
{
"metric": "bareHex",
"current": 8
},
{
"metric": "barePx",
"current": 35
}
]
}
],
"equal": true
}
@@ -0,0 +1,105 @@
{
"testedRevision": "51531dcae8d8ade85db9e203bc8c0f712805b2ae",
"runtime": {
"node": "v24.21.0",
"platform": "win32",
"react": "19.3.0",
"jsdom": "30.1.3"
},
"input": {
"id": "b01-typed-part-repro",
"role": "assistant",
"createdAt": 1,
"content": "Draft oneDraft two",
"status": "streaming",
"parts": [
{
"type": "text",
"text": "Draft one"
},
{
"type": "reasoning",
"id": "r",
"text": "Thought",
"finished": true
},
{
"type": "text",
"text": "Draft two"
},
{
"type": "plan",
"plan": {
"id": "p",
"title": "Plan",
"steps": []
}
},
{
"type": "task",
"task": {
"id": "x",
"title": "Task",
"status": "success",
"summary": "Task result"
}
}
]
},
"terminalEvent": {
"type": "done",
"content": "Corrected final prose",
"tools": [],
"turnDurationMs": 1000
},
"outputParts": [
{
"type": "text",
"text": "Corrected final prose"
},
{
"type": "reasoning",
"id": "r",
"text": "Thought",
"finished": true
},
{
"type": "plan",
"plan": {
"id": "p",
"title": "Plan",
"steps": []
}
},
{
"type": "task",
"task": {
"id": "x",
"title": "Task",
"status": "success",
"summary": "Task result"
}
}
],
"ariaExpanded": {
"initially": {
"plan": "true",
"task": "true"
},
"afterUserCollapse": {
"plan": "false",
"task": "false"
},
"afterTerminalCorrection": {
"plan": "true",
"task": "true"
}
},
"expectedAfterTerminalCorrection": {
"plan": "false",
"task": "false"
},
"retainsUserChoices": false,
"verificationMethod": "Bundled fixed 51531dc checkout product modules",
"baselineModulesLoaded": []
}
@@ -0,0 +1,113 @@
{
"testedRevision": "37ddb2ce24c23d1fab7d0609a62901cc666d4975",
"runtime": {
"node": "v24.21.0",
"platform": "win32",
"react": "19.3.0",
"jsdom": "30.1.3"
},
"input": {
"id": "b01-typed-part-repro",
"role": "assistant",
"createdAt": 1,
"content": "Draft oneDraft two",
"status": "streaming",
"parts": [
{
"type": "text",
"text": "Draft one"
},
{
"type": "reasoning",
"id": "r",
"text": "Thought",
"finished": true
},
{
"type": "text",
"text": "Draft two"
},
{
"type": "plan",
"plan": {
"id": "p",
"title": "Plan",
"steps": []
}
},
{
"type": "task",
"task": {
"id": "x",
"title": "Task",
"status": "success",
"summary": "Task result"
}
}
]
},
"terminalEvent": {
"type": "done",
"content": "Corrected final prose",
"tools": [],
"turnDurationMs": 1000
},
"outputParts": [
{
"type": "text",
"text": "Corrected final prose"
},
{
"type": "reasoning",
"id": "r",
"text": "Thought",
"finished": true
},
{
"type": "plan",
"plan": {
"id": "p",
"title": "Plan",
"steps": []
}
},
{
"type": "task",
"task": {
"id": "x",
"title": "Task",
"status": "success",
"summary": "Task result"
}
}
],
"ariaExpanded": {
"initially": {
"plan": "true",
"task": "true"
},
"afterUserCollapse": {
"plan": "false",
"task": "false"
},
"afterTerminalCorrection": {
"plan": "true",
"task": "true"
}
},
"expectedAfterTerminalCorrection": {
"plan": "false",
"task": "false"
},
"retainsUserChoices": false,
"verificationMethod": "Bundled every changed React module from git show 37ddb2c; remaining product code equals tested checkout for this path",
"baselineModulesLoaded": [
"src/renderer/src/components/MessageBubble.tsx",
"src/renderer/src/workbuddy/conversation/CompletedFold.tsx",
"src/renderer/src/workbuddy/conversation/SourceToolHeader.tsx",
"src/renderer/src/workbuddy/conversation/SpecializedBlocks.tsx",
"src/renderer/src/workbuddy/conversation/ToolCallRenderer.tsx",
"src/renderer/src/workbuddy/conversation/AskUserQuestion.tsx",
"src/renderer/src/workbuddy/conversation/ToolCall.tsx"
]
}
@@ -0,0 +1,96 @@
/** Independent read-only acceptance probe. Writes only .tmp output; no SDK/Electron/services. */
import { build } from 'esbuild'
import { spawnSync, execFileSync } from 'node:child_process'
import { writeFileSync, mkdirSync } from 'node:fs'
import path from 'node:path'
const baseline = process.argv.includes('--baseline')
mkdirSync('.tmp/b01-readonly-review', {recursive:true})
const baselineModulesLoaded = []
const checkoutRevision = execFileSync('git', ['rev-parse', 'HEAD'], {encoding:'utf8'}).trim()
if (checkoutRevision !== '51531dcae8d8ade85db9e203bc8c0f712805b2ae') throw new Error('Run in the fixed 51531dc acceptance checkout')
const revision = baseline ? '37ddb2ce24c23d1fab7d0609a62901cc666d4975' : '51531dcae8d8ade85db9e203bc8c0f712805b2ae'
const baselinePaths = new Set([
'src/renderer/src/components/MessageBubble.tsx',
'src/renderer/src/workbuddy/conversation/CompletedFold.tsx',
'src/renderer/src/workbuddy/conversation/SpecializedBlocks.tsx',
'src/renderer/src/workbuddy/conversation/SourceToolHeader.tsx',
'src/renderer/src/workbuddy/conversation/ToolCall.tsx',
'src/renderer/src/workbuddy/conversation/ToolCallRenderer.tsx',
'src/renderer/src/workbuddy/conversation/AskUserQuestion.tsx'
])
const source=String.raw`
import assert from 'node:assert/strict'
import {createRequire} from 'node:module'
const domModule=process.env.YCODE_TEST_DOM_MODULE||process.cwd()+'/.tmp/b01-dom/node_modules/jsdom'
const {JSDOM}=createRequire(process.cwd()+'/package.json')(domModule)
const dom=new JSDOM('<!doctype html><html><body><main id="root"></main></body></html>',{pretendToBeVisual:true,url:'http://localhost/'})
for(const key of ['window','document','Node','Element','HTMLElement','MouseEvent','KeyboardEvent','Event'])Object.defineProperty(globalThis,key,{value:dom.window[key],configurable:true})
Object.defineProperty(globalThis,'navigator',{value:dom.window.navigator,configurable:true})
Object.assign(globalThis,{IS_REACT_ACT_ENVIRONMENT:true})
const {act}=require('react') as typeof import('react')
const {createRoot}=require('react-dom/client') as typeof import('react-dom/client')
const MessageBubble=require('./src/renderer/src/components/MessageBubble').default
const {applyAssistantEvent}=require('./src/shared/message-parts')
const root=createRoot(document.querySelector('#root')!)
const selectors={plan:'.cb-plan-header-left',task:'.cb-task-result-item-title'}
const get=(selector:string)=>{const node=document.querySelector(selector);assert.ok(node,selector);return node}
const state=()=>Object.fromEntries(Object.entries(selectors).map(([kind,selector])=>[kind,get(selector).getAttribute('aria-expanded')]))
async function render(message:any){await act(async()=>root.render(<MessageBubble message={message}/>))}
async function click(selector:string){await act(async()=>get(selector).dispatchEvent(new MouseEvent('click',{bubbles:true})))}
async function main(){
let message:any={id:'b01-typed-part-repro',role:'assistant',createdAt:1,content:'',status:'streaming',parts:[]}
const streamingEvents=[
{type:'text',delta:'Draft one'},
{type:'part',part:{type:'reasoning',id:'r',text:'Thought',finished:true}},
{type:'text',delta:'Draft two'},
{type:'part',part:{type:'plan',plan:{id:'p',title:'Plan',steps:[]}}},
{type:'part',part:{type:'task',task:{id:'x',title:'Task',status:'success',summary:'Task result'}}}
]
for(const event of streamingEvents)message=applyAssistantEvent(message,event)
const input=JSON.parse(JSON.stringify(message))
await render(message)
const initially=state()
await click(selectors.plan);await click(selectors.task)
const selected=state()
assert.deepEqual(selected,{plan:'false',task:'false'})
const terminalEvent={type:'done',content:'Corrected final prose',tools:[],turnDurationMs:1000}
const finished=applyAssistantEvent(message,terminalEvent)
await render(finished)
const after=state()
const result={
testedRevision:process.env.B01_PROBE_REVISION,
runtime:{node:process.version,platform:process.platform,react:require('react/package.json').version,jsdom:createRequire(process.cwd()+'/package.json')(domModule+'/package.json').version},
input,terminalEvent,outputParts:finished.parts,
ariaExpanded:{initially,afterUserCollapse:selected,afterTerminalCorrection:after},
expectedAfterTerminalCorrection:selected,
retainsUserChoices:JSON.stringify(selected)===JSON.stringify(after)
}
console.log(JSON.stringify(result,null,2))
await act(async()=>root.unmount());dom.window.close()
}
main().then(()=>process.exit(0)).catch(error=>{console.error(error);dom.window.close();process.exit(1)})
`
const outfile=`.tmp/b01-readonly-review/typed-part-repro-${baseline?'baseline':'51531dc'}.cjs`
await build({
stdin:{contents:source,sourcefile:'b01-typed-part-repro.tsx',loader:'tsx',resolveDir:process.cwd()},
outfile,bundle:true,platform:'node',format:'cjs',jsx:'automatic',loader:{'.css':'empty'},logLevel:'warning',
plugins:baseline?[{name:'read-baseline-product-modules',setup(build){build.onLoad({filter:/\.tsx$/},args=>{
const relative=path.relative(process.cwd(),args.path).split(path.sep).join('/')
if(!baselinePaths.has(relative))return
baselineModulesLoaded.push(relative)
return {contents:execFileSync('git',['show',`${revision}:${relative}`],{encoding:'utf8'}),loader:'tsx',resolveDir:path.dirname(args.path)}
})}}]:[]
})
const result=spawnSync(process.execPath,[outfile],{encoding:'utf8',timeout:120000,env:{...process.env,B01_PROBE_REVISION:revision}})
const output=`.tmp/b01-readonly-review/typed-part-repro-${baseline?'baseline':'51531dc'}.json`
if(result.stderr)process.stderr.write(result.stderr)
if(result.status!==0){process.stderr.write(result.stdout);throw result.error||new Error(`probe exited ${result.status}`)}
if(baseline && baselineModulesLoaded.length !== baselinePaths.size) throw new Error('Baseline override did not load every changed React module')
const parsed=JSON.parse(result.stdout)
parsed.verificationMethod = baseline ? 'Bundled every changed React module from git show 37ddb2c; remaining product code equals tested checkout for this path' : 'Bundled fixed 51531dc checkout product modules'
parsed.baselineModulesLoaded=baselineModulesLoaded
writeFileSync(output,JSON.stringify(parsed,null,2)+'\n')
console.log(JSON.stringify({evidence:output,testedRevision:revision,ariaExpanded:parsed.ariaExpanded,inputParts:parsed.input.parts.map(part=>part.type),outputParts:parsed.outputParts.map(part=>part.type),retainsUserChoices:parsed.retainsUserChoices},null,2))
if(process.argv.includes('--assert') && !parsed.retainsUserChoices) process.exitCode=1