@songsid/agend 2.1.4-beta.2 → 2.1.4-beta.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent-endpoint.js +1 -1
- package/dist/agent-endpoint.js.map +1 -1
- package/dist/backend/antigravity.d.ts +1 -0
- package/dist/backend/antigravity.js +4 -0
- package/dist/backend/antigravity.js.map +1 -1
- package/dist/backend/claude-code.js +23 -2
- package/dist/backend/claude-code.js.map +1 -1
- package/dist/backend/codex.d.ts +17 -0
- package/dist/backend/codex.js +122 -7
- package/dist/backend/codex.js.map +1 -1
- package/dist/backend/kiro.d.ts +1 -0
- package/dist/backend/kiro.js +14 -0
- package/dist/backend/kiro.js.map +1 -1
- package/dist/backend/opencode.d.ts +27 -11
- package/dist/backend/opencode.js +48 -37
- package/dist/backend/opencode.js.map +1 -1
- package/dist/backend/types.d.ts +14 -0
- package/dist/backend/types.js +7 -0
- package/dist/backend/types.js.map +1 -1
- package/dist/channel/adapters/discord.js +72 -25
- package/dist/channel/adapters/discord.js.map +1 -1
- package/dist/channel/adapters/telegram.js +5 -3
- package/dist/channel/adapters/telegram.js.map +1 -1
- package/dist/channel/mcp-server.js +6 -20
- package/dist/channel/mcp-server.js.map +1 -1
- package/dist/channel/mcp-tools.js +4 -2
- package/dist/channel/mcp-tools.js.map +1 -1
- package/dist/channel/types.d.ts +1 -1
- package/dist/classic-channel-manager.d.ts +40 -3
- package/dist/classic-channel-manager.js +218 -31
- package/dist/classic-channel-manager.js.map +1 -1
- package/dist/cli.js +159 -36
- package/dist/cli.js.map +1 -1
- package/dist/completion-install.d.ts +70 -0
- package/dist/completion-install.js +152 -0
- package/dist/completion-install.js.map +1 -0
- package/dist/completion.d.ts +7 -1
- package/dist/completion.js +14 -4
- package/dist/completion.js.map +1 -1
- package/dist/config-validator.js +38 -7
- package/dist/config-validator.js.map +1 -1
- package/dist/config.d.ts +2 -0
- package/dist/config.js +10 -1
- package/dist/config.js.map +1 -1
- package/dist/daemon.d.ts +171 -5
- package/dist/daemon.js +696 -82
- package/dist/daemon.js.map +1 -1
- package/dist/doctor.d.ts +26 -0
- package/dist/doctor.js +216 -0
- package/dist/doctor.js.map +1 -0
- package/dist/fleet-context.d.ts +14 -0
- package/dist/fleet-manager.d.ts +231 -10
- package/dist/fleet-manager.js +1798 -493
- package/dist/fleet-manager.js.map +1 -1
- package/dist/fleet-yaml-slim.d.ts +10 -0
- package/dist/fleet-yaml-slim.js +59 -0
- package/dist/fleet-yaml-slim.js.map +1 -0
- package/dist/general-knowledge/skills/backend-providers/SKILL.md +114 -0
- package/dist/general-knowledge/skills/cross-instance-messaging/SKILL.md +3 -1
- package/dist/general-knowledge/skills/delegation-playbook/SKILL.md +52 -0
- package/dist/general-knowledge/skills/development-workflow/SKILL.md +28 -0
- package/dist/general-knowledge/skills/fleet-config/SKILL.md +1 -0
- package/dist/general-knowledge/skills/fleet-health/SKILL.md +1 -0
- package/dist/general-knowledge/skills/fleet-restart/SKILL.md +1 -0
- package/dist/general-knowledge/skills/instance-lifecycle/SKILL.md +1 -0
- package/dist/general-knowledge/skills/model-discovery/SKILL.md +64 -16
- package/dist/general-knowledge/skills/multi-channel/SKILL.md +1 -0
- package/dist/general-knowledge/skills/scheduling/SKILL.md +1 -0
- package/dist/general-knowledge/skills/session-management/SKILL.md +1 -0
- package/dist/general-knowledge/skills/tui-effort/SKILL.md +1 -0
- package/dist/general-knowledge/skills/worker-collaboration/SKILL.md +30 -0
- package/dist/instance-lifecycle.d.ts +8 -0
- package/dist/instance-lifecycle.js +46 -25
- package/dist/instance-lifecycle.js.map +1 -1
- package/dist/instructions.d.ts +12 -0
- package/dist/instructions.js +33 -0
- package/dist/instructions.js.map +1 -1
- package/dist/locale.js +656 -220
- package/dist/locale.js.map +1 -1
- package/dist/outbound-handlers.d.ts +8 -0
- package/dist/outbound-handlers.js +44 -5
- package/dist/outbound-handlers.js.map +1 -1
- package/dist/outbound-schemas.d.ts +5 -0
- package/dist/outbound-schemas.js +7 -0
- package/dist/outbound-schemas.js.map +1 -1
- package/dist/quickstart.js +25 -0
- package/dist/quickstart.js.map +1 -1
- package/dist/restart-progress.d.ts +9 -1
- package/dist/restart-progress.js +30 -6
- package/dist/restart-progress.js.map +1 -1
- package/dist/scheduler/db.d.ts +5 -0
- package/dist/scheduler/db.js +35 -0
- package/dist/scheduler/db.js.map +1 -1
- package/dist/service-installer.d.ts +11 -0
- package/dist/service-installer.js +84 -18
- package/dist/service-installer.js.map +1 -1
- package/dist/settings-api.js +1 -1
- package/dist/settings-api.js.map +1 -1
- package/dist/tips.d.ts +39 -0
- package/dist/tips.js +351 -0
- package/dist/tips.js.map +1 -0
- package/dist/tool-progress.d.ts +40 -0
- package/dist/tool-progress.js +289 -0
- package/dist/tool-progress.js.map +1 -0
- package/dist/topic-commands.d.ts +28 -4
- package/dist/topic-commands.js +217 -65
- package/dist/topic-commands.js.map +1 -1
- package/dist/transcript-monitor.d.ts +15 -2
- package/dist/transcript-monitor.js +63 -17
- package/dist/transcript-monitor.js.map +1 -1
- package/dist/transcript-sources.d.ts +106 -0
- package/dist/transcript-sources.js +428 -0
- package/dist/transcript-sources.js.map +1 -0
- package/dist/types.d.ts +11 -0
- package/dist/ui/dashboard.html +55 -32
- package/dist/ui/settings.html +120 -51
- package/dist/ui/view.html +23 -15
- package/dist/update-marker.d.ts +30 -0
- package/dist/update-marker.js +71 -20
- package/dist/update-marker.js.map +1 -1
- package/dist/update-progress.d.ts +6 -0
- package/dist/update-progress.js +29 -0
- package/dist/update-progress.js.map +1 -0
- package/dist/usage/usage-api.d.ts +8 -2
- package/dist/usage/usage-api.js +24 -3
- package/dist/usage/usage-api.js.map +1 -1
- package/dist/workflow-templates/default.md +2 -1
- package/package.json +1 -1
package/dist/tips.js
ADDED
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
import { Cron } from "croner";
|
|
2
|
+
export const ADVANCED_TIP_UNLOCK_THRESHOLD = 30;
|
|
3
|
+
export const TIPS = [
|
|
4
|
+
// ── Beginner: mobile-first onboarding (100) ───────────────────────────
|
|
5
|
+
{ id: "tip-001", level: "beginner", text_en: "Send a message to an AI assistant in Telegram or Discord just as you would in any other chat.", text_zh: "在 Telegram 或 Discord 傳訊息給 AI 助手,操作方式和一般聊天相同。" },
|
|
6
|
+
{ id: "tip-002", level: "beginner", text_en: "Start with the outcome you want, then add the details the assistant needs.", text_zh: "可先說明希望得到的結果,再補上 AI 助手需要的細節。" },
|
|
7
|
+
{ id: "tip-003", level: "beginner", text_en: "A clear request can include the goal, important limits, and the preferred answer format.", text_zh: "清楚的需求可包含目標、重要限制,以及希望的回答格式。" },
|
|
8
|
+
{ id: "tip-004", level: "beginner", text_en: "If wording matters, include a short example of what a good answer should look like.", text_zh: "在意措辭時,可附上一小段理想回答的範例。" },
|
|
9
|
+
{ id: "tip-005", level: "beginner", text_en: "Say which details must not be changed when asking the assistant to revise something.", text_zh: "請 AI 助手修改內容時,可說明哪些細節不能更動。" },
|
|
10
|
+
{ id: "tip-006", level: "beginner", text_en: "For a long request, separate the must-have items from the optional ones.", text_zh: "需求較長時,可把必要項目與可選項目分開列出。" },
|
|
11
|
+
{ id: "tip-007", level: "beginner", text_en: "If a task has a deadline, state the date and time zone clearly.", text_zh: "工作有期限時,請清楚寫出日期與時區。" },
|
|
12
|
+
{ id: "tip-008", level: "beginner", text_en: "A longer task may take time. A delayed reply alone does not mean the message was lost.", text_zh: "較長的工作可能需要一些時間;回覆較慢不代表訊息已遺失。" },
|
|
13
|
+
{ id: "tip-009", level: "beginner", text_en: "When the Cancel button appears, tap it to stop the work currently in progress.", text_zh: "看到取消按鈕時,可按下它停止目前正在進行的工作。" },
|
|
14
|
+
{ id: "tip-010", level: "beginner", text_en: "Use `/cancel` when you prefer typing a command instead of tapping the Cancel button.", text_zh: "不方便按取消按鈕時,可輸入 `/cancel` 停止目前工作。" },
|
|
15
|
+
{ id: "tip-011", level: "beginner", text_en: "Cancel also discards older messages that are still waiting to be delivered to that assistant.", text_zh: "按下取消時,也會丟棄先前仍在等待送出的訊息。" },
|
|
16
|
+
{ id: "tip-012", level: "beginner", text_en: "A message sent after Cancel is treated as a new request and is not discarded with older waiting messages.", text_zh: "取消後才送出的訊息會視為新需求,不會和先前等待中的訊息一起被丟棄。" },
|
|
17
|
+
{ id: "tip-013", level: "beginner", text_en: "If an answer is going in the wrong direction, send a short correction instead of repeating the whole request.", text_zh: "發現回答方向偏離時,可直接補充簡短修正,不必重貼整份需求。" },
|
|
18
|
+
{ id: "tip-014", level: "beginner", text_en: "Where available, `/steer <message>` adjusts work already in progress without starting the request over.", text_zh: "在可使用的聊天室中,`/steer <訊息>` 可調整正在進行的工作,不必從頭重來。" },
|
|
19
|
+
{ id: "tip-015", level: "beginner", text_en: "Use a steering message for a change of direction, not for an unrelated new task.", text_zh: "調整方向的訊息適合修正目前工作,不適合加入無關的新任務。" },
|
|
20
|
+
{ id: "tip-016", level: "beginner", text_en: "Reply to an earlier chat message when the assistant needs to know exactly which message you mean.", text_zh: "需要指出特定內容時,可直接回覆較早的聊天訊息,讓 AI 助手知道所指的是哪一則。" },
|
|
21
|
+
{ id: "tip-017", level: "beginner", text_en: "When you reply to a message, its quoted text is included with the new request.", text_zh: "回覆某則訊息時,被引用的文字會和新需求一起送出。" },
|
|
22
|
+
{ id: "tip-018", level: "beginner", text_en: "Add a short note explaining why the quoted message matters to the new request.", text_zh: "引用舊訊息時,可補一句說明它與新需求的關係。" },
|
|
23
|
+
{ id: "tip-019", level: "beginner", text_en: "If several requests depend on one another, sending them as one clear message can reduce confusion.", text_zh: "多個需求彼此相關時,整理成一則清楚的訊息可減少混淆。" },
|
|
24
|
+
{ id: "tip-020", level: "beginner", text_en: "If requests are unrelated, send them separately so each answer has a clear purpose.", text_zh: "需求彼此無關時,可分開傳送,讓每份回答都有明確目的。" },
|
|
25
|
+
{ id: "tip-021", level: "beginner", text_en: "AgEnD is the system that connects your Telegram or Discord chats to AI assistants.", text_zh: "AgEnD 是把 Telegram 或 Discord 聊天室連接到 AI 助手的系統。" },
|
|
26
|
+
{ id: "tip-022", level: "beginner", text_en: "AgEnD uses ⏳ to show that a message is waiting to be delivered.", text_zh: "AgEnD 會用 ⏳ 表示訊息正在等待送出。" },
|
|
27
|
+
{ id: "tip-023", level: "beginner", text_en: "AgEnD uses 👀 to show that the assistant has received the message.", text_zh: "AgEnD 會用 👀 表示 AI 助手已收到訊息。" },
|
|
28
|
+
{ id: "tip-024", level: "beginner", text_en: "AgEnD uses ✅ to show that this request was accepted.", text_zh: "AgEnD 會用 ✅ 表示這次任務已被接受。" },
|
|
29
|
+
{ id: "tip-025", level: "beginner", text_en: "AgEnD uses ❌ when a message could not be delivered.", text_zh: "AgEnD 會用 ❌ 表示訊息未能送達。" },
|
|
30
|
+
{ id: "tip-026", level: "beginner", text_en: "The delivery symbols belong to AgEnD, so they may appear before the assistant writes a reply.", text_zh: "投遞狀態符號由 AgEnD 顯示,因此可能在 AI 助手回覆前先出現。" },
|
|
31
|
+
{ id: "tip-027", level: "beginner", text_en: "Avoid sending the same request repeatedly while it is marked ⏳; it may simply be waiting its turn.", text_zh: "訊息仍標示 ⏳ 時,先不要連續重送;它可能只是在等待處理。" },
|
|
32
|
+
{ id: "tip-028", level: "beginner", text_en: "If a message shows ❌, check whether the assistant is available before sending it again.", text_zh: "訊息顯示 ❌ 時,建議先確認 AI 助手是否可用,再決定是否重送。" },
|
|
33
|
+
{ id: "tip-029", level: "beginner", text_en: "A busy assistant may hold incoming messages briefly and handle them after the current step.", text_zh: "AI 助手忙碌時,後續訊息可能暫時等待,並在目前步驟後處理。" },
|
|
34
|
+
{ id: "tip-030", level: "beginner", text_en: "Duplicate requests can produce duplicate work, so resend only after checking the delivery symbol.", text_zh: "重複送出可能造成重複工作,因此重送前請先查看投遞狀態符號。" },
|
|
35
|
+
{ id: "tip-031", level: "beginner", text_en: "Attach a photo or file to the same message as your instructions so the assistant receives both together.", text_zh: "可把圖片或檔案和說明放在同一則訊息中,讓 AI 助手一起收到。" },
|
|
36
|
+
{ id: "tip-032", level: "beginner", text_en: "For image questions, say what should be checked instead of sending only the picture.", text_zh: "詢問圖片內容時,建議同時說明要檢查什麼,不要只傳圖片。" },
|
|
37
|
+
{ id: "tip-033", level: "beginner", text_en: "For a document, mention the page, section, or question that deserves attention.", text_zh: "傳送文件時,可指出要留意的頁面、段落或問題。" },
|
|
38
|
+
{ id: "tip-034", level: "beginner", text_en: "If several files are attached, explain what each file is for.", text_zh: "一次附上多個檔案時,可說明每個檔案的用途。" },
|
|
39
|
+
{ id: "tip-035", level: "beginner", text_en: "On supported Discord replies, pictures from the quoted message are included for the assistant to inspect.", text_zh: "在支援的 Discord 回覆中,被引用訊息裡的圖片也會一併交給 AI 助手查看。" },
|
|
40
|
+
{ id: "tip-036", level: "beginner", text_en: "A pasted image link is still a link; include the image as an attachment when the assistant must inspect the file itself.", text_zh: "貼上的圖片網址仍是網址;需要 AI 助手查看圖片檔本身時,請把圖片附加到訊息。" },
|
|
41
|
+
{ id: "tip-037", level: "beginner", text_en: "A Telegram voice message is passed to the assistant as audio.", text_zh: "Telegram 語音訊息會以音訊形式交給 AI 助手。" },
|
|
42
|
+
{ id: "tip-038", level: "beginner", text_en: "If speech-to-text has been enabled, a Telegram voice message also includes a written transcript.", text_zh: "若已啟用語音轉文字,Telegram 語音訊息也會附上文字稿。" },
|
|
43
|
+
{ id: "tip-039", level: "beginner", text_en: "For names or numbers in a voice message, repeat them in text when exact spelling matters.", text_zh: "語音訊息中若有姓名或數字,且拼寫必須精確,建議再用文字補充。" },
|
|
44
|
+
{ id: "tip-040", level: "beginner", text_en: "A Telegram sticker is delivered as its emoji when available.", text_zh: "Telegram 貼圖若有對應表情,會以該表情送給 AI 助手。" },
|
|
45
|
+
{ id: "tip-041", level: "beginner", text_en: "A Telegram sticker without an emoji is shown to the assistant as `[Sticker]`.", text_zh: "Telegram 貼圖沒有對應表情時,會以 `[Sticker]` 顯示給 AI 助手。" },
|
|
46
|
+
{ id: "tip-042", level: "beginner", text_en: "Use words instead of only a reaction when the assistant must act on an important instruction.", text_zh: "需要 AI 助手執行重要指示時,請使用文字,不要只用表情回應。" },
|
|
47
|
+
{ id: "tip-043", level: "beginner", text_en: "In a chat shared by several bots, mention the bot you want so the intended assistant receives the message.", text_zh: "多個 bot 共用同一聊天室時,請標記想使用的 bot,讓正確的 AI 助手收到訊息。" },
|
|
48
|
+
{ id: "tip-044", level: "beginner", text_en: "When asking a follow-up question, say whether the earlier answer should be revised or only explained.", text_zh: "提出後續問題時,可說明要修改先前回答,或只是進一步解釋。" },
|
|
49
|
+
{ id: "tip-045", level: "beginner", text_en: "Ask for a short progress update when you need reassurance during a long task.", text_zh: "長時間工作中需要確認狀況時,可請 AI 助手提供簡短進度。" },
|
|
50
|
+
{ id: "tip-046", level: "beginner", text_en: "If the assistant asks a question, answer the missing point directly before adding a new request.", text_zh: "AI 助手提出問題時,可先直接回答缺少的資訊,再加入新需求。" },
|
|
51
|
+
{ id: "tip-047", level: "beginner", text_en: "If you change your mind, say which earlier instruction should be replaced.", text_zh: "改變決定時,請說明要取代哪一項先前指示。" },
|
|
52
|
+
{ id: "tip-048", level: "beginner", text_en: "For a correction, quote the exact sentence or value that should change.", text_zh: "需要更正時,可引用要修改的句子或數值。" },
|
|
53
|
+
{ id: "tip-049", level: "beginner", text_en: "Before sending a very long message, place the main request in the first few lines.", text_zh: "傳送很長的訊息前,可把主要需求放在最前面幾行。" },
|
|
54
|
+
{ id: "tip-050", level: "beginner", text_en: "At the end of a long discussion, ask for a concise summary of decisions and unfinished items.", text_zh: "長時間討論結束時,可請 AI 助手整理決定事項與尚未完成的項目。" },
|
|
55
|
+
{ id: "tip-051", level: "beginner", text_en: "An AI model is the version of intelligence used to answer; when no choice is made, the account usually uses its usual default.", text_zh: "AI 模型是用來回答的智慧版本;未特別選擇時,帳號通常會使用原本的預設值。" },
|
|
56
|
+
{ id: "tip-052", level: "beginner", text_en: "Different AI models can vary in speed, reasoning style, and available features.", text_zh: "不同 AI 模型在速度、推理方式與可用功能上可能有所差異。" },
|
|
57
|
+
{ id: "tip-053", level: "beginner", text_en: "If a chosen AI model is unavailable, the service may reject it instead of silently choosing another one.", text_zh: "所選 AI 模型無法使用時,服務可能直接拒絕,而不是默默改用另一個模型。" },
|
|
58
|
+
{ id: "tip-054", level: "beginner", text_en: "An AI engine is the service that runs an assistant; an unsupported-model message means that service or account cannot use the selected model.", text_zh: "AI 引擎是執行 AI 助手的服務;模型不支援的訊息表示該服務或帳號無法使用所選模型。" },
|
|
59
|
+
{ id: "tip-055", level: "beginner", text_en: "Different AI engines may offer different commands and models.", text_zh: "不同 AI 引擎可提供不同的指令與模型。" },
|
|
60
|
+
{ id: "tip-056", level: "beginner", text_en: "Some commands are not available with every AI engine; an unsupported message is expected when a feature is absent.", text_zh: "部分指令並非每種 AI 引擎都支援;功能不存在時,收到不支援訊息是正常情況。" },
|
|
61
|
+
{ id: "tip-057", level: "beginner", text_en: "Reasoning strength means how much effort an AI may spend thinking through a request; stronger levels can take longer.", text_zh: "推理強度是 AI 可投入多少心力思考需求;較高強度可能需要更久時間。" },
|
|
62
|
+
{ id: "tip-058", level: "beginner", text_en: "Not every AI model offers the same reasoning-strength choices.", text_zh: "不同 AI 模型不一定提供相同的推理強度選項。" },
|
|
63
|
+
{ id: "tip-059", level: "beginner", text_en: "Quota means the amount of AI service use included with an account or subscription.", text_zh: "額度是帳號或訂閱方案所包含的 AI 服務使用量。" },
|
|
64
|
+
{ id: "tip-060", level: "beginner", text_en: "Use `/usage` to view the quota information that currently used AI services make available.", text_zh: "可用 `/usage` 查看目前使用中的 AI 服務所提供的額度資訊。" },
|
|
65
|
+
{ id: "tip-061", level: "beginner", text_en: "A service may show no quota data when the account is signed out or the service does not provide that information.", text_zh: "帳號未登入或服務未提供相關資訊時,額度可能顯示為無資料。" },
|
|
66
|
+
{ id: "tip-062", level: "beginner", text_en: "Quota information can be delayed briefly while sign-in details are renewed.", text_zh: "登入資料更新期間,額度資訊可能短暫延遲。" },
|
|
67
|
+
{ id: "tip-063", level: "beginner", text_en: "A quota warning does not always stop the current answer, but future requests may need another available model.", text_zh: "額度警告不一定會中止目前回答,但後續需求可能需要改用其他可用模型。" },
|
|
68
|
+
{ id: "tip-064", level: "beginner", text_en: "Conversation space means how much of the current discussion the AI can keep readily available while answering.", text_zh: "對話空間是 AI 回答時能隨時保留多少目前討論內容。" },
|
|
69
|
+
{ id: "tip-065", level: "beginner", text_en: "Use `/ctx` to view available conversation-space information when the selected AI engine can report it.", text_zh: "所選 AI 引擎能提供相關資料時,可用 `/ctx` 查看對話空間資訊。" },
|
|
70
|
+
{ id: "tip-066", level: "beginner", text_en: "A missing conversation-space percentage is not necessarily an error; some AI engines do not report one.", text_zh: "沒有對話空間百分比不一定代表錯誤;部分 AI 引擎不會提供此數值。" },
|
|
71
|
+
{ id: "tip-067", level: "beginner", text_en: "Use `/compact` when a long discussion needs to be shortened while retaining useful information where possible.", text_zh: "對話過長時,可用 `/compact` 嘗試縮短內容並保留有用資訊。" },
|
|
72
|
+
{ id: "tip-068", level: "beginner", text_en: "The effect of `/compact` varies by AI engine; some shorten the discussion while others may clear it.", text_zh: "`/compact` 的效果會依 AI 引擎而異;有些會縮短討論,有些則可能清除內容。" },
|
|
73
|
+
{ id: "tip-069", level: "beginner", text_en: "A saved conversation is a copy kept for later reference; `/save <name>` works only where the selected AI engine supports it.", text_zh: "已儲存對話是留供日後查看的副本;只有所選 AI 引擎支援時,`/save <名稱>` 才能使用。" },
|
|
74
|
+
{ id: "tip-070", level: "beginner", text_en: "If `/save` is unavailable, ask the assistant for a summary that can be copied into personal notes.", text_zh: "無法使用 `/save` 時,可請 AI 助手整理摘要,再複製到自己的筆記。" },
|
|
75
|
+
{ id: "tip-071", level: "beginner", text_en: "General is the coordinating assistant that can help choose another assistant for a request.", text_zh: "General 是負責協調的 AI 助手,可協助為需求選擇另一位助手。" },
|
|
76
|
+
{ id: "tip-072", level: "beginner", text_en: "Ask General to split independent parts of a large request among several assistants.", text_zh: "大型需求有互不相依的部分時,可請 General 分給多位 AI 助手處理。" },
|
|
77
|
+
{ id: "tip-073", level: "beginner", text_en: "Parallel help means several assistants work at the same time and General gathers their results.", text_zh: "平行協助是由多位 AI 助手同時工作,再由 General 彙整結果。" },
|
|
78
|
+
{ id: "tip-074", level: "beginner", text_en: "A separate assistant keeps a separate conversation, which can reduce unrelated information mixing together.", text_zh: "另一位 AI 助手會保有另一份對話,可減少不相關資訊混在一起。" },
|
|
79
|
+
{ id: "tip-075", level: "beginner", text_en: "Separate assistants do not automatically know one another's complete discussion history.", text_zh: "不同 AI 助手不會自動知道彼此的完整討論歷程。" },
|
|
80
|
+
{ id: "tip-076", level: "beginner", text_en: "When work moves to another assistant, include the goal, current result, and important limits.", text_zh: "把工作交給另一位 AI 助手時,應附上目標、目前結果與重要限制。" },
|
|
81
|
+
{ id: "tip-077", level: "beginner", text_en: "Several assistants can work at once, but changes to the same files still need coordination.", text_zh: "多位 AI 助手可以同時工作,但若會修改相同檔案,仍需要協調。" },
|
|
82
|
+
{ id: "tip-078", level: "beginner", text_en: "For an important change, ask one assistant to do the work and another to review the result.", text_zh: "重要變更可請一位 AI 助手處理,再請另一位檢查結果。" },
|
|
83
|
+
{ id: "tip-079", level: "beginner", text_en: "A paused assistant is temporarily asleep but keeps saved information for a later return.", text_zh: "已暫停的 AI 助手是暫時休息,仍會保留之後恢復所需的已存資料。" },
|
|
84
|
+
{ id: "tip-080", level: "beginner", text_en: "Sending a message to a paused assistant begins waking it automatically.", text_zh: "傳訊息給已暫停的 AI 助手時,系統會自動開始喚醒。" },
|
|
85
|
+
{ id: "tip-081", level: "beginner", text_en: "Waking can take a little time while the assistant restores its working state.", text_zh: "喚醒時需要一些時間,讓 AI 助手恢復工作狀態。" },
|
|
86
|
+
{ id: "tip-082", level: "beginner", text_en: "Working means the assistant is handling a request; idle means it appears ready for another one.", text_zh: "工作中表示 AI 助手正在處理需求;閒置表示它看起來已準備好接受下一項需求。" },
|
|
87
|
+
{ id: "tip-083", level: "beginner", text_en: "Stopped means an assistant ended normally; crashed means it ended unexpectedly or could not recover after repeated attempts.", text_zh: "已停止表示 AI 助手正常結束;已故障表示它意外結束,或多次嘗試後仍無法恢復。" },
|
|
88
|
+
{ id: "tip-084", level: "beginner", text_en: "If one assistant appears unhealthy, tell General its name and what you observed.", text_zh: "單一 AI 助手看起來異常時,可把名稱與觀察到的情況告訴 General。" },
|
|
89
|
+
{ id: "tip-085", level: "beginner", text_en: "A progress history is a short list of actions shown while an assistant works.", text_zh: "進度歷程是 AI 助手工作時顯示的簡短動作清單。" },
|
|
90
|
+
{ id: "tip-086", level: "beginner", text_en: "When progress history is available, it may remain after the Cancel button disappears so it can be reviewed later.", text_zh: "有進度歷程時,取消按鈕消失後,歷程可能仍會保留供日後查看。" },
|
|
91
|
+
{ id: "tip-087", level: "beginner", text_en: "Detailed progress may include command previews, so avoid sharing screenshots before checking for private information.", text_zh: "詳細進度可能包含指令預覽,因此分享截圖前應先檢查是否有私密資訊。" },
|
|
92
|
+
{ id: "tip-088", level: "beginner", text_en: "An interactive prompt is a question that waits for a password, permission, or confirmation before work can continue.", text_zh: "互動提示是等待密碼、權限或確認的問題,回答後工作才能繼續。" },
|
|
93
|
+
{ id: "tip-089", level: "beginner", text_en: "AgEnD does not type passwords automatically; a person must decide how to handle an interactive prompt.", text_zh: "AgEnD 不會自動輸入密碼,互動提示必須由人判斷如何處理。" },
|
|
94
|
+
{ id: "tip-090", level: "beginner", text_en: "Review any password, permission, or confirmation request before approving it.", text_zh: "遇到密碼、權限或確認要求時,應先檢查內容再決定是否允許。" },
|
|
95
|
+
{ id: "tip-091", level: "beginner", text_en: "If sign-in expires, complete the requested sign-in again before expecting normal replies.", text_zh: "登入狀態過期時,需先重新完成登入,再等待正常回覆。" },
|
|
96
|
+
{ id: "tip-092", level: "beginner", text_en: "A problem report is easier to investigate when it includes the time, assistant name, request, and unexpected result.", text_zh: "問題回報若包含時間、AI 助手名稱、需求與非預期結果,通常更容易查明原因。" },
|
|
97
|
+
{ id: "tip-093", level: "beginner", text_en: "A screenshot of the live work screen on the View page can help explain a prompt or a message that appears stuck.", text_zh: "遇到提示或訊息卡住時,View 頁面的即時工作畫面截圖有助於說明情況。" },
|
|
98
|
+
{ id: "tip-094", level: "beginner", text_en: "Before sharing a chat export or screenshot, check it for names, project details, passwords, and other private information.", text_zh: "分享聊天匯出檔或截圖前,應先檢查姓名、專案細節、密碼及其他私密資訊。" },
|
|
99
|
+
{ id: "tip-095", level: "beginner", text_en: "Use `/tips` to request another available tip at any time.", text_zh: "可隨時輸入 `/tips` 取得另一則可用提示。" },
|
|
100
|
+
{ id: "tip-096", level: "beginner", text_en: "Choose “I know this” on a tip to prevent that same tip from appearing again.", text_zh: "在提示上選擇「我知道了」,可讓同一則提示不再出現。" },
|
|
101
|
+
{ id: "tip-097", level: "beginner", text_en: "Daily tips present short features and habits gradually rather than all at once.", text_zh: "每日提示會逐步介紹功能與使用習慣,不會一次塞入全部內容。" },
|
|
102
|
+
{ id: "tip-098", level: "beginner", text_en: "After enough intermediate tips are marked as known, an option to unlock advanced tips may appear.", text_zh: "標記足夠的中階提示為已知後,可能會出現解鎖進階提示的選項。" },
|
|
103
|
+
{ id: "tip-099", level: "beginner", text_en: "An AI answer can still be mistaken, so verify important facts before acting on them.", text_zh: "AI 回答仍可能有誤,因此重要事實應先確認再採取行動。" },
|
|
104
|
+
{ id: "tip-100", level: "beginner", text_en: "For sensitive work, share only the information the assistant needs to complete the request.", text_zh: "處理敏感工作時,只提供 AI 助手完成需求所需的資訊。" },
|
|
105
|
+
// ── Intermediate: concepts and guided operation (100) ────────────────
|
|
106
|
+
{ id: "tip-101", level: "intermediate", text_en: "An Instance is one independent AI assistant. Each instance keeps its own conversation and can be assigned a different project.", text_zh: "Instance(獨立的 AI 助手)各自保有自己的對話,也可以分別負責不同專案。" },
|
|
107
|
+
{ id: "tip-102", level: "intermediate", text_en: "A Fleet is the group of instances managed together by AgEnD. Fleet-wide actions can affect every running assistant.", text_zh: "Fleet(由 AgEnD 一起管理的一組 AI 助手)可統一執行管理操作;整體操作可能影響所有運行中的助手。" },
|
|
108
|
+
{ id: "tip-103", level: "intermediate", text_en: "General is the coordinator assistant that manages work. Ask General to choose a suitable instance, divide independent tasks, or manage the fleet.", text_zh: "General(協調工作的總管助手)可協助選擇合適的 Instance、拆分互不相依的任務,或管理整個 Fleet。" },
|
|
109
|
+
{ id: "tip-104", level: "intermediate", text_en: "A Backend is the engine that decides which AI service an instance uses, such as Claude Code, Codex, Kiro CLI, Grok, Antigravity, or OpenCode.", text_zh: "Backend(決定 Instance 使用哪種 AI 服務的引擎)可以是 Claude Code、Codex、Kiro CLI、Grok、Antigravity 或 OpenCode。" },
|
|
110
|
+
{ id: "tip-105", level: "intermediate", text_en: "Context is the amount of information the AI can keep from the current conversation. It is limited and is not permanent project storage.", text_zh: "Context(目前對話可保留的資訊量)有容量限制,也不是永久的專案儲存空間。" },
|
|
111
|
+
{ id: "tip-106", level: "intermediate", text_en: "MCP is the channel that lets an AI use reply, file, and collaboration tools. Users normally ask for an outcome rather than operate MCP directly.", text_zh: "MCP(讓 AI 使用回覆、檔案與協作工具的通道)通常不需由使用者直接操作,只要說明預期結果即可。" },
|
|
112
|
+
{ id: "tip-107", level: "intermediate", text_en: "A Model is the particular AI selected inside a backend. Leaving it unset normally uses the fleet or account default.", text_zh: "Model(Backend 內實際選用的 AI 模型)若未指定,通常會沿用 Fleet 或帳號的預設值。" },
|
|
113
|
+
{ id: "tip-108", level: "intermediate", text_en: "A Session is a backend's saved conversation state. Whether it resumes after a restart depends on that backend's session support.", text_zh: "Session(Backend 保存的對話狀態)能否在重啟後延續,取決於該 Backend 的支援方式。" },
|
|
114
|
+
{ id: "tip-109", level: "intermediate", text_en: "A Working directory is the project folder an instance reads and edits. Separate instances may share one, but simultaneous edits can conflict.", text_zh: "Working directory(Instance 讀取與修改的專案資料夾)可以共用,但多個 Instance 同時修改時可能產生衝突。" },
|
|
115
|
+
{ id: "tip-110", level: "intermediate", text_en: "ClassicBot is the mode that creates an ongoing assistant in an ordinary Telegram or Discord conversation, rather than a preconfigured fleet conversation.", text_zh: "ClassicBot(在一般 Telegram 或 Discord 對話中建立持續助手的模式)不需要預先配置 Fleet 對話。" },
|
|
116
|
+
{ id: "tip-111", level: "intermediate", text_en: "An Adapter is AgEnD's connection to one messaging bot account. In a multi-bot setup, an instance can be bound to a specific bot identity.", text_zh: "Adapter(AgEnD 與某個訊息 Bot 帳號的連線)在多 Bot 環境中可讓 Instance 固定使用指定身分回覆。" },
|
|
117
|
+
{ id: "tip-112", level: "intermediate", text_en: "Telegram separates fleet conversations with topics; Discord may use channels or threads. These spaces serve the same routing purpose in AgEnD.", text_zh: "Telegram 以 Topic 分隔 Fleet 對話,Discord 則可能使用 Channel 或 Thread;這些空間在 AgEnD 中都用來把訊息送到正確的 Instance。" },
|
|
118
|
+
{ id: "tip-113", level: "intermediate", text_en: "A Tool is an action an AI can call, such as reading a file or sending a reply. Tool availability depends on the backend and permissions.", text_zh: "Tool(AI 可呼叫的操作,例如讀取檔案或發送回覆)是否可用,取決於 Backend 與權限設定。" },
|
|
119
|
+
{ id: "tip-114", level: "intermediate", text_en: "A delivery queue holds messages until they can safely enter a busy assistant. A queued message is delayed, not necessarily lost.", text_zh: "Delivery queue(等待安全時機送入忙碌助手的訊息佇列)代表訊息延後處理,不一定是遺失。" },
|
|
120
|
+
{ id: "tip-115", level: "intermediate", text_en: "Idle means an instance appears ready for input; Working means AgEnD sees it processing a turn. These states are observations, not guarantees about answer quality.", text_zh: "Idle(看起來可接收輸入)與 Working(偵測到正在處理工作)是 AgEnD 觀察到的狀態,不代表回答品質。" },
|
|
121
|
+
{ id: "tip-116", level: "intermediate", text_en: "Paused means AgEnD intentionally stopped the AI engine while preserving its configuration for a later wake.", text_zh: "Paused(暫停)表示 AgEnD 刻意停止 AI 引擎,但保留設定,之後仍可喚醒。" },
|
|
122
|
+
{ id: "tip-117", level: "intermediate", text_en: "Stopped is an orderly exit; Crashed indicates an unexpected exit or repeated recovery failure. General can help inspect either state.", text_zh: "Stopped(正常停止)與 Crashed(非預期退出或多次恢復失敗)原因不同,可請 General 協助檢查。" },
|
|
123
|
+
{ id: "tip-118", level: "intermediate", text_en: "Settings is the browser editor for common AgEnD options. Hot settings apply immediately; cold settings change startup behavior and restart the affected instance.", text_zh: "Settings(常用設定的網頁編輯器)會即時套用 Hot 設定;Cold 設定會改變啟動方式,因此會重啟受影響的 Instance。" },
|
|
124
|
+
{ id: "tip-119", level: "intermediate", text_en: "View is the browser page that mirrors an instance's live terminal screen. It is useful when a prompt or progress display needs visual inspection.", text_zh: "View(在瀏覽器顯示 Instance 即時終端畫面的頁面)適合查看互動提示或工作進度。" },
|
|
125
|
+
{ id: "tip-120", level: "intermediate", text_en: "A CLI is an AI program that runs from a computer terminal, and a TUI is the text-based screen it displays there. AgEnD sends messages into that screen, which users can inspect through View or from a computer terminal.", text_zh: "CLI(在電腦終端中運行的 AI 程式)會顯示 TUI(以文字構成的操作畫面);AgEnD 會把訊息送進該畫面,使用者可透過 View 或電腦終端查看。" },
|
|
126
|
+
{ id: "tip-121", level: "intermediate", text_en: "Use `/ctx` to check the current instance, backend, model, and available context estimate. Some backends cannot report a percentage.", text_zh: "使用 `/ctx` 可查看目前的 Instance、Backend、Model 與可取得的 Context 估計值;部分 Backend 無法提供百分比。" },
|
|
127
|
+
{ id: "tip-122", level: "intermediate", text_en: "Use `/model` without an argument to open the model selector. Administrators can use `/model <name>` to request a specific model.", text_zh: "不帶參數的 `/model` 會開啟模型選單;管理員可用 `/model <名稱>` 指定模型。" },
|
|
128
|
+
{ id: "tip-123", level: "intermediate", text_en: "AgEnD passes a safely formed model name to the backend even when its local pattern does not recognize it. The backend remains the authority and may reject it.", text_zh: "即使 AgEnD 的本機規則不認得某個格式安全的模型名稱,仍會交給 Backend 判斷;Backend 可能接受,也可能回報不可用。" },
|
|
129
|
+
{ id: "tip-124", level: "intermediate", text_en: "Use `/effort` without an argument to inspect available reasoning levels. Administrators can use `/effort <level>` when the backend and model support that level.", text_zh: "不帶參數的 `/effort` 可查看推理強度選項;管理員可在 Backend 與 Model 支援時使用 `/effort <等級>`。" },
|
|
130
|
+
{ id: "tip-125", level: "intermediate", text_en: "Reasoning effort changes how much work a supported model spends thinking; it does not change the backend or guarantee a better answer.", text_zh: "Reasoning effort(推理強度)會調整支援模型投入思考的程度,不會切換 Backend,也不保證答案一定更好。" },
|
|
131
|
+
{ id: "tip-126", level: "intermediate", text_en: "Use `/compact` when the context is crowded but the conversation should continue. Backend behavior differs; Antigravity maps this action to a full clear.", text_zh: "Context 擁擠但仍要延續對話時可用 `/compact`;各 Backend 行為不同,Antigravity 會改為完整清除。" },
|
|
132
|
+
{ id: "tip-127", level: "intermediate", text_en: "Use `/clear` to reset the conversation on a supported backend. It is administrator-only and asks for confirmation because prior context is removed.", text_zh: "支援的 Backend 可用 `/clear` 重設對話;此指令限管理員使用,且因先前 Context 會被移除而需要再次確認。" },
|
|
133
|
+
{ id: "tip-128", level: "intermediate", text_en: "Use `/cancel` or the Cancel button to interrupt the current turn. It also discards messages queued before the cancellation, but keeps messages arriving afterward.", text_zh: "使用 `/cancel` 或取消按鈕可中斷目前回合;按下前排隊的訊息會被丟棄,之後到達的新訊息則會保留。" },
|
|
134
|
+
{ id: "tip-129", level: "intermediate", text_en: "Use `/pause` on an idle non-General instance to save resources. General cannot be paused because fleet coordination must remain available.", text_zh: "可對 Idle 且非 General 的 Instance 使用 `/pause` 以節省資源;General 必須維持協調能力,因此不能暫停。" },
|
|
135
|
+
{ id: "tip-130", level: "intermediate", text_en: "Use `/wake` to start a paused instance immediately. Sending a normal message to a paused instance can also begin its wake process.", text_zh: "使用 `/wake` 可立即啟動 Paused Instance;傳送一般訊息也能觸發喚醒流程。" },
|
|
136
|
+
{ id: "tip-131", level: "intermediate", text_en: "Use `/restart` only when the entire fleet should restart. Ask General for an instance-specific restart when one assistant is unhealthy.", text_zh: "只有整個 Fleet 都需要重啟時才使用 `/restart`;若只有一個助手異常,應請 General 單獨重啟該 Instance。" },
|
|
137
|
+
{ id: "tip-132", level: "intermediate", text_en: "Use `/update` after active work reaches a safe point. Updating installs the selected AgEnD release and then restarts the fleet.", text_zh: "應等進行中的工作到達安全點後再用 `/update`;更新會安裝選定的 AgEnD 版本,接著重啟整個 Fleet。" },
|
|
138
|
+
{ id: "tip-133", level: "intermediate", text_en: "Use `/usage` to view available subscription metrics for backends used by running or paused instances. No data can mean unavailable telemetry, not zero usage.", text_zh: "使用 `/usage` 可查看 Running 或 Paused Instance 所用 Backend 的訂閱資料;無資料可能代表無法取得統計,不等於用量為零。" },
|
|
139
|
+
{ id: "tip-134", level: "intermediate", text_en: "Use `/dashboard` to obtain current View and Settings links. Links containing an access token should be treated like a password and not shared publicly.", text_zh: "使用 `/dashboard` 可取得目前的 View 與 Settings 連結;含存取 Token 的連結應視同密碼,不要公開分享。" },
|
|
140
|
+
{ id: "tip-135", level: "intermediate", text_en: "Use `/status` for an administrator-only fleet summary, including running, paused, stopped, and crashed instances.", text_zh: "管理員可用 `/status` 查看 Fleet 摘要,包括 Running、Paused、Stopped 與 Crashed Instance。" },
|
|
141
|
+
{ id: "tip-136", level: "intermediate", text_en: "Use `/sysinfo` to collect host and version details for an environment-specific problem report.", text_zh: "問題可能與執行環境有關時,可用 `/sysinfo` 收集主機與版本資訊。" },
|
|
142
|
+
{ id: "tip-137", level: "intermediate", text_en: "Use `/doctor` in General to check configured AI engines. Run `agend doctor` from a trusted computer terminal for broader service and connection checks.", text_zh: "在 General 使用 `/doctor` 可檢查已設定的 AI 引擎;更完整的服務與連線檢查需從可信任的電腦終端執行 `agend doctor`。" },
|
|
143
|
+
{ id: "tip-138", level: "intermediate", text_en: "Use `/tips` to request another tip, `/tips off` to stop daily delivery, and `/tips on` to enable it again.", text_zh: "使用 `/tips` 可立即查看另一則提示;`/tips off` 可停止每日投遞,`/tips on` 可重新開啟。" },
|
|
144
|
+
{ id: "tip-139", level: "intermediate", text_en: "Use `/steer <message>` to redirect an active turn on Claude Code, Codex, or Grok. Unsupported backends return an explicit message.", text_zh: "使用 `/steer <訊息>` 可在 Claude Code、Codex 或 Grok 工作途中調整方向;不支援的 Backend 會明確回報。" },
|
|
145
|
+
{ id: "tip-140", level: "intermediate", text_en: "Use `/btw <message>` for a side question on Claude Code without asking it to abandon the current task. Other backends report it as unsupported.", text_zh: "使用 `/btw <訊息>` 可向 Claude Code 提出附帶問題,而不要求放棄目前任務;其他 Backend 會回報不支援。" },
|
|
146
|
+
{ id: "tip-141", level: "intermediate", text_en: "From General, administrators can use `/pause <instance>` or `/wake <instance>` to target a named assistant instead of opening its conversation first.", text_zh: "管理員可在 General 使用 `/pause <Instance 名稱>` 或 `/wake <Instance 名稱>`,不必先進入該助手的對話。" },
|
|
147
|
+
{ id: "tip-142", level: "intermediate", text_en: "Use `/save <name>` only with Kiro CLI or Claude Code. Kiro saves a chat and Claude Code exports a Markdown file; other backends report unsupported.", text_zh: "`/save <名稱>` 僅支援 Kiro CLI 與 Claude Code;Kiro 會保存 Chat,Claude Code 會匯出 Markdown,其他 Backend 會回報不支援。" },
|
|
148
|
+
{ id: "tip-143", level: "intermediate", text_en: "In a ClassicBot conversation, `/start` creates or resumes its assistant and `/stop` removes that channel binding. Both are administrator actions.", text_zh: "在 ClassicBot 對話中,管理員可用 `/start` 建立或恢復助手,並用 `/stop` 移除該頻道的綁定。" },
|
|
149
|
+
{ id: "tip-144", level: "intermediate", text_en: "Use `/collab` as an administrator to toggle whether bot messages may participate in a configured fleet conversation. Access rules still apply.", text_zh: "管理員可用 `/collab` 切換 Bot 訊息是否能參與已設定的 Fleet 對話;既有存取規則仍會套用。" },
|
|
150
|
+
{ id: "tip-145", level: "intermediate", text_en: "Settings stages edits until Apply is pressed. Review the pending changes before applying them, especially when a cold field will restart an instance.", text_zh: "Settings 會先暫存修改,按下 Apply 才套用;若 Cold 欄位會重啟 Instance,送出前應先檢查變更內容。" },
|
|
151
|
+
{ id: "tip-146", level: "intermediate", text_en: "Backend is a cold setting. Changing it in Settings selects a different AI engine and restarts the affected instance.", text_zh: "Backend 屬於 Cold 設定;在 Settings 切換 AI 引擎後,受影響的 Instance 會重啟。" },
|
|
152
|
+
{ id: "tip-147", level: "intermediate", text_en: "Working directory is a cold setting. Confirm the destination exists and contains the intended project before applying it in Settings.", text_zh: "Working directory 屬於 Cold 設定;在 Settings 套用前,應確認目標資料夾存在且包含預期專案。" },
|
|
153
|
+
{ id: "tip-148", level: "intermediate", text_en: "Model overrides can be changed with `/model` or Settings. If no override is needed, leave the field unset so normal defaults apply.", text_zh: "Model Override 可透過 `/model` 或 Settings 調整;不需指定時可留空,讓既有預設值生效。" },
|
|
154
|
+
{ id: "tip-149", level: "intermediate", text_en: "Tool progress controls how much live tool history appears under the working message. Choose off, standard, or verbose in Settings; it applies without restarting.", text_zh: "Tool progress(工作訊息下顯示多少工具歷程)可在 Settings 選擇 off、standard 或 verbose,且不需重啟即可生效。" },
|
|
155
|
+
{ id: "tip-150", level: "intermediate", text_en: "Display name changes how an instance is presented without changing its internal name. It is a hot setting in Settings.", text_zh: "Display name(對外顯示名稱)不會改變 Instance 的內部名稱,可在 Settings 即時調整。" },
|
|
156
|
+
{ id: "tip-151", level: "intermediate", text_en: "Description and tags document an instance's responsibility and help General choose it. Both can be edited in Settings without a restart.", text_zh: "Description 與 Tags 可說明 Instance 的責任並協助 General 選擇,兩者都能在 Settings 即時修改。" },
|
|
157
|
+
{ id: "tip-152", level: "intermediate", text_en: "Auto-pause is an optional idle timer. It is disabled when set to zero and can be enabled or adjusted in Settings without restarting the instance.", text_zh: "Auto-pause(閒置後自動暫停的計時)設為 0 時停用,可在 Settings 啟用或調整,且不需重啟 Instance。" },
|
|
158
|
+
{ id: "tip-153", level: "intermediate", text_en: "Warm cap limits how many non-General instances remain active. Ask General to adjust it, or change `defaults.warm_cap` in fleet.yaml under advanced configuration and reload; existing instances do not need to restart.", text_zh: "Warm cap(最多保留多少個非 General Instance 運行)可請 General 協助調整,或在進階設定中修改 fleet.yaml 的 `defaults.warm_cap` 後重新載入;既有 Instance 不需重啟。" },
|
|
159
|
+
{ id: "tip-154", level: "intermediate", text_en: "Log level controls diagnostic detail. It is a hot setting, but more detailed logs may contain project or routing information.", text_zh: "Log level(診斷紀錄的詳細程度)屬於 Hot 設定;較詳細的 Log 也可能包含專案或路由資訊。" },
|
|
160
|
+
{ id: "tip-155", level: "intermediate", text_en: "Channel binding selects which configured bot identity a fleet instance uses. Set it in Settings when several bot accounts share a server or group.", text_zh: "Channel binding(Fleet Instance 固定使用的 Bot 身分)可在 Settings 設定,適合多個 Bot 帳號共用同一伺服器或群組的情況。" },
|
|
161
|
+
{ id: "tip-156", level: "intermediate", text_en: "Kiro UI controls whether Kiro starts with its interactive interface. It is backend-specific and changing it restarts the instance.", text_zh: "Kiro UI(Kiro 是否使用互動畫面)只適用 Kiro;變更後會重啟該 Instance。" },
|
|
162
|
+
{ id: "tip-157", level: "intermediate", text_en: "Terminal columns and rows define the logical screen size seen by the AI engine. Change them cautiously because narrow layouts can hide or wrap permission prompts.", text_zh: "Terminal columns 與 rows(AI 引擎看到的邏輯畫面尺寸)應謹慎調整;過窄的畫面可能讓權限提示換行或漏判。" },
|
|
163
|
+
{ id: "tip-158", level: "intermediate", text_en: "Settings reads effective values after defaults are applied, while saved instance entries can omit repeated defaults. Missing repeated fields are not necessarily lost settings.", text_zh: "Settings 會顯示套用 Defaults 後的有效值;保存時可省略與 Defaults 重複的 Instance 欄位,因此缺少重複欄位不一定代表設定遺失。" },
|
|
164
|
+
{ id: "tip-159", level: "intermediate", text_en: "A Schedule is a message delivered later or repeatedly. Ask General to create it for the instance responsible for the work.", text_zh: "Schedule(稍後或週期性投遞的訊息)可請 General 建立,並指定由負責該工作的 Instance 處理。" },
|
|
165
|
+
{ id: "tip-160", level: "intermediate", text_en: "A recurring schedule uses a cron expression, which describes a pattern such as every day at 09:00. A one-time schedule uses an ISO date and time, such as `2026-08-25T09:00:00+08:00`; use only one form per schedule.", text_zh: "週期排程使用 Cron Expression(描述重複時間的格式),例如每天 09:00;單次排程使用 ISO 日期時間,例如 `2026-08-25T09:00:00+08:00`,每個排程只應選一種。" },
|
|
166
|
+
{ id: "tip-161", level: "intermediate", text_en: "A timezone tells a recurring schedule which local clock to follow. For example, `Asia/Taipei` makes “every day at 09:00” mean 09:00 in Taiwan rather than the server's local time.", text_zh: "Timezone(週期排程依循的當地時鐘)可避免時間誤解;例如 `Asia/Taipei` 會讓「每天 09:00」代表台灣時間 09:00,而不是伺服器所在地時間。" },
|
|
167
|
+
{ id: "tip-162", level: "intermediate", text_en: "A silent schedule hides the trigger message from the conversation, but the assigned assistant may still post a result when the task requires one.", text_zh: "Silent Schedule(不在聊天室顯示觸發文字的排程)仍可能在任務需要時由指定助手回傳結果。" },
|
|
168
|
+
{ id: "tip-163", level: "intermediate", text_en: "A Team is a reusable group of instances for recurring collaboration, such as implementation plus review. Ask General to manage team membership.", text_zh: "Team(可重複使用的 Instance 協作群組)適合固定的實作與審查搭配;成員可請 General 管理。" },
|
|
169
|
+
{ id: "tip-164", level: "intermediate", text_en: "A shared Decision records an agreed fleet-wide choice so assistants can reuse it after restarts. Ask General to record durable architectural decisions.", text_zh: "Shared Decision(讓各助手在重啟後仍可沿用的共同決定)適合記錄長期有效的架構選擇,可請 General 保存。" },
|
|
170
|
+
{ id: "tip-165", level: "intermediate", text_en: "Instances can exchange selected questions and results, but their full conversation histories and project folders are not automatically shared.", text_zh: "Instance 之間可以交換特定問題與結果,但完整對話歷程與專案資料夾不會自動共用。" },
|
|
171
|
+
{ id: "tip-166", level: "intermediate", text_en: "Ask General to parallelize only independent work. Two assistants editing the same files should coordinate ownership or work in separate copies.", text_zh: "只應請 General 平行處理互不相依的工作;若兩個助手會修改相同檔案,應先協調責任或使用不同副本。" },
|
|
172
|
+
{ id: "tip-167", level: "intermediate", text_en: "A sender-side timeout—a notice that waiting for a reply took too long—does not prove a cross-instance message failed. Avoid resending solely because the sender stopped waiting.", text_zh: "發送端 Timeout(等待回覆逾時的提示)不代表跨 Instance 訊息一定失敗;不應只因等待逾時就重複發送。" },
|
|
173
|
+
{ id: "tip-168", level: "intermediate", text_en: "When an assistant waits for a password or confirmation, AgEnD can notify General. Review the visible prompt before authorizing any manual input.", text_zh: "助手等待密碼或確認時,AgEnD 可通知 General;進行任何人工輸入前,都應先檢查畫面上的實際提示。" },
|
|
174
|
+
{ id: "tip-169", level: "intermediate", text_en: "Do not send passwords, access tokens, or private keys through chat. Enter secrets only in a trusted terminal when an authorized prompt requires them.", text_zh: "不要透過聊天室傳送密碼、存取 Token 或私鑰;只有獲准的提示需要時,才在可信任的終端直接輸入。" },
|
|
175
|
+
{ id: "tip-170", level: "intermediate", text_en: "Delivery-status reactions mean ⏳ queued, 👀 delivered, ✅ turn confirmed, and ❌ failed. They describe transport, not whether the answer is correct.", text_zh: "投遞狀態 Reaction 中,⏳ 代表排隊、👀 代表已送達、✅ 代表回合已確認、❌ 代表失敗;它們不評價答案是否正確。" },
|
|
176
|
+
{ id: "tip-171", level: "intermediate", text_en: "Avoid using 👀, ⏳, ✅, or ❌ as ordinary reactions because AgEnD reserves them for delivery status.", text_zh: "一般 Reaction 應避免使用 👀、⏳、✅、❌,因為 AgEnD 會將它們保留給投遞狀態。" },
|
|
177
|
+
{ id: "tip-172", level: "intermediate", text_en: "Replying to an earlier message gives the assistant quoted context. Supported Discord replies can also include images from the referenced message.", text_zh: "回覆較早的訊息時,助手會收到引用內容;支援的 Discord 回覆也能包含被引用訊息中的圖片。" },
|
|
178
|
+
{ id: "tip-173", level: "intermediate", text_en: "Attachments are copied to a local inbox before delivery. The assistant receives a local file path, so sensitive files should be shared only with an appropriate instance.", text_zh: "附件會先複製到本機收件區,再以本機路徑交給助手;敏感檔案只應傳給合適的 Instance。" },
|
|
179
|
+
{ id: "tip-174", level: "intermediate", text_en: "A permission prompt is a safety boundary from the AI engine. Read the requested file or command scope before approving it.", text_zh: "Permission prompt(AI 引擎要求授權的安全關卡)應先確認檔案或指令範圍,再決定是否核准。" },
|
|
180
|
+
{ id: "tip-175", level: "intermediate", text_en: "After thirty intermediate tips are dismissed, AgEnD offers an Advanced Tips unlock button. Advanced tips remain hidden until that button is confirmed.", text_zh: "標記已讀 30 則中階提示後,AgEnD 會提供「開始看進階」按鈕;確認前,進階提示仍保持隱藏。" },
|
|
181
|
+
{ id: "tip-176", level: "intermediate", text_en: "Claude Code supports subagents, which are focused helper AIs inside the same CLI. They can research or review while the main agent coordinates the result.", text_zh: "Claude Code 支援 Subagent(同一個 CLI 內負責特定工作的輔助 AI),可在主助手整合結果時進行研究或審查。" },
|
|
182
|
+
{ id: "tip-177", level: "intermediate", text_en: "Claude Code permission modes decide whether file and command actions are allowed, denied, or require approval. Choose a mode that matches the project's risk.", text_zh: "Claude Code 的 Permission mode(檔案與指令操作的授權方式)可設為允許、拒絕或要求核准,應依專案風險選擇。" },
|
|
183
|
+
{ id: "tip-178", level: "intermediate", text_en: "Claude Code can resume saved sessions, but continuity depends on the same project path and available session data.", text_zh: "Claude Code 可恢復已保存的 Session,但能否延續仍取決於相同的專案路徑與可用 Session 資料。" },
|
|
184
|
+
{ id: "tip-179", level: "intermediate", text_en: "Claude model families usually trade capability, speed, and cost differently. Use the current account selector for exact availability rather than relying on a static list.", text_zh: "Claude 各模型系列通常在能力、速度與成本間有不同取捨;實際可用項目應以目前帳號的選單為準。" },
|
|
185
|
+
{ id: "tip-180", level: "intermediate", text_en: "Opus is generally aimed at demanding work, Sonnet at balanced work, and Haiku at lighter faster work. Current provider documentation remains authoritative.", text_zh: "Opus 通常偏向高難度工作、Sonnet 偏向平衡、Haiku 偏向快速輕量;仍應以供應商最新文件為準。" },
|
|
186
|
+
{ id: "tip-181", level: "intermediate", text_en: "Codex uses a sandbox, which is a boundary around model-generated commands. Sandbox scope and approval policy are separate controls.", text_zh: "Codex 使用 Sandbox(限制模型所產生指令作用範圍的邊界);Sandbox 範圍與核准政策是兩項不同控制。" },
|
|
187
|
+
{ id: "tip-182", level: "intermediate", text_en: "Codex accepts queued input while it is working. Follow-up messages can enter its native queue instead of waiting for an idle gap.", text_zh: "Codex 工作時可接受 Queued input(由 CLI 自己排隊的後續訊息),因此不必等待空閒間隔才送入。" },
|
|
188
|
+
{ id: "tip-183", level: "intermediate", text_en: "Codex Skills are reusable instruction packages discovered when relevant. They keep detailed workflows outside the always-loaded conversation.", text_zh: "Codex Skills(按任務需要載入的可重用指引)可把詳細流程放在平時不必完整載入的位置。" },
|
|
189
|
+
{ id: "tip-184", level: "intermediate", text_en: "A custom provider is an alternate model service configured in Codex. AgEnD can select it, while its URL and credential environment variable remain in Codex configuration.", text_zh: "Custom provider(Codex 中另行設定的模型服務)可由 AgEnD 選用;服務網址與憑證環境變數仍由 Codex 設定管理。" },
|
|
190
|
+
{ id: "tip-185", level: "intermediate", text_en: "Custom Codex models may show a metadata warning because built-in model details are absent. The provider's actual response determines whether the model works.", text_zh: "自訂 Codex Model 可能因缺少內建資料而出現 Metadata Warning;是否可用仍以 Provider 實際回應為準。" },
|
|
191
|
+
{ id: "tip-186", level: "intermediate", text_en: "Kiro Specs are project documents that organize requirements, design, tasks, and execution. They are useful when a feature benefits from an explicit plan.", text_zh: "Kiro Specs(整理需求、設計、任務與執行的專案文件)適合需要明確規劃的功能工作。" },
|
|
192
|
+
{ id: "tip-187", level: "intermediate", text_en: "Kiro Steering files are persistent project guidance. They can keep conventions available without repeating them in every conversation.", text_zh: "Kiro Steering files(持續套用的專案指引)可保存慣例,不必在每次對話重複說明。" },
|
|
193
|
+
{ id: "tip-188", level: "intermediate", text_en: "Kiro Skills use progressive disclosure: the CLI first sees a short description and loads detailed instructions only when relevant.", text_zh: "Kiro Skills 採漸進式載入:CLI 先看到簡短說明,只有任務相關時才讀取詳細指引。" },
|
|
194
|
+
{ id: "tip-189", level: "intermediate", text_en: "Kiro's `auto` model mode lets the CLI choose dynamically. Set `model: auto` explicitly only when it should override a fleet-level model default.", text_zh: "Kiro 的 `auto` 模型模式會讓 CLI 動態選擇;只有要覆寫 Fleet 層級的模型預設時,才需要明確設定 `model: auto`。" },
|
|
195
|
+
{ id: "tip-190", level: "intermediate", text_en: "Grok can provide web search and page retrieval when enabled by the installed CLI, account, and policy. Availability should be checked in the current environment.", text_zh: "Grok 可在已安裝 CLI、帳號與政策允許時提供網頁搜尋與內容擷取;實際可用性應在目前環境確認。" },
|
|
196
|
+
{ id: "tip-191", level: "intermediate", text_en: "Grok supports steering through `/steer`, but its available models and tools can vary by account. Treat the CLI's current list as authoritative.", text_zh: "Grok 支援透過 `/steer` 調整工作方向,但模型與工具可能因帳號而異,應以 CLI 當下顯示的清單為準。" },
|
|
197
|
+
{ id: "tip-192", level: "intermediate", text_en: "OpenCode distinguishes primary agents for main work from subagents for focused tasks. Project configuration can change which agents and permissions are available.", text_zh: "OpenCode 區分處理主要工作的 Primary agent 與專注任務的 Subagent;專案設定可能改變可用 Agent 與權限。" },
|
|
198
|
+
{ id: "tip-193", level: "intermediate", text_en: "OpenCode model names commonly use a provider/model form. Check OpenCode's current model list instead of assuming that a bare model name is accepted.", text_zh: "OpenCode 模型名稱通常採 `provider/model` 格式;應查看目前模型清單,不要假設只填模型名稱就一定可用。" },
|
|
199
|
+
{ id: "tip-194", level: "intermediate", text_en: "OpenCode provider definitions belong in its own configuration. AgEnD selects a model from what OpenCode exposes rather than storing provider credentials.", text_zh: "OpenCode Provider 定義應放在 OpenCode 自己的設定中;AgEnD 只選擇其提供的模型,不保存 Provider 憑證。" },
|
|
200
|
+
{ id: "tip-195", level: "intermediate", text_en: "OpenCode does not currently expose an AgEnD `/effort` mapping. Use model or agent settings supported by OpenCode instead.", text_zh: "OpenCode 目前沒有對應 AgEnD `/effort` 的功能;需要調整時,應使用 OpenCode 支援的模型或 Agent 設定。" },
|
|
201
|
+
{ id: "tip-196", level: "intermediate", text_en: "Antigravity supports multi-step work and tool calls through its terminal interface. Its account and installed version determine available models and integrations.", text_zh: "Antigravity 可透過終端介面執行多步驟工作與工具操作;可用模型與整合項目取決於帳號及已安裝版本。" },
|
|
202
|
+
{ id: "tip-197", level: "intermediate", text_en: "Antigravity has no separate summarizing compact command in AgEnD. Both `/compact` and `/clear` use its full conversation-clear action.", text_zh: "Antigravity 在 AgEnD 中沒有獨立的摘要式 Compact 指令;`/compact` 與 `/clear` 都會使用完整清除對話的操作。" },
|
|
203
|
+
{ id: "tip-198", level: "intermediate", text_en: "Different GPT variants can target different capability, latency, and cost points. The names visible to the current CLI account are the source of truth.", text_zh: "不同 GPT 變體可能著重能力、延遲或成本;目前 CLI 帳號實際顯示的名稱才是判斷依據。" },
|
|
204
|
+
{ id: "tip-199", level: "intermediate", text_en: "Automatic model selection may choose differently between turns. Pin a model only when repeatability matters more than flexibility.", text_zh: "自動模型選擇可能在不同回合使用不同模型;只有可重現性比彈性更重要時,才需要固定 Model。" },
|
|
205
|
+
{ id: "tip-200", level: "intermediate", text_en: "A model available to one account may be unavailable to another. Verify access with the target backend before changing several instances at once.", text_zh: "某個帳號可用的模型在另一個帳號可能不可用;一次調整多個 Instance 前,應先用目標 Backend 確認存取權。" },
|
|
206
|
+
// ── Advanced: tuning and troubleshooting (100) ───────────────────────
|
|
207
|
+
{ id: "tip-201", level: "advanced", text_en: "Before a migration or bulk edit, copy fleet.yaml and classicBot.yaml outside the working path. Keep the backup until a representative restart and message round trip succeed.", text_zh: "進行 migration 或大量修改前,應把 fleet.yaml 與 classicBot.yaml 備份到工作路徑之外;直到代表性 instance 完成重啟與訊息往返測試後再移除備份。" },
|
|
208
|
+
{ id: "tip-202", level: "advanced", text_en: "Instance entries may omit values inherited from defaults. Compare effective configuration, not only raw YAML, when diagnosing what a daemon received.", text_zh: "Instance entry 可以省略從 defaults 繼承的值;診斷 daemon 實際收到的設定時,應比對 effective configuration,而不只查看原始 YAML。" },
|
|
209
|
+
{ id: "tip-203", level: "advanced", text_en: "AgEnD removes redundant default-valued leaves when saving fleet.yaml, while retaining identity fields such as backend, model, working_directory, topic_id, and backend_options.", text_zh: "AgEnD 儲存 fleet.yaml 時會移除與 defaults 重複的 leaf values,但會保留 backend、model、working_directory、topic_id 與 backend_options 等識別欄位。" },
|
|
210
|
+
{ id: "tip-204", level: "advanced", text_en: "Lossless YAML editing preserves unrelated structure and comments where possible, but a comment attached only to a removed node may have no node to remain on.", text_zh: "Lossless YAML 編輯會盡量保留無關結構與註解;若註解只附著在被移除的節點上,該註解可能無法保留。" },
|
|
211
|
+
{ id: "tip-205", level: "advanced", text_en: "Run `agend validate` after manual YAML edits and before reload. Validation catches schema errors without requiring a fleet restart.", text_zh: "手動修改 YAML 後、reload 前應先執行 `agend validate`;它可在不重啟 fleet 的情況下找出 schema 錯誤。" },
|
|
212
|
+
{ id: "tip-206", level: "advanced", text_en: "Hot fields are reconciled in place, while cold fields restart affected instances. Check the Settings change summary before applying a mixed patch.", text_zh: "Hot fields 會原地 reconcile,cold fields 則會重啟受影響的 instance;套用混合變更前,應先查看 Settings 的變更摘要。" },
|
|
213
|
+
{ id: "tip-207", level: "advanced", text_en: "A SIGHUP reload updates the running fleet from validated configuration; it is not equivalent to restarting every CLI process.", text_zh: "SIGHUP reload 會以通過驗證的設定更新執行中 fleet,並不等同於重啟所有 CLI process。" },
|
|
214
|
+
{ id: "tip-208", level: "advanced", text_en: "Backend, working_directory, tool_set, lightweight, and backend_options are cold instance fields. Changing them can recreate the affected CLI process.", text_zh: "Backend、working_directory、tool_set、lightweight 與 backend_options 屬於 cold instance fields;變更後可能重建受影響的 CLI process。" },
|
|
215
|
+
{ id: "tip-209", level: "advanced", text_en: "Tool progress, display name, description, tags, log level, and auto-pause settings are designed for hot reconciliation. Verify the daemon acknowledged the update when diagnosing stale behavior.", text_zh: "Tool progress、display name、description、tags、log level 與 auto-pause 設定可 hot reconcile;若行為未更新,應確認 daemon 是否已接收變更。" },
|
|
216
|
+
{ id: "tip-210", level: "advanced", text_en: "Use per-instance overrides only when behavior must differ from defaults. Fewer duplicated values make later default changes and reviews easier to reason about.", text_zh: "只有在 instance 行為確實需要不同於 defaults 時才設定 override;減少重複值可讓後續 default 變更與 review 更容易判讀。" },
|
|
217
|
+
{ id: "tip-211", level: "advanced", text_en: "A backend option is interpreted only by its matching backend. For example, `backend_options.codex.provider` selects a provider but does not define that provider's endpoint or credentials.", text_zh: "Backend option 只由對應 backend 解讀;例如 `backend_options.codex.provider` 只負責選擇 provider,不會定義 endpoint 或 credentials。" },
|
|
218
|
+
{ id: "tip-212", level: "advanced", text_en: "Codex custom-provider definitions belong in Codex config, and secrets should be referenced through environment variables available before the fleet service starts.", text_zh: "Codex custom provider 應在 Codex config 中定義;密鑰宜透過 fleet service 啟動前已存在的環境變數提供。" },
|
|
219
|
+
{ id: "tip-213", level: "advanced", text_en: "OpenCode provider definitions belong in opencode.json, while AgEnD's model field should use the identifier exposed by OpenCode, commonly `provider/model`.", text_zh: "OpenCode provider 應在 opencode.json 中定義;AgEnD 的 model 欄位應使用 OpenCode 提供的識別字,通常是 `provider/model`。" },
|
|
220
|
+
{ id: "tip-214", level: "advanced", text_en: "Treat model-name compatibility checks as hints. The CLI remains the source of truth, so AgEnD passes configured model names through instead of silently falling back.", text_zh: "Model name compatibility check 只應視為提示;CLI 才是最終依據,因此 AgEnD 會傳遞已設定的 model name,而不會靜默退回預設值。" },
|
|
221
|
+
{ id: "tip-215", level: "advanced", text_en: "An unset instance model first inherits defaults.model. To request a backend's own default while a fleet model default exists, configure the backend-specific default explicitly where supported.", text_zh: "Instance 未設定 model 時會先繼承 defaults.model;若 fleet 已有 model default,而某 instance 要使用 backend 自己的預設,應在支援時明確設定該 backend 的預設值。" },
|
|
222
|
+
{ id: "tip-216", level: "advanced", text_en: "Kiro's `auto` is an explicit model choice. Set it on the instance when it must override a non-auto defaults.model value.", text_zh: "Kiro 的 `auto` 是明確的 model 選擇;若要覆寫非 auto 的 defaults.model,應在該 instance 設定 `model: auto`。" },
|
|
223
|
+
{ id: "tip-217", level: "advanced", text_en: "Model failover reacts to supported usage telemetry and applies on a later rotation. It cannot replace a model safely in the middle of an active turn.", text_zh: "Model failover 依賴支援的 usage telemetry,並在後續 rotation 套用;它不會在進行中的回合中途安全替換 model。" },
|
|
224
|
+
{ id: "tip-218", level: "advanced", text_en: "Cost guards are limited by provider telemetry. Missing, cached, or delayed usage data reduces enforcement precision and should be visible in operational expectations.", text_zh: "Cost guard 受 provider telemetry 限制;usage data 缺失、快取或延遲時,執行精度會下降,營運預期應納入這項限制。" },
|
|
225
|
+
{ id: "tip-219", level: "advanced", text_en: "Usage results are cached to reduce provider calls. Use the View panel's Refresh control when an immediate post-login or post-renewal fetch is required.", text_zh: "Usage 結果會快取以減少 provider calls;登入或更新 token 後需要立即重取時,可使用 View 面板的 Refresh。" },
|
|
226
|
+
{ id: "tip-220", level: "advanced", text_en: "A provider absent from `/usage` may simply have no running or paused instance. Usage visibility follows effective backends, not every installed CLI.", text_zh: "Provider 未出現在 `/usage` 時,可能只是目前沒有 running 或 paused instance 使用它;用量顯示依 effective backend,而不是所有已安裝 CLI。" },
|
|
227
|
+
{ id: "tip-221", level: "advanced", text_en: "Keep bot tokens, dashboard tokens, provider keys, and exported sessions out of repositories and shared workspaces; each requires its own rotation procedure.", text_zh: "Bot token、dashboard token、provider key 與匯出的 session 都不應放入 repository 或共用 workspace,且各自需要不同的 rotation 程序。" },
|
|
228
|
+
{ id: "tip-222", level: "advanced", text_en: "When a CLI supports an environment-key reference, store the secret in the service environment rather than fleet.yaml or a provider config committed to source control.", text_zh: "CLI 支援 environment-key reference 時,應把 secret 放在 service environment,而不是 fleet.yaml 或會提交到版控的 provider config。" },
|
|
229
|
+
{ id: "tip-223", level: "advanced", text_en: "Files such as web.token and per-instance state should remain readable only by their owner. Copying them into a project can expose them through backups, diffs, or agents.", text_zh: "web.token 與 per-instance state 等檔案應只允許 owner 讀取;複製到 project 後,可能經由備份、diff 或 agent 暴露。" },
|
|
230
|
+
{ id: "tip-224", level: "advanced", text_en: "The persistent web token keeps dashboard URLs valid across restarts. To invalidate existing links, remove the token file, restart the fleet, and request a new dashboard URL.", text_zh: "Persistent web token 會讓 dashboard URL 在重啟後仍有效;若要使既有連結失效,應移除 token file、重啟 fleet,再取得新的 dashboard URL。" },
|
|
231
|
+
{ id: "tip-225", level: "advanced", text_en: "A dashboard URL is usable only after the health server is listening. A port conflict should fail closed instead of publishing a URL backed by the wrong process.", text_zh: "Dashboard URL 只有在 health server 開始 listening 後才可使用;遇到 port conflict 時應 fail closed,避免發布指向錯誤 process 的 URL。" },
|
|
232
|
+
{ id: "tip-226", level: "advanced", text_en: "Channel allowlists are authorization boundaries, not display filters. After changing access rules, test both an allowed identity and a rejected identity.", text_zh: "Channel allowlist 是 authorization boundary,不是顯示篩選器;變更 access rules 後,應同時測試允許與拒絕的 identity。" },
|
|
233
|
+
{ id: "tip-227", level: "advanced", text_en: "Before changing a locked channel's allowed_users, ensure at least one administrator remains. An empty locked allowlist can remove every administrative path.", text_zh: "修改 locked channel 的 allowed_users 前,應確認至少保留一位管理員;空的 locked allowlist 可能移除所有管理操作路徑。" },
|
|
234
|
+
{ id: "tip-228", level: "advanced", text_en: "Nonce-bound confirmation buttons are tied to their adapter, chat, thread, message, and administrator identity. A copied callback should not authorize another context.", text_zh: "使用 nonce 的確認按鈕會綁定 adapter、chat、thread、message 與管理員 identity;複製 callback 不應能授權另一個 context。" },
|
|
235
|
+
{ id: "tip-229", level: "advanced", text_en: "In a multi-world fleet, assign channel_id explicitly to General and fleet-topic instances when the first configured adapter is not the intended persona.", text_zh: "Multi-world fleet 中,若第一個 adapter 不是預期 persona,應為 General 與 fleet-topic instance 明確設定 channel_id。" },
|
|
236
|
+
{ id: "tip-230", level: "advanced", text_en: "ClassicBot routing is keyed by its own channel records. Do not apply fleet-topic adapter canonicalization to ClassicBot replies in multi-bot collaboration channels.", text_zh: "ClassicBot routing 依自身 channel records 決定;在多 bot 協作頻道中,不應把 fleet-topic 的 adapter canonicalization 套用到 ClassicBot reply。" },
|
|
237
|
+
{ id: "tip-231", level: "advanced", text_en: "Terminal columns and rows affect both TUI layout and captured wrapping. After changing geometry, verify ready, permission, and error detection against real pane samples.", text_zh: "Terminal columns 與 rows 同時影響 TUI layout 和 capture wrapping;修改 geometry 後,應用真實 pane sample 驗證 ready、permission 與 error detection。" },
|
|
238
|
+
{ id: "tip-232", level: "advanced", text_en: "The terminal validator enforces conservative geometry bounds because very narrow panes can wrap permission prompts beyond recognition.", text_zh: "Terminal validator 會限制保守的 geometry 範圍,因為過窄 pane 可能使 permission prompt 換行到無法辨識。" },
|
|
239
|
+
{ id: "tip-233", level: "advanced", text_en: "AgEnD pins tmux window size and attaches control clients with size ignored; both protections are needed to keep logical geometry stable across reconnects.", text_zh: "AgEnD 會固定 tmux window size,並讓 control client 忽略尺寸;兩層保護都需要,才能讓 logical geometry 在 reconnect 後保持穩定。" },
|
|
240
|
+
{ id: "tip-234", level: "advanced", text_en: "Mouse mode is enabled only in AgEnD's tmux session. It allows scrollback after attach without changing unrelated user sessions.", text_zh: "Mouse mode 只在 AgEnD 的 tmux session 啟用;attach 後可捲動 scrollback,且不影響使用者其他 session。" },
|
|
241
|
+
{ id: "tip-235", level: "advanced", text_en: "`capture-pane` observes physical screen lines unless wrapping is joined. Width changes can therefore change parser input even when the logical text is identical.", text_zh: "`capture-pane` 未合併 wrapping 時會讀取畫面實際行;因此即使邏輯文字相同,width 變更仍可能改變 parser input。" },
|
|
242
|
+
{ id: "tip-236", level: "advanced", text_en: "Ready, busy, and error patterns are heuristics over terminal text. Preserve anonymized real samples and add production-path tests before changing a pattern.", text_zh: "Ready、busy 與 error pattern 都是針對 terminal text 的 heuristic;修改前應保留去識別化的真實 sample,並加入 production-path test。" },
|
|
243
|
+
{ id: "tip-237", level: "advanced", text_en: "A false idle can retire controls or deliver input too early. A false working can delay messages and trigger hang notifications.", text_zh: "False idle 可能提早收回控制項或過早投遞 input;false working 則可能延遲訊息並觸發 hang notification。" },
|
|
244
|
+
{ id: "tip-238", level: "advanced", text_en: "Periodic statusline redraws are not necessarily work. Backend-specific pane handling should distinguish cosmetic redraws from changed task content.", text_zh: "週期性 statusline redraw 不一定代表工作;backend-specific pane handling 應區分純顯示重繪與任務內容變化。" },
|
|
245
|
+
{ id: "tip-239", level: "advanced", text_en: "Tune hang_detector from observed silent-work intervals, not from an arbitrary short timeout. Inspect pane and process evidence before restarting.", text_zh: "hang_detector 應依實際 silent-work interval 調整,而不是任意設定很短的 timeout;重啟前先檢查 pane 與 process evidence。" },
|
|
246
|
+
{ id: "tip-240", level: "advanced", text_en: "Interactive-prompt alerts require both a prompt-like pattern and stable output time, reducing false alerts when an agent merely discusses passwords or confirmations.", text_zh: "Interactive-prompt alert 會同時要求 prompt-like pattern 與穩定 output 時間,以降低 agent 只是討論密碼或確認操作時的誤報。" },
|
|
247
|
+
{ id: "tip-241", level: "advanced", text_en: "Administrator-only `/raw <text>` sends text directly to the backend without AgEnD's normal inbound wrapper. Use it only when that wrapper would change an intentional CLI command.", text_zh: "限管理員使用的 `/raw <文字>` 會略過 AgEnD 的一般訊息包裝,直接送給 backend;只有包裝會改變刻意輸入的 CLI 指令時才應使用。" },
|
|
248
|
+
{ id: "tip-242", level: "advanced", text_en: "A writable tmux control client is required for special-key delivery. Treat a failed Enter or interrupt command as a command failure rather than waiting for a later timeout.", text_zh: "Special-key delivery 需要可寫入的 tmux control client;Enter 或 interrupt command 失敗時,應直接視為 command failure,而不是等後續 timeout。" },
|
|
249
|
+
{ id: "tip-243", level: "advanced", text_en: "pasteLock serializes terminal writes even for backends with native input queues; native queuing does not make overlapping PTY pastes safe.", text_zh: "即使 backend 有 native input queue,pasteLock 仍需序列化 terminal writes;native queue 不代表重疊 PTY paste 是安全的。" },
|
|
250
|
+
{ id: "tip-244", level: "advanced", text_en: "Codex accepts busy-time input into its own queue, so AgEnD bypasses the idle gate for Codex while retaining first-delivery startup settling.", text_zh: "Codex 可把 busy-time input 放入自身 queue,因此 AgEnD 對 Codex 略過 idle gate,但仍保留首次投遞的 startup settle。" },
|
|
251
|
+
{ id: "tip-245", level: "advanced", text_en: "Cancel uses a delivery epoch to invalidate messages already queued before the cancellation. Messages arriving afterward carry the new epoch and remain deliverable.", text_zh: "Cancel 會透過 delivery epoch 使取消前已排隊的訊息失效;取消後抵達的新訊息使用新的 epoch,仍可正常投遞。" },
|
|
252
|
+
{ id: "tip-246", level: "advanced", text_en: "A message transport timeout does not prove non-delivery. Check delivery logs or idempotency evidence before retrying an external or cross-instance send.", text_zh: "Message transport timeout 不代表一定未投遞;重試外部或 cross-instance send 前,應先檢查 delivery log 或 idempotency evidence。" },
|
|
253
|
+
{ id: "tip-247", level: "advanced", text_en: "A replaced IPC client must lose listeners and have its socket destroyed. Removing only the map entry can leave an orphan processing outbound messages.", text_zh: "被替換的 IPC client 必須移除 listeners 並 destroy socket;只刪除 map entry 可能留下仍在處理 outbound message 的 orphan。" },
|
|
254
|
+
{ id: "tip-248", level: "advanced", text_en: "Disconnect, overflow, and close events should converge to one disconnect per client lifecycle, with reconnect serialized per instance.", text_zh: "Disconnect、overflow 與 close event 應在每個 client lifecycle 收斂成一次 disconnect,且 reconnect 應依 instance 序列化。" },
|
|
255
|
+
{ id: "tip-249", level: "advanced", text_en: "If duplicate replies persist across simple messages, inspect client and socket counts before blaming rich-message rendering or the model.", text_zh: "若簡單訊息也持續出現重複回覆,應先檢查 client 與 socket 數量,再判斷是否與 rich-message rendering 或 model 有關。" },
|
|
256
|
+
{ id: "tip-250", level: "advanced", text_en: "Schedule-trigger metadata must include the instance's configured adapter identity; otherwise a reply after restart can fall back to the wrong bot persona.", text_zh: "Schedule trigger metadata 必須包含 instance 設定的 adapter identity;否則重啟後的 reply 可能 fallback 到錯誤的 bot persona。" },
|
|
257
|
+
{ id: "tip-251", level: "advanced", text_en: "The fleet singleton lock protects manager startup, not individual instance restarts. Per-instance restart serialization remains a separate requirement.", text_zh: "Fleet singleton lock 保護的是 manager startup,不是單一 instance restart;per-instance restart serialization 仍是另一項必要保護。" },
|
|
258
|
+
{ id: "tip-252", level: "advanced", text_en: "When two fleet processes appear, collect PID, parent PID, command line, lock owner, service state, and listening ports before terminating either process.", text_zh: "出現兩個 fleet process 時,終止前應先收集 PID、parent PID、command line、lock owner、service state 與 listening ports。" },
|
|
259
|
+
{ id: "tip-253", level: "advanced", text_en: "A service-managed fleet should fail closed when the user service manager is unreachable, rather than starting an untracked detached duplicate.", text_zh: "Service-managed fleet 在 user service manager 無法連線時應 fail closed,而不是啟動未追蹤的 detached duplicate。" },
|
|
260
|
+
{ id: "tip-254", level: "advanced", text_en: "On Linux over SSH, a missing D-Bus session can make `systemctl --user` unavailable even when the unit file exists.", text_zh: "透過 SSH 使用 Linux 時,缺少 D-Bus session 可能使 `systemctl --user` 無法使用,即使 unit file 已存在。" },
|
|
261
|
+
{ id: "tip-255", level: "advanced", text_en: "Treat `active` and `activating` as occupied service states. An uncertain service query should not authorize a second startup.", text_zh: "`active` 與 `activating` 都應視為 service 已被占用;service query 結果不確定時,不應允許第二次 startup。" },
|
|
262
|
+
{ id: "tip-256", level: "advanced", text_en: "A health-port conflict may indicate a stale manager or another service. Identify the listener before changing the port or stopping a process.", text_zh: "Health-port conflict 可能代表 stale manager 或其他 service;更換 port 或停止 process 前,應先識別 listener。" },
|
|
263
|
+
{ id: "tip-257", level: "advanced", text_en: "Recovery paths should serialize per instance so health checks, MCP recovery, manual restart, and config reconciliation cannot create competing replacements.", text_zh: "Recovery path 應依 instance 序列化,避免 health check、MCP recovery、manual restart 與 config reconcile 建立互相競爭的 replacement。" },
|
|
264
|
+
{ id: "tip-258", level: "advanced", text_en: "Crash-loop protection stops automatic recovery after bounded repeated failures and reports crashed rather than idle; successful recovery must clear stale crash markers.", text_zh: "Crash-loop protection 會在有限次重複失敗後停止自動恢復,並顯示 crashed 而非 idle;成功恢復後則必須清除 stale crash marker。" },
|
|
265
|
+
{ id: "tip-259", level: "advanced", text_en: "Restart backoff limits resource use when a CLI repeatedly fails during startup. Disabling retries can be appropriate while diagnosing a deterministic configuration error.", text_zh: "Restart backoff 可限制 CLI 反覆 startup failure 時的資源消耗;診斷確定性的設定錯誤時,暫時停用 retries 可能較合適。" },
|
|
266
|
+
{ id: "tip-260", level: "advanced", text_en: "MCP auto-restart waits for an eligible idle state and deduplicates restart requests. It restarts the instance because the CLI owns the MCP child connection.", text_zh: "MCP auto-restart 會等待符合條件的 idle state,並去除重複 restart request;由於 MCP child connection 由 CLI 掌握,因此需要重啟 instance。" },
|
|
267
|
+
{ id: "tip-261", level: "advanced", text_en: "Configure mcp_proxy_reply only for panes whose visible text is safe to relay. Regex redaction cannot guarantee removal of every project-specific secret.", text_zh: "只有在 pane 可見文字適合轉送時才啟用 mcp_proxy_reply;regex redaction 無法保證移除所有專案特有 secret。" },
|
|
268
|
+
{ id: "tip-262", level: "advanced", text_en: "Proxy replies are a last-resort channel path after MCP loss, not a source-of-truth transcript. Inspect them for terminal chrome or incomplete output.", text_zh: "Proxy reply 是 MCP 中斷後的最後備援 channel path,不是 source-of-truth transcript;應留意 terminal chrome 或不完整輸出。" },
|
|
269
|
+
{ id: "tip-263", level: "advanced", text_en: "Session resume is backend-owned. AgEnD can preserve identifiers, workspace paths, and markers, but it cannot guarantee semantic continuity after a CLI upgrade.", text_zh: "Session resume 由 backend 掌控;AgEnD 可保留 identifier、workspace path 與 marker,但無法保證 CLI 升級後仍維持語意 continuity。" },
|
|
270
|
+
{ id: "tip-264", level: "advanced", text_en: "OpenCode resume should use a recorded session identifier. Global `--continue` can select the latest session from an unrelated directory.", text_zh: "OpenCode resume 應使用已記錄的 session identifier;global `--continue` 可能選到其他 directory 的最新 session。" },
|
|
271
|
+
{ id: "tip-265", level: "advanced", text_en: "Claude Code project-session lookup depends on encoded workspace paths. Renaming or moving a workspace can make an existing session appear absent.", text_zh: "Claude Code project-session lookup 依賴編碼後的 workspace path;重新命名或移動 workspace 可能使既有 session 看起來不存在。" },
|
|
272
|
+
{ id: "tip-266", level: "advanced", text_en: "Per-instance Codex homes isolate MCP configuration and instance decisions. Writing those entries to a shared Codex config creates a cross-instance authorization risk.", text_zh: "Per-instance Codex home 會隔離 MCP configuration 與 instance decisions;把這些項目寫入共用 Codex config 會造成 cross-instance authorization risk。" },
|
|
273
|
+
{ id: "tip-267", level: "advanced", text_en: "SQLite database files must not be separated from active WAL, SHM, or rollback-journal sidecars. A sidecar linked from another home can make the private database unusable.", text_zh: "SQLite database file 不應與 active WAL、SHM 或 rollback-journal sidecar 分離;從其他 home 連入 sidecar 可能使 private database 無法使用。" },
|
|
274
|
+
{ id: "tip-268", level: "advanced", text_en: "When a database base file is intentionally symlinked, verify where SQLite creates sidecars with the library version in production rather than assuming path behavior.", text_zh: "Database base file 有意使用 symlink 時,應以 production 使用的 library version 驗證 SQLite 建立 sidecar 的位置,不宜只憑路徑假設。" },
|
|
275
|
+
{ id: "tip-269", level: "advanced", text_en: "scheduler.db contains schedules, decisions, task state, and tip state. Take a consistent backup before direct maintenance and avoid writes while the fleet is active.", text_zh: "scheduler.db 包含 schedules、decisions、task state 與 tip state;直接維護前應做一致性備份,並避免在 fleet 執行中寫入。" },
|
|
276
|
+
{ id: "tip-270", level: "advanced", text_en: "A runtime schema audit should compare CREATE statements, every referenced column in queries, and the actual schema from the deployed SQLite files.", text_zh: "Runtime schema audit 應同時比對 CREATE statements、query 引用的每個欄位,以及部署中 SQLite file 的實際 schema。" },
|
|
277
|
+
{ id: "tip-271", level: "advanced", text_en: "Adjust startup concurrency according to available memory and measured CLI startup cost. Raising concurrency can increase contention and make total startup slower.", text_zh: "Startup concurrency 應依可用 memory 與實測 CLI startup cost 調整;提高 concurrency 可能增加競爭,反而延長總啟動時間。" },
|
|
278
|
+
{ id: "tip-272", level: "advanced", text_en: "Use startup stagger delay to spread process creation and authentication load. Persisted paused instances are excluded before stagger slots are assigned.", text_zh: "Startup stagger delay 可分散 process creation 與 authentication load;persisted paused instance 會在分配 stagger slot 前排除。" },
|
|
279
|
+
{ id: "tip-273", level: "advanced", text_en: "warm_cap is a fleet-wide capacity limit, while auto_pause_after is a per-instance idle-time policy. Observe workload patterns before combining them.", text_zh: "warm_cap 是 fleet-wide capacity limit,auto_pause_after 則是 per-instance idle-time policy;搭配使用前應先觀察 workload pattern。" },
|
|
280
|
+
{ id: "tip-274", level: "advanced", text_en: "A zero warm_cap means unlimited, and a zero auto_pause_after disables time-based pausing. General is excluded from automatic pause and warm-cap eviction.", text_zh: "warm_cap 為 0 表示不設上限,auto_pause_after 為 0 則停用依時間暫停;General 不會被 auto-pause 或 warm-cap eviction。" },
|
|
281
|
+
{ id: "tip-275", level: "advanced", text_en: "Many resident CLIs consume substantial memory while idle, although idle state alone does not spend model tokens. Measure RSS before setting a warm cap.", text_zh: "許多常駐 CLI 即使 idle 仍會占用可觀 memory,但 idle 本身不會消耗 model token;設定 warm cap 前可先量測 RSS。" },
|
|
282
|
+
{ id: "tip-276", level: "advanced", text_en: "Lightweight mode omits backend-dependent transcript, context-guardian, and error monitors to reduce overhead. Enable it only when those missing observations are acceptable.", text_zh: "Lightweight mode 會省略依賴 backend 的 transcript、context guardian 與 error monitors 以降低 overhead;只有在可接受缺少這些觀測能力時才應啟用。" },
|
|
283
|
+
{ id: "tip-277", level: "advanced", text_en: "Every exposed MCP tool schema consumes model context. Use minimal or standard tool sets for narrowly scoped workers and broader profiles only when required.", text_zh: "每個 exposed MCP tool schema 都會占用 model context;範圍明確的 worker 宜使用 minimal 或 standard,只有確實需要時才使用較廣 profile。" },
|
|
284
|
+
{ id: "tip-278", level: "advanced", text_en: "General receives the coordinator tool profile when tool_set is inherited. Explicitly setting standard or minimal can remove tools required for coordination.", text_zh: "General 在 tool_set 繼承時會取得 coordinator tool profile;明確設定 standard 或 minimal 可能移除協調所需工具。" },
|
|
285
|
+
{ id: "tip-279", level: "advanced", text_en: "Verbose tool progress may retain command previews in channel history. Use standard or off when operational details should not be exposed to channel readers.", text_zh: "Verbose tool progress 可能在 channel history 保留 command preview;若營運細節不應讓頻道讀者看到,宜使用 standard 或 off。" },
|
|
286
|
+
{ id: "tip-280", level: "advanced", text_en: "Raise log verbosity only for a bounded diagnostic window. Restore the normal level afterward and review logs before external sharing.", text_zh: "只有在有界的診斷期間才提高 log verbosity;完成後應恢復正常 level,且對外分享前先檢查 log 內容。" },
|
|
287
|
+
{ id: "tip-281", level: "advanced", text_en: "Bundled skills are role-filtered before CLI startup: General receives all eligible skills, workers receive shared or worker skills, and ClassicBot is skipped.", text_zh: "Bundled skills 會在 CLI startup 前依 role 篩選:General 取得所有 eligible skills,worker 取得 shared 或 worker skills,ClassicBot 則跳過。" },
|
|
288
|
+
{ id: "tip-282", level: "advanced", text_en: "The managed-skill manifest distinguishes AgEnD-owned copies from user content. A missing legacy manifest requires conservative adoption to avoid freezing old managed skills.", text_zh: "Managed-skill manifest 用來區分 AgEnD-owned copy 與 user content;舊版 manifest 缺失時,需要保守的 adoption 流程,避免 managed skill 永久停在舊內容。" },
|
|
289
|
+
{ id: "tip-283", level: "advanced", text_en: "Instances sharing one workspace also share backend-native skill directories. Mixed roles or backend families can contend over managed files, so separate workspaces are safer.", text_zh: "共用同一 workspace 的 instance 也會共用 backend-native skill directory;混合 role 或 backend family 可能競爭 managed files,因此分開 workspace 較安全。" },
|
|
290
|
+
{ id: "tip-284", level: "advanced", text_en: "Use separate git worktrees for parallel write tasks. A detached checkout used for inspection should remain read-only.", text_zh: "平行 write task 應使用不同 git worktree;用於檢查的 detached checkout 應保持 read-only。" },
|
|
291
|
+
{ id: "tip-285", level: "advanced", text_en: "Templates define repeatable groups of instances, but deployment still needs explicit branch, workspace, ownership, and teardown expectations.", text_zh: "Template 可定義可重複建立的 instance group,但部署前仍需明確約定 branch、workspace、ownership 與 teardown。" },
|
|
292
|
+
{ id: "tip-286", level: "advanced", text_en: "Teams are routing groups, not shared memory. Each member retains its own context, session, and workspace boundary.", text_zh: "Team 是 routing group,不是 shared memory;每個 member 仍保有自己的 context、session 與 workspace boundary。" },
|
|
293
|
+
{ id: "tip-287", level: "advanced", text_en: "A silent schedule injects work without requiring a channel reply. Use it only when the absence of user-visible output is intentional.", text_zh: "Silent schedule 會注入工作但不要求 channel reply;只有在刻意不需要 user-visible output 時才應使用。" },
|
|
294
|
+
{ id: "tip-288", level: "advanced", text_en: "Schedule timezone is part of execution semantics. Verify daylight-saving transitions when the selected IANA zone observes them.", text_zh: "Schedule timezone 是 execution semantics 的一部分;所選 IANA zone 有 daylight-saving transition 時,應驗證執行時間。" },
|
|
295
|
+
{ id: "tip-289", level: "advanced", text_en: "Schedules that trigger after a restart still need the target instance's effective adapter and delivery epoch so routing and cancellation remain correct.", text_zh: "Restart 後觸發的 schedule 仍需帶入 target instance 的 effective adapter 與 delivery epoch,才能維持 routing 與 cancellation 正確。" },
|
|
296
|
+
{ id: "tip-290", level: "advanced", text_en: "Fleet decisions preserve durable architectural context. Supersede or retire stale decisions so later agents do not receive conflicting instructions.", text_zh: "Fleet decision 可保存持久的架構脈絡;過時 decision 應 supersede 或 retire,避免後續 agent 收到衝突指示。" },
|
|
297
|
+
{ id: "tip-291", level: "advanced", text_en: "Event logs support diagnosis but are not substitutes for source configuration, provider audit records, or raw process evidence.", text_zh: "Event log 可支援診斷,但不能取代 source configuration、provider audit record 或原始 process evidence。" },
|
|
298
|
+
{ id: "tip-292", level: "advanced", text_en: "Chat exports can include names, project details, tool summaries, and quoted messages. Review and redact them before external sharing.", text_zh: "Chat export 可能包含姓名、專案細節、tool summary 與引用訊息;對外分享前應先 review 並 redact。" },
|
|
299
|
+
{ id: "tip-293", level: "advanced", text_en: "Installation prompts for sudo passwords or confirmations require human review. Non-interactive automation should fail clearly rather than guessing an answer.", text_zh: "安裝時的 sudo password 或 confirmation prompt 需要人工判斷;non-interactive automation 應明確失敗,而不是猜測答案。" },
|
|
300
|
+
{ id: "tip-294", level: "advanced", text_en: "`agend doctor` distinguishes backend availability from service, D-Bus, fleet, tmux, and IPC health; read each section rather than treating one green check as fleet health.", text_zh: "`agend doctor` 會分別檢查 backend availability、service、D-Bus、fleet、tmux 與 IPC health;不應以單一綠色項目代表整體健康。" },
|
|
301
|
+
{ id: "tip-295", level: "advanced", text_en: "After an update, canary one representative instance per backend before resuming the full workload. Include ready, permission, error, reply, and context checks.", text_zh: "Update 後應先為每個 backend canary 一個代表性 instance,再恢復完整 workload;檢查項目應包含 ready、permission、error、reply 與 context。" },
|
|
302
|
+
{ id: "tip-296", level: "advanced", text_en: "Keep the previous package version and compatible configuration backup until update health checks and representative canaries pass.", text_zh: "Update health check 與代表性 canary 通過前,應保留前一個 package version 與相容的 configuration backup。" },
|
|
303
|
+
{ id: "tip-297", level: "advanced", text_en: "When rewriting Git history to remove secrets, preserve a mirror backup, verify all refs and tags, and rotate exposed credentials even after blobs are removed.", text_zh: "為移除 secret 而改寫 Git history 時,應保留 mirror backup、驗證所有 refs 與 tags;即使 blob 已移除,也仍需 rotation 已暴露的 credential。" },
|
|
304
|
+
{ id: "tip-298", level: "advanced", text_en: "A safe rollback restores compatible code and configuration together. Reverting only one side can leave a schema or behavior mismatch.", text_zh: "安全 rollback 應同時恢復相容的 code 與 configuration;只 revert 一側可能留下 schema 或 behavior mismatch。" },
|
|
305
|
+
{ id: "tip-299", level: "advanced", text_en: "Before destructive cleanup, resolve exact paths and owners with read-only checks. Prefer recoverable moves or backups when practical.", text_zh: "進行 destructive cleanup 前,應先用 read-only check 確認精確 path 與 owner;可行時優先採用可復原的移動或備份。" },
|
|
306
|
+
{ id: "tip-300", level: "advanced", text_en: "For difficult incidents, preserve synchronized timestamps, fleet logs, process trees, socket counts, service state, and pane captures before restarting away the evidence.", text_zh: "處理困難 incident 時,應在 restart 清除證據前保留同步 timestamps、fleet logs、process trees、socket counts、service state 與 pane captures。" },
|
|
307
|
+
];
|
|
308
|
+
export function canUnlockAdvancedTips(dismissedIds) {
|
|
309
|
+
let dismissedIntermediate = 0;
|
|
310
|
+
for (const tip of TIPS) {
|
|
311
|
+
if (tip.level === "intermediate" && dismissedIds.has(tip.id))
|
|
312
|
+
dismissedIntermediate++;
|
|
313
|
+
}
|
|
314
|
+
return dismissedIntermediate >= ADVANCED_TIP_UNLOCK_THRESHOLD;
|
|
315
|
+
}
|
|
316
|
+
export function visibleTipLevels(advancedUnlocked = false) {
|
|
317
|
+
return new Set(advancedUnlocked
|
|
318
|
+
? ["beginner", "intermediate", "advanced"]
|
|
319
|
+
: ["beginner", "intermediate"]);
|
|
320
|
+
}
|
|
321
|
+
export function selectTip(dismissedIds, random = Math.random, advancedUnlocked = false) {
|
|
322
|
+
const levels = visibleTipLevels(advancedUnlocked);
|
|
323
|
+
const candidates = TIPS.filter(tip => levels.has(tip.level) && !dismissedIds.has(tip.id));
|
|
324
|
+
if (candidates.length === 0)
|
|
325
|
+
return null;
|
|
326
|
+
const index = Math.min(candidates.length - 1, Math.max(0, Math.floor(random() * candidates.length)));
|
|
327
|
+
return candidates[index];
|
|
328
|
+
}
|
|
329
|
+
/** Fleet-internal daily trigger. It is intentionally not persisted in fleet.yaml. */
|
|
330
|
+
export class DailyTipScheduler {
|
|
331
|
+
config;
|
|
332
|
+
timezone;
|
|
333
|
+
onTip;
|
|
334
|
+
job = null;
|
|
335
|
+
constructor(config, timezone, onTip) {
|
|
336
|
+
this.config = config;
|
|
337
|
+
this.timezone = timezone;
|
|
338
|
+
this.onTip = onTip;
|
|
339
|
+
}
|
|
340
|
+
start() {
|
|
341
|
+
const cron = `${this.config.minute} ${this.config.hour} * * *`;
|
|
342
|
+
this.job = new Cron(cron, { timezone: this.timezone }, () => {
|
|
343
|
+
Promise.resolve(this.onTip()).catch(() => { });
|
|
344
|
+
});
|
|
345
|
+
}
|
|
346
|
+
stop() {
|
|
347
|
+
this.job?.stop();
|
|
348
|
+
this.job = null;
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
//# sourceMappingURL=tips.js.map
|
package/dist/tips.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tips.js","sourceRoot":"","sources":["../src/tips.ts"],"names":[],"mappings":"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"}
|