所有頁面
本頁內容

分享對話

分享會為對話建立一個公開的唯讀連結。收到連結的人不必登入,就能在瀏覽器中閱讀對話紀錄,並隨著對話進行持續看到後續內容。他們無法傳送、停止、變更或開啟你中繼上的任何其他東西。連結顯示什麼由你決定:個別訊息可以隱藏,中繼主機的路徑也會被過濾掉。你自己永遠看得到完整的對話,而 Settings → Sharing(設定 → 分享)會列出每一個連結,並附上誰開啟過它的紀錄。

連結是公開的

任何拿到網址的人都能閱讀分享的對話紀錄,而且網址可以被轉傳。中繼不會詢問開啟者是誰。請把它當成那一個對話的密碼看待,並在送出之前先用 Preview as shared(預覽分享後的樣子)讀一遍對話。

建立連結 #

  1. 開啟對話。
  2. 開啟它的 ⋯ 選單,選擇 ➡️ Share conversation(分享對話)。

不會出現對話框。中繼會建立連結並複製到你的剪貼簿,並以一則簡短的通知告訴你:

Share link copied to clipboard.

如果瀏覽器不允許頁面寫入剪貼簿,通知會直接顯示網址,讓你從那裡複製。

網址的樣子是 https://relay.example.com/shared/ 後面接一串很長的隨機 token(64 個十六進位字元)。主機名稱就是你用來連到中繼的那一個;若中繼位於另一台機器上的 proxy 後面,則是 proxy 回報的主機名稱,前提是中繼信任該 proxy。如果中繼是在子路徑下提供服務(config.json 中的 remotePath),子路徑也會是網址的一部分。

再次選擇 ➡️ Share conversation 不會產生第二個連結:只要對話還有有效的連結,你拿到的就是同一個網址。任何對話都可以分享,已封存的也可以。

你的分享連結 0.9.11 新增 #

Settings → Sharing 會列出目前有連結的每一個對話,顯示它何時分享(以及更新)、上次何時被開啟、開啟了幾次、有多少位觀看者。點選標題會開啟該對話。每一列都有:

按鈕 作用
Copy link(複製連結) 複製連結。
Renew link(更新連結) 經確認後為對話產生新連結並複製。舊連結立即失效。存取紀錄會延續到新連結。當連結傳得比預期更遠時使用。
Stop sharing(停止分享) 經確認後結束連結。連結立即失效,正在閱讀的人也一樣,而且它的存取紀錄會被刪除。
Access log(存取紀錄) 展開該連結的存取紀錄。

開啟中的對話正在分享時,它的 ⋯ 選單也會有 ⛔ Stop sharing,同樣會先詢問。

停止或更新之後 #

已停止或已更新的連結只會回應單純的 404,頁面和資料都一樣,就和從未存在過的連結完全相同。仍開著該連結的分享頁面會在下次重新整理時停止,大約在一秒內。停止後再次選擇 ➡️ Share conversation 會建立帶有新 token 的新連結;舊網址永遠不會再回來。

不透過 App 也能做到同樣的事,只要把驗證 token(存取)放在標頭中,例如從腳本停止分享:

curl -X DELETE -H "Authorization: Bearer YOUR_TOKEN" \
  https://relay.example.com/api/conversation/CONVERSATION_ID/share

對同一個網址 POST 會建立連結,POST …/share/renew 會更新連結,GET /api/shares 則會列出所有連結。

存取紀錄 #

清單中的每一列都能展開成它的存取紀錄,最新的在最上面。一筆紀錄代表分享頁面被開啟一次,而不是每次重新整理:頁面大約每秒重新載入一次對話,只有第一次載入才算。同一位觀看者在 10 秒內的第二次載入只算一次。觀看者若 30 分鐘沒有閱讀後再回來,會再算一次,例如在背景分頁中休眠的頁面。不透過頁面直接讀取連結的腳本也以同樣方式計算,所以沒有人能讀取連結而不留下紀錄。

紀錄的部分 來源
時間 頁面被開啟的時間。
IP 位址 觀看者的位址,以中繼看到的為準。在 proxy 後面時,若中繼信任它,就是 proxy 回報的位址;否則每位觀看者都會是 proxy 的位址。Store viewer IP addresses(儲存觀看者的 IP 位址)關閉時顯示 IP not stored(未儲存 IP)。
國家 Cloudflare tunnel 加上的國家代碼,只取自受信任的 proxy。否則為空白。
viewer … 由位址和瀏覽器算出的簡短帶金鑰雜湊值,同一位觀看者每次開啟都相同,即使沒有儲存位址也一樣。
瀏覽器 觀看者的瀏覽器送出的 user agent,以文字顯示。

清單會顯示最新的 200 次開啟,並註明總共有幾次。

更新連結時紀錄會延續。只要連結還在分享,紀錄就會保留;停止分享或刪除對話時則會刪除。

Access log 下的 Store viewer IP addresses(預設開啟)決定新紀錄是否保留位址。關閉後,新紀錄不保留任何位址,中繼本身針對分享讀取的記錄行也不保留。如果已經儲存了位址,OAR 會詢問是否也要移除它們:Remove them(刪除)會從每一筆存取紀錄和分享讀取的狀態記錄中清除位址,紀錄本身保留;Keep them(保留)則保留位址。這個設定套用到此中繼的所有連結。

路徑和檔名 0.9.11 新增 #

分享檢視不會完整帶出中繼主機的路徑。中繼會依 Settings → Sharing 中的 Paths and file names(路徑和檔名)設定,過濾它提供給連結的所有內容:

選項 對於 /srv/projects/shop/src/cart.js,觀看者看到
Show every path and file name(顯示所有路徑和檔名) 原本的路徑
Hide the path, show the file name(隱藏路徑,顯示檔名)(預設) cart.js
Hide paths and file names(隱藏路徑和檔名) ‹hidden›

這個設定套用到此中繼的每一個連結,從分享頁面下次重新整理起生效。你自己的檢視永遠顯示全部內容。

過濾器會攔下的內容:

  • 一律攔下:工具參數中的路徑、檔案提及(@file:、@folder:,相對路徑也算)、附件名稱、subagent 紀錄,以及 diff 的檔案標頭。
  • 自由文字中,即回覆、思考、工具輸出和程式碼區塊:中繼知道的資料夾(對話的工作資料夾、workspace 根目錄、你的家目錄、中繼自己的資料目錄和上傳資料夾)連同後面接的內容、Windows 和 Unix 的絕對路徑、~/… 路徑,以及夾在分隔符號之間的你的使用者名稱。這是盡力而為。
  • 攔不到:自由文字中的相對路徑(src/cart.js)、/tmp 這類只有一層的路徑、網址,以及圖片裡的任何內容。

Preview as shared(預覽分享後的樣子) #

對話 ⋯ 選單中的 🔍 Preview as shared 會以連結呈現的樣子開啟對話,不會建立連結,也不會在任何存取紀錄中留下紀錄。綠色標示觀看者看到的替代內容,取代原本的路徑。琥珀色標示仍然看起來像路徑的內容:帶副檔名的相對路徑、home/… 或 Users/… 片段、作為單字出現的你的使用者名稱,以及在 Show every path and file name 下的每一個絕對路徑。請檢查琥珀色標示,並隱藏透露太多的訊息。

封存、刪除或壓縮時 #

  • Archive(封存)不會結束連結:已封存的對話仍可透過連結閱讀,取消封存也不會改變任何事。
  • Delete(刪除)會結束連結,並刪除它的存取紀錄:連結會回應 404。
  • 壓縮(見壓縮對話)會封存對話,並在新對話中繼續。連結留在已封存的舊對話上,持續顯示它原本顯示的內容。新對話沒有連結,所以在你分享它之前都不會被分享。

封存和刪除的說明見對話清單。

觀看者會看到什麼 #

連結會以一般的對話版面開啟對話,但沒有側邊欄,也沒有輸入區。標題就是對話的標題。

對話的部分 在分享檢視中
你的訊息和回覆 顯示,路徑經過過濾。
工具活動行和思考 顯示,路徑經過過濾。
附件和圖片 顯示,包括 agent 生成的圖片,名稱經過過濾。觀看者可以開啟他們看得到的訊息上的附件。
Subagent 列 顯示。0.9.11 新增 點選一列會以唯讀方式開啟該 subagent 的紀錄,沒有 Stop(停止),並和其餘內容一樣經過過濾。
預覽卡片 只顯示標籤,不含連結。文字中任何地方引用的預覽連結都會顯示為 [preview link removed]。分享的對話不會公開被預覽的 App。
中繼事件列(來自監看 session) 以事件列顯示。文字會指出被監看的 session。
來自另一個中繼的訊息 帶徽章顯示。該中繼的位址和另一個對話的 id 會被移除;它的名稱、另一個對話的標題、供應商和模型則保留。
提問卡片和計畫看板 不顯示。它們不在觀看者取得的資料中,所以觀看者只會看到 agent 在它們前後寫的內容。
訊息文字中指向你中繼上檔案的圖片和檔案連結 觀看者無法載入:這些檔案需要你的登入。
你隱藏的訊息 完全不會送出。
釘選訊息和 🙈 清單 不顯示:它們是你自己的。
工作資料夾、session 和 runtime 的詳細資料 不會送出。
搜尋、上下文按鈕、模型和模式選擇器、全螢幕、App 安裝 無法使用。

頁面載入的資料也包含每則訊息所用的模型。分享頁面會要求搜尋引擎不要建立索引。

即時更新 #

分享頁面位於前景時,每 0.9 秒重新載入一次對話,所以對話繼續進行時新訊息就會出現。它不會和中繼建立即時連線,背景分頁中的頁面也不會重新載入。往上捲動閱讀的觀看者不會被拉回結尾。

監看者 #

每個開啟中的分享頁面每 12 秒通知中繼一次它還在。你可以在自己的檢視中,從對話標題的滑鼠提示看到有幾個人正在閱讀,例如 2 watchers currently reading this conversation。只有在至少一人正在閱讀時才會出現這個指示。沉默 45 秒的觀看者會從計數中剔除。

隱藏個別訊息 #

在你自己的檢視中,每則訊息都有一個 Hide(隱藏)按鈕,滑鼠移到訊息上時顯示(在觸控螢幕上,點一下訊息)。按下後,該訊息就會離開分享檢視。它不會被刪除。每則訊息各自隱藏:隱藏你的問題不會隱藏對它的回覆,反之亦然。回覆的工具活動和思考會跟著回覆。

  • 在你的檢視中,訊息仍然完整,並標示為 Hidden from shared viewers(對分享觀看者隱藏)。它的按鈕此時顯示 Unhide(取消隱藏);按下後,觀看者就能再次看到這則訊息。
  • 觀看者在原處什麼也看不到。這則訊息只是從對話紀錄中消失。隱藏訊息的附件也無法透過連結取得,除非同一個檔案也附加在一則看得到的訊息上。
  • 每次變更都有通知確認:Message hidden from shared viewers. 或 Message visible to shared viewers.
  • 仍在排隊中的訊息,或正在執行的回合中的訊息,不提供 Hide。請在回合結束後再隱藏。

隱藏的訊息對該對話的每一個連結都隱藏,包括之後才建立的新連結。這個標記在中繼重新啟動後仍會保留。

🙈 清單 0.9.11 新增 #

當對話有隱藏的訊息時,它的標題列中 📍 旁邊會出現一個附帶數量的 🙈 按鈕(分享檢視中永遠不會出現)。它會開啟隱藏訊息的清單,就像釘選的訊息一樣:

  • 點選一列會跳到它的訊息,即使是歷史記錄中很前面的訊息也可以,每一列也有 Unhide。
  • Unhide all(全部取消隱藏)會先詢問。回合仍在執行中的訊息會保持隱藏,清單會指出它。
  • 數量和清單也涵蓋尚未載入的訊息,其他分頁和裝置不必重新載入就會跟上變更。

觀看者能做什麼 #

分享檢視中的 ⋯ 選單只有一個項目:☀️ Day mode(日間模式)或 🌙 Night mode(夜間模式),為該觀看者切換頁面的主題。除此之外,觀看者可以捲動對話紀錄、載入較早的訊息、展開收合的活動、開啟 subagent 紀錄和開啟附件。輸入欄位已停用,並顯示 Shared conversation (read-only)(已分享的對話,唯讀)。觀看者做的任何事都不會改變對話。

限制 #

每個對話同時計數的觀看者 200(sharedPresenceMaxPerConversation)。
全部同時計數的觀看者 5000(sharedPresenceMaxGlobal)。
有效期限 無。連結在你停止分享、更新它或刪除對話之前都有效。

這兩個限制都在 config.json 中。達到限制時,閒置最久的觀看者會從計數中剔除,以騰出位置給新的觀看者。這些限制只限制計數,也就是你看到的監看者數量;對話紀錄的請求本身不會檢查它們,所以超出計數的觀看者仍然可以閱讀。

連到中繼 #

分享頁面和它的圖片由你的中繼提供,而不是 oar.sh 或任何其他服務。觀看者必須能從所在的地方連到中繼的位址。只在你自己機器上監聽的中繼(localhostOnly)其他人都無法開啟。若要分享到你的網路之外,請透過 tunnel 連到中繼。

如果 tunnel 有存取規則,它們也會套用到分享連結。若主機名稱上有 Cloudflare Access 應用程式,觀看者會被要求登入,連結對他們就無法使用,除非該應用程式讓 /shared/* 和 /api/shared/* 不需登入即可通過。也不要在 /api/shared/* 上設定快取規則:頁面會重新載入這個網址來追蹤對話,快取的回應會讓它一直顯示舊的狀態。

依供應商 #

各供應商沒有差別。分享讀取的是已儲存的對話,所以對 GitHub Copilot、OpenAI、Claude、Claude Cloud、Cursor、Grok 和 DeepSeek 對話的運作都相同,OpenAI Image 對話也一樣,其生成的圖片會透過連結提供。0.9.11 新增 只有當回覆確實在對話本身以外的供應商上執行時,分享檢視中的回覆才會帶有紅色的 ran on …(執行於 …)小標籤。

無法正常運作時 #

你會看到什麼 原因與解決方法
連結回應 404 分享已停止、連結已更新,或對話已刪除。Settings → Sharing 會列出有效的連結。
觀看者被要求登入,或看到舊的狀態 中繼前面有 Cloudflare Access 或快取規則。見連到中繼。
存取紀錄的每一筆都是同一個位址 另一台機器上的 proxy 不受中繼信任。請設定 trustProxy。
分享檢視中仍出現路徑 它是相對路徑,或在圖片裡。用 Preview as shared 檢查,並隱藏該訊息。

觀看者閱讀的對話紀錄說明,見閱讀對話紀錄。