Merge remote-tracking branch 'gitea/master'
No files matched your search
@@ -0,0 +1,25 @@
|
||||
|
||||
> 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":5.6311999999999784,"storeHydrationMs":0.28300000000001546,"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: 34 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
|
||||
completed-fold-native-identity: real reducer done correction, native IDs, insertion/reorder, repeated outer toggles, message isolation and legacy fallback passed
|
||||
Permission intercept DOM: 14 checks passed (not pixel/SDK verification)
|
||||
{"checks":37,"passed":true,"scope":"Isolated React DOM and CSS contracts; no native keyboard/layout/pixel acceptance"}
|
||||
|
After Width: | Height: | Size: 65 KiB |
@@ -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 400ms
|
||||
vite v8.3.4 building ssr environment for production...
|
||||
transforming...
|
||||
✓ 2 modules transformed.
|
||||
rendering chunks...
|
||||
out/preload/index.cjs 15.89 kB
|
||||
|
||||
✓ built in 23ms
|
||||
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-DH7L1ZF2.css 259.93 kB
|
||||
out/renderer/assets/index-CvX53u9X.css 2,683.62 kB
|
||||
out/renderer/assets/pie-WAS4IAKB-1a9lbjhh.js 0.11 kB
|
||||
out/renderer/assets/info-A6RAGUB7-Dsq8pPGK.js 0.11 kB
|
||||
out/renderer/assets/radar-RG4KPBEZ-BwNT2qWb.js 0.11 kB
|
||||
out/renderer/assets/packet-AYTQ26CC-C-iOIVQo.js 0.11 kB
|
||||
out/renderer/assets/cynefin-OW5HDTMX-CTYbUR58.js 0.11 kB
|
||||
out/renderer/assets/treemap-WGGIJYW6-CWek0LQD.js 0.11 kB
|
||||
out/renderer/assets/wardley-WFR3VGLG-BnrEXTnU.js 0.11 kB
|
||||
out/renderer/assets/gitGraph-4MIJSDKK-NHpEvzKf.js 0.12 kB
|
||||
out/renderer/assets/railroad-74A4TZTK-CyYHr3KR.js 0.12 kB
|
||||
out/renderer/assets/treeView-Q6P3EWNA-CzdWA6Mh.js 0.12 kB
|
||||
out/renderer/assets/railroad-peg-WCYAUIDC-DyA9P8dX.js 0.12 kB
|
||||
out/renderer/assets/architecture-7GRP2DOG-VyF0wzFW.js 0.12 kB
|
||||
out/renderer/assets/railroad-abnf-HS5TGJTU-DWOH6PDU.js 0.12 kB
|
||||
out/renderer/assets/railroad-ebnf-LZEXJU2U-B8jXqV-T.js 0.12 kB
|
||||
out/renderer/assets/eventmodeling-NTZA5JFV-Dmu4IHsI.js 0.12 kB
|
||||
out/renderer/assets/array-75Ih5Qg4.js 0.16 kB
|
||||
out/renderer/assets/channel-Bye_tFRR.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-BZrFLTC0.js 0.59 kB
|
||||
out/renderer/assets/prism-json-DxLGXN1o.js 0.62 kB
|
||||
out/renderer/assets/codeowners-C7Y3CTAA-BmB2_gvY.js 0.75 kB
|
||||
out/renderer/assets/prism-clike-BcH_eOfE.js 0.89 kB
|
||||
out/renderer/assets/tsv-DVa1_Ovr-BeS2kE5e.js 0.94 kB
|
||||
out/renderer/assets/shellsession-C0HwRpr0-B630Ulnl.js 0.96 kB
|
||||
out/renderer/assets/javascript-DGySzfUB-CQaVVFGk.js 0.99 kB
|
||||
out/renderer/assets/settings-CauUETdq.js 1.01 kB
|
||||
out/renderer/assets/infoDiagram-27XIBGKW-Bulf8uQR.js 1.09 kB
|
||||
out/renderer/assets/swimlanesDiagram-VR7AAH4N-BSjvAxa9.js 1.09 kB
|
||||
out/renderer/assets/html-derivative-D3Jld805-D0QQ5MTi.js 1.10 kB
|
||||
out/renderer/assets/prism-go-Cw8Jg9YT.js 1.11 kB
|
||||
out/renderer/assets/classDiagram-ZZMXUADV-B5IckmXo.js 1.16 kB
|
||||
out/renderer/assets/classDiagram-v2-VYDZK3BY-pNfhH-ZZ.js 1.16 kB
|
||||
out/renderer/assets/stateDiagram-v2-MP3YSRHH-DhZlJKgF.js 1.16 kB
|
||||
out/renderer/assets/qmldir-DIq06gp2-CFVtueeV.js 1.20 kB
|
||||
out/renderer/assets/git-rebase-CgwCWTNR-Cpss9r90.js 1.23 kB
|
||||
out/renderer/assets/chunk-POPQ4Y6H-7RcIGbEp.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-DKrQczXm.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-s2uHofP2.js 1.47 kB
|
||||
out/renderer/assets/AgentsSettingsPanel-CMYBwUKH.js 1.56 kB
|
||||
out/renderer/assets/xsl-DV28r3Jw-B8bWzO_h.js 1.59 kB
|
||||
out/renderer/assets/dotenv-DXc2fSbR-CUbEjgJq.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-DAUou2oc.js 1.71 kB
|
||||
out/renderer/assets/prism-css-Cmyw76Xa.js 1.73 kB
|
||||
out/renderer/assets/ini-DMSv7OY2-xgSkktY4.js 1.74 kB
|
||||
out/renderer/assets/rolldown-runtime-BJCASTsb-DKQFAHUF.js 1.78 kB
|
||||
out/renderer/assets/line-D_yBR5ay.js 1.89 kB
|
||||
out/renderer/assets/fortran-fixed-form-D91DiZLE-NxoUlVkB.js 1.91 kB
|
||||
out/renderer/assets/docker-B7J3eHK7-C3FNXPS_.js 1.96 kB
|
||||
out/renderer/assets/hxml-938TheZ7-pE5ojWPT.js 1.97 kB
|
||||
out/renderer/assets/desktop-BwI-o01e-Da9rFJOd.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-CLkRQ9Hf.js 2.40 kB
|
||||
out/renderer/assets/prism-kotlin-Bc2NQYRR.js 2.43 kB
|
||||
out/renderer/assets/jssm-CIisorE2-ggX0kbSA.js 2.44 kB
|
||||
out/renderer/assets/prism-python-CTkfasgb.js 2.48 kB
|
||||
out/renderer/assets/reg-mzCtpvUf-BHC3bGU6.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-Wi49q5c7.js 2.61 kB
|
||||
out/renderer/assets/edge-DcEd3r9D-ZJX3cnY_.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-DgJJp7nh.js 2.78 kB
|
||||
out/renderer/assets/railroadDiagram-O6MQD6OU-DqFNIv2D.js 2.78 kB
|
||||
out/renderer/assets/diff-lAxbRYdS--5gtlmD4.js 2.79 kB
|
||||
out/renderer/assets/hy-BKymZdC0-4uNvYh3y.js 2.86 kB
|
||||
out/renderer/assets/dockerfile-CnkhFuxG-CfXHMZr-.js 3.01 kB
|
||||
out/renderer/assets/openscad-BRTETpP_-BThzc9qL.js 3.03 kB
|
||||
out/renderer/assets/pascaligo-DI1dd1Zd-D23AoFdQ.js 3.03 kB
|
||||
out/renderer/assets/log-Cn1ZE6kb-BE4srnlV.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-C7ph_xMt.js 3.12 kB
|
||||
out/renderer/assets/cairo-D_LzMZ4I-C21twps2.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-DsDdtWdB.js 3.20 kB
|
||||
out/renderer/assets/jsonl-Cn_fzNA8-cIG9lf61.js 3.21 kB
|
||||
out/renderer/assets/json-CKKhFIOr-DuiQFrCF.js 3.29 kB
|
||||
out/renderer/assets/mips-Df5bwPtM-DJn7b529.js 3.29 kB
|
||||
out/renderer/assets/jsonc-Bf3Xcgeq-BGBJ2TDY.js 3.31 kB
|
||||
out/renderer/assets/logo-BxqPaaID-DK9gUnx4.js 3.33 kB
|
||||
out/renderer/assets/abnfDiagram-VCTEODGH-BcjOgNTo.js 3.36 kB
|
||||
out/renderer/assets/go-BejFoqvR-BnGoIlsY.js 3.42 kB
|
||||
out/renderer/assets/po-DI6EG-tz-DIkePE8T.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-Ci88mndw.js 3.45 kB
|
||||
out/renderer/assets/mipsasm-U3SQfJCQ-kat_Vj1M.js 3.46 kB
|
||||
out/renderer/assets/sophia-foSZ3xPI-DGYIHURw.js 3.47 kB
|
||||
out/renderer/assets/tasl-C74Cvwdf-se1Ptgso.js 3.49 kB
|
||||
out/renderer/assets/genie-CjS3m_gh-DHydh9_z.js 3.56 kB
|
||||
out/renderer/assets/prism-swift-xplGsQ1n.js 3.56 kB
|
||||
out/renderer/assets/vala-DMgevQbf-ByJQiTkp.js 3.57 kB
|
||||
out/renderer/assets/pegDiagram-XKGWAZYB-C8lDnYYb.js 3.59 kB
|
||||
out/renderer/assets/rel-D6dNeDZv-CUAJzmkw.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-HlyjybPv.js 3.65 kB
|
||||
out/renderer/assets/ebnfDiagram-PWID7BFC-CcIdRN64.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-CSIxpenx.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-BCOQigl1.js 3.81 kB
|
||||
out/renderer/assets/splunk-BdqSfgpd-BtOEh0Mo.js 3.81 kB
|
||||
out/renderer/assets/jsonnet-Bn71vRY8-QjPNMWdY.js 3.82 kB
|
||||
out/renderer/assets/ssh-config-BO51LXox-DkFt_ueS.js 3.82 kB
|
||||
out/renderer/assets/bicep-DujF3y-4-DHww3ZLF.js 3.87 kB
|
||||
out/renderer/assets/narrat-DdgkgBr0-CSyxDqta.js 3.87 kB
|
||||
out/renderer/assets/redis-Bo427DT4-DBDF4ZWx.js 3.88 kB
|
||||
out/renderer/assets/turtle-DAmmiOda-C48PN72o.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-BG7UwPdX.js 4.11 kB
|
||||
out/renderer/assets/zenscript-XbBI4c9W-C-aTQo6e.js 4.12 kB
|
||||
out/renderer/assets/glsl-CZF-bvQV-UaBdSZy0.js 4.14 kB
|
||||
out/renderer/assets/shell-DGp7WuK3-X00pamiI.js 4.15 kB
|
||||
out/renderer/assets/gn-DJxfXStl-BD_k0CWf.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-DLkP_pAB.js 4.27 kB
|
||||
out/renderer/assets/AppearanceSettingsPanel-B_352Jrg.js 4.28 kB
|
||||
out/renderer/assets/hurl-CDXCvJNd-Xd5k76nE.js 4.28 kB
|
||||
out/renderer/assets/cypher-CjfQI0Y9-9gjOyi6P.js 4.33 kB
|
||||
out/renderer/assets/pascal-CLPA94yO-C11lM2uy.js 4.35 kB
|
||||
out/renderer/assets/powershell-CaPzBwIT-C9KgMPOP.js 4.50 kB
|
||||
out/renderer/assets/tcl-D-NiFh9X-CYwv4uzi.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-DSHWRdSZ.js 4.72 kB
|
||||
out/renderer/assets/nextflow-DVTlkzu9-Cis-JUmb.js 4.75 kB
|
||||
out/renderer/assets/http-DhxVjYFh-CjwVOaui.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-DygHL4ZA.js 4.87 kB
|
||||
out/renderer/assets/prism-ruby-PgHh3fQm.js 4.91 kB
|
||||
out/renderer/assets/fennel-COJTUo2O-DYh8-dep.js 4.97 kB
|
||||
out/renderer/assets/bibtex-yEKRWsaj-xHthw1sC.js 5.00 kB
|
||||
out/renderer/assets/coffee-CcgZJF1B-DkN4xoBX.js 5.04 kB
|
||||
out/renderer/assets/llvm-DiFwU398-BQjCVu39.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-yP3bMkfO.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-B8x_JL1P.js 5.54 kB
|
||||
out/renderer/assets/restructuredtext-D2p7PcFG-DDHAm_JI.js 5.55 kB
|
||||
out/renderer/assets/dax-CmrIxjmL-CDTyHmZ_.js 5.56 kB
|
||||
out/renderer/assets/gdresource-4lq4eh4q-CjhvlVte.js 5.56 kB
|
||||
out/renderer/assets/qml-D6gd64uC-_ykXVPoZ.js 5.57 kB
|
||||
out/renderer/assets/bicep-wTwvD1CI-C568hcwN.js 5.58 kB
|
||||
out/renderer/assets/cssMode-Z-o80aSY-Crw7T5pi.js 5.59 kB
|
||||
out/renderer/assets/awk-DTjcVAOD-BmfaVU4m.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-C5vNmx0q.js 5.81 kB
|
||||
out/renderer/assets/swift-C3A42nmX-BBVToPkN.js 5.83 kB
|
||||
out/renderer/assets/xml-bIkPj5aH-Bx1v5u6-.js 5.89 kB
|
||||
out/renderer/assets/ecl-CYzojQ6a-C8m0_osY.js 5.91 kB
|
||||
out/renderer/assets/jinja-Dl-Ji_JA-BBL5sTd0.js 5.92 kB
|
||||
out/renderer/assets/lean-Cu10prRO-BUTVAAdc.js 6.03 kB
|
||||
out/renderer/assets/yaml-GEMDST6R-D-0AGe4F.js 6.09 kB
|
||||
out/renderer/assets/moonbit-B8-g2u5v-CGBFUznC.js 6.10 kB
|
||||
out/renderer/assets/powerquery-tKWDTKOo-CejxekA_.js 6.11 kB
|
||||
out/renderer/assets/SourceCodePreview-Czir01Qu.js 6.11 kB
|
||||
out/renderer/assets/python-CHafhQyI-DmJIfgbV.js 6.14 kB
|
||||
out/renderer/assets/shaderlab-Df7nOKvI-0G488FSx.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-D5ytx6Ln.js 6.29 kB
|
||||
out/renderer/assets/htmlMode-BDZbYlMj-2xcr-6-m.js 6.40 kB
|
||||
out/renderer/assets/red-CYaKK_PD-iiAMl8iL.js 6.45 kB
|
||||
out/renderer/assets/min-dark-DGPfDRqJ-gZu6HtcU.js 6.48 kB
|
||||
out/renderer/assets/pug-EKWpNZSi-oQ708bsr.js 6.51 kB
|
||||
out/renderer/assets/prisma-CdZyz3OC-ChFCtYaa.js 6.53 kB
|
||||
out/renderer/assets/gdshader-ryZhEIxg-DpcQqwXn.js 6.55 kB
|
||||
out/renderer/assets/ara-_lrJyEFe-qigo-wGx.js 6.56 kB
|
||||
out/renderer/assets/clojure-WSq30mUj-Bswhoa1y.js 6.61 kB
|
||||
out/renderer/assets/toml-DPP887_3-aOuHoLTy.js 6.62 kB
|
||||
out/renderer/assets/postcss-CcIp2ENG-DpmxBCXW.js 6.64 kB
|
||||
out/renderer/assets/verilog-bragEGMk-CemzLugw.js 6.64 kB
|
||||
out/renderer/assets/solarized-light-BIMszn7B-vPMkTTwP.js 6.68 kB
|
||||
out/renderer/assets/cypher-COYrq2Yy-BtVrfsLp.js 6.75 kB
|
||||
out/renderer/assets/arc-LpCwTDer.js 6.75 kB
|
||||
out/renderer/assets/proto-CQIfhs_g-Deqofbl3.js 6.77 kB
|
||||
out/renderer/assets/smalltalk-BLGdLDJX-BKGgemER.js 6.79 kB
|
||||
out/renderer/assets/vb-D1Cw85Ss-BSz-V9M4.js 6.86 kB
|
||||
out/renderer/assets/talonscript-DA9pg7Tj-CPXKQ95R.js 6.96 kB
|
||||
out/renderer/assets/r-Bb2Mu7Fo-Dq0URONw.js 7.00 kB
|
||||
out/renderer/assets/solarized-dark-D_I-4EGa-BZbeAUhW.js 7.04 kB
|
||||
out/renderer/assets/diagram-Z3DM3KII-CRFA9WLO.js 7.08 kB
|
||||
out/renderer/assets/riscv-CQHqXr1Z-BFlZFId-.js 7.11 kB
|
||||
out/renderer/assets/soy-DybHqX1A-DOhErZPj.js 7.15 kB
|
||||
out/renderer/assets/min-light-BF0EjVgr-DvViuJW_.js 7.16 kB
|
||||
out/renderer/assets/scheme-Dn0tgEWN-BK64z0tZ.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-B3FZWMVz.js 7.48 kB
|
||||
out/renderer/assets/mdx-Bdu4uO-C-BrzgNjCw.js 7.58 kB
|
||||
out/renderer/assets/qss-DkzwWM0J-04JPp7d-.js 7.67 kB
|
||||
out/renderer/assets/html-DKbmsqz6-Cnkf6ew3.js 7.69 kB
|
||||
out/renderer/assets/systemd-CS6mVasZ-HbzlQlDs.js 8.07 kB
|
||||
out/renderer/assets/monokai-CYqILLdj-CEXuJ8HO.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_-C4Qk7OPN.js 8.42 kB
|
||||
out/renderer/assets/regexp-Dv0OUts_-BqK6b4KR.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-frBdohcC.js 8.71 kB
|
||||
out/renderer/assets/vue-html-DvuHo2mm-b7I-opwf.js 8.71 kB
|
||||
out/renderer/assets/haml-CIYwkycC-3fSMp7m2.js 8.81 kB
|
||||
out/renderer/assets/scss-CLoW-2dr-BBC_GO_6.js 8.86 kB
|
||||
out/renderer/assets/dart-CBkkDIWs-ezKLFP5s.js 8.94 kB
|
||||
out/renderer/assets/horizon-CELVL8Ba-x0NmpRb6.js 8.97 kB
|
||||
out/renderer/assets/horizon-bright-DBDyMeUQ-Bhh-QDk3.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-DaQVAww0.js 9.18 kB
|
||||
out/renderer/assets/andromeeda--j5Bq-48-DxyWS_fJ.js 9.21 kB
|
||||
out/renderer/assets/dark-plus-FAPM6M6c-DKexDF--.js 9.29 kB
|
||||
out/renderer/assets/sas-BQIEUTPQ-Bwx-ZPYU.js 9.31 kB
|
||||
out/renderer/assets/slack-dark-nDxLkSCC-C5pzIEPN.js 9.31 kB
|
||||
out/renderer/assets/perl-Bec3eWyr-CDmSu3_s.js 9.32 kB
|
||||
out/renderer/assets/plastic-DY_h9Vzh-CZzPFkTC.js 9.49 kB
|
||||
out/renderer/assets/sass-Ysv8HTNa-CHNQIGaT.js 9.49 kB
|
||||
out/renderer/assets/st-BrgXZ-Ag-BUs-RRgp.js 9.58 kB
|
||||
out/renderer/assets/typst-Co5rZla4-COemceoz.js 9.61 kB
|
||||
out/renderer/assets/slack-ochin-7zJWY-K--C7KFpXik.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-BNek_9Kq.js 9.95 kB
|
||||
out/renderer/assets/sql-DviNlDJO-CwV6bDIP.js 9.97 kB
|
||||
out/renderer/assets/kotlin-DIw6ua6F-CdVnL0aF.js 10.01 kB
|
||||
out/renderer/assets/cmake-CyNDuJo8-2Hk4zQCd.js 10.07 kB
|
||||
out/renderer/assets/light-plus-DkScKIB5-e8Q5AKjf.js 10.14 kB
|
||||
out/renderer/assets/hcl-DoJdlYjN-DdpM5wFm.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-C4n-y8pc.js 10.58 kB
|
||||
out/renderer/assets/tex-gcnXexI3-BUpeblVA.js 10.60 kB
|
||||
out/renderer/assets/php-Bn8AF0uj-CBbpr2vs.js 10.62 kB
|
||||
out/renderer/assets/nextflow-groovy-D4ZyOBoZ-C7jziUwg.js 10.63 kB
|
||||
out/renderer/assets/dream-maker-5oXa1Z51-CLRrQkBL.js 10.67 kB
|
||||
out/renderer/assets/ts-tags-xeTAUNHG-CG_gr3En.js 10.70 kB
|
||||
out/renderer/assets/raku-Bfr41qeN-C7t9XlCj.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-Cu7vbJZs.js 10.97 kB
|
||||
out/renderer/assets/diagram-UQ7AKVKN-BXObzj4d.js 11.05 kB
|
||||
out/renderer/assets/elm-Dl1XrIiD-CwXBAFKd.js 11.18 kB
|
||||
out/renderer/assets/just-He7qscmV-Bkq-0zku.js 11.19 kB
|
||||
out/renderer/assets/redshift-Djb4PK3z-9Ar4PFWD.js 11.35 kB
|
||||
out/renderer/assets/github-light-B_J7N1HZ-DWSXFnsf.js 11.38 kB
|
||||
out/renderer/assets/ruby-CxOCB7_P-BzsjPJ6Z.js 11.48 kB
|
||||
out/renderer/assets/prolog-DAqMMM08-BFKdnH0S.js 11.56 kB
|
||||
out/renderer/assets/terraform-BW8B2WXV-zeRjs0zr.js 11.59 kB
|
||||
out/renderer/assets/github-dark-BgqEY2WG-C9QbkZU3.js 11.60 kB
|
||||
out/renderer/assets/puppet-CaR8DEdW-Biai9WKX.js 11.65 kB
|
||||
out/renderer/assets/pkl-DrXR3Dxy-Bno7kqPT.js 11.67 kB
|
||||
out/renderer/assets/laserwave-Clkc4Pj8-DOjuqF9n.js 11.69 kB
|
||||
out/renderer/assets/pieDiagram-E7YTZNPT-D3EPLKnW.js 11.95 kB
|
||||
out/renderer/assets/rst-BJFdabDk-Cv-fSo2B.js 12.04 kB
|
||||
out/renderer/assets/linear-WS155L0r.js 12.11 kB
|
||||
out/renderer/assets/wasm-DYwNZ-r4-BrA6oOvM.js 12.21 kB
|
||||
out/renderer/assets/hjson-CmvCiVhY-BdH9CbZ2.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-MC-VEvxc.js 12.52 kB
|
||||
out/renderer/assets/apache-BUbWdjM2-2Zu7IlVl.js 12.66 kB
|
||||
out/renderer/assets/vesper-B5lCMuIY-CXGQHRuW.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-CEJzP2ue.js 13.09 kB
|
||||
out/renderer/assets/fish-CaZR_ofm-BcO_q5kQ.js 13.24 kB
|
||||
out/renderer/assets/elixir-Lipcswxh-DnZCznfr.js 13.27 kB
|
||||
out/renderer/assets/v-wnWoBHkK-CzCOTyIp.js 13.41 kB
|
||||
out/renderer/assets/AboutHelpSettingsPanel-Ui_VOvh7.js 13.48 kB
|
||||
out/renderer/assets/vitesse-light-DQXFiRFx-Ct7fN8pJ.js 13.81 kB
|
||||
out/renderer/assets/aurora-x-9vUYYjHV-CImifmUW.js 13.85 kB
|
||||
out/renderer/assets/vitesse-black-cwK5rWgD-BGrq81WC.js 13.87 kB
|
||||
out/renderer/assets/vitesse-dark-CsfgW0oH-Dx8cqxrm.js 13.96 kB
|
||||
out/renderer/assets/ShortcutsSettingsPanel-KgJeI7QZ.js 14.15 kB
|
||||
out/renderer/assets/pug-D0UckVoV-BTWU19Nk.js 14.16 kB
|
||||
out/renderer/assets/synthwave-84-LX1B8mRG-yuUErnSx.js 14.23 kB
|
||||
out/renderer/assets/github-light-default-BRmIzqWc-B3gMi7zW.js 14.36 kB
|
||||
out/renderer/assets/clarity-AxkJPY5c-DfVHSVIk.js 14.48 kB
|
||||
out/renderer/assets/github-light-high-contrast-BUKIZOxn-DL0r2b0z.js 14.49 kB
|
||||
out/renderer/assets/github-dark-dimmed-DoIdqTey-CDc6YqEM.js 14.64 kB
|
||||
out/renderer/assets/github-dark-default-CwWjzI40-_0bgyJYv.js 14.64 kB
|
||||
out/renderer/assets/chunk-PWAF6VOD-DuIRO4kt.js 14.76 kB
|
||||
out/renderer/assets/github-dark-high-contrast-bFLNMLvK-BUp3HmXY.js 14.80 kB
|
||||
out/renderer/assets/diagram-S7CK7UJ4-DV_ERwD-.js 14.98 kB
|
||||
out/renderer/assets/gnuplot-Dw3FRha5-D6o75ylb.js 14.98 kB
|
||||
out/renderer/assets/rust-C0Ih6nmc-Bm01RMLz.js 15.27 kB
|
||||
out/renderer/assets/actionscript-3-O8jnLcvn-C7OtofMN.js 15.41 kB
|
||||
out/renderer/assets/luau-BzxGbjcn-aQpsBeQB.js 15.64 kB
|
||||
out/renderer/assets/nix-zl191KBb-CxSq6jsB.js 15.85 kB
|
||||
out/renderer/assets/lua-BwTLfNCK-IuSxl8fO.js 16.04 kB
|
||||
out/renderer/assets/abap-FvPUHv8B-BVQp86jh.js 16.05 kB
|
||||
out/renderer/assets/solidity-96fhzG-Q-CZEni-ZB.js 16.28 kB
|
||||
out/renderer/assets/matlab-8ZQqHKQX-g_ODc8QU.js 16.29 kB
|
||||
out/renderer/assets/cue-eHSfcyUV-BO0bCEDm.js 16.40 kB
|
||||
out/renderer/assets/kusto-D8vBBISG-C0y2Wtyy.js 16.45 kB
|
||||
out/renderer/assets/powerquery-B7BjLMcF-BkVSWPtX.js 16.49 kB
|
||||
out/renderer/assets/elixir-B1NaQxrO-Ba6X-FuW.js 16.50 kB
|
||||
out/renderer/assets/react-DrereneL.js 16.50 kB
|
||||
out/renderer/assets/odin-B-YqhW9I-B-ZI05Ll.js 16.71 kB
|
||||
out/renderer/assets/solidity-Dpt2BLAA-BD_YSA0r.js 16.98 kB
|
||||
out/renderer/assets/bird2-BMkLvc4r-CyoW3El7.js 17.17 kB
|
||||
out/renderer/assets/kanagawa-wave-CM_o6oKV-VzWuxPSA.js 17.32 kB
|
||||
out/renderer/assets/kanagawa-lotus-Cj3XDpoG-cmeMwVaD.js 17.32 kB
|
||||
out/renderer/assets/kanagawa-dragon-D_NPnIy_-Cyd8MANv.js 17.33 kB
|
||||
out/renderer/assets/cynefinDiagram-5FMLGOSQ-4X_-lqaW.js 17.61 kB
|
||||
out/renderer/assets/stateDiagram-D77RDMKH-B5Qv9-kY.js 18.11 kB
|
||||
out/renderer/assets/chunk-L3NEJ4N5-MEgGvnk-.js 18.16 kB
|
||||
out/renderer/assets/liquid-D_7zu7XR-BZ3z6-Mj.js 18.46 kB
|
||||
out/renderer/assets/svelte-DUGqPubT-CAfIEh4G.js 18.60 kB
|
||||
out/renderer/assets/graphql-ObxcfEHH-9pUo2yjR.js 18.65 kB
|
||||
out/renderer/assets/jsonMode-DdQpkp6D-Bsga_9WC.js 18.79 kB
|
||||
out/renderer/assets/material-theme-q28j4V_0-s4HtqlFv.js 18.81 kB
|
||||
out/renderer/assets/material-theme-ocean-DAvlEnSm-Cyw7qD-l.js 18.83 kB
|
||||
out/renderer/assets/material-theme-darker-CHEuMVX9-D-hz3EEt.js 18.83 kB
|
||||
out/renderer/assets/material-theme-lighter-DY4T1_JG-C0HwKluR.js 18.84 kB
|
||||
out/renderer/assets/material-theme-palenight-CqDFvQ-v-RoTowTME.js 18.84 kB
|
||||
out/renderer/assets/gherkin-BcjDDslM-BdnbjalD.js 19.20 kB
|
||||
out/renderer/assets/gdscript-CekKc1U_-DVmAmHvE.js 19.21 kB
|
||||
out/renderer/assets/groovy-DH3arekX-StnUgJL0.js 19.38 kB
|
||||
out/renderer/assets/mdc-D-U85KZE-DPbAVRTg.js 19.85 kB
|
||||
out/renderer/assets/diagram-VSXAHHWV-BjMahNBE.js 20.01 kB
|
||||
out/renderer/assets/move-CmExnPjU-DPj_eIaE.js 20.22 kB
|
||||
out/renderer/assets/ayu-dark-BeByMiYw-CS3MEELg.js 20.27 kB
|
||||
out/renderer/assets/ayu-mirage-C1jJ6Jfs-CnA8kJ7r.js 20.28 kB
|
||||
out/renderer/assets/ayu-light-DmTZeN54-CDULCKqM.js 20.35 kB
|
||||
out/renderer/assets/glimmer-js-D9ZnrcNN-BS431Ogg.js 20.44 kB
|
||||
out/renderer/assets/glimmer-ts-DuhFj6qR-CsFesiaT.js 20.44 kB
|
||||
out/renderer/assets/viml-DPVJ_KYe-De3CdqgJ.js 20.56 kB
|
||||
out/renderer/assets/nushell-Cd8Dwa1M-Dhf9XkYz.js 20.62 kB
|
||||
out/renderer/assets/snazzy-light-B8znOqT6-B1FX3-IF.js 20.97 kB
|
||||
out/renderer/assets/dagre-GXQ25YYZ-DHWBBxAd.js 21.01 kB
|
||||
out/renderer/assets/dracula-DeMffiYO-Bl4juROY.js 21.26 kB
|
||||
out/renderer/assets/dracula-soft-BnfvpcDv-CYsUeSum.js 21.27 kB
|
||||
out/renderer/assets/twig-7zjsCqYg-CMujKsZl.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-DaA_4NNK.js 21.94 kB
|
||||
out/renderer/assets/rose-pine-moon-B9bum7Ik-B6_AhIsD.js 21.96 kB
|
||||
out/renderer/assets/rose-pine-dawn-2Q5fMoJp-DxMkAwKM.js 21.96 kB
|
||||
out/renderer/assets/powershell-ycAdP1r9-B7r4Hnhz.js 22.11 kB
|
||||
out/renderer/assets/common-lisp-DcFHcTKh-CWH5diwh.js 22.81 kB
|
||||
out/renderer/assets/gruvbox-dark-hard-gOzMLqif-DDlcfu4q.js 22.83 kB
|
||||
out/renderer/assets/gruvbox-dark-soft-CKvURktN-C6MJezBg.js 22.83 kB
|
||||
out/renderer/assets/gruvbox-light-hard-CMa_c48J-BUQ67Msp.js 22.84 kB
|
||||
out/renderer/assets/gruvbox-light-soft-yfAGJYsX-DNM2qqWB.js 22.84 kB
|
||||
out/renderer/assets/gruvbox-dark-medium-BQSVGwWb-qh8C4DPZ.js 22.84 kB
|
||||
out/renderer/assets/gruvbox-light-medium-B9S5UNr1-DZxV_o-P.js 22.84 kB
|
||||
out/renderer/assets/nim-CD961Jl3-CuyTrDpQ.js 22.91 kB
|
||||
out/renderer/assets/cadence-C2JmJjDr-B-b63Epg.js 23.87 kB
|
||||
out/renderer/assets/sql-C_oMiPb0-CRnSOxMo.js 23.87 kB
|
||||
out/renderer/assets/wit-CXpQol8Q-D2NEDOhy.js 24.11 kB
|
||||
out/renderer/assets/templ-gFcHJbF7-BqIwRUQe.js 24.38 kB
|
||||
out/renderer/assets/astro-kV3HjkbP-CH6o6jKA.js 24.46 kB
|
||||
out/renderer/assets/vhdl-Ci4REirV-D-qSzcJD.js 24.46 kB
|
||||
out/renderer/assets/purescript-DCsDAdnX-DsynrkKe.js 24.97 kB
|
||||
out/renderer/assets/vue-Cuk7Vimg-CFbFXIr8.js 25.25 kB
|
||||
out/renderer/assets/surrealql-GFjNBdcm-Vm68TOTE.js 25.34 kB
|
||||
out/renderer/assets/one-light-CMfGrl_P-B-1jUQM9.js 25.49 kB
|
||||
out/renderer/assets/night-owl-light-CAEa42tO-TPCLv7z5.js 26.10 kB
|
||||
out/renderer/assets/system-verilog-D_bVVpLE-C_dvOlr3.js 26.41 kB
|
||||
out/renderer/assets/angular-html-BrLPO2Fv-DJgz5E5d.js 26.48 kB
|
||||
out/renderer/assets/typespec-D5WYs8C4-AaOHagqW.js 26.72 kB
|
||||
out/renderer/assets/nord-DlCAGdjr-Div2jUYm.js 26.91 kB
|
||||
out/renderer/assets/codeql-DidIlXer-D6RBJOzg.js 27.08 kB
|
||||
out/renderer/assets/scss-BhK8Ovpn-DfDLQi2C.js 27.52 kB
|
||||
out/renderer/assets/coffee-DrMWXxy6-BoavQsuh.js 27.68 kB
|
||||
out/renderer/assets/java-DaupjRFz-zQd9RZAc.js 27.69 kB
|
||||
out/renderer/assets/razor-B2hRAVmz-Dj7TOgY5.js 27.72 kB
|
||||
out/renderer/assets/apl-C42PBett-BNW4FTmO.js 27.87 kB
|
||||
out/renderer/assets/chunk-SVP7TREG-Dxm-4rnd.js 28.38 kB
|
||||
out/renderer/assets/fsharp-BHFgIxsY-CvR6tsY8.js 28.48 kB
|
||||
out/renderer/assets/marko-DXKHPFnH-C0z2-ucz.js 28.74 kB
|
||||
out/renderer/assets/GeneralSettingsPanel-CA6yOnsk.js 29.10 kB
|
||||
out/renderer/assets/night-owl-DegwdXaM-6ZGfBB7K.js 29.11 kB
|
||||
out/renderer/assets/c3-BOs4FlGA-BuhFXrRY.js 29.17 kB
|
||||
out/renderer/assets/MemorySettingsPanel-cqwWfj-O.js 29.75 kB
|
||||
out/renderer/assets/crystal-DlzoxO28-BWa_t1Io.js 29.84 kB
|
||||
out/renderer/assets/applescript-ij24h7OO-_xHQcvud.js 29.87 kB
|
||||
out/renderer/assets/tsMode-SiG-Sp2b-WC-zK_wx.js 30.55 kB
|
||||
out/renderer/assets/pierre-dark-Daa2n9wr-D7rla9B_.js 30.74 kB
|
||||
out/renderer/assets/pierre-light-D_hZXvUj-DJnIOKLO.js 30.75 kB
|
||||
out/renderer/assets/pierre-dark-soft-BhNM3pgh-Dp_VeHWv.js 30.76 kB
|
||||
out/renderer/assets/pierre-light-soft-BVrSv6ZG-C6Na39F-.js 30.76 kB
|
||||
out/renderer/assets/ishikawaDiagram-5VMMS53U-BtIQYepA.js 30.78 kB
|
||||
out/renderer/assets/pierre-dark-tritanopia-CGKuoAZi-C0HpbU3l.js 30.78 kB
|
||||
out/renderer/assets/pierre-light-tritanopia-BiDEaWaH-wWduIsi3.js 30.78 kB
|
||||
out/renderer/assets/pierre-dark-protanopia-deuteranopia-Cs1lz9lE-enlgPsHw.js 30.82 kB
|
||||
out/renderer/assets/pierre-light-protanopia-deuteranopia-BM0RLBB_-Dz5iBHkO.js 30.82 kB
|
||||
out/renderer/assets/stylus-ZCryC73G-urFW3_yk.js 31.29 kB
|
||||
out/renderer/assets/diagram-VX7I27RA-CAJ5TuHp.js 31.44 kB
|
||||
out/renderer/assets/scala-BBsC3Oz3-VCjyobQG.js 31.48 kB
|
||||
out/renderer/assets/mermaid-D6CQfUGU-C6DHNxVz.js 33.37 kB
|
||||
out/renderer/assets/poimandres-EIt_jotH-DHKFQj5Q.js 33.69 kB
|
||||
out/renderer/assets/kanban-definition-UXKFOSKX-BLcNSZUB.js 33.91 kB
|
||||
out/renderer/assets/one-dark-pro-DR9QpZM3-BA4d4lw2.js 33.98 kB
|
||||
out/renderer/assets/mermaid-parser.core-CstzWfPU.js 34.66 kB
|
||||
out/renderer/assets/haxe-BWT5wSyZ-BuUsQb-h.js 35.38 kB
|
||||
out/renderer/assets/nginx-DhtViCEk-C18zABFg.js 35.58 kB
|
||||
out/renderer/assets/houston-BdS5A_yD-NUige_z1.js 35.61 kB
|
||||
out/renderer/assets/tokyo-night-BS1_DFu7-CYsPn2J-.js 35.86 kB
|
||||
out/renderer/assets/erlang-Dd62d0xZ-DHVWwcKa.js 37.71 kB
|
||||
out/renderer/assets/rough.esm-BX5QqLti.js 38.33 kB
|
||||
out/renderer/assets/mindmap-definition-YA3MSWOX-B-zior9K.js 38.59 kB
|
||||
out/renderer/assets/cobol-D7RZfOK--CEk2iYO9.js 39.37 kB
|
||||
out/renderer/assets/journeyDiagram-3NMN7TZE-dygzCaXh.js 40.13 kB
|
||||
out/renderer/assets/julia-ZzkUXm0W-BIm_zTAN.js 40.32 kB
|
||||
out/renderer/assets/lspLanguageFeatures-DK9zifhE-DeEqLmGO.js 40.76 kB
|
||||
out/renderer/assets/asm-DYVIzeEk-Byg5xzam.js 40.91 kB
|
||||
out/renderer/assets/haskell-Ba6HbLj8-D0OYaIy8.js 41.78 kB
|
||||
out/renderer/assets/sankeyDiagram-P5KCCOFB-D1WB71c9.js 41.83 kB
|
||||
out/renderer/assets/shellscript-B69gKcss-49Zm6IyC.js 41.97 kB
|
||||
out/renderer/assets/wardleyDiagram-VM6X3IG4-DCbKgC_S.js 42.40 kB
|
||||
out/renderer/assets/perl-Dv6Cq_FS-DIORmO5G.js 43.55 kB
|
||||
out/renderer/assets/pierre-dark-vibrant-BMsyYliQ-84Eeh-Uj.js 44.96 kB
|
||||
out/renderer/assets/pierre-light-vibrant-CWzM4Pa_-QZvTkTJe.js 44.97 kB
|
||||
out/renderer/assets/ruby-DWcdJvcx-q0K84ieK.js 46.50 kB
|
||||
out/renderer/assets/go-BOpYl7fu-BiT4MB-v.js 47.02 kB
|
||||
out/renderer/assets/apex-B48ZHHzN-BBt8sSNQ.js 47.18 kB
|
||||
out/renderer/assets/catppuccin-mocha-cPsH7Lup-SVLZehhk.js 47.46 kB
|
||||
out/renderer/assets/catppuccin-latte-DcEecI7n-jo2cPJyK.js 47.46 kB
|
||||
out/renderer/assets/catppuccin-frappe-BdOW2tdI-BI0Hc9cS.js 47.46 kB
|
||||
out/renderer/assets/catppuccin-macchiato-Bvz_yAZY-DWewRa4S.js 47.47 kB
|
||||
out/renderer/assets/ada-BT0j8ine-CLTLBE8n.js 48.28 kB
|
||||
out/renderer/assets/d-B1HbH29p-Bi6t8Ck6.js 49.10 kB
|
||||
out/renderer/assets/css-NFwnoVns-BvwuZkcY.js 49.49 kB
|
||||
out/renderer/assets/imba-C-oGt11l-CqKI0OVw.js 50.13 kB
|
||||
out/renderer/assets/requirementDiagram-BXWQKSXE-C3ERdAvT.js 51.39 kB
|
||||
out/renderer/assets/erDiagram-RLTQ6QDP-DVzk9HUA.js 52.41 kB
|
||||
out/renderer/assets/browserify-C9uP_nIr.js 52.80 kB
|
||||
out/renderer/assets/gitGraphDiagram-WWUBYQGX-gZr6P8x8.js 53.82 kB
|
||||
out/renderer/assets/everforest-dark-gCM8XhEI-DzRrg06U.js 53.94 kB
|
||||
out/renderer/assets/everforest-light-DhK35DkL-BEDtvHw1.js 53.95 kB
|
||||
out/renderer/assets/timeline-definition-24CTP7MA-DuvjToaj.js 54.31 kB
|
||||
out/renderer/assets/wikitext-CQNrXTmv-DJ18wIlO.js 56.09 kB
|
||||
out/renderer/assets/stata-BUONSdsT-BPnapjPC.js 57.23 kB
|
||||
out/renderer/assets/quadrantDiagram-AXDQQJYC-D8rBdZOq.js 58.21 kB
|
||||
out/renderer/assets/html-Dq1ixqYb-okJOhOmu.js 58.25 kB
|
||||
out/renderer/assets/chunk-OSK3NFVY-DeXYmBeV.js 58.56 kB
|
||||
out/renderer/assets/ocaml-CUdGm1iq-BKX30YEX.js 62.65 kB
|
||||
out/renderer/assets/model-settings-source-JYisGYmM.js 63.03 kB
|
||||
out/renderer/assets/ballerina-CpYcPBJI-D9ac3462.js 64.89 kB
|
||||
out/renderer/assets/markdown-BSrOIEaF-BFwOzGIM.js 65.52 kB
|
||||
out/renderer/assets/chunk-IMKFNOWR-20hk4CFt.js 67.22 kB
|
||||
out/renderer/assets/mojo-BNaitZ-7-E_psDM2x.js 70.00 kB
|
||||
out/renderer/assets/python-Cld0Iwtn-tcCJ5L_g.js 70.17 kB
|
||||
out/renderer/assets/blockDiagram-I7D4REHJ-BEOA2O5R.js 71.01 kB
|
||||
out/renderer/assets/bsl-CtP8370o-Pi14XlIU.js 71.07 kB
|
||||
out/renderer/assets/c-B4augMcT-B5ncIjy5.js 72.57 kB
|
||||
out/renderer/assets/chunk-75Z2AOVW-D7MfFP0x.js 72.67 kB
|
||||
out/renderer/assets/latex-g2Pus_l2-CP0G7LTN.js 72.85 kB
|
||||
out/renderer/assets/vyper-C1nscAY5-BTAKd5p2.js 74.85 kB
|
||||
out/renderer/assets/ModelSettingsPanel-Bq69xf7M.js 76.64 kB
|
||||
out/renderer/assets/xychartDiagram-S5SC5T6Z-BLJZsQxl.js 76.79 kB
|
||||
out/renderer/assets/chunk-GMAD6QVW-Cutm-G6X.js 77.76 kB
|
||||
out/renderer/assets/hack-B1ag3l4X-CEYIfPfg.js 80.58 kB
|
||||
out/renderer/assets/src-DsgKm1PY.js 83.16 kB
|
||||
out/renderer/assets/chunk-TICWLB2K-BF9Dr4eB.js 83.88 kB
|
||||
out/renderer/assets/fortran-free-form-CsgtTAg3-Dm0PhuY8.js 89.20 kB
|
||||
out/renderer/assets/vennDiagram-4TSXK5OY-rjTACDc3.js 89.26 kB
|
||||
out/renderer/assets/csharp-YOPVljXo-CBjcozlW.js 89.91 kB
|
||||
out/renderer/assets/racket--xYIV9-n-NDM2V4Sc.js 92.62 kB
|
||||
out/renderer/assets/swift-CgzYrGBX-CaMD6i-j.js 94.14 kB
|
||||
out/renderer/assets/less-BGhX8xko-CbSvNyvq.js 99.00 kB
|
||||
out/renderer/assets/chunk-SHT3W25Y-CG3rN0Mp.js 104.10 kB
|
||||
out/renderer/assets/objective-c-CmcWiAft-DY5tZuMk.js 105.62 kB
|
||||
out/renderer/assets/blade-Bq8WPf0E-BehdttJf.js 105.98 kB
|
||||
out/renderer/assets/c4Diagram-7LVT6UL2--i1UKJXs.js 107.96 kB
|
||||
out/renderer/assets/php-X15vsN4N-ChBJUzAp.js 111.49 kB
|
||||
out/renderer/assets/dagre-CzI-C3sx.js 122.98 kB
|
||||
out/renderer/assets/ganttDiagram-EL5Y4UJY-B2ep6Zsp.js 123.77 kB
|
||||
out/renderer/assets/graphlib-CoAzpIqe.js 127.44 kB
|
||||
out/renderer/assets/asciidoc-DJWalVNM-Daa-Gl9r.js 146.30 kB
|
||||
out/renderer/assets/mdx-C_Ato9sK-CDV72_N0.js 146.49 kB
|
||||
out/renderer/assets/editor.main-POO0Vbhx-DgMLeBiB.js 161.32 kB
|
||||
out/renderer/assets/cose-bilkent-JH36ORCC-CA60tZpq.js 165.63 kB
|
||||
out/renderer/assets/objective-cpp-BggTCHV8-BRaaCyEF.js 172.18 kB
|
||||
out/renderer/assets/javascript-AfZCJ9Uc-C_GZREFb.js 175.31 kB
|
||||
out/renderer/assets/tsx-BOlKGefW-D7XVyutE.js 176.00 kB
|
||||
out/renderer/assets/jsx-CPd9p36x-D5Ck2u9I.js 178.26 kB
|
||||
out/renderer/assets/sequenceDiagram-WJ2MYXX4-DrQZvAZS.js 190.05 kB
|
||||
out/renderer/assets/typescript-4sRsPriL-Ce01imBq.js 191.16 kB
|
||||
out/renderer/assets/mermaid.core-CzJUxOu4.js 191.57 kB
|
||||
out/renderer/assets/angular-ts-YduEkmVa-936ueej5.js 193.82 kB
|
||||
out/renderer/assets/vue-vine-DXhYlaTf-C8MW7tnI.js 201.27 kB
|
||||
out/renderer/assets/SourceSelect-Dd7kI5iL.js 203.20 kB
|
||||
out/renderer/assets/chunk-4HAMMTFA-CZEROUgO.js 210.32 kB
|
||||
out/renderer/assets/swimlanes-42K2YHIH-Bejk4_Vq.js 265.51 kB
|
||||
out/renderer/assets/wolfram-BVoTES0L-W3A5YqXk.js 267.14 kB
|
||||
out/renderer/assets/chunk-DU6HZSFF-BsNLw-4v.js 271.07 kB
|
||||
out/renderer/assets/architectureDiagram-5GKGNRK7-BXf_ZoM6.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-DcJkdGs4.js 622.62 kB
|
||||
out/renderer/assets/cpp-9jHBA231-DB3feGjZ.js 626.73 kB
|
||||
out/renderer/assets/app-4914IQSi.js 675.57 kB
|
||||
out/renderer/assets/emacs-lisp-DjtOxg4j-CzQ0CKOn.js 780.06 kB
|
||||
out/renderer/assets/cytoscape.esm-bVGYt-iW.js 869.69 kB
|
||||
out/renderer/assets/ArtifactPierreDiff-DpqRTCz8.js 1,119.58 kB
|
||||
out/renderer/assets/chunk-FOHPRMQF-BCllzKJD.js 1,154.18 kB
|
||||
out/renderer/assets/index-iOggdyqw.js 3,760.13 kB
|
||||
out/renderer/assets/editor.api2-dPwET-7w-BYIQ9bT3.js 4,889.23 kB
|
||||
|
||||
✓ built in 4.77s
|
||||
|
After Width: | Height: | Size: 65 KiB |
@@ -0,0 +1,769 @@
|
||||
{
|
||||
"result": "PASS",
|
||||
"scope": "Real isolated YCode App/preload/IPC/native filesystem. No upstream calls. Original expectations come from fixed REA archive ev_f5e9d71a676c453daab40928acfb33aeabae68ba57ffda342380cead7f1a1fe2.",
|
||||
"sourceEvidence": [
|
||||
"ev_f5e9d71a676c453daab40928acfb33aeabae68ba57ffda342380cead7f1a1fe2"
|
||||
],
|
||||
"snapshots": {
|
||||
"menu": {
|
||||
"rect": [
|
||||
226,
|
||||
378,
|
||||
170,
|
||||
250
|
||||
],
|
||||
"background": "rgb(255, 255, 255)",
|
||||
"borderRadius": "16px",
|
||||
"padding": "8px",
|
||||
"items": [
|
||||
{
|
||||
"label": "置顶",
|
||||
"width": 152,
|
||||
"height": 32,
|
||||
"fontSize": "14px",
|
||||
"lineHeight": "22px",
|
||||
"borderRadius": "8px",
|
||||
"color": "rgba(0, 0, 0, 0.9)",
|
||||
"icon": [
|
||||
16,
|
||||
16
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "重命名",
|
||||
"width": 152,
|
||||
"height": 32,
|
||||
"fontSize": "14px",
|
||||
"lineHeight": "22px",
|
||||
"borderRadius": "8px",
|
||||
"color": "rgba(0, 0, 0, 0.9)",
|
||||
"icon": [
|
||||
16,
|
||||
16
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "在独立窗口中打开",
|
||||
"width": 152,
|
||||
"height": 32,
|
||||
"fontSize": "14px",
|
||||
"lineHeight": "22px",
|
||||
"borderRadius": "8px",
|
||||
"color": "rgba(0, 0, 0, 0.9)",
|
||||
"icon": [
|
||||
16,
|
||||
16
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "打开文件夹",
|
||||
"width": 152,
|
||||
"height": 32,
|
||||
"fontSize": "14px",
|
||||
"lineHeight": "22px",
|
||||
"borderRadius": "8px",
|
||||
"color": "rgba(0, 0, 0, 0.9)",
|
||||
"icon": [
|
||||
16,
|
||||
16
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "归档",
|
||||
"width": 152,
|
||||
"height": 32,
|
||||
"fontSize": "14px",
|
||||
"lineHeight": "22px",
|
||||
"borderRadius": "8px",
|
||||
"color": "rgba(0, 0, 0, 0.9)",
|
||||
"icon": [
|
||||
16,
|
||||
16
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "删除任务",
|
||||
"width": 152,
|
||||
"height": 32,
|
||||
"fontSize": "14px",
|
||||
"lineHeight": "22px",
|
||||
"borderRadius": "8px",
|
||||
"color": "rgb(180, 44, 63)",
|
||||
"icon": [
|
||||
16,
|
||||
16
|
||||
]
|
||||
}
|
||||
],
|
||||
"dividers": [
|
||||
{
|
||||
"width": 152,
|
||||
"height": 1,
|
||||
"margin": "6px 0px"
|
||||
},
|
||||
{
|
||||
"width": 152,
|
||||
"height": 1,
|
||||
"margin": "6px 0px"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"checks": [
|
||||
{
|
||||
"label": "menu labels match the implemented subset",
|
||||
"pass": true,
|
||||
"actual": [
|
||||
"置顶",
|
||||
"重命名",
|
||||
"在独立窗口中打开",
|
||||
"打开文件夹",
|
||||
"归档",
|
||||
"删除任务"
|
||||
],
|
||||
"expected": [
|
||||
"置顶",
|
||||
"重命名",
|
||||
"在独立窗口中打开",
|
||||
"打开文件夹",
|
||||
"归档",
|
||||
"删除任务"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "menu uses two dividers like the original",
|
||||
"pass": true,
|
||||
"actual": 2,
|
||||
"expected": 2
|
||||
},
|
||||
{
|
||||
"label": "items are 32 high like the original",
|
||||
"pass": true,
|
||||
"actual": true,
|
||||
"expected": true
|
||||
},
|
||||
{
|
||||
"label": "item font is 14/22 like the original",
|
||||
"pass": true,
|
||||
"actual": true,
|
||||
"expected": true
|
||||
},
|
||||
{
|
||||
"label": "item radius is 8 like the original",
|
||||
"pass": true,
|
||||
"actual": true,
|
||||
"expected": true
|
||||
},
|
||||
{
|
||||
"label": "icon box is 16x16 like the original",
|
||||
"pass": true,
|
||||
"actual": true,
|
||||
"expected": true
|
||||
},
|
||||
{
|
||||
"label": "menu padding is 8 like the original",
|
||||
"pass": true,
|
||||
"actual": "8px",
|
||||
"expected": "8px"
|
||||
},
|
||||
{
|
||||
"label": "menu radius is 16 like the original",
|
||||
"pass": true,
|
||||
"actual": "16px",
|
||||
"expected": "16px"
|
||||
},
|
||||
{
|
||||
"label": "danger item keeps the original danger colour",
|
||||
"pass": true,
|
||||
"actual": "rgb(180, 44, 63)",
|
||||
"expected": "rgb(180, 44, 63)"
|
||||
},
|
||||
{
|
||||
"label": "normal items keep the original text colour",
|
||||
"pass": true,
|
||||
"actual": "rgba(0, 0, 0, 0.9)",
|
||||
"expected": "rgba(0, 0, 0, 0.9)"
|
||||
},
|
||||
{
|
||||
"label": "menu minimum width is 160 like the original",
|
||||
"pass": true,
|
||||
"actual": true,
|
||||
"expected": true
|
||||
},
|
||||
{
|
||||
"label": "menu sits on the original anchor offset (button left - 17, bottom + 4)",
|
||||
"pass": true,
|
||||
"actual": [
|
||||
0,
|
||||
0
|
||||
],
|
||||
"expected": [
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "divider height is 1 like the original",
|
||||
"pass": true,
|
||||
"actual": true,
|
||||
"expected": true
|
||||
},
|
||||
{
|
||||
"label": "overlay click closes the menu",
|
||||
"pass": true,
|
||||
"actual": false,
|
||||
"expected": false
|
||||
},
|
||||
{
|
||||
"label": "right-click opens the same implemented menu",
|
||||
"pass": true,
|
||||
"actual": [
|
||||
"置顶",
|
||||
"重命名",
|
||||
"在独立窗口中打开",
|
||||
"打开文件夹",
|
||||
"归档",
|
||||
"删除任务"
|
||||
],
|
||||
"expected": [
|
||||
"置顶",
|
||||
"重命名",
|
||||
"在独立窗口中打开",
|
||||
"打开文件夹",
|
||||
"归档",
|
||||
"删除任务"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "right-click opens the menu for the row under the pointer",
|
||||
"pass": true,
|
||||
"actual": "d77f13ed-f42d-481d-8b5f-071ccbedbdcb",
|
||||
"expected": "d77f13ed-f42d-481d-8b5f-071ccbedbdcb"
|
||||
},
|
||||
{
|
||||
"label": "right-click does not switch the active conversation",
|
||||
"pass": true,
|
||||
"actual": "964a214e-45c8-47bf-b2f5-acc21232cca5",
|
||||
"expected": "964a214e-45c8-47bf-b2f5-acc21232cca5"
|
||||
},
|
||||
{
|
||||
"label": "right-click anchors the menu at the pointer",
|
||||
"pass": true,
|
||||
"actual": [
|
||||
220,
|
||||
420
|
||||
],
|
||||
"expected": [
|
||||
220,
|
||||
420
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "pin adds the original pinned-item class",
|
||||
"pass": true,
|
||||
"actual": true,
|
||||
"expected": true
|
||||
},
|
||||
{
|
||||
"label": "pin shows a persistent pin badge",
|
||||
"pass": true,
|
||||
"actual": true,
|
||||
"expected": true
|
||||
},
|
||||
{
|
||||
"label": "pin persists to the session store",
|
||||
"pass": true,
|
||||
"actual": true,
|
||||
"expected": true
|
||||
},
|
||||
{
|
||||
"label": "pinned row offers 取消置顶 first",
|
||||
"pass": true,
|
||||
"actual": true,
|
||||
"expected": true
|
||||
},
|
||||
{
|
||||
"label": "unpin clears the pinned marker",
|
||||
"pass": true,
|
||||
"actual": false,
|
||||
"expected": false
|
||||
},
|
||||
{
|
||||
"label": "unpin persists",
|
||||
"pass": true,
|
||||
"actual": true,
|
||||
"expected": true
|
||||
},
|
||||
{
|
||||
"label": "menu exposes an inline rename input",
|
||||
"pass": true,
|
||||
"actual": true,
|
||||
"expected": true
|
||||
},
|
||||
{
|
||||
"label": "rename input closes after Enter",
|
||||
"pass": true,
|
||||
"actual": false,
|
||||
"expected": false
|
||||
},
|
||||
{
|
||||
"label": "rename updates the row title",
|
||||
"pass": true,
|
||||
"actual": "Menu Renamed",
|
||||
"expected": "Menu Renamed"
|
||||
},
|
||||
{
|
||||
"label": "rename persists to the session store",
|
||||
"pass": true,
|
||||
"actual": true,
|
||||
"expected": true
|
||||
},
|
||||
{
|
||||
"label": "open folder targets the real session cwd",
|
||||
"pass": true,
|
||||
"actual": "C:\\Users\\Administrator\\.codex\\worktrees\\b01-accept-01\\YCode\\.tmp\\task-menu-9cdgdF\\fixture-workspace",
|
||||
"expected": "C:\\Users\\Administrator\\.codex\\worktrees\\b01-accept-01\\YCode\\.tmp\\task-menu-9cdgdF\\fixture-workspace"
|
||||
},
|
||||
{
|
||||
"label": "open window creates exactly one extra window",
|
||||
"pass": true,
|
||||
"actual": 2,
|
||||
"expected": 2
|
||||
},
|
||||
{
|
||||
"label": "open window loads the task query for that session",
|
||||
"pass": true,
|
||||
"actual": "?window=task&taskId=964a214e-45c8-47bf-b2f5-acc21232cca5",
|
||||
"expected": "?window=task&taskId=964a214e-45c8-47bf-b2f5-acc21232cca5"
|
||||
},
|
||||
{
|
||||
"label": "archive opens a confirmation before changing the task",
|
||||
"pass": true,
|
||||
"actual": "归档任务",
|
||||
"expected": "归档任务"
|
||||
},
|
||||
{
|
||||
"label": "archive restores the documented original destination",
|
||||
"pass": true,
|
||||
"actual": "确认将该任务归档吗?归档后可在“系统设置-数据管理”中查看。",
|
||||
"expected": "确认将该任务归档吗?归档后可在“系统设置-数据管理”中查看。"
|
||||
},
|
||||
{
|
||||
"label": "archive does not append unrequested compatibility copy",
|
||||
"pass": true,
|
||||
"actual": false,
|
||||
"expected": false
|
||||
},
|
||||
{
|
||||
"label": "archive confirmation actions use the recovered labels",
|
||||
"pass": true,
|
||||
"actual": [
|
||||
"取消",
|
||||
"确认归档"
|
||||
],
|
||||
"expected": [
|
||||
"取消",
|
||||
"确认归档"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "archive confirmation uses the plan-defined 240px popconfirm",
|
||||
"pass": true,
|
||||
"actual": [
|
||||
240,
|
||||
"16px",
|
||||
"16px"
|
||||
],
|
||||
"expected": [
|
||||
240,
|
||||
"16px",
|
||||
"16px"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "archive light secondary background/border",
|
||||
"pass": true,
|
||||
"actual": [
|
||||
"rgb(255, 255, 255)",
|
||||
[
|
||||
"1px",
|
||||
"solid",
|
||||
"rgb(222, 222, 222)"
|
||||
]
|
||||
],
|
||||
"expected": [
|
||||
"rgb(255, 255, 255)",
|
||||
[
|
||||
"1px",
|
||||
"solid",
|
||||
"rgb(222, 222, 222)"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "archive light primary/danger background",
|
||||
"pass": true,
|
||||
"actual": "rgba(0, 0, 0, 0.9)",
|
||||
"expected": "rgba(0, 0, 0, 0.9)"
|
||||
},
|
||||
{
|
||||
"label": "archive light confirmation foreground",
|
||||
"pass": true,
|
||||
"actual": "rgb(255, 255, 255)",
|
||||
"expected": "rgb(255, 255, 255)"
|
||||
},
|
||||
{
|
||||
"label": "archive light confirm geometry",
|
||||
"pass": true,
|
||||
"actual": [
|
||||
"66px",
|
||||
"19px",
|
||||
"19px",
|
||||
"28px",
|
||||
"6px",
|
||||
"12px"
|
||||
],
|
||||
"expected": [
|
||||
"66px",
|
||||
"19px",
|
||||
"19px",
|
||||
"28px",
|
||||
"6px",
|
||||
"12px"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "archive light cancel geometry",
|
||||
"pass": true,
|
||||
"actual": [
|
||||
"66px",
|
||||
"19px",
|
||||
"19px",
|
||||
"28px",
|
||||
"6px",
|
||||
"12px"
|
||||
],
|
||||
"expected": [
|
||||
"66px",
|
||||
"19px",
|
||||
"19px",
|
||||
"28px",
|
||||
"6px",
|
||||
"12px"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "archive light title weight",
|
||||
"pass": true,
|
||||
"actual": "600",
|
||||
"expected": "600"
|
||||
},
|
||||
{
|
||||
"label": "archive dark secondary background/border",
|
||||
"pass": true,
|
||||
"actual": [
|
||||
"rgb(38, 38, 38)",
|
||||
[
|
||||
"1px",
|
||||
"solid",
|
||||
"rgb(61, 61, 61)"
|
||||
]
|
||||
],
|
||||
"expected": [
|
||||
"rgb(38, 38, 38)",
|
||||
[
|
||||
"1px",
|
||||
"solid",
|
||||
"rgb(61, 61, 61)"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "archive dark primary/danger background",
|
||||
"pass": true,
|
||||
"actual": "rgba(255, 255, 255, 0.9)",
|
||||
"expected": "rgba(255, 255, 255, 0.9)"
|
||||
},
|
||||
{
|
||||
"label": "archive dark confirmation foreground",
|
||||
"pass": true,
|
||||
"actual": "rgba(0, 0, 0, 0.9)",
|
||||
"expected": "rgba(0, 0, 0, 0.9)"
|
||||
},
|
||||
{
|
||||
"label": "archive dark confirm geometry",
|
||||
"pass": true,
|
||||
"actual": [
|
||||
"66px",
|
||||
"19px",
|
||||
"19px",
|
||||
"28px",
|
||||
"6px",
|
||||
"12px"
|
||||
],
|
||||
"expected": [
|
||||
"66px",
|
||||
"19px",
|
||||
"19px",
|
||||
"28px",
|
||||
"6px",
|
||||
"12px"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "archive dark cancel geometry",
|
||||
"pass": true,
|
||||
"actual": [
|
||||
"66px",
|
||||
"19px",
|
||||
"19px",
|
||||
"28px",
|
||||
"6px",
|
||||
"12px"
|
||||
],
|
||||
"expected": [
|
||||
"66px",
|
||||
"19px",
|
||||
"19px",
|
||||
"28px",
|
||||
"6px",
|
||||
"12px"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "archive dark title weight",
|
||||
"pass": true,
|
||||
"actual": "600",
|
||||
"expected": "600"
|
||||
},
|
||||
{
|
||||
"label": "cancelling archive keeps the task visible",
|
||||
"pass": true,
|
||||
"actual": 2,
|
||||
"expected": 2
|
||||
},
|
||||
{
|
||||
"label": "archive hides exactly one row",
|
||||
"pass": true,
|
||||
"actual": 1,
|
||||
"expected": 1
|
||||
},
|
||||
{
|
||||
"label": "archive keeps both sessions in the archived listing",
|
||||
"pass": true,
|
||||
"actual": 2,
|
||||
"expected": 2
|
||||
},
|
||||
{
|
||||
"label": "archived session keeps its archivedAt marker",
|
||||
"pass": true,
|
||||
"actual": 1,
|
||||
"expected": 1
|
||||
},
|
||||
{
|
||||
"label": "delete uses the idle confirmation title",
|
||||
"pass": true,
|
||||
"actual": "删除任务?",
|
||||
"expected": "删除任务?"
|
||||
},
|
||||
{
|
||||
"label": "delete uses the idle confirmation description",
|
||||
"pass": true,
|
||||
"actual": "删除后,这些任务将从你的所有设备中移除,且无法恢复。",
|
||||
"expected": "删除后,这些任务将从你的所有设备中移除,且无法恢复。"
|
||||
},
|
||||
{
|
||||
"label": "delete confirmation actions use the recovered idle labels",
|
||||
"pass": true,
|
||||
"actual": [
|
||||
"取消",
|
||||
"确认"
|
||||
],
|
||||
"expected": [
|
||||
"取消",
|
||||
"确认"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "idle delete is not marked as running",
|
||||
"pass": true,
|
||||
"actual": null,
|
||||
"expected": null
|
||||
},
|
||||
{
|
||||
"label": "delete light secondary background/border",
|
||||
"pass": true,
|
||||
"actual": [
|
||||
"rgb(255, 255, 255)",
|
||||
[
|
||||
"1px",
|
||||
"solid",
|
||||
"rgb(222, 222, 222)"
|
||||
]
|
||||
],
|
||||
"expected": [
|
||||
"rgb(255, 255, 255)",
|
||||
[
|
||||
"1px",
|
||||
"solid",
|
||||
"rgb(222, 222, 222)"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "delete light primary/danger background",
|
||||
"pass": true,
|
||||
"actual": "rgb(232, 92, 92)",
|
||||
"expected": "rgb(232, 92, 92)"
|
||||
},
|
||||
{
|
||||
"label": "delete light confirmation foreground",
|
||||
"pass": true,
|
||||
"actual": "rgb(255, 255, 255)",
|
||||
"expected": "rgb(255, 255, 255)"
|
||||
},
|
||||
{
|
||||
"label": "delete light confirm geometry",
|
||||
"pass": true,
|
||||
"actual": [
|
||||
"66px",
|
||||
"19px",
|
||||
"19px",
|
||||
"28px",
|
||||
"6px",
|
||||
"12px"
|
||||
],
|
||||
"expected": [
|
||||
"66px",
|
||||
"19px",
|
||||
"19px",
|
||||
"28px",
|
||||
"6px",
|
||||
"12px"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "delete light cancel geometry",
|
||||
"pass": true,
|
||||
"actual": [
|
||||
"66px",
|
||||
"19px",
|
||||
"19px",
|
||||
"28px",
|
||||
"6px",
|
||||
"12px"
|
||||
],
|
||||
"expected": [
|
||||
"66px",
|
||||
"19px",
|
||||
"19px",
|
||||
"28px",
|
||||
"6px",
|
||||
"12px"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "delete light title weight",
|
||||
"pass": true,
|
||||
"actual": "600",
|
||||
"expected": "600"
|
||||
},
|
||||
{
|
||||
"label": "delete dark secondary background/border",
|
||||
"pass": true,
|
||||
"actual": [
|
||||
"rgb(38, 38, 38)",
|
||||
[
|
||||
"1px",
|
||||
"solid",
|
||||
"rgb(61, 61, 61)"
|
||||
]
|
||||
],
|
||||
"expected": [
|
||||
"rgb(38, 38, 38)",
|
||||
[
|
||||
"1px",
|
||||
"solid",
|
||||
"rgb(61, 61, 61)"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "delete dark primary/danger background",
|
||||
"pass": true,
|
||||
"actual": "rgb(175, 25, 26)",
|
||||
"expected": "rgb(175, 25, 26)"
|
||||
},
|
||||
{
|
||||
"label": "delete dark confirmation foreground",
|
||||
"pass": true,
|
||||
"actual": "rgb(255, 255, 255)",
|
||||
"expected": "rgb(255, 255, 255)"
|
||||
},
|
||||
{
|
||||
"label": "delete dark confirm geometry",
|
||||
"pass": true,
|
||||
"actual": [
|
||||
"66px",
|
||||
"19px",
|
||||
"19px",
|
||||
"28px",
|
||||
"6px",
|
||||
"12px"
|
||||
],
|
||||
"expected": [
|
||||
"66px",
|
||||
"19px",
|
||||
"19px",
|
||||
"28px",
|
||||
"6px",
|
||||
"12px"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "delete dark cancel geometry",
|
||||
"pass": true,
|
||||
"actual": [
|
||||
"66px",
|
||||
"19px",
|
||||
"19px",
|
||||
"28px",
|
||||
"6px",
|
||||
"12px"
|
||||
],
|
||||
"expected": [
|
||||
"66px",
|
||||
"19px",
|
||||
"19px",
|
||||
"28px",
|
||||
"6px",
|
||||
"12px"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "delete dark title weight",
|
||||
"pass": true,
|
||||
"actual": "600",
|
||||
"expected": "600"
|
||||
},
|
||||
{
|
||||
"label": "delete removes that session from the store",
|
||||
"pass": true,
|
||||
"actual": false,
|
||||
"expected": false
|
||||
},
|
||||
{
|
||||
"label": "delete leaves only the archived session",
|
||||
"pass": true,
|
||||
"actual": 1,
|
||||
"expected": 1
|
||||
},
|
||||
{
|
||||
"label": "no renderer error logs",
|
||||
"pass": true,
|
||||
"actual": [],
|
||||
"expected": []
|
||||
}
|
||||
],
|
||||
"rendererErrors": []
|
||||
}
|
||||
|
After Width: | Height: | Size: 5.3 KiB |
@@ -0,0 +1,45 @@
|
||||
// Acceptance-only CJS harness for the unchanged supplied component fixture.
|
||||
// Same assertions and native inputs, without ESM top-level await or rebuilding inside Electron.
|
||||
const fs=require('fs'),path=require('path'),assert=require('assert/strict');
|
||||
const {createHash}=require('crypto');
|
||||
const electronModule=require('electron');
|
||||
const base=path.resolve('.tmp');
|
||||
const file='src/renderer/src/workbuddy/composer/ModeChip.tsx';
|
||||
if(!process.versions.electron){const env={...process.env};delete env.ELECTRON_RUN_AS_NODE;delete env.ELECTRON_RENDERER_URL;const child=require('child_process').spawn(electronModule,[__filename,process.argv.at(-1)],{env,windowsHide:true,stdio:'inherit'});const timer=setTimeout(()=>child.kill(),60000);child.once('exit',(code,signal)=>{clearTimeout(timer);console.log(JSON.stringify({exitCode:code,signal}));process.exitCode=code===0?0:1});}else{;(async()=>{
|
||||
const { app, BrowserWindow } = electronModule, output = path.resolve(process.argv.at(-1))
|
||||
assert.ok(path.dirname(output) === base && path.basename(output).startsWith('mode-chip-native-'))
|
||||
fs.mkdirSync(path.join(output, 'data'), {recursive:true}); app.setPath('userData', path.join(output, 'data')); app.disableHardwareAcceleration()
|
||||
let win; const checks = [], samples = [], errors = []
|
||||
try {
|
||||
await app.whenReady(); win = new BrowserWindow({ width: 800, height: 300, show: false, webPreferences: { contextIsolation: true, nodeIntegration: false, backgroundThrottling: false } })
|
||||
win.webContents.on('console-message', event => { if (event.level === 'error' || event.level >= 3) errors.push(event.message) })
|
||||
await win.loadFile(path.join(output, 'index.html')); win.showInactive()
|
||||
const read = code => win.webContents.executeJavaScript(code), pause = () => new Promise(resolve => setTimeout(resolve, 80))
|
||||
const check = (label, actual, expected = true) => { assert.deepEqual(actual, expected, label); checks.push(label) }
|
||||
const key = async keyCode => { win.focus();win.webContents.focus();await pause();win.webContents.sendInputEvent({type:'keyDown',keyCode});if(keyCode==='Enter'||keyCode==='Space')win.webContents.sendInputEvent({type:'char',keyCode:keyCode==='Enter'?'\r':' '});win.webContents.sendInputEvent({type:'keyUp',keyCode});await pause() }
|
||||
const sample = () => read(`(()=>{const c=document.querySelector('.yc-mode-chip'),i=c.querySelector('.yc-mode-chip__mode-icon'),b=c.querySelector('button'),s=getComputedStyle(c),r=e=>{const x=e.getBoundingClientRect();return{x:x.x,y:x.y,width:x.width,height:x.height}};return{chip:r(c),icon:r(i),button:b?r(b):null,background:s.backgroundColor,radius:s.borderRadius,color:s.color,expectedColor:s.getPropertyValue('--cr-text-secondary').trim(),font:s.fontSize,weight:s.fontWeight,line:s.lineHeight,padding:s.paddingLeft,iconOpacity:getComputedStyle(i).opacity,clearOpacity:b?getComputedStyle(b).opacity:null}})()`)
|
||||
await pause()
|
||||
for (const theme of ['light', 'dark']) for (const mode of ['plan', 'ask']) {
|
||||
await read(`document.documentElement.dataset.theme='${theme}'; document.querySelector('.chat-pane').dataset.crTheme='${theme}'; qa.setMode('${mode}');qa.setDisabled(false);document.querySelector('#before').focus()`)
|
||||
win.webContents.sendInputEvent({ type: 'mouseMove', x: 1, y: 1 }); await pause()
|
||||
const normal = await sample(); samples.push({ theme, mode, state: 'normal', ...normal })
|
||||
check('transparent', normal.background, 'rgba(0, 0, 0, 0)'); check('pill', parseFloat(normal.radius) >= normal.chip.height / 2)
|
||||
check('height', normal.chip.height, 32); check('font', normal.font, '13px'); check('weight', normal.weight, '500'); check('line', normal.line, '20px'); check('padding', normal.padding, '8px')
|
||||
check('same slot', normal.icon, normal.button); check('icon width', normal.icon.width, 16); check('default icon', normal.iconOpacity, '1'); check('default close', normal.clearOpacity, '0')
|
||||
check('secondary color', await read(`(()=>{const c=document.querySelector('.yc-mode-chip'),p=document.createElement('span');p.style.color='var(--cr-text-secondary)';c.append(p);const ok=getComputedStyle(p).color===getComputedStyle(c).color;p.remove();return ok})()`))
|
||||
win.webContents.sendInputEvent({ type: 'mouseMove', x: Math.round(normal.chip.x + normal.chip.width / 2), y: Math.round(normal.chip.y + normal.chip.height / 2) }); await pause()
|
||||
const hover = await sample(); samples.push({ theme, mode, state: 'hover', ...hover }); check('hover icon hidden', hover.iconOpacity, '0'); check('hover X', hover.clearOpacity, '1'); check('no hover layout shift', hover.chip, normal.chip)
|
||||
win.webContents.sendInputEvent({ type: 'mouseMove', x: 1, y: 1 }); await read(`document.querySelector('.yc-mode-chip').focus()`); await pause()
|
||||
const focus = await sample(); check('focus icon hidden', focus.iconOpacity, '0'); check('focus X', focus.clearOpacity, '1'); check('no focus layout shift', focus.chip, normal.chip)
|
||||
await fs.promises.writeFile(path.join(output, `${theme}-${mode}-focus.png`), (await win.webContents.capturePage()).toPNG())
|
||||
await key('Tab'); check('Tab reaches native clear', await read(`document.activeElement.matches('.yc-mode-chip__clear')`))
|
||||
const before = await read('qa.clears'); await key(mode === 'plan' ? 'Enter' : 'Space'); check('native keyboard exit', await read('qa.clears'), before + 1); check('craft hidden', await read(`!document.querySelector('.yc-mode-chip')`))
|
||||
await read(`qa.setMode('${mode}');qa.setDisabled(true)`); await pause(); check('disabled has no clear', await read(`!document.querySelector('.yc-mode-chip button')`)); check('disabled not tabbable', await read(`document.querySelector('.yc-mode-chip').tabIndex`), -1)
|
||||
}
|
||||
win.setSize(320, 300); await read(`qa.setMode('ask');qa.setDisabled(false)`); await pause(); const narrow = await sample(); check('narrow slot preserved', narrow.icon, narrow.button); check('narrow no overflow', narrow.chip.x + narrow.chip.width <= 320)
|
||||
await fs.promises.writeFile(path.join(output, 'narrow.png'), (await win.webContents.capturePage()).toPNG()); check('no renderer errors', errors, [])
|
||||
fs.writeFileSync(path.join(output, 'report.json'), JSON.stringify({ checks, samples, errors, sourceSha256: createHash('sha256').update(fs.readFileSync(file)).digest('hex'), scope: 'Own-YCode isolated component browser test, not full app/store integration or original-app pixel acceptance' }, null, 2)); app.exit(0)
|
||||
} catch (error) { fs.writeFileSync(path.join(output, 'failure.txt'), String(error.stack || error)); console.error(error); app.exit(1) }
|
||||
|
||||
})().catch(error=>{console.error(error);electronModule.app.exit(1)});
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
|
||||
{"exitCode":0,"signal":null}
|
||||
@@ -0,0 +1,84 @@
|
||||
const fs = require('node:fs/promises')
|
||||
const path = require('node:path')
|
||||
const { pathToFileURL } = require('node:url')
|
||||
|
||||
if (!process.versions.electron) {
|
||||
;(async () => {
|
||||
const dir = await fs.mkdtemp(path.resolve('.tmp/alignment-window-'))
|
||||
const data = path.join(dir, 'data'), home = path.join(dir, 'home'), cwd = path.join(dir, 'workspace')
|
||||
for (const folder of [data, home, cwd]) await fs.mkdir(folder)
|
||||
const now = Date.now()
|
||||
const model = { id:'audit-model', name:'Audit Model', providerId:'custom', model:'fixture', baseUrl:'http://127.0.0.1:1', authMode:'none', protocol:'anthropic', supportsToolCall:true }
|
||||
await fs.writeFile(path.join(data,'models.json'), JSON.stringify({version:1, models:[model], selectedModelId:model.id}))
|
||||
await fs.writeFile(path.join(data,'workspaces.json'),JSON.stringify({selectedWorkspaceId:'audit-space',workspaces:[{id:'audit-space',name:'Audit Workspace',root:cwd,createdAt:now}]}))
|
||||
const question = { id:'q1', question:'Which target should be inspected?', answers:['Local fixture'] }
|
||||
const messages = [
|
||||
{id:'u1',role:'user',content:'Inspect the local fixture.',createdAt:now-10000,status:'done'},
|
||||
{id:'a1',role:'assistant',content:'The local fixture is ready.',createdAt:now-9000,status:'done',turnStartedAt:now-10000,turnFinishedAt:now,turnDurationMs:10000,
|
||||
tools:[{id:'q-tool',name:'AskUserQuestion',args:{questions:[question]},argsRaw:'{}',status:'ok',output:'ANSWER_RAW_SENTINEL',metadata:{questionAnswer:{questions:[question]}}}],
|
||||
parts:[{type:'reasoning',id:'r1',text:'I need the target.',finished:true},{type:'tool',toolId:'q-tool'},{type:'reasoning',id:'r2',text:'The target is selected.',finished:true},{type:'text',text:'The local fixture is ready.'}]}
|
||||
]
|
||||
const session = (id,agentMode,ms) => ({id,title:`Audit ${agentMode}`,cwd,workspaceId:'audit-space',modelId:model.id,agentMode,permissionMode:'full-access',createdAt:ms,updatedAt:ms,messages})
|
||||
await fs.writeFile(path.join(data,'sessions.json'),JSON.stringify({sessions:[session('audit-plan','plan',now+1),session('audit-ask','ask',now)]}))
|
||||
const env={...process.env,YCODE_USER_DATA_DIR:data,YCODE_QA_DIRECTORY:dir,YCODE_QA_OFFSCREEN:'1',YCODE_DISABLE_GPU:'1',YCODE_DISABLE_SYSTEM_INTEGRATION:'1',AUDIT_WINDOW_DIR:dir}
|
||||
delete env.ELECTRON_RUN_AS_NODE; delete env.ELECTRON_RENDERER_URL
|
||||
const child=require('node:child_process').spawn(require('electron'),['--no-sandbox','--disable-gpu-sandbox',__filename],{env,windowsHide:true,stdio:['ignore','pipe','pipe']})
|
||||
let log='';child.stdout.on('data',x=>{log+=x});child.stderr.on('data',x=>{log+=x})
|
||||
const timeout=setTimeout(()=>child.kill(),90000)
|
||||
child.on('exit',async code=>{clearTimeout(timeout);await fs.writeFile(path.join(dir,'process.log'),log);console.log(JSON.stringify({directory:dir,exitCode:code}));if(code)console.error(log.slice(-7000));process.exitCode=code??1})
|
||||
})().catch(e=>{console.error(e);process.exitCode=1})
|
||||
} else {
|
||||
const {app,BrowserWindow,ipcMain}=require('electron')
|
||||
const dir=process.env.AUDIT_WINDOW_DIR
|
||||
app.disableHardwareAcceleration();app.setPath('home',path.join(dir,'home'))
|
||||
const originalHandle=ipcMain.handle.bind(ipcMain)
|
||||
ipcMain.handle=(channel,listener)=>originalHandle(channel,async(...args)=>{if(channel==='session:messages')await new Promise(r=>setTimeout(r,1200));return listener(...args)})
|
||||
let win
|
||||
const pause=ms=>new Promise(r=>setTimeout(r,ms))
|
||||
const read=code=>win.webContents.executeJavaScript(code)
|
||||
async function wait(code){for(let i=0;i<250;i++){const x=await read(code);if(x)return x;await pause(40)}throw new Error('Timeout '+code)}
|
||||
async function shot(name){await read('document.fonts.ready');await pause(80);await fs.writeFile(path.join(dir,name+'.png'),(await win.webContents.capturePage()).toPNG())}
|
||||
const styleProbe=`(selector)=>{const e=document.querySelector(selector);if(!e)return null;const c=getComputedStyle(e),r=e.getBoundingClientRect();return {selector,text:e.textContent,width:r.width,height:r.height,fontSize:c.fontSize,fontWeight:c.fontWeight,lineHeight:c.lineHeight,padding:c.padding,borderRadius:c.borderRadius,background:c.backgroundColor,color:c.color,display:c.display,opacity:c.opacity}}`
|
||||
const styles=selectors=>read(`(()=>{const p=${styleProbe};return ${JSON.stringify(selectors)}.map(p)})()`)
|
||||
;(async()=>{
|
||||
await import(pathToFileURL(path.resolve('out/main/index.mjs')).href);await app.whenReady();win=BrowserWindow.getAllWindows()[0];win.setSize(1336,902);win.showInactive()
|
||||
const errors=[];win.webContents.on('console-message',(_e,level,message)=>{if(level>=3)errors.push(message)})
|
||||
await wait('!!document.querySelector(".yc-session-skeleton")')
|
||||
const skeleton=await styles(['.yc-session-skeleton','.yc-session-skeleton__avatar','.yc-session-skeleton__name','.yc-session-skeleton__user','.yc-session-skeleton__line','.yc-session-skeleton__line--short'])
|
||||
await shot('loading')
|
||||
await wait('!!document.querySelector(".yc-mode-chip") && !!document.querySelector(".msg--assistant")')
|
||||
await pause(350)
|
||||
const mode=await styles(['.yc-mode-chip','.yc-mode-chip__mode-icon','.yc-mode-chip__clear'])
|
||||
await shot('plan')
|
||||
await read('document.querySelector(".yc-mode-chip").focus()')
|
||||
const focusedMode=await styles(['.yc-mode-chip','.yc-mode-chip__mode-icon','.yc-mode-chip__clear'])
|
||||
await shot('plan-focus')
|
||||
|
||||
const checks=[];
|
||||
for(const agentMode of ['plan','ask']){
|
||||
const sessionId='audit-'+agentMode;
|
||||
if(agentMode==='ask'){
|
||||
await read('document.querySelector("[data-session-id=\\"audit-ask\\"]").click()');
|
||||
await wait('!!document.querySelector(".yc-mode-chip") && !document.querySelector(".yc-session-skeleton") && document.querySelector(".yc-mode-chip").textContent.includes("仅问答")');
|
||||
}
|
||||
await read('document.querySelector(".wb-composer textarea").focus()');
|
||||
await win.webContents.insertText('KEEP_'+agentMode+'_DRAFT');
|
||||
await wait('document.querySelector(".wb-composer textarea").value.includes("KEEP_'+agentMode+'_DRAFT")');
|
||||
const before=await read('({draft:document.querySelector(".wb-composer textarea").value,permissionDisabled:document.querySelector(".yc-source-permission-trigger > button").disabled})');
|
||||
const metadataBefore=await read('window.ycode.session.list().then(list=>list.find(item=>item.id==='+JSON.stringify(sessionId)+'))');
|
||||
await read('document.querySelector(".yc-mode-chip__clear").focus()');
|
||||
win.focus();win.webContents.focus();await pause(100);
|
||||
win.webContents.sendInputEvent({type:'keyDown',keyCode:'Enter'});
|
||||
win.webContents.sendInputEvent({type:'char',keyCode:'\r'});
|
||||
win.webContents.sendInputEvent({type:'keyUp',keyCode:'Enter'});
|
||||
await wait('!document.querySelector(".yc-mode-chip")');
|
||||
const after=await read('({draft:document.querySelector(".wb-composer textarea").value,permissionDisabled:document.querySelector(".yc-source-permission-trigger > button").disabled})');
|
||||
const metadataAfter=await read('window.ycode.session.list().then(list=>list.find(item=>item.id==='+JSON.stringify(sessionId)+'))');
|
||||
if(before.draft!==after.draft||!before.permissionDisabled||after.permissionDisabled||metadataBefore.permissionMode!=='full-access'||metadataAfter.permissionMode!=='full-access'||metadataAfter.agentMode!=='craft')throw Error('Mode host state mismatch '+agentMode);
|
||||
checks.push({agentMode,before,after,savedPermissionBefore:metadataBefore.permissionMode,savedPermissionAfter:metadataAfter.permissionMode,savedModeAfter:metadataAfter.agentMode});
|
||||
await shot(agentMode+'-craft-draft-kept');
|
||||
}
|
||||
await fs.writeFile(path.join(dir,'report.json'),JSON.stringify({codeSha:'1ed71b63b5af9a98b942ff47c66df5799d4d2c8a',scope:'Actual isolated app; native keyboard exits plan/ask with draft and saved permission retained; no model requests',checks,errors},null,2));
|
||||
if(errors.length)throw Error('Renderer errors');app.exit(0);
|
||||
})().catch(async e=>{console.error(e);if(win)await shot('failure').catch(()=>{});await fs.writeFile(path.join(dir,'failure.txt'),String(e));app.exit(1)})
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"codeSha": "1ed71b63b5af9a98b942ff47c66df5799d4d2c8a",
|
||||
"scope": "Actual isolated app; native keyboard exits plan/ask with draft and saved permission retained; no model requests",
|
||||
"checks": [
|
||||
{
|
||||
"agentMode": "plan",
|
||||
"before": {
|
||||
"draft": "KEEP_plan_DRAFT",
|
||||
"permissionDisabled": true
|
||||
},
|
||||
"after": {
|
||||
"draft": "KEEP_plan_DRAFT",
|
||||
"permissionDisabled": false
|
||||
},
|
||||
"savedPermissionBefore": "full-access",
|
||||
"savedPermissionAfter": "full-access",
|
||||
"savedModeAfter": "craft"
|
||||
},
|
||||
{
|
||||
"agentMode": "ask",
|
||||
"before": {
|
||||
"draft": "KEEP_ask_DRAFT",
|
||||
"permissionDisabled": true
|
||||
},
|
||||
"after": {
|
||||
"draft": "KEEP_ask_DRAFT",
|
||||
"permissionDisabled": false
|
||||
},
|
||||
"savedPermissionBefore": "full-access",
|
||||
"savedPermissionAfter": "full-access",
|
||||
"savedModeAfter": "craft"
|
||||
}
|
||||
],
|
||||
"errors": []
|
||||
}
|
||||
|
After Width: | Height: | Size: 3.3 KiB |
@@ -0,0 +1,368 @@
|
||||
{
|
||||
"checks": [
|
||||
"transparent",
|
||||
"pill",
|
||||
"height",
|
||||
"font",
|
||||
"weight",
|
||||
"line",
|
||||
"padding",
|
||||
"same slot",
|
||||
"icon width",
|
||||
"default icon",
|
||||
"default close",
|
||||
"secondary color",
|
||||
"hover icon hidden",
|
||||
"hover X",
|
||||
"no hover layout shift",
|
||||
"focus icon hidden",
|
||||
"focus X",
|
||||
"no focus layout shift",
|
||||
"Tab reaches native clear",
|
||||
"native keyboard exit",
|
||||
"craft hidden",
|
||||
"disabled has no clear",
|
||||
"disabled not tabbable",
|
||||
"transparent",
|
||||
"pill",
|
||||
"height",
|
||||
"font",
|
||||
"weight",
|
||||
"line",
|
||||
"padding",
|
||||
"same slot",
|
||||
"icon width",
|
||||
"default icon",
|
||||
"default close",
|
||||
"secondary color",
|
||||
"hover icon hidden",
|
||||
"hover X",
|
||||
"no hover layout shift",
|
||||
"focus icon hidden",
|
||||
"focus X",
|
||||
"no focus layout shift",
|
||||
"Tab reaches native clear",
|
||||
"native keyboard exit",
|
||||
"craft hidden",
|
||||
"disabled has no clear",
|
||||
"disabled not tabbable",
|
||||
"transparent",
|
||||
"pill",
|
||||
"height",
|
||||
"font",
|
||||
"weight",
|
||||
"line",
|
||||
"padding",
|
||||
"same slot",
|
||||
"icon width",
|
||||
"default icon",
|
||||
"default close",
|
||||
"secondary color",
|
||||
"hover icon hidden",
|
||||
"hover X",
|
||||
"no hover layout shift",
|
||||
"focus icon hidden",
|
||||
"focus X",
|
||||
"no focus layout shift",
|
||||
"Tab reaches native clear",
|
||||
"native keyboard exit",
|
||||
"craft hidden",
|
||||
"disabled has no clear",
|
||||
"disabled not tabbable",
|
||||
"transparent",
|
||||
"pill",
|
||||
"height",
|
||||
"font",
|
||||
"weight",
|
||||
"line",
|
||||
"padding",
|
||||
"same slot",
|
||||
"icon width",
|
||||
"default icon",
|
||||
"default close",
|
||||
"secondary color",
|
||||
"hover icon hidden",
|
||||
"hover X",
|
||||
"no hover layout shift",
|
||||
"focus icon hidden",
|
||||
"focus X",
|
||||
"no focus layout shift",
|
||||
"Tab reaches native clear",
|
||||
"native keyboard exit",
|
||||
"craft hidden",
|
||||
"disabled has no clear",
|
||||
"disabled not tabbable",
|
||||
"narrow slot preserved",
|
||||
"narrow no overflow",
|
||||
"no renderer errors"
|
||||
],
|
||||
"samples": [
|
||||
{
|
||||
"theme": "light",
|
||||
"mode": "plan",
|
||||
"state": "normal",
|
||||
"chip": {
|
||||
"x": 88.125,
|
||||
"y": 40,
|
||||
"width": 62,
|
||||
"height": 32
|
||||
},
|
||||
"icon": {
|
||||
"x": 96.125,
|
||||
"y": 48,
|
||||
"width": 16,
|
||||
"height": 16
|
||||
},
|
||||
"button": {
|
||||
"x": 96.125,
|
||||
"y": 48,
|
||||
"width": 16,
|
||||
"height": 16
|
||||
},
|
||||
"background": "rgba(0, 0, 0, 0)",
|
||||
"radius": "9999px",
|
||||
"color": "rgba(0, 0, 0, 0.7)",
|
||||
"expectedColor": "#000000b3",
|
||||
"font": "13px",
|
||||
"weight": "500",
|
||||
"line": "20px",
|
||||
"padding": "8px",
|
||||
"iconOpacity": "1",
|
||||
"clearOpacity": "0"
|
||||
},
|
||||
{
|
||||
"theme": "light",
|
||||
"mode": "plan",
|
||||
"state": "hover",
|
||||
"chip": {
|
||||
"x": 88.125,
|
||||
"y": 40,
|
||||
"width": 62,
|
||||
"height": 32
|
||||
},
|
||||
"icon": {
|
||||
"x": 96.125,
|
||||
"y": 48,
|
||||
"width": 16,
|
||||
"height": 16
|
||||
},
|
||||
"button": {
|
||||
"x": 96.125,
|
||||
"y": 48,
|
||||
"width": 16,
|
||||
"height": 16
|
||||
},
|
||||
"background": "rgba(0, 0, 0, 0)",
|
||||
"radius": "9999px",
|
||||
"color": "rgba(0, 0, 0, 0.7)",
|
||||
"expectedColor": "#000000b3",
|
||||
"font": "13px",
|
||||
"weight": "500",
|
||||
"line": "20px",
|
||||
"padding": "8px",
|
||||
"iconOpacity": "0",
|
||||
"clearOpacity": "1"
|
||||
},
|
||||
{
|
||||
"theme": "light",
|
||||
"mode": "ask",
|
||||
"state": "normal",
|
||||
"chip": {
|
||||
"x": 88.125,
|
||||
"y": 40,
|
||||
"width": 75,
|
||||
"height": 32
|
||||
},
|
||||
"icon": {
|
||||
"x": 96.125,
|
||||
"y": 48,
|
||||
"width": 16,
|
||||
"height": 16
|
||||
},
|
||||
"button": {
|
||||
"x": 96.125,
|
||||
"y": 48,
|
||||
"width": 16,
|
||||
"height": 16
|
||||
},
|
||||
"background": "rgba(0, 0, 0, 0)",
|
||||
"radius": "9999px",
|
||||
"color": "rgba(0, 0, 0, 0.7)",
|
||||
"expectedColor": "#000000b3",
|
||||
"font": "13px",
|
||||
"weight": "500",
|
||||
"line": "20px",
|
||||
"padding": "8px",
|
||||
"iconOpacity": "1",
|
||||
"clearOpacity": "0"
|
||||
},
|
||||
{
|
||||
"theme": "light",
|
||||
"mode": "ask",
|
||||
"state": "hover",
|
||||
"chip": {
|
||||
"x": 88.125,
|
||||
"y": 40,
|
||||
"width": 75,
|
||||
"height": 32
|
||||
},
|
||||
"icon": {
|
||||
"x": 96.125,
|
||||
"y": 48,
|
||||
"width": 16,
|
||||
"height": 16
|
||||
},
|
||||
"button": {
|
||||
"x": 96.125,
|
||||
"y": 48,
|
||||
"width": 16,
|
||||
"height": 16
|
||||
},
|
||||
"background": "rgba(0, 0, 0, 0)",
|
||||
"radius": "9999px",
|
||||
"color": "rgba(0, 0, 0, 0.7)",
|
||||
"expectedColor": "#000000b3",
|
||||
"font": "13px",
|
||||
"weight": "500",
|
||||
"line": "20px",
|
||||
"padding": "8px",
|
||||
"iconOpacity": "0",
|
||||
"clearOpacity": "1"
|
||||
},
|
||||
{
|
||||
"theme": "dark",
|
||||
"mode": "plan",
|
||||
"state": "normal",
|
||||
"chip": {
|
||||
"x": 88.125,
|
||||
"y": 40,
|
||||
"width": 62,
|
||||
"height": 32
|
||||
},
|
||||
"icon": {
|
||||
"x": 96.125,
|
||||
"y": 48,
|
||||
"width": 16,
|
||||
"height": 16
|
||||
},
|
||||
"button": {
|
||||
"x": 96.125,
|
||||
"y": 48,
|
||||
"width": 16,
|
||||
"height": 16
|
||||
},
|
||||
"background": "rgba(0, 0, 0, 0)",
|
||||
"radius": "9999px",
|
||||
"color": "rgba(255, 255, 255, 0.65)",
|
||||
"expectedColor": "#ffffffa6",
|
||||
"font": "13px",
|
||||
"weight": "500",
|
||||
"line": "20px",
|
||||
"padding": "8px",
|
||||
"iconOpacity": "1",
|
||||
"clearOpacity": "0"
|
||||
},
|
||||
{
|
||||
"theme": "dark",
|
||||
"mode": "plan",
|
||||
"state": "hover",
|
||||
"chip": {
|
||||
"x": 88.125,
|
||||
"y": 40,
|
||||
"width": 62,
|
||||
"height": 32
|
||||
},
|
||||
"icon": {
|
||||
"x": 96.125,
|
||||
"y": 48,
|
||||
"width": 16,
|
||||
"height": 16
|
||||
},
|
||||
"button": {
|
||||
"x": 96.125,
|
||||
"y": 48,
|
||||
"width": 16,
|
||||
"height": 16
|
||||
},
|
||||
"background": "rgba(0, 0, 0, 0)",
|
||||
"radius": "9999px",
|
||||
"color": "rgba(255, 255, 255, 0.65)",
|
||||
"expectedColor": "#ffffffa6",
|
||||
"font": "13px",
|
||||
"weight": "500",
|
||||
"line": "20px",
|
||||
"padding": "8px",
|
||||
"iconOpacity": "0",
|
||||
"clearOpacity": "1"
|
||||
},
|
||||
{
|
||||
"theme": "dark",
|
||||
"mode": "ask",
|
||||
"state": "normal",
|
||||
"chip": {
|
||||
"x": 88.125,
|
||||
"y": 40,
|
||||
"width": 75,
|
||||
"height": 32
|
||||
},
|
||||
"icon": {
|
||||
"x": 96.125,
|
||||
"y": 48,
|
||||
"width": 16,
|
||||
"height": 16
|
||||
},
|
||||
"button": {
|
||||
"x": 96.125,
|
||||
"y": 48,
|
||||
"width": 16,
|
||||
"height": 16
|
||||
},
|
||||
"background": "rgba(0, 0, 0, 0)",
|
||||
"radius": "9999px",
|
||||
"color": "rgba(255, 255, 255, 0.65)",
|
||||
"expectedColor": "#ffffffa6",
|
||||
"font": "13px",
|
||||
"weight": "500",
|
||||
"line": "20px",
|
||||
"padding": "8px",
|
||||
"iconOpacity": "1",
|
||||
"clearOpacity": "0"
|
||||
},
|
||||
{
|
||||
"theme": "dark",
|
||||
"mode": "ask",
|
||||
"state": "hover",
|
||||
"chip": {
|
||||
"x": 88.125,
|
||||
"y": 40,
|
||||
"width": 75,
|
||||
"height": 32
|
||||
},
|
||||
"icon": {
|
||||
"x": 96.125,
|
||||
"y": 48,
|
||||
"width": 16,
|
||||
"height": 16
|
||||
},
|
||||
"button": {
|
||||
"x": 96.125,
|
||||
"y": 48,
|
||||
"width": 16,
|
||||
"height": 16
|
||||
},
|
||||
"background": "rgba(0, 0, 0, 0)",
|
||||
"radius": "9999px",
|
||||
"color": "rgba(255, 255, 255, 0.65)",
|
||||
"expectedColor": "#ffffffa6",
|
||||
"font": "13px",
|
||||
"weight": "500",
|
||||
"line": "20px",
|
||||
"padding": "8px",
|
||||
"iconOpacity": "0",
|
||||
"clearOpacity": "1"
|
||||
}
|
||||
],
|
||||
"errors": [],
|
||||
"sourceSha256": "805cb1c06baf00480f2cbfad8e432d0c984a3b2cce2e12683a9db2defbbe6110",
|
||||
"scope": "Own-YCode isolated component browser test, not full app/store integration or original-app pixel acceptance"
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
|
||||
{"output":"C:\\Users\\Administrator\\.codex\\worktrees\\b01-accept-01\\YCode\\.tmp\\mode-chip-native-iW7Uhk","exitCode":null}
|
||||
@@ -0,0 +1,817 @@
|
||||
{
|
||||
"pass": true,
|
||||
"results": [
|
||||
{
|
||||
"label": "light/archive/false geometry",
|
||||
"actual": [
|
||||
"66px",
|
||||
"19px",
|
||||
"19px",
|
||||
"28px",
|
||||
"6px",
|
||||
"12px"
|
||||
],
|
||||
"expected": [
|
||||
"66px",
|
||||
"19px",
|
||||
"19px",
|
||||
"28px",
|
||||
"6px",
|
||||
"12px"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "light/archive/false geometry",
|
||||
"actual": [
|
||||
"66px",
|
||||
"19px",
|
||||
"19px",
|
||||
"28px",
|
||||
"6px",
|
||||
"12px"
|
||||
],
|
||||
"expected": [
|
||||
"66px",
|
||||
"19px",
|
||||
"19px",
|
||||
"28px",
|
||||
"6px",
|
||||
"12px"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "light/archive/false primary/danger colors",
|
||||
"actual": [
|
||||
"rgba(0, 0, 0, 0.9)",
|
||||
"rgb(255, 255, 255)"
|
||||
],
|
||||
"expected": [
|
||||
"rgba(0, 0, 0, 0.9)",
|
||||
"rgb(255, 255, 255)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "light/archive/false secondary colors/border",
|
||||
"actual": [
|
||||
"rgb(255, 255, 255)",
|
||||
"1px",
|
||||
"solid",
|
||||
"rgb(222, 222, 222)"
|
||||
],
|
||||
"expected": [
|
||||
"rgb(255, 255, 255)",
|
||||
"1px",
|
||||
"solid",
|
||||
"rgb(222, 222, 222)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "light/archive/false shell",
|
||||
"actual": [
|
||||
"240px",
|
||||
"16px",
|
||||
"600"
|
||||
],
|
||||
"expected": [
|
||||
"240px",
|
||||
"16px",
|
||||
"600"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "light/archive/false shell background",
|
||||
"actual": "rgb(255, 255, 255)",
|
||||
"expected": "rgb(255, 255, 255)"
|
||||
},
|
||||
{
|
||||
"label": "light/archive/false initial focus",
|
||||
"actual": true,
|
||||
"expected": true
|
||||
},
|
||||
{
|
||||
"label": "light/archive/false busy prevents duplicates",
|
||||
"actual": [
|
||||
1,
|
||||
true,
|
||||
true,
|
||||
"处理中…"
|
||||
],
|
||||
"expected": [
|
||||
1,
|
||||
true,
|
||||
true,
|
||||
"处理中…"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "light/archive/false busy cannot dismiss",
|
||||
"actual": 0,
|
||||
"expected": 0
|
||||
},
|
||||
{
|
||||
"label": "light/archive/false failure retained",
|
||||
"actual": "fixture failure",
|
||||
"expected": "fixture failure"
|
||||
},
|
||||
{
|
||||
"label": "light/archive/false retry enabled",
|
||||
"actual": false,
|
||||
"expected": false
|
||||
},
|
||||
{
|
||||
"label": "light/archive/false retry success",
|
||||
"actual": [
|
||||
2,
|
||||
1,
|
||||
false
|
||||
],
|
||||
"expected": [
|
||||
2,
|
||||
1,
|
||||
false
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "light/delete/false geometry",
|
||||
"actual": [
|
||||
"66px",
|
||||
"19px",
|
||||
"19px",
|
||||
"28px",
|
||||
"6px",
|
||||
"12px"
|
||||
],
|
||||
"expected": [
|
||||
"66px",
|
||||
"19px",
|
||||
"19px",
|
||||
"28px",
|
||||
"6px",
|
||||
"12px"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "light/delete/false geometry",
|
||||
"actual": [
|
||||
"66px",
|
||||
"19px",
|
||||
"19px",
|
||||
"28px",
|
||||
"6px",
|
||||
"12px"
|
||||
],
|
||||
"expected": [
|
||||
"66px",
|
||||
"19px",
|
||||
"19px",
|
||||
"28px",
|
||||
"6px",
|
||||
"12px"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "light/delete/false primary/danger colors",
|
||||
"actual": [
|
||||
"rgb(232, 92, 92)",
|
||||
"rgb(255, 255, 255)"
|
||||
],
|
||||
"expected": [
|
||||
"rgb(232, 92, 92)",
|
||||
"rgb(255, 255, 255)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "light/delete/false secondary colors/border",
|
||||
"actual": [
|
||||
"rgb(255, 255, 255)",
|
||||
"1px",
|
||||
"solid",
|
||||
"rgb(222, 222, 222)"
|
||||
],
|
||||
"expected": [
|
||||
"rgb(255, 255, 255)",
|
||||
"1px",
|
||||
"solid",
|
||||
"rgb(222, 222, 222)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "light/delete/false shell",
|
||||
"actual": [
|
||||
"240px",
|
||||
"16px",
|
||||
"600"
|
||||
],
|
||||
"expected": [
|
||||
"240px",
|
||||
"16px",
|
||||
"600"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "light/delete/false shell background",
|
||||
"actual": "rgb(255, 255, 255)",
|
||||
"expected": "rgb(255, 255, 255)"
|
||||
},
|
||||
{
|
||||
"label": "light/delete/false initial focus",
|
||||
"actual": true,
|
||||
"expected": true
|
||||
},
|
||||
{
|
||||
"label": "light/delete/false busy prevents duplicates",
|
||||
"actual": [
|
||||
1,
|
||||
true,
|
||||
true,
|
||||
"处理中…"
|
||||
],
|
||||
"expected": [
|
||||
1,
|
||||
true,
|
||||
true,
|
||||
"处理中…"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "light/delete/false busy cannot dismiss",
|
||||
"actual": 0,
|
||||
"expected": 0
|
||||
},
|
||||
{
|
||||
"label": "light/delete/false danger busy background",
|
||||
"actual": "rgb(245, 185, 185)",
|
||||
"expected": "rgb(245, 185, 185)"
|
||||
},
|
||||
{
|
||||
"label": "light/delete/false failure retained",
|
||||
"actual": "fixture failure",
|
||||
"expected": "fixture failure"
|
||||
},
|
||||
{
|
||||
"label": "light/delete/false retry enabled",
|
||||
"actual": false,
|
||||
"expected": false
|
||||
},
|
||||
{
|
||||
"label": "light/delete/false retry success",
|
||||
"actual": [
|
||||
2,
|
||||
1,
|
||||
false
|
||||
],
|
||||
"expected": [
|
||||
2,
|
||||
1,
|
||||
false
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "light/delete/true geometry",
|
||||
"actual": [
|
||||
"66px",
|
||||
"19px",
|
||||
"19px",
|
||||
"28px",
|
||||
"6px",
|
||||
"12px"
|
||||
],
|
||||
"expected": [
|
||||
"66px",
|
||||
"19px",
|
||||
"19px",
|
||||
"28px",
|
||||
"6px",
|
||||
"12px"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "light/delete/true geometry",
|
||||
"actual": [
|
||||
"66px",
|
||||
"19px",
|
||||
"19px",
|
||||
"28px",
|
||||
"6px",
|
||||
"12px"
|
||||
],
|
||||
"expected": [
|
||||
"66px",
|
||||
"19px",
|
||||
"19px",
|
||||
"28px",
|
||||
"6px",
|
||||
"12px"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "light/delete/true primary/danger colors",
|
||||
"actual": [
|
||||
"rgb(232, 92, 92)",
|
||||
"rgb(255, 255, 255)"
|
||||
],
|
||||
"expected": [
|
||||
"rgb(232, 92, 92)",
|
||||
"rgb(255, 255, 255)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "light/delete/true secondary colors/border",
|
||||
"actual": [
|
||||
"rgb(255, 255, 255)",
|
||||
"1px",
|
||||
"solid",
|
||||
"rgb(222, 222, 222)"
|
||||
],
|
||||
"expected": [
|
||||
"rgb(255, 255, 255)",
|
||||
"1px",
|
||||
"solid",
|
||||
"rgb(222, 222, 222)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "light/delete/true shell",
|
||||
"actual": [
|
||||
"240px",
|
||||
"16px",
|
||||
"600"
|
||||
],
|
||||
"expected": [
|
||||
"240px",
|
||||
"16px",
|
||||
"600"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "light/delete/true shell background",
|
||||
"actual": "rgb(255, 255, 255)",
|
||||
"expected": "rgb(255, 255, 255)"
|
||||
},
|
||||
{
|
||||
"label": "light/delete/true initial focus",
|
||||
"actual": true,
|
||||
"expected": true
|
||||
},
|
||||
{
|
||||
"label": "light/delete/true running delete semantic",
|
||||
"actual": "停止并删除",
|
||||
"expected": "停止并删除"
|
||||
},
|
||||
{
|
||||
"label": "light/delete/true busy prevents duplicates",
|
||||
"actual": [
|
||||
1,
|
||||
true,
|
||||
true,
|
||||
"处理中…"
|
||||
],
|
||||
"expected": [
|
||||
1,
|
||||
true,
|
||||
true,
|
||||
"处理中…"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "light/delete/true busy cannot dismiss",
|
||||
"actual": 0,
|
||||
"expected": 0
|
||||
},
|
||||
{
|
||||
"label": "light/delete/true danger busy background",
|
||||
"actual": "rgb(245, 185, 185)",
|
||||
"expected": "rgb(245, 185, 185)"
|
||||
},
|
||||
{
|
||||
"label": "light/delete/true failure retained",
|
||||
"actual": "fixture failure",
|
||||
"expected": "fixture failure"
|
||||
},
|
||||
{
|
||||
"label": "light/delete/true retry enabled",
|
||||
"actual": false,
|
||||
"expected": false
|
||||
},
|
||||
{
|
||||
"label": "light/delete/true retry success",
|
||||
"actual": [
|
||||
2,
|
||||
1,
|
||||
false
|
||||
],
|
||||
"expected": [
|
||||
2,
|
||||
1,
|
||||
false
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "dark/archive/false geometry",
|
||||
"actual": [
|
||||
"66px",
|
||||
"19px",
|
||||
"19px",
|
||||
"28px",
|
||||
"6px",
|
||||
"12px"
|
||||
],
|
||||
"expected": [
|
||||
"66px",
|
||||
"19px",
|
||||
"19px",
|
||||
"28px",
|
||||
"6px",
|
||||
"12px"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "dark/archive/false geometry",
|
||||
"actual": [
|
||||
"66px",
|
||||
"19px",
|
||||
"19px",
|
||||
"28px",
|
||||
"6px",
|
||||
"12px"
|
||||
],
|
||||
"expected": [
|
||||
"66px",
|
||||
"19px",
|
||||
"19px",
|
||||
"28px",
|
||||
"6px",
|
||||
"12px"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "dark/archive/false primary/danger colors",
|
||||
"actual": [
|
||||
"rgba(255, 255, 255, 0.9)",
|
||||
"rgba(0, 0, 0, 0.9)"
|
||||
],
|
||||
"expected": [
|
||||
"rgba(255, 255, 255, 0.9)",
|
||||
"rgba(0, 0, 0, 0.9)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "dark/archive/false secondary colors/border",
|
||||
"actual": [
|
||||
"rgb(38, 38, 38)",
|
||||
"1px",
|
||||
"solid",
|
||||
"rgb(61, 61, 61)"
|
||||
],
|
||||
"expected": [
|
||||
"rgb(38, 38, 38)",
|
||||
"1px",
|
||||
"solid",
|
||||
"rgb(61, 61, 61)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "dark/archive/false shell",
|
||||
"actual": [
|
||||
"240px",
|
||||
"16px",
|
||||
"600"
|
||||
],
|
||||
"expected": [
|
||||
"240px",
|
||||
"16px",
|
||||
"600"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "dark/archive/false shell background",
|
||||
"actual": "rgb(36, 36, 36)",
|
||||
"expected": "rgb(36, 36, 36)"
|
||||
},
|
||||
{
|
||||
"label": "dark/archive/false initial focus",
|
||||
"actual": true,
|
||||
"expected": true
|
||||
},
|
||||
{
|
||||
"label": "dark/archive/false busy prevents duplicates",
|
||||
"actual": [
|
||||
1,
|
||||
true,
|
||||
true,
|
||||
"处理中…"
|
||||
],
|
||||
"expected": [
|
||||
1,
|
||||
true,
|
||||
true,
|
||||
"处理中…"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "dark/archive/false busy cannot dismiss",
|
||||
"actual": 0,
|
||||
"expected": 0
|
||||
},
|
||||
{
|
||||
"label": "dark/archive/false failure retained",
|
||||
"actual": "fixture failure",
|
||||
"expected": "fixture failure"
|
||||
},
|
||||
{
|
||||
"label": "dark/archive/false retry enabled",
|
||||
"actual": false,
|
||||
"expected": false
|
||||
},
|
||||
{
|
||||
"label": "dark/archive/false retry success",
|
||||
"actual": [
|
||||
2,
|
||||
1,
|
||||
false
|
||||
],
|
||||
"expected": [
|
||||
2,
|
||||
1,
|
||||
false
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "dark/delete/false geometry",
|
||||
"actual": [
|
||||
"66px",
|
||||
"19px",
|
||||
"19px",
|
||||
"28px",
|
||||
"6px",
|
||||
"12px"
|
||||
],
|
||||
"expected": [
|
||||
"66px",
|
||||
"19px",
|
||||
"19px",
|
||||
"28px",
|
||||
"6px",
|
||||
"12px"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "dark/delete/false geometry",
|
||||
"actual": [
|
||||
"66px",
|
||||
"19px",
|
||||
"19px",
|
||||
"28px",
|
||||
"6px",
|
||||
"12px"
|
||||
],
|
||||
"expected": [
|
||||
"66px",
|
||||
"19px",
|
||||
"19px",
|
||||
"28px",
|
||||
"6px",
|
||||
"12px"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "dark/delete/false primary/danger colors",
|
||||
"actual": [
|
||||
"rgb(175, 25, 26)",
|
||||
"rgb(255, 255, 255)"
|
||||
],
|
||||
"expected": [
|
||||
"rgb(175, 25, 26)",
|
||||
"rgb(255, 255, 255)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "dark/delete/false secondary colors/border",
|
||||
"actual": [
|
||||
"rgb(38, 38, 38)",
|
||||
"1px",
|
||||
"solid",
|
||||
"rgb(61, 61, 61)"
|
||||
],
|
||||
"expected": [
|
||||
"rgb(38, 38, 38)",
|
||||
"1px",
|
||||
"solid",
|
||||
"rgb(61, 61, 61)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "dark/delete/false shell",
|
||||
"actual": [
|
||||
"240px",
|
||||
"16px",
|
||||
"600"
|
||||
],
|
||||
"expected": [
|
||||
"240px",
|
||||
"16px",
|
||||
"600"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "dark/delete/false shell background",
|
||||
"actual": "rgb(36, 36, 36)",
|
||||
"expected": "rgb(36, 36, 36)"
|
||||
},
|
||||
{
|
||||
"label": "dark/delete/false initial focus",
|
||||
"actual": true,
|
||||
"expected": true
|
||||
},
|
||||
{
|
||||
"label": "dark/delete/false busy prevents duplicates",
|
||||
"actual": [
|
||||
1,
|
||||
true,
|
||||
true,
|
||||
"处理中…"
|
||||
],
|
||||
"expected": [
|
||||
1,
|
||||
true,
|
||||
true,
|
||||
"处理中…"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "dark/delete/false busy cannot dismiss",
|
||||
"actual": 0,
|
||||
"expected": 0
|
||||
},
|
||||
{
|
||||
"label": "dark/delete/false danger busy background",
|
||||
"actual": "rgb(128, 56, 56)",
|
||||
"expected": "rgb(128, 56, 56)"
|
||||
},
|
||||
{
|
||||
"label": "dark/delete/false failure retained",
|
||||
"actual": "fixture failure",
|
||||
"expected": "fixture failure"
|
||||
},
|
||||
{
|
||||
"label": "dark/delete/false retry enabled",
|
||||
"actual": false,
|
||||
"expected": false
|
||||
},
|
||||
{
|
||||
"label": "dark/delete/false retry success",
|
||||
"actual": [
|
||||
2,
|
||||
1,
|
||||
false
|
||||
],
|
||||
"expected": [
|
||||
2,
|
||||
1,
|
||||
false
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "dark/delete/true geometry",
|
||||
"actual": [
|
||||
"66px",
|
||||
"19px",
|
||||
"19px",
|
||||
"28px",
|
||||
"6px",
|
||||
"12px"
|
||||
],
|
||||
"expected": [
|
||||
"66px",
|
||||
"19px",
|
||||
"19px",
|
||||
"28px",
|
||||
"6px",
|
||||
"12px"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "dark/delete/true geometry",
|
||||
"actual": [
|
||||
"66px",
|
||||
"19px",
|
||||
"19px",
|
||||
"28px",
|
||||
"6px",
|
||||
"12px"
|
||||
],
|
||||
"expected": [
|
||||
"66px",
|
||||
"19px",
|
||||
"19px",
|
||||
"28px",
|
||||
"6px",
|
||||
"12px"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "dark/delete/true primary/danger colors",
|
||||
"actual": [
|
||||
"rgb(175, 25, 26)",
|
||||
"rgb(255, 255, 255)"
|
||||
],
|
||||
"expected": [
|
||||
"rgb(175, 25, 26)",
|
||||
"rgb(255, 255, 255)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "dark/delete/true secondary colors/border",
|
||||
"actual": [
|
||||
"rgb(38, 38, 38)",
|
||||
"1px",
|
||||
"solid",
|
||||
"rgb(61, 61, 61)"
|
||||
],
|
||||
"expected": [
|
||||
"rgb(38, 38, 38)",
|
||||
"1px",
|
||||
"solid",
|
||||
"rgb(61, 61, 61)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "dark/delete/true shell",
|
||||
"actual": [
|
||||
"240px",
|
||||
"16px",
|
||||
"600"
|
||||
],
|
||||
"expected": [
|
||||
"240px",
|
||||
"16px",
|
||||
"600"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "dark/delete/true shell background",
|
||||
"actual": "rgb(36, 36, 36)",
|
||||
"expected": "rgb(36, 36, 36)"
|
||||
},
|
||||
{
|
||||
"label": "dark/delete/true initial focus",
|
||||
"actual": true,
|
||||
"expected": true
|
||||
},
|
||||
{
|
||||
"label": "dark/delete/true running delete semantic",
|
||||
"actual": "停止并删除",
|
||||
"expected": "停止并删除"
|
||||
},
|
||||
{
|
||||
"label": "dark/delete/true busy prevents duplicates",
|
||||
"actual": [
|
||||
1,
|
||||
true,
|
||||
true,
|
||||
"处理中…"
|
||||
],
|
||||
"expected": [
|
||||
1,
|
||||
true,
|
||||
true,
|
||||
"处理中…"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "dark/delete/true busy cannot dismiss",
|
||||
"actual": 0,
|
||||
"expected": 0
|
||||
},
|
||||
{
|
||||
"label": "dark/delete/true danger busy background",
|
||||
"actual": "rgb(128, 56, 56)",
|
||||
"expected": "rgb(128, 56, 56)"
|
||||
},
|
||||
{
|
||||
"label": "dark/delete/true failure retained",
|
||||
"actual": "fixture failure",
|
||||
"expected": "fixture failure"
|
||||
},
|
||||
{
|
||||
"label": "dark/delete/true retry enabled",
|
||||
"actual": false,
|
||||
"expected": false
|
||||
},
|
||||
{
|
||||
"label": "dark/delete/true retry success",
|
||||
"actual": [
|
||||
2,
|
||||
1,
|
||||
false
|
||||
],
|
||||
"expected": [
|
||||
2,
|
||||
1,
|
||||
false
|
||||
]
|
||||
}
|
||||
],
|
||||
"rendererErrors": [],
|
||||
"scope": "Actual Electron Chromium component fixture; isolated callbacks, no IPC/model/session execution"
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
// Acceptance-only Electron runner for the unchanged supplied Chromium HTML fixture.
|
||||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
const assert = require('assert/strict')
|
||||
const electron = require('electron')
|
||||
const directory = path.resolve(process.argv.at(-1))
|
||||
assert.ok(path.dirname(directory) === path.resolve('.tmp') && path.basename(directory).startsWith('task-popconfirm-browser-'))
|
||||
if (!process.versions.electron) {
|
||||
const env = { ...process.env }
|
||||
delete env.ELECTRON_RUN_AS_NODE
|
||||
delete env.ELECTRON_RENDERER_URL
|
||||
const child = require('child_process').spawn(electron, [__filename, directory], { env, windowsHide: true, stdio: 'inherit' })
|
||||
const timer = setTimeout(() => child.kill(), 60000)
|
||||
child.once('exit', (code, signal) => {
|
||||
clearTimeout(timer)
|
||||
console.log(JSON.stringify({ directory, exitCode: code, signal }))
|
||||
process.exitCode = code === 0 ? 0 : 1
|
||||
})
|
||||
} else {
|
||||
const { app, BrowserWindow } = electron
|
||||
const data = path.join(directory, 'electron-profile')
|
||||
fs.mkdirSync(data, { recursive: true })
|
||||
app.setPath('userData', data)
|
||||
app.disableHardwareAcceleration()
|
||||
app.whenReady().then(async () => {
|
||||
const win = new BrowserWindow({ width: 1000, height: 700, show: false, webPreferences: { contextIsolation: true, nodeIntegration: false, backgroundThrottling: false } })
|
||||
const errors = []
|
||||
win.webContents.on('console-message', event => { if (event.level === 'error' || event.level >= 3) errors.push(event.message) })
|
||||
await win.loadFile(path.join(directory, 'index.html'))
|
||||
win.showInactive()
|
||||
for (let i = 0; i < 300; i++) {
|
||||
const result = await win.webContents.executeJavaScript('document.querySelector("#result")?.textContent')
|
||||
if (result) {
|
||||
const report = JSON.parse(result)
|
||||
fs.writeFileSync(path.join(directory, 'electron-report.json'), JSON.stringify({ ...report, rendererErrors: errors, scope: 'Actual Electron Chromium component fixture; isolated callbacks, no IPC/model/session execution' }, null, 2))
|
||||
console.log(JSON.stringify({ pass: report.pass, checks: report.results.length, error: report.error, rendererErrors: errors }))
|
||||
app.exit(report.pass && errors.length === 0 ? 0 : 1)
|
||||
return
|
||||
}
|
||||
await new Promise(resolve => setTimeout(resolve, 80))
|
||||
}
|
||||
throw Error('Fixture result timed out')
|
||||
}).catch(error => { console.error(error); app.exit(1) })
|
||||
}
|
||||
@@ -0,0 +1,362 @@
|
||||
{
|
||||
"codeSha": "1ed71b63b5af9a98b942ff47c66df5799d4d2c8a",
|
||||
"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": []
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
[
|
||||
{
|
||||
"Command": "npm run test:conversation",
|
||||
"ExitCode": 0,
|
||||
"Log": ".tmp/b01-acceptance/test-conversation-02.log"
|
||||
},
|
||||
{
|
||||
"Command": "npm run test:workbuddy-import",
|
||||
"ExitCode": 0,
|
||||
"Log": ".tmp/b01-acceptance/test-workbuddy-import-02.log"
|
||||
},
|
||||
{
|
||||
"Command": "npm run test:artifacts",
|
||||
"ExitCode": 0,
|
||||
"Log": ".tmp/b01-acceptance/test-artifacts-02.log"
|
||||
},
|
||||
{
|
||||
"Command": "npm run test:fold-summary",
|
||||
"ExitCode": 1,
|
||||
"Log": ".tmp/b01-acceptance/test-fold-summary-02.log"
|
||||
},
|
||||
{
|
||||
"Command": "npm run check:tokens",
|
||||
"ExitCode": 1,
|
||||
"Log": ".tmp/b01-acceptance/check-tokens-02.log"
|
||||
}
|
||||
]
|
||||
@@ -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 !== '1ed71b63b5af9a98b942ff47c66df5799d4d2c8a') throw new Error('Run in the fixed 1ed71b6 acceptance checkout')
|
||||
const revision = baseline ? '37ddb2ce24c23d1fab7d0609a62901cc666d4975' : '1ed71b63b5af9a98b942ff47c66df5799d4d2c8a'
|
||||
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':'1ed71b6'}.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':'1ed71b6'}.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 1ed71b6 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
|
||||
@@ -0,0 +1,105 @@
|
||||
{
|
||||
"testedRevision": "1ed71b63b5af9a98b942ff47c66df5799d4d2c8a",
|
||||
"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": "false",
|
||||
"task": "false"
|
||||
}
|
||||
},
|
||||
"expectedAfterTerminalCorrection": {
|
||||
"plan": "false",
|
||||
"task": "false"
|
||||
},
|
||||
"retainsUserChoices": true,
|
||||
"verificationMethod": "Bundled fixed 51531dc checkout product modules",
|
||||
"baselineModulesLoaded": []
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
|
||||
> 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.274399999999986,"storeHydrationMs":0.18410000000000082,"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: 34 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
|
||||
completed-fold-native-identity: real reducer done correction, native IDs, insertion/reorder, repeated outer toggles, message isolation and legacy fallback passed
|
||||
Permission intercept DOM: 14 checks passed (not pixel/SDK verification)
|
||||
{"checks":37,"passed":true,"scope":"Isolated React DOM and CSS contracts; no native keyboard/layout/pixel acceptance"}
|
||||
@@ -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 205ms
|
||||
vite v8.3.4 building ssr environment for production...
|
||||
transforming...
|
||||
✓ 2 modules transformed.
|
||||
rendering chunks...
|
||||
out/preload/index.cjs 15.89 kB
|
||||
|
||||
✓ built in 13ms
|
||||
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-DH7L1ZF2.css 259.93 kB
|
||||
out/renderer/assets/index-33QIcM1B.css 2,684.72 kB
|
||||
out/renderer/assets/pie-WAS4IAKB-1a9lbjhh.js 0.11 kB
|
||||
out/renderer/assets/info-A6RAGUB7-Dsq8pPGK.js 0.11 kB
|
||||
out/renderer/assets/radar-RG4KPBEZ-BwNT2qWb.js 0.11 kB
|
||||
out/renderer/assets/packet-AYTQ26CC-C-iOIVQo.js 0.11 kB
|
||||
out/renderer/assets/cynefin-OW5HDTMX-CTYbUR58.js 0.11 kB
|
||||
out/renderer/assets/treemap-WGGIJYW6-CWek0LQD.js 0.11 kB
|
||||
out/renderer/assets/wardley-WFR3VGLG-BnrEXTnU.js 0.11 kB
|
||||
out/renderer/assets/gitGraph-4MIJSDKK-NHpEvzKf.js 0.12 kB
|
||||
out/renderer/assets/railroad-74A4TZTK-CyYHr3KR.js 0.12 kB
|
||||
out/renderer/assets/treeView-Q6P3EWNA-CzdWA6Mh.js 0.12 kB
|
||||
out/renderer/assets/railroad-peg-WCYAUIDC-DyA9P8dX.js 0.12 kB
|
||||
out/renderer/assets/architecture-7GRP2DOG-VyF0wzFW.js 0.12 kB
|
||||
out/renderer/assets/railroad-abnf-HS5TGJTU-DWOH6PDU.js 0.12 kB
|
||||
out/renderer/assets/railroad-ebnf-LZEXJU2U-B8jXqV-T.js 0.12 kB
|
||||
out/renderer/assets/eventmodeling-NTZA5JFV-Dmu4IHsI.js 0.12 kB
|
||||
out/renderer/assets/array-75Ih5Qg4.js 0.16 kB
|
||||
out/renderer/assets/channel-DHarOYgZ.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-DS2cT8EG.js 0.59 kB
|
||||
out/renderer/assets/prism-json-DxLGXN1o.js 0.62 kB
|
||||
out/renderer/assets/codeowners-C7Y3CTAA-BmB2_gvY.js 0.75 kB
|
||||
out/renderer/assets/prism-clike-BcH_eOfE.js 0.89 kB
|
||||
out/renderer/assets/tsv-DVa1_Ovr-BeS2kE5e.js 0.94 kB
|
||||
out/renderer/assets/shellsession-C0HwRpr0-B630Ulnl.js 0.96 kB
|
||||
out/renderer/assets/javascript-DGySzfUB-CQaVVFGk.js 0.99 kB
|
||||
out/renderer/assets/settings-CauUETdq.js 1.01 kB
|
||||
out/renderer/assets/infoDiagram-27XIBGKW-BxQCd_Wi.js 1.09 kB
|
||||
out/renderer/assets/swimlanesDiagram-VR7AAH4N-CDntzTUl.js 1.09 kB
|
||||
out/renderer/assets/html-derivative-D3Jld805-D0QQ5MTi.js 1.10 kB
|
||||
out/renderer/assets/prism-go-Cw8Jg9YT.js 1.11 kB
|
||||
out/renderer/assets/classDiagram-ZZMXUADV-B1CifpN6.js 1.16 kB
|
||||
out/renderer/assets/classDiagram-v2-VYDZK3BY-CUL8warN.js 1.16 kB
|
||||
out/renderer/assets/stateDiagram-v2-MP3YSRHH-Cd_OI8Qg.js 1.16 kB
|
||||
out/renderer/assets/qmldir-DIq06gp2-CFVtueeV.js 1.20 kB
|
||||
out/renderer/assets/git-rebase-CgwCWTNR-Cpss9r90.js 1.23 kB
|
||||
out/renderer/assets/chunk-POPQ4Y6H-DJbU6j1e.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-DKrQczXm.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-s2uHofP2.js 1.47 kB
|
||||
out/renderer/assets/AgentsSettingsPanel-CMYBwUKH.js 1.56 kB
|
||||
out/renderer/assets/xsl-DV28r3Jw-B8bWzO_h.js 1.59 kB
|
||||
out/renderer/assets/dotenv-DXc2fSbR-CUbEjgJq.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-DAUou2oc.js 1.71 kB
|
||||
out/renderer/assets/prism-css-Cmyw76Xa.js 1.73 kB
|
||||
out/renderer/assets/ini-DMSv7OY2-xgSkktY4.js 1.74 kB
|
||||
out/renderer/assets/rolldown-runtime-BJCASTsb-DKQFAHUF.js 1.78 kB
|
||||
out/renderer/assets/line-BFbLTOFm.js 1.89 kB
|
||||
out/renderer/assets/fortran-fixed-form-D91DiZLE-NxoUlVkB.js 1.91 kB
|
||||
out/renderer/assets/docker-B7J3eHK7-C3FNXPS_.js 1.96 kB
|
||||
out/renderer/assets/hxml-938TheZ7-pE5ojWPT.js 1.97 kB
|
||||
out/renderer/assets/desktop-BwI-o01e-Da9rFJOd.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-CLkRQ9Hf.js 2.40 kB
|
||||
out/renderer/assets/prism-kotlin-Bc2NQYRR.js 2.43 kB
|
||||
out/renderer/assets/jssm-CIisorE2-ggX0kbSA.js 2.44 kB
|
||||
out/renderer/assets/prism-python-CTkfasgb.js 2.48 kB
|
||||
out/renderer/assets/reg-mzCtpvUf-BHC3bGU6.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-CCUOPT_c.js 2.61 kB
|
||||
out/renderer/assets/edge-DcEd3r9D-ZJX3cnY_.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-DgJJp7nh.js 2.78 kB
|
||||
out/renderer/assets/railroadDiagram-O6MQD6OU-CrE_AuZP.js 2.78 kB
|
||||
out/renderer/assets/diff-lAxbRYdS--5gtlmD4.js 2.79 kB
|
||||
out/renderer/assets/hy-BKymZdC0-4uNvYh3y.js 2.86 kB
|
||||
out/renderer/assets/dockerfile-CnkhFuxG-CfXHMZr-.js 3.01 kB
|
||||
out/renderer/assets/openscad-BRTETpP_-BThzc9qL.js 3.03 kB
|
||||
out/renderer/assets/pascaligo-DI1dd1Zd-D23AoFdQ.js 3.03 kB
|
||||
out/renderer/assets/log-Cn1ZE6kb-BE4srnlV.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-C7ph_xMt.js 3.12 kB
|
||||
out/renderer/assets/cairo-D_LzMZ4I-C21twps2.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-DsDdtWdB.js 3.20 kB
|
||||
out/renderer/assets/jsonl-Cn_fzNA8-cIG9lf61.js 3.21 kB
|
||||
out/renderer/assets/json-CKKhFIOr-DuiQFrCF.js 3.29 kB
|
||||
out/renderer/assets/mips-Df5bwPtM-DJn7b529.js 3.29 kB
|
||||
out/renderer/assets/jsonc-Bf3Xcgeq-BGBJ2TDY.js 3.31 kB
|
||||
out/renderer/assets/logo-BxqPaaID-DK9gUnx4.js 3.33 kB
|
||||
out/renderer/assets/abnfDiagram-VCTEODGH-BEqo0QPU.js 3.36 kB
|
||||
out/renderer/assets/go-BejFoqvR-BnGoIlsY.js 3.42 kB
|
||||
out/renderer/assets/po-DI6EG-tz-DIkePE8T.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-Ci88mndw.js 3.45 kB
|
||||
out/renderer/assets/mipsasm-U3SQfJCQ-kat_Vj1M.js 3.46 kB
|
||||
out/renderer/assets/sophia-foSZ3xPI-DGYIHURw.js 3.47 kB
|
||||
out/renderer/assets/tasl-C74Cvwdf-se1Ptgso.js 3.49 kB
|
||||
out/renderer/assets/genie-CjS3m_gh-DHydh9_z.js 3.56 kB
|
||||
out/renderer/assets/prism-swift-xplGsQ1n.js 3.56 kB
|
||||
out/renderer/assets/vala-DMgevQbf-ByJQiTkp.js 3.57 kB
|
||||
out/renderer/assets/pegDiagram-XKGWAZYB-CmGvFb7R.js 3.59 kB
|
||||
out/renderer/assets/rel-D6dNeDZv-CUAJzmkw.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-B9n3RDRx.js 3.65 kB
|
||||
out/renderer/assets/ebnfDiagram-PWID7BFC-DlFL4szh.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-DsTJ-19K.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-BCOQigl1.js 3.81 kB
|
||||
out/renderer/assets/splunk-BdqSfgpd-BtOEh0Mo.js 3.81 kB
|
||||
out/renderer/assets/jsonnet-Bn71vRY8-QjPNMWdY.js 3.82 kB
|
||||
out/renderer/assets/ssh-config-BO51LXox-DkFt_ueS.js 3.82 kB
|
||||
out/renderer/assets/bicep-DujF3y-4-DHww3ZLF.js 3.87 kB
|
||||
out/renderer/assets/narrat-DdgkgBr0-CSyxDqta.js 3.87 kB
|
||||
out/renderer/assets/redis-Bo427DT4-DBDF4ZWx.js 3.88 kB
|
||||
out/renderer/assets/turtle-DAmmiOda-C48PN72o.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-BG7UwPdX.js 4.11 kB
|
||||
out/renderer/assets/zenscript-XbBI4c9W-C-aTQo6e.js 4.12 kB
|
||||
out/renderer/assets/glsl-CZF-bvQV-UaBdSZy0.js 4.14 kB
|
||||
out/renderer/assets/shell-DGp7WuK3-X00pamiI.js 4.15 kB
|
||||
out/renderer/assets/gn-DJxfXStl-BD_k0CWf.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-DLkP_pAB.js 4.27 kB
|
||||
out/renderer/assets/AppearanceSettingsPanel-B_352Jrg.js 4.28 kB
|
||||
out/renderer/assets/hurl-CDXCvJNd-Xd5k76nE.js 4.28 kB
|
||||
out/renderer/assets/cypher-CjfQI0Y9-9gjOyi6P.js 4.33 kB
|
||||
out/renderer/assets/pascal-CLPA94yO-C11lM2uy.js 4.35 kB
|
||||
out/renderer/assets/powershell-CaPzBwIT-C9KgMPOP.js 4.50 kB
|
||||
out/renderer/assets/tcl-D-NiFh9X-CYwv4uzi.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-DSHWRdSZ.js 4.72 kB
|
||||
out/renderer/assets/nextflow-DVTlkzu9-Cis-JUmb.js 4.75 kB
|
||||
out/renderer/assets/http-DhxVjYFh-CjwVOaui.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-DygHL4ZA.js 4.87 kB
|
||||
out/renderer/assets/prism-ruby-PgHh3fQm.js 4.91 kB
|
||||
out/renderer/assets/fennel-COJTUo2O-DYh8-dep.js 4.97 kB
|
||||
out/renderer/assets/bibtex-yEKRWsaj-xHthw1sC.js 5.00 kB
|
||||
out/renderer/assets/coffee-CcgZJF1B-DkN4xoBX.js 5.04 kB
|
||||
out/renderer/assets/llvm-DiFwU398-BQjCVu39.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-yP3bMkfO.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-B8x_JL1P.js 5.54 kB
|
||||
out/renderer/assets/restructuredtext-D2p7PcFG-DDHAm_JI.js 5.55 kB
|
||||
out/renderer/assets/dax-CmrIxjmL-CDTyHmZ_.js 5.56 kB
|
||||
out/renderer/assets/gdresource-4lq4eh4q-CjhvlVte.js 5.56 kB
|
||||
out/renderer/assets/qml-D6gd64uC-_ykXVPoZ.js 5.57 kB
|
||||
out/renderer/assets/bicep-wTwvD1CI-C568hcwN.js 5.58 kB
|
||||
out/renderer/assets/cssMode-Z-o80aSY-BvzV-1yi.js 5.59 kB
|
||||
out/renderer/assets/awk-DTjcVAOD-BmfaVU4m.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-C5vNmx0q.js 5.81 kB
|
||||
out/renderer/assets/swift-C3A42nmX-BBVToPkN.js 5.83 kB
|
||||
out/renderer/assets/xml-bIkPj5aH-Bx1v5u6-.js 5.89 kB
|
||||
out/renderer/assets/ecl-CYzojQ6a-C8m0_osY.js 5.91 kB
|
||||
out/renderer/assets/jinja-Dl-Ji_JA-BBL5sTd0.js 5.92 kB
|
||||
out/renderer/assets/lean-Cu10prRO-BUTVAAdc.js 6.03 kB
|
||||
out/renderer/assets/yaml-GEMDST6R-D-0AGe4F.js 6.09 kB
|
||||
out/renderer/assets/moonbit-B8-g2u5v-CGBFUznC.js 6.10 kB
|
||||
out/renderer/assets/powerquery-tKWDTKOo-CejxekA_.js 6.11 kB
|
||||
out/renderer/assets/SourceCodePreview-rs88mqRs.js 6.11 kB
|
||||
out/renderer/assets/python-CHafhQyI-DmJIfgbV.js 6.14 kB
|
||||
out/renderer/assets/shaderlab-Df7nOKvI-0G488FSx.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-D5ytx6Ln.js 6.29 kB
|
||||
out/renderer/assets/htmlMode-BDZbYlMj-CRoXjFoW.js 6.40 kB
|
||||
out/renderer/assets/red-CYaKK_PD-iiAMl8iL.js 6.45 kB
|
||||
out/renderer/assets/min-dark-DGPfDRqJ-gZu6HtcU.js 6.48 kB
|
||||
out/renderer/assets/pug-EKWpNZSi-oQ708bsr.js 6.51 kB
|
||||
out/renderer/assets/prisma-CdZyz3OC-ChFCtYaa.js 6.53 kB
|
||||
out/renderer/assets/gdshader-ryZhEIxg-DpcQqwXn.js 6.55 kB
|
||||
out/renderer/assets/ara-_lrJyEFe-qigo-wGx.js 6.56 kB
|
||||
out/renderer/assets/clojure-WSq30mUj-Bswhoa1y.js 6.61 kB
|
||||
out/renderer/assets/toml-DPP887_3-aOuHoLTy.js 6.62 kB
|
||||
out/renderer/assets/postcss-CcIp2ENG-DpmxBCXW.js 6.64 kB
|
||||
out/renderer/assets/verilog-bragEGMk-CemzLugw.js 6.64 kB
|
||||
out/renderer/assets/solarized-light-BIMszn7B-vPMkTTwP.js 6.68 kB
|
||||
out/renderer/assets/cypher-COYrq2Yy-BtVrfsLp.js 6.75 kB
|
||||
out/renderer/assets/arc-LpCwTDer.js 6.75 kB
|
||||
out/renderer/assets/proto-CQIfhs_g-Deqofbl3.js 6.77 kB
|
||||
out/renderer/assets/smalltalk-BLGdLDJX-BKGgemER.js 6.79 kB
|
||||
out/renderer/assets/vb-D1Cw85Ss-BSz-V9M4.js 6.86 kB
|
||||
out/renderer/assets/talonscript-DA9pg7Tj-CPXKQ95R.js 6.96 kB
|
||||
out/renderer/assets/r-Bb2Mu7Fo-Dq0URONw.js 7.00 kB
|
||||
out/renderer/assets/solarized-dark-D_I-4EGa-BZbeAUhW.js 7.04 kB
|
||||
out/renderer/assets/diagram-Z3DM3KII-Dq9cpJHo.js 7.08 kB
|
||||
out/renderer/assets/riscv-CQHqXr1Z-BFlZFId-.js 7.11 kB
|
||||
out/renderer/assets/soy-DybHqX1A-DOhErZPj.js 7.15 kB
|
||||
out/renderer/assets/min-light-BF0EjVgr-DvViuJW_.js 7.16 kB
|
||||
out/renderer/assets/scheme-Dn0tgEWN-BK64z0tZ.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-B3FZWMVz.js 7.48 kB
|
||||
out/renderer/assets/mdx-Bdu4uO-C-BrzgNjCw.js 7.58 kB
|
||||
out/renderer/assets/qss-DkzwWM0J-04JPp7d-.js 7.67 kB
|
||||
out/renderer/assets/html-DKbmsqz6-Cnkf6ew3.js 7.69 kB
|
||||
out/renderer/assets/systemd-CS6mVasZ-HbzlQlDs.js 8.07 kB
|
||||
out/renderer/assets/monokai-CYqILLdj-CEXuJ8HO.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_-C4Qk7OPN.js 8.42 kB
|
||||
out/renderer/assets/regexp-Dv0OUts_-BqK6b4KR.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-frBdohcC.js 8.71 kB
|
||||
out/renderer/assets/vue-html-DvuHo2mm-b7I-opwf.js 8.71 kB
|
||||
out/renderer/assets/haml-CIYwkycC-3fSMp7m2.js 8.81 kB
|
||||
out/renderer/assets/scss-CLoW-2dr-BBC_GO_6.js 8.86 kB
|
||||
out/renderer/assets/dart-CBkkDIWs-ezKLFP5s.js 8.94 kB
|
||||
out/renderer/assets/horizon-CELVL8Ba-x0NmpRb6.js 8.97 kB
|
||||
out/renderer/assets/horizon-bright-DBDyMeUQ-Bhh-QDk3.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-DaQVAww0.js 9.18 kB
|
||||
out/renderer/assets/andromeeda--j5Bq-48-DxyWS_fJ.js 9.21 kB
|
||||
out/renderer/assets/dark-plus-FAPM6M6c-DKexDF--.js 9.29 kB
|
||||
out/renderer/assets/sas-BQIEUTPQ-Bwx-ZPYU.js 9.31 kB
|
||||
out/renderer/assets/slack-dark-nDxLkSCC-C5pzIEPN.js 9.31 kB
|
||||
out/renderer/assets/perl-Bec3eWyr-CDmSu3_s.js 9.32 kB
|
||||
out/renderer/assets/plastic-DY_h9Vzh-CZzPFkTC.js 9.49 kB
|
||||
out/renderer/assets/sass-Ysv8HTNa-CHNQIGaT.js 9.49 kB
|
||||
out/renderer/assets/st-BrgXZ-Ag-BUs-RRgp.js 9.58 kB
|
||||
out/renderer/assets/typst-Co5rZla4-COemceoz.js 9.61 kB
|
||||
out/renderer/assets/slack-ochin-7zJWY-K--C7KFpXik.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-BNek_9Kq.js 9.95 kB
|
||||
out/renderer/assets/sql-DviNlDJO-CwV6bDIP.js 9.97 kB
|
||||
out/renderer/assets/kotlin-DIw6ua6F-CdVnL0aF.js 10.01 kB
|
||||
out/renderer/assets/cmake-CyNDuJo8-2Hk4zQCd.js 10.07 kB
|
||||
out/renderer/assets/light-plus-DkScKIB5-e8Q5AKjf.js 10.14 kB
|
||||
out/renderer/assets/hcl-DoJdlYjN-DdpM5wFm.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-C4n-y8pc.js 10.58 kB
|
||||
out/renderer/assets/tex-gcnXexI3-BUpeblVA.js 10.60 kB
|
||||
out/renderer/assets/php-Bn8AF0uj-CBbpr2vs.js 10.62 kB
|
||||
out/renderer/assets/nextflow-groovy-D4ZyOBoZ-C7jziUwg.js 10.63 kB
|
||||
out/renderer/assets/dream-maker-5oXa1Z51-CLRrQkBL.js 10.67 kB
|
||||
out/renderer/assets/ts-tags-xeTAUNHG-CG_gr3En.js 10.70 kB
|
||||
out/renderer/assets/raku-Bfr41qeN-C7t9XlCj.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-Cu7vbJZs.js 10.97 kB
|
||||
out/renderer/assets/diagram-UQ7AKVKN-B1EaevB-.js 11.05 kB
|
||||
out/renderer/assets/elm-Dl1XrIiD-CwXBAFKd.js 11.18 kB
|
||||
out/renderer/assets/just-He7qscmV-Bkq-0zku.js 11.19 kB
|
||||
out/renderer/assets/redshift-Djb4PK3z-9Ar4PFWD.js 11.35 kB
|
||||
out/renderer/assets/github-light-B_J7N1HZ-DWSXFnsf.js 11.38 kB
|
||||
out/renderer/assets/ruby-CxOCB7_P-BzsjPJ6Z.js 11.48 kB
|
||||
out/renderer/assets/prolog-DAqMMM08-BFKdnH0S.js 11.56 kB
|
||||
out/renderer/assets/terraform-BW8B2WXV-zeRjs0zr.js 11.59 kB
|
||||
out/renderer/assets/github-dark-BgqEY2WG-C9QbkZU3.js 11.60 kB
|
||||
out/renderer/assets/puppet-CaR8DEdW-Biai9WKX.js 11.65 kB
|
||||
out/renderer/assets/pkl-DrXR3Dxy-Bno7kqPT.js 11.67 kB
|
||||
out/renderer/assets/laserwave-Clkc4Pj8-DOjuqF9n.js 11.69 kB
|
||||
out/renderer/assets/pieDiagram-E7YTZNPT-BwiXBDwO.js 11.95 kB
|
||||
out/renderer/assets/rst-BJFdabDk-Cv-fSo2B.js 12.04 kB
|
||||
out/renderer/assets/linear-WS155L0r.js 12.11 kB
|
||||
out/renderer/assets/wasm-DYwNZ-r4-BrA6oOvM.js 12.21 kB
|
||||
out/renderer/assets/hjson-CmvCiVhY-BdH9CbZ2.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-MC-VEvxc.js 12.52 kB
|
||||
out/renderer/assets/apache-BUbWdjM2-2Zu7IlVl.js 12.66 kB
|
||||
out/renderer/assets/vesper-B5lCMuIY-CXGQHRuW.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-CEJzP2ue.js 13.09 kB
|
||||
out/renderer/assets/fish-CaZR_ofm-BcO_q5kQ.js 13.24 kB
|
||||
out/renderer/assets/elixir-Lipcswxh-DnZCznfr.js 13.27 kB
|
||||
out/renderer/assets/v-wnWoBHkK-CzCOTyIp.js 13.41 kB
|
||||
out/renderer/assets/AboutHelpSettingsPanel-Ui_VOvh7.js 13.48 kB
|
||||
out/renderer/assets/vitesse-light-DQXFiRFx-Ct7fN8pJ.js 13.81 kB
|
||||
out/renderer/assets/aurora-x-9vUYYjHV-CImifmUW.js 13.85 kB
|
||||
out/renderer/assets/vitesse-black-cwK5rWgD-BGrq81WC.js 13.87 kB
|
||||
out/renderer/assets/vitesse-dark-CsfgW0oH-Dx8cqxrm.js 13.96 kB
|
||||
out/renderer/assets/ShortcutsSettingsPanel-KgJeI7QZ.js 14.15 kB
|
||||
out/renderer/assets/pug-D0UckVoV-BTWU19Nk.js 14.16 kB
|
||||
out/renderer/assets/synthwave-84-LX1B8mRG-yuUErnSx.js 14.23 kB
|
||||
out/renderer/assets/github-light-default-BRmIzqWc-B3gMi7zW.js 14.36 kB
|
||||
out/renderer/assets/clarity-AxkJPY5c-DfVHSVIk.js 14.48 kB
|
||||
out/renderer/assets/github-light-high-contrast-BUKIZOxn-DL0r2b0z.js 14.49 kB
|
||||
out/renderer/assets/github-dark-dimmed-DoIdqTey-CDc6YqEM.js 14.64 kB
|
||||
out/renderer/assets/github-dark-default-CwWjzI40-_0bgyJYv.js 14.64 kB
|
||||
out/renderer/assets/chunk-PWAF6VOD-DUCy2J9a.js 14.76 kB
|
||||
out/renderer/assets/github-dark-high-contrast-bFLNMLvK-BUp3HmXY.js 14.80 kB
|
||||
out/renderer/assets/diagram-S7CK7UJ4-DZ0Sug9N.js 14.98 kB
|
||||
out/renderer/assets/gnuplot-Dw3FRha5-D6o75ylb.js 14.98 kB
|
||||
out/renderer/assets/rust-C0Ih6nmc-Bm01RMLz.js 15.27 kB
|
||||
out/renderer/assets/actionscript-3-O8jnLcvn-C7OtofMN.js 15.41 kB
|
||||
out/renderer/assets/luau-BzxGbjcn-aQpsBeQB.js 15.64 kB
|
||||
out/renderer/assets/nix-zl191KBb-CxSq6jsB.js 15.85 kB
|
||||
out/renderer/assets/lua-BwTLfNCK-IuSxl8fO.js 16.04 kB
|
||||
out/renderer/assets/abap-FvPUHv8B-BVQp86jh.js 16.05 kB
|
||||
out/renderer/assets/solidity-96fhzG-Q-CZEni-ZB.js 16.28 kB
|
||||
out/renderer/assets/matlab-8ZQqHKQX-g_ODc8QU.js 16.29 kB
|
||||
out/renderer/assets/cue-eHSfcyUV-BO0bCEDm.js 16.40 kB
|
||||
out/renderer/assets/kusto-D8vBBISG-C0y2Wtyy.js 16.45 kB
|
||||
out/renderer/assets/powerquery-B7BjLMcF-BkVSWPtX.js 16.49 kB
|
||||
out/renderer/assets/elixir-B1NaQxrO-Ba6X-FuW.js 16.50 kB
|
||||
out/renderer/assets/react-DrereneL.js 16.50 kB
|
||||
out/renderer/assets/odin-B-YqhW9I-B-ZI05Ll.js 16.71 kB
|
||||
out/renderer/assets/solidity-Dpt2BLAA-BD_YSA0r.js 16.98 kB
|
||||
out/renderer/assets/bird2-BMkLvc4r-CyoW3El7.js 17.17 kB
|
||||
out/renderer/assets/kanagawa-wave-CM_o6oKV-VzWuxPSA.js 17.32 kB
|
||||
out/renderer/assets/kanagawa-lotus-Cj3XDpoG-cmeMwVaD.js 17.32 kB
|
||||
out/renderer/assets/kanagawa-dragon-D_NPnIy_-Cyd8MANv.js 17.33 kB
|
||||
out/renderer/assets/cynefinDiagram-5FMLGOSQ-DUo_T9ft.js 17.61 kB
|
||||
out/renderer/assets/stateDiagram-D77RDMKH-BbeuRtup.js 18.11 kB
|
||||
out/renderer/assets/chunk-L3NEJ4N5-BZPl6K5u.js 18.16 kB
|
||||
out/renderer/assets/liquid-D_7zu7XR-BZ3z6-Mj.js 18.46 kB
|
||||
out/renderer/assets/svelte-DUGqPubT-CAfIEh4G.js 18.60 kB
|
||||
out/renderer/assets/graphql-ObxcfEHH-9pUo2yjR.js 18.65 kB
|
||||
out/renderer/assets/jsonMode-DdQpkp6D-CRQw31fq.js 18.79 kB
|
||||
out/renderer/assets/material-theme-q28j4V_0-s4HtqlFv.js 18.81 kB
|
||||
out/renderer/assets/material-theme-ocean-DAvlEnSm-Cyw7qD-l.js 18.83 kB
|
||||
out/renderer/assets/material-theme-darker-CHEuMVX9-D-hz3EEt.js 18.83 kB
|
||||
out/renderer/assets/material-theme-lighter-DY4T1_JG-C0HwKluR.js 18.84 kB
|
||||
out/renderer/assets/material-theme-palenight-CqDFvQ-v-RoTowTME.js 18.84 kB
|
||||
out/renderer/assets/gherkin-BcjDDslM-BdnbjalD.js 19.20 kB
|
||||
out/renderer/assets/gdscript-CekKc1U_-DVmAmHvE.js 19.21 kB
|
||||
out/renderer/assets/groovy-DH3arekX-StnUgJL0.js 19.38 kB
|
||||
out/renderer/assets/mdc-D-U85KZE-DPbAVRTg.js 19.85 kB
|
||||
out/renderer/assets/diagram-VSXAHHWV-CbmzU86w.js 20.01 kB
|
||||
out/renderer/assets/move-CmExnPjU-DPj_eIaE.js 20.22 kB
|
||||
out/renderer/assets/ayu-dark-BeByMiYw-CS3MEELg.js 20.27 kB
|
||||
out/renderer/assets/ayu-mirage-C1jJ6Jfs-CnA8kJ7r.js 20.28 kB
|
||||
out/renderer/assets/ayu-light-DmTZeN54-CDULCKqM.js 20.35 kB
|
||||
out/renderer/assets/glimmer-js-D9ZnrcNN-BS431Ogg.js 20.44 kB
|
||||
out/renderer/assets/glimmer-ts-DuhFj6qR-CsFesiaT.js 20.44 kB
|
||||
out/renderer/assets/viml-DPVJ_KYe-De3CdqgJ.js 20.56 kB
|
||||
out/renderer/assets/nushell-Cd8Dwa1M-Dhf9XkYz.js 20.62 kB
|
||||
out/renderer/assets/snazzy-light-B8znOqT6-B1FX3-IF.js 20.97 kB
|
||||
out/renderer/assets/dagre-GXQ25YYZ-_SHLHEAK.js 21.01 kB
|
||||
out/renderer/assets/dracula-DeMffiYO-Bl4juROY.js 21.26 kB
|
||||
out/renderer/assets/dracula-soft-BnfvpcDv-CYsUeSum.js 21.27 kB
|
||||
out/renderer/assets/twig-7zjsCqYg-CMujKsZl.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-DaA_4NNK.js 21.94 kB
|
||||
out/renderer/assets/rose-pine-moon-B9bum7Ik-B6_AhIsD.js 21.96 kB
|
||||
out/renderer/assets/rose-pine-dawn-2Q5fMoJp-DxMkAwKM.js 21.96 kB
|
||||
out/renderer/assets/powershell-ycAdP1r9-B7r4Hnhz.js 22.11 kB
|
||||
out/renderer/assets/common-lisp-DcFHcTKh-CWH5diwh.js 22.81 kB
|
||||
out/renderer/assets/gruvbox-dark-hard-gOzMLqif-DDlcfu4q.js 22.83 kB
|
||||
out/renderer/assets/gruvbox-dark-soft-CKvURktN-C6MJezBg.js 22.83 kB
|
||||
out/renderer/assets/gruvbox-light-hard-CMa_c48J-BUQ67Msp.js 22.84 kB
|
||||
out/renderer/assets/gruvbox-light-soft-yfAGJYsX-DNM2qqWB.js 22.84 kB
|
||||
out/renderer/assets/gruvbox-dark-medium-BQSVGwWb-qh8C4DPZ.js 22.84 kB
|
||||
out/renderer/assets/gruvbox-light-medium-B9S5UNr1-DZxV_o-P.js 22.84 kB
|
||||
out/renderer/assets/nim-CD961Jl3-CuyTrDpQ.js 22.91 kB
|
||||
out/renderer/assets/cadence-C2JmJjDr-B-b63Epg.js 23.87 kB
|
||||
out/renderer/assets/sql-C_oMiPb0-CRnSOxMo.js 23.87 kB
|
||||
out/renderer/assets/wit-CXpQol8Q-D2NEDOhy.js 24.11 kB
|
||||
out/renderer/assets/templ-gFcHJbF7-BqIwRUQe.js 24.38 kB
|
||||
out/renderer/assets/astro-kV3HjkbP-CH6o6jKA.js 24.46 kB
|
||||
out/renderer/assets/vhdl-Ci4REirV-D-qSzcJD.js 24.46 kB
|
||||
out/renderer/assets/purescript-DCsDAdnX-DsynrkKe.js 24.97 kB
|
||||
out/renderer/assets/vue-Cuk7Vimg-CFbFXIr8.js 25.25 kB
|
||||
out/renderer/assets/surrealql-GFjNBdcm-Vm68TOTE.js 25.34 kB
|
||||
out/renderer/assets/one-light-CMfGrl_P-B-1jUQM9.js 25.49 kB
|
||||
out/renderer/assets/night-owl-light-CAEa42tO-TPCLv7z5.js 26.10 kB
|
||||
out/renderer/assets/system-verilog-D_bVVpLE-C_dvOlr3.js 26.41 kB
|
||||
out/renderer/assets/angular-html-BrLPO2Fv-DJgz5E5d.js 26.48 kB
|
||||
out/renderer/assets/typespec-D5WYs8C4-AaOHagqW.js 26.72 kB
|
||||
out/renderer/assets/nord-DlCAGdjr-Div2jUYm.js 26.91 kB
|
||||
out/renderer/assets/codeql-DidIlXer-D6RBJOzg.js 27.08 kB
|
||||
out/renderer/assets/scss-BhK8Ovpn-DfDLQi2C.js 27.52 kB
|
||||
out/renderer/assets/coffee-DrMWXxy6-BoavQsuh.js 27.68 kB
|
||||
out/renderer/assets/java-DaupjRFz-zQd9RZAc.js 27.69 kB
|
||||
out/renderer/assets/razor-B2hRAVmz-Dj7TOgY5.js 27.72 kB
|
||||
out/renderer/assets/apl-C42PBett-BNW4FTmO.js 27.87 kB
|
||||
out/renderer/assets/chunk-SVP7TREG-BJrMMBGT.js 28.38 kB
|
||||
out/renderer/assets/fsharp-BHFgIxsY-CvR6tsY8.js 28.48 kB
|
||||
out/renderer/assets/marko-DXKHPFnH-C0z2-ucz.js 28.74 kB
|
||||
out/renderer/assets/GeneralSettingsPanel-CA6yOnsk.js 29.10 kB
|
||||
out/renderer/assets/night-owl-DegwdXaM-6ZGfBB7K.js 29.11 kB
|
||||
out/renderer/assets/c3-BOs4FlGA-BuhFXrRY.js 29.17 kB
|
||||
out/renderer/assets/MemorySettingsPanel-cqwWfj-O.js 29.75 kB
|
||||
out/renderer/assets/crystal-DlzoxO28-BWa_t1Io.js 29.84 kB
|
||||
out/renderer/assets/applescript-ij24h7OO-_xHQcvud.js 29.87 kB
|
||||
out/renderer/assets/tsMode-SiG-Sp2b-DB8xZUGJ.js 30.55 kB
|
||||
out/renderer/assets/pierre-dark-Daa2n9wr-D7rla9B_.js 30.74 kB
|
||||
out/renderer/assets/pierre-light-D_hZXvUj-DJnIOKLO.js 30.75 kB
|
||||
out/renderer/assets/pierre-dark-soft-BhNM3pgh-Dp_VeHWv.js 30.76 kB
|
||||
out/renderer/assets/pierre-light-soft-BVrSv6ZG-C6Na39F-.js 30.76 kB
|
||||
out/renderer/assets/ishikawaDiagram-5VMMS53U-D5VU_Gfi.js 30.78 kB
|
||||
out/renderer/assets/pierre-dark-tritanopia-CGKuoAZi-C0HpbU3l.js 30.78 kB
|
||||
out/renderer/assets/pierre-light-tritanopia-BiDEaWaH-wWduIsi3.js 30.78 kB
|
||||
out/renderer/assets/pierre-dark-protanopia-deuteranopia-Cs1lz9lE-enlgPsHw.js 30.82 kB
|
||||
out/renderer/assets/pierre-light-protanopia-deuteranopia-BM0RLBB_-Dz5iBHkO.js 30.82 kB
|
||||
out/renderer/assets/stylus-ZCryC73G-urFW3_yk.js 31.29 kB
|
||||
out/renderer/assets/diagram-VX7I27RA-uopNEQPp.js 31.44 kB
|
||||
out/renderer/assets/scala-BBsC3Oz3-VCjyobQG.js 31.48 kB
|
||||
out/renderer/assets/mermaid-D6CQfUGU-C6DHNxVz.js 33.37 kB
|
||||
out/renderer/assets/poimandres-EIt_jotH-DHKFQj5Q.js 33.69 kB
|
||||
out/renderer/assets/kanban-definition-UXKFOSKX-DFn9PSNU.js 33.91 kB
|
||||
out/renderer/assets/one-dark-pro-DR9QpZM3-BA4d4lw2.js 33.98 kB
|
||||
out/renderer/assets/mermaid-parser.core-CstzWfPU.js 34.66 kB
|
||||
out/renderer/assets/haxe-BWT5wSyZ-BuUsQb-h.js 35.38 kB
|
||||
out/renderer/assets/nginx-DhtViCEk-C18zABFg.js 35.58 kB
|
||||
out/renderer/assets/houston-BdS5A_yD-NUige_z1.js 35.61 kB
|
||||
out/renderer/assets/tokyo-night-BS1_DFu7-CYsPn2J-.js 35.86 kB
|
||||
out/renderer/assets/erlang-Dd62d0xZ-DHVWwcKa.js 37.71 kB
|
||||
out/renderer/assets/rough.esm-BX5QqLti.js 38.33 kB
|
||||
out/renderer/assets/mindmap-definition-YA3MSWOX-Beo2z6Zl.js 38.59 kB
|
||||
out/renderer/assets/cobol-D7RZfOK--CEk2iYO9.js 39.37 kB
|
||||
out/renderer/assets/journeyDiagram-3NMN7TZE-D1O_nld8.js 40.13 kB
|
||||
out/renderer/assets/julia-ZzkUXm0W-BIm_zTAN.js 40.32 kB
|
||||
out/renderer/assets/lspLanguageFeatures-DK9zifhE-DeEqLmGO.js 40.76 kB
|
||||
out/renderer/assets/asm-DYVIzeEk-Byg5xzam.js 40.91 kB
|
||||
out/renderer/assets/haskell-Ba6HbLj8-D0OYaIy8.js 41.78 kB
|
||||
out/renderer/assets/sankeyDiagram-P5KCCOFB-8RQXHBl8.js 41.83 kB
|
||||
out/renderer/assets/shellscript-B69gKcss-49Zm6IyC.js 41.97 kB
|
||||
out/renderer/assets/wardleyDiagram-VM6X3IG4-BulU0_1W.js 42.40 kB
|
||||
out/renderer/assets/perl-Dv6Cq_FS-DIORmO5G.js 43.55 kB
|
||||
out/renderer/assets/pierre-dark-vibrant-BMsyYliQ-84Eeh-Uj.js 44.96 kB
|
||||
out/renderer/assets/pierre-light-vibrant-CWzM4Pa_-QZvTkTJe.js 44.97 kB
|
||||
out/renderer/assets/ruby-DWcdJvcx-q0K84ieK.js 46.50 kB
|
||||
out/renderer/assets/go-BOpYl7fu-BiT4MB-v.js 47.02 kB
|
||||
out/renderer/assets/apex-B48ZHHzN-BBt8sSNQ.js 47.18 kB
|
||||
out/renderer/assets/catppuccin-mocha-cPsH7Lup-SVLZehhk.js 47.46 kB
|
||||
out/renderer/assets/catppuccin-latte-DcEecI7n-jo2cPJyK.js 47.46 kB
|
||||
out/renderer/assets/catppuccin-frappe-BdOW2tdI-BI0Hc9cS.js 47.46 kB
|
||||
out/renderer/assets/catppuccin-macchiato-Bvz_yAZY-DWewRa4S.js 47.47 kB
|
||||
out/renderer/assets/ada-BT0j8ine-CLTLBE8n.js 48.28 kB
|
||||
out/renderer/assets/d-B1HbH29p-Bi6t8Ck6.js 49.10 kB
|
||||
out/renderer/assets/css-NFwnoVns-BvwuZkcY.js 49.49 kB
|
||||
out/renderer/assets/imba-C-oGt11l-CqKI0OVw.js 50.13 kB
|
||||
out/renderer/assets/requirementDiagram-BXWQKSXE-BW3eBKn6.js 51.39 kB
|
||||
out/renderer/assets/erDiagram-RLTQ6QDP-CRW8KnKL.js 52.41 kB
|
||||
out/renderer/assets/browserify-C9uP_nIr.js 52.80 kB
|
||||
out/renderer/assets/gitGraphDiagram-WWUBYQGX-SNvwtaLo.js 53.82 kB
|
||||
out/renderer/assets/everforest-dark-gCM8XhEI-DzRrg06U.js 53.94 kB
|
||||
out/renderer/assets/everforest-light-DhK35DkL-BEDtvHw1.js 53.95 kB
|
||||
out/renderer/assets/timeline-definition-24CTP7MA-DHkWKYwu.js 54.31 kB
|
||||
out/renderer/assets/wikitext-CQNrXTmv-DJ18wIlO.js 56.09 kB
|
||||
out/renderer/assets/stata-BUONSdsT-BPnapjPC.js 57.23 kB
|
||||
out/renderer/assets/quadrantDiagram-AXDQQJYC-DF0YuDtz.js 58.21 kB
|
||||
out/renderer/assets/html-Dq1ixqYb-okJOhOmu.js 58.25 kB
|
||||
out/renderer/assets/chunk-OSK3NFVY-B3NvnB1z.js 58.56 kB
|
||||
out/renderer/assets/ocaml-CUdGm1iq-BKX30YEX.js 62.65 kB
|
||||
out/renderer/assets/model-settings-source-JYisGYmM.js 63.03 kB
|
||||
out/renderer/assets/ballerina-CpYcPBJI-D9ac3462.js 64.89 kB
|
||||
out/renderer/assets/markdown-BSrOIEaF-BFwOzGIM.js 65.52 kB
|
||||
out/renderer/assets/chunk-IMKFNOWR-BIe7x3W7.js 67.22 kB
|
||||
out/renderer/assets/mojo-BNaitZ-7-E_psDM2x.js 70.00 kB
|
||||
out/renderer/assets/python-Cld0Iwtn-tcCJ5L_g.js 70.17 kB
|
||||
out/renderer/assets/blockDiagram-I7D4REHJ-CyHqCc1n.js 71.01 kB
|
||||
out/renderer/assets/bsl-CtP8370o-Pi14XlIU.js 71.07 kB
|
||||
out/renderer/assets/c-B4augMcT-B5ncIjy5.js 72.57 kB
|
||||
out/renderer/assets/chunk-75Z2AOVW-BnN-mv3P.js 72.67 kB
|
||||
out/renderer/assets/latex-g2Pus_l2-CP0G7LTN.js 72.85 kB
|
||||
out/renderer/assets/vyper-C1nscAY5-BTAKd5p2.js 74.85 kB
|
||||
out/renderer/assets/ModelSettingsPanel-Bq69xf7M.js 76.64 kB
|
||||
out/renderer/assets/xychartDiagram-S5SC5T6Z-B0HnmiNK.js 76.79 kB
|
||||
out/renderer/assets/chunk-GMAD6QVW-B_AU-1G2.js 77.76 kB
|
||||
out/renderer/assets/hack-B1ag3l4X-CEYIfPfg.js 80.58 kB
|
||||
out/renderer/assets/src-DsgKm1PY.js 83.16 kB
|
||||
out/renderer/assets/chunk-TICWLB2K-HMkllssg.js 83.88 kB
|
||||
out/renderer/assets/fortran-free-form-CsgtTAg3-Dm0PhuY8.js 89.20 kB
|
||||
out/renderer/assets/vennDiagram-4TSXK5OY-4fpVJ9Np.js 89.26 kB
|
||||
out/renderer/assets/csharp-YOPVljXo-CBjcozlW.js 89.91 kB
|
||||
out/renderer/assets/racket--xYIV9-n-NDM2V4Sc.js 92.62 kB
|
||||
out/renderer/assets/swift-CgzYrGBX-CaMD6i-j.js 94.14 kB
|
||||
out/renderer/assets/less-BGhX8xko-CbSvNyvq.js 99.00 kB
|
||||
out/renderer/assets/chunk-SHT3W25Y-2hntSx1_.js 104.10 kB
|
||||
out/renderer/assets/objective-c-CmcWiAft-DY5tZuMk.js 105.62 kB
|
||||
out/renderer/assets/blade-Bq8WPf0E-BehdttJf.js 105.98 kB
|
||||
out/renderer/assets/c4Diagram-7LVT6UL2-BUPZp1Fb.js 107.96 kB
|
||||
out/renderer/assets/php-X15vsN4N-ChBJUzAp.js 111.49 kB
|
||||
out/renderer/assets/dagre-CzI-C3sx.js 122.98 kB
|
||||
out/renderer/assets/ganttDiagram-EL5Y4UJY-3y2lEktC.js 123.77 kB
|
||||
out/renderer/assets/graphlib-CoAzpIqe.js 127.44 kB
|
||||
out/renderer/assets/asciidoc-DJWalVNM-Daa-Gl9r.js 146.30 kB
|
||||
out/renderer/assets/mdx-C_Ato9sK-CDV72_N0.js 146.49 kB
|
||||
out/renderer/assets/editor.main-POO0Vbhx-D31yi93c.js 161.32 kB
|
||||
out/renderer/assets/cose-bilkent-JH36ORCC-CA60tZpq.js 165.63 kB
|
||||
out/renderer/assets/objective-cpp-BggTCHV8-BRaaCyEF.js 172.18 kB
|
||||
out/renderer/assets/javascript-AfZCJ9Uc-C_GZREFb.js 175.31 kB
|
||||
out/renderer/assets/tsx-BOlKGefW-D7XVyutE.js 176.00 kB
|
||||
out/renderer/assets/jsx-CPd9p36x-D5Ck2u9I.js 178.26 kB
|
||||
out/renderer/assets/sequenceDiagram-WJ2MYXX4-D7FeprQ0.js 190.05 kB
|
||||
out/renderer/assets/typescript-4sRsPriL-Ce01imBq.js 191.16 kB
|
||||
out/renderer/assets/mermaid.core-_tuT8V40.js 191.57 kB
|
||||
out/renderer/assets/angular-ts-YduEkmVa-936ueej5.js 193.82 kB
|
||||
out/renderer/assets/vue-vine-DXhYlaTf-C8MW7tnI.js 201.27 kB
|
||||
out/renderer/assets/SourceSelect-Dd7kI5iL.js 203.20 kB
|
||||
out/renderer/assets/chunk-4HAMMTFA-BusRJl4_.js 210.32 kB
|
||||
out/renderer/assets/swimlanes-42K2YHIH-7v_MGc-X.js 265.51 kB
|
||||
out/renderer/assets/wolfram-BVoTES0L-W3A5YqXk.js 267.14 kB
|
||||
out/renderer/assets/chunk-DU6HZSFF-ev5NGQFs.js 271.07 kB
|
||||
out/renderer/assets/architectureDiagram-5GKGNRK7-BLwHQNCJ.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-DcJkdGs4.js 622.62 kB
|
||||
out/renderer/assets/cpp-9jHBA231-DB3feGjZ.js 626.73 kB
|
||||
out/renderer/assets/app-4914IQSi.js 675.57 kB
|
||||
out/renderer/assets/emacs-lisp-DjtOxg4j-CzQ0CKOn.js 780.06 kB
|
||||
out/renderer/assets/cytoscape.esm-bVGYt-iW.js 869.69 kB
|
||||
out/renderer/assets/ArtifactPierreDiff-DpqRTCz8.js 1,119.58 kB
|
||||
out/renderer/assets/chunk-FOHPRMQF-BCllzKJD.js 1,154.18 kB
|
||||
out/renderer/assets/index-Bk2r1j2x.js 3,761.37 kB
|
||||
out/renderer/assets/editor.api2-dPwET-7w-BYIQ9bT3.js 4,889.23 kB
|
||||
|
||||
✓ built in 2.31s
|
||||
@@ -0,0 +1,70 @@
|
||||
{
|
||||
"result": "PASS",
|
||||
"checks": [
|
||||
"uninstalled uses add slot",
|
||||
"normal footer removed from DOM",
|
||||
"current uses installed CardFrame",
|
||||
"current removes Plus/add DOM",
|
||||
"current use occupies status slot exactly once",
|
||||
"use invokes one draft callback without installation",
|
||||
"use does not open install detail",
|
||||
"top nav count reflects installed list",
|
||||
"reopen retains current state",
|
||||
"enable failure prevents draft invocation",
|
||||
"disabled skill enabled before callback",
|
||||
"non-invocable current cannot use or reinstall",
|
||||
"outdated installed identity distinction",
|
||||
"outdated not represented as first add",
|
||||
"outdated requires explicit confirmation",
|
||||
"modified installed identity distinction",
|
||||
"modified not represented as first add",
|
||||
"modified requires explicit confirmation",
|
||||
"broken installed identity distinction",
|
||||
"broken not represented as first add",
|
||||
"broken requires explicit confirmation",
|
||||
"same-name local installed identity distinction",
|
||||
"same-name local not represented as first add",
|
||||
"same-name local requires explicit confirmation",
|
||||
"broken same-name local installed identity distinction",
|
||||
"broken same-name local not represented as first add",
|
||||
"broken same-name local requires explicit confirmation",
|
||||
"different source installed identity distinction",
|
||||
"different source not represented as first add",
|
||||
"different source requires explicit confirmation",
|
||||
"workspace is not treated as managed current",
|
||||
"external current while confirming prevents duplicate installation",
|
||||
"first install confirms provenance and scripts",
|
||||
"duplicate confirmation issues only one request",
|
||||
"real host progress rendered",
|
||||
"install success automatically switches action DOM",
|
||||
"external uninstall restores add",
|
||||
"external install blocks new add",
|
||||
"external terminal progress clears block",
|
||||
"unavailable has no duplicate installed entry",
|
||||
"catalog retry recovers in place",
|
||||
"empty catalog has no footer",
|
||||
"SkillHub has only top installed navigation",
|
||||
"套件 has only top installed navigation",
|
||||
"no uncaught renderer errors"
|
||||
],
|
||||
"calls": [
|
||||
[
|
||||
"enable",
|
||||
"user:rec"
|
||||
],
|
||||
[
|
||||
"enable",
|
||||
"user:rec"
|
||||
],
|
||||
[
|
||||
"install",
|
||||
"archify",
|
||||
{
|
||||
"operationId": "c4b39eb6-c00b-423a-8c37-8446f6c787bd",
|
||||
"overwrite": false
|
||||
}
|
||||
]
|
||||
],
|
||||
"errors": [],
|
||||
"limits": "Real React in offline jsdom; callback boundary tested, not production composer dispatch. No native Chromium, computed layout, screenshot, theme/hover/focus pixels, model SDK, actual install or network."
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
|
||||
> ycode@0.0.7 test:recommended-skills:dom
|
||||
> node scripts/test-recommended-skills-dom.mjs
|
||||
|
||||
{"result":"PASS","checks":45,"output":"C:\\Users\\Administrator\\.codex\\worktrees\\b02-accept-01\\YCode\\.tmp\\recommended-skills-dom-lBbu5l"}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"matches": false,
|
||||
"background": "rgb(50, 60, 70)",
|
||||
"hit": "qa-hover-control",
|
||||
"hovered": 0
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"theme": "light",
|
||||
"normal": {
|
||||
"width": "24px",
|
||||
"height": "24px",
|
||||
"background": "rgba(0, 0, 0, 0)",
|
||||
"color": "rgb(0, 0, 0)",
|
||||
"outline": "rgb(0, 0, 0) none 0px",
|
||||
"focused": false,
|
||||
"hover": false
|
||||
},
|
||||
"hover": {
|
||||
"width": "24px",
|
||||
"height": "24px",
|
||||
"background": "rgb(230, 230, 230)",
|
||||
"color": "rgb(0, 0, 0)",
|
||||
"outline": "rgb(0, 0, 0) none 0px",
|
||||
"focused": false,
|
||||
"hover": false
|
||||
},
|
||||
"probe": {
|
||||
"button": "<button type=\"button\" class=\"sm-use-btn\" aria-label=\"使用推荐技能 Archify\" title=\"去使用\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 14.4531 14.6507\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path fill=\"currentColor\" transform=\"matrix(1 0 0 1 0 0.00116893)\" d=\"M7.2266 0.0001C7.2614 0.0001 7.297 0.0001 7.3333 0.0001C8.0268 -0.0004 8.9863 -0.0011 9.9521 0.17C10.9684 0.3502 12.061 0.7315 12.8926 1.5636C14.2855 2.9577 14.4531 4.8385 14.4531 6.2804C14.4531 7.7222 14.2853 9.6021 12.8926 10.9962C12.094 11.7954 11.0936 12.1824 10.1406 12.3721C9.1916 12.5611 8.2453 12.5626 7.5312 12.5606C7.2983 12.56 6.9785 12.7013 6.5684 13.0948C6.17 13.4771 5.7651 14.0227 5.3662 14.6495L4.3535 14.005C4.7714 13.3484 5.2367 12.709 5.7373 12.2286C6.2261 11.7597 6.8348 11.3587 7.5342 11.3604C8.2533 11.3624 9.0891 11.3581 9.9062 11.1954C10.7192 11.0335 11.4695 10.7233 12.0439 10.1485C13.073 9.1185 13.2539 7.6783 13.2539 6.2804C13.2539 4.8825 13.0729 3.4423 12.0439 2.4122C11.4564 1.8243 10.6378 1.5103 9.7432 1.3517C8.8809 1.1988 8.0118 1.1991 7.3052 1.1993L7.2266 1.1993L7.1478 1.1993C6.4412 1.1991 5.5722 1.1988 4.71 1.3517C3.8153 1.5103 2.9967 1.8242 2.4092 2.4122C1.3801 3.4423 1.1992 4.8825 1.1992 6.2804C1.1993 7.6782 1.3802 9.1185 2.4092 10.1485C3.0494 10.7892 3.9083 11.1001 4.8252 11.2442L4.7324 11.837L4.6387 12.4298C3.5897 12.2648 2.45 11.8863 1.5605 10.9962C0.1678 9.6021 0 7.7222 0 6.2804C0 4.8385 0.1676 2.9577 1.5605 1.5636C2.392 0.7316 3.4838 0.3502 4.5 0.17C5.4656 -0.0012 6.4253 -0.0005 7.1189 0.0001C7.1555 0.0001 7.1914 0.0001 7.2266 0.0001ZM10.5038 7.978L8.4321 7.1484Q8.3898 7.1315 8.3087 7.0998Q8.0047 6.981 7.8793 6.9046Q7.4651 6.6523 7.4653 6.2195Q7.4655 5.7867 7.8799 5.5347Q8.0053 5.4584 8.3094 5.3399Q8.3906 5.3083 8.4328 5.2914L10.5042 4.4638L10.9494 5.5782L9.3423 6.2203L10.9499 6.864L10.5038 7.978ZM5.2028 7.7196L5.2028 4.7196L4.0028 4.7196L4.0028 7.7196L5.2028 7.7196Z\" fill-rule=\"evenodd\"></path></svg></button>",
|
||||
"buttonStyle": {
|
||||
"pointerEvents": "auto",
|
||||
"display": "flex",
|
||||
"visibility": "visible"
|
||||
},
|
||||
"point": {
|
||||
"x": 315,
|
||||
"y": 157
|
||||
},
|
||||
"hit": "<svg width=\"14\" height=\"14\" viewBox=\"0 0 14.4531 14.6507\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path fill=\"currentColor\" transform=\"matrix(1 0 0 1 0 0.00116893)\" d=\"M7.2266 0.0001C7.2614 0.0001 7.297 0.0001 7.3333 0.0001C8.0268 -0.0004 8.9863 -0.0011 9.9521 0.17C10.9684 0.3502 12.061 0.7315 12.8926 1.5636C14.2855 2.9577 14.4531 4.8385 14.4531 6.2804C14.4531 7.7222 14.2853 9.6021 12.8926 10.9962C12.094 11.7954 11.0936 12.1824 10.1406 12.3721C9.1916 12.5611 8.2453 12.5626 7.5312 12.5606C",
|
||||
"hovered": [],
|
||||
"active": ""
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 36 KiB |
|
After Width: | Height: | Size: 37 KiB |
|
After Width: | Height: | Size: 35 KiB |
@@ -0,0 +1,453 @@
|
||||
{
|
||||
"result": "PASS",
|
||||
"checks": [
|
||||
"the recommendation card renders from the host catalog",
|
||||
"the card exposes its install state for the host test",
|
||||
"the card shows the author supplied description",
|
||||
"no maintenance placeholder is shown",
|
||||
"the remote catalog tabs still report no connection",
|
||||
"the confirm dialog names the source repository",
|
||||
"the confirm dialog states that no install script runs",
|
||||
"the confirm dialog warns that the skill contains scripts",
|
||||
"reverse Tab reaches the collapsible source information",
|
||||
"Tab wraps inside the modal rather than entering the sidebar",
|
||||
"the install progress is reported by the host",
|
||||
"the host received the recommendation id",
|
||||
"the host received a fresh operation id",
|
||||
"a first install is not an overwrite",
|
||||
"the card reports the recommendation as installed",
|
||||
"the installed skill has no add button",
|
||||
"the installed skill uses the recovered installed card",
|
||||
"the installed action uses the original action slot",
|
||||
"no duplicate under-card use action remains",
|
||||
"the duplicate footer is absent",
|
||||
"the detail remains the same DOM instance throughout installation",
|
||||
"the detail offers use after installation",
|
||||
"the success notification also offers use",
|
||||
"there is no permanent list footer progress panel",
|
||||
"installed action uses recovered 24px slot and 16px icon",
|
||||
"light use action default background is transparent",
|
||||
"light trusted native pointer enters use action",
|
||||
"light hover has a distinct background",
|
||||
"light use action remains focusable with stable 24px slot",
|
||||
"the installed skill appears in the installed list",
|
||||
"a same-name local skill requires an explicit replacement",
|
||||
"the replacement notice mentions the local modification",
|
||||
"an explicit replacement is sent to the host as an overwrite",
|
||||
"a failed install shows the host error",
|
||||
"a failed install can be retried from the same card",
|
||||
"the download phase can be cancelled",
|
||||
"the cancellation is sent to the host",
|
||||
"closing a running detail restores the background",
|
||||
"reopening detail keeps the same install operation",
|
||||
"the commit phase disables cancellation in place",
|
||||
"the success notification invokes the same use callback",
|
||||
"disabled recommendation is enabled before use",
|
||||
"an empty catalog is reported as unavailable, not as a maintenance page",
|
||||
"the unavailable state keeps top installed navigation",
|
||||
"the unavailable state has no duplicate installed entry",
|
||||
"an install from another window is reported",
|
||||
"a new install is blocked while another window is installing",
|
||||
"the blocked state is explained on the card",
|
||||
"the foreign block clears when that operation finishes",
|
||||
"the settled install recorded its operation id",
|
||||
"a stale frame does not regress the settled install",
|
||||
"the dark theme reaches the real page",
|
||||
"the dark card uses a dark surface",
|
||||
"the dark layout keeps the recommendation card inside the viewport",
|
||||
"the dark layout does not overflow the document",
|
||||
"dark use action default background is transparent",
|
||||
"dark trusted native pointer enters use action",
|
||||
"dark hover has a distinct background",
|
||||
"dark use action remains focusable with stable 24px slot",
|
||||
"the recommendation card stays inside the narrow viewport",
|
||||
"the narrow recommendation card causes no document overflow",
|
||||
"no renderer errors"
|
||||
],
|
||||
"calls": [
|
||||
[
|
||||
"recommendations"
|
||||
],
|
||||
[
|
||||
"installState"
|
||||
],
|
||||
[
|
||||
"list",
|
||||
null
|
||||
],
|
||||
[
|
||||
"installRecommended",
|
||||
"archify",
|
||||
{
|
||||
"operationId": "3622ed5d-7679-409d-8bf1-cb9cc033060d",
|
||||
"overwrite": false
|
||||
}
|
||||
],
|
||||
[
|
||||
"list",
|
||||
null
|
||||
],
|
||||
[
|
||||
"list",
|
||||
null
|
||||
],
|
||||
[
|
||||
"list",
|
||||
null
|
||||
],
|
||||
[
|
||||
"recommendations"
|
||||
],
|
||||
[
|
||||
"installState"
|
||||
],
|
||||
[
|
||||
"list",
|
||||
null
|
||||
],
|
||||
[
|
||||
"qaSetInstalled",
|
||||
[
|
||||
{
|
||||
"id": "user:local",
|
||||
"name": "Archify",
|
||||
"description": "本地导入的同名技能",
|
||||
"version": "1.0.0",
|
||||
"path": "C:/local/archify",
|
||||
"scope": "user",
|
||||
"enabled": true,
|
||||
"userInvocable": true,
|
||||
"disableModelInvocation": false,
|
||||
"source": "imported",
|
||||
"userModified": true
|
||||
}
|
||||
]
|
||||
],
|
||||
[
|
||||
"list",
|
||||
null
|
||||
],
|
||||
[
|
||||
"installRecommended",
|
||||
"archify",
|
||||
{
|
||||
"operationId": "20fbd460-9f54-481b-802a-936c6dcced48",
|
||||
"overwrite": true
|
||||
}
|
||||
],
|
||||
[
|
||||
"list",
|
||||
null
|
||||
],
|
||||
[
|
||||
"list",
|
||||
null
|
||||
],
|
||||
[
|
||||
"list",
|
||||
null
|
||||
],
|
||||
[
|
||||
"qaSetInstalled",
|
||||
[]
|
||||
],
|
||||
[
|
||||
"list",
|
||||
null
|
||||
],
|
||||
[
|
||||
"qaFailNext"
|
||||
],
|
||||
[
|
||||
"installRecommended",
|
||||
"archify",
|
||||
{
|
||||
"operationId": "8639b492-61ea-4e4d-a0a5-b3e5b05b65b5",
|
||||
"overwrite": false
|
||||
}
|
||||
],
|
||||
[
|
||||
"installState"
|
||||
],
|
||||
[
|
||||
"qaDelay",
|
||||
400
|
||||
],
|
||||
[
|
||||
"installRecommended",
|
||||
"archify",
|
||||
{
|
||||
"operationId": "d6e1b302-5010-4e78-b1a0-fe648def3e27",
|
||||
"overwrite": false
|
||||
}
|
||||
],
|
||||
[
|
||||
"cancelInstall",
|
||||
"d6e1b302-5010-4e78-b1a0-fe648def3e27"
|
||||
],
|
||||
[
|
||||
"installState"
|
||||
],
|
||||
[
|
||||
"installState"
|
||||
],
|
||||
[
|
||||
"qaDelay",
|
||||
0
|
||||
],
|
||||
[
|
||||
"qaDelay",
|
||||
250
|
||||
],
|
||||
[
|
||||
"installRecommended",
|
||||
"archify",
|
||||
{
|
||||
"operationId": "080fabc8-19e7-4b4b-b72d-270fceb1b54d",
|
||||
"overwrite": false
|
||||
}
|
||||
],
|
||||
[
|
||||
"list",
|
||||
null
|
||||
],
|
||||
[
|
||||
"list",
|
||||
null
|
||||
],
|
||||
[
|
||||
"list",
|
||||
null
|
||||
],
|
||||
[
|
||||
"qaSetInstalled",
|
||||
[
|
||||
{
|
||||
"id": "user:rec",
|
||||
"name": "Archify",
|
||||
"description": "生成可交互的架构图、流程图和一页式说明",
|
||||
"version": "3.2.0",
|
||||
"path": "C:/managed/archify",
|
||||
"scope": "user",
|
||||
"enabled": false,
|
||||
"userInvocable": true,
|
||||
"disableModelInvocation": false,
|
||||
"source": "imported",
|
||||
"userModified": false,
|
||||
"origin": {
|
||||
"recommendationId": "archify",
|
||||
"repository": "tt-a1i/archify",
|
||||
"commit": "25cf37080fc8b1dbe758a4efc3935b55f3327083",
|
||||
"packagePath": "archify.zip",
|
||||
"archiveSha256": "70e210265c59f24dcbdf2a502ff671104b5454e7ee7d3554aecd86bad32384f5",
|
||||
"version": "3.2.0",
|
||||
"installedAt": 1
|
||||
}
|
||||
}
|
||||
]
|
||||
],
|
||||
[
|
||||
"list",
|
||||
null
|
||||
],
|
||||
[
|
||||
"setEnabled",
|
||||
"user:rec",
|
||||
true,
|
||||
null
|
||||
],
|
||||
[
|
||||
"list",
|
||||
null
|
||||
],
|
||||
[
|
||||
"list",
|
||||
null
|
||||
],
|
||||
[
|
||||
"list",
|
||||
null
|
||||
],
|
||||
[
|
||||
"qaDelay",
|
||||
0
|
||||
],
|
||||
[
|
||||
"qaSetInstalled",
|
||||
[]
|
||||
],
|
||||
[
|
||||
"list",
|
||||
null
|
||||
],
|
||||
[
|
||||
"qaFailRecommendations",
|
||||
true
|
||||
],
|
||||
[
|
||||
"recommendations"
|
||||
],
|
||||
[
|
||||
"installState"
|
||||
],
|
||||
[
|
||||
"list",
|
||||
null
|
||||
],
|
||||
[
|
||||
"list",
|
||||
null
|
||||
],
|
||||
[
|
||||
"qaFailRecommendations",
|
||||
false
|
||||
],
|
||||
[
|
||||
"recommendations"
|
||||
],
|
||||
[
|
||||
"qaEmitForeign",
|
||||
"downloading",
|
||||
"11111111-2222-4333-8444-555555555555"
|
||||
],
|
||||
[
|
||||
"qaEmitForeign",
|
||||
"installed",
|
||||
"11111111-2222-4333-8444-555555555555"
|
||||
],
|
||||
[
|
||||
"list",
|
||||
null
|
||||
],
|
||||
[
|
||||
"qaSetInstalled",
|
||||
[]
|
||||
],
|
||||
[
|
||||
"list",
|
||||
null
|
||||
],
|
||||
[
|
||||
"qaDelay",
|
||||
0
|
||||
],
|
||||
[
|
||||
"installRecommended",
|
||||
"archify",
|
||||
{
|
||||
"operationId": "6c63fba3-ad6a-4fbb-8d11-02d213172e2b",
|
||||
"overwrite": false
|
||||
}
|
||||
],
|
||||
[
|
||||
"list",
|
||||
null
|
||||
],
|
||||
[
|
||||
"list",
|
||||
null
|
||||
],
|
||||
[
|
||||
"list",
|
||||
null
|
||||
],
|
||||
[
|
||||
"qaEmitStale",
|
||||
"downloading",
|
||||
"6c63fba3-ad6a-4fbb-8d11-02d213172e2b",
|
||||
1
|
||||
]
|
||||
],
|
||||
"screenshots": [
|
||||
"recommendation-card.png",
|
||||
"install-confirm.png",
|
||||
"installed-detail.png",
|
||||
"installed-recommendation-light.png",
|
||||
"installed-use-light-hover.png",
|
||||
"installed-use-light-focus.png",
|
||||
"foreign-install.png",
|
||||
"recommendation-dark.png",
|
||||
"installed-use-dark-hover.png",
|
||||
"installed-use-dark-focus.png",
|
||||
"recommendation-narrow.png"
|
||||
],
|
||||
"actionStyles": [
|
||||
{
|
||||
"theme": "light",
|
||||
"pointerEntry": {
|
||||
"trusted": true,
|
||||
"type": "mouse"
|
||||
},
|
||||
"selectorHover": false
|
||||
},
|
||||
{
|
||||
"theme": "light",
|
||||
"normal": {
|
||||
"width": "24px",
|
||||
"height": "24px",
|
||||
"background": "rgba(0, 0, 0, 0)",
|
||||
"color": "rgb(0, 0, 0)",
|
||||
"outline": "rgb(0, 0, 0) none 0px",
|
||||
"focused": false,
|
||||
"hover": false
|
||||
},
|
||||
"hover": {
|
||||
"width": "24px",
|
||||
"height": "24px",
|
||||
"background": "rgb(230, 230, 230)",
|
||||
"color": "rgb(0, 0, 0)",
|
||||
"outline": "rgb(0, 0, 0) none 0px",
|
||||
"focused": false,
|
||||
"hover": false
|
||||
},
|
||||
"focus": {
|
||||
"width": "24px",
|
||||
"height": "24px",
|
||||
"background": "rgba(0, 0, 0, 0)",
|
||||
"color": "rgb(0, 0, 0)",
|
||||
"outline": "rgb(0, 0, 0) none 0px",
|
||||
"focused": true,
|
||||
"hover": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"theme": "dark",
|
||||
"pointerEntry": {
|
||||
"trusted": true,
|
||||
"type": "mouse"
|
||||
},
|
||||
"selectorHover": false
|
||||
},
|
||||
{
|
||||
"theme": "dark",
|
||||
"normal": {
|
||||
"width": "24px",
|
||||
"height": "24px",
|
||||
"background": "rgba(0, 0, 0, 0)",
|
||||
"color": "rgb(255, 255, 255)",
|
||||
"outline": "rgb(255, 255, 255) none 0px",
|
||||
"focused": false,
|
||||
"hover": false
|
||||
},
|
||||
"hover": {
|
||||
"width": "24px",
|
||||
"height": "24px",
|
||||
"background": "color(srgb 1 1 1 / 0.08)",
|
||||
"color": "rgb(255, 255, 255)",
|
||||
"outline": "rgb(255, 255, 255) none 0px",
|
||||
"focused": false,
|
||||
"hover": false
|
||||
},
|
||||
"focus": {
|
||||
"width": "24px",
|
||||
"height": "24px",
|
||||
"background": "rgba(0, 0, 0, 0)",
|
||||
"color": "rgb(255, 255, 255)",
|
||||
"outline": "rgb(255, 255, 255) none 0px",
|
||||
"focused": true,
|
||||
"hover": false
|
||||
}
|
||||
}
|
||||
],
|
||||
"limits": "Controlled host in isolated Electron; the shipped page and styles are used. No network, no real skill storage, no real install."
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
|
||||
> ycode@0.0.7 test:recommended-skills:ui
|
||||
> node scripts/test-recommended-skills-ui.mjs
|
||||
|
||||
|
||||
(electron) 'console-message' arguments are deprecated and will be removed. Please use Event<WebContentsConsoleMessageEventParams> object instead.
|
||||
AssertionError [ERR_ASSERTION]: light pointer enters use action: false
|
||||
at check (file:///C:/Users/Administrator/.codex/worktrees/b02-accept-01/YCode/scripts/test-recommended-skills-ui.mjs:180:14)
|
||||
at verifyCurrentActionStyles (file:///C:/Users/Administrator/.codex/worktrees/b02-accept-01/YCode/scripts/test-recommended-skills-ui.mjs:210:7)
|
||||
at async file:///C:/Users/Administrator/.codex/worktrees/b02-accept-01/YCode/scripts/test-recommended-skills-ui.mjs:270:7 {
|
||||
generatedMessage: false,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: false,
|
||||
expected: true,
|
||||
operator: '==',
|
||||
diff: 'simple'
|
||||
}
|
||||
@@ -0,0 +1,417 @@
|
||||
/** Isolated Electron fixture for the recommended-skill page.
|
||||
* The host is fully controlled: no network, no real skill storage, no user data. */
|
||||
import fs from 'node:fs'
|
||||
import path from 'node:path'
|
||||
import assert from 'node:assert/strict'
|
||||
import { createRequire } from 'node:module'
|
||||
import { spawn } from 'node:child_process'
|
||||
|
||||
const require = createRequire(import.meta.url)
|
||||
const electronModule = require('electron')
|
||||
const electron = typeof electronModule === 'object' && electronModule.app ? electronModule : null
|
||||
const repository = path.resolve('.'), base = path.join(repository, '.tmp')
|
||||
|
||||
if (!electron) {
|
||||
fs.mkdirSync(base, { recursive: true })
|
||||
const output = fs.mkdtempSync(path.join(base, 'recommended-skills-ui-'))
|
||||
const env = { ...process.env }
|
||||
delete env.ELECTRON_RUN_AS_NODE
|
||||
delete env.ELECTRON_RENDERER_URL
|
||||
const child = spawn(electronModule, [path.resolve('.tmp/b02-acceptance/recommended-skills-ui-pointer.mjs'), output], { stdio: 'inherit', windowsHide: true, env })
|
||||
const timer = setTimeout(() => child.kill(), 120000)
|
||||
process.exitCode = await new Promise(resolve => child.on('exit', code => { clearTimeout(timer); resolve(code ?? 1) }))
|
||||
} else {
|
||||
void (async () => {
|
||||
const { app, BrowserWindow, ipcMain } = electron
|
||||
const output = path.resolve(process.argv.at(-1)), relative = path.relative(base, output)
|
||||
assert.ok(relative.startsWith('recommended-skills-ui-') && !relative.includes('..') && !path.isAbsolute(relative))
|
||||
const userData = path.join(output, 'data')
|
||||
fs.mkdirSync(userData, { recursive: true })
|
||||
app.setPath('userData', userData)
|
||||
const checks = [], errors = [], calls = [], screenshots = [], actionStyles = []
|
||||
|
||||
const recommendation = {
|
||||
id: 'archify',
|
||||
name: 'Archify',
|
||||
description: '生成可交互的架构图、流程图和一页式说明',
|
||||
author: 'tt-a1i',
|
||||
license: 'MIT',
|
||||
repository: 'tt-a1i/archify',
|
||||
version: '3.2.0',
|
||||
commit: '25cf37080fc8b1dbe758a4efc3935b55f3327083',
|
||||
packagePath: 'archify.zip',
|
||||
sha256: '70e210265c59f24dcbdf2a502ff671104b5454e7ee7d3554aecd86bad32384f5',
|
||||
expectedBytes: 5271959,
|
||||
containsScripts: true
|
||||
}
|
||||
const localSkill = {
|
||||
id: 'user:local', name: 'Archify', description: '本地导入的同名技能', version: '1.0.0',
|
||||
path: 'C:/local/archify', scope: 'user', enabled: true, userInvocable: true,
|
||||
disableModelInvocation: false, source: 'imported', userModified: true
|
||||
}
|
||||
const installedRecommendation = {
|
||||
id: 'user:rec', name: 'Archify', description: recommendation.description, version: '3.2.0',
|
||||
path: 'C:/managed/archify', scope: 'user', enabled: true, userInvocable: true,
|
||||
disableModelInvocation: false, source: 'imported', userModified: false,
|
||||
origin: {
|
||||
recommendationId: 'archify', repository: recommendation.repository, commit: recommendation.commit,
|
||||
packagePath: recommendation.packagePath, archiveSha256: recommendation.sha256, version: '3.2.0', installedAt: 1
|
||||
}
|
||||
}
|
||||
|
||||
let installed = [], progress = null, failNext = false, cancelRequested = false, delay = 0, recommendationOverride = null, recommendationFails = false
|
||||
let clock = 0
|
||||
const listeners = new Set(), changedListeners = new Set()
|
||||
const emit = state => {
|
||||
// The host stamps a monotonic time; a strict comparison rejects a stale frame.
|
||||
const stamped = { ...state, updatedAt: ++clock }
|
||||
progress = stamped
|
||||
for (const listener of listeners) listener(stamped)
|
||||
for (const win of BrowserWindow.getAllWindows()) if (!win.isDestroyed()) win.webContents.send('skills:install-progress', stamped)
|
||||
}
|
||||
const changed = () => {
|
||||
for (const listener of changedListeners) listener()
|
||||
for (const win of BrowserWindow.getAllWindows()) if (!win.isDestroyed()) win.webContents.send('skills:changed')
|
||||
}
|
||||
|
||||
ipcMain.handle('skills-qa', async (_event, method, args) => {
|
||||
calls.push([method, ...args])
|
||||
if (method === 'recommendations') {
|
||||
if (recommendationFails) throw Error('推荐目录服务不可用')
|
||||
return recommendationOverride ?? [recommendation]
|
||||
}
|
||||
if (method === 'list') return installed
|
||||
if (method === 'setEnabled') { installed = installed.map(skill => skill.id === args[0] ? { ...skill, enabled: args[1] } : skill); changed(); return }
|
||||
if (method === 'installState') return progress
|
||||
// The host only accepts the cancel request; the terminal frame still comes from the install flow.
|
||||
if (method === 'cancelInstall') { cancelRequested = true; return { cancelled: true } }
|
||||
if (method === 'installRecommended') {
|
||||
const [id, options] = args
|
||||
if (id !== recommendation.id) throw Error('未知推荐技能')
|
||||
if (failNext) {
|
||||
failNext = false
|
||||
emit({ operationId: options.operationId, recommendationId: id, phase: 'failed', receivedBytes: 0, error: '下载失败:网络错误', updatedAt: Date.now() })
|
||||
throw Error('下载失败:网络错误')
|
||||
}
|
||||
emit({ operationId: options.operationId, recommendationId: id, phase: 'downloading', receivedBytes: 0, totalBytes: recommendation.expectedBytes, updatedAt: Date.now() })
|
||||
await new Promise(resolve => setTimeout(resolve, delay))
|
||||
if (cancelRequested) { cancelRequested = false; emit({ operationId: options.operationId, recommendationId: id, phase: 'cancelled', receivedBytes: 0, updatedAt: Date.now() }); throw Object.assign(Error('推荐技能安装已取消'), { name: 'AbortError' }) }
|
||||
emit({ operationId: options.operationId, recommendationId: id, phase: 'validating', receivedBytes: recommendation.expectedBytes, totalBytes: recommendation.expectedBytes, updatedAt: Date.now() })
|
||||
await new Promise(resolve => setTimeout(resolve, delay))
|
||||
if (cancelRequested) { cancelRequested = false; emit({ operationId: options.operationId, recommendationId: id, phase: 'cancelled', receivedBytes: recommendation.expectedBytes, updatedAt: Date.now() }); throw Object.assign(Error('推荐技能安装已取消'), { name: 'AbortError' }) }
|
||||
emit({ operationId: options.operationId, recommendationId: id, phase: 'installing', receivedBytes: recommendation.expectedBytes, totalBytes: recommendation.expectedBytes, updatedAt: Date.now() })
|
||||
await new Promise(resolve => setTimeout(resolve, delay))
|
||||
installed = [installedRecommendation]
|
||||
emit({ operationId: options.operationId, recommendationId: id, phase: 'installed', receivedBytes: recommendation.expectedBytes, totalBytes: recommendation.expectedBytes, updatedAt: Date.now() })
|
||||
changed()
|
||||
return installedRecommendation
|
||||
}
|
||||
if (method === 'qaSetInstalled') { installed = args[0]; changed(); return installed }
|
||||
if (method === 'qaFailNext') { failNext = true; return true }
|
||||
if (method === 'qaDelay') { delay = args[0]; return true }
|
||||
if (method === 'qaSetRecommendations') { recommendationOverride = args[0]; return true }
|
||||
if (method === 'qaFailRecommendations') { recommendationFails = args[0] === true; return true }
|
||||
// Simulate an operation owned by another window.
|
||||
if (method === 'qaEmitForeign') {
|
||||
const [phase, operationId] = args
|
||||
emit({ operationId, recommendationId: recommendation.id, phase, receivedBytes: 0, totalBytes: recommendation.expectedBytes, updatedAt: Date.now() })
|
||||
return true
|
||||
}
|
||||
// Replay a frame with an older timestamp to prove the terminal state never regresses.
|
||||
if (method === 'qaEmitStale') {
|
||||
const [phase, operationId, updatedAt] = args
|
||||
const stamped = { operationId, recommendationId: recommendation.id, phase, receivedBytes: 0, totalBytes: recommendation.expectedBytes, updatedAt }
|
||||
progress = stamped
|
||||
for (const listener of listeners) listener(stamped)
|
||||
for (const win of BrowserWindow.getAllWindows()) if (!win.isDestroyed()) win.webContents.send('skills:install-progress', stamped)
|
||||
return true
|
||||
}
|
||||
if (method === 'qaSubscribe') { listeners.add(args[0]); return true }
|
||||
if (method === 'qaSubscribeChanged') { changedListeners.add(args[0]); return true }
|
||||
throw Error('Unknown QA method ' + method)
|
||||
})
|
||||
|
||||
fs.writeFileSync(path.join(output, 'preload.cjs'), `const{contextBridge,ipcRenderer}=require('electron');
|
||||
const invoke=(method,...args)=>ipcRenderer.invoke('skills-qa',method,args);
|
||||
contextBridge.exposeInMainWorld('ycode',{skills:{
|
||||
list:(cwd)=>invoke('list',cwd),
|
||||
recommendations:()=>invoke('recommendations'),
|
||||
installRecommended:(id,options)=>invoke('installRecommended',id,options),
|
||||
cancelInstall:(operationId)=>invoke('cancelInstall',operationId),
|
||||
installState:()=>invoke('installState'),
|
||||
onInstallProgress:(listener)=>{const wrapped=(_event,state)=>listener(state);ipcRenderer.on('skills:install-progress',wrapped);return()=>ipcRenderer.removeListener('skills:install-progress',wrapped)},
|
||||
onChanged:(listener)=>{const wrapped=()=>listener();ipcRenderer.on('skills:changed',wrapped);return()=>ipcRenderer.removeListener('skills:changed',wrapped)},
|
||||
read:async()=>({skill:{},content:'',files:[]}),
|
||||
setEnabled:(...args)=>invoke('setEnabled',...args), remove:async()=>{}, export:async()=>null, importPath:async()=>null
|
||||
,qaSetInstalled:(v)=>invoke('qaSetInstalled',v),
|
||||
qaFailNext:()=>invoke('qaFailNext'),
|
||||
qaDelay:(v)=>invoke('qaDelay',v),
|
||||
qaSetRecommendations:(v)=>invoke('qaSetRecommendations',v),
|
||||
qaFailRecommendations:(v)=>invoke('qaFailRecommendations',v),
|
||||
qaEmitForeign:(phase,operationId)=>invoke('qaEmitForeign',phase,operationId),
|
||||
qaEmitStale:(phase,operationId,updatedAt)=>invoke('qaEmitStale',phase,operationId,updatedAt)
|
||||
},resources:{openExternal:async()=>undefined}});`)
|
||||
|
||||
const location = file => JSON.stringify(path.join(repository, file).replaceAll('\\', '/'))
|
||||
fs.writeFileSync(path.join(output, 'fixture.tsx'), `import React from 'react';
|
||||
import{createRoot}from'react-dom/client';
|
||||
import Center from ${location('src/renderer/src/capabilities/CapabilityCenter')};
|
||||
import${location('src/renderer/src/styles/tokens.css')};
|
||||
import${location('src/renderer/src/styles/app.css')};
|
||||
window.__qa={uses:[],created:0,find:0};
|
||||
createRoot(document.getElementById('root')).render(
|
||||
<div className="chat-pane cr-theme" style={{height:'100vh'}}>
|
||||
<Center initialTab="skills" onBackToChat={()=>{}} onUseSkill={skill=>window.__qa.uses.push(skill)} onCreateSkill={()=>window.__qa.created++} onFindSkill={()=>window.__qa.find++}/>
|
||||
</div>);`)
|
||||
await require('esbuild').build({
|
||||
entryPoints: [path.join(output, 'fixture.tsx')], bundle: true, platform: 'browser', format: 'esm', jsx: 'automatic',
|
||||
outfile: path.join(output, 'fixture.js'), loader: { '.svg': 'file', '.png': 'file', '.jpg': 'file', '.woff': 'file', '.woff2': 'file', '.ttf': 'file' }, logLevel: 'warning'
|
||||
})
|
||||
fs.writeFileSync(path.join(output, 'index.html'), '<html data-theme="light"><head><meta charset="utf-8"><link rel="stylesheet" href="fixture.css"><style>html,body,#root{width:100%;height:100%;margin:0}</style></head><body><div id="root"></div><script type="module" src="fixture.js"></script></body></html>')
|
||||
|
||||
const win = new BrowserWindow({
|
||||
width: 1052, height: 901, useContentSize: true, frame: false, show: false,
|
||||
webPreferences: { preload: path.join(output, 'preload.cjs'), contextIsolation: true, nodeIntegration: false, backgroundThrottling: false }
|
||||
})
|
||||
win.webContents.on('console-message', (_event, level, message) => { if (level === 3) errors.push(message) })
|
||||
const read = code => win.webContents.executeJavaScript(code)
|
||||
const check = (label, actual, expected) => {
|
||||
const pass = typeof expected === 'function' ? expected(actual) : JSON.stringify(actual) === JSON.stringify(expected)
|
||||
assert.ok(pass, `${label}: ${JSON.stringify(actual)}`)
|
||||
checks.push(label)
|
||||
}
|
||||
const pause = ms => new Promise(resolve => setTimeout(resolve, ms))
|
||||
const wait = async code => { for (let index = 0; index < 200; index++) { if (await read(code)) return; await pause(50) } throw Error('Timeout ' + code) }
|
||||
const click = async selector => {
|
||||
await read(`(()=>{const e=document.querySelector(${JSON.stringify(selector)});if(!e)throw Error('Missing '+${JSON.stringify(selector)});e.click();return true})()`)
|
||||
await pause(140)
|
||||
}
|
||||
const capture = async name => {
|
||||
win.webContents.invalidate()
|
||||
await pause(120)
|
||||
// A hidden window can capture the previous frame; warm the compositor first.
|
||||
await win.webContents.capturePage()
|
||||
await pause(200)
|
||||
const image = await win.webContents.capturePage()
|
||||
fs.writeFileSync(path.join(output, name + '.png'), image.toPNG())
|
||||
screenshots.push(name + '.png')
|
||||
}
|
||||
|
||||
const verifyCurrentActionStyles = async theme => {
|
||||
const selector = '[data-recommendation-id=archify] .sm-use-btn'
|
||||
const inspect = () => read(`(()=>{const b=document.querySelector(${JSON.stringify(selector)});const s=getComputedStyle(b);return{width:s.width,height:s.height,background:s.backgroundColor,color:s.color,outline:s.outline,focused:document.activeElement===b,hover:b.matches(':hover')}})()`)
|
||||
win.webContents.sendInputEvent({type:'mouseMove',x:1,y:1})
|
||||
await read(`document.activeElement?.blur()`); await pause(200)
|
||||
const normal = await inspect()
|
||||
check(theme + ' use action default background is transparent', normal.background, value => value === 'rgba(0, 0, 0, 0)' || value === 'transparent')
|
||||
const point = await read(`(()=>{const r=document.querySelector(${JSON.stringify(selector)}).getBoundingClientRect();return{x:Math.round(r.x+r.width/2),y:Math.round(r.y+r.height/2)}})()`)
|
||||
await read('(()=>{window.__qaPointerEntry=null;document.querySelector(".sm-use-btn").addEventListener("pointerenter",event=>{window.__qaPointerEntry={trusted:event.isTrusted,type:event.pointerType}},{once:true})})()');
|
||||
win.webContents.sendInputEvent({type:'mouseMove',...point});await pause(200)
|
||||
const hover = await inspect()
|
||||
const pointerEntry=await read('window.__qaPointerEntry'); check(theme + ' trusted native pointer enters use action', pointerEntry?.trusted === true && pointerEntry?.type === 'mouse', true); actionStyles.push({theme,pointerEntry,selectorHover: hover.hover});
|
||||
check(theme + ' hover has a distinct background', hover.background !== normal.background, true)
|
||||
await capture('installed-use-' + theme + '-hover')
|
||||
win.webContents.sendInputEvent({type:'mouseMove',x:1,y:1})
|
||||
win.webContents.sendInputEvent({type:'keyDown',keyCode:'Tab'});win.webContents.sendInputEvent({type:'keyUp',keyCode:'Tab'})
|
||||
await read(`document.querySelector(${JSON.stringify(selector)}).focus()`);await pause(200)
|
||||
const focus = await inspect()
|
||||
check(theme + ' use action remains focusable with stable 24px slot', focus.focused && focus.width === '24px' && focus.height === '24px', true)
|
||||
await capture('installed-use-' + theme + '-focus')
|
||||
actionStyles.push({theme,normal,hover,focus})
|
||||
await read(`document.activeElement?.blur()`)
|
||||
}
|
||||
|
||||
try {
|
||||
await win.loadFile(path.join(output, 'index.html'));win.showInactive();await pause(200)
|
||||
await wait('!!document.querySelector(".yc-skills-page")')
|
||||
await wait('!!document.querySelector("[data-recommendation-id=archify]")')
|
||||
|
||||
check('the recommendation card renders from the host catalog', await read('document.querySelector("[data-recommendation-id=archify] .sm-card-name")?.textContent'), 'Archify')
|
||||
check('the card exposes its install state for the host test', await read('document.querySelector("[data-recommendation-id=archify]").dataset.recommendationState'), 'none')
|
||||
check('the card shows the author supplied description', await read('document.querySelector("[data-recommendation-id=archify] .sm-card-desc")?.textContent'), recommendation.description)
|
||||
check('no maintenance placeholder is shown', await read('!!document.querySelector("[data-capability-maintenance]")'), false)
|
||||
check('the remote catalog tabs still report no connection', await read('!!document.querySelector(".yc-skill-market-unavailable")'), false)
|
||||
await capture('recommendation-card')
|
||||
|
||||
// First install asks for an explicit confirmation.
|
||||
await click('[aria-label="安装 Archify"]')
|
||||
await wait('!!document.querySelector(".yc-skill-detail-shell")')
|
||||
check('the confirm dialog names the source repository', await read('document.querySelector(".yc-skill-detail-shell").textContent.includes("tt-a1i/archify")'), true)
|
||||
check('the confirm dialog states that no install script runs', await read('document.querySelector(".yc-skill-detail-shell").textContent.includes("不会执行仓库中的任何安装命令")'), true)
|
||||
check('the confirm dialog warns that the skill contains scripts', await read('document.querySelector(".yc-skill-detail-shell").textContent.includes("包含脚本") || document.querySelector(".yc-skill-detail-shell").textContent.includes("脚本")'), true)
|
||||
await capture('install-confirm')
|
||||
await read('(()=>{const first=document.querySelector("[role=dialog] .sm-skill-detail-close");first.focus();first.dispatchEvent(new KeyboardEvent("keydown",{key:"Tab",shiftKey:true,bubbles:true,cancelable:true}))})()')
|
||||
check('reverse Tab reaches the collapsible source information', await read('document.activeElement.tagName'), 'SUMMARY')
|
||||
await read('document.activeElement.dispatchEvent(new KeyboardEvent("keydown",{key:"Tab",bubbles:true,cancelable:true}))')
|
||||
check('Tab wraps inside the modal rather than entering the sidebar', await read('document.activeElement.getAttribute("aria-label")'), '关闭技能详情')
|
||||
await read('window.__detailBeforeInstall=document.querySelector("[role=dialog]")')
|
||||
await click('[aria-label="确认安装推荐技能"]')
|
||||
await wait('document.querySelector(".yc-skill-inline-install")?.dataset.installPhase==="installed"')
|
||||
check('the install progress is reported by the host', await read('document.querySelector(".yc-skill-inline-install").dataset.installPhase'), 'installed')
|
||||
check('the host received the recommendation id', await read(`JSON.stringify(${JSON.stringify(calls)}.filter(c=>c[0]==='installRecommended').map(c=>c[1]))`), '["archify"]')
|
||||
check('the host received a fresh operation id', await read(`(${JSON.stringify(calls)}.filter(c=>c[0]==='installRecommended').every(c=>typeof c[2]?.operationId==='string'&&c[2].operationId.length>8))`), true)
|
||||
check('a first install is not an overwrite', await read(`(${JSON.stringify(calls)}.filter(c=>c[0]==='installRecommended').every(c=>c[2]?.overwrite!==true))`), true)
|
||||
await wait('document.querySelector("[data-recommendation-id=archify]").dataset.recommendationState==="current"')
|
||||
check('the card reports the recommendation as installed', await read('document.querySelector("[data-recommendation-id=archify]").dataset.recommendationState'), 'current')
|
||||
check('the installed skill has no add button', await read('!!document.querySelector("[data-recommendation-id=archify] .sm-add-btn")'), false)
|
||||
check('the installed skill uses the recovered installed card', await read('!!document.querySelector("[data-recommendation-id=archify] .sm-card--installed")'), true)
|
||||
check('the installed action uses the original action slot', await read('!!document.querySelector("[data-recommendation-id=archify] .sm-status .sm-use-btn")'), true)
|
||||
check('no duplicate under-card use action remains', await read('!!document.querySelector(".yc-skill-recommendation-meta button")'), false)
|
||||
check('the duplicate footer is absent', await read('!!document.querySelector(".yc-skill-recommendation-footer")'), false)
|
||||
check('the detail remains the same DOM instance throughout installation', await read('window.__detailBeforeInstall===document.querySelector("[role=dialog]")'), true)
|
||||
check('the detail offers use after installation', await read('document.querySelector("[role=dialog] .sm-skill-detail-action-row")?.textContent.includes("去使用")'), true)
|
||||
check('the success notification also offers use', await read('document.querySelector(".yc-skill-install-success")?.textContent.includes("去使用")'), true)
|
||||
check('there is no permanent list footer progress panel', await read('!!document.querySelector(".yc-skills-scroll > .yc-skill-inline-install")'), false)
|
||||
await capture('installed-detail')
|
||||
await click('[role=dialog] .sm-skill-detail-close')
|
||||
|
||||
const installedActionStyle = await read(`(()=>{const b=document.querySelector('[data-recommendation-id=archify] .sm-use-btn');const s=getComputedStyle(b);const svg=b.querySelector('svg');return {width:s.width,height:s.height,svgWidth:getComputedStyle(svg).width,svgHeight:getComputedStyle(svg).height}})()`)
|
||||
check('installed action uses recovered 24px slot and 16px icon', installedActionStyle, {width:'24px',height:'24px',svgWidth:'16px',svgHeight:'16px'})
|
||||
await capture('installed-recommendation-light')
|
||||
await verifyCurrentActionStyles('light')
|
||||
|
||||
// The installed list stays reachable and the skill can be used.
|
||||
await click('[aria-label="已安装技能"]')
|
||||
await wait('document.querySelectorAll(".sm-card").length===1')
|
||||
check('the installed skill appears in the installed list', await read('document.querySelector(".sm-card-name")?.textContent'), 'Archify')
|
||||
await click('[aria-label="返回专家中心"]')
|
||||
await wait('!!document.querySelector("[data-recommendation-id=archify]")')
|
||||
|
||||
// A local skill with the same name requires an explicit overwrite.
|
||||
await read(`window.ycode.skills.qaSetInstalled(${JSON.stringify([localSkill])})`)
|
||||
await wait('document.querySelector("[data-recommendation-id=archify]").dataset.recommendationState==="conflict"')
|
||||
await click('[aria-label="替换 Archify"]')
|
||||
await wait('!!document.querySelector(".yc-skill-detail-shell")')
|
||||
check('a same-name local skill requires an explicit replacement', await read('document.querySelector(".yc-skill-detail-shell").textContent.includes("替换")'), true)
|
||||
check('the replacement notice mentions the local modification', await read('document.querySelector(".yc-skill-detail-shell").textContent.includes("本地内容已被修改")'), true)
|
||||
await click('[aria-label="确认安装推荐技能"]')
|
||||
await wait('document.querySelector("[data-recommendation-id=archify]").dataset.recommendationState==="current"')
|
||||
check('an explicit replacement is sent to the host as an overwrite', await read(`(${JSON.stringify(calls)}.filter(c=>c[0]==='installRecommended').at(-1)[2]?.overwrite)===true`), true)
|
||||
await click('[role=dialog] .sm-skill-detail-close')
|
||||
|
||||
// A failing download reports the real host error and allows a retry.
|
||||
await read(`window.ycode.skills.qaSetInstalled(${JSON.stringify([])})`)
|
||||
await wait('document.querySelector("[data-recommendation-id=archify]").dataset.recommendationState==="none"')
|
||||
await read(`window.ycode.skills.qaFailNext()`)
|
||||
await click('[aria-label="安装 Archify"]')
|
||||
await click('[aria-label="确认安装推荐技能"]')
|
||||
await wait('document.querySelector(".yc-skill-inline-install")?.dataset.installPhase==="failed"')
|
||||
check('a failed install shows the host error', await read('document.querySelector(".yc-skill-inline-install").textContent.includes("网络错误")'), true)
|
||||
check('a failed install can be retried from the same card', await read('document.querySelector("[data-recommendation-id=archify] .sm-add-btn")?.disabled'), false)
|
||||
await click('[role=dialog] .sm-skill-detail-close')
|
||||
|
||||
// Cancellation is allowed before the atomic commit phase.
|
||||
await read(`window.ycode.skills.qaDelay(400)`)
|
||||
await click('[aria-label="安装 Archify"]')
|
||||
await click('[aria-label="确认安装推荐技能"]')
|
||||
await wait('document.querySelector(".yc-skill-inline-install")?.dataset.installPhase==="downloading"')
|
||||
check('the download phase can be cancelled', await read('[...document.querySelectorAll("[role=dialog] button")].some(e=>e.textContent==="取消安装"&&!e.disabled)'), true)
|
||||
await read('document.querySelector("[role=dialog]").querySelectorAll("button").forEach(e=>{if(e.textContent==="取消安装")e.click()})')
|
||||
await wait('document.querySelector(".yc-skill-inline-install")?.dataset.installPhase==="cancelled"')
|
||||
check('the cancellation is sent to the host', await read(`${JSON.stringify(calls)}.some(c=>c[0]==='cancelInstall')`), true)
|
||||
await click('[role=dialog] .sm-skill-detail-close')
|
||||
await read(`window.ycode.skills.qaDelay(0)`)
|
||||
|
||||
// Closing the detail never aborts an accepted install; reopening resumes it.
|
||||
await read('window.ycode.skills.qaDelay(250)')
|
||||
await click('[aria-label="安装 Archify"]'); await click('[aria-label="确认安装推荐技能"]')
|
||||
await wait('document.querySelector(".yc-skill-inline-install")?.dataset.installPhase==="downloading"')
|
||||
const continuingId = await read('document.querySelector(".yc-skill-inline-install").dataset.operationId')
|
||||
await click('[role=dialog] .sm-skill-detail-close')
|
||||
check('closing a running detail restores the background', await read('document.getElementById("root").inert'), false)
|
||||
await click('[data-recommendation-id=archify] .sm-card')
|
||||
check('reopening detail keeps the same install operation', await read('document.querySelector(".yc-skill-inline-install").dataset.operationId'), continuingId)
|
||||
await wait('document.querySelector(".yc-skill-inline-install")?.dataset.installPhase==="installing"')
|
||||
check('the commit phase disables cancellation in place', await read('[...document.querySelectorAll("[role=dialog] button")].find(e=>e.textContent==="取消安装")?.disabled'), true)
|
||||
await wait('document.querySelector(".yc-skill-inline-install")?.dataset.installPhase==="installed"')
|
||||
await click('[role=dialog] .sm-skill-detail-close')
|
||||
await click('.yc-skill-install-success [aria-label="使用推荐技能 Archify"]')
|
||||
check('the success notification invokes the same use callback', await read('window.__qa.uses.length'), 1)
|
||||
await read(`window.ycode.skills.qaSetInstalled(${JSON.stringify([{ ...installedRecommendation, enabled: false }])})`)
|
||||
await wait('document.querySelector("[data-recommendation-id=archify] .sm-use-btn")?.title.includes("启用")')
|
||||
await click('[data-recommendation-id=archify] .sm-use-btn')
|
||||
await wait('window.__qa.uses.length===2')
|
||||
check('disabled recommendation is enabled before use', await read('window.__qa.uses.at(-1).enabled'), true)
|
||||
await read('window.ycode.skills.qaDelay(0)'); await read('window.ycode.skills.qaSetInstalled([])')
|
||||
await wait('document.querySelector("[data-recommendation-id=archify]").dataset.recommendationState==="none"')
|
||||
|
||||
// A failing catalog is reported as unavailable, not as a maintenance page.
|
||||
// The page loads its catalog once, so the failure is proven on a fresh mount.
|
||||
await read(`window.ycode.skills.qaFailRecommendations(true)`)
|
||||
await read(`location.reload()`)
|
||||
await wait('!!document.querySelector(".yc-skill-recommendation-unavailable")')
|
||||
check('an empty catalog is reported as unavailable, not as a maintenance page', await read('!!document.querySelector("[data-capability-maintenance]")'), false)
|
||||
check('the unavailable state keeps top installed navigation', await read('!!document.querySelector("[aria-label=已安装技能]")'), true)
|
||||
check('the unavailable state has no duplicate installed entry', await read('[...document.querySelectorAll(".yc-skill-recommendation-unavailable button")].some(e=>e.textContent.includes("查看已安装技能"))'), false)
|
||||
await read(`window.ycode.skills.qaFailRecommendations(false)`)
|
||||
await click('.yc-skill-recommendation-unavailable button')
|
||||
await wait('!!document.querySelector("[data-recommendation-id=archify]")')
|
||||
|
||||
// An install owned by another window blocks a new install here.
|
||||
const foreignOperation = '11111111-2222-4333-8444-555555555555'
|
||||
await read(`window.ycode.skills.qaEmitForeign('downloading', ${JSON.stringify(foreignOperation)})`)
|
||||
await wait('!!document.querySelector("[data-foreign-install=true]")')
|
||||
check('an install from another window is reported', await read('document.querySelector("[data-foreign-install=true]").textContent.includes("其他窗口正在安装推荐技能")'), true)
|
||||
check('a new install is blocked while another window is installing', await read('document.querySelector("[data-recommendation-id=archify] .sm-add-btn")?.disabled'), true)
|
||||
check('the blocked state is explained on the card', await read('!!document.querySelector(".yc-skill-recommendation-busy")'), true)
|
||||
await capture('foreign-install')
|
||||
await read(`window.ycode.skills.qaEmitForeign('installed', ${JSON.stringify(foreignOperation)})`)
|
||||
await wait('!document.querySelector("[data-foreign-install=true]")')
|
||||
check('the foreign block clears when that operation finishes', await read('document.querySelector("[data-recommendation-id=archify] .sm-add-btn")?.disabled'), false)
|
||||
|
||||
// A stale frame must not move a settled operation back into a running phase.
|
||||
await read(`window.ycode.skills.qaSetInstalled(${JSON.stringify([])})`)
|
||||
await wait('document.querySelector("[data-recommendation-id=archify]").dataset.recommendationState==="none"')
|
||||
await read(`window.ycode.skills.qaDelay(0)`)
|
||||
await click('[aria-label="安装 Archify"]')
|
||||
await click('[aria-label="确认安装推荐技能"]')
|
||||
await wait('document.querySelector(".yc-skill-inline-install")?.dataset.installPhase==="installed"')
|
||||
const settledOperation = await read(`(${JSON.stringify(calls)}.filter(c=>c[0]==='installRecommended').at(-1)[2]?.operationId)`)
|
||||
check('the settled install recorded its operation id', typeof settledOperation === 'string' && settledOperation.length > 8, true)
|
||||
await read(`window.ycode.skills.qaEmitStale('downloading', ${JSON.stringify(settledOperation)}, 1)`)
|
||||
await pause(250)
|
||||
check('a stale frame does not regress the settled install', await read('document.querySelector(".yc-skill-inline-install")?.dataset.installPhase'), 'installed')
|
||||
await click('[role=dialog] .sm-skill-detail-close')
|
||||
|
||||
// Dark and narrow captures of the real page.
|
||||
// This fixture mounts only the capability center, so the theme attribute is set directly.
|
||||
// The dark token switch is proven here only; the production app harness covers the light flow.
|
||||
await read(`(()=>{localStorage.setItem('ycode:theme','dark');document.documentElement.dataset.theme='dark';return true})()`)
|
||||
await wait('document.documentElement.dataset.theme==="dark"')
|
||||
await wait('!!document.querySelector(".yc-capability-center .expert-center-dark")')
|
||||
check('the dark theme reaches the real page', await read('!!document.querySelector(".yc-capability-center .expert-center-dark")'), true)
|
||||
// The card transitions its background, so the dark surface only settles after the animation.
|
||||
await wait(`(()=>{const card=document.querySelector('[data-recommendation-id=archify] .sm-card');if(!card)return false;const m=/rgba?\\((\\d+)/.exec(getComputedStyle(card).backgroundColor);return !!m&&Number(m[1])<90})()`)
|
||||
const darkColors = await read(`(()=>{const card=document.querySelector('[data-recommendation-id=archify] .sm-card');const page=document.querySelector('.yc-capability-center .expert-center-page');return{card:card?getComputedStyle(card).backgroundColor:null,page:page?getComputedStyle(page).backgroundColor:null}})()`)
|
||||
check('the dark card uses a dark surface', darkColors.card, value => typeof value === 'string' && /rgba?\((\d+), (\d+), (\d+)/.test(value) && Number(value.match(/rgba?\((\d+)/)[1]) < 90)
|
||||
const overflow = await read(`(()=>{const wide=[...document.querySelectorAll('*')].filter(e=>e.getBoundingClientRect().right>innerWidth+1).map(e=>e.className||e.tagName).slice(0,4);return{scrollWidth:document.documentElement.scrollWidth,innerWidth,wide}})()`)
|
||||
check('the dark layout keeps the recommendation card inside the viewport', await read(`(()=>{const c=document.querySelector('[data-recommendation-id=archify] .sm-card');if(!c)return false;const r=c.getBoundingClientRect();return r.left>=0&&r.right<=innerWidth+1})()`), true)
|
||||
check('the dark layout does not overflow the document', overflow.scrollWidth <= overflow.innerWidth + 1, true)
|
||||
await capture('recommendation-dark')
|
||||
await verifyCurrentActionStyles('dark')
|
||||
win.setSize(720, 900)
|
||||
await pause(400)
|
||||
check('the recommendation card stays inside the narrow viewport', await read('(()=>{const c=document.querySelector("[data-recommendation-id=archify] .sm-card");if(!c)return false;const r=c.getBoundingClientRect();return r.left>=0&&r.right<=innerWidth+1})()'), true)
|
||||
const narrowOverflow = await read(`(()=>{const wide=[...document.querySelectorAll('*')].filter(e=>e.getBoundingClientRect().right>innerWidth+1).map(e=>String(e.className||e.tagName)).slice(0,5);return{scrollWidth:document.documentElement.scrollWidth,innerWidth,wide}})()`)
|
||||
check('the narrow recommendation card causes no document overflow', narrowOverflow.scrollWidth <= narrowOverflow.innerWidth + 1, true)
|
||||
await capture('recommendation-narrow')
|
||||
win.setSize(1052, 901)
|
||||
await pause(250)
|
||||
|
||||
check('no renderer errors', errors, [])
|
||||
fs.writeFileSync(path.join(output, 'report.json'), JSON.stringify({
|
||||
result: 'PASS', checks, calls, screenshots, actionStyles,
|
||||
limits: 'Controlled host in isolated Electron; the shipped page and styles are used. No network, no real skill storage, no real install.'
|
||||
}, null, 2))
|
||||
console.log(JSON.stringify({ result: 'PASS', checks: checks.length, output }))
|
||||
win.destroy()
|
||||
app.exit(0)
|
||||
} catch (error) {
|
||||
await capture('failure')
|
||||
fs.writeFileSync(path.join(output, 'failure.json'), JSON.stringify({ error: String(error), stack: error?.stack, checks, errors, calls, html: await read('document.body.innerHTML') }, null, 2))
|
||||
console.error(error)
|
||||
win.destroy()
|
||||
app.exit(1)
|
||||
}
|
||||
})().catch(error => { console.error(error); electron.app.exit(1) })
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
|
||||
(electron) 'console-message' arguments are deprecated and will be removed. Please use Event<WebContentsConsoleMessageEventParams> object instead.
|
||||
Error occurred in handler for 'skills-qa': Error: 下载失败:网络错误
|
||||
at file:///C:/Users/Administrator/.codex/worktrees/b02-accept-01/YCode/.tmp/b02-acceptance/recommended-skills-ui-pointer.mjs:94:17
|
||||
at Session.<anonymous> (node:electron/js2c/browser_init:2:107269)
|
||||
at Session.emit (node:events:519:28)
|
||||
Error occurred in handler for 'skills-qa': Error [AbortError]: 推荐技能安装已取消
|
||||
at file:///C:/Users/Administrator/.codex/worktrees/b02-accept-01/YCode/.tmp/b02-acceptance/recommended-skills-ui-pointer.mjs:98:204
|
||||
at async Session.<anonymous> (node:electron/js2c/browser_init:2:107253)
|
||||
Error occurred in handler for 'skills-qa': Error: 推荐目录服务不可用
|
||||
at file:///C:/Users/Administrator/.codex/worktrees/b02-accept-01/YCode/.tmp/b02-acceptance/recommended-skills-ui-pointer.mjs:80:40
|
||||
at Session.<anonymous> (node:electron/js2c/browser_init:2:107269)
|
||||
at Session.emit (node:events:519:28)
|
||||
{"result":"PASS","checks":62,"output":"C:\\Users\\Administrator\\.codex\\worktrees\\b02-accept-01\\YCode\\.tmp\\recommended-skills-ui-yKVyWZ"}
|
||||
@@ -0,0 +1,7 @@
|
||||
|
||||
> ycode@0.0.7 test:recommended-skills
|
||||
> esbuild scripts/recommended-skills-backend-regression.ts --bundle --platform=node --format=esm --external:esbuild --outfile=.tmp/recommended-skills-backend-regression.mjs --log-level=warning && node .tmp/recommended-skills-backend-regression.mjs
|
||||
|
||||
{"result":"PASS","checks":50,"phase":"archive"}
|
||||
{"result":"SKIP","phase":"real-package","reason":"published package not present in .tmp"}
|
||||
{"result":"PASS","checks":60,"phase":"real-package"}
|
||||
@@ -0,0 +1,22 @@
|
||||
[
|
||||
{
|
||||
"Command": "npm run test:recommended-skills",
|
||||
"ExitCode": 0,
|
||||
"Log": ".tmp/b02-acceptance/test-recommended-skills.log"
|
||||
},
|
||||
{
|
||||
"Command": "npm run test:composer-capabilities",
|
||||
"ExitCode": 0,
|
||||
"Log": ".tmp/b02-acceptance/test-composer-capabilities.log"
|
||||
},
|
||||
{
|
||||
"Command": "npm run check:tokens",
|
||||
"ExitCode": 1,
|
||||
"Log": ".tmp/b02-acceptance/check-tokens.log"
|
||||
},
|
||||
{
|
||||
"Command": "npm run test:fold-summary",
|
||||
"ExitCode": 1,
|
||||
"Log": ".tmp/b02-acceptance/test-fold-summary.log"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,29 @@
|
||||
|
||||
> ycode@0.0.7 check:tokens
|
||||
> node scripts/check-design-tokens.mjs
|
||||
|
||||
设计 token 漂移检查(静态)
|
||||
扫描:src/renderer/src 共 367 个文件(用时 96 ms)
|
||||
baseline:scripts/design-token-baseline.json(334 个文件)
|
||||
门禁分类:adapter 8 | core 6 | local 279(合计 293 个文件)
|
||||
合计:裸 hex=611 裸 px=2680 !important=6 --wb-* 定义=525 var(--yc-*) 使用=1650 var(--wb-*) 使用=1209
|
||||
非门禁分类:vendor 2 | recovered 22 | source 47 | tokenSource 3(合计 74 个文件,仅记录不阻塞)
|
||||
合计:裸 hex=10642 裸 px=13642 !important=920 --wb-* 定义=17966 var(--yc-*) 使用=77 var(--wb-*) 使用=19638
|
||||
非门禁相对 baseline:文件 +0;裸 hex +78 裸 px +64 !important +0 --wb-* 定义 +0 var(--yc-*) 使用 +22 var(--wb-*) 使用 -120
|
||||
|
||||
结果:失败,共 6 项:
|
||||
[新增门禁文件] src/renderer/src/capabilities/recommended-flow.css(local):裸 px=21
|
||||
[新增门禁文件] src/renderer/src/capabilities/skill-detail-shell.css(local):裸 px=21
|
||||
[回归] src/renderer/src/capabilities/skills-host.css(local):裸 px 25 → 45(+20)
|
||||
[新增门禁文件] src/renderer/src/workbuddy/composer/capability-picker.css(local):裸 hex=26,裸 px=48
|
||||
[回归] src/renderer/src/workbuddy/composer/composer.css(local):裸 hex 23 → 38(+15);裸 px 83 → 139(+56)
|
||||
[新增门禁文件] src/renderer/src/workbuddy/composer/prompt-queue.css(local):裸 hex=8,裸 px=35
|
||||
|
||||
提示:确认变更符合预期后运行 `node scripts/check-design-tokens.mjs --update-baseline` 刷新 baseline;
|
||||
否则请改用 --yc-* token、复用现有值,或去掉重复的 --wb-* 定义。
|
||||
提示(不失败,仅记录):3 个门禁文件 token 使用数上升:
|
||||
src/renderer/src/capabilities/skills-host.css(local):var(--wb-*) 使用 12 → 19(+7)
|
||||
src/renderer/src/workbuddy/composer/composer.css(local):var(--yc-*) 使用 35 → 47(+12);var(--wb-*) 使用 0 → 1(+1)
|
||||
src/renderer/src/workbuddy/conversation/conversation.css(local):var(--yc-*) 使用 0 → 4(+4)
|
||||
提示(不失败):baseline 中 8 个文件已不存在:src/renderer/src/components/ReportedRunUsage.tsx;src/renderer/src/workbuddy/subagents/SourceMemberIcon.tsx;src/renderer/src/workbuddy/subagents/SubagentCollaboration.tsx;src/renderer/src/workbuddy/subagents/SubagentDetailPanel.tsx;src/renderer/src/workbuddy/subagents/adapters.css;src/renderer/src/workbuddy/subagents/member-view.ts;src/renderer/src/workbuddy/subagents/source.css;src/renderer/src/workbuddy/subagents/theme.css
|
||||
提示:新增门禁文件 36 个且无受控计数(允许):src/renderer/src/capabilities/CapabilityMaintenance.tsx(local);src/renderer/src/capabilities/RecommendedSkills.tsx(local);src/renderer/src/capabilities/SkillAvatar.tsx(local);src/renderer/src/capabilities/SkillDetailShell.tsx(local);src/renderer/src/capabilities/SkillModalPortal.tsx(local);src/renderer/src/capabilities/skill-modal-focus.ts(local);src/renderer/src/components/SessionLoading.tsx(local);src/renderer/src/components/TaskPopconfirm.tsx(local);src/renderer/src/components/session-loading.css(local);src/renderer/src/components/task-popconfirm.css(local);src/renderer/src/components/updates/UpdateSidebarCard.tsx(local);src/renderer/src/components/updates/update-ui-model.ts(local);src/renderer/src/components/updates/update-ui-store.ts(local);src/renderer/src/components/updates/updates-ui.css(local);src/renderer/src/ui/Button.tsx(local);src/renderer/src/ui/IconButton.tsx(local);src/renderer/src/ui/Input.tsx(local);src/renderer/src/ui/Popover.tsx(local);src/renderer/src/ui/Select.tsx(local);src/renderer/src/ui/Switch.tsx(local);…(还有 16 项,详见 --json)
|
||||