第五節 會話
會話(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>即可繼續未完成的桌面會話。 - 桌面端會話也可以接管手機端發起的會話。
- 同一會話同時只允許一端"持有",另一端會自動同步顯示。
詳見第十九節「隨行通訊」。
