@aitne/daemon 0.1.7 → 0.1.9
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/dist/adapters/composite-dashboard-stream.d.ts +8 -11
- package/dist/adapters/composite-dashboard-stream.js +8 -11
- package/dist/adapters/dashboard-adapter.d.ts +18 -6
- package/dist/adapters/dashboard-adapter.js +101 -55
- package/dist/adapters/discord.d.ts +10 -3
- package/dist/adapters/discord.js +102 -26
- package/dist/adapters/docs-qa-adapter.d.ts +15 -16
- package/dist/adapters/docs-qa-adapter.js +14 -15
- package/dist/adapters/message-hub.d.ts +2 -3
- package/dist/adapters/message-hub.js +9 -3
- package/dist/adapters/notification-manager.d.ts +100 -3
- package/dist/adapters/notification-manager.js +244 -23
- package/dist/adapters/outbound-text.d.ts +17 -4
- package/dist/adapters/outbound-text.js +119 -5
- package/dist/adapters/primary-platform-resolver.d.ts +68 -0
- package/dist/adapters/primary-platform-resolver.js +54 -0
- package/dist/adapters/slack-adapter.d.ts +32 -5
- package/dist/adapters/slack-adapter.js +146 -58
- package/dist/adapters/telegram-adapter.d.ts +11 -8
- package/dist/adapters/telegram-adapter.js +63 -42
- package/dist/adapters/types.d.ts +3 -4
- package/dist/adapters/types.js +0 -1
- package/dist/adapters/whatsapp-adapter.d.ts +104 -18
- package/dist/adapters/whatsapp-adapter.js +305 -69
- package/dist/api/chat-binding-query.d.ts +0 -1
- package/dist/api/chat-binding-query.js +0 -1
- package/dist/api/chat-session-resume.d.ts +0 -1
- package/dist/api/chat-session-resume.js +0 -1
- package/dist/api/directory-picker.d.ts +0 -1
- package/dist/api/directory-picker.js +14 -1
- package/dist/api/env-writer.d.ts +0 -1
- package/dist/api/env-writer.js +108 -5
- package/dist/api/helpers/agent-errors-envelope.d.ts +116 -0
- package/dist/api/helpers/agent-errors-envelope.js +165 -0
- package/dist/api/helpers/agent-errors-registry.d.ts +2290 -0
- package/dist/api/helpers/agent-errors-registry.js +2197 -0
- package/dist/api/helpers/agent-errors-types.d.ts +193 -0
- package/dist/api/helpers/agent-errors-types.js +15 -0
- package/dist/api/helpers/agent-errors-zod.d.ts +33 -0
- package/dist/api/helpers/agent-errors-zod.js +138 -0
- package/dist/api/helpers/agent-errors.d.ts +4 -0
- package/dist/api/helpers/agent-errors.js +17 -0
- package/dist/api/integration-route-gate.d.ts +0 -1
- package/dist/api/integration-route-gate.js +10 -4
- package/dist/api/json-body.d.ts +3 -4
- package/dist/api/json-body.js +3 -4
- package/dist/api/routes/activity-sources.d.ts +1 -2
- package/dist/api/routes/activity-sources.js +0 -1
- package/dist/api/routes/agent-schedule-plan-match.d.ts +4 -0
- package/dist/api/routes/agent-schedule-plan-match.js +100 -0
- package/dist/api/routes/agent-schedule.d.ts +3 -0
- package/dist/api/routes/agent-schedule.js +790 -0
- package/dist/api/routes/agent.d.ts +0 -1
- package/dist/api/routes/agent.js +233 -367
- package/dist/api/routes/agents/index.d.ts +3 -0
- package/dist/api/routes/agents/index.js +404 -0
- package/dist/api/routes/agents/views.d.ts +185 -0
- package/dist/api/routes/agents/views.js +514 -0
- package/dist/api/routes/apple-calendar.d.ts +1 -2
- package/dist/api/routes/apple-calendar.js +110 -29
- package/dist/api/routes/attachments.d.ts +0 -1
- package/dist/api/routes/attachments.js +113 -22
- package/dist/api/routes/backends.d.ts +0 -1
- package/dist/api/routes/backends.js +144 -40
- package/dist/api/routes/books.d.ts +0 -1
- package/dist/api/routes/books.js +65 -26
- package/dist/api/routes/browser-automation-purchase.d.ts +31 -0
- package/dist/api/routes/browser-automation-purchase.js +251 -0
- package/dist/api/routes/browser-automation-sites.d.ts +22 -0
- package/dist/api/routes/browser-automation-sites.js +238 -0
- package/dist/api/routes/browser-history-managed.d.ts +23 -0
- package/dist/api/routes/browser-history-managed.js +202 -0
- package/dist/api/routes/browser-history.d.ts +3 -0
- package/dist/api/routes/browser-history.js +433 -0
- package/dist/api/routes/browser-task.d.ts +43 -0
- package/dist/api/routes/browser-task.js +617 -0
- package/dist/api/routes/calendar.d.ts +3 -3
- package/dist/api/routes/calendar.js +330 -56
- package/dist/api/routes/commands.d.ts +0 -1
- package/dist/api/routes/commands.js +27 -2
- package/dist/api/routes/context/frontmatter-merge.d.ts +28 -0
- package/dist/api/routes/context/frontmatter-merge.js +56 -0
- package/dist/api/routes/context/index.d.ts +40 -0
- package/dist/api/routes/context/index.js +174 -0
- package/dist/api/routes/context/locks.d.ts +3 -0
- package/dist/api/routes/context/locks.js +136 -0
- package/dist/api/routes/context/path-resolve.d.ts +26 -0
- package/dist/api/routes/context/path-resolve.js +125 -0
- package/dist/api/routes/context/permissions.d.ts +58 -0
- package/dist/api/routes/context/permissions.js +234 -0
- package/dist/api/routes/context/read.d.ts +3 -0
- package/dist/api/routes/context/read.js +306 -0
- package/dist/api/routes/context/repair.d.ts +3 -0
- package/dist/api/routes/context/repair.js +114 -0
- package/dist/api/routes/context/snapshots.d.ts +3 -0
- package/dist/api/routes/context/snapshots.js +208 -0
- package/dist/api/routes/context/write-step.d.ts +132 -0
- package/dist/api/routes/context/write-step.js +151 -0
- package/dist/api/routes/context/write.d.ts +3 -0
- package/dist/api/routes/context/write.js +781 -0
- package/dist/api/routes/dashboard/config.d.ts +3 -0
- package/dist/api/routes/dashboard/config.js +507 -0
- package/dist/api/routes/dashboard/conversations.d.ts +3 -0
- package/dist/api/routes/dashboard/conversations.js +308 -0
- package/dist/api/routes/dashboard/cost-approvals.d.ts +28 -0
- package/dist/api/routes/dashboard/cost-approvals.js +258 -0
- package/dist/api/routes/dashboard/index.d.ts +26 -0
- package/dist/api/routes/dashboard/index.js +46 -0
- package/dist/api/routes/dashboard/messaging.d.ts +3 -0
- package/dist/api/routes/dashboard/messaging.js +349 -0
- package/dist/api/routes/dashboard/notifications.d.ts +3 -0
- package/dist/api/routes/dashboard/notifications.js +108 -0
- package/dist/api/routes/dashboard/oauth-google.d.ts +3 -0
- package/dist/api/routes/dashboard/oauth-google.js +288 -0
- package/dist/api/routes/dashboard/schedule-readonly.d.ts +3 -0
- package/dist/api/routes/dashboard/schedule-readonly.js +54 -0
- package/dist/api/routes/dashboard/secrets.d.ts +23 -0
- package/dist/api/routes/dashboard/secrets.js +306 -0
- package/dist/api/routes/dashboard/snapshots.d.ts +3 -0
- package/dist/api/routes/dashboard/snapshots.js +32 -0
- package/dist/api/routes/delegated-sync.d.ts +0 -1
- package/dist/api/routes/delegated-sync.js +0 -1
- package/dist/api/routes/delegated.d.ts +5 -5
- package/dist/api/routes/delegated.js +6 -6
- package/dist/api/routes/docs.d.ts +0 -1
- package/dist/api/routes/docs.js +72 -10
- package/dist/api/routes/entities.d.ts +0 -1
- package/dist/api/routes/entities.js +114 -45
- package/dist/api/routes/fs.d.ts +0 -1
- package/dist/api/routes/fs.js +27 -13
- package/dist/api/routes/fs.logic.d.ts +0 -1
- package/dist/api/routes/fs.logic.js +6 -2
- package/dist/api/routes/git-accounts.d.ts +0 -1
- package/dist/api/routes/git-accounts.js +0 -1
- package/dist/api/routes/git-templates.d.ts +0 -1
- package/dist/api/routes/git-templates.js +113 -28
- package/dist/api/routes/git.d.ts +0 -1
- package/dist/api/routes/git.js +65 -16
- package/dist/api/routes/github.d.ts +0 -1
- package/dist/api/routes/github.js +130 -24
- package/dist/api/routes/health.d.ts +0 -1
- package/dist/api/routes/health.js +4 -3
- package/dist/api/routes/integrations/crud-patch.d.ts +16 -0
- package/dist/api/routes/integrations/crud-patch.js +638 -0
- package/dist/api/routes/integrations/crud.d.ts +15 -0
- package/dist/api/routes/integrations/crud.js +157 -0
- package/dist/api/routes/integrations/exec.d.ts +22 -0
- package/dist/api/routes/integrations/exec.js +349 -0
- package/dist/api/routes/integrations/index.d.ts +61 -0
- package/dist/api/routes/integrations/index.js +69 -0
- package/dist/api/routes/integrations/probe.d.ts +20 -0
- package/dist/api/routes/integrations/probe.js +246 -0
- package/dist/api/routes/integrations-reconcile.d.ts +0 -1
- package/dist/api/routes/integrations-reconcile.js +0 -1
- package/dist/api/routes/knowledge.d.ts +0 -1
- package/dist/api/routes/knowledge.js +14 -4
- package/dist/api/routes/mail/accounts.d.ts +3 -0
- package/dist/api/routes/mail/accounts.js +288 -0
- package/dist/api/routes/mail/app-password.d.ts +3 -0
- package/dist/api/routes/mail/app-password.js +191 -0
- package/dist/api/routes/mail/body-helpers.d.ts +55 -0
- package/dist/api/routes/mail/body-helpers.js +90 -0
- package/dist/api/routes/mail/dependencies.d.ts +35 -0
- package/dist/api/routes/mail/dependencies.js +1 -0
- package/dist/api/routes/mail/drafts.d.ts +4 -0
- package/dist/api/routes/mail/drafts.js +138 -0
- package/dist/api/routes/mail/gating.d.ts +44 -0
- package/dist/api/routes/mail/gating.js +98 -0
- package/dist/api/routes/mail/index.d.ts +17 -0
- package/dist/api/routes/mail/index.js +39 -0
- package/dist/api/routes/mail/messages.d.ts +14 -0
- package/dist/api/routes/mail/messages.js +238 -0
- package/dist/api/routes/mail/outlook-config.d.ts +3 -0
- package/dist/api/routes/mail/outlook-config.js +72 -0
- package/dist/api/routes/mail/provider-resolver.d.ts +63 -0
- package/dist/api/routes/mail/provider-resolver.js +285 -0
- package/dist/api/routes/mail/providers.d.ts +3 -0
- package/dist/api/routes/mail/providers.js +72 -0
- package/dist/api/routes/mail/search-health.d.ts +3 -0
- package/dist/api/routes/mail/search-health.js +130 -0
- package/dist/api/routes/mail/tags-folders.d.ts +4 -0
- package/dist/api/routes/mail/tags-folders.js +34 -0
- package/dist/api/routes/mail/validators.d.ts +22 -0
- package/dist/api/routes/mail/validators.js +130 -0
- package/dist/api/routes/managed-tasks.d.ts +0 -1
- package/dist/api/routes/managed-tasks.js +154 -63
- package/dist/api/routes/mcp.d.ts +0 -1
- package/dist/api/routes/mcp.js +115 -48
- package/dist/api/routes/metrics.d.ts +1 -2
- package/dist/api/routes/metrics.js +2 -3
- package/dist/api/routes/notion.d.ts +0 -1
- package/dist/api/routes/notion.js +234 -55
- package/dist/api/routes/observations.d.ts +0 -1
- package/dist/api/routes/observations.js +53 -184
- package/dist/api/routes/obsidian.d.ts +0 -1
- package/dist/api/routes/obsidian.js +193 -33
- package/dist/api/routes/profile-questions.d.ts +0 -1
- package/dist/api/routes/profile-questions.js +26 -5
- package/dist/api/routes/receipts.d.ts +0 -1
- package/dist/api/routes/receipts.js +64 -25
- package/dist/api/routes/recurring-schedules.d.ts +0 -1
- package/dist/api/routes/recurring-schedules.js +288 -15
- package/dist/api/routes/repositories.d.ts +0 -1
- package/dist/api/routes/repositories.js +278 -105
- package/dist/api/routes/schedule-model-resolver.d.ts +152 -0
- package/dist/api/routes/schedule-model-resolver.js +285 -0
- package/dist/api/routes/schedule-options.d.ts +24 -0
- package/dist/api/routes/schedule-options.js +76 -0
- package/dist/api/routes/schedule-validation.d.ts +145 -0
- package/dist/api/routes/schedule-validation.js +152 -0
- package/dist/api/routes/setup-migrate.d.ts +0 -1
- package/dist/api/routes/setup-migrate.js +6 -4
- package/dist/api/routes/setup.d.ts +0 -1
- package/dist/api/routes/setup.js +142 -27
- package/dist/api/routes/skill-curation.d.ts +0 -1
- package/dist/api/routes/skill-curation.js +0 -1
- package/dist/api/routes/skills.d.ts +2 -1
- package/dist/api/routes/skills.js +92 -33
- package/dist/api/routes/sot-bindings.d.ts +1 -2
- package/dist/api/routes/sot-bindings.js +46 -12
- package/dist/api/routes/sse.d.ts +0 -1
- package/dist/api/routes/sse.js +6 -2
- package/dist/api/routes/system.d.ts +0 -1
- package/dist/api/routes/system.js +15 -3
- package/dist/api/routes/task-flows.d.ts +0 -1
- package/dist/api/routes/task-flows.js +0 -1
- package/dist/api/routes/travel-bookings.d.ts +0 -1
- package/dist/api/routes/travel-bookings.js +26 -10
- package/dist/api/routes/triggers.d.ts +0 -1
- package/dist/api/routes/triggers.js +0 -1
- package/dist/api/routes/voice.d.ts +0 -1
- package/dist/api/routes/voice.js +0 -1
- package/dist/api/routes/wiki.d.ts +0 -1
- package/dist/api/routes/wiki.js +84 -17
- package/dist/api/server.d.ts +55 -6
- package/dist/api/server.js +76 -22
- package/dist/bootstrap/adapters.d.ts +0 -1
- package/dist/bootstrap/adapters.js +7 -5
- package/dist/bootstrap/api.d.ts +219 -0
- package/dist/bootstrap/api.js +502 -0
- package/dist/bootstrap/catchup.d.ts +0 -1
- package/dist/bootstrap/catchup.js +1 -2
- package/dist/bootstrap/db.d.ts +213 -0
- package/dist/bootstrap/db.js +617 -0
- package/dist/bootstrap/event-pipeline.d.ts +329 -0
- package/dist/bootstrap/event-pipeline.js +1203 -0
- package/dist/bootstrap/managed-chromium.d.ts +26 -0
- package/dist/bootstrap/managed-chromium.js +66 -0
- package/dist/bootstrap/observers.d.ts +147 -0
- package/dist/bootstrap/observers.js +586 -0
- package/dist/bootstrap/schedule-helpers.d.ts +122 -1
- package/dist/bootstrap/schedule-helpers.js +206 -6
- package/dist/bootstrap/services.d.ts +0 -1
- package/dist/bootstrap/services.js +1 -11
- package/dist/config.d.ts +1 -2
- package/dist/config.js +32 -15
- package/dist/core/abort-utils.d.ts +13 -0
- package/dist/core/abort-utils.js +35 -0
- package/dist/core/agent-core.d.ts +36 -4
- package/dist/core/agent-core.js +3 -2
- package/dist/core/agent-execution-recorder.d.ts +78 -0
- package/dist/core/agent-execution-recorder.js +60 -0
- package/dist/core/agents/agent-execution-tracker.d.ts +91 -0
- package/dist/core/agents/agent-execution-tracker.js +226 -0
- package/dist/core/agents/agent-frontmatter.d.ts +57 -0
- package/dist/core/agents/agent-frontmatter.js +74 -0
- package/dist/core/agents/agent-id-resolver.d.ts +47 -0
- package/dist/core/agents/agent-id-resolver.js +61 -0
- package/dist/core/agents/builtin-registry.d.ts +156 -0
- package/dist/core/agents/builtin-registry.js +257 -0
- package/dist/core/agents/cron-substitute.d.ts +60 -0
- package/dist/core/agents/cron-substitute.js +100 -0
- package/dist/core/agents/definition-criteria.d.ts +14 -0
- package/dist/core/agents/definition-criteria.js +25 -0
- package/dist/core/agents/effective-definition.d.ts +47 -0
- package/dist/core/agents/effective-definition.js +101 -0
- package/dist/core/agents/firing-blocked.d.ts +28 -0
- package/dist/core/agents/firing-blocked.js +27 -0
- package/dist/core/agents/loader-boot.d.ts +26 -0
- package/dist/core/agents/loader-boot.js +98 -0
- package/dist/core/agents/loader-watcher.d.ts +23 -0
- package/dist/core/agents/loader-watcher.js +84 -0
- package/dist/core/agents/loader.d.ts +188 -0
- package/dist/core/agents/loader.js +754 -0
- package/dist/core/agents/override-merge.d.ts +57 -0
- package/dist/core/agents/override-merge.js +131 -0
- package/dist/core/agents/recurrence-convert.d.ts +92 -0
- package/dist/core/agents/recurrence-convert.js +207 -0
- package/dist/core/agents/recurring-schedule-adapter.d.ts +24 -0
- package/dist/core/agents/recurring-schedule-adapter.js +157 -0
- package/dist/core/agents/success-criteria.d.ts +60 -0
- package/dist/core/agents/success-criteria.js +139 -0
- package/dist/core/agents/validate-agent-md.d.ts +17 -0
- package/dist/core/agents/validate-agent-md.js +64 -0
- package/dist/core/alerts.d.ts +0 -1
- package/dist/core/alerts.js +0 -1
- package/dist/core/atomic-write.d.ts +0 -1
- package/dist/core/atomic-write.js +17 -4
- package/dist/core/backends/api-key-probe.d.ts +0 -1
- package/dist/core/backends/api-key-probe.js +0 -1
- package/dist/core/backends/auth-health-monitor.d.ts +0 -1
- package/dist/core/backends/auth-health-monitor.js +31 -5
- package/dist/core/backends/auth-recovery.d.ts +0 -1
- package/dist/core/backends/auth-recovery.js +17 -4
- package/dist/core/backends/auth-telemetry.d.ts +0 -1
- package/dist/core/backends/auth-telemetry.js +0 -1
- package/dist/core/backends/backend-router.d.ts +44 -3
- package/dist/core/backends/backend-router.js +230 -3
- package/dist/core/backends/claude-auth.d.ts +0 -1
- package/dist/core/backends/claude-auth.js +0 -1
- package/dist/core/backends/claude-code-core.d.ts +53 -2
- package/dist/core/backends/claude-code-core.js +202 -29
- package/dist/core/backends/claude-credentials-store.d.ts +0 -1
- package/dist/core/backends/claude-credentials-store.js +0 -1
- package/dist/core/backends/claude-delegated.d.ts +0 -1
- package/dist/core/backends/claude-delegated.js +14 -15
- package/dist/core/backends/claude-errors.d.ts +0 -1
- package/dist/core/backends/claude-errors.js +0 -1
- package/dist/core/backends/claude-probe.d.ts +0 -1
- package/dist/core/backends/claude-probe.js +0 -1
- package/dist/core/backends/claude-tool-collection.d.ts +0 -1
- package/dist/core/backends/claude-tool-collection.js +177 -32
- package/dist/core/backends/cli-quota-guards.d.ts +100 -0
- package/dist/core/backends/cli-quota-guards.js +95 -0
- package/dist/core/backends/cli-utils.d.ts +26 -2
- package/dist/core/backends/cli-utils.js +133 -15
- package/dist/core/backends/codex-core.d.ts +13 -2
- package/dist/core/backends/codex-core.js +470 -63
- package/dist/core/backends/gemini-cli-core.d.ts +5 -2
- package/dist/core/backends/gemini-cli-core.js +348 -68
- package/dist/core/backends/idle-watchdog.d.ts +0 -1
- package/dist/core/backends/idle-watchdog.js +0 -1
- package/dist/core/backends/install-methods.d.ts +0 -1
- package/dist/core/backends/install-methods.js +22 -1
- package/dist/core/backends/model-registry.d.ts +10 -6
- package/dist/core/backends/model-registry.js +204 -34
- package/dist/core/backends/native-skill-discovery-probe.d.ts +77 -0
- package/dist/core/backends/native-skill-discovery-probe.js +172 -0
- package/dist/core/backends/opencode-basic-auth-fetch.d.ts +26 -0
- package/dist/core/backends/opencode-basic-auth-fetch.js +39 -0
- package/dist/core/backends/opencode-config-builder.d.ts +113 -0
- package/dist/core/backends/opencode-config-builder.js +184 -0
- package/dist/core/backends/opencode-core.d.ts +315 -0
- package/dist/core/backends/opencode-core.js +1508 -0
- package/dist/core/backends/opencode-event-mapper.d.ts +132 -0
- package/dist/core/backends/opencode-event-mapper.js +197 -0
- package/dist/core/backends/opencode-mcp.d.ts +81 -0
- package/dist/core/backends/opencode-mcp.js +157 -0
- package/dist/core/backends/opencode-server-manager.d.ts +113 -0
- package/dist/core/backends/opencode-server-manager.js +221 -0
- package/dist/core/backends/opencode-types.d.ts +45 -0
- package/dist/core/backends/opencode-types.js +13 -0
- package/dist/core/backends/plan-presets.d.ts +18 -6
- package/dist/core/backends/plan-presets.js +191 -24
- package/dist/core/backends/price-fetcher.d.ts +0 -1
- package/dist/core/backends/price-fetcher.js +0 -1
- package/dist/core/backends/process-config-cascade.d.ts +35 -1
- package/dist/core/backends/process-config-cascade.js +35 -2
- package/dist/core/backends/prompt-utils.d.ts +0 -1
- package/dist/core/backends/prompt-utils.js +0 -3
- package/dist/core/backends/proxy-model-registry.d.ts +0 -1
- package/dist/core/backends/proxy-model-registry.js +0 -1
- package/dist/core/backends/quota-reset-hints.d.ts +43 -0
- package/dist/core/backends/quota-reset-hints.js +116 -0
- package/dist/core/backends/silent-api-error-detector.d.ts +0 -1
- package/dist/core/backends/silent-api-error-detector.js +0 -1
- package/dist/core/bang-commands/commands-checks.d.ts +16 -0
- package/dist/core/bang-commands/commands-checks.js +58 -0
- package/dist/core/bang-commands/commands-close.d.ts +23 -0
- package/dist/core/bang-commands/commands-close.js +23 -0
- package/dist/core/bang-commands/commands-cost.d.ts +0 -1
- package/dist/core/bang-commands/commands-cost.js +13 -1
- package/dist/core/bang-commands/commands-help.d.ts +0 -1
- package/dist/core/bang-commands/commands-help.js +44 -6
- package/dist/core/bang-commands/commands-report.d.ts +0 -1
- package/dist/core/bang-commands/commands-report.js +1 -1
- package/dist/core/bang-commands/commands-research.d.ts +36 -0
- package/dist/core/bang-commands/commands-research.js +284 -0
- package/dist/core/bang-commands/commands-stop-start.d.ts +0 -1
- package/dist/core/bang-commands/commands-stop-start.js +2 -1
- package/dist/core/bang-commands/commands-wiki.d.ts +0 -1
- package/dist/core/bang-commands/commands-wiki.js +53 -14
- package/dist/core/bang-commands/format-utils.d.ts +15 -3
- package/dist/core/bang-commands/format-utils.js +23 -4
- package/dist/core/bang-commands/index.d.ts +3 -1
- package/dist/core/bang-commands/index.js +14 -1
- package/dist/core/bang-commands/registry.d.ts +59 -1
- package/dist/core/bang-commands/registry.js +175 -23
- package/dist/core/bang-commands/user-commands.d.ts +0 -1
- package/dist/core/bang-commands/user-commands.js +0 -1
- package/dist/core/browser-history/pre-morning-digest-job.d.ts +79 -0
- package/dist/core/browser-history/pre-morning-digest-job.js +89 -0
- package/dist/core/browser-history/research-cluster-fanout.d.ts +40 -0
- package/dist/core/browser-history/research-cluster-fanout.js +47 -0
- package/dist/core/browser-history/research-events.d.ts +37 -0
- package/dist/core/browser-history/research-events.js +70 -0
- package/dist/core/channel-timeline.d.ts +18 -2
- package/dist/core/channel-timeline.js +44 -1
- package/dist/core/character-block.d.ts +0 -1
- package/dist/core/character-block.js +0 -1
- package/dist/core/context/activity-sources.d.ts +3 -4
- package/dist/core/context/activity-sources.js +0 -1
- package/dist/core/context/activity-view-reconciler.d.ts +1 -2
- package/dist/core/context/activity-view-reconciler.js +10 -10
- package/dist/core/context/activity-view-runner.d.ts +0 -1
- package/dist/core/context/activity-view-runner.js +11 -3
- package/dist/core/context/default-schedules-reconciler.d.ts +1 -2
- package/dist/core/context/default-schedules-reconciler.js +1 -2
- package/dist/core/context/default-schedules-runner.d.ts +0 -1
- package/dist/core/context/default-schedules-runner.js +44 -5
- package/dist/core/context/domain-index-reconciler.d.ts +3 -1
- package/dist/core/context/domain-index-reconciler.js +11 -5
- package/dist/core/context/domain-index-runner.d.ts +0 -1
- package/dist/core/context/domain-index-runner.js +9 -2
- package/dist/core/context/entity-mirror.d.ts +9 -7
- package/dist/core/context/entity-mirror.js +21 -9
- package/dist/core/context/entity-source-rename.d.ts +0 -1
- package/dist/core/context/entity-source-rename.js +9 -2
- package/dist/core/context/index-reconciler.d.ts +26 -5
- package/dist/core/context/index-reconciler.js +110 -56
- package/dist/core/context/policy-index-reconciler.d.ts +6 -7
- package/dist/core/context/policy-index-reconciler.js +6 -7
- package/dist/core/context/policy-index-runner.d.ts +2 -3
- package/dist/core/context/policy-index-runner.js +10 -3
- package/dist/core/context/reconciler-runner.d.ts +0 -1
- package/dist/core/context/reconciler-runner.js +46 -6
- package/dist/core/context/reconciler-section.d.ts +30 -0
- package/dist/core/context/reconciler-section.js +39 -0
- package/dist/core/context-builder-calendar.d.ts +36 -0
- package/dist/core/context-builder-calendar.js +245 -0
- package/dist/core/context-builder-conversation.d.ts +95 -0
- package/dist/core/context-builder-conversation.js +444 -0
- package/dist/core/context-builder-format.d.ts +8 -0
- package/dist/core/context-builder-format.js +22 -0
- package/dist/core/context-builder-projects.d.ts +11 -0
- package/dist/core/context-builder-projects.js +102 -0
- package/dist/core/context-builder-yesterday.d.ts +30 -0
- package/dist/core/context-builder-yesterday.js +198 -0
- package/dist/core/context-builder.d.ts +73 -124
- package/dist/core/context-builder.js +272 -903
- package/dist/core/context-file-serializer.d.ts +92 -0
- package/dist/core/context-file-serializer.js +126 -0
- package/dist/core/context-frontmatter-extract.d.ts +32 -0
- package/dist/core/context-frontmatter-extract.js +98 -0
- package/dist/core/context-frontmatter.d.ts +14 -1
- package/dist/core/context-frontmatter.js +180 -109
- package/dist/core/context-health.d.ts +0 -1
- package/dist/core/context-health.js +25 -14
- package/dist/core/context-paths.d.ts +128 -85
- package/dist/core/context-paths.js +190 -108
- package/dist/core/context-staleness.d.ts +0 -1
- package/dist/core/context-staleness.js +2 -3
- package/dist/core/context-validation/frontmatter.d.ts +73 -0
- package/dist/core/context-validation/frontmatter.js +216 -0
- package/dist/core/context-validation/index.d.ts +19 -0
- package/dist/core/context-validation/index.js +19 -0
- package/dist/core/context-validation/prepare-write.d.ts +94 -0
- package/dist/core/context-validation/prepare-write.js +145 -0
- package/dist/core/context-validation/routine-rulebook.d.ts +59 -0
- package/dist/core/context-validation/routine-rulebook.js +155 -0
- package/dist/core/context-validation/section.d.ts +40 -0
- package/dist/core/context-validation/section.js +90 -0
- package/dist/core/context-validation/snapshot-debounce.d.ts +51 -0
- package/dist/core/context-validation/snapshot-debounce.js +109 -0
- package/dist/core/context-validation/today.d.ts +84 -0
- package/dist/core/context-validation/today.js +167 -0
- package/dist/core/context-vault-aliases.d.ts +107 -0
- package/dist/core/context-vault-aliases.js +253 -0
- package/dist/core/custom-routine-scheduler.d.ts +5 -6
- package/dist/core/custom-routine-scheduler.js +3 -4
- package/dist/core/daemon-api-cli.d.ts +6 -6
- package/dist/core/daemon-api-cli.js +132 -33
- package/dist/core/dashboard-session-cleanup.d.ts +0 -1
- package/dist/core/dashboard-session-cleanup.js +0 -1
- package/dist/core/dashboard-session-controls.d.ts +0 -1
- package/dist/core/dashboard-session-controls.js +0 -1
- package/dist/core/delegated-connector-health.d.ts +0 -1
- package/dist/core/delegated-connector-health.js +0 -1
- package/dist/core/dispatcher-date-utils.d.ts +0 -1
- package/dist/core/dispatcher-date-utils.js +0 -1
- package/dist/core/dispatcher-error-handling.d.ts +13 -1
- package/dist/core/dispatcher-error-handling.js +69 -1
- package/dist/core/dispatcher-hourly-check.d.ts +73 -2
- package/dist/core/dispatcher-hourly-check.js +258 -153
- package/dist/core/dispatcher-message-handler.d.ts +32 -2
- package/dist/core/dispatcher-message-handler.js +310 -53
- package/dist/core/dispatcher-morning-routine.d.ts +38 -31
- package/dist/core/dispatcher-morning-routine.js +238 -156
- package/dist/core/dispatcher-prompt.d.ts +4 -2
- package/dist/core/dispatcher-prompt.js +19 -4
- package/dist/core/dispatcher-repository-helpers.d.ts +0 -1
- package/dist/core/dispatcher-repository-helpers.js +5 -2
- package/dist/core/dispatcher-result-processor.d.ts +20 -1
- package/dist/core/dispatcher-result-processor.js +94 -5
- package/dist/core/dispatcher-scheduled-browser-task.d.ts +91 -0
- package/dist/core/dispatcher-scheduled-browser-task.js +228 -0
- package/dist/core/dispatcher-scheduled-tasks.d.ts +69 -2
- package/dist/core/dispatcher-scheduled-tasks.js +452 -29
- package/dist/core/dispatcher-types.d.ts +140 -13
- package/dist/core/dispatcher-types.js +0 -1
- package/dist/core/dispatcher.d.ts +194 -5
- package/dist/core/dispatcher.js +487 -11
- package/dist/core/dm-freshness-metrics.d.ts +6 -6
- package/dist/core/dm-freshness-metrics.js +7 -7
- package/dist/core/dm-token-router.d.ts +58 -0
- package/dist/core/dm-token-router.js +58 -0
- package/dist/core/docs/citation-validator.d.ts +0 -1
- package/dist/core/docs/citation-validator.js +0 -1
- package/dist/core/docs/extract-terms.d.ts +0 -1
- package/dist/core/docs/extract-terms.js +0 -1
- package/dist/core/docs/indexer.d.ts +0 -1
- package/dist/core/docs/indexer.js +0 -1
- package/dist/core/drift-effects.d.ts +0 -1
- package/dist/core/drift-effects.js +6 -3
- package/dist/core/evening-review-verify.d.ts +163 -0
- package/dist/core/evening-review-verify.js +636 -0
- package/dist/core/event-bus.d.ts +0 -1
- package/dist/core/event-bus.js +0 -1
- package/dist/core/fetch-window-prompt-loader.d.ts +46 -0
- package/dist/core/fetch-window-prompt-loader.js +71 -0
- package/dist/core/git-project-docs.d.ts +0 -1
- package/dist/core/git-project-docs.js +13 -6
- package/dist/core/health-monitor.d.ts +2 -2
- package/dist/core/health-monitor.js +6 -3
- package/dist/core/heartbeat.d.ts +0 -1
- package/dist/core/heartbeat.js +0 -1
- package/dist/core/injection-policy.d.ts +107 -0
- package/dist/core/injection-policy.js +117 -0
- package/dist/core/integration-health.d.ts +0 -1
- package/dist/core/integration-health.js +1 -2
- package/dist/core/integration-lifecycle.d.ts +0 -1
- package/dist/core/integration-lifecycle.js +0 -1
- package/dist/core/integration-main-backend.d.ts +0 -1
- package/dist/core/integration-main-backend.js +11 -4
- package/dist/core/integration-probe.d.ts +0 -1
- package/dist/core/integration-probe.js +0 -1
- package/dist/core/management-md-write-lock.d.ts +1 -2
- package/dist/core/management-md-write-lock.js +1 -2
- package/dist/core/management-md.d.ts +24 -10
- package/dist/core/management-md.js +65 -33
- package/dist/core/management-registry.d.ts +16 -25
- package/dist/core/management-registry.js +32 -54
- package/dist/core/management-telemetry.d.ts +1 -2
- package/dist/core/management-telemetry.js +1 -2
- package/dist/core/message-recorder.d.ts +3 -4
- package/dist/core/message-recorder.js +3 -4
- package/dist/core/metrics.d.ts +88 -2
- package/dist/core/metrics.js +78 -3
- package/dist/core/migration-backup.d.ts +0 -1
- package/dist/core/migration-backup.js +11 -1
- package/dist/core/morning/agent-journal-appender.d.ts +264 -0
- package/dist/core/morning/agent-journal-appender.js +632 -0
- package/dist/core/morning/daily-journal-composer.d.ts +183 -0
- package/dist/core/morning/daily-journal-composer.js +421 -0
- package/dist/core/morning/handoff-parser.d.ts +43 -0
- package/dist/core/morning/handoff-parser.js +115 -0
- package/dist/core/morning/journal-skeleton-builder.d.ts +155 -0
- package/dist/core/morning/journal-skeleton-builder.js +301 -0
- package/dist/core/morning/orchestrator.d.ts +424 -0
- package/dist/core/morning/orchestrator.js +1230 -0
- package/dist/core/morning/parent-audit-emitter.d.ts +80 -0
- package/dist/core/morning/parent-audit-emitter.js +118 -0
- package/dist/core/morning/partial-extract-streak.d.ts +76 -0
- package/dist/core/morning/partial-extract-streak.js +165 -0
- package/dist/core/morning/roadmap-skeleton-builder.d.ts +158 -0
- package/dist/core/morning/roadmap-skeleton-builder.js +337 -0
- package/dist/core/output-language-policy.d.ts +0 -1
- package/dist/core/output-language-policy.js +7 -8
- package/dist/core/overview-write-lock.d.ts +0 -1
- package/dist/core/overview-write-lock.js +0 -1
- package/dist/core/path-compat.d.ts +0 -1
- package/dist/core/path-compat.js +0 -1
- package/dist/core/path-rewrite.d.ts +1 -2
- package/dist/core/path-rewrite.js +0 -1
- package/dist/core/policy-files.d.ts +39 -13
- package/dist/core/policy-files.js +62 -12
- package/dist/core/pre-pass-freshness.d.ts +27 -0
- package/dist/core/pre-pass-freshness.js +9 -0
- package/dist/core/previous-week-digest.d.ts +129 -0
- package/dist/core/previous-week-digest.js +256 -0
- package/dist/core/profile-questions/seed.d.ts +2 -3
- package/dist/core/profile-questions/seed.js +4 -4
- package/dist/core/profile-questions/slot-filled.d.ts +0 -1
- package/dist/core/profile-questions/slot-filled.js +0 -1
- package/dist/core/prompts.d.ts +0 -1
- package/dist/core/prompts.js +6 -7
- package/dist/core/quiet-hours-sync.d.ts +0 -1
- package/dist/core/quiet-hours-sync.js +7 -1
- package/dist/core/quiet-hours.d.ts +35 -0
- package/dist/core/quiet-hours.js +93 -0
- package/dist/core/read-sensitive-token-manager.d.ts +0 -1
- package/dist/core/read-sensitive-token-manager.js +0 -1
- package/dist/core/recurrence.d.ts +13 -1
- package/dist/core/recurrence.js +108 -14
- package/dist/core/reinstall.d.ts +5 -1
- package/dist/core/reinstall.js +12 -2
- package/dist/core/release-assets.d.ts +39 -4
- package/dist/core/release-assets.js +83 -8
- package/dist/core/repository-management-docs.d.ts +0 -1
- package/dist/core/repository-management-docs.js +32 -11
- package/dist/core/retention.d.ts +49 -4
- package/dist/core/retention.js +218 -5
- package/dist/core/review-context.d.ts +10 -1
- package/dist/core/review-context.js +51 -6
- package/dist/core/roadmap-horizon.d.ts +0 -1
- package/dist/core/roadmap-horizon.js +0 -1
- package/dist/core/roadmap-ids.d.ts +4 -6
- package/dist/core/roadmap-ids.js +4 -6
- package/dist/core/roadmap-maintenance.d.ts +212 -0
- package/dist/core/roadmap-maintenance.js +732 -0
- package/dist/core/roadmap-refresh-triggers.d.ts +0 -1
- package/dist/core/roadmap-refresh-triggers.js +0 -1
- package/dist/core/roadmap-truncate.d.ts +0 -1
- package/dist/core/roadmap-truncate.js +0 -1
- package/dist/core/roadmap-validate.d.ts +5 -1
- package/dist/core/roadmap-validate.js +12 -75
- package/dist/core/roadmap-write-lock.d.ts +0 -1
- package/dist/core/roadmap-write-lock.js +0 -1
- package/dist/core/routine-acquisition-plan.d.ts +43 -8
- package/dist/core/routine-acquisition-plan.js +99 -9
- package/dist/core/routine-fetch-window-retry.d.ts +40 -3
- package/dist/core/routine-fetch-window-retry.js +90 -9
- package/dist/core/routine-fetch-window-runner.d.ts +55 -22
- package/dist/core/routine-fetch-window-runner.js +287 -41
- package/dist/core/routine-windows.d.ts +17 -19
- package/dist/core/routine-windows.js +80 -44
- package/dist/core/schedule-insert-helper.d.ts +0 -1
- package/dist/core/schedule-insert-helper.js +0 -1
- package/dist/core/schedule-maintenance.d.ts +0 -1
- package/dist/core/schedule-maintenance.js +0 -1
- package/dist/core/scheduler.d.ts +179 -37
- package/dist/core/scheduler.js +614 -91
- package/dist/core/semaphore.d.ts +0 -1
- package/dist/core/semaphore.js +0 -1
- package/dist/core/session-gate.d.ts +0 -1
- package/dist/core/session-gate.js +0 -1
- package/dist/core/session-manager.d.ts +25 -7
- package/dist/core/session-manager.js +32 -16
- package/dist/core/signal-detector.d.ts +2 -3
- package/dist/core/signal-detector.js +3 -4
- package/dist/core/skeleton.d.ts +1 -2
- package/dist/core/skeleton.js +31 -32
- package/dist/core/skill-curation/apply-proposal.d.ts +0 -1
- package/dist/core/skill-curation/apply-proposal.js +0 -1
- package/dist/core/skill-curation/auto-revert.d.ts +0 -1
- package/dist/core/skill-curation/auto-revert.js +4 -5
- package/dist/core/skill-curation/classify-diff.d.ts +0 -1
- package/dist/core/skill-curation/classify-diff.js +0 -0
- package/dist/core/skill-curation/declarations.d.ts +0 -1
- package/dist/core/skill-curation/declarations.js +0 -1
- package/dist/core/skill-curation/knowledge-map.d.ts +0 -1
- package/dist/core/skill-curation/knowledge-map.js +0 -1
- package/dist/core/skill-curation/orphan-overlay.d.ts +2 -3
- package/dist/core/skill-curation/orphan-overlay.js +5 -6
- package/dist/core/skill-curation/overlay-store.d.ts +6 -4
- package/dist/core/skill-curation/overlay-store.js +12 -7
- package/dist/core/skill-curation/render/convention-notes.d.ts +0 -1
- package/dist/core/skill-curation/render/convention-notes.js +0 -1
- package/dist/core/skill-curation/render/cross-references.d.ts +0 -1
- package/dist/core/skill-curation/render/cross-references.js +0 -1
- package/dist/core/skill-curation/render/frontmatter-schema.d.ts +0 -1
- package/dist/core/skill-curation/render/frontmatter-schema.js +0 -1
- package/dist/core/skill-curation/render/index.d.ts +0 -1
- package/dist/core/skill-curation/render/index.js +0 -1
- package/dist/core/skill-curation/render/knowledge-layout.d.ts +0 -1
- package/dist/core/skill-curation/render/knowledge-layout.js +0 -1
- package/dist/core/skill-curation/render/routing-table.d.ts +0 -1
- package/dist/core/skill-curation/render/routing-table.js +0 -1
- package/dist/core/skill-curation/render/search-recipes.d.ts +0 -1
- package/dist/core/skill-curation/render/search-recipes.js +0 -1
- package/dist/core/skill-curation/run-token.d.ts +0 -1
- package/dist/core/skill-curation/run-token.js +0 -1
- package/dist/core/skill-curation/signals.d.ts +0 -1
- package/dist/core/skill-curation/signals.js +0 -1
- package/dist/core/skill-curation/smoke-test.d.ts +0 -1
- package/dist/core/skill-curation/smoke-test.js +0 -1
- package/dist/core/skill-curation/splicer.d.ts +0 -1
- package/dist/core/skill-curation/splicer.js +0 -1
- package/dist/core/skill-curation/workdir.d.ts +0 -1
- package/dist/core/skill-curation/workdir.js +0 -1
- package/dist/core/skill-source-paths.d.ts +0 -1
- package/dist/core/skill-source-paths.js +0 -1
- package/dist/core/skills-compiler-cli-renderer.d.ts +79 -0
- package/dist/core/skills-compiler-cli-renderer.js +289 -0
- package/dist/core/skills-compiler-denied-tools.d.ts +57 -0
- package/dist/core/skills-compiler-denied-tools.js +204 -0
- package/dist/core/skills-compiler-skill-index.d.ts +117 -0
- package/dist/core/skills-compiler-skill-index.js +262 -0
- package/dist/core/skills-compiler-tree.d.ts +38 -0
- package/dist/core/skills-compiler-tree.js +157 -0
- package/dist/core/skills-compiler-types.d.ts +46 -0
- package/dist/core/skills-compiler-types.js +1 -0
- package/dist/core/skills-compiler-variants.d.ts +117 -0
- package/dist/core/skills-compiler-variants.js +337 -0
- package/dist/core/skills-compiler.d.ts +169 -217
- package/dist/core/skills-compiler.js +385 -940
- package/dist/core/skills-manifest.d.ts +133 -1
- package/dist/core/skills-manifest.js +507 -40
- package/dist/core/system-reset.d.ts +1 -2
- package/dist/core/system-reset.js +1 -2
- package/dist/core/template-store.d.ts +2 -3
- package/dist/core/template-store.js +7 -4
- package/dist/core/template-versions.d.ts +1 -2
- package/dist/core/template-versions.js +1 -2
- package/dist/core/today-agent-plan.d.ts +0 -1
- package/dist/core/today-agent-plan.js +0 -1
- package/dist/core/today-direct-writer.d.ts +11 -2
- package/dist/core/today-direct-writer.js +42 -27
- package/dist/core/today-write-lock.d.ts +0 -1
- package/dist/core/today-write-lock.js +0 -1
- package/dist/core/trigger-dispatch.d.ts +0 -1
- package/dist/core/trigger-dispatch.js +0 -1
- package/dist/core/trigger-evaluator.d.ts +0 -1
- package/dist/core/trigger-evaluator.js +0 -1
- package/dist/core/user-skills-root.d.ts +24 -0
- package/dist/core/user-skills-root.js +29 -0
- package/dist/core/wiki/approval-queue.d.ts +0 -1
- package/dist/core/wiki/approval-queue.js +7 -3
- package/dist/core/wiki/bridge.d.ts +0 -1
- package/dist/core/wiki/bridge.js +0 -1
- package/dist/core/wiki/compile-lock.d.ts +0 -1
- package/dist/core/wiki/compile-lock.js +0 -1
- package/dist/core/wiki/compile-preview.d.ts +0 -1
- package/dist/core/wiki/compile-preview.js +0 -1
- package/dist/core/wiki/cost-estimate.d.ts +0 -1
- package/dist/core/wiki/cost-estimate.js +23 -3
- package/dist/core/wiki/dispatcher.d.ts +1 -21
- package/dist/core/wiki/dispatcher.js +0 -26
- package/dist/core/wiki/git-precompile.d.ts +9 -1
- package/dist/core/wiki/git-precompile.js +7 -2
- package/dist/core/wiki/import-migrate.d.ts +0 -1
- package/dist/core/wiki/import-migrate.js +0 -1
- package/dist/core/wiki/import-probe.d.ts +0 -1
- package/dist/core/wiki/import-probe.js +7 -5
- package/dist/core/wiki/index-cache.d.ts +0 -1
- package/dist/core/wiki/index-cache.js +0 -1
- package/dist/core/wiki/multi-url-dispatch.d.ts +0 -1
- package/dist/core/wiki/multi-url-dispatch.js +19 -9
- package/dist/core/wiki/wiki-fts.d.ts +0 -1
- package/dist/core/wiki/wiki-fts.js +0 -1
- package/dist/core/wiki/workspaces.d.ts +17 -2
- package/dist/core/wiki/workspaces.js +28 -17
- package/dist/core/wiki/write-strategy.d.ts +0 -1
- package/dist/core/wiki/write-strategy.js +19 -3
- package/dist/core/workdir.d.ts +38 -2
- package/dist/core/workdir.js +159 -17
- package/dist/db/agent-executions-store.d.ts +149 -0
- package/dist/db/agent-executions-store.js +209 -0
- package/dist/db/agents-store.d.ts +179 -0
- package/dist/db/agents-store.js +264 -0
- package/dist/db/automation-triggers.d.ts +0 -1
- package/dist/db/automation-triggers.js +0 -1
- package/dist/db/browser-automation-b4-config-store.d.ts +68 -0
- package/dist/db/browser-automation-b4-config-store.js +111 -0
- package/dist/db/browser-automation-purchase-primary-channels-store.d.ts +48 -0
- package/dist/db/browser-automation-purchase-primary-channels-store.js +88 -0
- package/dist/db/browser-automation-purchase-replies-store.d.ts +48 -0
- package/dist/db/browser-automation-purchase-replies-store.js +71 -0
- package/dist/db/browser-automation-purchase-tokens-store.d.ts +276 -0
- package/dist/db/browser-automation-purchase-tokens-store.js +483 -0
- package/dist/db/browser-automation-store.d.ts +37 -0
- package/dist/db/browser-automation-store.js +41 -0
- package/dist/db/browser-history-store.d.ts +231 -0
- package/dist/db/browser-history-store.js +601 -0
- package/dist/db/browser-task-action-log-store.d.ts +41 -0
- package/dist/db/browser-task-action-log-store.js +74 -0
- package/dist/db/browser-task-clarifications-store.d.ts +67 -0
- package/dist/db/browser-task-clarifications-store.js +118 -0
- package/dist/db/browser-task-final-confirm-tokens-store.d.ts +108 -0
- package/dist/db/browser-task-final-confirm-tokens-store.js +251 -0
- package/dist/db/browser-task-store.d.ts +114 -0
- package/dist/db/browser-task-store.js +250 -0
- package/dist/db/client.d.ts +0 -1
- package/dist/db/client.js +0 -1
- package/dist/db/entities-store.d.ts +6 -7
- package/dist/db/entities-store.js +5 -6
- package/dist/db/hourly-check-signals.d.ts +0 -1
- package/dist/db/hourly-check-signals.js +121 -36
- package/dist/db/integration-probe-store.d.ts +0 -1
- package/dist/db/integration-probe-store.js +0 -1
- package/dist/db/integrations-store.d.ts +0 -1
- package/dist/db/integrations-store.js +0 -1
- package/dist/db/managed-chromium-sites-store.d.ts +110 -0
- package/dist/db/managed-chromium-sites-store.js +174 -0
- package/dist/db/managed-chromium-state.d.ts +58 -0
- package/dist/db/managed-chromium-state.js +104 -0
- package/dist/db/managed-tasks-store.d.ts +0 -1
- package/dist/db/managed-tasks-store.js +0 -1
- package/dist/db/management-parse-failures-store.d.ts +0 -1
- package/dist/db/management-parse-failures-store.js +0 -1
- package/dist/db/migrations/context-vault-restructure.d.ts +263 -0
- package/dist/db/migrations/context-vault-restructure.js +1384 -0
- package/dist/db/migrations.d.ts +111 -0
- package/dist/db/migrations.js +476 -0
- package/dist/db/observations.d.ts +1 -2
- package/dist/db/observations.js +13 -4
- package/dist/db/recurring-schedules.d.ts +44 -3
- package/dist/db/recurring-schedules.js +116 -21
- package/dist/db/repositories-store.d.ts +2 -2
- package/dist/db/repositories-store.js +41 -4
- package/dist/db/runtime-state.d.ts +32 -2
- package/dist/db/runtime-state.js +33 -2
- package/dist/db/schema.d.ts +0 -1
- package/dist/db/schema.js +923 -54
- package/dist/db/sot-bindings-store.d.ts +0 -1
- package/dist/db/sot-bindings-store.js +0 -1
- package/dist/db/voice-transcripts-store.d.ts +0 -1
- package/dist/db/voice-transcripts-store.js +0 -1
- package/dist/db/wiki-store.d.ts +0 -1
- package/dist/db/wiki-store.js +3 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js +408 -1522
- package/dist/init.d.ts +0 -1
- package/dist/init.js +0 -2
- package/dist/log-buffer.d.ts +0 -1
- package/dist/log-buffer.js +0 -2
- package/dist/logging.d.ts +0 -1
- package/dist/logging.js +0 -2
- package/dist/management-rules.d.ts +0 -1
- package/dist/management-rules.js +0 -1
- package/dist/messaging/browser-task-mcp-notifier.d.ts +77 -0
- package/dist/messaging/browser-task-mcp-notifier.js +164 -0
- package/dist/messaging/browser-task-screenshot-attachment.d.ts +62 -0
- package/dist/messaging/browser-task-screenshot-attachment.js +115 -0
- package/dist/messaging/constants.d.ts +0 -1
- package/dist/messaging/constants.js +0 -1
- package/dist/messaging/final-confirm-system-message-sender.d.ts +53 -0
- package/dist/messaging/final-confirm-system-message-sender.js +165 -0
- package/dist/messaging/magic-phrase.d.ts +16 -1
- package/dist/messaging/magic-phrase.js +60 -3
- package/dist/messaging/owner-channels.d.ts +40 -1
- package/dist/messaging/owner-channels.js +59 -1
- package/dist/messaging/purchase-system-message-sender.d.ts +54 -0
- package/dist/messaging/purchase-system-message-sender.js +213 -0
- package/dist/messaging/setup-welcome-dm.d.ts +0 -1
- package/dist/messaging/setup-welcome-dm.js +0 -1
- package/dist/messaging/url-extract.d.ts +0 -1
- package/dist/messaging/url-extract.js +5 -1
- package/dist/observers/browser-history-poller.d.ts +113 -0
- package/dist/observers/browser-history-poller.js +404 -0
- package/dist/observers/calendar-poller.d.ts +2 -1
- package/dist/observers/calendar-poller.js +76 -55
- package/dist/observers/context-index-reconciler-observer.d.ts +0 -1
- package/dist/observers/context-index-reconciler-observer.js +0 -1
- package/dist/observers/delegated-probe-observer.d.ts +0 -1
- package/dist/observers/delegated-probe-observer.js +0 -1
- package/dist/observers/delegated-sync-worker.d.ts +70 -10
- package/dist/observers/delegated-sync-worker.js +138 -12
- package/dist/observers/entity-mirror-observer.d.ts +0 -1
- package/dist/observers/entity-mirror-observer.js +0 -1
- package/dist/observers/git-delegated-cron.d.ts +0 -1
- package/dist/observers/git-delegated-cron.js +0 -1
- package/dist/observers/git-event-classifier.d.ts +0 -1
- package/dist/observers/git-event-classifier.js +0 -1
- package/dist/observers/git-watcher.d.ts +22 -1
- package/dist/observers/git-watcher.js +38 -9
- package/dist/observers/github-poller-classifier.d.ts +0 -1
- package/dist/observers/github-poller-classifier.js +0 -1
- package/dist/observers/github-poller.d.ts +3 -1
- package/dist/observers/github-poller.js +28 -3
- package/dist/observers/imminent-event-scheduler.d.ts +2 -1
- package/dist/observers/imminent-event-scheduler.js +30 -2
- package/dist/observers/mail-poller.d.ts +0 -1
- package/dist/observers/mail-poller.js +45 -18
- package/dist/observers/mail-reconciliation.d.ts +1 -2
- package/dist/observers/mail-reconciliation.js +1 -2
- package/dist/observers/manager.d.ts +7 -8
- package/dist/observers/manager.js +7 -8
- package/dist/observers/notion-poller.d.ts +2 -1
- package/dist/observers/notion-poller.js +44 -7
- package/dist/observers/observation-summarizer/index.d.ts +0 -1
- package/dist/observers/observation-summarizer/index.js +0 -1
- package/dist/observers/observation-summarizer/pre-filter.d.ts +0 -1
- package/dist/observers/observation-summarizer/pre-filter.js +0 -1
- package/dist/observers/observation-summarizer/response-parser.d.ts +0 -1
- package/dist/observers/observation-summarizer/response-parser.js +7 -7
- package/dist/observers/observation-summarizer/summarizer-client.d.ts +0 -1
- package/dist/observers/observation-summarizer/summarizer-client.js +0 -1
- package/dist/observers/observation-summarizer/summarizer-prompts.d.ts +0 -1
- package/dist/observers/observation-summarizer/summarizer-prompts.js +0 -1
- package/dist/observers/observation-summarizer/worker.d.ts +2 -1
- package/dist/observers/observation-summarizer/worker.js +25 -1
- package/dist/observers/obsidian-watcher.d.ts +0 -1
- package/dist/observers/obsidian-watcher.js +0 -1
- package/dist/observers/poll-guard.d.ts +62 -0
- package/dist/observers/poll-guard.js +88 -0
- package/dist/observers/primary-vault-watcher.d.ts +0 -1
- package/dist/observers/primary-vault-watcher.js +0 -1
- package/dist/observers/repository-management-cron.d.ts +0 -1
- package/dist/observers/repository-management-cron.js +0 -1
- package/dist/observers/skill-curation-walker.d.ts +0 -1
- package/dist/observers/skill-curation-walker.js +0 -1
- package/dist/safety/absolute-block-audit.d.ts +17 -1
- package/dist/safety/absolute-block-audit.js +28 -3
- package/dist/safety/agent-write-tracker.d.ts +42 -2
- package/dist/safety/agent-write-tracker.js +81 -2
- package/dist/safety/always-disallowed.d.ts +93 -3
- package/dist/safety/always-disallowed.js +504 -20
- package/dist/safety/audit.d.ts +37 -6
- package/dist/safety/audit.js +263 -15
- package/dist/safety/integration-write-tracker.d.ts +0 -1
- package/dist/safety/integration-write-tracker.js +0 -1
- package/dist/safety/outbound-purchase-guard.d.ts +60 -0
- package/dist/safety/outbound-purchase-guard.js +82 -0
- package/dist/safety/risk-classifier.d.ts +21 -6
- package/dist/safety/risk-classifier.js +296 -70
- package/dist/safety/subprocess-block-scanner.d.ts +88 -0
- package/dist/safety/subprocess-block-scanner.js +176 -0
- package/dist/scheduler/hourly-check-gate.d.ts +23 -10
- package/dist/scheduler/hourly-check-gate.js +11 -7
- package/dist/secrets/backend-api-key-env.d.ts +0 -1
- package/dist/secrets/backend-api-key-env.js +1 -1
- package/dist/secrets/codex-home-materializer.d.ts +0 -1
- package/dist/secrets/codex-home-materializer.js +0 -1
- package/dist/secrets/encrypted-blob-store.d.ts +0 -1
- package/dist/secrets/encrypted-blob-store.js +0 -1
- package/dist/secrets/platform-secret-store.d.ts +0 -1
- package/dist/secrets/platform-secret-store.js +0 -1
- package/dist/secrets/redaction.d.ts +0 -1
- package/dist/secrets/redaction.js +0 -1
- package/dist/secrets/secret-broker.d.ts +0 -2
- package/dist/secrets/secret-broker.js +0 -4
- package/dist/secrets/secret-names.d.ts +1 -2
- package/dist/secrets/secret-names.js +0 -2
- package/dist/secrets/secret-store.d.ts +0 -1
- package/dist/secrets/secret-store.js +0 -1
- package/dist/secrets/types.d.ts +0 -1
- package/dist/secrets/types.js +0 -1
- package/dist/services/apple-calendar/caldav-client.d.ts +0 -1
- package/dist/services/apple-calendar/caldav-client.js +0 -1
- package/dist/services/apple-calendar/caldav-codec.d.ts +0 -1
- package/dist/services/apple-calendar/caldav-codec.js +0 -1
- package/dist/services/apple-calendar/index.d.ts +0 -1
- package/dist/services/apple-calendar/index.js +0 -1
- package/dist/services/apple-calendar/service.d.ts +0 -1
- package/dist/services/apple-calendar/service.js +0 -1
- package/dist/services/apple-calendar/types.d.ts +0 -1
- package/dist/services/apple-calendar/types.js +0 -1
- package/dist/services/attachments/hardlink.d.ts +0 -1
- package/dist/services/attachments/hardlink.js +0 -1
- package/dist/services/attachments/sanitize.d.ts +0 -1
- package/dist/services/attachments/sanitize.js +0 -1
- package/dist/services/attachments/store.d.ts +0 -1
- package/dist/services/attachments/store.js +1 -3
- package/dist/services/browser-history/automation/browser-task-tools/dom-snapshot-output.d.ts +48 -0
- package/dist/services/browser-history/automation/browser-task-tools/dom-snapshot-output.js +98 -0
- package/dist/services/browser-history/automation/browser-task-tools/extract-cap.d.ts +76 -0
- package/dist/services/browser-history/automation/browser-task-tools/extract-cap.js +79 -0
- package/dist/services/browser-history/automation/browser-task-tools/extract-output.d.ts +66 -0
- package/dist/services/browser-history/automation/browser-task-tools/extract-output.js +69 -0
- package/dist/services/browser-history/automation/browser-task-tools/final-confirm-gate.d.ts +129 -0
- package/dist/services/browser-history/automation/browser-task-tools/final-confirm-gate.js +150 -0
- package/dist/services/browser-history/automation/browser-task-tools/loop-guard.d.ts +95 -0
- package/dist/services/browser-history/automation/browser-task-tools/loop-guard.js +123 -0
- package/dist/services/browser-history/automation/browser-task-tools/navigate-guard.d.ts +54 -0
- package/dist/services/browser-history/automation/browser-task-tools/navigate-guard.js +62 -0
- package/dist/services/browser-history/automation/browser-task-tools/schemas.d.ts +201 -0
- package/dist/services/browser-history/automation/browser-task-tools/schemas.js +248 -0
- package/dist/services/browser-history/automation/browser-task-tools/screenshot-output.d.ts +76 -0
- package/dist/services/browser-history/automation/browser-task-tools/screenshot-output.js +101 -0
- package/dist/services/browser-history/automation/browser-task-tools/server.d.ts +240 -0
- package/dist/services/browser-history/automation/browser-task-tools/server.js +1016 -0
- package/dist/services/browser-history/automation/cdp-network-interception.d.ts +74 -0
- package/dist/services/browser-history/automation/cdp-network-interception.js +106 -0
- package/dist/services/browser-history/automation/egress-denylist.d.ts +167 -0
- package/dist/services/browser-history/automation/egress-denylist.js +452 -0
- package/dist/services/browser-history/automation/external-content.d.ts +72 -0
- package/dist/services/browser-history/automation/external-content.js +0 -0
- package/dist/services/browser-history/automation/final-confirm-handler.d.ts +178 -0
- package/dist/services/browser-history/automation/final-confirm-handler.js +462 -0
- package/dist/services/browser-history/automation/lite-final-confirm-tokens.d.ts +100 -0
- package/dist/services/browser-history/automation/lite-final-confirm-tokens.js +126 -0
- package/dist/services/browser-history/automation/payment-path-blocker.d.ts +62 -0
- package/dist/services/browser-history/automation/payment-path-blocker.js +113 -0
- package/dist/services/browser-history/automation/purchase-handler.d.ts +344 -0
- package/dist/services/browser-history/automation/purchase-handler.js +666 -0
- package/dist/services/browser-history/automation/purchase-tokens.d.ts +265 -0
- package/dist/services/browser-history/automation/purchase-tokens.js +271 -0
- package/dist/services/browser-history/automation/site-registry.d.ts +176 -0
- package/dist/services/browser-history/automation/site-registry.js +290 -0
- package/dist/services/browser-history/automation/trace-store-paths.d.ts +80 -0
- package/dist/services/browser-history/automation/trace-store-paths.js +119 -0
- package/dist/services/browser-history/automation/trace-store.d.ts +29 -0
- package/dist/services/browser-history/automation/trace-store.js +63 -0
- package/dist/services/browser-history/cleanup-interests-reflection.d.ts +39 -0
- package/dist/services/browser-history/cleanup-interests-reflection.js +204 -0
- package/dist/services/browser-history/detectors/atlas.d.ts +2 -0
- package/dist/services/browser-history/detectors/atlas.js +4 -0
- package/dist/services/browser-history/detectors/chrome.d.ts +2 -0
- package/dist/services/browser-history/detectors/chrome.js +4 -0
- package/dist/services/browser-history/detectors/chromium.d.ts +2 -0
- package/dist/services/browser-history/detectors/chromium.js +193 -0
- package/dist/services/browser-history/detectors/comet.d.ts +2 -0
- package/dist/services/browser-history/detectors/comet.js +4 -0
- package/dist/services/browser-history/detectors/registry.d.ts +15 -0
- package/dist/services/browser-history/detectors/registry.js +82 -0
- package/dist/services/browser-history/history-mtime.d.ts +8 -0
- package/dist/services/browser-history/history-mtime.js +31 -0
- package/dist/services/browser-history/interests-reflection-lock.d.ts +26 -0
- package/dist/services/browser-history/interests-reflection-lock.js +84 -0
- package/dist/services/browser-history/lifecycle/chromium-install.d.ts +78 -0
- package/dist/services/browser-history/lifecycle/chromium-install.js +206 -0
- package/dist/services/browser-history/lifecycle/chromium-launcher.d.ts +77 -0
- package/dist/services/browser-history/lifecycle/chromium-launcher.js +288 -0
- package/dist/services/browser-history/lifecycle/failure-escalation.d.ts +3 -0
- package/dist/services/browser-history/lifecycle/failure-escalation.js +54 -0
- package/dist/services/browser-history/lifecycle/health-check.d.ts +8 -0
- package/dist/services/browser-history/lifecycle/health-check.js +17 -0
- package/dist/services/browser-history/lifecycle/platform.d.ts +99 -0
- package/dist/services/browser-history/lifecycle/platform.js +597 -0
- package/dist/services/browser-history/lifecycle/supervisor.d.ts +24 -0
- package/dist/services/browser-history/lifecycle/supervisor.js +334 -0
- package/dist/services/browser-history/managed-chromium/cdp-connect.d.ts +110 -0
- package/dist/services/browser-history/managed-chromium/cdp-connect.js +171 -0
- package/dist/services/browser-history/managed-chromium/instance-a-config.d.ts +116 -0
- package/dist/services/browser-history/managed-chromium/instance-a-config.js +164 -0
- package/dist/services/browser-history/managed-chromium/instance-a-launcher.d.ts +82 -0
- package/dist/services/browser-history/managed-chromium/instance-a-launcher.js +200 -0
- package/dist/services/browser-history/managed-chromium/managed-chromium-supervisor.d.ts +69 -0
- package/dist/services/browser-history/managed-chromium/managed-chromium-supervisor.js +334 -0
- package/dist/services/browser-history/managed-chromium/reauth-detector.d.ts +60 -0
- package/dist/services/browser-history/managed-chromium/reauth-detector.js +179 -0
- package/dist/services/browser-history/managed-chromium/sandbox-install.d.ts +69 -0
- package/dist/services/browser-history/managed-chromium/sandbox-install.js +123 -0
- package/dist/services/browser-history/managed-chromium/sandbox-launcher.d.ts +117 -0
- package/dist/services/browser-history/managed-chromium/sandbox-launcher.js +244 -0
- package/dist/services/browser-history/managed-chromium/setup-bootstrap.d.ts +149 -0
- package/dist/services/browser-history/managed-chromium/setup-bootstrap.js +404 -0
- package/dist/services/browser-history/managed-chromium/site-bootstrap.d.ts +133 -0
- package/dist/services/browser-history/managed-chromium/site-bootstrap.js +360 -0
- package/dist/services/browser-history/managed-chromium/supervisor-config.d.ts +75 -0
- package/dist/services/browser-history/managed-chromium/supervisor-config.js +146 -0
- package/dist/services/browser-history/managed-chromium/types.d.ts +199 -0
- package/dist/services/browser-history/managed-chromium/types.js +116 -0
- package/dist/services/browser-history/pipeline/amazon-extractor.d.ts +11 -0
- package/dist/services/browser-history/pipeline/amazon-extractor.js +33 -0
- package/dist/services/browser-history/pipeline/classifier.d.ts +7 -0
- package/dist/services/browser-history/pipeline/classifier.js +208 -0
- package/dist/services/browser-history/pipeline/cluster-extractor.d.ts +76 -0
- package/dist/services/browser-history/pipeline/cluster-extractor.js +271 -0
- package/dist/services/browser-history/pipeline/interests-block.d.ts +99 -0
- package/dist/services/browser-history/pipeline/interests-block.js +333 -0
- package/dist/services/browser-history/pipeline/meaningful-filter.d.ts +47 -0
- package/dist/services/browser-history/pipeline/meaningful-filter.js +228 -0
- package/dist/services/browser-history/pipeline/offer-rate-limit.d.ts +75 -0
- package/dist/services/browser-history/pipeline/offer-rate-limit.js +188 -0
- package/dist/services/browser-history/pipeline/offer-triggers.d.ts +150 -0
- package/dist/services/browser-history/pipeline/offer-triggers.js +164 -0
- package/dist/services/browser-history/pipeline/pre-morning-digest.d.ts +118 -0
- package/dist/services/browser-history/pipeline/pre-morning-digest.js +399 -0
- package/dist/services/browser-history/pipeline/project-matcher.d.ts +26 -0
- package/dist/services/browser-history/pipeline/project-matcher.js +314 -0
- package/dist/services/browser-history/pipeline/redactor.d.ts +15 -0
- package/dist/services/browser-history/pipeline/redactor.js +119 -0
- package/dist/services/browser-history/pipeline/reload-detector.d.ts +6 -0
- package/dist/services/browser-history/pipeline/reload-detector.js +16 -0
- package/dist/services/browser-history/pipeline/sensitive-hosts.d.ts +2 -0
- package/dist/services/browser-history/pipeline/sensitive-hosts.js +173 -0
- package/dist/services/browser-history/pipeline/summarizer.d.ts +52 -0
- package/dist/services/browser-history/pipeline/summarizer.js +97 -0
- package/dist/services/browser-history/pipeline/weekly-interests-summary.d.ts +139 -0
- package/dist/services/browser-history/pipeline/weekly-interests-summary.js +227 -0
- package/dist/services/browser-history/readers/chromium-reader.d.ts +30 -0
- package/dist/services/browser-history/readers/chromium-reader.js +139 -0
- package/dist/services/browser-history/readers/snapshot.d.ts +19 -0
- package/dist/services/browser-history/readers/snapshot.js +67 -0
- package/dist/services/browser-history/refresh-interests-reflection.d.ts +125 -0
- package/dist/services/browser-history/refresh-interests-reflection.js +424 -0
- package/dist/services/browser-history/types.d.ts +60 -0
- package/dist/services/browser-history/types.js +1 -0
- package/dist/services/browser-task/browser-task-allowlist.d.ts +107 -0
- package/dist/services/browser-task/browser-task-allowlist.js +247 -0
- package/dist/services/browser-task/browser-task-deadline-scanner.d.ts +76 -0
- package/dist/services/browser-task/browser-task-deadline-scanner.js +68 -0
- package/dist/services/browser-task/browser-task-driver.d.ts +188 -0
- package/dist/services/browser-task/browser-task-driver.js +714 -0
- package/dist/services/browser-task/browser-task-runner.d.ts +166 -0
- package/dist/services/browser-task/browser-task-runner.js +781 -0
- package/dist/services/browser-task/browser-task-slots.d.ts +212 -0
- package/dist/services/browser-task/browser-task-slots.js +404 -0
- package/dist/services/browser-task/browser-task-transition-events.d.ts +76 -0
- package/dist/services/browser-task/browser-task-transition-events.js +80 -0
- package/dist/services/calendar/outlook/graph-calendar-client.d.ts +0 -1
- package/dist/services/calendar/outlook/graph-calendar-client.js +0 -1
- package/dist/services/calendar.d.ts +0 -1
- package/dist/services/calendar.js +21 -16
- package/dist/services/delegated-backend-invoker.d.ts +0 -1
- package/dist/services/delegated-backend-invoker.js +8 -2
- package/dist/services/delegated-invoker-audit.d.ts +0 -1
- package/dist/services/delegated-invoker-audit.js +5 -2
- package/dist/services/delegated-invoker-cache-hits.d.ts +0 -1
- package/dist/services/delegated-invoker-cache-hits.js +0 -1
- package/dist/services/delegated-invoker-janitors.d.ts +0 -1
- package/dist/services/delegated-invoker-janitors.js +0 -1
- package/dist/services/delegated-invoker-utils.d.ts +0 -1
- package/dist/services/delegated-invoker-utils.js +0 -1
- package/dist/services/delegated-proxy-config.d.ts +3 -3
- package/dist/services/delegated-proxy-config.js +0 -1
- package/dist/services/delegated-task-result-cache.d.ts +0 -1
- package/dist/services/delegated-task-result-cache.js +0 -0
- package/dist/services/delegated-task-runtime.d.ts +0 -1
- package/dist/services/delegated-task-runtime.js +0 -1
- package/dist/services/delegated-task-session-pool.d.ts +0 -1
- package/dist/services/delegated-task-session-pool.js +0 -1
- package/dist/services/delegated-tool-runtime.d.ts +0 -1
- package/dist/services/delegated-tool-runtime.js +0 -1
- package/dist/services/fts5.d.ts +0 -1
- package/dist/services/fts5.js +0 -1
- package/dist/services/git-account-registry.d.ts +0 -1
- package/dist/services/git-account-registry.js +0 -1
- package/dist/services/github.d.ts +9 -40
- package/dist/services/github.js +9 -107
- package/dist/services/gmail-classifier.d.ts +0 -1
- package/dist/services/gmail-classifier.js +0 -1
- package/dist/services/gmail.d.ts +0 -1
- package/dist/services/gmail.js +31 -52
- package/dist/services/google-auth.d.ts +0 -1
- package/dist/services/google-auth.js +0 -1
- package/dist/services/integrations/extract-write-item-id.d.ts +5 -3
- package/dist/services/integrations/extract-write-item-id.js +6 -1
- package/dist/services/integrations/reconcile.d.ts +0 -1
- package/dist/services/integrations/reconcile.js +0 -1
- package/dist/services/integrations/snapshot-partitions.d.ts +0 -1
- package/dist/services/integrations/snapshot-partitions.js +8 -1
- package/dist/services/journal/render.d.ts +0 -1
- package/dist/services/journal/render.js +0 -1
- package/dist/services/journal/writer.d.ts +0 -1
- package/dist/services/journal/writer.js +0 -1
- package/dist/services/mail/account-registry.d.ts +0 -1
- package/dist/services/mail/account-registry.js +7 -3
- package/dist/services/mail/gmail/auth-failure-classifier.d.ts +0 -1
- package/dist/services/mail/gmail/auth-failure-classifier.js +0 -1
- package/dist/services/mail/gmail/gmail-provider.d.ts +0 -1
- package/dist/services/mail/gmail/gmail-provider.js +0 -1
- package/dist/services/mail/gmail/legacy-row.d.ts +0 -1
- package/dist/services/mail/gmail/legacy-row.js +0 -1
- package/dist/services/mail/gmail/poll-cursor.d.ts +0 -1
- package/dist/services/mail/gmail/poll-cursor.js +0 -1
- package/dist/services/mail/html-to-plaintext.d.ts +0 -1
- package/dist/services/mail/html-to-plaintext.js +0 -1
- package/dist/services/mail/imap/app-password.d.ts +0 -1
- package/dist/services/mail/imap/app-password.js +0 -1
- package/dist/services/mail/imap/auth-failure-classifier.d.ts +0 -1
- package/dist/services/mail/imap/auth-failure-classifier.js +0 -1
- package/dist/services/mail/imap/capabilities.d.ts +0 -1
- package/dist/services/mail/imap/capabilities.js +0 -1
- package/dist/services/mail/imap/client.d.ts +0 -1
- package/dist/services/mail/imap/client.js +0 -1
- package/dist/services/mail/imap/cursor.d.ts +0 -1
- package/dist/services/mail/imap/cursor.js +0 -1
- package/dist/services/mail/imap/folder-resolver.d.ts +0 -1
- package/dist/services/mail/imap/folder-resolver.js +0 -1
- package/dist/services/mail/imap/icloud-provider.d.ts +0 -1
- package/dist/services/mail/imap/icloud-provider.js +0 -1
- package/dist/services/mail/imap/imap-provider-base.d.ts +0 -1
- package/dist/services/mail/imap/imap-provider-base.js +12 -7
- package/dist/services/mail/imap/query-translator.d.ts +0 -1
- package/dist/services/mail/imap/query-translator.js +0 -1
- package/dist/services/mail/imap/reconcile-planner.d.ts +0 -1
- package/dist/services/mail/imap/reconcile-planner.js +0 -1
- package/dist/services/mail/imap/reply-mime.d.ts +0 -1
- package/dist/services/mail/imap/reply-mime.js +0 -1
- package/dist/services/mail/imap/yahoo-provider.d.ts +0 -1
- package/dist/services/mail/imap/yahoo-provider.js +0 -1
- package/dist/services/mail/mail-search.d.ts +0 -1
- package/dist/services/mail/mail-search.js +0 -1
- package/dist/services/mail/outlook/auth-failure-classifier.d.ts +0 -1
- package/dist/services/mail/outlook/auth-failure-classifier.js +0 -1
- package/dist/services/mail/outlook/client-config.d.ts +0 -1
- package/dist/services/mail/outlook/client-config.js +0 -1
- package/dist/services/mail/outlook/delta-cursor.d.ts +0 -1
- package/dist/services/mail/outlook/delta-cursor.js +0 -1
- package/dist/services/mail/outlook/graph-client.d.ts +0 -1
- package/dist/services/mail/outlook/graph-client.js +0 -1
- package/dist/services/mail/outlook/msal-app-factory.d.ts +0 -1
- package/dist/services/mail/outlook/msal-app-factory.js +0 -1
- package/dist/services/mail/outlook/msal-cache-plugin.d.ts +0 -1
- package/dist/services/mail/outlook/msal-cache-plugin.js +0 -1
- package/dist/services/mail/outlook/oauth-device-code.d.ts +0 -1
- package/dist/services/mail/outlook/oauth-device-code.js +0 -1
- package/dist/services/mail/outlook/oauth-loopback.d.ts +0 -1
- package/dist/services/mail/outlook/oauth-loopback.js +0 -1
- package/dist/services/mail/outlook/outlook-provider.d.ts +0 -1
- package/dist/services/mail/outlook/outlook-provider.js +0 -1
- package/dist/services/mail/outlook/query-translator.d.ts +0 -1
- package/dist/services/mail/outlook/query-translator.js +0 -1
- package/dist/services/mail/provider.d.ts +0 -1
- package/dist/services/mail/provider.js +0 -1
- package/dist/services/mail/query-utils.d.ts +0 -1
- package/dist/services/mail/query-utils.js +0 -1
- package/dist/services/mail-classifier.d.ts +0 -1
- package/dist/services/mail-classifier.js +0 -1
- package/dist/services/mail-ingestion.d.ts +0 -1
- package/dist/services/mail-ingestion.js +0 -1
- package/dist/services/mcp/auto-probe.d.ts +0 -1
- package/dist/services/mcp/auto-probe.js +0 -1
- package/dist/services/mcp/generators/claude.d.ts +0 -1
- package/dist/services/mcp/generators/claude.js +0 -1
- package/dist/services/mcp/generators/codex.d.ts +0 -1
- package/dist/services/mcp/generators/codex.js +0 -1
- package/dist/services/mcp/generators/gemini.d.ts +0 -1
- package/dist/services/mcp/generators/gemini.js +0 -1
- package/dist/services/mcp/generators/index.d.ts +1 -1
- package/dist/services/mcp/generators/index.js +3 -1
- package/dist/services/mcp/generators/types.d.ts +0 -1
- package/dist/services/mcp/generators/types.js +0 -1
- package/dist/services/mcp/probe.d.ts +0 -1
- package/dist/services/mcp/probe.js +7 -1
- package/dist/services/mcp/registry.d.ts +0 -1
- package/dist/services/mcp/registry.js +0 -1
- package/dist/services/mcp/risk.d.ts +1 -2
- package/dist/services/mcp/risk.js +1 -2
- package/dist/services/mcp/sdk-observations-server.d.ts +59 -0
- package/dist/services/mcp/sdk-observations-server.js +160 -0
- package/dist/services/mcp/session-materializer.d.ts +2 -3
- package/dist/services/mcp/session-materializer.js +15 -12
- package/dist/services/mcp/tool-audit.d.ts +0 -1
- package/dist/services/mcp/tool-audit.js +0 -1
- package/dist/services/mcp/types.d.ts +1 -1
- package/dist/services/mcp/types.js +0 -1
- package/dist/services/notion.d.ts +17 -2
- package/dist/services/notion.js +39 -3
- package/dist/services/observations-batch.d.ts +98 -0
- package/dist/services/observations-batch.js +256 -0
- package/dist/services/obsidian.d.ts +0 -1
- package/dist/services/obsidian.js +0 -1
- package/dist/services/service-registry.d.ts +0 -3
- package/dist/services/service-registry.js +0 -2
- package/dist/services/voice/transcriber-impl.d.ts +0 -1
- package/dist/services/voice/transcriber-impl.js +21 -20
- package/dist/services/voice/transcriber.d.ts +22 -2
- package/dist/services/voice/transcriber.js +68 -11
- package/dist/settings/runtime-settings.d.ts +52 -8
- package/dist/settings/runtime-settings.js +172 -20
- package/dist/settings/settings-store.d.ts +0 -1
- package/dist/settings/settings-store.js +44 -2
- package/native/win-appcontainer/README.md +66 -0
- package/native/win-appcontainer/binding.gyp +33 -0
- package/native/win-appcontainer/loader.js +29 -0
- package/native/win-appcontainer/package.json +18 -0
- package/native/win-appcontainer/src/win_appcontainer.cc +67 -0
- package/package.json +8 -3
- package/dist/adapters/composite-dashboard-stream.d.ts.map +0 -1
- package/dist/adapters/composite-dashboard-stream.js.map +0 -1
- package/dist/adapters/dashboard-adapter.d.ts.map +0 -1
- package/dist/adapters/dashboard-adapter.js.map +0 -1
- package/dist/adapters/discord.d.ts.map +0 -1
- package/dist/adapters/discord.js.map +0 -1
- package/dist/adapters/docs-qa-adapter.d.ts.map +0 -1
- package/dist/adapters/docs-qa-adapter.js.map +0 -1
- package/dist/adapters/message-hub.d.ts.map +0 -1
- package/dist/adapters/message-hub.js.map +0 -1
- package/dist/adapters/notification-manager.d.ts.map +0 -1
- package/dist/adapters/notification-manager.js.map +0 -1
- package/dist/adapters/outbound-text.d.ts.map +0 -1
- package/dist/adapters/outbound-text.js.map +0 -1
- package/dist/adapters/slack-adapter.d.ts.map +0 -1
- package/dist/adapters/slack-adapter.js.map +0 -1
- package/dist/adapters/telegram-adapter.d.ts.map +0 -1
- package/dist/adapters/telegram-adapter.js.map +0 -1
- package/dist/adapters/types.d.ts.map +0 -1
- package/dist/adapters/types.js.map +0 -1
- package/dist/adapters/whatsapp-adapter.d.ts.map +0 -1
- package/dist/adapters/whatsapp-adapter.js.map +0 -1
- package/dist/api/chat-binding-query.d.ts.map +0 -1
- package/dist/api/chat-binding-query.js.map +0 -1
- package/dist/api/chat-session-resume.d.ts.map +0 -1
- package/dist/api/chat-session-resume.js.map +0 -1
- package/dist/api/delegated-proxy-helper.d.ts +0 -33
- package/dist/api/delegated-proxy-helper.d.ts.map +0 -1
- package/dist/api/delegated-proxy-helper.js +0 -54
- package/dist/api/delegated-proxy-helper.js.map +0 -1
- package/dist/api/directory-picker.d.ts.map +0 -1
- package/dist/api/directory-picker.js.map +0 -1
- package/dist/api/env-writer.d.ts.map +0 -1
- package/dist/api/env-writer.js.map +0 -1
- package/dist/api/integration-route-gate.d.ts.map +0 -1
- package/dist/api/integration-route-gate.js.map +0 -1
- package/dist/api/json-body.d.ts.map +0 -1
- package/dist/api/json-body.js.map +0 -1
- package/dist/api/routes/activity-sources.d.ts.map +0 -1
- package/dist/api/routes/activity-sources.js.map +0 -1
- package/dist/api/routes/agent.d.ts.map +0 -1
- package/dist/api/routes/agent.js.map +0 -1
- package/dist/api/routes/apple-calendar.d.ts.map +0 -1
- package/dist/api/routes/apple-calendar.js.map +0 -1
- package/dist/api/routes/attachments.d.ts.map +0 -1
- package/dist/api/routes/attachments.js.map +0 -1
- package/dist/api/routes/backends.d.ts.map +0 -1
- package/dist/api/routes/backends.js.map +0 -1
- package/dist/api/routes/books.d.ts.map +0 -1
- package/dist/api/routes/books.js.map +0 -1
- package/dist/api/routes/calendar.d.ts.map +0 -1
- package/dist/api/routes/calendar.js.map +0 -1
- package/dist/api/routes/commands.d.ts.map +0 -1
- package/dist/api/routes/commands.js.map +0 -1
- package/dist/api/routes/context.d.ts +0 -57
- package/dist/api/routes/context.d.ts.map +0 -1
- package/dist/api/routes/context.js +0 -1788
- package/dist/api/routes/context.js.map +0 -1
- package/dist/api/routes/dashboard.d.ts +0 -29
- package/dist/api/routes/dashboard.d.ts.map +0 -1
- package/dist/api/routes/dashboard.js +0 -2160
- package/dist/api/routes/dashboard.js.map +0 -1
- package/dist/api/routes/delegated-sync.d.ts.map +0 -1
- package/dist/api/routes/delegated-sync.js.map +0 -1
- package/dist/api/routes/delegated.d.ts.map +0 -1
- package/dist/api/routes/delegated.js.map +0 -1
- package/dist/api/routes/docs.d.ts.map +0 -1
- package/dist/api/routes/docs.js.map +0 -1
- package/dist/api/routes/entities.d.ts.map +0 -1
- package/dist/api/routes/entities.js.map +0 -1
- package/dist/api/routes/fs.d.ts.map +0 -1
- package/dist/api/routes/fs.js.map +0 -1
- package/dist/api/routes/fs.logic.d.ts.map +0 -1
- package/dist/api/routes/fs.logic.js.map +0 -1
- package/dist/api/routes/git-accounts.d.ts.map +0 -1
- package/dist/api/routes/git-accounts.js.map +0 -1
- package/dist/api/routes/git-templates.d.ts.map +0 -1
- package/dist/api/routes/git-templates.js.map +0 -1
- package/dist/api/routes/git.d.ts.map +0 -1
- package/dist/api/routes/git.js.map +0 -1
- package/dist/api/routes/github.d.ts.map +0 -1
- package/dist/api/routes/github.js.map +0 -1
- package/dist/api/routes/health.d.ts.map +0 -1
- package/dist/api/routes/health.js.map +0 -1
- package/dist/api/routes/integrations-reconcile.d.ts.map +0 -1
- package/dist/api/routes/integrations-reconcile.js.map +0 -1
- package/dist/api/routes/integrations.d.ts +0 -48
- package/dist/api/routes/integrations.d.ts.map +0 -1
- package/dist/api/routes/integrations.js +0 -1572
- package/dist/api/routes/integrations.js.map +0 -1
- package/dist/api/routes/knowledge.d.ts.map +0 -1
- package/dist/api/routes/knowledge.js.map +0 -1
- package/dist/api/routes/mail.d.ts +0 -39
- package/dist/api/routes/mail.d.ts.map +0 -1
- package/dist/api/routes/mail.js +0 -1472
- package/dist/api/routes/mail.js.map +0 -1
- package/dist/api/routes/managed-tasks.d.ts.map +0 -1
- package/dist/api/routes/managed-tasks.js.map +0 -1
- package/dist/api/routes/mcp.d.ts.map +0 -1
- package/dist/api/routes/mcp.js.map +0 -1
- package/dist/api/routes/metrics.d.ts.map +0 -1
- package/dist/api/routes/metrics.js.map +0 -1
- package/dist/api/routes/notion.d.ts.map +0 -1
- package/dist/api/routes/notion.js.map +0 -1
- package/dist/api/routes/observations.d.ts.map +0 -1
- package/dist/api/routes/observations.js.map +0 -1
- package/dist/api/routes/obsidian.d.ts.map +0 -1
- package/dist/api/routes/obsidian.js.map +0 -1
- package/dist/api/routes/profile-questions.d.ts.map +0 -1
- package/dist/api/routes/profile-questions.js.map +0 -1
- package/dist/api/routes/receipts.d.ts.map +0 -1
- package/dist/api/routes/receipts.js.map +0 -1
- package/dist/api/routes/recurring-schedules.d.ts.map +0 -1
- package/dist/api/routes/recurring-schedules.js.map +0 -1
- package/dist/api/routes/repositories.d.ts.map +0 -1
- package/dist/api/routes/repositories.js.map +0 -1
- package/dist/api/routes/setup-migrate.d.ts.map +0 -1
- package/dist/api/routes/setup-migrate.js.map +0 -1
- package/dist/api/routes/setup.d.ts.map +0 -1
- package/dist/api/routes/setup.js.map +0 -1
- package/dist/api/routes/skill-curation.d.ts.map +0 -1
- package/dist/api/routes/skill-curation.js.map +0 -1
- package/dist/api/routes/skills.d.ts.map +0 -1
- package/dist/api/routes/skills.js.map +0 -1
- package/dist/api/routes/sot-bindings.d.ts.map +0 -1
- package/dist/api/routes/sot-bindings.js.map +0 -1
- package/dist/api/routes/sse.d.ts.map +0 -1
- package/dist/api/routes/sse.js.map +0 -1
- package/dist/api/routes/system.d.ts.map +0 -1
- package/dist/api/routes/system.js.map +0 -1
- package/dist/api/routes/task-flows.d.ts.map +0 -1
- package/dist/api/routes/task-flows.js.map +0 -1
- package/dist/api/routes/travel-bookings.d.ts.map +0 -1
- package/dist/api/routes/travel-bookings.js.map +0 -1
- package/dist/api/routes/travel-time.d.ts +0 -8
- package/dist/api/routes/travel-time.d.ts.map +0 -1
- package/dist/api/routes/travel-time.js +0 -87
- package/dist/api/routes/travel-time.js.map +0 -1
- package/dist/api/routes/triggers.d.ts.map +0 -1
- package/dist/api/routes/triggers.js.map +0 -1
- package/dist/api/routes/voice.d.ts.map +0 -1
- package/dist/api/routes/voice.js.map +0 -1
- package/dist/api/routes/wiki.d.ts.map +0 -1
- package/dist/api/routes/wiki.js.map +0 -1
- package/dist/api/server.d.ts.map +0 -1
- package/dist/api/server.js.map +0 -1
- package/dist/bootstrap/adapters.d.ts.map +0 -1
- package/dist/bootstrap/adapters.js.map +0 -1
- package/dist/bootstrap/catchup.d.ts.map +0 -1
- package/dist/bootstrap/catchup.js.map +0 -1
- package/dist/bootstrap/schedule-helpers.d.ts.map +0 -1
- package/dist/bootstrap/schedule-helpers.js.map +0 -1
- package/dist/bootstrap/services.d.ts.map +0 -1
- package/dist/bootstrap/services.js.map +0 -1
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js.map +0 -1
- package/dist/core/agent-core.d.ts.map +0 -1
- package/dist/core/agent-core.js.map +0 -1
- package/dist/core/alerts.d.ts.map +0 -1
- package/dist/core/alerts.js.map +0 -1
- package/dist/core/atomic-write.d.ts.map +0 -1
- package/dist/core/atomic-write.js.map +0 -1
- package/dist/core/backends/api-key-probe.d.ts.map +0 -1
- package/dist/core/backends/api-key-probe.js.map +0 -1
- package/dist/core/backends/auth-health-monitor.d.ts.map +0 -1
- package/dist/core/backends/auth-health-monitor.js.map +0 -1
- package/dist/core/backends/auth-recovery.d.ts.map +0 -1
- package/dist/core/backends/auth-recovery.js.map +0 -1
- package/dist/core/backends/auth-telemetry.d.ts.map +0 -1
- package/dist/core/backends/auth-telemetry.js.map +0 -1
- package/dist/core/backends/backend-router.d.ts.map +0 -1
- package/dist/core/backends/backend-router.js.map +0 -1
- package/dist/core/backends/claude-auth.d.ts.map +0 -1
- package/dist/core/backends/claude-auth.js.map +0 -1
- package/dist/core/backends/claude-code-core.d.ts.map +0 -1
- package/dist/core/backends/claude-code-core.js.map +0 -1
- package/dist/core/backends/claude-credentials-store.d.ts.map +0 -1
- package/dist/core/backends/claude-credentials-store.js.map +0 -1
- package/dist/core/backends/claude-delegated.d.ts.map +0 -1
- package/dist/core/backends/claude-delegated.js.map +0 -1
- package/dist/core/backends/claude-errors.d.ts.map +0 -1
- package/dist/core/backends/claude-errors.js.map +0 -1
- package/dist/core/backends/claude-probe.d.ts.map +0 -1
- package/dist/core/backends/claude-probe.js.map +0 -1
- package/dist/core/backends/claude-tool-collection.d.ts.map +0 -1
- package/dist/core/backends/claude-tool-collection.js.map +0 -1
- package/dist/core/backends/cli-utils.d.ts.map +0 -1
- package/dist/core/backends/cli-utils.js.map +0 -1
- package/dist/core/backends/codex-core.d.ts.map +0 -1
- package/dist/core/backends/codex-core.js.map +0 -1
- package/dist/core/backends/gemini-cli-core.d.ts.map +0 -1
- package/dist/core/backends/gemini-cli-core.js.map +0 -1
- package/dist/core/backends/idle-watchdog.d.ts.map +0 -1
- package/dist/core/backends/idle-watchdog.js.map +0 -1
- package/dist/core/backends/install-methods.d.ts.map +0 -1
- package/dist/core/backends/install-methods.js.map +0 -1
- package/dist/core/backends/model-registry.d.ts.map +0 -1
- package/dist/core/backends/model-registry.js.map +0 -1
- package/dist/core/backends/plan-presets.d.ts.map +0 -1
- package/dist/core/backends/plan-presets.js.map +0 -1
- package/dist/core/backends/price-fetcher.d.ts.map +0 -1
- package/dist/core/backends/price-fetcher.js.map +0 -1
- package/dist/core/backends/process-config-cascade.d.ts.map +0 -1
- package/dist/core/backends/process-config-cascade.js.map +0 -1
- package/dist/core/backends/prompt-utils.d.ts.map +0 -1
- package/dist/core/backends/prompt-utils.js.map +0 -1
- package/dist/core/backends/proxy-model-registry.d.ts.map +0 -1
- package/dist/core/backends/proxy-model-registry.js.map +0 -1
- package/dist/core/backends/silent-api-error-detector.d.ts.map +0 -1
- package/dist/core/backends/silent-api-error-detector.js.map +0 -1
- package/dist/core/bang-commands/commands-cost.d.ts.map +0 -1
- package/dist/core/bang-commands/commands-cost.js.map +0 -1
- package/dist/core/bang-commands/commands-help.d.ts.map +0 -1
- package/dist/core/bang-commands/commands-help.js.map +0 -1
- package/dist/core/bang-commands/commands-report.d.ts.map +0 -1
- package/dist/core/bang-commands/commands-report.js.map +0 -1
- package/dist/core/bang-commands/commands-stop-start.d.ts.map +0 -1
- package/dist/core/bang-commands/commands-stop-start.js.map +0 -1
- package/dist/core/bang-commands/commands-wiki.d.ts.map +0 -1
- package/dist/core/bang-commands/commands-wiki.js.map +0 -1
- package/dist/core/bang-commands/format-utils.d.ts.map +0 -1
- package/dist/core/bang-commands/format-utils.js.map +0 -1
- package/dist/core/bang-commands/index.d.ts.map +0 -1
- package/dist/core/bang-commands/index.js.map +0 -1
- package/dist/core/bang-commands/registry.d.ts.map +0 -1
- package/dist/core/bang-commands/registry.js.map +0 -1
- package/dist/core/bang-commands/user-commands.d.ts.map +0 -1
- package/dist/core/bang-commands/user-commands.js.map +0 -1
- package/dist/core/channel-timeline.d.ts.map +0 -1
- package/dist/core/channel-timeline.js.map +0 -1
- package/dist/core/character-block.d.ts.map +0 -1
- package/dist/core/character-block.js.map +0 -1
- package/dist/core/context/activity-sources.d.ts.map +0 -1
- package/dist/core/context/activity-sources.js.map +0 -1
- package/dist/core/context/activity-view-reconciler.d.ts.map +0 -1
- package/dist/core/context/activity-view-reconciler.js.map +0 -1
- package/dist/core/context/activity-view-runner.d.ts.map +0 -1
- package/dist/core/context/activity-view-runner.js.map +0 -1
- package/dist/core/context/default-schedules-reconciler.d.ts.map +0 -1
- package/dist/core/context/default-schedules-reconciler.js.map +0 -1
- package/dist/core/context/default-schedules-runner.d.ts.map +0 -1
- package/dist/core/context/default-schedules-runner.js.map +0 -1
- package/dist/core/context/domain-index-reconciler.d.ts.map +0 -1
- package/dist/core/context/domain-index-reconciler.js.map +0 -1
- package/dist/core/context/domain-index-runner.d.ts.map +0 -1
- package/dist/core/context/domain-index-runner.js.map +0 -1
- package/dist/core/context/entity-mirror.d.ts.map +0 -1
- package/dist/core/context/entity-mirror.js.map +0 -1
- package/dist/core/context/entity-source-rename.d.ts.map +0 -1
- package/dist/core/context/entity-source-rename.js.map +0 -1
- package/dist/core/context/index-reconciler.d.ts.map +0 -1
- package/dist/core/context/index-reconciler.js.map +0 -1
- package/dist/core/context/policy-index-reconciler.d.ts.map +0 -1
- package/dist/core/context/policy-index-reconciler.js.map +0 -1
- package/dist/core/context/policy-index-runner.d.ts.map +0 -1
- package/dist/core/context/policy-index-runner.js.map +0 -1
- package/dist/core/context/reconciler-runner.d.ts.map +0 -1
- package/dist/core/context/reconciler-runner.js.map +0 -1
- package/dist/core/context-builder.d.ts.map +0 -1
- package/dist/core/context-builder.js.map +0 -1
- package/dist/core/context-frontmatter-backfill.d.ts +0 -33
- package/dist/core/context-frontmatter-backfill.d.ts.map +0 -1
- package/dist/core/context-frontmatter-backfill.js +0 -111
- package/dist/core/context-frontmatter-backfill.js.map +0 -1
- package/dist/core/context-frontmatter.d.ts.map +0 -1
- package/dist/core/context-frontmatter.js.map +0 -1
- package/dist/core/context-health.d.ts.map +0 -1
- package/dist/core/context-health.js.map +0 -1
- package/dist/core/context-paths.d.ts.map +0 -1
- package/dist/core/context-paths.js.map +0 -1
- package/dist/core/context-staleness.d.ts.map +0 -1
- package/dist/core/context-staleness.js.map +0 -1
- package/dist/core/custom-routine-scheduler.d.ts.map +0 -1
- package/dist/core/custom-routine-scheduler.js.map +0 -1
- package/dist/core/daemon-api-cli.d.ts.map +0 -1
- package/dist/core/daemon-api-cli.js.map +0 -1
- package/dist/core/dashboard-session-cleanup.d.ts.map +0 -1
- package/dist/core/dashboard-session-cleanup.js.map +0 -1
- package/dist/core/dashboard-session-controls.d.ts.map +0 -1
- package/dist/core/dashboard-session-controls.js.map +0 -1
- package/dist/core/delegated-connector-health.d.ts.map +0 -1
- package/dist/core/delegated-connector-health.js.map +0 -1
- package/dist/core/dispatcher-date-utils.d.ts.map +0 -1
- package/dist/core/dispatcher-date-utils.js.map +0 -1
- package/dist/core/dispatcher-error-handling.d.ts.map +0 -1
- package/dist/core/dispatcher-error-handling.js.map +0 -1
- package/dist/core/dispatcher-hourly-check.d.ts.map +0 -1
- package/dist/core/dispatcher-hourly-check.js.map +0 -1
- package/dist/core/dispatcher-message-handler.d.ts.map +0 -1
- package/dist/core/dispatcher-message-handler.js.map +0 -1
- package/dist/core/dispatcher-morning-routine.d.ts.map +0 -1
- package/dist/core/dispatcher-morning-routine.js.map +0 -1
- package/dist/core/dispatcher-prompt.d.ts.map +0 -1
- package/dist/core/dispatcher-prompt.js.map +0 -1
- package/dist/core/dispatcher-repository-helpers.d.ts.map +0 -1
- package/dist/core/dispatcher-repository-helpers.js.map +0 -1
- package/dist/core/dispatcher-result-processor.d.ts.map +0 -1
- package/dist/core/dispatcher-result-processor.js.map +0 -1
- package/dist/core/dispatcher-scheduled-tasks.d.ts.map +0 -1
- package/dist/core/dispatcher-scheduled-tasks.js.map +0 -1
- package/dist/core/dispatcher-types.d.ts.map +0 -1
- package/dist/core/dispatcher-types.js.map +0 -1
- package/dist/core/dispatcher.d.ts.map +0 -1
- package/dist/core/dispatcher.js.map +0 -1
- package/dist/core/dm-freshness-metrics.d.ts.map +0 -1
- package/dist/core/dm-freshness-metrics.js.map +0 -1
- package/dist/core/docs/citation-validator.d.ts.map +0 -1
- package/dist/core/docs/citation-validator.js.map +0 -1
- package/dist/core/docs/extract-terms.d.ts.map +0 -1
- package/dist/core/docs/extract-terms.js.map +0 -1
- package/dist/core/docs/indexer.d.ts.map +0 -1
- package/dist/core/docs/indexer.js.map +0 -1
- package/dist/core/drift-effects.d.ts.map +0 -1
- package/dist/core/drift-effects.js.map +0 -1
- package/dist/core/event-bus.d.ts.map +0 -1
- package/dist/core/event-bus.js.map +0 -1
- package/dist/core/git-project-docs.d.ts.map +0 -1
- package/dist/core/git-project-docs.js.map +0 -1
- package/dist/core/health-monitor.d.ts.map +0 -1
- package/dist/core/health-monitor.js.map +0 -1
- package/dist/core/heartbeat.d.ts.map +0 -1
- package/dist/core/heartbeat.js.map +0 -1
- package/dist/core/integration-health.d.ts.map +0 -1
- package/dist/core/integration-health.js.map +0 -1
- package/dist/core/integration-lifecycle.d.ts.map +0 -1
- package/dist/core/integration-lifecycle.js.map +0 -1
- package/dist/core/integration-main-backend.d.ts.map +0 -1
- package/dist/core/integration-main-backend.js.map +0 -1
- package/dist/core/integration-probe.d.ts.map +0 -1
- package/dist/core/integration-probe.js.map +0 -1
- package/dist/core/management-md-write-lock.d.ts.map +0 -1
- package/dist/core/management-md-write-lock.js.map +0 -1
- package/dist/core/management-md.d.ts.map +0 -1
- package/dist/core/management-md.js.map +0 -1
- package/dist/core/management-registry.d.ts.map +0 -1
- package/dist/core/management-registry.js.map +0 -1
- package/dist/core/management-telemetry.d.ts.map +0 -1
- package/dist/core/management-telemetry.js.map +0 -1
- package/dist/core/message-recorder.d.ts.map +0 -1
- package/dist/core/message-recorder.js.map +0 -1
- package/dist/core/metrics.d.ts.map +0 -1
- package/dist/core/metrics.js.map +0 -1
- package/dist/core/migration-backup.d.ts.map +0 -1
- package/dist/core/migration-backup.js.map +0 -1
- package/dist/core/output-language-policy.d.ts.map +0 -1
- package/dist/core/output-language-policy.js.map +0 -1
- package/dist/core/overview-write-lock.d.ts.map +0 -1
- package/dist/core/overview-write-lock.js.map +0 -1
- package/dist/core/path-compat.d.ts.map +0 -1
- package/dist/core/path-compat.js.map +0 -1
- package/dist/core/path-rewrite.d.ts.map +0 -1
- package/dist/core/path-rewrite.js.map +0 -1
- package/dist/core/policy-files.d.ts.map +0 -1
- package/dist/core/policy-files.js.map +0 -1
- package/dist/core/profile-questions/seed.d.ts.map +0 -1
- package/dist/core/profile-questions/seed.js.map +0 -1
- package/dist/core/profile-questions/slot-filled.d.ts.map +0 -1
- package/dist/core/profile-questions/slot-filled.js.map +0 -1
- package/dist/core/prompts.d.ts.map +0 -1
- package/dist/core/prompts.js.map +0 -1
- package/dist/core/quiet-hours-sync.d.ts.map +0 -1
- package/dist/core/quiet-hours-sync.js.map +0 -1
- package/dist/core/read-sensitive-token-manager.d.ts.map +0 -1
- package/dist/core/read-sensitive-token-manager.js.map +0 -1
- package/dist/core/recurrence.d.ts.map +0 -1
- package/dist/core/recurrence.js.map +0 -1
- package/dist/core/reinstall.d.ts.map +0 -1
- package/dist/core/reinstall.js.map +0 -1
- package/dist/core/release-assets.d.ts.map +0 -1
- package/dist/core/release-assets.js.map +0 -1
- package/dist/core/repository-management-docs.d.ts.map +0 -1
- package/dist/core/repository-management-docs.js.map +0 -1
- package/dist/core/retention.d.ts.map +0 -1
- package/dist/core/retention.js.map +0 -1
- package/dist/core/review-context.d.ts.map +0 -1
- package/dist/core/review-context.js.map +0 -1
- package/dist/core/roadmap-horizon.d.ts.map +0 -1
- package/dist/core/roadmap-horizon.js.map +0 -1
- package/dist/core/roadmap-ids.d.ts.map +0 -1
- package/dist/core/roadmap-ids.js.map +0 -1
- package/dist/core/roadmap-merge.d.ts +0 -7
- package/dist/core/roadmap-merge.d.ts.map +0 -1
- package/dist/core/roadmap-merge.js +0 -187
- package/dist/core/roadmap-merge.js.map +0 -1
- package/dist/core/roadmap-refresh-triggers.d.ts.map +0 -1
- package/dist/core/roadmap-refresh-triggers.js.map +0 -1
- package/dist/core/roadmap-truncate.d.ts.map +0 -1
- package/dist/core/roadmap-truncate.js.map +0 -1
- package/dist/core/roadmap-validate.d.ts.map +0 -1
- package/dist/core/roadmap-validate.js.map +0 -1
- package/dist/core/roadmap-write-lock.d.ts.map +0 -1
- package/dist/core/roadmap-write-lock.js.map +0 -1
- package/dist/core/routine-acquisition-plan.d.ts.map +0 -1
- package/dist/core/routine-acquisition-plan.js.map +0 -1
- package/dist/core/routine-fetch-window-retry.d.ts.map +0 -1
- package/dist/core/routine-fetch-window-retry.js.map +0 -1
- package/dist/core/routine-fetch-window-runner.d.ts.map +0 -1
- package/dist/core/routine-fetch-window-runner.js.map +0 -1
- package/dist/core/routine-windows.d.ts.map +0 -1
- package/dist/core/routine-windows.js.map +0 -1
- package/dist/core/schedule-insert-helper.d.ts.map +0 -1
- package/dist/core/schedule-insert-helper.js.map +0 -1
- package/dist/core/schedule-maintenance.d.ts.map +0 -1
- package/dist/core/schedule-maintenance.js.map +0 -1
- package/dist/core/scheduler.d.ts.map +0 -1
- package/dist/core/scheduler.js.map +0 -1
- package/dist/core/semaphore.d.ts.map +0 -1
- package/dist/core/semaphore.js.map +0 -1
- package/dist/core/session-gate.d.ts.map +0 -1
- package/dist/core/session-gate.js.map +0 -1
- package/dist/core/session-manager.d.ts.map +0 -1
- package/dist/core/session-manager.js.map +0 -1
- package/dist/core/signal-detector.d.ts.map +0 -1
- package/dist/core/signal-detector.js.map +0 -1
- package/dist/core/skeleton.d.ts.map +0 -1
- package/dist/core/skeleton.js.map +0 -1
- package/dist/core/skill-curation/apply-proposal.d.ts.map +0 -1
- package/dist/core/skill-curation/apply-proposal.js.map +0 -1
- package/dist/core/skill-curation/auto-revert.d.ts.map +0 -1
- package/dist/core/skill-curation/auto-revert.js.map +0 -1
- package/dist/core/skill-curation/classify-diff.d.ts.map +0 -1
- package/dist/core/skill-curation/classify-diff.js.map +0 -1
- package/dist/core/skill-curation/declarations.d.ts.map +0 -1
- package/dist/core/skill-curation/declarations.js.map +0 -1
- package/dist/core/skill-curation/knowledge-map.d.ts.map +0 -1
- package/dist/core/skill-curation/knowledge-map.js.map +0 -1
- package/dist/core/skill-curation/orphan-overlay.d.ts.map +0 -1
- package/dist/core/skill-curation/orphan-overlay.js.map +0 -1
- package/dist/core/skill-curation/overlay-store.d.ts.map +0 -1
- package/dist/core/skill-curation/overlay-store.js.map +0 -1
- package/dist/core/skill-curation/render/convention-notes.d.ts.map +0 -1
- package/dist/core/skill-curation/render/convention-notes.js.map +0 -1
- package/dist/core/skill-curation/render/cross-references.d.ts.map +0 -1
- package/dist/core/skill-curation/render/cross-references.js.map +0 -1
- package/dist/core/skill-curation/render/frontmatter-schema.d.ts.map +0 -1
- package/dist/core/skill-curation/render/frontmatter-schema.js.map +0 -1
- package/dist/core/skill-curation/render/index.d.ts.map +0 -1
- package/dist/core/skill-curation/render/index.js.map +0 -1
- package/dist/core/skill-curation/render/knowledge-layout.d.ts.map +0 -1
- package/dist/core/skill-curation/render/knowledge-layout.js.map +0 -1
- package/dist/core/skill-curation/render/routing-table.d.ts.map +0 -1
- package/dist/core/skill-curation/render/routing-table.js.map +0 -1
- package/dist/core/skill-curation/render/search-recipes.d.ts.map +0 -1
- package/dist/core/skill-curation/render/search-recipes.js.map +0 -1
- package/dist/core/skill-curation/run-token.d.ts.map +0 -1
- package/dist/core/skill-curation/run-token.js.map +0 -1
- package/dist/core/skill-curation/signals.d.ts.map +0 -1
- package/dist/core/skill-curation/signals.js.map +0 -1
- package/dist/core/skill-curation/smoke-test.d.ts.map +0 -1
- package/dist/core/skill-curation/smoke-test.js.map +0 -1
- package/dist/core/skill-curation/splicer.d.ts.map +0 -1
- package/dist/core/skill-curation/splicer.js.map +0 -1
- package/dist/core/skill-curation/workdir.d.ts.map +0 -1
- package/dist/core/skill-curation/workdir.js.map +0 -1
- package/dist/core/skill-source-paths.d.ts.map +0 -1
- package/dist/core/skill-source-paths.js.map +0 -1
- package/dist/core/skills-compiler.d.ts.map +0 -1
- package/dist/core/skills-compiler.js.map +0 -1
- package/dist/core/skills-manifest.d.ts.map +0 -1
- package/dist/core/skills-manifest.js.map +0 -1
- package/dist/core/system-reset.d.ts.map +0 -1
- package/dist/core/system-reset.js.map +0 -1
- package/dist/core/template-store.d.ts.map +0 -1
- package/dist/core/template-store.js.map +0 -1
- package/dist/core/template-versions.d.ts.map +0 -1
- package/dist/core/template-versions.js.map +0 -1
- package/dist/core/today-agent-plan.d.ts.map +0 -1
- package/dist/core/today-agent-plan.js.map +0 -1
- package/dist/core/today-direct-writer.d.ts.map +0 -1
- package/dist/core/today-direct-writer.js.map +0 -1
- package/dist/core/today-write-lock.d.ts.map +0 -1
- package/dist/core/today-write-lock.js.map +0 -1
- package/dist/core/trigger-dispatch.d.ts.map +0 -1
- package/dist/core/trigger-dispatch.js.map +0 -1
- package/dist/core/trigger-evaluator.d.ts.map +0 -1
- package/dist/core/trigger-evaluator.js.map +0 -1
- package/dist/core/wiki/approval-queue.d.ts.map +0 -1
- package/dist/core/wiki/approval-queue.js.map +0 -1
- package/dist/core/wiki/bridge.d.ts.map +0 -1
- package/dist/core/wiki/bridge.js.map +0 -1
- package/dist/core/wiki/compile-lock.d.ts.map +0 -1
- package/dist/core/wiki/compile-lock.js.map +0 -1
- package/dist/core/wiki/compile-preview.d.ts.map +0 -1
- package/dist/core/wiki/compile-preview.js.map +0 -1
- package/dist/core/wiki/cost-estimate.d.ts.map +0 -1
- package/dist/core/wiki/cost-estimate.js.map +0 -1
- package/dist/core/wiki/dispatcher.d.ts.map +0 -1
- package/dist/core/wiki/dispatcher.js.map +0 -1
- package/dist/core/wiki/git-precompile.d.ts.map +0 -1
- package/dist/core/wiki/git-precompile.js.map +0 -1
- package/dist/core/wiki/import-migrate.d.ts.map +0 -1
- package/dist/core/wiki/import-migrate.js.map +0 -1
- package/dist/core/wiki/import-probe.d.ts.map +0 -1
- package/dist/core/wiki/import-probe.js.map +0 -1
- package/dist/core/wiki/index-cache.d.ts.map +0 -1
- package/dist/core/wiki/index-cache.js.map +0 -1
- package/dist/core/wiki/multi-url-dispatch.d.ts.map +0 -1
- package/dist/core/wiki/multi-url-dispatch.js.map +0 -1
- package/dist/core/wiki/wiki-fts.d.ts.map +0 -1
- package/dist/core/wiki/wiki-fts.js.map +0 -1
- package/dist/core/wiki/workspaces.d.ts.map +0 -1
- package/dist/core/wiki/workspaces.js.map +0 -1
- package/dist/core/wiki/write-strategy.d.ts.map +0 -1
- package/dist/core/wiki/write-strategy.js.map +0 -1
- package/dist/core/workdir.d.ts.map +0 -1
- package/dist/core/workdir.js.map +0 -1
- package/dist/db/automation-triggers.d.ts.map +0 -1
- package/dist/db/automation-triggers.js.map +0 -1
- package/dist/db/client.d.ts.map +0 -1
- package/dist/db/client.js.map +0 -1
- package/dist/db/entities-store.d.ts.map +0 -1
- package/dist/db/entities-store.js.map +0 -1
- package/dist/db/hourly-check-signals.d.ts.map +0 -1
- package/dist/db/hourly-check-signals.js.map +0 -1
- package/dist/db/integration-probe-store.d.ts.map +0 -1
- package/dist/db/integration-probe-store.js.map +0 -1
- package/dist/db/integrations-store.d.ts.map +0 -1
- package/dist/db/integrations-store.js.map +0 -1
- package/dist/db/managed-tasks-store.d.ts.map +0 -1
- package/dist/db/managed-tasks-store.js.map +0 -1
- package/dist/db/management-parse-failures-store.d.ts.map +0 -1
- package/dist/db/management-parse-failures-store.js.map +0 -1
- package/dist/db/observations.d.ts.map +0 -1
- package/dist/db/observations.js.map +0 -1
- package/dist/db/recurring-schedules.d.ts.map +0 -1
- package/dist/db/recurring-schedules.js.map +0 -1
- package/dist/db/repositories-store.d.ts.map +0 -1
- package/dist/db/repositories-store.js.map +0 -1
- package/dist/db/runtime-state.d.ts.map +0 -1
- package/dist/db/runtime-state.js.map +0 -1
- package/dist/db/schema.d.ts.map +0 -1
- package/dist/db/schema.js.map +0 -1
- package/dist/db/sot-bindings-store.d.ts.map +0 -1
- package/dist/db/sot-bindings-store.js.map +0 -1
- package/dist/db/test-schemas.d.ts +0 -23
- package/dist/db/test-schemas.d.ts.map +0 -1
- package/dist/db/test-schemas.js +0 -111
- package/dist/db/test-schemas.js.map +0 -1
- package/dist/db/voice-transcripts-store.d.ts.map +0 -1
- package/dist/db/voice-transcripts-store.js.map +0 -1
- package/dist/db/wiki-store.d.ts.map +0 -1
- package/dist/db/wiki-store.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/init.d.ts.map +0 -1
- package/dist/init.js.map +0 -1
- package/dist/log-buffer.d.ts.map +0 -1
- package/dist/log-buffer.js.map +0 -1
- package/dist/logging.d.ts.map +0 -1
- package/dist/logging.js.map +0 -1
- package/dist/management-rules.d.ts.map +0 -1
- package/dist/management-rules.js.map +0 -1
- package/dist/messaging/constants.d.ts.map +0 -1
- package/dist/messaging/constants.js.map +0 -1
- package/dist/messaging/magic-phrase.d.ts.map +0 -1
- package/dist/messaging/magic-phrase.js.map +0 -1
- package/dist/messaging/owner-channels.d.ts.map +0 -1
- package/dist/messaging/owner-channels.js.map +0 -1
- package/dist/messaging/setup-welcome-dm.d.ts.map +0 -1
- package/dist/messaging/setup-welcome-dm.js.map +0 -1
- package/dist/messaging/url-extract.d.ts.map +0 -1
- package/dist/messaging/url-extract.js.map +0 -1
- package/dist/observers/calendar-poller.d.ts.map +0 -1
- package/dist/observers/calendar-poller.js.map +0 -1
- package/dist/observers/context-index-reconciler-observer.d.ts.map +0 -1
- package/dist/observers/context-index-reconciler-observer.js.map +0 -1
- package/dist/observers/delegated-probe-observer.d.ts.map +0 -1
- package/dist/observers/delegated-probe-observer.js.map +0 -1
- package/dist/observers/delegated-sync-worker.d.ts.map +0 -1
- package/dist/observers/delegated-sync-worker.js.map +0 -1
- package/dist/observers/entity-mirror-observer.d.ts.map +0 -1
- package/dist/observers/entity-mirror-observer.js.map +0 -1
- package/dist/observers/git-delegated-cron.d.ts.map +0 -1
- package/dist/observers/git-delegated-cron.js.map +0 -1
- package/dist/observers/git-event-classifier.d.ts.map +0 -1
- package/dist/observers/git-event-classifier.js.map +0 -1
- package/dist/observers/git-watcher.d.ts.map +0 -1
- package/dist/observers/git-watcher.js.map +0 -1
- package/dist/observers/github-poller-classifier.d.ts.map +0 -1
- package/dist/observers/github-poller-classifier.js.map +0 -1
- package/dist/observers/github-poller.d.ts.map +0 -1
- package/dist/observers/github-poller.js.map +0 -1
- package/dist/observers/imminent-event-scheduler.d.ts.map +0 -1
- package/dist/observers/imminent-event-scheduler.js.map +0 -1
- package/dist/observers/mail-poller.d.ts.map +0 -1
- package/dist/observers/mail-poller.js.map +0 -1
- package/dist/observers/mail-reconciliation.d.ts.map +0 -1
- package/dist/observers/mail-reconciliation.js.map +0 -1
- package/dist/observers/manager.d.ts.map +0 -1
- package/dist/observers/manager.js.map +0 -1
- package/dist/observers/notion-poller.d.ts.map +0 -1
- package/dist/observers/notion-poller.js.map +0 -1
- package/dist/observers/observation-summarizer/index.d.ts.map +0 -1
- package/dist/observers/observation-summarizer/index.js.map +0 -1
- package/dist/observers/observation-summarizer/pre-filter.d.ts.map +0 -1
- package/dist/observers/observation-summarizer/pre-filter.js.map +0 -1
- package/dist/observers/observation-summarizer/response-parser.d.ts.map +0 -1
- package/dist/observers/observation-summarizer/response-parser.js.map +0 -1
- package/dist/observers/observation-summarizer/summarizer-client.d.ts.map +0 -1
- package/dist/observers/observation-summarizer/summarizer-client.js.map +0 -1
- package/dist/observers/observation-summarizer/summarizer-prompts.d.ts.map +0 -1
- package/dist/observers/observation-summarizer/summarizer-prompts.js.map +0 -1
- package/dist/observers/observation-summarizer/worker.d.ts.map +0 -1
- package/dist/observers/observation-summarizer/worker.js.map +0 -1
- package/dist/observers/obsidian-watcher.d.ts.map +0 -1
- package/dist/observers/obsidian-watcher.js.map +0 -1
- package/dist/observers/primary-vault-watcher.d.ts.map +0 -1
- package/dist/observers/primary-vault-watcher.js.map +0 -1
- package/dist/observers/repository-management-cron.d.ts.map +0 -1
- package/dist/observers/repository-management-cron.js.map +0 -1
- package/dist/observers/skill-curation-walker.d.ts.map +0 -1
- package/dist/observers/skill-curation-walker.js.map +0 -1
- package/dist/safety/absolute-block-audit.d.ts.map +0 -1
- package/dist/safety/absolute-block-audit.js.map +0 -1
- package/dist/safety/agent-write-tracker.d.ts.map +0 -1
- package/dist/safety/agent-write-tracker.js.map +0 -1
- package/dist/safety/always-disallowed.d.ts.map +0 -1
- package/dist/safety/always-disallowed.js.map +0 -1
- package/dist/safety/audit.d.ts.map +0 -1
- package/dist/safety/audit.js.map +0 -1
- package/dist/safety/integration-write-tracker.d.ts.map +0 -1
- package/dist/safety/integration-write-tracker.js.map +0 -1
- package/dist/safety/risk-classifier.d.ts.map +0 -1
- package/dist/safety/risk-classifier.js.map +0 -1
- package/dist/scheduler/hourly-check-gate.d.ts.map +0 -1
- package/dist/scheduler/hourly-check-gate.js.map +0 -1
- package/dist/secrets/backend-api-key-env.d.ts.map +0 -1
- package/dist/secrets/backend-api-key-env.js.map +0 -1
- package/dist/secrets/codex-home-materializer.d.ts.map +0 -1
- package/dist/secrets/codex-home-materializer.js.map +0 -1
- package/dist/secrets/encrypted-blob-store.d.ts.map +0 -1
- package/dist/secrets/encrypted-blob-store.js.map +0 -1
- package/dist/secrets/platform-secret-store.d.ts.map +0 -1
- package/dist/secrets/platform-secret-store.js.map +0 -1
- package/dist/secrets/redaction.d.ts.map +0 -1
- package/dist/secrets/redaction.js.map +0 -1
- package/dist/secrets/secret-broker.d.ts.map +0 -1
- package/dist/secrets/secret-broker.js.map +0 -1
- package/dist/secrets/secret-names.d.ts.map +0 -1
- package/dist/secrets/secret-names.js.map +0 -1
- package/dist/secrets/secret-store.d.ts.map +0 -1
- package/dist/secrets/secret-store.js.map +0 -1
- package/dist/secrets/types.d.ts.map +0 -1
- package/dist/secrets/types.js.map +0 -1
- package/dist/services/apple-calendar/caldav-client.d.ts.map +0 -1
- package/dist/services/apple-calendar/caldav-client.js.map +0 -1
- package/dist/services/apple-calendar/caldav-codec.d.ts.map +0 -1
- package/dist/services/apple-calendar/caldav-codec.js.map +0 -1
- package/dist/services/apple-calendar/index.d.ts.map +0 -1
- package/dist/services/apple-calendar/index.js.map +0 -1
- package/dist/services/apple-calendar/service.d.ts.map +0 -1
- package/dist/services/apple-calendar/service.js.map +0 -1
- package/dist/services/apple-calendar/types.d.ts.map +0 -1
- package/dist/services/apple-calendar/types.js.map +0 -1
- package/dist/services/attachments/hardlink.d.ts.map +0 -1
- package/dist/services/attachments/hardlink.js.map +0 -1
- package/dist/services/attachments/sanitize.d.ts.map +0 -1
- package/dist/services/attachments/sanitize.js.map +0 -1
- package/dist/services/attachments/store.d.ts.map +0 -1
- package/dist/services/attachments/store.js.map +0 -1
- package/dist/services/calendar/outlook/graph-calendar-client.d.ts.map +0 -1
- package/dist/services/calendar/outlook/graph-calendar-client.js.map +0 -1
- package/dist/services/calendar.d.ts.map +0 -1
- package/dist/services/calendar.js.map +0 -1
- package/dist/services/delegated-backend-invoker.d.ts.map +0 -1
- package/dist/services/delegated-backend-invoker.js.map +0 -1
- package/dist/services/delegated-invoker-audit.d.ts.map +0 -1
- package/dist/services/delegated-invoker-audit.js.map +0 -1
- package/dist/services/delegated-invoker-cache-hits.d.ts.map +0 -1
- package/dist/services/delegated-invoker-cache-hits.js.map +0 -1
- package/dist/services/delegated-invoker-janitors.d.ts.map +0 -1
- package/dist/services/delegated-invoker-janitors.js.map +0 -1
- package/dist/services/delegated-invoker-utils.d.ts.map +0 -1
- package/dist/services/delegated-invoker-utils.js.map +0 -1
- package/dist/services/delegated-proxy-config.d.ts.map +0 -1
- package/dist/services/delegated-proxy-config.js.map +0 -1
- package/dist/services/delegated-task-result-cache.d.ts.map +0 -1
- package/dist/services/delegated-task-result-cache.js.map +0 -1
- package/dist/services/delegated-task-runtime.d.ts.map +0 -1
- package/dist/services/delegated-task-runtime.js.map +0 -1
- package/dist/services/delegated-task-session-pool.d.ts.map +0 -1
- package/dist/services/delegated-task-session-pool.js.map +0 -1
- package/dist/services/delegated-tool-runtime.d.ts.map +0 -1
- package/dist/services/delegated-tool-runtime.js.map +0 -1
- package/dist/services/fts5.d.ts.map +0 -1
- package/dist/services/fts5.js.map +0 -1
- package/dist/services/git-account-registry.d.ts.map +0 -1
- package/dist/services/git-account-registry.js.map +0 -1
- package/dist/services/github.d.ts.map +0 -1
- package/dist/services/github.js.map +0 -1
- package/dist/services/gmail-classifier.d.ts.map +0 -1
- package/dist/services/gmail-classifier.js.map +0 -1
- package/dist/services/gmail.d.ts.map +0 -1
- package/dist/services/gmail.js.map +0 -1
- package/dist/services/google-auth.d.ts.map +0 -1
- package/dist/services/google-auth.js.map +0 -1
- package/dist/services/google-maps.d.ts +0 -35
- package/dist/services/google-maps.d.ts.map +0 -1
- package/dist/services/google-maps.js +0 -82
- package/dist/services/google-maps.js.map +0 -1
- package/dist/services/integrations/extract-write-item-id.d.ts.map +0 -1
- package/dist/services/integrations/extract-write-item-id.js.map +0 -1
- package/dist/services/integrations/reconcile.d.ts.map +0 -1
- package/dist/services/integrations/reconcile.js.map +0 -1
- package/dist/services/integrations/snapshot-partitions.d.ts.map +0 -1
- package/dist/services/integrations/snapshot-partitions.js.map +0 -1
- package/dist/services/journal/render.d.ts.map +0 -1
- package/dist/services/journal/render.js.map +0 -1
- package/dist/services/journal/writer.d.ts.map +0 -1
- package/dist/services/journal/writer.js.map +0 -1
- package/dist/services/mail/account-registry.d.ts.map +0 -1
- package/dist/services/mail/account-registry.js.map +0 -1
- package/dist/services/mail/gmail/auth-failure-classifier.d.ts.map +0 -1
- package/dist/services/mail/gmail/auth-failure-classifier.js.map +0 -1
- package/dist/services/mail/gmail/gmail-provider.d.ts.map +0 -1
- package/dist/services/mail/gmail/gmail-provider.js.map +0 -1
- package/dist/services/mail/gmail/legacy-row.d.ts.map +0 -1
- package/dist/services/mail/gmail/legacy-row.js.map +0 -1
- package/dist/services/mail/gmail/poll-cursor.d.ts.map +0 -1
- package/dist/services/mail/gmail/poll-cursor.js.map +0 -1
- package/dist/services/mail/html-to-plaintext.d.ts.map +0 -1
- package/dist/services/mail/html-to-plaintext.js.map +0 -1
- package/dist/services/mail/imap/app-password.d.ts.map +0 -1
- package/dist/services/mail/imap/app-password.js.map +0 -1
- package/dist/services/mail/imap/auth-failure-classifier.d.ts.map +0 -1
- package/dist/services/mail/imap/auth-failure-classifier.js.map +0 -1
- package/dist/services/mail/imap/capabilities.d.ts.map +0 -1
- package/dist/services/mail/imap/capabilities.js.map +0 -1
- package/dist/services/mail/imap/client.d.ts.map +0 -1
- package/dist/services/mail/imap/client.js.map +0 -1
- package/dist/services/mail/imap/cursor.d.ts.map +0 -1
- package/dist/services/mail/imap/cursor.js.map +0 -1
- package/dist/services/mail/imap/folder-resolver.d.ts.map +0 -1
- package/dist/services/mail/imap/folder-resolver.js.map +0 -1
- package/dist/services/mail/imap/icloud-provider.d.ts.map +0 -1
- package/dist/services/mail/imap/icloud-provider.js.map +0 -1
- package/dist/services/mail/imap/imap-provider-base.d.ts.map +0 -1
- package/dist/services/mail/imap/imap-provider-base.js.map +0 -1
- package/dist/services/mail/imap/query-translator.d.ts.map +0 -1
- package/dist/services/mail/imap/query-translator.js.map +0 -1
- package/dist/services/mail/imap/reconcile-planner.d.ts.map +0 -1
- package/dist/services/mail/imap/reconcile-planner.js.map +0 -1
- package/dist/services/mail/imap/reply-mime.d.ts.map +0 -1
- package/dist/services/mail/imap/reply-mime.js.map +0 -1
- package/dist/services/mail/imap/yahoo-provider.d.ts.map +0 -1
- package/dist/services/mail/imap/yahoo-provider.js.map +0 -1
- package/dist/services/mail/mail-search.d.ts.map +0 -1
- package/dist/services/mail/mail-search.js.map +0 -1
- package/dist/services/mail/outlook/auth-failure-classifier.d.ts.map +0 -1
- package/dist/services/mail/outlook/auth-failure-classifier.js.map +0 -1
- package/dist/services/mail/outlook/client-config.d.ts.map +0 -1
- package/dist/services/mail/outlook/client-config.js.map +0 -1
- package/dist/services/mail/outlook/delta-cursor.d.ts.map +0 -1
- package/dist/services/mail/outlook/delta-cursor.js.map +0 -1
- package/dist/services/mail/outlook/graph-client.d.ts.map +0 -1
- package/dist/services/mail/outlook/graph-client.js.map +0 -1
- package/dist/services/mail/outlook/msal-app-factory.d.ts.map +0 -1
- package/dist/services/mail/outlook/msal-app-factory.js.map +0 -1
- package/dist/services/mail/outlook/msal-cache-plugin.d.ts.map +0 -1
- package/dist/services/mail/outlook/msal-cache-plugin.js.map +0 -1
- package/dist/services/mail/outlook/oauth-device-code.d.ts.map +0 -1
- package/dist/services/mail/outlook/oauth-device-code.js.map +0 -1
- package/dist/services/mail/outlook/oauth-loopback.d.ts.map +0 -1
- package/dist/services/mail/outlook/oauth-loopback.js.map +0 -1
- package/dist/services/mail/outlook/outlook-provider.d.ts.map +0 -1
- package/dist/services/mail/outlook/outlook-provider.js.map +0 -1
- package/dist/services/mail/outlook/query-translator.d.ts.map +0 -1
- package/dist/services/mail/outlook/query-translator.js.map +0 -1
- package/dist/services/mail/provider.d.ts.map +0 -1
- package/dist/services/mail/provider.js.map +0 -1
- package/dist/services/mail/query-utils.d.ts.map +0 -1
- package/dist/services/mail/query-utils.js.map +0 -1
- package/dist/services/mail-classifier.d.ts.map +0 -1
- package/dist/services/mail-classifier.js.map +0 -1
- package/dist/services/mail-ingestion.d.ts.map +0 -1
- package/dist/services/mail-ingestion.js.map +0 -1
- package/dist/services/mcp/auto-probe.d.ts.map +0 -1
- package/dist/services/mcp/auto-probe.js.map +0 -1
- package/dist/services/mcp/generators/claude.d.ts.map +0 -1
- package/dist/services/mcp/generators/claude.js.map +0 -1
- package/dist/services/mcp/generators/codex.d.ts.map +0 -1
- package/dist/services/mcp/generators/codex.js.map +0 -1
- package/dist/services/mcp/generators/gemini.d.ts.map +0 -1
- package/dist/services/mcp/generators/gemini.js.map +0 -1
- package/dist/services/mcp/generators/index.d.ts.map +0 -1
- package/dist/services/mcp/generators/index.js.map +0 -1
- package/dist/services/mcp/generators/types.d.ts.map +0 -1
- package/dist/services/mcp/generators/types.js.map +0 -1
- package/dist/services/mcp/probe.d.ts.map +0 -1
- package/dist/services/mcp/probe.js.map +0 -1
- package/dist/services/mcp/registry.d.ts.map +0 -1
- package/dist/services/mcp/registry.js.map +0 -1
- package/dist/services/mcp/risk.d.ts.map +0 -1
- package/dist/services/mcp/risk.js.map +0 -1
- package/dist/services/mcp/session-materializer.d.ts.map +0 -1
- package/dist/services/mcp/session-materializer.js.map +0 -1
- package/dist/services/mcp/tool-audit.d.ts.map +0 -1
- package/dist/services/mcp/tool-audit.js.map +0 -1
- package/dist/services/mcp/types.d.ts.map +0 -1
- package/dist/services/mcp/types.js.map +0 -1
- package/dist/services/notion.d.ts.map +0 -1
- package/dist/services/notion.js.map +0 -1
- package/dist/services/obsidian.d.ts.map +0 -1
- package/dist/services/obsidian.js.map +0 -1
- package/dist/services/service-registry.d.ts.map +0 -1
- package/dist/services/service-registry.js.map +0 -1
- package/dist/services/voice/transcriber-impl.d.ts.map +0 -1
- package/dist/services/voice/transcriber-impl.js.map +0 -1
- package/dist/services/voice/transcriber.d.ts.map +0 -1
- package/dist/services/voice/transcriber.js.map +0 -1
- package/dist/settings/runtime-settings.d.ts.map +0 -1
- package/dist/settings/runtime-settings.js.map +0 -1
- package/dist/settings/settings-store.d.ts.map +0 -1
- package/dist/settings/settings-store.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -1,96 +1,40 @@
|
|
|
1
|
-
import { serve } from "@hono/node-server";
|
|
2
1
|
import { join, resolve } from "node:path";
|
|
3
|
-
import { rmSync } from "node:fs";
|
|
4
2
|
import { randomBytes } from "node:crypto";
|
|
5
|
-
import { loadConfig, getContextDir,
|
|
6
|
-
import { getDegradedMode,
|
|
7
|
-
import { createDefaultBangCommandRegistry } from "./core/bang-commands/index.js";
|
|
3
|
+
import { loadConfig, getContextDir, runVaultHealthProbe, validateExternalObsidianVaultPath, } from "./config.js";
|
|
4
|
+
import { getDegradedMode, getVaultRestructurePendingConsent, isSetupCompleted, isDegraded as readDegradedMode, } from "./db/runtime-state.js";
|
|
8
5
|
import { initDirectories } from "./init.js";
|
|
9
|
-
import { createDatabase } from "./db/client.js";
|
|
10
|
-
import { applySchema } from "./db/schema.js";
|
|
11
|
-
import { readIntegrations } from "./db/integrations-store.js";
|
|
12
|
-
import { getRepositoryByGithub, getRepositoryByLocalPath, listRepositories, selectGithubRepoSlugs, selectGitWatchedRepos, } from "./db/repositories-store.js";
|
|
13
|
-
import { dispatchMatchingTriggers } from "./core/trigger-dispatch.js";
|
|
14
6
|
import { EventBus } from "./core/event-bus.js";
|
|
15
7
|
import { AgentScheduler } from "./core/scheduler.js";
|
|
16
8
|
import { CustomRoutineScheduler } from "./core/custom-routine-scheduler.js";
|
|
17
9
|
import { HealthMonitor } from "./core/health-monitor.js";
|
|
18
10
|
import { Heartbeat } from "./core/heartbeat.js";
|
|
19
11
|
import { MessageHub } from "./adapters/message-hub.js";
|
|
20
|
-
import {
|
|
21
|
-
import { ObsidianWatcher } from "./observers/obsidian-watcher.js";
|
|
22
|
-
import { PrimaryVaultWatcher } from "./observers/primary-vault-watcher.js";
|
|
23
|
-
import { ContextIndexReconcilerObserver } from "./observers/context-index-reconciler-observer.js";
|
|
24
|
-
import { EntityMirrorObserver } from "./observers/entity-mirror-observer.js";
|
|
25
|
-
import { GitWatcher } from "./observers/git-watcher.js";
|
|
26
|
-
import { GitHubPoller } from "./observers/github-poller.js";
|
|
27
|
-
import { GitAccountRegistry } from "./services/git-account-registry.js";
|
|
28
|
-
import { GitDelegatedCronObserver, hasActiveDelegatedGitLifecycleIntegration, } from "./observers/git-delegated-cron.js";
|
|
29
|
-
import { RepositoryManagementCron } from "./observers/repository-management-cron.js";
|
|
30
|
-
import { ObservationSummarizerWorker, AnthropicSummarizerClient, UnsupportedSummarizerClient, } from "./observers/observation-summarizer/index.js";
|
|
31
|
-
import { CalendarPoller } from "./observers/calendar-poller.js";
|
|
32
|
-
import { ImminentEventScheduler } from "./observers/imminent-event-scheduler.js";
|
|
33
|
-
import { DelegatedSyncWorker, hasActiveDelegatedSyncIntegration, } from "./observers/delegated-sync-worker.js";
|
|
34
|
-
import { applyIntegrationModeChange, shouldStartObserversFor, } from "./core/integration-lifecycle.js";
|
|
35
|
-
import { NotionPoller } from "./observers/notion-poller.js";
|
|
12
|
+
import { resolvePrimaryPlatform } from "./adapters/primary-platform-resolver.js";
|
|
36
13
|
import { DiscordAdapter } from "./adapters/discord.js";
|
|
37
14
|
import { SlackAdapter } from "./adapters/slack-adapter.js";
|
|
38
15
|
import { TelegramAdapter } from "./adapters/telegram-adapter.js";
|
|
39
16
|
import { DashboardAdapter } from "./adapters/dashboard-adapter.js";
|
|
40
17
|
import { ObsidianService } from "./services/obsidian.js";
|
|
41
18
|
import { createServiceRegistry } from "./services/service-registry.js";
|
|
42
|
-
import { SignalDetector } from "./core/signal-detector.js";
|
|
43
|
-
import { EventDispatcher } from "./core/dispatcher.js";
|
|
44
|
-
import { ClaudeCodeCore } from "./core/backends/claude-code-core.js";
|
|
45
|
-
import { BackendRouter } from "./core/backends/backend-router.js";
|
|
46
|
-
import { ensureBackendMaterialized, syncAllUserSkills, buildConfiguredServices, refreshDmSessionWorkdirs, validateDelegatedStartup, } from "./core/workdir.js";
|
|
47
|
-
import { setWikiWorkspaceTokenResolver } from "./core/skills-compiler.js";
|
|
48
|
-
import { CodexCore } from "./core/backends/codex-core.js";
|
|
49
|
-
import { GeminiCliCore } from "./core/backends/gemini-cli-core.js";
|
|
50
|
-
import { PriceFetcher } from "./core/backends/price-fetcher.js";
|
|
51
|
-
import { AuthTelemetry } from "./core/backends/auth-telemetry.js";
|
|
52
|
-
import { AuthHealthMonitor, AUTH_PROBE_NOTIFICATION_CATEGORY } from "./core/backends/auth-health-monitor.js";
|
|
53
|
-
import { AuthRecovery } from "./core/backends/auth-recovery.js";
|
|
54
|
-
import { ContextBuilder } from "./core/context-builder.js";
|
|
55
|
-
import { getTaskFlow, initTaskFlows } from "./core/prompts.js";
|
|
56
|
-
import { listWikiWorkspaces, readDefaultWikiWorkspace, readWikiWorkspaceByName, } from "./core/wiki/workspaces.js";
|
|
57
|
-
import { backfillWikiFulltext } from "./core/wiki/wiki-fts.js";
|
|
58
19
|
import { ensureSkeletonFiles, resolveTemplatesRoot } from "./core/skeleton.js";
|
|
59
|
-
import { normalizeGitWatchedRepos, queueGitProjectUpdate, queueMissingGitProjectInits, seedGitProjectDocTemplates, } from "./core/git-project-docs.js";
|
|
60
20
|
import { reconcileTemplateAssets, recordInstructionAssetStatus, recordSkillAssetStatus, } from "./core/release-assets.js";
|
|
61
|
-
import {
|
|
62
|
-
import { MessageRecorder } from "./core/message-recorder.js";
|
|
63
|
-
import { ScopedReadSensitiveTokenManager } from "./core/read-sensitive-token-manager.js";
|
|
64
|
-
import { NotificationManager } from "./adapters/notification-manager.js";
|
|
65
|
-
import { recordProactiveForwardDeliveries } from "./core/channel-timeline.js";
|
|
66
|
-
import { continueDashboardSession as continueDashboardSessionFromHistory, endDashboardSession as endDashboardSessionFromChannel, markContextChanged, } from "./core/dashboard-session-controls.js";
|
|
67
|
-
import { AuditLogger } from "./safety/audit.js";
|
|
21
|
+
import { resolveUserSkillsRoot } from "./core/user-skills-root.js";
|
|
68
22
|
import { bootstrapManagementMd, startManagementMdWatcher, } from "./core/management-md.js";
|
|
69
23
|
import { bootstrapManagementRegistry, startManagementRegistryWatcher, } from "./core/management-registry.js";
|
|
70
|
-
import { bootstrapManagedTaskSeq } from "./db/managed-tasks-store.js";
|
|
71
24
|
import { startDocsIndexer, } from "./core/docs/indexer.js";
|
|
72
|
-
import { makeDbLookup as makeDocsCitationLookup } from "./core/docs/citation-validator.js";
|
|
73
|
-
import { createDocsRoutes } from "./api/routes/docs.js";
|
|
74
|
-
import { DocsQAAdapter } from "./adapters/docs-qa-adapter.js";
|
|
75
|
-
import { CompositeDashboardStream } from "./adapters/composite-dashboard-stream.js";
|
|
76
|
-
import { createApp } from "./api/server.js";
|
|
77
|
-
import { EventBroadcaster } from "./api/routes/sse.js";
|
|
78
25
|
import { APP_NAME, EventPriority, getBackendIds, } from "@aitne/shared";
|
|
79
|
-
import { getOwnerChannel } from "./messaging/owner-channels.js";
|
|
26
|
+
import { getOwnerChannel, selectFirstPairedPlatform, } from "./messaging/owner-channels.js";
|
|
80
27
|
import { SUPPORTED_MESSAGING_PLATFORMS, } from "./messaging/constants.js";
|
|
81
|
-
import { sendSetupWelcomeDm } from "./messaging/setup-welcome-dm.js";
|
|
82
28
|
import { AgentWriteTracker } from "./safety/agent-write-tracker.js";
|
|
83
|
-
import {
|
|
84
|
-
import { applyPromptContextStaleness, } from "./core/context-staleness.js";
|
|
29
|
+
import { InMemoryTodayWriteLockManager, getTodayWriteLockTimeoutMs, } from "./core/today-write-lock.js";
|
|
85
30
|
import { InMemoryRoadmapWriteLockManager, getRoadmapWriteLockTimeoutMs, } from "./core/roadmap-write-lock.js";
|
|
31
|
+
import { runRoadmapMechanicalMaintenance } from "./core/roadmap-maintenance.js";
|
|
32
|
+
import { fanoutResearchClusterUpdates } from "./core/browser-history/research-cluster-fanout.js";
|
|
33
|
+
import { safeRunPreMorningDigestJob } from "./core/browser-history/pre-morning-digest-job.js";
|
|
34
|
+
import { shouldStartObserversFor } from "./core/integration-lifecycle.js";
|
|
86
35
|
import { sweepExpiredMigrationBackups } from "./api/routes/setup-migrate.js";
|
|
87
|
-
import { createSettingsStore } from "./settings/settings-store.js";
|
|
88
36
|
import { PlatformSecretStore } from "./secrets/platform-secret-store.js";
|
|
89
37
|
import { FileEncryptedBlobStore } from "./secrets/encrypted-blob-store.js";
|
|
90
|
-
import { AttachmentStore } from "./services/attachments/store.js";
|
|
91
|
-
import { VoiceTranscriber } from "./services/voice/transcriber.js";
|
|
92
|
-
import { DelegatedBackendInvoker, runDelegatedTaskOrphanJanitor, runProxyTempdirJanitor, } from "./services/delegated-backend-invoker.js";
|
|
93
|
-
import { runSessionPoolTempdirJanitor } from "./services/delegated-task-session-pool.js";
|
|
94
38
|
import { MailAccountRegistry } from "./services/mail/account-registry.js";
|
|
95
39
|
import { loadOutlookClientConfig, OutlookClientConfigMissingError, } from "./services/mail/outlook/client-config.js";
|
|
96
40
|
import { createRuntimeMsalApp } from "./services/mail/outlook/msal-app-factory.js";
|
|
@@ -99,15 +43,17 @@ import { parseImapAccountSecret } from "./services/mail/imap/app-password.js";
|
|
|
99
43
|
import { ICloudImapProvider } from "./services/mail/imap/icloud-provider.js";
|
|
100
44
|
import { YahooImapProvider } from "./services/mail/imap/yahoo-provider.js";
|
|
101
45
|
import { GmailProvider } from "./services/mail/gmail/gmail-provider.js";
|
|
102
|
-
import { MailPoller } from "./observers/mail-poller.js";
|
|
103
|
-
import { MailReconciliationJob } from "./observers/mail-reconciliation.js";
|
|
104
46
|
import { SecretBroker } from "./secrets/secret-broker.js";
|
|
105
47
|
import { captureOriginalShellEnv, syncBackendApiKeyToEnv, } from "./secrets/backend-api-key-env.js";
|
|
106
48
|
import { createLogger, toSafeErrorMessage } from "./logging.js";
|
|
107
49
|
import { runCatchup, runPostMessagingCatchup, } from "./bootstrap/catchup.js";
|
|
108
|
-
import {
|
|
109
|
-
import { createAdapterReloaders, whatsappQrResponseFromAdapter, } from "./bootstrap/adapters.js";
|
|
50
|
+
import { createAdapterReloaders, } from "./bootstrap/adapters.js";
|
|
110
51
|
import { createInitialSecretState, createServiceReloaders, } from "./bootstrap/services.js";
|
|
52
|
+
import { initDatabase } from "./bootstrap/db.js";
|
|
53
|
+
import { bootstrapAgents } from "./core/agents/loader-boot.js";
|
|
54
|
+
import { createObservers } from "./bootstrap/observers.js";
|
|
55
|
+
import { startApiServer } from "./bootstrap/api.js";
|
|
56
|
+
import { createEventPipeline } from "./bootstrap/event-pipeline.js";
|
|
111
57
|
const logger = createLogger("daemon", {
|
|
112
58
|
transport: {
|
|
113
59
|
target: "pino-pretty",
|
|
@@ -142,122 +88,48 @@ async function startup() {
|
|
|
142
88
|
// ── 2. Directory structure ──
|
|
143
89
|
initDirectories(config);
|
|
144
90
|
// ── 3. Database ──
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
return null;
|
|
150
|
-
// Match `context-builder.ts`'s per-event lookup: prefer the named
|
|
151
|
-
// workspace, fall back to the default. Without this, multi-workspace
|
|
152
|
-
// installs would render the `<wiki_workspace>` XML against the target
|
|
153
|
-
// workspace while skill prose (`{{vault_path}}` etc.) referenced the
|
|
154
|
-
// default — the agent would then operate on the wrong vault.
|
|
155
|
-
const workspace = (workspaceName ? readWikiWorkspaceByName(db, workspaceName) : null)
|
|
156
|
-
?? readDefaultWikiWorkspace(db);
|
|
157
|
-
if (!workspace)
|
|
158
|
-
return null;
|
|
159
|
-
return {
|
|
160
|
-
vault_path: workspace.root_path,
|
|
161
|
-
language: workspace.language,
|
|
162
|
-
workspace_name: workspace.name,
|
|
163
|
-
schema_version: String(workspace.schema_version),
|
|
164
|
-
};
|
|
91
|
+
// Schema apply + boot-time backfills + settings merge + delegated-task-mode
|
|
92
|
+
// default-correction. See `bootstrap/db.ts` for the per-step rationale.
|
|
93
|
+
const { db, settingsStore, persistedSettings, attachmentStore } = initDatabase({
|
|
94
|
+
config,
|
|
165
95
|
});
|
|
166
|
-
// WIKI_BUILDER_DESIGN.md §P4.A — boot-time FTS backfill. The
|
|
167
|
-
// `fts_wiki` virtual table is content-less and lives outside the
|
|
168
|
-
// mail-style trigger chain (the source is the filesystem, not a SQL
|
|
169
|
-
// table), so a fresh DB or a workspace seeded before P4 landed needs
|
|
170
|
-
// a one-shot rebuild. Per-workspace gate inside `backfillWikiFulltext`
|
|
171
|
-
// keeps this near-free in steady state.
|
|
172
|
-
backfillWikiFulltext(db, listWikiWorkspaces(db));
|
|
173
|
-
// §12 ("managed_tasks.id collision after restore from backup") — ensure
|
|
174
|
-
// `managed_task_seq.next_id` is greater than the max existing mt id so a
|
|
175
|
-
// backup-restored DB cannot collide with the seq counter on the next
|
|
176
|
-
// POST. No-op when the table is empty (steady-state cost: one SELECT).
|
|
177
|
-
bootstrapManagedTaskSeq(db);
|
|
178
|
-
// Close any dashboard_chat sessions that were left `active` from before
|
|
179
|
-
// the daemon restart. They cannot be resumed cleanly: the SSE channel is
|
|
180
|
-
// gone, and `Dispatcher.currentSetupMode` is in-process state lost on
|
|
181
|
-
// restart, so a setup conversation half-way through would otherwise be
|
|
182
|
-
// re-adopted by `findActiveDashboardSessionId` and processed as regular
|
|
183
|
-
// chat against stale prompts. The setup wizard's resume path on the
|
|
184
|
-
// client-side checks active status; closing here flips the check so the
|
|
185
|
-
// wizard correctly falls through to a fresh /setup/start.
|
|
186
|
-
try {
|
|
187
|
-
const result = db
|
|
188
|
-
.prepare(`UPDATE conversation_sessions
|
|
189
|
-
SET status = 'closed'
|
|
190
|
-
WHERE scope = 'dashboard_chat' AND status = 'active'`)
|
|
191
|
-
.run();
|
|
192
|
-
if (result.changes > 0) {
|
|
193
|
-
logger.info({ closed: result.changes }, "Closed orphaned dashboard_chat sessions from previous run");
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
catch (err) {
|
|
197
|
-
logger.warn({ err }, "Failed to close orphaned dashboard_chat sessions");
|
|
198
|
-
}
|
|
199
|
-
// Chat attachment store — constructed early so adapter reload functions
|
|
200
|
-
// can reference it in closure without TypeScript "used before declaration" issues.
|
|
201
|
-
const attachmentStore = new AttachmentStore(db, config.dataDir);
|
|
202
|
-
attachmentStore.reapOrphans(24);
|
|
203
|
-
void new PriceFetcher(config.dataDir, db).refresh();
|
|
204
|
-
const settingsStore = createSettingsStore(db);
|
|
205
|
-
const persistedSettings = settingsStore.getAll();
|
|
206
|
-
mergeRuntimeSettingsFromDb(config, persistedSettings);
|
|
207
|
-
try {
|
|
208
|
-
seedGitProjectDocTemplates(config.dataDir, config.workspaceDir);
|
|
209
|
-
}
|
|
210
|
-
catch (err) {
|
|
211
|
-
logger.warn({ err }, "Failed to seed git project document templates");
|
|
212
|
-
}
|
|
213
|
-
// ── Default-correction for `delegatedTaskModeEnabled` ──
|
|
214
|
-
// The legacy `/integrations/:key/invoke` RPC was retired 2026-05-01
|
|
215
|
-
// and every delegated skill / task flow now goes through `/exec`,
|
|
216
|
-
// which is gated by this flag. Its Phase-1 canary default of `false`
|
|
217
|
-
// is now a footgun: any user with delegated integrations from before
|
|
218
|
-
// the runtime PATCH-time auto-enable landed will hit 503 on every
|
|
219
|
-
// /exec call.
|
|
220
|
-
//
|
|
221
|
-
// Heal once at boot, only when the operator never explicitly chose:
|
|
222
|
-
// - `delegatedTaskModeEnabled` row is *absent* from settings (the
|
|
223
|
-
// `in` check distinguishes "never set" from "explicitly false"),
|
|
224
|
-
// - and at least one integration is currently in `delegated` mode.
|
|
225
|
-
//
|
|
226
|
-
// An explicit `false` row in `settings` is treated as operator intent
|
|
227
|
-
// and respected — emergency-disable still works.
|
|
228
|
-
if (!("delegatedTaskModeEnabled" in persistedSettings)
|
|
229
|
-
&& !config.delegatedTaskModeEnabled) {
|
|
230
|
-
const integrationsAtBoot = readIntegrations(db);
|
|
231
|
-
const delegatedKeys = Object.entries(integrationsAtBoot)
|
|
232
|
-
.filter(([, state]) => state.mode === "delegated")
|
|
233
|
-
.map(([key]) => key);
|
|
234
|
-
if (delegatedKeys.length > 0) {
|
|
235
|
-
try {
|
|
236
|
-
settingsStore.set("delegatedTaskModeEnabled", true);
|
|
237
|
-
config.delegatedTaskModeEnabled = true;
|
|
238
|
-
logger.info({ delegatedKeys }, "auto-enabled delegatedTaskModeEnabled at startup — delegated integrations exist and the flag was never explicitly set");
|
|
239
|
-
}
|
|
240
|
-
catch (err) {
|
|
241
|
-
logger.error({ err, delegatedKeys }, "startup auto-enable of delegatedTaskModeEnabled failed; /exec calls may continue to 503 until PATCH /api/config sets the flag");
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
96
|
// ── Integration Delegation Framework (Phase 1) ──
|
|
246
|
-
// Reconcile `<
|
|
97
|
+
// Reconcile `<contextDir>/policies/integrations.md` with the DB integrations map.
|
|
247
98
|
// Creates the file on first run, parses hand-edits if present, and
|
|
248
99
|
// re-renders unconditionally so daemon-owned columns are canonical.
|
|
249
100
|
// The watcher is started later (after the observer manager) so fs-watch
|
|
250
101
|
// errors don't block boot.
|
|
251
102
|
let managementMdWatcher = null;
|
|
252
103
|
let managementRegistryWatcher = null;
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
104
|
+
// CONTEXT_VAULT_REDESIGN V16 — when the consent gate deferred the vault
|
|
105
|
+
// restructure (Obsidian-mode user has not acknowledged the sidebar move
|
|
106
|
+
// yet), DO NOT write `policies/integrations.md` into the legacy vault.
|
|
107
|
+
// Doing so would create a stray `policies/` directory next to the
|
|
108
|
+
// legacy `rules/` / `user/` / etc., producing a mixed layout the user
|
|
109
|
+
// sees in Obsidian before they ever consented. The write resumes on
|
|
110
|
+
// the next boot after ack, where the migration runs first and the
|
|
111
|
+
// vault has a coherent post-restructure shape.
|
|
112
|
+
const vaultConsentPending = getVaultRestructurePendingConsent(db) !== null;
|
|
113
|
+
if (vaultConsentPending) {
|
|
114
|
+
logger.warn({
|
|
115
|
+
contextDir: getContextDir(config, db),
|
|
116
|
+
ackEnvVar: "PA_VAULT_RESTRUCTURE_ACK",
|
|
117
|
+
}, "Skipping integrations.md bootstrap: Obsidian-vault consent pending. Set PA_VAULT_RESTRUCTURE_ACK=1 (headless) or POST /api/setup/vault-restructure-ack (dashboard), then restart.");
|
|
258
118
|
}
|
|
259
|
-
|
|
260
|
-
|
|
119
|
+
else {
|
|
120
|
+
try {
|
|
121
|
+
// V18 — pass contextDir explicitly so `policies/integrations.md` lands
|
|
122
|
+
// at the right vault root in both plain and Obsidian-vault modes. The
|
|
123
|
+
// `initDirectories` step earlier created `<contextDir>/policies/`, which
|
|
124
|
+
// this bootstrap depends on existing.
|
|
125
|
+
await bootstrapManagementMd(config.dataDir, db, config.workspaceDir, {
|
|
126
|
+
externalObsidianVaultPath: config.externalObsidianVaultPath,
|
|
127
|
+
externalObsidianWatch: config.externalObsidianWatch,
|
|
128
|
+
}, getContextDir(config, db));
|
|
129
|
+
}
|
|
130
|
+
catch (err) {
|
|
131
|
+
logger.error({ err, dataDir: config.dataDir }, "integrations.md bootstrap failed; continuing with DB state");
|
|
132
|
+
}
|
|
261
133
|
}
|
|
262
134
|
// ── Docs corpus indexer (DOCS_QA_DESIGN.md P1) ──
|
|
263
135
|
// Seeds `docs/user/` from `agent-assets/docs/` on first launch, then
|
|
@@ -277,7 +149,7 @@ async function startup() {
|
|
|
277
149
|
}
|
|
278
150
|
try {
|
|
279
151
|
recordInstructionAssetStatus(db, config.workspaceDir);
|
|
280
|
-
const skillStatus = recordSkillAssetStatus(db, config
|
|
152
|
+
const skillStatus = recordSkillAssetStatus(db, resolveUserSkillsRoot(config), config.workspaceDir);
|
|
281
153
|
if (skillStatus.builtinShadowedUserSkills.length > 0) {
|
|
282
154
|
logger.warn({ slugs: skillStatus.builtinShadowedUserSkills }, "User skills are shadowed by newly-shipped built-in skills");
|
|
283
155
|
}
|
|
@@ -311,16 +183,16 @@ async function startup() {
|
|
|
311
183
|
ensureSkeletonFiles(contextDir, config.workspaceDir);
|
|
312
184
|
// ── Management Registry boot reconcile (design 21 §7.2 / P2) ──
|
|
313
185
|
// Mirrors `bootstrapManagementMd` (which owns integrations.md). Reads
|
|
314
|
-
// `<contextDir>/
|
|
315
|
-
// `settings.sot_bindings`; renders a fresh
|
|
316
|
-
//
|
|
317
|
-
//
|
|
318
|
-
//
|
|
186
|
+
// `<contextDir>/policies/management.md` and reconciles its A-section with
|
|
187
|
+
// `settings.sot_bindings`; renders a fresh file when the on-disk
|
|
188
|
+
// schema_version does not match the current daemon's. Run after
|
|
189
|
+
// `ensureSkeletonFiles` so the seeded template is the parse target
|
|
190
|
+
// on first install.
|
|
319
191
|
try {
|
|
320
192
|
await bootstrapManagementRegistry(contextDir, db);
|
|
321
193
|
}
|
|
322
194
|
catch (err) {
|
|
323
|
-
logger.error({ err, contextDir }, "
|
|
195
|
+
logger.error({ err, contextDir }, "policies/management.md bootstrap failed; continuing with DB state");
|
|
324
196
|
}
|
|
325
197
|
// Release asset reconcile (future-proofing for format changes).
|
|
326
198
|
// Missing templates are added, unedited versioned templates are
|
|
@@ -414,17 +286,58 @@ async function startup() {
|
|
|
414
286
|
});
|
|
415
287
|
if (Object.keys(result.errors).length > 0) {
|
|
416
288
|
logger.error({ platform, ownerId, errors: result.errors }, "Failed to persist detected owner ID to .env");
|
|
417
|
-
|
|
289
|
+
// Throw so the adapter's captureOwner rolls back mutableOwnerId.
|
|
290
|
+
// Without this, the adapter would silently accept owner DMs in
|
|
291
|
+
// memory while .env shows no pairing — and the next daemon restart
|
|
292
|
+
// would lose the binding. The user's matcher stays armed
|
|
293
|
+
// (cancelPairing was not called) so they can retry by resending
|
|
294
|
+
// the phrase once the underlying env-write issue is resolved.
|
|
295
|
+
const errorKeys = Object.keys(result.errors).join(", ");
|
|
296
|
+
throw new Error(`Failed to persist ${platform} owner ID to .env: ${errorKeys}`);
|
|
418
297
|
}
|
|
419
298
|
logger.info({ platform, ownerId }, "auto-paired owner from discovery");
|
|
420
|
-
// Greet the user so they know pairing landed.
|
|
421
|
-
//
|
|
422
|
-
//
|
|
299
|
+
// Greet the user so they know pairing landed. The consolidated
|
|
300
|
+
// welcome path (via sendSetupWelcomeDm / WELCOME_DM_TEXT) is preferred
|
|
301
|
+
// over emitting an inline "Pairing successful…" ack: pairing during
|
|
302
|
+
// setup would otherwise fire two greetings in quick succession.
|
|
303
|
+
//
|
|
304
|
+
// Three-way UX contract:
|
|
305
|
+
//
|
|
306
|
+
// 1. First-time pairing (no latch yet) — `sendSetupWelcomeDm` fires
|
|
307
|
+
// the full WELCOME_DM_TEXT (includes ack + bang-command menu) and
|
|
308
|
+
// sets the latch. No inline ack needed.
|
|
423
309
|
//
|
|
424
|
-
//
|
|
425
|
-
//
|
|
310
|
+
// 2. Re-pairing onto a DIFFERENT platform (latch set on a prior
|
|
311
|
+
// platform) — the welcome path is latched globally and returns
|
|
312
|
+
// null. Without a fallback the operator would hear nothing back
|
|
313
|
+
// from the new platform, indistinguishable from a failed
|
|
314
|
+
// pairing. We send a short per-platform "Pairing successful" ack
|
|
315
|
+
// ONLY in this branch so the newly-paired platform confirms
|
|
316
|
+
// pairing landed without re-firing the full menu.
|
|
317
|
+
//
|
|
318
|
+
// 3. Re-pairing the SAME platform — same as case 2 (welcome latched,
|
|
319
|
+
// short ack fires). The ack is harmless even if the operator
|
|
320
|
+
// remembers the menu from before.
|
|
321
|
+
//
|
|
322
|
+
// Best-effort throughout: env-write already succeeded so the pairing
|
|
323
|
+
// is durable; a transient send failure must NOT roll back the
|
|
324
|
+
// persisted owner ID.
|
|
426
325
|
try {
|
|
427
|
-
|
|
326
|
+
const { sendSetupWelcomeDm } = await import("./messaging/setup-welcome-dm.js");
|
|
327
|
+
const welcomeDeliveries = await sendSetupWelcomeDm({ db, messageHub });
|
|
328
|
+
if (welcomeDeliveries === null) {
|
|
329
|
+
// Latched or no eligible at the time of first run — fall back to
|
|
330
|
+
// the targeted ack so the newly-paired platform doesn't end up
|
|
331
|
+
// silent. Scoped to JUST the platform that paired (not fan-out)
|
|
332
|
+
// because the welcome ALREADY covered the other configured
|
|
333
|
+
// platforms on the original pairing event.
|
|
334
|
+
try {
|
|
335
|
+
await messageHub.sendToPlatform(platform, "user", `Pairing successful — this channel is now linked as your owner DM.`);
|
|
336
|
+
}
|
|
337
|
+
catch (err) {
|
|
338
|
+
logger.warn({ err, platform }, "Failed to deliver inline pairing ack (welcome was latched)");
|
|
339
|
+
}
|
|
340
|
+
}
|
|
428
341
|
}
|
|
429
342
|
catch (err) {
|
|
430
343
|
logger.warn({ err, platform }, "Failed to deliver welcome DM after auto-pairing");
|
|
@@ -605,12 +518,15 @@ async function startup() {
|
|
|
605
518
|
// the normalized phrase) accepts only DMs containing it. Defeats
|
|
606
519
|
// the previous "first DM wins" race entirely because attackers
|
|
607
520
|
// who can't see the dashboard can't see the phrase.
|
|
608
|
-
const { generateMagicPhrase, buildPhraseMatcher } = await import("./messaging/magic-phrase.js");
|
|
521
|
+
const { generateMagicPhrase, buildPhraseMatcher, isPhraseWrappedInExtraText } = await import("./messaging/magic-phrase.js");
|
|
609
522
|
const phrase = generateMagicPhrase();
|
|
610
523
|
const expiresAt = Date.now() + ttlMs;
|
|
611
524
|
adapter.startPairing({
|
|
612
525
|
match: buildPhraseMatcher(phrase),
|
|
613
526
|
expiresAt,
|
|
527
|
+
hintReply: (text) => isPhraseWrappedInExtraText(phrase, text)
|
|
528
|
+
? "Send the pairing phrase by itself, with no other text."
|
|
529
|
+
: null,
|
|
614
530
|
});
|
|
615
531
|
return { phrase, expiresAt };
|
|
616
532
|
},
|
|
@@ -646,12 +562,15 @@ async function startup() {
|
|
|
646
562
|
if (!adapter) {
|
|
647
563
|
throw new Error("Discord adapter is not initialized. Save the token and retry.");
|
|
648
564
|
}
|
|
649
|
-
const { generateMagicPhrase, buildPhraseMatcher } = await import("./messaging/magic-phrase.js");
|
|
565
|
+
const { generateMagicPhrase, buildPhraseMatcher, isPhraseWrappedInExtraText } = await import("./messaging/magic-phrase.js");
|
|
650
566
|
const phrase = generateMagicPhrase();
|
|
651
567
|
const expiresAt = Date.now() + ttlMs;
|
|
652
568
|
adapter.startPairing({
|
|
653
569
|
match: buildPhraseMatcher(phrase),
|
|
654
570
|
expiresAt,
|
|
571
|
+
hintReply: (text) => isPhraseWrappedInExtraText(phrase, text)
|
|
572
|
+
? "Send the pairing phrase by itself, with no other text."
|
|
573
|
+
: null,
|
|
655
574
|
});
|
|
656
575
|
return { phrase, expiresAt };
|
|
657
576
|
},
|
|
@@ -739,22 +658,6 @@ async function startup() {
|
|
|
739
658
|
services,
|
|
740
659
|
secretState,
|
|
741
660
|
});
|
|
742
|
-
// Google Maps (F-08: commute optimization)
|
|
743
|
-
{
|
|
744
|
-
const { GoogleMapsService } = await import("./services/google-maps.js");
|
|
745
|
-
const mapsService = new GoogleMapsService(secretBroker);
|
|
746
|
-
try {
|
|
747
|
-
await mapsService.init();
|
|
748
|
-
if (mapsService.available) {
|
|
749
|
-
services.googleMaps = mapsService;
|
|
750
|
-
}
|
|
751
|
-
}
|
|
752
|
-
catch (err) {
|
|
753
|
-
const msg = err.message;
|
|
754
|
-
logger.error({ error: msg }, "Google Maps service init failed, continuing without it");
|
|
755
|
-
services.errors.googleMaps = msg;
|
|
756
|
-
}
|
|
757
|
-
}
|
|
758
661
|
// Obsidian
|
|
759
662
|
if (config.externalObsidianVaultName) {
|
|
760
663
|
const obsidianService = new ObsidianService(config);
|
|
@@ -842,13 +745,6 @@ async function startup() {
|
|
|
842
745
|
: null,
|
|
843
746
|
state: whatsappState,
|
|
844
747
|
},
|
|
845
|
-
googleMaps: {
|
|
846
|
-
configured: services.googleMaps !== null,
|
|
847
|
-
connected: services.googleMaps !== null,
|
|
848
|
-
error: services.errors.googleMaps
|
|
849
|
-
? toSafeErrorMessage(services.errors.googleMaps)
|
|
850
|
-
: null,
|
|
851
|
-
},
|
|
852
748
|
};
|
|
853
749
|
};
|
|
854
750
|
const getMessagingStatus = () => {
|
|
@@ -880,466 +776,34 @@ async function startup() {
|
|
|
880
776
|
}));
|
|
881
777
|
};
|
|
882
778
|
// ── 7. Observers ──
|
|
883
|
-
|
|
884
|
-
//
|
|
885
|
-
//
|
|
886
|
-
//
|
|
887
|
-
//
|
|
888
|
-
//
|
|
779
|
+
// The §7 block (5 hot-register builders + secondary observer
|
|
780
|
+
// registrations + the entity-mirror / context-index / MCP-auto-probe /
|
|
781
|
+
// observation-summarizer chain) lives in `bootstrap/observers.ts`.
|
|
782
|
+
// Mutable indirection: observers are constructed inside the factory,
|
|
783
|
+
// but the dispatcher (owner of `emitRoadmapRefresh`) is created later
|
|
784
|
+
// in §10. Pollers store the `triggerRoadmapRefresh` callback below
|
|
785
|
+
// and only invoke it from their poll loops, which run after
|
|
786
|
+
// `observerManager.startAll()` — by then the dispatcher has been
|
|
787
|
+
// wired via the assignment in §13 and the indirection resolves.
|
|
889
788
|
// ROADMAP-REDESIGN §3.4 RFC-C.
|
|
890
789
|
let emitRoadmapRefreshSink = null;
|
|
891
790
|
const triggerRoadmapRefresh = (source) => {
|
|
892
791
|
emitRoadmapRefreshSink?.(source);
|
|
893
792
|
};
|
|
894
|
-
const
|
|
895
|
-
// P5 multi-account — registry resolves `gitAccounts[<alias>]` to a
|
|
896
|
-
// `{GH_TOKEN, GIT_ASKPASS, ...}` env overlay each observer applies
|
|
897
|
-
// per-call. The `getAccounts` thunk reads `config.gitAccounts` lazily
|
|
898
|
-
// so a `PATCH /api/config` that mutates `config` in place via
|
|
899
|
-
// `applyConfigUpdates`'s `Object.assign(config, runtimeUpdates)`
|
|
900
|
-
// flows through to the next resolver call without re-instantiation
|
|
901
|
-
// — which is why `gitAccounts` is NOT in `RESTART_REQUIRED_KEY_TUPLE`.
|
|
902
|
-
// Per-repo PAT secrets live in the OS keychain at
|
|
903
|
-
// `git.account.<alias>` (see secret-names.ts ScopedSecretName).
|
|
904
|
-
const gitAccountRegistry = new GitAccountRegistry({
|
|
905
|
-
dataDir: config.dataDir,
|
|
906
|
-
secretBroker,
|
|
907
|
-
getAccounts: () => config.gitAccounts,
|
|
908
|
-
});
|
|
909
|
-
// One-time info note: github-side rows without a local clone always
|
|
910
|
-
// poll under the default `gh` profile when the row's `github_account`
|
|
911
|
-
// is null. Surface this if both `gitAccounts` and github-only rows
|
|
912
|
-
// exist so a user staring at unaccounted-for traffic from "the wrong
|
|
913
|
-
// account" sees it in `aitne logs` rather than guessing.
|
|
914
|
-
const githubOnlyRows = selectGithubRepoSlugs(db).length;
|
|
915
|
-
if (Object.keys(config.gitAccounts ?? {}).length > 0
|
|
916
|
-
&& githubOnlyRows > 0) {
|
|
917
|
-
logger.info({
|
|
918
|
-
gitAccounts: Object.keys(config.gitAccounts).length,
|
|
919
|
-
githubRepos: githubOnlyRows,
|
|
920
|
-
}, "GitHub-side repository rows fall back to the default gh profile when github_account is unset. Set the row's account alias from /api/repositories or the dashboard.");
|
|
921
|
-
}
|
|
922
|
-
const lookupRepoAlias = (repoPath, fullName) => {
|
|
923
|
-
const repos = getNormalizedGitRepos();
|
|
924
|
-
if (repoPath) {
|
|
925
|
-
const byPath = repos.find((r) => r.path === repoPath);
|
|
926
|
-
if (byPath?.accountAlias)
|
|
927
|
-
return byPath.accountAlias;
|
|
928
|
-
}
|
|
929
|
-
if (fullName) {
|
|
930
|
-
const byOrgRepo = repos.find((r) => {
|
|
931
|
-
if (!r.org)
|
|
932
|
-
return false;
|
|
933
|
-
// Repos resolved from `githubRepos` (not local paths) match by full name.
|
|
934
|
-
return fullName.toLowerCase() === `${r.org}/${r.slug}`.toLowerCase();
|
|
935
|
-
});
|
|
936
|
-
if (byOrgRepo?.accountAlias)
|
|
937
|
-
return byOrgRepo.accountAlias;
|
|
938
|
-
}
|
|
939
|
-
return undefined;
|
|
940
|
-
};
|
|
941
|
-
const queueGitProjectInitsForCurrentConfig = (source) => {
|
|
942
|
-
if (!isSetupCompleted(db) || readDegradedMode(db))
|
|
943
|
-
return;
|
|
944
|
-
const repos = getNormalizedGitRepos();
|
|
945
|
-
if (repos.length === 0)
|
|
946
|
-
return;
|
|
947
|
-
try {
|
|
948
|
-
const inserted = queueMissingGitProjectInits({
|
|
949
|
-
db,
|
|
950
|
-
contextDir: getContextDir(config, db),
|
|
951
|
-
dataDir: config.dataDir,
|
|
952
|
-
workspaceDir: config.workspaceDir,
|
|
953
|
-
repos,
|
|
954
|
-
});
|
|
955
|
-
if (inserted > 0) {
|
|
956
|
-
logger.info({ inserted, source }, "Queued missing git project documentation init tasks");
|
|
957
|
-
}
|
|
958
|
-
}
|
|
959
|
-
catch (err) {
|
|
960
|
-
logger.warn({ err, source }, "Failed to queue git project documentation init tasks");
|
|
961
|
-
}
|
|
962
|
-
};
|
|
963
|
-
const gitWatchedRepos = getNormalizedGitRepos();
|
|
964
|
-
const gitRepoPaths = gitWatchedRepos.map((repo) => repo.path);
|
|
965
|
-
let gitWatcher = null;
|
|
966
|
-
const buildGitWatcher = () => {
|
|
967
|
-
if (gitRepoPaths.length === 0)
|
|
968
|
-
return null;
|
|
969
|
-
// Per-row poll cadence (unified-repositories §5). Sourced from each
|
|
970
|
-
// row's `poll_interval_sec` column; rows with null fall through to
|
|
971
|
-
// the global `gitPollIntervalSeconds`.
|
|
972
|
-
const repoIntervals = new Map(gitWatchedRepos.map((row) => [row.path, row.pollIntervalSec ?? null]));
|
|
973
|
-
const watcher = new GitWatcher(gitRepoPaths, db, config.gitPollIntervalSeconds, {
|
|
974
|
-
eventBus,
|
|
975
|
-
pushOverdueMinutes: config.gitPushOverdueMinutes,
|
|
976
|
-
repoIntervals,
|
|
977
|
-
repoEnvResolver: async (repoPath) => {
|
|
978
|
-
const alias = lookupRepoAlias(repoPath);
|
|
979
|
-
if (!alias)
|
|
980
|
-
return undefined;
|
|
981
|
-
return (await gitAccountRegistry.buildSpawnEnv(alias)) ?? undefined;
|
|
982
|
-
},
|
|
983
|
-
onRepoBaseline: (repoPath) => {
|
|
984
|
-
const repo = getNormalizedGitRepos().find((item) => item.path === repoPath);
|
|
985
|
-
if (!repo)
|
|
986
|
-
return;
|
|
987
|
-
queueGitProjectInitsForCurrentConfig("git-baseline");
|
|
988
|
-
},
|
|
989
|
-
onLifecycleObservation: (classification) => {
|
|
990
|
-
if (!isSetupCompleted(db) || readDegradedMode(db))
|
|
991
|
-
return;
|
|
992
|
-
const repoPath = typeof classification.payload.repoPath === "string"
|
|
993
|
-
? classification.payload.repoPath
|
|
994
|
-
: classification.source.replace(/^git:/, "");
|
|
995
|
-
const repo = getNormalizedGitRepos().find((item) => item.path === repoPath);
|
|
996
|
-
if (!repo)
|
|
997
|
-
return;
|
|
998
|
-
const result = queueGitProjectUpdate({
|
|
999
|
-
db,
|
|
1000
|
-
dataDir: config.dataDir,
|
|
1001
|
-
workspaceDir: config.workspaceDir,
|
|
1002
|
-
repo,
|
|
1003
|
-
event: classification,
|
|
1004
|
-
debounceMinutes: config.gitProjectUpdateDebounceMinutes,
|
|
1005
|
-
});
|
|
1006
|
-
if (result === "queued" || result === "merged") {
|
|
1007
|
-
logger.info({
|
|
1008
|
-
repo: repo.path,
|
|
1009
|
-
eventType: classification.eventType,
|
|
1010
|
-
result,
|
|
1011
|
-
}, "Queued git project documentation update");
|
|
1012
|
-
}
|
|
1013
|
-
// Unified-repositories §4.4 — fire any per-repo triggers
|
|
1014
|
-
// configured for this lifecycle event. Triggers ride alongside
|
|
1015
|
-
// the task-flow pipeline above; they do not consume the event.
|
|
1016
|
-
const repositoryRow = getRepositoryByLocalPath(db, repoPath);
|
|
1017
|
-
if (repositoryRow) {
|
|
1018
|
-
void dispatchMatchingTriggers({ db, eventBus }, repositoryRow.id, classification.eventType, classification.payload);
|
|
1019
|
-
}
|
|
1020
|
-
},
|
|
1021
|
-
});
|
|
1022
|
-
gitWatcher = watcher;
|
|
1023
|
-
return watcher;
|
|
1024
|
-
};
|
|
1025
|
-
if (shouldStartObserversFor(db, "git")) {
|
|
1026
|
-
const watcher = buildGitWatcher();
|
|
1027
|
-
if (watcher)
|
|
1028
|
-
observerManager.register(watcher);
|
|
1029
|
-
}
|
|
1030
|
-
// GitHubPoller — daemon-side notification + workflow_run polling via the
|
|
1031
|
-
// user's `gh auth login` keychain entry. Replaces the webhook receiver
|
|
1032
|
-
// for local-first installs where exposing a public URL is impractical.
|
|
1033
|
-
// Registered only while github.mode === "direct" now that GitHub is a
|
|
1034
|
-
// first-class integration. Direct remains the default, preserving the
|
|
1035
|
-
// historical "notifications on when gh is authenticated" behaviour.
|
|
1036
|
-
const buildGithubPoller = () => {
|
|
1037
|
-
// Per-row poll cadence (unified-repositories §5). The map is keyed by
|
|
1038
|
-
// `owner/repo` to match `RepoBinding.fullName`; rows are sourced from
|
|
1039
|
-
// the unified table. Local-only rows have no `owner/repo` and fall
|
|
1040
|
-
// out of the map naturally.
|
|
1041
|
-
const repoIntervals = new Map();
|
|
1042
|
-
for (const row of listRepositories(db, { hasGithub: true })) {
|
|
1043
|
-
if (row.githubOwner && row.githubRepo) {
|
|
1044
|
-
repoIntervals.set(`${row.githubOwner}/${row.githubRepo}`, row.pollIntervalSec ?? null);
|
|
1045
|
-
}
|
|
1046
|
-
}
|
|
1047
|
-
return new GitHubPoller({
|
|
1048
|
-
db,
|
|
1049
|
-
eventBus,
|
|
1050
|
-
repoPaths: gitRepoPaths,
|
|
1051
|
-
repoFullNames: selectGithubRepoSlugs(db),
|
|
1052
|
-
pollIntervalSeconds: config.githubPollIntervalSeconds,
|
|
1053
|
-
repoIntervals,
|
|
1054
|
-
repoAccountAliasResolver: ({ localPath, fullName }) => lookupRepoAlias(localPath, fullName),
|
|
1055
|
-
accountResolver: async (binding) => {
|
|
1056
|
-
if (!binding.accountAlias)
|
|
1057
|
-
return undefined;
|
|
1058
|
-
return ((await gitAccountRegistry.buildSpawnEnv(binding.accountAlias)) ?? undefined);
|
|
1059
|
-
},
|
|
1060
|
-
// Unified-repositories §4.4 — resolve the binding's owner/repo to a
|
|
1061
|
-
// repositories.id and fire any per-repo triggers configured for
|
|
1062
|
-
// this event type. Failures are logged inside dispatch and do not
|
|
1063
|
-
// bubble out so a misconfigured trigger cannot stall the poll loop.
|
|
1064
|
-
onTriggerableEvent: async (event) => {
|
|
1065
|
-
if (!isSetupCompleted(db) || readDegradedMode(db))
|
|
1066
|
-
return;
|
|
1067
|
-
let repoRow = null;
|
|
1068
|
-
if (event.binding) {
|
|
1069
|
-
repoRow = getRepositoryByGithub(db, event.binding.owner, event.binding.repo);
|
|
1070
|
-
}
|
|
1071
|
-
if (!repoRow) {
|
|
1072
|
-
// Notifications without a `directNotificationRepos` match still
|
|
1073
|
-
// arrive here when a `repository.full_name` is in the payload.
|
|
1074
|
-
const fullName = typeof event.payload.repository === "string"
|
|
1075
|
-
? event.payload.repository
|
|
1076
|
-
: null;
|
|
1077
|
-
if (fullName) {
|
|
1078
|
-
const [owner, repo] = fullName.split("/");
|
|
1079
|
-
if (owner && repo) {
|
|
1080
|
-
repoRow = getRepositoryByGithub(db, owner, repo);
|
|
1081
|
-
}
|
|
1082
|
-
}
|
|
1083
|
-
}
|
|
1084
|
-
if (!repoRow)
|
|
1085
|
-
return;
|
|
1086
|
-
await dispatchMatchingTriggers({ db, eventBus }, repoRow.id, event.eventType, event.payload);
|
|
1087
|
-
},
|
|
1088
|
-
});
|
|
1089
|
-
};
|
|
1090
|
-
if (shouldStartObserversFor(db, "github")) {
|
|
1091
|
-
observerManager.register(buildGithubPoller());
|
|
1092
|
-
}
|
|
1093
|
-
// Each call returns a fresh observer so the integration-lifecycle helper
|
|
1094
|
-
// re-registers a new instance after a mode flip — picking up any
|
|
1095
|
-
// gitPollIntervalSeconds / gitPushOverdueMinutes / hourlyCheckEnabled
|
|
1096
|
-
// PATCH that landed while the cron was idle.
|
|
1097
|
-
const buildGitDelegatedCronObserver = () => new GitDelegatedCronObserver({
|
|
1098
|
-
db,
|
|
1099
|
-
eventBus,
|
|
1100
|
-
repoPaths: gitRepoPaths,
|
|
1101
|
-
githubRepos: selectGithubRepoSlugs(db),
|
|
1102
|
-
cadenceSeconds: config.gitPollIntervalSeconds,
|
|
1103
|
-
pushOverdueMinutes: config.gitPushOverdueMinutes,
|
|
1104
|
-
hourlyCheckEnabled: config.hourlyCheckEnabled,
|
|
1105
|
-
});
|
|
1106
|
-
if (hasActiveDelegatedGitLifecycleIntegration(db)) {
|
|
1107
|
-
observerManager.register(buildGitDelegatedCronObserver());
|
|
1108
|
-
}
|
|
1109
|
-
// Unified-repositories daily management cron — see
|
|
1110
|
-
// docs/design/appendices/unified-repositories.md §4.5. Iterates rows
|
|
1111
|
-
// whose `repository_management.enabled = 1` and writes the required
|
|
1112
|
-
// journal/overview markdown for each row that's due.
|
|
1113
|
-
observerManager.register(new RepositoryManagementCron({
|
|
793
|
+
const observers = await createObservers({
|
|
1114
794
|
db,
|
|
795
|
+
config,
|
|
1115
796
|
eventBus,
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
writeTracker,
|
|
1119
|
-
}));
|
|
1120
|
-
// Coexistence note: the legacy /webhook/github handler also calls
|
|
1121
|
-
// recordObservation + EventBus.put, so a user with both webhooks AND
|
|
1122
|
-
// the poller live will receive two events per `review_requested`. This
|
|
1123
|
-
// is a low-probability scenario (webhooks need a public URL most users
|
|
1124
|
-
// don't expose), so we log a one-time warning rather than disabling
|
|
1125
|
-
// either path automatically.
|
|
1126
|
-
if (secretState.githubWebhookConfigured && shouldStartObserversFor(db, "github")) {
|
|
1127
|
-
logger.warn("GitHub webhook secret configured AND GitHubPoller running — "
|
|
1128
|
-
+ "duplicate events possible. Remove the webhook secret or unregister "
|
|
1129
|
-
+ "the GitHub webhook on github.com to silence.");
|
|
1130
|
-
}
|
|
1131
|
-
// SETUP-FLOW-REDESIGN-PLAN §6.3 — `externalObsidianWatch` is a kill
|
|
1132
|
-
// switch for the external-vault branch of the watcher. When false the
|
|
1133
|
-
// path is preserved (the Obsidian CLI skill still sees it via
|
|
1134
|
-
// `config.externalObsidianVaultPath`) but no chokidar instance is
|
|
1135
|
-
// registered. Sized for power users with very large vaults that would
|
|
1136
|
-
// otherwise produce noisy observation churn (§13 open question).
|
|
1137
|
-
if (config.externalObsidianVaultPath && config.externalObsidianWatch) {
|
|
1138
|
-
observerManager.register(new ObsidianWatcher(config.externalObsidianVaultPath, db, config.obsidianDebounceSeconds, writeTracker, { source: "obsidian:external", name: "obsidian:external" }));
|
|
1139
|
-
}
|
|
1140
|
-
// Primary-vault watcher — registered unconditionally. Stays dormant
|
|
1141
|
-
// until `setVaultPath` points it at a real directory. The migration
|
|
1142
|
-
// endpoint's `onPrimaryVaultPathChange` callback calls setVaultPath
|
|
1143
|
-
// explicitly after every commit, so plain → obsidian transitions
|
|
1144
|
-
// and obsidian-path changes both re-target without dynamic
|
|
1145
|
-
// register/unregister plumbing.
|
|
1146
|
-
const primaryVaultWatcher = new PrimaryVaultWatcher(db, config.obsidianDebounceSeconds, writeTracker);
|
|
1147
|
-
await primaryVaultWatcher.setVaultPath(config.vaultMode === "obsidian" ? config.primaryVaultPath : null);
|
|
1148
|
-
observerManager.register(primaryVaultWatcher);
|
|
1149
|
-
// Build CalendarPoller from current services. Returns null when
|
|
1150
|
-
// `services.calendar` is unavailable so the integration-lifecycle
|
|
1151
|
-
// module can no-op (for example: integration flips to direct before
|
|
1152
|
-
// OAuth is set up). The §4.5.1 gate `google_calendar.mode === "direct"`
|
|
1153
|
-
// is checked BEFORE invoking the builder.
|
|
1154
|
-
const buildCalendarPoller = () => {
|
|
1155
|
-
if (!services.calendar)
|
|
1156
|
-
return null;
|
|
1157
|
-
return new CalendarPoller(services.calendar, db, config.calendarPollIntervalSeconds, config.googleCalendarId, writeTracker, triggerRoadmapRefresh, morningRoutineLock, config.timezone);
|
|
1158
|
-
};
|
|
1159
|
-
if (services.calendar && shouldStartObserversFor(db, "google_calendar")) {
|
|
1160
|
-
const poller = buildCalendarPoller();
|
|
1161
|
-
if (poller)
|
|
1162
|
-
observerManager.register(poller);
|
|
1163
|
-
}
|
|
1164
|
-
observerManager.register(new ImminentEventScheduler(db, eventBus, config.googleCalendarId));
|
|
1165
|
-
// Build NotionPoller from current services + config. Returns null when
|
|
1166
|
-
// `services.notion` is unavailable or no databases are configured so
|
|
1167
|
-
// the integration-lifecycle module can no-op (e.g. integration flips
|
|
1168
|
-
// to direct before the API key is set up). The §4.5.1 gate
|
|
1169
|
-
// `notion.mode === "direct"` is checked BEFORE invoking the builder.
|
|
1170
|
-
const buildNotionPoller = () => {
|
|
1171
|
-
if (!services.notion)
|
|
1172
|
-
return null;
|
|
1173
|
-
if (Object.keys(config.notionDatabaseIds).length === 0)
|
|
1174
|
-
return null;
|
|
1175
|
-
return new NotionPoller({
|
|
1176
|
-
notionService: services.notion,
|
|
1177
|
-
databaseIds: config.notionDatabaseIds,
|
|
1178
|
-
pollIntervalSeconds: config.notionPollIntervalSeconds,
|
|
1179
|
-
db,
|
|
1180
|
-
writeTracker,
|
|
1181
|
-
});
|
|
1182
|
-
};
|
|
1183
|
-
if (services.notion
|
|
1184
|
-
&& Object.keys(config.notionDatabaseIds).length > 0
|
|
1185
|
-
&& shouldStartObserversFor(db, "notion")) {
|
|
1186
|
-
const poller = buildNotionPoller();
|
|
1187
|
-
if (poller)
|
|
1188
|
-
observerManager.register(poller);
|
|
1189
|
-
}
|
|
1190
|
-
if (services.mail) {
|
|
1191
|
-
observerManager.register(new MailPoller({
|
|
1192
|
-
registry: services.mail,
|
|
1193
|
-
db,
|
|
1194
|
-
writeTracker,
|
|
1195
|
-
pollIntervalSeconds: config.mailPollIntervalSeconds,
|
|
1196
|
-
maxMessagesPerPoll: config.mailMaxMessagesPerPoll,
|
|
1197
|
-
authFailureRetryHours: config.mailAuthFailureRetryHours,
|
|
1198
|
-
providerPollIntervalsSeconds: {
|
|
1199
|
-
gmail: config.gmailPollIntervalSeconds,
|
|
1200
|
-
},
|
|
1201
|
-
notifyOwner: async (message) => {
|
|
1202
|
-
await messageHub.sendToUser(message);
|
|
1203
|
-
},
|
|
1204
|
-
triggerRoadmapRefresh,
|
|
1205
|
-
}));
|
|
1206
|
-
observerManager.register(new MailReconciliationJob({
|
|
1207
|
-
registry: services.mail,
|
|
1208
|
-
db,
|
|
1209
|
-
}));
|
|
1210
|
-
}
|
|
1211
|
-
// ── 7.04 Skill-curation observers (P22 — appendix p22-skill-self-optimization.md) ──
|
|
1212
|
-
// Hourly walker accumulates `structure_diff` signals for the curation
|
|
1213
|
-
// cohort. Outcomes/feedback collection was dropped from the Preview scope
|
|
1214
|
-
// — the feature optimizes silently in the background, no metrics surface.
|
|
1215
|
-
{
|
|
1216
|
-
const { SkillCurationWalker } = await import("./observers/skill-curation-walker.js");
|
|
1217
|
-
observerManager.register(new SkillCurationWalker(db, getContextDir(config), join(config.workspaceDir, "agent-assets", "skills"), config.dataDir));
|
|
1218
|
-
// §5.4 — boot-time orphan-overlay scan. Emits one log line per orphan
|
|
1219
|
-
// and seeds `runtime_state.skill_curation.orphan_overlays` so the
|
|
1220
|
-
// dashboard banner can read it without re-walking the FS.
|
|
1221
|
-
try {
|
|
1222
|
-
const { scanAndRecordOrphanOverlays } = await import("./core/skill-curation/orphan-overlay.js");
|
|
1223
|
-
scanAndRecordOrphanOverlays(db, config.dataDir, join(config.workspaceDir, "agent-assets", "skills"));
|
|
1224
|
-
}
|
|
1225
|
-
catch (err) {
|
|
1226
|
-
logger.warn({ err }, "Skill-curation orphan-overlay scan failed at boot");
|
|
1227
|
-
}
|
|
1228
|
-
}
|
|
1229
|
-
// ── 7.05 Context-index reconciler (B-004 Phase 2a) ──
|
|
1230
|
-
// Keeps `context/context-index.md` in sync with the filesystem so the
|
|
1231
|
-
// per-flow review-context loader can treat the index as authoritative.
|
|
1232
|
-
// Combines: startup one-shot (30 s after boot), internal chokidar
|
|
1233
|
-
// watcher on contextDir (10 s debounce), cron nightly (wired via
|
|
1234
|
-
// `AgentScheduler.setContextIndexReconcilerCallback`), and API-route
|
|
1235
|
-
// hints via `onIndexableContextChange` below.
|
|
1236
|
-
let contextIndexReconcilerPromptSink = null;
|
|
1237
|
-
const contextIndexReconciler = new ContextIndexReconcilerObserver({
|
|
1238
|
-
db,
|
|
1239
|
-
contextDir: getContextDir(config),
|
|
797
|
+
secretBroker,
|
|
798
|
+
services,
|
|
1240
799
|
writeTracker,
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
// prompt-cache invalidation through the same handler every other
|
|
1244
|
-
// context write uses. The real handler is installed in §11
|
|
1245
|
-
// (`onPromptContextChanged` ApiDependency); this indirection lets
|
|
1246
|
-
// the observer start at §7 before the handler exists.
|
|
1247
|
-
contextIndexReconcilerPromptSink?.(path, reason, tier, metadata);
|
|
1248
|
-
},
|
|
800
|
+
blobStore,
|
|
801
|
+
messageHub,
|
|
1249
802
|
morningRoutineLock,
|
|
1250
|
-
|
|
803
|
+
secretState,
|
|
804
|
+
triggerRoadmapRefresh,
|
|
1251
805
|
});
|
|
1252
|
-
observerManager
|
|
1253
|
-
// docs/design/21-management-registry-and-entities.md §7.6 P5 —
|
|
1254
|
-
// entity-mirror watcher. Owns its own chokidar watcher (independent
|
|
1255
|
-
// of the context-index reconciler's debounce path) so single-file
|
|
1256
|
-
// L2 writes converge into the SQLite mirror within NFR-9's 500 ms
|
|
1257
|
-
// budget — the §7.6 lookup contract relies on this freshness at
|
|
1258
|
-
// scheduled-task fire time. Boot pass + watcher lifecycle handled
|
|
1259
|
-
// by the observer wrapper.
|
|
1260
|
-
//
|
|
1261
|
-
// §7.2 chain — fan an L2 entity delta out to the context-index
|
|
1262
|
-
// observer's `requestReconcile` so the rendered domain-index +
|
|
1263
|
-
// activity-view files refresh on the same 10 s debounce as other
|
|
1264
|
-
// fs_event triggers. Without this, those views only converged on
|
|
1265
|
-
// the nightly cron + 30 s startup pass because `shouldIndexPath`
|
|
1266
|
-
// filters L2 paths out of the context-index's own watcher
|
|
1267
|
-
// (followups item 7).
|
|
1268
|
-
observerManager.register(new EntityMirrorObserver({
|
|
1269
|
-
db,
|
|
1270
|
-
contextDir: getContextDir(config),
|
|
1271
|
-
writeTracker,
|
|
1272
|
-
onEntityChanged: () => contextIndexReconciler.requestReconcile("fs_event"),
|
|
1273
|
-
}));
|
|
1274
|
-
// ── 7.1 MCP auto-probe (B-003 Phase 4.3) ──
|
|
1275
|
-
// Walks enabled mcp_servers rows every `mcpAutoProbeIntervalMinutes` and
|
|
1276
|
-
// re-runs the probe sandbox. Set the interval to 0 to disable. The
|
|
1277
|
-
// observer never flips `enabled` on its own — failure surfaces through
|
|
1278
|
-
// the dashboard card's status dot, user decides whether to disable.
|
|
1279
|
-
{
|
|
1280
|
-
const { McpAutoProbe } = await import("./services/mcp/auto-probe.js");
|
|
1281
|
-
observerManager.register(new McpAutoProbe({
|
|
1282
|
-
db,
|
|
1283
|
-
blobStore,
|
|
1284
|
-
dataDir: config.dataDir,
|
|
1285
|
-
intervalMinutes: config.mcpAutoProbeIntervalMinutes,
|
|
1286
|
-
}));
|
|
1287
|
-
}
|
|
1288
|
-
// ── 7.2 Observation summarizer (cost-reduction-structural §A) ──
|
|
1289
|
-
// Drains pending observation rows asynchronously: pre-filter → per-
|
|
1290
|
-
// source LLM call → `summary_text` + `novelty_score` written back to
|
|
1291
|
-
// the row. The hourly_check skill consumes summaries instead of
|
|
1292
|
-
// re-fetching raw content. Disabled cleanly via
|
|
1293
|
-
// `observationSummarizerEnabled` — when off, observations stay
|
|
1294
|
-
// pending and the skill drops to legacy fetch-on-doubt.
|
|
1295
|
-
if (config.observationSummarizerEnabled) {
|
|
1296
|
-
const summarizerBinding = (() => {
|
|
1297
|
-
try {
|
|
1298
|
-
const row = db
|
|
1299
|
-
.prepare(`SELECT main_backend, main_model FROM process_backend_config WHERE process_key = 'observation.summarize'`)
|
|
1300
|
-
.get();
|
|
1301
|
-
if (!row?.main_backend || !row.main_model)
|
|
1302
|
-
return null;
|
|
1303
|
-
return { backendId: row.main_backend, modelId: row.main_model };
|
|
1304
|
-
}
|
|
1305
|
-
catch (err) {
|
|
1306
|
-
logger.debug({ err }, "Failed to read observation.summarize binding; using fallback");
|
|
1307
|
-
return null;
|
|
1308
|
-
}
|
|
1309
|
-
})();
|
|
1310
|
-
const summarizerClient = (() => {
|
|
1311
|
-
const fallbackBackend = summarizerBinding?.backendId ?? "claude";
|
|
1312
|
-
const fallbackModel = summarizerBinding?.modelId ?? "claude-haiku-4-5-20251001";
|
|
1313
|
-
if (fallbackBackend === "claude") {
|
|
1314
|
-
return new AnthropicSummarizerClient({
|
|
1315
|
-
modelId: fallbackModel,
|
|
1316
|
-
getApiKey: async () => {
|
|
1317
|
-
const direct = await secretBroker.getBackendApiKey("claude");
|
|
1318
|
-
if (direct)
|
|
1319
|
-
return direct;
|
|
1320
|
-
// Fall back to env (matches the daemon's API-key bridging policy).
|
|
1321
|
-
return process.env.ANTHROPIC_API_KEY ?? null;
|
|
1322
|
-
},
|
|
1323
|
-
});
|
|
1324
|
-
}
|
|
1325
|
-
// Codex / Gemini summarizer support is not yet implemented; the
|
|
1326
|
-
// worker translates `unsupported_backend` into a 'skipped' row so
|
|
1327
|
-
// the hourly_check skill drops to its legacy fetch path.
|
|
1328
|
-
return new UnsupportedSummarizerClient(fallbackBackend, fallbackModel);
|
|
1329
|
-
})();
|
|
1330
|
-
observerManager.register(new ObservationSummarizerWorker({
|
|
1331
|
-
db,
|
|
1332
|
-
client: summarizerClient,
|
|
1333
|
-
concurrency: config.observationSummarizerConcurrency,
|
|
1334
|
-
perCallTimeoutMs: config.observationSummarizerTimeoutMs,
|
|
1335
|
-
maxLlmCallsPerMinute: config.observationSummarizerMaxCallsPerMinute,
|
|
1336
|
-
queueDepthLimit: config.observationSummarizerQueueLimit,
|
|
1337
|
-
preFilter: { vipMailSenders: config.vipMailSenders },
|
|
1338
|
-
}));
|
|
1339
|
-
}
|
|
1340
|
-
else {
|
|
1341
|
-
logger.info("Observation summarizer disabled — pending rows stay pending");
|
|
1342
|
-
}
|
|
806
|
+
const { observerManager, primaryVaultWatcher, contextIndexReconciler, gitAccountRegistry, buildGitWatcher, buildGithubPoller, buildGitDelegatedCronObserver, buildCalendarPoller, buildNotionPoller, queueGitProjectInitsForCurrentConfig, } = observers;
|
|
1343
807
|
// ── 8. Health Monitor ──
|
|
1344
808
|
const healthMonitor = new HealthMonitor({
|
|
1345
809
|
db,
|
|
@@ -1356,7 +820,7 @@ async function startup() {
|
|
|
1356
820
|
// ── 9. Scheduler ──
|
|
1357
821
|
const scheduler = new AgentScheduler(eventBus, db, config);
|
|
1358
822
|
// ── 9.1 Custom routine scheduler (B-007 §5.8) ──
|
|
1359
|
-
// Reads `routines/custom/*.md` from the context dir and registers a
|
|
823
|
+
// Reads `policies/routines/custom/*.md` from the context dir and registers a
|
|
1360
824
|
// cron job per enabled routine. Reloaded from the context API whenever
|
|
1361
825
|
// the agent or dashboard edits a file under that directory.
|
|
1362
826
|
const customRoutineScheduler = new CustomRoutineScheduler({
|
|
@@ -1364,613 +828,140 @@ async function startup() {
|
|
|
1364
828
|
eventBus,
|
|
1365
829
|
timezone: config.timezone || undefined,
|
|
1366
830
|
});
|
|
1367
|
-
// ── 9.5 Signal Detector ──
|
|
1368
|
-
const signalDetector = new SignalDetector(config);
|
|
1369
831
|
// ── 10. Event Processing Pipeline ──
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
//
|
|
1374
|
-
//
|
|
1375
|
-
//
|
|
1376
|
-
|
|
1377
|
-
|
|
1378
|
-
|
|
1379
|
-
|
|
1380
|
-
//
|
|
1381
|
-
//
|
|
1382
|
-
//
|
|
1383
|
-
//
|
|
1384
|
-
|
|
1385
|
-
|
|
1386
|
-
|
|
1387
|
-
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
|
|
1392
|
-
|
|
1393
|
-
// rows that were `in_progress` when the daemon last crashed. Without
|
|
1394
|
-
// this, the dashboard's in-flight counter and audit views drift forever.
|
|
1395
|
-
const taskOrphansClosed = runDelegatedTaskOrphanJanitor(db);
|
|
1396
|
-
if (taskOrphansClosed > 0) {
|
|
1397
|
-
logger.info({ closed: taskOrphansClosed }, "Boot janitor closed orphaned delegated_task in-progress rows");
|
|
1398
|
-
}
|
|
1399
|
-
const delegatedBackendInvoker = new DelegatedBackendInvoker({
|
|
832
|
+
// §9.5 SignalDetector + §10 event-processing pipeline (agent cores,
|
|
833
|
+
// BackendRouter, dispatcher + setters, NotificationManager,
|
|
834
|
+
// AuthHealthMonitor + recovery, DelegatedBackendInvoker / sync worker,
|
|
835
|
+
// VoiceTranscriber, DocsQAAdapter, rematerializeActiveDmWorkdirs,
|
|
836
|
+
// handleSecretChange, handleGoogleServicesReady) live in
|
|
837
|
+
// `bootstrap/event-pipeline.ts`. The factory closes over the existing
|
|
838
|
+
// adapter + service reloaders and observer builders so secret-change
|
|
839
|
+
// hot-reload routing remains a single dispatch table.
|
|
840
|
+
//
|
|
841
|
+
// The factory also installs the real `onMailScopeChanged` handler and
|
|
842
|
+
// the roadmap-refresh sink via the setter callbacks below — both are
|
|
843
|
+
// forward-references kept open by `let` slots above (mail) and at the
|
|
844
|
+
// observers factory call (roadmap).
|
|
845
|
+
// Declared BEFORE the event-pipeline factory call so the
|
|
846
|
+
// `isStartupComplete` getter passed below closes over the live latch.
|
|
847
|
+
// The latch flips to `true` at the end of §13 once every subsystem is
|
|
848
|
+
// started; until then `handleSecretChange("notion")` defers calling
|
|
849
|
+
// `poller.start()` to avoid double-starting the timer that
|
|
850
|
+
// `observerManager.startAll()` is about to start (see the matching
|
|
851
|
+
// comment in event-pipeline.ts:SecretChangeHandlerDeps).
|
|
852
|
+
let startupComplete = false;
|
|
853
|
+
let pendingGoogleServicesReady = false;
|
|
854
|
+
const eventPipeline = await createEventPipeline({
|
|
1400
855
|
db,
|
|
1401
856
|
config,
|
|
1402
|
-
|
|
1403
|
-
|
|
1404
|
-
|
|
1405
|
-
|
|
1406
|
-
|
|
1407
|
-
|
|
1408
|
-
|
|
1409
|
-
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
|
|
1415
|
-
|
|
1416
|
-
|
|
1417
|
-
|
|
1418
|
-
|
|
1419
|
-
|
|
1420
|
-
|
|
1421
|
-
|
|
1422
|
-
|
|
1423
|
-
|
|
1424
|
-
|
|
1425
|
-
|
|
1426
|
-
|
|
1427
|
-
|
|
1428
|
-
|
|
1429
|
-
|
|
1430
|
-
|
|
1431
|
-
{
|
|
1432
|
-
const { DelegatedProbeObserver } = await import("./observers/delegated-probe-observer.js");
|
|
1433
|
-
observerManager.register(new DelegatedProbeObserver({
|
|
1434
|
-
db,
|
|
1435
|
-
agentBackends: [agentCore, codexCore, geminiCore],
|
|
1436
|
-
intervalMinutes: config.delegatedProbeIntervalMinutes,
|
|
1437
|
-
}));
|
|
1438
|
-
}
|
|
1439
|
-
const notificationManager = new NotificationManager(messageHub, db, config);
|
|
1440
|
-
const authTelemetry = new AuthTelemetry(db);
|
|
1441
|
-
// Shared notifier factory for auth-health-monitor and auth-recovery (D3 fix).
|
|
1442
|
-
// Maps `kind` to notification_type + category so both callers share the
|
|
1443
|
-
// same routing / quiet-hours-bypass logic without duplicating 30+ lines.
|
|
1444
|
-
//
|
|
1445
|
-
// Probe-failure and recovery DMs bypass NotificationManager's own quiet-hours
|
|
1446
|
-
// + rate-limit gates via `category: "error"` (SAFETY_CATEGORIES member).
|
|
1447
|
-
// Keepalive DMs stay on the standard path. See Phase 4 self-critique B2 for
|
|
1448
|
-
// the anti-spam reasoning (clock-driven, ≤1 DM per cron tick).
|
|
1449
|
-
const makeAuthNotifier = (source) => ({
|
|
1450
|
-
send: async (message, options) => {
|
|
1451
|
-
const kind = options?.kind ?? "keepalive";
|
|
1452
|
-
const typeMap = {
|
|
1453
|
-
probe_failure: "auth.probe_failure",
|
|
1454
|
-
recovery: "auth.recovery",
|
|
1455
|
-
keepalive: "auth.keepalive_reminder",
|
|
1456
|
-
};
|
|
1457
|
-
const notificationType = typeMap[kind] ?? "auth.keepalive_reminder";
|
|
1458
|
-
// probe_failure and recovery bypass quiet-hours; keepalive does not.
|
|
1459
|
-
const category = kind === "keepalive" ? "auth-health" : AUTH_PROBE_NOTIFICATION_CATEGORY;
|
|
1460
|
-
await notificationManager.send(message, {
|
|
1461
|
-
type: notificationType,
|
|
1462
|
-
source,
|
|
1463
|
-
priority: EventPriority.NORMAL,
|
|
1464
|
-
timestamp: new Date(),
|
|
1465
|
-
data: {},
|
|
1466
|
-
correlationId: randomBytes(8).toString("hex"),
|
|
1467
|
-
}, {
|
|
1468
|
-
priority: "normal",
|
|
1469
|
-
category,
|
|
1470
|
-
destinationMode: "configured_only",
|
|
1471
|
-
});
|
|
857
|
+
eventBus,
|
|
858
|
+
secretBroker,
|
|
859
|
+
blobStore,
|
|
860
|
+
writeTracker,
|
|
861
|
+
services,
|
|
862
|
+
messageHub,
|
|
863
|
+
dashboardAdapter,
|
|
864
|
+
attachmentStore,
|
|
865
|
+
morningRoutineLock,
|
|
866
|
+
roadmapWriteLock,
|
|
867
|
+
secretState,
|
|
868
|
+
observerManager,
|
|
869
|
+
buildCalendarPoller,
|
|
870
|
+
buildNotionPoller,
|
|
871
|
+
getGitWatcher: observers.getGitWatcher,
|
|
872
|
+
reloadDiscordAdapter,
|
|
873
|
+
reloadSlackAdapter,
|
|
874
|
+
reloadTelegramAdapter,
|
|
875
|
+
reloadGoogleServices,
|
|
876
|
+
reloadAppleCalendarService,
|
|
877
|
+
reloadNotionService,
|
|
878
|
+
reloadGitHubService,
|
|
879
|
+
scheduler,
|
|
880
|
+
isStartupComplete: () => startupComplete,
|
|
881
|
+
setMailScopeChangedHandler: (cb) => {
|
|
882
|
+
onMailScopeChanged = cb;
|
|
883
|
+
},
|
|
884
|
+
setRoadmapRefreshSink: (cb) => {
|
|
885
|
+
emitRoadmapRefreshSink = cb;
|
|
1472
886
|
},
|
|
1473
887
|
});
|
|
1474
|
-
const authHealthMonitor
|
|
1475
|
-
|
|
1476
|
-
|
|
1477
|
-
|
|
1478
|
-
|
|
1479
|
-
|
|
1480
|
-
|
|
1481
|
-
|
|
1482
|
-
|
|
1483
|
-
|
|
1484
|
-
|
|
1485
|
-
|
|
1486
|
-
|
|
1487
|
-
isQuietHours: () => notificationManager.isQuietHours(),
|
|
1488
|
-
probeDisabled: () => config.authProbeDisabled,
|
|
1489
|
-
});
|
|
1490
|
-
// Reset any recoveries that were in-flight when the daemon was last killed.
|
|
1491
|
-
const recovered = authHealthMonitor.reconcilePendingRecoveries();
|
|
1492
|
-
if (recovered > 0) {
|
|
1493
|
-
logger.info({ count: recovered }, "Reconciled stuck auth recoveries on startup");
|
|
1494
|
-
}
|
|
1495
|
-
// Run the 60-day keepalive sweep once on startup. Hourly probe is
|
|
1496
|
-
// registered via scheduler.setAuthProbeCallback — see §9.5.4.
|
|
1497
|
-
void authHealthMonitor.runKeepaliveSweep().catch((err) => {
|
|
1498
|
-
logger.warn({ err }, "Initial auth keepalive sweep failed");
|
|
1499
|
-
});
|
|
1500
|
-
const keepaliveTimer = setInterval(() => {
|
|
1501
|
-
void authHealthMonitor.runKeepaliveSweep().catch((err) => {
|
|
1502
|
-
logger.warn({ err }, "Periodic auth keepalive sweep failed");
|
|
1503
|
-
});
|
|
1504
|
-
}, 24 * 60 * 60 * 1000);
|
|
1505
|
-
keepaliveTimer.unref?.();
|
|
1506
|
-
// Phase 5/6: Interactive auth recovery manager. Uses the same notifier
|
|
1507
|
-
// sink as the AuthHealthMonitor so recovery DMs flow through the same
|
|
1508
|
-
// notification pipeline with the same anti-spam guarantees.
|
|
1509
|
-
const authRecovery = new AuthRecovery(db, authTelemetry, authHealthMonitor, makeAuthNotifier("auth-recovery"), {
|
|
1510
|
-
claudeRecoveryTimeoutMin: 10,
|
|
1511
|
-
codexRecoveryTimeoutMin: 15,
|
|
1512
|
-
geminiRecoveryTimeoutMin: 5,
|
|
1513
|
-
});
|
|
1514
|
-
// ── Scoped read tokens for ReadSensitive API endpoints ──
|
|
1515
|
-
// Tokens rotate per session/workdir execution and are only injected into
|
|
1516
|
-
// backend subprocess env, never into prompt-visible instruction files.
|
|
1517
|
-
const readTokenManager = new ScopedReadSensitiveTokenManager();
|
|
1518
|
-
const agentRouter = new BackendRouter(db, config, [agentCore, codexCore, geminiCore], notificationManager, authTelemetry,
|
|
1519
|
-
// Callback to materialize instruction files for a fallback backend in an
|
|
1520
|
-
// existing session workdir. Without this, a Claude→Codex heavy-tier
|
|
1521
|
-
// fallback would leave the dir with only CLAUDE.md and no AGENTS.md.
|
|
1522
|
-
// After materializing built-in files, re-sync user-authored skills so
|
|
1523
|
-
// the newly created backend-specific dir (e.g. .codex/skills/) also
|
|
1524
|
-
// receives user skills. The dispatcher's syncAllUserSkills ran BEFORE
|
|
1525
|
-
// router.execute(), so the fallback dir didn't exist at that point.
|
|
1526
|
-
(sessionDir, backendId, eventType, processKey, wikiWorkspaceName) => {
|
|
1527
|
-
// services is the mutable ServiceRegistry — reading .calendar here
|
|
1528
|
-
// picks up the current availability (e.g. after mid-flight OAuth).
|
|
1529
|
-
// GitHub presence is read fresh from the unified `repositories` table
|
|
1530
|
-
// (rows with a github side); legacy `githubRepos` config is gone.
|
|
1531
|
-
const cfgServices = buildConfiguredServices(config, {
|
|
1532
|
-
...services,
|
|
1533
|
-
github: selectGithubRepoSlugs(db).length > 0,
|
|
1534
|
-
});
|
|
1535
|
-
const mailAccounts = services.mail?.listActiveAccounts() ?? [];
|
|
1536
|
-
ensureBackendMaterialized(config.workspaceDir, sessionDir, backendId, eventType, processKey, cfgServices, mailAccounts, readIntegrations(db), config.character, wikiWorkspaceName);
|
|
1537
|
-
syncAllUserSkills(sessionDir, join(config.dataDir, "skills"));
|
|
1538
|
-
});
|
|
1539
|
-
// Startup validation — warn if any delegated-mode variant files are
|
|
1540
|
-
// missing. Now checks both skill and task-flow variants for every
|
|
1541
|
-
// currently-delegated integration against its configured `delegatedBackend`
|
|
1542
|
-
// (not the union of all possible backends — see validateDelegatedStartup
|
|
1543
|
-
// docstring). Never throws; the PATCH route + /health do the hard-
|
|
1544
|
-
// rejection and user-surfacing downstream.
|
|
1545
|
-
{
|
|
1546
|
-
const startupIntegrations = readIntegrations(db);
|
|
1547
|
-
const missing = validateDelegatedStartup(config.workspaceDir, startupIntegrations);
|
|
1548
|
-
if (missing.skills.length > 0 || missing.taskFlows.length > 0) {
|
|
1549
|
-
logger.warn({ missingSkills: missing.skills, missingTaskFlows: missing.taskFlows }, "Delegated-mode variant files missing — agent will fall back to SKILL.md / direct task-flow for affected entries; surface in /health.integrationModes");
|
|
1550
|
-
}
|
|
1551
|
-
}
|
|
1552
|
-
const contextBuilder = new ContextBuilder(config, db, services);
|
|
1553
|
-
// Task flows are simple code constants — no file system, no hot-reload needed
|
|
1554
|
-
const sessionManager = new SessionManager(db, config);
|
|
1555
|
-
const messageRecorder = new MessageRecorder(db);
|
|
1556
|
-
const eventBroadcaster = new EventBroadcaster();
|
|
1557
|
-
const auditLogger = new AuditLogger(db, {
|
|
1558
|
-
// `/api/events/stream` is defined in terms of persisted agent_actions rows,
|
|
1559
|
-
// not raw EventBus payloads, so the broadcaster subscribes at the audit layer.
|
|
1560
|
-
onRowInserted: (row) => eventBroadcaster.broadcastEvent(row),
|
|
1561
|
-
});
|
|
1562
|
-
// Shared body for "something changed that affects what's baked into
|
|
1563
|
-
// active DM workdirs — refresh them in place." Used by:
|
|
1564
|
-
// - `onMailScopeChanged` (MailAccountRegistry scope-change hook)
|
|
1565
|
-
// - the integration-mode lifecycle (DELEGATED-PROXY-API-DESIGN.md
|
|
1566
|
-
// Phase F §4.8 — every mode flip re-materializes so the unified
|
|
1567
|
-
// skill body and per-backend instruction file reflect the new
|
|
1568
|
-
// state on the next turn without tearing down the SDK session)
|
|
1569
|
-
//
|
|
1570
|
-
// Returns null when there's no active DM session to refresh; otherwise
|
|
1571
|
-
// the per-session summary so callers can attach it to a broadcast or
|
|
1572
|
-
// structured log. Per-session failures stay inside the helper.
|
|
1573
|
-
const rematerializeActiveDmWorkdirs = (reason) => {
|
|
1574
|
-
const sessions = sessionManager.listActiveDmSessions();
|
|
1575
|
-
if (sessions.length === 0) {
|
|
1576
|
-
logger.debug({ reason }, "DM workdir refresh requested — no active DM sessions");
|
|
1577
|
-
return null;
|
|
1578
|
-
}
|
|
1579
|
-
const cfgServices = buildConfiguredServices(config, {
|
|
1580
|
-
...services,
|
|
1581
|
-
github: selectGithubRepoSlugs(db).length > 0,
|
|
1582
|
-
});
|
|
1583
|
-
const mailAccounts = services.mail?.listActiveAccounts() ?? [];
|
|
1584
|
-
// Read integration state fresh inside the closure so a Phase F mode
|
|
1585
|
-
// flip's pre-`writeIntegrations` row is not what gets baked. The
|
|
1586
|
-
// `SkillsCompiler` uses this for variant resolution (non-proxy
|
|
1587
|
-
// integrations like Notion need `SKILL.delegated.<backend>.md`) and
|
|
1588
|
-
// to re-emit `applyAllDeniedToolsForSkill` soft-deny prose. Passing
|
|
1589
|
-
// an empty object would silently regress to the latent staleness bug
|
|
1590
|
-
// that Phase F surfaced.
|
|
1591
|
-
const integrations = readIntegrations(db);
|
|
1592
|
-
const summary = refreshDmSessionWorkdirs({
|
|
1593
|
-
projectRoot: config.workspaceDir,
|
|
1594
|
-
dataDir: config.dataDir,
|
|
1595
|
-
sessions,
|
|
1596
|
-
configuredServices: cfgServices,
|
|
1597
|
-
mailAccounts,
|
|
1598
|
-
integrations,
|
|
1599
|
-
character: config.character,
|
|
1600
|
-
});
|
|
1601
|
-
return { summary, mailAccounts };
|
|
1602
|
-
};
|
|
1603
|
-
// Real implementation of the mail-scope-changed hook. Wired by the
|
|
1604
|
-
// MailAccountRegistry constructor above through a forward-reference so the
|
|
1605
|
-
// registry can be built before sessionManager / eventBroadcaster exist.
|
|
1606
|
-
// Re-materializes every active DM session workdir so `accounts.md` and the
|
|
1607
|
-
// `external-services` skill reflect the new scope on the next turn without
|
|
1608
|
-
// tearing down the SDK session.
|
|
1609
|
-
onMailScopeChanged = (reason) => {
|
|
1610
|
-
const result = rematerializeActiveDmWorkdirs(reason);
|
|
1611
|
-
if (!result)
|
|
1612
|
-
return;
|
|
1613
|
-
logger.info({ reason, ...result.summary }, "Mail scope changed — DM session workdirs re-materialized");
|
|
1614
|
-
eventBroadcaster.broadcastEvent({
|
|
1615
|
-
kind: "mail_scope_changed",
|
|
1616
|
-
reason,
|
|
1617
|
-
activeAccounts: result.mailAccounts.length,
|
|
1618
|
-
...result.summary,
|
|
1619
|
-
});
|
|
1620
|
-
};
|
|
1621
|
-
// Management Mode Phase 2 — shared migration primitives. Long timeout
|
|
1622
|
-
// because cross-fs copies of large vaults may legitimately run
|
|
1623
|
-
// multiple minutes; the lock itself is cheap and only blocks a
|
|
1624
|
-
// second concurrent /api/setup/migrate-context call.
|
|
1625
|
-
const migrationLock = new MigrationLock(60 * 60 * 1000);
|
|
1626
|
-
const contextWriteGate = new ContextWriteGate();
|
|
1627
|
-
initTaskFlows(config.workspaceDir, config.dataDir);
|
|
1628
|
-
const dispatcher = new EventDispatcher(eventBus, agentRouter, contextBuilder, getTaskFlow, notificationManager, sessionManager, messageRecorder, auditLogger, db, config, morningRoutineLock, services, roadmapWriteLock, writeTracker);
|
|
1629
|
-
dispatcher.setSignalDetector(signalDetector);
|
|
1630
|
-
// DOCS_QA_B7_DESIGN.md §11.1 — persistence-side citation validator
|
|
1631
|
-
// for docs_qa sessions. Lookup runs over fts_docs (indexed by the
|
|
1632
|
-
// docs indexer); the dispatcher only consults it when
|
|
1633
|
-
// `isDocsQAMessage(event)` is true, so this hook is inert for
|
|
1634
|
-
// chat/DM/routine flows and for installs that haven't ingested docs.
|
|
1635
|
-
const docsCitationLookup = makeDocsCitationLookup(db);
|
|
1636
|
-
dispatcher.setDocsCitationLookup(docsCitationLookup);
|
|
1637
|
-
// Docs-QA SSE adapter — DOCS_QA_B7_DESIGN.md §S4 / §S8. Sits
|
|
1638
|
-
// alongside `dashboardAdapter` on the same `platform="dashboard"`
|
|
1639
|
-
// surface; the `intent: "docs_qa"` discriminator on inbound events
|
|
1640
|
-
// forks dispatch into the docs-qa task flow + skill set + light
|
|
1641
|
-
// tier clamp. The adapter is exposed to `createDocsRoutes` for the
|
|
1642
|
-
// QA POST/SSE endpoints; outbound text reaches it via the dispatcher's
|
|
1643
|
-
// `IDashboardStream` slot fanned out by `CompositeDashboardStream`.
|
|
1644
|
-
//
|
|
1645
|
-
// It is intentionally NOT registered with `messageHub`: the hub keys
|
|
1646
|
-
// adapters by `platformName`, and both `DashboardAdapter` and this
|
|
1647
|
-
// adapter declare `platformName="dashboard"`. A second registration
|
|
1648
|
-
// would silently replace `dashboardAdapter` in the hub map (only a
|
|
1649
|
-
// warn-log), breaking `getAdapter("dashboard")`, the
|
|
1650
|
-
// start/stop lifecycle for the chat adapter, and any
|
|
1651
|
-
// `sendToPlatform("dashboard", ...)` caller (DocsQAAdapter.sendMessage
|
|
1652
|
-
// throws — it's streaming-only). DocsQAAdapter's lifecycle is owned
|
|
1653
|
-
// by the SSE route itself: clients register on `GET /docs/qa/stream`
|
|
1654
|
-
// and unregister on the request's `onAbort`.
|
|
1655
|
-
const docsQAAdapter = new DocsQAAdapter((event) => void eventBus.put(event), docsCitationLookup);
|
|
1656
|
-
// Fan-out: the dispatcher's single `IDashboardStream` slot drives
|
|
1657
|
-
// both the chat and docs-QA adapters. Each adapter no-ops on
|
|
1658
|
-
// unknown channelIds (per F3.2), so only the adapter that owns
|
|
1659
|
-
// the destination channelId actually emits — fan-out is naturally
|
|
1660
|
-
// safe (DOCS_QA_B7_DESIGN.md §9 F3.4 / §11.4).
|
|
1661
|
-
dispatcher.setDashboardStream(new CompositeDashboardStream([dashboardAdapter, docsQAAdapter]));
|
|
1662
|
-
dispatcher.setAttachmentStore(attachmentStore);
|
|
1663
|
-
// Real-time routine progress for the dashboard. `dispatchSafe` emits
|
|
1664
|
-
// `kind: "routine_started"` / `"routine_completed"` on the default
|
|
1665
|
-
// SSE `event` channel — same pipe as `kind: "main_backend_changed"`
|
|
1666
|
-
// — so the setup wizard's "今日の状況を生成中…" indicator can render
|
|
1667
|
-
// without waiting on `/api/events` REST polling. Failure containment
|
|
1668
|
-
// lives in `broadcastRoutineProgress` (swallows + warns).
|
|
1669
|
-
dispatcher.setEventBroadcaster(eventBroadcaster);
|
|
1670
|
-
// Local-Whisper voice transcription for inbound audio attachments.
|
|
1671
|
-
// See docs/design/appendices/voice-transcription.md.
|
|
1672
|
-
//
|
|
1673
|
-
// `enabled` is driven by the `voiceTranscriptionEnabled` runtime setting
|
|
1674
|
-
// (default `false`). The flag is opt-in via the dashboard's Voice Mode
|
|
1675
|
-
// card, which goes through `POST /api/voice/install` so the model
|
|
1676
|
-
// download and the daemon restart happen atomically — the constructor
|
|
1677
|
-
// here observes the persisted flag on the next boot.
|
|
1678
|
-
//
|
|
1679
|
-
// Env vars stay live for advanced operators who want to override the
|
|
1680
|
-
// model id, language, or duration cap without a settings round-trip.
|
|
1681
|
-
// `PA_VOICE_TRANSCRIPTION_ENABLED` is honoured as a fallback when the
|
|
1682
|
-
// setting is unset (legacy behaviour for installs predating the flag).
|
|
1683
|
-
const voiceTranscriberMaxDuration = Number(process.env.PA_VOICE_TRANSCRIPTION_MAX_DURATION_SEC ?? "600");
|
|
1684
|
-
const voiceEnvOverride = process.env.PA_VOICE_TRANSCRIPTION_ENABLED;
|
|
1685
|
-
// When `PA_VOICE_TRANSCRIPTION_ENABLED` is set, env wins (operator
|
|
1686
|
-
// override). Otherwise read live from `config` so the dashboard's
|
|
1687
|
-
// voice install flow — which mutates `config.voiceTranscriptionEnabled`
|
|
1688
|
-
// and persists the setting in the same boot — takes effect on the
|
|
1689
|
-
// next inbound audio attachment without waiting for a daemon restart.
|
|
1690
|
-
const voiceTranscriberEnabled = voiceEnvOverride !== undefined
|
|
1691
|
-
? voiceEnvOverride.toLowerCase() !== "false"
|
|
1692
|
-
: () => config.voiceTranscriptionEnabled;
|
|
1693
|
-
// Primary-language fallback: env override → runtime setting → null.
|
|
1694
|
-
// The getter form is essential — operators can pick a language from the
|
|
1695
|
-
// dashboard at any time and the next inbound voice attachment honours
|
|
1696
|
-
// it without requiring a daemon restart, mirroring the `enabled` knob.
|
|
1697
|
-
const voicePrimaryEnvOverride = process.env.PA_VOICE_TRANSCRIPTION_PRIMARY_LANGUAGE;
|
|
1698
|
-
const voiceTranscriberPrimaryLanguage = voicePrimaryEnvOverride !== undefined
|
|
1699
|
-
? voicePrimaryEnvOverride.trim() || null
|
|
1700
|
-
: () => config.voiceTranscriptionPrimaryLanguage;
|
|
1701
|
-
dispatcher.setVoiceTranscriber(new VoiceTranscriber({
|
|
1702
|
-
db,
|
|
1703
|
-
modelDir: join(config.dataDir, "models", "whisper"),
|
|
1704
|
-
enabled: voiceTranscriberEnabled,
|
|
1705
|
-
model: process.env.PA_VOICE_TRANSCRIPTION_MODEL,
|
|
1706
|
-
language: process.env.PA_VOICE_TRANSCRIPTION_LANGUAGE ?? null,
|
|
1707
|
-
primaryLanguage: voiceTranscriberPrimaryLanguage,
|
|
1708
|
-
maxDurationSec: Number.isFinite(voiceTranscriberMaxDuration)
|
|
1709
|
-
? voiceTranscriberMaxDuration
|
|
1710
|
-
: 600,
|
|
1711
|
-
}));
|
|
1712
|
-
dispatcher.setAuthRecovery(authRecovery);
|
|
1713
|
-
dispatcher.setAuthHealthMonitor(authHealthMonitor);
|
|
1714
|
-
// Wire the delegated-sync refresh callback. The thunk reads the live
|
|
1715
|
-
// `delegatedSyncWorker` reference each call so the dispatcher tracks
|
|
1716
|
-
// re-registration when an integration mode flips. When no delegated
|
|
1717
|
-
// integration is present, the worker is null and the call is a no-op
|
|
1718
|
-
// — the hourly check proceeds without extra latency.
|
|
1719
|
-
// See `docs/design/appendices/delegated-sync-opt-in.md` and the
|
|
1720
|
-
// worker's `runDisabledCadencesForHourlyCheck` doc-comment.
|
|
1721
|
-
dispatcher.setDelegatedSyncRefresh(async () => {
|
|
1722
|
-
await delegatedSyncWorker?.runDisabledCadencesForHourlyCheck();
|
|
1723
|
-
});
|
|
1724
|
-
// Messaging bang-commands (`!stop`/`!start`/`!cost`/`!report`) — owner DM
|
|
1725
|
-
// chokepoint that runs ahead of every other interceptor in handleMessage.
|
|
1726
|
-
// See docs/design/backlog/messaging-bang-commands.md.
|
|
1727
|
-
dispatcher.setBangCommandRegistry(createDefaultBangCommandRegistry());
|
|
1728
|
-
// P22 — wire the optimizer-workdir hooks. The `materialize` callback
|
|
1729
|
-
// captures `db`, `dataDir`, `workspaceDir`, `contextDir`, and `secretStore`
|
|
1730
|
-
// so the dispatcher branch can invoke it without importing the workdir
|
|
1731
|
-
// module directly. `teardown` cleans up under PA_DATA_DIR/optimizer-workdir/.
|
|
888
|
+
const { dispatcher, sessionManager, notificationManager, signalDetector, eventBroadcaster, auditLogger, docsQAAdapter, agentBackends, opencodeServerManager, delegatedBackendInvoker, authHealthMonitor, authRecovery, authTelemetry, readTokenManager, migrationLock, contextWriteGate, buildDelegatedSyncWorker, getDelegatedSyncWorker, rematerializeActiveDmWorkdirs, handleSecretChange, handleGoogleServicesReady, handlePromptContextChanged, keepaliveTimer, browserTaskDeadlineTimer, } = eventPipeline;
|
|
889
|
+
// ── 10.5 Agent Definitions load (AGENT_DEFINITIONS_DESIGN.md §6.1 / §7.1) ──
|
|
890
|
+
// Runs AFTER `runMigrations` (inside `initDatabase`) and BEFORE
|
|
891
|
+
// `scheduler.start()`: scans the built-in + user `agent.md` roots into the
|
|
892
|
+
// `agents` table, builds the live enabled cache the scheduler's per-built-in
|
|
893
|
+
// gate consults, and starts the user-root watcher for live dashboard edits.
|
|
894
|
+
// Crash-proof by contract — a bad YAML never aborts boot.
|
|
895
|
+
const { enabledCache: agentEnabledCache, watcher: agentsWatcher } = bootstrapAgents({ db, config, eventBroadcaster });
|
|
896
|
+
scheduler.setAgentEnabledCache(agentEnabledCache);
|
|
897
|
+
// ── 11. Hono HTTP Server ──
|
|
898
|
+
// Enable webhook fallback: when GitHub webhook is configured at boot,
|
|
899
|
+
// upgrade the existing GitWatcher to webhook mode. (The runtime
|
|
900
|
+
// `handleSecretChange("github")` branch handles the post-boot case.)
|
|
1732
901
|
{
|
|
1733
|
-
const
|
|
1734
|
-
|
|
1735
|
-
|
|
1736
|
-
db,
|
|
1737
|
-
dataDir: config.dataDir,
|
|
1738
|
-
workspaceDir: config.workspaceDir,
|
|
1739
|
-
contextDir: getContextDir(config),
|
|
1740
|
-
secretStore: secretBroker,
|
|
1741
|
-
cadence: readSkillCurationCadence(db),
|
|
1742
|
-
...(opts?.manual ? { manual: true } : {}),
|
|
1743
|
-
...(opts?.targetSkillsOverride ? { targetSkillsOverride: opts.targetSkillsOverride } : {}),
|
|
1744
|
-
}),
|
|
1745
|
-
teardown: teardownOptimizerWorkdir,
|
|
1746
|
-
});
|
|
1747
|
-
}
|
|
1748
|
-
if (isUserPaused(db)) {
|
|
1749
|
-
logger.info("Restored user-paused state, autonomous work remains paused");
|
|
1750
|
-
}
|
|
1751
|
-
emitRoadmapRefreshSink = (source) => dispatcher.emitRoadmapRefresh(source);
|
|
1752
|
-
agentCore.setReadTokenManager?.(readTokenManager);
|
|
1753
|
-
geminiCore.setReadTokenManager?.(readTokenManager);
|
|
1754
|
-
notificationManager.setSignalDetector(signalDetector);
|
|
1755
|
-
let startupComplete = false;
|
|
1756
|
-
let pendingGoogleServicesReady = false;
|
|
1757
|
-
const handleGoogleServicesReady = () => {
|
|
1758
|
-
// Start CalendarPoller if calendar was just hot-loaded AND the
|
|
1759
|
-
// google_calendar integration is in `direct` mode. When the integration
|
|
1760
|
-
// is `delegated`/`disabled` we keep the poller dormant — OAuth is wired
|
|
1761
|
-
// up but the user has explicitly chosen not to poll.
|
|
1762
|
-
if (services.calendar
|
|
1763
|
-
&& !observerManager.has("calendar")
|
|
1764
|
-
&& shouldStartObserversFor(db, "google_calendar")) {
|
|
1765
|
-
const poller = buildCalendarPoller();
|
|
1766
|
-
if (poller) {
|
|
1767
|
-
observerManager.register(poller);
|
|
1768
|
-
void poller.start();
|
|
1769
|
-
logger.info("CalendarPoller started via hot-reload");
|
|
1770
|
-
}
|
|
1771
|
-
}
|
|
1772
|
-
// Trigger morning_routine catchup if today.md is stale or missing
|
|
1773
|
-
// (same logic as runCatchup, ensures schedule generation after first auth)
|
|
1774
|
-
const contextDir = getContextDir(config);
|
|
1775
|
-
const todayMdPath = join(contextDir, "today.md");
|
|
1776
|
-
const needsMorning = !hasFreshAgentDayTodayMd(todayMdPath, config.timezone || undefined, config.dayBoundaryHour);
|
|
1777
|
-
if (needsMorning) {
|
|
1778
|
-
// Morning routine's post-completion hook will also check roadmap staleness.
|
|
1779
|
-
logger.info("Google services ready — today.md stale, queueing morning_routine wake");
|
|
1780
|
-
scheduler.queueMorningRoutineWake("google_auth_ready");
|
|
1781
|
-
return;
|
|
1782
|
-
}
|
|
1783
|
-
// Only refresh roadmap independently when today.md is already current.
|
|
1784
|
-
// If morning_routine is needed, its post-completion hook will handle stale
|
|
1785
|
-
// roadmap regeneration after the day context has been rebuilt.
|
|
1786
|
-
if (isRoadmapStale(contextDir)) {
|
|
1787
|
-
logger.info("Google services ready — roadmap stale, emitting roadmap_refresh");
|
|
1788
|
-
dispatcher.emitRoadmapRefresh("google_auth_ready");
|
|
902
|
+
const startupGitWatcher = observers.getGitWatcher();
|
|
903
|
+
if (startupGitWatcher && secretState.githubWebhookConfigured) {
|
|
904
|
+
startupGitWatcher.enableWebhookMode();
|
|
1789
905
|
}
|
|
1790
|
-
};
|
|
1791
|
-
const handleSecretChange = async (scope) => {
|
|
1792
|
-
switch (scope) {
|
|
1793
|
-
case "slack":
|
|
1794
|
-
await reloadSlackAdapter(true);
|
|
1795
|
-
return;
|
|
1796
|
-
case "telegram":
|
|
1797
|
-
await reloadTelegramAdapter(true);
|
|
1798
|
-
return;
|
|
1799
|
-
case "discord":
|
|
1800
|
-
await reloadDiscordAdapter(true);
|
|
1801
|
-
return;
|
|
1802
|
-
case "notion":
|
|
1803
|
-
await reloadNotionService();
|
|
1804
|
-
// Hot-reload: if the user just added the Notion API key while
|
|
1805
|
-
// the integration is already in `direct` mode, register the
|
|
1806
|
-
// poller now so they don't have to restart the daemon.
|
|
1807
|
-
// Mirrors the calendar-side `handleGoogleServicesReady` path —
|
|
1808
|
-
// the mode-flip route covers `delegated→direct`, and this
|
|
1809
|
-
// covers the orthogonal "key arrives after direct was set"
|
|
1810
|
-
// case. Idempotent via observerManager.has().
|
|
1811
|
-
if (services.notion
|
|
1812
|
-
&& !observerManager.has("notion-poller")
|
|
1813
|
-
&& Object.keys(config.notionDatabaseIds).length > 0
|
|
1814
|
-
&& shouldStartObserversFor(db, "notion")) {
|
|
1815
|
-
const poller = buildNotionPoller();
|
|
1816
|
-
if (poller) {
|
|
1817
|
-
observerManager.register(poller);
|
|
1818
|
-
void poller.start();
|
|
1819
|
-
logger.info("NotionPoller started via hot-reload");
|
|
1820
|
-
}
|
|
1821
|
-
}
|
|
1822
|
-
return;
|
|
1823
|
-
case "github":
|
|
1824
|
-
await reloadGitHubService();
|
|
1825
|
-
if (gitWatcher && secretState.githubWebhookConfigured) {
|
|
1826
|
-
gitWatcher.enableWebhookMode();
|
|
1827
|
-
}
|
|
1828
|
-
return;
|
|
1829
|
-
case "google":
|
|
1830
|
-
await reloadGoogleServices();
|
|
1831
|
-
return;
|
|
1832
|
-
case "apple_calendar":
|
|
1833
|
-
await reloadAppleCalendarService();
|
|
1834
|
-
return;
|
|
1835
|
-
case "apiToken":
|
|
1836
|
-
default:
|
|
1837
|
-
return;
|
|
1838
|
-
}
|
|
1839
|
-
};
|
|
1840
|
-
// ── 11. Hono HTTP Server ──
|
|
1841
|
-
// Enable webhook fallback: when GitHub webhook is configured, reduce GitWatcher frequency
|
|
1842
|
-
const startupGitWatcher = gitWatcher;
|
|
1843
|
-
if (startupGitWatcher && secretState.githubWebhookConfigured) {
|
|
1844
|
-
startupGitWatcher.enableWebhookMode();
|
|
1845
906
|
}
|
|
1846
|
-
|
|
1847
|
-
|
|
1848
|
-
|
|
1849
|
-
|
|
1850
|
-
|
|
1851
|
-
|
|
1852
|
-
|
|
1853
|
-
|
|
1854
|
-
|
|
1855
|
-
|
|
1856
|
-
|
|
1857
|
-
tier_decided: decision.effectiveTier,
|
|
1858
|
-
tier_requested: decision.requestedTier,
|
|
1859
|
-
tier_reason: metadata?.tierReason,
|
|
1860
|
-
dmStalenessStrict: config.dmStalenessStrict,
|
|
1861
|
-
mode: setupMode,
|
|
1862
|
-
invalidatesDmSessions: decision.invalidatesDmSessions,
|
|
1863
|
-
skippedForSetup: decision.skippedForSetup,
|
|
1864
|
-
}, "Prompt context staleness classified");
|
|
1865
|
-
if (decision.skippedForSetup) {
|
|
1866
|
-
logger.info({ path, reason, mode: setupMode }, "Skipping DM session stale flag - setup in progress");
|
|
1867
|
-
}
|
|
1868
|
-
};
|
|
1869
|
-
const app = createApp({
|
|
907
|
+
// §11 Hono server — composed via `bootstrap/api.ts` per
|
|
908
|
+
// `docs/design/appendices/index-bootstrap-stage-split.md` Phase B-3.
|
|
909
|
+
// The factory assembles `ApiDependencies` from the live subsystem
|
|
910
|
+
// refs + the cross-stage closures (`handleSecretChange`,
|
|
911
|
+
// `handleGoogleServicesReady`, `handlePromptContextChanged`,
|
|
912
|
+
// `rematerializeActiveDmWorkdirs`, `fireRoadmapMaintenance`) that
|
|
913
|
+
// remain in this scope until Phase B-4 lifts them into
|
|
914
|
+
// `bootstrap/event-pipeline.ts`. The `overrideGlobalObjects: false`
|
|
915
|
+
// workaround for `@huggingface/transformers`'s cache-put path stays
|
|
916
|
+
// wired inside the factory — see the inline comment there.
|
|
917
|
+
const { server } = startApiServer({
|
|
1870
918
|
db,
|
|
1871
919
|
config,
|
|
1872
920
|
secretBroker,
|
|
1873
|
-
|
|
1874
|
-
|
|
1875
|
-
agentBackends
|
|
921
|
+
services,
|
|
922
|
+
blobStore,
|
|
923
|
+
agentBackends,
|
|
1876
924
|
authHealthMonitor,
|
|
1877
925
|
authRecovery,
|
|
1878
926
|
authTelemetry,
|
|
1879
927
|
eventBus,
|
|
928
|
+
readTokenManager,
|
|
1880
929
|
morningRoutineLock,
|
|
1881
930
|
roadmapWriteLock,
|
|
1882
931
|
migrationLock,
|
|
1883
932
|
contextWriteGate,
|
|
933
|
+
dispatcher,
|
|
934
|
+
sessionManager,
|
|
935
|
+
scheduler,
|
|
936
|
+
agentEnabledCache,
|
|
937
|
+
customRoutineScheduler,
|
|
938
|
+
healthMonitor,
|
|
939
|
+
heartbeat,
|
|
940
|
+
messageHub,
|
|
1884
941
|
observerManager,
|
|
1885
|
-
|
|
942
|
+
contextIndexReconciler,
|
|
943
|
+
primaryVaultWatcher,
|
|
944
|
+
delegatedBackendInvoker,
|
|
1886
945
|
gitAccountRegistry,
|
|
1887
|
-
|
|
1888
|
-
|
|
1889
|
-
|
|
1890
|
-
|
|
1891
|
-
|
|
1892
|
-
|
|
1893
|
-
|
|
1894
|
-
|
|
1895
|
-
|
|
1896
|
-
|
|
1897
|
-
|
|
1898
|
-
|
|
1899
|
-
|
|
1900
|
-
};
|
|
1901
|
-
},
|
|
1902
|
-
getLastTickAt: () => heartbeat.getLastTickAt(),
|
|
1903
|
-
services,
|
|
1904
|
-
isStartupComplete: () => startupComplete,
|
|
946
|
+
// BROWSER_TASK_REDESIGN_PLAN.md §5 / §5.1 — runner + shared slot
|
|
947
|
+
// state. Constructed in event-pipeline; threaded through here so
|
|
948
|
+
// the API surface's POST / GET / cancel routes operate on the
|
|
949
|
+
// same in-memory state as the runner's promote/release cascade.
|
|
950
|
+
browserTaskRunner: eventPipeline.browserTaskRunner,
|
|
951
|
+
browserTaskSlotStateRef: eventPipeline.browserTaskSlotStateRef,
|
|
952
|
+
writeTracker,
|
|
953
|
+
auditLogger,
|
|
954
|
+
attachmentStore,
|
|
955
|
+
dashboardAdapter,
|
|
956
|
+
docsQAAdapter,
|
|
957
|
+
docsIndexer,
|
|
958
|
+
eventBroadcaster,
|
|
1905
959
|
getIntegrationStatus,
|
|
1906
960
|
getMessagingStatus,
|
|
1907
|
-
|
|
1908
|
-
|
|
1909
|
-
|
|
1910
|
-
|
|
1911
|
-
getAutonomousState: () => dispatcher.isAutonomousAllowed() ?? "ok",
|
|
1912
|
-
getNotificationDestinations: () => ({
|
|
1913
|
-
defaultPlatforms: config.defaultNotificationPlatforms,
|
|
1914
|
-
effectiveFallbackPlatforms: messageHub.getEffectiveFallbackPlatforms(),
|
|
1915
|
-
}),
|
|
1916
|
-
getIntegrationDriftSyncStatus: () => delegatedSyncWorker?.getStatus() ?? {
|
|
1917
|
-
workerRunning: false,
|
|
1918
|
-
lastSuccessAt: null,
|
|
1919
|
-
circuitState: "ok",
|
|
1920
|
-
activeHours: { startHour: 4, endHour: 24 },
|
|
1921
|
-
withinActiveHours: false,
|
|
1922
|
-
cadences: {},
|
|
1923
|
-
unrecognizedIntervalKeys: [],
|
|
1924
|
-
ttlContractViolations: [],
|
|
1925
|
-
},
|
|
1926
|
-
// delegated-sync opt-in routes consume the live worker reference for
|
|
1927
|
-
// cadence Run Now + status snapshot. When no integration is in
|
|
1928
|
-
// delegated mode the worker is null and the routes report a
|
|
1929
|
-
// worker_unavailable / empty-status response — see
|
|
1930
|
-
// `docs/design/appendices/delegated-sync-opt-in.md`.
|
|
1931
|
-
get delegatedSyncWorker() {
|
|
1932
|
-
return delegatedSyncWorker ?? undefined;
|
|
1933
|
-
},
|
|
1934
|
-
sendNotification: async ({ message, platforms, priority, notificationType, originSessionId, }) => {
|
|
1935
|
-
const dispatchId = randomBytes(16).toString("hex");
|
|
1936
|
-
const deliveries = await messageHub.sendToUser(message, platforms, {
|
|
1937
|
-
dispatchId,
|
|
1938
|
-
notificationType: notificationType ?? "agent",
|
|
1939
|
-
priority: priority ?? "normal",
|
|
1940
|
-
contentSummary: message.slice(0, 200),
|
|
1941
|
-
});
|
|
1942
|
-
if (deliveries.length > 0) {
|
|
1943
|
-
const insert = db.prepare(`INSERT INTO notification_log (
|
|
1944
|
-
dispatch_id,
|
|
1945
|
-
notification_type,
|
|
1946
|
-
priority,
|
|
1947
|
-
platform,
|
|
1948
|
-
delivery_channel,
|
|
1949
|
-
delivery_message_id,
|
|
1950
|
-
content_summary,
|
|
1951
|
-
status,
|
|
1952
|
-
delivered_at
|
|
1953
|
-
)
|
|
1954
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, 'delivered', CURRENT_TIMESTAMP)`);
|
|
1955
|
-
for (const delivery of deliveries) {
|
|
1956
|
-
insert.run(dispatchId, notificationType ?? "agent", priority ?? "normal", delivery.platform, delivery.channel, delivery.messageId ?? null, message.slice(0, 200));
|
|
1957
|
-
}
|
|
1958
|
-
recordProactiveForwardDeliveries({
|
|
1959
|
-
db,
|
|
1960
|
-
config,
|
|
1961
|
-
deliveries,
|
|
1962
|
-
content: message,
|
|
1963
|
-
dispatchId,
|
|
1964
|
-
dispatchIds: [dispatchId],
|
|
1965
|
-
originSessionIds: originSessionId !== undefined ? [originSessionId] : [],
|
|
1966
|
-
notificationType: "proactive_forward",
|
|
1967
|
-
});
|
|
1968
|
-
}
|
|
1969
|
-
return { dispatchId, deliveries };
|
|
1970
|
-
},
|
|
1971
|
-
markEventNotified: (correlationId) => {
|
|
1972
|
-
dispatcher.markEventNotified(correlationId);
|
|
1973
|
-
},
|
|
961
|
+
isStartupComplete: () => startupComplete,
|
|
962
|
+
getDelegatedSyncWorker,
|
|
963
|
+
handleSecretChange,
|
|
964
|
+
handlePromptContextChanged,
|
|
1974
965
|
onGoogleServicesReady: () => {
|
|
1975
966
|
if (!startupComplete) {
|
|
1976
967
|
pendingGoogleServicesReady = true;
|
|
@@ -1979,261 +970,24 @@ async function startup() {
|
|
|
1979
970
|
}
|
|
1980
971
|
handleGoogleServicesReady();
|
|
1981
972
|
},
|
|
1982
|
-
|
|
1983
|
-
|
|
1984
|
-
|
|
1985
|
-
|
|
1986
|
-
|
|
1987
|
-
|
|
1988
|
-
|
|
1989
|
-
|
|
1990
|
-
|
|
1991
|
-
|
|
1992
|
-
|
|
1993
|
-
|
|
1994
|
-
|
|
1995
|
-
|
|
1996
|
-
|
|
1997
|
-
|
|
1998
|
-
|
|
1999
|
-
db,
|
|
2000
|
-
observerManager,
|
|
2001
|
-
buildObserver,
|
|
2002
|
-
buildDelegatedSyncWorker,
|
|
2003
|
-
buildGitDelegatedCronObserver,
|
|
2004
|
-
// DELEGATED-PROXY-API-DESIGN.md Phase F (§4.8) — every mode
|
|
2005
|
-
// change re-materializes active DM workdirs so the next turn
|
|
2006
|
-
// picks up the new skill body / accounts.md / instruction file
|
|
2007
|
-
// without tearing down the SDK session.
|
|
2008
|
-
rematerializeDmSessions: (reason) => {
|
|
2009
|
-
const result = rematerializeActiveDmWorkdirs(reason);
|
|
2010
|
-
if (!result)
|
|
2011
|
-
return;
|
|
2012
|
-
logger.info({ reason, ...result.summary }, "Integration mode changed — DM session workdirs re-materialized");
|
|
2013
|
-
},
|
|
2014
|
-
}, key, prev, next);
|
|
2015
|
-
if (key === "git" && next.mode !== "direct") {
|
|
2016
|
-
gitWatcher = null;
|
|
2017
|
-
}
|
|
2018
|
-
},
|
|
2019
|
-
onMainBackendChange: (reason) => {
|
|
2020
|
-
// DELEGATED-MODE-V2-DESIGN.md §4.4 — every main-backend flip
|
|
2021
|
-
// re-materializes active DM workdirs so the next turn's skill
|
|
2022
|
-
// variant and instruction file reflect the new same- vs.
|
|
2023
|
-
// cross-backend topology. Mirrors the `onMailScopeChanged`
|
|
2024
|
-
// pattern: helper handles the "no active sessions" no-op + per-
|
|
2025
|
-
// session failure containment, and we broadcast a structured
|
|
2026
|
-
// event so the dashboard can refresh without polling.
|
|
2027
|
-
const result = rematerializeActiveDmWorkdirs(reason);
|
|
2028
|
-
if (!result)
|
|
2029
|
-
return;
|
|
2030
|
-
logger.info({ reason, ...result.summary }, "Main backend changed — DM session workdirs re-materialized");
|
|
2031
|
-
eventBroadcaster.broadcastEvent({
|
|
2032
|
-
kind: "main_backend_changed",
|
|
2033
|
-
reason,
|
|
2034
|
-
...result.summary,
|
|
2035
|
-
});
|
|
2036
|
-
},
|
|
2037
|
-
onSetupStart: (mode) => {
|
|
2038
|
-
dispatcher.beginSetupMode(mode);
|
|
2039
|
-
},
|
|
2040
|
-
onSecretChanged: handleSecretChange,
|
|
2041
|
-
onSetupComplete: () => {
|
|
2042
|
-
dispatcher.clearSetupMode();
|
|
2043
|
-
// Kick off an immediate morning routine so today.md is generated
|
|
2044
|
-
// right away — otherwise the user completes setup mid-day and sits
|
|
2045
|
-
// without a populated today.md until 04:00 next morning. We go
|
|
2046
|
-
// through the scheduler's queueMorningRoutineWake so:
|
|
2047
|
-
// - the dedup check prevents a double-run if startup catchup was
|
|
2048
|
-
// about to kick off the same routine (race on first boot after
|
|
2049
|
-
// setup completes)
|
|
2050
|
-
// - the wake task is durable: if the daemon crashes before the
|
|
2051
|
-
// routine runs, it replays on restart via ScheduleWatcher
|
|
2052
|
-
// - ScheduleWatcher obeys the autonomous-work gate, so in the
|
|
2053
|
-
// unlikely case clearSetupMode fails to persist, the gate
|
|
2054
|
-
// still prevents the routine from running mid-setup.
|
|
2055
|
-
// Don't emit roadmap_refresh here — skeleton has "(Not yet configured)"
|
|
2056
|
-
// which isRoadmapStale() detects. The refresh will be triggered by:
|
|
2057
|
-
// - morning_routine's post-completion hook, or
|
|
2058
|
-
// - onGoogleServicesReady (once calendar auth completes)
|
|
2059
|
-
// This avoids generating a roadmap before calendar data is available.
|
|
2060
|
-
try {
|
|
2061
|
-
scheduler.queueMorningRoutineWake("setup_complete");
|
|
2062
|
-
}
|
|
2063
|
-
catch (err) {
|
|
2064
|
-
logger.error({ err }, "Failed to queue post-setup morning routine — today.md will not be generated until next 04:00");
|
|
2065
|
-
}
|
|
2066
|
-
// Fire-and-forget: greet the user on every connected messaging
|
|
2067
|
-
// platform exactly once. The runtime_state latch inside the helper
|
|
2068
|
-
// makes this idempotent across repeated setup completions.
|
|
2069
|
-
void sendSetupWelcomeDm({ db, messageHub }).catch((err) => {
|
|
2070
|
-
logger.error({ err }, "Welcome DM dispatch crashed");
|
|
2071
|
-
});
|
|
2072
|
-
},
|
|
2073
|
-
onPromptContextChanged: (path, reason, tier, metadata) => {
|
|
2074
|
-
// Layer-3 defense for the Customize Your Rules bug: even if the
|
|
2075
|
-
// setup conversation's own agent writes to today/roadmap/management-
|
|
2076
|
-
// rules mid-flight (not typical, but possible via skills), we must
|
|
2077
|
-
// NOT mark the owner-DM session stale. Marking stale would refresh
|
|
2078
|
-
// the conversation_sessions row on the next turn, drop the stored
|
|
2079
|
-
// Claude SDK session_id, and force a fresh `setup.initial` execute
|
|
2080
|
-
// that loses prior Q&A history. Layers 1 (autonomous-work gate)
|
|
2081
|
-
// and 2 (scope-agnostic currentSetupMode) keep prompt selection
|
|
2082
|
-
// correct, but only layer 3 preserves in-conversation continuity.
|
|
2083
|
-
// For loud-tier changes, persist the change moment FIRST so a crash
|
|
2084
|
-
// between the DB write and stale-flag update still leaves the durable
|
|
2085
|
-
// signal in place — the in-memory flag on SessionManager is lost on
|
|
2086
|
-
// restart, so if it were written before the DB write we could lose
|
|
2087
|
-
// the signal entirely on a process crash mid-hook.
|
|
2088
|
-
//
|
|
2089
|
-
// The persisted `dashboard_context_changed_at` is consulted by both
|
|
2090
|
-
// `continueDashboardSession` (resume path) and `getOrCreateDm`
|
|
2091
|
-
// (every DM turn) to decide whether the stored SDK session has gone
|
|
2092
|
-
// stale and must be discarded before resume.
|
|
2093
|
-
handlePromptContextChanged(path, reason, tier, metadata);
|
|
2094
|
-
},
|
|
2095
|
-
onIndexableContextChange: (_path) => {
|
|
2096
|
-
// API-route hint: any successful PUT/PATCH/DELETE under `/context/*`
|
|
2097
|
-
// queues a reconcile. The observer's own chokidar watcher already
|
|
2098
|
-
// catches manual edits the API bypasses (e.g. the user editing via
|
|
2099
|
-
// Obsidian when contextDir *is* the Obsidian vault) — this hint
|
|
2100
|
-
// shortens reconcile latency for API-origin writes from chokidar
|
|
2101
|
-
// debounce + stabilityThreshold to the observer's 10s debounce. The
|
|
2102
|
-
// reconciler short-circuits when nothing changed, so firing for
|
|
2103
|
-
// non-indexed paths is harmless.
|
|
2104
|
-
contextIndexReconciler.requestReconcile("manual");
|
|
2105
|
-
},
|
|
2106
|
-
onCustomRoutinesChanged: () => {
|
|
2107
|
-
try {
|
|
2108
|
-
customRoutineScheduler.reload();
|
|
2109
|
-
}
|
|
2110
|
-
catch (err) {
|
|
2111
|
-
logger.error({ err }, "Custom routine reload failed");
|
|
2112
|
-
}
|
|
2113
|
-
},
|
|
2114
|
-
triggerHourlyCheck: (source, options) => dispatcher.triggerHourlyCheck(source, options),
|
|
2115
|
-
triggerRoadmapRefresh: (source, options) => dispatcher.emitRoadmapRefresh(source, options),
|
|
2116
|
-
endDashboardSession: (channelId) => endDashboardSessionFromChannel({
|
|
2117
|
-
sessionManager,
|
|
2118
|
-
channelId,
|
|
2119
|
-
}),
|
|
2120
|
-
continueDashboardSession: async (sessionId) => continueDashboardSessionFromHistory({
|
|
2121
|
-
db,
|
|
2122
|
-
dataDir: config.dataDir,
|
|
2123
|
-
sessionManager,
|
|
2124
|
-
sessionId,
|
|
2125
|
-
}),
|
|
2126
|
-
writeTracker,
|
|
2127
|
-
blobStore,
|
|
2128
|
-
dashboardAdapter,
|
|
2129
|
-
eventBroadcaster,
|
|
2130
|
-
attachmentStore,
|
|
2131
|
-
auditLogger,
|
|
2132
|
-
validateAttachmentTurnToken: (token) => dispatcher.validateAttachmentTurnToken(token),
|
|
2133
|
-
whatsappControls: {
|
|
2134
|
-
isInitialized: () => adapterState.whatsapp !== null,
|
|
2135
|
-
enable: async () => {
|
|
2136
|
-
const adapter = buildWhatsAppAdapter();
|
|
2137
|
-
if (adapter.getStatus() === "disabled") {
|
|
2138
|
-
await adapter.start();
|
|
2139
|
-
}
|
|
2140
|
-
},
|
|
2141
|
-
disable: async () => {
|
|
2142
|
-
await teardownWhatsAppAdapter();
|
|
2143
|
-
},
|
|
2144
|
-
requestQr: async () => {
|
|
2145
|
-
if (!adapterState.whatsapp) {
|
|
2146
|
-
await enableWhatsAppAdapter();
|
|
2147
|
-
}
|
|
2148
|
-
await adapterState.whatsapp.requestQR();
|
|
2149
|
-
},
|
|
2150
|
-
waitForQr: async (timeoutMs = 10_000) => {
|
|
2151
|
-
if (!adapterState.whatsapp) {
|
|
2152
|
-
await enableWhatsAppAdapter();
|
|
2153
|
-
}
|
|
2154
|
-
const snapshot = await adapterState.whatsapp.waitForQr(timeoutMs);
|
|
2155
|
-
return whatsappQrResponseFromAdapter(adapterState.whatsapp, snapshot);
|
|
2156
|
-
},
|
|
2157
|
-
getQrResponse: () => whatsappQrResponseFromAdapter(adapterState.whatsapp),
|
|
2158
|
-
reset: async (timeoutMs = 10_000) => {
|
|
2159
|
-
// 1. Stop + unregister any live adapter so no Baileys callbacks fire
|
|
2160
|
-
// against the auth dir while we delete it.
|
|
2161
|
-
await teardownWhatsAppAdapter();
|
|
2162
|
-
// 2. Wipe Baileys' multi-file auth state. Without this, a fresh
|
|
2163
|
-
// enable() would re-load the stale creds and never emit a QR —
|
|
2164
|
-
// which is exactly the "前のデータが残っているのか pair できない"
|
|
2165
|
-
// failure mode the dashboard's "Reset connection" button exists
|
|
2166
|
-
// to recover from. Recursive + force so a partially-written dir
|
|
2167
|
-
// (e.g. only qr.txt present, no creds.json yet) still wipes
|
|
2168
|
-
// cleanly. `force: true` also no-ops if the dir is already gone.
|
|
2169
|
-
const authDir = config.whatsappAuthDir ?? join(config.dataDir, "whatsapp", "auth");
|
|
2170
|
-
try {
|
|
2171
|
-
rmSync(authDir, { recursive: true, force: true });
|
|
2172
|
-
}
|
|
2173
|
-
catch (err) {
|
|
2174
|
-
logger.warn({ err, authDir }, "Failed to wipe WhatsApp auth directory during reset");
|
|
2175
|
-
}
|
|
2176
|
-
// 3. Drop the cached owner_channels mapping so a freshly-paired
|
|
2177
|
-
// session re-discovers the channel id from the inbound auth
|
|
2178
|
-
// handshake rather than reusing the prior LID alias.
|
|
2179
|
-
try {
|
|
2180
|
-
db
|
|
2181
|
-
.prepare("DELETE FROM owner_channels WHERE platform = ?")
|
|
2182
|
-
.run("whatsapp");
|
|
2183
|
-
}
|
|
2184
|
-
catch (err) {
|
|
2185
|
-
logger.warn({ err }, "Failed to clear WhatsApp owner_channels row during reset");
|
|
2186
|
-
}
|
|
2187
|
-
// 4. If the integration is still enabled, rebuild the adapter and
|
|
2188
|
-
// await the first scannable QR so the dashboard can render it
|
|
2189
|
-
// in the same request that triggered the reset.
|
|
2190
|
-
if (!config.whatsappEnabled) {
|
|
2191
|
-
return whatsappQrResponseFromAdapter(null);
|
|
2192
|
-
}
|
|
2193
|
-
await enableWhatsAppAdapter();
|
|
2194
|
-
const snapshot = await adapterState.whatsapp.waitForQr(timeoutMs);
|
|
2195
|
-
return whatsappQrResponseFromAdapter(adapterState.whatsapp, snapshot);
|
|
2196
|
-
},
|
|
2197
|
-
},
|
|
2198
|
-
messagingControls: {
|
|
2199
|
-
telegram: buildTelegramControls(),
|
|
2200
|
-
slack: buildSlackControls(),
|
|
2201
|
-
discord: buildDiscordControls(),
|
|
2202
|
-
},
|
|
973
|
+
rematerializeActiveDmWorkdirs,
|
|
974
|
+
fireRoadmapMaintenance,
|
|
975
|
+
buildCalendarPoller,
|
|
976
|
+
buildNotionPoller,
|
|
977
|
+
buildGitWatcher,
|
|
978
|
+
buildGithubPoller,
|
|
979
|
+
buildDelegatedSyncWorker,
|
|
980
|
+
buildGitDelegatedCronObserver,
|
|
981
|
+
clearGitWatcher: observers.clearGitWatcher,
|
|
982
|
+
adapterState,
|
|
983
|
+
buildWhatsAppAdapter,
|
|
984
|
+
teardownWhatsAppAdapter,
|
|
985
|
+
enableWhatsAppAdapter,
|
|
986
|
+
buildTelegramControls,
|
|
987
|
+
buildSlackControls,
|
|
988
|
+
buildDiscordControls,
|
|
989
|
+
queueGitProjectInitsForCurrentConfig,
|
|
2203
990
|
});
|
|
2204
|
-
// Mount /api/docs/* (DOCS_QA_DESIGN.md §10.4 + DOCS_QA_B7_DESIGN.md
|
|
2205
|
-
// §S5–S6) after createApp so the indexer handle and the QA SSE
|
|
2206
|
-
// adapter can be threaded in without extending ApiDependencies. The
|
|
2207
|
-
// read endpoints don't need messaging/dispatcher deps; the QA
|
|
2208
|
-
// POST/SSE pair leans on `docsQAAdapter` to register clients and
|
|
2209
|
-
// enqueue docs_qa events.
|
|
2210
|
-
app.route("/api", createDocsRoutes({
|
|
2211
|
-
db,
|
|
2212
|
-
...(docsIndexer ? { indexer: docsIndexer } : {}),
|
|
2213
|
-
docsQAAdapter,
|
|
2214
|
-
}));
|
|
2215
|
-
const server = serve({
|
|
2216
|
-
fetch: app.fetch,
|
|
2217
|
-
hostname: "127.0.0.1",
|
|
2218
|
-
port: config.apiPort,
|
|
2219
|
-
// @hono/node-server's getRequestListener defaults to replacing
|
|
2220
|
-
// `globalThis.Request` / `globalThis.Response` with its own lazy
|
|
2221
|
-
// wrapper classes (named `_Request` / `_Response`) for response-
|
|
2222
|
-
// body materialization performance. The wrappers are prototype-
|
|
2223
|
-
// chained to the native classes — fine for Hono's own response
|
|
2224
|
-
// path — but they break `instanceof Response` checks for objects
|
|
2225
|
-
// returned by native `fetch()`, because a native Response's
|
|
2226
|
-
// prototype chain doesn't include `_Response.prototype`. This
|
|
2227
|
-
// makes `@huggingface/transformers`'s `toCacheResponse` check
|
|
2228
|
-
// (`response instanceof Response && response.status === 200`)
|
|
2229
|
-
// evaluate to false on fresh fetches, which silently skips
|
|
2230
|
-
// `cache.put` and then throws "Unable to get model file path or
|
|
2231
|
-
// buffer." Disabling the override keeps the native globals
|
|
2232
|
-
// intact and costs us nothing — we don't construct Hono's
|
|
2233
|
-
// `Response` instances directly anywhere in the daemon.
|
|
2234
|
-
overrideGlobalObjects: false,
|
|
2235
|
-
});
|
|
2236
|
-
logger.info({ port: config.apiPort }, "API server listening");
|
|
2237
991
|
void dispatcher.run(); // Start consuming dashboard events as soon as the API is live
|
|
2238
992
|
// Notifications Center heartbeat (docs/design/20-notifications-center.md
|
|
2239
993
|
// §"Daemon heartbeat"). MUST start immediately after the API server is
|
|
@@ -2246,9 +1000,24 @@ async function startup() {
|
|
|
2246
1000
|
// minutes, so this ordering is load-bearing, not cosmetic.
|
|
2247
1001
|
heartbeat.start();
|
|
2248
1002
|
// ── 12. Catchup (recover missed actions after restart) ──
|
|
2249
|
-
// Register day boundary callback: summarize DM sessions at 4 AM before
|
|
1003
|
+
// Register day boundary callback: summarize DM sessions at 4 AM before
|
|
1004
|
+
// morning routine. Then fan out one
|
|
1005
|
+
// `routine.research_cluster_update` event per active browser-history
|
|
1006
|
+
// research cluster with new activity in the last 24h
|
|
1007
|
+
// (BROWSER_HISTORY_INTEGRATION_PLAN §10.6 step 3). The fan-out is
|
|
1008
|
+
// bounded at 25 clusters / cycle; backlog clusters surface on the
|
|
1009
|
+
// next day-boundary tick.
|
|
2250
1010
|
scheduler.setDayBoundaryCallback(async () => {
|
|
2251
1011
|
await dispatcher.summarizeDmSessions();
|
|
1012
|
+
try {
|
|
1013
|
+
const result = await fanoutResearchClusterUpdates(db, eventBus);
|
|
1014
|
+
if (result.enqueuedSlugs.length > 0) {
|
|
1015
|
+
logger.info({ enqueuedSlugs: result.enqueuedSlugs }, "Research cluster updates enqueued at day boundary");
|
|
1016
|
+
}
|
|
1017
|
+
}
|
|
1018
|
+
catch (err) {
|
|
1019
|
+
logger.error({ err }, "Research cluster update fan-out failed; will retry next day boundary");
|
|
1020
|
+
}
|
|
2252
1021
|
});
|
|
2253
1022
|
// Register direct DM callback: sends scheduled messages without running an agent
|
|
2254
1023
|
scheduler.setSendDmCallback(async (message, platforms) => {
|
|
@@ -2275,18 +1044,76 @@ async function startup() {
|
|
|
2275
1044
|
// means a reconcile during setup.initial does not destroy in-flight
|
|
2276
1045
|
// setup session state — see the matching `onPromptContextChanged`
|
|
2277
1046
|
// handler in the createApp dependencies above for the layered guards.
|
|
2278
|
-
|
|
1047
|
+
observers.setPromptContextChangedSink(handlePromptContextChanged);
|
|
1048
|
+
// Evening-review slimdown §2.2 — daily mechanical roadmap.md
|
|
1049
|
+
// maintenance at 17:45 local. The pass acquires the same
|
|
1050
|
+
// `roadmapWriteLock` singleton the dispatcher uses for
|
|
1051
|
+
// `routine.roadmap_refresh` so a refresh mid-flight (rare at that
|
|
1052
|
+
// time of day) defers the maintenance to the next tick instead of
|
|
1053
|
+
// racing. `writeTracker.markWriting` tags the resulting fs event as
|
|
1054
|
+
// agent-originated so the Obsidian / Git observers do not loop on
|
|
1055
|
+
// their own output.
|
|
1056
|
+
// Shared closure used by both the 17:45 cron callback above and the
|
|
1057
|
+
// `triggerRoadmapMaintenance` API dependency wired into `createApp`.
|
|
1058
|
+
// Keeping a single fire site means the cron path and the
|
|
1059
|
+
// `aitne run-now roadmap_maintenance` path operate on identical deps
|
|
1060
|
+
// — no drift between the scheduled and the manual surface.
|
|
1061
|
+
//
|
|
1062
|
+
// Async because the runner now wraps its roadmap.md write in the
|
|
1063
|
+
// per-path serializer (avoids HTTP-vs-direct clobbers). Callers
|
|
1064
|
+
// must await or fire-and-forget through `.catch`.
|
|
1065
|
+
function fireRoadmapMaintenance() {
|
|
1066
|
+
return runRoadmapMechanicalMaintenance({
|
|
1067
|
+
db,
|
|
1068
|
+
contextDir: getContextDir(config, db),
|
|
1069
|
+
roadmapWriteLock,
|
|
1070
|
+
writeTracker,
|
|
1071
|
+
timezone: config.timezone || undefined,
|
|
1072
|
+
onIndexableContextChange: () => contextIndexReconciler.requestReconcile("manual"),
|
|
1073
|
+
});
|
|
1074
|
+
}
|
|
1075
|
+
scheduler.setRoadmapMaintenanceCallback(() => {
|
|
1076
|
+
fireRoadmapMaintenance().catch((err) => {
|
|
1077
|
+
logger.error({ err }, "runRoadmapMechanicalMaintenance threw");
|
|
1078
|
+
});
|
|
1079
|
+
});
|
|
1080
|
+
// BROWSER_HISTORY_INTEGRATION_PLAN §5.F2 P4a — pre-morning digest
|
|
1081
|
+
// job. Fires at `dayBoundaryHour − 1` local, gated by the same
|
|
1082
|
+
// integration-state check that hides the rest of the browser-history
|
|
1083
|
+
// surface when the user has set `browser_history` to `disabled`.
|
|
1084
|
+
// The callback owns its own try/catch (`safeRunPreMorningDigestJob`)
|
|
1085
|
+
// so a transient SQL or fs failure never crashes the cron tick.
|
|
1086
|
+
scheduler.setBrowserHistoryPreMorningDigestCallback(() => {
|
|
1087
|
+
if (!shouldStartObserversFor(db, "browser_history"))
|
|
1088
|
+
return;
|
|
1089
|
+
safeRunPreMorningDigestJob({
|
|
1090
|
+
db,
|
|
1091
|
+
contextDir: getContextDir(config, db),
|
|
1092
|
+
boundary: {
|
|
1093
|
+
timezone: config.timezone || undefined,
|
|
1094
|
+
dayBoundaryHour: config.dayBoundaryHour,
|
|
1095
|
+
},
|
|
1096
|
+
});
|
|
1097
|
+
});
|
|
2279
1098
|
// Phase 4 auth probe — runs BEFORE the hourly check on each cron
|
|
2280
1099
|
// tick so auth health detection happens independently of the
|
|
2281
1100
|
// observation-threshold gate. checkAll() owns its own kill switch
|
|
2282
1101
|
// (authProbeDisabled), morning-routine skip, and in-flight dedupe.
|
|
2283
1102
|
scheduler.setAuthProbeCallback(() => authHealthMonitor.checkAll());
|
|
2284
|
-
// Wire the autonomous-work gate: when
|
|
1103
|
+
// Wire the autonomous-work gate: when policies/management.md is missing
|
|
2285
1104
|
// or a setup conversation is active, the scheduler pauses cron routines
|
|
2286
1105
|
// and ScheduleWatcher claims. This prevents any autonomous turn from
|
|
2287
1106
|
// racing with the dashboard setup flow and triggering the stale-session
|
|
2288
1107
|
// bug that killed setup mode mid-conversation.
|
|
2289
1108
|
scheduler.setAutonomousGate(() => dispatcher.isAutonomousAllowed());
|
|
1109
|
+
// Pre-routine morning_routine gate (sleep-skip recovery). When the
|
|
1110
|
+
// current agent-day's morning_routine has not completed yet — typical
|
|
1111
|
+
// cause: Mac slept through the 04:00 cron tick — hourly_check and the
|
|
1112
|
+
// review routines enqueue a wake row instead of running on stale state.
|
|
1113
|
+
// Wired here after both `dispatcher` and `scheduler` exist so the
|
|
1114
|
+
// binding is a single, stable function reference for the duration of
|
|
1115
|
+
// the process.
|
|
1116
|
+
dispatcher.setQueueMorningRoutineWake((source, options) => scheduler.queueMorningRoutineWake(source, options));
|
|
2290
1117
|
const startupCatchup = await runCatchup(db, dispatcher, config);
|
|
2291
1118
|
// ── 13. Start all components ──
|
|
2292
1119
|
await messageHub.startAll();
|
|
@@ -2294,15 +1121,58 @@ async function startup() {
|
|
|
2294
1121
|
customRoutineScheduler.start();
|
|
2295
1122
|
signalDetector.start();
|
|
2296
1123
|
const registeredPlatforms = messageHub.getPlatforms();
|
|
2297
|
-
|
|
2298
|
-
|
|
2299
|
-
|
|
2300
|
-
|
|
2301
|
-
|
|
2302
|
-
|
|
2303
|
-
|
|
2304
|
-
|
|
2305
|
-
|
|
1124
|
+
// Single-app installs (Telegram-only / Discord-only / etc.) would
|
|
1125
|
+
// otherwise log "Primary platform is not registered, falling back" on
|
|
1126
|
+
// every boot because the schema default is "slack" and the fallback was
|
|
1127
|
+
// never persisted. The resolver checks whether the operator ever made
|
|
1128
|
+
// an explicit choice (DB settings row or `PA_PRIMARY_PLATFORM` env);
|
|
1129
|
+
// when they didn't, we adopt and persist the first eligible adapter so
|
|
1130
|
+
// the next boot is silent.
|
|
1131
|
+
//
|
|
1132
|
+
// "First set up" semantics for the multi-adapter case (spec: when
|
|
1133
|
+
// multiple adapters are configured, the first one paired wins) come from
|
|
1134
|
+
// `selectFirstPairedPlatform`, which reads `owner_channels.rowid` ASC —
|
|
1135
|
+
// a chronological proxy that captures the first platform to complete
|
|
1136
|
+
// the cred+pairing loop. The single-adapter case (the common one)
|
|
1137
|
+
// collapses to "the only eligible adapter" without touching the DB.
|
|
1138
|
+
const explicitEnvPrimary = process.env.PA_PRIMARY_PLATFORM?.trim();
|
|
1139
|
+
const action = resolvePrimaryPlatform({
|
|
1140
|
+
configuredPrimary: config.primaryPlatform,
|
|
1141
|
+
primaryAdapterRegistered: !!messageHub.getAdapter(config.primaryPlatform),
|
|
1142
|
+
registeredPlatforms,
|
|
1143
|
+
effectiveFallback: selectFirstPairedPlatform(db, messageHub.getEffectiveFallbackPlatforms()),
|
|
1144
|
+
userExplicitlySetPrimary: "primaryPlatform" in persistedSettings
|
|
1145
|
+
|| (explicitEnvPrimary !== undefined && explicitEnvPrimary.length > 0),
|
|
1146
|
+
});
|
|
1147
|
+
if (action.kind === "switch") {
|
|
1148
|
+
if (action.reason === "auto-resolve") {
|
|
1149
|
+
logger.info({
|
|
1150
|
+
previousPrimary: config.primaryPlatform,
|
|
1151
|
+
autoResolvedPrimary: action.newPrimary,
|
|
1152
|
+
}, "Primary platform unset; auto-resolving to first configured messaging app");
|
|
1153
|
+
}
|
|
1154
|
+
else {
|
|
1155
|
+
logger.warn({
|
|
1156
|
+
requestedPrimary: config.primaryPlatform,
|
|
1157
|
+
fallbackPrimary: action.newPrimary,
|
|
1158
|
+
}, "Primary platform is not registered, falling back (preference kept; restore the adapter to revert)");
|
|
1159
|
+
}
|
|
1160
|
+
messageHub.setPrimaryPlatform(action.newPrimary);
|
|
1161
|
+
config.primaryPlatform = action.newPrimary;
|
|
1162
|
+
if (action.persist) {
|
|
1163
|
+
try {
|
|
1164
|
+
settingsStore.set("primaryPlatform", action.newPrimary);
|
|
1165
|
+
}
|
|
1166
|
+
catch (err) {
|
|
1167
|
+
logger.warn({ err }, "Failed to persist auto-resolved primaryPlatform; next boot will repeat the resolution");
|
|
1168
|
+
}
|
|
1169
|
+
}
|
|
1170
|
+
}
|
|
1171
|
+
else if (action.kind === "no-fallback") {
|
|
1172
|
+
logger.warn({
|
|
1173
|
+
configuredPrimary: config.primaryPlatform,
|
|
1174
|
+
registeredPlatforms,
|
|
1175
|
+
}, "Primary platform adapter not registered and no eligible messaging fallback found");
|
|
2306
1176
|
}
|
|
2307
1177
|
await observerManager.startAll();
|
|
2308
1178
|
// Start the integrations.md fs-watcher after the observer manager is up so
|
|
@@ -2332,12 +1202,15 @@ async function startup() {
|
|
|
2332
1202
|
destinationMode: "configured_only",
|
|
2333
1203
|
});
|
|
2334
1204
|
},
|
|
2335
|
-
}
|
|
1205
|
+
},
|
|
1206
|
+
// V18 — chokidar must watch the post-restructure path under contextDir
|
|
1207
|
+
// (Obsidian-mode users have a non-default vault root).
|
|
1208
|
+
getContextDir(config, db));
|
|
2336
1209
|
}
|
|
2337
1210
|
catch (err) {
|
|
2338
1211
|
logger.error({ err }, "integrations.md watcher failed to start");
|
|
2339
1212
|
}
|
|
2340
|
-
// Start the
|
|
1213
|
+
// Start the policies/management.md fs-watcher alongside its integrations.md
|
|
2341
1214
|
// sibling so hand-edits to A-section bindings flow back into the DB. The
|
|
2342
1215
|
// watcher is a no-op when the post-setup branch above did not run
|
|
2343
1216
|
// (contextDir absent), since chokidar against a missing path is silent.
|
|
@@ -2346,7 +1219,7 @@ async function startup() {
|
|
|
2346
1219
|
managementRegistryWatcher = startManagementRegistryWatcher(getContextDir(config), db);
|
|
2347
1220
|
}
|
|
2348
1221
|
catch (err) {
|
|
2349
|
-
logger.error({ err }, "
|
|
1222
|
+
logger.error({ err }, "policies/management.md watcher failed to start");
|
|
2350
1223
|
}
|
|
2351
1224
|
}
|
|
2352
1225
|
healthMonitor.start();
|
|
@@ -2416,7 +1289,16 @@ async function startup() {
|
|
|
2416
1289
|
signalDetector.stop();
|
|
2417
1290
|
notificationManager.stop(); // Clear pending batch-flush timer
|
|
2418
1291
|
authRecovery.shutdown(); // Kill any active recovery subprocesses
|
|
1292
|
+
// docs/design/appendices/opencode-backend.md Phase 2 — stop the loopback opencode
|
|
1293
|
+
// server (if any) so the spawned child releases its port. shutdown()
|
|
1294
|
+
// is idempotent; lazy-spawned managers that never booted no-op.
|
|
1295
|
+
await opencodeServerManager.shutdown().catch((err) => {
|
|
1296
|
+
logger.warn({ err }, "opencode server manager shutdown failed");
|
|
1297
|
+
});
|
|
2419
1298
|
clearInterval(vaultHealthTimer);
|
|
1299
|
+
clearInterval(keepaliveTimer);
|
|
1300
|
+
// BROWSER_TASK_REDESIGN_PLAN.md §5 / §5.1 — 30 s deadline tick.
|
|
1301
|
+
clearInterval(browserTaskDeadlineTimer);
|
|
2420
1302
|
clearTimeout(migrationBackupSweepInitial);
|
|
2421
1303
|
clearInterval(migrationBackupSweepTimer);
|
|
2422
1304
|
if (managementMdWatcher) {
|
|
@@ -2426,7 +1308,7 @@ async function startup() {
|
|
|
2426
1308
|
}
|
|
2427
1309
|
if (managementRegistryWatcher) {
|
|
2428
1310
|
await managementRegistryWatcher.stop().catch((err) => {
|
|
2429
|
-
logger.warn({ err }, "
|
|
1311
|
+
logger.warn({ err }, "policies/management.md watcher stop failed");
|
|
2430
1312
|
});
|
|
2431
1313
|
}
|
|
2432
1314
|
if (docsIndexer) {
|
|
@@ -2434,6 +1316,11 @@ async function startup() {
|
|
|
2434
1316
|
logger.warn({ err }, "docs indexer stop failed");
|
|
2435
1317
|
});
|
|
2436
1318
|
}
|
|
1319
|
+
if (agentsWatcher) {
|
|
1320
|
+
await agentsWatcher.stop().catch((err) => {
|
|
1321
|
+
logger.warn({ err }, "agent definitions watcher stop failed");
|
|
1322
|
+
});
|
|
1323
|
+
}
|
|
2437
1324
|
await observerManager.stopAll();
|
|
2438
1325
|
await messageHub.stopAll();
|
|
2439
1326
|
eventBus.close();
|
|
@@ -2475,4 +1362,3 @@ startup().catch((err) => {
|
|
|
2475
1362
|
logger.fatal({ error: e?.message, code: e?.code, stack: e?.stack }, "Daemon startup failed");
|
|
2476
1363
|
process.exit(1);
|
|
2477
1364
|
});
|
|
2478
|
-
//# sourceMappingURL=index.js.map
|