@songsid/agend 2.3.1 → 2.3.2-beta.10
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/THIRD_PARTY_NOTICES.md +40 -0
- package/dist/agent-cli.js +21 -2
- package/dist/agent-cli.js.map +1 -1
- package/dist/agent-endpoint.js +5 -0
- package/dist/agent-endpoint.js.map +1 -1
- package/dist/antigravity-usage-scan.d.ts +58 -0
- package/dist/antigravity-usage-scan.js +257 -0
- package/dist/antigravity-usage-scan.js.map +1 -0
- package/dist/antigravity-usage-worker.d.ts +1 -0
- package/dist/antigravity-usage-worker.js +10 -0
- package/dist/antigravity-usage-worker.js.map +1 -0
- package/dist/auth-api.js +4 -0
- package/dist/auth-api.js.map +1 -1
- package/dist/authority/authority-state.d.ts +4 -0
- package/dist/authority/authority-state.js +16 -10
- package/dist/authority/authority-state.js.map +1 -1
- package/dist/authority/session-authorizations.d.ts +7 -1
- package/dist/authority/session-authorizations.js +6 -4
- package/dist/authority/session-authorizations.js.map +1 -1
- package/dist/authority/web-authority.d.ts +19 -6
- package/dist/authority/web-authority.js +22 -8
- package/dist/authority/web-authority.js.map +1 -1
- package/dist/backend/kiro-identity.d.ts +64 -0
- package/dist/backend/kiro-identity.js +101 -0
- package/dist/backend/kiro-identity.js.map +1 -1
- package/dist/backend/kiro-retired-model.d.ts +62 -0
- package/dist/backend/kiro-retired-model.js +160 -0
- package/dist/backend/kiro-retired-model.js.map +1 -0
- package/dist/backend/kiro.d.ts +71 -2
- package/dist/backend/kiro.js +352 -11
- package/dist/backend/kiro.js.map +1 -1
- package/dist/backend/types.d.ts +59 -0
- package/dist/backend/types.js.map +1 -1
- package/dist/backend-signin-guide.d.ts +1 -0
- package/dist/backend-signin-guide.js +9 -0
- package/dist/backend-signin-guide.js.map +1 -0
- package/dist/backend-signin-pending.d.ts +10 -0
- package/dist/backend-signin-pending.js +44 -0
- package/dist/backend-signin-pending.js.map +1 -0
- package/dist/browser-backend-signins.d.ts +56 -0
- package/dist/browser-backend-signins.js +189 -0
- package/dist/browser-backend-signins.js.map +1 -0
- package/dist/cache-ledger.d.ts +38 -2
- package/dist/cache-ledger.js +133 -8
- package/dist/cache-ledger.js.map +1 -1
- package/dist/cache-prices.d.ts +2 -1
- package/dist/cache-prices.js +5 -2
- package/dist/cache-prices.js.map +1 -1
- package/dist/cache-service.d.ts +68 -0
- package/dist/cache-service.js +355 -13
- package/dist/cache-service.js.map +1 -1
- package/dist/channel/adapters/discord.d.ts +13 -0
- package/dist/channel/adapters/discord.js +103 -16
- package/dist/channel/adapters/discord.js.map +1 -1
- package/dist/channel/mcp-tools.js +34 -7
- package/dist/channel/mcp-tools.js.map +1 -1
- package/dist/channel/tool-router.js +2 -1
- package/dist/channel/tool-router.js.map +1 -1
- package/dist/channel/types.d.ts +11 -0
- package/dist/classic-channel-manager.d.ts +11 -0
- package/dist/classic-channel-manager.js +39 -1
- package/dist/classic-channel-manager.js.map +1 -1
- package/dist/cli.js +21 -2
- package/dist/cli.js.map +1 -1
- package/dist/config-validator.d.ts +7 -1
- package/dist/config-validator.js +92 -12
- package/dist/config-validator.js.map +1 -1
- package/dist/config.d.ts +19 -0
- package/dist/config.js +31 -1
- package/dist/config.js.map +1 -1
- package/dist/cpu-quota.d.ts +23 -0
- package/dist/cpu-quota.js +86 -0
- package/dist/cpu-quota.js.map +1 -0
- package/dist/daemon.d.ts +57 -3
- package/dist/daemon.js +330 -50
- package/dist/daemon.js.map +1 -1
- package/dist/dashboard-permissions.d.ts +20 -6
- package/dist/dashboard-permissions.js +58 -9
- package/dist/dashboard-permissions.js.map +1 -1
- package/dist/delivery-outbox.d.ts +12 -1
- package/dist/delivery-outbox.js +67 -15
- package/dist/delivery-outbox.js.map +1 -1
- package/dist/doctor.d.ts +3 -0
- package/dist/doctor.js +11 -1
- package/dist/doctor.js.map +1 -1
- package/dist/event-log.d.ts +5 -0
- package/dist/event-log.js +13 -0
- package/dist/event-log.js.map +1 -1
- package/dist/fleet-manager.d.ts +212 -0
- package/dist/fleet-manager.js +914 -111
- package/dist/fleet-manager.js.map +1 -1
- package/dist/fleet-process-handlers.d.ts +1 -0
- package/dist/fleet-process-handlers.js +9 -1
- package/dist/fleet-process-handlers.js.map +1 -1
- package/dist/forged-envelope-scan.d.ts +9 -0
- package/dist/forged-envelope-scan.js +30 -5
- package/dist/forged-envelope-scan.js.map +1 -1
- package/dist/general-knowledge/skills/credential-profiles/SKILL.md +5 -2
- package/dist/general-knowledge/skills/kiro-engine-migration/SKILL.md +14 -1
- package/dist/general-knowledge/skills/web-appearance/SKILL.canvas-worker-off.md +28 -5
- package/dist/general-knowledge/skills/web-appearance/SKILL.md +31 -8
- package/dist/general-knowledge/skills/web-dashboard/SKILL.canvas-worker-off.md +138 -59
- package/dist/general-knowledge/skills/web-dashboard/SKILL.md +145 -61
- package/dist/guest-seen-people.d.ts +38 -0
- package/dist/guest-seen-people.js +78 -0
- package/dist/guest-seen-people.js.map +1 -0
- package/dist/instance-config-impact.js +14 -6
- package/dist/instance-config-impact.js.map +1 -1
- package/dist/instance-lifecycle.d.ts +20 -0
- package/dist/instance-lifecycle.js +71 -13
- package/dist/instance-lifecycle.js.map +1 -1
- package/dist/kiro-db-reader.d.ts +5 -0
- package/dist/kiro-db-reader.js +18 -0
- package/dist/kiro-db-reader.js.map +1 -1
- package/dist/kiro-engine-status.d.ts +2 -0
- package/dist/kiro-engine-status.js +9 -0
- package/dist/kiro-engine-status.js.map +1 -1
- package/dist/kiro-migrate.d.ts +49 -0
- package/dist/kiro-migrate.js +105 -0
- package/dist/kiro-migrate.js.map +1 -0
- package/dist/kiro-transcript-lane.d.ts +2 -0
- package/dist/kiro-transcript-lane.js.map +1 -1
- package/dist/kiro-transcript-worker.js +1 -0
- package/dist/kiro-transcript-worker.js.map +1 -1
- package/dist/kiro-tui-forensic.d.ts +7 -0
- package/dist/kiro-tui-forensic.js +110 -0
- package/dist/kiro-tui-forensic.js.map +1 -0
- package/dist/kiro-usage-run.d.ts +7 -0
- package/dist/kiro-usage-run.js +39 -0
- package/dist/kiro-usage-run.js.map +1 -0
- package/dist/kiro-usage-scan.d.ts +49 -0
- package/dist/kiro-usage-scan.js +223 -0
- package/dist/kiro-usage-scan.js.map +1 -0
- package/dist/kiro-usage-worker.d.ts +1 -0
- package/dist/kiro-usage-worker.js +10 -0
- package/dist/kiro-usage-worker.js.map +1 -0
- package/dist/kiro-usage.d.ts +58 -0
- package/dist/kiro-usage.js +310 -0
- package/dist/kiro-usage.js.map +1 -0
- package/dist/locale.js +120 -12
- package/dist/locale.js.map +1 -1
- package/dist/log-service.js +1 -1
- package/dist/log-service.js.map +1 -1
- package/dist/login-url.d.ts +4 -0
- package/dist/login-url.js +22 -0
- package/dist/login-url.js.map +1 -0
- package/dist/mac-auto-restore.d.ts +117 -0
- package/dist/mac-auto-restore.js +294 -0
- package/dist/mac-auto-restore.js.map +1 -0
- package/dist/needs-you-hub.d.ts +2 -1
- package/dist/needs-you-hub.js +1 -1
- package/dist/needs-you-hub.js.map +1 -1
- package/dist/needs-you.d.ts +8 -2
- package/dist/needs-you.js +6 -0
- package/dist/needs-you.js.map +1 -1
- package/dist/notice-delivery.d.ts +16 -0
- package/dist/notice-delivery.js +35 -0
- package/dist/notice-delivery.js.map +1 -0
- package/dist/office-share-page.d.ts +16 -0
- package/dist/office-share-page.js +85 -0
- package/dist/office-share-page.js.map +1 -0
- package/dist/office-share-service.d.ts +91 -0
- package/dist/office-share-service.js +176 -0
- package/dist/office-share-service.js.map +1 -0
- package/dist/office-share.d.ts +258 -0
- package/dist/office-share.js +549 -0
- package/dist/office-share.js.map +1 -0
- package/dist/opencode-usage-scan.d.ts +28 -0
- package/dist/opencode-usage-scan.js +92 -0
- package/dist/opencode-usage-scan.js.map +1 -0
- package/dist/opencode-usage-worker.d.ts +1 -0
- package/dist/opencode-usage-worker.js +10 -0
- package/dist/opencode-usage-worker.js.map +1 -0
- package/dist/outbound-handlers.js +22 -2
- package/dist/outbound-handlers.js.map +1 -1
- package/dist/outbound-schemas.d.ts +28 -2
- package/dist/outbound-schemas.js +29 -2
- package/dist/outbound-schemas.js.map +1 -1
- package/dist/public-web-gateway.js +16 -2
- package/dist/public-web-gateway.js.map +1 -1
- package/dist/quickstart-api.js +13 -2
- package/dist/quickstart-api.js.map +1 -1
- package/dist/quickstart.js +2 -1
- package/dist/quickstart.js.map +1 -1
- package/dist/remote-card-answer.d.ts +83 -0
- package/dist/remote-card-answer.js +208 -0
- package/dist/remote-card-answer.js.map +1 -0
- package/dist/reply-triggers.d.ts +2 -0
- package/dist/reply-triggers.js +3 -0
- package/dist/reply-triggers.js.map +1 -0
- package/dist/settings-api.d.ts +28 -0
- package/dist/settings-api.js +148 -17
- package/dist/settings-api.js.map +1 -1
- package/dist/settings-change.js +54 -17
- package/dist/settings-change.js.map +1 -1
- package/dist/settings-effect.js +12 -3
- package/dist/settings-effect.js.map +1 -1
- package/dist/settings-instance-patch.js +4 -1
- package/dist/settings-instance-patch.js.map +1 -1
- package/dist/setup-form.d.ts +1 -1
- package/dist/setup-form.js +55 -6
- package/dist/setup-form.js.map +1 -1
- package/dist/setup-host.d.ts +9 -0
- package/dist/setup-host.js +127 -6
- package/dist/setup-host.js.map +1 -1
- package/dist/setup-signin-assets.d.ts +2 -0
- package/dist/setup-signin-assets.js +6 -0
- package/dist/setup-signin-assets.js.map +1 -0
- package/dist/setup-wizard.js +2 -0
- package/dist/setup-wizard.js.map +1 -1
- package/dist/start-attempt.d.ts +9 -5
- package/dist/start-attempt.js +27 -8
- package/dist/start-attempt.js.map +1 -1
- package/dist/start-failure-chat.d.ts +4 -0
- package/dist/start-failure-chat.js +23 -6
- package/dist/start-failure-chat.js.map +1 -1
- package/dist/start-failure-notice.d.ts +4 -0
- package/dist/start-failure-notice.js +8 -0
- package/dist/start-failure-notice.js.map +1 -1
- package/dist/start-failure.d.ts +25 -0
- package/dist/start-failure.js +75 -2
- package/dist/start-failure.js.map +1 -1
- package/dist/structured-signin-transport.d.ts +8 -0
- package/dist/structured-signin-transport.js +79 -0
- package/dist/structured-signin-transport.js.map +1 -0
- package/dist/structured-signin.d.ts +131 -0
- package/dist/structured-signin.js +388 -0
- package/dist/structured-signin.js.map +1 -0
- package/dist/tool-permissions.js +12 -0
- package/dist/tool-permissions.js.map +1 -1
- package/dist/topic-commands.js +6 -2
- package/dist/topic-commands.js.map +1 -1
- package/dist/transcript-sources.d.ts +26 -2
- package/dist/transcript-sources.js +103 -40
- package/dist/transcript-sources.js.map +1 -1
- package/dist/turn-reply-guard.d.ts +25 -0
- package/dist/turn-reply-guard.js +111 -12
- package/dist/turn-reply-guard.js.map +1 -1
- package/dist/types.d.ts +46 -9
- package/dist/ui/backend-signin.js +68 -12
- package/dist/ui/chat-ambient.js +1 -1
- package/dist/ui/chat-effects.js +4 -4
- package/dist/ui/chat-render.js +5 -2
- package/dist/ui/chat-strings.js +4 -4
- package/dist/ui/chat-thread.js +2 -2
- package/dist/ui/first-run.js +2 -2
- package/dist/ui/fleet-canvas-view.js +114 -0
- package/dist/ui/fleet-canvas.js +15 -77
- package/dist/ui/fleet-office-editor.js +94 -14
- package/dist/ui/fleet-office-layout.js +235 -0
- package/dist/ui/fleet-office-model.js +12 -6
- package/dist/ui/fleet-office-overview.js +167 -0
- package/dist/ui/fleet-office-pack.d.ts +44 -0
- package/dist/ui/fleet-office-pack.js +352 -37
- package/dist/ui/fleet-office-skin.js +220 -36
- package/dist/ui/fleet-office-store.js +112 -7
- package/dist/ui/fleet-office-view.js +155 -0
- package/dist/ui/fleet-office-zones.js +264 -42
- package/dist/ui/fleet-office.js +957 -160
- package/dist/ui/fleet-usage.js +26 -21
- package/dist/ui/office-share-dialog.js +145 -0
- package/dist/ui/office-share-page.js +164 -0
- package/dist/ui/panel-chat.js +9 -2
- package/dist/ui/panel-details.js +2 -2
- package/dist/ui/panel-fleet.js +11 -77
- package/dist/ui/panel-log.js +4 -4
- package/dist/ui/panel-needs.js +4 -4
- package/dist/ui/panel-settings.js +608 -167
- package/dist/ui/search-dialog.js +26 -7
- package/dist/ui/settings-appearance.js +82 -29
- package/dist/ui/settings-apply.js +42 -7
- package/dist/ui/settings-dialogs.js +76 -23
- package/dist/ui/settings-draft.js +51 -0
- package/dist/ui/settings-guests.js +255 -79
- package/dist/ui/settings-learn.js +2 -2
- package/dist/ui/settings-model.js +16 -6
- package/dist/ui/settings-registry.js +146 -0
- package/dist/ui/settings-strings.js +116 -44
- package/dist/ui/settings-web-authority.js +34 -23
- package/dist/ui/shared/app-i18n.js +18 -2
- package/dist/ui/shared/app-nav.js +10 -5
- package/dist/ui/shared/app-prefs.js +80 -2
- package/dist/ui/shared/app-route.js +39 -5
- package/dist/ui/shared/app-shell.js +73 -10
- package/dist/ui/shared/app-stream.js +3 -1
- package/dist/ui/shared/app.css +307 -17
- package/dist/ui/shared/app.js +3 -0
- package/dist/ui/shared/effect-stock-trust.js +1 -1
- package/dist/ui/shared/identity-color.js +4 -4
- package/dist/ui/shared/office/cozy.png +0 -0
- package/dist/ui/shared/side-panel.js +95 -0
- package/dist/ui/shared/signin.js +2 -2
- package/dist/ui/shared/ui-dialog.js +6 -1
- package/dist/ui/shared/ui-icons.js +2 -0
- package/dist/ui/shared/web-authorize.js +13 -12
- package/dist/ui/structured-signin.js +115 -0
- package/dist/usage-report.d.ts +20 -0
- package/dist/usage-report.js +54 -17
- package/dist/usage-report.js.map +1 -1
- package/dist/usage-rollup.d.ts +9 -1
- package/dist/usage-rollup.js +20 -4
- package/dist/usage-rollup.js.map +1 -1
- package/dist/web-api.d.ts +26 -2
- package/dist/web-api.js +361 -5
- package/dist/web-api.js.map +1 -1
- package/dist/web-auth.js +8 -2
- package/dist/web-auth.js.map +1 -1
- package/dist/web-backend-login.d.ts +1 -7
- package/dist/web-backend-login.js +2 -24
- package/dist/web-backend-login.js.map +1 -1
- package/dist/web-experimental.d.ts +1 -1
- package/dist/web-experimental.js +1 -1
- package/dist/web-experimental.js.map +1 -1
- package/dist/web-mod-agent.js +2 -2
- package/dist/web-mod-agent.js.map +1 -1
- package/dist/web-office-acts.d.ts +173 -0
- package/dist/web-office-acts.js +285 -0
- package/dist/web-office-acts.js.map +1 -0
- package/dist/web-office-skins.d.ts +109 -0
- package/dist/web-office-skins.js +299 -0
- package/dist/web-office-skins.js.map +1 -0
- package/dist/web-office-store.d.ts +8 -2
- package/dist/web-office-store.js +77 -14
- package/dist/web-office-store.js.map +1 -1
- package/dist/web-settings-patch.d.ts +8 -1
- package/dist/web-settings-patch.js +65 -5
- package/dist/web-settings-patch.js.map +1 -1
- package/dist/web-shell-routes.d.ts +4 -2
- package/dist/web-shell-routes.js +17 -7
- package/dist/web-shell-routes.js.map +1 -1
- package/dist/working-recovery.d.ts +104 -0
- package/dist/working-recovery.js +298 -0
- package/dist/working-recovery.js.map +1 -0
- package/dist/working-state-journal.d.ts +5 -1
- package/dist/working-state-journal.js +31 -3
- package/dist/working-state-journal.js.map +1 -1
- package/package.json +3 -2
- package/templates/windows-shortcuts.ps1 +155 -140
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
// #2347 §6: the settings registry — one entry per setting, for Settings' search and the Ctrl K "Settings" group: where it
|
|
2
|
+
// is (its section, and the element to bring into view), what it is called in both languages (a settings string key,
|
|
3
|
+
// `labelKey`, or `label`), its config key, and the words people search with (synonyms, in both languages). A test
|
|
4
|
+
// mounts every section and checks each field drawn has an entry, and each entry's element is drawn in its section.
|
|
5
|
+
import { lang, tIn } from "/assets/app-i18n.js";
|
|
6
|
+
import { sectionPath } from "/assets/app-route.js";
|
|
7
|
+
import { navigate } from "/assets/app-nav.js";
|
|
8
|
+
import "./settings-strings.js";
|
|
9
|
+
import "./chat-strings.js";
|
|
10
|
+
import { GUESTS_SETTINGS } from "./settings-guests.js";
|
|
11
|
+
|
|
12
|
+
const L = (en, zh) => ({ en, "zh-TW": zh });
|
|
13
|
+
/** [id, section, target, labelKey | label, config key, words en, words zh] */
|
|
14
|
+
const ROWS = [
|
|
15
|
+
// You · Preferences
|
|
16
|
+
["profile.name", "preferences", "#profile-name", "settings.profileTitle", null, ["name", "display name", "who agents see", "profile"], ["名字", "名稱", "顯示名稱", "個人資料"]],
|
|
17
|
+
["prefs.theme", "preferences", "#pref-theme", "app.theme", null, ["theme", "dark", "light", "dark mode", "colour scheme"], ["主題", "深色", "淺色", "外觀"]],
|
|
18
|
+
["prefs.lang", "preferences", "#pref-lang", "app.language", null, ["language", "dashboard language", "english", "chinese", "locale"], ["語言", "介面語言", "中文", "英文"]],
|
|
19
|
+
["prefs.names", "preferences", "#pref-names", "app.names", null, ["names", "nickname", "real name", "instance name", "display"], ["名稱", "暱稱", "實名"]],
|
|
20
|
+
["prefs.previews", "preferences", "#pref-previews", "chat.previews", null, ["html preview", "preview", "iframe"], ["預覽", "HTML 預覽"]],
|
|
21
|
+
["prefs.tour", "preferences", "#tourBtn", "chat.tour", null, ["tour", "help", "walkthrough", "guide"], ["導覽", "說明", "教學"]],
|
|
22
|
+
["device.motion", "preferences", "#fx-follow-reduced-motion", "settings.themesFollowMotion", null, ["reduced motion", "animation", "effects", "accessibility"], ["減少動態", "動畫", "特效", "無障礙"]],
|
|
23
|
+
["device.css-off", "preferences", "#css-off-here", "settings.cssDeviceOff", null, ["custom css", "css off", "this device", "safe"], ["自訂 CSS", "關閉 CSS", "這個裝置"]],
|
|
24
|
+
// You · Look
|
|
25
|
+
["look.themes", "look", "#fx-show-themes", "settings.themesShow", "fx.show", ["agent themes", "themes", "effects", "widgets"], ["主題", "agent 的主題", "特效", "小工具"]],
|
|
26
|
+
["look.colours", "look", ".s-colors", "settings.colorTitle", "color.show", ["identity colour", "color", "colour", "turn off colours"], ["識別色", "顏色", "關閉顏色"]],
|
|
27
|
+
["look.cards", "look", ".s-card-size", "settings.cardSizeTitle", "card.size", ["identity card", "card size", "portrait", "banner"], ["身分卡", "卡片大小"]],
|
|
28
|
+
["look.widget", "look", ".s-widget", "settings.widgetTitle", "widget.sidebar", ["sidebar widget", "widget", "json"], ["側邊欄小工具", "小工具"]],
|
|
29
|
+
["look.css", "look", ".s-owner-css", "settings.cssTitle", null, ["custom css", "stylesheet", "style", "css"], ["自訂 CSS", "樣式表", "樣式"]],
|
|
30
|
+
["look.mods", "look", ".s-mods", "settings.modsTitle", null, ["mod", "mods", "import", "add-on", "agendmod"], ["mod", "匯入", "擴充"]],
|
|
31
|
+
["look.effects", "look", ".s-effects", null, null, ["effects", "canvas", "ambient", "petals", "click stars"], ["特效", "效果", "花瓣", "氛圍"], L("Effects", "效果")],
|
|
32
|
+
["look.restore", "look", ".s-restore", "settings.restoreTitle", null, ["restore defaults", "reset", "default"], ["還原預設值", "重設", "預設"]],
|
|
33
|
+
// Fleet · Agents
|
|
34
|
+
["agents.new", "agents", "#newAgentBtn", "settings.newAgent", null, ["new agent", "create", "add agent", "instance"], ["新增 agent", "建立", "新 agent"]],
|
|
35
|
+
["agents.provider-keys", "agents", ".s-provider-keys", "settings.providerKeys", "web.provider_secrets", ["api key", "provider", "openai", "anthropic", "token", "secret"], ["API 金鑰", "金鑰", "供應商", "token"]],
|
|
36
|
+
["defaults.tips", "agent-defaults", "#g-tips", "settings.dailyTips", "defaults.tips", ["daily tips", "notices"], ["每日提示"]],
|
|
37
|
+
["web.notify-login", "access", "#webNotifyLogin", "settings.webNotifyLogin", "web.notify_login", ["sign in", "login", "notices"], ["登入通知"]],
|
|
38
|
+
// Fleet · Agent defaults
|
|
39
|
+
["defaults.locale", "agent-defaults", "#g-locale", "settings.language", "defaults.locale", ["language", "bot language", "reply language", "locale"], ["語言", "回覆語言", "bot 語言"]],
|
|
40
|
+
["defaults.backend", "agent-defaults", "#g-be", "settings.defaultBackend", "defaults.backend", ["backend", "cli", "claude", "codex", "kiro"], ["後端", "CLI"]],
|
|
41
|
+
["defaults.model", "agent-defaults", "#g-model", "settings.defaultModel", "defaults.model", ["model", "opus", "sonnet", "gpt"], ["模型"]],
|
|
42
|
+
["defaults.auto-pause", "agent-defaults", "#g-auto", "settings.autoPause", "defaults.auto_pause_after", ["auto pause", "idle", "sleep", "minutes"], ["自動暫停", "閒置", "休眠"]],
|
|
43
|
+
["defaults.tool-progress", "agent-defaults", "#g-tp", "settings.toolProgress", "defaults.tool_progress", ["tool progress", "verbose", "steps"], ["工具進度", "詳細"]],
|
|
44
|
+
["defaults.visibility", "agent-defaults", "#g-vis", "settings.crossInstanceVisibility", "defaults.cross_instance_visibility", ["visibility", "bot to bot", "cross instance", "messages"], ["可見性", "bot 之間", "跨 instance"]],
|
|
45
|
+
["defaults.reply-triggers", "agent-defaults", "#g-reply-triggers", "settings.replyTriggers", "defaults.reply_triggers", ["classic native reply", "reply trigger"], ["原生回覆觸發"]],
|
|
46
|
+
["chat.classic-reply-triggers", "chat", "#g-creply-triggers", "settings.replyTriggers", "classic_defaults.reply_triggers", ["classic native reply"], ["ClassicBot 原生回覆觸發"]],
|
|
47
|
+
["defaults.reply-guard", "agent-defaults", "#g-reply", "settings.replyCompletionGuard", "defaults.reply_completion_guard", ["delivered reply", "reply guard", "require reply"], ["送達回覆", "回覆保護"]],
|
|
48
|
+
["defaults.tool-set", "agent-defaults", "#g-ts", "settings.toolSet", "defaults.tool_set", ["tool set", "tools", "mcp"], ["工具組", "工具"]],
|
|
49
|
+
["defaults.dashboard", "agent-defaults", "#g-dash", "settings.dashboardAccess", "defaults.dashboard", ["dashboard access", "dashboard features", "permissions", "appearance tools", "task board", "web settings"], ["Dashboard 權限", "權限", "外觀", "任務看板", "網頁設定"]],
|
|
50
|
+
["defaults.log-level", "agent-defaults", "#g-ll", "settings.logLevel", "defaults.log_level", ["log level", "debug", "logging"], ["記錄層級", "除錯", "日誌"]],
|
|
51
|
+
["defaults.agent-mode", "agent-defaults", "#g-am", "settings.agentMode", "defaults.agent_mode", ["agent mode", "mcp", "cli"], ["agent 模式"]],
|
|
52
|
+
["defaults.hang-on", "agent-defaults", "#g-hang-on", "settings.hangEnabled", "defaults.hang_detector.enabled", ["hang detector", "stuck", "frozen"], ["卡住偵測", "卡住", "當機"]],
|
|
53
|
+
["defaults.hang-timeout", "agent-defaults", "#g-hang", "settings.hangTimeout", "defaults.hang_detector.timeout_minutes", ["hang timeout", "stuck", "minutes"], ["卡住逾時", "逾時"]],
|
|
54
|
+
["defaults.concurrency", "agent-defaults", "#g-conc", "settings.concurrency", "startup.concurrency", ["startup", "concurrency", "parallel", "spawn"], ["啟動", "並行"]],
|
|
55
|
+
["defaults.project-roots", "agent-defaults", "#g-roots", "settings.projectRootsTitle", "project_roots", ["project roots", "folders", "directory", "where agents work", "working directory"], ["專案資料夾", "資料夾", "目錄", "工作目錄"]],
|
|
56
|
+
["defaults.stagger", "agent-defaults", "#g-stag", "settings.staggerDelay", "startup.stagger_delay_ms", ["startup", "stagger", "delay"], ["啟動", "間隔", "延遲"]],
|
|
57
|
+
// Fleet · Chat & connections
|
|
58
|
+
["chat.new-connection", "chat", "#newBotBtn", "settings.newBot", "channels", ["new connection", "bot", "telegram", "discord", "bot token", "token"], ["新增連線", "bot", "Telegram", "Discord", "bot token", "token"]],
|
|
59
|
+
["chat.web-echo", "chat", "#webEchoToChannel", "settings.webEcho", "web.echo_to_channel", ["web echo", "mirror", "copy to chat", "echo"], ["網頁轉發", "轉發", "同步到聊天"]],
|
|
60
|
+
["chat.classic-rooms", "chat", "#classicbot", "settings.classicChannels", null, ["classicbot", "rooms", "channels"], ["ClassicBot", "房間", "頻道"]],
|
|
61
|
+
["chat.classic-backend", "chat", "#g-cbe", "settings.classicBackend", "classic_defaults.backend", ["classicbot backend", "backend"], ["ClassicBot 後端", "後端"]],
|
|
62
|
+
["chat.classic-tool-progress", "chat", "#g-ctp", "settings.toolProgress", "classic_defaults.tool_progress", ["classicbot tool progress", "tool progress"], ["ClassicBot 工具進度", "工具進度"]],
|
|
63
|
+
["chat.classic-reply-guard", "chat", "#g-creply", "settings.replyCompletionGuard", "classic_defaults.reply_completion_guard", ["classicbot delivered reply", "reply guard"], ["ClassicBot 送達回覆"]],
|
|
64
|
+
["chat.classic-admins", "chat", "#g-admins", "settings.classicAdmins", "classic.admin_users", ["classicbot admins", "who can use classicbot", "admin"], ["ClassicBot 管理員", "誰可以使用 ClassicBot", "管理員"]],
|
|
65
|
+
["chat.classic-guilds", "chat", "#g-guilds", "settings.allowedGuilds", "classic.allowed_guilds", ["discord server", "guild", "allowed servers"], ["Discord 伺服器", "伺服器"]],
|
|
66
|
+
// Fleet · Web dashboard
|
|
67
|
+
["dash.log-tab", "web-dashboard", "#webLogTab", "settings.webLogTab", "web.log_tab", ["log tab", "steps", "log"], ["Log 分頁", "紀錄", "步驟"]],
|
|
68
|
+
["dash.usage-public", "web-dashboard", "#webUsagePublic", "settings.webUsagePublic", "web.usage_report_on_public_link", ["usage", "public link", "cost", "tokens"], ["用量", "公開連結", "費用"]],
|
|
69
|
+
["dash.app-icon", "web-dashboard", ".s-app-icon", "settings.appIconTitle", null, ["app icon", "favicon", "home screen", "icon"], ["App 圖示", "圖示", "主畫面"]],
|
|
70
|
+
["dash.card-limits", "web-dashboard", ".s-card-limits", "settings.cardLimitsTitle", "web.appearance", ["upload limits", "portrait", "banner", "card limits"], ["上傳限制", "身分卡上傳限制"]],
|
|
71
|
+
["dash.canvas-worker", "web-dashboard", ".s-experimental-effects", "experimentalEffects.title", "web.experimental.canvas_worker", ["canvas worker", "experimental", "effects"], ["Canvas Worker", "實驗功能", "特效"]],
|
|
72
|
+
// Fleet · Access & security
|
|
73
|
+
["access.session-absolute", "access", "#webSessionAbsolute", "settings.sessionAbsolute", "web.session.local.absolute_hours", ["session", "sign in", "hours", "expire", "logout"], ["session", "登入", "時數", "到期"]],
|
|
74
|
+
["access.session-idle", "access", "#webSessionIdle", "settings.sessionIdle", "web.session.local.idle_hours", ["session", "idle", "unused", "hours"], ["session", "閒置", "時數"]],
|
|
75
|
+
["access.terminal", "access", "#webTerminalEnabled", "settings.webTerminalEnabled", "web_terminal.enabled", ["browser terminal", "terminal", "login", "shell"], ["瀏覽器終端機", "終端機", "登入"]],
|
|
76
|
+
["access.terminal-ttl", "access", "#webTerminalTtl", "settings.webTerminalTtl", "web_terminal.ttl_minutes", ["terminal minutes", "terminal", "ttl"], ["終端機", "分鐘"]],
|
|
77
|
+
["access.public-link", "access", "#publicWebLink", "settings.publicLink", "web.public_link.allow_public", ["public link", "share", "tunnel", "cloudflare", "trycloudflare"], ["公開連結", "分享", "tunnel"]],
|
|
78
|
+
["access.hostname", "access", "#publicWebHostname", "settings.namedHostname", "web.public_link.hostname", ["fixed address", "domain", "hostname", "named tunnel", "https"], ["固定網址", "網域", "主機名稱", "具名 tunnel"]],
|
|
79
|
+
["access.origin-port", "access", "#publicWebOriginPort", "settings.namedOriginPort", "web.public_link.origin_port", ["port", "origin port", "fixed address"], ["連接埠", "port", "固定網址"]],
|
|
80
|
+
["access.public-ttl", "access", "#publicWebTtl", "settings.publicTtl", "web.public_link.ttl_minutes", ["public link minutes", "how long", "ttl", "no expiry", "expire"], ["公開連結", "分鐘", "多久", "不過期", "到期"]],
|
|
81
|
+
// Shown with a fixed hostname (a named tunnel), or while it is set.
|
|
82
|
+
["access.public-auto-open", "access", "#publicAutoOpen", "settings.publicAutoOpen", "web.public_link.auto_open", ["reopen after restart", "auto open", "public link", "named link"], ["重新開啟", "自動開啟", "公開連結", "固定網域"]],
|
|
83
|
+
["access.protocol", "access", "#publicWebProtocol", "settings.publicProtocol", "web.public_link.protocol", ["protocol", "http2", "quic", "https"], ["通訊協定", "協定"]],
|
|
84
|
+
["access.cloudflare-token", "access", "#publicTunnelToken", "settings.namedToken", "web.public_link.tunnel_token_env", ["cloudflare token", "tunnel token", "token", "fixed address", "secret"], ["Cloudflare token", "tunnel token", "token", "固定網址", "金鑰"]],
|
|
85
|
+
["access.authority", "access", "#vaEnabled", "settings.vaEnabled", "web.verified_authority.enabled", ["web authority", "verified", "authorize"], ["網頁授權", "驗證", "授權"]],
|
|
86
|
+
["access.authority-loopback", "access", "#vaLoopbackOnly", "settings.vaLoopbackOnly", "web.verified_authority.loopback_only", ["only this computer", "loopback", "authorize"], ["只有這台電腦", "授權"]],
|
|
87
|
+
// #2453: shown with a fixed hostname (a named tunnel), or while it is on; its label names the hostname, so its own words here.
|
|
88
|
+
["access.authority-named-link", "access", "#vaNamedLink", null, "web.verified_authority.named_link", ["named link", "my named link", "authorize", "fixed hostname"], ["固定網域", "授權", "named link"], L("Also over my named link", "也允許透過我的固定網域")],
|
|
89
|
+
["access.authority-quick-link", "access", "#vaQuickLink", null, "web.verified_authority.quick_link", ["temporary public link", "quick link", "quick tunnel", "authorize", "trycloudflare"], ["臨時公開連結", "授權", "quick tunnel"], L("Also over the temporary public link", "也允許透過臨時公開連結")],
|
|
90
|
+
["access.authority-hours", "access", "#vaHours", null, "web.verified_authority.max_session_hours", ["authorization hours", "how long", "authority"], ["授權時數", "多久"], L("How long a web authorization lasts", "網頁授權持續多久")],
|
|
91
|
+
["access.authority-revoke", "access", "#vaRevoke", "settings.vaRevoke", null, ["revoke", "sign out", "authority"], ["撤銷", "登出", "授權"]],
|
|
92
|
+
// Fleet · Advanced
|
|
93
|
+
["advanced.fleet-yaml", "advanced", ".s-dev", null, null, ["fleet.yaml", "yaml", "json", "raw", "edit config"], ["fleet.yaml", "YAML", "設定檔"], L("fleet.yaml (YAML / JSON)", "fleet.yaml(YAML / JSON)")],
|
|
94
|
+
["advanced.read-only", "advanced", ".s-web-ro", "settings.webReadOnlyTitle", null, ["allowed hosts", "view access", "preview port", "read only", "web settings"], ["allowed hosts", "唯讀", "網頁設定"]],
|
|
95
|
+
];
|
|
96
|
+
|
|
97
|
+
export const SETTINGS_REGISTRY = Object.freeze([
|
|
98
|
+
...ROWS.map(([id, section, target, labelKey, key, en, zh, label]) => Object.freeze({ id, section, target, labelKey, label: label || null, key, words: { en, "zh-TW": zh } })),
|
|
99
|
+
// dev-claude2's Guests section (#2348): its entries, brought to the same shape (the card itself is the target).
|
|
100
|
+
...GUESTS_SETTINGS.map((g) => Object.freeze({ id: g.id, section: g.section, target: g.id === "guests.enabled" ? "#guestsEnabled" : g.id === "guests.chat" ? "#guestsChat" : "#guests",
|
|
101
|
+
labelKey: null, label: g.label, key: g.key || null, words: g.words })),
|
|
102
|
+
]);
|
|
103
|
+
|
|
104
|
+
/** An entry's name in a language. */
|
|
105
|
+
export function settingLabel(entry, language = lang()) {
|
|
106
|
+
return entry.label ? entry.label[language] || entry.label.en : tIn(language, entry.labelKey);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
const fold = (s) => String(s || "").toLowerCase().normalize("NFKC");
|
|
110
|
+
/**
|
|
111
|
+
* Entries matching `query`: every word in it is found in the entry's name (either language), its config key, or its
|
|
112
|
+
* words (either language). Ranked: a name that starts with it, then one that contains it, then a config key, then a word.
|
|
113
|
+
*/
|
|
114
|
+
export function searchSettings(query) {
|
|
115
|
+
const terms = fold(query).split(/\s+/).filter(Boolean);
|
|
116
|
+
if (!terms.length) return [];
|
|
117
|
+
const scored = [];
|
|
118
|
+
for (const entry of SETTINGS_REGISTRY) {
|
|
119
|
+
const names = [settingLabel(entry, "en"), settingLabel(entry, "zh-TW")].map(fold);
|
|
120
|
+
const keys = fold(entry.key || "");
|
|
121
|
+
const words = [...(entry.words.en || []), ...(entry.words["zh-TW"] || [])].map(fold);
|
|
122
|
+
let score = 0, all = true;
|
|
123
|
+
for (const term of terms) {
|
|
124
|
+
const s = names.some((n) => n.startsWith(term)) ? 4 : names.some((n) => n.includes(term)) ? 3 : keys.includes(term) ? 2 : words.some((w) => w.includes(term)) ? 1 : 0;
|
|
125
|
+
if (!s) { all = false; break; }
|
|
126
|
+
score += s;
|
|
127
|
+
}
|
|
128
|
+
if (all) scored.push({ entry, score });
|
|
129
|
+
}
|
|
130
|
+
return scored.sort((a, b) => b.score - a.score).map((s) => s.entry);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
// The setting a search result opened, brought into view once its section is drawn (the panel asks for it).
|
|
134
|
+
let pending = null;
|
|
135
|
+
/** Go to a setting: its section, then (once drawn) the setting itself, focused and flashed. */
|
|
136
|
+
export function goToSetting(entry) {
|
|
137
|
+
pending = entry ? entry.target : null;
|
|
138
|
+
navigate(sectionPath(entry.section));
|
|
139
|
+
}
|
|
140
|
+
/** Go to a section and, once it is drawn, to one element in it (a field the bar says to fix). */
|
|
141
|
+
export function goToTarget(section, target) {
|
|
142
|
+
pending = target || null;
|
|
143
|
+
navigate(sectionPath(section));
|
|
144
|
+
}
|
|
145
|
+
/** The element a search result asked for, once (null: none). */
|
|
146
|
+
export function takePendingSetting() { const p = pending; pending = null; return p; }
|
|
@@ -4,6 +4,10 @@ import { register } from "/assets/app-i18n.js";
|
|
|
4
4
|
|
|
5
5
|
register("settings", {
|
|
6
6
|
en: {
|
|
7
|
+
noticeTopic: "Topic", noticeOff: "Off",
|
|
8
|
+
webNotifyLogin: "Web sign-in notices", dailyTips: "Daily tips",
|
|
9
|
+
webNotifyLoginHint: "Posted in the topic. Off suppresses operator notices only; guest and public-link security notices still post. Default: Topic.",
|
|
10
|
+
dailyTipsHint: "Posted in the General topic. Default: Topic. /tips still posts where invoked.",
|
|
7
11
|
title: "Settings",
|
|
8
12
|
myAgents: "My Agents",
|
|
9
13
|
bots: "Bots",
|
|
@@ -60,6 +64,11 @@ register("settings", {
|
|
|
60
64
|
autoPause: "Auto-pause after",
|
|
61
65
|
minutes: "minutes",
|
|
62
66
|
inheritDefault: "Inherit from defaults",
|
|
67
|
+
// #2347 §10: the value in effect, and where it comes from.
|
|
68
|
+
defaultMark: "default", inEffect: "In effect: {0}", inheritedValue: "Inherited: {0}",
|
|
69
|
+
changeInDefaults: "change in Agent defaults", changeInClassic: "change in ClassicBot defaults",
|
|
70
|
+
cappedBySession: "capped by the session length", hoursValue: "{0} h", minutesValue: "{0} min", valueOn: "on", valueOff: "off", valueNone: "none",
|
|
71
|
+
concurrencyAuto: "automatic, 2–10 by free memory and CPU cores", inEffectShort: "in effect: {0}", cappedByTotal: "capped by upload_max_total_mb",
|
|
63
72
|
statusEmojis: "Status emojis",
|
|
64
73
|
statusEmojisInstance: "This agent's status emojis (override the connection's)",
|
|
65
74
|
statusEmojisChannel: "Status emojis for this connection's bots",
|
|
@@ -103,6 +112,7 @@ register("settings", {
|
|
|
103
112
|
dashboard_appearance: "Its look (theme, pictures, widgets, effects, mod proposals)",
|
|
104
113
|
dashboard_task_board: "The task board",
|
|
105
114
|
dashboard_web_settings: "Your web appearance settings",
|
|
115
|
+
dashboard_office: "Office: walk, speak and act in the Office view",
|
|
106
116
|
dashboardInherit: "Fleet default ({0})",
|
|
107
117
|
dashboardOn: "allowed",
|
|
108
118
|
dashboardOff: "off",
|
|
@@ -162,7 +172,7 @@ register("settings", {
|
|
|
162
172
|
applyClose: "Close",
|
|
163
173
|
settingsButton: "Settings",
|
|
164
174
|
connRetryNow: "Retry now", connRetryQueued: "Connection retry requested.", connRetryFailed: "Could not retry this connection. Check its status and try again.",
|
|
165
|
-
modalDone: "
|
|
175
|
+
modalDone: "Done",
|
|
166
176
|
wizardButton: "Setup wizard",
|
|
167
177
|
wizardTitle: "Set up AgEnD",
|
|
168
178
|
wizardStep: "Step {0} of {1}",
|
|
@@ -209,6 +219,7 @@ register("settings", {
|
|
|
209
219
|
deleteBot: "Delete this bot",
|
|
210
220
|
noAllowedUsers: "no allowed users",
|
|
211
221
|
searchAll: "Search agents, bots, channels…",
|
|
222
|
+
searchSettings: "Search settings — token, 語言, session…", searchNone: "No setting matches.", searchFoot: "↑↓ move · Enter go there · Esc close · also under Ctrl K → Settings",
|
|
212
223
|
accessMovedHint: "Who may use the bot is set on the connection itself — open Settings on \"{0}\" under Connections.",
|
|
213
224
|
applyRestartNeeded: "Saved — restart AgEnD to apply",
|
|
214
225
|
applyNoChange: "no change needed",
|
|
@@ -226,13 +237,15 @@ register("settings", {
|
|
|
226
237
|
signatureMismatch: "fleet.yaml and the running configuration disagree on: {0}. Restarting will not clear this — check daemon.log first.",
|
|
227
238
|
applyStillWorking: "Still restarting ({0}s) — AgEnD is still working; this page keeps checking.",
|
|
228
239
|
applyLostJob: "Lost track of this apply (the fleet may have restarted). Reload the page to see the current state.",
|
|
229
|
-
changesPending: "{0} change(s)
|
|
240
|
+
changesPending: "{0} unsaved change(s)",
|
|
241
|
+
fixToSave: "Fix {0} field(s) to save", fixToSaveIn: "Fix {0} field(s) in {1} to save",
|
|
230
242
|
impactNow: "Immediately",
|
|
231
243
|
impactAgent: "Restart this Agent",
|
|
232
244
|
impactFleet: "Restart AgEnD",
|
|
233
|
-
queued: "
|
|
245
|
+
queued: "Not saved yet: {0} — Save below",
|
|
234
246
|
applyFailed: "Apply failed",
|
|
235
247
|
changesApplied: "Changes applied. AgEnD is reconciling affected Agents.",
|
|
248
|
+
youPrefs: "Your preferences", youSaved: "Saved.", youSaveFailed: "Some of your preferences were not saved — try again.", youDeviceChoice: "This device: {0}",
|
|
236
249
|
reviewChanges: "Review changes",
|
|
237
250
|
backendUnavailable: "{0} (removed — choose another backend)",
|
|
238
251
|
backendNotInstalled: "not installed", backendNotSignedIn: "not signed in (use /login)", backendTooOld: "needs {0} or newer", backendUnchecked: "not checked yet",
|
|
@@ -254,7 +267,7 @@ register("settings", {
|
|
|
254
267
|
concurrencyWarning: "May exceed CPU capacity on smaller hosts",
|
|
255
268
|
staggerRange: "Must be between 0 and 30000",
|
|
256
269
|
staggerWarning: "Very low values can cause startup spikes",
|
|
257
|
-
|
|
270
|
+
"sec_preferences": "Preferences", syncedTitle: "Synced across your devices", syncedLead: "Changes here apply on every device where you are signed in.",
|
|
258
271
|
profileTitle: "Your name",
|
|
259
272
|
profileLeadBound: "Agents see your web messages as the Discord or Telegram account your sign-in code was sent to: its id, and its name unless you choose another here. It follows you to every device you sign in on. Agents do your ordinary requests as you; a release, anything destructive, spending, secrets or passing your authority on needs this browser authorized, or your confirm in Discord or Telegram.",
|
|
260
273
|
profileLeadUnbound: "This browser was not signed in with a code sent to your Discord or Telegram account, so agents see your web messages as \"web-user\" (or the name you set here). Sign in with a code from /web to be recognised as your account.",
|
|
@@ -263,10 +276,9 @@ register("settings", {
|
|
|
263
276
|
syncedPublicLink: "On the public link these are read-only: a change here stays in this browser.",
|
|
264
277
|
deviceTitle: "This device only", deviceLead: "The tour, text size, view fit, the sidebar shown or hidden, panel widths and desktop notifications stay on each device.",
|
|
265
278
|
sec_agents: "Agents",
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
sec_advanced: "Developer",
|
|
279
|
+
"sec_agent-defaults": "Agent defaults", sec_chat: "Chat & connections", "sec_web-dashboard": "Web dashboard", sec_access: "Access & security",
|
|
280
|
+
sec_advanced: "Advanced", sec_look: "Look", grp_you: "You", grp_fleet: "Fleet",
|
|
281
|
+
classicDefaultsTitle: "ClassicBot defaults", publicLinkTitle: "Public link & fixed address", webDashboardTitle: "Dashboard features", webSettingsLabel: "Web settings",
|
|
270
282
|
stRunning: "Running",
|
|
271
283
|
stPaused: "Paused",
|
|
272
284
|
stCrashed: "Crashed",
|
|
@@ -288,6 +300,8 @@ register("settings", {
|
|
|
288
300
|
deleteAgentMenu: "Delete agent",
|
|
289
301
|
deleteAgentLabel: "Delete {0}",
|
|
290
302
|
updateAgent: "Update {0}",
|
|
303
|
+
projectRootsTitle: "Project folders", projectRootsHint: "New agents may only work inside these folders (empty: anywhere). Checked when an agent is created.",
|
|
304
|
+
projectRootsAnywhere: "any folder",
|
|
291
305
|
updateDefaults: "Update agent defaults",
|
|
292
306
|
updateClassicDefaults: "Update ClassicBot defaults and access",
|
|
293
307
|
updateAccess: "Update {0} access",
|
|
@@ -321,10 +335,8 @@ register("settings", {
|
|
|
321
335
|
keyRollbackFailed: "Rollback failed",
|
|
322
336
|
accessTitle: "Access",
|
|
323
337
|
webChat: "Web chat",
|
|
324
|
-
sec_web: "Web",
|
|
325
338
|
// #1629 r4 §3: Settings → Appearance (owner CSS).
|
|
326
|
-
|
|
327
|
-
groupLook: "Look", groupLayout: "Your layout", groupCss: "Styles you write", groupMods: "Add-ons", groupAdvanced: "Advanced", learnMore: "Learn more: {0}",
|
|
339
|
+
motionTitle: "Effects on this device", groupLook: "Look", groupLayout: "Your layout", groupCss: "Styles you write", groupMods: "Add-ons", groupAdvanced: "Advanced", learnMore: "Learn more: {0}",
|
|
328
340
|
colorTitle: "Identity colours", colorLead: "One agent's colour: its ⋯ menu → Colour…",
|
|
329
341
|
colorPlaces: "Where colours show", colorSample: "Sample agent", colorOff: "Turn off colours",
|
|
330
342
|
colorOffLead: "Colours people picked are kept.",
|
|
@@ -394,7 +406,7 @@ register("settings", {
|
|
|
394
406
|
modInstalled: "Installed {0}.",
|
|
395
407
|
modFailed: "Not done: {0}",
|
|
396
408
|
idLine: "ID: {0}",
|
|
397
|
-
modCanvasWorkerOff: "Not done: this mod has Canvas Worker effects, an experimental feature. Turn it on in Settings → Web
|
|
409
|
+
modCanvasWorkerOff: "Not done: this mod has Canvas Worker effects, an experimental feature. Turn it on in Settings → Web dashboard first.",
|
|
398
410
|
modDownload: "Download",
|
|
399
411
|
modUninstall: "Uninstall",
|
|
400
412
|
modUninstallConfirm: "Uninstall {0}? Its effects leave your library unless something still uses them. What it applied stays.",
|
|
@@ -498,7 +510,6 @@ register("settings", {
|
|
|
498
510
|
sessionIdle: "Sign out after unused for, hours (1–720)",
|
|
499
511
|
sessionRange: "Must be a number of hours from 1 to 720",
|
|
500
512
|
sessionIdleOver: "Must not exceed the session length",
|
|
501
|
-
defaultHours: "{0} (default)",
|
|
502
513
|
webTerminalTitle: "Browser terminal",
|
|
503
514
|
webTerminalHint: "The token-gated terminal /login opens to sign a CLI in. Off: /login refuses. Applies to the next /login.",
|
|
504
515
|
webTerminalEnabled: "Allow the browser terminal",
|
|
@@ -516,14 +527,36 @@ register("settings", {
|
|
|
516
527
|
guestNarrow: "Narrow", guestNotReachable: "(no longer reachable)", guestReachesNothing: "This account reaches no agent from chat right now, so there is nothing to narrow.", guestNarrowLift: "Remove narrowing", guestNarrowHint: "Tick what this guest may still reach. Narrowing only takes away (it applies at once); widening or removing it waits for a fleet admin's confirmation.",
|
|
517
528
|
guestSignOut: "Sign out", guestSignOutTitle: "Sign out this guest?", guestSignOutConfirm: "{0}'s guest sessions end now, their sign-in code stops working and their browsers are forgotten. They can sign in again with /web while guest sign-in is on.",
|
|
518
529
|
guestSignedOut: "{0} is signed out.", guestSignedOutNotDurable: "{0} is signed out for now, but it could not be saved: a restart may bring their sessions back.", guestSignOutFailed: "That did not work — try again.",
|
|
530
|
+
// #2348: explicit grants.
|
|
531
|
+
grantsHint: "Choose who may sign in as a guest and which agents each of them sees. A guest sees a granted agent's chat as its channel showed it — other people's messages there too, never web-only ones. Granting waits for a fleet admin's OK in General; taking away applies at once.",
|
|
532
|
+
grantsLegacy: "Guests now reach what their chat access gives them. Saving grants switches to explicit access: only the people below, only their ticked agents.",
|
|
533
|
+
grantsConvert: "Start from today's guests", grantsWithAccess: "People with access", grantsNoneYet: "No one has guest access yet.",
|
|
534
|
+
grantsAdd: "Add a person", grantsSearch: "Search people who have written to your agents", grantsNoPeople: "No one matches. A person must have written to an agent first.",
|
|
535
|
+
grantsChoose: "Choose", grantsChosen: "Chosen", grantsMaySee: "{0} may see:", grantsClassicRooms: "ClassicBot rooms", grantsWroteHere: "wrote here", grantsWroteTo: "Wrote to: {0}",
|
|
536
|
+
grantsLastSeen: "last seen {0}", grantsRecent: "Recent changes", grantsRecentNone: "No change to anyone's access yet.", grantsAuditDirect: "applied at once", grantsAuditConfirmed: "confirmed in General", grantsAuditEnded: "{0} session(s) ended", grantsAuditCodeSent: "sign-in code sent", grantsAuditCodeNot: "sign-in code not sent ({0})", grantsAuditDmFailed: "the DM did not go through", grantsAuditWait: "asked again within a minute", grantsAuditAdminLimit: "the admin's limit of codes was reached",
|
|
537
|
+
grantsEditAgents: "Edit agents", grantsRemove: "Remove access", grantsUndoRemove: "Keep access",
|
|
538
|
+
grantsWillBeRemoved: "Access ends when you save.", grantsNew: "New — granted when you save", grantsNoAgents: "Tick at least one agent, or remove this person.",
|
|
539
|
+
grantsSend: "Send sign-in code", grantsSendAgain: "Send again in {0}", grantsSendSaveFirst: "Save first: a code goes only to saved access.",
|
|
540
|
+
grantsSent: "Code sent {0} · expires {1}", grantsSentPublic: "It works on the open public link too.", grantsSending: "Sending…",
|
|
541
|
+
grantsSignedIn: "Signed in · {0} device(s)", grantsNotSignedIn: "Not signed in",
|
|
542
|
+
grantsDmFailed: "Couldn't DM {0}: {1}", grantsDmFailedTg: "Couldn't DM {0}: they haven't started the bot. Send them this link: {1}",
|
|
543
|
+
grantsDmFailedDiscord: "Couldn't DM {0}: their Discord privacy settings block messages from this server.",
|
|
544
|
+
grantsWait: "One code a minute per person — try again shortly.", grantsAdminLimit: "You've sent many codes; try again in a few minutes.",
|
|
545
|
+
grantsCodeFailed: "The code was not sent: {0}",
|
|
546
|
+
codeGuestsOff: "guest sign-in is off", codeAdmin: "a fleet admin signs in as an admin", codeNothing: "nothing is granted to this person yet — save their access first",
|
|
547
|
+
codeStarting: "AgEnD is starting or this connection is not running", codePaused: "guest sign-in is paused for a few minutes (too many wrong codes)",
|
|
548
|
+
codeBusy: "too many guest codes are waiting to be used — try again in a few minutes", codeRevoked: "you are no longer authorized", grantsWaiting: "Waiting for a fleet admin's OK in General.", grantsSaveFailed: "Not saved: {0}",
|
|
549
|
+
grantsPublicLinkNote: "If they aren't on this network, open the public link first, then send the code.",
|
|
519
550
|
vaTitle: "Web authority", vaReview: "Review web authority changes",
|
|
520
|
-
vaHint: "Whether a signed-in fleet admin's web messages carry their own account's authority, recorded in each message's delivery receipt. A session signed in with a code sent privately to that account, on the dashboard reached directly, is authorized once from Discord or Telegram;
|
|
551
|
+
vaHint: "Whether a signed-in fleet admin's web messages carry their own account's authority, recorded in each message's delivery receipt. A session signed in with a code sent privately to that account, on the dashboard reached directly, is authorized once from Discord or Telegram. Guests never are; over a public link, only while its option below is on. Agents do an admin's ordinary web requests either way; a release, anything destructive, spending, secrets or passing authority on needs this.",
|
|
521
552
|
vaLoadFailed: "Web authority could not be loaded.",
|
|
522
553
|
vaEnabled: "Web messages carry authority", vaEnabledHint: "On by default: a session carries authority only once its account confirms it from Discord or Telegram. Off: no web message carries authority, and any already given reads as none at once; authority given before it was turned off never comes back.",
|
|
523
554
|
vaStuckOff: "Web authority is off for now: its state could not be saved on this computer (see the fleet log). It comes back on by itself once it can be.",
|
|
524
555
|
vaLoopbackOnly: "Only this computer can authorize", vaLoopbackOnlyHint: "On: only a browser on this computer qualifies, not one on your network or tailnet, and authority already given from elsewhere reads as none. Turning it off again doesn't bring that back.",
|
|
525
|
-
vaNamedLink: "Also over my named link ({0})", vaNamedLinkHint: "On: a browser signed in over your own named-tunnel hostname may be authorized too (the same Confirm in your DM). It is reached from the internet, and Cloudflare sees its traffic: turning this on is confirmed in a General or on this computer. Off applies at once, and every authorization given over it reads as none.
|
|
556
|
+
vaNamedLink: "Also over my named link ({0})", vaNamedLinkHint: "On: a browser signed in over your own named-tunnel hostname may be authorized too (the same Confirm in your DM). It is reached from the internet, and Cloudflare sees its traffic: turning this on is confirmed in a General or on this computer. Off applies at once, and every authorization given over it reads as none. The temporary public link has its own option below.",
|
|
526
557
|
vaSessionNamed: "over your named link",
|
|
558
|
+
vaQuickLink: "Also over the temporary public link", vaQuickLinkHint: "On: a browser signed in over the temporary public link that /web opens may be authorized too (the same Confirm in your DM). That link is an address on the internet, served by Cloudflare's quick-tunnel service, which sees its traffic. Turning this on is confirmed in a General or on this computer, and ends every authorization given so far (each browser confirms again). Turning it off applies at once. An authorized browser's authority ends with the link.",
|
|
559
|
+
vaSessionQuick: "over the temporary public link",
|
|
527
560
|
vaLanWarning: "The dashboard also answers to {0} (web.allowed_hosts). Anyone who reaches it there with a stolen sign-in could give authority in your name. Turn on \"Only this computer can authorize\" unless you trust everyone who can reach it.",
|
|
528
561
|
vaHours: "An authorization lasts (hours, {0}–{1})", vaHoursRange: "Must be a number from 1 to 48",
|
|
529
562
|
vaSessionsTitle: "Authorized sessions", vaSessionsNone: "No session is authorized now.", vaSessionUntil: "Authorized {0} · until {1}",
|
|
@@ -533,7 +566,6 @@ register("settings", {
|
|
|
533
566
|
searchRetentionUnset: "not set (no age limit; 300,000-row cap)",
|
|
534
567
|
searchRetentionZero: "0 (no age limit; 300,000-row cap)",
|
|
535
568
|
webSearchHint: "Global search keeps entries with no age limit by default. The daily prune still caps the index at 300,000 rows (oldest first). Set web.search.retention_days in fleet.yaml (1–3650 days, or 0 for no age limit); it takes effect at the next fleet start.",
|
|
536
|
-
notSet: "not set (default)",
|
|
537
569
|
defaultsTitle: "Defaults",
|
|
538
570
|
classicBackend: "ClassicBot default backend",
|
|
539
571
|
whoUsesClassic: "Who can use ClassicBot",
|
|
@@ -541,9 +573,10 @@ register("settings", {
|
|
|
541
573
|
guildIdPlaceholder: "guild id",
|
|
542
574
|
tagPlaceholder: "tag",
|
|
543
575
|
removeItem: "Remove {0}",
|
|
544
|
-
inheritPlaceholder: "(inherit default)",
|
|
545
576
|
zeroDisabled: "0 = off",
|
|
546
577
|
optional: "optional",
|
|
578
|
+
replyTriggers: "Native replies trigger ClassicBot",
|
|
579
|
+
replyTriggersHint: "Off by default: only an exact @bot mention triggers a collab room. On also accepts one-hop replies to that bot. Forwarded content never counts; fleet-topic traffic is unchanged.",
|
|
547
580
|
collabMode: "Collaboration mode",
|
|
548
581
|
contextLines: "Context lines",
|
|
549
582
|
refresh: "Refresh",
|
|
@@ -574,10 +607,10 @@ register("settings", {
|
|
|
574
607
|
rotateToken: "Rotate the {0} token",
|
|
575
608
|
addBotLabel: "Add connection {0}",
|
|
576
609
|
removeBotLabel: "Remove connection {0}",
|
|
577
|
-
pendingRegion: "
|
|
610
|
+
pendingRegion: "Unsaved changes",
|
|
578
611
|
discard: "Discard",
|
|
579
|
-
applyChanges: "
|
|
580
|
-
discardOnLeave: "Discard {0}
|
|
612
|
+
applyChanges: "Save",
|
|
613
|
+
discardOnLeave: "Discard {0} unsaved change(s)?",
|
|
581
614
|
applyBusyLocal: "An Apply is still running — wait for it to finish.",
|
|
582
615
|
applyStepFailed: "Stopped at a change: {0}. The changes after it were not applied; they are staged again.",
|
|
583
616
|
applyError_unsupported_sensitive_effect: "it changes a setting the confirmation cannot show safely, so nothing was changed",
|
|
@@ -601,8 +634,12 @@ register("settings", {
|
|
|
601
634
|
copy: "Copy",
|
|
602
635
|
devDownload: "Download fleet.yaml",
|
|
603
636
|
devEditor: "fleet.yaml editor",
|
|
604
|
-
devApply: "Apply
|
|
605
|
-
devApplyHint: "
|
|
637
|
+
devApply: "Apply",
|
|
638
|
+
devApplyHint: "Adds this edit to the Save bar below: Save writes it, with any other unsaved change.",
|
|
639
|
+
devStaged: "In the Save bar: {0} change(s) to fleet.yaml. Save writes them, Discard drops them; edit and Apply again to replace them.",
|
|
640
|
+
devFormsUnsaved: "Save or discard the unsaved changes to agents, agent defaults or connections first: this editor writes the same settings.",
|
|
641
|
+
yamlUnsaved: "An unsaved fleet.yaml edit (Advanced) writes these settings. Save or discard it to edit them here.",
|
|
642
|
+
yamlOpen: "Open the editor",
|
|
606
643
|
noChanges: "Nothing to change.",
|
|
607
644
|
wizardCommitting: "Writing the configuration…",
|
|
608
645
|
wizardPlatform: "Platform",
|
|
@@ -642,6 +679,10 @@ register("settings", {
|
|
|
642
679
|
se_externalEmojiHint: "使用其他伺服器的 emoji,bot 在要加反應的頻道需有「使用外部表情符號」權限。",
|
|
643
680
|
se_unavailable: "無法使用",
|
|
644
681
|
se_hint: "留空即使用預設值。預覽由 AgEnD 依 bot 實際 react 的方式解析。進度前綴不是反應,而是進度訊息開頭的 emoji。",
|
|
682
|
+
noticeTopic: "頻道", noticeOff: "關閉",
|
|
683
|
+
webNotifyLogin: "網頁登入通知", dailyTips: "每日提示",
|
|
684
|
+
webNotifyLoginHint: "發在頻道。關閉只停用管理者登入通知;訪客與公開連結安全通知仍會發出。預設:頻道。",
|
|
685
|
+
dailyTipsHint: "發在 General 頻道。預設:頻道。/tips 仍送至呼叫的聊天室。",
|
|
645
686
|
title: "設定",
|
|
646
687
|
myAgents: "我的 Agent",
|
|
647
688
|
bots: "機器人",
|
|
@@ -698,6 +739,10 @@ register("settings", {
|
|
|
698
739
|
autoPause: "閒置後自動暫停",
|
|
699
740
|
minutes: "分鐘",
|
|
700
741
|
inheritDefault: "沿用全域預設值",
|
|
742
|
+
defaultMark: "預設", inEffect: "目前生效:{0}", inheritedValue: "沿用:{0}",
|
|
743
|
+
changeInDefaults: "到 Agent 預設值變更", changeInClassic: "到 ClassicBot 預設值變更",
|
|
744
|
+
cappedBySession: "受 session 時長限制", hoursValue: "{0} 小時", minutesValue: "{0} 分鐘", valueOn: "開", valueOff: "關", valueNone: "無",
|
|
745
|
+
concurrencyAuto: "自動,依可用記憶體與 CPU 核心數取 2–10", inEffectShort: "實際:{0}", cappedByTotal: "受 upload_max_total_mb 限制",
|
|
701
746
|
detection: "偵測",
|
|
702
747
|
startup: "啟動",
|
|
703
748
|
backendSection: "後端",
|
|
@@ -716,6 +761,7 @@ register("settings", {
|
|
|
716
761
|
dashboard_appearance: "它的外觀(主題、圖片、小工具、特效、mod 提案)",
|
|
717
762
|
dashboard_task_board: "任務看板",
|
|
718
763
|
dashboard_web_settings: "你的網頁外觀設定",
|
|
764
|
+
dashboard_office: "辦公室:在辦公室畫面走動、說話、做動作",
|
|
719
765
|
dashboardInherit: "跟 fleet 預設({0})",
|
|
720
766
|
dashboardOn: "允許",
|
|
721
767
|
dashboardOff: "關閉",
|
|
@@ -775,7 +821,7 @@ register("settings", {
|
|
|
775
821
|
applyClose: "關閉",
|
|
776
822
|
settingsButton: "設定",
|
|
777
823
|
connRetryNow: "立即重試", connRetryQueued: "已要求重新連線。", connRetryFailed: "無法重試此連線,請檢查狀態後再試。",
|
|
778
|
-
modalDone: "
|
|
824
|
+
modalDone: "完成",
|
|
779
825
|
wizardButton: "設定精靈",
|
|
780
826
|
wizardTitle: "設定 AgEnD",
|
|
781
827
|
wizardStep: "第 {0} 步,共 {1} 步",
|
|
@@ -822,6 +868,7 @@ register("settings", {
|
|
|
822
868
|
deleteBot: "刪除這個機器人",
|
|
823
869
|
noAllowedUsers: "沒有允許的使用者",
|
|
824
870
|
searchAll: "搜尋 agent、機器人、頻道…",
|
|
871
|
+
searchSettings: "搜尋設定 —— token、語言、session…", searchNone: "沒有符合的設定。", searchFoot: "↑↓ 移動・Enter 前往・Esc 關閉・也可從 Ctrl K → 設定 找到",
|
|
825
872
|
accessMovedHint: "誰可以使用 bot 是在連線本身設定 —— 請到「連線」開啟「{0}」的設定。",
|
|
826
873
|
applyRestartNeeded: "已儲存 —— 需要重新啟動 AgEnD 才會生效",
|
|
827
874
|
applyNoChange: "無需變更",
|
|
@@ -839,13 +886,15 @@ register("settings", {
|
|
|
839
886
|
signatureMismatch: "fleet.yaml 與執行中的設定在這些項目上不一致:{0}。重新啟動無法解決,請先查看 daemon.log。",
|
|
840
887
|
applyStillWorking: "仍在重啟中({0} 秒)—— AgEnD 還在處理,此頁面會持續確認。",
|
|
841
888
|
applyLostJob: "已追蹤不到這次套用(AgEnD 可能重啟過)。請重新整理頁面查看目前狀態。",
|
|
842
|
-
changesPending: "
|
|
889
|
+
changesPending: "{0} 項變更未儲存",
|
|
890
|
+
fixToSave: "修正 {0} 個欄位後才能儲存", fixToSaveIn: "修正「{1}」的 {0} 個欄位後才能儲存",
|
|
843
891
|
impactNow: "立即生效",
|
|
844
892
|
impactAgent: "重新啟動此 Agent",
|
|
845
893
|
impactFleet: "重新啟動 AgEnD",
|
|
846
|
-
queued: "
|
|
894
|
+
queued: "尚未儲存:{0} —— 請按下方的儲存",
|
|
847
895
|
applyFailed: "套用失敗",
|
|
848
896
|
changesApplied: "變更已套用,AgEnD 正在協調受影響的 Agent。",
|
|
897
|
+
youPrefs: "你的偏好設定", youSaved: "已儲存。", youSaveFailed: "部分偏好設定沒有儲存,請再試一次。", youDeviceChoice: "這個裝置:{0}",
|
|
849
898
|
reviewChanges: "檢查變更",
|
|
850
899
|
backendUnavailable: "{0}(已移除,請選擇其他 backend)",
|
|
851
900
|
backendNotInstalled: "未安裝", backendNotSignedIn: "未登入(請用 /login)", backendTooOld: "需要 {0} 以上版本", backendUnchecked: "尚未檢查",
|
|
@@ -867,7 +916,7 @@ register("settings", {
|
|
|
867
916
|
concurrencyWarning: "在較小的主機上可能超出 CPU 負荷",
|
|
868
917
|
staggerRange: "必須介於 0 到 30000",
|
|
869
918
|
staggerWarning: "數值太低可能造成啟動尖峰",
|
|
870
|
-
|
|
919
|
+
"sec_preferences": "偏好", syncedTitle: "在你所有的裝置同步", syncedLead: "這裡的變更會套用到你登入的每一台裝置。",
|
|
871
920
|
profileTitle: "你的名字",
|
|
872
921
|
profileLeadBound: "agent 會把你從網頁送出的訊息,認成收到登入驗證碼的那個 Discord 或 Telegram 帳號:用它的 id,名字也用它的,除非你在這裡另外取名。它會跟著你到每一台登入的裝置。一般的請求,agent 會當作是你本人提出的;發布、破壞性操作、花費、密鑰,或把你的授權交給別人,則要先授權這個瀏覽器,或在 Discord、Telegram 上確認。",
|
|
873
922
|
profileLeadUnbound: "這個瀏覽器不是用私訊到你 Discord 或 Telegram 帳號的驗證碼登入的,所以 agent 會把你的網頁訊息看成「web-user」(或你在這裡設定的名字)。用 /web 的驗證碼登入,就能被認成你的帳號。",
|
|
@@ -876,10 +925,9 @@ register("settings", {
|
|
|
876
925
|
syncedPublicLink: "公開連結只能讀取這些設定:在這裡變更只會留在這個瀏覽器。",
|
|
877
926
|
deviceTitle: "只限這台裝置", deviceLead: "導覽、文字大小、視圖寬度、側欄顯示或隱藏、面板寬度與桌面通知,每台裝置各自保留。",
|
|
878
927
|
sec_agents: "Agent",
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
sec_advanced: "開發者",
|
|
928
|
+
"sec_agent-defaults": "Agent 預設值", sec_chat: "聊天與連線", "sec_web-dashboard": "網頁儀表板", sec_access: "存取與安全",
|
|
929
|
+
sec_advanced: "進階", sec_look: "外觀", grp_you: "你自己", grp_fleet: "整個 Fleet",
|
|
930
|
+
classicDefaultsTitle: "ClassicBot 預設值", publicLinkTitle: "公開連結與固定網址", webDashboardTitle: "儀表板功能", webSettingsLabel: "網頁設定",
|
|
883
931
|
stRunning: "執行中",
|
|
884
932
|
stPaused: "已暫停",
|
|
885
933
|
stCrashed: "已當掉",
|
|
@@ -901,6 +949,8 @@ register("settings", {
|
|
|
901
949
|
deleteAgentMenu: "刪除 agent",
|
|
902
950
|
deleteAgentLabel: "刪除 {0}",
|
|
903
951
|
updateAgent: "更新 {0}",
|
|
952
|
+
projectRootsTitle: "專案資料夾", projectRootsHint: "新的 agent 只能在這些資料夾裡工作(留空:不限)。建立 agent 時檢查。",
|
|
953
|
+
projectRootsAnywhere: "不限",
|
|
904
954
|
updateDefaults: "更新 agent 預設值",
|
|
905
955
|
updateClassicDefaults: "更新 ClassicBot 預設值與存取",
|
|
906
956
|
updateAccess: "更新 {0} 的存取",
|
|
@@ -934,9 +984,7 @@ register("settings", {
|
|
|
934
984
|
keyRollbackFailed: "還原失敗",
|
|
935
985
|
accessTitle: "存取",
|
|
936
986
|
webChat: "網頁聊天",
|
|
937
|
-
|
|
938
|
-
sec_appearance: "網頁外觀",
|
|
939
|
-
groupLook: "外觀", groupLayout: "你的版面", groupCss: "自己寫的樣式", groupMods: "擴充", groupAdvanced: "進階", learnMore: "了解更多:{0}",
|
|
987
|
+
motionTitle: "這個裝置上的特效", groupLook: "外觀", groupLayout: "你的版面", groupCss: "自己寫的樣式", groupMods: "擴充", groupAdvanced: "進階", learnMore: "了解更多:{0}",
|
|
940
988
|
colorTitle: "識別色", colorLead: "單一 agent 的顏色:⋯ 選單 → 顏色…",
|
|
941
989
|
colorPlaces: "顏色顯示的位置", colorSample: "範例 agent", colorOff: "關閉顏色",
|
|
942
990
|
colorOffLead: "已挑選的顏色會保留。",
|
|
@@ -1006,7 +1054,7 @@ register("settings", {
|
|
|
1006
1054
|
modInstalled: "已安裝 {0}。",
|
|
1007
1055
|
modFailed: "未完成:{0}",
|
|
1008
1056
|
idLine: "ID:{0}",
|
|
1009
|
-
modCanvasWorkerOff: "未完成:這個 mod 含有 Canvas Worker 效果,這是實驗性功能。請先到「設定 →
|
|
1057
|
+
modCanvasWorkerOff: "未完成:這個 mod 含有 Canvas Worker 效果,這是實驗性功能。請先到「設定 → 網頁儀表板」開啟。",
|
|
1010
1058
|
modDownload: "下載",
|
|
1011
1059
|
modUninstall: "解除安裝",
|
|
1012
1060
|
modUninstallConfirm: "要解除安裝 {0} 嗎?它的效果會離開你的效果庫,除非還有東西在使用。它已套用的外觀會保留。",
|
|
@@ -1110,7 +1158,6 @@ register("settings", {
|
|
|
1110
1158
|
sessionIdle: "閒置多久後登出,小時(1–720)",
|
|
1111
1159
|
sessionRange: "必須是 1 到 720 之間的小時數",
|
|
1112
1160
|
sessionIdleOver: "不能超過 session 時長",
|
|
1113
|
-
defaultHours: "{0}(預設)",
|
|
1114
1161
|
webTerminalTitle: "瀏覽器終端機",
|
|
1115
1162
|
webTerminalHint: "/login 用來登入 CLI 的 token 保護終端機。關閉時 /login 會拒絕。下一次 /login 起生效。",
|
|
1116
1163
|
webTerminalEnabled: "允許瀏覽器終端機",
|
|
@@ -1128,14 +1175,35 @@ register("settings", {
|
|
|
1128
1175
|
guestNarrow: "縮小範圍", guestNotReachable: "(已無法使用)", guestReachesNothing: "這個帳號目前在聊天中沒有能用的 agent,沒有可以縮小的範圍。", guestNarrowLift: "取消縮小", guestNarrowHint: "勾選這位訪客仍可使用的 agent。縮小只會拿走權限(立即生效);放寬或取消縮小需 fleet admin 確認。",
|
|
1129
1176
|
guestSignOut: "登出", guestSignOutTitle: "登出這位訪客?", guestSignOutConfirm: "{0} 的訪客 session 會立即結束,登入碼失效,記住的瀏覽器也會被忘記。訪客登入開啟期間,他可以再傳 /web 登入。",
|
|
1130
1177
|
guestSignedOut: "已登出 {0}。", guestSignedOutNotDurable: "已暫時登出 {0},但無法保存:重新啟動後他的 session 可能會恢復。", guestSignOutFailed: "沒有成功,請再試一次。",
|
|
1178
|
+
grantsHint: "選擇誰可以用訪客身分登入,以及每個人可以看到哪些 agent。訪客看到的是頻道上原本顯示的對話(包含頻道裡其他人的訊息),看不到只在網頁上的訊息。新增授權需 fleet 管理員在 General 同意;收回立即生效。",
|
|
1179
|
+
grantsLegacy: "目前訪客能看到的,取決於他們在聊天中的權限。儲存授權後改為明確授權:只有下列的人,只看得到勾選的 agent。",
|
|
1180
|
+
grantsConvert: "以目前的訪客為起點", grantsWithAccess: "有存取權的人", grantsNoneYet: "還沒有人有訪客存取權。",
|
|
1181
|
+
grantsAdd: "新增人員", grantsSearch: "搜尋曾傳訊息給你的 agent 的人", grantsNoPeople: "沒有符合的人。對方必須先傳過訊息給某個 agent。",
|
|
1182
|
+
grantsChoose: "選擇", grantsChosen: "已選擇", grantsMaySee: "{0} 可以看到:", grantsClassicRooms: "ClassicBot 聊天室", grantsWroteHere: "傳過訊息", grantsWroteTo: "傳過訊息給:{0}",
|
|
1183
|
+
grantsLastSeen: "最後出現 {0}", grantsRecent: "最近的變更", grantsRecentNone: "還沒有人的存取權變更過。", grantsAuditDirect: "立即生效", grantsAuditConfirmed: "在 General 確認後生效", grantsAuditEnded: "結束了 {0} 個登入", grantsAuditCodeSent: "已寄出登入碼", grantsAuditCodeNot: "登入碼未寄出({0})", grantsAuditDmFailed: "私訊沒有送達", grantsAuditWait: "一分鐘內重複要求", grantsAuditAdminLimit: "已達管理員的登入碼上限",
|
|
1184
|
+
grantsEditAgents: "編輯 agent", grantsRemove: "移除存取權", grantsUndoRemove: "保留存取權",
|
|
1185
|
+
grantsWillBeRemoved: "儲存後存取權就會結束。", grantsNew: "新增 —— 儲存後授權", grantsNoAgents: "至少勾選一個 agent,或移除這個人。",
|
|
1186
|
+
grantsSend: "傳送登入碼", grantsSendAgain: "{0} 後可再傳", grantsSendSaveFirst: "請先儲存:登入碼只會傳給已儲存的授權。",
|
|
1187
|
+
grantsSent: "{0} 已傳送 · {1} 到期", grantsSentPublic: "也可以用在目前開啟的公開連結上。", grantsSending: "傳送中…",
|
|
1188
|
+
grantsSignedIn: "已登入 · {0} 個裝置", grantsNotSignedIn: "未登入",
|
|
1189
|
+
grantsDmFailed: "無法私訊 {0}:{1}", grantsDmFailedTg: "無法私訊 {0}:對方還沒有啟動 bot。請把這個連結傳給對方:{1}",
|
|
1190
|
+
grantsDmFailedDiscord: "無法私訊 {0}:對方的 Discord 隱私設定擋住了這個伺服器的私訊。",
|
|
1191
|
+
grantsWait: "每人每分鐘只能傳一次登入碼,請稍後再試。", grantsAdminLimit: "你已經傳了很多登入碼,請幾分鐘後再試。",
|
|
1192
|
+
grantsCodeFailed: "沒有傳出登入碼:{0}",
|
|
1193
|
+
codeGuestsOff: "訪客登入未開啟", codeAdmin: "fleet 管理員以管理員身分登入", codeNothing: "這個人還沒有任何授權——請先儲存對方的存取權限",
|
|
1194
|
+
codeStarting: "AgEnD 正在啟動,或這個連線沒有在執行", codePaused: "訪客登入暫停幾分鐘(錯誤的登入碼太多)",
|
|
1195
|
+
codeBusy: "目前有太多訪客登入碼還沒被使用,請過幾分鐘再試", codeRevoked: "你已不再被授權", grantsWaiting: "等待 fleet 管理員在 General 同意。", grantsSaveFailed: "沒有儲存:{0}",
|
|
1196
|
+
grantsPublicLinkNote: "如果對方不在這個網路上,請先開啟公開連結,再傳送登入碼。",
|
|
1131
1197
|
vaTitle: "網頁授權", vaReview: "檢視網頁授權變更",
|
|
1132
|
-
vaHint: "已登入的 fleet 管理者從網頁送出的訊息,是否帶有他本人帳號的授權,記錄在每則訊息的送達收據中。用私下傳給該帳號的登入碼、透過直接連線的 dashboard 登入的 session,要在 Discord 或 Telegram
|
|
1198
|
+
vaHint: "已登入的 fleet 管理者從網頁送出的訊息,是否帶有他本人帳號的授權,記錄在每則訊息的送達收據中。用私下傳給該帳號的登入碼、透過直接連線的 dashboard 登入的 session,要在 Discord 或 Telegram 上授權一次;訪客一律不行;公開連結只在下方對應的選項開啟時可以。一般的網頁請求,agent 本來就會照做;發布、破壞性操作、花費、密鑰,或把授權交給別人,則需要它。",
|
|
1133
1199
|
vaLoadFailed: "無法載入網頁授權。",
|
|
1134
1200
|
vaEnabled: "網頁訊息帶有授權", vaEnabledHint: "預設開啟:session 要等它的帳號在 Discord 或 Telegram 上確認後才帶有授權。關閉:網頁訊息都不帶授權,已給出的授權立即視為無;關閉前給出的授權不會恢復。",
|
|
1135
1201
|
vaStuckOff: "網頁授權目前是關閉的:它的狀態無法存到這台電腦上(請看 fleet 紀錄)。可以存入後會自動恢復。",
|
|
1136
1202
|
vaLoopbackOnly: "只有這台電腦可以授權", vaLoopbackOnlyHint: "開啟:只有這台電腦上的瀏覽器符合,網路或 tailnet 上的不算,之前從其他地方給出的授權視為無。再關掉也不會讓那些授權恢復。",
|
|
1137
|
-
vaNamedLink: "也允許透過我的固定網域({0})", vaNamedLinkHint: "開啟:透過你自己的 named tunnel 固定網域登入的瀏覽器也能被授權(一樣要在私訊按「確認」)。它可從網際網路連到,Cloudflare 也看得到流量:開啟需在 General
|
|
1203
|
+
vaNamedLink: "也允許透過我的固定網域({0})", vaNamedLinkHint: "開啟:透過你自己的 named tunnel 固定網域登入的瀏覽器也能被授權(一樣要在私訊按「確認」)。它可從網際網路連到,Cloudflare 也看得到流量:開啟需在 General 或這台電腦上確認。關閉立即生效,透過它給出的授權都視為無。臨時公開連結另有下方的選項。",
|
|
1138
1204
|
vaSessionNamed: "透過你的固定網域",
|
|
1205
|
+
vaQuickLink: "也允許透過臨時公開連結", vaQuickLinkHint: "開啟:透過 /web 開出的臨時公開連結登入的瀏覽器也能被授權(一樣要在私訊按「確認」)。這個連結是網際網路上的位址,由 Cloudflare 的 quick tunnel 服務轉送,Cloudflare 看得到流量。開啟需在 General 或這台電腦上確認,並會結束到目前為止給出的所有授權(每個瀏覽器都要重新確認);關閉立即生效。已授權的瀏覽器在連結結束時一併失去授權。",
|
|
1206
|
+
vaSessionQuick: "透過臨時公開連結",
|
|
1139
1207
|
vaLanWarning: "dashboard 也接受 {0} 的連線(web.allowed_hosts)。任何人只要從那裡連上、又拿到被盜的登入,就能以你的名義給出授權。除非你信任所有能連到那裡的人,否則請開啟「只有這台電腦可以授權」。",
|
|
1140
1208
|
vaHours: "一次授權的有效期(小時,{0}–{1})", vaHoursRange: "必須是 1 到 48 之間的數字",
|
|
1141
1209
|
vaSessionsTitle: "已授權的 session", vaSessionsNone: "目前沒有已授權的 session。", vaSessionUntil: "{0} 授權 · 到 {1}",
|
|
@@ -1145,7 +1213,6 @@ register("settings", {
|
|
|
1145
1213
|
searchRetentionUnset: "未設定(不限天數;上限 30 萬筆)",
|
|
1146
1214
|
searchRetentionZero: "0(不限天數;上限 30 萬筆)",
|
|
1147
1215
|
webSearchHint: "全域搜尋預設不限天數。每日清理仍會把索引上限維持在 30 萬筆(先刪最舊的)。在 fleet.yaml 設定 web.search.retention_days(1–3650 天,或 0 代表不限天數),下次啟動 fleet 後生效。",
|
|
1148
|
-
notSet: "未設定(預設)",
|
|
1149
1216
|
defaultsTitle: "預設值",
|
|
1150
1217
|
classicBackend: "ClassicBot 預設 backend",
|
|
1151
1218
|
whoUsesClassic: "誰可以使用 ClassicBot",
|
|
@@ -1153,9 +1220,10 @@ register("settings", {
|
|
|
1153
1220
|
guildIdPlaceholder: "伺服器 id",
|
|
1154
1221
|
tagPlaceholder: "標籤",
|
|
1155
1222
|
removeItem: "移除 {0}",
|
|
1156
|
-
inheritPlaceholder: "(沿用預設)",
|
|
1157
1223
|
zeroDisabled: "0 = 關閉",
|
|
1158
1224
|
optional: "選填",
|
|
1225
|
+
replyTriggers: "原生回覆觸發 ClassicBot",
|
|
1226
|
+
replyTriggersHint: "預設關閉:協作房間只有精確 @bot 提及才觸發。開啟後也接受對該機器人的單層原生回覆;轉發內容不算。Fleet 話題的訊息接收方式不變。",
|
|
1159
1227
|
collabMode: "協作模式",
|
|
1160
1228
|
contextLines: "上下文行數",
|
|
1161
1229
|
refresh: "重新整理",
|
|
@@ -1186,10 +1254,10 @@ register("settings", {
|
|
|
1186
1254
|
rotateToken: "更換 {0} token",
|
|
1187
1255
|
addBotLabel: "新增連線 {0}",
|
|
1188
1256
|
removeBotLabel: "移除連線 {0}",
|
|
1189
|
-
pendingRegion: "
|
|
1257
|
+
pendingRegion: "未儲存的變更",
|
|
1190
1258
|
discard: "捨棄",
|
|
1191
|
-
applyChanges: "
|
|
1192
|
-
discardOnLeave: "要捨棄 {0}
|
|
1259
|
+
applyChanges: "儲存",
|
|
1260
|
+
discardOnLeave: "要捨棄 {0} 項未儲存的變更嗎?",
|
|
1193
1261
|
applyBusyLocal: "還有一次套用在進行中——請等它完成。",
|
|
1194
1262
|
applyStepFailed: "在某項變更停下:{0}。之後的變更沒有套用,已重新暫存。",
|
|
1195
1263
|
applyError_unsupported_sensitive_effect: "它改到的設定無法在確認中安全顯示,所以什麼都沒有改",
|
|
@@ -1213,8 +1281,12 @@ register("settings", {
|
|
|
1213
1281
|
copy: "複製",
|
|
1214
1282
|
devDownload: "下載 fleet.yaml",
|
|
1215
1283
|
devEditor: "fleet.yaml 編輯器",
|
|
1216
|
-
devApply: "
|
|
1217
|
-
devApplyHint: "
|
|
1284
|
+
devApply: "套用",
|
|
1285
|
+
devApplyHint: "把這次編輯加入下方的儲存列:按「儲存」時和其他未儲存的變更一起寫入。",
|
|
1286
|
+
devStaged: "已加入儲存列:fleet.yaml 的 {0} 項變更。按「儲存」寫入,按「捨棄」放棄;修改後再按「套用」會取代它們。",
|
|
1287
|
+
devFormsUnsaved: "請先儲存或捨棄 Agent、Agent 預設值或連線中未儲存的變更:這個編輯器會寫入相同的設定。",
|
|
1288
|
+
yamlUnsaved: "有一份未儲存的 fleet.yaml 編輯(進階)會寫入這些設定。請先儲存或捨棄它,才能在這裡修改。",
|
|
1289
|
+
yamlOpen: "開啟編輯器",
|
|
1218
1290
|
noChanges: "沒有需要變更的內容。",
|
|
1219
1291
|
wizardCommitting: "正在寫入設定…",
|
|
1220
1292
|
wizardPlatform: "平台",
|