> ## Documentation Index
> Fetch the complete documentation index at: https://datagen.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# 發布與分享 App

> 儲存與發布 App 版本、開啟執行中的 App、控管誰可以存取，並依排程執行建置器

自訂應用程式從建置器草稿到團隊手上，需要兩個步驟：**儲存** 會建立一個不可變的版本，**發布** 則決定所有人開啟的是哪一個版本。本頁說明這個流程、如何開啟與管理執行中的 App、誰可以存取，以及自動化。

<Note>
  筆記本是在 marimo 編輯器中直接編輯，不使用儲存與發布流程。開啟、執行個體與存取權限的運作方式，兩種 App 都相同。
</Note>

## 儲存版本

<Steps>
  <Step title="在 App 建置器中點選儲存">
    **儲存** 位於建置器標頭，在未儲存變更數量的旁邊。請先套用或捨棄所有開啟中編輯器的變更，並確認 App 已有 `datagen.app.json`（請參閱 [建立 App](/zh/apps/build) 中的「App 的啟動方式」）。
  </Step>

  <Step title="填寫版本備註">
    在 **儲存新版本** 對話框中，可在 **版本備註** 描述這次改了什麼，再點選 **儲存版本**。
  </Step>

  <Step title="等待映像檔">
    儲存時會把該版本的相依套件安裝進它自己的映像檔。**版本** 中的版本列會顯示映像檔狀態：**映像檔待建置**、**映像檔建置中**、**映像檔就緒** 或 **映像檔建置失敗**。映像檔就緒後，該版本才能發布。
  </Step>
</Steps>

儲存永遠不會改變成員看到的內容。你繼續修改草稿時，上線中的 App 仍提供已發布的版本。

<Tip>
  如果映像檔建置失敗，展開該列即可查看建置輸出，並點選 **重新建置**。若失敗原因是安裝或建置指令本身，請在建置器中修正檔案後重新儲存。
</Tip>

## 發布版本

開啟建置器左欄的 **版本**，或 App 詳情頁的 **版本** 分頁，在要上線的版本上點選 **發布**。

發布一個版本時：

* 它的檔案 **與** 啟動設定（指令、連接埠、工作目錄、環境變數）會一起上線；
* 執行中的 App 會重新建置。其他成員已開啟的副本會關閉，下次開啟時就會看到新版本；
* 你的草稿不受影響。

已發布的版本會顯示 **上線中** 標籤，建置器標頭也會顯示 `上線 v<n>`。

### 回溯

每次儲存都會建立一個版本，但只有已發布的那個會執行。要回溯時，在較舊的版本上點選 **發布** 即可。這不會刪除任何東西，只是改變哪個版本上線。

**刪除** 會移除一個已儲存的版本及其檔案。版本編號永遠不會重複使用，所以指向已刪除版本的連結會顯示為不存在，而不會指向其他內容。

### 匯出與匯入

* 詳情頁的 **匯出** 會把已發布的版本下載為 zip 檔。在建置器中，**匯出** 會下載你剛儲存的版本，或已發布的版本。匯出的一定是已儲存的版本，不會是草稿。
* 詳情頁的 **匯入** 會用電腦中的資料夾取代建置器的草稿。在你儲存並發布之前，已發布的 App 不會改變。

## 開啟執行中的 App

在詳情頁點選 **開啟應用程式**，或從應用程式清單開啟 App。執行中的 App 會顯示在 `/signalgen/apps/<appId>/view`，位於工作區內，導覽列仍然可見。

App 啟動期間，進度面板會顯示每個步驟：檢查存取權限與已發布版本、準備環境、載入檔案、連接來源，以及等待伺服器回應。

檢視器工具列包含：

* **應用程式詳情**：回到詳情頁。
* **重新整理**：重新載入 App。可以喚醒進入休眠的 App，並套用新發布的版本。
* **編輯**（自訂應用程式，限建構者或管理員）：開啟 App 建置器。
* **檔案**（自訂應用程式）：瀏覽執行中程序實際擁有的檔案。

<Note>
  如果 App 的連線保險庫中有你尚未提供的個人憑證，檢視器會顯示 **請先設定你的憑證**，而不是 App 本身。點選 **前往憑證庫設定**，填入你的值後再回來重新整理。請參閱 [連線保險庫](/zh/foundation/vault)。
</Note>

## App 詳情頁

`/signalgen/apps/<appId>` 會在不啟動 App 的情況下顯示它的資訊。分頁如下：

| 分頁 | 內容 |
| - | - |
| **檔案** | 已發布版本的檔案與預覽 |
| **版本** | 已儲存的版本；可發布、刪除或重新建置映像檔 |
| **執行中的個體** | 目前正在執行這個 App 的所有成員 |
| **來源** | 執行中的 App 讀取的工作區檔案 |
| **工具與知識** | 建置器使用的知識庫與 Skill |
| **設定** | Harness、連線保險庫、沙盒、機密與啟動設定 |
| **自動化** | 排程執行的建置器回合 |
| **存取** | 單一 App 的角色覆寫（僅限管理員） |

### 執行中的個體

每位開啟 App 的成員，都在自己的沙盒中執行自己的副本；大家共用的是 App 的檔案，而不是程序。**執行中的個體** 分頁會列出誰正在執行、何時開始，以及最後活動時間。

* 標頭的 **停止** 會停止 *你自己* 的執行個體。檔案會保留，再次開啟 App 時會重新啟動。
* 在其他成員那一列點選 **終止**，會立即停止對方的執行個體。對方可以再重新開啟。

## 誰可以存取 App

App 由工作區成員開啟。每位成員能做的事取決於他的工作區角色：

| 動作 | 檢視者 | 操作員 | 建構者 | 管理員 |
| - | :-: | :-: | :-: | :-: |
| 查看與開啟 App，讀取檔案與版本 | 是 | 是 | 是 | 是 |
| 停止自己的執行個體 | | 是 | 是 | 是 |
| 開啟建置器、儲存、發布、變更設定、管理自動化 | | | 是 | 是 |
| 終止其他成員的執行個體、刪除 App | | | 是 | 是 |
| 設定單一 App 的存取覆寫 | | | | 是 |

要與同事分享 App，請邀請對方加入工作區，再把 App 的連結傳給他。Agent 也可以在對話中用 `open_app` 工具把 App 開在對話旁。

### 單一 App 的存取覆寫

啟用單一資源存取控制後，管理員會在詳情頁看到 **存取** 分頁（個人工作區不會顯示）。覆寫只會在這個 App 上取代成員的工作區角色。

<Steps>
  <Step title="新增覆寫">
    點選 **新增覆寫**，選擇 **成員** 或 **群組**（身分提供者的群組），並選擇有效角色：**隱藏**、**檢視者**、**操作員** 或 **建構者**。**隱藏** 會讓該成員完全看不到這個 App。
  </Step>

  <Step title="設定其他所有人的預設值">
    **所有其他成員** 會設定所有沒有更具體覆寫的非管理員成員的角色。**沿用工作區角色** 則保留他們原本的角色。
  </Step>
</Steps>

個人覆寫優先於群組覆寫，群組覆寫又優先於預設值。管理員永遠不受影響。

<Warning>
  提升後的角色只適用於 App 頁面，永遠不適用於憑證。綁定連線保險庫、工具套件或機密，仍然需要相應的工作區角色。
</Warning>

## 自動執行建置器

**自動化** 分頁可以依排程執行 App 建置器，例如「每週一 09:00 更新來源並更新儀表板」。每次執行都使用這個 App 自己的模型、沙盒與憑證，和你親自輸入的回合完全相同。

<Steps>
  <Step title="建立自動化">
    點選 **新增自動化** 並填寫：

    * **名稱**：例如 `每週更新`。
    * **提示**：每次觸發時，以全新對話原封不動送給建置器。
    * **排程**：標準的 5 欄位 cron 運算式，例如 `0 9 * * 1`。
    * **時區**：IANA 時區名稱，例如 `Asia/Taipei`。預設為 UTC。
    * **啟用**：停用的自動化永遠不會觸發。
  </Step>

  <Step title="儲存並測試">
    點選 **儲存自動化**，再點選 **立即執行** 馬上試跑。自動化會以建立它的成員身分執行，因此使用的是該成員的憑證。
  </Step>

  <Step title="檢查並發布">
    **最近的執行** 會顯示每次執行的狀態。完成的執行只會變更草稿；請開啟建置器，把結果儲存為版本後再發布。
  </Step>
</Steps>

<Note>
  排程執行永遠不會發布。若執行時間到時有人正開著建置器，該次執行會被略過（**已略過（建置器使用中）**），而不會排隊；下一個排程時間會再試一次。沒有可用的沙盒容量時也會略過（**已略過（沒有容量）**）。
</Note>

## 下一步

<CardGroup cols={2}>
  <Card title="教學：發布一個 App" icon="graduation-cap" href="/zh/tutorial/05-ship-an-app">
    用 Demo 資料建置、發布並分享一個 marimo 儀表板。
  </Card>

  <Card title="Agent 總覽" icon="robot" href="/zh/agents/overview">
    建立能開啟、呼叫與建立 App 的 Agent。
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.