@songsid/agend 2.1.12 → 2.2.0-alpha.2
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 +4 -2
- package/README.zh-TW.md +4 -2
- package/dist/agent-cli.js +6 -1
- package/dist/agent-cli.js.map +1 -1
- package/dist/agent-endpoint.js +68 -12
- package/dist/agent-endpoint.js.map +1 -1
- package/dist/agent-token-header.d.ts +13 -0
- package/dist/agent-token-header.js +16 -0
- package/dist/agent-token-header.js.map +1 -0
- package/dist/auth/one-time-code.d.ts +19 -0
- package/dist/auth/one-time-code.js +49 -0
- package/dist/auth/one-time-code.js.map +1 -0
- package/dist/auth-api.d.ts +52 -0
- package/dist/auth-api.js +346 -0
- package/dist/auth-api.js.map +1 -0
- package/dist/backend/antigravity.js +4 -3
- package/dist/backend/antigravity.js.map +1 -1
- package/dist/backend/claude-code.d.ts +4 -0
- package/dist/backend/claude-code.js +97 -0
- package/dist/backend/claude-code.js.map +1 -1
- package/dist/backend/codex.js +59 -30
- package/dist/backend/codex.js.map +1 -1
- package/dist/backend/grok.js +1 -1
- package/dist/backend/grok.js.map +1 -1
- package/dist/backend/kiro-agent.d.ts +66 -0
- package/dist/backend/kiro-agent.js +302 -0
- package/dist/backend/kiro-agent.js.map +1 -0
- package/dist/backend/kiro-identity.d.ts +80 -0
- package/dist/backend/kiro-identity.js +537 -0
- package/dist/backend/kiro-identity.js.map +1 -0
- package/dist/backend/kiro-v2-store-worker.d.ts +1 -0
- package/dist/backend/kiro-v2-store-worker.js +87 -0
- package/dist/backend/kiro-v2-store-worker.js.map +1 -0
- package/dist/backend/kiro-v2-store.d.ts +54 -0
- package/dist/backend/kiro-v2-store.js +131 -0
- package/dist/backend/kiro-v2-store.js.map +1 -0
- package/dist/backend/kiro-v3-identity.d.ts +5 -0
- package/dist/backend/kiro-v3-identity.js +22 -0
- package/dist/backend/kiro-v3-identity.js.map +1 -1
- package/dist/backend/kiro.d.ts +90 -7
- package/dist/backend/kiro.js +500 -124
- package/dist/backend/kiro.js.map +1 -1
- package/dist/backend/muse.js +1 -1
- package/dist/backend/muse.js.map +1 -1
- package/dist/backend/types.d.ts +51 -3
- package/dist/backend/types.js.map +1 -1
- package/dist/cache-analysis.d.ts +92 -0
- package/dist/cache-analysis.js +147 -0
- package/dist/cache-analysis.js.map +1 -0
- package/dist/cache-ledger.d.ts +108 -0
- package/dist/cache-ledger.js +230 -0
- package/dist/cache-ledger.js.map +1 -0
- package/dist/cache-prices.d.ts +32 -0
- package/dist/cache-prices.js +73 -0
- package/dist/cache-prices.js.map +1 -0
- package/dist/cache-scan.d.ts +39 -0
- package/dist/cache-scan.js +115 -0
- package/dist/cache-scan.js.map +1 -0
- package/dist/cache-service.d.ts +115 -0
- package/dist/cache-service.js +417 -0
- package/dist/cache-service.js.map +1 -0
- package/dist/channel/adapters/discord.d.ts +1 -0
- package/dist/channel/adapters/discord.js +29 -10
- package/dist/channel/adapters/discord.js.map +1 -1
- package/dist/channel/adapters/telegram.d.ts +1 -0
- package/dist/channel/adapters/telegram.js +13 -1
- package/dist/channel/adapters/telegram.js.map +1 -1
- package/dist/channel/types.d.ts +9 -1
- package/dist/classic-channel-manager.d.ts +18 -10
- package/dist/classic-channel-manager.js +45 -18
- package/dist/classic-channel-manager.js.map +1 -1
- package/dist/cli-entry.d.ts +19 -0
- package/dist/cli-entry.js +36 -0
- package/dist/cli-entry.js.map +1 -0
- package/dist/cli.js +471 -146
- package/dist/cli.js.map +1 -1
- package/dist/command-table.d.ts +5 -3
- package/dist/command-table.js +29 -27
- package/dist/command-table.js.map +1 -1
- package/dist/config-validator.js +46 -0
- package/dist/config-validator.js.map +1 -1
- package/dist/config.js +12 -0
- package/dist/config.js.map +1 -1
- package/dist/connection-secrets.d.ts +6 -0
- package/dist/connection-secrets.js +4 -0
- package/dist/connection-secrets.js.map +1 -1
- package/dist/daemon.d.ts +95 -4
- package/dist/daemon.js +748 -111
- package/dist/daemon.js.map +1 -1
- package/dist/darwin-memory.d.ts +6 -1
- package/dist/darwin-memory.js +17 -6
- package/dist/darwin-memory.js.map +1 -1
- package/dist/delivery-consumed-watch.d.ts +85 -0
- package/dist/delivery-consumed-watch.js +244 -0
- package/dist/delivery-consumed-watch.js.map +1 -0
- package/dist/delivery-outbox.d.ts +61 -0
- package/dist/delivery-outbox.js +120 -2
- package/dist/delivery-outbox.js.map +1 -1
- package/dist/delivery-reconciliation.d.ts +14 -5
- package/dist/delivery-reconciliation.js +27 -4
- package/dist/delivery-reconciliation.js.map +1 -1
- package/dist/delivery-reconciliation.test.js +35 -1
- package/dist/delivery-reconciliation.test.js.map +1 -1
- package/dist/event-log.d.ts +4 -1
- package/dist/event-log.js +6 -3
- package/dist/event-log.js.map +1 -1
- package/dist/event-loop-watch.d.ts +28 -0
- package/dist/event-loop-watch.js +75 -3
- package/dist/event-loop-watch.js.map +1 -1
- package/dist/fleet-context.d.ts +22 -2
- package/dist/fleet-control-audit.d.ts +5 -0
- package/dist/fleet-control-audit.js +7 -0
- package/dist/fleet-control-audit.js.map +1 -1
- package/dist/fleet-level-config.d.ts +2 -2
- package/dist/fleet-level-config.js +28 -1
- package/dist/fleet-level-config.js.map +1 -1
- package/dist/fleet-manager.d.ts +339 -12
- package/dist/fleet-manager.js +2623 -461
- package/dist/fleet-manager.js.map +1 -1
- package/dist/full-restart.js +2 -3
- package/dist/full-restart.js.map +1 -1
- package/dist/general-knowledge/skills/persona-emoji/SKILL.md +3 -1
- package/dist/host-memory.d.ts +4 -0
- package/dist/host-memory.js.map +1 -1
- package/dist/install-lock.d.ts +49 -0
- package/dist/install-lock.js +200 -0
- package/dist/install-lock.js.map +1 -0
- package/dist/instance-config-impact.js +8 -2
- package/dist/instance-config-impact.js.map +1 -1
- package/dist/instance-lifecycle.d.ts +10 -5
- package/dist/instance-lifecycle.js +162 -53
- package/dist/instance-lifecycle.js.map +1 -1
- package/dist/locale.js +164 -16
- package/dist/locale.js.map +1 -1
- package/dist/login-controller.d.ts +2 -0
- package/dist/login-controller.js +17 -5
- package/dist/login-controller.js.map +1 -1
- package/dist/memory-pressure.d.ts +7 -8
- package/dist/memory-pressure.js +76 -15
- package/dist/memory-pressure.js.map +1 -1
- package/dist/monotonic-budget.d.ts +2 -0
- package/dist/monotonic-budget.js +28 -0
- package/dist/monotonic-budget.js.map +1 -0
- package/dist/needs-you-hub.d.ts +114 -0
- package/dist/needs-you-hub.js +370 -0
- package/dist/needs-you-hub.js.map +1 -0
- package/dist/needs-you-live.d.ts +116 -0
- package/dist/needs-you-live.js +228 -0
- package/dist/needs-you-live.js.map +1 -0
- package/dist/needs-you.d.ts +132 -0
- package/dist/needs-you.js +164 -0
- package/dist/needs-you.js.map +1 -0
- package/dist/node-version-guard.d.ts +30 -0
- package/dist/node-version-guard.js +50 -0
- package/dist/node-version-guard.js.map +1 -0
- package/dist/operator-control-paths.d.ts +4 -0
- package/dist/operator-control-paths.js +24 -0
- package/dist/operator-control-paths.js.map +1 -0
- package/dist/outbound-handlers.d.ts +2 -0
- package/dist/outbound-handlers.js +9 -2
- package/dist/outbound-handlers.js.map +1 -1
- package/dist/outbound-schemas.d.ts +5 -5
- package/dist/outbound-schemas.js +1 -1
- package/dist/outbound-schemas.js.map +1 -1
- package/dist/package-preimage.d.ts +26 -0
- package/dist/package-preimage.js +96 -0
- package/dist/package-preimage.js.map +1 -0
- package/dist/profile-control.js +4 -20
- package/dist/profile-control.js.map +1 -1
- package/dist/public-web-gateway.d.ts +18 -0
- package/dist/public-web-gateway.js +141 -0
- package/dist/public-web-gateway.js.map +1 -0
- package/dist/public-web-link.d.ts +53 -0
- package/dist/public-web-link.js +175 -0
- package/dist/public-web-link.js.map +1 -0
- package/dist/quickstart-api.d.ts +8 -1
- package/dist/quickstart-api.js +86 -48
- package/dist/quickstart-api.js.map +1 -1
- package/dist/quickstart.d.ts +1 -0
- package/dist/quickstart.js +16 -6
- package/dist/quickstart.js.map +1 -1
- package/dist/restart-guard.d.ts +52 -0
- package/dist/restart-guard.js +109 -0
- package/dist/restart-guard.js.map +1 -0
- package/dist/scheduler/db.d.ts +7 -1
- package/dist/scheduler/db.js +44 -2
- package/dist/scheduler/db.js.map +1 -1
- package/dist/scheduler/index.d.ts +1 -1
- package/dist/scheduler/retry-label.d.ts +11 -0
- package/dist/scheduler/retry-label.js +24 -0
- package/dist/scheduler/retry-label.js.map +1 -0
- package/dist/scheduler/scheduler.d.ts +55 -2
- package/dist/scheduler/scheduler.js +220 -8
- package/dist/scheduler/scheduler.js.map +1 -1
- package/dist/scheduler/types.d.ts +22 -0
- package/dist/scheduler/types.js.map +1 -1
- package/dist/secret-store.d.ts +5 -0
- package/dist/secret-store.js +20 -0
- package/dist/secret-store.js.map +1 -1
- package/dist/service-activation.d.ts +152 -0
- package/dist/service-activation.js +407 -0
- package/dist/service-activation.js.map +1 -0
- package/dist/service-installer.d.ts +63 -1
- package/dist/service-installer.js +141 -16
- package/dist/service-installer.js.map +1 -1
- package/dist/service-plan.d.ts +65 -0
- package/dist/service-plan.js +108 -0
- package/dist/service-plan.js.map +1 -0
- package/dist/service-restart-selection.d.ts +6 -5
- package/dist/service-restart-selection.js +6 -5
- package/dist/service-restart-selection.js.map +1 -1
- package/dist/settings-api.d.ts +10 -2
- package/dist/settings-api.js +216 -72
- package/dist/settings-api.js.map +1 -1
- package/dist/settings-baseline.d.ts +20 -0
- package/dist/settings-baseline.js +104 -0
- package/dist/settings-baseline.js.map +1 -0
- package/dist/settings-change.d.ts +21 -0
- package/dist/settings-change.js +161 -0
- package/dist/settings-change.js.map +1 -0
- package/dist/settings-confirmation.d.ts +105 -0
- package/dist/settings-confirmation.js +232 -0
- package/dist/settings-confirmation.js.map +1 -0
- package/dist/settings-control.d.ts +41 -0
- package/dist/settings-control.js +294 -0
- package/dist/settings-control.js.map +1 -0
- package/dist/settings-effect.d.ts +24 -0
- package/dist/settings-effect.js +169 -0
- package/dist/settings-effect.js.map +1 -0
- package/dist/settings-http-confirmation.d.ts +29 -0
- package/dist/settings-http-confirmation.js +123 -0
- package/dist/settings-http-confirmation.js.map +1 -0
- package/dist/settings-instance-patch.d.ts +4 -0
- package/dist/settings-instance-patch.js +26 -0
- package/dist/settings-instance-patch.js.map +1 -0
- package/dist/settings-request-capability.d.ts +16 -0
- package/dist/settings-request-capability.js +32 -0
- package/dist/settings-request-capability.js.map +1 -0
- package/dist/settings-transaction.d.ts +65 -0
- package/dist/settings-transaction.js +223 -0
- package/dist/settings-transaction.js.map +1 -0
- package/dist/setup-auth.d.ts +10 -18
- package/dist/setup-auth.js +14 -38
- package/dist/setup-auth.js.map +1 -1
- package/dist/setup-form.d.ts +1 -1
- package/dist/setup-form.js +75 -18
- package/dist/setup-form.js.map +1 -1
- package/dist/setup-guide.d.ts +13 -0
- package/dist/setup-guide.js +25 -0
- package/dist/setup-guide.js.map +1 -0
- package/dist/setup-host.d.ts +16 -0
- package/dist/setup-host.js +199 -35
- package/dist/setup-host.js.map +1 -1
- package/dist/setup-wizard.js +5 -1
- package/dist/setup-wizard.js.map +1 -1
- package/dist/slash-authz.d.ts +17 -3
- package/dist/slash-authz.js +5 -0
- package/dist/slash-authz.js.map +1 -1
- package/dist/spawn-gate.js +3 -3
- package/dist/spawn-gate.js.map +1 -1
- package/dist/sqlite-open-errors.d.ts +12 -0
- package/dist/sqlite-open-errors.js +13 -0
- package/dist/sqlite-open-errors.js.map +1 -0
- package/dist/statusline-watcher.d.ts +5 -0
- package/dist/statusline-watcher.js +2 -0
- package/dist/statusline-watcher.js.map +1 -1
- package/dist/steer-capability.d.ts +6 -0
- package/dist/steer-capability.js +8 -0
- package/dist/steer-capability.js.map +1 -1
- package/dist/sync-work-attribution.d.ts +14 -0
- package/dist/sync-work-attribution.js +43 -8
- package/dist/sync-work-attribution.js.map +1 -1
- package/dist/tips.js +10 -5
- package/dist/tips.js.map +1 -1
- package/dist/tmux-control.d.ts +57 -5
- package/dist/tmux-control.js +379 -61
- package/dist/tmux-control.js.map +1 -1
- package/dist/tmux-manager.d.ts +20 -6
- package/dist/tmux-manager.js +90 -47
- package/dist/tmux-manager.js.map +1 -1
- package/dist/tmux-read.d.ts +59 -0
- package/dist/tmux-read.js +213 -0
- package/dist/tmux-read.js.map +1 -0
- package/dist/topic-commands.d.ts +21 -10
- package/dist/topic-commands.js +205 -63
- package/dist/topic-commands.js.map +1 -1
- package/dist/transcript-delta-reader.js +2 -1
- package/dist/transcript-delta-reader.js.map +1 -1
- package/dist/tunnel/cloudflared-install.d.ts +2 -0
- package/dist/tunnel/cloudflared-install.js +1 -1
- package/dist/tunnel/cloudflared-install.js.map +1 -1
- package/dist/tunnel/purpose-lane.d.ts +14 -0
- package/dist/tunnel/purpose-lane.js +43 -0
- package/dist/tunnel/purpose-lane.js.map +1 -0
- package/dist/turn-reply-guard.d.ts +2 -0
- package/dist/turn-reply-guard.js +10 -1
- package/dist/turn-reply-guard.js.map +1 -1
- package/dist/types.d.ts +33 -0
- package/dist/ui/app.html +18 -0
- package/dist/ui/chat-commands.js +43 -0
- package/dist/ui/chat-render.js +478 -0
- package/dist/ui/chat-store.js +318 -0
- package/dist/ui/chat-strings.js +89 -0
- package/dist/ui/chat-thread.js +246 -0
- package/dist/ui/chat-tour.js +116 -0
- package/dist/ui/fleet-cache.js +168 -0
- package/dist/ui/fleet-org.js +142 -0
- package/dist/ui/panel-chat.js +504 -0
- package/dist/ui/panel-fleet.js +427 -0
- package/dist/ui/panel-needs.js +202 -0
- package/dist/ui/panel-settings.js +754 -0
- package/dist/ui/preview-panel.js +202 -0
- package/dist/ui/preview.js +270 -0
- package/dist/ui/settings-apply.js +239 -0
- package/dist/ui/settings-confirm.js +186 -0
- package/dist/ui/settings-dialogs.js +546 -0
- package/dist/ui/settings-model.js +277 -0
- package/dist/ui/settings-strings.js +654 -0
- package/dist/ui/settings-wizard.js +140 -0
- package/dist/ui/shared/agend-auth.js +93 -0
- package/dist/ui/shared/app-ctx.js +80 -0
- package/dist/ui/shared/app-html.js +9 -0
- package/dist/ui/shared/app-i18n.js +95 -0
- package/dist/ui/shared/app-nav.js +73 -0
- package/dist/ui/shared/app-needs.js +114 -0
- package/dist/ui/shared/app-route.js +73 -0
- package/dist/ui/shared/app-session.js +66 -0
- package/dist/ui/shared/app-shell.js +346 -0
- package/dist/ui/shared/app-store.js +51 -0
- package/dist/ui/shared/app-stream.js +201 -0
- package/dist/ui/shared/app.css +820 -0
- package/dist/ui/shared/app.js +88 -0
- package/dist/ui/shared/fonts/OFL.txt +92 -0
- package/dist/ui/shared/fonts/README.md +21 -0
- package/dist/ui/shared/fonts/inter.woff2 +0 -0
- package/dist/ui/shared/htm.module.js +1 -0
- package/dist/ui/shared/panel-view.js +655 -0
- package/dist/ui/shared/preact-hooks.module.js +2 -0
- package/dist/ui/shared/preact.module.js +2 -0
- package/dist/ui/shared/signin.js +142 -0
- package/dist/ui/shared/theme.js +29 -0
- package/dist/ui/shared/tokens.css +153 -0
- package/dist/ui/shared/ui-confirm.js +43 -0
- package/dist/ui/shared/ui-dialog.js +45 -0
- package/dist/ui/shared/ui-icons.js +63 -0
- package/dist/ui/shared/ui-menu.js +39 -0
- package/dist/ui/shared/ui-states.js +20 -0
- package/dist/ui/shared/ui-toast.js +18 -0
- package/dist/ui/shared/vendor/htm.LICENSE +202 -0
- package/dist/ui/shared/vendor/preact.LICENSE +21 -0
- package/dist/ui/shared/vendor/vendor.json +39 -0
- package/dist/ui/shared/view-strings.js +309 -0
- package/dist/ui/signin.html +52 -0
- package/dist/update-check.d.ts +6 -2
- package/dist/update-check.js +12 -3
- package/dist/update-check.js.map +1 -1
- package/dist/update-dispatch.d.ts +28 -0
- package/dist/update-dispatch.js +73 -0
- package/dist/update-dispatch.js.map +1 -0
- package/dist/update-install.d.ts +129 -0
- package/dist/update-install.js +262 -0
- package/dist/update-install.js.map +1 -0
- package/dist/upgrade-notices.d.ts +17 -0
- package/dist/upgrade-notices.js +93 -0
- package/dist/upgrade-notices.js.map +1 -0
- package/dist/usage/statusline-usage.d.ts +2 -0
- package/dist/usage/statusline-usage.js +14 -10
- package/dist/usage/statusline-usage.js.map +1 -1
- package/dist/view-api.d.ts +6 -1
- package/dist/view-api.js +62 -51
- package/dist/view-api.js.map +1 -1
- package/dist/web-api.d.ts +85 -14
- package/dist/web-api.js +557 -77
- package/dist/web-api.js.map +1 -1
- package/dist/web-auth.d.ts +71 -27
- package/dist/web-auth.js +169 -69
- package/dist/web-auth.js.map +1 -1
- package/dist/web-body.d.ts +3 -0
- package/dist/web-body.js +55 -0
- package/dist/web-body.js.map +1 -0
- package/dist/web-channel-echo.d.ts +9 -0
- package/dist/web-channel-echo.js +55 -0
- package/dist/web-channel-echo.js.map +1 -0
- package/dist/web-chat-history.d.ts +125 -0
- package/dist/web-chat-history.js +184 -0
- package/dist/web-chat-history.js.map +1 -0
- package/dist/web-commands.d.ts +77 -0
- package/dist/web-commands.js +81 -0
- package/dist/web-commands.js.map +1 -0
- package/dist/web-continuation.d.ts +7 -0
- package/dist/web-continuation.js +22 -0
- package/dist/web-continuation.js.map +1 -0
- package/dist/web-host-guard.d.ts +34 -0
- package/dist/web-host-guard.js +57 -1
- package/dist/web-host-guard.js.map +1 -1
- package/dist/web-login.d.ts +72 -0
- package/dist/web-login.js +132 -0
- package/dist/web-login.js.map +1 -0
- package/dist/web-org.d.ts +55 -0
- package/dist/web-org.js +67 -0
- package/dist/web-org.js.map +1 -0
- package/dist/web-preview.d.ts +77 -0
- package/dist/web-preview.js +240 -0
- package/dist/web-preview.js.map +1 -0
- package/dist/web-request-context.d.ts +10 -0
- package/dist/web-request-context.js +13 -0
- package/dist/web-request-context.js.map +1 -0
- package/dist/web-session.d.ts +167 -0
- package/dist/web-session.js +389 -0
- package/dist/web-session.js.map +1 -0
- package/dist/web-shell-routes.d.ts +59 -0
- package/dist/web-shell-routes.js +96 -0
- package/dist/web-shell-routes.js.map +1 -0
- package/dist/web-upload.d.ts +183 -0
- package/dist/web-upload.js +468 -0
- package/dist/web-upload.js.map +1 -0
- package/dist/website-tips-renderer.d.ts +2 -2
- package/dist/website-tips-renderer.js +3 -3
- package/dist/website-tips-renderer.js.map +1 -1
- package/launcher/agend +110 -0
- package/launcher/agend-agent +110 -0
- package/launcher/agend-agent.cjs +4 -0
- package/launcher/agend.cjs +4 -0
- package/launcher/install-admission.cjs +105 -0
- package/launcher/launch.cjs +64 -0
- package/launcher/postinstall.cjs +114 -0
- package/launcher/run-in-process.cjs +13 -0
- package/launcher/runtime-platform.cjs +86 -0
- package/launcher/runtime-select.cjs +217 -0
- package/package.json +18 -7
- package/scripts/preinstall-guard.cjs +55 -0
- package/templates/launchd.plist.ejs +2 -2
- package/templates/systemd.service.ejs +1 -1
- package/dist/ui/dashboard.html +0 -774
- package/dist/ui/settings.html +0 -2165
- package/dist/ui/view.html +0 -1139
package/dist/tmux-control.js
CHANGED
|
@@ -1,28 +1,32 @@
|
|
|
1
|
-
import { spawn
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
2
|
import { EventEmitter } from "node:events";
|
|
3
|
-
import {
|
|
3
|
+
import { StringDecoder } from "node:string_decoder";
|
|
4
|
+
import { randomUUID } from "node:crypto";
|
|
4
5
|
import { getTmuxSocketName } from "./paths.js";
|
|
6
|
+
import { measureSyncWork } from "./sync-work-attribution.js";
|
|
7
|
+
import { TmuxReadLane, TmuxReadError, TMUX_READ_MAX_BYTES, tmuxReadArgs, tmuxCommandToken } from "./tmux-read.js";
|
|
5
8
|
export const CONTROL_SAFETY_SWEEP_MS = 60_000;
|
|
9
|
+
/**
|
|
10
|
+
* The sweep's listeners — one per daemon, each capturing and evaluating its pane —
|
|
11
|
+
* are spread over this much of the period instead of all running in one tick (#1402): measured live, that one tick was
|
|
12
|
+
* 150–860 ms of unbroken spawning under normal load and 1–2.5 s when the host was busy (#1235). Half the period, so a
|
|
13
|
+
* sweep's last slot is always well before the next sweep starts.
|
|
14
|
+
*/
|
|
15
|
+
export const CONTROL_SAFETY_SWEEP_SPREAD_MS = CONTROL_SAFETY_SWEEP_MS / 2;
|
|
6
16
|
/**
|
|
7
17
|
* Consecutive `list-panes` failures before a window's registration is dropped.
|
|
8
18
|
* More than one because tmux fails transiently under load, and unregistering a
|
|
9
19
|
* live window would silence the output events its daemon depends on.
|
|
10
20
|
*/
|
|
11
21
|
const RESOLVE_FAILURES_BEFORE_DROP = 3;
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
reject(err);
|
|
21
|
-
else
|
|
22
|
-
resolve(stdout.trim());
|
|
23
|
-
});
|
|
24
|
-
});
|
|
25
|
-
}
|
|
22
|
+
/**
|
|
23
|
+
* How often a lost window (one that stopped resolving) is retried, at most, while a caller asks about it. Retries are
|
|
24
|
+
* on demand only — nothing re-resolves a lost window on reconnect — so a dead window that nobody asks about costs
|
|
25
|
+
* nothing, and a live one that comes back is picked up within this long of the next question.
|
|
26
|
+
*/
|
|
27
|
+
const LOST_WINDOW_RETRY_MS = 5_000;
|
|
28
|
+
const FRAME_OVERHEAD_BYTES = 64 * 1024;
|
|
29
|
+
const RECONNECT_MS = 2_000;
|
|
26
30
|
/**
|
|
27
31
|
* Persistent tmux control mode client that monitors %output events
|
|
28
32
|
* to detect per-pane idle state. One instance per tmux session.
|
|
@@ -37,38 +41,87 @@ export class TmuxControlClient extends EventEmitter {
|
|
|
37
41
|
sessionName;
|
|
38
42
|
silenceMs;
|
|
39
43
|
logger;
|
|
40
|
-
|
|
41
|
-
|
|
44
|
+
/** A retired child still owns this slot until exit/close proves it is gone. */
|
|
45
|
+
attachment = null;
|
|
46
|
+
activeRead = null;
|
|
47
|
+
reconnectAfter = 0;
|
|
48
|
+
socket = getTmuxSocketName();
|
|
49
|
+
reads;
|
|
50
|
+
registrationSerial = 0;
|
|
51
|
+
registrationTokens = new Map();
|
|
42
52
|
lastOutputAt = new Map(); // paneId → timestamp
|
|
43
53
|
paneToWindow = new Map(); // paneId → windowId
|
|
44
54
|
registeredWindows = new Set(); // windowIds we should re-resolve on reconnect
|
|
45
55
|
resolveFailures = new Map(); // windowId → consecutive resolve failures
|
|
56
|
+
/**
|
|
57
|
+
* Registered windows that stopped resolving (#1490). They leave the reconnect set — a dead window's registration was
|
|
58
|
+
* a permanent per-reconnect cost — but are not forgotten: their state is unknown, and unknown is not idle. A caller's
|
|
59
|
+
* question retries the resolve (at most every LOST_WINDOW_RETRY_MS); success registers the window again.
|
|
60
|
+
*/
|
|
61
|
+
lostWindows = new Map();
|
|
62
|
+
/** Monotonic time a lost window resolved again: until it has been silent this long, it is not idle. */
|
|
63
|
+
recoveredAt = new Map();
|
|
64
|
+
/** Monotonic clock for retry spacing and the recovery silence (elapsed budgets, never wall time). */
|
|
65
|
+
mono = () => performance.now();
|
|
46
66
|
stopped = false;
|
|
47
67
|
reconnectTimer = null;
|
|
48
68
|
/** Epoch ms of the last observation reset. Everything before it is unobservable:
|
|
49
69
|
* the pane cache was dropped, so the absence of a record proves nothing. */
|
|
50
70
|
observationResetAt = 0;
|
|
51
71
|
safetySweepTimer = null;
|
|
72
|
+
/** The current sweep's pending per-listener slots. */
|
|
73
|
+
safetySweepSlots = new Set();
|
|
52
74
|
constructor(sessionName, silenceMs = 2000, logger) {
|
|
53
75
|
super();
|
|
54
76
|
this.sessionName = sessionName;
|
|
55
77
|
this.silenceMs = silenceMs;
|
|
56
78
|
this.logger = logger;
|
|
79
|
+
this.reads = new TmuxReadLane(this.socket, {
|
|
80
|
+
ready: () => Boolean(this.attachment?.ready && !this.attachment.retired),
|
|
81
|
+
execute: (args, deadline) => this.executeRead(args, deadline),
|
|
82
|
+
retire: () => this.cleanup(),
|
|
83
|
+
});
|
|
57
84
|
// One shared control client intentionally has one listener per daemon.
|
|
58
85
|
this.setMaxListeners(0);
|
|
59
86
|
}
|
|
60
87
|
start() {
|
|
88
|
+
if (!this.stopped && this.safetySweepTimer)
|
|
89
|
+
return;
|
|
61
90
|
this.stopped = false;
|
|
91
|
+
this.reads.start();
|
|
62
92
|
if (!this.safetySweepTimer) {
|
|
63
|
-
this.safetySweepTimer = setInterval(() =>
|
|
64
|
-
this.emit("safety_sweep", { at: Date.now() });
|
|
65
|
-
}, CONTROL_SAFETY_SWEEP_MS);
|
|
93
|
+
this.safetySweepTimer = setInterval(() => this.runSafetySweep(), CONTROL_SAFETY_SWEEP_MS);
|
|
66
94
|
}
|
|
67
95
|
this.connect();
|
|
68
96
|
}
|
|
69
|
-
|
|
97
|
+
/**
|
|
98
|
+
* One sweep: every daemon's listener, each in a tick of its own, spread evenly over CONTROL_SAFETY_SWEEP_SPREAD_MS
|
|
99
|
+
* (#1402). A listener removed before its slot (its daemon stopped) is skipped; stop() drops slots still pending.
|
|
100
|
+
*/
|
|
101
|
+
runSafetySweep() {
|
|
102
|
+
const listeners = this.listeners("safety_sweep");
|
|
103
|
+
const step = listeners.length > 0 ? CONTROL_SAFETY_SWEEP_SPREAD_MS / listeners.length : 0;
|
|
104
|
+
listeners.forEach((listener, i) => {
|
|
105
|
+
const slot = setTimeout(() => {
|
|
106
|
+
this.safetySweepSlots.delete(slot);
|
|
107
|
+
if (this.stopped || !this.listeners("safety_sweep").includes(listener))
|
|
108
|
+
return;
|
|
109
|
+
// One daemon's capture start and pane evaluation: attributed per tick (#1235).
|
|
110
|
+
measureSyncWork("tmux.safetySweep", () => listener({ at: Date.now() }));
|
|
111
|
+
}, Math.floor(i * step));
|
|
112
|
+
slot.unref?.();
|
|
113
|
+
this.safetySweepSlots.add(slot);
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
clearSafetySweepSlots() {
|
|
117
|
+
for (const slot of this.safetySweepSlots)
|
|
118
|
+
clearTimeout(slot);
|
|
119
|
+
this.safetySweepSlots.clear();
|
|
120
|
+
}
|
|
70
121
|
stop() {
|
|
71
122
|
this.stopped = true;
|
|
123
|
+
this.reads.stop();
|
|
124
|
+
this.clearSafetySweepSlots();
|
|
72
125
|
if (this.reconnectTimer) {
|
|
73
126
|
clearTimeout(this.reconnectTimer);
|
|
74
127
|
this.reconnectTimer = null;
|
|
@@ -79,18 +132,38 @@ export class TmuxControlClient extends EventEmitter {
|
|
|
79
132
|
}
|
|
80
133
|
this.cleanup();
|
|
81
134
|
}
|
|
135
|
+
isFor(session, socket) {
|
|
136
|
+
return session === this.sessionName && socket === this.socket;
|
|
137
|
+
}
|
|
138
|
+
read(query, timeoutMs = 10_000) {
|
|
139
|
+
if (!this.isFor(query.session, getTmuxSocketName())) {
|
|
140
|
+
return Promise.reject(new TmuxReadError("command", "tmux read scope mismatch"));
|
|
141
|
+
}
|
|
142
|
+
try {
|
|
143
|
+
return this.reads.read(tmuxReadArgs(query), timeoutMs);
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
return Promise.reject(error);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
82
149
|
/**
|
|
83
150
|
* Register a window so we can track its pane's output.
|
|
84
151
|
* Call this after createWindow().
|
|
85
152
|
*/
|
|
86
153
|
async registerWindow(windowId) {
|
|
154
|
+
this.lostWindows.delete(windowId);
|
|
155
|
+
this.recoveredAt.delete(windowId);
|
|
87
156
|
this.registeredWindows.add(windowId);
|
|
157
|
+
this.registrationTokens.set(windowId, ++this.registrationSerial);
|
|
88
158
|
await this.resolvePane(windowId);
|
|
89
159
|
}
|
|
90
160
|
/** Unregister a window (call on killWindow) */
|
|
91
161
|
unregisterWindow(windowId) {
|
|
92
162
|
this.registeredWindows.delete(windowId);
|
|
163
|
+
this.registrationTokens.delete(windowId);
|
|
93
164
|
this.resolveFailures.delete(windowId);
|
|
165
|
+
this.lostWindows.delete(windowId);
|
|
166
|
+
this.recoveredAt.delete(windowId);
|
|
94
167
|
for (const [pane, win] of this.paneToWindow) {
|
|
95
168
|
if (win === windowId) {
|
|
96
169
|
this.paneToWindow.delete(pane);
|
|
@@ -103,8 +176,8 @@ export class TmuxControlClient extends EventEmitter {
|
|
|
103
176
|
* Resolve a window's current pane id and cache the mapping.
|
|
104
177
|
*
|
|
105
178
|
* Drops a registration that has failed to resolve `RESOLVE_FAILURES_BEFORE_DROP`
|
|
106
|
-
* times in a row. Every reconnect re-resolves every registered window
|
|
107
|
-
*
|
|
179
|
+
* times in a row. Every reconnect re-resolves every registered window through the read FIFO,
|
|
180
|
+
* so a registration for a window that no longer exists is a
|
|
108
181
|
* permanent per-reconnect cost — and callers do forget to unregister (a crash
|
|
109
182
|
* respawn creates a new window id and the dead one used to stay forever).
|
|
110
183
|
*
|
|
@@ -113,23 +186,31 @@ export class TmuxControlClient extends EventEmitter {
|
|
|
113
186
|
* registration would silence its output events.
|
|
114
187
|
*/
|
|
115
188
|
async resolvePane(windowId) {
|
|
189
|
+
const token = this.registrationTokens.get(windowId);
|
|
190
|
+
const owner = this.attachment;
|
|
191
|
+
const current = () => !this.stopped && this.registeredWindows.has(windowId)
|
|
192
|
+
&& this.registrationTokens.get(windowId) === token && this.admissible(owner);
|
|
116
193
|
try {
|
|
117
|
-
const paneId = await
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
]);
|
|
194
|
+
const paneId = (await this.read({ kind: "pane", session: this.sessionName, window: windowId, field: "id" })).trim();
|
|
195
|
+
if (!current())
|
|
196
|
+
return;
|
|
121
197
|
this.resolveFailures.delete(windowId);
|
|
122
198
|
if (paneId) {
|
|
123
199
|
this.paneToWindow.set(paneId, windowId);
|
|
124
200
|
this.logger?.debug({ windowId, paneId }, "Registered window→pane mapping");
|
|
125
201
|
}
|
|
126
202
|
}
|
|
127
|
-
catch {
|
|
203
|
+
catch (error) {
|
|
204
|
+
if (!current() || !(error instanceof TmuxReadError) || error.kind !== "command")
|
|
205
|
+
return;
|
|
128
206
|
const failures = (this.resolveFailures.get(windowId) ?? 0) + 1;
|
|
129
207
|
this.resolveFailures.set(windowId, failures);
|
|
130
208
|
if (failures >= RESOLVE_FAILURES_BEFORE_DROP && this.registeredWindows.has(windowId)) {
|
|
131
|
-
|
|
209
|
+
// Out of the reconnect set, but remembered as lost: a window we cannot see is not idle (#1490). Dropping it
|
|
210
|
+
// outright made isIdle answer "idle" forever, and a delivery pasted into a generating CLI.
|
|
211
|
+
this.logger?.warn({ windowId, failures }, "Window has not resolved for several attempts — treating it as busy until it resolves again");
|
|
132
212
|
this.unregisterWindow(windowId);
|
|
213
|
+
this.lostWindows.set(windowId, { lastTryAt: this.mono(), token: 0, inFlight: false });
|
|
133
214
|
return;
|
|
134
215
|
}
|
|
135
216
|
this.logger?.debug({ windowId, failures }, "Failed to resolve pane ID for window");
|
|
@@ -144,8 +225,20 @@ export class TmuxControlClient extends EventEmitter {
|
|
|
144
225
|
resetPaneObservations() {
|
|
145
226
|
this.paneToWindow.clear();
|
|
146
227
|
this.lastOutputAt.clear();
|
|
228
|
+
// A recovered window's "silent since it came back" is an observation too: kept, it would vouch for whatever pane
|
|
229
|
+
// the window re-resolves to inside the new grace (#1494 review).
|
|
230
|
+
this.recoveredAt.clear();
|
|
147
231
|
this.observationResetAt = Date.now();
|
|
148
232
|
}
|
|
233
|
+
/**
|
|
234
|
+
* Whether a read started on `owner` may still commit what it learned: the same attachment, not retired. A retired
|
|
235
|
+
* attachment stays in `this.attachment` until its child exits, and a completed frame followed by `%exit` in one
|
|
236
|
+
* chunk resolves the read before the retirement is visible to identity alone (#1494 review). A read started with
|
|
237
|
+
* no attachment (the fallback lane) counts while there is still none.
|
|
238
|
+
*/
|
|
239
|
+
admissible(owner) {
|
|
240
|
+
return this.attachment === owner && !owner?.retired;
|
|
241
|
+
}
|
|
149
242
|
/**
|
|
150
243
|
* True while a freshly (re)connected client has not had time to observe output.
|
|
151
244
|
*
|
|
@@ -176,18 +269,67 @@ export class TmuxControlClient extends EventEmitter {
|
|
|
176
269
|
}
|
|
177
270
|
/** Check if a window's pane has been silent for at least silenceMs */
|
|
178
271
|
isIdle(windowId) {
|
|
272
|
+
// A registered window that stopped resolving: unknown, so not idle; asking retries the resolve (#1490).
|
|
273
|
+
if (this.lostWindows.has(windowId)) {
|
|
274
|
+
this.retryLostWindow(windowId);
|
|
275
|
+
return false;
|
|
276
|
+
}
|
|
179
277
|
const paneId = this.windowToPaneId(windowId);
|
|
278
|
+
// A registered window whose pane is not resolved yet (after a reconnect, or between failed attempts) is unknown,
|
|
279
|
+
// not idle, however long the grace has run: its re-resolution can outlast the grace (#1490).
|
|
280
|
+
if (!paneId && this.registeredWindows.has(windowId))
|
|
281
|
+
return false;
|
|
180
282
|
// "Unknown" means unknown, not idle — but only while that ignorance is fresh.
|
|
181
283
|
// After the grace we fall back to the old optimistic answer, because a window
|
|
182
|
-
// that
|
|
183
|
-
// block delivery forever.
|
|
284
|
+
// that was never registered must not block delivery forever.
|
|
184
285
|
if (!paneId)
|
|
185
286
|
return !this.inObservationGrace();
|
|
186
287
|
const last = this.lastOutputAt.get(paneId);
|
|
187
|
-
if (last == null)
|
|
288
|
+
if (last == null) {
|
|
289
|
+
// Back from lost: nothing observed since; idle only after silenceMs of observed silence.
|
|
290
|
+
const recovered = this.recoveredAt.get(windowId);
|
|
291
|
+
if (recovered !== undefined)
|
|
292
|
+
return this.mono() - recovered >= this.silenceMs;
|
|
188
293
|
return !this.inObservationGrace();
|
|
294
|
+
}
|
|
189
295
|
return Date.now() - last >= this.silenceMs;
|
|
190
296
|
}
|
|
297
|
+
/**
|
|
298
|
+
* Try a lost window again (at most every LOST_WINDOW_RETRY_MS). Success re-registers it under a fresh token; the
|
|
299
|
+
* result counts only for the same lost record, the same attachment, and a client that has not stopped.
|
|
300
|
+
*/
|
|
301
|
+
retryLostWindow(windowId) {
|
|
302
|
+
const lost = this.lostWindows.get(windowId);
|
|
303
|
+
// One attempt at a time per lost record: superseding a slow but healthy read every spacing meant a window whose
|
|
304
|
+
// reads take longer than the spacing could never come back (#1494 review). Reads are bounded, so it settles.
|
|
305
|
+
if (!lost || lost.inFlight || this.stopped)
|
|
306
|
+
return;
|
|
307
|
+
const at = this.mono();
|
|
308
|
+
// The first retry also waits: the window has just failed RESOLVE_FAILURES_BEFORE_DROP times.
|
|
309
|
+
if (at - lost.lastTryAt < LOST_WINDOW_RETRY_MS)
|
|
310
|
+
return;
|
|
311
|
+
lost.lastTryAt = at;
|
|
312
|
+
lost.inFlight = true;
|
|
313
|
+
const token = ++this.registrationSerial;
|
|
314
|
+
lost.token = token;
|
|
315
|
+
const owner = this.attachment;
|
|
316
|
+
const current = () => !this.stopped && this.lostWindows.get(windowId) === lost && lost.token === token
|
|
317
|
+
&& this.admissible(owner);
|
|
318
|
+
this.read({ kind: "pane", session: this.sessionName, window: windowId, field: "id" }).finally(() => {
|
|
319
|
+
lost.inFlight = false;
|
|
320
|
+
}).then((output) => {
|
|
321
|
+
const paneId = output.trim();
|
|
322
|
+
if (!current() || !paneId)
|
|
323
|
+
return;
|
|
324
|
+
this.lostWindows.delete(windowId);
|
|
325
|
+
this.registeredWindows.add(windowId);
|
|
326
|
+
this.registrationTokens.set(windowId, token);
|
|
327
|
+
this.resolveFailures.delete(windowId);
|
|
328
|
+
this.paneToWindow.set(paneId, windowId);
|
|
329
|
+
this.recoveredAt.set(windowId, this.mono());
|
|
330
|
+
this.logger?.info({ windowId, paneId }, "Lost window resolved again — re-registered");
|
|
331
|
+
}, () => { });
|
|
332
|
+
}
|
|
191
333
|
/** Timestamp of the window pane's last observed output, or undefined if unknown. */
|
|
192
334
|
getLastOutputAt(windowId) {
|
|
193
335
|
const paneId = this.windowToPaneId(windowId);
|
|
@@ -285,8 +427,12 @@ export class TmuxControlClient extends EventEmitter {
|
|
|
285
427
|
return undefined;
|
|
286
428
|
}
|
|
287
429
|
connect() {
|
|
288
|
-
if (this.stopped)
|
|
430
|
+
if (this.stopped || this.attachment)
|
|
289
431
|
return;
|
|
432
|
+
if (performance.now() < this.reconnectAfter) {
|
|
433
|
+
this.scheduleReconnect();
|
|
434
|
+
return;
|
|
435
|
+
}
|
|
290
436
|
// Pane IDs are tmux-server-scoped: a server restart (or a long-enough
|
|
291
437
|
// disconnect that windows churned) can leave our cached paneId →
|
|
292
438
|
// windowId mapping pointing at a stale or recycled pane. Drop the
|
|
@@ -305,31 +451,208 @@ export class TmuxControlClient extends EventEmitter {
|
|
|
305
451
|
// successfully pasted message sitting unsubmitted. The control process is a
|
|
306
452
|
// trusted child whose stdin is owned by this FleetManager; writable control
|
|
307
453
|
// mode does not grant a capability the same OS user does not already have.
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
stdio: ["pipe", "pipe", "pipe"]
|
|
454
|
+
const args = ["-C", "attach", "-f", "ignore-size", "-t", this.sessionName];
|
|
455
|
+
let proc;
|
|
456
|
+
try {
|
|
457
|
+
proc = measureSyncWork("tmux.spawn", () => spawn("tmux", this.socket ? ["-L", this.socket, ...args] : args, { stdio: ["pipe", "pipe", "pipe"] }));
|
|
458
|
+
}
|
|
459
|
+
catch {
|
|
460
|
+
this.reconnectAfter = performance.now() + RECONNECT_MS;
|
|
461
|
+
this.scheduleReconnect();
|
|
462
|
+
return;
|
|
463
|
+
}
|
|
464
|
+
const owner = { proc, retired: false, released: false, ready: false,
|
|
465
|
+
attachGuard: null, decoder: new StringDecoder("utf8"), pending: "" };
|
|
466
|
+
this.attachment = owner;
|
|
467
|
+
owner.timer = setTimeout(() => this.retire(owner), 10_000);
|
|
468
|
+
owner.timer.unref?.();
|
|
469
|
+
proc.stdout?.on("data", (chunk) => this.receive(owner, chunk));
|
|
470
|
+
proc.stdout?.on("error", () => this.retire(owner));
|
|
471
|
+
// Drain stderr without retaining/logging pane or protocol content.
|
|
472
|
+
proc.stderr?.on("data", () => { });
|
|
473
|
+
proc.stdin?.on("error", () => this.retire(owner));
|
|
474
|
+
proc.once("exit", () => this.release(owner));
|
|
475
|
+
proc.once("close", () => this.release(owner));
|
|
476
|
+
proc.on("error", () => {
|
|
477
|
+
this.retire(owner);
|
|
478
|
+
if (proc.pid === undefined)
|
|
479
|
+
this.release(owner); // confirmed no-child spawn failure
|
|
312
480
|
});
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
this.
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
481
|
+
}
|
|
482
|
+
scheduleReconnect() {
|
|
483
|
+
if (this.stopped || this.attachment || this.reconnectTimer)
|
|
484
|
+
return;
|
|
485
|
+
this.reconnectTimer = setTimeout(() => {
|
|
486
|
+
this.reconnectTimer = null;
|
|
487
|
+
this.connect();
|
|
488
|
+
}, Math.max(0, Math.ceil(this.reconnectAfter - performance.now())));
|
|
489
|
+
this.reconnectTimer.unref?.();
|
|
490
|
+
}
|
|
491
|
+
release(owner) {
|
|
492
|
+
if (owner.released)
|
|
493
|
+
return;
|
|
494
|
+
owner.released = true;
|
|
495
|
+
this.retire(owner);
|
|
496
|
+
if (this.attachment !== owner)
|
|
497
|
+
return;
|
|
498
|
+
this.attachment = null;
|
|
499
|
+
this.scheduleReconnect();
|
|
500
|
+
}
|
|
501
|
+
retire(owner) {
|
|
502
|
+
if (this.attachment !== owner || owner.retired)
|
|
503
|
+
return;
|
|
504
|
+
owner.retired = true;
|
|
505
|
+
owner.ready = false;
|
|
506
|
+
clearTimeout(owner.timer);
|
|
507
|
+
owner.pending = "";
|
|
508
|
+
this.reconnectAfter = performance.now() + RECONNECT_MS;
|
|
509
|
+
this.resetPaneObservations();
|
|
510
|
+
const read = this.activeRead;
|
|
511
|
+
if (read?.owner === owner) {
|
|
512
|
+
this.activeRead = null;
|
|
513
|
+
clearTimeout(read.timer);
|
|
514
|
+
read.reject(new TmuxReadError("transport", "tmux control transport unavailable"));
|
|
515
|
+
}
|
|
516
|
+
// killed/kill success is NOT exit proof; keep attachment until release().
|
|
517
|
+
if (!owner.released) {
|
|
518
|
+
try {
|
|
519
|
+
owner.proc.kill();
|
|
520
|
+
}
|
|
521
|
+
catch { /* no exit proof: retain physical reservation */ }
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
receive(owner, chunk) {
|
|
525
|
+
if (this.attachment !== owner || owner.retired)
|
|
526
|
+
return;
|
|
527
|
+
const bytes = typeof chunk === "string" ? Buffer.from(chunk) : chunk;
|
|
528
|
+
for (let offset = 0; offset < bytes.length; offset += 16 * 1024) {
|
|
529
|
+
owner.pending += owner.decoder.write(bytes.subarray(offset, offset + 16 * 1024));
|
|
530
|
+
let end;
|
|
531
|
+
while ((end = owner.pending.indexOf("\n")) !== -1) {
|
|
532
|
+
const line = owner.pending.slice(0, end);
|
|
533
|
+
owner.pending = owner.pending.slice(end + 1);
|
|
534
|
+
if (Buffer.byteLength(line) > TMUX_READ_MAX_BYTES + FRAME_OVERHEAD_BYTES) {
|
|
535
|
+
this.retire(owner);
|
|
536
|
+
return;
|
|
537
|
+
}
|
|
538
|
+
this.parseLine(line, owner);
|
|
539
|
+
if (this.attachment !== owner || owner.retired)
|
|
540
|
+
return;
|
|
541
|
+
}
|
|
542
|
+
if (Buffer.byteLength(owner.pending) > TMUX_READ_MAX_BYTES + FRAME_OVERHEAD_BYTES) {
|
|
543
|
+
this.retire(owner);
|
|
544
|
+
return;
|
|
545
|
+
}
|
|
546
|
+
}
|
|
547
|
+
}
|
|
548
|
+
executeRead(args, deadline) {
|
|
549
|
+
const owner = this.attachment;
|
|
550
|
+
if (!owner?.ready || owner.retired || this.activeRead) {
|
|
551
|
+
return Promise.reject(new TmuxReadError("transport", "tmux control unavailable"));
|
|
552
|
+
}
|
|
553
|
+
return new Promise((resolve, reject) => {
|
|
554
|
+
const read = { owner, nonce: `agend-read-${randomUUID()}`, guard: null,
|
|
555
|
+
lines: [], bytes: 0, deadline, resolve, reject,
|
|
556
|
+
timer: setTimeout(() => this.retire(owner), Math.max(1, Math.ceil(deadline - performance.now()))) };
|
|
557
|
+
this.activeRead = read;
|
|
558
|
+
try {
|
|
559
|
+
const command = args.map(tmuxCommandToken).join(" ");
|
|
560
|
+
const payload = `${command}\ndisplay-message -p ${tmuxCommandToken(read.nonce)}\n`;
|
|
561
|
+
if (performance.now() >= deadline) {
|
|
562
|
+
this.retire(owner);
|
|
563
|
+
return;
|
|
564
|
+
}
|
|
565
|
+
owner.proc.stdin.write(payload, error => {
|
|
566
|
+
if (error)
|
|
567
|
+
this.retire(owner);
|
|
568
|
+
});
|
|
569
|
+
}
|
|
570
|
+
catch {
|
|
571
|
+
this.retire(owner);
|
|
320
572
|
}
|
|
321
573
|
});
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
574
|
+
}
|
|
575
|
+
parseLine(line, owner = this.attachment) {
|
|
576
|
+
if (owner && (owner !== this.attachment || owner.retired))
|
|
577
|
+
return;
|
|
578
|
+
if (owner && !owner.ready) {
|
|
579
|
+
if (!owner.attachGuard) {
|
|
580
|
+
const begin = line.match(/^%begin (\d+ \d+ 0)$/);
|
|
581
|
+
if (begin)
|
|
582
|
+
owner.attachGuard = begin[1];
|
|
583
|
+
}
|
|
584
|
+
else if (line === `%end ${owner.attachGuard}`) {
|
|
585
|
+
owner.ready = true;
|
|
586
|
+
clearTimeout(owner.timer);
|
|
587
|
+
this.reads.wake();
|
|
588
|
+
for (const window of this.registeredWindows)
|
|
589
|
+
void this.resolvePane(window);
|
|
590
|
+
}
|
|
591
|
+
else if (line === `%error ${owner.attachGuard}`)
|
|
592
|
+
this.retire(owner);
|
|
593
|
+
if (line.startsWith("%exit"))
|
|
594
|
+
this.retire(owner);
|
|
595
|
+
return;
|
|
329
596
|
}
|
|
330
|
-
|
|
597
|
+
const read = this.activeRead;
|
|
598
|
+
if (read && read.owner === owner) {
|
|
599
|
+
if (!read.guard) {
|
|
600
|
+
const begin = line.match(/^%begin (\d+ \d+ 1)$/);
|
|
601
|
+
if (begin) {
|
|
602
|
+
read.guard = begin[1];
|
|
603
|
+
return;
|
|
604
|
+
}
|
|
605
|
+
}
|
|
606
|
+
else {
|
|
607
|
+
// Payload may contain %output or even a matching %end. Only the fresh
|
|
608
|
+
// nonce's complete frame proves where the read really ended.
|
|
609
|
+
read.lines.push(line);
|
|
610
|
+
read.bytes += Buffer.byteLength(line) + 1;
|
|
611
|
+
if (read.bytes > TMUX_READ_MAX_BYTES + FRAME_OVERHEAD_BYTES) {
|
|
612
|
+
this.retire(read.owner);
|
|
613
|
+
return;
|
|
614
|
+
}
|
|
615
|
+
const length = read.lines.length;
|
|
616
|
+
const trailer = read.lines[length - 3]?.match(/^%begin (\d+ \d+ 1)$/);
|
|
617
|
+
if (trailer && read.lines[length - 2] === read.nonce && line === `%end ${trailer[1]}`) {
|
|
618
|
+
if (performance.now() >= read.deadline) {
|
|
619
|
+
this.retire(read.owner);
|
|
620
|
+
return;
|
|
621
|
+
}
|
|
622
|
+
let footer = length - 4;
|
|
623
|
+
while (footer >= 0 && read.lines[footer] !== `%end ${read.guard}` && read.lines[footer] !== `%error ${read.guard}`)
|
|
624
|
+
footer--;
|
|
625
|
+
if (footer < 0) {
|
|
626
|
+
this.retire(read.owner);
|
|
627
|
+
return;
|
|
628
|
+
}
|
|
629
|
+
const data = read.lines.slice(0, footer);
|
|
630
|
+
const output = data.length ? data.join("\n") + "\n" : "";
|
|
631
|
+
if (Buffer.byteLength(output) > TMUX_READ_MAX_BYTES) {
|
|
632
|
+
this.retire(read.owner);
|
|
633
|
+
return;
|
|
634
|
+
}
|
|
635
|
+
this.activeRead = null;
|
|
636
|
+
clearTimeout(read.timer);
|
|
637
|
+
// Notifications between the real footer and trailer remain visible;
|
|
638
|
+
// capture body lines never become activity evidence.
|
|
639
|
+
for (const notification of read.lines.slice(footer + 1, length - 3))
|
|
640
|
+
this.observeOutput(notification);
|
|
641
|
+
if (read.lines[footer].startsWith("%error"))
|
|
642
|
+
read.reject(new TmuxReadError("command", "tmux control read failed"));
|
|
643
|
+
else
|
|
644
|
+
read.resolve(output);
|
|
645
|
+
}
|
|
646
|
+
return;
|
|
647
|
+
}
|
|
648
|
+
}
|
|
649
|
+
if (line.startsWith("%exit") && owner) {
|
|
650
|
+
this.retire(owner);
|
|
651
|
+
return;
|
|
652
|
+
}
|
|
653
|
+
this.observeOutput(line);
|
|
331
654
|
}
|
|
332
|
-
|
|
655
|
+
observeOutput(line) {
|
|
333
656
|
if (line.startsWith("%output ")) {
|
|
334
657
|
const match = line.match(/^%output (%\d+) /);
|
|
335
658
|
if (match) {
|
|
@@ -346,13 +669,8 @@ export class TmuxControlClient extends EventEmitter {
|
|
|
346
669
|
}
|
|
347
670
|
}
|
|
348
671
|
cleanup() {
|
|
349
|
-
this.
|
|
350
|
-
|
|
351
|
-
if (this.proc && !this.proc.killed) {
|
|
352
|
-
this.proc.stdin?.write("detach\n");
|
|
353
|
-
this.proc.kill();
|
|
354
|
-
}
|
|
355
|
-
this.proc = null;
|
|
672
|
+
if (this.attachment)
|
|
673
|
+
this.retire(this.attachment);
|
|
356
674
|
}
|
|
357
675
|
}
|
|
358
676
|
//# sourceMappingURL=tmux-control.js.map
|
package/dist/tmux-control.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tmux-control.js","sourceRoot":"","sources":["../src/tmux-control.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tmux-control.js","sourceRoot":"","sources":["../src/tmux-control.ts"],"names":[],"mappings":"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"}
|