第五節 會話

會話(Session)是一次連貫的對話上下文。

5.1 持久化

AVL Code 會把每一條訊息持續追加到本機,斷電、關機、重新啟動都不會丟。每條訊息都有時間戳記與作者識別;工具呼叫、計畫修改、簽核結果也會以獨立卡片形式記錄,整條會話可作為完整的工程稽核材料。

5.2 會話操作

  • 新增:會話分頁欄 → 新增,或快速鍵 ⌘N / Ctrl+N。同一個工作區內最多只保留一條空白草稿:反復點 +、按 ⌘N、發 /new 都復用同一條,未發出第一條訊息前不會進側邊欄,避免堆出一串"新會話 1 / 2 / 3 …"幽靈草稿。
  • 切換:點擊分頁,或在微信裡 /s <短id>,或在 命令面板(Cmd+K) 裡搜會話標題。
  • 重命名:分頁右鍵 → 重命名。
  • 智慧命名:未被手動改過名的會話,收到第一條 AI 回復後會自動讓 LLM 起一個簡短標題(預設啟用,可在 設定 → 上下文 關掉);手動改過名的會話永久豁免,不再被自動覆蓋。重命名對話框裡也有「智慧命名」按鈕,可隨時點一下重新增議。
  • 歸檔:分頁右鍵 → 歸檔。歸檔後從主清單消失,可在 會話檔案 裡復原。
  • 匯出 / 分享:分頁右鍵 → 分享,可儲存截圖、儲存 HTML、複製為 Markdown;「匯出會話 (.zsession)」則把整條會話打包成可遷移的歸檔文件。匯出的 HTML 與介面顯示一致:跟隨極簡密度檔(灰階細行 + 同類呼叫合並計數,失敗照常計入)、子代理以卡片呈現、使用者訊息氣泡按來源分色。
  • 複製為新會話:以本會話為起點新增分支,原會話不變。

右鍵即可喚起選單:會話條目與上方兩處標題欄的 ⋯ 選單都可用滑鼠右鍵直接喚起,不必瞄準 ⋯ 按鈕;選單貼近視窗底部時不再被裁切,右鍵也不會連帶選中條目文字。

5.2.1 使用者訊息時間戳記

自己發出的訊息左側有一個時間戳記標籤,點擊在三種格式間循環:

格式 例
相對時間 剛才、3 分鐘前
會話內偏移 +1m23s(相對首條訊息)
絕對時間 14:32

不同會話各自記憶,互不影響。

5.3 訊息組成

一條對話由若乾"訊息卡片"組成:

  • 使用者訊息
  • 助手回復(串流繪製,可中途打斷)
  • 工具呼叫(可折疊卡片,包含入參摘要、耗時、結果)
  • 計畫 / 待辦更新(結構化展示,可獨立修改)

5.3.1 程式碼區塊:語法醒目顯示 + 一鍵複製

對話裡的 fenced 程式碼區塊(```)渲染為帶 header 的程式碼卡:

  • 語法醒目顯示:基於 highlight.js(lib/common),按語言着色;未知語言走樸素轉義,不影響呈現。
  • 語言標籤:右上角顯示該程式碼區塊的語言名(如 python / go / tsx)。
  • 「複製」按鈕:右上角一鍵把整段程式碼複製到剪貼板,不用手動框選;成功時按鈕短暫變成「✓ 已複製」回饋。
  • 行號 grid 保活:跨行 syntax span 內部按源行拆分後逐行配對,行號列與程式碼列始終對齊,不會因醒目顯示而錯位。

5.3.2 Mermaid 圖:圍欄程式碼直接畫成圖

AI 回復裡標註為 mermaid 的圍欄程式碼區塊會自動渲染成矢量圖(流程圖、時序圖、狀態圖、甘特圖等),不再只是一段看不懂的源碼。

  • 渲染非同步進行:先按普通程式碼區塊出現,圖畫好後就地升級為 SVG,長回復不會因為畫圖而卡住。
  • 語法有誤時保留原始程式碼並給發生錯誤誤提示,不會整塊消失。
  • 圖形內容同樣經過淨化處理後才插入頁面。
  • 圖 / 原始碼切換:圖畫好後,程式碼區塊標題列右側出現「圖 | 原始碼」切換(與「複製」並列),隨時回看源碼;相同源碼的圖會一起切換。
  • 三套主題:標題列的主題按鈕點一下換一套,在「通用」(預設,跟隨應用深淺色)→「黑白」→「期刊彩色」之間循環。期刊風格為白底、黑線黑字,彩色檔用色盲友好配色,適合截圖放進報告或列印。主題偏好對所有 Mermaid 圖生效並在本機記住;設定頁裡沒有這一項,只在圖的標題列上切換。
  • 匯出 HTML 時這些按鈕會自動隱藏。

5.3.3 圖片輸入:把截圖直接丟給 AI

選用標記了「支持圖片輸入」的模型時,可以隨訊息一起發圖片(介面截圖、報錯畫面、流程圖照片等),讓 AI 直接"看"。

三種新增方式:

方式 操作
貼上 在輸入框裡 {{kbd:Cmd+V}} / {{kbd:Ctrl+V}} 直接貼上剪貼板裡的圖
拖放 把圖片文件拖到輸入框上,松手即加入(拖入時顯示「松開以新增圖片」提示)
「+」選單 「新增圖片到當前訊息」(獨立成組,說明寫明「僅隨本條訊息發給模型」),彈出文件選擇器

限制與處理:

  • 支持 PNG / JPEG / GIF / WebP;其它類型會明確拒絕。
  • 一條訊息最多 6 張;單張處理後 ≤ 1536 KB,合計 ≤ 3 MB,超出會提示你縮小或減少張數。
  • 過大的圖會自動等比縮放到長邊 1568 像素;小體積 PNG(≤ 400 KB)原樣保留以保住截圖裡文字的銳度,其餘轉為 JPEG。
  • 執行中不能附圖發送 —— 等本輪結束再發。
  • 當前模型沒有標記支持圖片輸入時會提示你切換模型,或去 設定 → 模型 → 服務提供方 裡給該模型勾上「支持圖片輸入」。

發出去之後:

  • 你的訊息氣泡裡圖片顯示為縮略圖,點擊可「檢視原圖」放大檢視。
  • 圖片只隨發送它的那一輪出站:後續對話輪次不會反復把同一張圖再發一遍,既省 token 也更準確。判定口徑是「這一輪已經正常答復 + 你又有了新輸入」才讓圖片退役,因此續跑 / 自動推進的輪次不會誤丟圖片。
  • 換到不支持圖片的模型時,歷史裡的圖片會被降級處理,不會把請求打掛。

已知支持圖片輸入的模型:內置模型表裡已標註的包括 qwen-3.8-27b(實測通過)與瀾砥 N2.7 系列;自己新增的服務提供方可在模型條目上手動勾選「支持圖片輸入」。

5.4 訊息流控制

  • 助手執行中,輸入框右側的發送鍵變成 停止 按鈕 — 按下會同步終止主助手與所有派生子任務,並取消本會話的會話內例行程序(見 §15.6.1)。
  • 中途如果你想到補充內容,直接按 Enter 入隊(即時指導)— 預設在本輪自然結束後合併發出,不會打斷當前回合;想讓它更早生效,可在「待注入」條上點「優先」或「立刻處理」(見 §5.4.2)。
  • 助手輸出的工具呼叫卡片可以單獨點開 / 折疊 / 複製結果。
  • 輸入框按 ↑ / ↓ 可回溯歷史輸入,執行過的 / 斜槓命令也納入歷史(以規範化的 /<名> <參數> 形式),便於再次取用或改寫。
  • 每條訊息左側有「訊息柄」,點開是這條訊息的操作選單:選單標頭顯示這條訊息的時間(絕對時間 + 相對時間兩行,只讀),下面是複製、複製選中的部分、編輯、重試、寫入記憶宮殿、追加到結果草稿等動作。
  • 停止之後仍可編輯訊息:中途按停止時,已經串流產生的那部分內容會落盤保留,不會變成"訊息不存在"的幽靈記錄,編輯 / 重試照常可用。
  • 服務繁忙時,訊息流顯示「服務繁忙,N 秒後自動繼續」,可點「換個模型」或「停止等待」;子 Agent 面板和未在目前畫面顯示的會話也會保留等待提示。 主回合、子 Agent 和並行任務共用等待狀態;4 路及以上任務錯開啟動,並行區塊顯示「N 路等待服務恢復」。
  • 重試:本輪執行或等待自動重試時,訊息選單中的「重試」停用;多次失敗後自動重新開始本輪的倒數會顯示「第 n/3 次」,開始後原錯誤列收為「先前失敗已自動重試」。 等待提示不作為回覆轉發到隨行通訊或寫入 zTUI 對話記錄。

5.4.1 復述意圖:開工前先跟你對一遍目標

為避免「一上來就跑偏」,AVL Code 會在會話的第一條訊息上做一道輕量確認:AI 先復述一遍它理解的目標、說說打算怎麼做(多 Agent 模式下還會給一份「先拆任務 → 並行派子 Agent → 交還你驗收」的分階段計畫),等你點頭再動手。該功能預設啟用,可在 設定 → 智慧體 → 自省 關閉(開關:復述意圖)。

  • 確認就在訊息流裡完成,不是彈窗,樣式和普通訊息一致。
  • 預設 60 秒後自動開始;滑鼠停留在確認條上會暫停倒數計時,給你足夠時間看。
  • 確認條上有三個選擇:
    • 確認開始 — 採納 AI 的復述直接開乾;
    • 修改 — 當場把復述改一改再發,目標和計畫都能改;
    • 保留我的本意 — 不採納 AI 的復述,直接用你最初那條訊息繼續。
  • 點「取消」會把你最初那條訊息原樣放回輸入框,不會丟,便於你補充或重寫後再發。
  • 只在該問的時候問:僅對你親手輸入的首條訊息觸發(自動 / 程式觸發的不算),且只在這條開場訊息比較短(30 字以內)或比較簡單時才彈;寫得夠長夠清楚(多行、帶編號清單、或頓號 / 逗號等分隔符多於 3 個)就直接開乾、不打擾。
  • 想對某條訊息手動重新對一遍意圖:在該訊息的操作選單選「分析意圖並從這裡重新開始」即可(無視上面的觸發條件,強制復述一次並從這裡重開);會先隱藏重新啟動點之後的訊息、把確認條放在其下方,便於你看清影響範圍。
  • 選擇統計:確認 / 修改 / 保留本意 / 超時自動開始 / 取消各自的次數與字數會被記錄,在 設定 → 智慧體 → 自省 以表格呈現,便於你回看這道確認到底幫沒幫上忙。

5.4.2 即時指導:執行中插話

Agent 執行中時,在輸入框裡輸入並按 {{kbd:Enter}},這條訊息不會打斷當前回合,而是進入「待注入」佇列(輸入框提示文字為「即時指導:Enter 入隊,本輪結束後整體注入…」),並以狀態條「待注入 N」顯示(形態見 §5.5.1)。

  • 什麼時候入隊:只看當前會話 —— 本會話的 Agent 執行中(或隨行通訊出站投遞中)、本會話正在發送或生成時才入隊;會話空閒時直接發送,其它會話正在壓縮或發送也不影響當前會話。與正在發送的內容完全相同的重復發送會被忽略並提示。
  • 預設時機:本輪自然結束後,佇列按入隊順序以空行合並為一條訊息發出;會話一空閒就會及時送出,不會晚一整輪。切到別的會話期間佇列保留,切回來照常送出。
  • 每條的按鈕:
按鈕 作用
優先 當前步驟結束後就送進 Agent(這批工具結果出來後、下一次請求模型之前),不等整輪結束;模型正在寫最終回復時,寫完後接着處理這一條
立刻處理 截停模型正在輸出的內容並馬上處理這一條:已輸出的本文與思考過程保留,未寫完的工具呼叫不執行;正在執行的工具不會被打斷,等這批工具跑完再送達
移除(×) 丟棄這一條;只對尚未送出的條目顯示
  • 「優先」可以再升級為「立刻處理」。送出後條目顯示「已優先 · 目前步驟結束後處理」或「立刻處理中」,送達後自動出隊;已送出的條目無法撤回。
  • 「全部清空」只丟棄尚未送出的條目。
  • 不會丟:此刻插不進去(例如會話沒在執行)時,條目留在佇列裡,本輪結束後照常作為新一輪發出;本輪沒能啟動(手動停止、發送被取消或失敗、重新生成失敗等)時,排隊的指導會退回輸入框(排在已有草稿之前),並提示「已退回 N 條即時指導到輸入框」。
  • 執行中不能附圖發送,帶圖片的訊息不入隊,請等本輪結束再發。

5.4.3 標記訊息:把要緊的幾條收攏起來

在訊息上右鍵(或點訊息柄)選「標記訊息」,再選一次即「取消標記」。已標記的訊息左側顯示書籤角標(角標只作指示,取消請走選單或下面的狀態條)。

本會話有標記時出現「標記 N」狀態條(形態見 §5.5.1),按訊息在會話中的先後列出全部標記:

動作 說明
點某一行 跳轉定位到該訊息;訊息位於較早、尚未載入的位置時自動先載入,位於折疊的工具組內時自動展開
複製為 Markdown / 儲存 HTML 只匯出有本文的標記訊息 —— 只有工具呼叫、思考過程或只附了圖片的訊息會被跳過;標記的訊息全都沒有本文時兩個按鈕置灰,停留說明原因
匯出 .zsession 開啟與會話匯出同款的確認框(含脫敏選項),把標記訊息打包成會話文件;帶工具呼叫的回復會連同對應的工具結果一並匯出(標記的是工具結果時也會帶上它所屬的回復),會話名加後綴「(標記摘錄)」
行尾書籤按鈕 取消這一條的標記
清空標記 取消本會話的全部標記,不刪除訊息
  • 標記隨會話儲存;複製為新會話與從某條訊息開始新會話時標記一並保留(分支點之後的標記不帶走)。訊息被刪除後,對應標記自動從清單中消失。
  • 尚未儲存完的訊息(如正在串流輸出)暫時不能標記。

5.5 "正在生成"區塊的視覺細節

  • 摺疊思考:生成時向左平滑捲動顯示最新內容,長內容左側淡出;結束後顯示開頭摘要,極簡模式僅顯示「思考」。
  • Token 數變化加滾動動效:串流過來的 token 計數不再硬跳,約 0.4 秒平滑插值到目標值;變化期間數字短暫變品牌藍並微微上抬。系統設定「減少動畫」時自動跳變不抖。
  • 耗時按分級顯示:60 秒以內仍是 5s / 12s 這樣的簡短表達;超過 1 分鐘自動升級為 1m 30s;超過 1 小時升級為 2h 15m 30s。短任務零變化,只在長任務時升級單位。 生成頁尾另列「其中等待 N 秒」;統計面板「限流/重試」可查看最近一次呼叫的重試次數、限流次數和等待秒數。
  • 上下文佔用圓環按佔用分檔變色:顯示當前上下文視窗佔用比例的圓環會隨佔用分檔變色 —— 達到 75% 變黃、達到 90% 變紅,更醒目地提示已接近上下文上限(該續跑 / 折疊了)。

5.5.0 訊息密度(正常 / 極簡)

設定 → 通用 → 訊息密度 提供兩檔(落盤欄位 message_density,預設 detailed);Header 快捷選單「顯示」分組的「訊息量」滑塊可一鍵切換,無需進設定頁:

檔位 行為
正常(detailed,預設) 完整卡片 + 參數預覽 / argsSummary,零迴歸
極簡(compact) 無卡片、灰階細行、最小 chrome;只壓縮過程渲染,你的提問與 AI 的本文回復照常完整顯示;不再壓縮行高

極簡檔下,過程內容自動歸並計數:

  • 連續工具呼叫結果合並成一行,帶計數。
  • 多段思考 + 工具呼叫合並成 「思考 N 次 · 工具 M 個」(數量變化帶 pop 動效)。
  • 還在執行、暫時沒結果的工具呼叫合並成 「N 次工具呼叫嘗試」。
  • 匯總行裡如果有失敗,用淺紅色標出 — 不刺眼但看得見。

切換檔位時滾動位置穩定、不抖動;舊的「收斂」檔(collapsed)自動遷移到「極簡」。

5.6 滾動與跟隨

  • 生成期間預設自動跟隨底部。
  • 一旦你向上滾動檢視歷史,「跳轉底部」按鈕出現 = 視為你主動滾走,自動跟隨停止。
  • 生成中拖滾動條回看不再被釘住:AI 正在串流輸出時,想往上拖曳滾動條回看前文,過去常被自動跟隨同幀拽回底部、像「拖不動」;現在主動上拖會同步松開自動跟隨,讓你正常上滾檢視,需要時再回到底部繼續跟最新輸出。
  • 點擊「跳轉底部」或手動回到底部可恢復跟隨;主動跳轉和搜尋結果平滑捲動,切回會話直接恢復位置。系統開啟「減少動態效果」時,「跳至最新訊息」會直接到位。
  • 已堵住滾輪事件與串流 chunk 同幀的微秒級競態,不會再被反復打斷。
  • 整清單高頻抖動修正:之前某些情況下訊息清單會上下快速抖動 / 跳動 — 根因是個別訊息的高度被反復重測。現在把已渲染過的高度快取下來(包括高度為 0 的情況),清單不再來回彈跳,滾動更穩。
  • 「跳轉底部」一次到位:之前要點好幾次才能真正到底;現在改為持續校準直到內容高度(scrollHeight)穩定,一次就能穩穩停在底部,長會話首次開啟也不會出現「按鈕按了像沒反應」的多點情況。
  • 快速重復點「發送」不再重發:加了同步的在途攔截,連點也只發一條。

5.6.2 長會話分頁按需載入

開啟很長的會話時先顯示最近一段,往上滾動再分段載入更早的訊息:

  • 滾到頂端繼續上滾 → 自動載入上一頁,多頁載入時置中顯示進度提示。 載入後原位顯示,不播放滑動動畫。
  • 底層做了行偏移索引(O(range) 不再 O(scan-from-line-1))+ 多頁之間按幀讓步 + 去重,長會話的首次開啟與上下滾動明顯更快、更跟手。
  • 會話目錄的跳轉對尚未載入進視窗的更早訊息也能正確定位(自動先載入到該位置再滾過去)。
  • 超大訊息預設不再"顯示折疊":之前為了性能會把過長的單條訊息折疊成摘要,現在預設完整展開,要折疊請到設定調整。

5.6.0 會話目錄與一鍵跳轉

會話標題左側新增會話導航按鈕(List 圖示),滑鼠點擊展開一個目錄 popover:

  • 列出本會話每條使用者提問 — 每條取「首個非空行」作為標題,自動折疊多餘空白,超長截到 120 字元(帶 …)。
  • 點擊某條 → 平滑滾動到該訊息並關閉 popover。
  • 醒目顯示當前所在條(純灰階,樸素專業風)— 按當前視口內可見的使用者訊息實時判定,滾動時跟隨重新整理,末條也能正確選中,不再總停在第一條。
  • 關閉方式:Esc / 點 popover 外 / 視窗 resize。
  • 虛擬化安全:按 data-message-id 定位(佔位訊息也帶該屬性且占正確高度),長會話也定位準確。
  • 僅在會話裡有使用者提問可跳轉時才顯示,空會話不出現。
  • 用瀏覽器 Popover API(popover=manual + top layer)渲染,不相依 z-index,不會被彈窗 / 抽屜等遮擋。

5.5.1 會話狀態條:隨視窗寬度換形態

文件變更 / 記憶 / 待辦 / 計畫 / 目標 / 子任務 / 中斷任務 / 待注入(即時指導,見 §5.4.2) / 標記(見 §5.4.3) / 例行(會話內例行程序,見 §15.6.1) / 結果草稿 / 附加資料 / 建議任務 / 自檢門禁 等狀態條會按視窗寬度自動選擇呈現形態:

  • 窄螢幕 — 輸入框上方橫排:多條並列在輸入框上方,寬度不夠時自動換行(優先填滿緊貼輸入框的那行、再往上疊),各條間距收攏,非底行的標籤還原成完整藥丸,不再被擠出螢幕或相互遮擋。點開為向上彈出的浮層。
  • 寬螢幕 — 訊息區右上的縱向狀態疊:視窗夠寬時,這些條目改為在訊息區右上縱向排列,不再佔用輸入框上方的空間。點開為右側堆疊抽屜:不加遮罩、不擠壓本文,以整個狀態疊為錨,切換不同條目時抽屜位置保持穩定,並會按兩側可用空間自動選擇向左或向右展開。視窗特別寬時抽屜槽位固定預留,開合抽屜不會讓本文左右跳動。

訊息量設為「極簡」時恆用輸入框上方的橫排形態。切換形態只改變位置,不改變本文寬度。

5.6.1 會話附加目錄:讓 AI 臨時存取工作區之外的資料夾

輸入框「+」選單新增兩項:

入口 權限
附加目錄(只讀) AI 可讀取該目錄下文件、列舉、搜尋;不能修改
附加目錄(讀寫) 在只讀基礎上額外允許寫 / 刪 / 建立

典型用法:讓 AI 參考另一個專案的程式碼、把產出寫到指定目錄、跨工程協作等。

附加前有確認對話框,明確說明授予的是只讀還是讀寫權限;附加後出現 「附加路徑」條(窄屏在輸入框上方、寬屏在訊息區右上,見 §5.5.1),展示當前會話的附加目錄,可隨時移除。確認框裡按 {{kbd:Enter}} 不會誤觸按鈕 —— 得自己點確認。

可選作用域:只給這個會話,還是整個工作區共用:確認對話框裡可以選這次附加的生效範圍。

作用域 含義
僅本會話(預設) 只有當前會話能用到這個目錄 / 文件,其它會話看不見
專案工作區共享 同一工作區下的其它會話也能用到,省得每個會話各附加一遍

遠端工作區:SSH 工作區裡挑選附加路徑會開啟遠端文件選擇器(走 SFTP 瀏覽遠端目錄樹),選定後即時推播到遠端沙箱生效。

子代理也能讀到:派出去的子任務會在建立時繼承父會話當時的附加清單,不必在子任務裡重新附加一次(此前子代理讀不到父會話附加的路徑)。

作用域與安全:

  • 作用域為「僅本會話」時,附加只對當前會話生效,其它會話不受影響。
  • 隨會話儲存,重新啟動後依然有效(背景自動重新生效,無需重新附加)。
  • 放寬的只有文件讀寫口徑(讀 / 寫 / 搜尋 / 列舉),其餘安全政策不變。
  • 附加目錄下的搜尋結果用絕對路徑標註,來源一目了然。
  • 會話身份由系統在呼叫鏈裡注入,AI 自己無法偽造身份去冒用別的會話的附加權限。

統一的「附加資料」入口:會話附加的目錄 / 文件與工作區的樣本 / 附件已合並到同一個「附加資料」條統一管理,附加進度等狀態實時可感知。兩類語義清晰、各自處置:會話附加的項移除只是解掛、不刪原文件;工作區樣本 / 附件的刪除走行內二次確認,不易誤刪。文件有變更會自動重新整理(AI 改完文件後無需手動重載),目錄按多層樹狀呈現看得更清楚,並自動忽略 macOS 的特殊文件(如 .DS_Store、__MACOSX/ 等)。本機工作區文件加入附加資料時狀態顯示為「已就緒」(不再用「上傳 / 已上傳」誤導本機文件)——「上傳」只留給真正外發的場景(如提交回饋、上傳檢測);範圍(scope)徽標也改為可讀性更好的靛藍配色。

5.7 訊息內鏈接與檔案路徑可點

AI 回復裡的鏈接和檔案路徑現在都能點:

  • 工作區內的檔案路徑 → 點開後可「預覽」,或「在資料夾中顯示」用系統檔案管理員(Finder / 資源管理器)定位並選中該文件。
  • 外部鏈接 → 用預設瀏覽器開啟。
  • 反引號內聯程式碼裡的路徑(如 `src/main.go`)同樣可點,與普通鏈接共用一套識別與定位邏輯;普通內聯程式碼不受影響。
  • 程式碼引用可點跳轉(接地證據可核對):AI 回答裡引用的程式碼位置、以及工具結果裡的「文件:行」現在都能點 — 帶行號的工作區文件,點「預覽」會開啟源碼預覽並滾動到該行,不必自己去翻。這讓 code.search / code.ask 等給出的 文件:行 證據「看得見、可核對」。
  • 點擊後就地彈出輕量浮動小工具條(文件為「預覽」「在資料夾中顯示」「複製」,外部鏈接為「開啟」「複製」),非模態 — 點別處 / 滾動 / 按 Esc 即關。
  • 工具條用瀏覽器 Popover API 渲染在頂層,從「關於」「發佈說明」「更新」等彈窗裡點鏈接也不會被遮擋。
  • 路徑識別更精準:只把帶常見副檔名的字串(如 src/main.go、README.md)或慣例檔名(Dockerfile、Makefile、go.mod 等)認作可點路徑;純目錄、無副檔名 / 未知副檔名的片段(如 a/b、/etc/hosts)不再被誤標為可點。渲染後還要確認文件確實存在、落在工作區或附加範圍內,才真正變成可點。
  • 「檔名:行號」可點:main.go:42、a.ts:3:7、Dockerfile:3 這類寫法點開即定位到該行;冒號前必須是認得的檔名,因此 example.com:8080 這類地址不會被誤當成文件。
  • 能預覽就能定位:工具條上的「預覽」與「在資料夾中顯示」走同一套路徑解析 —— AI 寫的相對路徑、會話附加的文件、專案工作區級共享附加裡的文件、最近使用但未開啟的工作區裡的文件,都能正確預覽與定位。附加清單晚於訊息載入、或事後新增 / 移除附加時,已顯示訊息裡的路徑會隨之重新判斷能否點擊。
  • 遠端工作區:SSH 工作區的文件不顯示「在資料夾中顯示」(本機沒有這個文件);SSH 工作區附加的路徑不提供預覽、也不會被誤讀成本機的同名文件,工作區內的文件仍可預覽。
  • 預覽、另存、定位失敗時,提示會附上具體原因。
  • 僅 AI 回復生效:你自己發的訊息裡鏈接 / 路徑不再可點,避免誤觸;只有助手回復裡的鏈接和路徑才會被識別與提供工具條。
  • 安全:危險協議(非 http(s))鏈接被攔截不放行;文件定位有工作區縱深校驗,不會越界到工作區外。

5.7.1 文件預覽抽屜

訊息流裡點文件鏈接,彈出的工具條上有 「預覽」 按鈕,就地看內容不必切到編輯器。

  • 支持的文件類型遠不止 Markdown:常見源碼(Go / TypeScript / Python / Rust / Java / C·C++ / Ruby / PHP / Swift / Kotlin 等)、配置(YAML / TOML / JSON / INI / .env)、前端(HTML / CSS / Svelte / Vue / Astro)、指令碼(sh / bash / ps1 / bat)、文字與資料(md / txt / csv / tsv / xml / sql / diff)、圖片與常見二進位(png / jpg / svg / pdf / zip 等),以及 Dockerfile、Makefile、go.mod、.gitignore 這類沒有副檔名的常見文件名。
  • 源碼帶語法高亮,與訊息流裡的程式碼區塊同一套配色;本文特別大時(超過約 256 KB)不再著色,但行號與定位照常可用。文件路徑前會按格式顯示對應圖示,一眼分辨類型。
  • 二進位文件以十六進制轉儲呈現(十六進制 + 字元對照,最多 64 KiB),不再顯示成亂碼。遠端工作區的二進位文件取不到原始位元組,此時會明確說明而不是給出假內容。
  • 可預覽的範圍:先在工作區內查找,找不到再匹配當前會話附加的目錄 / 文件 —— 附加進來的文件同樣能預覽。不能預覽的路徑不會顯示「預覽」按鈕,避免點了沒反應。
  • 呈現形態按視窗寬度自動選擇:外側空間足夠時常駐為右側側欄(不收窄本文);空間不足時退回浮層抽屜(寬 min(820px, 94vw)、不加遮罩),此時本文靠左側留白避讓,同樣不被收窄。
  • 在文件內搜尋:抽屜裡可直接搜當前文件的內容,命中處高亮,顯示「第幾處 / 共幾處」,用「上一處 / 下一處」逐個跳轉,可切換是否區分大小寫。命中過多時只標出前若干處並給出提示。
  • 大小:預覽本文上限 1 MiB(超出自動截斷並標註),適合速覽;要保全文請用「另存新檔」。
  • 「另存新檔」按鈕(抽屜標頭):調系統儲存對話框,用 64 MiB 大上限讀取原始檔保全文,寫到你指定的位置;取消等於無操作。
  • Markdown 文件裡的鏈接:預覽中的 Markdown 文件(.md / .mdx / .markdown)渲染成文件,其中的相對鏈接以該文件所在目錄為基準;鏈接裡的 #L10、#L10-L20 可定位到行,?參數 與百分號編碼會被正確處理。
  • 程式碼區塊裡單獨一條文件路徑(文件存在時)也能點開預覽:渲染時非同步校驗該路徑是否存在,存在才升級為可點,避免點到不存在的文件。

按 ↑ 在輸入歷史裡回溯時,輸入框左上角顯示當前位置 N/N(最新 = 總數,最舊 = 1/N),不再"按了幾次 ↑ 自己也不知道翻到哪了"。草稿態 / 空歷史 / 越界一律不顯示。

回溯到某條歷史後直接鍵入或貼上 → 自動離開歷史態,改後內容當作最新草稿:之前在歷史態修改會讓人誤以為"這條歷史被改了",本版明確語義 — 編輯即新草稿,原歷史不動;再按 ↑ 仍先把當前草稿存起來,編輯內容不丟。

5.9 跨端接管

如果你已經綁定了微信通道:

  • 手機上 /s <短id> 即可繼續未完成的桌面會話。
  • 桌面端會話也可以接管手機端發起的會話。
  • 同一會話同時只允許一端"持有",另一端會自動同步顯示。

詳見第十九節「隨行通訊」。