@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
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
import { execFile } from "node:child_process";
|
|
2
|
+
import { measureSyncWork } from "./sync-work-attribution.js";
|
|
3
|
+
export const TMUX_READ_MAX_BYTES = 1024 * 1024;
|
|
4
|
+
export const TMUX_READ_QUEUE_LIMIT = 256;
|
|
5
|
+
export const TMUX_CONTROL_ATTEMPT_MS = 2_000;
|
|
6
|
+
export const TMUX_FALLBACK_CHILDREN = 2;
|
|
7
|
+
export class TmuxReadError extends Error {
|
|
8
|
+
kind;
|
|
9
|
+
code;
|
|
10
|
+
constructor(kind, message, cause) {
|
|
11
|
+
super(message, { cause });
|
|
12
|
+
this.kind = kind;
|
|
13
|
+
const code = cause?.code;
|
|
14
|
+
if (typeof code === "string" || typeof code === "number")
|
|
15
|
+
this.code = code;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
/** Only an ordinary nonzero exit is a semantic tmux command failure. */
|
|
19
|
+
function fallbackReadError(error) {
|
|
20
|
+
const detail = error;
|
|
21
|
+
const kind = detail?.code === "ERR_CHILD_PROCESS_STDIO_MAXBUFFER" ? "limit"
|
|
22
|
+
: detail?.killed ? "timeout"
|
|
23
|
+
: typeof detail?.code === "number" && detail.code !== 0 && !detail.signal ? "command" : "transport";
|
|
24
|
+
return new TmuxReadError(kind, "tmux fallback read failed", error);
|
|
25
|
+
}
|
|
26
|
+
export function tmuxReadArgs(query) {
|
|
27
|
+
const target = "window" in query ? `${query.session}:${query.window}` : query.session;
|
|
28
|
+
if (/[\x00-\x1f\x7f]/u.test(target))
|
|
29
|
+
throw new TmuxReadError("command", "Invalid tmux read target");
|
|
30
|
+
switch (query.kind) {
|
|
31
|
+
case "windows": return ["list-windows", "-t", target, "-F", "#{window_id}|||#{window_name}"];
|
|
32
|
+
case "pane": return ["list-panes", "-t", target, "-F", {
|
|
33
|
+
id: "#{pane_id}", status: "#{pane_dead} #{pane_dead_status}", pid: "#{pane_pid}",
|
|
34
|
+
}[query.field]];
|
|
35
|
+
case "tty": return ["display-message", "-p", "-t", target, "#{pane_tty}"];
|
|
36
|
+
case "capture": {
|
|
37
|
+
const args = ["capture-pane", "-t", target, "-p"];
|
|
38
|
+
if (query.joined)
|
|
39
|
+
args.push("-J");
|
|
40
|
+
if (query.history !== undefined) {
|
|
41
|
+
if (!Number.isSafeInteger(query.history))
|
|
42
|
+
throw new TmuxReadError("command", "Invalid tmux history size");
|
|
43
|
+
args.push("-S", `-${query.history}`);
|
|
44
|
+
}
|
|
45
|
+
return args;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/** tmux's command lexer, not a shell: quoted parts concatenate into one token. */
|
|
50
|
+
export function tmuxCommandToken(value) {
|
|
51
|
+
if (/[\x00-\x1f\x7f]/u.test(value))
|
|
52
|
+
throw new TmuxReadError("command", "Invalid tmux command token");
|
|
53
|
+
return `'${value.replace(/'/g, "'\\''")}'`;
|
|
54
|
+
}
|
|
55
|
+
function killReadChild(child) {
|
|
56
|
+
try {
|
|
57
|
+
child?.kill();
|
|
58
|
+
}
|
|
59
|
+
catch { /* physical ownership still waits for exit */ }
|
|
60
|
+
}
|
|
61
|
+
/** One logical FIFO shared by control and fallback; physical children can outlive a job. */
|
|
62
|
+
export class TmuxReadLane {
|
|
63
|
+
socket;
|
|
64
|
+
control;
|
|
65
|
+
jobs = [];
|
|
66
|
+
active = null;
|
|
67
|
+
physical = new Set();
|
|
68
|
+
stopped = false;
|
|
69
|
+
lifetime = 0;
|
|
70
|
+
constructor(socket, control) {
|
|
71
|
+
this.socket = socket;
|
|
72
|
+
this.control = control;
|
|
73
|
+
}
|
|
74
|
+
start() { this.stopped = false; }
|
|
75
|
+
wake() { this.pump(); }
|
|
76
|
+
stop() {
|
|
77
|
+
this.stopped = true;
|
|
78
|
+
this.lifetime++;
|
|
79
|
+
for (const job of [this.active, ...this.jobs]) {
|
|
80
|
+
if (job)
|
|
81
|
+
this.finish(job, new TmuxReadError("stopped", "tmux read client stopped"));
|
|
82
|
+
}
|
|
83
|
+
for (const job of this.physical)
|
|
84
|
+
killReadChild(job.child);
|
|
85
|
+
}
|
|
86
|
+
read(args, timeoutMs) {
|
|
87
|
+
if (this.stopped)
|
|
88
|
+
return Promise.reject(new TmuxReadError("stopped", "tmux read client stopped"));
|
|
89
|
+
if (!Number.isFinite(timeoutMs) || timeoutMs <= 0)
|
|
90
|
+
return Promise.reject(new TmuxReadError("timeout", "tmux read deadline expired"));
|
|
91
|
+
if (this.jobs.length + Number(this.active !== null) >= TMUX_READ_QUEUE_LIMIT) {
|
|
92
|
+
return Promise.reject(new TmuxReadError("limit", "tmux read queue full"));
|
|
93
|
+
}
|
|
94
|
+
return new Promise((resolve, reject) => {
|
|
95
|
+
const job = {
|
|
96
|
+
args, deadline: performance.now() + timeoutMs, lifetime: this.lifetime, resolve, reject, done: false,
|
|
97
|
+
};
|
|
98
|
+
job.timer = setTimeout(() => {
|
|
99
|
+
if (this.active === job && !job.child)
|
|
100
|
+
this.control.retire();
|
|
101
|
+
killReadChild(job.child);
|
|
102
|
+
this.finish(job, new TmuxReadError("timeout", "tmux read deadline expired"));
|
|
103
|
+
}, Math.max(1, Math.floor(timeoutMs)));
|
|
104
|
+
this.jobs.push(job);
|
|
105
|
+
this.pump();
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
current(job) {
|
|
109
|
+
return !job.done && !this.stopped && job.lifetime === this.lifetime && performance.now() < job.deadline;
|
|
110
|
+
}
|
|
111
|
+
finish(job, error, output = "") {
|
|
112
|
+
if (job.done)
|
|
113
|
+
return;
|
|
114
|
+
job.done = true;
|
|
115
|
+
clearTimeout(job.timer);
|
|
116
|
+
this.jobs = this.jobs.filter(item => item !== job);
|
|
117
|
+
if (this.active === job)
|
|
118
|
+
this.active = null;
|
|
119
|
+
if (error)
|
|
120
|
+
job.reject(error);
|
|
121
|
+
else
|
|
122
|
+
job.resolve(output);
|
|
123
|
+
this.pump();
|
|
124
|
+
}
|
|
125
|
+
pump() {
|
|
126
|
+
if (this.stopped || this.active)
|
|
127
|
+
return;
|
|
128
|
+
const job = this.jobs[0];
|
|
129
|
+
if (!job)
|
|
130
|
+
return;
|
|
131
|
+
if (!this.current(job)) {
|
|
132
|
+
this.finish(job, new TmuxReadError("timeout", "tmux read deadline expired"));
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
if (!this.control.ready() && this.physical.size >= TMUX_FALLBACK_CHILDREN)
|
|
136
|
+
return;
|
|
137
|
+
this.jobs.shift();
|
|
138
|
+
this.active = job;
|
|
139
|
+
void this.run(job);
|
|
140
|
+
}
|
|
141
|
+
async run(job) {
|
|
142
|
+
if (this.control.ready()) {
|
|
143
|
+
try {
|
|
144
|
+
const remaining = job.deadline - performance.now();
|
|
145
|
+
const attempt = performance.now() + Math.min(TMUX_CONTROL_ATTEMPT_MS, remaining / 2);
|
|
146
|
+
const result = await this.control.execute(job.args, attempt);
|
|
147
|
+
if (!this.current(job))
|
|
148
|
+
throw new TmuxReadError("timeout", "tmux read deadline expired");
|
|
149
|
+
this.finish(job, undefined, result);
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
if (job.done)
|
|
154
|
+
return;
|
|
155
|
+
if (!(error instanceof TmuxReadError) || error.kind !== "transport") {
|
|
156
|
+
this.finish(job, error);
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
if (!this.current(job)) {
|
|
162
|
+
this.finish(job, new TmuxReadError("timeout", "tmux read deadline expired"));
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
// A timed-out fallback child keeps its physical slot until actual exit.
|
|
166
|
+
if (this.physical.size >= TMUX_FALLBACK_CHILDREN) {
|
|
167
|
+
this.active = null;
|
|
168
|
+
this.jobs.unshift(job);
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
this.physical.add(job);
|
|
172
|
+
const release = () => { if (this.physical.delete(job))
|
|
173
|
+
this.pump(); };
|
|
174
|
+
let spawnReturned = false;
|
|
175
|
+
let callbackError;
|
|
176
|
+
try {
|
|
177
|
+
const args = this.socket ? ["-L", this.socket, ...job.args] : job.args;
|
|
178
|
+
const child = measureSyncWork("tmux.spawn", () => execFile("tmux", args, {
|
|
179
|
+
timeout: Math.max(1, Math.floor(job.deadline - performance.now())), maxBuffer: TMUX_READ_MAX_BYTES,
|
|
180
|
+
}, (error, stdout) => {
|
|
181
|
+
// Node can invoke this callback on error before a live child exits
|
|
182
|
+
// (e.g. kill EPERM). It settles the read, not physical ownership.
|
|
183
|
+
callbackError = error;
|
|
184
|
+
if (spawnReturned && error && job.child?.pid === undefined)
|
|
185
|
+
release();
|
|
186
|
+
if (job.done)
|
|
187
|
+
return;
|
|
188
|
+
if (!this.current(job))
|
|
189
|
+
this.finish(job, new TmuxReadError("timeout", "tmux read deadline expired"));
|
|
190
|
+
else
|
|
191
|
+
this.finish(job, error ? fallbackReadError(error) : undefined, String(stdout));
|
|
192
|
+
}));
|
|
193
|
+
job.child = child;
|
|
194
|
+
spawnReturned = true;
|
|
195
|
+
child?.once("exit", release);
|
|
196
|
+
child?.once("close", release);
|
|
197
|
+
child?.once("error", () => { if (child.pid === undefined)
|
|
198
|
+
release(); });
|
|
199
|
+
// Native execFile always returns a ChildProcess. The no-child branch
|
|
200
|
+
// also permits inert test doubles; a failed spawn has no process to own.
|
|
201
|
+
if (!child || (callbackError && child.pid === undefined))
|
|
202
|
+
release();
|
|
203
|
+
if (job.done && this.physical.has(job))
|
|
204
|
+
killReadChild(child);
|
|
205
|
+
}
|
|
206
|
+
catch (error) {
|
|
207
|
+
if (!spawnReturned || job.child?.pid === undefined)
|
|
208
|
+
release();
|
|
209
|
+
this.finish(job, fallbackReadError(error));
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
//# sourceMappingURL=tmux-read.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tmux-read.js","sourceRoot":"","sources":["../src/tmux-read.ts"],"names":[],"mappings":"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"}
|
package/dist/topic-commands.d.ts
CHANGED
|
@@ -7,6 +7,8 @@ export { parseContextPercent, parseTokenContextRatio } from "./context-percent.j
|
|
|
7
7
|
export type { TokenContextRatio } from "./context-percent.js";
|
|
8
8
|
type ExecutionFleetContext = FleetContext & {
|
|
9
9
|
getInstanceExecutionState?(instanceName: string): "idle" | "working" | "stuck" | null;
|
|
10
|
+
/** The running launch's own steer capability (CliBackend.supportsSteer, #1405); undefined when it has none to give. */
|
|
11
|
+
instanceLaunchSupportsSteer?(instanceName: string): boolean | undefined;
|
|
10
12
|
};
|
|
11
13
|
/** Sanitize a directory name into a valid instance name. Keeps Unicode letters (incl. CJK). */
|
|
12
14
|
export declare function sanitizeInstanceName(name: string): string;
|
|
@@ -174,6 +176,18 @@ export declare class TopicCommands {
|
|
|
174
176
|
private ctx;
|
|
175
177
|
constructor(ctx: ExecutionFleetContext);
|
|
176
178
|
/** Get the adapter that should reply to a given inbound message */
|
|
179
|
+
/**
|
|
180
|
+
* #754: who may run a typed Telegram command is decided by the command table — the same rule a Discord slash
|
|
181
|
+
* command goes through (`decideCommand`), here with its Telegram column — before any handler runs. `msg.adapterId`
|
|
182
|
+
* is the topic's owning adapter (ownedCopy), so the admin it asks about is that bot's. A command the table does not
|
|
183
|
+
* know (`/raw`) or does not handle here (a passthrough cell) is left to the handlers below. `command` is what the
|
|
184
|
+
* dispatcher recognized (GENERAL_FORMS / INSTANCE_FORMS), so the table judges exactly what would run.
|
|
185
|
+
*
|
|
186
|
+
* Synchronous on purpose (#1399 review): the decision, the handler's own checks and the command's effect run in one
|
|
187
|
+
* stretch, so the instance cannot be rebound to another bot between the check and the act. The refusal, if any.
|
|
188
|
+
*/
|
|
189
|
+
private tableRefusal;
|
|
190
|
+
private sendRefusal;
|
|
177
191
|
private getReplyAdapter;
|
|
178
192
|
/**
|
|
179
193
|
* #1346: keep only the owning adapter's copy. When several bots share a
|
|
@@ -189,17 +203,13 @@ export declare class TopicCommands {
|
|
|
189
203
|
/** Parse and dispatch commands from the General topic */
|
|
190
204
|
handleGeneralCommand(msg: InboundMessage, instanceName?: string): Promise<boolean>;
|
|
191
205
|
/**
|
|
192
|
-
*
|
|
193
|
-
*
|
|
194
|
-
* Telegram HTML spoiler (`<tg-spoiler>`) so the token isn't shown in the clear
|
|
195
|
-
* in a shared topic (the caller must send with format: "html"). /view is
|
|
196
|
-
* public, so it's never spoilered. DC uses the plain form (ephemeral reply).
|
|
206
|
+
* Pure, secret-free dashboard/menu copy. Issuance belongs to the private
|
|
207
|
+
* delivery action; rendering or previewing this text cannot retire a code.
|
|
197
208
|
*/
|
|
198
|
-
getDashboardText(
|
|
209
|
+
getDashboardText(_htmlSpoiler?: boolean, showRemoteHint?: boolean): string;
|
|
199
210
|
/**
|
|
200
|
-
* /dashboard (TG): admin-only
|
|
201
|
-
*
|
|
202
|
-
* the clear (the adapter supports plain/HTML, not MarkdownV2's `||…||`).
|
|
211
|
+
* /dashboard (TG): admin-only menu in General; codes are sent privately.
|
|
212
|
+
* `/dashboard revoke` also closes the public link and signs browsers out.
|
|
203
213
|
*/
|
|
204
214
|
private handleDashboardCommand;
|
|
205
215
|
/** Handle /ctx or /compact in any instance topic — returns true if handled */
|
|
@@ -249,7 +259,8 @@ export declare class TopicCommands {
|
|
|
249
259
|
* Backends whose TUI accepts a busy-pane paste as steering input,
|
|
250
260
|
* live-verified: claude-code and codex buffer-then-submit at the turn
|
|
251
261
|
* boundary, grok accepts it in its input line. kiro's legacy TUI swallows
|
|
252
|
-
* the paste outright
|
|
262
|
+
* the paste outright; its TUI front-ends steer, so kiro answers per launch
|
|
263
|
+
* (#1405). opencode/antigravity are unverified — for those
|
|
253
264
|
* the user gets an honest "not supported" instead of a silent queue
|
|
254
265
|
* fallback that looks like a steer but behaves like a normal message.
|
|
255
266
|
*/
|