@aitne/daemon 0.1.0
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/LICENSE +21 -0
- package/dist/adapters/composite-dashboard-stream.d.ts +42 -0
- package/dist/adapters/composite-dashboard-stream.d.ts.map +1 -0
- package/dist/adapters/composite-dashboard-stream.js +49 -0
- package/dist/adapters/composite-dashboard-stream.js.map +1 -0
- package/dist/adapters/dashboard-adapter.d.ts +104 -0
- package/dist/adapters/dashboard-adapter.d.ts.map +1 -0
- package/dist/adapters/dashboard-adapter.js +216 -0
- package/dist/adapters/dashboard-adapter.js.map +1 -0
- package/dist/adapters/discord.d.ts +77 -0
- package/dist/adapters/discord.d.ts.map +1 -0
- package/dist/adapters/discord.js +339 -0
- package/dist/adapters/discord.js.map +1 -0
- package/dist/adapters/docs-qa-adapter.d.ts +123 -0
- package/dist/adapters/docs-qa-adapter.d.ts.map +1 -0
- package/dist/adapters/docs-qa-adapter.js +218 -0
- package/dist/adapters/docs-qa-adapter.js.map +1 -0
- package/dist/adapters/message-hub.d.ts +70 -0
- package/dist/adapters/message-hub.d.ts.map +1 -0
- package/dist/adapters/message-hub.js +359 -0
- package/dist/adapters/message-hub.js.map +1 -0
- package/dist/adapters/notification-manager.d.ts +99 -0
- package/dist/adapters/notification-manager.d.ts.map +1 -0
- package/dist/adapters/notification-manager.js +498 -0
- package/dist/adapters/notification-manager.js.map +1 -0
- package/dist/adapters/outbound-text.d.ts +28 -0
- package/dist/adapters/outbound-text.d.ts.map +1 -0
- package/dist/adapters/outbound-text.js +58 -0
- package/dist/adapters/outbound-text.js.map +1 -0
- package/dist/adapters/slack-adapter.d.ts +82 -0
- package/dist/adapters/slack-adapter.d.ts.map +1 -0
- package/dist/adapters/slack-adapter.js +359 -0
- package/dist/adapters/slack-adapter.js.map +1 -0
- package/dist/adapters/telegram-adapter.d.ts +107 -0
- package/dist/adapters/telegram-adapter.d.ts.map +1 -0
- package/dist/adapters/telegram-adapter.js +477 -0
- package/dist/adapters/telegram-adapter.js.map +1 -0
- package/dist/adapters/types.d.ts +92 -0
- package/dist/adapters/types.d.ts.map +1 -0
- package/dist/adapters/types.js +2 -0
- package/dist/adapters/types.js.map +1 -0
- package/dist/adapters/whatsapp-adapter.d.ts +213 -0
- package/dist/adapters/whatsapp-adapter.d.ts.map +1 -0
- package/dist/adapters/whatsapp-adapter.js +1216 -0
- package/dist/adapters/whatsapp-adapter.js.map +1 -0
- package/dist/api/chat-binding-query.d.ts +36 -0
- package/dist/api/chat-binding-query.d.ts.map +1 -0
- package/dist/api/chat-binding-query.js +63 -0
- package/dist/api/chat-binding-query.js.map +1 -0
- package/dist/api/chat-session-resume.d.ts +12 -0
- package/dist/api/chat-session-resume.d.ts.map +1 -0
- package/dist/api/chat-session-resume.js +21 -0
- package/dist/api/chat-session-resume.js.map +1 -0
- package/dist/api/delegated-proxy-helper.d.ts +33 -0
- package/dist/api/delegated-proxy-helper.d.ts.map +1 -0
- package/dist/api/delegated-proxy-helper.js +54 -0
- package/dist/api/delegated-proxy-helper.js.map +1 -0
- package/dist/api/directory-picker.d.ts +38 -0
- package/dist/api/directory-picker.d.ts.map +1 -0
- package/dist/api/directory-picker.js +278 -0
- package/dist/api/directory-picker.js.map +1 -0
- package/dist/api/env-writer.d.ts +25 -0
- package/dist/api/env-writer.d.ts.map +1 -0
- package/dist/api/env-writer.js +421 -0
- package/dist/api/env-writer.js.map +1 -0
- package/dist/api/integration-route-gate.d.ts +60 -0
- package/dist/api/integration-route-gate.d.ts.map +1 -0
- package/dist/api/integration-route-gate.js +83 -0
- package/dist/api/integration-route-gate.js.map +1 -0
- package/dist/api/json-body.d.ts +29 -0
- package/dist/api/json-body.d.ts.map +1 -0
- package/dist/api/json-body.js +87 -0
- package/dist/api/json-body.js.map +1 -0
- package/dist/api/routes/activity-sources.d.ts +20 -0
- package/dist/api/routes/activity-sources.d.ts.map +1 -0
- package/dist/api/routes/activity-sources.js +18 -0
- package/dist/api/routes/activity-sources.js.map +1 -0
- package/dist/api/routes/agent.d.ts +4 -0
- package/dist/api/routes/agent.d.ts.map +1 -0
- package/dist/api/routes/agent.js +619 -0
- package/dist/api/routes/agent.js.map +1 -0
- package/dist/api/routes/apple-calendar.d.ts +31 -0
- package/dist/api/routes/apple-calendar.d.ts.map +1 -0
- package/dist/api/routes/apple-calendar.js +310 -0
- package/dist/api/routes/apple-calendar.js.map +1 -0
- package/dist/api/routes/attachments.d.ts +36 -0
- package/dist/api/routes/attachments.d.ts.map +1 -0
- package/dist/api/routes/attachments.js +305 -0
- package/dist/api/routes/attachments.js.map +1 -0
- package/dist/api/routes/backends.d.ts +4 -0
- package/dist/api/routes/backends.d.ts.map +1 -0
- package/dist/api/routes/backends.js +1132 -0
- package/dist/api/routes/backends.js.map +1 -0
- package/dist/api/routes/books.d.ts +63 -0
- package/dist/api/routes/books.d.ts.map +1 -0
- package/dist/api/routes/books.js +467 -0
- package/dist/api/routes/books.js.map +1 -0
- package/dist/api/routes/calendar.d.ts +36 -0
- package/dist/api/routes/calendar.d.ts.map +1 -0
- package/dist/api/routes/calendar.js +351 -0
- package/dist/api/routes/calendar.js.map +1 -0
- package/dist/api/routes/commands.d.ts +4 -0
- package/dist/api/routes/commands.d.ts.map +1 -0
- package/dist/api/routes/commands.js +251 -0
- package/dist/api/routes/commands.js.map +1 -0
- package/dist/api/routes/context.d.ts +57 -0
- package/dist/api/routes/context.d.ts.map +1 -0
- package/dist/api/routes/context.js +1765 -0
- package/dist/api/routes/context.js.map +1 -0
- package/dist/api/routes/dashboard.d.ts +29 -0
- package/dist/api/routes/dashboard.d.ts.map +1 -0
- package/dist/api/routes/dashboard.js +2062 -0
- package/dist/api/routes/dashboard.js.map +1 -0
- package/dist/api/routes/delegated-sync.d.ts +4 -0
- package/dist/api/routes/delegated-sync.d.ts.map +1 -0
- package/dist/api/routes/delegated-sync.js +192 -0
- package/dist/api/routes/delegated-sync.js.map +1 -0
- package/dist/api/routes/delegated.d.ts +42 -0
- package/dist/api/routes/delegated.d.ts.map +1 -0
- package/dist/api/routes/delegated.js +250 -0
- package/dist/api/routes/delegated.js.map +1 -0
- package/dist/api/routes/docs.d.ts +34 -0
- package/dist/api/routes/docs.d.ts.map +1 -0
- package/dist/api/routes/docs.js +580 -0
- package/dist/api/routes/docs.js.map +1 -0
- package/dist/api/routes/entities.d.ts +9 -0
- package/dist/api/routes/entities.d.ts.map +1 -0
- package/dist/api/routes/entities.js +176 -0
- package/dist/api/routes/entities.js.map +1 -0
- package/dist/api/routes/git-accounts.d.ts +23 -0
- package/dist/api/routes/git-accounts.d.ts.map +1 -0
- package/dist/api/routes/git-accounts.js +227 -0
- package/dist/api/routes/git-accounts.js.map +1 -0
- package/dist/api/routes/git-templates.d.ts +50 -0
- package/dist/api/routes/git-templates.d.ts.map +1 -0
- package/dist/api/routes/git-templates.js +276 -0
- package/dist/api/routes/git-templates.js.map +1 -0
- package/dist/api/routes/git.d.ts +34 -0
- package/dist/api/routes/git.d.ts.map +1 -0
- package/dist/api/routes/git.js +126 -0
- package/dist/api/routes/git.js.map +1 -0
- package/dist/api/routes/github.d.ts +34 -0
- package/dist/api/routes/github.d.ts.map +1 -0
- package/dist/api/routes/github.js +465 -0
- package/dist/api/routes/github.js.map +1 -0
- package/dist/api/routes/health.d.ts +4 -0
- package/dist/api/routes/health.d.ts.map +1 -0
- package/dist/api/routes/health.js +257 -0
- package/dist/api/routes/health.js.map +1 -0
- package/dist/api/routes/integrations-reconcile.d.ts +33 -0
- package/dist/api/routes/integrations-reconcile.d.ts.map +1 -0
- package/dist/api/routes/integrations-reconcile.js +463 -0
- package/dist/api/routes/integrations-reconcile.js.map +1 -0
- package/dist/api/routes/integrations.d.ts +19 -0
- package/dist/api/routes/integrations.d.ts.map +1 -0
- package/dist/api/routes/integrations.js +1384 -0
- package/dist/api/routes/integrations.js.map +1 -0
- package/dist/api/routes/knowledge.d.ts +4 -0
- package/dist/api/routes/knowledge.d.ts.map +1 -0
- package/dist/api/routes/knowledge.js +224 -0
- package/dist/api/routes/knowledge.js.map +1 -0
- package/dist/api/routes/mail.d.ts +39 -0
- package/dist/api/routes/mail.d.ts.map +1 -0
- package/dist/api/routes/mail.js +1406 -0
- package/dist/api/routes/mail.js.map +1 -0
- package/dist/api/routes/managed-tasks.d.ts +48 -0
- package/dist/api/routes/managed-tasks.d.ts.map +1 -0
- package/dist/api/routes/managed-tasks.js +844 -0
- package/dist/api/routes/managed-tasks.js.map +1 -0
- package/dist/api/routes/mcp.d.ts +50 -0
- package/dist/api/routes/mcp.d.ts.map +1 -0
- package/dist/api/routes/mcp.js +470 -0
- package/dist/api/routes/mcp.js.map +1 -0
- package/dist/api/routes/metrics.d.ts +13 -0
- package/dist/api/routes/metrics.d.ts.map +1 -0
- package/dist/api/routes/metrics.js +117 -0
- package/dist/api/routes/metrics.js.map +1 -0
- package/dist/api/routes/notion.d.ts +35 -0
- package/dist/api/routes/notion.d.ts.map +1 -0
- package/dist/api/routes/notion.js +442 -0
- package/dist/api/routes/notion.js.map +1 -0
- package/dist/api/routes/observations.d.ts +4 -0
- package/dist/api/routes/observations.d.ts.map +1 -0
- package/dist/api/routes/observations.js +177 -0
- package/dist/api/routes/observations.js.map +1 -0
- package/dist/api/routes/obsidian.d.ts +16 -0
- package/dist/api/routes/obsidian.d.ts.map +1 -0
- package/dist/api/routes/obsidian.js +321 -0
- package/dist/api/routes/obsidian.js.map +1 -0
- package/dist/api/routes/profile-questions.d.ts +17 -0
- package/dist/api/routes/profile-questions.d.ts.map +1 -0
- package/dist/api/routes/profile-questions.js +115 -0
- package/dist/api/routes/profile-questions.js.map +1 -0
- package/dist/api/routes/receipts.d.ts +4 -0
- package/dist/api/routes/receipts.d.ts.map +1 -0
- package/dist/api/routes/receipts.js +155 -0
- package/dist/api/routes/receipts.js.map +1 -0
- package/dist/api/routes/recurring-schedules.d.ts +4 -0
- package/dist/api/routes/recurring-schedules.d.ts.map +1 -0
- package/dist/api/routes/recurring-schedules.js +137 -0
- package/dist/api/routes/recurring-schedules.js.map +1 -0
- package/dist/api/routes/repositories.d.ts +40 -0
- package/dist/api/routes/repositories.d.ts.map +1 -0
- package/dist/api/routes/repositories.js +857 -0
- package/dist/api/routes/repositories.js.map +1 -0
- package/dist/api/routes/setup-migrate.d.ts +74 -0
- package/dist/api/routes/setup-migrate.d.ts.map +1 -0
- package/dist/api/routes/setup-migrate.js +944 -0
- package/dist/api/routes/setup-migrate.js.map +1 -0
- package/dist/api/routes/setup.d.ts +4 -0
- package/dist/api/routes/setup.d.ts.map +1 -0
- package/dist/api/routes/setup.js +443 -0
- package/dist/api/routes/setup.js.map +1 -0
- package/dist/api/routes/skill-curation.d.ts +5 -0
- package/dist/api/routes/skill-curation.d.ts.map +1 -0
- package/dist/api/routes/skill-curation.js +728 -0
- package/dist/api/routes/skill-curation.js.map +1 -0
- package/dist/api/routes/skills.d.ts +52 -0
- package/dist/api/routes/skills.d.ts.map +1 -0
- package/dist/api/routes/skills.js +429 -0
- package/dist/api/routes/skills.js.map +1 -0
- package/dist/api/routes/sot-bindings.d.ts +20 -0
- package/dist/api/routes/sot-bindings.d.ts.map +1 -0
- package/dist/api/routes/sot-bindings.js +163 -0
- package/dist/api/routes/sot-bindings.js.map +1 -0
- package/dist/api/routes/sse.d.ts +86 -0
- package/dist/api/routes/sse.d.ts.map +1 -0
- package/dist/api/routes/sse.js +378 -0
- package/dist/api/routes/sse.js.map +1 -0
- package/dist/api/routes/system.d.ts +4 -0
- package/dist/api/routes/system.d.ts.map +1 -0
- package/dist/api/routes/system.js +207 -0
- package/dist/api/routes/system.js.map +1 -0
- package/dist/api/routes/task-flows.d.ts +30 -0
- package/dist/api/routes/task-flows.d.ts.map +1 -0
- package/dist/api/routes/task-flows.js +155 -0
- package/dist/api/routes/task-flows.js.map +1 -0
- package/dist/api/routes/travel-bookings.d.ts +4 -0
- package/dist/api/routes/travel-bookings.d.ts.map +1 -0
- package/dist/api/routes/travel-bookings.js +142 -0
- package/dist/api/routes/travel-bookings.js.map +1 -0
- package/dist/api/routes/travel-time.d.ts +8 -0
- package/dist/api/routes/travel-time.d.ts.map +1 -0
- package/dist/api/routes/travel-time.js +87 -0
- package/dist/api/routes/travel-time.js.map +1 -0
- package/dist/api/routes/triggers.d.ts +4 -0
- package/dist/api/routes/triggers.d.ts.map +1 -0
- package/dist/api/routes/triggers.js +101 -0
- package/dist/api/routes/triggers.js.map +1 -0
- package/dist/api/routes/voice.d.ts +48 -0
- package/dist/api/routes/voice.d.ts.map +1 -0
- package/dist/api/routes/voice.js +232 -0
- package/dist/api/routes/voice.js.map +1 -0
- package/dist/api/server.d.ts +428 -0
- package/dist/api/server.d.ts.map +1 -0
- package/dist/api/server.js +558 -0
- package/dist/api/server.js.map +1 -0
- package/dist/config.d.ts +136 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +699 -0
- package/dist/config.js.map +1 -0
- package/dist/core/agent-core.d.ts +517 -0
- package/dist/core/agent-core.d.ts.map +1 -0
- package/dist/core/agent-core.js +102 -0
- package/dist/core/agent-core.js.map +1 -0
- package/dist/core/alerts.d.ts +86 -0
- package/dist/core/alerts.d.ts.map +1 -0
- package/dist/core/alerts.js +304 -0
- package/dist/core/alerts.js.map +1 -0
- package/dist/core/atomic-write.d.ts +51 -0
- package/dist/core/atomic-write.d.ts.map +1 -0
- package/dist/core/atomic-write.js +135 -0
- package/dist/core/atomic-write.js.map +1 -0
- package/dist/core/backends/api-key-probe.d.ts +40 -0
- package/dist/core/backends/api-key-probe.d.ts.map +1 -0
- package/dist/core/backends/api-key-probe.js +116 -0
- package/dist/core/backends/api-key-probe.js.map +1 -0
- package/dist/core/backends/auth-health-monitor.d.ts +373 -0
- package/dist/core/backends/auth-health-monitor.d.ts.map +1 -0
- package/dist/core/backends/auth-health-monitor.js +950 -0
- package/dist/core/backends/auth-health-monitor.js.map +1 -0
- package/dist/core/backends/auth-recovery.d.ts +263 -0
- package/dist/core/backends/auth-recovery.d.ts.map +1 -0
- package/dist/core/backends/auth-recovery.js +1086 -0
- package/dist/core/backends/auth-recovery.js.map +1 -0
- package/dist/core/backends/auth-telemetry.d.ts +81 -0
- package/dist/core/backends/auth-telemetry.d.ts.map +1 -0
- package/dist/core/backends/auth-telemetry.js +108 -0
- package/dist/core/backends/auth-telemetry.js.map +1 -0
- package/dist/core/backends/backend-router.d.ts +272 -0
- package/dist/core/backends/backend-router.d.ts.map +1 -0
- package/dist/core/backends/backend-router.js +759 -0
- package/dist/core/backends/backend-router.js.map +1 -0
- package/dist/core/backends/claude-code-core.d.ts +299 -0
- package/dist/core/backends/claude-code-core.d.ts.map +1 -0
- package/dist/core/backends/claude-code-core.js +2541 -0
- package/dist/core/backends/claude-code-core.js.map +1 -0
- package/dist/core/backends/claude-credentials-store.d.ts +83 -0
- package/dist/core/backends/claude-credentials-store.d.ts.map +1 -0
- package/dist/core/backends/claude-credentials-store.js +243 -0
- package/dist/core/backends/claude-credentials-store.js.map +1 -0
- package/dist/core/backends/cli-utils.d.ts +95 -0
- package/dist/core/backends/cli-utils.d.ts.map +1 -0
- package/dist/core/backends/cli-utils.js +464 -0
- package/dist/core/backends/cli-utils.js.map +1 -0
- package/dist/core/backends/codex-core.d.ts +127 -0
- package/dist/core/backends/codex-core.d.ts.map +1 -0
- package/dist/core/backends/codex-core.js +1693 -0
- package/dist/core/backends/codex-core.js.map +1 -0
- package/dist/core/backends/gemini-cli-core.d.ts +367 -0
- package/dist/core/backends/gemini-cli-core.d.ts.map +1 -0
- package/dist/core/backends/gemini-cli-core.js +2331 -0
- package/dist/core/backends/gemini-cli-core.js.map +1 -0
- package/dist/core/backends/idle-watchdog.d.ts +77 -0
- package/dist/core/backends/idle-watchdog.d.ts.map +1 -0
- package/dist/core/backends/idle-watchdog.js +94 -0
- package/dist/core/backends/idle-watchdog.js.map +1 -0
- package/dist/core/backends/install-methods.d.ts +93 -0
- package/dist/core/backends/install-methods.d.ts.map +1 -0
- package/dist/core/backends/install-methods.js +267 -0
- package/dist/core/backends/install-methods.js.map +1 -0
- package/dist/core/backends/model-registry.d.ts +58 -0
- package/dist/core/backends/model-registry.d.ts.map +1 -0
- package/dist/core/backends/model-registry.js +539 -0
- package/dist/core/backends/model-registry.js.map +1 -0
- package/dist/core/backends/plan-presets.d.ts +123 -0
- package/dist/core/backends/plan-presets.d.ts.map +1 -0
- package/dist/core/backends/plan-presets.js +235 -0
- package/dist/core/backends/plan-presets.js.map +1 -0
- package/dist/core/backends/price-fetcher.d.ts +48 -0
- package/dist/core/backends/price-fetcher.d.ts.map +1 -0
- package/dist/core/backends/price-fetcher.js +248 -0
- package/dist/core/backends/price-fetcher.js.map +1 -0
- package/dist/core/backends/process-config-cascade.d.ts +68 -0
- package/dist/core/backends/process-config-cascade.d.ts.map +1 -0
- package/dist/core/backends/process-config-cascade.js +173 -0
- package/dist/core/backends/process-config-cascade.js.map +1 -0
- package/dist/core/backends/prompt-utils.d.ts +6 -0
- package/dist/core/backends/prompt-utils.d.ts.map +1 -0
- package/dist/core/backends/prompt-utils.js +80 -0
- package/dist/core/backends/prompt-utils.js.map +1 -0
- package/dist/core/backends/proxy-model-registry.d.ts +110 -0
- package/dist/core/backends/proxy-model-registry.d.ts.map +1 -0
- package/dist/core/backends/proxy-model-registry.js +195 -0
- package/dist/core/backends/proxy-model-registry.js.map +1 -0
- package/dist/core/backends/silent-api-error-detector.d.ts +31 -0
- package/dist/core/backends/silent-api-error-detector.d.ts.map +1 -0
- package/dist/core/backends/silent-api-error-detector.js +44 -0
- package/dist/core/backends/silent-api-error-detector.js.map +1 -0
- package/dist/core/bang-commands/commands-cost.d.ts +13 -0
- package/dist/core/bang-commands/commands-cost.d.ts.map +1 -0
- package/dist/core/bang-commands/commands-cost.js +91 -0
- package/dist/core/bang-commands/commands-cost.js.map +1 -0
- package/dist/core/bang-commands/commands-report.d.ts +18 -0
- package/dist/core/bang-commands/commands-report.d.ts.map +1 -0
- package/dist/core/bang-commands/commands-report.js +105 -0
- package/dist/core/bang-commands/commands-report.js.map +1 -0
- package/dist/core/bang-commands/commands-stop-start.d.ts +4 -0
- package/dist/core/bang-commands/commands-stop-start.d.ts.map +1 -0
- package/dist/core/bang-commands/commands-stop-start.js +88 -0
- package/dist/core/bang-commands/commands-stop-start.js.map +1 -0
- package/dist/core/bang-commands/format-utils.d.ts +34 -0
- package/dist/core/bang-commands/format-utils.d.ts.map +1 -0
- package/dist/core/bang-commands/format-utils.js +118 -0
- package/dist/core/bang-commands/format-utils.js.map +1 -0
- package/dist/core/bang-commands/index.d.ts +20 -0
- package/dist/core/bang-commands/index.d.ts.map +1 -0
- package/dist/core/bang-commands/index.js +31 -0
- package/dist/core/bang-commands/index.js.map +1 -0
- package/dist/core/bang-commands/registry.d.ts +72 -0
- package/dist/core/bang-commands/registry.d.ts.map +1 -0
- package/dist/core/bang-commands/registry.js +174 -0
- package/dist/core/bang-commands/registry.js.map +1 -0
- package/dist/core/bang-commands/user-commands.d.ts +86 -0
- package/dist/core/bang-commands/user-commands.d.ts.map +1 -0
- package/dist/core/bang-commands/user-commands.js +212 -0
- package/dist/core/bang-commands/user-commands.js.map +1 -0
- package/dist/core/channel-timeline.d.ts +28 -0
- package/dist/core/channel-timeline.d.ts.map +1 -0
- package/dist/core/channel-timeline.js +117 -0
- package/dist/core/channel-timeline.js.map +1 -0
- package/dist/core/character-block.d.ts +37 -0
- package/dist/core/character-block.d.ts.map +1 -0
- package/dist/core/character-block.js +162 -0
- package/dist/core/character-block.js.map +1 -0
- package/dist/core/context/activity-sources.d.ts +37 -0
- package/dist/core/context/activity-sources.d.ts.map +1 -0
- package/dist/core/context/activity-sources.js +69 -0
- package/dist/core/context/activity-sources.js.map +1 -0
- package/dist/core/context/activity-view-reconciler.d.ts +110 -0
- package/dist/core/context/activity-view-reconciler.d.ts.map +1 -0
- package/dist/core/context/activity-view-reconciler.js +252 -0
- package/dist/core/context/activity-view-reconciler.js.map +1 -0
- package/dist/core/context/activity-view-runner.d.ts +38 -0
- package/dist/core/context/activity-view-runner.d.ts.map +1 -0
- package/dist/core/context/activity-view-runner.js +402 -0
- package/dist/core/context/activity-view-runner.js.map +1 -0
- package/dist/core/context/default-schedules-reconciler.d.ts +85 -0
- package/dist/core/context/default-schedules-reconciler.d.ts.map +1 -0
- package/dist/core/context/default-schedules-reconciler.js +153 -0
- package/dist/core/context/default-schedules-reconciler.js.map +1 -0
- package/dist/core/context/default-schedules-runner.d.ts +40 -0
- package/dist/core/context/default-schedules-runner.d.ts.map +1 -0
- package/dist/core/context/default-schedules-runner.js +233 -0
- package/dist/core/context/default-schedules-runner.js.map +1 -0
- package/dist/core/context/domain-index-reconciler.d.ts +81 -0
- package/dist/core/context/domain-index-reconciler.d.ts.map +1 -0
- package/dist/core/context/domain-index-reconciler.js +199 -0
- package/dist/core/context/domain-index-reconciler.js.map +1 -0
- package/dist/core/context/domain-index-runner.d.ts +35 -0
- package/dist/core/context/domain-index-runner.d.ts.map +1 -0
- package/dist/core/context/domain-index-runner.js +223 -0
- package/dist/core/context/domain-index-runner.js.map +1 -0
- package/dist/core/context/entity-mirror.d.ts +227 -0
- package/dist/core/context/entity-mirror.d.ts.map +1 -0
- package/dist/core/context/entity-mirror.js +629 -0
- package/dist/core/context/entity-mirror.js.map +1 -0
- package/dist/core/context/entity-source-rename.d.ts +61 -0
- package/dist/core/context/entity-source-rename.d.ts.map +1 -0
- package/dist/core/context/entity-source-rename.js +237 -0
- package/dist/core/context/entity-source-rename.js.map +1 -0
- package/dist/core/context/index-reconciler.d.ts +61 -0
- package/dist/core/context/index-reconciler.d.ts.map +1 -0
- package/dist/core/context/index-reconciler.js +329 -0
- package/dist/core/context/index-reconciler.js.map +1 -0
- package/dist/core/context/policy-index-reconciler.d.ts +102 -0
- package/dist/core/context/policy-index-reconciler.d.ts.map +1 -0
- package/dist/core/context/policy-index-reconciler.js +202 -0
- package/dist/core/context/policy-index-reconciler.js.map +1 -0
- package/dist/core/context/policy-index-runner.d.ts +66 -0
- package/dist/core/context/policy-index-runner.d.ts.map +1 -0
- package/dist/core/context/policy-index-runner.js +406 -0
- package/dist/core/context/policy-index-runner.js.map +1 -0
- package/dist/core/context/reconciler-runner.d.ts +44 -0
- package/dist/core/context/reconciler-runner.d.ts.map +1 -0
- package/dist/core/context/reconciler-runner.js +273 -0
- package/dist/core/context/reconciler-runner.js.map +1 -0
- package/dist/core/context-builder.d.ts +115 -0
- package/dist/core/context-builder.d.ts.map +1 -0
- package/dist/core/context-builder.js +1148 -0
- package/dist/core/context-builder.js.map +1 -0
- package/dist/core/context-frontmatter-backfill.d.ts +33 -0
- package/dist/core/context-frontmatter-backfill.d.ts.map +1 -0
- package/dist/core/context-frontmatter-backfill.js +111 -0
- package/dist/core/context-frontmatter-backfill.js.map +1 -0
- package/dist/core/context-frontmatter.d.ts +13 -0
- package/dist/core/context-frontmatter.d.ts.map +1 -0
- package/dist/core/context-frontmatter.js +325 -0
- package/dist/core/context-frontmatter.js.map +1 -0
- package/dist/core/context-health.d.ts +51 -0
- package/dist/core/context-health.d.ts.map +1 -0
- package/dist/core/context-health.js +304 -0
- package/dist/core/context-health.js.map +1 -0
- package/dist/core/context-paths.d.ts +183 -0
- package/dist/core/context-paths.d.ts.map +1 -0
- package/dist/core/context-paths.js +241 -0
- package/dist/core/context-paths.js.map +1 -0
- package/dist/core/context-staleness.d.ts +45 -0
- package/dist/core/context-staleness.d.ts.map +1 -0
- package/dist/core/context-staleness.js +88 -0
- package/dist/core/context-staleness.js.map +1 -0
- package/dist/core/custom-routine-scheduler.d.ts +151 -0
- package/dist/core/custom-routine-scheduler.d.ts.map +1 -0
- package/dist/core/custom-routine-scheduler.js +335 -0
- package/dist/core/custom-routine-scheduler.js.map +1 -0
- package/dist/core/daemon-api-cli.d.ts +33 -0
- package/dist/core/daemon-api-cli.d.ts.map +1 -0
- package/dist/core/daemon-api-cli.js +614 -0
- package/dist/core/daemon-api-cli.js.map +1 -0
- package/dist/core/dashboard-session-cleanup.d.ts +39 -0
- package/dist/core/dashboard-session-cleanup.d.ts.map +1 -0
- package/dist/core/dashboard-session-cleanup.js +108 -0
- package/dist/core/dashboard-session-cleanup.js.map +1 -0
- package/dist/core/dashboard-session-controls.d.ts +41 -0
- package/dist/core/dashboard-session-controls.d.ts.map +1 -0
- package/dist/core/dashboard-session-controls.js +154 -0
- package/dist/core/dashboard-session-controls.js.map +1 -0
- package/dist/core/delegated-connector-health.d.ts +63 -0
- package/dist/core/delegated-connector-health.d.ts.map +1 -0
- package/dist/core/delegated-connector-health.js +157 -0
- package/dist/core/delegated-connector-health.js.map +1 -0
- package/dist/core/dispatcher.d.ts +999 -0
- package/dist/core/dispatcher.d.ts.map +1 -0
- package/dist/core/dispatcher.js +4378 -0
- package/dist/core/dispatcher.js.map +1 -0
- package/dist/core/dm-freshness-metrics.d.ts +73 -0
- package/dist/core/dm-freshness-metrics.d.ts.map +1 -0
- package/dist/core/dm-freshness-metrics.js +138 -0
- package/dist/core/dm-freshness-metrics.js.map +1 -0
- package/dist/core/docs/citation-validator.d.ts +73 -0
- package/dist/core/docs/citation-validator.d.ts.map +1 -0
- package/dist/core/docs/citation-validator.js +195 -0
- package/dist/core/docs/citation-validator.js.map +1 -0
- package/dist/core/docs/extract-terms.d.ts +78 -0
- package/dist/core/docs/extract-terms.d.ts.map +1 -0
- package/dist/core/docs/extract-terms.js +147 -0
- package/dist/core/docs/extract-terms.js.map +1 -0
- package/dist/core/docs/indexer.d.ts +104 -0
- package/dist/core/docs/indexer.d.ts.map +1 -0
- package/dist/core/docs/indexer.js +340 -0
- package/dist/core/docs/indexer.js.map +1 -0
- package/dist/core/drift-effects.d.ts +30 -0
- package/dist/core/drift-effects.d.ts.map +1 -0
- package/dist/core/drift-effects.js +384 -0
- package/dist/core/drift-effects.js.map +1 -0
- package/dist/core/event-bus.d.ts +56 -0
- package/dist/core/event-bus.d.ts.map +1 -0
- package/dist/core/event-bus.js +135 -0
- package/dist/core/event-bus.js.map +1 -0
- package/dist/core/git-project-docs.d.ts +77 -0
- package/dist/core/git-project-docs.d.ts.map +1 -0
- package/dist/core/git-project-docs.js +439 -0
- package/dist/core/git-project-docs.js.map +1 -0
- package/dist/core/health-monitor.d.ts +57 -0
- package/dist/core/health-monitor.d.ts.map +1 -0
- package/dist/core/health-monitor.js +137 -0
- package/dist/core/health-monitor.js.map +1 -0
- package/dist/core/heartbeat.d.ts +26 -0
- package/dist/core/heartbeat.d.ts.map +1 -0
- package/dist/core/heartbeat.js +48 -0
- package/dist/core/heartbeat.js.map +1 -0
- package/dist/core/integration-health.d.ts +49 -0
- package/dist/core/integration-health.d.ts.map +1 -0
- package/dist/core/integration-health.js +89 -0
- package/dist/core/integration-health.js.map +1 -0
- package/dist/core/integration-lifecycle.d.ts +79 -0
- package/dist/core/integration-lifecycle.d.ts.map +1 -0
- package/dist/core/integration-lifecycle.js +153 -0
- package/dist/core/integration-lifecycle.js.map +1 -0
- package/dist/core/integration-main-backend.d.ts +36 -0
- package/dist/core/integration-main-backend.d.ts.map +1 -0
- package/dist/core/integration-main-backend.js +59 -0
- package/dist/core/integration-main-backend.js.map +1 -0
- package/dist/core/integration-probe.d.ts +98 -0
- package/dist/core/integration-probe.d.ts.map +1 -0
- package/dist/core/integration-probe.js +152 -0
- package/dist/core/integration-probe.js.map +1 -0
- package/dist/core/management-md-write-lock.d.ts +68 -0
- package/dist/core/management-md-write-lock.d.ts.map +1 -0
- package/dist/core/management-md-write-lock.js +93 -0
- package/dist/core/management-md-write-lock.js.map +1 -0
- package/dist/core/management-md.d.ts +186 -0
- package/dist/core/management-md.d.ts.map +1 -0
- package/dist/core/management-md.js +652 -0
- package/dist/core/management-md.js.map +1 -0
- package/dist/core/management-registry.d.ts +245 -0
- package/dist/core/management-registry.d.ts.map +1 -0
- package/dist/core/management-registry.js +906 -0
- package/dist/core/management-registry.js.map +1 -0
- package/dist/core/management-telemetry.d.ts +100 -0
- package/dist/core/management-telemetry.d.ts.map +1 -0
- package/dist/core/management-telemetry.js +156 -0
- package/dist/core/management-telemetry.js.map +1 -0
- package/dist/core/message-recorder.d.ts +38 -0
- package/dist/core/message-recorder.d.ts.map +1 -0
- package/dist/core/message-recorder.js +88 -0
- package/dist/core/message-recorder.js.map +1 -0
- package/dist/core/metrics.d.ts +338 -0
- package/dist/core/metrics.d.ts.map +1 -0
- package/dist/core/metrics.js +747 -0
- package/dist/core/metrics.js.map +1 -0
- package/dist/core/migration-backup.d.ts +218 -0
- package/dist/core/migration-backup.d.ts.map +1 -0
- package/dist/core/migration-backup.js +934 -0
- package/dist/core/migration-backup.js.map +1 -0
- package/dist/core/overview-write-lock.d.ts +48 -0
- package/dist/core/overview-write-lock.d.ts.map +1 -0
- package/dist/core/overview-write-lock.js +56 -0
- package/dist/core/overview-write-lock.js.map +1 -0
- package/dist/core/path-compat.d.ts +22 -0
- package/dist/core/path-compat.d.ts.map +1 -0
- package/dist/core/path-compat.js +67 -0
- package/dist/core/path-compat.js.map +1 -0
- package/dist/core/path-rewrite.d.ts +58 -0
- package/dist/core/path-rewrite.d.ts.map +1 -0
- package/dist/core/path-rewrite.js +141 -0
- package/dist/core/path-rewrite.js.map +1 -0
- package/dist/core/policy-files.d.ts +108 -0
- package/dist/core/policy-files.d.ts.map +1 -0
- package/dist/core/policy-files.js +198 -0
- package/dist/core/policy-files.js.map +1 -0
- package/dist/core/profile-questions/seed.d.ts +44 -0
- package/dist/core/profile-questions/seed.d.ts.map +1 -0
- package/dist/core/profile-questions/seed.js +173 -0
- package/dist/core/profile-questions/seed.js.map +1 -0
- package/dist/core/profile-questions/slot-filled.d.ts +51 -0
- package/dist/core/profile-questions/slot-filled.d.ts.map +1 -0
- package/dist/core/profile-questions/slot-filled.js +118 -0
- package/dist/core/profile-questions/slot-filled.js.map +1 -0
- package/dist/core/prompts.d.ts +111 -0
- package/dist/core/prompts.d.ts.map +1 -0
- package/dist/core/prompts.js +267 -0
- package/dist/core/prompts.js.map +1 -0
- package/dist/core/quiet-hours-sync.d.ts +15 -0
- package/dist/core/quiet-hours-sync.d.ts.map +1 -0
- package/dist/core/quiet-hours-sync.js +51 -0
- package/dist/core/quiet-hours-sync.js.map +1 -0
- package/dist/core/read-sensitive-token-manager.d.ts +19 -0
- package/dist/core/read-sensitive-token-manager.d.ts.map +1 -0
- package/dist/core/read-sensitive-token-manager.js +29 -0
- package/dist/core/read-sensitive-token-manager.js.map +1 -0
- package/dist/core/recurrence.d.ts +24 -0
- package/dist/core/recurrence.d.ts.map +1 -0
- package/dist/core/recurrence.js +162 -0
- package/dist/core/recurrence.js.map +1 -0
- package/dist/core/reinstall.d.ts +107 -0
- package/dist/core/reinstall.d.ts.map +1 -0
- package/dist/core/reinstall.js +163 -0
- package/dist/core/reinstall.js.map +1 -0
- package/dist/core/release-assets.d.ts +106 -0
- package/dist/core/release-assets.d.ts.map +1 -0
- package/dist/core/release-assets.js +434 -0
- package/dist/core/release-assets.js.map +1 -0
- package/dist/core/repository-management-docs.d.ts +216 -0
- package/dist/core/repository-management-docs.d.ts.map +1 -0
- package/dist/core/repository-management-docs.js +855 -0
- package/dist/core/repository-management-docs.js.map +1 -0
- package/dist/core/retention.d.ts +164 -0
- package/dist/core/retention.d.ts.map +1 -0
- package/dist/core/retention.js +1008 -0
- package/dist/core/retention.js.map +1 -0
- package/dist/core/review-context.d.ts +48 -0
- package/dist/core/review-context.d.ts.map +1 -0
- package/dist/core/review-context.js +282 -0
- package/dist/core/review-context.js.map +1 -0
- package/dist/core/roadmap-horizon.d.ts +48 -0
- package/dist/core/roadmap-horizon.d.ts.map +1 -0
- package/dist/core/roadmap-horizon.js +213 -0
- package/dist/core/roadmap-horizon.js.map +1 -0
- package/dist/core/roadmap-ids.d.ts +57 -0
- package/dist/core/roadmap-ids.d.ts.map +1 -0
- package/dist/core/roadmap-ids.js +118 -0
- package/dist/core/roadmap-ids.js.map +1 -0
- package/dist/core/roadmap-merge.d.ts +7 -0
- package/dist/core/roadmap-merge.d.ts.map +1 -0
- package/dist/core/roadmap-merge.js +187 -0
- package/dist/core/roadmap-merge.js.map +1 -0
- package/dist/core/roadmap-refresh-triggers.d.ts +32 -0
- package/dist/core/roadmap-refresh-triggers.d.ts.map +1 -0
- package/dist/core/roadmap-refresh-triggers.js +51 -0
- package/dist/core/roadmap-refresh-triggers.js.map +1 -0
- package/dist/core/roadmap-truncate.d.ts +49 -0
- package/dist/core/roadmap-truncate.d.ts.map +1 -0
- package/dist/core/roadmap-truncate.js +152 -0
- package/dist/core/roadmap-truncate.js.map +1 -0
- package/dist/core/roadmap-validate.d.ts +31 -0
- package/dist/core/roadmap-validate.d.ts.map +1 -0
- package/dist/core/roadmap-validate.js +403 -0
- package/dist/core/roadmap-validate.js.map +1 -0
- package/dist/core/roadmap-write-lock.d.ts +53 -0
- package/dist/core/roadmap-write-lock.d.ts.map +1 -0
- package/dist/core/roadmap-write-lock.js +59 -0
- package/dist/core/roadmap-write-lock.js.map +1 -0
- package/dist/core/schedule-insert-helper.d.ts +46 -0
- package/dist/core/schedule-insert-helper.d.ts.map +1 -0
- package/dist/core/schedule-insert-helper.js +52 -0
- package/dist/core/schedule-insert-helper.js.map +1 -0
- package/dist/core/schedule-maintenance.d.ts +22 -0
- package/dist/core/schedule-maintenance.d.ts.map +1 -0
- package/dist/core/schedule-maintenance.js +57 -0
- package/dist/core/schedule-maintenance.js.map +1 -0
- package/dist/core/scheduler.d.ts +208 -0
- package/dist/core/scheduler.d.ts.map +1 -0
- package/dist/core/scheduler.js +896 -0
- package/dist/core/scheduler.js.map +1 -0
- package/dist/core/semaphore.d.ts +13 -0
- package/dist/core/semaphore.d.ts.map +1 -0
- package/dist/core/semaphore.js +31 -0
- package/dist/core/semaphore.js.map +1 -0
- package/dist/core/session-gate.d.ts +37 -0
- package/dist/core/session-gate.d.ts.map +1 -0
- package/dist/core/session-gate.js +69 -0
- package/dist/core/session-gate.js.map +1 -0
- package/dist/core/session-manager.d.ts +252 -0
- package/dist/core/session-manager.d.ts.map +1 -0
- package/dist/core/session-manager.js +716 -0
- package/dist/core/session-manager.js.map +1 -0
- package/dist/core/signal-detector.d.ts +97 -0
- package/dist/core/signal-detector.d.ts.map +1 -0
- package/dist/core/signal-detector.js +215 -0
- package/dist/core/signal-detector.js.map +1 -0
- package/dist/core/skeleton.d.ts +83 -0
- package/dist/core/skeleton.d.ts.map +1 -0
- package/dist/core/skeleton.js +255 -0
- package/dist/core/skeleton.js.map +1 -0
- package/dist/core/skill-curation/apply-proposal.d.ts +71 -0
- package/dist/core/skill-curation/apply-proposal.d.ts.map +1 -0
- package/dist/core/skill-curation/apply-proposal.js +175 -0
- package/dist/core/skill-curation/apply-proposal.js.map +1 -0
- package/dist/core/skill-curation/auto-revert.d.ts +43 -0
- package/dist/core/skill-curation/auto-revert.d.ts.map +1 -0
- package/dist/core/skill-curation/auto-revert.js +155 -0
- package/dist/core/skill-curation/auto-revert.js.map +1 -0
- package/dist/core/skill-curation/classify-diff.d.ts +27 -0
- package/dist/core/skill-curation/classify-diff.d.ts.map +1 -0
- package/dist/core/skill-curation/classify-diff.js +0 -0
- package/dist/core/skill-curation/classify-diff.js.map +1 -0
- package/dist/core/skill-curation/declarations.d.ts +32 -0
- package/dist/core/skill-curation/declarations.d.ts.map +1 -0
- package/dist/core/skill-curation/declarations.js +171 -0
- package/dist/core/skill-curation/declarations.js.map +1 -0
- package/dist/core/skill-curation/knowledge-map.d.ts +26 -0
- package/dist/core/skill-curation/knowledge-map.d.ts.map +1 -0
- package/dist/core/skill-curation/knowledge-map.js +154 -0
- package/dist/core/skill-curation/knowledge-map.js.map +1 -0
- package/dist/core/skill-curation/orphan-overlay.d.ts +35 -0
- package/dist/core/skill-curation/orphan-overlay.d.ts.map +1 -0
- package/dist/core/skill-curation/orphan-overlay.js +167 -0
- package/dist/core/skill-curation/orphan-overlay.js.map +1 -0
- package/dist/core/skill-curation/overlay-store.d.ts +41 -0
- package/dist/core/skill-curation/overlay-store.d.ts.map +1 -0
- package/dist/core/skill-curation/overlay-store.js +143 -0
- package/dist/core/skill-curation/overlay-store.js.map +1 -0
- package/dist/core/skill-curation/render/convention-notes.d.ts +4 -0
- package/dist/core/skill-curation/render/convention-notes.d.ts.map +1 -0
- package/dist/core/skill-curation/render/convention-notes.js +13 -0
- package/dist/core/skill-curation/render/convention-notes.js.map +1 -0
- package/dist/core/skill-curation/render/cross-references.d.ts +4 -0
- package/dist/core/skill-curation/render/cross-references.d.ts.map +1 -0
- package/dist/core/skill-curation/render/cross-references.js +10 -0
- package/dist/core/skill-curation/render/cross-references.js.map +1 -0
- package/dist/core/skill-curation/render/frontmatter-schema.d.ts +4 -0
- package/dist/core/skill-curation/render/frontmatter-schema.d.ts.map +1 -0
- package/dist/core/skill-curation/render/frontmatter-schema.js +25 -0
- package/dist/core/skill-curation/render/frontmatter-schema.js.map +1 -0
- package/dist/core/skill-curation/render/index.d.ts +5 -0
- package/dist/core/skill-curation/render/index.d.ts.map +1 -0
- package/dist/core/skill-curation/render/index.js +42 -0
- package/dist/core/skill-curation/render/index.js.map +1 -0
- package/dist/core/skill-curation/render/knowledge-layout.d.ts +4 -0
- package/dist/core/skill-curation/render/knowledge-layout.d.ts.map +1 -0
- package/dist/core/skill-curation/render/knowledge-layout.js +36 -0
- package/dist/core/skill-curation/render/knowledge-layout.js.map +1 -0
- package/dist/core/skill-curation/render/routing-table.d.ts +4 -0
- package/dist/core/skill-curation/render/routing-table.d.ts.map +1 -0
- package/dist/core/skill-curation/render/routing-table.js +37 -0
- package/dist/core/skill-curation/render/routing-table.js.map +1 -0
- package/dist/core/skill-curation/render/search-recipes.d.ts +4 -0
- package/dist/core/skill-curation/render/search-recipes.d.ts.map +1 -0
- package/dist/core/skill-curation/render/search-recipes.js +39 -0
- package/dist/core/skill-curation/render/search-recipes.js.map +1 -0
- package/dist/core/skill-curation/run-token.d.ts +27 -0
- package/dist/core/skill-curation/run-token.d.ts.map +1 -0
- package/dist/core/skill-curation/run-token.js +81 -0
- package/dist/core/skill-curation/run-token.js.map +1 -0
- package/dist/core/skill-curation/signals.d.ts +49 -0
- package/dist/core/skill-curation/signals.d.ts.map +1 -0
- package/dist/core/skill-curation/signals.js +149 -0
- package/dist/core/skill-curation/signals.js.map +1 -0
- package/dist/core/skill-curation/smoke-test.d.ts +39 -0
- package/dist/core/skill-curation/smoke-test.d.ts.map +1 -0
- package/dist/core/skill-curation/smoke-test.js +313 -0
- package/dist/core/skill-curation/smoke-test.js.map +1 -0
- package/dist/core/skill-curation/splicer.d.ts +16 -0
- package/dist/core/skill-curation/splicer.d.ts.map +1 -0
- package/dist/core/skill-curation/splicer.js +78 -0
- package/dist/core/skill-curation/splicer.js.map +1 -0
- package/dist/core/skill-curation/workdir.d.ts +40 -0
- package/dist/core/skill-curation/workdir.d.ts.map +1 -0
- package/dist/core/skill-curation/workdir.js +242 -0
- package/dist/core/skill-curation/workdir.js.map +1 -0
- package/dist/core/skills-compiler.d.ts +391 -0
- package/dist/core/skills-compiler.d.ts.map +1 -0
- package/dist/core/skills-compiler.js +1271 -0
- package/dist/core/skills-compiler.js.map +1 -0
- package/dist/core/skills-manifest.d.ts +8 -0
- package/dist/core/skills-manifest.d.ts.map +1 -0
- package/dist/core/skills-manifest.js +408 -0
- package/dist/core/skills-manifest.js.map +1 -0
- package/dist/core/system-reset.d.ts +268 -0
- package/dist/core/system-reset.d.ts.map +1 -0
- package/dist/core/system-reset.js +816 -0
- package/dist/core/system-reset.js.map +1 -0
- package/dist/core/template-store.d.ts +170 -0
- package/dist/core/template-store.d.ts.map +1 -0
- package/dist/core/template-store.js +388 -0
- package/dist/core/template-store.js.map +1 -0
- package/dist/core/template-versions.d.ts +95 -0
- package/dist/core/template-versions.d.ts.map +1 -0
- package/dist/core/template-versions.js +175 -0
- package/dist/core/template-versions.js.map +1 -0
- package/dist/core/today-agent-plan.d.ts +33 -0
- package/dist/core/today-agent-plan.d.ts.map +1 -0
- package/dist/core/today-agent-plan.js +120 -0
- package/dist/core/today-agent-plan.js.map +1 -0
- package/dist/core/today-direct-writer.d.ts +62 -0
- package/dist/core/today-direct-writer.d.ts.map +1 -0
- package/dist/core/today-direct-writer.js +132 -0
- package/dist/core/today-direct-writer.js.map +1 -0
- package/dist/core/today-write-lock.d.ts +89 -0
- package/dist/core/today-write-lock.d.ts.map +1 -0
- package/dist/core/today-write-lock.js +154 -0
- package/dist/core/today-write-lock.js.map +1 -0
- package/dist/core/trigger-dispatch.d.ts +31 -0
- package/dist/core/trigger-dispatch.d.ts.map +1 -0
- package/dist/core/trigger-dispatch.js +100 -0
- package/dist/core/trigger-dispatch.js.map +1 -0
- package/dist/core/trigger-evaluator.d.ts +59 -0
- package/dist/core/trigger-evaluator.d.ts.map +1 -0
- package/dist/core/trigger-evaluator.js +243 -0
- package/dist/core/trigger-evaluator.js.map +1 -0
- package/dist/core/workdir.d.ts +241 -0
- package/dist/core/workdir.d.ts.map +1 -0
- package/dist/core/workdir.js +565 -0
- package/dist/core/workdir.js.map +1 -0
- package/dist/db/automation-triggers.d.ts +90 -0
- package/dist/db/automation-triggers.d.ts.map +1 -0
- package/dist/db/automation-triggers.js +199 -0
- package/dist/db/automation-triggers.js.map +1 -0
- package/dist/db/client.d.ts +6 -0
- package/dist/db/client.d.ts.map +1 -0
- package/dist/db/client.js +47 -0
- package/dist/db/client.js.map +1 -0
- package/dist/db/entities-store.d.ts +92 -0
- package/dist/db/entities-store.d.ts.map +1 -0
- package/dist/db/entities-store.js +180 -0
- package/dist/db/entities-store.js.map +1 -0
- package/dist/db/hourly-check-signals.d.ts +78 -0
- package/dist/db/hourly-check-signals.d.ts.map +1 -0
- package/dist/db/hourly-check-signals.js +289 -0
- package/dist/db/hourly-check-signals.js.map +1 -0
- package/dist/db/integration-probe-store.d.ts +27 -0
- package/dist/db/integration-probe-store.d.ts.map +1 -0
- package/dist/db/integration-probe-store.js +75 -0
- package/dist/db/integration-probe-store.js.map +1 -0
- package/dist/db/integrations-store.d.ts +19 -0
- package/dist/db/integrations-store.d.ts.map +1 -0
- package/dist/db/integrations-store.js +85 -0
- package/dist/db/integrations-store.js.map +1 -0
- package/dist/db/managed-tasks-store.d.ts +130 -0
- package/dist/db/managed-tasks-store.d.ts.map +1 -0
- package/dist/db/managed-tasks-store.js +238 -0
- package/dist/db/managed-tasks-store.js.map +1 -0
- package/dist/db/management-parse-failures-store.d.ts +45 -0
- package/dist/db/management-parse-failures-store.d.ts.map +1 -0
- package/dist/db/management-parse-failures-store.js +36 -0
- package/dist/db/management-parse-failures-store.js.map +1 -0
- package/dist/db/observations.d.ts +145 -0
- package/dist/db/observations.d.ts.map +1 -0
- package/dist/db/observations.js +287 -0
- package/dist/db/observations.js.map +1 -0
- package/dist/db/recurring-schedules.d.ts +70 -0
- package/dist/db/recurring-schedules.d.ts.map +1 -0
- package/dist/db/recurring-schedules.js +213 -0
- package/dist/db/recurring-schedules.js.map +1 -0
- package/dist/db/repositories-store.d.ts +296 -0
- package/dist/db/repositories-store.d.ts.map +1 -0
- package/dist/db/repositories-store.js +754 -0
- package/dist/db/repositories-store.js.map +1 -0
- package/dist/db/runtime-state.d.ts +61 -0
- package/dist/db/runtime-state.d.ts.map +1 -0
- package/dist/db/runtime-state.js +104 -0
- package/dist/db/runtime-state.js.map +1 -0
- package/dist/db/schema.d.ts +4 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +1338 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/db/sot-bindings-store.d.ts +41 -0
- package/dist/db/sot-bindings-store.d.ts.map +1 -0
- package/dist/db/sot-bindings-store.js +64 -0
- package/dist/db/sot-bindings-store.js.map +1 -0
- package/dist/db/test-schemas.d.ts +23 -0
- package/dist/db/test-schemas.d.ts.map +1 -0
- package/dist/db/test-schemas.js +111 -0
- package/dist/db/test-schemas.js.map +1 -0
- package/dist/db/voice-transcripts-store.d.ts +28 -0
- package/dist/db/voice-transcripts-store.d.ts.map +1 -0
- package/dist/db/voice-transcripts-store.js +43 -0
- package/dist/db/voice-transcripts-store.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2913 -0
- package/dist/index.js.map +1 -0
- package/dist/init.d.ts +7 -0
- package/dist/init.d.ts.map +1 -0
- package/dist/init.js +32 -0
- package/dist/init.js.map +1 -0
- package/dist/log-buffer.d.ts +71 -0
- package/dist/log-buffer.d.ts.map +1 -0
- package/dist/log-buffer.js +201 -0
- package/dist/log-buffer.js.map +1 -0
- package/dist/logging.d.ts +5 -0
- package/dist/logging.d.ts.map +1 -0
- package/dist/logging.js +130 -0
- package/dist/logging.js.map +1 -0
- package/dist/management-rules.d.ts +2 -0
- package/dist/management-rules.d.ts.map +1 -0
- package/dist/management-rules.js +62 -0
- package/dist/management-rules.js.map +1 -0
- package/dist/messaging/constants.d.ts +33 -0
- package/dist/messaging/constants.d.ts.map +1 -0
- package/dist/messaging/constants.js +52 -0
- package/dist/messaging/constants.js.map +1 -0
- package/dist/messaging/magic-phrase.d.ts +16 -0
- package/dist/messaging/magic-phrase.d.ts.map +1 -0
- package/dist/messaging/magic-phrase.js +103 -0
- package/dist/messaging/magic-phrase.js.map +1 -0
- package/dist/messaging/owner-channels.d.ts +20 -0
- package/dist/messaging/owner-channels.d.ts.map +1 -0
- package/dist/messaging/owner-channels.js +41 -0
- package/dist/messaging/owner-channels.js.map +1 -0
- package/dist/observers/calendar-poller.d.ts +51 -0
- package/dist/observers/calendar-poller.d.ts.map +1 -0
- package/dist/observers/calendar-poller.js +128 -0
- package/dist/observers/calendar-poller.js.map +1 -0
- package/dist/observers/context-index-reconciler-observer.d.ts +72 -0
- package/dist/observers/context-index-reconciler-observer.d.ts.map +1 -0
- package/dist/observers/context-index-reconciler-observer.js +253 -0
- package/dist/observers/context-index-reconciler-observer.js.map +1 -0
- package/dist/observers/delegated-probe-observer.d.ts +83 -0
- package/dist/observers/delegated-probe-observer.d.ts.map +1 -0
- package/dist/observers/delegated-probe-observer.js +237 -0
- package/dist/observers/delegated-probe-observer.js.map +1 -0
- package/dist/observers/delegated-sync-worker.d.ts +375 -0
- package/dist/observers/delegated-sync-worker.d.ts.map +1 -0
- package/dist/observers/delegated-sync-worker.js +1087 -0
- package/dist/observers/delegated-sync-worker.js.map +1 -0
- package/dist/observers/entity-mirror-observer.d.ts +55 -0
- package/dist/observers/entity-mirror-observer.d.ts.map +1 -0
- package/dist/observers/entity-mirror-observer.js +73 -0
- package/dist/observers/entity-mirror-observer.js.map +1 -0
- package/dist/observers/git-delegated-cron.d.ts +41 -0
- package/dist/observers/git-delegated-cron.d.ts.map +1 -0
- package/dist/observers/git-delegated-cron.js +159 -0
- package/dist/observers/git-delegated-cron.js.map +1 -0
- package/dist/observers/git-event-classifier.d.ts +52 -0
- package/dist/observers/git-event-classifier.d.ts.map +1 -0
- package/dist/observers/git-event-classifier.js +70 -0
- package/dist/observers/git-event-classifier.js.map +1 -0
- package/dist/observers/git-watcher.d.ts +162 -0
- package/dist/observers/git-watcher.d.ts.map +1 -0
- package/dist/observers/git-watcher.js +768 -0
- package/dist/observers/git-watcher.js.map +1 -0
- package/dist/observers/github-poller-classifier.d.ts +101 -0
- package/dist/observers/github-poller-classifier.d.ts.map +1 -0
- package/dist/observers/github-poller-classifier.js +199 -0
- package/dist/observers/github-poller-classifier.js.map +1 -0
- package/dist/observers/github-poller.d.ts +291 -0
- package/dist/observers/github-poller.d.ts.map +1 -0
- package/dist/observers/github-poller.js +609 -0
- package/dist/observers/github-poller.js.map +1 -0
- package/dist/observers/imminent-event-scheduler.d.ts +34 -0
- package/dist/observers/imminent-event-scheduler.d.ts.map +1 -0
- package/dist/observers/imminent-event-scheduler.js +125 -0
- package/dist/observers/imminent-event-scheduler.js.map +1 -0
- package/dist/observers/mail-poller.d.ts +133 -0
- package/dist/observers/mail-poller.d.ts.map +1 -0
- package/dist/observers/mail-poller.js +563 -0
- package/dist/observers/mail-poller.js.map +1 -0
- package/dist/observers/mail-reconciliation.d.ts +87 -0
- package/dist/observers/mail-reconciliation.d.ts.map +1 -0
- package/dist/observers/mail-reconciliation.js +241 -0
- package/dist/observers/mail-reconciliation.js.map +1 -0
- package/dist/observers/manager.d.ts +67 -0
- package/dist/observers/manager.d.ts.map +1 -0
- package/dist/observers/manager.js +136 -0
- package/dist/observers/manager.js.map +1 -0
- package/dist/observers/notion-poller.d.ts +43 -0
- package/dist/observers/notion-poller.d.ts.map +1 -0
- package/dist/observers/notion-poller.js +184 -0
- package/dist/observers/notion-poller.js.map +1 -0
- package/dist/observers/observation-summarizer/index.d.ts +13 -0
- package/dist/observers/observation-summarizer/index.d.ts.map +1 -0
- package/dist/observers/observation-summarizer/index.js +13 -0
- package/dist/observers/observation-summarizer/index.js.map +1 -0
- package/dist/observers/observation-summarizer/pre-filter.d.ts +62 -0
- package/dist/observers/observation-summarizer/pre-filter.d.ts.map +1 -0
- package/dist/observers/observation-summarizer/pre-filter.js +189 -0
- package/dist/observers/observation-summarizer/pre-filter.js.map +1 -0
- package/dist/observers/observation-summarizer/response-parser.d.ts +30 -0
- package/dist/observers/observation-summarizer/response-parser.d.ts.map +1 -0
- package/dist/observers/observation-summarizer/response-parser.js +106 -0
- package/dist/observers/observation-summarizer/response-parser.js.map +1 -0
- package/dist/observers/observation-summarizer/summarizer-client.d.ts +83 -0
- package/dist/observers/observation-summarizer/summarizer-client.d.ts.map +1 -0
- package/dist/observers/observation-summarizer/summarizer-client.js +185 -0
- package/dist/observers/observation-summarizer/summarizer-client.js.map +1 -0
- package/dist/observers/observation-summarizer/summarizer-prompts.d.ts +51 -0
- package/dist/observers/observation-summarizer/summarizer-prompts.d.ts.map +1 -0
- package/dist/observers/observation-summarizer/summarizer-prompts.js +286 -0
- package/dist/observers/observation-summarizer/summarizer-prompts.js.map +1 -0
- package/dist/observers/observation-summarizer/worker.d.ts +106 -0
- package/dist/observers/observation-summarizer/worker.d.ts.map +1 -0
- package/dist/observers/observation-summarizer/worker.js +311 -0
- package/dist/observers/observation-summarizer/worker.js.map +1 -0
- package/dist/observers/obsidian-watcher.d.ts +90 -0
- package/dist/observers/obsidian-watcher.d.ts.map +1 -0
- package/dist/observers/obsidian-watcher.js +166 -0
- package/dist/observers/obsidian-watcher.js.map +1 -0
- package/dist/observers/primary-vault-watcher.d.ts +73 -0
- package/dist/observers/primary-vault-watcher.d.ts.map +1 -0
- package/dist/observers/primary-vault-watcher.js +115 -0
- package/dist/observers/primary-vault-watcher.js.map +1 -0
- package/dist/observers/repository-management-cron.d.ts +70 -0
- package/dist/observers/repository-management-cron.d.ts.map +1 -0
- package/dist/observers/repository-management-cron.js +166 -0
- package/dist/observers/repository-management-cron.js.map +1 -0
- package/dist/observers/skill-curation-walker.d.ts +33 -0
- package/dist/observers/skill-curation-walker.d.ts.map +1 -0
- package/dist/observers/skill-curation-walker.js +216 -0
- package/dist/observers/skill-curation-walker.js.map +1 -0
- package/dist/safety/absolute-block-audit.d.ts +22 -0
- package/dist/safety/absolute-block-audit.d.ts.map +1 -0
- package/dist/safety/absolute-block-audit.js +32 -0
- package/dist/safety/absolute-block-audit.js.map +1 -0
- package/dist/safety/agent-write-tracker.d.ts +42 -0
- package/dist/safety/agent-write-tracker.d.ts.map +1 -0
- package/dist/safety/agent-write-tracker.js +82 -0
- package/dist/safety/agent-write-tracker.js.map +1 -0
- package/dist/safety/always-disallowed.d.ts +66 -0
- package/dist/safety/always-disallowed.d.ts.map +1 -0
- package/dist/safety/always-disallowed.js +347 -0
- package/dist/safety/always-disallowed.js.map +1 -0
- package/dist/safety/audit.d.ts +118 -0
- package/dist/safety/audit.d.ts.map +1 -0
- package/dist/safety/audit.js +324 -0
- package/dist/safety/audit.js.map +1 -0
- package/dist/safety/integration-write-tracker.d.ts +58 -0
- package/dist/safety/integration-write-tracker.d.ts.map +1 -0
- package/dist/safety/integration-write-tracker.js +41 -0
- package/dist/safety/integration-write-tracker.js.map +1 -0
- package/dist/safety/risk-classifier.d.ts +65 -0
- package/dist/safety/risk-classifier.d.ts.map +1 -0
- package/dist/safety/risk-classifier.js +763 -0
- package/dist/safety/risk-classifier.js.map +1 -0
- package/dist/scheduler/hourly-check-gate.d.ts +73 -0
- package/dist/scheduler/hourly-check-gate.d.ts.map +1 -0
- package/dist/scheduler/hourly-check-gate.js +128 -0
- package/dist/scheduler/hourly-check-gate.js.map +1 -0
- package/dist/secrets/backend-api-key-env.d.ts +104 -0
- package/dist/secrets/backend-api-key-env.d.ts.map +1 -0
- package/dist/secrets/backend-api-key-env.js +197 -0
- package/dist/secrets/backend-api-key-env.js.map +1 -0
- package/dist/secrets/codex-home-materializer.d.ts +35 -0
- package/dist/secrets/codex-home-materializer.d.ts.map +1 -0
- package/dist/secrets/codex-home-materializer.js +76 -0
- package/dist/secrets/codex-home-materializer.js.map +1 -0
- package/dist/secrets/encrypted-blob-store.d.ts +20 -0
- package/dist/secrets/encrypted-blob-store.d.ts.map +1 -0
- package/dist/secrets/encrypted-blob-store.js +80 -0
- package/dist/secrets/encrypted-blob-store.js.map +1 -0
- package/dist/secrets/platform-secret-store.d.ts +17 -0
- package/dist/secrets/platform-secret-store.d.ts.map +1 -0
- package/dist/secrets/platform-secret-store.js +37 -0
- package/dist/secrets/platform-secret-store.js.map +1 -0
- package/dist/secrets/redaction.d.ts +2 -0
- package/dist/secrets/redaction.d.ts.map +1 -0
- package/dist/secrets/redaction.js +2 -0
- package/dist/secrets/redaction.js.map +1 -0
- package/dist/secrets/secret-broker.d.ts +61 -0
- package/dist/secrets/secret-broker.d.ts.map +1 -0
- package/dist/secrets/secret-broker.js +160 -0
- package/dist/secrets/secret-broker.js.map +1 -0
- package/dist/secrets/secret-names.d.ts +34 -0
- package/dist/secrets/secret-names.d.ts.map +1 -0
- package/dist/secrets/secret-names.js +39 -0
- package/dist/secrets/secret-names.js.map +1 -0
- package/dist/secrets/secret-store.d.ts +8 -0
- package/dist/secrets/secret-store.d.ts.map +1 -0
- package/dist/secrets/secret-store.js +2 -0
- package/dist/secrets/secret-store.js.map +1 -0
- package/dist/secrets/types.d.ts +7 -0
- package/dist/secrets/types.d.ts.map +1 -0
- package/dist/secrets/types.js +2 -0
- package/dist/secrets/types.js.map +1 -0
- package/dist/services/apple-calendar/caldav-client.d.ts +48 -0
- package/dist/services/apple-calendar/caldav-client.d.ts.map +1 -0
- package/dist/services/apple-calendar/caldav-client.js +86 -0
- package/dist/services/apple-calendar/caldav-client.js.map +1 -0
- package/dist/services/apple-calendar/caldav-codec.d.ts +67 -0
- package/dist/services/apple-calendar/caldav-codec.d.ts.map +1 -0
- package/dist/services/apple-calendar/caldav-codec.js +341 -0
- package/dist/services/apple-calendar/caldav-codec.js.map +1 -0
- package/dist/services/apple-calendar/index.d.ts +3 -0
- package/dist/services/apple-calendar/index.d.ts.map +1 -0
- package/dist/services/apple-calendar/index.js +2 -0
- package/dist/services/apple-calendar/index.js.map +1 -0
- package/dist/services/apple-calendar/service.d.ts +75 -0
- package/dist/services/apple-calendar/service.d.ts.map +1 -0
- package/dist/services/apple-calendar/service.js +374 -0
- package/dist/services/apple-calendar/service.js.map +1 -0
- package/dist/services/apple-calendar/types.d.ts +78 -0
- package/dist/services/apple-calendar/types.d.ts.map +1 -0
- package/dist/services/apple-calendar/types.js +17 -0
- package/dist/services/apple-calendar/types.js.map +1 -0
- package/dist/services/attachments/hardlink.d.ts +11 -0
- package/dist/services/attachments/hardlink.d.ts.map +1 -0
- package/dist/services/attachments/hardlink.js +56 -0
- package/dist/services/attachments/hardlink.js.map +1 -0
- package/dist/services/attachments/sanitize.d.ts +21 -0
- package/dist/services/attachments/sanitize.d.ts.map +1 -0
- package/dist/services/attachments/sanitize.js +128 -0
- package/dist/services/attachments/sanitize.js.map +1 -0
- package/dist/services/attachments/store.d.ts +146 -0
- package/dist/services/attachments/store.d.ts.map +1 -0
- package/dist/services/attachments/store.js +477 -0
- package/dist/services/attachments/store.js.map +1 -0
- package/dist/services/calendar/outlook/graph-calendar-client.d.ts +114 -0
- package/dist/services/calendar/outlook/graph-calendar-client.d.ts.map +1 -0
- package/dist/services/calendar/outlook/graph-calendar-client.js +146 -0
- package/dist/services/calendar/outlook/graph-calendar-client.js.map +1 -0
- package/dist/services/calendar.d.ts +115 -0
- package/dist/services/calendar.d.ts.map +1 -0
- package/dist/services/calendar.js +281 -0
- package/dist/services/calendar.js.map +1 -0
- package/dist/services/delegated-backend-invoker.d.ts +414 -0
- package/dist/services/delegated-backend-invoker.d.ts.map +1 -0
- package/dist/services/delegated-backend-invoker.js +2372 -0
- package/dist/services/delegated-backend-invoker.js.map +1 -0
- package/dist/services/delegated-proxy-config.d.ts +93 -0
- package/dist/services/delegated-proxy-config.d.ts.map +1 -0
- package/dist/services/delegated-proxy-config.js +98 -0
- package/dist/services/delegated-proxy-config.js.map +1 -0
- package/dist/services/delegated-task-result-cache.d.ts +176 -0
- package/dist/services/delegated-task-result-cache.d.ts.map +1 -0
- package/dist/services/delegated-task-result-cache.js +0 -0
- package/dist/services/delegated-task-result-cache.js.map +1 -0
- package/dist/services/delegated-task-runtime.d.ts +346 -0
- package/dist/services/delegated-task-runtime.d.ts.map +1 -0
- package/dist/services/delegated-task-runtime.js +589 -0
- package/dist/services/delegated-task-runtime.js.map +1 -0
- package/dist/services/delegated-task-session-pool.d.ts +182 -0
- package/dist/services/delegated-task-session-pool.d.ts.map +1 -0
- package/dist/services/delegated-task-session-pool.js +292 -0
- package/dist/services/delegated-task-session-pool.js.map +1 -0
- package/dist/services/delegated-tool-runtime.d.ts +50 -0
- package/dist/services/delegated-tool-runtime.d.ts.map +1 -0
- package/dist/services/delegated-tool-runtime.js +120 -0
- package/dist/services/delegated-tool-runtime.js.map +1 -0
- package/dist/services/fts5.d.ts +40 -0
- package/dist/services/fts5.d.ts.map +1 -0
- package/dist/services/fts5.js +54 -0
- package/dist/services/fts5.js.map +1 -0
- package/dist/services/git-account-registry.d.ts +164 -0
- package/dist/services/git-account-registry.d.ts.map +1 -0
- package/dist/services/git-account-registry.js +297 -0
- package/dist/services/git-account-registry.js.map +1 -0
- package/dist/services/github.d.ts +49 -0
- package/dist/services/github.d.ts.map +1 -0
- package/dist/services/github.js +123 -0
- package/dist/services/github.js.map +1 -0
- package/dist/services/gmail-classifier.d.ts +62 -0
- package/dist/services/gmail-classifier.d.ts.map +1 -0
- package/dist/services/gmail-classifier.js +221 -0
- package/dist/services/gmail-classifier.js.map +1 -0
- package/dist/services/gmail.d.ts +192 -0
- package/dist/services/gmail.d.ts.map +1 -0
- package/dist/services/gmail.js +678 -0
- package/dist/services/gmail.js.map +1 -0
- package/dist/services/google-auth.d.ts +16 -0
- package/dist/services/google-auth.d.ts.map +1 -0
- package/dist/services/google-auth.js +37 -0
- package/dist/services/google-auth.js.map +1 -0
- package/dist/services/google-maps.d.ts +35 -0
- package/dist/services/google-maps.d.ts.map +1 -0
- package/dist/services/google-maps.js +82 -0
- package/dist/services/google-maps.js.map +1 -0
- package/dist/services/integrations/extract-write-item-id.d.ts +64 -0
- package/dist/services/integrations/extract-write-item-id.d.ts.map +1 -0
- package/dist/services/integrations/extract-write-item-id.js +188 -0
- package/dist/services/integrations/extract-write-item-id.js.map +1 -0
- package/dist/services/integrations/reconcile.d.ts +136 -0
- package/dist/services/integrations/reconcile.d.ts.map +1 -0
- package/dist/services/integrations/reconcile.js +218 -0
- package/dist/services/integrations/reconcile.js.map +1 -0
- package/dist/services/integrations/snapshot-partitions.d.ts +40 -0
- package/dist/services/integrations/snapshot-partitions.d.ts.map +1 -0
- package/dist/services/integrations/snapshot-partitions.js +113 -0
- package/dist/services/integrations/snapshot-partitions.js.map +1 -0
- package/dist/services/journal/render.d.ts +15 -0
- package/dist/services/journal/render.d.ts.map +1 -0
- package/dist/services/journal/render.js +17 -0
- package/dist/services/journal/render.js.map +1 -0
- package/dist/services/journal/writer.d.ts +26 -0
- package/dist/services/journal/writer.d.ts.map +1 -0
- package/dist/services/journal/writer.js +50 -0
- package/dist/services/journal/writer.js.map +1 -0
- package/dist/services/mail/account-registry.d.ts +208 -0
- package/dist/services/mail/account-registry.d.ts.map +1 -0
- package/dist/services/mail/account-registry.js +554 -0
- package/dist/services/mail/account-registry.js.map +1 -0
- package/dist/services/mail/gmail/auth-failure-classifier.d.ts +24 -0
- package/dist/services/mail/gmail/auth-failure-classifier.d.ts.map +1 -0
- package/dist/services/mail/gmail/auth-failure-classifier.js +67 -0
- package/dist/services/mail/gmail/auth-failure-classifier.js.map +1 -0
- package/dist/services/mail/gmail/gmail-provider.d.ts +58 -0
- package/dist/services/mail/gmail/gmail-provider.d.ts.map +1 -0
- package/dist/services/mail/gmail/gmail-provider.js +434 -0
- package/dist/services/mail/gmail/gmail-provider.js.map +1 -0
- package/dist/services/mail/gmail/legacy-row.d.ts +24 -0
- package/dist/services/mail/gmail/legacy-row.d.ts.map +1 -0
- package/dist/services/mail/gmail/legacy-row.js +71 -0
- package/dist/services/mail/gmail/legacy-row.js.map +1 -0
- package/dist/services/mail/gmail/poll-cursor.d.ts +12 -0
- package/dist/services/mail/gmail/poll-cursor.d.ts.map +1 -0
- package/dist/services/mail/gmail/poll-cursor.js +32 -0
- package/dist/services/mail/gmail/poll-cursor.js.map +1 -0
- package/dist/services/mail/html-to-plaintext.d.ts +27 -0
- package/dist/services/mail/html-to-plaintext.d.ts.map +1 -0
- package/dist/services/mail/html-to-plaintext.js +163 -0
- package/dist/services/mail/html-to-plaintext.js.map +1 -0
- package/dist/services/mail/imap/app-password.d.ts +27 -0
- package/dist/services/mail/imap/app-password.d.ts.map +1 -0
- package/dist/services/mail/imap/app-password.js +86 -0
- package/dist/services/mail/imap/app-password.js.map +1 -0
- package/dist/services/mail/imap/auth-failure-classifier.d.ts +21 -0
- package/dist/services/mail/imap/auth-failure-classifier.d.ts.map +1 -0
- package/dist/services/mail/imap/auth-failure-classifier.js +54 -0
- package/dist/services/mail/imap/auth-failure-classifier.js.map +1 -0
- package/dist/services/mail/imap/capabilities.d.ts +30 -0
- package/dist/services/mail/imap/capabilities.d.ts.map +1 -0
- package/dist/services/mail/imap/capabilities.js +70 -0
- package/dist/services/mail/imap/capabilities.js.map +1 -0
- package/dist/services/mail/imap/client.d.ts +15 -0
- package/dist/services/mail/imap/client.d.ts.map +1 -0
- package/dist/services/mail/imap/client.js +60 -0
- package/dist/services/mail/imap/client.js.map +1 -0
- package/dist/services/mail/imap/cursor.d.ts +19 -0
- package/dist/services/mail/imap/cursor.d.ts.map +1 -0
- package/dist/services/mail/imap/cursor.js +47 -0
- package/dist/services/mail/imap/cursor.js.map +1 -0
- package/dist/services/mail/imap/folder-resolver.d.ts +24 -0
- package/dist/services/mail/imap/folder-resolver.d.ts.map +1 -0
- package/dist/services/mail/imap/folder-resolver.js +58 -0
- package/dist/services/mail/imap/folder-resolver.js.map +1 -0
- package/dist/services/mail/imap/icloud-provider.d.ts +5 -0
- package/dist/services/mail/imap/icloud-provider.d.ts.map +1 -0
- package/dist/services/mail/imap/icloud-provider.js +5 -0
- package/dist/services/mail/imap/icloud-provider.js.map +1 -0
- package/dist/services/mail/imap/imap-provider-base.d.ts +173 -0
- package/dist/services/mail/imap/imap-provider-base.d.ts.map +1 -0
- package/dist/services/mail/imap/imap-provider-base.js +1004 -0
- package/dist/services/mail/imap/imap-provider-base.js.map +1 -0
- package/dist/services/mail/imap/query-translator.d.ts +13 -0
- package/dist/services/mail/imap/query-translator.d.ts.map +1 -0
- package/dist/services/mail/imap/query-translator.js +114 -0
- package/dist/services/mail/imap/query-translator.js.map +1 -0
- package/dist/services/mail/imap/reconcile-planner.d.ts +56 -0
- package/dist/services/mail/imap/reconcile-planner.d.ts.map +1 -0
- package/dist/services/mail/imap/reconcile-planner.js +52 -0
- package/dist/services/mail/imap/reconcile-planner.js.map +1 -0
- package/dist/services/mail/imap/reply-mime.d.ts +24 -0
- package/dist/services/mail/imap/reply-mime.d.ts.map +1 -0
- package/dist/services/mail/imap/reply-mime.js +77 -0
- package/dist/services/mail/imap/reply-mime.js.map +1 -0
- package/dist/services/mail/imap/yahoo-provider.d.ts +5 -0
- package/dist/services/mail/imap/yahoo-provider.d.ts.map +1 -0
- package/dist/services/mail/imap/yahoo-provider.js +5 -0
- package/dist/services/mail/imap/yahoo-provider.js.map +1 -0
- package/dist/services/mail/mail-search.d.ts +35 -0
- package/dist/services/mail/mail-search.d.ts.map +1 -0
- package/dist/services/mail/mail-search.js +59 -0
- package/dist/services/mail/mail-search.js.map +1 -0
- package/dist/services/mail/outlook/auth-failure-classifier.d.ts +38 -0
- package/dist/services/mail/outlook/auth-failure-classifier.d.ts.map +1 -0
- package/dist/services/mail/outlook/auth-failure-classifier.js +91 -0
- package/dist/services/mail/outlook/auth-failure-classifier.js.map +1 -0
- package/dist/services/mail/outlook/client-config.d.ts +34 -0
- package/dist/services/mail/outlook/client-config.d.ts.map +1 -0
- package/dist/services/mail/outlook/client-config.js +58 -0
- package/dist/services/mail/outlook/client-config.js.map +1 -0
- package/dist/services/mail/outlook/delta-cursor.d.ts +66 -0
- package/dist/services/mail/outlook/delta-cursor.d.ts.map +1 -0
- package/dist/services/mail/outlook/delta-cursor.js +85 -0
- package/dist/services/mail/outlook/delta-cursor.js.map +1 -0
- package/dist/services/mail/outlook/graph-client.d.ts +98 -0
- package/dist/services/mail/outlook/graph-client.d.ts.map +1 -0
- package/dist/services/mail/outlook/graph-client.js +198 -0
- package/dist/services/mail/outlook/graph-client.js.map +1 -0
- package/dist/services/mail/outlook/msal-app-factory.d.ts +20 -0
- package/dist/services/mail/outlook/msal-app-factory.d.ts.map +1 -0
- package/dist/services/mail/outlook/msal-app-factory.js +62 -0
- package/dist/services/mail/outlook/msal-app-factory.js.map +1 -0
- package/dist/services/mail/outlook/msal-cache-plugin.d.ts +19 -0
- package/dist/services/mail/outlook/msal-cache-plugin.d.ts.map +1 -0
- package/dist/services/mail/outlook/msal-cache-plugin.js +30 -0
- package/dist/services/mail/outlook/msal-cache-plugin.js.map +1 -0
- package/dist/services/mail/outlook/oauth-device-code.d.ts +26 -0
- package/dist/services/mail/outlook/oauth-device-code.d.ts.map +1 -0
- package/dist/services/mail/outlook/oauth-device-code.js +32 -0
- package/dist/services/mail/outlook/oauth-device-code.js.map +1 -0
- package/dist/services/mail/outlook/oauth-loopback.d.ts +41 -0
- package/dist/services/mail/outlook/oauth-loopback.d.ts.map +1 -0
- package/dist/services/mail/outlook/oauth-loopback.js +223 -0
- package/dist/services/mail/outlook/oauth-loopback.js.map +1 -0
- package/dist/services/mail/outlook/outlook-provider.d.ts +100 -0
- package/dist/services/mail/outlook/outlook-provider.d.ts.map +1 -0
- package/dist/services/mail/outlook/outlook-provider.js +619 -0
- package/dist/services/mail/outlook/outlook-provider.js.map +1 -0
- package/dist/services/mail/outlook/query-translator.d.ts +10 -0
- package/dist/services/mail/outlook/query-translator.d.ts.map +1 -0
- package/dist/services/mail/outlook/query-translator.js +103 -0
- package/dist/services/mail/outlook/query-translator.js.map +1 -0
- package/dist/services/mail/provider.d.ts +267 -0
- package/dist/services/mail/provider.d.ts.map +1 -0
- package/dist/services/mail/provider.js +34 -0
- package/dist/services/mail/provider.js.map +1 -0
- package/dist/services/mail/query-utils.d.ts +13 -0
- package/dist/services/mail/query-utils.d.ts.map +1 -0
- package/dist/services/mail/query-utils.js +18 -0
- package/dist/services/mail/query-utils.js.map +1 -0
- package/dist/services/mail-classifier.d.ts +25 -0
- package/dist/services/mail-classifier.d.ts.map +1 -0
- package/dist/services/mail-classifier.js +52 -0
- package/dist/services/mail-classifier.js.map +1 -0
- package/dist/services/mail-ingestion.d.ts +139 -0
- package/dist/services/mail-ingestion.d.ts.map +1 -0
- package/dist/services/mail-ingestion.js +223 -0
- package/dist/services/mail-ingestion.js.map +1 -0
- package/dist/services/mcp/auto-probe.d.ts +76 -0
- package/dist/services/mcp/auto-probe.d.ts.map +1 -0
- package/dist/services/mcp/auto-probe.js +147 -0
- package/dist/services/mcp/auto-probe.js.map +1 -0
- package/dist/services/mcp/generators/claude.d.ts +18 -0
- package/dist/services/mcp/generators/claude.d.ts.map +1 -0
- package/dist/services/mcp/generators/claude.js +90 -0
- package/dist/services/mcp/generators/claude.js.map +1 -0
- package/dist/services/mcp/generators/codex.d.ts +22 -0
- package/dist/services/mcp/generators/codex.d.ts.map +1 -0
- package/dist/services/mcp/generators/codex.js +102 -0
- package/dist/services/mcp/generators/codex.js.map +1 -0
- package/dist/services/mcp/generators/gemini.d.ts +20 -0
- package/dist/services/mcp/generators/gemini.d.ts.map +1 -0
- package/dist/services/mcp/generators/gemini.js +97 -0
- package/dist/services/mcp/generators/gemini.js.map +1 -0
- package/dist/services/mcp/generators/index.d.ts +20 -0
- package/dist/services/mcp/generators/index.d.ts.map +1 -0
- package/dist/services/mcp/generators/index.js +29 -0
- package/dist/services/mcp/generators/index.js.map +1 -0
- package/dist/services/mcp/generators/types.d.ts +47 -0
- package/dist/services/mcp/generators/types.d.ts.map +1 -0
- package/dist/services/mcp/generators/types.js +40 -0
- package/dist/services/mcp/generators/types.js.map +1 -0
- package/dist/services/mcp/probe.d.ts +31 -0
- package/dist/services/mcp/probe.d.ts.map +1 -0
- package/dist/services/mcp/probe.js +437 -0
- package/dist/services/mcp/probe.js.map +1 -0
- package/dist/services/mcp/registry.d.ts +84 -0
- package/dist/services/mcp/registry.d.ts.map +1 -0
- package/dist/services/mcp/registry.js +387 -0
- package/dist/services/mcp/registry.js.map +1 -0
- package/dist/services/mcp/risk.d.ts +82 -0
- package/dist/services/mcp/risk.d.ts.map +1 -0
- package/dist/services/mcp/risk.js +126 -0
- package/dist/services/mcp/risk.js.map +1 -0
- package/dist/services/mcp/session-materializer.d.ts +123 -0
- package/dist/services/mcp/session-materializer.d.ts.map +1 -0
- package/dist/services/mcp/session-materializer.js +361 -0
- package/dist/services/mcp/session-materializer.js.map +1 -0
- package/dist/services/mcp/tool-audit.d.ts +53 -0
- package/dist/services/mcp/tool-audit.d.ts.map +1 -0
- package/dist/services/mcp/tool-audit.js +74 -0
- package/dist/services/mcp/tool-audit.js.map +1 -0
- package/dist/services/mcp/types.d.ts +88 -0
- package/dist/services/mcp/types.d.ts.map +1 -0
- package/dist/services/mcp/types.js +94 -0
- package/dist/services/mcp/types.js.map +1 -0
- package/dist/services/notion.d.ts +134 -0
- package/dist/services/notion.d.ts.map +1 -0
- package/dist/services/notion.js +350 -0
- package/dist/services/notion.js.map +1 -0
- package/dist/services/obsidian.d.ts +116 -0
- package/dist/services/obsidian.d.ts.map +1 -0
- package/dist/services/obsidian.js +305 -0
- package/dist/services/obsidian.js.map +1 -0
- package/dist/services/service-registry.d.ts +31 -0
- package/dist/services/service-registry.d.ts.map +1 -0
- package/dist/services/service-registry.js +15 -0
- package/dist/services/service-registry.js.map +1 -0
- package/dist/services/voice/transcriber-impl.d.ts +15 -0
- package/dist/services/voice/transcriber-impl.d.ts.map +1 -0
- package/dist/services/voice/transcriber-impl.js +129 -0
- package/dist/services/voice/transcriber-impl.js.map +1 -0
- package/dist/services/voice/transcriber.d.ts +117 -0
- package/dist/services/voice/transcriber.d.ts.map +1 -0
- package/dist/services/voice/transcriber.js +201 -0
- package/dist/services/voice/transcriber.js.map +1 -0
- package/dist/settings/runtime-settings.d.ts +232 -0
- package/dist/settings/runtime-settings.d.ts.map +1 -0
- package/dist/settings/runtime-settings.js +769 -0
- package/dist/settings/runtime-settings.js.map +1 -0
- package/dist/settings/settings-store.d.ts +13 -0
- package/dist/settings/settings-store.d.ts.map +1 -0
- package/dist/settings/settings-store.js +87 -0
- package/dist/settings/settings-store.js.map +1 -0
- package/package.json +85 -0
|
@@ -0,0 +1,950 @@
|
|
|
1
|
+
import { getBackendIds, isBackendId, redactSensitiveString } from "@aitne/shared";
|
|
2
|
+
import { createLogger } from "../../logging.js";
|
|
3
|
+
const logger = createLogger("auth-health-monitor");
|
|
4
|
+
/**
|
|
5
|
+
* NotificationManager category for probe-failure DMs. Must be a member
|
|
6
|
+
* of NotificationManager's `SAFETY_CATEGORIES` array so that the DM
|
|
7
|
+
* bypasses quiet-hours + rate-limit gates at the NotificationManager
|
|
8
|
+
* layer (AuthHealthMonitor.shouldNotify owns the application-level
|
|
9
|
+
* policy). Exported so the index.ts wiring and the constant definition
|
|
10
|
+
* stay in sync — a rename that breaks the invariant will surface as a
|
|
11
|
+
* compile error rather than a silent runtime regression. See B2 fix.
|
|
12
|
+
*/
|
|
13
|
+
export const AUTH_PROBE_NOTIFICATION_CATEGORY = "error";
|
|
14
|
+
function parseDate(value) {
|
|
15
|
+
if (!value)
|
|
16
|
+
return null;
|
|
17
|
+
const d = new Date(value);
|
|
18
|
+
return Number.isNaN(d.getTime()) ? null : d;
|
|
19
|
+
}
|
|
20
|
+
function rowToState(row) {
|
|
21
|
+
if (!row)
|
|
22
|
+
return null;
|
|
23
|
+
return {
|
|
24
|
+
status: row.auth_status,
|
|
25
|
+
detail: row.auth_detail,
|
|
26
|
+
checkedAt: parseDate(row.auth_checked_at),
|
|
27
|
+
firstExpiredAt: parseDate(row.auth_first_expired_at),
|
|
28
|
+
notifiedAt: parseDate(row.auth_notified_at),
|
|
29
|
+
notificationCount: row.auth_notification_count,
|
|
30
|
+
lastSuccessAt: parseDate(row.auth_last_success_at),
|
|
31
|
+
lastVerifiedAt: parseDate(row.auth_last_verified_at),
|
|
32
|
+
keepaliveNotifiedAt: parseDate(row.auth_keepalive_notified_at),
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
// SQL fragment — the "clear failure bookkeeping" columns shared between
|
|
36
|
+
// `persistCheckResult` (ok branch) and `recordReactiveAuthSuccess`
|
|
37
|
+
// (non-ok → ok branch). Centralising this ensures that when a new
|
|
38
|
+
// failure-tracking column is added (e.g. Phase 4 escalation counters),
|
|
39
|
+
// both code paths pick it up by editing a single constant. See
|
|
40
|
+
// roadmap §2.1.
|
|
41
|
+
//
|
|
42
|
+
// `last_error` is NOT included here — it is owned by the writeAuth*Detail
|
|
43
|
+
// helpers so that a future column renaming or a second writer can't
|
|
44
|
+
// drift from the redaction invariant (roadmap §2.5 / §9.2).
|
|
45
|
+
const CLEAR_FAILURE_BOOKKEEPING_SQL = `
|
|
46
|
+
auth_last_success_at = @now,
|
|
47
|
+
auth_first_expired_at = NULL,
|
|
48
|
+
auth_notified_at = NULL,
|
|
49
|
+
auth_notification_count = 0
|
|
50
|
+
`;
|
|
51
|
+
// SQL fragment — unified `auth_first_expired_at` update for any
|
|
52
|
+
// transition into a failing state. Uses a CASE on the pre-update
|
|
53
|
+
// `auth_status` column so that:
|
|
54
|
+
//
|
|
55
|
+
// ok → expired : stamp NOW (even if a stale first_expired_at
|
|
56
|
+
// somehow leaked through)
|
|
57
|
+
// expired → expired : keep the original timestamp
|
|
58
|
+
// unknown → expired : stamp NOW (first observation of failure)
|
|
59
|
+
// missing → expired : preserve (carries the original detection time)
|
|
60
|
+
//
|
|
61
|
+
// SQLite evaluates all SET expressions against the pre-update row, so
|
|
62
|
+
// `auth_status = 'ok'` in the CASE refers to the OLD value. Replaces
|
|
63
|
+
// both the TS-side `wasOk ? now : prev.firstExpiredAt ?? now` branching
|
|
64
|
+
// in `persistCheckResult` and the plain `COALESCE(auth_first_expired_at,
|
|
65
|
+
// ?)` in `recordReactiveAuthFailure`. See roadmap §2.2.
|
|
66
|
+
// Exported for `auth-recovery.ts` — the recovery failure path must
|
|
67
|
+
// apply the same first_expired_at semantics as the reactive path
|
|
68
|
+
// (recovering → expired is handled by the ELSE branch: COALESCE
|
|
69
|
+
// preserves the pre-recovery timestamp or stamps @now if NULL).
|
|
70
|
+
export const FIRST_EXPIRED_CASE_SQL = `
|
|
71
|
+
auth_first_expired_at = CASE
|
|
72
|
+
WHEN auth_status = 'ok' THEN @now
|
|
73
|
+
ELSE COALESCE(auth_first_expired_at, @now)
|
|
74
|
+
END
|
|
75
|
+
`;
|
|
76
|
+
/**
|
|
77
|
+
* Write the detail text for a FAILED auth check. Both `auth_detail`
|
|
78
|
+
* and `last_error` receive the same redacted value so that dashboards
|
|
79
|
+
* reading either column see a consistent failure message. `null`
|
|
80
|
+
* detail clears both columns.
|
|
81
|
+
*
|
|
82
|
+
* This is the ONLY supported way for production code to mutate
|
|
83
|
+
* `auth_detail` / `last_error`. The companion CI check
|
|
84
|
+
* `scripts/check-redaction-coverage.sh` (roadmap §9.2) fails if any
|
|
85
|
+
* other non-test file contains a raw `auth_detail = ?` /
|
|
86
|
+
* `last_error = ?` assignment, so a future contributor adding a new
|
|
87
|
+
* write site can't accidentally bypass redaction.
|
|
88
|
+
*/
|
|
89
|
+
export function writeAuthFailureDetail(db, backendId, detail) {
|
|
90
|
+
if (detail == null) {
|
|
91
|
+
db.prepare(`UPDATE backends SET auth_detail = NULL, last_error = NULL WHERE id = ?`).run(backendId);
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
const safe = redactSensitiveString(detail);
|
|
95
|
+
db.prepare(`UPDATE backends SET auth_detail = ?, last_error = ? WHERE id = ?`).run(safe, safe, backendId);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Write the detail text for a SUCCESSFUL auth check. Only `auth_detail`
|
|
99
|
+
* receives the text — informational ok-state strings like
|
|
100
|
+
* "Server-verified at HH:MM UTC" or "refresh_token within grace period"
|
|
101
|
+
* are preserved so the dashboard continues to show them. `last_error` is
|
|
102
|
+
* ALWAYS cleared because a passing check has no error, regardless of the
|
|
103
|
+
* informational detail.
|
|
104
|
+
*
|
|
105
|
+
* Like `writeAuthFailureDetail`, this is the only supported production
|
|
106
|
+
* write path for these columns (roadmap §9.2).
|
|
107
|
+
*/
|
|
108
|
+
export function writeAuthOkDetail(db, backendId, detail) {
|
|
109
|
+
const safe = detail != null ? redactSensitiveString(detail) : null;
|
|
110
|
+
db.prepare(`UPDATE backends SET auth_detail = ?, last_error = NULL WHERE id = ?`).run(safe, backendId);
|
|
111
|
+
}
|
|
112
|
+
// Default freshness window for pre-flight auth cache checks (10 minutes).
|
|
113
|
+
// Short enough that a stale cached `expired` doesn't block self-heal for
|
|
114
|
+
// long after a user re-auths, but long enough that a freshly confirmed
|
|
115
|
+
// failure skips the doomed main subprocess. Tunable via config.
|
|
116
|
+
const DEFAULT_PREFLIGHT_FRESHNESS_MS = 10 * 60 * 1000;
|
|
117
|
+
/**
|
|
118
|
+
* Pre-flight auth cache read — Phase 3.3 (Strategy A). Reads the
|
|
119
|
+
* backend's `auth_status` and `auth_last_verified_at` from the DB cache
|
|
120
|
+
* and decides whether the router should skip main.
|
|
121
|
+
*
|
|
122
|
+
* Decision matrix:
|
|
123
|
+
* - `recovering` → always skip (subprocess owns the row)
|
|
124
|
+
* - `expired`/`missing` + fresh cache → skip (save a doomed subprocess)
|
|
125
|
+
* - `expired`/`missing` + stale cache → don't skip (user may have re-authed)
|
|
126
|
+
* - `ok` / `unknown` / any other → don't skip
|
|
127
|
+
* - DB error → don't skip (fail-open)
|
|
128
|
+
*
|
|
129
|
+
* "Fresh" means `auth_last_verified_at` is within `freshnessMs` of now.
|
|
130
|
+
*
|
|
131
|
+
* Free function so BackendRouter can import it without holding an
|
|
132
|
+
* AuthHealthMonitor instance (same pattern as `recordReactiveAuth*`).
|
|
133
|
+
*/
|
|
134
|
+
export function readCachedAuthStatus(db, backendId, freshnessMs = DEFAULT_PREFLIGHT_FRESHNESS_MS, now = new Date()) {
|
|
135
|
+
try {
|
|
136
|
+
const row = db
|
|
137
|
+
.prepare("SELECT auth_status, auth_last_verified_at FROM backends WHERE id = ?")
|
|
138
|
+
.get(backendId);
|
|
139
|
+
if (!row)
|
|
140
|
+
return { status: "unknown", shouldSkip: false };
|
|
141
|
+
const status = row.auth_status;
|
|
142
|
+
// Recovering: the recovery subprocess owns the row — always skip.
|
|
143
|
+
if (status === "recovering") {
|
|
144
|
+
return { status, shouldSkip: true };
|
|
145
|
+
}
|
|
146
|
+
// Only expired / missing are candidates for pre-flight skip.
|
|
147
|
+
if (status !== "expired" && status !== "missing") {
|
|
148
|
+
return { status, shouldSkip: false };
|
|
149
|
+
}
|
|
150
|
+
// Expired or missing — is the cache fresh enough to trust?
|
|
151
|
+
const verifiedAt = parseDate(row.auth_last_verified_at);
|
|
152
|
+
if (!verifiedAt) {
|
|
153
|
+
// No verification timestamp → cache staleness is unknown → don't
|
|
154
|
+
// trust. Fall through to main so reactive self-heal can work.
|
|
155
|
+
return { status, shouldSkip: false };
|
|
156
|
+
}
|
|
157
|
+
const ageMs = now.getTime() - verifiedAt.getTime();
|
|
158
|
+
const isFresh = ageMs <= freshnessMs;
|
|
159
|
+
return { status, shouldSkip: isFresh };
|
|
160
|
+
}
|
|
161
|
+
catch {
|
|
162
|
+
// Fail-open: DB errors must never block backend execution.
|
|
163
|
+
return { status: "unknown", shouldSkip: false };
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Reactive-path helper: called from BackendRouter when an execute()
|
|
168
|
+
* surfaces a BackendDecisiveFailure("auth"). Writes the failure into
|
|
169
|
+
* the DB cache so `/auth status` reflects the real-time state. Kept as
|
|
170
|
+
* a free function so BackendRouter doesn't need to construct an
|
|
171
|
+
* AuthHealthMonitor.
|
|
172
|
+
*
|
|
173
|
+
* Never clobbers a `recovering` row — an in-progress recovery session
|
|
174
|
+
* takes precedence over a concurrent runtime failure. The subprocess
|
|
175
|
+
* handling the recovery owns the row until it transitions back to
|
|
176
|
+
* `ok` or `expired` on completion.
|
|
177
|
+
*
|
|
178
|
+
* Redaction of the detail string is handled by `writeAuthFailureDetail`,
|
|
179
|
+
* not inline here, so that upstream 4xx bodies echoing `Bearer
|
|
180
|
+
* sk-ant-...` fragments cannot leak into the DB through any future
|
|
181
|
+
* caller that forgets to redact manually (roadmap §9.2).
|
|
182
|
+
*
|
|
183
|
+
* Structured as a transaction so the main status UPDATE and the
|
|
184
|
+
* subsequent `writeAuthFailureDetail` commit atomically — a crash
|
|
185
|
+
* between the two must not leave a row with `auth_status = 'expired'`
|
|
186
|
+
* and a stale `auth_detail` from a prior unrelated failure.
|
|
187
|
+
*/
|
|
188
|
+
export function recordReactiveAuthFailure(db, backendId, detail, telemetry, now = new Date()) {
|
|
189
|
+
try {
|
|
190
|
+
const nowIso = now.toISOString();
|
|
191
|
+
let changes = 0;
|
|
192
|
+
db.transaction(() => {
|
|
193
|
+
// Main UPDATE — carries status, first_expired_at (unified CASE),
|
|
194
|
+
// checked_at and updated_at. Explicitly does NOT touch
|
|
195
|
+
// `auth_detail` / `last_error`; those are the exclusive province
|
|
196
|
+
// of `writeAuthFailureDetail` below. The `recovering` guard
|
|
197
|
+
// matches the existing reactive-path contract.
|
|
198
|
+
const info = db
|
|
199
|
+
.prepare(`UPDATE backends
|
|
200
|
+
SET auth_status = 'expired',
|
|
201
|
+
auth_checked_at = @now,
|
|
202
|
+
auth_last_verified_at = @now,
|
|
203
|
+
${FIRST_EXPIRED_CASE_SQL},
|
|
204
|
+
updated_at = @now
|
|
205
|
+
WHERE id = @id
|
|
206
|
+
AND auth_status IS NOT 'recovering'`)
|
|
207
|
+
.run({ now: nowIso, id: backendId });
|
|
208
|
+
changes = Number(info.changes);
|
|
209
|
+
if (changes > 0) {
|
|
210
|
+
writeAuthFailureDetail(db, backendId, detail);
|
|
211
|
+
}
|
|
212
|
+
})();
|
|
213
|
+
// Only increment telemetry if the row was actually updated (i.e. not
|
|
214
|
+
// blocked by the `recovering` guard).
|
|
215
|
+
if (changes > 0) {
|
|
216
|
+
telemetry?.recordReactiveExpired(backendId);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
catch (err) {
|
|
220
|
+
// DB write is best-effort — never block backend execution fallback.
|
|
221
|
+
// But we MUST leave a log trail so a locked DB / schema drift doesn't
|
|
222
|
+
// silently drop auth telemetry while the dashboard stays green.
|
|
223
|
+
logger.warn({ err, backendId }, "recordReactiveAuthFailure: DB write failed (auth status will stay stale until next probe)");
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
// States that the reactive success path treats as "needs transition to ok".
|
|
227
|
+
// `unknown` is included so first-ever successful use clears the initial
|
|
228
|
+
// state, but it is NOT counted as a self-heal (see persistCheckResult for
|
|
229
|
+
// the matching invariant — the counter tracks recoveries from an
|
|
230
|
+
// OBSERVED failure, not first-time use).
|
|
231
|
+
const NON_OK_STATES = new Set(["expired", "missing", "unknown"]);
|
|
232
|
+
const SELF_HEAL_PREV_STATES = new Set(["expired", "missing"]);
|
|
233
|
+
// Phase 4 — proactive notification schedule.
|
|
234
|
+
//
|
|
235
|
+
// Source of truth: `docs/design/09-safety-cost.md` §9.5.4.
|
|
236
|
+
// DO NOT change these values without updating the design doc first.
|
|
237
|
+
//
|
|
238
|
+
// Grace period: the delay between first observed failure and the 1st
|
|
239
|
+
// proactive DM. Lets the CLI self-heal on its next successful call
|
|
240
|
+
// (observed empirically on Codex / Gemini) without triggering a noisy
|
|
241
|
+
// notification that the user has to ignore.
|
|
242
|
+
const PROACTIVE_GRACE_PERIOD_MIN = 30;
|
|
243
|
+
// Escalation steps (minutes) from the 1st notification onward. Index i
|
|
244
|
+
// holds the delay from notification #(i+1) to notification #(i+2). After
|
|
245
|
+
// the array is exhausted, the last step repeats (so step 2 and onward
|
|
246
|
+
// all fire every 24h).
|
|
247
|
+
//
|
|
248
|
+
// Note: the 1st notification is gated by PROACTIVE_GRACE_PERIOD_MIN,
|
|
249
|
+
// not by this array. ESCALATION_STEPS_MIN[0] is the *delay from the 1st
|
|
250
|
+
// DM to the 2nd*.
|
|
251
|
+
const ESCALATION_STEPS_MIN = [6 * 60, 24 * 60];
|
|
252
|
+
// Days elapsed since `auth_first_expired_at` after which the DM tone
|
|
253
|
+
// sharpens ("3 days elapsed, please act"). Tuned to match the design
|
|
254
|
+
// doc §3.3 row "+3 days | sharpen reminder tone".
|
|
255
|
+
const URGENT_TONE_DAYS = 3;
|
|
256
|
+
/**
|
|
257
|
+
* Reactive-path self-heal helper: called from BackendRouter when an
|
|
258
|
+
* execute() succeeds. Bumps `auth_last_success_at` (so the 60-day
|
|
259
|
+
* keepalive sweep tracks real usage, not just manual dashboard clicks)
|
|
260
|
+
* and transitions expired/missing rows back to ok (so the DB cache
|
|
261
|
+
* reflects the reality of a working backend without waiting for a
|
|
262
|
+
* manual dashboard "Check auth" button press).
|
|
263
|
+
*
|
|
264
|
+
* A successful execute is authoritative — it proves the CLI held
|
|
265
|
+
* working credentials at some point in the last few seconds. Never
|
|
266
|
+
* clobbers a `recovering` row for the same reason as
|
|
267
|
+
* recordReactiveAuthFailure: the recovering subprocess owns the row.
|
|
268
|
+
*/
|
|
269
|
+
export function recordReactiveAuthSuccess(db, backendId, telemetry, now = new Date()) {
|
|
270
|
+
try {
|
|
271
|
+
const nowIso = now.toISOString();
|
|
272
|
+
const prev = db
|
|
273
|
+
.prepare("SELECT auth_status FROM backends WHERE id = ?")
|
|
274
|
+
.get(backendId);
|
|
275
|
+
if (!prev)
|
|
276
|
+
return;
|
|
277
|
+
if (prev.auth_status === "recovering")
|
|
278
|
+
return;
|
|
279
|
+
if (NON_OK_STATES.has(prev.auth_status)) {
|
|
280
|
+
// Non-ok → ok transition: clear all failure bookkeeping and
|
|
281
|
+
// count it as a self-heal ONLY when the prior state represented
|
|
282
|
+
// an OBSERVED failure (mirrors persistCheckResult semantics —
|
|
283
|
+
// `unknown` is a fresh install, not a recovery).
|
|
284
|
+
//
|
|
285
|
+
// The main UPDATE and the subsequent detail-clear run inside a
|
|
286
|
+
// transaction so the row never momentarily holds `auth_status =
|
|
287
|
+
// 'ok'` alongside a stale failure detail (roadmap §2.5).
|
|
288
|
+
db.transaction(() => {
|
|
289
|
+
db.prepare(`UPDATE backends
|
|
290
|
+
SET auth_status = 'ok',
|
|
291
|
+
${CLEAR_FAILURE_BOOKKEEPING_SQL},
|
|
292
|
+
auth_last_verified_at = @now,
|
|
293
|
+
updated_at = @now
|
|
294
|
+
WHERE id = @id`).run({ now: nowIso, id: backendId });
|
|
295
|
+
writeAuthOkDetail(db, backendId, null);
|
|
296
|
+
})();
|
|
297
|
+
if (SELF_HEAL_PREV_STATES.has(prev.auth_status)) {
|
|
298
|
+
// Reactive path: a real execute() succeeded after a previously
|
|
299
|
+
// observed failure. Tagged `reactive` so Phase 4 dashboards can
|
|
300
|
+
// contrast this against probe-observed heals.
|
|
301
|
+
telemetry?.recordSelfHealObserved(backendId, "reactive");
|
|
302
|
+
}
|
|
303
|
+
return;
|
|
304
|
+
}
|
|
305
|
+
// ok → ok: just bump last_success_at + last_verified_at so keepalive
|
|
306
|
+
// tracks real usage and the pre-flight freshness check stays current.
|
|
307
|
+
db.prepare(`UPDATE backends
|
|
308
|
+
SET auth_last_success_at = ?,
|
|
309
|
+
auth_last_verified_at = ?,
|
|
310
|
+
updated_at = ?
|
|
311
|
+
WHERE id = ?`).run(nowIso, nowIso, nowIso, backendId);
|
|
312
|
+
}
|
|
313
|
+
catch (err) {
|
|
314
|
+
// Best-effort — a DB failure here must NOT break backend execution.
|
|
315
|
+
logger.warn({ err, backendId }, "recordReactiveAuthSuccess: DB write failed (auth_last_success_at will stay stale)");
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
export class AuthHealthMonitor {
|
|
319
|
+
db;
|
|
320
|
+
cores;
|
|
321
|
+
telemetry;
|
|
322
|
+
keepaliveThresholdDays;
|
|
323
|
+
keepaliveDedupeDays;
|
|
324
|
+
notifier;
|
|
325
|
+
now;
|
|
326
|
+
isMorningRoutineActiveFn;
|
|
327
|
+
isQuietHoursFn;
|
|
328
|
+
probeDisabledFn;
|
|
329
|
+
/**
|
|
330
|
+
* Promise returned from the currently in-flight `checkAll()` call, or
|
|
331
|
+
* `null` when no tick is running. Used as a single-owner guard so
|
|
332
|
+
* overlapping cron ticks (e.g. a slow probe still running when the
|
|
333
|
+
* next hour fires) serialize without queueing stacks of probes. The
|
|
334
|
+
* field is set atomically before any `await` to avoid the
|
|
335
|
+
* microtask-scheduling race that bit `Dispatcher.hourlyCheckInProgress`
|
|
336
|
+
* pre-C1 fix (see `dispatcher.ts`).
|
|
337
|
+
*/
|
|
338
|
+
checkAllInFlight = null;
|
|
339
|
+
constructor(db, cores, telemetry, options = {}) {
|
|
340
|
+
this.db = db;
|
|
341
|
+
this.cores = cores;
|
|
342
|
+
this.telemetry = telemetry;
|
|
343
|
+
this.keepaliveThresholdDays = options.keepaliveThresholdDays
|
|
344
|
+
?? parseEnvDays(process.env.PA_AUTH_KEEPALIVE_DAYS, 60);
|
|
345
|
+
this.keepaliveDedupeDays = options.keepaliveDedupeDays ?? 30;
|
|
346
|
+
this.notifier = options.notifier;
|
|
347
|
+
this.now = options.now ?? (() => new Date());
|
|
348
|
+
this.isMorningRoutineActiveFn = options.isMorningRoutineActive;
|
|
349
|
+
this.isQuietHoursFn = options.isQuietHours;
|
|
350
|
+
this.probeDisabledFn = options.probeDisabled;
|
|
351
|
+
}
|
|
352
|
+
/** Read current DB state for a backend, or null when no row exists. */
|
|
353
|
+
loadState(backendId) {
|
|
354
|
+
const row = this.db
|
|
355
|
+
.prepare(`SELECT id,
|
|
356
|
+
auth_status,
|
|
357
|
+
auth_detail,
|
|
358
|
+
auth_checked_at,
|
|
359
|
+
auth_first_expired_at,
|
|
360
|
+
auth_notified_at,
|
|
361
|
+
auth_notification_count,
|
|
362
|
+
auth_last_success_at,
|
|
363
|
+
auth_last_verified_at,
|
|
364
|
+
auth_keepalive_notified_at
|
|
365
|
+
FROM backends
|
|
366
|
+
WHERE id = ?`)
|
|
367
|
+
.get(backendId);
|
|
368
|
+
return rowToState(row);
|
|
369
|
+
}
|
|
370
|
+
/**
|
|
371
|
+
* Persist the result of an AuthCheckResult (from `checkAuthDetailed()`) to
|
|
372
|
+
* the DB. Handles the transitions described in the design doc:
|
|
373
|
+
*
|
|
374
|
+
* ok → ok : update `auth_last_success_at`
|
|
375
|
+
* non-ok → ok : clear first_expired/notified/notification_count + record self-heal
|
|
376
|
+
* ok → non-ok : set first_expired_at (once)
|
|
377
|
+
* non-ok → non-ok : keep first_expired_at, update detail
|
|
378
|
+
*
|
|
379
|
+
* `first_expired_at` management uses `FIRST_EXPIRED_CASE_SQL` — the
|
|
380
|
+
* same fragment reused by `recordReactiveAuthFailure` — so both paths
|
|
381
|
+
* share a single source of truth (roadmap §2.2). `auth_detail` /
|
|
382
|
+
* `last_error` writes go through the `writeAuth*Detail` helpers
|
|
383
|
+
* (roadmap §9.2), and main UPDATE + detail UPDATE run in a
|
|
384
|
+
* transaction to keep the two in lockstep.
|
|
385
|
+
*/
|
|
386
|
+
persistCheckResult(backendId, result) {
|
|
387
|
+
const prev = this.loadState(backendId);
|
|
388
|
+
const nowIso = this.now().toISOString();
|
|
389
|
+
const status = result.status;
|
|
390
|
+
if (status === "ok") {
|
|
391
|
+
// Only count a self-heal when we explicitly observed a prior failure.
|
|
392
|
+
// `unknown` (the initial state before any probe has run) is NOT a
|
|
393
|
+
// self-heal — the very first successful check shouldn't bump the counter.
|
|
394
|
+
const observedSelfHeal = prev !== null && SELF_HEAL_PREV_STATES.has(prev.status);
|
|
395
|
+
this.db.transaction(() => {
|
|
396
|
+
this.db
|
|
397
|
+
.prepare(`UPDATE backends
|
|
398
|
+
SET auth_status = @status,
|
|
399
|
+
auth_checked_at = @now,
|
|
400
|
+
auth_last_verified_at = @now,
|
|
401
|
+
auth_method = @method,
|
|
402
|
+
${CLEAR_FAILURE_BOOKKEEPING_SQL},
|
|
403
|
+
updated_at = @now
|
|
404
|
+
WHERE id = @id`)
|
|
405
|
+
.run({
|
|
406
|
+
status,
|
|
407
|
+
now: nowIso,
|
|
408
|
+
method: result.method,
|
|
409
|
+
id: backendId,
|
|
410
|
+
});
|
|
411
|
+
// ok-path helper preserves informational detail (e.g.
|
|
412
|
+
// "Server-verified at HH:MM UTC", "refresh_token within grace
|
|
413
|
+
// period") and always clears `last_error`.
|
|
414
|
+
writeAuthOkDetail(this.db, backendId, result.detail ?? null);
|
|
415
|
+
})();
|
|
416
|
+
if (observedSelfHeal) {
|
|
417
|
+
// Probe path: `persistCheckResult` is the entry point for the
|
|
418
|
+
// Phase 4 hourly probe (and, today, the dashboard's manual
|
|
419
|
+
// "Check auth" button — still semantically a side-channel
|
|
420
|
+
// check, not a user-triggered execute). Tagged `probe` so the
|
|
421
|
+
// Analytics tab can attribute recoveries correctly.
|
|
422
|
+
this.telemetry.recordSelfHealObserved(backendId, "probe");
|
|
423
|
+
}
|
|
424
|
+
return;
|
|
425
|
+
}
|
|
426
|
+
// Non-ok path: expired / missing. `auth_method` is intentionally
|
|
427
|
+
// NOT updated here — matches pre-refactor behaviour (the ok branch
|
|
428
|
+
// is the only place that refreshes the method).
|
|
429
|
+
this.db.transaction(() => {
|
|
430
|
+
this.db
|
|
431
|
+
.prepare(`UPDATE backends
|
|
432
|
+
SET auth_status = @status,
|
|
433
|
+
auth_checked_at = @now,
|
|
434
|
+
auth_last_verified_at = @now,
|
|
435
|
+
${FIRST_EXPIRED_CASE_SQL},
|
|
436
|
+
updated_at = @now
|
|
437
|
+
WHERE id = @id`)
|
|
438
|
+
.run({ status, now: nowIso, id: backendId });
|
|
439
|
+
writeAuthFailureDetail(this.db, backendId, result.detail ?? null);
|
|
440
|
+
})();
|
|
441
|
+
}
|
|
442
|
+
/**
|
|
443
|
+
* **Phase 4 hourly probe** — design doc §3.1–§3.5.
|
|
444
|
+
*
|
|
445
|
+
* Probe every enabled backend with a registered core, persist each
|
|
446
|
+
* result to the DB cache, and decide whether to send a **single**
|
|
447
|
+
* aggregated proactive DM listing all failing backends.
|
|
448
|
+
*
|
|
449
|
+
* Invariants (see the class-level comment for the full list):
|
|
450
|
+
* 1. Reactive and proactive notification paths are strictly separated.
|
|
451
|
+
* `recordReactiveAuthFailure` stamps `auth_first_expired_at`, which
|
|
452
|
+
* seeds the grace period; the next proactive tick reads that
|
|
453
|
+
* timestamp, waits PROACTIVE_GRACE_PERIOD_MIN, then (optionally)
|
|
454
|
+
* sends one DM through this method.
|
|
455
|
+
* 2. Probe results are persisted through `persistCheckResult` even
|
|
456
|
+
* when notifications are suppressed (quiet hours, missing
|
|
457
|
+
* notifier, disabled kill switch). This keeps the `/auth status`
|
|
458
|
+
* endpoint and the keepalive sweep consistent with reality.
|
|
459
|
+
* 3. `checkAll()` never starts a recovery subprocess. Recovery is
|
|
460
|
+
* strictly user-initiated (§3 design principle). A backend row
|
|
461
|
+
* currently in `auth_status = 'recovering'` is skipped entirely —
|
|
462
|
+
* the recovering subprocess owns the row until it writes back.
|
|
463
|
+
* 4. One DM per tick. Even if three backends are expired and past
|
|
464
|
+
* their escalation threshold, a single batched message is sent.
|
|
465
|
+
* This is enforced structurally (buildNotificationMessage returns
|
|
466
|
+
* one string for a list) rather than via dedupe state.
|
|
467
|
+
*
|
|
468
|
+
* Gates applied in order:
|
|
469
|
+
* - probeDisabled? → no-op
|
|
470
|
+
* - in-flight dedupe (single-owner promise) → return the existing tick
|
|
471
|
+
* - isMorningRoutineActive? → skip entire probe
|
|
472
|
+
* - per-backend `recovering` skip
|
|
473
|
+
*
|
|
474
|
+
* Quiet hours only suppress the **notification tail** — the DB is
|
|
475
|
+
* still updated. This is deliberate: a user checking the dashboard
|
|
476
|
+
* during quiet hours should see the real state, not stale ok.
|
|
477
|
+
*/
|
|
478
|
+
async checkAll() {
|
|
479
|
+
if (this.probeDisabledFn?.() === true) {
|
|
480
|
+
logger.debug("AuthHealthMonitor.checkAll — skipped (probeDisabled)");
|
|
481
|
+
return;
|
|
482
|
+
}
|
|
483
|
+
if (this.checkAllInFlight) {
|
|
484
|
+
logger.debug("AuthHealthMonitor.checkAll — previous tick still in flight, awaiting");
|
|
485
|
+
return this.checkAllInFlight;
|
|
486
|
+
}
|
|
487
|
+
if (this.isMorningRoutineActiveFn?.() === true) {
|
|
488
|
+
logger.info("AuthHealthMonitor.checkAll — skipped (morning routine active)");
|
|
489
|
+
return;
|
|
490
|
+
}
|
|
491
|
+
const task = this.runCheckAll().finally(() => {
|
|
492
|
+
this.checkAllInFlight = null;
|
|
493
|
+
});
|
|
494
|
+
this.checkAllInFlight = task;
|
|
495
|
+
return task;
|
|
496
|
+
}
|
|
497
|
+
async runCheckAll() {
|
|
498
|
+
// Resolve the enabled-backend set ONCE per tick. Disabled backends
|
|
499
|
+
// are skipped at iteration (matching `runKeepaliveSweep`) so we
|
|
500
|
+
// don't burn CLI subprocess cost on rows the router never consults.
|
|
501
|
+
// Stale cache for a re-enabled backend is reseeded via the reactive
|
|
502
|
+
// path on first use, or via the dashboard's "Check auth" button —
|
|
503
|
+
// no need to probe continuously.
|
|
504
|
+
const enabledIds = new Set(this.readEnabledBackendIds());
|
|
505
|
+
// Step 1: snapshot every enabled backend's prev state BEFORE any
|
|
506
|
+
// probe runs, so `shouldNotify` sees the pre-update view
|
|
507
|
+
// (firstExpiredAt / notifiedAt / notificationCount) and not the row
|
|
508
|
+
// we're about to overwrite via `persistCheckResult`. Per-backend
|
|
509
|
+
// try/catch so a locked DB or schema drift on one row doesn't
|
|
510
|
+
// abort the entire sweep — same defensive contract as
|
|
511
|
+
// `recordReactiveAuth*`.
|
|
512
|
+
const snapshots = new Map();
|
|
513
|
+
for (const backendId of getBackendIds()) {
|
|
514
|
+
if (!this.cores[backendId])
|
|
515
|
+
continue;
|
|
516
|
+
if (!enabledIds.has(backendId))
|
|
517
|
+
continue;
|
|
518
|
+
try {
|
|
519
|
+
snapshots.set(backendId, this.loadState(backendId));
|
|
520
|
+
}
|
|
521
|
+
catch (err) {
|
|
522
|
+
logger.warn({ err, backendId }, "AuthHealthMonitor.checkAll — loadState failed during snapshot, treating as unknown");
|
|
523
|
+
snapshots.set(backendId, null);
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
// Step 2: probe each non-recovering backend. Two layered try/catch
|
|
527
|
+
// blocks so DB failures during `persistCheckResult` are NOT
|
|
528
|
+
// mislabeled as `network_error` (roadmap critique M1):
|
|
529
|
+
// (a) probe exception → `network_error` telemetry, DB untouched
|
|
530
|
+
// (b) persist exception → logged, DB possibly stale but tick
|
|
531
|
+
// continues for other backends (no telemetry mislabel)
|
|
532
|
+
const results = [];
|
|
533
|
+
for (const [backendId, prev] of snapshots) {
|
|
534
|
+
if (prev?.status === "recovering") {
|
|
535
|
+
logger.debug({ backendId }, "AuthHealthMonitor.checkAll — skipping recovering backend");
|
|
536
|
+
continue;
|
|
537
|
+
}
|
|
538
|
+
const core = this.cores[backendId];
|
|
539
|
+
if (!core)
|
|
540
|
+
continue;
|
|
541
|
+
let result;
|
|
542
|
+
try {
|
|
543
|
+
result = await core.checkAuthDetailed();
|
|
544
|
+
}
|
|
545
|
+
catch (err) {
|
|
546
|
+
// Network / subprocess failure — do NOT flip the cached status.
|
|
547
|
+
// The design spec is explicit: network errors must be
|
|
548
|
+
// distinguishable from revocations so we don't page the user
|
|
549
|
+
// every time their Wi-Fi hiccups.
|
|
550
|
+
this.telemetry.recordProbeResult(backendId, "network_error");
|
|
551
|
+
logger.warn({ err, backendId }, "AuthHealthMonitor.checkAll — probe raised, leaving DB cache untouched");
|
|
552
|
+
continue;
|
|
553
|
+
}
|
|
554
|
+
// Telemetry is recorded BEFORE persist intentionally: the counter
|
|
555
|
+
// tracks "probe observations" (what the CLI reported), not "DB
|
|
556
|
+
// cache updates" (what we successfully wrote). A persist failure
|
|
557
|
+
// leaves telemetry and DB cache temporarily inconsistent, but the
|
|
558
|
+
// alternative (recording after persist) would silently drop the
|
|
559
|
+
// observation — making it invisible to the Analytics dashboard
|
|
560
|
+
// while the operator debugs why the DB cache is stale.
|
|
561
|
+
this.telemetry.recordProbeResult(backendId, result.status === "ok" ? "ok" : "unauthorized");
|
|
562
|
+
try {
|
|
563
|
+
this.persistCheckResult(backendId, result);
|
|
564
|
+
}
|
|
565
|
+
catch (err) {
|
|
566
|
+
// DB write failed (locked, schema drift, disk full, etc.).
|
|
567
|
+
// Telemetry has already been recorded above so the observation
|
|
568
|
+
// is not lost. Log + continue so other backends still get
|
|
569
|
+
// their DB updates this tick.
|
|
570
|
+
logger.warn({ err, backendId }, "AuthHealthMonitor.checkAll — persistCheckResult failed, DB cache may be stale for this tick");
|
|
571
|
+
continue;
|
|
572
|
+
}
|
|
573
|
+
results.push({ backendId, prev, result });
|
|
574
|
+
}
|
|
575
|
+
// Step 3: collect the subset that needs a proactive DM.
|
|
576
|
+
const quietHours = this.isQuietHoursFn?.() === true;
|
|
577
|
+
const toNotify = [];
|
|
578
|
+
for (const { backendId, prev, result } of results) {
|
|
579
|
+
if (result.status === "ok")
|
|
580
|
+
continue;
|
|
581
|
+
if (!this.shouldNotify(result, prev, quietHours))
|
|
582
|
+
continue;
|
|
583
|
+
toNotify.push({ backendId, prev, result });
|
|
584
|
+
}
|
|
585
|
+
if (toNotify.length === 0 || !this.notifier)
|
|
586
|
+
return;
|
|
587
|
+
// Step 4: re-check morning-routine gate (B3). The initial gate in
|
|
588
|
+
// `checkAll()` fires BEFORE the probe loop, so a morning routine
|
|
589
|
+
// that starts mid-probe would sneak past it. Re-verifying here
|
|
590
|
+
// REDUCES the race window from minutes (probe loop) to seconds
|
|
591
|
+
// (DM transmission latency). It is not a hard guarantee —
|
|
592
|
+
// eliminating it entirely would require the routine startup to
|
|
593
|
+
// drain a notification queue, which is out of Phase 4 scope. If
|
|
594
|
+
// the routine is now active, we defer the DM to the next tick —
|
|
595
|
+
// probe results are already persisted, so the dashboard still
|
|
596
|
+
// reflects reality; only the DM is delayed.
|
|
597
|
+
if (this.isMorningRoutineActiveFn?.() === true) {
|
|
598
|
+
logger.info({ backends: toNotify.map((t) => t.backendId) }, "AuthHealthMonitor.checkAll — morning routine became active mid-tick, deferring DM to next probe");
|
|
599
|
+
return;
|
|
600
|
+
}
|
|
601
|
+
// Step 5: send one aggregated DM, then stamp notified_at /
|
|
602
|
+
// notification_count for each backend we notified about. The stamp
|
|
603
|
+
// runs AFTER a successful `notifier.send` so a DM failure leaves
|
|
604
|
+
// the escalation state untouched (we'll retry on the next tick).
|
|
605
|
+
const message = this.buildNotificationMessage(toNotify);
|
|
606
|
+
try {
|
|
607
|
+
await this.notifier.send(message, { kind: "probe_failure" });
|
|
608
|
+
}
|
|
609
|
+
catch (err) {
|
|
610
|
+
logger.warn({ err, backends: toNotify.map((t) => t.backendId) }, "AuthHealthMonitor.checkAll — notifier.send failed, deferring escalation stamp to next tick");
|
|
611
|
+
return;
|
|
612
|
+
}
|
|
613
|
+
const nowIso = this.now().toISOString();
|
|
614
|
+
for (const { backendId } of toNotify) {
|
|
615
|
+
try {
|
|
616
|
+
this.db
|
|
617
|
+
.prepare(`UPDATE backends
|
|
618
|
+
SET auth_notified_at = ?,
|
|
619
|
+
auth_notification_count = auth_notification_count + 1,
|
|
620
|
+
updated_at = ?
|
|
621
|
+
WHERE id = ?`)
|
|
622
|
+
.run(nowIso, nowIso, backendId);
|
|
623
|
+
}
|
|
624
|
+
catch (err) {
|
|
625
|
+
logger.warn({ err, backendId }, "AuthHealthMonitor.checkAll — failed to stamp notified_at (may re-notify next tick)");
|
|
626
|
+
}
|
|
627
|
+
}
|
|
628
|
+
}
|
|
629
|
+
/**
|
|
630
|
+
* Read the set of `enabled = 1` backend ids. Wrapped for defensive
|
|
631
|
+
* DB error handling (consistent with the rest of checkAll — a
|
|
632
|
+
* locked / broken DB should degrade gracefully, not crash the
|
|
633
|
+
* hourly cron handler). On read failure we return an empty set,
|
|
634
|
+
* effectively skipping the tick entirely.
|
|
635
|
+
*/
|
|
636
|
+
readEnabledBackendIds() {
|
|
637
|
+
try {
|
|
638
|
+
return this.db
|
|
639
|
+
.prepare("SELECT id FROM backends WHERE enabled = 1")
|
|
640
|
+
.all()
|
|
641
|
+
.map((r) => r.id)
|
|
642
|
+
.filter((id) => isBackendId(id));
|
|
643
|
+
}
|
|
644
|
+
catch (err) {
|
|
645
|
+
logger.warn({ err }, "AuthHealthMonitor.checkAll — readEnabledBackendIds failed, skipping tick");
|
|
646
|
+
return [];
|
|
647
|
+
}
|
|
648
|
+
}
|
|
649
|
+
/**
|
|
650
|
+
* Notification decision per design spec §3.3 `shouldNotify`. Pure
|
|
651
|
+
* function of `(current result, prev state, now, quietHours)` so it
|
|
652
|
+
* is trivially unit-testable.
|
|
653
|
+
*
|
|
654
|
+
* Rules:
|
|
655
|
+
* - ok result → never notify (caller already filtered, but kept
|
|
656
|
+
* defensive so `shouldNotify` can be called in isolation).
|
|
657
|
+
* - prev.status is "ok" or "unknown" or null → first observation,
|
|
658
|
+
* defer to the next tick. `persistCheckResult` has already
|
|
659
|
+
* stamped `auth_first_expired_at` at this point, so the next
|
|
660
|
+
* tick will see it and start the grace period countdown.
|
|
661
|
+
* - prev.firstExpiredAt is null (defensive) → defer.
|
|
662
|
+
* - no prior notification (notifiedAt == null) → notify iff the
|
|
663
|
+
* grace period has elapsed. This is the "1st DM" path. **Quiet
|
|
664
|
+
* hours DO NOT suppress this initial DM** — design spec §3.3
|
|
665
|
+
* intentionally bypasses quiet hours for the first notification
|
|
666
|
+
* so that an auth failure is surfaced to the user as close to
|
|
667
|
+
* real time as possible. The user would rather get a late-night
|
|
668
|
+
* DM about broken auth than discover it the next morning mid-
|
|
669
|
+
* workflow.
|
|
670
|
+
* - prior notification exists → check escalation step. **Escalation
|
|
671
|
+
* DMs DO respect quiet hours** (the design spec calls these
|
|
672
|
+
* "quiet reminder"); a 6h / 24h reminder can safely wait until
|
|
673
|
+
* quiet hours end because the user has already been told once.
|
|
674
|
+
*
|
|
675
|
+
* Note: because NotificationManager has its own quiet-hours gate,
|
|
676
|
+
* the wiring in `index.ts` passes `category: "error"` for probe
|
|
677
|
+
* failure DMs so that the lower layer does NOT silently drop the
|
|
678
|
+
* 1st DM. Without that bypass, shouldNotify returning true during
|
|
679
|
+
* quiet hours would send the DM to a sink that silently discards
|
|
680
|
+
* it AND incorrectly advances our escalation bookkeeping.
|
|
681
|
+
*/
|
|
682
|
+
shouldNotify(current, prev, quietHours) {
|
|
683
|
+
if (current.status === "ok")
|
|
684
|
+
return false;
|
|
685
|
+
// First observation in this failure session — wait for next tick so
|
|
686
|
+
// the grace period has a non-zero duration to measure against. Also
|
|
687
|
+
// covers `prev === null` (brand-new row, no history at all).
|
|
688
|
+
if (!prev || prev.status === "ok" || prev.status === "unknown") {
|
|
689
|
+
return false;
|
|
690
|
+
}
|
|
691
|
+
if (!prev.firstExpiredAt)
|
|
692
|
+
return false;
|
|
693
|
+
const nowMs = this.now().getTime();
|
|
694
|
+
if (!prev.notifiedAt) {
|
|
695
|
+
// 1st DM — gated only by the grace period. Quiet hours are
|
|
696
|
+
// intentionally NOT checked here (design spec §3.3).
|
|
697
|
+
const graceMin = (nowMs - prev.firstExpiredAt.getTime()) / 60_000;
|
|
698
|
+
return graceMin >= PROACTIVE_GRACE_PERIOD_MIN;
|
|
699
|
+
}
|
|
700
|
+
// Escalation DMs (2nd+) respect quiet hours.
|
|
701
|
+
if (quietHours)
|
|
702
|
+
return false;
|
|
703
|
+
return this.hasEscalationElapsed(prev, nowMs);
|
|
704
|
+
}
|
|
705
|
+
hasEscalationElapsed(prev, nowMs) {
|
|
706
|
+
if (!prev.notifiedAt)
|
|
707
|
+
return false;
|
|
708
|
+
const minutesSince = (nowMs - prev.notifiedAt.getTime()) / 60_000;
|
|
709
|
+
// notificationCount starts at 1 after the first DM. Step index
|
|
710
|
+
// `count - 1` gives the delay from DM #count to DM #(count+1).
|
|
711
|
+
const count = Math.max(1, prev.notificationCount);
|
|
712
|
+
const idx = Math.min(count - 1, ESCALATION_STEPS_MIN.length - 1);
|
|
713
|
+
const threshold = ESCALATION_STEPS_MIN[idx];
|
|
714
|
+
return minutesSince >= threshold;
|
|
715
|
+
}
|
|
716
|
+
/**
|
|
717
|
+
* Build the proactive DM text per design spec §3.4. A single message
|
|
718
|
+
* lists every failing backend with its detail and an actionable
|
|
719
|
+
* recovery command. Tone sharpens once any failing backend has been
|
|
720
|
+
* expired for `URGENT_TONE_DAYS` days — matching the design's
|
|
721
|
+
* "3 days elapsed" escalation row.
|
|
722
|
+
*
|
|
723
|
+
* The `/auth fix <backend>` flows referenced in the design spec
|
|
724
|
+
* arrive in Phase 5 + 6; for Phase 4 the message surfaces the
|
|
725
|
+
* direct CLI command (`codex login` / `gemini`) so the user can
|
|
726
|
+
* recover without waiting for dispatcher support.
|
|
727
|
+
*/
|
|
728
|
+
buildNotificationMessage(items) {
|
|
729
|
+
const nowMs = this.now().getTime();
|
|
730
|
+
const sharpTone = items.some((item) => {
|
|
731
|
+
const first = item.prev?.firstExpiredAt;
|
|
732
|
+
if (!first)
|
|
733
|
+
return false;
|
|
734
|
+
return (nowMs - first.getTime()) / 86_400_000 >= URGENT_TONE_DAYS;
|
|
735
|
+
});
|
|
736
|
+
const header = sharpTone
|
|
737
|
+
? `🔑 ⚠️ Authentication has not been recovered for ${URGENT_TONE_DAYS}+ days`
|
|
738
|
+
: "🔑 Backend authentication issue detected";
|
|
739
|
+
const lines = [header, ""];
|
|
740
|
+
for (const { backendId, result, prev } of items) {
|
|
741
|
+
const detail = result.detail ?? result.status;
|
|
742
|
+
const since = prev?.firstExpiredAt
|
|
743
|
+
? ` (${formatElapsed(nowMs - prev.firstExpiredAt.getTime())} elapsed)`
|
|
744
|
+
: "";
|
|
745
|
+
lines.push(`• ${backendId}: ❌ ${result.status} — ${detail}${since}`);
|
|
746
|
+
}
|
|
747
|
+
lines.push("");
|
|
748
|
+
lines.push("To recover, run the following in your terminal:");
|
|
749
|
+
for (const { backendId, result } of items) {
|
|
750
|
+
const cmd = result.recoveryCommand ?? defaultRecoveryCommand(backendId);
|
|
751
|
+
lines.push(` ${cmd}`);
|
|
752
|
+
}
|
|
753
|
+
lines.push("");
|
|
754
|
+
lines.push("(The daemon will auto-detect when recovery is complete.)");
|
|
755
|
+
return lines.join("\n");
|
|
756
|
+
}
|
|
757
|
+
/**
|
|
758
|
+
* Daemon startup hook: if a backend row is stuck in `recovering` (e.g.
|
|
759
|
+
* from a previous crash), reset it to `expired` so the user is re-notified
|
|
760
|
+
* instead of waiting up to an hour for the next probe.
|
|
761
|
+
*
|
|
762
|
+
* **Forward-compat note (roadmap §2.3)**: in v1 no production code path
|
|
763
|
+
* writes `auth_status = 'recovering'`, so this function matches zero
|
|
764
|
+
* rows in practice. It is kept wired up at daemon startup because
|
|
765
|
+
* Phase 5 (Codex device auth) and Phase 6 (Gemini code relay) will
|
|
766
|
+
* introduce `AuthRecovery.initiate*Auth` calls that DO set
|
|
767
|
+
* `recovering`, at which point a daemon crash mid-recovery leaves a
|
|
768
|
+
* stuck row that this function must clean up. Deleting the function
|
|
769
|
+
* in v1 and re-adding it for Phase 5/6 would generate churn without
|
|
770
|
+
* benefit — treat it as a hook that is intentionally dormant until
|
|
771
|
+
* the recovery subprocesses land.
|
|
772
|
+
*/
|
|
773
|
+
reconcilePendingRecoveries() {
|
|
774
|
+
const info = this.db
|
|
775
|
+
.prepare(`UPDATE backends
|
|
776
|
+
SET auth_status = 'expired',
|
|
777
|
+
auth_detail = 'Recovery process lost (daemon restart)',
|
|
778
|
+
updated_at = ?
|
|
779
|
+
WHERE auth_status = 'recovering'`)
|
|
780
|
+
.run(this.now().toISOString());
|
|
781
|
+
return Number(info.changes);
|
|
782
|
+
}
|
|
783
|
+
/** Return the list of backend ids whose cached state is expired or missing. */
|
|
784
|
+
listExpiredBackends() {
|
|
785
|
+
const rows = this.db
|
|
786
|
+
.prepare("SELECT id FROM backends WHERE auth_status IN ('expired', 'missing') ORDER BY id")
|
|
787
|
+
.all();
|
|
788
|
+
return rows
|
|
789
|
+
.map((r) => r.id)
|
|
790
|
+
.filter((id) => isBackendId(id));
|
|
791
|
+
}
|
|
792
|
+
/** Render a user-facing `/auth status` summary. */
|
|
793
|
+
renderStatusSummary() {
|
|
794
|
+
const lines = ["🔑 Auth Status", ""];
|
|
795
|
+
for (const backendId of getBackendIds()) {
|
|
796
|
+
const state = this.loadState(backendId);
|
|
797
|
+
const status = state?.status ?? "unknown";
|
|
798
|
+
const icon = statusIcon(status);
|
|
799
|
+
const detail = formatStatusDetail(status, state);
|
|
800
|
+
lines.push(`${icon} ${pad(backendId, 12)}— ${detail}`);
|
|
801
|
+
}
|
|
802
|
+
return lines.join("\n");
|
|
803
|
+
}
|
|
804
|
+
/**
|
|
805
|
+
* Keepalive sweep: for every ENABLED backend whose `auth_last_success_at`
|
|
806
|
+
* is older than `keepaliveThresholdDays`, send a reminder DM — unless a
|
|
807
|
+
* reminder was already sent within `keepaliveDedupeDays`.
|
|
808
|
+
*
|
|
809
|
+
* Each backend is processed in its own try/catch so a single notifier
|
|
810
|
+
* failure does not abort the sweep for the remaining backends and leave
|
|
811
|
+
* them without their `auth_keepalive_notified_at` stamp (which would
|
|
812
|
+
* cause next sweep to re-send the same reminder to everyone).
|
|
813
|
+
*/
|
|
814
|
+
async runKeepaliveSweep() {
|
|
815
|
+
const reminded = [];
|
|
816
|
+
if (!this.notifier)
|
|
817
|
+
return reminded;
|
|
818
|
+
const now = this.now();
|
|
819
|
+
const thresholdMs = this.keepaliveThresholdDays * 86_400_000;
|
|
820
|
+
const dedupeMs = this.keepaliveDedupeDays * 86_400_000;
|
|
821
|
+
// Iterate the canonical backend list (not `Object.keys(this.cores)`)
|
|
822
|
+
// so the sweep is deterministic and we can filter by `enabled = 1`.
|
|
823
|
+
const enabledIds = new Set(this.db
|
|
824
|
+
.prepare("SELECT id FROM backends WHERE enabled = 1")
|
|
825
|
+
.all()
|
|
826
|
+
.map((r) => r.id)
|
|
827
|
+
.filter((id) => isBackendId(id)));
|
|
828
|
+
for (const backendId of getBackendIds()) {
|
|
829
|
+
if (!this.cores[backendId])
|
|
830
|
+
continue;
|
|
831
|
+
if (!enabledIds.has(backendId))
|
|
832
|
+
continue;
|
|
833
|
+
const state = this.loadState(backendId);
|
|
834
|
+
if (!state || state.status !== "ok" || !state.lastSuccessAt)
|
|
835
|
+
continue;
|
|
836
|
+
const idleMs = now.getTime() - state.lastSuccessAt.getTime();
|
|
837
|
+
if (idleMs < thresholdMs)
|
|
838
|
+
continue;
|
|
839
|
+
if (state.keepaliveNotifiedAt
|
|
840
|
+
&& now.getTime() - state.keepaliveNotifiedAt.getTime() < dedupeMs) {
|
|
841
|
+
continue;
|
|
842
|
+
}
|
|
843
|
+
const days = Math.floor(idleMs / 86_400_000);
|
|
844
|
+
try {
|
|
845
|
+
await this.notifier.send(`💤 ${backendId}: No active use for ${days} days.\n`
|
|
846
|
+
+ "Consider running it soon to prevent credential expiration.", { kind: "keepalive" });
|
|
847
|
+
}
|
|
848
|
+
catch (err) {
|
|
849
|
+
logger.warn({ err, backendId }, "runKeepaliveSweep: notifier.send failed — skipping DB stamp so next sweep retries");
|
|
850
|
+
continue;
|
|
851
|
+
}
|
|
852
|
+
try {
|
|
853
|
+
this.db
|
|
854
|
+
.prepare(`UPDATE backends
|
|
855
|
+
SET auth_keepalive_notified_at = ?,
|
|
856
|
+
updated_at = ?
|
|
857
|
+
WHERE id = ?`)
|
|
858
|
+
.run(now.toISOString(), now.toISOString(), backendId);
|
|
859
|
+
this.telemetry.recordKeepaliveReminder(backendId);
|
|
860
|
+
reminded.push(backendId);
|
|
861
|
+
}
|
|
862
|
+
catch (err) {
|
|
863
|
+
/* v8 ignore next 4 — DB stamp failure after successful notify; SQLite rarely throws after write */
|
|
864
|
+
logger.warn({ err, backendId }, "runKeepaliveSweep: DB stamp failed after notify (may re-send next sweep)");
|
|
865
|
+
}
|
|
866
|
+
}
|
|
867
|
+
return reminded;
|
|
868
|
+
}
|
|
869
|
+
}
|
|
870
|
+
function parseEnvDays(value, fallback) {
|
|
871
|
+
if (!value)
|
|
872
|
+
return fallback;
|
|
873
|
+
const n = Number(value);
|
|
874
|
+
return Number.isFinite(n) && n > 0 ? n : fallback;
|
|
875
|
+
}
|
|
876
|
+
function statusIcon(status) {
|
|
877
|
+
switch (status) {
|
|
878
|
+
case "ok":
|
|
879
|
+
return "✅";
|
|
880
|
+
case "expiring_soon":
|
|
881
|
+
return "🟡";
|
|
882
|
+
case "expired":
|
|
883
|
+
return "🔴";
|
|
884
|
+
case "missing":
|
|
885
|
+
return "⚫";
|
|
886
|
+
case "recovering":
|
|
887
|
+
return "🔄";
|
|
888
|
+
default:
|
|
889
|
+
return "❓";
|
|
890
|
+
}
|
|
891
|
+
}
|
|
892
|
+
function formatStatusDetail(status, state) {
|
|
893
|
+
if (status === "ok")
|
|
894
|
+
return "ok";
|
|
895
|
+
if (status === "recovering")
|
|
896
|
+
return "recovering (re-auth in progress)";
|
|
897
|
+
if (status === "unknown")
|
|
898
|
+
return "unknown";
|
|
899
|
+
const since = state?.firstExpiredAt
|
|
900
|
+
? ` (since ${state.firstExpiredAt.toISOString().slice(0, 16).replace("T", " ")})`
|
|
901
|
+
: "";
|
|
902
|
+
return `${status}${since}${state?.detail ? ` — ${state.detail}` : ""}`;
|
|
903
|
+
}
|
|
904
|
+
function pad(s, width) {
|
|
905
|
+
const gap = Math.max(1, width - s.length);
|
|
906
|
+
return s + " ".repeat(gap);
|
|
907
|
+
}
|
|
908
|
+
/**
|
|
909
|
+
* Render a duration as `{N}d {M}h` / `{M}h {S}m` / `{S}m` depending
|
|
910
|
+
* on magnitude. Only used by the proactive DM builder; never parses
|
|
911
|
+
* back into a number.
|
|
912
|
+
*/
|
|
913
|
+
function formatElapsed(ms) {
|
|
914
|
+
const totalMinutes = Math.max(0, Math.floor(ms / 60_000));
|
|
915
|
+
const days = Math.floor(totalMinutes / (24 * 60));
|
|
916
|
+
const hoursAfterDays = Math.floor((totalMinutes - days * 24 * 60) / 60);
|
|
917
|
+
if (days > 0) {
|
|
918
|
+
return hoursAfterDays > 0
|
|
919
|
+
? `${days}d ${hoursAfterDays}h`
|
|
920
|
+
: `${days}d`;
|
|
921
|
+
}
|
|
922
|
+
const hours = Math.floor(totalMinutes / 60);
|
|
923
|
+
const minutesAfterHours = totalMinutes - hours * 60;
|
|
924
|
+
if (hours > 0) {
|
|
925
|
+
return minutesAfterHours > 0
|
|
926
|
+
? `${hours}h ${minutesAfterHours}m`
|
|
927
|
+
: `${hours}h`;
|
|
928
|
+
}
|
|
929
|
+
return `${totalMinutes}m`;
|
|
930
|
+
}
|
|
931
|
+
/**
|
|
932
|
+
* Default CLI command for recovering a backend's credentials. Used
|
|
933
|
+
* when the probe result doesn't carry a `recoveryCommand` hint. The
|
|
934
|
+
* Gemini command is bare `gemini` because the CLI prompts for
|
|
935
|
+
* re-auth on its next invocation — there's no dedicated subcommand.
|
|
936
|
+
*/
|
|
937
|
+
function defaultRecoveryCommand(backendId) {
|
|
938
|
+
switch (backendId) {
|
|
939
|
+
case "claude":
|
|
940
|
+
return "claude auth login";
|
|
941
|
+
case "codex":
|
|
942
|
+
return "codex login";
|
|
943
|
+
case "gemini":
|
|
944
|
+
return "gemini";
|
|
945
|
+
/* v8 ignore next 2 — unreachable: BackendId is a closed union of the three cases above */
|
|
946
|
+
default:
|
|
947
|
+
return `${backendId} auth`;
|
|
948
|
+
}
|
|
949
|
+
}
|
|
950
|
+
//# sourceMappingURL=auth-health-monitor.js.map
|