版本與診斷

四條指令能回答掉幾乎所有「它怎麼會這樣」,三樣東西能讓幾乎任何一份回報變得可以回覆。

這是哪一版

$ icloser version

手機端與管理台上,它在「關於」那一頁。「最新」不是一個版本號。同樣是 1.0.2 的兩次建置,行為可以不一樣 —— 這也正是這個網站每一頁頁尾都印著建置戳記的原因。

這台機器現在能不能用

$ icloser doctor

把那些必須成立的事情過一遍:有沒有工作區、Agent 在不在執行、有沒有裝一個用得了的 Runtime、權限允不允許你要做的事。它回答的是整個問題,而不是其中一塊。

為什麼什麼都沒發生

幾乎總是這三件事之一,依這個順序查:

  1. Agent 沒在執行。

    icloser agents 會顯示誰在執行、各自繫結在哪個工作區上。沒有東西在執行,就沒有東西會接這條任務。

  2. 有在執行,但繫結在另一個工作區上。

    一樣是 icloser agents。在管理台裡切換工作區改的是設定,而 執行體 是啟動的那一刻繫結它的工作區的。切換了卻好像沒反應時,先看這一條,其他都先放一邊。

  3. 它接了,然後停下來要權限。

    icloser perms 顯示這台裝置可以做什麼,icloser approval list 顯示什麼正在等你。一條停下來詢問的任務是正確的 —— 它在動手之前就停住了,所以等待的這段時間裡沒有任何東西是做到一半的。

它一直在說什麼

$ icloser logs -n 50

常駐 Agent 的最近幾行。加上 -f 可以持續跟看。

回報問題

三樣東西能讓幾乎任何一份回報變得可以回覆。少了它們,第一句回覆只能是「請補上這三樣」。

  1. 版本與建置編號

    icloser version,或是「關於」那一頁。

  2. 任務 id

    寫在那條任務自己的卡片上。有了它,我們能指著時間軸和變更說話,而不是照著一段描述猜。

  3. 你以為會發生什麼,實際發生了什麼

    分開寫。「它不會動」把這兩件事壓成了一件,而丟掉的正是要緊的那一半。

寄到哪裡:支援

出問題了 —— 先敲哪一條

四條指令,四種不同的處境。抓錯一條不是沒事:其中兩條只讀,另外兩條會真的改動你的機器或你的佇列。

$ icloser doctor

什麼時候用它 「我這台機器現在能不能用」—— 在你開始猜原因之前先敲的那一條。

它到底做了什麼 把「同時必須成立」的那幾件事一趟過一遍:裝的是哪一版、閘道答不答話、這個工作區的憑證還管不管用、執行體到底在不在跑、這台機器搆得著哪幾家Runtime。它只讀,什麼都不改。

$ icloser env probe

什麼時候用它 員工說他做不了一件他本該做得了的事 —— 編譯、跑測試、出套件。

它到底做了什麼 探測這台機器上的開發工具鏈(Go / Java / Android / Xcode / Node …),逐個說出在不在、是什麼版本。它只跑 --versionwhich:不消耗模型額度、不碰工作區憑證,所以一台還沒設定過的機器上它也答得出來。

$ icloser env bootstrap

什麼時候用它 probe 剛告訴你缺了什麼,而你不想一個個去找安裝套件。

它到底做了什麼probe 探出來的缺口,用這個平台自己的套件管理員補齊。它是同一對裡會寫的那一半 —— 先跑 probe 看清楚,因為這條會真的改動你的機器。

$ icloser task recover

什麼時候用它 一條任務一直掛在「執行中」而什麼都沒發生 —— 認領它的那台機器關了、睡了,或者執行體跑到一半被換掉了。

它到底做了什麼 把那條任務放回佇列,讓任何一台合格的執行體接走。任務 id 不變。這是「認領之後沒有出口」那個死局的出口 —— 原本只有認領它的那台機器能收尾,而那台機器已經不在了。

對已經發出去的任務下手

每一條都認 icloser task list 印出來的短 id,不用你去別處找全長的。每一條打完還會把伺服器給的新狀態讀回來印出去 —— 所以「這條任務此刻不能暫停」不會長得和成功一模一樣。

指令它做什麼
icloser task cancel <id>停掉它。正在跑的那一趟會在執行體下一次心跳時停下來 —— 伺服器殺不了你機器上的行程。
icloser task pause <id>先按住。不丟進度:resume 之後同一條任務接著做,不是重頭來。
icloser task resume <id>讓一條暫停的任務繼續。
icloser task retry <id>同一條任務(id 不變)放回佇列重跑。它會真的起 Runtime,消耗你自己的模型額度。
icloser task recover <id>把一條卡住的認領交還佇列。沒人在管它了的時候用這條 —— 見上面那一節。
icloser task followup <id> "你要補充的話"同一條任務追加指令,不是新開一條。執行體會帶著它接著做。
icloser task accept <id>確認這份交付。這是整條鏈路上屬於人的那一下。
icloser task choose <id> <你選的那一項>回答一條停下來問你「走哪條路」的任務。你的選擇寫回同一條任務並續跑。
icloser task archive <id>把它挪開。什麼都沒銷毀。
icloser task unarchive <id>把封存的任務放回列表。
icloser task delete <id> --yes
--yes
從列表裡徹底消失 —— --all 也找不回來

表往旁邊拉 →

除了 retry(它真的會重跑),這些都不問任何 Runtime —— 其餘只是把任務在狀態之間挪一下。
還是卡住?支援 —— 怎麼找到人。