@songsid/agend 2.3.0-beta.2 → 2.3.0-beta.21
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 +7 -1
- package/README.zh-TW.md +7 -1
- package/dist/agent-cli-instructions.md +9 -2
- package/dist/agent-cli.js +63 -2
- package/dist/agent-cli.js.map +1 -1
- package/dist/agent-endpoint.js +4 -0
- package/dist/agent-endpoint.js.map +1 -1
- package/dist/agent-file-read.d.ts +4 -1
- package/dist/agent-file-read.js +189 -16
- package/dist/agent-file-read.js.map +1 -1
- package/dist/agent-whats-new.d.ts +11 -0
- package/dist/agent-whats-new.js +29 -5
- package/dist/agent-whats-new.js.map +1 -1
- package/dist/auth-api.d.ts +30 -1
- package/dist/auth-api.js +45 -13
- package/dist/auth-api.js.map +1 -1
- package/dist/authority/authority-state.d.ts +38 -0
- package/dist/authority/authority-state.js +114 -0
- package/dist/authority/authority-state.js.map +1 -0
- package/dist/authority/session-authorizations.d.ts +43 -0
- package/dist/authority/session-authorizations.js +102 -0
- package/dist/authority/session-authorizations.js.map +1 -0
- package/dist/authority/web-authority.d.ts +120 -0
- package/dist/authority/web-authority.js +157 -0
- package/dist/authority/web-authority.js.map +1 -0
- package/dist/backend/claude-code.d.ts +2 -2
- package/dist/backend/claude-code.js +18 -8
- package/dist/backend/claude-code.js.map +1 -1
- package/dist/backend/codex-metadata.d.ts +8 -0
- package/dist/backend/codex-metadata.js +74 -17
- package/dist/backend/codex-metadata.js.map +1 -1
- package/dist/backend/codex.js +15 -2
- package/dist/backend/codex.js.map +1 -1
- package/dist/backend/credential-profile.d.ts +2 -0
- package/dist/backend/credential-profile.js +2 -0
- package/dist/backend/credential-profile.js.map +1 -1
- package/dist/backend/types.d.ts +6 -0
- package/dist/backend/types.js +15 -0
- package/dist/backend/types.js.map +1 -1
- package/dist/backend-availability.d.ts +120 -0
- package/dist/backend-availability.js +396 -0
- package/dist/backend-availability.js.map +1 -0
- package/dist/backend-command.d.ts +23 -3
- package/dist/backend-command.js +25 -4
- package/dist/backend-command.js.map +1 -1
- package/dist/bug-report-cli.d.ts +30 -0
- package/dist/bug-report-cli.js +138 -0
- package/dist/bug-report-cli.js.map +1 -0
- package/dist/bug-report.d.ts +47 -0
- package/dist/bug-report.js +136 -0
- package/dist/bug-report.js.map +1 -0
- package/dist/bundled-skills.d.ts +14 -0
- package/dist/bundled-skills.js +29 -0
- package/dist/bundled-skills.js.map +1 -0
- package/dist/cache-ledger.d.ts +16 -3
- package/dist/cache-ledger.js +33 -13
- package/dist/cache-ledger.js.map +1 -1
- package/dist/cache-service.d.ts +55 -3
- package/dist/cache-service.js +152 -16
- package/dist/cache-service.js.map +1 -1
- package/dist/channel/adapters/discord-client-retirement.d.ts +5 -0
- package/dist/channel/adapters/discord-client-retirement.js +57 -0
- package/dist/channel/adapters/discord-client-retirement.js.map +1 -0
- package/dist/channel/adapters/discord.d.ts +9 -0
- package/dist/channel/adapters/discord.js +49 -4
- package/dist/channel/adapters/discord.js.map +1 -1
- package/dist/channel/mcp-tools.js +22 -11
- package/dist/channel/mcp-tools.js.map +1 -1
- package/dist/channel/types.d.ts +6 -0
- package/dist/classic-channel-manager.d.ts +10 -5
- package/dist/classic-channel-manager.js +12 -9
- package/dist/classic-channel-manager.js.map +1 -1
- package/dist/cli.js +224 -111
- package/dist/cli.js.map +1 -1
- package/dist/config-validator.d.ts +6 -0
- package/dist/config-validator.js +129 -3
- package/dist/config-validator.js.map +1 -1
- package/dist/config.d.ts +13 -1
- package/dist/config.js +14 -5
- package/dist/config.js.map +1 -1
- package/dist/cross-instance-notice.d.ts +7 -0
- package/dist/cross-instance-notice.js +10 -0
- package/dist/cross-instance-notice.js.map +1 -1
- package/dist/daemon.d.ts +24 -1
- package/dist/daemon.js +151 -19
- package/dist/daemon.js.map +1 -1
- package/dist/decision-list.d.ts +25 -0
- package/dist/decision-list.js +30 -0
- package/dist/decision-list.js.map +1 -0
- package/dist/delivery-outbox.d.ts +10 -0
- package/dist/delivery-outbox.js +17 -1
- package/dist/delivery-outbox.js.map +1 -1
- package/dist/diagnostic-redaction.d.ts +10 -0
- package/dist/diagnostic-redaction.js +167 -0
- package/dist/diagnostic-redaction.js.map +1 -0
- package/dist/fleet-context.d.ts +10 -0
- package/dist/fleet-manager.d.ts +505 -15
- package/dist/fleet-manager.js +1870 -204
- package/dist/fleet-manager.js.map +1 -1
- package/dist/fleet-process-handlers.d.ts +18 -0
- package/dist/fleet-process-handlers.js +69 -0
- package/dist/fleet-process-handlers.js.map +1 -0
- package/dist/fleet-traffic.d.ts +74 -0
- package/dist/fleet-traffic.js +196 -0
- package/dist/fleet-traffic.js.map +1 -0
- package/dist/general-knowledge/skills/bug-report/SKILL.md +31 -0
- package/dist/general-knowledge/skills/credential-profiles/SKILL.md +17 -6
- package/dist/general-knowledge/skills/cross-instance-messaging/SKILL.md +6 -1
- package/dist/general-knowledge/skills/fleet-config/SKILL.md +2 -0
- package/dist/general-knowledge/skills/multi-channel/SKILL.md +3 -2
- package/dist/general-knowledge/skills/persona-emoji/SKILL.md +1 -1
- package/dist/general-knowledge/skills/scheduling/SKILL.md +4 -0
- package/dist/general-knowledge/skills/web-appearance/SKILL.md +190 -47
- package/dist/general-knowledge/skills/web-dashboard/SKILL.md +545 -0
- package/dist/general-knowledge/skills/worker-collaboration/SKILL.md +1 -1
- package/dist/human-delivery-receipts.d.ts +24 -1
- package/dist/human-delivery-receipts.js +64 -11
- package/dist/human-delivery-receipts.js.map +1 -1
- package/dist/instance-config-impact.js +7 -1
- package/dist/instance-config-impact.js.map +1 -1
- package/dist/instance-lifecycle.d.ts +10 -1
- package/dist/instance-lifecycle.js +79 -18
- package/dist/instance-lifecycle.js.map +1 -1
- package/dist/instance-names.d.ts +4 -0
- package/dist/instance-names.js +12 -0
- package/dist/instance-names.js.map +1 -0
- package/dist/instructions.d.ts +12 -1
- package/dist/instructions.js +13 -2
- package/dist/instructions.js.map +1 -1
- package/dist/locale.js +173 -12
- package/dist/locale.js.map +1 -1
- package/dist/log-steps.d.ts +1 -0
- package/dist/log-steps.js +15 -0
- package/dist/log-steps.js.map +1 -1
- package/dist/login-controller.d.ts +45 -0
- package/dist/login-controller.js +101 -5
- package/dist/login-controller.js.map +1 -1
- package/dist/ls-attach-resolve.d.ts +96 -0
- package/dist/ls-attach-resolve.js +180 -0
- package/dist/ls-attach-resolve.js.map +1 -0
- package/dist/ls-rows.d.ts +12 -0
- package/dist/ls-rows.js +82 -3
- package/dist/ls-rows.js.map +1 -1
- package/dist/memory-hogs.d.ts +27 -0
- package/dist/memory-hogs.js +124 -0
- package/dist/memory-hogs.js.map +1 -0
- package/dist/needs-you.d.ts +10 -0
- package/dist/needs-you.js +2 -1
- package/dist/needs-you.js.map +1 -1
- package/dist/outbound-handlers.d.ts +11 -0
- package/dist/outbound-handlers.js +139 -11
- package/dist/outbound-handlers.js.map +1 -1
- package/dist/outbound-schemas.d.ts +200 -4
- package/dist/outbound-schemas.js +124 -11
- package/dist/outbound-schemas.js.map +1 -1
- package/dist/public-web-gateway.js +17 -4
- package/dist/public-web-gateway.js.map +1 -1
- package/dist/public-web-link.d.ts +9 -0
- package/dist/public-web-link.js +8 -0
- package/dist/public-web-link.js.map +1 -1
- package/dist/quickstart-api.d.ts +19 -1
- package/dist/quickstart-api.js +94 -4
- package/dist/quickstart-api.js.map +1 -1
- package/dist/reply-buttons-controller.d.ts +4 -0
- package/dist/reply-buttons-controller.js +2 -2
- package/dist/reply-buttons-controller.js.map +1 -1
- package/dist/restart-progress.d.ts +80 -1
- package/dist/restart-progress.js +306 -21
- package/dist/restart-progress.js.map +1 -1
- package/dist/rollout-index.d.ts +5 -0
- package/dist/rollout-index.js +26 -5
- package/dist/rollout-index.js.map +1 -1
- package/dist/scheduler/db.d.ts +40 -13
- package/dist/scheduler/db.js +123 -89
- package/dist/scheduler/db.js.map +1 -1
- package/dist/scheduler/task-board-text.d.ts +26 -0
- package/dist/scheduler/task-board-text.js +135 -0
- package/dist/scheduler/task-board-text.js.map +1 -0
- package/dist/scheduler/task-board.d.ts +650 -0
- package/dist/scheduler/task-board.js +1938 -0
- package/dist/scheduler/task-board.js.map +1 -0
- package/dist/scheduler/types.d.ts +6 -1
- package/dist/search/search-docs.d.ts +58 -0
- package/dist/search/search-docs.js +63 -0
- package/dist/search/search-docs.js.map +1 -0
- package/dist/search/search-index.d.ts +141 -0
- package/dist/search/search-index.js +440 -0
- package/dist/search/search-index.js.map +1 -0
- package/dist/search/search-store.d.ts +122 -0
- package/dist/search/search-store.js +236 -0
- package/dist/search/search-store.js.map +1 -0
- package/dist/search/search-worker.d.ts +1 -0
- package/dist/search/search-worker.js +163 -0
- package/dist/search/search-worker.js.map +1 -0
- package/dist/service-installer.js +12 -0
- package/dist/service-installer.js.map +1 -1
- package/dist/settings-api.d.ts +23 -0
- package/dist/settings-api.js +164 -3
- package/dist/settings-api.js.map +1 -1
- package/dist/settings-change.js +104 -0
- package/dist/settings-change.js.map +1 -1
- package/dist/settings-confirmation.d.ts +3 -1
- package/dist/settings-confirmation.js +2 -0
- package/dist/settings-confirmation.js.map +1 -1
- package/dist/settings-effect.js +34 -3
- package/dist/settings-effect.js.map +1 -1
- package/dist/settings-http-confirmation.d.ts +11 -0
- package/dist/settings-http-confirmation.js +10 -0
- package/dist/settings-http-confirmation.js.map +1 -1
- package/dist/setup-form.d.ts +1 -1
- package/dist/setup-form.js +23 -7
- package/dist/setup-form.js.map +1 -1
- package/dist/spawn-gate.d.ts +1 -0
- package/dist/spawn-gate.js +13 -3
- package/dist/spawn-gate.js.map +1 -1
- package/dist/task-board-tool.d.ts +25 -0
- package/dist/task-board-tool.js +154 -0
- package/dist/task-board-tool.js.map +1 -0
- package/dist/task-board-waker.d.ts +44 -0
- package/dist/task-board-waker.js +128 -0
- package/dist/task-board-waker.js.map +1 -0
- package/dist/tmux-exec-helper.d.ts +94 -0
- package/dist/tmux-exec-helper.js +407 -0
- package/dist/tmux-exec-helper.js.map +1 -0
- package/dist/tmux-manager.d.ts +5 -0
- package/dist/tmux-manager.js +42 -11
- package/dist/tmux-manager.js.map +1 -1
- package/dist/tool-permissions.d.ts +0 -7
- package/dist/tool-permissions.js +44 -5
- package/dist/tool-permissions.js.map +1 -1
- package/dist/topic-commands.d.ts +17 -1
- package/dist/topic-commands.js +45 -19
- package/dist/topic-commands.js.map +1 -1
- package/dist/tunnel/cloudflared.js +37 -2
- package/dist/tunnel/cloudflared.js.map +1 -1
- package/dist/tunnel/types.d.ts +3 -1
- package/dist/tunnel/types.js.map +1 -1
- package/dist/types.d.ts +63 -1
- package/dist/ui/app-effects.js +90 -32
- package/dist/ui/backend-signin.js +297 -0
- package/dist/ui/chat-ambient.js +307 -0
- package/dist/ui/chat-effect-posters.js +8 -8
- package/dist/ui/chat-effects.js +110 -15
- package/dist/ui/chat-msg-actions.js +176 -0
- package/dist/ui/chat-render.js +21 -3
- package/dist/ui/chat-store.js +64 -12
- package/dist/ui/chat-strings.js +85 -8
- package/dist/ui/chat-thread.js +204 -21
- package/dist/ui/effect-trial-controller.js +13 -8
- package/dist/ui/effect-trial-panel.js +19 -16
- package/dist/ui/effects-waker.js +70 -0
- package/dist/ui/fleet-canvas-layout.js +117 -0
- package/dist/ui/fleet-canvas.js +555 -0
- package/dist/ui/fleet-org.js +27 -12
- package/dist/ui/fleet-route-scene.js +207 -0
- package/dist/ui/fleet-route-worker.js +21 -0
- package/dist/ui/fleet-route.js +88 -0
- package/dist/ui/fleet-task-card.js +436 -0
- package/dist/ui/fleet-task-common.js +448 -0
- package/dist/ui/fleet-tasks.js +535 -0
- package/dist/ui/fleet-traffic.js +359 -0
- package/dist/ui/fleet-usage.js +435 -0
- package/dist/ui/panel-chat.js +264 -66
- package/dist/ui/panel-details.js +2 -1
- package/dist/ui/panel-fleet.js +65 -83
- package/dist/ui/panel-needs.js +4 -2
- package/dist/ui/panel-settings.js +56 -11
- package/dist/ui/preview.js +3 -2
- package/dist/ui/search-dialog.js +349 -0
- package/dist/ui/settings-appearance.js +44 -19
- package/dist/ui/settings-apply.js +3 -3
- package/dist/ui/settings-catalog.js +92 -0
- package/dist/ui/settings-confirm.js +7 -2
- package/dist/ui/settings-dialogs.js +40 -12
- package/dist/ui/settings-effects.js +4 -3
- package/dist/ui/settings-guests.js +117 -0
- package/dist/ui/settings-learn.js +25 -0
- package/dist/ui/settings-model.js +15 -6
- package/dist/ui/settings-mods.js +23 -9
- package/dist/ui/settings-owner-effects.js +15 -13
- package/dist/ui/settings-strings.js +122 -42
- package/dist/ui/settings-web-authority.js +91 -0
- package/dist/ui/shared/agend-auth.js +1 -1
- package/dist/ui/shared/app-i18n.js +11 -2
- package/dist/ui/shared/app-prefs.js +17 -4
- package/dist/ui/shared/app-route.js +19 -1
- package/dist/ui/shared/app-session.js +2 -0
- package/dist/ui/shared/app-shell.js +174 -30
- package/dist/ui/shared/app-store.js +26 -1
- package/dist/ui/shared/app-stream.js +5 -1
- package/dist/ui/shared/app-themes.js +140 -7
- package/dist/ui/shared/app.css +705 -20
- package/dist/ui/shared/app.js +26 -15
- package/dist/ui/shared/card-strings.js +8 -0
- package/dist/ui/shared/effect-app-runtime.js +68 -19
- package/dist/ui/shared/effect-chat-runtime.js +16 -3
- package/dist/ui/shared/effect-frame.js +26 -7
- package/dist/ui/shared/effect-geometry.js +24 -9
- package/dist/ui/shared/effect-owner-source.js +8 -1
- package/dist/ui/shared/effect-policy.js +21 -7
- package/dist/ui/shared/effect-profiler.js +31 -9
- package/dist/ui/shared/effect-registry.js +97 -50
- package/dist/ui/shared/effect-stock-snapshot.js +9 -0
- package/dist/ui/shared/effect-stock-trust.js +62 -10
- package/dist/ui/shared/effect-trial-shadow.js +62 -0
- package/dist/ui/shared/effect-trial-source.js +1 -1
- package/dist/ui/shared/effect-trial-stage.js +54 -31
- package/dist/ui/shared/effect-trial.css +40 -0
- package/dist/ui/shared/fx-motion.js +67 -0
- package/dist/ui/shared/identity-card.js +100 -11
- package/dist/ui/shared/identity-color.js +14 -10
- package/dist/ui/shared/instance-nav.js +179 -23
- package/dist/ui/shared/owner-css.js +30 -1
- package/dist/ui/shared/panel-view.js +24 -4
- package/dist/ui/shared/tokens.css +9 -3
- package/dist/ui/shared/ui-icons.js +2 -0
- package/dist/ui/shared/ui-menu.js +20 -7
- package/dist/ui/shared/ui-toast.js +16 -3
- package/dist/ui/shared/usage-dialog.js +34 -3
- package/dist/ui/shared/view-strings.js +72 -0
- package/dist/ui/shared/web-authorize.js +198 -0
- package/dist/ui/web-terminal/terminal.css +4 -4
- package/dist/ui/web-terminal/terminal.html +1 -1
- package/dist/update-launch.d.ts +9 -0
- package/dist/update-launch.js +38 -12
- package/dist/update-launch.js.map +1 -1
- package/dist/usage/format-rich.js +6 -3
- package/dist/usage/format-rich.js.map +1 -1
- package/dist/usage/i18n-keys.d.ts +1 -1
- package/dist/usage/i18n-keys.js +2 -1
- package/dist/usage/i18n-keys.js.map +1 -1
- package/dist/usage/i18n.d.ts +13 -1
- package/dist/usage/i18n.js +29 -0
- package/dist/usage/i18n.js.map +1 -1
- package/dist/usage/providers.d.ts +81 -2
- package/dist/usage/providers.js +240 -38
- package/dist/usage/providers.js.map +1 -1
- package/dist/usage/usage-api.d.ts +5 -1
- package/dist/usage/usage-api.js +184 -58
- package/dist/usage/usage-api.js.map +1 -1
- package/dist/usage-report.d.ts +158 -0
- package/dist/usage-report.js +226 -0
- package/dist/usage-report.js.map +1 -0
- package/dist/usage-rollup.d.ts +51 -0
- package/dist/usage-rollup.js +168 -0
- package/dist/usage-rollup.js.map +1 -0
- package/dist/user-systemd.d.ts +24 -0
- package/dist/user-systemd.js +75 -0
- package/dist/user-systemd.js.map +1 -0
- package/dist/view-api.d.ts +39 -0
- package/dist/view-api.js +69 -6
- package/dist/view-api.js.map +1 -1
- package/dist/web-ambient.d.ts +72 -0
- package/dist/web-ambient.js +161 -0
- package/dist/web-ambient.js.map +1 -0
- package/dist/web-api.d.ts +98 -14
- package/dist/web-api.js +1027 -83
- package/dist/web-api.js.map +1 -1
- package/dist/web-appearance-policy.d.ts +4 -6
- package/dist/web-appearance-policy.js +5 -12
- package/dist/web-appearance-policy.js.map +1 -1
- package/dist/web-appearance-tools.d.ts +3 -0
- package/dist/web-appearance-tools.js +22 -3
- package/dist/web-appearance-tools.js.map +1 -1
- package/dist/web-appearance-view.d.ts +27 -2
- package/dist/web-appearance-view.js +129 -14
- package/dist/web-appearance-view.js.map +1 -1
- package/dist/web-appearance.d.ts +17 -3
- package/dist/web-appearance.js +85 -8
- package/dist/web-appearance.js.map +1 -1
- package/dist/web-asset-parts.d.ts +2 -2
- package/dist/web-asset-parts.js +3 -3
- package/dist/web-asset-parts.js.map +1 -1
- package/dist/web-auth.js +3 -1
- package/dist/web-auth.js.map +1 -1
- package/dist/web-backend-login.d.ts +130 -0
- package/dist/web-backend-login.js +225 -0
- package/dist/web-backend-login.js.map +1 -0
- package/dist/web-card.d.ts +14 -0
- package/dist/web-card.js +40 -6
- package/dist/web-card.js.map +1 -1
- package/dist/web-channel-echo.d.ts +7 -1
- package/dist/web-channel-echo.js +6 -2
- package/dist/web-channel-echo.js.map +1 -1
- package/dist/web-chat-history.d.ts +83 -0
- package/dist/web-chat-history.js +137 -5
- package/dist/web-chat-history.js.map +1 -1
- package/dist/web-commands.d.ts +6 -1
- package/dist/web-commands.js +1 -1
- package/dist/web-commands.js.map +1 -1
- package/dist/web-effect-bootstrap.d.ts +12 -0
- package/dist/web-effect-bootstrap.js +49 -0
- package/dist/web-effect-bootstrap.js.map +1 -0
- package/dist/web-effect-bundle.js +46 -1
- package/dist/web-effect-bundle.js.map +1 -1
- package/dist/web-effect-playback.d.ts +30 -0
- package/dist/web-effect-playback.js +71 -0
- package/dist/web-effect-playback.js.map +1 -0
- package/dist/web-effect-profiles.d.ts +4 -4
- package/dist/web-effect-service.d.ts +11 -4
- package/dist/web-effect-service.js +25 -4
- package/dist/web-effect-service.js.map +1 -1
- package/dist/web-effect-tools.d.ts +1 -0
- package/dist/web-effect-tools.js +4 -4
- package/dist/web-effect-tools.js.map +1 -1
- package/dist/web-effect-trials.d.ts +2 -2
- package/dist/web-effect-trials.js +3 -3
- package/dist/web-effect-trials.js.map +1 -1
- package/dist/web-effect-upload.js +1 -1
- package/dist/web-effect-upload.js.map +1 -1
- package/dist/web-effect-worker.d.ts +1 -1
- package/dist/web-effect-worker.js +2 -2
- package/dist/web-effect-worker.js.map +1 -1
- package/dist/web-effect.d.ts +1 -1
- package/dist/web-guest-access.d.ts +126 -0
- package/dist/web-guest-access.js +238 -0
- package/dist/web-guest-access.js.map +1 -0
- package/dist/web-guest-rooms.d.ts +82 -0
- package/dist/web-guest-rooms.js +135 -0
- package/dist/web-guest-rooms.js.map +1 -0
- package/dist/web-host-guard.d.ts +11 -0
- package/dist/web-host-guard.js +11 -0
- package/dist/web-host-guard.js.map +1 -1
- package/dist/web-identity-color.d.ts +1 -1
- package/dist/web-identity-color.js +2 -2
- package/dist/web-identity-color.js.map +1 -1
- package/dist/web-identity-palette.d.ts +1 -1
- package/dist/web-identity-palette.js +2 -2
- package/dist/web-identity-palette.js.map +1 -1
- package/dist/web-image-meta.d.ts +13 -0
- package/dist/web-image-meta.js +62 -0
- package/dist/web-image-meta.js.map +1 -1
- package/dist/web-libavoid.d.ts +14 -0
- package/dist/web-libavoid.js +46 -0
- package/dist/web-libavoid.js.map +1 -0
- package/dist/web-login.d.ts +47 -0
- package/dist/web-login.js +115 -0
- package/dist/web-login.js.map +1 -1
- package/dist/web-mod-agent.d.ts +1 -1
- package/dist/web-mod-agent.js +7 -5
- package/dist/web-mod-agent.js.map +1 -1
- package/dist/web-mod-bundle.d.ts +9 -1
- package/dist/web-mod-bundle.js +62 -3
- package/dist/web-mod-bundle.js.map +1 -1
- package/dist/web-mod-export.d.ts +9 -0
- package/dist/web-mod-export.js +21 -0
- package/dist/web-mod-export.js.map +1 -1
- package/dist/web-mod-store.d.ts +7 -1
- package/dist/web-mod-store.js +19 -6
- package/dist/web-mod-store.js.map +1 -1
- package/dist/web-owner-css-store.d.ts +44 -1
- package/dist/web-owner-css-store.js +70 -9
- package/dist/web-owner-css-store.js.map +1 -1
- package/dist/web-prefs.d.ts +14 -0
- package/dist/web-prefs.js +37 -4
- package/dist/web-prefs.js.map +1 -1
- package/dist/web-preview.d.ts +6 -2
- package/dist/web-preview.js +4 -2
- package/dist/web-preview.js.map +1 -1
- package/dist/web-returning-device.d.ts +41 -0
- package/dist/web-returning-device.js +57 -5
- package/dist/web-returning-device.js.map +1 -1
- package/dist/web-session-authorization.d.ts +132 -0
- package/dist/web-session-authorization.js +193 -0
- package/dist/web-session-authorization.js.map +1 -0
- package/dist/web-session.d.ts +70 -10
- package/dist/web-session.js +137 -22
- package/dist/web-session.js.map +1 -1
- package/dist/web-settings-patch.d.ts +49 -2
- package/dist/web-settings-patch.js +145 -1
- package/dist/web-settings-patch.js.map +1 -1
- package/dist/web-settings-tools.d.ts +94 -0
- package/dist/web-settings-tools.js +301 -0
- package/dist/web-settings-tools.js.map +1 -0
- package/dist/web-shell-routes.d.ts +1 -1
- package/dist/web-shell-routes.js +1 -1
- package/dist/web-shell-routes.js.map +1 -1
- package/dist/web-terminal-http.js +15 -2
- package/dist/web-terminal-http.js.map +1 -1
- package/dist/web-theme-store.d.ts +39 -0
- package/dist/web-theme-store.js +122 -11
- package/dist/web-theme-store.js.map +1 -1
- package/dist/web-theme.d.ts +31 -0
- package/dist/web-theme.js +99 -2
- package/dist/web-theme.js.map +1 -1
- package/dist/web-upload.d.ts +13 -0
- package/dist/web-upload.js +39 -3
- package/dist/web-upload.js.map +1 -1
- package/dist/windows-shortcuts.d.ts +78 -0
- package/dist/windows-shortcuts.js +203 -0
- package/dist/windows-shortcuts.js.map +1 -0
- package/dist/workflow-templates/default.md +4 -1
- package/dist/yaml-shared-nodes.d.ts +25 -0
- package/dist/yaml-shared-nodes.js +185 -0
- package/dist/yaml-shared-nodes.js.map +1 -0
- package/launcher/agend-install.cjs +553 -0
- package/launcher/install-admission.cjs +4 -39
- package/launcher/postinstall.cjs +14 -12
- package/package.json +4 -2
- package/scripts/preinstall-guard.cjs +2 -5
- package/templates/windows-shortcuts.ps1 +181 -0
- package/launcher/old-updater-note.cjs +0 -48
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure resolution logic for `agend attach` — no I/O, no process.exit.
|
|
3
|
+
* Exported so tests can cover CJK display names, row numbers, ambiguity,
|
|
4
|
+
* and fuzzy suggestions without spawning a process.
|
|
5
|
+
*/
|
|
6
|
+
import { displayWidth } from "./ls-rows.js";
|
|
7
|
+
/**
|
|
8
|
+
* Resolve a query string against an ordered candidate list.
|
|
9
|
+
*
|
|
10
|
+
* Resolution order:
|
|
11
|
+
* 0. `#N` prefix → unambiguous row token: always means row N, bypasses
|
|
12
|
+
* exact-name lookup. Use this form in the picker to avoid collision
|
|
13
|
+
* between digit-string real names and row numbers.
|
|
14
|
+
* 1. Exact real name (case-insensitive) — wins over bare integer strings,
|
|
15
|
+
* so a numeric instance name like "2" resolves by name before row 2.
|
|
16
|
+
* 2. Bare integer string → 1-based global row number (no `#` prefix,
|
|
17
|
+
* and only when no exact real name matched).
|
|
18
|
+
* 3. Exact display label (case-insensitive).
|
|
19
|
+
* 4. Unique substring of display label (case-insensitive).
|
|
20
|
+
* 5. Unique prefix of real name (case-insensitive).
|
|
21
|
+
* 6. Unique substring of real name (case-insensitive).
|
|
22
|
+
* 7. Ambiguous → returns `{ kind: "ambiguous", candidates }`.
|
|
23
|
+
* 8. No match → returns `{ kind: "none", suggestions: top-5 fuzzy }`.
|
|
24
|
+
*/
|
|
25
|
+
export function resolveCandidate(query, candidates) {
|
|
26
|
+
const q = query.trim().toLowerCase();
|
|
27
|
+
// 0. Unambiguous row token: #N always means row N, regardless of real names.
|
|
28
|
+
if (q.startsWith("#")) {
|
|
29
|
+
const after = q.slice(1);
|
|
30
|
+
if (/^\d+$/.test(after)) {
|
|
31
|
+
const idx = parseInt(after, 10);
|
|
32
|
+
const found = candidates.find(c => c.idx === idx);
|
|
33
|
+
if (found)
|
|
34
|
+
return { kind: "exact", candidate: found };
|
|
35
|
+
return { kind: "none", suggestions: fuzzyTopN(after, candidates) };
|
|
36
|
+
}
|
|
37
|
+
// #<non-digit> falls through to normal resolution without the # prefix.
|
|
38
|
+
}
|
|
39
|
+
// 1. Exact real name ALWAYS wins — must come before integer check so that
|
|
40
|
+
// a numeric instance name like "2" is not consumed as a row number.
|
|
41
|
+
const exactReal = candidates.find(c => c.realName.toLowerCase() === q);
|
|
42
|
+
if (exactReal)
|
|
43
|
+
return { kind: "exact", candidate: exactReal };
|
|
44
|
+
// 2. Row number — only when query is all digits AND no exact real name matched.
|
|
45
|
+
if (/^\d+$/.test(q)) {
|
|
46
|
+
const idx = parseInt(q, 10);
|
|
47
|
+
const found = candidates.find(c => c.idx === idx);
|
|
48
|
+
if (found)
|
|
49
|
+
return { kind: "exact", candidate: found };
|
|
50
|
+
return { kind: "none", suggestions: fuzzyTopN(q, candidates) };
|
|
51
|
+
}
|
|
52
|
+
// 3. Exact display label
|
|
53
|
+
const exactDisp = candidates.filter(c => c.displayLabel.toLowerCase() === q);
|
|
54
|
+
if (exactDisp.length === 1)
|
|
55
|
+
return { kind: "exact", candidate: exactDisp[0] };
|
|
56
|
+
if (exactDisp.length > 1)
|
|
57
|
+
return { kind: "ambiguous", candidates: exactDisp, reason: "exact display name match" };
|
|
58
|
+
// 4. Unique substring of display label
|
|
59
|
+
const subDisp = candidates.filter(c => c.displayLabel.toLowerCase().includes(q));
|
|
60
|
+
if (subDisp.length === 1)
|
|
61
|
+
return { kind: "exact", candidate: subDisp[0] };
|
|
62
|
+
if (subDisp.length > 1)
|
|
63
|
+
return { kind: "ambiguous", candidates: subDisp, reason: `display name contains "${query}"` };
|
|
64
|
+
// 5. Unique prefix of real name
|
|
65
|
+
const prefixReal = candidates.filter(c => c.realName.toLowerCase().startsWith(q));
|
|
66
|
+
if (prefixReal.length === 1)
|
|
67
|
+
return { kind: "exact", candidate: prefixReal[0] };
|
|
68
|
+
if (prefixReal.length > 1)
|
|
69
|
+
return { kind: "ambiguous", candidates: prefixReal, reason: `name starts with "${query}"` };
|
|
70
|
+
// 6. Unique substring of real name
|
|
71
|
+
const subReal = candidates.filter(c => c.realName.toLowerCase().includes(q));
|
|
72
|
+
if (subReal.length === 1)
|
|
73
|
+
return { kind: "exact", candidate: subReal[0] };
|
|
74
|
+
if (subReal.length > 1)
|
|
75
|
+
return { kind: "ambiguous", candidates: subReal, reason: `name contains "${query}"` };
|
|
76
|
+
// 7. No match — fuzzy suggestions
|
|
77
|
+
return { kind: "none", suggestions: fuzzyTopN(q, candidates) };
|
|
78
|
+
}
|
|
79
|
+
/** Top-N candidates by character-bag overlap score.
|
|
80
|
+
* charOverlapScore counts characters shared between the two strings (respecting
|
|
81
|
+
* multiplicity). Unlike a greedy subsequence approach, a single leading-char
|
|
82
|
+
* typo does not drop the score to zero. */
|
|
83
|
+
function fuzzyTopN(q, candidates, n = 5) {
|
|
84
|
+
const scored = candidates.map(c => ({
|
|
85
|
+
c,
|
|
86
|
+
score: Math.max(charOverlapScore(q, c.realName.toLowerCase()), charOverlapScore(q, c.displayLabel.toLowerCase())),
|
|
87
|
+
}));
|
|
88
|
+
return scored
|
|
89
|
+
.filter(s => s.score > 0)
|
|
90
|
+
.sort((a, b) => b.score - a.score)
|
|
91
|
+
.slice(0, n)
|
|
92
|
+
.map(s => s.c);
|
|
93
|
+
}
|
|
94
|
+
/** Character-bag overlap: number of chars in `a` that also appear in `b`
|
|
95
|
+
* (counting multiplicity). Tolerant of leading-char typos. */
|
|
96
|
+
function charOverlapScore(a, b) {
|
|
97
|
+
const freq = new Map();
|
|
98
|
+
for (const c of b)
|
|
99
|
+
freq.set(c, (freq.get(c) ?? 0) + 1);
|
|
100
|
+
let score = 0;
|
|
101
|
+
for (const c of a) {
|
|
102
|
+
const n = freq.get(c) ?? 0;
|
|
103
|
+
if (n > 0) {
|
|
104
|
+
score++;
|
|
105
|
+
freq.set(c, n - 1);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return score;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Apply ls CLI filters to a row array that already carries stable globalIdx
|
|
112
|
+
* values. The global indices are NOT renumbered after filtering, so `attach N`
|
|
113
|
+
* always selects the same instance regardless of which filters ls used.
|
|
114
|
+
*/
|
|
115
|
+
export function applyLsFilters(rows, opts) {
|
|
116
|
+
let result = rows;
|
|
117
|
+
if (opts.running)
|
|
118
|
+
result = result.filter(r => r.status === "running");
|
|
119
|
+
if (opts.team) {
|
|
120
|
+
const t = opts.team.toLowerCase();
|
|
121
|
+
result = result.filter(r => r.teams.some(team => team.toLowerCase() === t));
|
|
122
|
+
}
|
|
123
|
+
if (opts.backend)
|
|
124
|
+
result = result.filter(r => r.backend === opts.backend);
|
|
125
|
+
return result;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* The display-name annotation appended to an `agend ls` row.
|
|
129
|
+
* Returns `" (label)"` when `show` is true and the label differs from the
|
|
130
|
+
* real name; otherwise returns `""`.
|
|
131
|
+
* Extracted as a pure function so the --display flag can be tested without
|
|
132
|
+
* running lsAction.
|
|
133
|
+
*/
|
|
134
|
+
export function lsDisplayAnnotation(realName, displayLabel, show) {
|
|
135
|
+
if (!show || displayLabel === realName)
|
|
136
|
+
return "";
|
|
137
|
+
return ` (${displayLabel})`;
|
|
138
|
+
}
|
|
139
|
+
/** Return the global idx to use as the picker default (first displayed row). */
|
|
140
|
+
export function pickerDefaultIdx(displayedCandidates) {
|
|
141
|
+
return displayedCandidates[0]?.idx ?? 1;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Format one line of the ambiguity candidate list.
|
|
145
|
+
* Shows: ` #) realName [status] teams` — no display label in output.
|
|
146
|
+
* `maxNameW` is the max DISPLAY width across all shown candidates;
|
|
147
|
+
* padding is display-width-aware so CJK names align correctly.
|
|
148
|
+
*/
|
|
149
|
+
export function ambiguityLine(c, maxNameW) {
|
|
150
|
+
const teams = c.teams.filter(t => t !== "(classic)").join(",") || "-";
|
|
151
|
+
const nameW = displayWidth(c.realName);
|
|
152
|
+
const pad = " ".repeat(Math.max(0, maxNameW - nameW));
|
|
153
|
+
return ` ${String(c.idx).padStart(2)}) ${c.realName}${pad} [${c.status}] ${teams}`;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Format one line of the interactive picker list.
|
|
157
|
+
* Shows: ` #) statusGlyph realName teams` — no display label in output.
|
|
158
|
+
* `maxNameW` is the max DISPLAY width across all shown candidates.
|
|
159
|
+
*/
|
|
160
|
+
export function pickerLine(c, maxNameW) {
|
|
161
|
+
const statusGlyph = c.status === "running" ? "●" : c.status === "paused" ? "○" : "✗";
|
|
162
|
+
const teams = c.teams.filter(t => t !== "(classic)").join(",") || "-";
|
|
163
|
+
const nameW = displayWidth(c.realName);
|
|
164
|
+
const pad = " ".repeat(Math.max(0, maxNameW - nameW));
|
|
165
|
+
return ` ${String(c.idx).padStart(2)}) ${statusGlyph} ${c.realName}${pad} ${teams}`;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Validate that `--names-only` (shell completion fast path) is not combined
|
|
169
|
+
* with filters. Returns an error string to print, or null if OK.
|
|
170
|
+
* Pure so the CLI dispatch path can be tested without spawning a subprocess.
|
|
171
|
+
*/
|
|
172
|
+
export function validateNamesOnlyFilters(opts) {
|
|
173
|
+
if (!opts.namesOnly)
|
|
174
|
+
return null;
|
|
175
|
+
const active = [opts.running && "--running", opts.team && "--team", opts.backend && "--backend"].filter(Boolean);
|
|
176
|
+
if (active.length === 0)
|
|
177
|
+
return null;
|
|
178
|
+
return `--names-only is for shell completion and cannot be combined with ${active.join(", ")}. Use --json to filter names programmatically.`;
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=ls-attach-resolve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ls-attach-resolve.js","sourceRoot":"","sources":["../src/ls-attach-resolve.ts"],"names":[],"mappings":"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"}
|
package/dist/ls-rows.d.ts
CHANGED
|
@@ -52,6 +52,18 @@ export declare function displayWidth(s: string): number;
|
|
|
52
52
|
export declare function truncateDisplay(s: string, maxWidth: number): string;
|
|
53
53
|
/** Max model column: fits claude-sonnet-4.6 whole, truncates the 21+ ones. */
|
|
54
54
|
export declare const MODEL_DISPLAY_WIDTH_MAX = 20;
|
|
55
|
+
/**
|
|
56
|
+
* Compute the Name column width for `agend ls`: the maximum display-width
|
|
57
|
+
* of any name plus one space, at least `minW` (default 16). Exported so
|
|
58
|
+
* tests can call the same function cli.ts uses — reverting cli.ts to
|
|
59
|
+
* `r.name.length` instead of this function will break those tests.
|
|
60
|
+
*/
|
|
61
|
+
export declare function computeLsNameWidth(names: string[], minW?: number): number;
|
|
62
|
+
/**
|
|
63
|
+
* Pad `s` to `w` display columns by appending spaces. CJK/emoji-aware.
|
|
64
|
+
* Used by the agend ls Name cell and the attach picker/ambiguity formatter.
|
|
65
|
+
*/
|
|
66
|
+
export declare function padToDisplayWidth(s: string, w: number): string;
|
|
55
67
|
/**
|
|
56
68
|
* Status icon shared by `agend ls` and /status's merged State column (#1052):
|
|
57
69
|
* one glyph per lifecycle/execution state — ⏸ paused, ✗ stopped.
|
package/dist/ls-rows.js
CHANGED
|
@@ -46,9 +46,72 @@ export function displayWidth(s) {
|
|
|
46
46
|
let w = 0;
|
|
47
47
|
for (const ch of s) {
|
|
48
48
|
const cp = ch.codePointAt(0);
|
|
49
|
-
//
|
|
50
|
-
|
|
51
|
-
|
|
49
|
+
// Combining marks (Mn, Mc, Me) contribute 0 columns.
|
|
50
|
+
if (/\p{M}/u.test(ch))
|
|
51
|
+
continue;
|
|
52
|
+
// Format characters (Cf) other than ZWJ (U+200D) contribute 0 columns.
|
|
53
|
+
if (/\p{Cf}/u.test(ch) && cp !== 0x200D)
|
|
54
|
+
continue;
|
|
55
|
+
// East-Asian Wide / Fullwidth characters take 2 terminal columns.
|
|
56
|
+
// Covers: CJK Unified Ideographs (BMP + SMP extensions), Hangul, wide
|
|
57
|
+
// punctuation, fullwidth Latin, and emoji. Latin Extended chars (é, č …)
|
|
58
|
+
// are EAW=Narrow and correctly get 1 column.
|
|
59
|
+
// Box-drawing U+2500–U+257F are 1-col despite being > U+007F; ─ and │
|
|
60
|
+
// are used in the ls table border.
|
|
61
|
+
if (cp >= 0x2500 && cp <= 0x257F) {
|
|
62
|
+
w += 1;
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
// U+200B zero-width space.
|
|
66
|
+
if (cp === 0x200B)
|
|
67
|
+
continue;
|
|
68
|
+
// U+2026 … is used in truncation and renders as 1 column.
|
|
69
|
+
if (cp === 0x2026) {
|
|
70
|
+
w += 1;
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
// Emoji and pictographs (most, not all, are 2-col).
|
|
74
|
+
if (cp >= 0x1F300 && cp <= 0x1FAFF) {
|
|
75
|
+
w += 2;
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
// SMP CJK Unified Ideographs Extension B–F (U+20000–U+2FA1F).
|
|
79
|
+
if (cp >= 0x20000 && cp <= 0x2FA1F) {
|
|
80
|
+
w += 2;
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
// BMP East-Asian Wide / Fullwidth blocks (comprehensive).
|
|
84
|
+
if ((cp >= 0x1100 && cp <= 0x115F) || // Hangul Jamo
|
|
85
|
+
(cp >= 0x2E80 && cp <= 0x2EFF) || // CJK Radicals Supplement
|
|
86
|
+
(cp >= 0x2F00 && cp <= 0x2FDF) || // Kangxi Radicals
|
|
87
|
+
(cp >= 0x2FF0 && cp <= 0x2FFF) || // Ideographic Description
|
|
88
|
+
(cp >= 0x3000 && cp <= 0x303F) || // CJK Symbols and Punctuation
|
|
89
|
+
(cp >= 0x3040 && cp <= 0x309F) || // Hiragana
|
|
90
|
+
(cp >= 0x30A0 && cp <= 0x30FF) || // Katakana
|
|
91
|
+
(cp >= 0x3100 && cp <= 0x312F) || // Bopomofo
|
|
92
|
+
(cp >= 0x3130 && cp <= 0x318F) || // Hangul Compatibility Jamo
|
|
93
|
+
(cp >= 0x3190 && cp <= 0x319F) || // Kanbun
|
|
94
|
+
(cp >= 0x31A0 && cp <= 0x31BF) || // Bopomofo Extended
|
|
95
|
+
(cp >= 0x31F0 && cp <= 0x31FF) || // Katakana Phonetic Extensions
|
|
96
|
+
(cp >= 0x3200 && cp <= 0x32FF) || // Enclosed CJK
|
|
97
|
+
(cp >= 0x3300 && cp <= 0x33FF) || // CJK Compatibility
|
|
98
|
+
(cp >= 0x3400 && cp <= 0x4DBF) || // CJK Extension A
|
|
99
|
+
(cp >= 0x4E00 && cp <= 0x9FFF) || // CJK Unified Ideographs
|
|
100
|
+
(cp >= 0xA000 && cp <= 0xA48F) || // Yi Syllables
|
|
101
|
+
(cp >= 0xA490 && cp <= 0xA4CF) || // Yi Radicals
|
|
102
|
+
(cp >= 0xA960 && cp <= 0xA97F) || // Hangul Jamo Extended-A
|
|
103
|
+
(cp >= 0xAC00 && cp <= 0xD7AF) || // Hangul Syllables
|
|
104
|
+
(cp >= 0xF900 && cp <= 0xFAFF) || // CJK Compatibility Ideographs
|
|
105
|
+
(cp >= 0xFE10 && cp <= 0xFE1F) || // Vertical Forms
|
|
106
|
+
(cp >= 0xFE30 && cp <= 0xFE4F) || // CJK Compatibility Forms
|
|
107
|
+
(cp >= 0xFE50 && cp <= 0xFE6F) || // Small Form Variants
|
|
108
|
+
(cp >= 0xFF01 && cp <= 0xFF60) || // Fullwidth Latin/punctuation
|
|
109
|
+
(cp >= 0xFFE0 && cp <= 0xFFE6) // Fullwidth signs
|
|
110
|
+
) {
|
|
111
|
+
w += 2;
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
w += 1;
|
|
52
115
|
}
|
|
53
116
|
return w;
|
|
54
117
|
}
|
|
@@ -74,6 +137,22 @@ export function truncateDisplay(s, maxWidth) {
|
|
|
74
137
|
}
|
|
75
138
|
/** Max model column: fits claude-sonnet-4.6 whole, truncates the 21+ ones. */
|
|
76
139
|
export const MODEL_DISPLAY_WIDTH_MAX = 20;
|
|
140
|
+
/**
|
|
141
|
+
* Compute the Name column width for `agend ls`: the maximum display-width
|
|
142
|
+
* of any name plus one space, at least `minW` (default 16). Exported so
|
|
143
|
+
* tests can call the same function cli.ts uses — reverting cli.ts to
|
|
144
|
+
* `r.name.length` instead of this function will break those tests.
|
|
145
|
+
*/
|
|
146
|
+
export function computeLsNameWidth(names, minW = 16) {
|
|
147
|
+
return Math.max(minW, ...names.map(n => displayWidth(n) + 1));
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Pad `s` to `w` display columns by appending spaces. CJK/emoji-aware.
|
|
151
|
+
* Used by the agend ls Name cell and the attach picker/ambiguity formatter.
|
|
152
|
+
*/
|
|
153
|
+
export function padToDisplayWidth(s, w) {
|
|
154
|
+
return s + " ".repeat(Math.max(0, w - displayWidth(s)));
|
|
155
|
+
}
|
|
77
156
|
/**
|
|
78
157
|
* Status icon shared by `agend ls` and /status's merged State column (#1052):
|
|
79
158
|
* one glyph per lifecycle/execution state — ⏸ paused, ✗ stopped.
|
package/dist/ls-rows.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ls-rows.js","sourceRoot":"","sources":["../src/ls-rows.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD;;;;;;;;;GASG;AAEH,MAAM,UAAU,eAAe,CAAC,MAAc;IAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC;IACrD,IAAI,IAAI,GAAG,MAAM;QAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC;IAC5D,IAAI,IAAI,GAAG,SAAS;QAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC;IACjE,IAAI,IAAI,GAAG,UAAU;QAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC;IACrE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC;AACjD,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,gBAAgB,CAC9B,WAAmB,EAAE,MAAqB,EAAE,MAAc,EAAE,SAAS,GAAG,IAAI;IAE5E,MAAM,IAAI,GAAG,MAAM;QACjB,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,GAAG,WAAW,IAAI,MAAM,EAAE,EAAE,IAAI,CAAC;QACxE,CAAC,CAAC,CAAC,cAAc,EAAE,IAAI,EAAE,GAAG,WAAW,IAAI,MAAM,EAAE,EAAE,IAAI,CAAC,CAAC;IAC7D,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC7C,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;YAChF,IAAI,GAAG;gBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;;gBAChB,OAAO,CAAC,MAAM,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAiCD,6EAA6E;AAC7E,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC;AAExC,+EAA+E;AAE/E,+DAA+D;AAC/D,MAAM,UAAU,YAAY,CAAC,CAAS;IACpC,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;QACnB,MAAM,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,CAAE,CAAC;QAC9B,
|
|
1
|
+
{"version":3,"file":"ls-rows.js","sourceRoot":"","sources":["../src/ls-rows.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export interface MemoryHog {
|
|
2
|
+
pid: number;
|
|
3
|
+
/** The process name (/proc/<pid>/status Name). */
|
|
4
|
+
name: string;
|
|
5
|
+
rssBytes: number;
|
|
6
|
+
/** "instance": a pane's process tree; the name is in `instance`. */
|
|
7
|
+
owner: "fleet" | "tmux" | "instance" | "other";
|
|
8
|
+
instance?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface MemoryHogDeps {
|
|
11
|
+
/** /proc (and /sys/fs/cgroup) root, for tests. */
|
|
12
|
+
procRoot?: string;
|
|
13
|
+
cgroupRoot?: string;
|
|
14
|
+
fleetPid: number;
|
|
15
|
+
tmuxServerPid: number | null;
|
|
16
|
+
/** Each pane's shell pid → its window (instance) name. */
|
|
17
|
+
panes: ReadonlyArray<{
|
|
18
|
+
pid: number;
|
|
19
|
+
window: string;
|
|
20
|
+
}>;
|
|
21
|
+
/** Window names that are fleet instances (others are reported as "other"). */
|
|
22
|
+
isInstance(window: string): boolean;
|
|
23
|
+
}
|
|
24
|
+
/** At most this many processes are looked at (a bound on the work, not a cut of the answer on a normal host). */
|
|
25
|
+
export declare const MEMORY_HOGS_SCAN_MAX = 4096;
|
|
26
|
+
/** The `limit` processes with the most RSS in the fleet's service, largest first, each with its owner. */
|
|
27
|
+
export declare function topMemoryHogs(deps: MemoryHogDeps, limit?: number): Promise<MemoryHog[]>;
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* #2015: which processes hold the most memory in the fleet's service, and whose they are. When host memory pressure
|
|
3
|
+
* rises, General is told the top few — the fleet, tmux, or an instance's CLI or a command it ran — so a person can stop
|
|
4
|
+
* a runaway before the kernel's OOM killer picks a victim (2026-10-17: one agent's 19 GB script).
|
|
5
|
+
*
|
|
6
|
+
* The processes are the fleet cgroup's (cgroup v2 `cgroup.procs`: everything the service runs), else the fleet's
|
|
7
|
+
* descendants. Each one's owner is found by walking its parents to a tmux pane's shell: the pane's window name is the
|
|
8
|
+
* instance. Every read is a small /proc file, read one at a time, never more than one at once in memory.
|
|
9
|
+
*/
|
|
10
|
+
import { readFile, readdir } from "node:fs/promises";
|
|
11
|
+
/** At most this many processes are looked at (a bound on the work, not a cut of the answer on a normal host). */
|
|
12
|
+
export const MEMORY_HOGS_SCAN_MAX = 4096;
|
|
13
|
+
async function readText(path) {
|
|
14
|
+
try {
|
|
15
|
+
return await readFile(path, "utf8");
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/** Name, VmRSS (bytes) and parent pid of one process, or null (gone, a kernel thread, unreadable). */
|
|
22
|
+
async function statusOf(procRoot, pid) {
|
|
23
|
+
const s = await readText(`${procRoot}/${pid}/status`);
|
|
24
|
+
if (!s)
|
|
25
|
+
return null;
|
|
26
|
+
const name = /^Name:\s*(.*)$/m.exec(s)?.[1]?.trim() ?? "?";
|
|
27
|
+
const rss = /^VmRSS:\s+(\d+) kB$/m.exec(s)?.[1];
|
|
28
|
+
const ppid = /^PPid:\s+(\d+)$/m.exec(s)?.[1];
|
|
29
|
+
if (!rss || !ppid)
|
|
30
|
+
return null;
|
|
31
|
+
return { name, rss: Number.parseInt(rss, 10) * 1024, ppid: Number.parseInt(ppid, 10) };
|
|
32
|
+
}
|
|
33
|
+
/** Every descendant of `roots` (the roots included), breadth first, from one pass over every process's parent. */
|
|
34
|
+
async function descendants(procRoot, roots) {
|
|
35
|
+
let entries = [];
|
|
36
|
+
try {
|
|
37
|
+
entries = await readdir(procRoot);
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return roots;
|
|
41
|
+
}
|
|
42
|
+
const children = new Map();
|
|
43
|
+
for (const e of entries.slice(0, 65536)) {
|
|
44
|
+
if (!/^\d+$/.test(e))
|
|
45
|
+
continue;
|
|
46
|
+
const st = await statusOf(procRoot, Number(e));
|
|
47
|
+
if (!st)
|
|
48
|
+
continue;
|
|
49
|
+
const list = children.get(st.ppid) ?? [];
|
|
50
|
+
list.push(Number(e));
|
|
51
|
+
children.set(st.ppid, list);
|
|
52
|
+
}
|
|
53
|
+
const out = [];
|
|
54
|
+
const queue = [...roots];
|
|
55
|
+
const seen = new Set();
|
|
56
|
+
while (queue.length && out.length < MEMORY_HOGS_SCAN_MAX) {
|
|
57
|
+
const pid = queue.shift();
|
|
58
|
+
if (seen.has(pid))
|
|
59
|
+
continue;
|
|
60
|
+
seen.add(pid);
|
|
61
|
+
out.push(pid);
|
|
62
|
+
queue.push(...(children.get(pid) ?? []));
|
|
63
|
+
}
|
|
64
|
+
return out;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* The pids the service runs: its cgroup's, else the fleet process and its descendants. The tmux server holding the
|
|
68
|
+
* instances can outlive a fleet restart in another cgroup (a fleet started again from another terminal moves to a new
|
|
69
|
+
* scope; tmux stays): when it is not among the cgroup's processes, its descendants (every pane's CLI and what it ran)
|
|
70
|
+
* are added (#2036 review).
|
|
71
|
+
*/
|
|
72
|
+
async function servicePids(deps, procRoot) {
|
|
73
|
+
// The cgroup v2 path (the "0::" line), as process-memory.ts reads it.
|
|
74
|
+
const line = (await readText(`${procRoot}/${deps.fleetPid}/cgroup`))?.split("\n").find(l => l.startsWith("0::"));
|
|
75
|
+
const cg = line ? line.slice(3).trim() : null;
|
|
76
|
+
const cgRoot = deps.cgroupRoot ?? "/sys/fs/cgroup";
|
|
77
|
+
if (cg && cg !== "/") {
|
|
78
|
+
const procs = await readText(`${cgRoot}${cg}/cgroup.procs`);
|
|
79
|
+
if (procs) {
|
|
80
|
+
const pids = procs.split("\n").map(l => Number.parseInt(l, 10)).filter(n => Number.isSafeInteger(n) && n > 0).slice(0, MEMORY_HOGS_SCAN_MAX);
|
|
81
|
+
if (!deps.tmuxServerPid || pids.includes(deps.tmuxServerPid))
|
|
82
|
+
return pids;
|
|
83
|
+
const outside = (await descendants(procRoot, [deps.tmuxServerPid])).filter(p => !pids.includes(p));
|
|
84
|
+
return [...pids, ...outside].slice(0, MEMORY_HOGS_SCAN_MAX);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
// No cgroup v2 view: the fleet's and tmux's descendants.
|
|
88
|
+
return descendants(procRoot, [deps.fleetPid, ...(deps.tmuxServerPid ? [deps.tmuxServerPid] : [])]);
|
|
89
|
+
}
|
|
90
|
+
/** The `limit` processes with the most RSS in the fleet's service, largest first, each with its owner. */
|
|
91
|
+
export async function topMemoryHogs(deps, limit = 3) {
|
|
92
|
+
const procRoot = deps.procRoot ?? "/proc";
|
|
93
|
+
const pids = await servicePids(deps, procRoot);
|
|
94
|
+
const info = new Map();
|
|
95
|
+
for (const pid of pids) {
|
|
96
|
+
const st = await statusOf(procRoot, pid);
|
|
97
|
+
if (st)
|
|
98
|
+
info.set(pid, st);
|
|
99
|
+
}
|
|
100
|
+
const paneOf = new Map(deps.panes.map(p => [p.pid, p.window]));
|
|
101
|
+
const ownerOf = async (pid) => {
|
|
102
|
+
let at = pid;
|
|
103
|
+
for (let hops = 0; hops < 64 && at > 1; hops++) {
|
|
104
|
+
const pane = paneOf.get(at);
|
|
105
|
+
if (pane !== undefined)
|
|
106
|
+
return deps.isInstance(pane) ? { owner: "instance", instance: pane } : { owner: "other" };
|
|
107
|
+
if (at === deps.tmuxServerPid)
|
|
108
|
+
return { owner: "tmux" };
|
|
109
|
+
if (at === deps.fleetPid)
|
|
110
|
+
return { owner: "fleet" };
|
|
111
|
+
const parent = info.get(at)?.ppid ?? (await statusOf(procRoot, at))?.ppid;
|
|
112
|
+
if (!parent)
|
|
113
|
+
break;
|
|
114
|
+
at = parent;
|
|
115
|
+
}
|
|
116
|
+
return { owner: "other" };
|
|
117
|
+
};
|
|
118
|
+
const top = [...info.entries()].sort((a, b) => b[1].rss - a[1].rss).slice(0, Math.max(0, limit));
|
|
119
|
+
const out = [];
|
|
120
|
+
for (const [pid, st] of top)
|
|
121
|
+
out.push({ pid, name: st.name, rssBytes: st.rss, ...(await ownerOf(pid)) });
|
|
122
|
+
return out;
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=memory-hogs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-hogs.js","sourceRoot":"","sources":["../src/memory-hogs.ts"],"names":[],"mappings":"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"}
|
package/dist/needs-you.d.ts
CHANGED
|
@@ -35,6 +35,11 @@ export interface NeedsYouItem {
|
|
|
35
35
|
};
|
|
36
36
|
/** delivery: the outbox row; Acknowledge offered. */
|
|
37
37
|
deliveryId?: string;
|
|
38
|
+
/** auth_paused (#2233): the login the dashboard can sign in for it (its backend, and its credential profile). */
|
|
39
|
+
signIn?: {
|
|
40
|
+
backend: string;
|
|
41
|
+
profile?: string;
|
|
42
|
+
};
|
|
38
43
|
}
|
|
39
44
|
export type NeedsYouReason = "hang" | "exited" | "assist" | "permission" | "dangerous_command" | "login" | "dialog" | "terminal_input" | "auth_paused" | "crashed" | "delivery_uncertain" | "delivery_failed";
|
|
40
45
|
/** A fleet prompt offered on the dashboard (hang / exit-restart / interactive-assist), as the fleet holds it. */
|
|
@@ -74,6 +79,11 @@ export interface InstanceInput {
|
|
|
74
79
|
pausedAt?: number | null;
|
|
75
80
|
/** "crashed" with the time the fleet first saw it so (§3.3). */
|
|
76
81
|
crashedAt?: number | null;
|
|
82
|
+
/** Paused for sign-in: the login the dashboard can sign in for it, or null (#2233). */
|
|
83
|
+
signIn?: {
|
|
84
|
+
backend: string;
|
|
85
|
+
profile?: string;
|
|
86
|
+
} | null;
|
|
77
87
|
}
|
|
78
88
|
export interface DeliveryInput {
|
|
79
89
|
deliveryId: string;
|
package/dist/needs-you.js
CHANGED
|
@@ -53,7 +53,8 @@ export function deriveNeedsYou(inputs) {
|
|
|
53
53
|
}
|
|
54
54
|
// §3.3 instance: paused for sign-in, or crashed.
|
|
55
55
|
if (inst.pauseReason === "auth") {
|
|
56
|
-
items.push({ id: `auth:${inst.name}:${inst.pausedAt ?? 0}`, type: "instance", instance: inst.name, reason: "auth_paused", detail: "", since: inst.pausedAt ?? 0
|
|
56
|
+
items.push({ id: `auth:${inst.name}:${inst.pausedAt ?? 0}`, type: "instance", instance: inst.name, reason: "auth_paused", detail: "", since: inst.pausedAt ?? 0,
|
|
57
|
+
...(inst.signIn ? { signIn: { backend: inst.signIn.backend, ...(inst.signIn.profile ? { profile: inst.signIn.profile } : {}) } } : {}) });
|
|
57
58
|
}
|
|
58
59
|
if (inst.crashedAt != null) {
|
|
59
60
|
items.push({ id: `crashed:${inst.name}:${inst.crashedAt}`, type: "instance", instance: inst.name, reason: "crashed", detail: "", since: inst.crashedAt });
|
package/dist/needs-you.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"needs-you.js","sourceRoot":"","sources":["../src/needs-you.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"needs-you.js","sourceRoot":"","sources":["../src/needs-you.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,7 @@ import type { z } from "zod";
|
|
|
10
10
|
import type { InteractionSnapshot } from "./backend/types.js";
|
|
11
11
|
import type { CarryResult } from "./backend/claude-carry.js";
|
|
12
12
|
import { UpdateInstanceConfigArgs } from "./outbound-schemas.js";
|
|
13
|
+
import type { CrossInstanceRecord } from "./search/search-docs.js";
|
|
13
14
|
/** Shared context available to all outbound tool handlers. */
|
|
14
15
|
export interface OutboundContext {
|
|
15
16
|
readonly dataDir: string;
|
|
@@ -86,6 +87,8 @@ export interface OutboundContext {
|
|
|
86
87
|
instanceLaunchSupportsSteer?(instanceName: string): boolean | undefined;
|
|
87
88
|
saveFleetConfig(): void;
|
|
88
89
|
queueMirrorMessage?(text: string): void;
|
|
90
|
+
/** #2293: a cross-instance message to index for the dashboard's search (sender → target; never forwards or paths). */
|
|
91
|
+
indexCrossInstance?(record: CrossInstanceRecord): void;
|
|
89
92
|
getAdapterForInstance?(name: string): ChannelAdapter | null;
|
|
90
93
|
/** #1990: a message for the group that owns `instanceName`'s topic, its place tokens rendered (links). */
|
|
91
94
|
renderPlacesFor?(instanceName: string, text: string, opts?: import("./channel/types.js").SendOpts): {
|
|
@@ -109,8 +112,16 @@ export interface OutboundContext {
|
|
|
109
112
|
getInstanceExecutionState?(name: string): "idle" | "working" | "stuck" | "paused" | null;
|
|
110
113
|
/** Subscription provider IDs used by running or paused fleet/Classic instances. */
|
|
111
114
|
getActiveUsageProviderIds?(): ReadonlySet<string>;
|
|
115
|
+
/** #2056: Settings → Web appearance for the user (web-settings-tools.ts). */
|
|
116
|
+
webSettings?: import("./web-settings-tools.js").WebSettingsTools;
|
|
112
117
|
/** #2001: the cache report as last worked out (CacheService.published) — never a transcript read. */
|
|
113
118
|
cacheReportPublished?(window: string): Promise<import("./cache-service.js").CacheReport>;
|
|
119
|
+
/** #2122: the usage report; `only`: just that instance (an ordinary caller's own row). */
|
|
120
|
+
usageReport?(params: {
|
|
121
|
+
range: import("./usage-report.js").UsageRange;
|
|
122
|
+
group: import("./usage-report.js").UsageGroup;
|
|
123
|
+
only?: string;
|
|
124
|
+
}): Promise<import("./usage-report.js").UsageReport>;
|
|
114
125
|
/** Effective process state used to annotate cross-instance delivery results. */
|
|
115
126
|
getInstanceStatus?(name: string): "running" | "paused" | "stopped" | "crashed";
|
|
116
127
|
/** #1808: whether `backend` takes this model name (the rule /backend applies too); `choices`: what it offers. */
|