Commit History

2 days ago

  1. fix(pdf-jobs): download端点补Content-Length——66.9MB取件事故随行修正——createReadStream().pipe()默认chunked无总长,客户端拿不到大小无法做下载预算/进度,chunked对部分idle型中间盒也不友好;statSync设置CL,stat失败退回chunked流式语义不变(2026-11-01瑞士PRO 44.2MB payload/66.9MB成品取件被客户端30s旧表误杀事故的配套修正,客户端侧stall-watchdog修复在XWXExporter仓库) Running

    ab19cdf
  2. fix(widget): 142号方案 mermaid定义信封渲染分支+本地vendor内联去CDN(方案D)+replace函数形式修复——背景:XWXExporter v3.2.5起扩展包内不得含远程脚本URL(CWS MV3远程托管代码政策,违规参考ID Blue Argon,2026-11-01 3.2.4被拒——content.bundle.js载荷里cdn.jsdelivr.net/npm/mermaid@10脚本URL被静态扫描判违规,即使扩展自身从不执行、URL仅为渲染端载荷),扩展改为只传定义信封{"_xwxMermaidDef":def},执行环境由本端自建——①新建lib/mermaid-widget-html.js:parseMermaidDefEnvelope互斥判别(完整HTML以<!DOCTYPE或<开头,信封以{开头且可解析出_xwxMermaidDef字符串字段;畸形/缺失/非字符串一律null落回旧路径)+buildMermaidWidgetCode(模板提供#widget-container容器,本代码以%%WIDGET_CODE%%注入其内,getElementById命中容器本身);②renderMermaid信封分支:识别→本地vendor内联构建执行代码,未识别→widgetHtml逐字透传(≤3.2.4旧扩展完整HTML载荷零改动向下兼容,v11→v10降级逻辑不受影响);③方案D去CDN:vendor/mermaid-10.9.1.min.js(3.3MB,与桌面BatchExporter pdf-render/vendor同版本)内联<script>,</script与<!--标准转义(esbuild/webpack内联同款;源文件实测0处</script、1处<!--且均在字符串字面量内)——单widget渲染实测~0.9s(旧CDN路径每次渲染联网拉3.3MB,预算15s),受限网络下不再依赖jsdelivr;④附带修复_renderWidgetPuppeteerImpl的template.replace('%%WIDGET_CODE%%',widgetCode)字符串形式会解释$&/$'/$$替换模式的静默损坏(压缩库与用户'$100'节点标签均可触发),改函数形式replace——本修复对所有widget类型的载荷注入生效,对旧载荷只会修复损坏不可能引入回归;⑤初始化参数与扩展旧执行模板逐字一致(theme default/flowchart htmlLabels/securityLevel loose,v10规避v11 ER themeVariables缺陷),导出位图与3.2.4前同语义。验证:Puppeteer真渲染探针26/26($&毒药样本/反引号/中文节点/sequenceDiagram/pie/信封判别8边界);docker pdf-test/pdf-prod双容器重建后经真实HTTP端到端实测:信封请求3.6s出SVG(viewBox=-8 -8 160 310,含中文节点'下单'),与插件发出的同款请求逐字段一致

    ac5fcb4
  3. fix(chart): PDF图表渲染器接入官方spec归一化(bZj.b同构移植,备忘录141)——官方渲染主链路spec必过bZj.a(zod VTN)→bZj.b(normalize)再进渲染/View-as-table,本模块此前直读原始spec,与官方四类形态分叉(真机9图均未踩中,属契约缺口而非现行bug,取证temp/test/chatgpt/2026-11-01-chart-fallback/):①series[].valueFormat/valuePrefix/valueSuffix缺省应回退spec顶层同名字段(fmtValue只读系列级);②valueFormat官方缺省compact(bZj:t.valueFormat??compact)——无axes ticks的spec网页y刻度12000→12K(zh locale 1.2万),本模块是Intl默认分组12,000;③series整体缺失/为空时官方用valueKey合成一条渲染,本模块渲染空容器(SPEC.series空档);④xKey/valueKey/nameKey缺省推导(首行首个string值键/首个≠xKey的number键/nameKey=xKey)缺失;修法:normalizeChatGPTSpec(bZj.b逐字移植,+68行)在buildChatGPTChartHtml入口chartType分发之后整包归一化,四类分叉一次性对齐官方,显式字段不受影响(formattedData仍不消费,yAxisMin/xAxisLabel等官方不读字段仍不读);验证:场景A顶层字段合并/B compact缺省+xKey推导/C series合成/D真机spec0显式字段原样(pdf-test容器重建后生产HTTP入口/api/render_charts 9/9出图),10-14的13张保真语料13/13且PNG尺寸与修复前逐字节同量级(显式ticks的图零变化),patchright行为级断言y刻度文本=同进程Intl compact逐一相等(0/2万/4万/6万/8万)且无旧分组形态;桌面副本xwx-backup/app/src-tauri/pdf-render/chatgpt-chart-html.js已逐字节同步(MD5 4cf674bc),插件侧共享模块chatgpt-chart-table.js同一bZj移植(插件仓73dd551)

    afe1c54

4 days ago

  1. fix(pdf): 作业回环取件解除undici默认300s头超时——大文档渲染成功却被判死根除+RUNNING孤儿看守30分钟(136号方案)⁠

    7a795b3

7 days ago

  1. fix(chart): claude-chart-html 补 _widgetRendered 渲染完成信号(导出耗时 9.5s/张 → 1.4s/张)⁠

    2e02419

8 days ago

  1. chore(release): 版本号 3.1.2 → 3.2.3(用户指定,与插件 3.2.3 主线对齐;自 125 轮以来 widgets 家族/异步PDF作业等多轮未升版,一次对齐)

    c124112
  2. chore(make): backup-source.js 支持 BACKUP_LABEL 环境变量——语义化标签(如中文工作总结)替代时间戳命名,未设置时保持 v{version}_{时间戳} 原行为(与 XWXExporter make/backup-source.js 同款)

    2a1bff3
  3. feat(chart): Claude chart_display_v0 渲染器入库(备忘录125/126/127)——lib/claude-chart-html.js(125/126轮创建但漏未提交,与server.js的renderClaudeChart路由成对入库)+server.js claude_chart case(125)+CD视觉皮肤全套(8色调色板真机仲裁值/官方刻度算法cdYScale/cdTicks/横向判定/柱圆角/页内组装config防JSON.stringify丢函数(126根因))+127轮官方类目slot几何:xwx-cd-slot插件afterLayout按c20f35e63 D()/j()逐字数值化barThickness(pitch=轴长/类目数,slot=min(20n+2(n-1),pitch-inset),lane=(slot-2(n-1))/n),修复Q502类目间隔被categoryPercentage:1占满(用户实测图1);烟测9/9(柱宽20±0.5px/组间隙≥8px/line不受污染),容器端到端出图,真机PDF p6与网页同构。space/main未push(生产需人工;桌面pdf-render副本已同步md5 ae539ef5)

    515ca75

19 days ago

  1. feat(pdf): 新增异步作业端点 /api/pdf_jobs(提交+轮询+取件),同步端点一字节未改⁠

    265de41

20 days ago

  1. feat(chart): GPT-6 服务端组件 StockChart 渲染器——插件 chatgpt-dil 整包透传的股票行情出图(备忘录120)——①插件侧把 StockChart(服务端组件,componentResults[rid].state 21参数)按官方组件源码合成同构 DIL 树(头部/档位条/指标表走既有渲染层), <chart> 的 data/series/xAxis/yAxis 逐字透传到本构建器, payload 带 __xwxKind:'stock-chart' 标记; ②本文件内 buildChatGPTChartHtml 入口最前分流到新增 buildChatGPTStockChartHtml(必须在旧位置签名兼容之前判, 否则无 chartType 的 payload 被 legacy 归一化误吞—冒烟实证) → server.js 与桌面 Rust 调用点零改动, 桌面 pdf-render/chatgpt-chart-html.js 由 build-pdf-render-assets.mjs 逐字节同步(MD5 150de6f4); ③渲染契约按三重取证: Recharts 3.10.1 AreaChart, series[].color 语义色随涨跌方向(CSSOM 实测 --green-500:#00a240/--red-500:#e02e2a), Area strokeWidth2 + fill 线性渐变(stopOpacity 0.45→0) + fillOpacity0.6, xAxis ticks+labels 映射+preserveStartEnd+tickMargin8+padding.right10, yAxis 右轴 width40+domain/ticks+axisLine false, 水平虚线网格 #ccc '3 3', dot/activeDot false, 桌面档高340; ④验证: verify-stock-render.mjs 真机 payload(a8a911ef 的 5D 档72点) puppeteer 9/9 断言(线色/渐变两档/fill-opacity/网格5条/y刻度220-240/x刻度来自labels映射), pdf-test 容器重建后 /api/render_charts 出图; 端到端 29 页 PDF 逐页比对股票卡与网页一致. 生产 space/main 未推送(用户指示:会影响生产环境; 待推送后线上 StockChart 才出图, 未推期间该 payload 走旧入口返回 null 由上层回退 MD 表格)

    d49b1fe
  2. fix(chart): GPT-6 charts_widget_v2 饼图契约补全+引擎对齐官方Recharts v3(备忘录119重写)——①根因: server.js/桌面Rust按位置白名单挑9字段传构建器, 而官方zod schema是.loose()透传未知键, 导致官方消费的 layout(水平条形图)/xAxisScale(数值x轴) 被静默丢弃 → 改为整包传 spec buildChatGPTChartHtml(chartData), 位置白名单这一层结构性消失(保留旧9参归一化供Rust未重编窗口期); ②饼图11参数按官方44829 qOl-A/AXa逐字补全: 恒环形 innerRadius40%/outerRadius78%/startAngle90/endAngle-270/paddingAngle.5/Cell stroke var(--color-surface)+strokeWidth2, showValueLabels与showLabelLines默认false故不画数值标签与引线(旧实现无条件画=截图里多出"搜索引擎4.2K"一圈), colorCount=data.length逐扇区取6色盘, nameKey作xAxis且nameKey=__sliceLabel; ③图例顺序根因=引擎差异: v3 Legend.defaultProps.itemSorter='value'按标签码点升序, v2无此行为 → 换 recharts@3.10.1 UMD(实测peer支持React18;首版"v3不可用"只对SSR成立), 由引擎产出而非手工sort(3.0.0不复现,勿降); ④补首版未取到的726342 IMu柱图档位表: gapPx=卡片容器宽>=768?12:8再按dataLen收敛(>=24→3/>=16→6), barRadius按 containerSize/dataLen/有效系列数*0.65 落档56→8/36→6/16→4/0→2, maxBarSize除「2行×2系列」外恒120(水平48,条件方向易读反); ⑤移除官方从不消费的 formattedData/yAxisMin/yAxisMax/xAxisLabel/axes[].label 路径(官方不画轴标题,x刻度标签来自data行而非axes,仅认恰好一条dimension=y), bar的x刻度改官方foreignObject+div盒, line/scatter保留引擎默认text刻度(dy 2/3em), minTickGap 10, 轴宽=ceil(实测标签)+4(旧Y_AXIS_PAD6系在已漂移的旧捕获上标定,实测9/10命中±1px); ⑥验证: temp/test/chatgpt/2026-10-14-chart-pie/ 三方对照13张真实图官方DOM oracle逐值diff — 现网34.2% → 移植层+v2 94.3%(掉分全是饼图图例序) → 采用层+v3 95.8%, 3张饼图25/25 25/25 23/25, 柱图44/44与39/39, 首版verify-r1的34项bar契约无一复发; pdf-test(17861)重建后走生产HTTP入口 /api/render_charts 14/14出图, 非官方4类chartType返回null交上层回退表格. 备份 backend-service_v3.1.2_2026-10-14T02-50-03(159文件). 生产 space/main 未推送(用户指示:会影响生产环境)

    3b9619e

21 days ago

  1. fix(chart): GPT-6 charts_widget_v2 PDF渲染重写对齐官方网页契约(备忘录119)——①lib/chatgpt-chart-html.js按官方v2契约重写: 渐变圆角柱(stopOpacity1→0.9+radius8+barCategoryGap自适应3/6/8+maxBarSize120)/仅横向#ccc"3 3"网格/12px rgb(93,93,93)刻度轴无边线/图例=series>1才显示/header固定块min-height68px+line-clamp2/footer固定; ②server.js meta整包下传(title/description单一来源修双写重复)+legacy字符串签名归一; ③Recharts v2.12.7两引擎坑实测修复: YAxis width:'auto'整图不渲染→隐藏span逐标签offsetWidth量宽+TICK_MARGIN4+Y_AXIS_PAD6(官方81=71+4+6), 默认tick Text按16px估宽致长标签tspan折行丢空格→双轴自定义<text>组件; ④验证: verify-r1 34项DOM契约全过+pdf-test容器(17861)E2E渲染比对官方常量一致(2026-10-13)。生产space/main未推送(用户指示:会影响生产环境)

    b689996

22 days ago

  1. feat(dil): 图标占位符后端内联 lucide SVG(用户决策B,2026-10-12)——客户端只输出 data-dil-icon 占位符不带图标集(lucide整包480KB/gzip130KB,官方图标在按需chunk无法提取子集);后端按需读取,单次PDF只付实际用到的图标(真机15次/10个);server.js 注入点放在所有HTML变换之后、setContent之前(pdf-test实测放Shiki之前会被后续改写链路破坏成不可见);缺失图标降级保留占位符不中断PDF;新增依赖 lucide-static@1.55.0(与官方bundle版本一致);API契约零改动

    7ffc5c1

30 days ago

  1. chore(release): bump version to 3.1.2(与插件版本同步)——PDF体积根因修复(38f9bb7)随版,待手动push至HF Space部署

    572a46d
  2. fix(pdf): tagged PDF显式关闭+容器CJK字体换静态TrueType——PDF体积3倍竞品根因修复(2026-10-04)——①server.js page.pdf显式tagged:false+outline:false:Puppeteer24 parsePDFOptions把tagged默认翻true(node_modules/puppeteer-core/common/util.js),每文字运行产StructElem(436轮NotebookLM实测63,171个5.65MB,xref 79,817);②Dockerfile弃装fonts-noto-cjk(CFF-in-OTC无法子集→全部汉字逐页Type3,745字典2.4MB CharProcs),改构建期从google/fonts(commit固定a85815a)下载SC/TC/JP/KR/HK变量字体+fonttools实例化400/700静态TrueType装系统(--update-name-table防family名带Thin致fontconfig miss;--no-install-recommends下需显式ca-certificates+fontconfig;fonttools走python3 -m入口);emoji字体保留(位图Type3残余0.02MB,视觉优先);真实容器端到端:同会话HTML POST实测26.66MB→8.69MB(-67%)低于竞品9.41MB,xref→3,182,Type3→45,图片5.19MB→0.69MB与竞品同量级,文本保真98.15%字符级一致,嵌入字体全TTF子集;本机pdf-test(17861)/pdf-prod(7860)已重建验证字节级一致;12平台API契约零改动,新旧插件全兼容;证据链XWXExporter/temp/test/notebooklm/2026-10-04/与解决方案API/111;HF Space待用户手动push部署

    38f9bb7

  1. refactor(chart): 提取buildChatGPTChartHtml为共享模块lib/chatgpt-chart-html.js(课题2,备忘录34)——server.js类方法改为转发,函数体逐字节一致仅类方法→独立函数;桌面APP经make/build-pdf-render-assets.mjs逐字节同步同一文件(漂移校验报错),chatgpt_chart渲染两端单一事实源

    6800ea9

  1. fix(server): 413 entity.too.large干净JSON响应+content-length盲区观测(PostHog 09-09韩国413=HTML错误页暴露) + requestTimeout=0根除Grok慢上传408(09-06,渲染超时已有应用层动态上限兜底,不动server.timeout防大文件渲染回退) + Claude Imagine widget无前缀设计令牌补齐(SVG var(--text-warning)等消失根因)

    4574c25

  1. feat(pdf): 页脚品牌文案支持插件传入 brandText(唯一事实来源迁至插件 watermark.js,未传回退默认值向后兼容)+ 品牌名统一 XWX Exporter,bump v3.0.0

    2c58405

  1. fix(widget): DOCX图表fallback成数据表格根因修复 — widget渲染浏览器池+CDP有限超时+渲染硬超时+队列超时取消+BrowserPool补位bug+body-parser JSON兜底, bump v2.1.11

    24a2ddf
  2. Revert "fix(pdf): acceptInsecureCerts 加载过期证书图片 + domcontentloaded 防外部图片挂起阻塞"⁠

    f888aff
  3. fix(pdf): acceptInsecureCerts 加载过期证书图片 + domcontentloaded 防外部图片挂起阻塞⁠

    144b733

  1. refactor: 遥测日志改为 metadata 透传 + 图表渲染统一 Puppeteer + Debian Bookworm⁠

    XWX-AI +1: Claude Opus 4.6
    e831a9b

  1. fix: update server.js with latest chart rendering improvements⁠

    XWX-AI +1: Claude Opus 4.6
    3c5f549
  2. fix: add .dockerignore to prevent Windows node_modules from overwriting Linux builds⁠

    XWX-AI +1: Claude Opus 4.6
    efa862e

  1. feat: remove PDF size hard rejection, allow large files to proceed with warning⁠

    XWX-AI +1: Claude Opus 4.6
    6dd390f

  1. feat: add messageCount parameter to PDF generation logging⁠

    XWX-AI +1: Claude Opus 4.6
    b4075c9

  1. chore: increase HTML size limit from 8MB to 10MB for backend consistency⁠

    XWX-AI +1: Claude Opus 4.6
    b89c431

  1. fix: use textOnlySizeMB for PDF render time estimation⁠

    82942de

  1. feat: PDF backend enhancements — 8 MB HTML size limit, dynamic timeout with cubic formula, protocolTimeout=0, temp file method for large HTML⁠

    XWX-AI +1: Claude Opus 4.6
    f44ea82

  1. fix: enhance chart extraction - multi-chart support, ES6 shorthand, and brace-balanced parsing⁠

    XWX-AI +1: Claude Opus 4.6
    d842f0a

  1. feat: add widget renderer (chart.js, mermaid) and bump to v2.0.0⁠

    XWX-AI +1: Claude Opus 4.6
    44a8902

  1. fix: change htmlToUse from const to let for future reassignment compatibility⁠

    XWX-AI +1: Claude Opus 4.6
    e550365

  1. feat: update server logic⁠

    XWX-AI +1: Claude Opus 4.6
    fb94a6b

  1. fix: restore data-language attribute in Shiki-highlighted code blocks⁠

    XWX-AI +1: Claude Opus 4.6
    f8322a5
  2. v1.4.6 代码块高亮最终方案 - Shiki 后端预高亮⁠

    XWX-AI +1: Claude Opus 4.6
    e14f86d

  1. fix: add dynamic timeout for PDF generation to prevent timeout on large pages⁠

    XWX-AI +1: Claude Opus 4.6
    cd363bd

  1. Add dashed separators around API request log line⁠

    XWX-AI +1: Claude Opus 4.6
    d106d98
  2. v1.4.4 - Add platform, export count, language and per-format counts to backend log⁠

    XWX-AI +1: Claude Opus 4.6
    e6f0a87

  1. fix: increase base timeout from 30s to 60s for PDF generation⁠

    XWX-AI +1: Claude Opus 4.6
    6213d08

  1. fix: dynamic timeout for Puppeteer PDF generation⁠

    XWX-AI +1: Claude Opus 4.6
    78a0140

  1. fix: improve PDF image rendering - remove lazy loading, handle base64 images, add screenshot workaround

    7ff2703

  1. fix: optimize PDF generation - use headless shell mode, extend image timeout, add network idle wait⁠

    d1f4de0
  2. feat: add environment-aware logging and dual-environment support

    00d6248

  1. Rollback to Puppeteer 22.x - v24.x has critical PDF encoding bug⁠

    93bf046
  2. Fix Puppeteer 24.x Chrome launch in Docker⁠

    35f3546
  3. Upgrade Puppeteer to v24.x for better PDF generation⁠

    8dea6b9

  1. Optimize PDF generation with dynamic wait times based on image stats⁠

    f13b991
  2. Fix: Replace deprecated page.waitForTimeout with delay helper⁠

    ea21983
  3. 压力测试

    89c8cea

  1. feat: support showWatermark parameter for dynamic footer

    ab40ae2