Skip to content

1.2.0 — 輸出把關、執行時編碼風險、出貨守門

Choose a tag to compare

@KSF1216 KSF1216 released this 19 Sep 07:15
· 26 commits to main since this release

1.2.0 — 輸出把關、執行時編碼風險、出貨守門

新增

  • examples/llm-proxy/llm-guard-proxy.mjs:本機 LLM 的輸出守衛代理(零依賴,
    npm script llm-guard-proxy)。llama-server 沒有外掛機制,--logit-bias 只是降低機率、
    表達不了詞組,--grammar 對散文不實用,所以機械層放在伺服器外面:代理整個 origin
    (內建網頁照用)、非串流、只讀生成端點的 JSON、帶 tool_calls 的回應絕不改寫
    (所以不要指給 agent harness),乾淨的回應逐位元組通過,轉不動的殘留在 log 裡回報。
    用的是同一份 guardInspect/toTraditional。
  • --console-hazard:第三條軸(執行時編碼風險)。找「會印到 console 的行」裡
    目標 codepage 編不出來的字元,計入 exit code。檔案可以是正確繁體卻在執行時崩潰——
    實測案例是一個 ComfyUI 節點 print 含簡體字的訊息,Windows 主控台 cp950 丟
    UnicodeEncodeError,節點掛掉、連 traceback 都寫不進日誌(症狀看起來像「卡住」)。
    只綁 print/echo/logging/logger/log/console/raise(註解與變數名不算),
    並在輸出明說這是啟發式判斷。
    --codepage 內建 950/936/932/1252/20936;54936(GB18030)與 65001(UTF-8)
    編得下全部 Unicode,永不回報。⚠️ 命名陷阱:Windows 把 936 叫 gb2312,但它其實是 GBK
    (連繁體都編得出來);嚴格 GB2312-80 是 20936,它反過來編不出 體 軟 淨 麵 裡。
  • 設定卡的標題列改成跟著設定變(原本寫死「簡體專有字」,切到「要求簡體」時與同卡的
    單選標籤自相矛盾——折疊起來時那是唯一看得到的字)。

修正

  • 出貨檔案不再含本機資訊:新增出貨掃描守門(在 test:api 內),照 package.json 的
    files 白名單逐一掃。通用樣式隨套件出貨;只在本機成立的名稱放在不進版控的
    .ship-deny.txt——把名字寫進會出貨的檔案裡就是把它公開,哪怕只是為了禁止它。

測試

  • test:codepage(41 項)釘住 codepage 涵蓋表的量測數字;test:proxy(30 項)用真的
    upstream + 真的監聽中的代理測邊界;test:api 58 → 61 項;--console-hazard 的 8 個
    CLI 案例進 selftest-cases.json。

移除

  • chinese-script-policy@1.1.0 與 1.1.1 自 npm 移除(都在發布後 72 小時內,依官方政策可
    unpublish);1.0.0 更早已移除。三個版號永久保留給已下載過的安裝來源,不會再被使用。
    移除的理由是「registry 上只留最新版」,不是外洩:兩份舊 tarball 都經掃描確認不含任何
    本機資訊(各 52 檔、沒有 .ship-deny.txt、私人名稱命中 0)。
    registry 上現在只有 1.2.0(dist-tags.latest 不變)。

資料

  • scripts/codepage-repertoire.json(182 KB)由 npm run build:codepage 以 .NET 產生
    (Node 沒有這些編碼器)。encoder 與 decoder 的 fallback 必須是 ExceptionFallback,
    否則 .NET 會把編不出來的字換成 ?,得到「全部都編得出來」的假通過。