跳至內容

終端機通道

ahp-terminal:/<id> 通道的參考資料 — 可連結至用戶端及/或工作階段的長生命週期偽終端機。線路層級的概觀請參閱終端機通道規格

JSON Schema: state.schema.json

狀態類型

TerminalInfo

在根狀態上公開的輕量終端機中繼資料。

欄位類型必要說明
resourceURI終端機 URI(可訂閱以取得完整終端機狀態)
titlestring人類可讀的終端機標題
claimTerminalClaim目前誰持有此終端機
exitCodenumber行程結束代碼(若終端機行程已結束)

TerminalClaimKind

終端機聲明種類的判別欄位。

成員
Client'client'
Session'session'

TerminalClientClaim

由已連線的用戶端聲明的終端機。

欄位類型說明
kindTerminalClaimKind.Client判別欄位
clientIdstring聲明此終端機之用戶端的 clientId

TerminalSessionClaim

由工作階段聲明的終端機,可選擇性地限定到特定回合或工具呼叫。

欄位類型必要說明
kindTerminalClaimKind.Session判別欄位
sessionURI聲明此終端機的工作階段 URI
turnIdstring工作階段內的選用回合識別碼
toolCallIdstring回合內的選用工具呼叫識別碼

TerminalClaim

描述目前誰持有終端機。終端機可由已連線的用戶端或工作階段聲明(例如在工具呼叫期間)。

TerminalClientClaim | TerminalSessionClaim

TerminalState

單一終端機的完整狀態,當用戶端訂閱終端機的 URI 時載入。

欄位類型必要說明
titlestring人類可讀的終端機標題
cwdURI終端機行程的當前工作目錄
colsnumber終端機寬度(以欄為單位)
rowsnumber終端機高度(以列為單位)
contentTerminalContentPart[]具類型的內容片段,取代平坦的 content: string

只需要原始 VT 串流的簡易消費者可用以下方式重建它: content.map(p =&gt; p.type === 'command' ? p.output : p.value).join('')

需要指令邊界的消費者可依片段類型篩選。
exitCodenumber行程結束代碼,於終端機行程結束時設定
claimTerminalClaim目前誰持有此終端機
supportsCommandDetectionboolean此終端機是否發出 terminal/commandExecutedterminal/commandFinished 操作並填入 command 類型的片段。

用戶端 MUST 在依賴指令偵測前檢查此旗標。 切勿以 command 片段的存在與否作為功能旗標 — 片段 在正常閒置狀態下是不存在的。
isPtyboolean此終端機風格資源是否由虛擬終端機支撐。 當值為 false 時,輸出為純文字,用戶端不需要解析 VT 序列。

TerminalContentPart

終端機輸出中的內容片段。

TerminalUnclassifiedPart | TerminalCommandPart

TerminalUnclassifiedPart

非結構化的終端機輸出 — 指令之前、之間或之後的內容, 或來自不支援指令偵測的終端機。

欄位類型說明
type'unclassified'判別欄位
valuestring累積的 VT 輸出。當沒有指令執行時,由 terminal/data 附加至此。

TerminalCommandPart

單一指令:其命令列與其產生的輸出。

isComplete 為 false 時,指令仍在執行;隨著 terminal/data 操作抵達,output 會增長。在 terminal/commandFinished 時,此片段 會就地變動為 isComplete: true 並帶有完成中繼資料。

欄位類型必要說明
type'command'判別欄位
commandIdstring穩定識別碼,與對應的 terminal/commandExecutedterminal/commandFinished 操作上的 commandId 相符。
commandLinestring提交給 shell 的命令列。
outputstring累積的 VT 輸出。當 isComplete 為 false 時,由 terminal/data 附加至此。 shell 整合逸出序列由伺服器剝除。
timestampnumber執行開始時的 Unix 時間戳記(毫秒),由伺服器回報。
isCompleteboolean指令是否已完成。
exitCodenumbershell 結束代碼。於完成時設定。未知時為 undefined
durationMsnumber實際耗時(毫秒)。於完成時設定。

操作

變動 TerminalState。透過外層的 ActionEnvelope.channel 限定於某個終端機 URI。

JSON Schema: actions.schema.json

terminal/data

終端機輸出資料(pty → 用戶端方向)。

在 reducer 中將 data 附加到終端機的 content

terminal/dataterminal/input 是刻意分開的操作,因為標準的 預寫入協調對終端機 I/O 並不安全。pty 是有狀態、可變動的行程 — 樂觀地套用輸入或預測輸出會產生不正確的狀態。相反地,terminal/input 是僅具副作用的操作(用戶端 → 伺服器 → pty),而 terminal/data 是 伺服器權威的輸出(pty → 伺服器 → 用戶端)。

欄位類型說明
typeActionType.TerminalData
datastring輸出資料(可能包含 ANSI 逸出序列)

terminal/input

傳送給終端機行程的鍵盤輸入(用戶端 → pty 方向)。

這是僅具副作用的操作:伺服器將資料轉送到終端機的 pty。reducer 將此 視為 no-op,因為 terminal/data 操作會反映任何產生的輸出。

關於這兩個操作為何保持分開,請參見 terminal/data

欄位類型說明
typeActionType.TerminalInput
datastring要傳送給 pty 的輸入資料

terminal/resized

終端機尺寸已變更。

可由用戶端分派以請求調整大小,或由伺服器分派以告知用戶端實際的 終端機尺寸。

欄位類型說明
typeActionType.TerminalResized
colsnumber終端機寬度(以欄為單位)
rowsnumber終端機高度(以列為單位)

terminal/claimed

終端機聲明已變更。用戶端或工作階段轉移終端機的所有權。

若分派的用戶端目前未持有聲明,伺服器 SHOULD 拒絕。

欄位類型說明
typeActionType.TerminalClaimed
claimTerminalClaim新的聲明

terminal/titleChanged

終端機標題已變更。

當終端機行程更新其標題(例如透過逸出序列)時由伺服器引發, 或由用戶端分派以重新命名終端機。

欄位類型說明
typeActionType.TerminalTitleChanged
titlestring新的終端機標題

terminal/cwdChanged

終端機工作目錄已變更。

欄位類型說明
typeActionType.TerminalCwdChanged
cwdURI新的工作目錄

terminal/exited

終端機行程已結束。

欄位類型必要說明
typeActionType.TerminalExited
exitCodenumber行程結束代碼。若行程被終止而未產生結束代碼則為 undefined

terminal/cleared

終端機回捲緩衝區已清除。

欄位類型說明
typeActionType.TerminalCleared

terminal/commandDetectionAvailable

shell 整合已載入,終端機現在支援指令偵測。當 shell 整合變為可用時 (這可能在終端機建立後非同步地發生),伺服器會分派此操作。

在收到此操作(或 terminal/commandExecuted)之前,用戶端 MUST NOT 假設指令偵測可用。

欄位類型說明
typeActionType.TerminalCommandDetectionAvailable

terminal/commandExecuted

指令已提交給 shell 並正在執行。 所有後續的 terminal/data 操作(直到對應的 terminal/commandFinished)構成此指令的輸出。

欄位類型說明
typeActionType.TerminalCommandExecuted
commandIdstring此指令的穩定識別碼,範圍限定於終端機 URI。 允許將 commandExecutedcommandFinished 配對關聯起來。
commandLinestring已提交的命令列文字
timestampnumber指令開始執行時的 Unix 時間戳記(毫秒),於伺服器端量測。

terminal/commandFinished

指令已完成執行。

在先前的 terminal/commandExecuted(相同 commandId)與此操作 之間的 terminal/data 操作序列,構成該指令的完整輸出。

欄位類型必要說明
typeActionType.TerminalCommandFinished
commandIdstring與對應的 commandExecutedcommandId 相符
exitCodenumbershell 結束代碼。若 shell 未回報則為 undefined
durationMsnumber指令的實際耗時(毫秒),由伺服器端的 shell 整合指令稿量測。

指令

JSON Schema: commands.schema.json

createTerminal

在伺服器上建立新的終端機。

建立後,用戶端應訂閱終端機 URI 以接收狀態更新。伺服器分派 root/terminalsChanged 以更新根終端機清單。

屬性
方向用戶端 → 伺服器
類型請求

參數:

欄位類型必要說明
channelURI終端機 URI(由用戶端選擇)。
claimTerminalClaim終端機的初始擁有者
namestring人類可讀的終端機名稱
cwdURI初始工作目錄 URI
colsnumber初始終端機寬度(以欄為單位)
rowsnumber初始終端機高度(以列為單位)

結果: 成功時為 null


disposeTerminal

處置終端機,若其行程仍在執行則予以終止。

伺服器分派 root/terminalsChanged 以從根終端機清單中移除該終端機。

屬性
方向用戶端 → 伺服器
類型請求

參數:

無參數。

結果: 成功時為 null


以 MIT 授權發布。