@songsid/agend 2.3.2-beta.9 → 2.3.3-beta.1
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/README.md +6 -0
- package/README.zh-TW.md +6 -0
- package/dist/agent-cli-instructions.md +2 -2
- package/dist/agent-cli.js +48 -0
- package/dist/agent-cli.js.map +1 -1
- package/dist/agent-endpoint.js +6 -0
- package/dist/agent-endpoint.js.map +1 -1
- package/dist/agent-whats-new.d.ts +21 -0
- package/dist/agent-whats-new.js +53 -21
- package/dist/agent-whats-new.js.map +1 -1
- package/dist/auth-api.js +2 -0
- package/dist/auth-api.js.map +1 -1
- package/dist/backend/claude-code.d.ts +13 -1
- package/dist/backend/claude-code.js +43 -2
- package/dist/backend/claude-code.js.map +1 -1
- package/dist/backend/codex-session-lookup.d.ts +15 -0
- package/dist/backend/codex-session-lookup.js +58 -0
- package/dist/backend/codex-session-lookup.js.map +1 -1
- package/dist/backend/codex.js +15 -4
- package/dist/backend/codex.js.map +1 -1
- package/dist/backend/kiro-classic-archive.d.ts +57 -0
- package/dist/backend/kiro-classic-archive.js +622 -0
- package/dist/backend/kiro-classic-archive.js.map +1 -0
- package/dist/backend/kiro-classic-links.d.ts +24 -0
- package/dist/backend/kiro-classic-links.js +135 -0
- package/dist/backend/kiro-classic-links.js.map +1 -0
- package/dist/backend/kiro-identity.d.ts +100 -1
- package/dist/backend/kiro-identity.js +262 -31
- package/dist/backend/kiro-identity.js.map +1 -1
- package/dist/backend/kiro-migration-verify.d.ts +10 -0
- package/dist/backend/kiro-migration-verify.js +52 -0
- package/dist/backend/kiro-migration-verify.js.map +1 -0
- package/dist/backend/kiro-reconcile-store.d.ts +27 -0
- package/dist/backend/kiro-reconcile-store.js +351 -0
- package/dist/backend/kiro-reconcile-store.js.map +1 -0
- package/dist/backend/kiro-v2-store-worker.js +35 -1
- package/dist/backend/kiro-v2-store-worker.js.map +1 -1
- package/dist/backend/kiro-v2-store.d.ts +31 -1
- package/dist/backend/kiro-v2-store.js +22 -12
- package/dist/backend/kiro-v2-store.js.map +1 -1
- package/dist/backend/kiro.d.ts +124 -6
- package/dist/backend/kiro.js +553 -39
- package/dist/backend/kiro.js.map +1 -1
- package/dist/backend/types.d.ts +109 -4
- package/dist/backend/types.js +9 -0
- package/dist/backend/types.js.map +1 -1
- package/dist/cache-service.d.ts +13 -1
- package/dist/cache-service.js +45 -2
- package/dist/cache-service.js.map +1 -1
- package/dist/channel/ipc-timeouts.js +3 -0
- package/dist/channel/ipc-timeouts.js.map +1 -1
- package/dist/channel/mcp-tools.js +40 -5
- 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/classic-channel-manager.d.ts +6 -0
- package/dist/classic-channel-manager.js +25 -0
- package/dist/classic-channel-manager.js.map +1 -1
- package/dist/cli.js +52 -6
- package/dist/cli.js.map +1 -1
- package/dist/config-validator.d.ts +7 -1
- package/dist/config-validator.js +20 -9
- package/dist/config-validator.js.map +1 -1
- package/dist/config.js +2 -0
- package/dist/config.js.map +1 -1
- package/dist/cross-instance-envelope.d.ts +10 -5
- package/dist/cross-instance-envelope.js +20 -17
- package/dist/cross-instance-envelope.js.map +1 -1
- package/dist/daemon.d.ts +125 -63
- package/dist/daemon.js +694 -330
- package/dist/daemon.js.map +1 -1
- package/dist/dashboard-permissions.d.ts +15 -4
- package/dist/dashboard-permissions.js +49 -23
- package/dist/dashboard-permissions.js.map +1 -1
- package/dist/delivery-outbox.d.ts +27 -22
- package/dist/delivery-outbox.js +109 -161
- package/dist/delivery-outbox.js.map +1 -1
- package/dist/delivery-outbox.test.js +10 -25
- package/dist/delivery-outbox.test.js.map +1 -1
- package/dist/doctor.js +2 -1
- package/dist/doctor.js.map +1 -1
- package/dist/fleet-control-audit.d.ts +1 -1
- package/dist/fleet-control-audit.js +3 -0
- package/dist/fleet-control-audit.js.map +1 -1
- package/dist/fleet-manager.d.ts +94 -15
- package/dist/fleet-manager.js +597 -133
- package/dist/fleet-manager.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-instance.d.ts +24 -0
- package/dist/general-instance.js +53 -0
- package/dist/general-instance.js.map +1 -1
- package/dist/general-knowledge/skills/delegation-playbook/SKILL.md +1 -1
- package/dist/general-knowledge/skills/docker-install/SKILL.md +25 -0
- package/dist/general-knowledge/skills/fleet-config/SKILL.md +5 -3
- package/dist/general-knowledge/skills/fleet-restart/SKILL.md +1 -1
- package/dist/general-knowledge/skills/kiro-engine-migration/SKILL.md +34 -0
- package/dist/general-knowledge/skills/session-management/SKILL.md +2 -2
- package/dist/general-knowledge/skills/tui-effort/SKILL.md +1 -1
- package/dist/general-knowledge/skills/web-appearance/SKILL.canvas-worker-off.md +32 -0
- package/dist/general-knowledge/skills/web-appearance/SKILL.md +32 -0
- package/dist/general-knowledge/skills/web-dashboard/SKILL.canvas-worker-off.md +57 -17
- package/dist/general-knowledge/skills/web-dashboard/SKILL.md +57 -17
- package/dist/instance-config-impact.js +3 -2
- package/dist/instance-config-impact.js.map +1 -1
- package/dist/instance-lifecycle.d.ts +4 -0
- package/dist/instance-lifecycle.js +28 -5
- package/dist/instance-lifecycle.js.map +1 -1
- package/dist/instructions.js +6 -7
- package/dist/instructions.js.map +1 -1
- package/dist/kiro-migrate.d.ts +19 -2
- package/dist/kiro-migrate.js +133 -35
- package/dist/kiro-migrate.js.map +1 -1
- package/dist/kiro-reconcile.d.ts +21 -0
- package/dist/kiro-reconcile.js +88 -0
- package/dist/kiro-reconcile.js.map +1 -0
- package/dist/kiro-session-proof.d.ts +41 -0
- package/dist/kiro-session-proof.js +89 -0
- package/dist/kiro-session-proof.js.map +1 -0
- package/dist/kiro-tui-forensic.d.ts +19 -0
- package/dist/kiro-tui-forensic.js +124 -0
- package/dist/kiro-tui-forensic.js.map +1 -0
- package/dist/locale.js +202 -16
- package/dist/locale.js.map +1 -1
- package/dist/log-service.js +3 -3
- package/dist/log-service.js.map +1 -1
- package/dist/needs-you.d.ts +3 -1
- package/dist/needs-you.js +4 -2
- package/dist/needs-you.js.map +1 -1
- package/dist/office-levels.d.ts +64 -0
- package/dist/office-levels.js +66 -0
- package/dist/office-levels.js.map +1 -0
- package/dist/office-share-page.d.ts +3 -1
- package/dist/office-share-page.js +8 -3
- package/dist/office-share-page.js.map +1 -1
- package/dist/office-share-service.d.ts +6 -3
- package/dist/office-share-service.js +12 -8
- package/dist/office-share-service.js.map +1 -1
- package/dist/office-share.d.ts +45 -8
- package/dist/office-share.js +75 -15
- package/dist/office-share.js.map +1 -1
- package/dist/outbound-handlers.js +21 -2
- package/dist/outbound-handlers.js.map +1 -1
- package/dist/outbound-schemas.d.ts +47 -2
- package/dist/outbound-schemas.js +42 -3
- package/dist/outbound-schemas.js.map +1 -1
- package/dist/public-web-gateway.js +1 -1
- package/dist/public-web-gateway.js.map +1 -1
- package/dist/quickstart-api.d.ts +39 -1
- package/dist/quickstart-api.js +115 -17
- package/dist/quickstart-api.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/remote-card-prompt.d.ts +38 -0
- package/dist/remote-card-prompt.js +86 -0
- package/dist/remote-card-prompt.js.map +1 -0
- package/dist/scheduler/task-board.d.ts +44 -17
- package/dist/scheduler/task-board.js +95 -36
- package/dist/scheduler/task-board.js.map +1 -1
- package/dist/sd-notify.d.ts +13 -14
- package/dist/sd-notify.js +62 -28
- package/dist/sd-notify.js.map +1 -1
- package/dist/service-installer.d.ts +13 -0
- package/dist/service-installer.js +15 -0
- package/dist/service-installer.js.map +1 -1
- package/dist/service-owner.d.ts +25 -0
- package/dist/service-owner.js +43 -2
- package/dist/service-owner.js.map +1 -1
- package/dist/settings-api.d.ts +2 -1
- package/dist/settings-api.js +19 -26
- package/dist/settings-api.js.map +1 -1
- package/dist/settings-change.js +10 -5
- package/dist/settings-change.js.map +1 -1
- package/dist/settings-effect.js +7 -6
- package/dist/settings-effect.js.map +1 -1
- package/dist/settings-instance-patch.js +1 -1
- package/dist/settings-instance-patch.js.map +1 -1
- package/dist/setup-form.d.ts +2 -2
- package/dist/setup-form.js +139 -93
- package/dist/setup-form.js.map +1 -1
- package/dist/setup-i18n.d.ts +25 -0
- package/dist/setup-i18n.js +226 -0
- package/dist/setup-i18n.js.map +1 -0
- package/dist/task-board-waker.d.ts +40 -1
- package/dist/task-board-waker.js +115 -9
- package/dist/task-board-waker.js.map +1 -1
- package/dist/tmux-control.d.ts +1 -1
- package/dist/tmux-control.js +3 -2
- package/dist/tmux-control.js.map +1 -1
- package/dist/tmux-manager.js +18 -16
- package/dist/tmux-manager.js.map +1 -1
- package/dist/tmux-read.d.ts +2 -0
- package/dist/tmux-read.js +7 -1
- package/dist/tmux-read.js.map +1 -1
- package/dist/tool-permissions.js +18 -0
- package/dist/tool-permissions.js.map +1 -1
- package/dist/topic-commands.d.ts +2 -0
- package/dist/topic-commands.js +2 -1
- package/dist/topic-commands.js.map +1 -1
- package/dist/transcript-sources.d.ts +1 -0
- package/dist/transcript-sources.js +20 -3
- package/dist/transcript-sources.js.map +1 -1
- package/dist/types.d.ts +11 -5
- package/dist/ui/backend-signin.js +4 -3
- package/dist/ui/chat-store.js +3 -2
- package/dist/ui/chat-strings.js +2 -2
- package/dist/ui/fleet-office-card.js +114 -0
- package/dist/ui/fleet-office-editor.js +81 -9
- package/dist/ui/fleet-office-layout.js +56 -11
- package/dist/ui/fleet-office-levels.js +105 -0
- package/dist/ui/fleet-office-model.js +9 -1
- package/dist/ui/fleet-office-pack.d.ts +15 -3
- package/dist/ui/fleet-office-pack.js +177 -23
- package/dist/ui/fleet-office-skin.js +39 -3
- package/dist/ui/fleet-office-store.js +74 -3
- package/dist/ui/fleet-office-view.js +8 -0
- package/dist/ui/fleet-office-zones.js +102 -19
- package/dist/ui/fleet-office.js +308 -44
- package/dist/ui/fleet-org.js +2 -0
- package/dist/ui/fleet-task-card.js +2 -2
- package/dist/ui/fleet-task-common.js +30 -7
- package/dist/ui/fleet-task-work.js +2 -2
- package/dist/ui/fleet-tasks.js +10 -11
- package/dist/ui/office-share-dialog.js +31 -7
- package/dist/ui/office-share-page.js +1 -0
- package/dist/ui/panel-chat.js +14 -2
- package/dist/ui/panel-log.js +6 -6
- package/dist/ui/panel-needs.js +1 -1
- package/dist/ui/panel-settings.js +16 -8
- package/dist/ui/settings-appearance.js +3 -35
- package/dist/ui/settings-discord.js +3 -2
- package/dist/ui/settings-guests.js +17 -7
- package/dist/ui/settings-model.js +17 -9
- package/dist/ui/settings-registry.js +1 -1
- package/dist/ui/settings-strings.js +18 -6
- package/dist/ui/settings-token.js +3 -2
- package/dist/ui/settings-wizard.js +25 -9
- package/dist/ui/shared/app-i18n.js +2 -2
- package/dist/ui/shared/app-stream.js +1 -1
- package/dist/ui/shared/app.css +70 -2
- package/dist/ui/shared/setup-host-text.js +107 -0
- package/dist/ui/structured-signin.js +89 -38
- package/dist/update-check.d.ts +13 -4
- package/dist/update-check.js +17 -4
- package/dist/update-check.js.map +1 -1
- package/dist/usage-rollup.d.ts +34 -3
- package/dist/usage-rollup.js +56 -3
- package/dist/usage-rollup.js.map +1 -1
- package/dist/web-api.d.ts +10 -1
- package/dist/web-api.js +207 -17
- package/dist/web-api.js.map +1 -1
- package/dist/web-auth.js +1 -1
- package/dist/web-auth.js.map +1 -1
- package/dist/web-experimental.d.ts +6 -2
- package/dist/web-experimental.js +8 -4
- package/dist/web-experimental.js.map +1 -1
- package/dist/web-office-acts.d.ts +5 -2
- package/dist/web-office-acts.js +9 -4
- package/dist/web-office-acts.js.map +1 -1
- package/dist/web-office-pack-read.d.ts +35 -0
- package/dist/web-office-pack-read.js +252 -0
- package/dist/web-office-pack-read.js.map +1 -0
- package/dist/web-office-pack-tools.d.ts +241 -0
- package/dist/web-office-pack-tools.js +785 -0
- package/dist/web-office-pack-tools.js.map +1 -0
- package/dist/web-office-skins.d.ts +68 -4
- package/dist/web-office-skins.js +324 -33
- package/dist/web-office-skins.js.map +1 -1
- package/dist/web-office-store.d.ts +47 -4
- package/dist/web-office-store.js +124 -23
- package/dist/web-office-store.js.map +1 -1
- package/dist/web-settings-patch.d.ts +3 -2
- package/dist/web-settings-patch.js +7 -5
- package/dist/web-settings-patch.js.map +1 -1
- package/dist/workflow-templates/default.md +3 -3
- package/dist/working-recovery.d.ts +0 -2
- package/dist/working-recovery.js +2 -23
- package/dist/working-recovery.js.map +1 -1
- package/package.json +2 -2
- package/templates/windows-shortcuts.ps1 +18 -17
- package/dist/upgrade-notices.d.ts +0 -17
- package/dist/upgrade-notices.js +0 -93
- package/dist/upgrade-notices.js.map +0 -1
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* #2726: the setup pages in English and 繁體中文.
|
|
3
|
+
*
|
|
4
|
+
* Both pages are inline (setup-form.ts) and run before any fleet — no dashboard, no /assets — so they carry their own
|
|
5
|
+
* small dictionary and the few lines that use it (SETUP_I18N_RUNTIME). The choice works as the dashboard's does
|
|
6
|
+
* (src/ui/shared/app-i18n.js): the language chosen in this browser (`agend_lang`, the dashboard's own key, so the
|
|
7
|
+
* dashboard opened afterwards on this address keeps it), else the browser's language; a toggle on the page changes it.
|
|
8
|
+
* The wording is the dashboard's where it already says the same thing (settings-strings.js wizard*).
|
|
9
|
+
*
|
|
10
|
+
* What the host says (its errors) is English, or a code: src/ui/shared/setup-host-text.js says each one the page can show
|
|
11
|
+
* in both languages — the same module the dashboard's Setup wizard uses. One it does not know is shown as it came.
|
|
12
|
+
*/
|
|
13
|
+
import { readFileSync } from "node:fs";
|
|
14
|
+
/** The code-entry page: before the code, nothing about this machine (setup-form.ts SETUP_CODE_PAGE_HTML). */
|
|
15
|
+
export const SETUP_CODE_STRINGS = {
|
|
16
|
+
en: {
|
|
17
|
+
title: "Set up AgEnD",
|
|
18
|
+
otherLang: "中文",
|
|
19
|
+
langTitle: "Language",
|
|
20
|
+
lead: "Enter the setup code shown in the terminal where you ran {0}.",
|
|
21
|
+
continue: "Continue",
|
|
22
|
+
unreachable: "Could not reach the setup page.",
|
|
23
|
+
notAccepted: "That code was not accepted.",
|
|
24
|
+
},
|
|
25
|
+
"zh-TW": {
|
|
26
|
+
title: "設定 AgEnD",
|
|
27
|
+
otherLang: "English",
|
|
28
|
+
langTitle: "語言",
|
|
29
|
+
lead: "請輸入執行 {0} 的終端機上顯示的設定代碼。",
|
|
30
|
+
continue: "繼續",
|
|
31
|
+
unreachable: "無法連到設定頁。",
|
|
32
|
+
notAccepted: "這個代碼不正確。",
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
/** The setup form (setup-form.ts SETUP_FORM_HTML). */
|
|
36
|
+
export const SETUP_FORM_STRINGS = {
|
|
37
|
+
en: {
|
|
38
|
+
title: "Set up AgEnD",
|
|
39
|
+
otherLang: "中文",
|
|
40
|
+
langTitle: "Language",
|
|
41
|
+
intro: "This page is open only while setup is running. It closes itself when you finish, or after 15 minutes.",
|
|
42
|
+
signinsLabel: "AI backend sign-ins",
|
|
43
|
+
stepAgent: "1 · Agent",
|
|
44
|
+
backend: "Backend",
|
|
45
|
+
backendFound: "Found on this host: {0}",
|
|
46
|
+
backendNone: "No backend CLI found on this host — install one first.",
|
|
47
|
+
dir: "Working directory (optional)",
|
|
48
|
+
dirPlaceholder: "/home/you/projects/app",
|
|
49
|
+
dirDefault: "Leave it empty and the agent gets its own folder, {0}, which AgEnD creates. A path you enter must be absolute.",
|
|
50
|
+
dirDefaultName: "Leave it empty and the agent gets its own folder in AgEnD's workspaces, which AgEnD creates. A path you enter must be absolute.",
|
|
51
|
+
name: "First agent name",
|
|
52
|
+
generalNote: "This agent is the General: it answers in the chat's own General topic and hands work to the agents you add later.",
|
|
53
|
+
stepPlatform: "2 · Platform",
|
|
54
|
+
webOnly: "Web only (no bot)",
|
|
55
|
+
hintTelegram: "Create a bot with @BotFather, then add it to a group.",
|
|
56
|
+
hintDiscord: "Create an application in the Discord developer portal and invite the bot to your server.",
|
|
57
|
+
hintWeb: "No bot: you use AgEnD from its web dashboard (chat, sign-ins, settings). Discord or Telegram can be added later in Settings.",
|
|
58
|
+
stepCredentials: "3 · Credentials",
|
|
59
|
+
token: "Bot token",
|
|
60
|
+
tokenNote: "Written to ~/.agend/.env and never shown again.",
|
|
61
|
+
tokenEnv: "Environment variable",
|
|
62
|
+
verify: "Verify",
|
|
63
|
+
verifying: "Asking the provider…",
|
|
64
|
+
verified: "verified",
|
|
65
|
+
rejected: "rejected",
|
|
66
|
+
guild: "Server (guild)",
|
|
67
|
+
general: "General channel id",
|
|
68
|
+
discordAdmin: "Your Discord user id",
|
|
69
|
+
telegramAdmin: "Your Telegram user id",
|
|
70
|
+
firstAllowed: "Becomes the first allowed user.",
|
|
71
|
+
group: "Group id",
|
|
72
|
+
groupHint: "Or post any message in the group and press Detect.",
|
|
73
|
+
detect: "Detect from a message",
|
|
74
|
+
detectWaiting: "Waiting for a message in the group…",
|
|
75
|
+
detectFound: "Found.",
|
|
76
|
+
detectNone: "No group message yet — post one and press Detect again.",
|
|
77
|
+
failed: "Failed.",
|
|
78
|
+
stepReview: "4 · Review and start",
|
|
79
|
+
preview: "Show what will be written",
|
|
80
|
+
finish: "Create and start AgEnD",
|
|
81
|
+
start: "Start AgEnD",
|
|
82
|
+
reopen: "Reopen it where you started setup: in the Windows installer, press Enter in its window; otherwise run agend setup again on the computer running AgEnD.",
|
|
83
|
+
closed: "This setup page has closed.",
|
|
84
|
+
closedFinish: "This setup page has closed. {0} Backends you already signed in stay signed in.",
|
|
85
|
+
closesIn: "This page closes in {0} at the latest (sooner after 10 minutes without activity).",
|
|
86
|
+
closesSoon: "{0} Finish soon. If it closes first: {1}",
|
|
87
|
+
approveHost: "Approve this on the computer running AgEnD. The Windows installer opens a confirmation window for it, and shows a command to paste if no window appears. Otherwise run there: agend settings confirm {0}",
|
|
88
|
+
confirmGone: "Setup confirmation is no longer available. Review and enter the token again.",
|
|
89
|
+
notApplied: "Change was not applied. Review and enter the token again.",
|
|
90
|
+
confirmed: "Configuration confirmed. Select Start AgEnD to finish setup.",
|
|
91
|
+
lostContact: "Lost contact with the setup page; still trying. If this stays, the page has closed. {0}",
|
|
92
|
+
finishSignins: "Finish backend sign-in or choose Sign in later before continuing.",
|
|
93
|
+
notCurrent: "Confirmation is no longer current.",
|
|
94
|
+
startingWeb: "AgEnD is starting. Its dashboard link shows here once it is up.",
|
|
95
|
+
startingChat: "AgEnD is starting. Continue in the channel you configured.",
|
|
96
|
+
requesting: "Requesting host confirmation…",
|
|
97
|
+
expectedPending: "Expected a pending host confirmation.",
|
|
98
|
+
connectionFailed: "Connection failed. Retry to find the same confirmation.",
|
|
99
|
+
upWeb: "AgEnD is up. Open its dashboard: {0} — sign in with the code from agend web --code on the machine running AgEnD. Sign your agents' CLIs in from Settings → Agents → Sign-ins.",
|
|
100
|
+
upChat: "AgEnD is up. Talk to it in the channel you just set up, or open its dashboard: {0} (sign in with agend web --code on the machine running AgEnD, or send /web to your bot).",
|
|
101
|
+
notUp: "AgEnD has not come up within 60 seconds. Run `agend start` on the machine itself and check fleet.log — this page cannot tell you any more.",
|
|
102
|
+
// A host confirmation's outcome (settings-confirmation.ts reason_code; the words of locale.ts settings_confirm.result.*).
|
|
103
|
+
outcome_apply_failed: "Change could not be applied. Review the configuration and try again.",
|
|
104
|
+
outcome_fleet_stopped: "Fleet stopped. Review and apply again.",
|
|
105
|
+
outcome_expired: "Confirmation expired. Review and apply again.",
|
|
106
|
+
outcome_withdrawn: "Change withdrawn.",
|
|
107
|
+
outcome_rejected: "Change rejected.",
|
|
108
|
+
outcome_request_no_longer_current: "The requesting session or fleet changed. Review and apply again.",
|
|
109
|
+
outcome_settings_changed: "Settings changed since this request. Review and apply again.",
|
|
110
|
+
},
|
|
111
|
+
"zh-TW": {
|
|
112
|
+
title: "設定 AgEnD",
|
|
113
|
+
otherLang: "English",
|
|
114
|
+
langTitle: "語言",
|
|
115
|
+
intro: "這個頁面只在設定進行時開啟。完成設定,或 15 分鐘後,它會自動關閉。",
|
|
116
|
+
signinsLabel: "AI 後端登入",
|
|
117
|
+
stepAgent: "1 · Agent",
|
|
118
|
+
backend: "後端",
|
|
119
|
+
backendFound: "在這台主機上找到:{0}",
|
|
120
|
+
backendNone: "這台主機上找不到任何後端 CLI —— 請先安裝一個。",
|
|
121
|
+
dir: "工作目錄(選填)",
|
|
122
|
+
dirPlaceholder: "/home/you/projects/app",
|
|
123
|
+
dirDefault: "留空的話,agent 會有自己的資料夾 {0},由 AgEnD 建立。若要填寫,必須是絕對路徑。",
|
|
124
|
+
dirDefaultName: "留空的話,agent 會在 AgEnD 的 workspaces 裡有自己的資料夾,由 AgEnD 建立。若要填寫,必須是絕對路徑。",
|
|
125
|
+
name: "第一個 agent 名稱",
|
|
126
|
+
generalNote: "這個 agent 就是 General:它在聊天本身的 General 主題回覆,並把工作分給你之後加入的 agent。",
|
|
127
|
+
stepPlatform: "2 · 平台",
|
|
128
|
+
webOnly: "只用網頁(不接 bot)",
|
|
129
|
+
hintTelegram: "用 @BotFather 建立 bot,然後把它加進一個群組。",
|
|
130
|
+
hintDiscord: "在 Discord 開發者後台建立應用程式,並把 bot 邀請到你的伺服器。",
|
|
131
|
+
hintWeb: "不接 bot:從 AgEnD 的網頁儀表板使用它(聊天、登入、設定)。之後可以在設定裡再加上 Discord 或 Telegram。",
|
|
132
|
+
stepCredentials: "3 · 憑證",
|
|
133
|
+
token: "Bot token",
|
|
134
|
+
tokenNote: "會寫入 ~/.agend/.env,之後不會再顯示。",
|
|
135
|
+
tokenEnv: "環境變數",
|
|
136
|
+
verify: "驗證",
|
|
137
|
+
verifying: "正在向平台確認…",
|
|
138
|
+
verified: "已驗證",
|
|
139
|
+
rejected: "被拒絕",
|
|
140
|
+
guild: "伺服器(guild)",
|
|
141
|
+
general: "General 頻道 id",
|
|
142
|
+
discordAdmin: "你的 Discord 使用者 ID",
|
|
143
|
+
telegramAdmin: "你的 Telegram 使用者 ID",
|
|
144
|
+
firstAllowed: "會成為第一個允許使用者。",
|
|
145
|
+
group: "群組 id",
|
|
146
|
+
groupHint: "或在群組裡發任一則訊息,然後按「從訊息偵測」。",
|
|
147
|
+
detect: "從訊息偵測",
|
|
148
|
+
detectWaiting: "等待群組訊息中…",
|
|
149
|
+
detectFound: "找到了。",
|
|
150
|
+
detectNone: "還沒收到群組訊息 —— 發一則之後再按一次。",
|
|
151
|
+
failed: "失敗。",
|
|
152
|
+
stepReview: "4 · 檢查並啟動",
|
|
153
|
+
preview: "顯示將寫入的內容",
|
|
154
|
+
finish: "建立並啟動 AgEnD",
|
|
155
|
+
start: "啟動 AgEnD",
|
|
156
|
+
reopen: "請在開始設定的地方重新開啟:Windows 安裝程式請在它的視窗按 Enter;否則在執行 AgEnD 的電腦上再執行一次 agend setup。",
|
|
157
|
+
closed: "這個設定頁已關閉。",
|
|
158
|
+
closedFinish: "這個設定頁已關閉。{0}已經登入的後端會維持登入。",
|
|
159
|
+
closesIn: "這個頁面最晚在 {0} 後關閉(閒置 10 分鐘會更早關閉)。",
|
|
160
|
+
closesSoon: "{0}請盡快完成。如果它先關閉了:{1}",
|
|
161
|
+
approveHost: "請在執行 AgEnD 的電腦上核准。Windows 安裝程式會為它開一個確認視窗;沒有出現視窗時,會顯示一行可以貼上的指令。否則請在那台電腦上執行:agend settings confirm {0}",
|
|
162
|
+
confirmGone: "設定確認已不存在。請重新檢查並再輸入一次 token。",
|
|
163
|
+
notApplied: "變更沒有套用。請重新檢查並再輸入一次 token。",
|
|
164
|
+
confirmed: "設定已確認。請按「啟動 AgEnD」完成設定。",
|
|
165
|
+
lostContact: "與設定頁失去連線,仍在重試。如果一直如此,表示頁面已關閉。{0}",
|
|
166
|
+
finishSignins: "請先完成後端登入,或選擇「稍後登入」再繼續。",
|
|
167
|
+
notCurrent: "這個確認已不是最新的。",
|
|
168
|
+
startingWeb: "AgEnD 正在啟動。啟動後,儀表板連結會顯示在這裡。",
|
|
169
|
+
startingChat: "AgEnD 正在啟動。請到你設定的頻道繼續。",
|
|
170
|
+
requesting: "正在請主機確認…",
|
|
171
|
+
expectedPending: "預期會有一個等待主機確認的變更。",
|
|
172
|
+
connectionFailed: "連線失敗。重試會找回同一個確認。",
|
|
173
|
+
upWeb: "AgEnD 已啟動。打開它的儀表板:{0} —— 用執行 AgEnD 的電腦上 agend web --code 顯示的代碼登入。agent 的 CLI 請在 設定 → Agents → 登入 裡登入。",
|
|
174
|
+
upChat: "AgEnD 已啟動。在你剛設定的頻道和它對話,或打開它的儀表板:{0}(在執行 AgEnD 的電腦上用 agend web --code 登入,或對你的 bot 傳 /web)。",
|
|
175
|
+
notUp: "AgEnD 在 60 秒內沒有啟動。請在那台電腦上執行 `agend start` 並查看 fleet.log —— 這個頁面無法告訴你更多。",
|
|
176
|
+
outcome_apply_failed: "變更無法套用。請檢查設定後再試一次。",
|
|
177
|
+
outcome_fleet_stopped: "Fleet 已停止。請重新檢查後再套用。",
|
|
178
|
+
outcome_expired: "確認已過期。請重新檢查後再套用。",
|
|
179
|
+
outcome_withdrawn: "變更已撤回。",
|
|
180
|
+
outcome_rejected: "變更已被拒絕。",
|
|
181
|
+
outcome_request_no_longer_current: "提出請求的工作階段或 fleet 已改變。請重新檢查後再套用。",
|
|
182
|
+
outcome_settings_changed: "提出請求後設定已被修改。請重新檢查後再套用。",
|
|
183
|
+
},
|
|
184
|
+
};
|
|
185
|
+
/** #2726: the host's words and codes in both languages — one module, shared with the dashboard (pasted in below). */
|
|
186
|
+
const HOST_TEXT = readFileSync(new URL("./ui/shared/setup-host-text.js", import.meta.url), "utf8").replace(/^export /gm, "");
|
|
187
|
+
/**
|
|
188
|
+
* The few lines both pages run first: the dictionary (JSON, `<` escaped so no string can end the script), the language,
|
|
189
|
+
* `tr` (a key in it), `trHost` (a host message in it), `show` (a text that follows the language when it changes) and
|
|
190
|
+
* `applyLang`. Plain script, no `${` and no template literal: it is pasted into the pages' own template strings.
|
|
191
|
+
*/
|
|
192
|
+
export function setupI18nRuntime(strings) {
|
|
193
|
+
const tables = JSON.stringify({ en: strings.en, "zh-TW": strings["zh-TW"] }).replace(/</g, "\\u003c");
|
|
194
|
+
return "const I18N = " + tables + ";\n" + HOST_TEXT + String.raw `
|
|
195
|
+
let LANG = (() => {
|
|
196
|
+
try { const chosen = localStorage.getItem("agend_lang"); if (chosen === "en" || chosen === "zh-TW") return chosen; } catch { /* none kept */ }
|
|
197
|
+
return typeof navigator !== "undefined" && /^zh/i.test(navigator.language || "") ? "zh-TW" : "en";
|
|
198
|
+
})();
|
|
199
|
+
const tr = (key, ...values) => {
|
|
200
|
+
let text = I18N[LANG][key] ?? I18N.en[key] ?? key;
|
|
201
|
+
values.forEach((value, i) => { text = text.split("{" + i + "}").join(String(value)); });
|
|
202
|
+
return text;
|
|
203
|
+
};
|
|
204
|
+
// The host's own words or code in this page's language (setup-host-text.js); anything else as it came.
|
|
205
|
+
const trHost = (text) => hostText(text, LANG);
|
|
206
|
+
// A text that is redrawn in the new language when it changes: its last render per element.
|
|
207
|
+
const shown = new Map();
|
|
208
|
+
const show = (element, render) => { if (!element) return; shown.set(element, render); render(element); };
|
|
209
|
+
const applyLang = () => {
|
|
210
|
+
if (document.documentElement) document.documentElement.lang = LANG === "zh-TW" ? "zh-Hant" : "en";
|
|
211
|
+
document.title = tr("title");
|
|
212
|
+
for (const node of document.querySelectorAll("[data-i18n]")) { const key = node.getAttribute && node.getAttribute("data-i18n"); if (key) node.textContent = tr(key); }
|
|
213
|
+
for (const node of document.querySelectorAll("[data-i18n-placeholder]")) { const key = node.getAttribute && node.getAttribute("data-i18n-placeholder"); if (key) node.placeholder = tr(key); }
|
|
214
|
+
for (const node of document.querySelectorAll("[data-i18n-label]")) { const key = node.getAttribute && node.getAttribute("data-i18n-label"); if (key) node.setAttribute("aria-label", tr(key)); }
|
|
215
|
+
for (const [element, render] of shown) render(element);
|
|
216
|
+
};
|
|
217
|
+
const langButton = document.getElementById("lang");
|
|
218
|
+
if (langButton) langButton.onclick = () => {
|
|
219
|
+
LANG = LANG === "zh-TW" ? "en" : "zh-TW";
|
|
220
|
+
try { localStorage.setItem("agend_lang", LANG); } catch { /* this page only */ }
|
|
221
|
+
applyLang();
|
|
222
|
+
};
|
|
223
|
+
applyLang();
|
|
224
|
+
`;
|
|
225
|
+
}
|
|
226
|
+
//# sourceMappingURL=setup-i18n.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-i18n.js","sourceRoot":"","sources":["../src/setup-i18n.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,9 @@
|
|
|
4
4
|
* one message — dragging five cards, or opening a whole plan, is one wake — checks again that each piece still stands
|
|
5
5
|
* when it goes out (wakeHolds), and hands it to the fleet as a notice from AgEnD: the delivery outbox holds it until
|
|
6
6
|
* the instance can take it, across a restart too. What is gathered but not yet handed over is lost on a stop; the card
|
|
7
|
-
* keeps the news (`task mine`, the comments new to its assignee).
|
|
7
|
+
* keeps the news (`task mine`, the comments new to its assignee). #2801: a notice still waiting when one of its cards
|
|
8
|
+
* changes status or assignee again is withdrawn once every card on it has (its key names them); and news an instance
|
|
9
|
+
* also told in its own message (naming the card, within TOLD_WINDOW_MS) is not told again.
|
|
8
10
|
*/
|
|
9
11
|
import type { Wake } from "./scheduler/task-board.js";
|
|
10
12
|
import { type Card } from "./scheduler/task-board.js";
|
|
@@ -21,14 +23,36 @@ export interface TaskBoardWakerDeps {
|
|
|
21
23
|
* then a dispatcher's wake says so instead of asking it to tell the person.
|
|
22
24
|
*/
|
|
23
25
|
buttonsHere?(instance: string, uuid: string): boolean;
|
|
26
|
+
/**
|
|
27
|
+
* #2785 (c), #2801: whether `from` sent `to` a message naming one of `codes` since `sinceMs` (epoch ms). An instance
|
|
28
|
+
* that changes a card and messages the one it concerns about it (delegate_task, send_to_instance) has told them: the
|
|
29
|
+
* board's line would only repeat it. Absent: every piece of news is told.
|
|
30
|
+
*/
|
|
31
|
+
messagedAbout?(from: string, to: string, codes: string[], sinceMs: number): boolean;
|
|
32
|
+
/**
|
|
33
|
+
* #2801: drop AgEnD's notices still waiting whose key starts with `prefix` and that `stale` judges overtaken (the
|
|
34
|
+
* delivery outbox's withdrawWaitingNotices); returns how many. Absent: a waiting notice is delivered as it is.
|
|
35
|
+
*/
|
|
36
|
+
withdraw?(prefix: string, stale: (key: string, createdAt: string) => boolean, reason: string): number;
|
|
37
|
+
/** #2801: when a card's status or assignee last changed (ISO; TaskBoard.lastChangeAt). */
|
|
38
|
+
changedAt?(uuid: string): string | null;
|
|
24
39
|
log(level: "info" | "warn", message: string, extra?: Record<string, unknown>): void;
|
|
25
40
|
gatherMs?: number;
|
|
41
|
+
/** #2785 (c), #2801: how far back, and how long ahead, a change looks for its maker's own message about it. */
|
|
42
|
+
toldWindowMs?: number;
|
|
26
43
|
timers?: {
|
|
27
44
|
set(fn: () => void, ms: number): unknown;
|
|
28
45
|
clear(handle: unknown): void;
|
|
29
46
|
};
|
|
30
47
|
now?: () => number;
|
|
31
48
|
}
|
|
49
|
+
/**
|
|
50
|
+
* #2785 (c), #2801: news an instance made waits this long (from the change) for its own message about the card before
|
|
51
|
+
* the board tells it; an assignment also counts a message up to this long before it.
|
|
52
|
+
*/
|
|
53
|
+
export declare const TOLD_WINDOW_MS = 120000;
|
|
54
|
+
/** Whether `text` names card `code` (M-12 is not M-123). */
|
|
55
|
+
export declare const namesCard: (text: string, code: string) => boolean;
|
|
32
56
|
/**
|
|
33
57
|
* One message for an instance's gathered news: a line per card (a main task assigned with its sub tasks is one line),
|
|
34
58
|
* or — a whole plan assigned at once — a count, so it does not read as everything to do right now.
|
|
@@ -45,7 +69,22 @@ export declare class TaskBoardWaker {
|
|
|
45
69
|
constructor(deps: TaskBoardWakerDeps);
|
|
46
70
|
/** A committed write's wakes: gathered per instance, a card's news merged (each reason keeps its own words). */
|
|
47
71
|
note(wakes: readonly Wake[]): void;
|
|
72
|
+
/**
|
|
73
|
+
* #2801: these cards' status or assignee just changed. A notice still waiting that names one of them is withdrawn
|
|
74
|
+
* once every card it names has changed since it was handed over — it no longer says how they stand; what still
|
|
75
|
+
* concerns the instance is told anew from this change. News still gathering is checked again as it goes (holds).
|
|
76
|
+
*/
|
|
77
|
+
changed(uuids: readonly string[]): void;
|
|
48
78
|
/** Nothing more is sent (the fleet is stopping); news still gathering is dropped — the cards keep it. */
|
|
49
79
|
stop(): void;
|
|
50
80
|
private flush;
|
|
81
|
+
/**
|
|
82
|
+
* #2785 (c), #2801: the batch's wakes with each piece of news dropped where the instance that made it messaged this
|
|
83
|
+
* one naming the card (or, for a sub task, its main task) about it: for an assignment since shortly before it (a
|
|
84
|
+
* delegate_task often comes first); for anything else only since the change (#2801 review: an earlier message about
|
|
85
|
+
* the card did not tell what came after it). A card whose maker has not yet done so waits, up to TOLD_WINDOW_MS from
|
|
86
|
+
* the change, in a batch of its own; after that the board tells it. A cancel is told at once, never folded ("stop
|
|
87
|
+
* working on it" must not wait); so are a person's change and the board's own.
|
|
88
|
+
*/
|
|
89
|
+
private foldToldNews;
|
|
51
90
|
}
|
package/dist/task-board-waker.js
CHANGED
|
@@ -1,9 +1,19 @@
|
|
|
1
1
|
import { gapText, oneLine } from "./scheduler/task-board-text.js";
|
|
2
2
|
import { personConfirms, wrapUpGap } from "./scheduler/task-board.js";
|
|
3
|
+
/**
|
|
4
|
+
* #2785 (c), #2801: news an instance made waits this long (from the change) for its own message about the card before
|
|
5
|
+
* the board tells it; an assignment also counts a message up to this long before it.
|
|
6
|
+
*/
|
|
7
|
+
export const TOLD_WINDOW_MS = 120_000;
|
|
8
|
+
/** The start of a task board notice's key; `:cards=` and the card uuids end it (#2801). */
|
|
9
|
+
const KEY_PREFIX = "task-board:";
|
|
10
|
+
const cardsOfKey = (key) => { const at = key.lastIndexOf(":cards="); return at < 0 ? [] : key.slice(at + 7).split(",").filter(Boolean); };
|
|
11
|
+
/** Whether `text` names card `code` (M-12 is not M-123). */
|
|
12
|
+
export const namesCard = (text, code) => new RegExp(`(^|[^\\w-])${code.replace(/-/g, "\\-")}(?!\\d)`).test(text);
|
|
3
13
|
/** More assignments than this in one message are told as a count, not a line each. */
|
|
4
14
|
const MANY_ASSIGNED = 3;
|
|
5
15
|
/** The order a card's news is told in. */
|
|
6
|
-
const ORDER = ["cancelled", "sent_back", "decide", "to_confirm", "answered", "
|
|
16
|
+
const ORDER = ["cancelled", "sent_back", "decide", "to_confirm", "confirm_own", "answered", "answer_kept", "wrap_up", "assigned", "start", "ready"];
|
|
7
17
|
const quote = (text) => (text ? `: "${oneLine(text, 160)}"` : "");
|
|
8
18
|
/** One reason, as a line about the card says it. */
|
|
9
19
|
function say(w, r, card, here = false) {
|
|
@@ -13,7 +23,8 @@ function say(w, r, card, here = false) {
|
|
|
13
23
|
case "start": return `${by} asks you to start it`;
|
|
14
24
|
case "sent_back": return `sent back by ${by}${quote(w.texts.sent_back)}`;
|
|
15
25
|
case "answered": return `${by} answered your blocked question${quote(w.texts.answered)} — it is in progress again`;
|
|
16
|
-
|
|
26
|
+
// #2801 review: the answer waits on the card while the assignee finishes another (#2303); nothing else would say so.
|
|
27
|
+
case "answer_kept": return `${by} answered your blocked question${quote(w.texts.answer_kept)} — kept on the card, which stays blocked while you finish your current card: resume it (move it to claimed) when you're free`;
|
|
17
28
|
case "ready": return "everything it waited for is done — you can start it";
|
|
18
29
|
case "decide": return here
|
|
19
30
|
? `you handed it out and it is blocked${card?.assignee ? ` (@${card.assignee})` : ""}${quote(w.texts.decide)} — answer it yourself if you can (move it back to claimed with the decision as the comment); otherwise the person has Answer for it in your channel`
|
|
@@ -24,14 +35,15 @@ function say(w, r, card, here = false) {
|
|
|
24
35
|
const waits = `you handed it out and it is ready for your confirmation${card?.assignee ? ` (@${card.assignee})` : ""}${gap ? `, though ${gapText(gap, card.kind === "main")}` : ""}`;
|
|
25
36
|
return `${waits} — check it, then move it to done, or back to claimed with what is missing`;
|
|
26
37
|
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
38
|
+
// #2080: an agent's own card (nobody else confirms it) in review by itself or by another's move.
|
|
39
|
+
case "confirm_own": {
|
|
40
|
+
const gap = card ? wrapUpGap(card) : null;
|
|
41
|
+
return `it is in review and nobody else confirms it — it is yours${gap ? `, though ${gapText(gap, card.kind === "main")}` : ""}: check it, then move it to done`;
|
|
30
42
|
}
|
|
31
43
|
case "cancelled": return `cancelled by ${by}${w.texts.cancelled?.startsWith("with its main task") ? ` ${oneLine(w.texts.cancelled, 160)}` : quote(w.texts.cancelled)} — stop working on it`;
|
|
32
44
|
case "wrap_up": {
|
|
33
45
|
const gap = card ? wrapUpGap(card) : null;
|
|
34
|
-
return `it went to the person for confirmation by itself${gap ? `, but ${gapText(gap, true)}` : ""} — fill it in with update`;
|
|
46
|
+
return `it went ${card && !personConfirms(card) ? "to review" : "to the person for confirmation"} by itself${gap ? `, but ${gapText(gap, true)}` : ""} — fill it in with update`;
|
|
35
47
|
}
|
|
36
48
|
}
|
|
37
49
|
}
|
|
@@ -97,15 +109,39 @@ export class TaskBoardWaker {
|
|
|
97
109
|
continue;
|
|
98
110
|
let batch = this.gathering.get(w.instance);
|
|
99
111
|
if (!batch) {
|
|
100
|
-
batch = { wakes: new Map(), timer: this.timers.set(() => this.flush(w.instance), this.deps.gatherMs ?? 10_000) };
|
|
112
|
+
batch = { wakes: new Map(), at: new Map(), timer: this.timers.set(() => this.flush(w.instance), this.deps.gatherMs ?? 10_000) };
|
|
101
113
|
this.gathering.set(w.instance, batch);
|
|
102
114
|
}
|
|
115
|
+
if (!batch.at.has(w.uuid))
|
|
116
|
+
batch.at.set(w.uuid, (this.deps.now ?? Date.now)());
|
|
103
117
|
const had = batch.wakes.get(w.uuid);
|
|
104
118
|
batch.wakes.set(w.uuid, had
|
|
105
119
|
? { ...had, title: w.title, reasons: [...new Set([...had.reasons, ...w.reasons])], by: { ...had.by, ...w.by }, texts: { ...had.texts, ...w.texts } }
|
|
106
120
|
: { ...w, reasons: [...w.reasons], by: { ...w.by }, texts: { ...w.texts } });
|
|
107
121
|
}
|
|
108
122
|
}
|
|
123
|
+
/**
|
|
124
|
+
* #2801: these cards' status or assignee just changed. A notice still waiting that names one of them is withdrawn
|
|
125
|
+
* once every card it names has changed since it was handed over — it no longer says how they stand; what still
|
|
126
|
+
* concerns the instance is told anew from this change. News still gathering is checked again as it goes (holds).
|
|
127
|
+
*/
|
|
128
|
+
changed(uuids) {
|
|
129
|
+
if (this.stopped || !uuids.length || !this.deps.withdraw)
|
|
130
|
+
return;
|
|
131
|
+
const now = new Set(uuids);
|
|
132
|
+
const stale = (key, createdAt) => {
|
|
133
|
+
const cards = cardsOfKey(key);
|
|
134
|
+
return cards.some((u) => now.has(u)) && cards.every((u) => now.has(u) || (this.deps.changedAt?.(u) ?? "") > createdAt);
|
|
135
|
+
};
|
|
136
|
+
try {
|
|
137
|
+
const n = this.deps.withdraw(KEY_PREFIX, stale, "superseded: its card changed again");
|
|
138
|
+
if (n)
|
|
139
|
+
this.deps.log("info", "Task board notices withdrawn: their cards changed again", { count: n });
|
|
140
|
+
}
|
|
141
|
+
catch (err) {
|
|
142
|
+
this.deps.log("warn", "Task board could not withdraw stale notices", { err: err.message });
|
|
143
|
+
}
|
|
144
|
+
}
|
|
109
145
|
/** Nothing more is sent (the fleet is stopping); news still gathering is dropped — the cards keep it. */
|
|
110
146
|
stop() {
|
|
111
147
|
this.stopped = true;
|
|
@@ -118,12 +154,14 @@ export class TaskBoardWaker {
|
|
|
118
154
|
this.gathering.delete(instance);
|
|
119
155
|
if (!batch || this.stopped)
|
|
120
156
|
return;
|
|
157
|
+
// #2785 (c), #2801: news an instance made is told by its own message; the board waits for it, then drops its line.
|
|
158
|
+
const told = this.foldToldNews(instance, batch);
|
|
121
159
|
// Only what still holds as it goes out: not finished meanwhile, still theirs, still waiting on them.
|
|
122
|
-
const wakes =
|
|
160
|
+
const wakes = told.map((w) => this.deps.holds(w)).filter((w) => w !== null);
|
|
123
161
|
if (!wakes.length)
|
|
124
162
|
return;
|
|
125
163
|
const codes = wakes.map((w) => w.code);
|
|
126
|
-
const key =
|
|
164
|
+
const key = `${KEY_PREFIX}${instance}:${(this.deps.now ?? Date.now)()}:${++this.seq}:cards=${wakes.map((w) => w.uuid).join(",")}`;
|
|
127
165
|
let taken = false;
|
|
128
166
|
try {
|
|
129
167
|
taken = this.deps.deliver(instance, wakeMessage(wakes, (uuid) => this.deps.card(uuid), (w) => this.deps.buttonsHere?.(instance, w.uuid) === true), key);
|
|
@@ -137,5 +175,73 @@ export class TaskBoardWaker {
|
|
|
137
175
|
else
|
|
138
176
|
this.deps.log("warn", "Task board wake not taken; the cards keep the news", { instance, codes });
|
|
139
177
|
}
|
|
178
|
+
/**
|
|
179
|
+
* #2785 (c), #2801: the batch's wakes with each piece of news dropped where the instance that made it messaged this
|
|
180
|
+
* one naming the card (or, for a sub task, its main task) about it: for an assignment since shortly before it (a
|
|
181
|
+
* delegate_task often comes first); for anything else only since the change (#2801 review: an earlier message about
|
|
182
|
+
* the card did not tell what came after it). A card whose maker has not yet done so waits, up to TOLD_WINDOW_MS from
|
|
183
|
+
* the change, in a batch of its own; after that the board tells it. A cancel is told at once, never folded ("stop
|
|
184
|
+
* working on it" must not wait); so are a person's change and the board's own.
|
|
185
|
+
*/
|
|
186
|
+
foldToldNews(instance, batch) {
|
|
187
|
+
const ask = this.deps.messagedAbout;
|
|
188
|
+
if (!ask)
|
|
189
|
+
return [...batch.wakes.values()];
|
|
190
|
+
const now = (this.deps.now ?? Date.now)();
|
|
191
|
+
const window = this.deps.toldWindowMs ?? TOLD_WINDOW_MS;
|
|
192
|
+
const out = [];
|
|
193
|
+
const waiting = new Map();
|
|
194
|
+
for (const [uuid, w] of batch.wakes) {
|
|
195
|
+
if (w.reasons.includes("cancelled")) {
|
|
196
|
+
out.push(w);
|
|
197
|
+
continue;
|
|
198
|
+
}
|
|
199
|
+
const at = batch.at.get(uuid) ?? now;
|
|
200
|
+
const codes = [w.code, ...(w.parent ? [w.parent] : [])];
|
|
201
|
+
const asked = new Map();
|
|
202
|
+
const told = [];
|
|
203
|
+
let pending = false;
|
|
204
|
+
for (const r of w.reasons) {
|
|
205
|
+
const by = w.by[r];
|
|
206
|
+
if (!by || !this.deps.isInstance(by))
|
|
207
|
+
continue;
|
|
208
|
+
const since = r === "assigned" ? at - window : at;
|
|
209
|
+
let messaged = asked.get(`${by}\u0000${since}`);
|
|
210
|
+
if (messaged === undefined) {
|
|
211
|
+
try {
|
|
212
|
+
messaged = ask(by, instance, codes, since);
|
|
213
|
+
}
|
|
214
|
+
catch (err) {
|
|
215
|
+
this.deps.log("warn", "Task board could not look for the maker's message; telling it", { instance, code: w.code, err: err.message });
|
|
216
|
+
messaged = "failed";
|
|
217
|
+
}
|
|
218
|
+
asked.set(`${by}\u0000${since}`, messaged);
|
|
219
|
+
}
|
|
220
|
+
if (messaged === true)
|
|
221
|
+
told.push(r);
|
|
222
|
+
else if (messaged === false && now - at < window)
|
|
223
|
+
pending = true;
|
|
224
|
+
}
|
|
225
|
+
if (pending) {
|
|
226
|
+
waiting.set(uuid, w);
|
|
227
|
+
continue;
|
|
228
|
+
}
|
|
229
|
+
if (told.length)
|
|
230
|
+
this.deps.log("info", "Task board news already told by its maker", { instance, code: w.code, reasons: told });
|
|
231
|
+
const rest = w.reasons.filter((r) => !told.includes(r));
|
|
232
|
+
if (rest.length)
|
|
233
|
+
out.push(told.length ? { ...w, reasons: rest } : w);
|
|
234
|
+
}
|
|
235
|
+
if (waiting.size && !this.stopped) {
|
|
236
|
+
const left = Math.min(...[...waiting.keys()].map((uuid) => window - (now - (batch.at.get(uuid) ?? now))));
|
|
237
|
+
const again = this.gathering.get(instance) ?? { wakes: new Map(), at: new Map(), timer: this.timers.set(() => this.flush(instance), Math.max(1, left)) };
|
|
238
|
+
for (const [uuid, w] of waiting) {
|
|
239
|
+
again.wakes.set(uuid, w);
|
|
240
|
+
again.at.set(uuid, batch.at.get(uuid) ?? now);
|
|
241
|
+
}
|
|
242
|
+
this.gathering.set(instance, again);
|
|
243
|
+
}
|
|
244
|
+
return out;
|
|
245
|
+
}
|
|
140
246
|
}
|
|
141
247
|
//# sourceMappingURL=task-board-waker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-board-waker.js","sourceRoot":"","sources":["../src/task-board-waker.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"task-board-waker.js","sourceRoot":"","sources":["../src/task-board-waker.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,SAAS,EAAa,MAAM,2BAA2B,CAAC;AAoCjF;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC;AACtC,2FAA2F;AAC3F,MAAM,UAAU,GAAG,aAAa,CAAC;AACjC,MAAM,UAAU,GAAG,CAAC,GAAW,EAAE,EAAE,GAAG,MAAM,EAAE,GAAG,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAElJ,4DAA4D;AAC5D,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,IAAY,EAAE,IAAY,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,cAAc,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEjI,sFAAsF;AACtF,MAAM,aAAa,GAAG,CAAC,CAAC;AACxB,0CAA0C;AAC1C,MAAM,KAAK,GAAiB,CAAC,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAElK,MAAM,KAAK,GAAG,CAAC,IAAwB,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAEtF,oDAAoD;AACpD,SAAS,GAAG,CAAC,CAAO,EAAE,CAAa,EAAE,IAAsB,EAAE,IAAI,GAAG,KAAK;IACvE,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;IAChC,QAAQ,CAAC,EAAE,CAAC;QACV,KAAK,UAAU,EAAE,OAAO,sBAAsB,EAAE,EAAE,CAAC;QACnD,KAAK,OAAO,EAAE,OAAO,GAAG,EAAE,uBAAuB,CAAC;QAClD,KAAK,WAAW,EAAE,OAAO,gBAAgB,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;QACzE,KAAK,UAAU,EAAE,OAAO,GAAG,EAAE,kCAAkC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,4BAA4B,CAAC;QACnH,qHAAqH;QACrH,KAAK,aAAa,EAAE,OAAO,GAAG,EAAE,kCAAkC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,8HAA8H,CAAC;QAC3N,KAAK,OAAO,EAAE,OAAO,qDAAqD,CAAC;QAC3E,KAAK,QAAQ,EAAE,OAAO,IAAI;YACxB,CAAC,CAAC,sCAAsC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,qJAAqJ;YACjQ,CAAC,CAAC,sCAAsC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,6FAA6F,CAAC;QAC5M,8GAA8G;QAC9G,KAAK,YAAY,EAAE,CAAC;YAClB,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC1C,MAAM,KAAK,GAAG,0DAA0D,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,YAAY,OAAO,CAAC,GAAG,EAAE,IAAK,CAAC,IAAI,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACtL,OAAO,GAAG,KAAK,4EAA4E,CAAC;QAC9F,CAAC;QACD,iGAAiG;QACjG,KAAK,aAAa,EAAE,CAAC;YACnB,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC1C,OAAO,4DAA4D,GAAG,CAAC,CAAC,CAAC,YAAY,OAAO,CAAC,GAAG,EAAE,IAAK,CAAC,IAAI,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,kCAAkC,CAAC;QACpK,CAAC;QACD,KAAK,WAAW,EAAE,OAAO,gBAAgB,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,UAAU,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,uBAAuB,CAAC;QAC5L,KAAK,SAAS,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC1C,OAAO,WAAW,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,gCAAgC,aAAa,GAAG,CAAC,CAAC,CAAC,SAAS,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,2BAA2B,CAAC;QACnL,CAAC;IACH,CAAC;AACH,CAAC;AAED,4DAA4D;AAC5D,SAAS,MAAM,CAAC,KAAe;IAC7B,MAAM,CAAC,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACnG,IAAI,GAAG;QAAE,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;IAC5D,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACtF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,KAAa,EAAE,IAAI,GAAuC,GAAG,EAAE,CAAC,SAAS;AACnG,wFAAwF;AACxF,WAAW,GAAyB,GAAG,EAAE,CAAC,KAAK;IAC/C,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACnH,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QAC/B,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,UAAU,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QAChI,IAAI,IAAI;YAAE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC;IACf,CAAC,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,CAAC,CAAO,EAAE,EAAE;QACvB,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvH,OAAO,GAAG,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,YAAY,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,GAAG,CAAC;IAC1H,CAAC,CAAC;IACF,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC;IAC5F,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,MAAM,GAAG,aAAa,EAAE,CAAC;QACxD,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACnE,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9F,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,aAAa,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,YAAY,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxM,MAAM,OAAO,GAAG,qBAAqB,IAAI,GAAG,CAAC;QAC7C,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACxD,MAAM,IAAI,GAAG,gFAAgF,CAAC;QAC9F,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,gBAAgB,OAAO,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,gBAAgB,OAAO,IAAI,IAAI,EAAE,CAAC;IAC7I,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,gBAAgB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,2BAA2B,KAAK,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAC;IAC1G,OAAO,gBAAgB,KAAK,CAAC,MAAM,2BAA2B,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC;AACpI,CAAC;AAED,MAAM,OAAO,cAAc;IAMI,IAAI;IALhB,SAAS,GAAG,IAAI,GAAG,EAAiF,CAAC;IAC9G,OAAO,GAAG,KAAK,CAAC;IAChB,GAAG,GAAG,CAAC,CAAC;IACC,MAAM,CAA4C;IAEnE,YAA6B,IAAwB;oBAAxB,IAAI;QAC/B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,MAAM,CAAC,GAAG,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAkC,CAAC,EAAE,CAAC;IAC7K,CAAC;IAED,gHAAgH;IAChH,IAAI,CAAC,KAAsB;QACzB,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;QACzB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC;gBAAE,SAAS;YAChD,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YAC3C,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,KAAK,GAAG,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,EAAE,CAAC;gBAChI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YACxC,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;gBAAE,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC/E,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACpC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG;gBACzB,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;gBACpJ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,OAAO,CAAC,KAAwB;QAC9B,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO;QACjE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3B,MAAM,KAAK,GAAG,CAAC,GAAW,EAAE,SAAiB,EAAE,EAAE;YAC/C,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;YAC9B,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC;QACzH,CAAC,CAAC;QACF,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,EAAE,oCAAoC,CAAC,CAAC;YACtF,IAAI,CAAC;gBAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,yDAAyD,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QACxG,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,6CAA6C,EAAE,EAAE,GAAG,EAAG,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QACxG,CAAC;IACH,CAAC;IAED,yGAAyG;IACzG,IAAI;QACF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;YAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACpE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;IAEO,KAAK,CAAC,QAAgB;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC3C,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAChC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;QACnC,mHAAmH;QACnH,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAChD,qGAAqG;QACrG,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAa,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;QACvF,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE,OAAO;QAC1B,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,GAAG,GAAG,GAAG,UAAU,GAAG,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,UAAU,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAClI,IAAI,KAAK,GAAG,KAAK,CAAC;QAClB,IAAI,CAAC;YAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,WAAW,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QAAC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YAC5K,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,wBAAwB,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAG,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YAClG,OAAO;QACT,CAAC;QACD,IAAI,KAAK;YAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,oCAAoC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;;YACvF,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,oDAAoD,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IACxG,CAAC;IAED;;;;;;;OAOG;IACK,YAAY,CAAC,QAAgB,EAAE,KAA4D;QACjG,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;QACpC,IAAI,CAAC,GAAG;YAAE,OAAO,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3C,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,cAAc,CAAC;QACxD,MAAM,GAAG,GAAW,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,IAAI,GAAG,EAAgB,CAAC;QACxC,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YACpC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;gBAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAAC,SAAS;YAAC,CAAC;YAC/D,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;YACrC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACxD,MAAM,KAAK,GAAG,IAAI,GAAG,EAA8B,CAAC;YACpD,MAAM,IAAI,GAAiB,EAAE,CAAC;YAC9B,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;gBAC1B,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACnB,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;oBAAE,SAAS;gBAC/C,MAAM,KAAK,GAAG,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClD,IAAI,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,KAAK,EAAE,CAAC,CAAC;gBAChD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;oBAC3B,IAAI,CAAC;wBAAC,QAAQ,GAAG,GAAG,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;oBAAC,CAAC;oBACnD,OAAO,GAAG,EAAE,CAAC;wBACX,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,+DAA+D,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,EAAG,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;wBAChJ,QAAQ,GAAG,QAAQ,CAAC;oBACtB,CAAC;oBACD,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,KAAK,EAAE,EAAE,QAAQ,CAAC,CAAC;gBAC7C,CAAC;gBACD,IAAI,QAAQ,KAAK,IAAI;oBAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;qBAC/B,IAAI,QAAQ,KAAK,KAAK,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;oBAAE,OAAO,GAAG,IAAI,CAAC;YACnE,CAAC;YACD,IAAI,OAAO,EAAE,CAAC;gBAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;gBAAC,SAAS;YAAC,CAAC;YAChD,IAAI,IAAI,CAAC,MAAM;gBAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,2CAA2C,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/H,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YACxD,IAAI,IAAI,CAAC,MAAM;gBAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvE,CAAC;QACD,IAAI,OAAO,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1G,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;YACzJ,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC;gBAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;gBAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;YAAC,CAAC;YAC7G,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;CACF"}
|
package/dist/tmux-control.d.ts
CHANGED
|
@@ -172,7 +172,7 @@ export declare class TmuxControlClient extends EventEmitter implements TmuxReadP
|
|
|
172
172
|
* long default keeps the "a busy CLI is not a lost message" behaviour while
|
|
173
173
|
* putting a floor under how long a wedge can absorb the queue unnoticed.
|
|
174
174
|
*/
|
|
175
|
-
waitUntilIdle(windowId: string, timeoutMs?: number): Promise<boolean>;
|
|
175
|
+
waitUntilIdle(windowId: string, timeoutMs?: number, abandoned?: () => boolean): Promise<boolean>;
|
|
176
176
|
/**
|
|
177
177
|
* Wait until a window's pane produces any output.
|
|
178
178
|
* Used to verify CLI startup — if no output within timeout, CLI likely failed.
|
package/dist/tmux-control.js
CHANGED
|
@@ -416,12 +416,13 @@ export class TmuxControlClient extends EventEmitter {
|
|
|
416
416
|
* long default keeps the "a busy CLI is not a lost message" behaviour while
|
|
417
417
|
* putting a floor under how long a wedge can absorb the queue unnoticed.
|
|
418
418
|
*/
|
|
419
|
-
waitUntilIdle(windowId, timeoutMs = 30 * 60_000) {
|
|
419
|
+
waitUntilIdle(windowId, timeoutMs = 30 * 60_000, abandoned) {
|
|
420
420
|
if (this.isIdle(windowId))
|
|
421
421
|
return Promise.resolve(true);
|
|
422
422
|
return new Promise((resolve) => {
|
|
423
423
|
const check = setInterval(() => {
|
|
424
|
-
|
|
424
|
+
// #2770: the caller stopped waiting (a cancel, a hand-off): end here rather than poll for up to 30 minutes.
|
|
425
|
+
if (this.stopped || abandoned?.()) {
|
|
425
426
|
clearInterval(check);
|
|
426
427
|
clearTimeout(timer);
|
|
427
428
|
resolve(false);
|