@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,236 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* #2293: the global search's index — `search.db`, a derived store of its own (SQLite FTS5, trigram tokenizer).
|
|
3
|
+
*
|
|
4
|
+
* Synchronous (better-sqlite3); it runs in the search worker (search-worker.ts), never on the fleet's loop. Tests use it
|
|
5
|
+
* directly. What is indexed is masked first (maskSecrets, the Log tab's), and only the fields the docs below carry.
|
|
6
|
+
*
|
|
7
|
+
* Queries: every term of 3+ characters is an FTS5 trigram MATCH (a substring, any script — no word breaking needed for
|
|
8
|
+
* Chinese or Japanese); a term of 1–2 characters cannot use a trigram index, so it is an `instr()` filter on rows the
|
|
9
|
+
* other terms or the filters already narrowed. A query of short terms only scans the newest SHORT_SCAN_ROWS rows that
|
|
10
|
+
* match the filters (newest first) and says so (`limited`).
|
|
11
|
+
*/
|
|
12
|
+
import Database from "better-sqlite3";
|
|
13
|
+
import { maskOpenSecretTail, maskSecrets } from "../log-steps.js";
|
|
14
|
+
export const SEARCH_SOURCES = ["chat", "xmsg", "task"];
|
|
15
|
+
export const QUERY_MAX_CHARS = 200;
|
|
16
|
+
export const QUERY_MAX_TERMS = 8;
|
|
17
|
+
export const RESULT_MAX = 200;
|
|
18
|
+
export const SHORT_SCAN_ROWS = 5000;
|
|
19
|
+
export const ROW_CAP = 300_000;
|
|
20
|
+
export const TEXT_MAX = 16_000;
|
|
21
|
+
/**
|
|
22
|
+
* Masking reads this much past TEXT_MAX before the text is cut (#2295 review): a secret cut at the edge loses what makes
|
|
23
|
+
* it recognisable (a closing quote), so the cut comes after the mask. One starting in the kept text and shorter than
|
|
24
|
+
* this is masked whole — a private key block is a few KB. A text cut before it got here (the web chat's history keeps
|
|
25
|
+
* 16000 characters) can end inside a quoted secret: its open tail is masked too (maskOpenSecretTail).
|
|
26
|
+
*/
|
|
27
|
+
export const MASK_MARGIN = 16_000;
|
|
28
|
+
const SCHEMA_VERSION = "1";
|
|
29
|
+
const SNIPPET_BEFORE = 60, SNIPPET_AFTER = 120;
|
|
30
|
+
/** The terms of a query: whitespace-split, lower-cased, deduplicated; long (3+ characters) and short ones apart. */
|
|
31
|
+
export function parseQuery(q) {
|
|
32
|
+
const terms = [...new Set(String(q ?? "").slice(0, QUERY_MAX_CHARS).toLowerCase().split(/\s+/).filter(Boolean))].slice(0, QUERY_MAX_TERMS);
|
|
33
|
+
const len = (t) => [...t].length;
|
|
34
|
+
return { long: terms.filter(t => len(t) >= 3), short: terms.filter(t => len(t) < 3) };
|
|
35
|
+
}
|
|
36
|
+
/** An FTS5 query that matches `term` as a literal substring (a phrase; its quotes doubled). */
|
|
37
|
+
const phrase = (term) => `"${term.replace(/"/g, '""')}"`;
|
|
38
|
+
/** The sentence around the first hit of any term, and every hit's place in it. */
|
|
39
|
+
export function snippetOf(text, terms) {
|
|
40
|
+
const lower = text.toLowerCase();
|
|
41
|
+
let first = -1;
|
|
42
|
+
for (const t of terms) {
|
|
43
|
+
const i = lower.indexOf(t);
|
|
44
|
+
if (i >= 0 && (first < 0 || i < first))
|
|
45
|
+
first = i;
|
|
46
|
+
}
|
|
47
|
+
const from = first < 0 ? 0 : Math.max(0, first - SNIPPET_BEFORE);
|
|
48
|
+
const to = Math.min(text.length, (first < 0 ? 0 : first) + SNIPPET_AFTER + SNIPPET_BEFORE);
|
|
49
|
+
const lead = from > 0 ? "…" : "", tail = to < text.length ? "…" : "";
|
|
50
|
+
const body = text.slice(from, to).replace(/\s+/g, " ");
|
|
51
|
+
const snippet = lead + body + tail;
|
|
52
|
+
const marks = [];
|
|
53
|
+
const lb = snippet.toLowerCase();
|
|
54
|
+
for (const t of terms)
|
|
55
|
+
for (let i = lb.indexOf(t); i >= 0; i = lb.indexOf(t, i + t.length))
|
|
56
|
+
marks.push([i, i + t.length]);
|
|
57
|
+
marks.sort((a, b) => a[0] - b[0]);
|
|
58
|
+
const merged = [];
|
|
59
|
+
for (const m of marks) {
|
|
60
|
+
const last = merged.at(-1);
|
|
61
|
+
if (last && m[0] <= last[1])
|
|
62
|
+
last[1] = Math.max(last[1], m[1]);
|
|
63
|
+
else
|
|
64
|
+
merged.push([...m]);
|
|
65
|
+
}
|
|
66
|
+
return { snippet, marks: merged };
|
|
67
|
+
}
|
|
68
|
+
export class SearchStore {
|
|
69
|
+
db;
|
|
70
|
+
constructor(path) {
|
|
71
|
+
this.db = new Database(path);
|
|
72
|
+
this.db.pragma("journal_mode = WAL");
|
|
73
|
+
this.db.pragma("synchronous = NORMAL");
|
|
74
|
+
this.db.pragma("busy_timeout = 1000");
|
|
75
|
+
this.db.exec(`
|
|
76
|
+
CREATE TABLE IF NOT EXISTS meta(k TEXT PRIMARY KEY, v TEXT NOT NULL);
|
|
77
|
+
CREATE TABLE IF NOT EXISTS docs(
|
|
78
|
+
rowid INTEGER PRIMARY KEY, key TEXT NOT NULL UNIQUE, source TEXT NOT NULL, instance TEXT NOT NULL, peer TEXT,
|
|
79
|
+
sender TEXT NOT NULL, role TEXT, mine TEXT, ts INTEGER NOT NULL, ref TEXT NOT NULL, text TEXT NOT NULL);
|
|
80
|
+
CREATE INDEX IF NOT EXISTS docs_ts ON docs(ts);
|
|
81
|
+
CREATE INDEX IF NOT EXISTS docs_instance_ts ON docs(instance, ts);
|
|
82
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS docs_fts USING fts5(text, sender, content='docs', content_rowid='rowid', tokenize='trigram');
|
|
83
|
+
CREATE TRIGGER IF NOT EXISTS docs_ai AFTER INSERT ON docs BEGIN
|
|
84
|
+
INSERT INTO docs_fts(rowid, text, sender) VALUES (new.rowid, new.text, new.sender); END;
|
|
85
|
+
CREATE TRIGGER IF NOT EXISTS docs_ad AFTER DELETE ON docs BEGIN
|
|
86
|
+
INSERT INTO docs_fts(docs_fts, rowid, text, sender) VALUES ('delete', old.rowid, old.text, old.sender); END;
|
|
87
|
+
CREATE TRIGGER IF NOT EXISTS docs_au AFTER UPDATE ON docs BEGIN
|
|
88
|
+
INSERT INTO docs_fts(docs_fts, rowid, text, sender) VALUES ('delete', old.rowid, old.text, old.sender);
|
|
89
|
+
INSERT INTO docs_fts(rowid, text, sender) VALUES (new.rowid, new.text, new.sender); END;`);
|
|
90
|
+
}
|
|
91
|
+
/** Whether this index was built (backfilled) under the current schema; false on a new or older one. */
|
|
92
|
+
built() {
|
|
93
|
+
const row = this.db.prepare("SELECT v FROM meta WHERE k = 'schema'").get();
|
|
94
|
+
return row?.v === SCHEMA_VERSION && !!this.db.prepare("SELECT v FROM meta WHERE k = 'built_at'").get();
|
|
95
|
+
}
|
|
96
|
+
/** Marks a finished backfill (a rebuild starts over: everything is replaced or added by key). */
|
|
97
|
+
markBuilt(now) {
|
|
98
|
+
const set = this.db.prepare("INSERT INTO meta(k, v) VALUES (?, ?) ON CONFLICT(k) DO UPDATE SET v = excluded.v");
|
|
99
|
+
this.db.transaction(() => { set.run("schema", SCHEMA_VERSION); set.run("built_at", String(now)); })();
|
|
100
|
+
}
|
|
101
|
+
/** Add or replace docs (by key), in one transaction. Text is masked, one-spaced at its edges and bounded. */
|
|
102
|
+
add(docs) {
|
|
103
|
+
const put = this.db.prepare(`INSERT INTO docs(key, source, instance, peer, sender, role, mine, ts, ref, text)
|
|
104
|
+
VALUES (@key, @source, @instance, @peer, @sender, @role, @mine, @ts, @ref, @text)
|
|
105
|
+
ON CONFLICT(key) DO UPDATE SET source = excluded.source, instance = excluded.instance, peer = excluded.peer,
|
|
106
|
+
sender = excluded.sender, role = excluded.role, mine = excluded.mine, ts = excluded.ts, ref = excluded.ref, text = excluded.text`);
|
|
107
|
+
let n = 0;
|
|
108
|
+
this.db.transaction(() => {
|
|
109
|
+
for (const d of docs) {
|
|
110
|
+
if (!valid(d))
|
|
111
|
+
continue;
|
|
112
|
+
put.run({ key: d.key, source: d.source, instance: d.instance, peer: d.peer ?? null, sender: d.sender.slice(0, 256), role: d.role ?? null,
|
|
113
|
+
mine: d.mine ?? null, ts: Math.trunc(d.ts), ref: JSON.stringify(d.ref ?? {}), text: indexedText(d.text) });
|
|
114
|
+
n++;
|
|
115
|
+
}
|
|
116
|
+
})();
|
|
117
|
+
return n;
|
|
118
|
+
}
|
|
119
|
+
/** An instance's docs go (the instance was deleted). */
|
|
120
|
+
/**
|
|
121
|
+
* An instance removed from the fleet: its chat goes, as the fleet forgets it. Its cross-instance messages and tasks
|
|
122
|
+
* stay — the outbox and the Task Board still hold them, and the other side's view of them is not this instance's.
|
|
123
|
+
*/
|
|
124
|
+
removeInstance(instance) {
|
|
125
|
+
return this.db.prepare("DELETE FROM docs WHERE source = 'chat' AND instance = ?").run(instance).changes;
|
|
126
|
+
}
|
|
127
|
+
/** Docs older than `cutoff` go, then the oldest beyond `cap`; in chunks (the caller yields between calls). */
|
|
128
|
+
prune(cutoff, cap = ROW_CAP, chunk = 1000) {
|
|
129
|
+
let removed = this.db.prepare("DELETE FROM docs WHERE rowid IN (SELECT rowid FROM docs WHERE ts < ? ORDER BY ts LIMIT ?)").run(cutoff, chunk).changes;
|
|
130
|
+
if (removed < chunk) {
|
|
131
|
+
const count = this.db.prepare("SELECT count(*) AS n FROM docs").get().n;
|
|
132
|
+
if (count > cap)
|
|
133
|
+
removed += this.db.prepare("DELETE FROM docs WHERE rowid IN (SELECT rowid FROM docs ORDER BY ts LIMIT ?)").run(Math.min(chunk, count - cap)).changes;
|
|
134
|
+
}
|
|
135
|
+
return { removed, more: removed >= chunk };
|
|
136
|
+
}
|
|
137
|
+
count() { return this.db.prepare("SELECT count(*) AS n FROM docs").get().n; }
|
|
138
|
+
/** The newest matches, newest first. */
|
|
139
|
+
search(f) {
|
|
140
|
+
const { long, short } = parseQuery(f.q);
|
|
141
|
+
if (!long.length && !short.length)
|
|
142
|
+
return { hits: [], limited: false };
|
|
143
|
+
const limit = Math.max(1, Math.min(RESULT_MAX, Math.trunc(f.limit ?? 50)));
|
|
144
|
+
const where = [], args = [];
|
|
145
|
+
if (f.instances?.length) {
|
|
146
|
+
const marks = f.instances.map(() => "?").join(",");
|
|
147
|
+
where.push(`(d.instance IN (${marks}) OR (d.source = 'xmsg' AND d.peer IN (${marks})))`);
|
|
148
|
+
args.push(...f.instances, ...f.instances);
|
|
149
|
+
}
|
|
150
|
+
if (f.sources?.length) {
|
|
151
|
+
where.push(`d.source IN (${f.sources.map(() => "?").join(",")})`);
|
|
152
|
+
args.push(...f.sources);
|
|
153
|
+
}
|
|
154
|
+
if (typeof f.since === "number") {
|
|
155
|
+
where.push("d.ts >= ?");
|
|
156
|
+
args.push(f.since);
|
|
157
|
+
}
|
|
158
|
+
if (typeof f.until === "number") {
|
|
159
|
+
where.push("d.ts < ?");
|
|
160
|
+
args.push(f.until);
|
|
161
|
+
}
|
|
162
|
+
if (f.mine?.length) {
|
|
163
|
+
where.push(`d.mine IN (${f.mine.map(() => "?").join(",")})`);
|
|
164
|
+
args.push(...f.mine);
|
|
165
|
+
}
|
|
166
|
+
if (f.hidden?.length) {
|
|
167
|
+
const marks = f.hidden.map(() => "?").join(",");
|
|
168
|
+
where.push(`NOT (d.source = 'xmsg' AND (d.instance IN (${marks}) OR d.peer IN (${marks})))`);
|
|
169
|
+
args.push(...f.hidden, ...f.hidden);
|
|
170
|
+
}
|
|
171
|
+
if (f.xmsgAmong) {
|
|
172
|
+
const marks = f.xmsgAmong.map(() => "?").join(",");
|
|
173
|
+
where.push(f.xmsgAmong.length ? `(d.source <> 'xmsg' OR (d.instance IN (${marks}) AND d.peer IN (${marks})))` : "d.source <> 'xmsg'");
|
|
174
|
+
args.push(...f.xmsgAmong, ...f.xmsgAmong);
|
|
175
|
+
}
|
|
176
|
+
const shortWhere = short.map(() => "instr(lower(d.text || ' ' || d.sender), ?) > 0");
|
|
177
|
+
let rows, limited = false;
|
|
178
|
+
if (long.length) {
|
|
179
|
+
const sql = `SELECT d.* FROM docs_fts JOIN docs d ON d.rowid = docs_fts.rowid WHERE docs_fts MATCH ?
|
|
180
|
+
${[...where, ...shortWhere].map(w => `AND ${w}`).join(" ")} ORDER BY d.ts DESC, d.rowid DESC LIMIT ?`;
|
|
181
|
+
rows = this.db.prepare(sql).all(long.map(phrase).join(" "), ...args, ...short, limit);
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
// Short terms only: the newest SHORT_SCAN_ROWS rows the filters allow, scanned.
|
|
185
|
+
const scan = `SELECT * FROM docs d ${where.length ? `WHERE ${where.join(" AND ")}` : ""} ORDER BY d.ts DESC, d.rowid DESC LIMIT ?`;
|
|
186
|
+
const sql = `SELECT * FROM (${scan}) AS d WHERE ${shortWhere.join(" AND ")} ORDER BY d.ts DESC, d.rowid DESC LIMIT ?`;
|
|
187
|
+
rows = this.db.prepare(sql).all(...args, SHORT_SCAN_ROWS, ...short, limit);
|
|
188
|
+
const scanned = this.db.prepare(`SELECT count(*) AS n FROM (${scan}) AS d`).get(...args, SHORT_SCAN_ROWS).n;
|
|
189
|
+
limited = scanned >= SHORT_SCAN_ROWS;
|
|
190
|
+
}
|
|
191
|
+
const terms = [...long, ...short];
|
|
192
|
+
return { hits: rows.map(r => ({ ...hitOf(r), ...snippetOf(r.text, terms) })), limited };
|
|
193
|
+
}
|
|
194
|
+
/** One doc by key, with (for a chat message) up to `around` messages of its chat before and after it. */
|
|
195
|
+
context(key, around = 8) {
|
|
196
|
+
const row = this.db.prepare("SELECT * FROM docs WHERE key = ?").get(key);
|
|
197
|
+
if (!row)
|
|
198
|
+
return null;
|
|
199
|
+
const full = (r) => ({ ...hitOf(r), snippet: "", marks: [], text: r.text });
|
|
200
|
+
if (row.source !== "chat")
|
|
201
|
+
return { doc: full(row), before: [], after: [] };
|
|
202
|
+
const before = this.db.prepare(`SELECT * FROM docs WHERE source = 'chat' AND instance = ? AND (ts < ? OR (ts = ? AND rowid < ?))
|
|
203
|
+
ORDER BY ts DESC, rowid DESC LIMIT ?`).all(row.instance, row.ts, row.ts, row.rowid, around).reverse();
|
|
204
|
+
const after = this.db.prepare(`SELECT * FROM docs WHERE source = 'chat' AND instance = ? AND (ts > ? OR (ts = ? AND rowid > ?))
|
|
205
|
+
ORDER BY ts, rowid LIMIT ?`).all(row.instance, row.ts, row.ts, row.rowid, around);
|
|
206
|
+
return { doc: full(row), before: before.map(full), after: after.map(full) };
|
|
207
|
+
}
|
|
208
|
+
close() { try {
|
|
209
|
+
this.db.close();
|
|
210
|
+
}
|
|
211
|
+
catch { /* already */ } }
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* What the index stores of a text: masked, then cut. An open tail is masked first too — the end of what arrived may
|
|
215
|
+
* already be a cut (the history's), and the rules for closed values would otherwise take part of its opener (a lone
|
|
216
|
+
* backslash of \" read as a bare value) — and again after the cut to TEXT_MAX.
|
|
217
|
+
*/
|
|
218
|
+
function indexedText(text) {
|
|
219
|
+
return maskOpenSecretTail(maskSecrets(maskOpenSecretTail(text.slice(0, TEXT_MAX + MASK_MARGIN))).slice(0, TEXT_MAX)).trim();
|
|
220
|
+
}
|
|
221
|
+
function hitOf(r) {
|
|
222
|
+
let ref = {};
|
|
223
|
+
try {
|
|
224
|
+
const v = JSON.parse(r.ref);
|
|
225
|
+
if (v && typeof v === "object" && !Array.isArray(v))
|
|
226
|
+
ref = v;
|
|
227
|
+
}
|
|
228
|
+
catch { /* {} */ }
|
|
229
|
+
return { key: r.key, source: r.source, instance: r.instance, peer: r.peer, sender: r.sender, role: r.role, ts: r.ts, ref };
|
|
230
|
+
}
|
|
231
|
+
function valid(d) {
|
|
232
|
+
return !!d && typeof d.key === "string" && d.key.length > 0 && d.key.length <= 300 && SEARCH_SOURCES.includes(d.source)
|
|
233
|
+
&& typeof d.instance === "string" && d.instance.length > 0 && typeof d.sender === "string" && typeof d.text === "string"
|
|
234
|
+
&& typeof d.ts === "number" && Number.isFinite(d.ts) && (d.peer === undefined || typeof d.peer === "string");
|
|
235
|
+
}
|
|
236
|
+
//# sourceMappingURL=search-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-store.js","sourceRoot":"","sources":["../../src/search/search-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* #2293: the search index's worker — it alone opens search.db, so no SQLite work of the index runs on the fleet's loop.
|
|
3
|
+
* The fleet posts batches of docs and queries (search-index.ts); this answers queries and says when it is ready and
|
|
4
|
+
* whether the index still needs its backfill. A corrupt file is moved aside (`search.db.corrupt-<stamp>`, with its -wal
|
|
5
|
+
* and -shm) and a fresh one opened — the fleet backfills it; any other failure to open ends the worker (search is then
|
|
6
|
+
* unavailable, the fleet runs on).
|
|
7
|
+
*
|
|
8
|
+
* The backfill of the two sources that live in SQLite is read here too, read-only: the outbox's cross-instance messages
|
|
9
|
+
* (its own retention: 30 days) and the Task Board. A page at a time, yielding between pages, so a query is answered
|
|
10
|
+
* while it runs.
|
|
11
|
+
*/
|
|
12
|
+
import { parentPort, workerData } from "node:worker_threads";
|
|
13
|
+
import { existsSync, renameSync } from "node:fs";
|
|
14
|
+
import Database from "better-sqlite3";
|
|
15
|
+
import { classifySqliteOpenError } from "../sqlite-open-errors.js";
|
|
16
|
+
import { SearchStore } from "./search-store.js";
|
|
17
|
+
import { taskDoc, xmsgDoc, xmsgFromOutbox } from "./search-docs.js";
|
|
18
|
+
const path = String(workerData?.path ?? "");
|
|
19
|
+
const port = parentPort;
|
|
20
|
+
let store = null;
|
|
21
|
+
function moveAside() {
|
|
22
|
+
const stamp = new Date().toISOString().replace(/[:.]/g, "-");
|
|
23
|
+
for (const suffix of ["", "-wal", "-shm"])
|
|
24
|
+
if (existsSync(path + suffix))
|
|
25
|
+
renameSync(path + suffix, `${path}.corrupt-${stamp}${suffix}`);
|
|
26
|
+
}
|
|
27
|
+
function open() {
|
|
28
|
+
try {
|
|
29
|
+
store = new SearchStore(path);
|
|
30
|
+
}
|
|
31
|
+
catch (err) {
|
|
32
|
+
if (classifySqliteOpenError(err) !== "corrupt") {
|
|
33
|
+
port.postMessage({ op: "failed", reason: String(err?.message ?? err) });
|
|
34
|
+
process.exit(0);
|
|
35
|
+
}
|
|
36
|
+
moveAside();
|
|
37
|
+
store = new SearchStore(path);
|
|
38
|
+
}
|
|
39
|
+
port.postMessage({ op: "ready", built: store.built() });
|
|
40
|
+
}
|
|
41
|
+
/** A corrupt file found while working: the same as at open — moved aside, a fresh index, a new backfill. */
|
|
42
|
+
function recover(err) {
|
|
43
|
+
if (classifySqliteOpenError(err) !== "corrupt")
|
|
44
|
+
return false;
|
|
45
|
+
store?.close();
|
|
46
|
+
store = null;
|
|
47
|
+
moveAside();
|
|
48
|
+
open();
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
const BACKFILL_PAGE = 500;
|
|
52
|
+
const MESSAGE_KINDS = ["fleet_inbound", "steer", "broadcast"];
|
|
53
|
+
const pause = () => new Promise(resolve => setImmediate(resolve));
|
|
54
|
+
function readOnly(file) {
|
|
55
|
+
if (!file || !existsSync(file))
|
|
56
|
+
return null;
|
|
57
|
+
try {
|
|
58
|
+
const db = new Database(file, { readonly: true, fileMustExist: true });
|
|
59
|
+
db.pragma("busy_timeout = 1000");
|
|
60
|
+
return db;
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/** The outbox's cross-instance messages since `cutoff`, then every task: what the fleet recorded before the index. */
|
|
67
|
+
async function backfill(outboxPath, schedulerPath, cutoff) {
|
|
68
|
+
let xmsg = 0, tasks = 0;
|
|
69
|
+
const outbox = readOnly(outboxPath);
|
|
70
|
+
if (outbox)
|
|
71
|
+
try {
|
|
72
|
+
const page = outbox.prepare(`SELECT created_seq AS seq, COALESCE(target_session, target_instance) AS target, created_at AS createdAt, payload_json AS payload, kind
|
|
73
|
+
FROM deliveries WHERE created_seq > ? AND kind IN (${MESSAGE_KINDS.map(() => "?").join(",")}) ORDER BY created_seq LIMIT ?`);
|
|
74
|
+
for (let after = -1;;) {
|
|
75
|
+
const rows = page.all(after, ...MESSAGE_KINDS, BACKFILL_PAGE);
|
|
76
|
+
if (!rows.length || !store)
|
|
77
|
+
break;
|
|
78
|
+
after = rows[rows.length - 1].seq;
|
|
79
|
+
const docs = rows.map(r => xmsgFromOutbox(r.target, r.createdAt, r.payload, r.kind)).map(r => (r ? xmsgDoc(r) : null)).filter(d => d !== null && d.ts >= cutoff);
|
|
80
|
+
xmsg += store.add(docs);
|
|
81
|
+
await pause();
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
catch { /* an outbox this can't read: its messages are not found, the rest is */ }
|
|
85
|
+
finally {
|
|
86
|
+
outbox.close();
|
|
87
|
+
}
|
|
88
|
+
const scheduler = readOnly(schedulerPath);
|
|
89
|
+
if (scheduler)
|
|
90
|
+
try {
|
|
91
|
+
const page = scheduler.prepare("SELECT rowid AS rid, id, title, description, result, status, assignee, created_by, created_at, updated_at FROM tasks WHERE rowid > ? ORDER BY rowid LIMIT ?");
|
|
92
|
+
for (let after = -1;;) {
|
|
93
|
+
const rows = page.all(after, BACKFILL_PAGE);
|
|
94
|
+
if (!rows.length || !store)
|
|
95
|
+
break;
|
|
96
|
+
after = rows[rows.length - 1].rid;
|
|
97
|
+
tasks += store.add(rows.map(taskDoc).filter(d => d !== null && d.ts >= cutoff));
|
|
98
|
+
await pause();
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
catch { /* the same for the Task Board */ }
|
|
102
|
+
finally {
|
|
103
|
+
scheduler.close();
|
|
104
|
+
}
|
|
105
|
+
return { xmsg, tasks };
|
|
106
|
+
}
|
|
107
|
+
port.on("message", (m) => {
|
|
108
|
+
if (!store)
|
|
109
|
+
return;
|
|
110
|
+
const reply = (value) => { if (m.id !== undefined)
|
|
111
|
+
port.postMessage({ op: "reply", id: m.id, ok: true, value }); };
|
|
112
|
+
try {
|
|
113
|
+
switch (m.op) {
|
|
114
|
+
// Acked once written: the fleet keeps a batch until then, and sends it again to a worker that replaces this one.
|
|
115
|
+
case "add":
|
|
116
|
+
store.add((m.docs ?? []));
|
|
117
|
+
if (m.batch !== undefined)
|
|
118
|
+
port.postMessage({ op: "added", batch: m.batch });
|
|
119
|
+
break;
|
|
120
|
+
case "markBuilt":
|
|
121
|
+
store.markBuilt(Number(m.now) || Date.now());
|
|
122
|
+
break;
|
|
123
|
+
case "removeInstance":
|
|
124
|
+
if (typeof m.instance === "string") {
|
|
125
|
+
store.removeInstance(m.instance);
|
|
126
|
+
port.postMessage({ op: "removed", instance: m.instance, gen: m.gen });
|
|
127
|
+
}
|
|
128
|
+
break;
|
|
129
|
+
case "query":
|
|
130
|
+
reply(store.search(m.filters));
|
|
131
|
+
break;
|
|
132
|
+
case "context":
|
|
133
|
+
reply(store.context(String(m.key ?? "")));
|
|
134
|
+
break;
|
|
135
|
+
case "prune":
|
|
136
|
+
reply(store.prune(Number(m.cutoff) || 0));
|
|
137
|
+
break;
|
|
138
|
+
case "count":
|
|
139
|
+
reply(store.count());
|
|
140
|
+
break;
|
|
141
|
+
case "backfill":
|
|
142
|
+
void backfill(m.outboxPath, m.schedulerPath, Number(m.cutoff) || 0).then(reply, err => {
|
|
143
|
+
if (m.id !== undefined)
|
|
144
|
+
port.postMessage({ op: "reply", id: m.id, ok: false, error: String(err?.message ?? err) });
|
|
145
|
+
});
|
|
146
|
+
break;
|
|
147
|
+
case "close":
|
|
148
|
+
store.close();
|
|
149
|
+
store = null;
|
|
150
|
+
process.exit(0);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
catch (err) {
|
|
154
|
+
if (m.id !== undefined)
|
|
155
|
+
port.postMessage({ op: "reply", id: m.id, ok: false, error: String(err?.message ?? err) });
|
|
156
|
+
// A corrupt file: a fresh one, announced as not built (the fleet sends its uncommitted batches again and backfills).
|
|
157
|
+
// Any other failed write is let go (acked): sent again it would fail again.
|
|
158
|
+
if (!recover(err) && m.op === "add" && m.batch !== undefined)
|
|
159
|
+
port.postMessage({ op: "added", batch: m.batch });
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
open();
|
|
163
|
+
//# sourceMappingURL=search-worker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-worker.js","sourceRoot":"","sources":["../../src/search/search-worker.ts"],"names":[],"mappings":"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"}
|
package/dist/secret-file.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secret-file.js","sourceRoot":"","sources":["../src/secret-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7D,iFAAiF;AACjF,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAgCtC,mFAAmF;AACnF,MAAM,CAAC,MAAM,iBAAiB,GAAkB;IAC9C,KAAK,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC;IACtE,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC;IAC5C,IAAI,EAAE,QAAQ;CACf,CAAC;AAEF,MAAM,UAAU,eAAe,CAC7B,IAAY,EACZ,OAAe,EACf,
|
|
1
|
+
{"version":3,"file":"secret-file.js","sourceRoot":"","sources":["../src/secret-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7D,iFAAiF;AACjF,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAgCtC,mFAAmF;AACnF,MAAM,CAAC,MAAM,iBAAiB,GAAkB;IAC9C,KAAK,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC;IACtE,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC;IAC5C,IAAI,EAAE,QAAQ;CACf,CAAC;AAEF,MAAM,UAAU,eAAe,CAC7B,IAAY,EACZ,OAAe,EACf,GAAG,GAAkB,iBAAiB;IAEtC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,gBAAgB,CAAC,CAAC;IAC3C,IAAI,CAAC;QACH,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;IACpC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAG,GAAa,CAAC,OAAO,EAAE,CAAC;IAC7E,CAAC;IACD,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5B,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,uCAAuC,EAAE,CAAC;IAC/F,gFAAgF;IAChF,mEAAmE;IACnE,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,mBAAmB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,uBAAuB,EAAE,CAAC;IACjG,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC5B,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY;IAC5B,IAAI,CAAC;QACH,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
package/dist/secret-store.d.ts
CHANGED
|
@@ -26,5 +26,7 @@ export declare class SecretStore {
|
|
|
26
26
|
restore(snapshot: SecretSnapshot): void;
|
|
27
27
|
/** Never compensate over a later in-process or independent host write. */
|
|
28
28
|
restoreIfCurrent(snapshot: SecretSnapshot): void;
|
|
29
|
+
/** Empty override prevents an inherited launcher secret returning after restart. */
|
|
30
|
+
clear(key: string): SecretSnapshot;
|
|
29
31
|
write(key: string, value: string): SecretSnapshot;
|
|
30
32
|
}
|
package/dist/secret-store.js
CHANGED
|
@@ -160,6 +160,27 @@ export class SecretStore {
|
|
|
160
160
|
throw new Error("secret rollback conflict");
|
|
161
161
|
this.restore(snapshot);
|
|
162
162
|
}
|
|
163
|
+
/** Empty override prevents an inherited launcher secret returning after restart. */
|
|
164
|
+
clear(key) {
|
|
165
|
+
assertSettingsLease(settingsFileResource(this.path), this.owner);
|
|
166
|
+
this.validateKey(key);
|
|
167
|
+
const before = this.snapshot();
|
|
168
|
+
const content = before.content.split(/\r?\n/).filter(line => {
|
|
169
|
+
const assignment = line.match(/^\s*(?:export\s+)?([A-Za-z_][A-Za-z0-9_]*)\s*=/);
|
|
170
|
+
return assignment?.[1] !== key;
|
|
171
|
+
}).join("\n");
|
|
172
|
+
try {
|
|
173
|
+
this.replace(upsertSecretEnvLine(content, key, ""));
|
|
174
|
+
}
|
|
175
|
+
catch (err) {
|
|
176
|
+
try {
|
|
177
|
+
this.restore(before);
|
|
178
|
+
}
|
|
179
|
+
catch { /* caller reports rollback failure */ }
|
|
180
|
+
throw err;
|
|
181
|
+
}
|
|
182
|
+
return before;
|
|
183
|
+
}
|
|
163
184
|
write(key, value) {
|
|
164
185
|
assertSettingsLease(settingsFileResource(this.path), this.owner);
|
|
165
186
|
this.validateKey(key);
|
package/dist/secret-store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secret-store.js","sourceRoot":"","sources":["../src/secret-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAChJ;;;;;;;GAOG;AACH,OAAO,EACL,SAAS,EAET,SAAS,EACT,SAAS,EACT,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,UAAU,EACV,SAAS,EACT,SAAS,GACV,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,CAAC,MAAM,cAAc,GAAG,gCAAgC,CAAC;AAC/D,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC;IAChC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY;CAChF,CAAC,CAAC;AAaH,SAAS,cAAc,CAAC,IAAY,EAAE,KAA2B;IAC/D,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC/B,IAAI,CAAC;QAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAAC,CAAC;YAAS,CAAC;QAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAAC,CAAC;AAC/C,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,mBAAmB,CAAC,QAAgB,EAAE,GAAW,EAAE,KAAa;IAC9E,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACtC,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;QAC3E,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC;QAC5C,QAAQ,GAAG,IAAI,CAAC;QAChB,OAAO,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;IAC3B,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE;YAAE,IAAI,CAAC,GAAG,EAAE,CAAC;QAC/D,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,OAAO,WAAW;IAMX;
|
|
1
|
+
{"version":3,"file":"secret-store.js","sourceRoot":"","sources":["../src/secret-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -200,6 +200,79 @@ export type UnitHardeningResult = {
|
|
|
200
200
|
export declare function ensureSystemdUnitHardening(unitPath: string, opts?: {
|
|
201
201
|
dropInPaths?: readonly string[];
|
|
202
202
|
}): UnitHardeningResult;
|
|
203
|
+
/** #2331: does a unit file's own [Service] say Type=notify (its last assignment)? */
|
|
204
|
+
export declare function serviceTypeIsNotify(unitText: string): boolean;
|
|
205
|
+
/** #2331: AgEnD's own drop-in, named to sort after an operator's, that puts NotifyAccess back to `all`. */
|
|
206
|
+
export declare const NOTIFY_DROPIN = "zz-agend-notify.conf";
|
|
207
|
+
export interface LoadedNotify {
|
|
208
|
+
type: string;
|
|
209
|
+
notifyAccess: string;
|
|
210
|
+
timeoutStart: string;
|
|
211
|
+
fragment: string;
|
|
212
|
+
dropIns: string[];
|
|
213
|
+
}
|
|
214
|
+
/** What systemd has LOADED for the unit (never the file: #1804), through `show` — `systemctl show -p <prop> --value`. */
|
|
215
|
+
export declare function readLoadedNotify(show: (property: string) => string | null): LoadedNotify | null;
|
|
216
|
+
export type NotifyRepair = {
|
|
217
|
+
kind: "fine";
|
|
218
|
+
} | {
|
|
219
|
+
kind: "unknown";
|
|
220
|
+
} | {
|
|
221
|
+
kind: "repaired";
|
|
222
|
+
path: string;
|
|
223
|
+
from: string;
|
|
224
|
+
dropIns: string[];
|
|
225
|
+
} | {
|
|
226
|
+
kind: "refused";
|
|
227
|
+
notifyAccess: string;
|
|
228
|
+
dropIns: string[];
|
|
229
|
+
detail: string;
|
|
230
|
+
};
|
|
231
|
+
/** Write AgEnD's drop-in for a unit file; returns its path. */
|
|
232
|
+
export declare function writeNotifyDropIn(unitPath: string): string;
|
|
233
|
+
/**
|
|
234
|
+
* #2331: a Type=notify unit must LOAD NotifyAccess=all, or systemd refuses the fleet's READY and restarts it when the
|
|
235
|
+
* start times out. The main file is fixed by the hardening above; what is still wrong after a reload comes from a
|
|
236
|
+
* drop-in AgEnD did not write. Rather than touch the operator's file, AgEnD adds its own last-sorting drop-in, reloads
|
|
237
|
+
* and asks systemd again. `reload` reloads the manager; `write` writes the drop-in (tests).
|
|
238
|
+
*/
|
|
239
|
+
export declare function ensureLoadedNotifyAccess(unitPath: string | null, show: (property: string) => string | null, reload: () => boolean, write?: (unitPath: string) => string): NotifyRepair;
|
|
240
|
+
/** What a repair says, one line each ("" for nothing). */
|
|
241
|
+
export declare function notifyRepairLines(r: NotifyRepair, unit: string, reloadCmd: string): string[];
|
|
242
|
+
export interface ServiceLeftover {
|
|
243
|
+
path: string;
|
|
244
|
+
detail: string;
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* #2331: service files AgEnD did not write, or no longer uses, that can change how the fleet starts: drop-ins that set
|
|
248
|
+
* the directives above, a user unit beside the system unit that runs the fleet, units and plists under AgEnD's old
|
|
249
|
+
* labels. Reported, never removed: AgEnD writes no drop-in but its own zz-agend-notify.conf, and the others may be
|
|
250
|
+
* someone's on purpose. They are named on every install, start and restart until they are gone (facts about the host).
|
|
251
|
+
*/
|
|
252
|
+
export declare function serviceLeftovers(o: {
|
|
253
|
+
home: string;
|
|
254
|
+
dropIns: readonly string[];
|
|
255
|
+
systemUnit: string | null;
|
|
256
|
+
userUnitPath?: string;
|
|
257
|
+
}): ServiceLeftover[];
|
|
258
|
+
/**
|
|
259
|
+
* #2331: after a reload, the fleet's unit as systemd loaded it — NotifyAccess made right if a drop-in got in the way,
|
|
260
|
+
* and any leftovers named. One line each, for install, start and restart to print.
|
|
261
|
+
*/
|
|
262
|
+
export declare function loadedUnitCheck(o: {
|
|
263
|
+
user: boolean;
|
|
264
|
+
unit: string;
|
|
265
|
+
unitPath: string | null;
|
|
266
|
+
home?: string;
|
|
267
|
+
}): string[];
|
|
268
|
+
/** Report effective policy, never replace an operator override or add a restart refusal. */
|
|
269
|
+
export declare function loadedOomPolicyLines(policy: string | null, unit: string, details: {
|
|
270
|
+
fragment: string | null;
|
|
271
|
+
dropIns: readonly string[];
|
|
272
|
+
user: boolean;
|
|
273
|
+
}): string[];
|
|
274
|
+
/** What #2331 reads of a loaded unit, in one `systemctl show -p …`. */
|
|
275
|
+
export declare const LOADED_PROPERTIES: readonly ["Type", "NotifyAccess", "TimeoutStartUSec", "FragmentPath", "DropInPaths", "OOMPolicy"];
|
|
203
276
|
export type ServiceState = "running" | "stopped" | "unavailable";
|
|
204
277
|
/**
|
|
205
278
|
* Keep service-manager reachability separate from unit state. In particular,
|
|
@@ -235,8 +308,32 @@ export declare function restartSystemdService(label: string, user?: boolean, run
|
|
|
235
308
|
export declare function getServicePath(): string | null;
|
|
236
309
|
/** Legacy/root installs may use a system-level unit instead of the user unit. */
|
|
237
310
|
export declare function getSystemServicePath(): string | null;
|
|
238
|
-
|
|
311
|
+
/**
|
|
312
|
+
* #2505: how long `agend stop` waits for launchd to unload the job after bootout. bootout returns while the fleet is
|
|
313
|
+
* still shutting down (the job SIGTERMed); launchd SIGKILLs it after the plist's ExitTimeOut — its default, 20 s, as
|
|
314
|
+
* AgEnD's plist sets none — so 30 s covers a whole graceful stop.
|
|
315
|
+
*/
|
|
316
|
+
export declare const LAUNCHD_STOP_CONFIRM_MS = 30000;
|
|
317
|
+
/**
|
|
318
|
+
* Stop the user service. On macOS, only once launchd has unloaded the job (#2505): bootout returns before that, and an
|
|
319
|
+
* `agend start` in between failed with "Bootstrap failed: 5: Input/output error". "unloading": launchd still had the job
|
|
320
|
+
* when the bound ran out. False: the service manager refused the stop (not loaded, no session). Callers compare the
|
|
321
|
+
* result, never test its truth: "unloading" is not stopped (serviceStopReport says what `agend stop` does with each).
|
|
322
|
+
*/
|
|
323
|
+
export type ServiceStopResult = "stopped" | "unloading" | false;
|
|
324
|
+
export declare function stopService(deps?: LaunchdReloadDeps): ServiceStopResult;
|
|
325
|
+
/**
|
|
326
|
+
* What `agend stop` does with a user-service stop result (#2505): "stopped" says so; "unloading" says launchd still has
|
|
327
|
+
* the job (an `agend start` now would fail) and exits 1; a refusal ("fallback") stops the fleet by its pid instead.
|
|
328
|
+
*/
|
|
329
|
+
export declare function serviceStopReport(result: ServiceStopResult): {
|
|
330
|
+
kind: "stopped" | "unloading" | "fallback";
|
|
331
|
+
line?: string;
|
|
332
|
+
exitCode: 0 | 1;
|
|
333
|
+
};
|
|
239
334
|
export declare function startService(): boolean;
|
|
335
|
+
/** #2356: `agend stop` on a system unit (root or a legacy install). */
|
|
336
|
+
export declare function stopSystemService(): boolean;
|
|
240
337
|
export declare function startSystemService(): boolean;
|
|
241
338
|
export declare function activateService(plistPath: string, pidPath: string): void;
|
|
242
339
|
export {};
|