@songsid/agend 2.3.0-beta.9 → 2.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -8
- package/README.zh-TW.md +16 -8
- package/dist/adapter-world.js.map +1 -1
- package/dist/agend-home.d.ts +5 -0
- package/dist/agend-home.js +7 -0
- package/dist/agend-home.js.map +1 -0
- package/dist/agent-cli-instructions.md +7 -1
- package/dist/agent-cli.js +41 -0
- package/dist/agent-cli.js.map +1 -1
- package/dist/agent-endpoint.d.ts +9 -0
- package/dist/agent-endpoint.js +23 -0
- package/dist/agent-endpoint.js.map +1 -1
- package/dist/agent-file-read.js +1 -1
- package/dist/agent-file-read.js.map +1 -1
- package/dist/agent-whats-new.d.ts +16 -0
- package/dist/agent-whats-new.js +53 -12
- package/dist/agent-whats-new.js.map +1 -1
- package/dist/apply-job.js.map +1 -1
- package/dist/atomic-write.js.map +1 -1
- package/dist/auth-api.d.ts +12 -0
- package/dist/auth-api.js +77 -22
- package/dist/auth-api.js.map +1 -1
- package/dist/authority/authority-state.d.ts +4 -0
- package/dist/authority/authority-state.js +17 -8
- package/dist/authority/authority-state.js.map +1 -1
- package/dist/authority/session-authorizations.js.map +1 -1
- package/dist/authority/web-authority.d.ts +16 -8
- package/dist/authority/web-authority.js +19 -5
- package/dist/authority/web-authority.js.map +1 -1
- package/dist/backend/antigravity.d.ts +2 -2
- package/dist/backend/antigravity.js +2 -1
- package/dist/backend/antigravity.js.map +1 -1
- package/dist/backend/claude-code.js +13 -4
- 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-package.d.ts +30 -0
- package/dist/backend/codex-package.js +133 -0
- package/dist/backend/codex-package.js.map +1 -0
- package/dist/backend/codex-session-lookup.js.map +1 -1
- package/dist/backend/codex.d.ts +2 -0
- package/dist/backend/codex.js +25 -5
- 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/effort-metadata.js.map +1 -1
- package/dist/backend/grok.js +58 -3
- package/dist/backend/grok.js.map +1 -1
- package/dist/backend/kiro-engine-ledger.js.map +1 -1
- package/dist/backend/kiro-kas-store.js.map +1 -1
- package/dist/backend/kiro-v2-store.js.map +1 -1
- package/dist/backend/kiro-v3-identity.js.map +1 -1
- package/dist/backend/kiro.d.ts +9 -1
- package/dist/backend/kiro.js +102 -1
- package/dist/backend/kiro.js.map +1 -1
- package/dist/backend/launch-effort.js.map +1 -1
- package/dist/backend/mock.js.map +1 -1
- package/dist/backend/muse.d.ts +20 -2
- package/dist/backend/muse.js +154 -16
- package/dist/backend/muse.js.map +1 -1
- package/dist/backend/opencode-permission.js +1 -1
- package/dist/backend/opencode-permission.js.map +1 -1
- package/dist/backend/opencode.js +2 -1
- package/dist/backend/opencode.js.map +1 -1
- package/dist/backend/session-signals.js.map +1 -1
- package/dist/backend-availability.js.map +1 -1
- package/dist/backend-command.d.ts +2 -0
- package/dist/backend-command.js +3 -1
- package/dist/backend-command.js.map +1 -1
- package/dist/backend-outage.js.map +1 -1
- package/dist/binary-probe.js +1 -1
- package/dist/binary-probe.js.map +1 -1
- package/dist/bug-report-cli.d.ts +30 -0
- package/dist/bug-report-cli.js +139 -0
- package/dist/bug-report-cli.js.map +1 -0
- package/dist/bug-report.d.ts +47 -0
- package/dist/bug-report.js +137 -0
- package/dist/bug-report.js.map +1 -0
- package/dist/bundled-skills.d.ts +18 -0
- package/dist/bundled-skills.js +38 -0
- package/dist/bundled-skills.js.map +1 -0
- package/dist/cache-service.js +1 -1
- 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 +4 -0
- package/dist/channel/adapters/discord.js +57 -12
- package/dist/channel/adapters/discord.js.map +1 -1
- package/dist/channel/adapters/telegram.d.ts +7 -1
- package/dist/channel/adapters/telegram.js +57 -49
- package/dist/channel/adapters/telegram.js.map +1 -1
- package/dist/channel/mcp-server.js +21 -4
- package/dist/channel/mcp-server.js.map +1 -1
- package/dist/channel/mcp-tools.d.ts +3 -1
- package/dist/channel/mcp-tools.js +41 -4
- package/dist/channel/mcp-tools.js.map +1 -1
- package/dist/channel/message-queue.js.map +1 -1
- package/dist/channel/sticker-download.js.map +1 -1
- package/dist/channel/tool-router.js.map +1 -1
- package/dist/child-process.d.ts +21 -0
- package/dist/child-process.js +54 -0
- package/dist/child-process.js.map +1 -0
- package/dist/classic-channel-manager.js +3 -2
- package/dist/classic-channel-manager.js.map +1 -1
- package/dist/cli-entry.js.map +1 -1
- package/dist/cli-flags.js.map +1 -1
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +448 -313
- package/dist/cli.js.map +1 -1
- package/dist/command-table.d.ts +1 -1
- package/dist/command-table.js +1 -1
- package/dist/command-table.js.map +1 -1
- package/dist/compact-watch.js.map +1 -1
- package/dist/completion-install.js.map +1 -1
- package/dist/completion.js.map +1 -1
- package/dist/config-validator.d.ts +6 -0
- package/dist/config-validator.js +81 -8
- package/dist/config-validator.js.map +1 -1
- package/dist/config.d.ts +15 -3
- package/dist/config.js +41 -10
- package/dist/config.js.map +1 -1
- package/dist/connection-secrets.js.map +1 -1
- package/dist/context-guardian.js.map +1 -1
- package/dist/coredump-filter.js.map +1 -1
- package/dist/cpu-profile.js.map +1 -1
- package/dist/cross-instance-envelope.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 +52 -1
- package/dist/daemon.js +385 -27
- package/dist/daemon.js.map +1 -1
- package/dist/daily-summary.js.map +1 -1
- package/dist/darwin-memory.js +1 -1
- package/dist/darwin-memory.js.map +1 -1
- package/dist/dashboard-live.d.ts +8 -0
- package/dist/dashboard-live.js +35 -0
- package/dist/dashboard-live.js.map +1 -0
- package/dist/dashboard-permissions.d.ts +69 -0
- package/dist/dashboard-permissions.js +138 -0
- package/dist/dashboard-permissions.js.map +1 -0
- package/dist/decision-list.js.map +1 -1
- package/dist/delivery-consumed-watch.js.map +1 -1
- package/dist/delivery-outbox.d.ts +11 -0
- package/dist/delivery-outbox.js +52 -2
- package/dist/delivery-outbox.js.map +1 -1
- package/dist/delivery-outbox.test.js.map +1 -1
- package/dist/delivery-reconciliation.test.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/doctor.d.ts +8 -0
- package/dist/doctor.js +52 -0
- package/dist/doctor.js.map +1 -1
- package/dist/e2e-isolation.js.map +1 -1
- package/dist/event-log.js.map +1 -1
- package/dist/export-import.js +7 -5
- package/dist/export-import.js.map +1 -1
- package/dist/fleet-context.d.ts +1 -1
- package/dist/fleet-control-audit.js.map +1 -1
- package/dist/fleet-label.js.map +1 -1
- package/dist/fleet-level-config.d.ts +1 -1
- package/dist/fleet-level-config.js +2 -0
- package/dist/fleet-level-config.js.map +1 -1
- package/dist/fleet-lock.d.ts +6 -0
- package/dist/fleet-lock.js +22 -2
- package/dist/fleet-lock.js.map +1 -1
- package/dist/fleet-manager.d.ts +283 -15
- package/dist/fleet-manager.js +1825 -331
- package/dist/fleet-manager.js.map +1 -1
- package/dist/fleet-process-handlers.d.ts +18 -0
- package/dist/fleet-process-handlers.js +70 -0
- package/dist/fleet-process-handlers.js.map +1 -0
- package/dist/fleet-startup.d.ts +14 -0
- package/dist/fleet-startup.js +30 -0
- package/dist/fleet-startup.js.map +1 -0
- package/dist/fleet-traffic.js.map +1 -1
- package/dist/forged-envelope-scan.d.ts +0 -20
- package/dist/forged-envelope-scan.js +3 -2
- package/dist/forged-envelope-scan.js.map +1 -1
- package/dist/full-restart.d.ts +5 -5
- package/dist/full-restart.js +5 -5
- package/dist/full-restart.js.map +1 -1
- package/dist/general-knowledge/skills/bug-report/SKILL.md +31 -0
- package/dist/general-knowledge/skills/credential-profiles/SKILL.md +52 -11
- package/dist/general-knowledge/skills/cross-instance-messaging/SKILL.md +5 -1
- package/dist/general-knowledge/skills/fleet-config/SKILL.md +3 -1
- package/dist/general-knowledge/skills/fleet-restart/SKILL.md +8 -9
- package/dist/general-knowledge/skills/instance-lifecycle/SKILL.md +11 -0
- package/dist/general-knowledge/skills/multi-channel/SKILL.md +1 -1
- 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.canvas-worker-off.md +321 -0
- package/dist/general-knowledge/skills/web-appearance/SKILL.md +24 -4
- package/dist/general-knowledge/skills/web-dashboard/SKILL.canvas-worker-off.md +554 -0
- package/dist/general-knowledge/skills/web-dashboard/SKILL.md +156 -32
- package/dist/general-knowledge/skills/worker-collaboration/SKILL.md +1 -1
- package/dist/general-knowledge/steering/core-rules.md +1 -1
- package/dist/host-memory.js.map +1 -1
- package/dist/idle-gate-log.d.ts +19 -0
- package/dist/idle-gate-log.js +15 -0
- package/dist/idle-gate-log.js.map +1 -0
- package/dist/instance-config-impact.js +25 -4
- package/dist/instance-config-impact.js.map +1 -1
- package/dist/instance-lifecycle.d.ts +11 -1
- package/dist/instance-lifecycle.js +97 -25
- package/dist/instance-lifecycle.js.map +1 -1
- package/dist/instructions.d.ts +12 -6
- package/dist/instructions.js +19 -10
- package/dist/instructions.js.map +1 -1
- package/dist/kiro-compact-pane.js.map +1 -1
- package/dist/kiro-db-reader.js.map +1 -1
- package/dist/kiro-engine-status.js.map +1 -1
- package/dist/kiro-log-gate.js.map +1 -1
- package/dist/kiro-transcript-lane.js.map +1 -1
- package/dist/locale.js +450 -20
- package/dist/locale.js.map +1 -1
- package/dist/log-service.js +1 -0
- package/dist/log-service.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/logger.js +3 -2
- package/dist/logger.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/login-flows.js +1 -1
- package/dist/login-manager.js.map +1 -1
- package/dist/login-shell.js +3 -1
- package/dist/login-shell.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 +83 -4
- package/dist/ls-rows.js.map +1 -1
- package/dist/memory-pressure.js.map +1 -1
- package/dist/muse-usage-relay.js.map +1 -1
- package/dist/needs-you-hub.d.ts +98 -1
- package/dist/needs-you-hub.js +313 -44
- package/dist/needs-you-hub.js.map +1 -1
- package/dist/needs-you-live.d.ts +5 -2
- package/dist/needs-you-live.js +6 -3
- package/dist/needs-you-live.js.map +1 -1
- package/dist/needs-you.d.ts +68 -3
- package/dist/needs-you.js +39 -4
- package/dist/needs-you.js.map +1 -1
- package/dist/network-family.js.map +1 -1
- package/dist/operator-control-paths.js +3 -4
- package/dist/operator-control-paths.js.map +1 -1
- package/dist/outbound-handlers.d.ts +5 -2
- package/dist/outbound-handlers.js +81 -24
- package/dist/outbound-handlers.js.map +1 -1
- package/dist/outbound-schemas.d.ts +106 -60
- package/dist/outbound-schemas.js +33 -10
- package/dist/outbound-schemas.js.map +1 -1
- package/dist/outbox-open-error.js.map +1 -1
- package/dist/pane-context-cache.js.map +1 -1
- package/dist/paths.js.map +1 -1
- package/dist/private-dir.js.map +1 -1
- package/dist/probe-worker-pool.js.map +1 -1
- package/dist/profile-control.js.map +1 -1
- package/dist/prompt-file-ref.js.map +1 -1
- package/dist/provider-probe.js.map +1 -1
- package/dist/provider-secret-registry.d.ts +5 -3
- package/dist/provider-secret-registry.js +8 -2
- package/dist/provider-secret-registry.js.map +1 -1
- package/dist/public-link-auto-open.d.ts +32 -0
- package/dist/public-link-auto-open.js +86 -0
- package/dist/public-link-auto-open.js.map +1 -0
- package/dist/public-link-owner.d.ts +10 -0
- package/dist/public-link-owner.js +36 -0
- package/dist/public-link-owner.js.map +1 -0
- package/dist/public-link-progress.d.ts +12 -1
- package/dist/public-link-progress.js +5 -10
- package/dist/public-link-progress.js.map +1 -1
- package/dist/public-preview.js.map +1 -1
- package/dist/public-tunnel-config.d.ts +11 -0
- package/dist/public-tunnel-config.js +68 -0
- package/dist/public-tunnel-config.js.map +1 -0
- package/dist/public-web-gateway.d.ts +2 -0
- package/dist/public-web-gateway.js +19 -6
- package/dist/public-web-gateway.js.map +1 -1
- package/dist/public-web-link.d.ts +48 -3
- package/dist/public-web-link.js +177 -51
- package/dist/public-web-link.js.map +1 -1
- package/dist/quickstart-api.d.ts +9 -0
- package/dist/quickstart-api.js +82 -0
- package/dist/quickstart-api.js.map +1 -1
- package/dist/quickstart.d.ts +5 -0
- package/dist/quickstart.js +40 -25
- package/dist/quickstart.js.map +1 -1
- package/dist/reply-buttons-controller.js.map +1 -1
- package/dist/reply-dedup.js.map +1 -1
- package/dist/resource-report.js +1 -1
- package/dist/resource-report.js.map +1 -1
- package/dist/restart-guard.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.js.map +1 -1
- package/dist/runtime-cpu-profile.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/scheduler.js.map +1 -1
- package/dist/scheduler/task-board-text.d.ts +26 -0
- package/dist/scheduler/task-board-text.js +140 -0
- package/dist/scheduler/task-board-text.js.map +1 -0
- package/dist/scheduler/task-board.d.ts +730 -0
- package/dist/scheduler/task-board.js +2179 -0
- package/dist/scheduler/task-board.js.map +1 -0
- package/dist/scheduler/types.d.ts +6 -1
- package/dist/sd-notify.js +2 -1
- package/dist/sd-notify.js.map +1 -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 +149 -0
- package/dist/search/search-index.js +453 -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/secret-file.js.map +1 -1
- package/dist/secret-store.d.ts +2 -0
- package/dist/secret-store.js +21 -0
- package/dist/secret-store.js.map +1 -1
- package/dist/service-installer.d.ts +98 -1
- package/dist/service-installer.js +246 -11
- package/dist/service-installer.js.map +1 -1
- package/dist/service-owner.d.ts +44 -0
- package/dist/service-owner.js +48 -0
- package/dist/service-owner.js.map +1 -0
- package/dist/service-plan.d.ts +39 -2
- package/dist/service-plan.js +188 -6
- package/dist/service-plan.js.map +1 -1
- package/dist/session-oom-stop.d.ts +45 -0
- package/dist/session-oom-stop.js +259 -0
- package/dist/session-oom-stop.js.map +1 -0
- package/dist/session-oom.d.ts +34 -0
- package/dist/session-oom.js +251 -0
- package/dist/session-oom.js.map +1 -0
- package/dist/settings-api.d.ts +14 -1
- package/dist/settings-api.js +74 -13
- package/dist/settings-api.js.map +1 -1
- package/dist/settings-baseline.js.map +1 -1
- package/dist/settings-change.d.ts +5 -0
- package/dist/settings-change.js +167 -6
- package/dist/settings-change.js.map +1 -1
- package/dist/settings-confirmation.d.ts +9 -1
- package/dist/settings-confirmation.js +18 -8
- package/dist/settings-confirmation.js.map +1 -1
- package/dist/settings-control.js +2 -1
- package/dist/settings-control.js.map +1 -1
- package/dist/settings-effect.js +29 -4
- package/dist/settings-effect.js.map +1 -1
- package/dist/settings-http-confirmation.d.ts +13 -0
- package/dist/settings-http-confirmation.js +15 -3
- package/dist/settings-http-confirmation.js.map +1 -1
- package/dist/settings-instance-patch.js +13 -1
- package/dist/settings-instance-patch.js.map +1 -1
- package/dist/settings-request-capability.d.ts +4 -1
- package/dist/settings-request-capability.js +11 -3
- package/dist/settings-request-capability.js.map +1 -1
- package/dist/settings-transaction.js.map +1 -1
- package/dist/setup-auth.d.ts +1 -0
- package/dist/setup-auth.js +2 -1
- package/dist/setup-auth.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/setup-host.d.ts +6 -1
- package/dist/setup-host.js +15 -4
- package/dist/setup-host.js.map +1 -1
- package/dist/setup-wizard.js +6 -3
- package/dist/setup-wizard.js.map +1 -1
- package/dist/spawn-gate.d.ts +7 -0
- package/dist/spawn-gate.js +45 -12
- package/dist/spawn-gate.js.map +1 -1
- package/dist/start-attempt.d.ts +11 -0
- package/dist/start-attempt.js +29 -0
- package/dist/start-attempt.js.map +1 -0
- package/dist/start-failure-chat.d.ts +37 -0
- package/dist/start-failure-chat.js +142 -0
- package/dist/start-failure-chat.js.map +1 -0
- package/dist/start-failure-notice.d.ts +4 -0
- package/dist/start-failure-notice.js +20 -0
- package/dist/start-failure-notice.js.map +1 -0
- package/dist/start-failure.d.ts +171 -0
- package/dist/start-failure.js +348 -0
- package/dist/start-failure.js.map +1 -0
- package/dist/startup-memory-deadline.d.ts +23 -0
- package/dist/startup-memory-deadline.js +55 -0
- package/dist/startup-memory-deadline.js.map +1 -0
- package/dist/statusline-watcher.js.map +1 -1
- package/dist/storm-window.js.map +1 -1
- package/dist/systemd-peer-bus.js.map +1 -1
- package/dist/target-queue-worker.js.map +1 -1
- package/dist/task-board-summary.d.ts +101 -0
- package/dist/task-board-summary.js +177 -0
- package/dist/task-board-summary.js.map +1 -0
- package/dist/task-board-tool.d.ts +25 -0
- package/dist/task-board-tool.js +155 -0
- package/dist/task-board-tool.js.map +1 -0
- package/dist/task-board-waker.d.ts +51 -0
- package/dist/task-board-waker.js +141 -0
- package/dist/task-board-waker.js.map +1 -0
- package/dist/telegram-api-root.d.ts +1 -0
- package/dist/telegram-api-root.js +40 -0
- package/dist/telegram-api-root.js.map +1 -0
- package/dist/tips.js.map +1 -1
- package/dist/tmux-control.js +1 -1
- package/dist/tmux-control.js.map +1 -1
- package/dist/tmux-exec-helper.d.ts +104 -0
- package/dist/tmux-exec-helper.js +412 -0
- package/dist/tmux-exec-helper.js.map +1 -0
- package/dist/tmux-manager.d.ts +1 -0
- package/dist/tmux-manager.js +29 -13
- package/dist/tmux-manager.js.map +1 -1
- package/dist/tmux-read.js +2 -2
- package/dist/tmux-read.js.map +1 -1
- package/dist/tool-permissions.js.map +1 -1
- package/dist/tool-progress.js.map +1 -1
- package/dist/topic-archiver.js.map +1 -1
- package/dist/topic-commands.d.ts +13 -0
- package/dist/topic-commands.js +56 -33
- package/dist/topic-commands.js.map +1 -1
- package/dist/topic-link.js.map +1 -1
- package/dist/transcript-delta-reader.js.map +1 -1
- package/dist/transcript-jsonl.js.map +1 -1
- package/dist/transcript-monitor.js +5 -0
- package/dist/transcript-monitor.js.map +1 -1
- package/dist/transcript-sources.d.ts +2 -0
- package/dist/transcript-sources.js +4 -0
- package/dist/transcript-sources.js.map +1 -1
- package/dist/tunnel/cloudflared-install.js +3 -1
- package/dist/tunnel/cloudflared-install.js.map +1 -1
- package/dist/tunnel/cloudflared.d.ts +7 -16
- package/dist/tunnel/cloudflared.js +100 -13
- package/dist/tunnel/cloudflared.js.map +1 -1
- package/dist/tunnel/lease.js +3 -2
- package/dist/tunnel/lease.js.map +1 -1
- package/dist/tunnel/manager.js.map +1 -1
- package/dist/tunnel/named-diagnostics.d.ts +13 -0
- package/dist/tunnel/named-diagnostics.js +52 -0
- package/dist/tunnel/named-diagnostics.js.map +1 -0
- package/dist/tunnel/public-fetch.js.map +1 -1
- package/dist/tunnel/purpose-lane.js.map +1 -1
- package/dist/tunnel/types.d.ts +4 -1
- package/dist/tunnel/types.js.map +1 -1
- package/dist/types.d.ts +56 -2
- package/dist/ui/app-effects.js +23 -5
- package/dist/ui/app.html +2 -0
- package/dist/ui/backend-signin.js +297 -0
- package/dist/ui/chat-effects.js +10 -3
- package/dist/ui/chat-msg-actions.js +176 -0
- package/dist/ui/chat-render.js +62 -18
- package/dist/ui/chat-store.js +218 -48
- package/dist/ui/chat-strings.js +40 -8
- package/dist/ui/chat-thread.js +119 -10
- package/dist/ui/effect-trial-offer.js +2 -31
- package/dist/ui/effects-waker.js +2 -0
- package/dist/ui/fleet-canvas-layout.js +13 -4
- package/dist/ui/fleet-canvas.js +69 -28
- package/dist/ui/fleet-office-editor.js +149 -0
- package/dist/ui/fleet-office-model.js +358 -0
- package/dist/ui/fleet-office-pack.js +199 -0
- package/dist/ui/fleet-office-skin.js +474 -0
- package/dist/ui/fleet-office-store.js +49 -0
- package/dist/ui/fleet-office-zones.js +177 -0
- package/dist/ui/fleet-office.js +434 -0
- package/dist/ui/fleet-org.js +18 -5
- package/dist/ui/fleet-route-scene.js +272 -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 +482 -0
- package/dist/ui/fleet-task-work.js +107 -0
- package/dist/ui/fleet-tasks.js +569 -0
- package/dist/ui/fleet-traffic.js +81 -18
- package/dist/ui/fleet-usage.js +36 -2
- package/dist/ui/guest-refused.html +41 -0
- package/dist/ui/icons/icon-192.png +0 -0
- package/dist/ui/icons/icon-512.png +0 -0
- package/dist/ui/image-lightbox.js +45 -1
- package/dist/ui/image-zoom.js +242 -0
- package/dist/ui/panel-chat.js +214 -57
- package/dist/ui/panel-details.js +2 -0
- package/dist/ui/panel-fleet.js +32 -71
- package/dist/ui/panel-log.js +3 -3
- package/dist/ui/panel-needs.js +23 -6
- package/dist/ui/panel-settings.js +166 -33
- package/dist/ui/preview-panel.js +2 -1
- package/dist/ui/search-dialog.js +350 -0
- package/dist/ui/settings-appearance.js +170 -10
- package/dist/ui/settings-apply.js +3 -3
- package/dist/ui/settings-confirm.js +7 -2
- package/dist/ui/settings-dialogs.js +46 -21
- package/dist/ui/settings-discord.js +6 -2
- package/dist/ui/settings-guests.js +2 -1
- package/dist/ui/settings-learn.js +1 -0
- package/dist/ui/settings-model.js +51 -18
- package/dist/ui/settings-mods.js +8 -3
- package/dist/ui/settings-owner-effects.js +6 -4
- package/dist/ui/settings-strings.js +186 -6
- package/dist/ui/settings-token.js +3 -1
- package/dist/ui/settings-web-authority.js +13 -5
- package/dist/ui/settings-wizard.js +13 -7
- package/dist/ui/shared/agend-auth.js +2 -0
- package/dist/ui/shared/app-i18n.js +12 -5
- package/dist/ui/shared/app-needs.js +2 -2
- package/dist/ui/shared/app-prefs.js +15 -0
- package/dist/ui/shared/app-route.js +18 -0
- package/dist/ui/shared/app-shell.js +189 -28
- package/dist/ui/shared/app-store.js +3 -2
- package/dist/ui/shared/app-stream.js +5 -1
- package/dist/ui/shared/app-themes.js +116 -1
- package/dist/ui/shared/app.css +668 -48
- package/dist/ui/shared/app.js +9 -1
- package/dist/ui/shared/card-strings.js +4 -0
- package/dist/ui/shared/effect-app-runtime.js +7 -5
- package/dist/ui/shared/effect-chat-runtime.js +2 -7
- package/dist/ui/shared/effect-cursor.js +3 -2
- package/dist/ui/shared/effect-display-metadata.js +39 -0
- package/dist/ui/shared/effect-owner-source.js +8 -1
- package/dist/ui/shared/effect-registry.js +14 -4
- package/dist/ui/shared/effect-runtime-loader.js +3 -1
- package/dist/ui/shared/effect-stock-trust.js +5 -5
- package/dist/ui/shared/feature-flags.js +127 -0
- package/dist/ui/shared/guest-refused.js +35 -0
- package/dist/ui/shared/header-tools.js +2 -2
- package/dist/ui/shared/identity-card.js +26 -8
- package/dist/ui/shared/identity-color.js +17 -10
- package/dist/ui/shared/instance-nav.js +183 -28
- package/dist/ui/shared/owner-css.js +30 -1
- package/dist/ui/shared/panel-view.js +14 -29
- package/dist/ui/shared/text-undo.js +210 -0
- package/dist/ui/shared/tokens.css +4 -0
- package/dist/ui/shared/ui-dialog.js +5 -4
- package/dist/ui/shared/ui-icons.js +4 -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 +216 -16
- package/dist/ui/shared/view-strings.js +70 -4
- package/dist/ui/shared/web-authorize.js +50 -1
- package/dist/ui/signin.html +2 -0
- package/dist/ui/web-terminal/terminal.html +10 -10
- package/dist/ui/web-terminal/terminal.js +58 -12
- package/dist/update-check.js.map +1 -1
- package/dist/update-dispatch.js +1 -1
- package/dist/update-dispatch.js.map +1 -1
- package/dist/update-install.js.map +1 -1
- package/dist/update-launch.d.ts +10 -1
- package/dist/update-launch.js +39 -14
- package/dist/update-launch.js.map +1 -1
- package/dist/update-marker.js.map +1 -1
- package/dist/update-preflight.js +1 -1
- package/dist/update-preflight.js.map +1 -1
- package/dist/update-progress.d.ts +3 -1
- package/dist/update-progress.js +3 -1
- package/dist/update-progress.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 +89 -2
- package/dist/usage/providers.js +247 -41
- package/dist/usage/providers.js.map +1 -1
- package/dist/usage/statusline-usage.js.map +1 -1
- package/dist/usage/usage-api.d.ts +5 -1
- package/dist/usage/usage-api.js +185 -58
- package/dist/usage/usage-api.js.map +1 -1
- package/dist/usage-report.js.map +1 -1
- package/dist/usage-rollup.js +1 -1
- package/dist/usage-rollup.js.map +1 -1
- 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 +7 -0
- package/dist/view-api.js +16 -4
- package/dist/view-api.js.map +1 -1
- package/dist/wake-coordinator.js.map +1 -1
- package/dist/web-ambient.js.map +1 -1
- package/dist/web-api.d.ts +58 -11
- package/dist/web-api.js +1104 -71
- package/dist/web-api.js.map +1 -1
- package/dist/web-app-icon-worker.d.ts +1 -0
- package/dist/web-app-icon-worker.js +16 -0
- package/dist/web-app-icon-worker.js.map +1 -0
- package/dist/web-app-icon.d.ts +109 -0
- package/dist/web-app-icon.js +257 -0
- package/dist/web-app-icon.js.map +1 -0
- package/dist/web-appearance-policy.js.map +1 -1
- package/dist/web-appearance-tools.d.ts +1 -0
- package/dist/web-appearance-tools.js +7 -3
- package/dist/web-appearance-tools.js.map +1 -1
- package/dist/web-appearance-view.js.map +1 -1
- package/dist/web-appearance.d.ts +4 -10
- package/dist/web-appearance.js +7 -4
- package/dist/web-appearance.js.map +1 -1
- package/dist/web-auth.d.ts +8 -4
- package/dist/web-auth.js +33 -21
- 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.js.map +1 -1
- package/dist/web-channel-echo.js.map +1 -1
- package/dist/web-chat-history.d.ts +118 -8
- package/dist/web-chat-history.js +220 -25
- package/dist/web-chat-history.js.map +1 -1
- package/dist/web-commands.d.ts +5 -1
- package/dist/web-commands.js +1 -1
- package/dist/web-commands.js.map +1 -1
- package/dist/web-cookie-names.d.ts +5 -0
- package/dist/web-cookie-names.js +12 -0
- package/dist/web-cookie-names.js.map +1 -0
- package/dist/web-effect-bundle.d.ts +2 -2
- package/dist/web-effect-library.js.map +1 -1
- package/dist/web-effect-playback.js.map +1 -1
- package/dist/web-effect-profiles.d.ts +16 -16
- package/dist/web-effect-profiles.js +3 -2
- package/dist/web-effect-profiles.js.map +1 -1
- package/dist/web-effect-service.js.map +1 -1
- package/dist/web-effect-tools.js.map +1 -1
- package/dist/web-effect-trials.js.map +1 -1
- package/dist/web-effect-upload.js.map +1 -1
- package/dist/web-effect.d.ts +6 -6
- package/dist/web-effect.js.map +1 -1
- package/dist/web-experimental-http.d.ts +2 -0
- package/dist/web-experimental-http.js +12 -0
- package/dist/web-experimental-http.js.map +1 -0
- package/dist/web-experimental.d.ts +11 -0
- package/dist/web-experimental.js +49 -0
- package/dist/web-experimental.js.map +1 -0
- package/dist/web-guest-access.d.ts +4 -2
- package/dist/web-guest-access.js +22 -10
- package/dist/web-guest-access.js.map +1 -1
- package/dist/web-guest-rooms.js.map +1 -1
- 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-icons.d.ts +33 -1
- package/dist/web-icons.js +83 -11
- package/dist/web-icons.js.map +1 -1
- package/dist/web-identity-color.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-images.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.js.map +1 -1
- package/dist/web-mentions.js.map +1 -1
- package/dist/web-mod-agent.js.map +1 -1
- package/dist/web-mod-store.d.ts +2 -0
- package/dist/web-mod-store.js +10 -0
- package/dist/web-mod-store.js.map +1 -1
- package/dist/web-office-store.d.ts +104 -0
- package/dist/web-office-store.js +236 -0
- package/dist/web-office-store.js.map +1 -0
- 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-owner-css.js.map +1 -1
- package/dist/web-png.d.ts +33 -0
- package/dist/web-png.js +329 -0
- package/dist/web-png.js.map +1 -0
- package/dist/web-prefs.d.ts +6 -0
- package/dist/web-prefs.js +29 -3
- package/dist/web-prefs.js.map +1 -1
- package/dist/web-preview.d.ts +2 -0
- package/dist/web-preview.js +2 -0
- package/dist/web-preview.js.map +1 -1
- package/dist/web-profile.js.map +1 -1
- package/dist/web-reactions.d.ts +35 -0
- package/dist/web-reactions.js +47 -0
- package/dist/web-reactions.js.map +1 -0
- package/dist/web-request-context.d.ts +5 -0
- package/dist/web-request-context.js.map +1 -1
- package/dist/web-returning-device.d.ts +4 -2
- package/dist/web-returning-device.js +13 -6
- package/dist/web-returning-device.js.map +1 -1
- package/dist/web-schedules.js.map +1 -1
- package/dist/web-send-dedupe.d.ts +36 -0
- package/dist/web-send-dedupe.js +69 -0
- package/dist/web-send-dedupe.js.map +1 -0
- package/dist/web-session-authorization.js.map +1 -1
- package/dist/web-session.js +1 -1
- package/dist/web-session.js.map +1 -1
- package/dist/web-settings-patch.d.ts +3 -1
- package/dist/web-settings-patch.js +11 -5
- package/dist/web-settings-patch.js.map +1 -1
- package/dist/web-settings-tools.d.ts +6 -0
- package/dist/web-settings-tools.js +52 -17
- package/dist/web-settings-tools.js.map +1 -1
- package/dist/web-terminal-http.js +15 -2
- package/dist/web-terminal-http.js.map +1 -1
- package/dist/web-terminal.js +1 -1
- package/dist/web-terminal.js.map +1 -1
- package/dist/web-theme-store.d.ts +2 -2
- package/dist/web-theme-store.js +6 -3
- package/dist/web-theme-store.js.map +1 -1
- package/dist/web-theme.d.ts +29 -0
- package/dist/web-theme.js +89 -1
- package/dist/web-theme.js.map +1 -1
- package/dist/web-upload.d.ts +18 -1
- package/dist/web-upload.js +45 -7
- package/dist/web-upload.js.map +1 -1
- package/dist/web-widget.js.map +1 -1
- package/dist/webhook-emitter.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 +3 -0
- package/dist/working-state-journal.d.ts +68 -0
- package/dist/working-state-journal.js +93 -0
- package/dist/working-state-journal.js.map +1 -0
- package/dist/ws-server.js.map +1 -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 +828 -0
- package/launcher/install-admission.cjs +4 -39
- package/launcher/postinstall.cjs +14 -12
- package/launcher/private-home.cjs +43 -0
- package/package.json +16 -13
- 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,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* #2481: a fleet that cannot start after an upgrade is told, plainly, to the person — never rolled back.
|
|
3
|
+
*
|
|
4
|
+
* An updater can only judge what it sees while it runs. 2.2.6's, under launchd, takes the first running pid of the new
|
|
5
|
+
* job for a successful start (#2481), and any updater misses a fleet that starts and then fails a few minutes later.
|
|
6
|
+
* The installed version then crash-loops under the service manager, with the person told the update succeeded. This
|
|
7
|
+
* module is what every `agend` command and `agend doctor` consult afterwards:
|
|
8
|
+
*
|
|
9
|
+
* - `fleet-start-attempts.json` — written by `fleet start` as the first import of dist/cli.js (start-attempt.ts), so
|
|
10
|
+
* before anything later in the module graph can throw; the last attempts of the installed version.
|
|
11
|
+
* - `fleet-started.json` — written by the fleet only when its startup completes (with READY=1); the versions that ran.
|
|
12
|
+
* - the service manager's own counters — launchd's runs and last exit code, systemd's state, result and restarts — for
|
|
13
|
+
* failures before any of our code runs (a broken package, a missing file).
|
|
14
|
+
*
|
|
15
|
+
* The check costs nothing once the installed version has started: `fleet-started.json` names it and nothing else is
|
|
16
|
+
* read. It never fires for a slow start (one attempt, the job running), a deliberate stop (the job not loaded, or
|
|
17
|
+
* systemd inactive with Result=success), or a package installed less than 90 s ago.
|
|
18
|
+
*
|
|
19
|
+
* #2490: the same notice in chat (General, else the admin's DM): notifyChatOnce, from start-attempt.ts, runs
|
|
20
|
+
* start-failure-chat.js once per version, on its third failed start.
|
|
21
|
+
*
|
|
22
|
+
* Only node built-ins (and child-process.ts, itself only built-ins): start-attempt.ts imports this before the rest of the CLI.
|
|
23
|
+
*/
|
|
24
|
+
import { type SpawnOptions } from "node:child_process";
|
|
25
|
+
export declare const STARTED_FILE = "fleet-started.json";
|
|
26
|
+
export declare const ATTEMPTS_FILE = "fleet-start-attempts.json";
|
|
27
|
+
/** Attempts of one version within this window, with no start completed, count as a crash loop (no service to ask). */
|
|
28
|
+
export declare const ATTEMPT_WINDOW_MS: number;
|
|
29
|
+
export declare const LOOP_ATTEMPTS = 3;
|
|
30
|
+
/** A version trying to start for less than this (since its first attempt, else its install) is never judged. */
|
|
31
|
+
export declare const FRESH_INSTALL_MS: number;
|
|
32
|
+
export interface StartedRecord {
|
|
33
|
+
version: string;
|
|
34
|
+
at: string;
|
|
35
|
+
pid: number;
|
|
36
|
+
history: string[];
|
|
37
|
+
}
|
|
38
|
+
/** `notified`: the macOS notification went (once per version). The chat notice's claim is a file of its own (#2490). */
|
|
39
|
+
export interface AttemptsRecord {
|
|
40
|
+
version: string;
|
|
41
|
+
attempts: string[];
|
|
42
|
+
notified?: boolean;
|
|
43
|
+
}
|
|
44
|
+
export declare function writeJson(file: string, value: unknown): void;
|
|
45
|
+
export declare function readStarted(home: string): StartedRecord | null;
|
|
46
|
+
export declare function readAttempts(home: string): AttemptsRecord | null;
|
|
47
|
+
/** `fleet start` is running this version now. Returns the record as written. */
|
|
48
|
+
export declare function recordStartAttempt(home: string, version: string, now: number): AttemptsRecord;
|
|
49
|
+
/** The fleet's startup completed on this version: it runs; its attempts are history. */
|
|
50
|
+
export declare function recordStarted(home: string, version: string, pid: number, now: number): void;
|
|
51
|
+
/** A deliberate stop: the attempts so far are not a crash loop. */
|
|
52
|
+
export declare function clearStartAttempts(home: string): void;
|
|
53
|
+
/** What the service manager says of the fleet's job; null when it cannot be read. */
|
|
54
|
+
export type ManagerView = {
|
|
55
|
+
kind: "launchd";
|
|
56
|
+
loaded: false;
|
|
57
|
+
} | {
|
|
58
|
+
kind: "launchd";
|
|
59
|
+
loaded: true;
|
|
60
|
+
state: string;
|
|
61
|
+
runs: number | null;
|
|
62
|
+
lastExit: number | null;
|
|
63
|
+
pid: number | null;
|
|
64
|
+
} | {
|
|
65
|
+
kind: "systemd";
|
|
66
|
+
active: string;
|
|
67
|
+
sub: string;
|
|
68
|
+
result: string;
|
|
69
|
+
restarts: number | null;
|
|
70
|
+
status: number | null;
|
|
71
|
+
};
|
|
72
|
+
export declare function parseLaunchctlPrint(stdout: string): ManagerView;
|
|
73
|
+
export declare function parseSystemctlShow(stdout: string): ManagerView;
|
|
74
|
+
/**
|
|
75
|
+
* Does the manager show this job failing to start, again and again? `recentAttempts`: this version's, within the window.
|
|
76
|
+
* launchd keeps `last exit code` and counts `runs` for as long as the job stays loaded: a job running now (a pid) may
|
|
77
|
+
* just be slow — a #2461 memory-deferred start takes minutes — so for it only our own recent attempts say it restarts.
|
|
78
|
+
*/
|
|
79
|
+
export declare function managerShowsLoop(view: ManagerView, recentAttempts: number): boolean;
|
|
80
|
+
export type StartFailure = {
|
|
81
|
+
failing: false;
|
|
82
|
+
} | {
|
|
83
|
+
failing: true;
|
|
84
|
+
version: string;
|
|
85
|
+
previous: Previous | null;
|
|
86
|
+
detail: string;
|
|
87
|
+
};
|
|
88
|
+
/** The version to go back to, and the package copy an updater kept of it (its path), when there is one. */
|
|
89
|
+
export interface Previous {
|
|
90
|
+
version: string;
|
|
91
|
+
copy: string | null;
|
|
92
|
+
}
|
|
93
|
+
/** A package copy an updater kept: `<prefix>/.agend-rollback/<version>-<time>[-<pid>]/agend`. */
|
|
94
|
+
export interface KeptCopy {
|
|
95
|
+
version: string;
|
|
96
|
+
path: string;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* The decision, from what was read (pure). `manager`: undefined — no service installed; null — one is, but it could
|
|
100
|
+
* not be read; then only our own attempts record can tell.
|
|
101
|
+
*/
|
|
102
|
+
export declare function judgeStartFailure(input: {
|
|
103
|
+
installed: string;
|
|
104
|
+
packageAgeMs: number;
|
|
105
|
+
now: number;
|
|
106
|
+
started: StartedRecord | null;
|
|
107
|
+
attempts: AttemptsRecord | null;
|
|
108
|
+
manager: ManagerView | null | undefined;
|
|
109
|
+
keptCopies?: KeptCopy[];
|
|
110
|
+
}): StartFailure;
|
|
111
|
+
/**
|
|
112
|
+
* The version to go back to: the newest that ran here, else the newest copy an updater kept (2.2.6's updater keeps the
|
|
113
|
+
* one it took before a launchd activation it judged successful); never the installed one. Its kept copy, when there is
|
|
114
|
+
* one, is named too — for the person to see; nothing here restores it.
|
|
115
|
+
*/
|
|
116
|
+
export declare function previousVersion(installed: string, started: StartedRecord | null, kept: KeptCopy[]): Previous | null;
|
|
117
|
+
/** The package copies updaters kept in `<prefix>/.agend-rollback/<version>-<time>[-<pid>]/agend`, newest first. */
|
|
118
|
+
export declare function keptCopies(prefix: string): KeptCopy[];
|
|
119
|
+
/** This package: its root, version and npm prefix (`<prefix>/lib/node_modules/@songsid/agend`, or Windows' layout). */
|
|
120
|
+
export declare function ownPackage(): {
|
|
121
|
+
root: string;
|
|
122
|
+
version: string | null;
|
|
123
|
+
prefix: string | null;
|
|
124
|
+
};
|
|
125
|
+
/** npm's global prefix for a package root: `<prefix>/lib/node_modules/…` (Unix) or `<prefix>/node_modules/…`; else null. */
|
|
126
|
+
export declare function npmPrefixOf(root: string): string | null;
|
|
127
|
+
type Run = (cmd: string, args: string[]) => {
|
|
128
|
+
status: number | null;
|
|
129
|
+
stdout: string;
|
|
130
|
+
error?: unknown;
|
|
131
|
+
};
|
|
132
|
+
/** The AgEnD service on this host, as `agend restart` chooses it; undefined when none is installed. */
|
|
133
|
+
export declare function readManager(run?: Run, opts?: {
|
|
134
|
+
platform?: NodeJS.Platform;
|
|
135
|
+
home?: string;
|
|
136
|
+
uid?: number;
|
|
137
|
+
}): ManagerView | null | undefined;
|
|
138
|
+
/** The whole check for this installed package; `{failing:false}` at once when it has started here. */
|
|
139
|
+
export declare function checkStartFailure(home: string, now?: number, run?: Run): StartFailure;
|
|
140
|
+
/** The last lines of fleet.log — the service's own stdout/stderr — where the failure itself is. */
|
|
141
|
+
export declare function fleetLogTail(home: string, lines?: number): string[];
|
|
142
|
+
/**
|
|
143
|
+
* macOS: one notification per version, the 3rd failed attempt in a row (best effort; never blocks, never throws).
|
|
144
|
+
* English only: it runs before any config is read; `agend doctor` says the rest in the fleet's language.
|
|
145
|
+
*/
|
|
146
|
+
/** How the notification is launched (tests pass a fake). */
|
|
147
|
+
export type Launch = (cmd: string, args: string[], opts: SpawnOptions) => {
|
|
148
|
+
on?: (event: "error", cb: () => void) => unknown;
|
|
149
|
+
unref?: () => void;
|
|
150
|
+
};
|
|
151
|
+
export declare function notifyOnce(home: string, record: AttemptsRecord, platform?: NodeJS.Platform, launch?: Launch): boolean;
|
|
152
|
+
/** How long a failing `fleet start` waits, once per version, for the notice to go out. */
|
|
153
|
+
export declare const CHAT_NOTICE_TIMEOUT_MS = 10000;
|
|
154
|
+
/** Is this attempt the one that sends the chat notice? This version's third start in the window, none completed. */
|
|
155
|
+
export declare function chatNoticeDue(record: AttemptsRecord, started: StartedRecord | null, now: number): boolean;
|
|
156
|
+
/** The chat notice's claim for a version: created once, O_EXCL — no rewrite of the attempts record can undo it. */
|
|
157
|
+
export declare function chatClaimFile(home: string, version: string): string | null;
|
|
158
|
+
/**
|
|
159
|
+
* Claim the chat notice for this version, atomically across processes (an O_EXCL create): true for exactly one caller,
|
|
160
|
+
* ever. The other versions' claims go (best effort): a later version gets its own notice, and a reinstalled one again.
|
|
161
|
+
*/
|
|
162
|
+
export declare function claimChatNotice(home: string, version: string): boolean;
|
|
163
|
+
export type RunChild = (cmd: string, args: string[], opts: {
|
|
164
|
+
timeout: number;
|
|
165
|
+
}) => void;
|
|
166
|
+
/**
|
|
167
|
+
* #2490, from start-attempt.ts: when this attempt is the one (chatNoticeDue), claim the chat notice and run
|
|
168
|
+
* start-failure-chat.js, which posts it; wait for it at most CHAT_NOTICE_TIMEOUT_MS. Never throws. True when it ran.
|
|
169
|
+
*/
|
|
170
|
+
export declare function notifyChatOnce(home: string, version: string, now: number, run?: RunChild): boolean;
|
|
171
|
+
export {};
|
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* #2481: a fleet that cannot start after an upgrade is told, plainly, to the person — never rolled back.
|
|
3
|
+
*
|
|
4
|
+
* An updater can only judge what it sees while it runs. 2.2.6's, under launchd, takes the first running pid of the new
|
|
5
|
+
* job for a successful start (#2481), and any updater misses a fleet that starts and then fails a few minutes later.
|
|
6
|
+
* The installed version then crash-loops under the service manager, with the person told the update succeeded. This
|
|
7
|
+
* module is what every `agend` command and `agend doctor` consult afterwards:
|
|
8
|
+
*
|
|
9
|
+
* - `fleet-start-attempts.json` — written by `fleet start` as the first import of dist/cli.js (start-attempt.ts), so
|
|
10
|
+
* before anything later in the module graph can throw; the last attempts of the installed version.
|
|
11
|
+
* - `fleet-started.json` — written by the fleet only when its startup completes (with READY=1); the versions that ran.
|
|
12
|
+
* - the service manager's own counters — launchd's runs and last exit code, systemd's state, result and restarts — for
|
|
13
|
+
* failures before any of our code runs (a broken package, a missing file).
|
|
14
|
+
*
|
|
15
|
+
* The check costs nothing once the installed version has started: `fleet-started.json` names it and nothing else is
|
|
16
|
+
* read. It never fires for a slow start (one attempt, the job running), a deliberate stop (the job not loaded, or
|
|
17
|
+
* systemd inactive with Result=success), or a package installed less than 90 s ago.
|
|
18
|
+
*
|
|
19
|
+
* #2490: the same notice in chat (General, else the admin's DM): notifyChatOnce, from start-attempt.ts, runs
|
|
20
|
+
* start-failure-chat.js once per version, on its third failed start.
|
|
21
|
+
*
|
|
22
|
+
* Only node built-ins (and child-process.ts, itself only built-ins): start-attempt.ts imports this before the rest of the CLI.
|
|
23
|
+
*/
|
|
24
|
+
import { spawnSync } from "node:child_process";
|
|
25
|
+
import { spawn } from "./child-process.js";
|
|
26
|
+
import { existsSync, mkdirSync, readFileSync, readdirSync, renameSync, statSync, unlinkSync, writeFileSync } from "node:fs";
|
|
27
|
+
import { homedir } from "node:os";
|
|
28
|
+
import { dirname, join } from "node:path";
|
|
29
|
+
import { fileURLToPath } from "node:url";
|
|
30
|
+
export const STARTED_FILE = "fleet-started.json";
|
|
31
|
+
export const ATTEMPTS_FILE = "fleet-start-attempts.json";
|
|
32
|
+
/** Attempts of one version within this window, with no start completed, count as a crash loop (no service to ask). */
|
|
33
|
+
export const ATTEMPT_WINDOW_MS = 10 * 60 * 1000;
|
|
34
|
+
export const LOOP_ATTEMPTS = 3;
|
|
35
|
+
/** A version trying to start for less than this (since its first attempt, else its install) is never judged. */
|
|
36
|
+
export const FRESH_INSTALL_MS = 90 * 1000;
|
|
37
|
+
const KEEP_ATTEMPTS = 20;
|
|
38
|
+
const KEEP_HISTORY = 5;
|
|
39
|
+
function readJson(file) {
|
|
40
|
+
try {
|
|
41
|
+
return JSON.parse(readFileSync(file, "utf8"));
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
export function writeJson(file, value) {
|
|
48
|
+
mkdirSync(dirname(file), { recursive: true });
|
|
49
|
+
const tmp = `${file}.${process.pid}.tmp`;
|
|
50
|
+
writeFileSync(tmp, JSON.stringify(value) + "\n", { mode: 0o600 });
|
|
51
|
+
renameSync(tmp, file);
|
|
52
|
+
}
|
|
53
|
+
export function readStarted(home) {
|
|
54
|
+
const r = readJson(join(home, STARTED_FILE));
|
|
55
|
+
return r && typeof r.version === "string" && Array.isArray(r.history) ? r : null;
|
|
56
|
+
}
|
|
57
|
+
export function readAttempts(home) {
|
|
58
|
+
const r = readJson(join(home, ATTEMPTS_FILE));
|
|
59
|
+
return r && typeof r.version === "string" && Array.isArray(r.attempts) ? r : null;
|
|
60
|
+
}
|
|
61
|
+
/** `fleet start` is running this version now. Returns the record as written. */
|
|
62
|
+
export function recordStartAttempt(home, version, now) {
|
|
63
|
+
const prior = readAttempts(home);
|
|
64
|
+
const same = prior?.version === version;
|
|
65
|
+
const record = {
|
|
66
|
+
version,
|
|
67
|
+
attempts: [...(same ? prior.attempts : []), new Date(now).toISOString()].slice(-KEEP_ATTEMPTS),
|
|
68
|
+
...(same && prior.notified ? { notified: true } : {}),
|
|
69
|
+
};
|
|
70
|
+
writeJson(join(home, ATTEMPTS_FILE), record);
|
|
71
|
+
return record;
|
|
72
|
+
}
|
|
73
|
+
/** The fleet's startup completed on this version: it runs; its attempts are history. */
|
|
74
|
+
export function recordStarted(home, version, pid, now) {
|
|
75
|
+
const prior = readStarted(home);
|
|
76
|
+
const history = [version, ...(prior?.history ?? []).filter(v => v !== version)].slice(0, KEEP_HISTORY);
|
|
77
|
+
writeJson(join(home, STARTED_FILE), { version, at: new Date(now).toISOString(), pid, history });
|
|
78
|
+
clearStartAttempts(home);
|
|
79
|
+
}
|
|
80
|
+
/** A deliberate stop: the attempts so far are not a crash loop. */
|
|
81
|
+
export function clearStartAttempts(home) {
|
|
82
|
+
try {
|
|
83
|
+
unlinkSync(join(home, ATTEMPTS_FILE));
|
|
84
|
+
}
|
|
85
|
+
catch { /* none */ }
|
|
86
|
+
}
|
|
87
|
+
export function parseLaunchctlPrint(stdout) {
|
|
88
|
+
const field = (key) => new RegExp(`^\\s*${key} = (.+?)\\s*$`, "m").exec(stdout)?.[1] ?? null;
|
|
89
|
+
const num = (v) => (v !== null && /^-?\d+$/.test(v) ? Number(v) : null);
|
|
90
|
+
return { kind: "launchd", loaded: true, state: field("state") ?? "", runs: num(field("runs")), lastExit: num(field("last exit code")), pid: num(field("pid")) };
|
|
91
|
+
}
|
|
92
|
+
export function parseSystemctlShow(stdout) {
|
|
93
|
+
const props = {};
|
|
94
|
+
for (const line of stdout.split("\n")) {
|
|
95
|
+
const at = line.indexOf("=");
|
|
96
|
+
if (at > 0)
|
|
97
|
+
props[line.slice(0, at)] = line.slice(at + 1).trim();
|
|
98
|
+
}
|
|
99
|
+
const num = (v) => (v !== undefined && /^\d+$/.test(v) ? Number(v) : null);
|
|
100
|
+
return { kind: "systemd", active: props.ActiveState ?? "", sub: props.SubState ?? "", result: props.Result ?? "", restarts: num(props.NRestarts), status: num(props.ExecMainStatus) };
|
|
101
|
+
}
|
|
102
|
+
const FAILED_RESULTS = new Set(["exit-code", "signal", "core-dump", "start-limit-hit", "timeout", "watchdog"]);
|
|
103
|
+
/**
|
|
104
|
+
* Does the manager show this job failing to start, again and again? `recentAttempts`: this version's, within the window.
|
|
105
|
+
* launchd keeps `last exit code` and counts `runs` for as long as the job stays loaded: a job running now (a pid) may
|
|
106
|
+
* just be slow — a #2461 memory-deferred start takes minutes — so for it only our own recent attempts say it restarts.
|
|
107
|
+
*/
|
|
108
|
+
export function managerShowsLoop(view, recentAttempts) {
|
|
109
|
+
if (view.kind === "launchd") {
|
|
110
|
+
if (!view.loaded)
|
|
111
|
+
return false; // not loaded: stopped on purpose
|
|
112
|
+
const exitedBadly = view.lastExit !== null && view.lastExit !== 0;
|
|
113
|
+
if (!exitedBadly)
|
|
114
|
+
return false;
|
|
115
|
+
if (view.state === "running" && view.pid !== null)
|
|
116
|
+
return recentAttempts >= LOOP_ATTEMPTS;
|
|
117
|
+
return recentAttempts >= 2 || (view.runs ?? 0) >= LOOP_ATTEMPTS;
|
|
118
|
+
}
|
|
119
|
+
if (view.active === "failed")
|
|
120
|
+
return view.result !== "success";
|
|
121
|
+
if (view.sub === "auto-restart")
|
|
122
|
+
return true;
|
|
123
|
+
return FAILED_RESULTS.has(view.result) && (view.restarts ?? 0) >= 2;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* The decision, from what was read (pure). `manager`: undefined — no service installed; null — one is, but it could
|
|
127
|
+
* not be read; then only our own attempts record can tell.
|
|
128
|
+
*/
|
|
129
|
+
export function judgeStartFailure(input) {
|
|
130
|
+
const { installed, started } = input;
|
|
131
|
+
if (started?.version === installed)
|
|
132
|
+
return { failing: false };
|
|
133
|
+
const mine = input.attempts?.version === installed ? input.attempts.attempts : [];
|
|
134
|
+
// How long this version has been trying to start: since its first recorded attempt, else since it was installed.
|
|
135
|
+
const firstAttempt = mine.length ? Date.parse(mine[0]) : NaN;
|
|
136
|
+
const tryingMs = Number.isFinite(firstAttempt) ? input.now - firstAttempt : input.packageAgeMs;
|
|
137
|
+
if (tryingMs < FRESH_INSTALL_MS)
|
|
138
|
+
return { failing: false };
|
|
139
|
+
const recent = mine.filter(a => { const at = Date.parse(a); return Number.isFinite(at) && input.now - at <= ATTEMPT_WINDOW_MS && at <= input.now; });
|
|
140
|
+
let detail = null;
|
|
141
|
+
if (input.manager) {
|
|
142
|
+
if (!managerShowsLoop(input.manager, recent.length))
|
|
143
|
+
return { failing: false };
|
|
144
|
+
detail = input.manager.kind === "launchd"
|
|
145
|
+
? `launchd: exit ${input.manager.lastExit}, started ${input.manager.runs ?? "?"} times`
|
|
146
|
+
: `systemd: ${input.manager.active}/${input.manager.sub}, result ${input.manager.result || "?"}, restarted ${input.manager.restarts ?? "?"} times`;
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
if (input.manager === undefined && started === null && mine.length === 0)
|
|
150
|
+
return { failing: false }; // never run here
|
|
151
|
+
if (recent.length < LOOP_ATTEMPTS)
|
|
152
|
+
return { failing: false };
|
|
153
|
+
detail = `${recent.length} start attempts in the last ${ATTEMPT_WINDOW_MS / 60000} minutes, none completed`;
|
|
154
|
+
}
|
|
155
|
+
return { failing: true, version: installed, previous: previousVersion(installed, started, input.keptCopies ?? []), detail };
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* The version to go back to: the newest that ran here, else the newest copy an updater kept (2.2.6's updater keeps the
|
|
159
|
+
* one it took before a launchd activation it judged successful); never the installed one. Its kept copy, when there is
|
|
160
|
+
* one, is named too — for the person to see; nothing here restores it.
|
|
161
|
+
*/
|
|
162
|
+
export function previousVersion(installed, started, kept) {
|
|
163
|
+
const copyOf = (v) => kept.find(c => c.version === v)?.path ?? null;
|
|
164
|
+
for (const v of started?.history ?? [])
|
|
165
|
+
if (v !== installed)
|
|
166
|
+
return { version: v, copy: copyOf(v) };
|
|
167
|
+
for (const c of kept)
|
|
168
|
+
if (c.version !== installed)
|
|
169
|
+
return { version: c.version, copy: c.path };
|
|
170
|
+
return null;
|
|
171
|
+
}
|
|
172
|
+
/** The package copies updaters kept in `<prefix>/.agend-rollback/<version>-<time>[-<pid>]/agend`, newest first. */
|
|
173
|
+
export function keptCopies(prefix) {
|
|
174
|
+
const base = join(prefix, ".agend-rollback");
|
|
175
|
+
let names = [];
|
|
176
|
+
try {
|
|
177
|
+
names = readdirSync(base);
|
|
178
|
+
}
|
|
179
|
+
catch {
|
|
180
|
+
return [];
|
|
181
|
+
}
|
|
182
|
+
return names
|
|
183
|
+
.map(name => ({ name, version: /^(\d+\.\d+\.\d+(?:-[0-9A-Za-z.]+?)?)-\d{4}-\d\d-\d\dT/.exec(name)?.[1] ?? null, mtime: (() => { try {
|
|
184
|
+
return statSync(join(base, name)).mtimeMs;
|
|
185
|
+
}
|
|
186
|
+
catch {
|
|
187
|
+
return 0;
|
|
188
|
+
} })() }))
|
|
189
|
+
.filter((e) => e.version !== null && existsSync(join(base, e.name, "agend", "package.json")))
|
|
190
|
+
.sort((a, b) => b.mtime - a.mtime)
|
|
191
|
+
.map(e => ({ version: e.version, path: join(base, e.name, "agend") }));
|
|
192
|
+
}
|
|
193
|
+
/** This package: its root, version and npm prefix (`<prefix>/lib/node_modules/@songsid/agend`, or Windows' layout). */
|
|
194
|
+
export function ownPackage() {
|
|
195
|
+
const root = join(dirname(fileURLToPath(import.meta.url)), "..");
|
|
196
|
+
const version = readJson(join(root, "package.json"))?.version ?? null;
|
|
197
|
+
return { root, version, prefix: npmPrefixOf(root) };
|
|
198
|
+
}
|
|
199
|
+
/** npm's global prefix for a package root: `<prefix>/lib/node_modules/…` (Unix) or `<prefix>/node_modules/…`; else null. */
|
|
200
|
+
export function npmPrefixOf(root) {
|
|
201
|
+
const parts = root.split(/[\\/]/);
|
|
202
|
+
const at = parts.lastIndexOf("node_modules");
|
|
203
|
+
if (at <= 0)
|
|
204
|
+
return null;
|
|
205
|
+
return parts.slice(0, parts[at - 1] === "lib" ? at - 1 : at).join("/") || "/";
|
|
206
|
+
}
|
|
207
|
+
const defaultRun = (cmd, args) => {
|
|
208
|
+
const r = spawnSync(cmd, args, { encoding: "utf8", timeout: 3000, stdio: ["ignore", "pipe", "ignore"] });
|
|
209
|
+
return { status: r.status, stdout: r.stdout ?? "", error: r.error };
|
|
210
|
+
};
|
|
211
|
+
/** The AgEnD service on this host, as `agend restart` chooses it; undefined when none is installed. */
|
|
212
|
+
export function readManager(run = defaultRun, opts = {}) {
|
|
213
|
+
const platform = opts.platform ?? process.platform;
|
|
214
|
+
const home = opts.home ?? homedir();
|
|
215
|
+
if (platform === "darwin") {
|
|
216
|
+
if (!existsSync(join(home, "Library", "LaunchAgents", "com.agend.fleet.plist")))
|
|
217
|
+
return undefined;
|
|
218
|
+
const r = run("launchctl", ["print", `gui/${opts.uid ?? process.getuid?.() ?? 501}/com.agend.fleet`]);
|
|
219
|
+
if (r.error || r.status === null)
|
|
220
|
+
return null;
|
|
221
|
+
if (r.status === 113 || r.status === 125)
|
|
222
|
+
return { kind: "launchd", loaded: false };
|
|
223
|
+
return r.status === 0 ? parseLaunchctlPrint(r.stdout) : null;
|
|
224
|
+
}
|
|
225
|
+
const system = existsSync("/etc/systemd/system/agend.service");
|
|
226
|
+
const user = existsSync(join(home, ".config", "systemd", "user", "com.agend.fleet.service"));
|
|
227
|
+
if (!system && !user)
|
|
228
|
+
return undefined;
|
|
229
|
+
const r = run("systemctl", [...(system ? [] : ["--user"]), "show", "-p", "ActiveState,SubState,Result,NRestarts,ExecMainStatus", system ? "agend" : "com.agend.fleet"]);
|
|
230
|
+
if (r.error || r.status !== 0)
|
|
231
|
+
return null;
|
|
232
|
+
return parseSystemctlShow(r.stdout);
|
|
233
|
+
}
|
|
234
|
+
/** The whole check for this installed package; `{failing:false}` at once when it has started here. */
|
|
235
|
+
export function checkStartFailure(home, now = Date.now(), run) {
|
|
236
|
+
const own = ownPackage();
|
|
237
|
+
if (!own.version)
|
|
238
|
+
return { failing: false };
|
|
239
|
+
const started = readStarted(home);
|
|
240
|
+
if (started?.version === own.version)
|
|
241
|
+
return { failing: false };
|
|
242
|
+
// No attempt of this version recorded: its fleet never reached dist/cli.js's first import — and then this CLI, the same
|
|
243
|
+
// entry, would not be running either. Nothing to judge, and no service manager is asked (every command stays as it was).
|
|
244
|
+
const attempts = readAttempts(home);
|
|
245
|
+
if (attempts?.version !== own.version)
|
|
246
|
+
return { failing: false };
|
|
247
|
+
let packageAgeMs = 0;
|
|
248
|
+
try {
|
|
249
|
+
packageAgeMs = now - statSync(own.root).mtimeMs;
|
|
250
|
+
}
|
|
251
|
+
catch {
|
|
252
|
+
return { failing: false };
|
|
253
|
+
}
|
|
254
|
+
return judgeStartFailure({
|
|
255
|
+
installed: own.version, packageAgeMs, now, started, attempts,
|
|
256
|
+
manager: readManager(run), keptCopies: own.prefix ? keptCopies(own.prefix) : [],
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
/** The last lines of fleet.log — the service's own stdout/stderr — where the failure itself is. */
|
|
260
|
+
export function fleetLogTail(home, lines = 15) {
|
|
261
|
+
try {
|
|
262
|
+
return readFileSync(join(home, "fleet.log"), "utf8").trimEnd().split("\n").slice(-lines);
|
|
263
|
+
}
|
|
264
|
+
catch {
|
|
265
|
+
return [];
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
const defaultLaunch = (cmd, args, opts) => spawn(cmd, args, opts);
|
|
269
|
+
export function notifyOnce(home, record, platform = process.platform, launch = defaultLaunch) {
|
|
270
|
+
if (platform !== "darwin" || record.notified || record.attempts.length < LOOP_ATTEMPTS)
|
|
271
|
+
return false;
|
|
272
|
+
try {
|
|
273
|
+
writeJson(join(home, ATTEMPTS_FILE), { ...record, notified: true });
|
|
274
|
+
const text = `AgEnD v${record.version} is installed but the fleet fails to start. Run: agend doctor`;
|
|
275
|
+
const child = launch("osascript", ["-e", `display notification ${JSON.stringify(text)} with title "AgEnD"`], { detached: true, stdio: "ignore" });
|
|
276
|
+
child.on?.("error", () => { });
|
|
277
|
+
child.unref?.();
|
|
278
|
+
return true;
|
|
279
|
+
}
|
|
280
|
+
catch {
|
|
281
|
+
return false;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
// ── #2490: the chat notice (posted by start-failure-chat.ts) ────────────────────────────────────────────────────
|
|
285
|
+
/** How long a failing `fleet start` waits, once per version, for the notice to go out. */
|
|
286
|
+
export const CHAT_NOTICE_TIMEOUT_MS = 10_000;
|
|
287
|
+
/** Is this attempt the one that sends the chat notice? This version's third start in the window, none completed. */
|
|
288
|
+
export function chatNoticeDue(record, started, now) {
|
|
289
|
+
if (started?.version === record.version)
|
|
290
|
+
return false;
|
|
291
|
+
const recent = record.attempts.filter(a => { const at = Date.parse(a); return Number.isFinite(at) && at <= now && now - at <= ATTEMPT_WINDOW_MS; });
|
|
292
|
+
return recent.length >= LOOP_ATTEMPTS;
|
|
293
|
+
}
|
|
294
|
+
/** The chat notice's claim for a version: created once, O_EXCL — no rewrite of the attempts record can undo it. */
|
|
295
|
+
export function chatClaimFile(home, version) {
|
|
296
|
+
return /^[0-9A-Za-z.+-]{1,64}$/.test(version) ? join(home, `${CHAT_CLAIM_PREFIX}${version}`) : null;
|
|
297
|
+
}
|
|
298
|
+
const CHAT_CLAIM_PREFIX = "fleet-start-chat-notified-";
|
|
299
|
+
/**
|
|
300
|
+
* Claim the chat notice for this version, atomically across processes (an O_EXCL create): true for exactly one caller,
|
|
301
|
+
* ever. The other versions' claims go (best effort): a later version gets its own notice, and a reinstalled one again.
|
|
302
|
+
*/
|
|
303
|
+
export function claimChatNotice(home, version) {
|
|
304
|
+
const file = chatClaimFile(home, version);
|
|
305
|
+
if (!file)
|
|
306
|
+
return false;
|
|
307
|
+
try {
|
|
308
|
+
writeFileSync(file, new Date().toISOString() + "\n", { flag: "wx", mode: 0o600 });
|
|
309
|
+
}
|
|
310
|
+
catch {
|
|
311
|
+
return false;
|
|
312
|
+
}
|
|
313
|
+
try {
|
|
314
|
+
for (const name of readdirSync(home)) {
|
|
315
|
+
if (name.startsWith(CHAT_CLAIM_PREFIX) && join(home, name) !== file) {
|
|
316
|
+
try {
|
|
317
|
+
unlinkSync(join(home, name));
|
|
318
|
+
}
|
|
319
|
+
catch { /* gone */ }
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
catch { /* the claim stands */ }
|
|
324
|
+
return true;
|
|
325
|
+
}
|
|
326
|
+
const defaultRunChild = (cmd, args, opts) => {
|
|
327
|
+
// stderr is the service's log (fleet.log): the child's one line goes there. Its exit is not waited past the timeout.
|
|
328
|
+
spawnSync(cmd, args, { timeout: opts.timeout, stdio: ["ignore", "ignore", "inherit"], killSignal: "SIGKILL" });
|
|
329
|
+
};
|
|
330
|
+
/**
|
|
331
|
+
* #2490, from start-attempt.ts: when this attempt is the one (chatNoticeDue), claim the chat notice and run
|
|
332
|
+
* start-failure-chat.js, which posts it; wait for it at most CHAT_NOTICE_TIMEOUT_MS. Never throws. True when it ran.
|
|
333
|
+
*/
|
|
334
|
+
export function notifyChatOnce(home, version, now, run = defaultRunChild) {
|
|
335
|
+
try {
|
|
336
|
+
const record = readAttempts(home);
|
|
337
|
+
if (!record || record.version !== version || !chatNoticeDue(record, readStarted(home), now))
|
|
338
|
+
return false;
|
|
339
|
+
if (!claimChatNotice(home, version))
|
|
340
|
+
return false;
|
|
341
|
+
run(process.execPath, [join(dirname(fileURLToPath(import.meta.url)), "start-failure-chat.js"), home], { timeout: CHAT_NOTICE_TIMEOUT_MS });
|
|
342
|
+
return true;
|
|
343
|
+
}
|
|
344
|
+
catch {
|
|
345
|
+
return false;
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
//# sourceMappingURL=start-failure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start-failure.js","sourceRoot":"","sources":["../src/start-failure.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** Keep a live, deliberately memory-deferred startup out of systemd's kill/restart loop. */
|
|
2
|
+
export declare const STARTUP_MEMORY_EXTENSION_US: number;
|
|
3
|
+
export declare const STARTUP_MEMORY_TICK_MS = 30000;
|
|
4
|
+
export declare class StartupMemoryDeadline {
|
|
5
|
+
private readonly deps;
|
|
6
|
+
private timer;
|
|
7
|
+
private stopped;
|
|
8
|
+
private held;
|
|
9
|
+
private lastSent;
|
|
10
|
+
private lastLog;
|
|
11
|
+
constructor(deps: {
|
|
12
|
+
current(): boolean;
|
|
13
|
+
waiting(): boolean;
|
|
14
|
+
notify(state: string): void;
|
|
15
|
+
log(message: string): void;
|
|
16
|
+
now?: () => number;
|
|
17
|
+
});
|
|
18
|
+
/** Called immediately by a policy wait as well as periodically while it lasts. */
|
|
19
|
+
check(): void;
|
|
20
|
+
stop(): void;
|
|
21
|
+
}
|
|
22
|
+
/** Stops free memory; bound their concurrency without ever waiting for recovery. */
|
|
23
|
+
export declare function fleetStopConcurrency(count: number, pressure: string): number;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/** Keep a live, deliberately memory-deferred startup out of systemd's kill/restart loop. */
|
|
2
|
+
export const STARTUP_MEMORY_EXTENSION_US = 15 * 60 * 1_000_000;
|
|
3
|
+
export const STARTUP_MEMORY_TICK_MS = 30_000;
|
|
4
|
+
export class StartupMemoryDeadline {
|
|
5
|
+
deps;
|
|
6
|
+
timer;
|
|
7
|
+
stopped = false;
|
|
8
|
+
held = false;
|
|
9
|
+
lastSent = -Infinity;
|
|
10
|
+
lastLog = -Infinity;
|
|
11
|
+
constructor(deps) {
|
|
12
|
+
this.deps = deps;
|
|
13
|
+
this.timer = setInterval(() => this.check(), STARTUP_MEMORY_TICK_MS);
|
|
14
|
+
this.timer.unref?.();
|
|
15
|
+
}
|
|
16
|
+
/** Called immediately by a policy wait as well as periodically while it lasts. */
|
|
17
|
+
check() {
|
|
18
|
+
if (this.stopped)
|
|
19
|
+
return;
|
|
20
|
+
if (!this.deps.current()) {
|
|
21
|
+
this.stop();
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
if (!this.deps.waiting()) {
|
|
25
|
+
if (this.held) {
|
|
26
|
+
this.held = false;
|
|
27
|
+
this.deps.log("Fleet startup memory wait ended; the normal startup deadline applies after the last extension");
|
|
28
|
+
this.deps.notify("STATUS=Fleet startup continuing after memory wait");
|
|
29
|
+
}
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const now = this.deps.now?.() ?? performance.now();
|
|
33
|
+
if (now - this.lastSent < STARTUP_MEMORY_TICK_MS)
|
|
34
|
+
return;
|
|
35
|
+
this.lastSent = now;
|
|
36
|
+
this.held = true;
|
|
37
|
+
this.deps.notify(`EXTEND_TIMEOUT_USEC=${STARTUP_MEMORY_EXTENSION_US}\nSTATUS=Fleet startup waiting for host memory; queued CLI spawns are deferred`);
|
|
38
|
+
if (now - this.lastLog >= 10 * 60_000) {
|
|
39
|
+
this.lastLog = now;
|
|
40
|
+
this.deps.log("Fleet startup waiting for host memory — renewing systemd startup timeout by 15 minutes; READY is not sent");
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
stop() {
|
|
44
|
+
this.stopped = true;
|
|
45
|
+
if (this.timer)
|
|
46
|
+
clearInterval(this.timer);
|
|
47
|
+
this.timer = null;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/** Stops free memory; bound their concurrency without ever waiting for recovery. */
|
|
51
|
+
export function fleetStopConcurrency(count, pressure) {
|
|
52
|
+
const normal = count > 30 ? 15 : count >= 10 ? 10 : 5;
|
|
53
|
+
return pressure === "critical" || pressure === "elevated" ? Math.min(5, normal) : normal;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=startup-memory-deadline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"startup-memory-deadline.js","sourceRoot":"","sources":["../src/startup-memory-deadline.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAC5F,MAAM,CAAC,MAAM,2BAA2B,GAAG,EAAE,GAAG,EAAE,GAAG,SAAS,CAAC;AAC/D,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC;AAE7C,MAAM,OAAO,qBAAqB;IAOH,IAAI;IANzB,KAAK,CAAwC;IAC7C,OAAO,GAAG,KAAK,CAAC;IAChB,IAAI,GAAG,KAAK,CAAC;IACb,QAAQ,GAAG,CAAC,QAAQ,CAAC;IACrB,OAAO,GAAG,CAAC,QAAQ,CAAC;IAE5B,YAA6B,IAM5B;oBAN4B,IAAI;QAO/B,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,sBAAsB,CAAC,CAAC;QACrE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;IACvB,CAAC;IAED,kFAAkF;IAClF,KAAK;QACH,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;QACzB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAAC,OAAO;QAAC,CAAC;QAClD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;gBAClB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,+FAA+F,CAAC,CAAC;gBAC/G,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,mDAAmD,CAAC,CAAC;YACxE,CAAC;YACD,OAAO;QACT,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,WAAW,CAAC,GAAG,EAAE,CAAC;QACnD,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,GAAG,sBAAsB;YAAE,OAAO;QACzD,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;QACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,uBAAuB,2BAA2B,gFAAgF,CAAC,CAAC;QACrJ,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC;YACtC,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;YACnB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,2GAA2G,CAAC,CAAC;QAC7H,CAAC;IACH,CAAC;IAED,IAAI;QACF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,IAAI,CAAC,KAAK;YAAE,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;CACF;AAED,oFAAoF;AACpF,MAAM,UAAU,oBAAoB,CAAC,KAAa,EAAE,QAAgB;IAClE,MAAM,MAAM,GAAG,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,OAAO,QAAQ,KAAK,UAAU,IAAI,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AAC3F,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"statusline-watcher.js","sourceRoot":"","sources":["../src/statusline-watcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAoBnE;;;GAGG;AACH,MAAM,OAAO,iBAAiB;IAKR;
|
|
1
|
+
{"version":3,"file":"statusline-watcher.js","sourceRoot":"","sources":["../src/statusline-watcher.ts"],"names":[],"mappings":"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"}
|