@aitne/daemon 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/dist/adapters/composite-dashboard-stream.d.ts +42 -0
- package/dist/adapters/composite-dashboard-stream.d.ts.map +1 -0
- package/dist/adapters/composite-dashboard-stream.js +49 -0
- package/dist/adapters/composite-dashboard-stream.js.map +1 -0
- package/dist/adapters/dashboard-adapter.d.ts +104 -0
- package/dist/adapters/dashboard-adapter.d.ts.map +1 -0
- package/dist/adapters/dashboard-adapter.js +216 -0
- package/dist/adapters/dashboard-adapter.js.map +1 -0
- package/dist/adapters/discord.d.ts +77 -0
- package/dist/adapters/discord.d.ts.map +1 -0
- package/dist/adapters/discord.js +339 -0
- package/dist/adapters/discord.js.map +1 -0
- package/dist/adapters/docs-qa-adapter.d.ts +123 -0
- package/dist/adapters/docs-qa-adapter.d.ts.map +1 -0
- package/dist/adapters/docs-qa-adapter.js +218 -0
- package/dist/adapters/docs-qa-adapter.js.map +1 -0
- package/dist/adapters/message-hub.d.ts +70 -0
- package/dist/adapters/message-hub.d.ts.map +1 -0
- package/dist/adapters/message-hub.js +359 -0
- package/dist/adapters/message-hub.js.map +1 -0
- package/dist/adapters/notification-manager.d.ts +99 -0
- package/dist/adapters/notification-manager.d.ts.map +1 -0
- package/dist/adapters/notification-manager.js +498 -0
- package/dist/adapters/notification-manager.js.map +1 -0
- package/dist/adapters/outbound-text.d.ts +28 -0
- package/dist/adapters/outbound-text.d.ts.map +1 -0
- package/dist/adapters/outbound-text.js +58 -0
- package/dist/adapters/outbound-text.js.map +1 -0
- package/dist/adapters/slack-adapter.d.ts +82 -0
- package/dist/adapters/slack-adapter.d.ts.map +1 -0
- package/dist/adapters/slack-adapter.js +359 -0
- package/dist/adapters/slack-adapter.js.map +1 -0
- package/dist/adapters/telegram-adapter.d.ts +107 -0
- package/dist/adapters/telegram-adapter.d.ts.map +1 -0
- package/dist/adapters/telegram-adapter.js +477 -0
- package/dist/adapters/telegram-adapter.js.map +1 -0
- package/dist/adapters/types.d.ts +92 -0
- package/dist/adapters/types.d.ts.map +1 -0
- package/dist/adapters/types.js +2 -0
- package/dist/adapters/types.js.map +1 -0
- package/dist/adapters/whatsapp-adapter.d.ts +213 -0
- package/dist/adapters/whatsapp-adapter.d.ts.map +1 -0
- package/dist/adapters/whatsapp-adapter.js +1216 -0
- package/dist/adapters/whatsapp-adapter.js.map +1 -0
- package/dist/api/chat-binding-query.d.ts +36 -0
- package/dist/api/chat-binding-query.d.ts.map +1 -0
- package/dist/api/chat-binding-query.js +63 -0
- package/dist/api/chat-binding-query.js.map +1 -0
- package/dist/api/chat-session-resume.d.ts +12 -0
- package/dist/api/chat-session-resume.d.ts.map +1 -0
- package/dist/api/chat-session-resume.js +21 -0
- package/dist/api/chat-session-resume.js.map +1 -0
- package/dist/api/delegated-proxy-helper.d.ts +33 -0
- package/dist/api/delegated-proxy-helper.d.ts.map +1 -0
- package/dist/api/delegated-proxy-helper.js +54 -0
- package/dist/api/delegated-proxy-helper.js.map +1 -0
- package/dist/api/directory-picker.d.ts +38 -0
- package/dist/api/directory-picker.d.ts.map +1 -0
- package/dist/api/directory-picker.js +278 -0
- package/dist/api/directory-picker.js.map +1 -0
- package/dist/api/env-writer.d.ts +25 -0
- package/dist/api/env-writer.d.ts.map +1 -0
- package/dist/api/env-writer.js +421 -0
- package/dist/api/env-writer.js.map +1 -0
- package/dist/api/integration-route-gate.d.ts +60 -0
- package/dist/api/integration-route-gate.d.ts.map +1 -0
- package/dist/api/integration-route-gate.js +83 -0
- package/dist/api/integration-route-gate.js.map +1 -0
- package/dist/api/json-body.d.ts +29 -0
- package/dist/api/json-body.d.ts.map +1 -0
- package/dist/api/json-body.js +87 -0
- package/dist/api/json-body.js.map +1 -0
- package/dist/api/routes/activity-sources.d.ts +20 -0
- package/dist/api/routes/activity-sources.d.ts.map +1 -0
- package/dist/api/routes/activity-sources.js +18 -0
- package/dist/api/routes/activity-sources.js.map +1 -0
- package/dist/api/routes/agent.d.ts +4 -0
- package/dist/api/routes/agent.d.ts.map +1 -0
- package/dist/api/routes/agent.js +619 -0
- package/dist/api/routes/agent.js.map +1 -0
- package/dist/api/routes/apple-calendar.d.ts +31 -0
- package/dist/api/routes/apple-calendar.d.ts.map +1 -0
- package/dist/api/routes/apple-calendar.js +310 -0
- package/dist/api/routes/apple-calendar.js.map +1 -0
- package/dist/api/routes/attachments.d.ts +36 -0
- package/dist/api/routes/attachments.d.ts.map +1 -0
- package/dist/api/routes/attachments.js +305 -0
- package/dist/api/routes/attachments.js.map +1 -0
- package/dist/api/routes/backends.d.ts +4 -0
- package/dist/api/routes/backends.d.ts.map +1 -0
- package/dist/api/routes/backends.js +1132 -0
- package/dist/api/routes/backends.js.map +1 -0
- package/dist/api/routes/books.d.ts +63 -0
- package/dist/api/routes/books.d.ts.map +1 -0
- package/dist/api/routes/books.js +467 -0
- package/dist/api/routes/books.js.map +1 -0
- package/dist/api/routes/calendar.d.ts +36 -0
- package/dist/api/routes/calendar.d.ts.map +1 -0
- package/dist/api/routes/calendar.js +351 -0
- package/dist/api/routes/calendar.js.map +1 -0
- package/dist/api/routes/commands.d.ts +4 -0
- package/dist/api/routes/commands.d.ts.map +1 -0
- package/dist/api/routes/commands.js +251 -0
- package/dist/api/routes/commands.js.map +1 -0
- package/dist/api/routes/context.d.ts +57 -0
- package/dist/api/routes/context.d.ts.map +1 -0
- package/dist/api/routes/context.js +1765 -0
- package/dist/api/routes/context.js.map +1 -0
- package/dist/api/routes/dashboard.d.ts +29 -0
- package/dist/api/routes/dashboard.d.ts.map +1 -0
- package/dist/api/routes/dashboard.js +2062 -0
- package/dist/api/routes/dashboard.js.map +1 -0
- package/dist/api/routes/delegated-sync.d.ts +4 -0
- package/dist/api/routes/delegated-sync.d.ts.map +1 -0
- package/dist/api/routes/delegated-sync.js +192 -0
- package/dist/api/routes/delegated-sync.js.map +1 -0
- package/dist/api/routes/delegated.d.ts +42 -0
- package/dist/api/routes/delegated.d.ts.map +1 -0
- package/dist/api/routes/delegated.js +250 -0
- package/dist/api/routes/delegated.js.map +1 -0
- package/dist/api/routes/docs.d.ts +34 -0
- package/dist/api/routes/docs.d.ts.map +1 -0
- package/dist/api/routes/docs.js +580 -0
- package/dist/api/routes/docs.js.map +1 -0
- package/dist/api/routes/entities.d.ts +9 -0
- package/dist/api/routes/entities.d.ts.map +1 -0
- package/dist/api/routes/entities.js +176 -0
- package/dist/api/routes/entities.js.map +1 -0
- package/dist/api/routes/git-accounts.d.ts +23 -0
- package/dist/api/routes/git-accounts.d.ts.map +1 -0
- package/dist/api/routes/git-accounts.js +227 -0
- package/dist/api/routes/git-accounts.js.map +1 -0
- package/dist/api/routes/git-templates.d.ts +50 -0
- package/dist/api/routes/git-templates.d.ts.map +1 -0
- package/dist/api/routes/git-templates.js +276 -0
- package/dist/api/routes/git-templates.js.map +1 -0
- package/dist/api/routes/git.d.ts +34 -0
- package/dist/api/routes/git.d.ts.map +1 -0
- package/dist/api/routes/git.js +126 -0
- package/dist/api/routes/git.js.map +1 -0
- package/dist/api/routes/github.d.ts +34 -0
- package/dist/api/routes/github.d.ts.map +1 -0
- package/dist/api/routes/github.js +465 -0
- package/dist/api/routes/github.js.map +1 -0
- package/dist/api/routes/health.d.ts +4 -0
- package/dist/api/routes/health.d.ts.map +1 -0
- package/dist/api/routes/health.js +257 -0
- package/dist/api/routes/health.js.map +1 -0
- package/dist/api/routes/integrations-reconcile.d.ts +33 -0
- package/dist/api/routes/integrations-reconcile.d.ts.map +1 -0
- package/dist/api/routes/integrations-reconcile.js +463 -0
- package/dist/api/routes/integrations-reconcile.js.map +1 -0
- package/dist/api/routes/integrations.d.ts +19 -0
- package/dist/api/routes/integrations.d.ts.map +1 -0
- package/dist/api/routes/integrations.js +1384 -0
- package/dist/api/routes/integrations.js.map +1 -0
- package/dist/api/routes/knowledge.d.ts +4 -0
- package/dist/api/routes/knowledge.d.ts.map +1 -0
- package/dist/api/routes/knowledge.js +224 -0
- package/dist/api/routes/knowledge.js.map +1 -0
- package/dist/api/routes/mail.d.ts +39 -0
- package/dist/api/routes/mail.d.ts.map +1 -0
- package/dist/api/routes/mail.js +1406 -0
- package/dist/api/routes/mail.js.map +1 -0
- package/dist/api/routes/managed-tasks.d.ts +48 -0
- package/dist/api/routes/managed-tasks.d.ts.map +1 -0
- package/dist/api/routes/managed-tasks.js +844 -0
- package/dist/api/routes/managed-tasks.js.map +1 -0
- package/dist/api/routes/mcp.d.ts +50 -0
- package/dist/api/routes/mcp.d.ts.map +1 -0
- package/dist/api/routes/mcp.js +470 -0
- package/dist/api/routes/mcp.js.map +1 -0
- package/dist/api/routes/metrics.d.ts +13 -0
- package/dist/api/routes/metrics.d.ts.map +1 -0
- package/dist/api/routes/metrics.js +117 -0
- package/dist/api/routes/metrics.js.map +1 -0
- package/dist/api/routes/notion.d.ts +35 -0
- package/dist/api/routes/notion.d.ts.map +1 -0
- package/dist/api/routes/notion.js +442 -0
- package/dist/api/routes/notion.js.map +1 -0
- package/dist/api/routes/observations.d.ts +4 -0
- package/dist/api/routes/observations.d.ts.map +1 -0
- package/dist/api/routes/observations.js +177 -0
- package/dist/api/routes/observations.js.map +1 -0
- package/dist/api/routes/obsidian.d.ts +16 -0
- package/dist/api/routes/obsidian.d.ts.map +1 -0
- package/dist/api/routes/obsidian.js +321 -0
- package/dist/api/routes/obsidian.js.map +1 -0
- package/dist/api/routes/profile-questions.d.ts +17 -0
- package/dist/api/routes/profile-questions.d.ts.map +1 -0
- package/dist/api/routes/profile-questions.js +115 -0
- package/dist/api/routes/profile-questions.js.map +1 -0
- package/dist/api/routes/receipts.d.ts +4 -0
- package/dist/api/routes/receipts.d.ts.map +1 -0
- package/dist/api/routes/receipts.js +155 -0
- package/dist/api/routes/receipts.js.map +1 -0
- package/dist/api/routes/recurring-schedules.d.ts +4 -0
- package/dist/api/routes/recurring-schedules.d.ts.map +1 -0
- package/dist/api/routes/recurring-schedules.js +137 -0
- package/dist/api/routes/recurring-schedules.js.map +1 -0
- package/dist/api/routes/repositories.d.ts +40 -0
- package/dist/api/routes/repositories.d.ts.map +1 -0
- package/dist/api/routes/repositories.js +857 -0
- package/dist/api/routes/repositories.js.map +1 -0
- package/dist/api/routes/setup-migrate.d.ts +74 -0
- package/dist/api/routes/setup-migrate.d.ts.map +1 -0
- package/dist/api/routes/setup-migrate.js +944 -0
- package/dist/api/routes/setup-migrate.js.map +1 -0
- package/dist/api/routes/setup.d.ts +4 -0
- package/dist/api/routes/setup.d.ts.map +1 -0
- package/dist/api/routes/setup.js +443 -0
- package/dist/api/routes/setup.js.map +1 -0
- package/dist/api/routes/skill-curation.d.ts +5 -0
- package/dist/api/routes/skill-curation.d.ts.map +1 -0
- package/dist/api/routes/skill-curation.js +728 -0
- package/dist/api/routes/skill-curation.js.map +1 -0
- package/dist/api/routes/skills.d.ts +52 -0
- package/dist/api/routes/skills.d.ts.map +1 -0
- package/dist/api/routes/skills.js +429 -0
- package/dist/api/routes/skills.js.map +1 -0
- package/dist/api/routes/sot-bindings.d.ts +20 -0
- package/dist/api/routes/sot-bindings.d.ts.map +1 -0
- package/dist/api/routes/sot-bindings.js +163 -0
- package/dist/api/routes/sot-bindings.js.map +1 -0
- package/dist/api/routes/sse.d.ts +86 -0
- package/dist/api/routes/sse.d.ts.map +1 -0
- package/dist/api/routes/sse.js +378 -0
- package/dist/api/routes/sse.js.map +1 -0
- package/dist/api/routes/system.d.ts +4 -0
- package/dist/api/routes/system.d.ts.map +1 -0
- package/dist/api/routes/system.js +207 -0
- package/dist/api/routes/system.js.map +1 -0
- package/dist/api/routes/task-flows.d.ts +30 -0
- package/dist/api/routes/task-flows.d.ts.map +1 -0
- package/dist/api/routes/task-flows.js +155 -0
- package/dist/api/routes/task-flows.js.map +1 -0
- package/dist/api/routes/travel-bookings.d.ts +4 -0
- package/dist/api/routes/travel-bookings.d.ts.map +1 -0
- package/dist/api/routes/travel-bookings.js +142 -0
- package/dist/api/routes/travel-bookings.js.map +1 -0
- package/dist/api/routes/travel-time.d.ts +8 -0
- package/dist/api/routes/travel-time.d.ts.map +1 -0
- package/dist/api/routes/travel-time.js +87 -0
- package/dist/api/routes/travel-time.js.map +1 -0
- package/dist/api/routes/triggers.d.ts +4 -0
- package/dist/api/routes/triggers.d.ts.map +1 -0
- package/dist/api/routes/triggers.js +101 -0
- package/dist/api/routes/triggers.js.map +1 -0
- package/dist/api/routes/voice.d.ts +48 -0
- package/dist/api/routes/voice.d.ts.map +1 -0
- package/dist/api/routes/voice.js +232 -0
- package/dist/api/routes/voice.js.map +1 -0
- package/dist/api/server.d.ts +428 -0
- package/dist/api/server.d.ts.map +1 -0
- package/dist/api/server.js +558 -0
- package/dist/api/server.js.map +1 -0
- package/dist/config.d.ts +136 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +699 -0
- package/dist/config.js.map +1 -0
- package/dist/core/agent-core.d.ts +517 -0
- package/dist/core/agent-core.d.ts.map +1 -0
- package/dist/core/agent-core.js +102 -0
- package/dist/core/agent-core.js.map +1 -0
- package/dist/core/alerts.d.ts +86 -0
- package/dist/core/alerts.d.ts.map +1 -0
- package/dist/core/alerts.js +304 -0
- package/dist/core/alerts.js.map +1 -0
- package/dist/core/atomic-write.d.ts +51 -0
- package/dist/core/atomic-write.d.ts.map +1 -0
- package/dist/core/atomic-write.js +135 -0
- package/dist/core/atomic-write.js.map +1 -0
- package/dist/core/backends/api-key-probe.d.ts +40 -0
- package/dist/core/backends/api-key-probe.d.ts.map +1 -0
- package/dist/core/backends/api-key-probe.js +116 -0
- package/dist/core/backends/api-key-probe.js.map +1 -0
- package/dist/core/backends/auth-health-monitor.d.ts +373 -0
- package/dist/core/backends/auth-health-monitor.d.ts.map +1 -0
- package/dist/core/backends/auth-health-monitor.js +950 -0
- package/dist/core/backends/auth-health-monitor.js.map +1 -0
- package/dist/core/backends/auth-recovery.d.ts +263 -0
- package/dist/core/backends/auth-recovery.d.ts.map +1 -0
- package/dist/core/backends/auth-recovery.js +1086 -0
- package/dist/core/backends/auth-recovery.js.map +1 -0
- package/dist/core/backends/auth-telemetry.d.ts +81 -0
- package/dist/core/backends/auth-telemetry.d.ts.map +1 -0
- package/dist/core/backends/auth-telemetry.js +108 -0
- package/dist/core/backends/auth-telemetry.js.map +1 -0
- package/dist/core/backends/backend-router.d.ts +272 -0
- package/dist/core/backends/backend-router.d.ts.map +1 -0
- package/dist/core/backends/backend-router.js +759 -0
- package/dist/core/backends/backend-router.js.map +1 -0
- package/dist/core/backends/claude-code-core.d.ts +299 -0
- package/dist/core/backends/claude-code-core.d.ts.map +1 -0
- package/dist/core/backends/claude-code-core.js +2541 -0
- package/dist/core/backends/claude-code-core.js.map +1 -0
- package/dist/core/backends/claude-credentials-store.d.ts +83 -0
- package/dist/core/backends/claude-credentials-store.d.ts.map +1 -0
- package/dist/core/backends/claude-credentials-store.js +243 -0
- package/dist/core/backends/claude-credentials-store.js.map +1 -0
- package/dist/core/backends/cli-utils.d.ts +95 -0
- package/dist/core/backends/cli-utils.d.ts.map +1 -0
- package/dist/core/backends/cli-utils.js +464 -0
- package/dist/core/backends/cli-utils.js.map +1 -0
- package/dist/core/backends/codex-core.d.ts +127 -0
- package/dist/core/backends/codex-core.d.ts.map +1 -0
- package/dist/core/backends/codex-core.js +1693 -0
- package/dist/core/backends/codex-core.js.map +1 -0
- package/dist/core/backends/gemini-cli-core.d.ts +367 -0
- package/dist/core/backends/gemini-cli-core.d.ts.map +1 -0
- package/dist/core/backends/gemini-cli-core.js +2331 -0
- package/dist/core/backends/gemini-cli-core.js.map +1 -0
- package/dist/core/backends/idle-watchdog.d.ts +77 -0
- package/dist/core/backends/idle-watchdog.d.ts.map +1 -0
- package/dist/core/backends/idle-watchdog.js +94 -0
- package/dist/core/backends/idle-watchdog.js.map +1 -0
- package/dist/core/backends/install-methods.d.ts +93 -0
- package/dist/core/backends/install-methods.d.ts.map +1 -0
- package/dist/core/backends/install-methods.js +267 -0
- package/dist/core/backends/install-methods.js.map +1 -0
- package/dist/core/backends/model-registry.d.ts +58 -0
- package/dist/core/backends/model-registry.d.ts.map +1 -0
- package/dist/core/backends/model-registry.js +539 -0
- package/dist/core/backends/model-registry.js.map +1 -0
- package/dist/core/backends/plan-presets.d.ts +123 -0
- package/dist/core/backends/plan-presets.d.ts.map +1 -0
- package/dist/core/backends/plan-presets.js +235 -0
- package/dist/core/backends/plan-presets.js.map +1 -0
- package/dist/core/backends/price-fetcher.d.ts +48 -0
- package/dist/core/backends/price-fetcher.d.ts.map +1 -0
- package/dist/core/backends/price-fetcher.js +248 -0
- package/dist/core/backends/price-fetcher.js.map +1 -0
- package/dist/core/backends/process-config-cascade.d.ts +68 -0
- package/dist/core/backends/process-config-cascade.d.ts.map +1 -0
- package/dist/core/backends/process-config-cascade.js +173 -0
- package/dist/core/backends/process-config-cascade.js.map +1 -0
- package/dist/core/backends/prompt-utils.d.ts +6 -0
- package/dist/core/backends/prompt-utils.d.ts.map +1 -0
- package/dist/core/backends/prompt-utils.js +80 -0
- package/dist/core/backends/prompt-utils.js.map +1 -0
- package/dist/core/backends/proxy-model-registry.d.ts +110 -0
- package/dist/core/backends/proxy-model-registry.d.ts.map +1 -0
- package/dist/core/backends/proxy-model-registry.js +195 -0
- package/dist/core/backends/proxy-model-registry.js.map +1 -0
- package/dist/core/backends/silent-api-error-detector.d.ts +31 -0
- package/dist/core/backends/silent-api-error-detector.d.ts.map +1 -0
- package/dist/core/backends/silent-api-error-detector.js +44 -0
- package/dist/core/backends/silent-api-error-detector.js.map +1 -0
- package/dist/core/bang-commands/commands-cost.d.ts +13 -0
- package/dist/core/bang-commands/commands-cost.d.ts.map +1 -0
- package/dist/core/bang-commands/commands-cost.js +91 -0
- package/dist/core/bang-commands/commands-cost.js.map +1 -0
- package/dist/core/bang-commands/commands-report.d.ts +18 -0
- package/dist/core/bang-commands/commands-report.d.ts.map +1 -0
- package/dist/core/bang-commands/commands-report.js +105 -0
- package/dist/core/bang-commands/commands-report.js.map +1 -0
- package/dist/core/bang-commands/commands-stop-start.d.ts +4 -0
- package/dist/core/bang-commands/commands-stop-start.d.ts.map +1 -0
- package/dist/core/bang-commands/commands-stop-start.js +88 -0
- package/dist/core/bang-commands/commands-stop-start.js.map +1 -0
- package/dist/core/bang-commands/format-utils.d.ts +34 -0
- package/dist/core/bang-commands/format-utils.d.ts.map +1 -0
- package/dist/core/bang-commands/format-utils.js +118 -0
- package/dist/core/bang-commands/format-utils.js.map +1 -0
- package/dist/core/bang-commands/index.d.ts +20 -0
- package/dist/core/bang-commands/index.d.ts.map +1 -0
- package/dist/core/bang-commands/index.js +31 -0
- package/dist/core/bang-commands/index.js.map +1 -0
- package/dist/core/bang-commands/registry.d.ts +72 -0
- package/dist/core/bang-commands/registry.d.ts.map +1 -0
- package/dist/core/bang-commands/registry.js +174 -0
- package/dist/core/bang-commands/registry.js.map +1 -0
- package/dist/core/bang-commands/user-commands.d.ts +86 -0
- package/dist/core/bang-commands/user-commands.d.ts.map +1 -0
- package/dist/core/bang-commands/user-commands.js +212 -0
- package/dist/core/bang-commands/user-commands.js.map +1 -0
- package/dist/core/channel-timeline.d.ts +28 -0
- package/dist/core/channel-timeline.d.ts.map +1 -0
- package/dist/core/channel-timeline.js +117 -0
- package/dist/core/channel-timeline.js.map +1 -0
- package/dist/core/character-block.d.ts +37 -0
- package/dist/core/character-block.d.ts.map +1 -0
- package/dist/core/character-block.js +162 -0
- package/dist/core/character-block.js.map +1 -0
- package/dist/core/context/activity-sources.d.ts +37 -0
- package/dist/core/context/activity-sources.d.ts.map +1 -0
- package/dist/core/context/activity-sources.js +69 -0
- package/dist/core/context/activity-sources.js.map +1 -0
- package/dist/core/context/activity-view-reconciler.d.ts +110 -0
- package/dist/core/context/activity-view-reconciler.d.ts.map +1 -0
- package/dist/core/context/activity-view-reconciler.js +252 -0
- package/dist/core/context/activity-view-reconciler.js.map +1 -0
- package/dist/core/context/activity-view-runner.d.ts +38 -0
- package/dist/core/context/activity-view-runner.d.ts.map +1 -0
- package/dist/core/context/activity-view-runner.js +402 -0
- package/dist/core/context/activity-view-runner.js.map +1 -0
- package/dist/core/context/default-schedules-reconciler.d.ts +85 -0
- package/dist/core/context/default-schedules-reconciler.d.ts.map +1 -0
- package/dist/core/context/default-schedules-reconciler.js +153 -0
- package/dist/core/context/default-schedules-reconciler.js.map +1 -0
- package/dist/core/context/default-schedules-runner.d.ts +40 -0
- package/dist/core/context/default-schedules-runner.d.ts.map +1 -0
- package/dist/core/context/default-schedules-runner.js +233 -0
- package/dist/core/context/default-schedules-runner.js.map +1 -0
- package/dist/core/context/domain-index-reconciler.d.ts +81 -0
- package/dist/core/context/domain-index-reconciler.d.ts.map +1 -0
- package/dist/core/context/domain-index-reconciler.js +199 -0
- package/dist/core/context/domain-index-reconciler.js.map +1 -0
- package/dist/core/context/domain-index-runner.d.ts +35 -0
- package/dist/core/context/domain-index-runner.d.ts.map +1 -0
- package/dist/core/context/domain-index-runner.js +223 -0
- package/dist/core/context/domain-index-runner.js.map +1 -0
- package/dist/core/context/entity-mirror.d.ts +227 -0
- package/dist/core/context/entity-mirror.d.ts.map +1 -0
- package/dist/core/context/entity-mirror.js +629 -0
- package/dist/core/context/entity-mirror.js.map +1 -0
- package/dist/core/context/entity-source-rename.d.ts +61 -0
- package/dist/core/context/entity-source-rename.d.ts.map +1 -0
- package/dist/core/context/entity-source-rename.js +237 -0
- package/dist/core/context/entity-source-rename.js.map +1 -0
- package/dist/core/context/index-reconciler.d.ts +61 -0
- package/dist/core/context/index-reconciler.d.ts.map +1 -0
- package/dist/core/context/index-reconciler.js +329 -0
- package/dist/core/context/index-reconciler.js.map +1 -0
- package/dist/core/context/policy-index-reconciler.d.ts +102 -0
- package/dist/core/context/policy-index-reconciler.d.ts.map +1 -0
- package/dist/core/context/policy-index-reconciler.js +202 -0
- package/dist/core/context/policy-index-reconciler.js.map +1 -0
- package/dist/core/context/policy-index-runner.d.ts +66 -0
- package/dist/core/context/policy-index-runner.d.ts.map +1 -0
- package/dist/core/context/policy-index-runner.js +406 -0
- package/dist/core/context/policy-index-runner.js.map +1 -0
- package/dist/core/context/reconciler-runner.d.ts +44 -0
- package/dist/core/context/reconciler-runner.d.ts.map +1 -0
- package/dist/core/context/reconciler-runner.js +273 -0
- package/dist/core/context/reconciler-runner.js.map +1 -0
- package/dist/core/context-builder.d.ts +115 -0
- package/dist/core/context-builder.d.ts.map +1 -0
- package/dist/core/context-builder.js +1148 -0
- package/dist/core/context-builder.js.map +1 -0
- package/dist/core/context-frontmatter-backfill.d.ts +33 -0
- package/dist/core/context-frontmatter-backfill.d.ts.map +1 -0
- package/dist/core/context-frontmatter-backfill.js +111 -0
- package/dist/core/context-frontmatter-backfill.js.map +1 -0
- package/dist/core/context-frontmatter.d.ts +13 -0
- package/dist/core/context-frontmatter.d.ts.map +1 -0
- package/dist/core/context-frontmatter.js +325 -0
- package/dist/core/context-frontmatter.js.map +1 -0
- package/dist/core/context-health.d.ts +51 -0
- package/dist/core/context-health.d.ts.map +1 -0
- package/dist/core/context-health.js +304 -0
- package/dist/core/context-health.js.map +1 -0
- package/dist/core/context-paths.d.ts +183 -0
- package/dist/core/context-paths.d.ts.map +1 -0
- package/dist/core/context-paths.js +241 -0
- package/dist/core/context-paths.js.map +1 -0
- package/dist/core/context-staleness.d.ts +45 -0
- package/dist/core/context-staleness.d.ts.map +1 -0
- package/dist/core/context-staleness.js +88 -0
- package/dist/core/context-staleness.js.map +1 -0
- package/dist/core/custom-routine-scheduler.d.ts +151 -0
- package/dist/core/custom-routine-scheduler.d.ts.map +1 -0
- package/dist/core/custom-routine-scheduler.js +335 -0
- package/dist/core/custom-routine-scheduler.js.map +1 -0
- package/dist/core/daemon-api-cli.d.ts +33 -0
- package/dist/core/daemon-api-cli.d.ts.map +1 -0
- package/dist/core/daemon-api-cli.js +614 -0
- package/dist/core/daemon-api-cli.js.map +1 -0
- package/dist/core/dashboard-session-cleanup.d.ts +39 -0
- package/dist/core/dashboard-session-cleanup.d.ts.map +1 -0
- package/dist/core/dashboard-session-cleanup.js +108 -0
- package/dist/core/dashboard-session-cleanup.js.map +1 -0
- package/dist/core/dashboard-session-controls.d.ts +41 -0
- package/dist/core/dashboard-session-controls.d.ts.map +1 -0
- package/dist/core/dashboard-session-controls.js +154 -0
- package/dist/core/dashboard-session-controls.js.map +1 -0
- package/dist/core/delegated-connector-health.d.ts +63 -0
- package/dist/core/delegated-connector-health.d.ts.map +1 -0
- package/dist/core/delegated-connector-health.js +157 -0
- package/dist/core/delegated-connector-health.js.map +1 -0
- package/dist/core/dispatcher.d.ts +999 -0
- package/dist/core/dispatcher.d.ts.map +1 -0
- package/dist/core/dispatcher.js +4378 -0
- package/dist/core/dispatcher.js.map +1 -0
- package/dist/core/dm-freshness-metrics.d.ts +73 -0
- package/dist/core/dm-freshness-metrics.d.ts.map +1 -0
- package/dist/core/dm-freshness-metrics.js +138 -0
- package/dist/core/dm-freshness-metrics.js.map +1 -0
- package/dist/core/docs/citation-validator.d.ts +73 -0
- package/dist/core/docs/citation-validator.d.ts.map +1 -0
- package/dist/core/docs/citation-validator.js +195 -0
- package/dist/core/docs/citation-validator.js.map +1 -0
- package/dist/core/docs/extract-terms.d.ts +78 -0
- package/dist/core/docs/extract-terms.d.ts.map +1 -0
- package/dist/core/docs/extract-terms.js +147 -0
- package/dist/core/docs/extract-terms.js.map +1 -0
- package/dist/core/docs/indexer.d.ts +104 -0
- package/dist/core/docs/indexer.d.ts.map +1 -0
- package/dist/core/docs/indexer.js +340 -0
- package/dist/core/docs/indexer.js.map +1 -0
- package/dist/core/drift-effects.d.ts +30 -0
- package/dist/core/drift-effects.d.ts.map +1 -0
- package/dist/core/drift-effects.js +384 -0
- package/dist/core/drift-effects.js.map +1 -0
- package/dist/core/event-bus.d.ts +56 -0
- package/dist/core/event-bus.d.ts.map +1 -0
- package/dist/core/event-bus.js +135 -0
- package/dist/core/event-bus.js.map +1 -0
- package/dist/core/git-project-docs.d.ts +77 -0
- package/dist/core/git-project-docs.d.ts.map +1 -0
- package/dist/core/git-project-docs.js +439 -0
- package/dist/core/git-project-docs.js.map +1 -0
- package/dist/core/health-monitor.d.ts +57 -0
- package/dist/core/health-monitor.d.ts.map +1 -0
- package/dist/core/health-monitor.js +137 -0
- package/dist/core/health-monitor.js.map +1 -0
- package/dist/core/heartbeat.d.ts +26 -0
- package/dist/core/heartbeat.d.ts.map +1 -0
- package/dist/core/heartbeat.js +48 -0
- package/dist/core/heartbeat.js.map +1 -0
- package/dist/core/integration-health.d.ts +49 -0
- package/dist/core/integration-health.d.ts.map +1 -0
- package/dist/core/integration-health.js +89 -0
- package/dist/core/integration-health.js.map +1 -0
- package/dist/core/integration-lifecycle.d.ts +79 -0
- package/dist/core/integration-lifecycle.d.ts.map +1 -0
- package/dist/core/integration-lifecycle.js +153 -0
- package/dist/core/integration-lifecycle.js.map +1 -0
- package/dist/core/integration-main-backend.d.ts +36 -0
- package/dist/core/integration-main-backend.d.ts.map +1 -0
- package/dist/core/integration-main-backend.js +59 -0
- package/dist/core/integration-main-backend.js.map +1 -0
- package/dist/core/integration-probe.d.ts +98 -0
- package/dist/core/integration-probe.d.ts.map +1 -0
- package/dist/core/integration-probe.js +152 -0
- package/dist/core/integration-probe.js.map +1 -0
- package/dist/core/management-md-write-lock.d.ts +68 -0
- package/dist/core/management-md-write-lock.d.ts.map +1 -0
- package/dist/core/management-md-write-lock.js +93 -0
- package/dist/core/management-md-write-lock.js.map +1 -0
- package/dist/core/management-md.d.ts +186 -0
- package/dist/core/management-md.d.ts.map +1 -0
- package/dist/core/management-md.js +652 -0
- package/dist/core/management-md.js.map +1 -0
- package/dist/core/management-registry.d.ts +245 -0
- package/dist/core/management-registry.d.ts.map +1 -0
- package/dist/core/management-registry.js +906 -0
- package/dist/core/management-registry.js.map +1 -0
- package/dist/core/management-telemetry.d.ts +100 -0
- package/dist/core/management-telemetry.d.ts.map +1 -0
- package/dist/core/management-telemetry.js +156 -0
- package/dist/core/management-telemetry.js.map +1 -0
- package/dist/core/message-recorder.d.ts +38 -0
- package/dist/core/message-recorder.d.ts.map +1 -0
- package/dist/core/message-recorder.js +88 -0
- package/dist/core/message-recorder.js.map +1 -0
- package/dist/core/metrics.d.ts +338 -0
- package/dist/core/metrics.d.ts.map +1 -0
- package/dist/core/metrics.js +747 -0
- package/dist/core/metrics.js.map +1 -0
- package/dist/core/migration-backup.d.ts +218 -0
- package/dist/core/migration-backup.d.ts.map +1 -0
- package/dist/core/migration-backup.js +934 -0
- package/dist/core/migration-backup.js.map +1 -0
- package/dist/core/overview-write-lock.d.ts +48 -0
- package/dist/core/overview-write-lock.d.ts.map +1 -0
- package/dist/core/overview-write-lock.js +56 -0
- package/dist/core/overview-write-lock.js.map +1 -0
- package/dist/core/path-compat.d.ts +22 -0
- package/dist/core/path-compat.d.ts.map +1 -0
- package/dist/core/path-compat.js +67 -0
- package/dist/core/path-compat.js.map +1 -0
- package/dist/core/path-rewrite.d.ts +58 -0
- package/dist/core/path-rewrite.d.ts.map +1 -0
- package/dist/core/path-rewrite.js +141 -0
- package/dist/core/path-rewrite.js.map +1 -0
- package/dist/core/policy-files.d.ts +108 -0
- package/dist/core/policy-files.d.ts.map +1 -0
- package/dist/core/policy-files.js +198 -0
- package/dist/core/policy-files.js.map +1 -0
- package/dist/core/profile-questions/seed.d.ts +44 -0
- package/dist/core/profile-questions/seed.d.ts.map +1 -0
- package/dist/core/profile-questions/seed.js +173 -0
- package/dist/core/profile-questions/seed.js.map +1 -0
- package/dist/core/profile-questions/slot-filled.d.ts +51 -0
- package/dist/core/profile-questions/slot-filled.d.ts.map +1 -0
- package/dist/core/profile-questions/slot-filled.js +118 -0
- package/dist/core/profile-questions/slot-filled.js.map +1 -0
- package/dist/core/prompts.d.ts +111 -0
- package/dist/core/prompts.d.ts.map +1 -0
- package/dist/core/prompts.js +267 -0
- package/dist/core/prompts.js.map +1 -0
- package/dist/core/quiet-hours-sync.d.ts +15 -0
- package/dist/core/quiet-hours-sync.d.ts.map +1 -0
- package/dist/core/quiet-hours-sync.js +51 -0
- package/dist/core/quiet-hours-sync.js.map +1 -0
- package/dist/core/read-sensitive-token-manager.d.ts +19 -0
- package/dist/core/read-sensitive-token-manager.d.ts.map +1 -0
- package/dist/core/read-sensitive-token-manager.js +29 -0
- package/dist/core/read-sensitive-token-manager.js.map +1 -0
- package/dist/core/recurrence.d.ts +24 -0
- package/dist/core/recurrence.d.ts.map +1 -0
- package/dist/core/recurrence.js +162 -0
- package/dist/core/recurrence.js.map +1 -0
- package/dist/core/reinstall.d.ts +107 -0
- package/dist/core/reinstall.d.ts.map +1 -0
- package/dist/core/reinstall.js +163 -0
- package/dist/core/reinstall.js.map +1 -0
- package/dist/core/release-assets.d.ts +106 -0
- package/dist/core/release-assets.d.ts.map +1 -0
- package/dist/core/release-assets.js +434 -0
- package/dist/core/release-assets.js.map +1 -0
- package/dist/core/repository-management-docs.d.ts +216 -0
- package/dist/core/repository-management-docs.d.ts.map +1 -0
- package/dist/core/repository-management-docs.js +855 -0
- package/dist/core/repository-management-docs.js.map +1 -0
- package/dist/core/retention.d.ts +164 -0
- package/dist/core/retention.d.ts.map +1 -0
- package/dist/core/retention.js +1008 -0
- package/dist/core/retention.js.map +1 -0
- package/dist/core/review-context.d.ts +48 -0
- package/dist/core/review-context.d.ts.map +1 -0
- package/dist/core/review-context.js +282 -0
- package/dist/core/review-context.js.map +1 -0
- package/dist/core/roadmap-horizon.d.ts +48 -0
- package/dist/core/roadmap-horizon.d.ts.map +1 -0
- package/dist/core/roadmap-horizon.js +213 -0
- package/dist/core/roadmap-horizon.js.map +1 -0
- package/dist/core/roadmap-ids.d.ts +57 -0
- package/dist/core/roadmap-ids.d.ts.map +1 -0
- package/dist/core/roadmap-ids.js +118 -0
- package/dist/core/roadmap-ids.js.map +1 -0
- package/dist/core/roadmap-merge.d.ts +7 -0
- package/dist/core/roadmap-merge.d.ts.map +1 -0
- package/dist/core/roadmap-merge.js +187 -0
- package/dist/core/roadmap-merge.js.map +1 -0
- package/dist/core/roadmap-refresh-triggers.d.ts +32 -0
- package/dist/core/roadmap-refresh-triggers.d.ts.map +1 -0
- package/dist/core/roadmap-refresh-triggers.js +51 -0
- package/dist/core/roadmap-refresh-triggers.js.map +1 -0
- package/dist/core/roadmap-truncate.d.ts +49 -0
- package/dist/core/roadmap-truncate.d.ts.map +1 -0
- package/dist/core/roadmap-truncate.js +152 -0
- package/dist/core/roadmap-truncate.js.map +1 -0
- package/dist/core/roadmap-validate.d.ts +31 -0
- package/dist/core/roadmap-validate.d.ts.map +1 -0
- package/dist/core/roadmap-validate.js +403 -0
- package/dist/core/roadmap-validate.js.map +1 -0
- package/dist/core/roadmap-write-lock.d.ts +53 -0
- package/dist/core/roadmap-write-lock.d.ts.map +1 -0
- package/dist/core/roadmap-write-lock.js +59 -0
- package/dist/core/roadmap-write-lock.js.map +1 -0
- package/dist/core/schedule-insert-helper.d.ts +46 -0
- package/dist/core/schedule-insert-helper.d.ts.map +1 -0
- package/dist/core/schedule-insert-helper.js +52 -0
- package/dist/core/schedule-insert-helper.js.map +1 -0
- package/dist/core/schedule-maintenance.d.ts +22 -0
- package/dist/core/schedule-maintenance.d.ts.map +1 -0
- package/dist/core/schedule-maintenance.js +57 -0
- package/dist/core/schedule-maintenance.js.map +1 -0
- package/dist/core/scheduler.d.ts +208 -0
- package/dist/core/scheduler.d.ts.map +1 -0
- package/dist/core/scheduler.js +896 -0
- package/dist/core/scheduler.js.map +1 -0
- package/dist/core/semaphore.d.ts +13 -0
- package/dist/core/semaphore.d.ts.map +1 -0
- package/dist/core/semaphore.js +31 -0
- package/dist/core/semaphore.js.map +1 -0
- package/dist/core/session-gate.d.ts +37 -0
- package/dist/core/session-gate.d.ts.map +1 -0
- package/dist/core/session-gate.js +69 -0
- package/dist/core/session-gate.js.map +1 -0
- package/dist/core/session-manager.d.ts +252 -0
- package/dist/core/session-manager.d.ts.map +1 -0
- package/dist/core/session-manager.js +716 -0
- package/dist/core/session-manager.js.map +1 -0
- package/dist/core/signal-detector.d.ts +97 -0
- package/dist/core/signal-detector.d.ts.map +1 -0
- package/dist/core/signal-detector.js +215 -0
- package/dist/core/signal-detector.js.map +1 -0
- package/dist/core/skeleton.d.ts +83 -0
- package/dist/core/skeleton.d.ts.map +1 -0
- package/dist/core/skeleton.js +255 -0
- package/dist/core/skeleton.js.map +1 -0
- package/dist/core/skill-curation/apply-proposal.d.ts +71 -0
- package/dist/core/skill-curation/apply-proposal.d.ts.map +1 -0
- package/dist/core/skill-curation/apply-proposal.js +175 -0
- package/dist/core/skill-curation/apply-proposal.js.map +1 -0
- package/dist/core/skill-curation/auto-revert.d.ts +43 -0
- package/dist/core/skill-curation/auto-revert.d.ts.map +1 -0
- package/dist/core/skill-curation/auto-revert.js +155 -0
- package/dist/core/skill-curation/auto-revert.js.map +1 -0
- package/dist/core/skill-curation/classify-diff.d.ts +27 -0
- package/dist/core/skill-curation/classify-diff.d.ts.map +1 -0
- package/dist/core/skill-curation/classify-diff.js +0 -0
- package/dist/core/skill-curation/classify-diff.js.map +1 -0
- package/dist/core/skill-curation/declarations.d.ts +32 -0
- package/dist/core/skill-curation/declarations.d.ts.map +1 -0
- package/dist/core/skill-curation/declarations.js +171 -0
- package/dist/core/skill-curation/declarations.js.map +1 -0
- package/dist/core/skill-curation/knowledge-map.d.ts +26 -0
- package/dist/core/skill-curation/knowledge-map.d.ts.map +1 -0
- package/dist/core/skill-curation/knowledge-map.js +154 -0
- package/dist/core/skill-curation/knowledge-map.js.map +1 -0
- package/dist/core/skill-curation/orphan-overlay.d.ts +35 -0
- package/dist/core/skill-curation/orphan-overlay.d.ts.map +1 -0
- package/dist/core/skill-curation/orphan-overlay.js +167 -0
- package/dist/core/skill-curation/orphan-overlay.js.map +1 -0
- package/dist/core/skill-curation/overlay-store.d.ts +41 -0
- package/dist/core/skill-curation/overlay-store.d.ts.map +1 -0
- package/dist/core/skill-curation/overlay-store.js +143 -0
- package/dist/core/skill-curation/overlay-store.js.map +1 -0
- package/dist/core/skill-curation/render/convention-notes.d.ts +4 -0
- package/dist/core/skill-curation/render/convention-notes.d.ts.map +1 -0
- package/dist/core/skill-curation/render/convention-notes.js +13 -0
- package/dist/core/skill-curation/render/convention-notes.js.map +1 -0
- package/dist/core/skill-curation/render/cross-references.d.ts +4 -0
- package/dist/core/skill-curation/render/cross-references.d.ts.map +1 -0
- package/dist/core/skill-curation/render/cross-references.js +10 -0
- package/dist/core/skill-curation/render/cross-references.js.map +1 -0
- package/dist/core/skill-curation/render/frontmatter-schema.d.ts +4 -0
- package/dist/core/skill-curation/render/frontmatter-schema.d.ts.map +1 -0
- package/dist/core/skill-curation/render/frontmatter-schema.js +25 -0
- package/dist/core/skill-curation/render/frontmatter-schema.js.map +1 -0
- package/dist/core/skill-curation/render/index.d.ts +5 -0
- package/dist/core/skill-curation/render/index.d.ts.map +1 -0
- package/dist/core/skill-curation/render/index.js +42 -0
- package/dist/core/skill-curation/render/index.js.map +1 -0
- package/dist/core/skill-curation/render/knowledge-layout.d.ts +4 -0
- package/dist/core/skill-curation/render/knowledge-layout.d.ts.map +1 -0
- package/dist/core/skill-curation/render/knowledge-layout.js +36 -0
- package/dist/core/skill-curation/render/knowledge-layout.js.map +1 -0
- package/dist/core/skill-curation/render/routing-table.d.ts +4 -0
- package/dist/core/skill-curation/render/routing-table.d.ts.map +1 -0
- package/dist/core/skill-curation/render/routing-table.js +37 -0
- package/dist/core/skill-curation/render/routing-table.js.map +1 -0
- package/dist/core/skill-curation/render/search-recipes.d.ts +4 -0
- package/dist/core/skill-curation/render/search-recipes.d.ts.map +1 -0
- package/dist/core/skill-curation/render/search-recipes.js +39 -0
- package/dist/core/skill-curation/render/search-recipes.js.map +1 -0
- package/dist/core/skill-curation/run-token.d.ts +27 -0
- package/dist/core/skill-curation/run-token.d.ts.map +1 -0
- package/dist/core/skill-curation/run-token.js +81 -0
- package/dist/core/skill-curation/run-token.js.map +1 -0
- package/dist/core/skill-curation/signals.d.ts +49 -0
- package/dist/core/skill-curation/signals.d.ts.map +1 -0
- package/dist/core/skill-curation/signals.js +149 -0
- package/dist/core/skill-curation/signals.js.map +1 -0
- package/dist/core/skill-curation/smoke-test.d.ts +39 -0
- package/dist/core/skill-curation/smoke-test.d.ts.map +1 -0
- package/dist/core/skill-curation/smoke-test.js +313 -0
- package/dist/core/skill-curation/smoke-test.js.map +1 -0
- package/dist/core/skill-curation/splicer.d.ts +16 -0
- package/dist/core/skill-curation/splicer.d.ts.map +1 -0
- package/dist/core/skill-curation/splicer.js +78 -0
- package/dist/core/skill-curation/splicer.js.map +1 -0
- package/dist/core/skill-curation/workdir.d.ts +40 -0
- package/dist/core/skill-curation/workdir.d.ts.map +1 -0
- package/dist/core/skill-curation/workdir.js +242 -0
- package/dist/core/skill-curation/workdir.js.map +1 -0
- package/dist/core/skills-compiler.d.ts +391 -0
- package/dist/core/skills-compiler.d.ts.map +1 -0
- package/dist/core/skills-compiler.js +1271 -0
- package/dist/core/skills-compiler.js.map +1 -0
- package/dist/core/skills-manifest.d.ts +8 -0
- package/dist/core/skills-manifest.d.ts.map +1 -0
- package/dist/core/skills-manifest.js +408 -0
- package/dist/core/skills-manifest.js.map +1 -0
- package/dist/core/system-reset.d.ts +268 -0
- package/dist/core/system-reset.d.ts.map +1 -0
- package/dist/core/system-reset.js +816 -0
- package/dist/core/system-reset.js.map +1 -0
- package/dist/core/template-store.d.ts +170 -0
- package/dist/core/template-store.d.ts.map +1 -0
- package/dist/core/template-store.js +388 -0
- package/dist/core/template-store.js.map +1 -0
- package/dist/core/template-versions.d.ts +95 -0
- package/dist/core/template-versions.d.ts.map +1 -0
- package/dist/core/template-versions.js +175 -0
- package/dist/core/template-versions.js.map +1 -0
- package/dist/core/today-agent-plan.d.ts +33 -0
- package/dist/core/today-agent-plan.d.ts.map +1 -0
- package/dist/core/today-agent-plan.js +120 -0
- package/dist/core/today-agent-plan.js.map +1 -0
- package/dist/core/today-direct-writer.d.ts +62 -0
- package/dist/core/today-direct-writer.d.ts.map +1 -0
- package/dist/core/today-direct-writer.js +132 -0
- package/dist/core/today-direct-writer.js.map +1 -0
- package/dist/core/today-write-lock.d.ts +89 -0
- package/dist/core/today-write-lock.d.ts.map +1 -0
- package/dist/core/today-write-lock.js +154 -0
- package/dist/core/today-write-lock.js.map +1 -0
- package/dist/core/trigger-dispatch.d.ts +31 -0
- package/dist/core/trigger-dispatch.d.ts.map +1 -0
- package/dist/core/trigger-dispatch.js +100 -0
- package/dist/core/trigger-dispatch.js.map +1 -0
- package/dist/core/trigger-evaluator.d.ts +59 -0
- package/dist/core/trigger-evaluator.d.ts.map +1 -0
- package/dist/core/trigger-evaluator.js +243 -0
- package/dist/core/trigger-evaluator.js.map +1 -0
- package/dist/core/workdir.d.ts +241 -0
- package/dist/core/workdir.d.ts.map +1 -0
- package/dist/core/workdir.js +565 -0
- package/dist/core/workdir.js.map +1 -0
- package/dist/db/automation-triggers.d.ts +90 -0
- package/dist/db/automation-triggers.d.ts.map +1 -0
- package/dist/db/automation-triggers.js +199 -0
- package/dist/db/automation-triggers.js.map +1 -0
- package/dist/db/client.d.ts +6 -0
- package/dist/db/client.d.ts.map +1 -0
- package/dist/db/client.js +47 -0
- package/dist/db/client.js.map +1 -0
- package/dist/db/entities-store.d.ts +92 -0
- package/dist/db/entities-store.d.ts.map +1 -0
- package/dist/db/entities-store.js +180 -0
- package/dist/db/entities-store.js.map +1 -0
- package/dist/db/hourly-check-signals.d.ts +78 -0
- package/dist/db/hourly-check-signals.d.ts.map +1 -0
- package/dist/db/hourly-check-signals.js +289 -0
- package/dist/db/hourly-check-signals.js.map +1 -0
- package/dist/db/integration-probe-store.d.ts +27 -0
- package/dist/db/integration-probe-store.d.ts.map +1 -0
- package/dist/db/integration-probe-store.js +75 -0
- package/dist/db/integration-probe-store.js.map +1 -0
- package/dist/db/integrations-store.d.ts +19 -0
- package/dist/db/integrations-store.d.ts.map +1 -0
- package/dist/db/integrations-store.js +85 -0
- package/dist/db/integrations-store.js.map +1 -0
- package/dist/db/managed-tasks-store.d.ts +130 -0
- package/dist/db/managed-tasks-store.d.ts.map +1 -0
- package/dist/db/managed-tasks-store.js +238 -0
- package/dist/db/managed-tasks-store.js.map +1 -0
- package/dist/db/management-parse-failures-store.d.ts +45 -0
- package/dist/db/management-parse-failures-store.d.ts.map +1 -0
- package/dist/db/management-parse-failures-store.js +36 -0
- package/dist/db/management-parse-failures-store.js.map +1 -0
- package/dist/db/observations.d.ts +145 -0
- package/dist/db/observations.d.ts.map +1 -0
- package/dist/db/observations.js +287 -0
- package/dist/db/observations.js.map +1 -0
- package/dist/db/recurring-schedules.d.ts +70 -0
- package/dist/db/recurring-schedules.d.ts.map +1 -0
- package/dist/db/recurring-schedules.js +213 -0
- package/dist/db/recurring-schedules.js.map +1 -0
- package/dist/db/repositories-store.d.ts +296 -0
- package/dist/db/repositories-store.d.ts.map +1 -0
- package/dist/db/repositories-store.js +754 -0
- package/dist/db/repositories-store.js.map +1 -0
- package/dist/db/runtime-state.d.ts +61 -0
- package/dist/db/runtime-state.d.ts.map +1 -0
- package/dist/db/runtime-state.js +104 -0
- package/dist/db/runtime-state.js.map +1 -0
- package/dist/db/schema.d.ts +4 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +1338 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/db/sot-bindings-store.d.ts +41 -0
- package/dist/db/sot-bindings-store.d.ts.map +1 -0
- package/dist/db/sot-bindings-store.js +64 -0
- package/dist/db/sot-bindings-store.js.map +1 -0
- package/dist/db/test-schemas.d.ts +23 -0
- package/dist/db/test-schemas.d.ts.map +1 -0
- package/dist/db/test-schemas.js +111 -0
- package/dist/db/test-schemas.js.map +1 -0
- package/dist/db/voice-transcripts-store.d.ts +28 -0
- package/dist/db/voice-transcripts-store.d.ts.map +1 -0
- package/dist/db/voice-transcripts-store.js +43 -0
- package/dist/db/voice-transcripts-store.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2913 -0
- package/dist/index.js.map +1 -0
- package/dist/init.d.ts +7 -0
- package/dist/init.d.ts.map +1 -0
- package/dist/init.js +32 -0
- package/dist/init.js.map +1 -0
- package/dist/log-buffer.d.ts +71 -0
- package/dist/log-buffer.d.ts.map +1 -0
- package/dist/log-buffer.js +201 -0
- package/dist/log-buffer.js.map +1 -0
- package/dist/logging.d.ts +5 -0
- package/dist/logging.d.ts.map +1 -0
- package/dist/logging.js +130 -0
- package/dist/logging.js.map +1 -0
- package/dist/management-rules.d.ts +2 -0
- package/dist/management-rules.d.ts.map +1 -0
- package/dist/management-rules.js +62 -0
- package/dist/management-rules.js.map +1 -0
- package/dist/messaging/constants.d.ts +33 -0
- package/dist/messaging/constants.d.ts.map +1 -0
- package/dist/messaging/constants.js +52 -0
- package/dist/messaging/constants.js.map +1 -0
- package/dist/messaging/magic-phrase.d.ts +16 -0
- package/dist/messaging/magic-phrase.d.ts.map +1 -0
- package/dist/messaging/magic-phrase.js +103 -0
- package/dist/messaging/magic-phrase.js.map +1 -0
- package/dist/messaging/owner-channels.d.ts +20 -0
- package/dist/messaging/owner-channels.d.ts.map +1 -0
- package/dist/messaging/owner-channels.js +41 -0
- package/dist/messaging/owner-channels.js.map +1 -0
- package/dist/observers/calendar-poller.d.ts +51 -0
- package/dist/observers/calendar-poller.d.ts.map +1 -0
- package/dist/observers/calendar-poller.js +128 -0
- package/dist/observers/calendar-poller.js.map +1 -0
- package/dist/observers/context-index-reconciler-observer.d.ts +72 -0
- package/dist/observers/context-index-reconciler-observer.d.ts.map +1 -0
- package/dist/observers/context-index-reconciler-observer.js +253 -0
- package/dist/observers/context-index-reconciler-observer.js.map +1 -0
- package/dist/observers/delegated-probe-observer.d.ts +83 -0
- package/dist/observers/delegated-probe-observer.d.ts.map +1 -0
- package/dist/observers/delegated-probe-observer.js +237 -0
- package/dist/observers/delegated-probe-observer.js.map +1 -0
- package/dist/observers/delegated-sync-worker.d.ts +375 -0
- package/dist/observers/delegated-sync-worker.d.ts.map +1 -0
- package/dist/observers/delegated-sync-worker.js +1087 -0
- package/dist/observers/delegated-sync-worker.js.map +1 -0
- package/dist/observers/entity-mirror-observer.d.ts +55 -0
- package/dist/observers/entity-mirror-observer.d.ts.map +1 -0
- package/dist/observers/entity-mirror-observer.js +73 -0
- package/dist/observers/entity-mirror-observer.js.map +1 -0
- package/dist/observers/git-delegated-cron.d.ts +41 -0
- package/dist/observers/git-delegated-cron.d.ts.map +1 -0
- package/dist/observers/git-delegated-cron.js +159 -0
- package/dist/observers/git-delegated-cron.js.map +1 -0
- package/dist/observers/git-event-classifier.d.ts +52 -0
- package/dist/observers/git-event-classifier.d.ts.map +1 -0
- package/dist/observers/git-event-classifier.js +70 -0
- package/dist/observers/git-event-classifier.js.map +1 -0
- package/dist/observers/git-watcher.d.ts +162 -0
- package/dist/observers/git-watcher.d.ts.map +1 -0
- package/dist/observers/git-watcher.js +768 -0
- package/dist/observers/git-watcher.js.map +1 -0
- package/dist/observers/github-poller-classifier.d.ts +101 -0
- package/dist/observers/github-poller-classifier.d.ts.map +1 -0
- package/dist/observers/github-poller-classifier.js +199 -0
- package/dist/observers/github-poller-classifier.js.map +1 -0
- package/dist/observers/github-poller.d.ts +291 -0
- package/dist/observers/github-poller.d.ts.map +1 -0
- package/dist/observers/github-poller.js +609 -0
- package/dist/observers/github-poller.js.map +1 -0
- package/dist/observers/imminent-event-scheduler.d.ts +34 -0
- package/dist/observers/imminent-event-scheduler.d.ts.map +1 -0
- package/dist/observers/imminent-event-scheduler.js +125 -0
- package/dist/observers/imminent-event-scheduler.js.map +1 -0
- package/dist/observers/mail-poller.d.ts +133 -0
- package/dist/observers/mail-poller.d.ts.map +1 -0
- package/dist/observers/mail-poller.js +563 -0
- package/dist/observers/mail-poller.js.map +1 -0
- package/dist/observers/mail-reconciliation.d.ts +87 -0
- package/dist/observers/mail-reconciliation.d.ts.map +1 -0
- package/dist/observers/mail-reconciliation.js +241 -0
- package/dist/observers/mail-reconciliation.js.map +1 -0
- package/dist/observers/manager.d.ts +67 -0
- package/dist/observers/manager.d.ts.map +1 -0
- package/dist/observers/manager.js +136 -0
- package/dist/observers/manager.js.map +1 -0
- package/dist/observers/notion-poller.d.ts +43 -0
- package/dist/observers/notion-poller.d.ts.map +1 -0
- package/dist/observers/notion-poller.js +184 -0
- package/dist/observers/notion-poller.js.map +1 -0
- package/dist/observers/observation-summarizer/index.d.ts +13 -0
- package/dist/observers/observation-summarizer/index.d.ts.map +1 -0
- package/dist/observers/observation-summarizer/index.js +13 -0
- package/dist/observers/observation-summarizer/index.js.map +1 -0
- package/dist/observers/observation-summarizer/pre-filter.d.ts +62 -0
- package/dist/observers/observation-summarizer/pre-filter.d.ts.map +1 -0
- package/dist/observers/observation-summarizer/pre-filter.js +189 -0
- package/dist/observers/observation-summarizer/pre-filter.js.map +1 -0
- package/dist/observers/observation-summarizer/response-parser.d.ts +30 -0
- package/dist/observers/observation-summarizer/response-parser.d.ts.map +1 -0
- package/dist/observers/observation-summarizer/response-parser.js +106 -0
- package/dist/observers/observation-summarizer/response-parser.js.map +1 -0
- package/dist/observers/observation-summarizer/summarizer-client.d.ts +83 -0
- package/dist/observers/observation-summarizer/summarizer-client.d.ts.map +1 -0
- package/dist/observers/observation-summarizer/summarizer-client.js +185 -0
- package/dist/observers/observation-summarizer/summarizer-client.js.map +1 -0
- package/dist/observers/observation-summarizer/summarizer-prompts.d.ts +51 -0
- package/dist/observers/observation-summarizer/summarizer-prompts.d.ts.map +1 -0
- package/dist/observers/observation-summarizer/summarizer-prompts.js +286 -0
- package/dist/observers/observation-summarizer/summarizer-prompts.js.map +1 -0
- package/dist/observers/observation-summarizer/worker.d.ts +106 -0
- package/dist/observers/observation-summarizer/worker.d.ts.map +1 -0
- package/dist/observers/observation-summarizer/worker.js +311 -0
- package/dist/observers/observation-summarizer/worker.js.map +1 -0
- package/dist/observers/obsidian-watcher.d.ts +90 -0
- package/dist/observers/obsidian-watcher.d.ts.map +1 -0
- package/dist/observers/obsidian-watcher.js +166 -0
- package/dist/observers/obsidian-watcher.js.map +1 -0
- package/dist/observers/primary-vault-watcher.d.ts +73 -0
- package/dist/observers/primary-vault-watcher.d.ts.map +1 -0
- package/dist/observers/primary-vault-watcher.js +115 -0
- package/dist/observers/primary-vault-watcher.js.map +1 -0
- package/dist/observers/repository-management-cron.d.ts +70 -0
- package/dist/observers/repository-management-cron.d.ts.map +1 -0
- package/dist/observers/repository-management-cron.js +166 -0
- package/dist/observers/repository-management-cron.js.map +1 -0
- package/dist/observers/skill-curation-walker.d.ts +33 -0
- package/dist/observers/skill-curation-walker.d.ts.map +1 -0
- package/dist/observers/skill-curation-walker.js +216 -0
- package/dist/observers/skill-curation-walker.js.map +1 -0
- package/dist/safety/absolute-block-audit.d.ts +22 -0
- package/dist/safety/absolute-block-audit.d.ts.map +1 -0
- package/dist/safety/absolute-block-audit.js +32 -0
- package/dist/safety/absolute-block-audit.js.map +1 -0
- package/dist/safety/agent-write-tracker.d.ts +42 -0
- package/dist/safety/agent-write-tracker.d.ts.map +1 -0
- package/dist/safety/agent-write-tracker.js +82 -0
- package/dist/safety/agent-write-tracker.js.map +1 -0
- package/dist/safety/always-disallowed.d.ts +66 -0
- package/dist/safety/always-disallowed.d.ts.map +1 -0
- package/dist/safety/always-disallowed.js +347 -0
- package/dist/safety/always-disallowed.js.map +1 -0
- package/dist/safety/audit.d.ts +118 -0
- package/dist/safety/audit.d.ts.map +1 -0
- package/dist/safety/audit.js +324 -0
- package/dist/safety/audit.js.map +1 -0
- package/dist/safety/integration-write-tracker.d.ts +58 -0
- package/dist/safety/integration-write-tracker.d.ts.map +1 -0
- package/dist/safety/integration-write-tracker.js +41 -0
- package/dist/safety/integration-write-tracker.js.map +1 -0
- package/dist/safety/risk-classifier.d.ts +65 -0
- package/dist/safety/risk-classifier.d.ts.map +1 -0
- package/dist/safety/risk-classifier.js +763 -0
- package/dist/safety/risk-classifier.js.map +1 -0
- package/dist/scheduler/hourly-check-gate.d.ts +73 -0
- package/dist/scheduler/hourly-check-gate.d.ts.map +1 -0
- package/dist/scheduler/hourly-check-gate.js +128 -0
- package/dist/scheduler/hourly-check-gate.js.map +1 -0
- package/dist/secrets/backend-api-key-env.d.ts +104 -0
- package/dist/secrets/backend-api-key-env.d.ts.map +1 -0
- package/dist/secrets/backend-api-key-env.js +197 -0
- package/dist/secrets/backend-api-key-env.js.map +1 -0
- package/dist/secrets/codex-home-materializer.d.ts +35 -0
- package/dist/secrets/codex-home-materializer.d.ts.map +1 -0
- package/dist/secrets/codex-home-materializer.js +76 -0
- package/dist/secrets/codex-home-materializer.js.map +1 -0
- package/dist/secrets/encrypted-blob-store.d.ts +20 -0
- package/dist/secrets/encrypted-blob-store.d.ts.map +1 -0
- package/dist/secrets/encrypted-blob-store.js +80 -0
- package/dist/secrets/encrypted-blob-store.js.map +1 -0
- package/dist/secrets/platform-secret-store.d.ts +17 -0
- package/dist/secrets/platform-secret-store.d.ts.map +1 -0
- package/dist/secrets/platform-secret-store.js +37 -0
- package/dist/secrets/platform-secret-store.js.map +1 -0
- package/dist/secrets/redaction.d.ts +2 -0
- package/dist/secrets/redaction.d.ts.map +1 -0
- package/dist/secrets/redaction.js +2 -0
- package/dist/secrets/redaction.js.map +1 -0
- package/dist/secrets/secret-broker.d.ts +61 -0
- package/dist/secrets/secret-broker.d.ts.map +1 -0
- package/dist/secrets/secret-broker.js +160 -0
- package/dist/secrets/secret-broker.js.map +1 -0
- package/dist/secrets/secret-names.d.ts +34 -0
- package/dist/secrets/secret-names.d.ts.map +1 -0
- package/dist/secrets/secret-names.js +39 -0
- package/dist/secrets/secret-names.js.map +1 -0
- package/dist/secrets/secret-store.d.ts +8 -0
- package/dist/secrets/secret-store.d.ts.map +1 -0
- package/dist/secrets/secret-store.js +2 -0
- package/dist/secrets/secret-store.js.map +1 -0
- package/dist/secrets/types.d.ts +7 -0
- package/dist/secrets/types.d.ts.map +1 -0
- package/dist/secrets/types.js +2 -0
- package/dist/secrets/types.js.map +1 -0
- package/dist/services/apple-calendar/caldav-client.d.ts +48 -0
- package/dist/services/apple-calendar/caldav-client.d.ts.map +1 -0
- package/dist/services/apple-calendar/caldav-client.js +86 -0
- package/dist/services/apple-calendar/caldav-client.js.map +1 -0
- package/dist/services/apple-calendar/caldav-codec.d.ts +67 -0
- package/dist/services/apple-calendar/caldav-codec.d.ts.map +1 -0
- package/dist/services/apple-calendar/caldav-codec.js +341 -0
- package/dist/services/apple-calendar/caldav-codec.js.map +1 -0
- package/dist/services/apple-calendar/index.d.ts +3 -0
- package/dist/services/apple-calendar/index.d.ts.map +1 -0
- package/dist/services/apple-calendar/index.js +2 -0
- package/dist/services/apple-calendar/index.js.map +1 -0
- package/dist/services/apple-calendar/service.d.ts +75 -0
- package/dist/services/apple-calendar/service.d.ts.map +1 -0
- package/dist/services/apple-calendar/service.js +374 -0
- package/dist/services/apple-calendar/service.js.map +1 -0
- package/dist/services/apple-calendar/types.d.ts +78 -0
- package/dist/services/apple-calendar/types.d.ts.map +1 -0
- package/dist/services/apple-calendar/types.js +17 -0
- package/dist/services/apple-calendar/types.js.map +1 -0
- package/dist/services/attachments/hardlink.d.ts +11 -0
- package/dist/services/attachments/hardlink.d.ts.map +1 -0
- package/dist/services/attachments/hardlink.js +56 -0
- package/dist/services/attachments/hardlink.js.map +1 -0
- package/dist/services/attachments/sanitize.d.ts +21 -0
- package/dist/services/attachments/sanitize.d.ts.map +1 -0
- package/dist/services/attachments/sanitize.js +128 -0
- package/dist/services/attachments/sanitize.js.map +1 -0
- package/dist/services/attachments/store.d.ts +146 -0
- package/dist/services/attachments/store.d.ts.map +1 -0
- package/dist/services/attachments/store.js +477 -0
- package/dist/services/attachments/store.js.map +1 -0
- package/dist/services/calendar/outlook/graph-calendar-client.d.ts +114 -0
- package/dist/services/calendar/outlook/graph-calendar-client.d.ts.map +1 -0
- package/dist/services/calendar/outlook/graph-calendar-client.js +146 -0
- package/dist/services/calendar/outlook/graph-calendar-client.js.map +1 -0
- package/dist/services/calendar.d.ts +115 -0
- package/dist/services/calendar.d.ts.map +1 -0
- package/dist/services/calendar.js +281 -0
- package/dist/services/calendar.js.map +1 -0
- package/dist/services/delegated-backend-invoker.d.ts +414 -0
- package/dist/services/delegated-backend-invoker.d.ts.map +1 -0
- package/dist/services/delegated-backend-invoker.js +2372 -0
- package/dist/services/delegated-backend-invoker.js.map +1 -0
- package/dist/services/delegated-proxy-config.d.ts +93 -0
- package/dist/services/delegated-proxy-config.d.ts.map +1 -0
- package/dist/services/delegated-proxy-config.js +98 -0
- package/dist/services/delegated-proxy-config.js.map +1 -0
- package/dist/services/delegated-task-result-cache.d.ts +176 -0
- package/dist/services/delegated-task-result-cache.d.ts.map +1 -0
- package/dist/services/delegated-task-result-cache.js +0 -0
- package/dist/services/delegated-task-result-cache.js.map +1 -0
- package/dist/services/delegated-task-runtime.d.ts +346 -0
- package/dist/services/delegated-task-runtime.d.ts.map +1 -0
- package/dist/services/delegated-task-runtime.js +589 -0
- package/dist/services/delegated-task-runtime.js.map +1 -0
- package/dist/services/delegated-task-session-pool.d.ts +182 -0
- package/dist/services/delegated-task-session-pool.d.ts.map +1 -0
- package/dist/services/delegated-task-session-pool.js +292 -0
- package/dist/services/delegated-task-session-pool.js.map +1 -0
- package/dist/services/delegated-tool-runtime.d.ts +50 -0
- package/dist/services/delegated-tool-runtime.d.ts.map +1 -0
- package/dist/services/delegated-tool-runtime.js +120 -0
- package/dist/services/delegated-tool-runtime.js.map +1 -0
- package/dist/services/fts5.d.ts +40 -0
- package/dist/services/fts5.d.ts.map +1 -0
- package/dist/services/fts5.js +54 -0
- package/dist/services/fts5.js.map +1 -0
- package/dist/services/git-account-registry.d.ts +164 -0
- package/dist/services/git-account-registry.d.ts.map +1 -0
- package/dist/services/git-account-registry.js +297 -0
- package/dist/services/git-account-registry.js.map +1 -0
- package/dist/services/github.d.ts +49 -0
- package/dist/services/github.d.ts.map +1 -0
- package/dist/services/github.js +123 -0
- package/dist/services/github.js.map +1 -0
- package/dist/services/gmail-classifier.d.ts +62 -0
- package/dist/services/gmail-classifier.d.ts.map +1 -0
- package/dist/services/gmail-classifier.js +221 -0
- package/dist/services/gmail-classifier.js.map +1 -0
- package/dist/services/gmail.d.ts +192 -0
- package/dist/services/gmail.d.ts.map +1 -0
- package/dist/services/gmail.js +678 -0
- package/dist/services/gmail.js.map +1 -0
- package/dist/services/google-auth.d.ts +16 -0
- package/dist/services/google-auth.d.ts.map +1 -0
- package/dist/services/google-auth.js +37 -0
- package/dist/services/google-auth.js.map +1 -0
- package/dist/services/google-maps.d.ts +35 -0
- package/dist/services/google-maps.d.ts.map +1 -0
- package/dist/services/google-maps.js +82 -0
- package/dist/services/google-maps.js.map +1 -0
- package/dist/services/integrations/extract-write-item-id.d.ts +64 -0
- package/dist/services/integrations/extract-write-item-id.d.ts.map +1 -0
- package/dist/services/integrations/extract-write-item-id.js +188 -0
- package/dist/services/integrations/extract-write-item-id.js.map +1 -0
- package/dist/services/integrations/reconcile.d.ts +136 -0
- package/dist/services/integrations/reconcile.d.ts.map +1 -0
- package/dist/services/integrations/reconcile.js +218 -0
- package/dist/services/integrations/reconcile.js.map +1 -0
- package/dist/services/integrations/snapshot-partitions.d.ts +40 -0
- package/dist/services/integrations/snapshot-partitions.d.ts.map +1 -0
- package/dist/services/integrations/snapshot-partitions.js +113 -0
- package/dist/services/integrations/snapshot-partitions.js.map +1 -0
- package/dist/services/journal/render.d.ts +15 -0
- package/dist/services/journal/render.d.ts.map +1 -0
- package/dist/services/journal/render.js +17 -0
- package/dist/services/journal/render.js.map +1 -0
- package/dist/services/journal/writer.d.ts +26 -0
- package/dist/services/journal/writer.d.ts.map +1 -0
- package/dist/services/journal/writer.js +50 -0
- package/dist/services/journal/writer.js.map +1 -0
- package/dist/services/mail/account-registry.d.ts +208 -0
- package/dist/services/mail/account-registry.d.ts.map +1 -0
- package/dist/services/mail/account-registry.js +554 -0
- package/dist/services/mail/account-registry.js.map +1 -0
- package/dist/services/mail/gmail/auth-failure-classifier.d.ts +24 -0
- package/dist/services/mail/gmail/auth-failure-classifier.d.ts.map +1 -0
- package/dist/services/mail/gmail/auth-failure-classifier.js +67 -0
- package/dist/services/mail/gmail/auth-failure-classifier.js.map +1 -0
- package/dist/services/mail/gmail/gmail-provider.d.ts +58 -0
- package/dist/services/mail/gmail/gmail-provider.d.ts.map +1 -0
- package/dist/services/mail/gmail/gmail-provider.js +434 -0
- package/dist/services/mail/gmail/gmail-provider.js.map +1 -0
- package/dist/services/mail/gmail/legacy-row.d.ts +24 -0
- package/dist/services/mail/gmail/legacy-row.d.ts.map +1 -0
- package/dist/services/mail/gmail/legacy-row.js +71 -0
- package/dist/services/mail/gmail/legacy-row.js.map +1 -0
- package/dist/services/mail/gmail/poll-cursor.d.ts +12 -0
- package/dist/services/mail/gmail/poll-cursor.d.ts.map +1 -0
- package/dist/services/mail/gmail/poll-cursor.js +32 -0
- package/dist/services/mail/gmail/poll-cursor.js.map +1 -0
- package/dist/services/mail/html-to-plaintext.d.ts +27 -0
- package/dist/services/mail/html-to-plaintext.d.ts.map +1 -0
- package/dist/services/mail/html-to-plaintext.js +163 -0
- package/dist/services/mail/html-to-plaintext.js.map +1 -0
- package/dist/services/mail/imap/app-password.d.ts +27 -0
- package/dist/services/mail/imap/app-password.d.ts.map +1 -0
- package/dist/services/mail/imap/app-password.js +86 -0
- package/dist/services/mail/imap/app-password.js.map +1 -0
- package/dist/services/mail/imap/auth-failure-classifier.d.ts +21 -0
- package/dist/services/mail/imap/auth-failure-classifier.d.ts.map +1 -0
- package/dist/services/mail/imap/auth-failure-classifier.js +54 -0
- package/dist/services/mail/imap/auth-failure-classifier.js.map +1 -0
- package/dist/services/mail/imap/capabilities.d.ts +30 -0
- package/dist/services/mail/imap/capabilities.d.ts.map +1 -0
- package/dist/services/mail/imap/capabilities.js +70 -0
- package/dist/services/mail/imap/capabilities.js.map +1 -0
- package/dist/services/mail/imap/client.d.ts +15 -0
- package/dist/services/mail/imap/client.d.ts.map +1 -0
- package/dist/services/mail/imap/client.js +60 -0
- package/dist/services/mail/imap/client.js.map +1 -0
- package/dist/services/mail/imap/cursor.d.ts +19 -0
- package/dist/services/mail/imap/cursor.d.ts.map +1 -0
- package/dist/services/mail/imap/cursor.js +47 -0
- package/dist/services/mail/imap/cursor.js.map +1 -0
- package/dist/services/mail/imap/folder-resolver.d.ts +24 -0
- package/dist/services/mail/imap/folder-resolver.d.ts.map +1 -0
- package/dist/services/mail/imap/folder-resolver.js +58 -0
- package/dist/services/mail/imap/folder-resolver.js.map +1 -0
- package/dist/services/mail/imap/icloud-provider.d.ts +5 -0
- package/dist/services/mail/imap/icloud-provider.d.ts.map +1 -0
- package/dist/services/mail/imap/icloud-provider.js +5 -0
- package/dist/services/mail/imap/icloud-provider.js.map +1 -0
- package/dist/services/mail/imap/imap-provider-base.d.ts +173 -0
- package/dist/services/mail/imap/imap-provider-base.d.ts.map +1 -0
- package/dist/services/mail/imap/imap-provider-base.js +1004 -0
- package/dist/services/mail/imap/imap-provider-base.js.map +1 -0
- package/dist/services/mail/imap/query-translator.d.ts +13 -0
- package/dist/services/mail/imap/query-translator.d.ts.map +1 -0
- package/dist/services/mail/imap/query-translator.js +114 -0
- package/dist/services/mail/imap/query-translator.js.map +1 -0
- package/dist/services/mail/imap/reconcile-planner.d.ts +56 -0
- package/dist/services/mail/imap/reconcile-planner.d.ts.map +1 -0
- package/dist/services/mail/imap/reconcile-planner.js +52 -0
- package/dist/services/mail/imap/reconcile-planner.js.map +1 -0
- package/dist/services/mail/imap/reply-mime.d.ts +24 -0
- package/dist/services/mail/imap/reply-mime.d.ts.map +1 -0
- package/dist/services/mail/imap/reply-mime.js +77 -0
- package/dist/services/mail/imap/reply-mime.js.map +1 -0
- package/dist/services/mail/imap/yahoo-provider.d.ts +5 -0
- package/dist/services/mail/imap/yahoo-provider.d.ts.map +1 -0
- package/dist/services/mail/imap/yahoo-provider.js +5 -0
- package/dist/services/mail/imap/yahoo-provider.js.map +1 -0
- package/dist/services/mail/mail-search.d.ts +35 -0
- package/dist/services/mail/mail-search.d.ts.map +1 -0
- package/dist/services/mail/mail-search.js +59 -0
- package/dist/services/mail/mail-search.js.map +1 -0
- package/dist/services/mail/outlook/auth-failure-classifier.d.ts +38 -0
- package/dist/services/mail/outlook/auth-failure-classifier.d.ts.map +1 -0
- package/dist/services/mail/outlook/auth-failure-classifier.js +91 -0
- package/dist/services/mail/outlook/auth-failure-classifier.js.map +1 -0
- package/dist/services/mail/outlook/client-config.d.ts +34 -0
- package/dist/services/mail/outlook/client-config.d.ts.map +1 -0
- package/dist/services/mail/outlook/client-config.js +58 -0
- package/dist/services/mail/outlook/client-config.js.map +1 -0
- package/dist/services/mail/outlook/delta-cursor.d.ts +66 -0
- package/dist/services/mail/outlook/delta-cursor.d.ts.map +1 -0
- package/dist/services/mail/outlook/delta-cursor.js +85 -0
- package/dist/services/mail/outlook/delta-cursor.js.map +1 -0
- package/dist/services/mail/outlook/graph-client.d.ts +98 -0
- package/dist/services/mail/outlook/graph-client.d.ts.map +1 -0
- package/dist/services/mail/outlook/graph-client.js +198 -0
- package/dist/services/mail/outlook/graph-client.js.map +1 -0
- package/dist/services/mail/outlook/msal-app-factory.d.ts +20 -0
- package/dist/services/mail/outlook/msal-app-factory.d.ts.map +1 -0
- package/dist/services/mail/outlook/msal-app-factory.js +62 -0
- package/dist/services/mail/outlook/msal-app-factory.js.map +1 -0
- package/dist/services/mail/outlook/msal-cache-plugin.d.ts +19 -0
- package/dist/services/mail/outlook/msal-cache-plugin.d.ts.map +1 -0
- package/dist/services/mail/outlook/msal-cache-plugin.js +30 -0
- package/dist/services/mail/outlook/msal-cache-plugin.js.map +1 -0
- package/dist/services/mail/outlook/oauth-device-code.d.ts +26 -0
- package/dist/services/mail/outlook/oauth-device-code.d.ts.map +1 -0
- package/dist/services/mail/outlook/oauth-device-code.js +32 -0
- package/dist/services/mail/outlook/oauth-device-code.js.map +1 -0
- package/dist/services/mail/outlook/oauth-loopback.d.ts +41 -0
- package/dist/services/mail/outlook/oauth-loopback.d.ts.map +1 -0
- package/dist/services/mail/outlook/oauth-loopback.js +223 -0
- package/dist/services/mail/outlook/oauth-loopback.js.map +1 -0
- package/dist/services/mail/outlook/outlook-provider.d.ts +100 -0
- package/dist/services/mail/outlook/outlook-provider.d.ts.map +1 -0
- package/dist/services/mail/outlook/outlook-provider.js +619 -0
- package/dist/services/mail/outlook/outlook-provider.js.map +1 -0
- package/dist/services/mail/outlook/query-translator.d.ts +10 -0
- package/dist/services/mail/outlook/query-translator.d.ts.map +1 -0
- package/dist/services/mail/outlook/query-translator.js +103 -0
- package/dist/services/mail/outlook/query-translator.js.map +1 -0
- package/dist/services/mail/provider.d.ts +267 -0
- package/dist/services/mail/provider.d.ts.map +1 -0
- package/dist/services/mail/provider.js +34 -0
- package/dist/services/mail/provider.js.map +1 -0
- package/dist/services/mail/query-utils.d.ts +13 -0
- package/dist/services/mail/query-utils.d.ts.map +1 -0
- package/dist/services/mail/query-utils.js +18 -0
- package/dist/services/mail/query-utils.js.map +1 -0
- package/dist/services/mail-classifier.d.ts +25 -0
- package/dist/services/mail-classifier.d.ts.map +1 -0
- package/dist/services/mail-classifier.js +52 -0
- package/dist/services/mail-classifier.js.map +1 -0
- package/dist/services/mail-ingestion.d.ts +139 -0
- package/dist/services/mail-ingestion.d.ts.map +1 -0
- package/dist/services/mail-ingestion.js +223 -0
- package/dist/services/mail-ingestion.js.map +1 -0
- package/dist/services/mcp/auto-probe.d.ts +76 -0
- package/dist/services/mcp/auto-probe.d.ts.map +1 -0
- package/dist/services/mcp/auto-probe.js +147 -0
- package/dist/services/mcp/auto-probe.js.map +1 -0
- package/dist/services/mcp/generators/claude.d.ts +18 -0
- package/dist/services/mcp/generators/claude.d.ts.map +1 -0
- package/dist/services/mcp/generators/claude.js +90 -0
- package/dist/services/mcp/generators/claude.js.map +1 -0
- package/dist/services/mcp/generators/codex.d.ts +22 -0
- package/dist/services/mcp/generators/codex.d.ts.map +1 -0
- package/dist/services/mcp/generators/codex.js +102 -0
- package/dist/services/mcp/generators/codex.js.map +1 -0
- package/dist/services/mcp/generators/gemini.d.ts +20 -0
- package/dist/services/mcp/generators/gemini.d.ts.map +1 -0
- package/dist/services/mcp/generators/gemini.js +97 -0
- package/dist/services/mcp/generators/gemini.js.map +1 -0
- package/dist/services/mcp/generators/index.d.ts +20 -0
- package/dist/services/mcp/generators/index.d.ts.map +1 -0
- package/dist/services/mcp/generators/index.js +29 -0
- package/dist/services/mcp/generators/index.js.map +1 -0
- package/dist/services/mcp/generators/types.d.ts +47 -0
- package/dist/services/mcp/generators/types.d.ts.map +1 -0
- package/dist/services/mcp/generators/types.js +40 -0
- package/dist/services/mcp/generators/types.js.map +1 -0
- package/dist/services/mcp/probe.d.ts +31 -0
- package/dist/services/mcp/probe.d.ts.map +1 -0
- package/dist/services/mcp/probe.js +437 -0
- package/dist/services/mcp/probe.js.map +1 -0
- package/dist/services/mcp/registry.d.ts +84 -0
- package/dist/services/mcp/registry.d.ts.map +1 -0
- package/dist/services/mcp/registry.js +387 -0
- package/dist/services/mcp/registry.js.map +1 -0
- package/dist/services/mcp/risk.d.ts +82 -0
- package/dist/services/mcp/risk.d.ts.map +1 -0
- package/dist/services/mcp/risk.js +126 -0
- package/dist/services/mcp/risk.js.map +1 -0
- package/dist/services/mcp/session-materializer.d.ts +123 -0
- package/dist/services/mcp/session-materializer.d.ts.map +1 -0
- package/dist/services/mcp/session-materializer.js +361 -0
- package/dist/services/mcp/session-materializer.js.map +1 -0
- package/dist/services/mcp/tool-audit.d.ts +53 -0
- package/dist/services/mcp/tool-audit.d.ts.map +1 -0
- package/dist/services/mcp/tool-audit.js +74 -0
- package/dist/services/mcp/tool-audit.js.map +1 -0
- package/dist/services/mcp/types.d.ts +88 -0
- package/dist/services/mcp/types.d.ts.map +1 -0
- package/dist/services/mcp/types.js +94 -0
- package/dist/services/mcp/types.js.map +1 -0
- package/dist/services/notion.d.ts +134 -0
- package/dist/services/notion.d.ts.map +1 -0
- package/dist/services/notion.js +350 -0
- package/dist/services/notion.js.map +1 -0
- package/dist/services/obsidian.d.ts +116 -0
- package/dist/services/obsidian.d.ts.map +1 -0
- package/dist/services/obsidian.js +305 -0
- package/dist/services/obsidian.js.map +1 -0
- package/dist/services/service-registry.d.ts +31 -0
- package/dist/services/service-registry.d.ts.map +1 -0
- package/dist/services/service-registry.js +15 -0
- package/dist/services/service-registry.js.map +1 -0
- package/dist/services/voice/transcriber-impl.d.ts +15 -0
- package/dist/services/voice/transcriber-impl.d.ts.map +1 -0
- package/dist/services/voice/transcriber-impl.js +129 -0
- package/dist/services/voice/transcriber-impl.js.map +1 -0
- package/dist/services/voice/transcriber.d.ts +117 -0
- package/dist/services/voice/transcriber.d.ts.map +1 -0
- package/dist/services/voice/transcriber.js +201 -0
- package/dist/services/voice/transcriber.js.map +1 -0
- package/dist/settings/runtime-settings.d.ts +232 -0
- package/dist/settings/runtime-settings.d.ts.map +1 -0
- package/dist/settings/runtime-settings.js +769 -0
- package/dist/settings/runtime-settings.js.map +1 -0
- package/dist/settings/settings-store.d.ts +13 -0
- package/dist/settings/settings-store.d.ts.map +1 -0
- package/dist/settings/settings-store.js +87 -0
- package/dist/settings/settings-store.js.map +1 -0
- package/package.json +85 -0
|
@@ -0,0 +1,896 @@
|
|
|
1
|
+
import cron from "node-cron";
|
|
2
|
+
import { randomUUID } from "node:crypto";
|
|
3
|
+
import { createEvent, EventPriority, formatSqliteDatetime, getAgentDayBoundsUtc, nowInTimezone, } from "@aitne/shared";
|
|
4
|
+
import { runRetentionCleanup } from "./retention.js";
|
|
5
|
+
import { cleanupSessionWorkdir, cleanupStaleWorkdirs, getSessionWorkdirPath } from "./workdir.js";
|
|
6
|
+
import { discardStalePendingSchedules } from "./schedule-maintenance.js";
|
|
7
|
+
import { createLogger } from "../logging.js";
|
|
8
|
+
import { reconcileRecurringSchedules } from "../db/recurring-schedules.js";
|
|
9
|
+
const logger = createLogger("scheduler");
|
|
10
|
+
/**
|
|
11
|
+
* True iff `intervalMinutes` cleanly fits inside an hour, so the firing
|
|
12
|
+
* minutes are predictable across every hour of the active window. We use
|
|
13
|
+
* this to decide whether to emit a tight minute-list cron expression vs.
|
|
14
|
+
* a minute-tick cron + in-callback gate.
|
|
15
|
+
*/
|
|
16
|
+
function isDivisorOfHour(intervalMinutes) {
|
|
17
|
+
return intervalMinutes >= 1 && intervalMinutes <= 60 && 60 % intervalMinutes === 0;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Build the cron expression that drives the hourly check.
|
|
21
|
+
*
|
|
22
|
+
* Two regimes:
|
|
23
|
+
*
|
|
24
|
+
* 1. **Divisor of 60** (`isDivisorOfHour(intervalMinutes)`, e.g. 1, 5, 15,
|
|
25
|
+
* 20, 30, 60): the firing minutes are predictable within every hour, so
|
|
26
|
+
* we emit an exact minute list (`"0,15,30,45 4-23 * * *"`). The cron
|
|
27
|
+
* only wakes on the actual firing minutes — no in-callback gating
|
|
28
|
+
* needed.
|
|
29
|
+
*
|
|
30
|
+
* 2. **Arbitrary interval** (anything else, e.g. 7, 45, 90, 120, 720,
|
|
31
|
+
* 1440): we emit `"* <hourRange> * * *"` (every minute within active
|
|
32
|
+
* hours). The caller is expected to gate each tick with
|
|
33
|
+
* `shouldFireHourlyTickAt(...)`, which anchors the cadence to
|
|
34
|
+
* `activeStartHour` via `((h*60 + m) - activeStartHour*60) %
|
|
35
|
+
* intervalMinutes`. This anchor matters: a midnight-anchored modulo
|
|
36
|
+
* plus `activeStartHour > 0` would silently drop intervals where the
|
|
37
|
+
* only mod-zero point falls outside active hours (e.g. interval=1440
|
|
38
|
+
* with startHour=4 — mod-zero only at 00:00, never inside the window).
|
|
39
|
+
* Anchoring at `activeStartHour` guarantees the first fire of each
|
|
40
|
+
* agent-day lands at the start of the window, then every N minutes
|
|
41
|
+
* until the window closes.
|
|
42
|
+
*
|
|
43
|
+
* The minute-tick cron does fire 60× per hour even when most ticks are
|
|
44
|
+
* no-ops, but the callback's first action is the modulo check — overhead
|
|
45
|
+
* is negligible compared to the actual hourly-check work.
|
|
46
|
+
*/
|
|
47
|
+
export function buildHourlyCronExpr(intervalMinutes, startHour, endHourExclusive) {
|
|
48
|
+
const endHour = Math.max(startHour, endHourExclusive - 1);
|
|
49
|
+
const hourRange = startHour === endHour ? `${startHour}` : `${startHour}-${endHour}`;
|
|
50
|
+
if (isDivisorOfHour(intervalMinutes)) {
|
|
51
|
+
const minuteList = [];
|
|
52
|
+
for (let minute = 0; minute < 60; minute += intervalMinutes) {
|
|
53
|
+
minuteList.push(minute);
|
|
54
|
+
}
|
|
55
|
+
return `${minuteList.join(",")} ${hourRange} * * *`;
|
|
56
|
+
}
|
|
57
|
+
return `* ${hourRange} * * *`;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Returns true when a minute-tick of the hourly cron should actually fire.
|
|
61
|
+
*
|
|
62
|
+
* Only meaningful for arbitrary (non-divisor-of-60) intervals — divisor
|
|
63
|
+
* cases get exact firing minutes baked into the cron expression and don't
|
|
64
|
+
* need this gate (handled by the early-return).
|
|
65
|
+
*
|
|
66
|
+
* The cadence is anchored at `activeStartHour` so the first slot of each
|
|
67
|
+
* agent-day lies at the start of the active window. This is what allows
|
|
68
|
+
* intervals up to 1440 (24h) to work correctly: a midnight anchor would
|
|
69
|
+
* make `interval=1440` fire only at 00:00, which is excluded by typical
|
|
70
|
+
* active-hour configs (4–24) and the day-boundary skip.
|
|
71
|
+
*
|
|
72
|
+
* Note: divisor-of-60 intervals always also divide `activeStartHour*60`
|
|
73
|
+
* (since `activeStartHour` is an integer and `intervalMinutes` divides 60),
|
|
74
|
+
* so the divisor early-return doesn't change behavior — it's just
|
|
75
|
+
* explicit about which path the cron expression itself handles.
|
|
76
|
+
*/
|
|
77
|
+
export function shouldFireHourlyTickAt(localHour, localMinute, intervalMinutes, activeStartHour) {
|
|
78
|
+
if (isDivisorOfHour(intervalMinutes))
|
|
79
|
+
return true;
|
|
80
|
+
const minutesSinceMidnight = localHour * 60 + localMinute;
|
|
81
|
+
const anchor = activeStartHour * 60;
|
|
82
|
+
// localHour < activeStartHour can't happen in normal operation (cron's
|
|
83
|
+
// hour range excludes those hours) but be defensive: a negative offset
|
|
84
|
+
// mod a positive interval is implementation-defined in JS (returns a
|
|
85
|
+
// negative or zero), which would falsely fire. Add a full day to keep
|
|
86
|
+
// the offset non-negative regardless.
|
|
87
|
+
const offset = (minutesSinceMidnight - anchor + 24 * 60) % (24 * 60);
|
|
88
|
+
return offset % intervalMinutes === 0;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Cron expression for the morning user-profile sweep: 10 min before the
|
|
92
|
+
* day boundary, wrapping backward across midnight. For the default
|
|
93
|
+
* `dayBoundaryHour = 4`, returns `"50 3 * * *"`. Extracted as a pure
|
|
94
|
+
* helper so the arithmetic can be asserted without having to mock
|
|
95
|
+
* node-cron.
|
|
96
|
+
*/
|
|
97
|
+
export function buildUserProfileSweepMorningCronExpr(dayBoundaryHour) {
|
|
98
|
+
const hour = (dayBoundaryHour - 1 + 24) % 24;
|
|
99
|
+
return `50 ${hour} * * *`;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Cron expression for the evening user-profile sweep: fixed at 17:50
|
|
103
|
+
* local, which is 10 min before Evening Review's fixed 18:00. If
|
|
104
|
+
* Evening Review ever becomes time-configurable, this expression must
|
|
105
|
+
* track the same config knob in lockstep.
|
|
106
|
+
*/
|
|
107
|
+
export const USER_PROFILE_SWEEP_EVENING_CRON_EXPR = "50 17 * * *";
|
|
108
|
+
/**
|
|
109
|
+
* AgentScheduler — manages recurring cron jobs and the DB-driven ScheduleWatcher.
|
|
110
|
+
*
|
|
111
|
+
* Cron jobs:
|
|
112
|
+
* - 04:00 daily: Morning Routine + daily cleanup + retention
|
|
113
|
+
* - 18:00 daily: Evening Review
|
|
114
|
+
* - 18:00 Friday: Weekly Review
|
|
115
|
+
* - 18:00 last day of month: Monthly Review
|
|
116
|
+
*
|
|
117
|
+
* ScheduleWatcher:
|
|
118
|
+
* - Polls agent_schedule table every N seconds for pending tasks
|
|
119
|
+
* - Handles agent-scheduled wake-ups and DMs
|
|
120
|
+
* - Uses optimistic locking to prevent duplicate execution
|
|
121
|
+
*/
|
|
122
|
+
export class AgentScheduler {
|
|
123
|
+
eventBus;
|
|
124
|
+
db;
|
|
125
|
+
config;
|
|
126
|
+
shutdown = false;
|
|
127
|
+
cronJobs = [];
|
|
128
|
+
noFutureTasksWarned = false;
|
|
129
|
+
onDayBoundary = null;
|
|
130
|
+
sendDm = null;
|
|
131
|
+
onHourlyCheck = null;
|
|
132
|
+
/**
|
|
133
|
+
* Phase 4 auth probe hook — fired on every hourly cron tick BEFORE
|
|
134
|
+
* `onHourlyCheck` so the probe gets a chance to refresh DB cache +
|
|
135
|
+
* emit DMs even when the observation-threshold gate would skip the
|
|
136
|
+
* hourly check itself. The AuthHealthMonitor.checkAll() method owns
|
|
137
|
+
* its own kill-switch and morning-routine skip; the scheduler only
|
|
138
|
+
* applies the same `autonomousGate` short-circuit that protects the
|
|
139
|
+
* other cron callbacks.
|
|
140
|
+
*
|
|
141
|
+
* See `docs/design/09-safety-cost.md` §9.5.4 for the gate
|
|
142
|
+
* ordering: morning-routine → hourly-already-running → auth probe
|
|
143
|
+
* → observation-threshold. Steps 1 + 2 are handled inside
|
|
144
|
+
* `triggerHourlyCheck`; step 3 is this callback; step 4 is the
|
|
145
|
+
* threshold gate inside `triggerHourlyCheck`.
|
|
146
|
+
*/
|
|
147
|
+
onAuthProbe = null;
|
|
148
|
+
/**
|
|
149
|
+
* B-004 Phase 2a — nightly context-index reconciler callback (§4.1).
|
|
150
|
+
* Fires at 03:45 local (dayBoundaryHour - 15 min) via an internal cron
|
|
151
|
+
* job, BEFORE the morning routine so the index is fresh when the
|
|
152
|
+
* morning flow reads it. The observer owns the run-once guard.
|
|
153
|
+
*/
|
|
154
|
+
onContextIndexReconcile = null;
|
|
155
|
+
/**
|
|
156
|
+
* Setup gate — returns a skip reason when autonomous work should be
|
|
157
|
+
* paused (initial setup incomplete, or setup conversation active).
|
|
158
|
+
* Returns null when autonomous work may proceed. Wired from EventDispatcher
|
|
159
|
+
* via setAutonomousGate() so the scheduler doesn't take a hard dependency
|
|
160
|
+
* on the dispatcher.
|
|
161
|
+
*/
|
|
162
|
+
autonomousGate = () => null;
|
|
163
|
+
lastGateBlockLoggedAt = 0;
|
|
164
|
+
/**
|
|
165
|
+
* Aborted by stop() to interrupt the ScheduleWatcher's between-poll sleep
|
|
166
|
+
* immediately. Without this, SIGTERM has to wait up to
|
|
167
|
+
* `schedulePollIntervalSeconds` before the loop notices `this.shutdown`.
|
|
168
|
+
*/
|
|
169
|
+
pollAbort = null;
|
|
170
|
+
constructor(eventBus, db, config) {
|
|
171
|
+
this.eventBus = eventBus;
|
|
172
|
+
this.db = db;
|
|
173
|
+
this.config = config;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Register a callback that runs at the day boundary (4 AM) BEFORE
|
|
177
|
+
* the morning routine and daily cleanup. Used for DM session summarization.
|
|
178
|
+
*/
|
|
179
|
+
setDayBoundaryCallback(fn) {
|
|
180
|
+
this.onDayBoundary = fn;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Register a callback for sending direct DMs (scheduled via POST /api/schedule/dm).
|
|
184
|
+
* When a task_type='dm' row is due, the message is sent directly without an agent.
|
|
185
|
+
*/
|
|
186
|
+
setSendDmCallback(fn) {
|
|
187
|
+
this.sendDm = fn;
|
|
188
|
+
}
|
|
189
|
+
setHourlyCheckCallback(fn) {
|
|
190
|
+
this.onHourlyCheck = fn;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Register the Phase 4 auth probe callback. Called on each hourly
|
|
194
|
+
* cron tick BEFORE the hourly-check observation threshold gate so
|
|
195
|
+
* the probe continues to run even when the hourly check itself
|
|
196
|
+
* would be skipped for lack of pending observations.
|
|
197
|
+
*/
|
|
198
|
+
setAuthProbeCallback(fn) {
|
|
199
|
+
this.onAuthProbe = fn;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Register the context-index reconciler cron callback. Called every
|
|
203
|
+
* night at 03:45 local; the callback is expected to be fire-and-forget
|
|
204
|
+
* and enqueue a reconcile via the observer's run-once guard.
|
|
205
|
+
*/
|
|
206
|
+
setContextIndexReconcilerCallback(fn) {
|
|
207
|
+
this.onContextIndexReconcile = fn;
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Register the autonomous-work gate. Returning null allows autonomous work;
|
|
211
|
+
* any non-null string is treated as a skip reason and surfaced in logs.
|
|
212
|
+
*/
|
|
213
|
+
setAutonomousGate(fn) {
|
|
214
|
+
this.autonomousGate = fn;
|
|
215
|
+
}
|
|
216
|
+
/** Log gate blocks at most once every 5 minutes to avoid spam. */
|
|
217
|
+
logGateBlock(reason, context) {
|
|
218
|
+
const now = Date.now();
|
|
219
|
+
if (now - this.lastGateBlockLoggedAt < 5 * 60 * 1000)
|
|
220
|
+
return;
|
|
221
|
+
this.lastGateBlockLoggedAt = now;
|
|
222
|
+
logger.info({ ...context, reason }, "Autonomous work paused (setup gate)");
|
|
223
|
+
}
|
|
224
|
+
start() {
|
|
225
|
+
this.setupRecurringJobs();
|
|
226
|
+
this.startScheduleWatcher();
|
|
227
|
+
logger.info("Scheduler started");
|
|
228
|
+
}
|
|
229
|
+
stop() {
|
|
230
|
+
this.shutdown = true;
|
|
231
|
+
// Wake up the ScheduleWatcher's poll sleep so the loop returns immediately
|
|
232
|
+
// instead of waiting for the next interval tick.
|
|
233
|
+
this.pollAbort?.abort();
|
|
234
|
+
this.stopCronJobs();
|
|
235
|
+
logger.info("Scheduler stopped");
|
|
236
|
+
}
|
|
237
|
+
/** Hot-reload cron schedules (e.g. after dayBoundaryHour changes) */
|
|
238
|
+
reloadCrons() {
|
|
239
|
+
this.stopCronJobs();
|
|
240
|
+
this.setupRecurringJobs();
|
|
241
|
+
logger.info("Cron jobs reloaded");
|
|
242
|
+
}
|
|
243
|
+
stopCronJobs() {
|
|
244
|
+
for (const job of this.cronJobs) {
|
|
245
|
+
job.stop();
|
|
246
|
+
}
|
|
247
|
+
this.cronJobs.length = 0;
|
|
248
|
+
}
|
|
249
|
+
setupRecurringJobs() {
|
|
250
|
+
const tz = this.config.timezone || undefined;
|
|
251
|
+
// Morning Routine: daily at dayBoundaryHour (default 04:00)
|
|
252
|
+
// Order: day boundary callback (DM summarize) → morning routine → cleanup
|
|
253
|
+
const morningJob = cron.schedule(`0 ${this.config.dayBoundaryHour} * * *`, () => {
|
|
254
|
+
const gateReason = this.autonomousGate();
|
|
255
|
+
if (gateReason !== null) {
|
|
256
|
+
this.logGateBlock(gateReason, { cron: "morning_routine" });
|
|
257
|
+
return;
|
|
258
|
+
}
|
|
259
|
+
void (async () => {
|
|
260
|
+
try {
|
|
261
|
+
if (this.onDayBoundary) {
|
|
262
|
+
await this.onDayBoundary();
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
catch (err) {
|
|
266
|
+
logger.error({ err }, "Day boundary callback failed");
|
|
267
|
+
}
|
|
268
|
+
this.dailyCleanup();
|
|
269
|
+
this.queueMorningRoutineWake("cron");
|
|
270
|
+
})();
|
|
271
|
+
}, { timezone: tz });
|
|
272
|
+
this.cronJobs.push(morningJob);
|
|
273
|
+
// Evening Review: daily at 18:00
|
|
274
|
+
const eveningJob = cron.schedule("0 18 * * *", () => {
|
|
275
|
+
const gateReason = this.autonomousGate();
|
|
276
|
+
if (gateReason !== null) {
|
|
277
|
+
this.logGateBlock(gateReason, { cron: "evening_review" });
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
280
|
+
this.emitRoutine("evening_review");
|
|
281
|
+
}, { timezone: tz });
|
|
282
|
+
this.cronJobs.push(eveningJob);
|
|
283
|
+
// User-profile sweep (morning phase): 10 min before the day boundary.
|
|
284
|
+
// For dayBoundaryHour = 4 this is "50 3 * * *". Fires before the
|
|
285
|
+
// morning routine so the morning routine reads a freshly up-to-date
|
|
286
|
+
// user/profile.md when it loads <user>. See USER-PROFILE-CAPTURE-PLAN.md
|
|
287
|
+
// §Phase 2.
|
|
288
|
+
const sweepMorningJob = cron.schedule(buildUserProfileSweepMorningCronExpr(this.config.dayBoundaryHour), () => {
|
|
289
|
+
const gateReason = this.autonomousGate();
|
|
290
|
+
if (gateReason !== null) {
|
|
291
|
+
this.logGateBlock(gateReason, { cron: "user_profile_sweep_morning" });
|
|
292
|
+
return;
|
|
293
|
+
}
|
|
294
|
+
this.emitRoutine("user_profile_sweep", { phase: "morning" });
|
|
295
|
+
}, { timezone: tz });
|
|
296
|
+
this.cronJobs.push(sweepMorningJob);
|
|
297
|
+
// User-profile sweep (evening phase): 10 min before Evening Review.
|
|
298
|
+
// Evening Review's cron is fixed at 18:00, so this is always "50 17
|
|
299
|
+
// * * *". If Evening Review ever becomes time-configurable, this
|
|
300
|
+
// cron must track the same config knob in lockstep.
|
|
301
|
+
const sweepEveningJob = cron.schedule(USER_PROFILE_SWEEP_EVENING_CRON_EXPR, () => {
|
|
302
|
+
const gateReason = this.autonomousGate();
|
|
303
|
+
if (gateReason !== null) {
|
|
304
|
+
this.logGateBlock(gateReason, { cron: "user_profile_sweep_evening" });
|
|
305
|
+
return;
|
|
306
|
+
}
|
|
307
|
+
this.emitRoutine("user_profile_sweep", { phase: "evening" });
|
|
308
|
+
}, { timezone: tz });
|
|
309
|
+
this.cronJobs.push(sweepEveningJob);
|
|
310
|
+
// Weekly Review: Friday at 18:00
|
|
311
|
+
// Emits a separate routine event so the prompt can generate weekly/YYYY-Www.md
|
|
312
|
+
const weeklyJob = cron.schedule("0 18 * * 5", () => {
|
|
313
|
+
const gateReason = this.autonomousGate();
|
|
314
|
+
if (gateReason !== null) {
|
|
315
|
+
this.logGateBlock(gateReason, { cron: "weekly_review" });
|
|
316
|
+
return;
|
|
317
|
+
}
|
|
318
|
+
this.emitRoutine("weekly_review");
|
|
319
|
+
}, { timezone: tz });
|
|
320
|
+
this.cronJobs.push(weeklyJob);
|
|
321
|
+
// Monthly Review: last day of month at 18:00
|
|
322
|
+
// node-cron doesn't directly support "last day of month",
|
|
323
|
+
// so we run daily at 18:00 and check if tomorrow is the 1st
|
|
324
|
+
const monthlyJob = cron.schedule("0 18 * * *", () => {
|
|
325
|
+
// Check if tomorrow (in configured timezone) is the 1st
|
|
326
|
+
const tomorrow = new Date();
|
|
327
|
+
tomorrow.setDate(tomorrow.getDate() + 1);
|
|
328
|
+
const tomorrowLocal = nowInTimezone(tz, tomorrow);
|
|
329
|
+
if (tomorrowLocal.day === 1) {
|
|
330
|
+
const gateReason = this.autonomousGate();
|
|
331
|
+
if (gateReason !== null) {
|
|
332
|
+
this.logGateBlock(gateReason, { cron: "monthly_review" });
|
|
333
|
+
return;
|
|
334
|
+
}
|
|
335
|
+
this.emitRoutine("monthly_review");
|
|
336
|
+
}
|
|
337
|
+
}, { timezone: tz });
|
|
338
|
+
this.cronJobs.push(monthlyJob);
|
|
339
|
+
// Context-index reconciler (B-004 Phase 2a). Run 15 minutes before
|
|
340
|
+
// the day boundary so the index is fresh when the morning routine
|
|
341
|
+
// reads it. The callback's morning-routine lock gate defers the run
|
|
342
|
+
// if this cron happens to fire while a retrying morning routine still
|
|
343
|
+
// holds the lock.
|
|
344
|
+
const reconcilerHour = (this.config.dayBoundaryHour + 23) % 24;
|
|
345
|
+
const reconcilerCron = `45 ${reconcilerHour} * * *`;
|
|
346
|
+
const reconcilerJob = cron.schedule(reconcilerCron, () => {
|
|
347
|
+
const gateReason = this.autonomousGate();
|
|
348
|
+
if (gateReason !== null) {
|
|
349
|
+
this.logGateBlock(gateReason, { cron: "context_index_reconcile" });
|
|
350
|
+
return;
|
|
351
|
+
}
|
|
352
|
+
try {
|
|
353
|
+
this.onContextIndexReconcile?.();
|
|
354
|
+
}
|
|
355
|
+
catch (err) {
|
|
356
|
+
logger.warn({ err }, "Context-index reconcile callback threw");
|
|
357
|
+
}
|
|
358
|
+
}, { timezone: tz });
|
|
359
|
+
this.cronJobs.push(reconcilerJob);
|
|
360
|
+
if (this.config.hourlyCheckEnabled) {
|
|
361
|
+
const hourlyExpr = buildHourlyCronExpr(this.config.hourlyCheckIntervalMinutes, this.config.hourlyCheckActiveStartHour, this.config.hourlyCheckActiveEndHour);
|
|
362
|
+
const hourlyJob = cron.schedule(hourlyExpr, () => {
|
|
363
|
+
const now = new Date();
|
|
364
|
+
// Pull both hour and minute from the canonical timezone helper
|
|
365
|
+
// so the day-boundary skip and the interval gate observe the
|
|
366
|
+
// same local time. (The earlier inline `Intl.DateTimeFormat`
|
|
367
|
+
// calls were equivalent for 60-min intervals but obscured the
|
|
368
|
+
// fact that minute-extraction needs to round-trip through the
|
|
369
|
+
// same timezone.)
|
|
370
|
+
const local = nowInTimezone(tz, now);
|
|
371
|
+
if (local.hours === this.config.dayBoundaryHour) {
|
|
372
|
+
return;
|
|
373
|
+
}
|
|
374
|
+
// Arbitrary intervals run on a `* <hours> * * *` cron and must
|
|
375
|
+
// be gated here. Anchor at `activeStartHour` so the first slot
|
|
376
|
+
// of each agent-day lands at the start of the active window —
|
|
377
|
+
// critical for intervals near or equal to the window length.
|
|
378
|
+
// Divisor-of-60 cases short-circuit inside the helper.
|
|
379
|
+
if (!shouldFireHourlyTickAt(local.hours, local.minutes, this.config.hourlyCheckIntervalMinutes, this.config.hourlyCheckActiveStartHour)) {
|
|
380
|
+
return;
|
|
381
|
+
}
|
|
382
|
+
// triggerHourlyCheck has its own setup gate, but short-circuit
|
|
383
|
+
// here to avoid the in-progress flag toggling for no reason.
|
|
384
|
+
const gateReason = this.autonomousGate();
|
|
385
|
+
if (gateReason !== null) {
|
|
386
|
+
this.logGateBlock(gateReason, { cron: "hourly_check" });
|
|
387
|
+
return;
|
|
388
|
+
}
|
|
389
|
+
// Phase 4 auth probe runs BEFORE the hourly check so that the
|
|
390
|
+
// observation-threshold gate (which can skip `onHourlyCheck`
|
|
391
|
+
// entirely when there's no pending user activity) does not
|
|
392
|
+
// also stall auth health detection. The probe owns its own
|
|
393
|
+
// morning-routine / probe-disabled gating; we only respect
|
|
394
|
+
// the autonomous setup gate here.
|
|
395
|
+
if (this.onAuthProbe) {
|
|
396
|
+
void this.onAuthProbe().catch((err) => {
|
|
397
|
+
logger.warn({ err }, "Auth probe callback failed");
|
|
398
|
+
});
|
|
399
|
+
}
|
|
400
|
+
if (this.onHourlyCheck) {
|
|
401
|
+
void this.onHourlyCheck("cron");
|
|
402
|
+
}
|
|
403
|
+
}, { timezone: tz });
|
|
404
|
+
this.cronJobs.push(hourlyJob);
|
|
405
|
+
}
|
|
406
|
+
// P22 §6.3, §6.4 — skill curation. Registered only when the operator
|
|
407
|
+
// has opted in via /settings/self-learning (`enabled=true`). Always
|
|
408
|
+
// fires daily at 03:00; the gate inside the handler checks whether
|
|
409
|
+
// the cadence interval (daily=24 h, weekly=7 d, monthly=30 d) has
|
|
410
|
+
// elapsed since the last run's `started_at`. This makes manual runs
|
|
411
|
+
// (P22 §6.4) push the next auto-run forward by exactly one cadence
|
|
412
|
+
// interval — clicking "Run now" today on a daily cadence means the
|
|
413
|
+
// next auto-run fires tomorrow rather than today's 03:00. The
|
|
414
|
+
// dashboard PATCH that flips `enabled` calls `reloadCrons()` so this
|
|
415
|
+
// job is added live without a daemon restart.
|
|
416
|
+
if (isSkillCurationEnabled(this.db)) {
|
|
417
|
+
const skillCurationJob = cron.schedule("0 3 * * *", () => {
|
|
418
|
+
// Re-check on tick so a runtime disable suppresses the next run
|
|
419
|
+
// even before the next reloadCrons().
|
|
420
|
+
if (!isSkillCurationEnabled(this.db))
|
|
421
|
+
return;
|
|
422
|
+
const cadence = readSkillCurationCadence(this.db);
|
|
423
|
+
if (!isCadenceIntervalElapsed(this.db, cadence)) {
|
|
424
|
+
logger.debug({ cadence }, "skill_curation cadence interval not elapsed yet");
|
|
425
|
+
return;
|
|
426
|
+
}
|
|
427
|
+
const gateReason = this.autonomousGate();
|
|
428
|
+
if (gateReason !== null) {
|
|
429
|
+
this.logGateBlock(gateReason, { cron: "skill_curation" });
|
|
430
|
+
return;
|
|
431
|
+
}
|
|
432
|
+
this.emitRoutine("skill_curation", { cadence });
|
|
433
|
+
}, { timezone: tz });
|
|
434
|
+
this.cronJobs.push(skillCurationJob);
|
|
435
|
+
}
|
|
436
|
+
logger.info({
|
|
437
|
+
morningHour: this.config.dayBoundaryHour,
|
|
438
|
+
timezone: tz ?? "system",
|
|
439
|
+
hourlyCheckEnabled: this.config.hourlyCheckEnabled,
|
|
440
|
+
hourlyCheckIntervalMinutes: this.config.hourlyCheckIntervalMinutes,
|
|
441
|
+
}, "Recurring cron jobs configured");
|
|
442
|
+
}
|
|
443
|
+
emitRoutine(routineName, data) {
|
|
444
|
+
const event = {
|
|
445
|
+
...createEvent({
|
|
446
|
+
type: `routine.${routineName}`,
|
|
447
|
+
source: "scheduler",
|
|
448
|
+
priority: EventPriority.HIGH,
|
|
449
|
+
...(data ? { data } : {}),
|
|
450
|
+
}),
|
|
451
|
+
routine: routineName,
|
|
452
|
+
};
|
|
453
|
+
void this.eventBus.put(event);
|
|
454
|
+
logger.info({ routine: routineName }, "Routine event emitted");
|
|
455
|
+
}
|
|
456
|
+
/**
|
|
457
|
+
* Queue the morning routine as a durable wake task.
|
|
458
|
+
*
|
|
459
|
+
* This serializes all morning-routine entry points (cron, startup catchup,
|
|
460
|
+
* Google auth hot-load) behind a single DB-backed dedup guard so we don't
|
|
461
|
+
* run multiple overlapping full-day regenerations.
|
|
462
|
+
*/
|
|
463
|
+
queueMorningRoutineWake(source, options) {
|
|
464
|
+
const scheduledFor = formatSqliteDatetime(new Date());
|
|
465
|
+
const wakeEvent = createEvent({
|
|
466
|
+
type: "routine.morning_routine",
|
|
467
|
+
source,
|
|
468
|
+
priority: EventPriority.HIGH,
|
|
469
|
+
});
|
|
470
|
+
// `importance: "low"` keeps morning-routine wake tasks out of the
|
|
471
|
+
// roadmap refresh trigger — they fire within hours and the morning
|
|
472
|
+
// routine itself is the visible surface, not a roadmap entry.
|
|
473
|
+
const taskContext = JSON.stringify({
|
|
474
|
+
routine: "morning_routine",
|
|
475
|
+
source,
|
|
476
|
+
postCatchupRoutines: options?.postCatchupRoutines ?? [],
|
|
477
|
+
postCatchupHourlyCheck: options?.postCatchupHourlyCheck ?? false,
|
|
478
|
+
importance: "low",
|
|
479
|
+
});
|
|
480
|
+
const insertTxn = this.db.transaction(() => {
|
|
481
|
+
const existing = this.db
|
|
482
|
+
.prepare(`SELECT id, task_context
|
|
483
|
+
FROM agent_schedule
|
|
484
|
+
WHERE task_type = 'wake'
|
|
485
|
+
AND status IN ('pending', 'running')
|
|
486
|
+
AND json_extract(task_context, '$.routine') = 'morning_routine'
|
|
487
|
+
LIMIT 1`)
|
|
488
|
+
.get();
|
|
489
|
+
if (existing) {
|
|
490
|
+
const existingContext = JSON.parse(existing.task_context ?? "{}");
|
|
491
|
+
const mergedRoutines = Array.from(new Set([
|
|
492
|
+
...(Array.isArray(existingContext.postCatchupRoutines)
|
|
493
|
+
? existingContext.postCatchupRoutines
|
|
494
|
+
: []),
|
|
495
|
+
...(options?.postCatchupRoutines ?? []),
|
|
496
|
+
]));
|
|
497
|
+
const mergedHourlyCheck = existingContext.postCatchupHourlyCheck === true ||
|
|
498
|
+
options?.postCatchupHourlyCheck === true;
|
|
499
|
+
const mergedContext = {
|
|
500
|
+
routine: "morning_routine",
|
|
501
|
+
source: existingContext.source ?? source,
|
|
502
|
+
postCatchupRoutines: mergedRoutines,
|
|
503
|
+
postCatchupHourlyCheck: mergedHourlyCheck,
|
|
504
|
+
importance: "low",
|
|
505
|
+
};
|
|
506
|
+
this.db
|
|
507
|
+
.prepare(`UPDATE agent_schedule
|
|
508
|
+
SET task_context = ?
|
|
509
|
+
WHERE id = ?`)
|
|
510
|
+
.run(JSON.stringify(mergedContext), existing.id);
|
|
511
|
+
return { inserted: false, existingId: existing.id };
|
|
512
|
+
}
|
|
513
|
+
this.db
|
|
514
|
+
.prepare(`INSERT INTO agent_schedule
|
|
515
|
+
(scheduled_for, task_type, task_description, task_context, correlation_id, model, status)
|
|
516
|
+
VALUES (?, 'wake', ?, ?, ?, NULL, 'pending')`)
|
|
517
|
+
.run(scheduledFor, "Morning routine. Generate today.md and register the day schedule.", taskContext, wakeEvent.correlationId);
|
|
518
|
+
return { inserted: true };
|
|
519
|
+
});
|
|
520
|
+
const result = insertTxn();
|
|
521
|
+
if (result.inserted) {
|
|
522
|
+
logger.info({ source, scheduledFor }, "Morning routine wake queued");
|
|
523
|
+
}
|
|
524
|
+
else {
|
|
525
|
+
logger.info({ source, existingScheduleId: result.existingId }, "Morning routine wake deduped");
|
|
526
|
+
}
|
|
527
|
+
return result;
|
|
528
|
+
}
|
|
529
|
+
/**
|
|
530
|
+
* ScheduleWatcher — polls agent_schedule for pending tasks.
|
|
531
|
+
*
|
|
532
|
+
* Handles agent-scheduled wake-ups and DMs. Uses optimistic locking:
|
|
533
|
+
* only processes rows where
|
|
534
|
+
* UPDATE ... SET status='running' WHERE status='pending' succeeds.
|
|
535
|
+
*/
|
|
536
|
+
startScheduleWatcher() {
|
|
537
|
+
this.pollAbort = new AbortController();
|
|
538
|
+
const loop = async () => {
|
|
539
|
+
while (!this.shutdown) {
|
|
540
|
+
try {
|
|
541
|
+
const agentDayStartUtc = getAgentDayBoundsUtc(this.config.timezone || undefined, this.config.dayBoundaryHour).start;
|
|
542
|
+
const discarded = discardStalePendingSchedules(this.db, agentDayStartUtc);
|
|
543
|
+
if (discarded > 0) {
|
|
544
|
+
logger.info({ discarded }, "Discarded stale pending schedules");
|
|
545
|
+
}
|
|
546
|
+
// Setup gate — leave due rows in 'pending' so ScheduleWatcher
|
|
547
|
+
// picks them up on the next tick after setup completes. Direct DMs
|
|
548
|
+
// (row.task_type === "dm") are also gated since the user cannot
|
|
549
|
+
// have scheduled them before completing initial setup; any DMs
|
|
550
|
+
// that happened to roll over a day boundary while setup was in
|
|
551
|
+
// progress wait for setup to finish before sending.
|
|
552
|
+
const gateReason = this.autonomousGate();
|
|
553
|
+
if (gateReason !== null) {
|
|
554
|
+
this.logGateBlock(gateReason, { poll: "schedule_watcher" });
|
|
555
|
+
await this.sleepInterruptible(this.config.schedulePollIntervalSeconds * 1000);
|
|
556
|
+
continue;
|
|
557
|
+
}
|
|
558
|
+
// Reconcile recurring schedules: generate next agent_schedule
|
|
559
|
+
// rows for any enabled recurring schedule with no pending/running row.
|
|
560
|
+
try {
|
|
561
|
+
const reconciled = reconcileRecurringSchedules(this.db);
|
|
562
|
+
if (reconciled > 0) {
|
|
563
|
+
logger.info({ reconciled }, "Reconciled recurring schedules");
|
|
564
|
+
}
|
|
565
|
+
}
|
|
566
|
+
catch (err) {
|
|
567
|
+
logger.error({ err }, "Recurring schedule reconciliation failed");
|
|
568
|
+
}
|
|
569
|
+
const nowUtc = formatSqliteDatetime(new Date());
|
|
570
|
+
const rows = this.db
|
|
571
|
+
.prepare("SELECT * FROM agent_schedule WHERE status = 'pending' AND scheduled_for <= ? ORDER BY scheduled_for ASC LIMIT 3")
|
|
572
|
+
.all(nowUtc);
|
|
573
|
+
for (const row of rows) {
|
|
574
|
+
// Optimistic lock: only proceed if we successfully claim the row
|
|
575
|
+
const result = this.db
|
|
576
|
+
.prepare("UPDATE agent_schedule SET status = 'running' WHERE id = ? AND status = 'pending'")
|
|
577
|
+
.run(row.id);
|
|
578
|
+
if (result.changes === 0)
|
|
579
|
+
continue;
|
|
580
|
+
// Per-row try/catch: if the row body throws (e.g. malformed
|
|
581
|
+
// task_context JSON), flip the claim to 'failed' so the row
|
|
582
|
+
// doesn't stay 'running' forever and the watcher can move on.
|
|
583
|
+
try {
|
|
584
|
+
// Direct DM: send message without running an agent
|
|
585
|
+
if (row.task_type === "dm") {
|
|
586
|
+
await this.handleDirectDm(row);
|
|
587
|
+
continue;
|
|
588
|
+
}
|
|
589
|
+
// SCHEDULED-DM-IMPLEMENTATION-PLAN §5.5 — DM-tone scheduled
|
|
590
|
+
// session. Same shape as scheduled.task; the type field is
|
|
591
|
+
// the routing axis that downstream uses to pick the
|
|
592
|
+
// conversational profile + DM-flavored context blocks.
|
|
593
|
+
if (row.task_type === "dm_session") {
|
|
594
|
+
const base = createEvent({
|
|
595
|
+
type: "scheduled.dm",
|
|
596
|
+
source: row.task_type,
|
|
597
|
+
priority: EventPriority.NORMAL,
|
|
598
|
+
});
|
|
599
|
+
const event = {
|
|
600
|
+
...base,
|
|
601
|
+
// task_prompt overrides task_description as the agent body
|
|
602
|
+
// when set; falls back to the description otherwise.
|
|
603
|
+
task: row.task_prompt ?? row.task_description,
|
|
604
|
+
taskContext: JSON.parse(row.task_context ?? "{}"),
|
|
605
|
+
correlationId: row.correlation_id ?? base.correlationId,
|
|
606
|
+
scheduleId: row.id,
|
|
607
|
+
// `agent_schedule.model` is operator-supplied. If it matches
|
|
608
|
+
// the binary `requestedModel` shape ("sonnet" / "opus") use
|
|
609
|
+
// that; otherwise pass the literal model id through
|
|
610
|
+
// `requestedModelId` so non-Claude rows (e.g. "haiku",
|
|
611
|
+
// "gpt-5.5", "gemini-2.5-flash") aren't silently demoted to
|
|
612
|
+
// Sonnet by the legacy two-tier coercion.
|
|
613
|
+
...(row.model === "sonnet" || row.model === "opus"
|
|
614
|
+
? { requestedModel: row.model }
|
|
615
|
+
: row.model
|
|
616
|
+
? { requestedModelId: row.model }
|
|
617
|
+
: {}),
|
|
618
|
+
};
|
|
619
|
+
await this.eventBus.put(event);
|
|
620
|
+
logger.info({ taskId: row.id, taskType: row.task_type }, "Scheduled DM session dispatched");
|
|
621
|
+
continue;
|
|
622
|
+
}
|
|
623
|
+
const base = createEvent({
|
|
624
|
+
type: "scheduled.task",
|
|
625
|
+
source: row.task_type,
|
|
626
|
+
priority: EventPriority.NORMAL,
|
|
627
|
+
});
|
|
628
|
+
const event = {
|
|
629
|
+
...base,
|
|
630
|
+
// task_prompt overrides task_description as the agent body
|
|
631
|
+
// when set; falls back to the description otherwise.
|
|
632
|
+
task: row.task_prompt ?? row.task_description,
|
|
633
|
+
taskContext: JSON.parse(row.task_context ?? "{}"),
|
|
634
|
+
correlationId: row.correlation_id ?? base.correlationId,
|
|
635
|
+
scheduleId: row.id,
|
|
636
|
+
// `agent_schedule.model` is operator-supplied. If it matches
|
|
637
|
+
// the binary `requestedModel` shape ("sonnet" / "opus") use
|
|
638
|
+
// that; otherwise pass the literal model id through
|
|
639
|
+
// `requestedModelId` so non-Claude rows (e.g. "haiku",
|
|
640
|
+
// "gpt-5.5", "gemini-2.5-flash") aren't silently demoted to
|
|
641
|
+
// Sonnet by the legacy two-tier coercion.
|
|
642
|
+
...(row.model === "sonnet" || row.model === "opus"
|
|
643
|
+
? { requestedModel: row.model }
|
|
644
|
+
: row.model
|
|
645
|
+
? { requestedModelId: row.model }
|
|
646
|
+
: {}),
|
|
647
|
+
};
|
|
648
|
+
await this.eventBus.put(event);
|
|
649
|
+
logger.info({ taskId: row.id, taskType: row.task_type }, "Scheduled task dispatched");
|
|
650
|
+
}
|
|
651
|
+
catch (rowErr) {
|
|
652
|
+
// Without this catch the row stays 'running' forever (claim
|
|
653
|
+
// already committed) and the watcher silently never retries.
|
|
654
|
+
logger.error({ err: rowErr, taskId: row.id, taskType: row.task_type }, "Scheduled row dispatch failed — marking failed");
|
|
655
|
+
try {
|
|
656
|
+
this.db
|
|
657
|
+
.prepare("UPDATE agent_schedule SET status = 'failed' WHERE id = ? AND status = 'running'")
|
|
658
|
+
.run(row.id);
|
|
659
|
+
}
|
|
660
|
+
catch (markErr) {
|
|
661
|
+
logger.error({ err: markErr, taskId: row.id }, "Failed to mark scheduled row as failed");
|
|
662
|
+
}
|
|
663
|
+
}
|
|
664
|
+
}
|
|
665
|
+
// Health check: warn once when no pending or running tasks exist
|
|
666
|
+
const activeCount = this.db
|
|
667
|
+
.prepare("SELECT COUNT(*) as cnt FROM agent_schedule WHERE status IN ('pending', 'running')")
|
|
668
|
+
.get();
|
|
669
|
+
if (activeCount.cnt === 0 && !this.noFutureTasksWarned) {
|
|
670
|
+
this.noFutureTasksWarned = true;
|
|
671
|
+
logger.warn("No pending tasks in schedule — next execution relies on cron routines");
|
|
672
|
+
}
|
|
673
|
+
else if (activeCount.cnt > 0) {
|
|
674
|
+
this.noFutureTasksWarned = false;
|
|
675
|
+
}
|
|
676
|
+
}
|
|
677
|
+
catch (err) {
|
|
678
|
+
logger.error({ err }, "ScheduleWatcher error");
|
|
679
|
+
}
|
|
680
|
+
// Wait before next poll. Aborts immediately on stop() so SIGTERM
|
|
681
|
+
// doesn't have to wait up to schedulePollIntervalSeconds.
|
|
682
|
+
await this.sleepInterruptible(this.config.schedulePollIntervalSeconds * 1000);
|
|
683
|
+
}
|
|
684
|
+
};
|
|
685
|
+
void loop();
|
|
686
|
+
}
|
|
687
|
+
/**
|
|
688
|
+
* Sleep for `ms` milliseconds, but resolve early if `pollAbort` aborts.
|
|
689
|
+
* Used by the ScheduleWatcher between polls so stop() can interrupt it.
|
|
690
|
+
*/
|
|
691
|
+
sleepInterruptible(ms) {
|
|
692
|
+
if (this.shutdown)
|
|
693
|
+
return Promise.resolve();
|
|
694
|
+
const signal = this.pollAbort?.signal;
|
|
695
|
+
if (signal?.aborted)
|
|
696
|
+
return Promise.resolve();
|
|
697
|
+
return new Promise((resolve) => {
|
|
698
|
+
const onAbort = () => {
|
|
699
|
+
clearTimeout(timer);
|
|
700
|
+
resolve();
|
|
701
|
+
};
|
|
702
|
+
const timer = setTimeout(() => {
|
|
703
|
+
signal?.removeEventListener("abort", onAbort);
|
|
704
|
+
resolve();
|
|
705
|
+
}, ms);
|
|
706
|
+
signal?.addEventListener("abort", onAbort, { once: true });
|
|
707
|
+
});
|
|
708
|
+
}
|
|
709
|
+
/**
|
|
710
|
+
* Handle a direct DM task: send the message directly via the registered
|
|
711
|
+
* callback, bypassing the agent pipeline entirely. This is zero-cost
|
|
712
|
+
* compared to running an AI agent for a pre-composed message.
|
|
713
|
+
*
|
|
714
|
+
* Quiet hours and rate limits are intentionally skipped — the user
|
|
715
|
+
* explicitly scheduled this DM, so it should fire at the requested time.
|
|
716
|
+
*/
|
|
717
|
+
async handleDirectDm(row) {
|
|
718
|
+
try {
|
|
719
|
+
if (!this.sendDm) {
|
|
720
|
+
logger.warn({ taskId: row.id }, "sendDm callback not registered, cannot send direct DM");
|
|
721
|
+
this.db
|
|
722
|
+
.prepare("UPDATE agent_schedule SET status = 'failed' WHERE id = ?")
|
|
723
|
+
.run(row.id);
|
|
724
|
+
return;
|
|
725
|
+
}
|
|
726
|
+
const ctx = JSON.parse(row.task_context ?? "{}");
|
|
727
|
+
const delivery = await this.sendDm(row.task_description, Array.isArray(ctx.platforms)
|
|
728
|
+
? ctx.platforms
|
|
729
|
+
: typeof ctx.platform === "string"
|
|
730
|
+
? [ctx.platform]
|
|
731
|
+
: undefined);
|
|
732
|
+
const dispatchId = randomUUID();
|
|
733
|
+
const summary = (row.task_description ?? "").slice(0, 200);
|
|
734
|
+
const insert = this.db.prepare(`INSERT INTO notification_log (
|
|
735
|
+
dispatch_id,
|
|
736
|
+
notification_type,
|
|
737
|
+
priority,
|
|
738
|
+
platform,
|
|
739
|
+
delivery_channel,
|
|
740
|
+
delivery_message_id,
|
|
741
|
+
content_summary,
|
|
742
|
+
status,
|
|
743
|
+
created_at,
|
|
744
|
+
delivered_at
|
|
745
|
+
)
|
|
746
|
+
VALUES (?, 'scheduled_dm', 'normal', ?, ?, ?, ?, 'delivered', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)`);
|
|
747
|
+
for (const item of delivery) {
|
|
748
|
+
insert.run(dispatchId, item.platform, item.channel, item.messageId ?? null, summary);
|
|
749
|
+
}
|
|
750
|
+
this.db
|
|
751
|
+
.prepare("UPDATE agent_schedule SET status = 'completed' WHERE id = ?")
|
|
752
|
+
.run(row.id);
|
|
753
|
+
logger.info({ taskId: row.id }, "Direct DM sent");
|
|
754
|
+
}
|
|
755
|
+
catch (err) {
|
|
756
|
+
this.db
|
|
757
|
+
.prepare("UPDATE agent_schedule SET status = 'failed' WHERE id = ?")
|
|
758
|
+
.run(row.id);
|
|
759
|
+
logger.error({ err, taskId: row.id }, "Failed to send direct DM");
|
|
760
|
+
}
|
|
761
|
+
}
|
|
762
|
+
/** Daily cleanup: expire sessions, run retention */
|
|
763
|
+
dailyCleanup() {
|
|
764
|
+
try {
|
|
765
|
+
const agentDayStartUtc = getAgentDayBoundsUtc(this.config.timezone || undefined, this.config.dayBoundaryHour).start;
|
|
766
|
+
const discarded = discardStalePendingSchedules(this.db, agentDayStartUtc);
|
|
767
|
+
if (discarded > 0) {
|
|
768
|
+
logger.info({ discarded }, "Discarded previous-agent-day pending schedules");
|
|
769
|
+
}
|
|
770
|
+
// Idle-expire long-silent sessions.
|
|
771
|
+
//
|
|
772
|
+
// Scope matrix:
|
|
773
|
+
// - THREAD (is_dm=0, Slack/Discord channel mentions) →
|
|
774
|
+
// channel safety timeout
|
|
775
|
+
// - DASHBOARD_CHAT (is_dm=1, scope='dashboard_chat') →
|
|
776
|
+
// dashboard safety timeout (workdir preserved
|
|
777
|
+
// so the expired row remains resumable from the
|
|
778
|
+
// sidebar until retention prunes it)
|
|
779
|
+
// - OWNER_DM (is_dm=1, scope='owner_dm', messaging apps) →
|
|
780
|
+
// NOT idle-expired here. Messaging DMs persist
|
|
781
|
+
// all day and are ended at the 4 AM day-boundary
|
|
782
|
+
// summarization callback.
|
|
783
|
+
//
|
|
784
|
+
// We use a single `max(channel, dashboard)` safety window because the
|
|
785
|
+
// per-session expiry already happens in `getOrCreateDm` /
|
|
786
|
+
// `getOrCreateThread` on the next inbound event; this path only
|
|
787
|
+
// catches sessions that never see another event before retention
|
|
788
|
+
// deletes their row.
|
|
789
|
+
const idleSafetyTimeout = Math.max(this.config.sessionTimeoutChannelMinutes, this.config.sessionTimeoutDashboardMinutes);
|
|
790
|
+
const expiredRows = this.db
|
|
791
|
+
.prepare(`SELECT id, scope FROM conversation_sessions
|
|
792
|
+
WHERE status = 'active'
|
|
793
|
+
AND (
|
|
794
|
+
is_dm = 0
|
|
795
|
+
OR (is_dm = 1 AND scope = 'dashboard_chat')
|
|
796
|
+
)
|
|
797
|
+
AND last_message_at < datetime('now', '-' || ? || ' minutes')`)
|
|
798
|
+
.all(idleSafetyTimeout);
|
|
799
|
+
if (expiredRows.length > 0) {
|
|
800
|
+
this.db
|
|
801
|
+
.prepare(`UPDATE conversation_sessions SET status = 'expired'
|
|
802
|
+
WHERE status = 'active'
|
|
803
|
+
AND (
|
|
804
|
+
is_dm = 0
|
|
805
|
+
OR (is_dm = 1 AND scope = 'dashboard_chat')
|
|
806
|
+
)
|
|
807
|
+
AND last_message_at < datetime('now', '-' || ? || ' minutes')`)
|
|
808
|
+
.run(idleSafetyTimeout);
|
|
809
|
+
// Clean up workdirs for expired sessions — but preserve dashboard
|
|
810
|
+
// workdirs so the row stays resumable from the dashboard sidebar.
|
|
811
|
+
// The preservation logic mirrors `SessionManager.shouldPreserveResumeState`.
|
|
812
|
+
for (const row of expiredRows) {
|
|
813
|
+
if (row.scope === "dashboard_chat")
|
|
814
|
+
continue;
|
|
815
|
+
cleanupSessionWorkdir(getSessionWorkdirPath(this.config.dataDir, row.id));
|
|
816
|
+
}
|
|
817
|
+
}
|
|
818
|
+
// Run data retention cleanup
|
|
819
|
+
const result = runRetentionCleanup(this.db, this.config);
|
|
820
|
+
// Clean up orphaned session workdirs left behind by daemon crashes or
|
|
821
|
+
// retention deletes. Inactive conversation rows may remain resumable
|
|
822
|
+
// from dashboard history until retention prunes them, so only remove
|
|
823
|
+
// dirs whose DB row no longer exists at all.
|
|
824
|
+
const existingRows = this.db
|
|
825
|
+
.prepare("SELECT id FROM conversation_sessions")
|
|
826
|
+
.all();
|
|
827
|
+
const existingIds = new Set(existingRows.map((r) => r.id));
|
|
828
|
+
cleanupStaleWorkdirs(this.config.dataDir, existingIds);
|
|
829
|
+
logger.info(result, "Daily cleanup completed");
|
|
830
|
+
}
|
|
831
|
+
catch (err) {
|
|
832
|
+
logger.error({ err }, "Daily cleanup failed");
|
|
833
|
+
}
|
|
834
|
+
}
|
|
835
|
+
}
|
|
836
|
+
// ── P22 — skill curation cron helpers ───────────────────────────────────
|
|
837
|
+
function readSkillCurationCadence(db) {
|
|
838
|
+
// Tolerate test DBs that don't apply the full schema. The scheduler is
|
|
839
|
+
// re-instantiated across many small test setups; missing table → default.
|
|
840
|
+
try {
|
|
841
|
+
const row = db
|
|
842
|
+
.prepare(`SELECT value_json FROM runtime_state WHERE key = 'skill_curation.config'`)
|
|
843
|
+
.get();
|
|
844
|
+
if (!row)
|
|
845
|
+
return "weekly";
|
|
846
|
+
const v = JSON.parse(row.value_json);
|
|
847
|
+
return v.cadence ?? "weekly";
|
|
848
|
+
}
|
|
849
|
+
catch {
|
|
850
|
+
return "weekly";
|
|
851
|
+
}
|
|
852
|
+
}
|
|
853
|
+
function isSkillCurationEnabled(db) {
|
|
854
|
+
try {
|
|
855
|
+
const row = db
|
|
856
|
+
.prepare(`SELECT value_json FROM runtime_state WHERE key = 'skill_curation.config'`)
|
|
857
|
+
.get();
|
|
858
|
+
if (!row)
|
|
859
|
+
return false;
|
|
860
|
+
const v = JSON.parse(row.value_json);
|
|
861
|
+
return v.enabled === true;
|
|
862
|
+
}
|
|
863
|
+
catch {
|
|
864
|
+
return false;
|
|
865
|
+
}
|
|
866
|
+
}
|
|
867
|
+
/** P22 §6.3 — interval since the most recent run's `started_at`, used by
|
|
868
|
+
* the daily 03:00 cron to gate auto-fires. Manual runs land in the same
|
|
869
|
+
* table with `is_manual=1` and naturally push this forward, satisfying
|
|
870
|
+
* the contract "manual click resets the cadence timer". */
|
|
871
|
+
function cadenceIntervalMs(cadence) {
|
|
872
|
+
switch (cadence) {
|
|
873
|
+
case "daily": return 24 * 60 * 60 * 1000;
|
|
874
|
+
case "weekly": return 7 * 24 * 60 * 60 * 1000;
|
|
875
|
+
case "monthly": return 30 * 24 * 60 * 60 * 1000;
|
|
876
|
+
}
|
|
877
|
+
}
|
|
878
|
+
function isCadenceIntervalElapsed(db, cadence) {
|
|
879
|
+
try {
|
|
880
|
+
const row = db
|
|
881
|
+
.prepare(`SELECT MAX(started_at) AS last FROM skill_curation_runs`)
|
|
882
|
+
.get();
|
|
883
|
+
if (row.last === null)
|
|
884
|
+
return true; // never run before
|
|
885
|
+
// Tolerance: cron fires at 03:00 every day; a daily cadence run started
|
|
886
|
+
// at 03:00:01 yesterday should be eligible at 03:00:00 today. Without a
|
|
887
|
+
// tolerance the second run would slip a day on every cycle.
|
|
888
|
+
const tolerance = 5 * 60 * 1000; // 5 minutes
|
|
889
|
+
return Date.now() - row.last >= cadenceIntervalMs(cadence) - tolerance;
|
|
890
|
+
}
|
|
891
|
+
catch {
|
|
892
|
+
// Missing table (test bootstrap that skipped the schema apply) → run.
|
|
893
|
+
return true;
|
|
894
|
+
}
|
|
895
|
+
}
|
|
896
|
+
//# sourceMappingURL=scheduler.js.map
|