Skip to content

v1.47.0 — 連線逾時可設定

Choose a tag to compare

@CarlLee1983 CarlLee1983 released this 05 Aug 04:17
· 608 commits to main since this release

連線逾時終於可以設定,設定檔驗證失敗的錯誤訊息也從一坨 Zod JSON 變成逐欄可讀。

決策記錄:docs/adr/0003-connection-timeout-override-resolved-at-adapter-construction.md

Added

  • 新的 root-level 全域旗標 --timeout <ms>。 覆寫連線設定中的 timeout;兩者都沒有時沿用各 adapter 內建的 5000ms。合法值為 100~600000 的整數,須放在子指令之前(和 --global / --use 一樣是 root-level flag)。對所有引擎有效,典型用途是 MongoDB 跨 VPN 或連 Atlas 時,預設 5 秒的 server selection timeout 太緊:

    dbcli --timeout 20000 --use <conn> list

    這個覆寫只在建立連線時套用,不會寫回設定檔;要永久生效請在連線設定裡寫 timeout 欄位。

  • 連線設定檔新增 timeout 欄位。 四種連線 schema 皆支援,毫秒、100~600000 整數、可省略。此欄位不接受 $env 參照。

Changed

  • 設定檔驗證失敗的錯誤訊息改為可讀格式。 過去會吐出整包 Zod unionErrors 巢狀 JSON;現在依連線宣告的 system 收斂到對應分支,一行一個欄位路徑:

    Failed to read .dbcli config: 設定內容不符合結構
      - connections.m.port: Expected number, received string
    

    system 不被支援時會列出完整引擎清單,而不是只列出恰好 issue 最少的 SQL 分支。

  • 文件明確禁止 2>&1。 診斷訊息走 stderr、結果走 stdout,合併兩者會讓 --format json 的輸出無法解析。SKILL 與 reference 都補上正確的導管寫法。

為什麼是 100ms 而非 1ms

PostgreSQL adapter 把同一個值同時給 connectionTimeoutMillis 與 statement_timeout,過小的值會讓每一句 SQL 立刻失敗,而錯誤訊息長得像連線問題。

Full Changelog: v1.46.0...v1.47.0