Runtime 與安全邊界
正式 Native Host 會以 Desktop 產生的本機金鑰驗證 Full Access 請求。Desktop 檢查完整請求、Origin、Instance 與雙 grant,拒絕過期或重放資料後,才核發 Core capability。網站無法僅靠一般 IPC 的 callerOrigin 或 approval boolean 取得權限;已以相同 OS 使用者身分執行的本機程式仍在信任範圍內。Extension 會持久保存撤權,並在後續 Native 操作與重連時先重試;其他 Origin 的撤權失敗不會拒絕目前網站的一般操作。
Pedelec Desktop 管理固定版本的 Deno runtime。使用者不必自行安裝 Deno。Runtime 的取得與存放是 Desktop 的內部實作細節。App 與 Agent 都不需要主機另行安裝 Deno。Agent 透過 pedelec-ts-runtime 執行;App 透過 SDK 的 workspace.run() 執行。Raw Deno 不是 Agent-facing 介面。
預設 Sandbox 邊界
Section titled “預設 Sandbox 邊界”Script 的讀寫權限侷限於 Workspace,無法任意讀寫 Workspace 外的主機路徑。Pedelec 的私有 runtime 檔案是實作細節;請使用公開 Workspace API 與邏輯 module 名稱,不要依賴其佈局。
Runtime 也禁止 network、host environment、subprocess、FFI 與 sys 權限。執行時無法抓取 npm、JSR 或遠端內容。概念上,執行採用 --no-remote、--cached-only、--allow-read=<workspace>、--allow-write=<workspace> 等限制;這不是自行啟動 raw Deno 的指示。
Script arguments 無法擴大權限。例如在 script argument separator 後傳入 --allow-net,只會讓該字串出現在 Deno.args,不會取得網路權限。
workspace.run() 是已核准 Web App對已開啟 Workspace 直接執行確定性程式碼的能力。預設使用受限 Deno sandbox;符合授權條件時可逐次選擇 Full Access。精確的安全與 admission 行為請見 PedelecWorkspace reference。
Full Access Thread 邊界
Section titled “Full Access Thread 邊界”明確授權的 Full Access Thread 可讀寫 Workspace 外檔案、使用主機環境變數、網路、subprocess、FFI、sys 及遠端/npm modules,仍受執行者 OS 權限限制。此模式會移除 --no-remote、--cached-only、--no-npm 等 Sandbox 限制,並保留主機環境,不只是加上 --allow-all。
入口檔案仍必須位於 Workspace 內,或由 stdin 提供。Agent CLI 仍只接受允許的 run 語法;Full Access 不會開放任意 Agent shell 命令。Pedelec 保留 Thread 身分驗證、取消、60 秒預設 timeout、輸出上限與 import map 驗證。授權由 Native IPC 與 Extension grants 執行,網頁傳入的 flag 不能自行取得權限。
每次執行都有獨立的 OS 程序容器。停止 Thread、撤銷所屬 Origin 的 Full Access grant、執行逾時或 Desktop shutdown 時,也會終止一般繼承產生的子程序與後代程序。Deno 父程序正常結束時也會清理殘留後代。其他 Thread 與 Workspace run 各自保有獨立生命週期。
Full Access 並非 OS sandbox。刻意脫離程序群組、透過其他服務啟動 daemon,或以其他權限啟動程序的腳本,可能留下此清理邊界外的程序。取消也無法撤回已完成的主機操作。程序樹清理採 best effort;失敗會記錄於 processTreeCleanupError 診斷,輸出收集失敗則記錄於 captureError,取消與逾時仍保留既有錯誤碼。
Deno.*、DENO_DIR、Deno CLI flags 及既有 DENO_* 錯誤碼保留引擎與相容契約的原意。deno/ 文件網址會保留,維持舊連結可用。