@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
|
@@ -9,6 +9,7 @@ import type { FleetInstructionsParams } from "./instructions.js";
|
|
|
9
9
|
import type { DeliveryStatus } from "./status-emojis.js";
|
|
10
10
|
import { type PauseReason } from "./pause-marker.js";
|
|
11
11
|
import { type ProviderUsage } from "./usage/providers.js";
|
|
12
|
+
import type { CapacityNudgePauseGuard } from "./daemon.js";
|
|
12
13
|
import type { SpawnGate } from "./spawn-gate.js";
|
|
13
14
|
import type { StormWindow } from "./storm-window.js";
|
|
14
15
|
import type { BackendOutageTracker } from "./backend-outage.js";
|
|
@@ -114,6 +115,7 @@ export interface LifecycleContext {
|
|
|
114
115
|
credentialProfileOf?(name: string, backend: string): string | null;
|
|
115
116
|
/** Notify a clean CLI exit and offer an admin-only restart action in General. */
|
|
116
117
|
notifyNormalExit(name: string): Promise<void>;
|
|
118
|
+
notifySessionOomStop?(name: string, unclear?: boolean): Promise<void>;
|
|
117
119
|
/** Tell every General, as an agent, that kiro-cli can no longer run this instance as configured. */
|
|
118
120
|
queueKiroIncompatNotice?(name: string, reason: string): void;
|
|
119
121
|
/** True for a dynamic ClassicBot channel instance (not a fleet topic). */
|
|
@@ -198,9 +200,12 @@ export interface IncidentEventSource {
|
|
|
198
200
|
/** `nudge_continue`: arm / drop the daemon's "tell the agent to keep going" for the error just reported. */
|
|
199
201
|
armCapacityNudge?(pattern: RegExp, delayMs: number): boolean;
|
|
200
202
|
cancelCapacityNudge?(reason: string): void;
|
|
203
|
+
prepareCapacityNudgePause?(): Promise<CapacityNudgePauseGuard | null>;
|
|
201
204
|
/** Real daemons buffer `pty_error` raised by the startup scan until the lifecycle can handle it. */
|
|
202
205
|
holdStartupIncidents?(): void;
|
|
203
206
|
releaseStartupIncidents?(): void;
|
|
207
|
+
/** Reconsider a cooldown-suppressed MCP revival through daemon liveness/idle gates. */
|
|
208
|
+
deferMcpRestart?(delayMs: number): void;
|
|
204
209
|
}
|
|
205
210
|
/** Arguments accepted by handleCreate — mirrors CreateInstanceArgs in outbound-schemas.ts
|
|
206
211
|
* plus internal-only fields forwarded by deploy_template (profile-derived). */
|
|
@@ -315,6 +320,9 @@ export declare class InstanceLifecycle {
|
|
|
315
320
|
* Stored on the lifecycle (not the daemon) so the count survives daemon restarts.
|
|
316
321
|
*/
|
|
317
322
|
private capacityBackoffAttempts;
|
|
323
|
+
/** #2282: transient429 recovery has its own budget; capacity errors cannot spend it. */
|
|
324
|
+
private rateLimitNudgeAttempts;
|
|
325
|
+
private static readonly RATE_LIMIT_NUDGE_DELAYS_MS;
|
|
318
326
|
/** Active backoff restart timers, keyed by instance name. One per instance max. */
|
|
319
327
|
private capacityBackoffTimers;
|
|
320
328
|
/** Old Codex capacity rows to baseline in the replacement daemon (#949). */
|
|
@@ -440,6 +448,8 @@ export declare class InstanceLifecycle {
|
|
|
440
448
|
* The daemon owns the nudge itself (its fences, its pane lock); this owns only whether one is allowed.
|
|
441
449
|
*/
|
|
442
450
|
private scheduleContinueNudge;
|
|
451
|
+
/** An exhausted error must not pause a draft, new delivery or replacement launch. */
|
|
452
|
+
private pauseAfterRateLimitNudges;
|
|
443
453
|
epochOf(name: string): number;
|
|
444
454
|
/** Invalidate every start/wake already running for `name` (they will not publish). */
|
|
445
455
|
invalidate(name: string): void;
|
|
@@ -465,7 +475,7 @@ export declare class InstanceLifecycle {
|
|
|
465
475
|
private startInTransition;
|
|
466
476
|
isPaused(name: string): boolean;
|
|
467
477
|
getLastPausedAt(name: string): number | null;
|
|
468
|
-
pause(name: string, reason?: PauseReason): Promise<void>;
|
|
478
|
+
pause(name: string, reason?: PauseReason, admission?: CapacityNudgePauseGuard): Promise<void>;
|
|
469
479
|
/** When `name` was last woken or (re)started for work, if recorded. */
|
|
470
480
|
wokeAtFor(name: string): number | undefined;
|
|
471
481
|
wake(name: string, timeoutMs?: number, transition?: TransitionHandle, opts?: {
|
|
@@ -3,11 +3,12 @@ import { measureSyncWork } from "./sync-work-attribution.js";
|
|
|
3
3
|
import { REMOVED_BACKENDS, isRemovedBackend, removedBackendMessage } from "./backend/removed.js";
|
|
4
4
|
import { existsSync, readFileSync, mkdirSync, realpathSync, writeFileSync, statSync } from "node:fs";
|
|
5
5
|
import { ensureInstanceDir } from "./private-dir.js";
|
|
6
|
+
import { assertNoSessionOomStop } from "./session-oom-stop.js";
|
|
6
7
|
import { execFileSync } from "node:child_process";
|
|
7
8
|
import { join, basename, dirname, resolve, sep as pathSep } from "node:path";
|
|
8
9
|
import { access } from "node:fs/promises";
|
|
9
10
|
import { getAgendHome, ensureWorkspaceGit } from "./paths.js";
|
|
10
|
-
import { DEFAULT_INSTANCE_CONFIG, getTmuxSession } from "./config.js";
|
|
11
|
+
import { DEFAULT_INSTANCE_CONFIG, getEffectiveInstanceDefaults, getTmuxSession } from "./config.js";
|
|
11
12
|
import { readStatuslineModel, uniqueInstanceName } from "./topic-commands.js";
|
|
12
13
|
import { isModelCompatible } from "./backend/types.js";
|
|
13
14
|
import { safeHandler } from "./safe-async.js";
|
|
@@ -290,6 +291,9 @@ export class InstanceLifecycle {
|
|
|
290
291
|
* Stored on the lifecycle (not the daemon) so the count survives daemon restarts.
|
|
291
292
|
*/
|
|
292
293
|
capacityBackoffAttempts = new Map();
|
|
294
|
+
/** #2282: transient429 recovery has its own budget; capacity errors cannot spend it. */
|
|
295
|
+
rateLimitNudgeAttempts = new Map();
|
|
296
|
+
static RATE_LIMIT_NUDGE_DELAYS_MS = [30_000, 60_000, 120_000];
|
|
293
297
|
/** Active backoff restart timers, keyed by instance name. One per instance max. */
|
|
294
298
|
capacityBackoffTimers = new Map();
|
|
295
299
|
/** Old Codex capacity rows to baseline in the replacement daemon (#949). */
|
|
@@ -667,6 +671,14 @@ export class InstanceLifecycle {
|
|
|
667
671
|
this.ctx.setTopicIcon(name, "red");
|
|
668
672
|
return;
|
|
669
673
|
}
|
|
674
|
+
if (data.cause === "session_oom" || data.cause === "oom_unclear") {
|
|
675
|
+
if (this.daemons.get(name) !== daemon)
|
|
676
|
+
return;
|
|
677
|
+
if (!this.ctx.isPlannedRestart())
|
|
678
|
+
await this.ctx.notifySessionOomStop?.(name, data.cause === "oom_unclear");
|
|
679
|
+
if (this.daemons.get(name) !== daemon)
|
|
680
|
+
return;
|
|
681
|
+
}
|
|
670
682
|
this.ctx.logger.error({ name, reason: data.reason }, "Instance is no longer supervised");
|
|
671
683
|
this.notifyIncident(name, "supervision_ended", `🛑 ${name} is no longer running and will not be restarted automatically — ${data.reason}.\n${data.remedy}`);
|
|
672
684
|
if (data.cause === "cli_unsupported")
|
|
@@ -696,8 +708,10 @@ export class InstanceLifecycle {
|
|
|
696
708
|
const incident = this.mcpIncident(name);
|
|
697
709
|
const generation = ++incident.gen;
|
|
698
710
|
incident.deathNoticeSent = false;
|
|
699
|
-
this.ctx.eventLog?.insert(name, "mcp_died", { pid: data.pid });
|
|
700
|
-
this.ctx.logger.error({ name, pid: data.pid
|
|
711
|
+
this.ctx.eventLog?.insert(name, "mcp_died", { pid: data.pid, ...(data.neverConnected ? { neverConnected: true } : {}) });
|
|
712
|
+
this.ctx.logger.error({ name, pid: data.pid, neverConnected: data.neverConnected === true }, data.neverConnected
|
|
713
|
+
? "MCP server never connected — instance cannot use agend tools"
|
|
714
|
+
: "MCP server died — instance cannot use agend tools");
|
|
701
715
|
this.ctx.webhookEmit("mcp_died", name, { pid: data.pid });
|
|
702
716
|
// Auth outranks MCP: when the CLI lost authentication, "MCP server died"
|
|
703
717
|
// is a symptom and the fix is /login, not a restart. The daemon flags a
|
|
@@ -804,13 +818,16 @@ export class InstanceLifecycle {
|
|
|
804
818
|
// The daemon object dies with the restart it asks for, so the loop guard
|
|
805
819
|
// lives here: if the previous auto-restart was under the cooldown, the new
|
|
806
820
|
// MCP server evidently died right back (broken install, OOM pressure) and
|
|
807
|
-
// another attempt would just cycle the instance.
|
|
808
|
-
//
|
|
821
|
+
// another immediate attempt would just cycle the instance. Keep a bounded
|
|
822
|
+
// reconsideration on the daemon: a one-shot suppression strands this pid
|
|
823
|
+
// forever because later health ticks dedupe the already reported death.
|
|
809
824
|
const last = this.mcpAutoRestartAt.get(name) ?? 0;
|
|
810
825
|
const now = Date.now();
|
|
811
826
|
if (now - last < InstanceLifecycle.MCP_AUTO_RESTART_COOLDOWN_MS) {
|
|
812
|
-
|
|
813
|
-
this.ctx.
|
|
827
|
+
const retryAfterMs = InstanceLifecycle.MCP_AUTO_RESTART_COOLDOWN_MS - (now - last);
|
|
828
|
+
this.ctx.eventLog?.insert(name, "mcp_auto_restart_suppressed", { trigger: data.trigger, retryAfterMs });
|
|
829
|
+
this.ctx.logger.warn({ name, trigger: data.trigger, retryAfterMs }, "MCP auto-restart deferred — will reconsider after the cooldown with liveness and idle checks");
|
|
830
|
+
daemon.deferMcpRestart?.(retryAfterMs);
|
|
814
831
|
return;
|
|
815
832
|
}
|
|
816
833
|
this.mcpAutoRestartAt.set(name, now);
|
|
@@ -1005,7 +1022,7 @@ export class InstanceLifecycle {
|
|
|
1005
1022
|
this.ctx.restartSingleInstance(name, { freshStart: true }).catch(err => this.ctx.logger.error({ err, name }, "pty_error restart failed"));
|
|
1006
1023
|
}
|
|
1007
1024
|
else if (data.action === "nudge_continue") {
|
|
1008
|
-
this.scheduleContinueNudge(name, daemon, data.pattern);
|
|
1025
|
+
this.scheduleContinueNudge(name, daemon, data.pattern, data.type === "rate_limit");
|
|
1009
1026
|
}
|
|
1010
1027
|
else if (data.action === "backoff_restart") {
|
|
1011
1028
|
// Transient model capacity error (#905). The CLI already returned to its
|
|
@@ -1121,34 +1138,84 @@ export class InstanceLifecycle {
|
|
|
1121
1138
|
* going after a minute — at most CAPACITY_BACKOFF_MAX times per 30 minutes, then pause like the old ladder did.
|
|
1122
1139
|
* The daemon owns the nudge itself (its fences, its pane lock); this owns only whether one is allowed.
|
|
1123
1140
|
*/
|
|
1124
|
-
scheduleContinueNudge(name, daemon, pattern) {
|
|
1141
|
+
scheduleContinueNudge(name, daemon, pattern, rateLimit = false) {
|
|
1142
|
+
// A retired daemon must never pause its replacement after exhausting an
|
|
1143
|
+
// old budget. Arming itself also checks the captured spawn and pane.
|
|
1144
|
+
if (rateLimit && this.daemons.get(name) !== daemon)
|
|
1145
|
+
return;
|
|
1146
|
+
const budget = rateLimit ? this.rateLimitNudgeAttempts : this.capacityBackoffAttempts;
|
|
1125
1147
|
const now = Date.now();
|
|
1126
|
-
const prev =
|
|
1148
|
+
const prev = budget.get(name);
|
|
1127
1149
|
// A wall clock that stepped back must not make an old window look current forever.
|
|
1128
1150
|
const elapsed = prev ? now - prev.lastAt : -1;
|
|
1129
1151
|
const attempts = prev && elapsed >= 0 && elapsed < InstanceLifecycle.CAPACITY_BACKOFF_WINDOW_MS ? prev.count : 0;
|
|
1130
1152
|
const notificationTarget = this.ptyErrorNotificationTarget(name);
|
|
1153
|
+
const delayMs = rateLimit
|
|
1154
|
+
? InstanceLifecycle.RATE_LIMIT_NUDGE_DELAYS_MS[Math.min(attempts, InstanceLifecycle.CAPACITY_BACKOFF_MAX - 1)]
|
|
1155
|
+
: InstanceLifecycle.CAPACITY_NUDGE_DELAY_MS;
|
|
1156
|
+
// Validate the fresh/live episode BEFORE a budget-exhaustion pause too.
|
|
1157
|
+
// Arming only records a due time; on the fourth incident it is cancelled
|
|
1158
|
+
// synchronously below, before any monitor tick can send a fourth nudge.
|
|
1159
|
+
if (rateLimit) {
|
|
1160
|
+
if (!(pattern instanceof RegExp) || !daemon.armCapacityNudge?.(pattern, delayMs)) {
|
|
1161
|
+
if (notificationTarget)
|
|
1162
|
+
this.notifyIncident(notificationTarget, "pty_error", t("inst.codex_rate_retry_stopped"));
|
|
1163
|
+
return;
|
|
1164
|
+
}
|
|
1165
|
+
// Preserve next-spawn failover bookkeeping only for a vouched fresh
|
|
1166
|
+
// failure. It does not itself recover this already-failed turn.
|
|
1167
|
+
this.ctx.checkModelFailover(name, 100);
|
|
1168
|
+
}
|
|
1131
1169
|
if (attempts >= InstanceLifecycle.CAPACITY_BACKOFF_MAX) {
|
|
1170
|
+
if (rateLimit) {
|
|
1171
|
+
void this.pauseAfterRateLimitNudges(name, daemon, attempts)
|
|
1172
|
+
.catch(err => this.ctx.logger.warn({ err, name }, "rate-limit-exhausted pause failed"));
|
|
1173
|
+
return;
|
|
1174
|
+
}
|
|
1132
1175
|
this.ctx.logger.warn({ name, attempts }, "Model still at capacity after max nudges — pausing");
|
|
1133
1176
|
daemon.cancelCapacityNudge?.("retries exhausted");
|
|
1134
1177
|
if (notificationTarget)
|
|
1135
|
-
this.notifyIncident(notificationTarget, "pty_error", t("inst.codex_capacity_backoff_exhausted", name, String(attempts)));
|
|
1178
|
+
this.notifyIncident(notificationTarget, "pty_error", t(rateLimit ? "inst.codex_rate_retry_exhausted" : "inst.codex_capacity_backoff_exhausted", name, String(attempts)));
|
|
1136
1179
|
void this.pause(name, "error")
|
|
1137
1180
|
.catch(err => this.ctx.logger.warn({ err, name }, "capacity-exhausted pause failed"))
|
|
1138
|
-
.finally(() => {
|
|
1139
|
-
this.daemons.get(name)
|
|
1181
|
+
.finally(() => {
|
|
1182
|
+
if (!this.isPaused(name) && (!rateLimit || this.daemons.get(name) === daemon)) {
|
|
1183
|
+
(rateLimit ? daemon : this.daemons.get(name))?.requestPauseWhenIdle({ reason: "error" });
|
|
1184
|
+
}
|
|
1185
|
+
});
|
|
1140
1186
|
return;
|
|
1141
1187
|
}
|
|
1142
|
-
if (!(pattern instanceof RegExp) || !daemon.armCapacityNudge?.(pattern,
|
|
1188
|
+
if (!rateLimit && (!(pattern instanceof RegExp) || !daemon.armCapacityNudge?.(pattern, delayMs))) {
|
|
1143
1189
|
// Nothing to arm (the screen already moved on): the user still hears about the capacity error, no attempt is used.
|
|
1144
1190
|
if (notificationTarget)
|
|
1145
|
-
this.notifyIncident(notificationTarget, "pty_error", t("inst.codex_model_capacity"));
|
|
1191
|
+
this.notifyIncident(notificationTarget, "pty_error", t(rateLimit ? "inst.codex_rate_retry_stopped" : "inst.codex_model_capacity"));
|
|
1146
1192
|
return;
|
|
1147
1193
|
}
|
|
1148
|
-
|
|
1194
|
+
budget.set(name, { count: attempts + 1, lastAt: now });
|
|
1149
1195
|
this.ctx.logger.info({ name, attempt: attempts + 1 }, "Model at capacity — will tell it to keep going");
|
|
1150
1196
|
if (notificationTarget) {
|
|
1151
|
-
this.notifyIncident(notificationTarget, "pty_error", t("inst.codex_capacity_nudge_scheduled", name, String(attempts + 1), String(InstanceLifecycle.CAPACITY_BACKOFF_MAX), String(Math.round(
|
|
1197
|
+
this.notifyIncident(notificationTarget, "pty_error", t(rateLimit ? "inst.codex_rate_retry_scheduled" : "inst.codex_capacity_nudge_scheduled", name, String(attempts + 1), String(InstanceLifecycle.CAPACITY_BACKOFF_MAX), String(Math.round(delayMs / 1000))));
|
|
1198
|
+
}
|
|
1199
|
+
}
|
|
1200
|
+
/** An exhausted error must not pause a draft, new delivery or replacement launch. */
|
|
1201
|
+
async pauseAfterRateLimitNudges(name, daemon, attempts) {
|
|
1202
|
+
const admission = await daemon.prepareCapacityNudgePause?.();
|
|
1203
|
+
if (!admission || this.daemons.get(name) !== daemon || !admission.current())
|
|
1204
|
+
return;
|
|
1205
|
+
this.ctx.logger.warn({ name, attempts }, "HTTP 429 recovery exhausted — pausing the unchanged failed turn");
|
|
1206
|
+
const target = this.ptyErrorNotificationTarget(name);
|
|
1207
|
+
if (target)
|
|
1208
|
+
this.notifyIncident(target, "pty_error", t("inst.codex_rate_retry_exhausted", name, String(attempts)));
|
|
1209
|
+
try {
|
|
1210
|
+
await this.pause(name, "error", admission);
|
|
1211
|
+
}
|
|
1212
|
+
finally {
|
|
1213
|
+
// pause advances its own monitor fence, so use the captured launch and
|
|
1214
|
+
// episode identity plus a fresh pane read, rather than that fence alone.
|
|
1215
|
+
if (this.daemons.get(name) === daemon && !this.isPaused(name) && await admission.revalidate()
|
|
1216
|
+
&& this.daemons.get(name) === daemon && !this.isPaused(name) && admission.current()) {
|
|
1217
|
+
daemon.requestPauseWhenIdle({ reason: "error" });
|
|
1218
|
+
}
|
|
1152
1219
|
}
|
|
1153
1220
|
}
|
|
1154
1221
|
epochOf(name) {
|
|
@@ -1223,6 +1290,7 @@ export class InstanceLifecycle {
|
|
|
1223
1290
|
const check = () => { execution?.assert(); if (this.epochOf(name) !== epoch)
|
|
1224
1291
|
throw new SupersededStartError(name); };
|
|
1225
1292
|
check();
|
|
1293
|
+
assertNoSessionOomStop(this.ctx.getInstanceDir(name));
|
|
1226
1294
|
const seedNow = this.activitySeedNow.delete(name);
|
|
1227
1295
|
if (this.daemons.has(name)) {
|
|
1228
1296
|
this.ctx.logger.info({ name }, "Instance already running, skipping");
|
|
@@ -1382,7 +1450,7 @@ export class InstanceLifecycle {
|
|
|
1382
1450
|
getLastPausedAt(name) {
|
|
1383
1451
|
return this.daemons.get(name)?.lastPausedAt ?? readPausedAt(this.ctx.getInstanceDir(name));
|
|
1384
1452
|
}
|
|
1385
|
-
async pause(name, reason = "operator") {
|
|
1453
|
+
async pause(name, reason = "operator", admission) {
|
|
1386
1454
|
// Final backstop shared by slash, MCP, Settings, warm-cap, and any future
|
|
1387
1455
|
// caller. General is the coordinator and must remain resident to route work.
|
|
1388
1456
|
if (isGeneralInstance(this.ctx.fleetConfig, name)) {
|
|
@@ -1407,7 +1475,10 @@ export class InstanceLifecycle {
|
|
|
1407
1475
|
}
|
|
1408
1476
|
this.ctx.stopStatuslineWatcher(name);
|
|
1409
1477
|
try {
|
|
1410
|
-
|
|
1478
|
+
if (admission)
|
|
1479
|
+
await daemon.pause(reason, admission);
|
|
1480
|
+
else
|
|
1481
|
+
await daemon.pause(reason);
|
|
1411
1482
|
}
|
|
1412
1483
|
finally {
|
|
1413
1484
|
// A rejected/no-op pause leaves the instance active and must not strand
|
|
@@ -1448,6 +1519,7 @@ export class InstanceLifecycle {
|
|
|
1448
1519
|
return flight;
|
|
1449
1520
|
}
|
|
1450
1521
|
async wakeInTransition(name, timeoutMs, transition) {
|
|
1522
|
+
assertNoSessionOomStop(this.ctx.getInstanceDir(name));
|
|
1451
1523
|
const epoch = this.epochOf(name);
|
|
1452
1524
|
const daemon = this.daemons.get(name);
|
|
1453
1525
|
if (daemon) {
|
|
@@ -1686,7 +1758,7 @@ export class InstanceLifecycle {
|
|
|
1686
1758
|
}
|
|
1687
1759
|
else {
|
|
1688
1760
|
try {
|
|
1689
|
-
const { execFile: execFileCb } = await import("
|
|
1761
|
+
const { execFile: execFileCb } = await import("./child-process.js");
|
|
1690
1762
|
const { promisify } = await import("node:util");
|
|
1691
1763
|
check();
|
|
1692
1764
|
const execFileAsync = promisify(execFileCb);
|
|
@@ -1715,7 +1787,7 @@ export class InstanceLifecycle {
|
|
|
1715
1787
|
}
|
|
1716
1788
|
// Prune stale worktree records (e.g. if directory was manually deleted)
|
|
1717
1789
|
try {
|
|
1718
|
-
const { execFile: execFileCb } = await import("
|
|
1790
|
+
const { execFile: execFileCb } = await import("./child-process.js");
|
|
1719
1791
|
const { promisify } = await import("node:util");
|
|
1720
1792
|
check();
|
|
1721
1793
|
const execFileAsync = promisify(execFileCb);
|
|
@@ -1845,7 +1917,7 @@ export class InstanceLifecycle {
|
|
|
1845
1917
|
}
|
|
1846
1918
|
};
|
|
1847
1919
|
if (acquiredWorktree) {
|
|
1848
|
-
const { execFile } = await import("
|
|
1920
|
+
const { execFile } = await import("./child-process.js");
|
|
1849
1921
|
const { promisify } = await import("node:util");
|
|
1850
1922
|
if (!ownsPath())
|
|
1851
1923
|
return;
|
|
@@ -1863,7 +1935,7 @@ export class InstanceLifecycle {
|
|
|
1863
1935
|
}
|
|
1864
1936
|
if (branch) {
|
|
1865
1937
|
try {
|
|
1866
|
-
const { execFile: execFileCb } = await import("
|
|
1938
|
+
const { execFile: execFileCb } = await import("./child-process.js");
|
|
1867
1939
|
const { promisify } = await import("node:util");
|
|
1868
1940
|
const nativeExec = promisify(execFileCb);
|
|
1869
1941
|
const execFileAsync = async (file, args, options, acquired) => {
|
|
@@ -1991,14 +2063,14 @@ export class InstanceLifecycle {
|
|
|
1991
2063
|
if (!directory) {
|
|
1992
2064
|
workDir = join(getAgendHome(), "workspaces", newInstanceName);
|
|
1993
2065
|
const existed = existsSync(workDir);
|
|
1994
|
-
mkdirSync(workDir, { recursive: true });
|
|
2066
|
+
mkdirSync(workDir, { recursive: true, mode: 0o700 });
|
|
1995
2067
|
if (!existed)
|
|
1996
2068
|
acquiredDirectory = statSync(workDir);
|
|
1997
2069
|
ensureWorkspaceGit(workDir);
|
|
1998
2070
|
}
|
|
1999
2071
|
const instanceConfig = {
|
|
2000
2072
|
...DEFAULT_INSTANCE_CONFIG,
|
|
2001
|
-
...this.ctx.fleetConfig.defaults,
|
|
2073
|
+
...getEffectiveInstanceDefaults(this.ctx.fleetConfig.defaults ?? {}),
|
|
2002
2074
|
working_directory: workDir,
|
|
2003
2075
|
topic_id: createdTopicId,
|
|
2004
2076
|
...(description ? { description } : {}),
|