@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,1087 @@
|
|
|
1
|
+
import { INTEGRATION_DESCRIPTORS, INTEGRATION_WRITE_TTL_MS, getSnapshotNormalizer, nextActiveHoursStart, nowInTimezone, } from "@aitne/shared";
|
|
2
|
+
import { applyDriftEffects, emptyDriftSideEffects, } from "../core/drift-effects.js";
|
|
3
|
+
import { reconcile, } from "../services/integrations/reconcile.js";
|
|
4
|
+
import { defaultModelForTier } from "../core/backends/model-registry.js";
|
|
5
|
+
import { readIntegrations } from "../db/integrations-store.js";
|
|
6
|
+
import { readRuntimeState } from "../db/runtime-state.js";
|
|
7
|
+
import { createLogger } from "../logging.js";
|
|
8
|
+
const logger = createLogger("delegated-sync-worker");
|
|
9
|
+
export const DELEGATED_SYNC_OBSERVER_NAME = "delegated-sync";
|
|
10
|
+
export const DELEGATED_SYNC_PROCESS_KEY = "integration_drift_sync";
|
|
11
|
+
const RUNTIME_CONFIG_KEY = "delegatedSync";
|
|
12
|
+
const DEFAULT_TICK_INTERVAL_SECONDS = 60;
|
|
13
|
+
const DEFAULT_MIN_INTERVAL_SECONDS = 60;
|
|
14
|
+
const CIRCUIT_FAILURE_THRESHOLD = 5;
|
|
15
|
+
const CIRCUIT_BACKOFF_MULTIPLIER = 4;
|
|
16
|
+
/**
|
|
17
|
+
* Default active-hours window for delegated-sync cadences. Mirrors Hourly
|
|
18
|
+
* Check defaults (`hourlyCheckActiveStartHour=4`, `hourlyCheckActiveEndHour=24`)
|
|
19
|
+
* so the two schedules align unless an operator overrides one or the other.
|
|
20
|
+
* See `docs/design/appendices/delegated-sync-opt-in.md`.
|
|
21
|
+
*
|
|
22
|
+
* `endHour` is exclusive: `[start, end)`. `end=24` means "up to but not
|
|
23
|
+
* including 24:00", i.e. the window covers 23:59:59.
|
|
24
|
+
*/
|
|
25
|
+
const DEFAULT_ACTIVE_START_HOUR = 4;
|
|
26
|
+
const DEFAULT_ACTIVE_END_HOUR = 24;
|
|
27
|
+
/**
|
|
28
|
+
* Per-cadence retry policy for transient subprocess-side failures.
|
|
29
|
+
*
|
|
30
|
+
* Why retry only here: cadence-driven calls (`integration_drift_sync`)
|
|
31
|
+
* are async, idempotent reads — there is no API caller waiting on the
|
|
32
|
+
* outcome, and the connector tools used by cadences (calendar listEvents,
|
|
33
|
+
* gmail search_threads, notion search) are read-only by construction.
|
|
34
|
+
* Retrying is safe.
|
|
35
|
+
*
|
|
36
|
+
* Contrast with the synchronous proxy path (skill code in a Claude Code
|
|
37
|
+
* / Codex / Gemini session calling `POST /api/delegated/run`): there the
|
|
38
|
+
* tool may be write-class (gmail send, calendar updateEvent), and the
|
|
39
|
+
* caller has its own deadline budget. The invoker layer must NOT retry
|
|
40
|
+
* automatically — this module is the only legitimate place for retry.
|
|
41
|
+
*
|
|
42
|
+
* Retryable errorClasses are limited to subprocess-side transients —
|
|
43
|
+
* `timeout` (idle watchdog or wall-clock fired), `subprocess_crashed`
|
|
44
|
+
* (exit before paired tool_result), and `tool_not_registered` (Gemini
|
|
45
|
+
* CLI's MCP tool registry hadn't fully populated when the model's
|
|
46
|
+
* tool_use was dispatched — observed when the cadence's first tick
|
|
47
|
+
* fires immediately after an integration switches to `delegated` and
|
|
48
|
+
* the host extension's MCP server is still completing its handshake).
|
|
49
|
+
* Auth / parse / wrong_tool / tool_error are deterministic; retrying
|
|
50
|
+
* them would loop without changing outcome.
|
|
51
|
+
*
|
|
52
|
+
* MAX_RETRY_ATTEMPTS=1 (so total = 2 attempts) keeps the per-cadence
|
|
53
|
+
* worst case inside ~2× the per-call ceiling: 75 s gemini idle + 1.5 s
|
|
54
|
+
* delay + 75 s gemini idle ≈ 152 s. The cadence-tick mutex (`tickRunning`)
|
|
55
|
+
* skips overlapping ticks during this window, but the next-cadence
|
|
56
|
+
* (10–60 min interval) is unaffected.
|
|
57
|
+
*/
|
|
58
|
+
const RETRY_DELAY_MS = 1500;
|
|
59
|
+
const MAX_RETRY_ATTEMPTS = 1;
|
|
60
|
+
const RETRYABLE_ERROR_CLASSES = new Set([
|
|
61
|
+
"timeout",
|
|
62
|
+
"subprocess_crashed",
|
|
63
|
+
"tool_not_registered",
|
|
64
|
+
]);
|
|
65
|
+
function sleep(ms) {
|
|
66
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
67
|
+
}
|
|
68
|
+
const CALENDAR_IMMINENT_CADENCE = {
|
|
69
|
+
integration: "google_calendar",
|
|
70
|
+
windowKey: "primary:imminent",
|
|
71
|
+
displayName: "Calendar — imminent (next 1 h)",
|
|
72
|
+
description: "Polls upcoming events in the next hour. Required for the 15-min-before-meeting reminder while calendar is in delegated mode.",
|
|
73
|
+
defaultIntervalSeconds: 10 * 60,
|
|
74
|
+
softFloorSeconds: 5 * 60,
|
|
75
|
+
maxResults: 50,
|
|
76
|
+
buildWindow: (now) => ({
|
|
77
|
+
windowMin: new Date(now.getTime() - 15 * 60 * 1000).toISOString(),
|
|
78
|
+
windowMax: new Date(now.getTime() + 60 * 60 * 1000).toISOString(),
|
|
79
|
+
}),
|
|
80
|
+
buildToolCall: (backendId, ctx) => ({
|
|
81
|
+
toolName: namespacedTool("google_calendar", backendId, calendarListBareTool(backendId)),
|
|
82
|
+
toolArgs: {
|
|
83
|
+
calendarId: ctx.calendarId,
|
|
84
|
+
timeMin: ctx.windowMin,
|
|
85
|
+
timeMax: ctx.windowMax,
|
|
86
|
+
maxResults: ctx.maxResults,
|
|
87
|
+
},
|
|
88
|
+
}),
|
|
89
|
+
extractItems: (toolResult) => extractItemsByKeys(toolResult, CALENDAR_ITEM_KEYS),
|
|
90
|
+
};
|
|
91
|
+
const CALENDAR_24H_CADENCE = {
|
|
92
|
+
integration: "google_calendar",
|
|
93
|
+
windowKey: "primary:24h",
|
|
94
|
+
displayName: "Calendar — day-ahead (next 24 h)",
|
|
95
|
+
description: "Polls the next 24 hours of events. Feeds far-future roadmap-refresh detection.",
|
|
96
|
+
defaultIntervalSeconds: 60 * 60,
|
|
97
|
+
softFloorSeconds: 30 * 60,
|
|
98
|
+
maxResults: 250,
|
|
99
|
+
buildWindow: (now) => ({
|
|
100
|
+
windowMin: now.toISOString(),
|
|
101
|
+
windowMax: new Date(now.getTime() + 24 * 60 * 60 * 1000).toISOString(),
|
|
102
|
+
}),
|
|
103
|
+
buildToolCall: CALENDAR_IMMINENT_CADENCE.buildToolCall,
|
|
104
|
+
extractItems: CALENDAR_IMMINENT_CADENCE.extractItems,
|
|
105
|
+
};
|
|
106
|
+
/**
|
|
107
|
+
* Gmail `inbox:7d` cadence. Plan §8.2 / §8.3:
|
|
108
|
+
* - Default 30 min, soft floor 15 min — gmail polls less often than
|
|
109
|
+
* calendar so the operator-tunable cost stays bounded.
|
|
110
|
+
* - Window is the last 7 days. Reconcile keys by `(integration,
|
|
111
|
+
* window_key)` so the partition is wide enough that a recent thread
|
|
112
|
+
* with a fresh reply doesn't drop out and falsely emit `deleted`. The
|
|
113
|
+
* LLM hourly check still post-filters to "last hour" inside its own
|
|
114
|
+
* decision flow; this cadence's job is structural diff, not selection.
|
|
115
|
+
* - `query="newer_than:7d"` Gmail search operator. `pageSize` /
|
|
116
|
+
* `max_results` / `maxResults` differs by backend (Claude / Codex /
|
|
117
|
+
* Gemini) — `gmailSearchToolCall` per-backend wraps the arg shape.
|
|
118
|
+
*/
|
|
119
|
+
const GMAIL_INBOX_7D_CADENCE = {
|
|
120
|
+
integration: "gmail",
|
|
121
|
+
windowKey: "inbox:7d",
|
|
122
|
+
displayName: "Gmail — inbox (last 7 days)",
|
|
123
|
+
description: "Polls thread-level changes in the last 7 days of inbox. Surfaces new threads and replies for the hourly check.",
|
|
124
|
+
defaultIntervalSeconds: 30 * 60,
|
|
125
|
+
softFloorSeconds: 15 * 60,
|
|
126
|
+
maxResults: 25,
|
|
127
|
+
buildWindow: (now) => ({
|
|
128
|
+
windowMin: new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000).toISOString(),
|
|
129
|
+
// §5.1 sliding-window: a small forward buffer past `now` keeps a
|
|
130
|
+
// message whose `internalDate` is exactly `now` from being classified
|
|
131
|
+
// as out-of-window on the next reconcile.
|
|
132
|
+
windowMax: new Date(now.getTime() + 60 * 1000).toISOString(),
|
|
133
|
+
}),
|
|
134
|
+
buildToolCall: gmailSearchToolCall,
|
|
135
|
+
extractItems: (toolResult) => extractItemsByKeys(toolResult, GMAIL_ITEM_KEYS),
|
|
136
|
+
};
|
|
137
|
+
/**
|
|
138
|
+
* Notion `recently_updated` cadence. Plan §8.2 / §8.3:
|
|
139
|
+
* - Default 60 min, soft floor 30 min.
|
|
140
|
+
* - Notion search has no `last_edited_time` filter (per the hourly
|
|
141
|
+
* check's existing footnote on coverage gaps); the cadence pulls a
|
|
142
|
+
* `created_date_range` window of the last 7 days as a coarse anchor
|
|
143
|
+
* and lets reconcile + the per-page `lastEditedTime` payload + the
|
|
144
|
+
* Notion normalizer's `inWindow` predicate sort out true churn.
|
|
145
|
+
* - The window's `created_date_range.start_date` arg is per the same
|
|
146
|
+
* date format the hourly_check prompt uses (`YYYY-MM-DD`), to mirror
|
|
147
|
+
* what the LLM-driven path was already producing — connectors uniformly
|
|
148
|
+
* accept that.
|
|
149
|
+
*/
|
|
150
|
+
const NOTION_RECENTLY_UPDATED_CADENCE = {
|
|
151
|
+
integration: "notion",
|
|
152
|
+
windowKey: "recently_updated",
|
|
153
|
+
displayName: "Notion — recently updated",
|
|
154
|
+
description: "Polls pages updated in the last 7 days. Coarse window; per-page lastEditedTime filters in reconcile.",
|
|
155
|
+
defaultIntervalSeconds: 60 * 60,
|
|
156
|
+
softFloorSeconds: 30 * 60,
|
|
157
|
+
maxResults: 25,
|
|
158
|
+
buildWindow: (now) => ({
|
|
159
|
+
windowMin: new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000).toISOString(),
|
|
160
|
+
windowMax: new Date(now.getTime() + 60 * 1000).toISOString(),
|
|
161
|
+
}),
|
|
162
|
+
buildToolCall: notionSearchToolCall,
|
|
163
|
+
extractItems: (toolResult) => extractItemsByKeys(toolResult, NOTION_ITEM_KEYS),
|
|
164
|
+
};
|
|
165
|
+
const DEFAULT_CADENCES = [
|
|
166
|
+
CALENDAR_IMMINENT_CADENCE,
|
|
167
|
+
CALENDAR_24H_CADENCE,
|
|
168
|
+
GMAIL_INBOX_7D_CADENCE,
|
|
169
|
+
NOTION_RECENTLY_UPDATED_CADENCE,
|
|
170
|
+
];
|
|
171
|
+
const DEFAULT_CADENCE_INTEGRATIONS = new Set(DEFAULT_CADENCES.map((def) => def.integration));
|
|
172
|
+
export function hasActiveDelegatedSyncIntegration(db, override) {
|
|
173
|
+
const integrations = readIntegrations(db);
|
|
174
|
+
if (override)
|
|
175
|
+
integrations[override.key] = override.state;
|
|
176
|
+
return Object.entries(integrations).some(([key, state]) => DEFAULT_CADENCE_INTEGRATIONS.has(key)
|
|
177
|
+
&& state.mode === "delegated"
|
|
178
|
+
&& state.delegatedSyncEnabled !== false);
|
|
179
|
+
}
|
|
180
|
+
export class DelegatedSyncWorker {
|
|
181
|
+
options;
|
|
182
|
+
name = DELEGATED_SYNC_OBSERVER_NAME;
|
|
183
|
+
timer = null;
|
|
184
|
+
tickRunning = false;
|
|
185
|
+
tickIntervalSeconds;
|
|
186
|
+
now;
|
|
187
|
+
cadences;
|
|
188
|
+
states = new Map();
|
|
189
|
+
constructor(options) {
|
|
190
|
+
this.options = options;
|
|
191
|
+
this.tickIntervalSeconds =
|
|
192
|
+
options.tickIntervalSeconds ?? DEFAULT_TICK_INTERVAL_SECONDS;
|
|
193
|
+
this.now = options.now ?? (() => new Date());
|
|
194
|
+
this.cadences = options.cadences ?? DEFAULT_CADENCES;
|
|
195
|
+
}
|
|
196
|
+
async start() {
|
|
197
|
+
if (this.timer)
|
|
198
|
+
return;
|
|
199
|
+
// Register the interval before awaiting the initial tick. Two reasons:
|
|
200
|
+
// 1. A second concurrent `start()` call hits `if (this.timer) return`
|
|
201
|
+
// immediately instead of falling through and double-registering.
|
|
202
|
+
// 2. If the initial tick throws (e.g. transient DB error during boot),
|
|
203
|
+
// subsequent scheduled ticks still fire and recover state, instead
|
|
204
|
+
// of leaving the worker permanently silent.
|
|
205
|
+
this.timer = setInterval(() => void this.tick(), this.tickIntervalSeconds * 1000);
|
|
206
|
+
this.timer.unref?.();
|
|
207
|
+
// Phase 7 (h): seed per-cadence state from the most recent successful
|
|
208
|
+
// delegated_sync row in agent_actions before the first tick. Daemon
|
|
209
|
+
// restarts no longer re-spawn every cadence's subprocess when a sync
|
|
210
|
+
// ran shortly before the restart; the natural cadenceDue check picks
|
|
211
|
+
// up where the last process left off. When no history exists (fresh
|
|
212
|
+
// install or retention-pruned table), states stay null and the first
|
|
213
|
+
// tick fires for every cadence — same effect as the prior force-on-
|
|
214
|
+
// start behaviour, achieved without redundant spawns.
|
|
215
|
+
this.hydrateStateFromHistory();
|
|
216
|
+
this.warnOnConfigViolations();
|
|
217
|
+
try {
|
|
218
|
+
await this.tick();
|
|
219
|
+
}
|
|
220
|
+
catch (err) {
|
|
221
|
+
logger.warn({ err }, "Initial delegated sync tick failed; cadence-driven retries will continue");
|
|
222
|
+
}
|
|
223
|
+
logger.info({ tickIntervalSeconds: this.tickIntervalSeconds }, "Delegated sync worker started");
|
|
224
|
+
}
|
|
225
|
+
async stop() {
|
|
226
|
+
if (this.timer) {
|
|
227
|
+
clearInterval(this.timer);
|
|
228
|
+
this.timer = null;
|
|
229
|
+
}
|
|
230
|
+
logger.info("Delegated sync worker stopped");
|
|
231
|
+
}
|
|
232
|
+
async tick(options = {}) {
|
|
233
|
+
if (this.tickRunning) {
|
|
234
|
+
logger.debug("Delegated sync tick already running — skipping overlap");
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
this.tickRunning = true;
|
|
238
|
+
try {
|
|
239
|
+
await this.runTick(options.force === true);
|
|
240
|
+
}
|
|
241
|
+
finally {
|
|
242
|
+
this.tickRunning = false;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
getStatus(now = this.now()) {
|
|
246
|
+
const runtimeConfig = this.readRuntimeConfig();
|
|
247
|
+
// Resolved up front because per-cadence `nextRunAt` projects past
|
|
248
|
+
// out-of-window candidates to the next active-hours start.
|
|
249
|
+
const activeHours = resolveActiveHours(runtimeConfig);
|
|
250
|
+
const cadences = {};
|
|
251
|
+
const ttlContractViolations = [];
|
|
252
|
+
let lastSuccessAt = null;
|
|
253
|
+
let anyTripped = false;
|
|
254
|
+
for (const def of this.cadences) {
|
|
255
|
+
const id = cadenceId(def);
|
|
256
|
+
const state = this.getState(id);
|
|
257
|
+
const intervalSeconds = this.resolveIntervalSeconds(def, runtimeConfig);
|
|
258
|
+
const effectiveIntervalSeconds = computeEffectiveIntervalSeconds(intervalSeconds, state.failureCount);
|
|
259
|
+
const circuitState = state.failureCount >= CIRCUIT_FAILURE_THRESHOLD
|
|
260
|
+
? "tripped"
|
|
261
|
+
: "ok";
|
|
262
|
+
if (circuitState === "tripped")
|
|
263
|
+
anyTripped = true;
|
|
264
|
+
if (state.lastSuccessAt
|
|
265
|
+
&& (lastSuccessAt === null || state.lastSuccessAt > lastSuccessAt)) {
|
|
266
|
+
lastSuccessAt = state.lastSuccessAt;
|
|
267
|
+
}
|
|
268
|
+
cadences[id] = {
|
|
269
|
+
integration: def.integration,
|
|
270
|
+
windowKey: def.windowKey,
|
|
271
|
+
enabled: isCadenceEnabled(def, runtimeConfig),
|
|
272
|
+
displayName: def.displayName,
|
|
273
|
+
description: def.description,
|
|
274
|
+
defaultIntervalSeconds: def.defaultIntervalSeconds,
|
|
275
|
+
softFloorSeconds: def.softFloorSeconds,
|
|
276
|
+
intervalSeconds,
|
|
277
|
+
effectiveIntervalSeconds,
|
|
278
|
+
circuitState,
|
|
279
|
+
failureCount: state.failureCount,
|
|
280
|
+
lastAttemptAt: state.lastAttemptAt,
|
|
281
|
+
lastSuccessAt: state.lastSuccessAt,
|
|
282
|
+
lastCompletedAt: state.lastCompletedAt,
|
|
283
|
+
lastError: state.lastError,
|
|
284
|
+
nextRunAt: nextRunAt(state, effectiveIntervalSeconds, now, this.options.timezone, activeHours),
|
|
285
|
+
};
|
|
286
|
+
const ttlMs = INTEGRATION_WRITE_TTL_MS[def.integration];
|
|
287
|
+
const ttlSeconds = Math.floor(ttlMs / 1000);
|
|
288
|
+
if (intervalSeconds * TTL_CONTRACT_RATIO > ttlSeconds) {
|
|
289
|
+
ttlContractViolations.push({
|
|
290
|
+
cadenceId: id,
|
|
291
|
+
intervalSeconds,
|
|
292
|
+
ttlSeconds,
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
return {
|
|
297
|
+
workerRunning: this.timer !== null,
|
|
298
|
+
lastSuccessAt,
|
|
299
|
+
circuitState: anyTripped ? "tripped" : "ok",
|
|
300
|
+
activeHours,
|
|
301
|
+
withinActiveHours: isWithinActiveHours(now, this.options.timezone, activeHours),
|
|
302
|
+
cadences,
|
|
303
|
+
unrecognizedIntervalKeys: collectUnrecognizedIntervalKeys(this.cadences, runtimeConfig),
|
|
304
|
+
ttlContractViolations,
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Hourly-check-driven refresh: fires any cadence whose integration is in
|
|
309
|
+
* delegated mode but whose per-cadence opt-in flag (`cadenceEnabled[id]`)
|
|
310
|
+
* is NOT `true`. Cadences the operator opted in run on their own
|
|
311
|
+
* user-set interval via the regular tick loop and are intentionally
|
|
312
|
+
* skipped here so we don't spend tokens twice for the same partition.
|
|
313
|
+
*
|
|
314
|
+
* Why this exists: when every cadence is disabled (the post-Phase-9
|
|
315
|
+
* default), Gmail / Notion observations would otherwise dry up entirely
|
|
316
|
+
* — the delegated `routine.hourly_check` task flow's Step 0a / 0c rely
|
|
317
|
+
* on `mail:lifecycle` / `notion:<db>` rows the worker writes server-
|
|
318
|
+
* side, and the agent prompt is explicitly told NOT to call the
|
|
319
|
+
* gmail / notion `/reconcile` route directly (would poison the worker's
|
|
320
|
+
* 7 d partition with a narrow window). This method makes the hourly
|
|
321
|
+
* check itself the producer for those partitions when the user has not
|
|
322
|
+
* opted into a per-cadence schedule.
|
|
323
|
+
*
|
|
324
|
+
* Active-hours are NOT consulted: this method runs only because the
|
|
325
|
+
* hourly check itself fired, which already passed `hourlyCheckActive*`
|
|
326
|
+
* gating. The cadence-side `activeStartHour` / `activeEndHour` window
|
|
327
|
+
* applies only to the worker's own 60 s tick.
|
|
328
|
+
*
|
|
329
|
+
* Cadences run in parallel — they target independent integrations and
|
|
330
|
+
* connector subprocesses, so wall-clock latency is bounded by the
|
|
331
|
+
* slowest single cadence rather than the sum. Serialised through the
|
|
332
|
+
* `tickRunning` mutex so the regular timer tick or a dashboard Run-Now
|
|
333
|
+
* click landing simultaneously doesn't double-spawn the same connector.
|
|
334
|
+
* Failures are caught per-cadence inside `runCadence` (failureCount /
|
|
335
|
+
* circuit-breaker) and surfaced through the next `getStatus()` snapshot;
|
|
336
|
+
* this method does not throw.
|
|
337
|
+
*/
|
|
338
|
+
async runDisabledCadencesForHourlyCheck() {
|
|
339
|
+
if (this.tickRunning) {
|
|
340
|
+
logger.debug("Skipping hourly-check delegated refresh — worker tick already in flight");
|
|
341
|
+
return;
|
|
342
|
+
}
|
|
343
|
+
this.tickRunning = true;
|
|
344
|
+
try {
|
|
345
|
+
const integrations = readIntegrations(this.options.db);
|
|
346
|
+
const runtimeConfig = this.readRuntimeConfig();
|
|
347
|
+
const tasks = [];
|
|
348
|
+
for (const def of this.cadences) {
|
|
349
|
+
const integrationState = integrations[def.integration];
|
|
350
|
+
if (integrationState.mode !== "delegated"
|
|
351
|
+
|| !integrationState.delegatedBackend
|
|
352
|
+
|| integrationState.delegatedSyncEnabled === false) {
|
|
353
|
+
continue;
|
|
354
|
+
}
|
|
355
|
+
// Skip cadences the operator opted in — the regular tick handles
|
|
356
|
+
// those on the user-set interval. The whole point of this method
|
|
357
|
+
// is to cover the opt-OUT case.
|
|
358
|
+
if (isCadenceEnabled(def, runtimeConfig))
|
|
359
|
+
continue;
|
|
360
|
+
const normalizer = getSnapshotNormalizer(def.integration);
|
|
361
|
+
/* c8 ignore next 2 — defensive against descriptor-before-normalizer drift. */
|
|
362
|
+
if (!normalizer)
|
|
363
|
+
continue;
|
|
364
|
+
tasks.push(this.runCadence(def, normalizer, integrationState.delegatedBackend));
|
|
365
|
+
}
|
|
366
|
+
if (tasks.length === 0)
|
|
367
|
+
return;
|
|
368
|
+
// `runCadence` swallows its own errors; `allSettled` keeps a future
|
|
369
|
+
// refactor that lets it throw from poisoning the rest of the batch.
|
|
370
|
+
await Promise.allSettled(tasks);
|
|
371
|
+
}
|
|
372
|
+
finally {
|
|
373
|
+
this.tickRunning = false;
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
/**
|
|
377
|
+
* Run a single cadence on demand (dashboard "Run Now" button). Bypasses
|
|
378
|
+
* `cadenceEnabled`, `cadenceDue`, and active-hours gating — the user
|
|
379
|
+
* explicitly asked for one-shot execution. The integration master switch
|
|
380
|
+
* (`delegatedSyncEnabled === false`) is still honoured because that's a
|
|
381
|
+
* kill switch, not a schedule.
|
|
382
|
+
*
|
|
383
|
+
* Serialised through `tickRunning` so a Run-Now click during the 60 s
|
|
384
|
+
* scheduled tick window doesn't double-spawn the same connector
|
|
385
|
+
* subprocess. Returns a structured failure code rather than throwing so
|
|
386
|
+
* the dashboard can render the four known reasons cleanly.
|
|
387
|
+
*/
|
|
388
|
+
async runCadenceNow(cadenceIdInput) {
|
|
389
|
+
const def = this.cadences.find((d) => cadenceId(d) === cadenceIdInput);
|
|
390
|
+
if (!def)
|
|
391
|
+
return { ok: false, error: "unknown_cadence" };
|
|
392
|
+
if (this.tickRunning)
|
|
393
|
+
return { ok: false, error: "tick_in_progress" };
|
|
394
|
+
const integrations = readIntegrations(this.options.db);
|
|
395
|
+
const integrationState = integrations[def.integration];
|
|
396
|
+
if (integrationState.mode !== "delegated"
|
|
397
|
+
|| !integrationState.delegatedBackend) {
|
|
398
|
+
return { ok: false, error: "integration_not_delegated" };
|
|
399
|
+
}
|
|
400
|
+
if (integrationState.delegatedSyncEnabled === false) {
|
|
401
|
+
return { ok: false, error: "integration_disabled" };
|
|
402
|
+
}
|
|
403
|
+
const normalizer = getSnapshotNormalizer(def.integration);
|
|
404
|
+
/* c8 ignore start — every shipped integration registers a normalizer;
|
|
405
|
+
* defensive against future descriptor-before-normalizer drift. */
|
|
406
|
+
if (!normalizer)
|
|
407
|
+
return { ok: false, error: "integration_not_delegated" };
|
|
408
|
+
/* c8 ignore stop */
|
|
409
|
+
this.tickRunning = true;
|
|
410
|
+
try {
|
|
411
|
+
await this.runCadence(def, normalizer, integrationState.delegatedBackend);
|
|
412
|
+
return { ok: true };
|
|
413
|
+
}
|
|
414
|
+
finally {
|
|
415
|
+
this.tickRunning = false;
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
async runTick(force) {
|
|
419
|
+
const integrations = readIntegrations(this.options.db);
|
|
420
|
+
const runtimeConfig = this.readRuntimeConfig();
|
|
421
|
+
const now = this.now();
|
|
422
|
+
// Active-hours gate (delegated-sync-opt-in.md). Outside the window the
|
|
423
|
+
// entire tick is skipped; cadences don't accrue failureCount or move
|
|
424
|
+
// their lastAttemptAt clock. `force=true` (test fixtures, future
|
|
425
|
+
// batch-run paths) bypasses time gating; `runCadenceNow` has its own
|
|
426
|
+
// bypass via the run-once code path above.
|
|
427
|
+
if (!force) {
|
|
428
|
+
const activeHours = resolveActiveHours(runtimeConfig);
|
|
429
|
+
if (!isWithinActiveHours(now, this.options.timezone, activeHours)) {
|
|
430
|
+
return;
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
for (const def of this.cadences) {
|
|
434
|
+
const integrationState = integrations[def.integration];
|
|
435
|
+
if (integrationState.mode !== "delegated"
|
|
436
|
+
|| !integrationState.delegatedBackend
|
|
437
|
+
|| integrationState.delegatedSyncEnabled === false) {
|
|
438
|
+
continue;
|
|
439
|
+
}
|
|
440
|
+
// Per-cadence opt-in (default false). `force=true` bypasses so the
|
|
441
|
+
// existing test fixtures and any future "run all due cadences now"
|
|
442
|
+
// call stay simple. The integration master switch above is the kill
|
|
443
|
+
// switch and is honoured even under `force=true`.
|
|
444
|
+
if (!force && !isCadenceEnabled(def, runtimeConfig))
|
|
445
|
+
continue;
|
|
446
|
+
const normalizer = getSnapshotNormalizer(def.integration);
|
|
447
|
+
// Defensive: every IntegrationKey ships a normalizer after Phase 5.
|
|
448
|
+
// The branch survives so a future integration whose connector
|
|
449
|
+
// wiring lands before its normalizer doesn't crash the worker; the
|
|
450
|
+
// cadence is silently skipped instead.
|
|
451
|
+
/* c8 ignore start */
|
|
452
|
+
if (!normalizer) {
|
|
453
|
+
logger.debug({ integration: def.integration, windowKey: def.windowKey }, "Skipping delegated sync cadence without a snapshot normalizer");
|
|
454
|
+
continue;
|
|
455
|
+
}
|
|
456
|
+
/* c8 ignore stop */
|
|
457
|
+
const id = cadenceId(def);
|
|
458
|
+
const state = this.getState(id);
|
|
459
|
+
const intervalSeconds = this.resolveIntervalSeconds(def, runtimeConfig);
|
|
460
|
+
const effectiveSeconds = computeEffectiveIntervalSeconds(intervalSeconds, state.failureCount);
|
|
461
|
+
if (!force && !cadenceDue(state, effectiveSeconds, now))
|
|
462
|
+
continue;
|
|
463
|
+
await this.runCadence(def, normalizer, integrationState.delegatedBackend);
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
async runCadence(def, normalizer, backendId) {
|
|
467
|
+
const id = cadenceId(def);
|
|
468
|
+
const state = this.getState(id);
|
|
469
|
+
const startedAt = this.now();
|
|
470
|
+
state.lastAttemptAt = startedAt.toISOString();
|
|
471
|
+
let invokeResult = null;
|
|
472
|
+
let diff = null;
|
|
473
|
+
let sideEffects = emptyDriftSideEffects();
|
|
474
|
+
let itemsSeen = 0;
|
|
475
|
+
let retryAttempts = 0;
|
|
476
|
+
try {
|
|
477
|
+
const { windowMin, windowMax } = def.buildWindow(startedAt);
|
|
478
|
+
const ctx = {
|
|
479
|
+
windowMin,
|
|
480
|
+
windowMax,
|
|
481
|
+
now: startedAt,
|
|
482
|
+
calendarId: this.options.calendarId,
|
|
483
|
+
maxResults: def.maxResults,
|
|
484
|
+
};
|
|
485
|
+
const { toolName, toolArgs } = def.buildToolCall(backendId, ctx);
|
|
486
|
+
// Cadence-path model pin. The canonical delegated proxy resolver
|
|
487
|
+
// returns the lite-tier model (Haiku on Claude); audit log
|
|
488
|
+
// 2026-05-04 showed the cadence calls timing out at the wall-clock
|
|
489
|
+
// cap on Haiku — the connector tool sequence (ToolSearch → tool →
|
|
490
|
+
// response) plus session-dir cold-start was overrunning the 30s
|
|
491
|
+
// window. Pin the cadence to medium tier (Sonnet on Claude / 2.5-
|
|
492
|
+
// flash on Gemini) so cadence reliability does not regress when an
|
|
493
|
+
// operator pins Haiku via `integrations.md` for synchronous skill
|
|
494
|
+
// calls — those still flow through `delegatedModel` resolution and
|
|
495
|
+
// are unaffected.
|
|
496
|
+
const cadenceModelOverride = defaultModelForTier(backendId, "medium");
|
|
497
|
+
const invokeParams = {
|
|
498
|
+
integrationKey: def.integration,
|
|
499
|
+
toolName,
|
|
500
|
+
toolArgs,
|
|
501
|
+
parentProcessKey: DELEGATED_SYNC_PROCESS_KEY,
|
|
502
|
+
modelOverride: cadenceModelOverride,
|
|
503
|
+
};
|
|
504
|
+
while (true) {
|
|
505
|
+
invokeResult = await this.options.invoker.invoke(invokeParams);
|
|
506
|
+
if (invokeResult.ok)
|
|
507
|
+
break;
|
|
508
|
+
if (retryAttempts >= MAX_RETRY_ATTEMPTS
|
|
509
|
+
|| !RETRYABLE_ERROR_CLASSES.has(invokeResult.errorClass)) {
|
|
510
|
+
break;
|
|
511
|
+
}
|
|
512
|
+
retryAttempts += 1;
|
|
513
|
+
logger.info({
|
|
514
|
+
integration: def.integration,
|
|
515
|
+
windowKey: def.windowKey,
|
|
516
|
+
backendId,
|
|
517
|
+
errorClass: invokeResult.errorClass,
|
|
518
|
+
attempt: retryAttempts,
|
|
519
|
+
maxRetryAttempts: MAX_RETRY_ATTEMPTS,
|
|
520
|
+
}, "Delegated sync cadence retrying after transient failure");
|
|
521
|
+
await sleep(RETRY_DELAY_MS);
|
|
522
|
+
}
|
|
523
|
+
if (!invokeResult.ok) {
|
|
524
|
+
throw new Error(invokeResult.message);
|
|
525
|
+
}
|
|
526
|
+
const rawItems = def.extractItems(invokeResult.toolResult);
|
|
527
|
+
itemsSeen = rawItems.length;
|
|
528
|
+
const items = normalizeItems(rawItems, normalizer);
|
|
529
|
+
const req = {
|
|
530
|
+
integration: def.integration,
|
|
531
|
+
windowKey: def.windowKey,
|
|
532
|
+
windowMin,
|
|
533
|
+
windowMax,
|
|
534
|
+
fetchedAt: startedAt.toISOString(),
|
|
535
|
+
items,
|
|
536
|
+
};
|
|
537
|
+
diff = reconcile(this.options.db, req, {
|
|
538
|
+
normalizer,
|
|
539
|
+
onDiffInTransaction: (d) => {
|
|
540
|
+
sideEffects = applyDriftEffects(req, d, {
|
|
541
|
+
db: this.options.db,
|
|
542
|
+
calendarId: this.options.calendarId,
|
|
543
|
+
timezone: this.options.timezone,
|
|
544
|
+
todayWriteLock: this.options.todayWriteLock,
|
|
545
|
+
triggerRoadmapRefresh: this.options.triggerRoadmapRefresh,
|
|
546
|
+
// Phase 7: forward the worker's clock so today-drift detection
|
|
547
|
+
// is deterministic in tests (the worker uses an injected now()
|
|
548
|
+
// for window construction; without this forwarder drift-effects
|
|
549
|
+
// would call real `new Date()` and the test would flap across
|
|
550
|
+
// UTC midnight when the fixed NOW and the real clock disagree
|
|
551
|
+
// on what `today` is).
|
|
552
|
+
now: this.now,
|
|
553
|
+
});
|
|
554
|
+
},
|
|
555
|
+
});
|
|
556
|
+
const completedAt = this.now();
|
|
557
|
+
state.lastCompletedAt = completedAt.toISOString();
|
|
558
|
+
state.lastSuccessAt = completedAt.toISOString();
|
|
559
|
+
state.failureCount = 0;
|
|
560
|
+
state.lastError = null;
|
|
561
|
+
recordDelegatedSyncAction(this.options.db, {
|
|
562
|
+
def,
|
|
563
|
+
result: "success",
|
|
564
|
+
startedAt,
|
|
565
|
+
completedAt,
|
|
566
|
+
invokeResult,
|
|
567
|
+
itemsSeen,
|
|
568
|
+
diff,
|
|
569
|
+
sideEffects,
|
|
570
|
+
error: null,
|
|
571
|
+
retryAttempts,
|
|
572
|
+
});
|
|
573
|
+
}
|
|
574
|
+
catch (err) {
|
|
575
|
+
const completedAt = this.now();
|
|
576
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
577
|
+
state.lastCompletedAt = completedAt.toISOString();
|
|
578
|
+
state.failureCount += 1;
|
|
579
|
+
state.lastError = message;
|
|
580
|
+
recordDelegatedSyncAction(this.options.db, {
|
|
581
|
+
def,
|
|
582
|
+
result: "failed",
|
|
583
|
+
startedAt,
|
|
584
|
+
completedAt,
|
|
585
|
+
invokeResult,
|
|
586
|
+
itemsSeen,
|
|
587
|
+
diff,
|
|
588
|
+
sideEffects,
|
|
589
|
+
error: message,
|
|
590
|
+
retryAttempts,
|
|
591
|
+
});
|
|
592
|
+
logger.warn({
|
|
593
|
+
err,
|
|
594
|
+
integration: def.integration,
|
|
595
|
+
windowKey: def.windowKey,
|
|
596
|
+
failureCount: state.failureCount,
|
|
597
|
+
}, "Delegated sync cadence failed");
|
|
598
|
+
}
|
|
599
|
+
}
|
|
600
|
+
getState(id) {
|
|
601
|
+
let state = this.states.get(id);
|
|
602
|
+
if (!state) {
|
|
603
|
+
state = {
|
|
604
|
+
lastAttemptAt: null,
|
|
605
|
+
lastSuccessAt: null,
|
|
606
|
+
lastCompletedAt: null,
|
|
607
|
+
failureCount: 0,
|
|
608
|
+
lastError: null,
|
|
609
|
+
};
|
|
610
|
+
this.states.set(id, state);
|
|
611
|
+
}
|
|
612
|
+
return state;
|
|
613
|
+
}
|
|
614
|
+
readRuntimeConfig() {
|
|
615
|
+
const raw = readRuntimeState(this.options.db, RUNTIME_CONFIG_KEY);
|
|
616
|
+
if (!raw || typeof raw !== "object")
|
|
617
|
+
return {};
|
|
618
|
+
return raw;
|
|
619
|
+
}
|
|
620
|
+
resolveIntervalSeconds(def, runtimeConfig) {
|
|
621
|
+
const configured = runtimeConfig.intervals?.[cadenceId(def)]
|
|
622
|
+
?? runtimeConfig.intervals?.[`${def.integration}.${def.windowKey}`]
|
|
623
|
+
?? runtimeConfig.intervals?.[def.windowKey];
|
|
624
|
+
const floor = Math.max(def.softFloorSeconds, positiveNumber(runtimeConfig.minIntervalSeconds)
|
|
625
|
+
?? DEFAULT_MIN_INTERVAL_SECONDS);
|
|
626
|
+
return Math.max(floor, positiveNumber(configured) ?? def.defaultIntervalSeconds);
|
|
627
|
+
}
|
|
628
|
+
/**
|
|
629
|
+
* Phase 7 (h): rebuild per-cadence `lastAttemptAt` / `lastSuccessAt` from
|
|
630
|
+
* the most recent `delegated_sync` row in `agent_actions` so a daemon
|
|
631
|
+
* restart shortly after a successful sync does not re-spawn a subprocess
|
|
632
|
+
* for that cadence. Idempotent — re-running on an already-warm states
|
|
633
|
+
* map only overwrites with same-or-newer timestamps. Failures during
|
|
634
|
+
* hydration log warn and leave the cadence's state empty (which falls
|
|
635
|
+
* back to "due immediately", matching the prior force-on-start
|
|
636
|
+
* behaviour).
|
|
637
|
+
*/
|
|
638
|
+
hydrateStateFromHistory() {
|
|
639
|
+
for (const def of this.cadences) {
|
|
640
|
+
try {
|
|
641
|
+
const row = this.options.db
|
|
642
|
+
.prepare(`SELECT started_at AS startedAt, completed_at AS completedAt, result
|
|
643
|
+
FROM agent_actions
|
|
644
|
+
WHERE action_type = 'delegated_sync'
|
|
645
|
+
AND json_extract(detail, '$.integration') = ?
|
|
646
|
+
AND json_extract(detail, '$.windowKey') = ?
|
|
647
|
+
ORDER BY started_at DESC
|
|
648
|
+
LIMIT 1`)
|
|
649
|
+
.get(def.integration, def.windowKey);
|
|
650
|
+
if (!row)
|
|
651
|
+
continue;
|
|
652
|
+
const state = this.getState(cadenceId(def));
|
|
653
|
+
const startedIso = sqliteDatetimeToIso(row.startedAt);
|
|
654
|
+
const completedIso = sqliteDatetimeToIso(row.completedAt);
|
|
655
|
+
if (startedIso)
|
|
656
|
+
state.lastAttemptAt = startedIso;
|
|
657
|
+
if (completedIso)
|
|
658
|
+
state.lastCompletedAt = completedIso;
|
|
659
|
+
if (row.result === "success" && completedIso) {
|
|
660
|
+
state.lastSuccessAt = completedIso;
|
|
661
|
+
}
|
|
662
|
+
/* c8 ignore start — defensive against a stripped test schema or
|
|
663
|
+
* a corrupted agent_actions row; production always has the
|
|
664
|
+
* table and json_extract returns null for missing keys rather
|
|
665
|
+
* than throwing. The worst case is one redundant subprocess
|
|
666
|
+
* spawn on the first tick, which is the prior force-on-start
|
|
667
|
+
* behaviour. */
|
|
668
|
+
}
|
|
669
|
+
catch (err) {
|
|
670
|
+
logger.warn({ err, integration: def.integration, windowKey: def.windowKey }, "Hydration from agent_actions failed; cadence will tick on first cycle");
|
|
671
|
+
}
|
|
672
|
+
/* c8 ignore stop */
|
|
673
|
+
}
|
|
674
|
+
}
|
|
675
|
+
/**
|
|
676
|
+
* Phase 7 (g) + (c): emit a single warn at start when the operator's
|
|
677
|
+
* `runtime_state.delegatedSync.intervals` includes typo'd keys or when a
|
|
678
|
+
* resolved cadence violates the TTL × 1.5 contract. Both checks fire
|
|
679
|
+
* once per `start()` to avoid log spam; they are also exposed via
|
|
680
|
+
* `getStatus()` so the dashboard can surface them on-screen.
|
|
681
|
+
*/
|
|
682
|
+
warnOnConfigViolations() {
|
|
683
|
+
const runtimeConfig = this.readRuntimeConfig();
|
|
684
|
+
const unrecognized = collectUnrecognizedIntervalKeys(this.cadences, runtimeConfig);
|
|
685
|
+
if (unrecognized.length > 0) {
|
|
686
|
+
logger.warn({ unrecognizedIntervalKeys: unrecognized }, "delegatedSync.intervals contains keys that did not resolve to any known cadence id; configured values are ignored for those keys");
|
|
687
|
+
}
|
|
688
|
+
const violations = [];
|
|
689
|
+
for (const def of this.cadences) {
|
|
690
|
+
const intervalSeconds = this.resolveIntervalSeconds(def, runtimeConfig);
|
|
691
|
+
const ttlSeconds = Math.floor(INTEGRATION_WRITE_TTL_MS[def.integration] / 1000);
|
|
692
|
+
if (intervalSeconds * TTL_CONTRACT_RATIO > ttlSeconds) {
|
|
693
|
+
violations.push({ cadenceId: cadenceId(def), intervalSeconds, ttlSeconds });
|
|
694
|
+
}
|
|
695
|
+
}
|
|
696
|
+
if (violations.length > 0) {
|
|
697
|
+
logger.warn({ ttlContractViolations: violations, ttlContractRatio: TTL_CONTRACT_RATIO }, "delegatedSync cadence(s) exceed integration_writes TTL × 1.5; agent-originated writes within these cadences may be re-attributed actor='user' on the next reconcile");
|
|
698
|
+
}
|
|
699
|
+
}
|
|
700
|
+
}
|
|
701
|
+
function cadenceId(def) {
|
|
702
|
+
return `${def.integration}:${def.windowKey}`;
|
|
703
|
+
}
|
|
704
|
+
/**
|
|
705
|
+
* Per-cadence opt-in check (delegated-sync-opt-in.md). Defaults to `false`
|
|
706
|
+
* when the operator hasn't set the flag, which means a fresh
|
|
707
|
+
* `runtime_state.delegatedSync` row keeps every cadence dormant. Canonical
|
|
708
|
+
* fully-qualified IDs only — the legacy alias forms accepted by `intervals`
|
|
709
|
+
* are intentionally not honoured here so a future cadence collision cannot
|
|
710
|
+
* silently flip the wrong toggle.
|
|
711
|
+
*/
|
|
712
|
+
function isCadenceEnabled(def, runtimeConfig) {
|
|
713
|
+
return runtimeConfig.cadenceEnabled?.[cadenceId(def)] === true;
|
|
714
|
+
}
|
|
715
|
+
/**
|
|
716
|
+
* Resolve the active-hours window from operator config, falling back to
|
|
717
|
+
* the Hourly-Check-aligned default. A malformed or out-of-range pair (e.g.
|
|
718
|
+
* `start >= end`, or numbers outside `[0,24]`) is treated as "use defaults"
|
|
719
|
+
* — the worker can't usefully interpret an inverted window, and falling
|
|
720
|
+
* back keeps cadences running rather than silently disabling them.
|
|
721
|
+
*/
|
|
722
|
+
export function resolveActiveHours(runtimeConfig) {
|
|
723
|
+
const start = runtimeConfig.activeStartHour;
|
|
724
|
+
const end = runtimeConfig.activeEndHour;
|
|
725
|
+
if (Number.isInteger(start)
|
|
726
|
+
&& Number.isInteger(end)
|
|
727
|
+
&& start >= 0
|
|
728
|
+
&& start <= 23
|
|
729
|
+
&& end >= 1
|
|
730
|
+
&& end <= 24
|
|
731
|
+
&& start < end) {
|
|
732
|
+
return { startHour: start, endHour: end };
|
|
733
|
+
}
|
|
734
|
+
return {
|
|
735
|
+
startHour: DEFAULT_ACTIVE_START_HOUR,
|
|
736
|
+
endHour: DEFAULT_ACTIVE_END_HOUR,
|
|
737
|
+
};
|
|
738
|
+
}
|
|
739
|
+
/**
|
|
740
|
+
* `true` when `now` falls inside `[startHour, endHour)` in the daemon's
|
|
741
|
+
* configured timezone. `endHour=24` is exclusive — i.e. covers up to
|
|
742
|
+
* 23:59:59. Mirrors the semantics of Hourly Check's window so an operator
|
|
743
|
+
* who already understands one understands the other.
|
|
744
|
+
*/
|
|
745
|
+
export function isWithinActiveHours(now, timezone, activeHours) {
|
|
746
|
+
const local = nowInTimezone(timezone, now);
|
|
747
|
+
return local.hours >= activeHours.startHour && local.hours < activeHours.endHour;
|
|
748
|
+
}
|
|
749
|
+
/**
|
|
750
|
+
* INTEGRATION-DRIFT-DETECTION-PLAN.md §17.11 — `integration_writes.expires_at`
|
|
751
|
+
* must outlive the slowest reconcile cadence by ~1.5×, otherwise an
|
|
752
|
+
* agent-originated write at T0 has its mark expire just before the next
|
|
753
|
+
* worker tick re-fetches and the diff resolves `actor='user'` instead of
|
|
754
|
+
* `'agent'`. Phase 7 (c) tightens both halves: the TTL constants
|
|
755
|
+
* (INTEGRATION_WRITE_TTL_MS, in @aitne/shared) cover the default
|
|
756
|
+
* cadences with margin, and this ratio is the daemon-side check that fires
|
|
757
|
+
* a warn when an operator-tuned cadence pushes past the boundary.
|
|
758
|
+
*/
|
|
759
|
+
const TTL_CONTRACT_RATIO = 1.5;
|
|
760
|
+
/**
|
|
761
|
+
* Build the alias set a runtime-config key may take and check operator-
|
|
762
|
+
* supplied keys against it. Three accepted forms:
|
|
763
|
+
* - canonical fully-qualified (`google_calendar:primary:24h`)
|
|
764
|
+
* - dotted human-friendly (`google_calendar.primary:24h`)
|
|
765
|
+
* - integration-local (`primary:24h` — only unambiguous when the window
|
|
766
|
+
* key is unique across cadences, which the §8.2 default set respects)
|
|
767
|
+
*
|
|
768
|
+
* Returns the sorted list of operator keys that match none of the three
|
|
769
|
+
* forms for any registered cadence. Sorted for stable assertions and
|
|
770
|
+
* stable health-endpoint output.
|
|
771
|
+
*/
|
|
772
|
+
function collectUnrecognizedIntervalKeys(cadences, runtimeConfig) {
|
|
773
|
+
if (!runtimeConfig.intervals)
|
|
774
|
+
return [];
|
|
775
|
+
const known = new Set();
|
|
776
|
+
for (const def of cadences) {
|
|
777
|
+
known.add(cadenceId(def));
|
|
778
|
+
known.add(`${def.integration}.${def.windowKey}`);
|
|
779
|
+
known.add(def.windowKey);
|
|
780
|
+
}
|
|
781
|
+
const unrecognized = [];
|
|
782
|
+
for (const key of Object.keys(runtimeConfig.intervals)) {
|
|
783
|
+
if (!known.has(key))
|
|
784
|
+
unrecognized.push(key);
|
|
785
|
+
}
|
|
786
|
+
return unrecognized.sort();
|
|
787
|
+
}
|
|
788
|
+
/**
|
|
789
|
+
* `agent_actions` stores `started_at` / `completed_at` as SQLite datetime
|
|
790
|
+
* (`YYYY-MM-DD HH:MM:SS`). Hydration converts them back to ISO 8601 to
|
|
791
|
+
* match the in-memory `CadenceRuntimeState` format. Returns `null` for an
|
|
792
|
+
* unparseable value so a malformed historical row does not poison the
|
|
793
|
+
* runtime state map.
|
|
794
|
+
*/
|
|
795
|
+
function sqliteDatetimeToIso(value) {
|
|
796
|
+
if (typeof value !== "string" || value.length === 0)
|
|
797
|
+
return null;
|
|
798
|
+
const normalised = value.includes("T") ? value : value.replace(" ", "T");
|
|
799
|
+
const withZone = /[Zz]|[+-]\d{2}:?\d{2}$/.test(normalised)
|
|
800
|
+
? normalised
|
|
801
|
+
: `${normalised}Z`;
|
|
802
|
+
const ms = Date.parse(withZone);
|
|
803
|
+
if (!Number.isFinite(ms))
|
|
804
|
+
return null;
|
|
805
|
+
return new Date(ms).toISOString();
|
|
806
|
+
}
|
|
807
|
+
function positiveNumber(value) {
|
|
808
|
+
return typeof value === "number" && Number.isFinite(value) && value > 0
|
|
809
|
+
? value
|
|
810
|
+
: null;
|
|
811
|
+
}
|
|
812
|
+
function computeEffectiveIntervalSeconds(intervalSeconds, failureCount) {
|
|
813
|
+
return failureCount >= CIRCUIT_FAILURE_THRESHOLD
|
|
814
|
+
? intervalSeconds * CIRCUIT_BACKOFF_MULTIPLIER
|
|
815
|
+
: intervalSeconds;
|
|
816
|
+
}
|
|
817
|
+
function cadenceDue(state, intervalSeconds, now) {
|
|
818
|
+
if (!state.lastAttemptAt)
|
|
819
|
+
return true;
|
|
820
|
+
const lastAttemptMs = Date.parse(state.lastAttemptAt);
|
|
821
|
+
if (!Number.isFinite(lastAttemptMs))
|
|
822
|
+
return true;
|
|
823
|
+
return now.getTime() - lastAttemptMs >= intervalSeconds * 1000;
|
|
824
|
+
}
|
|
825
|
+
/**
|
|
826
|
+
* `nextRunAt` projects the next time this cadence is expected to fire.
|
|
827
|
+
* Computes the interval-based candidate (or `now` for first run / malformed
|
|
828
|
+
* lastAttemptAt), floors to `now` (never returns a past instant), and then
|
|
829
|
+
* shifts forward to the next active-hours start when the candidate falls
|
|
830
|
+
* outside the configured window. Mirrors the worker's actual gating order
|
|
831
|
+
* (active-hours gate first, then cadenceDue) so the dashboard's "next run
|
|
832
|
+
* in Xm" matches what the operator will observe.
|
|
833
|
+
*/
|
|
834
|
+
function nextRunAt(state, intervalSeconds, now, timezone, activeHours) {
|
|
835
|
+
let candidateMs;
|
|
836
|
+
if (!state.lastAttemptAt) {
|
|
837
|
+
candidateMs = now.getTime();
|
|
838
|
+
}
|
|
839
|
+
else {
|
|
840
|
+
const lastAttemptMs = Date.parse(state.lastAttemptAt);
|
|
841
|
+
candidateMs = Number.isFinite(lastAttemptMs)
|
|
842
|
+
? lastAttemptMs + intervalSeconds * 1000
|
|
843
|
+
: now.getTime();
|
|
844
|
+
}
|
|
845
|
+
// Floor to `now` — a recurrence due in the past would actually fire on
|
|
846
|
+
// the next tick, not retroactively. Reporting it as "now" is the most
|
|
847
|
+
// accurate forward-looking value.
|
|
848
|
+
const candidate = new Date(Math.max(candidateMs, now.getTime()));
|
|
849
|
+
return nextActiveHoursStart(candidate, timezone, activeHours.startHour, activeHours.endHour).toISOString();
|
|
850
|
+
}
|
|
851
|
+
/**
|
|
852
|
+
* Resolve the fully-qualified tool name for `(integration, backendId, bareTool)`.
|
|
853
|
+
* Throws when the descriptor lacks a connector for the requested backend —
|
|
854
|
+
* defensive against an integration mode change racing the worker tick (the
|
|
855
|
+
* caller has already confirmed `delegatedBackend` resolves; this is the
|
|
856
|
+
* second-line check the descriptor lookup performs anyway).
|
|
857
|
+
*/
|
|
858
|
+
function namespacedTool(integration, backendId, bareTool) {
|
|
859
|
+
const connector = INTEGRATION_DESCRIPTORS[integration].backendConnectors[backendId];
|
|
860
|
+
/* c8 ignore next 5 */
|
|
861
|
+
if (!connector) {
|
|
862
|
+
throw new Error(`${integration} has no delegated connector for backend '${backendId}'`);
|
|
863
|
+
}
|
|
864
|
+
return `${connector.toolNamespace}${bareTool}`;
|
|
865
|
+
}
|
|
866
|
+
function calendarListBareTool(backendId) {
|
|
867
|
+
return backendId === "claude"
|
|
868
|
+
? "list_events"
|
|
869
|
+
: backendId === "codex"
|
|
870
|
+
? "search_events"
|
|
871
|
+
: "listEvents";
|
|
872
|
+
}
|
|
873
|
+
/**
|
|
874
|
+
* Per-integration item-array key list. Connectors wrap upstream payloads
|
|
875
|
+
* differently — `events` for calendar list (Google API native field),
|
|
876
|
+
* `messages` / `threads` for Gmail search, `results` / `pages` for Notion
|
|
877
|
+
* search. The cadence-supplied list is what the worker walks via
|
|
878
|
+
* {@link extractItemsByKeys} when normalising the tool result.
|
|
879
|
+
*/
|
|
880
|
+
const CALENDAR_ITEM_KEYS = ["events", "items", "calendarEvents"];
|
|
881
|
+
const GMAIL_ITEM_KEYS = ["threads", "messages", "items"];
|
|
882
|
+
const NOTION_ITEM_KEYS = ["results", "pages", "items"];
|
|
883
|
+
const SHARED_WRAPPER_KEYS = ["toolResult", "data", "result"];
|
|
884
|
+
function extractItemsByKeys(value, keys) {
|
|
885
|
+
const items = tryExtractItemsByKeys(value, keys, 0);
|
|
886
|
+
if (items)
|
|
887
|
+
return items;
|
|
888
|
+
throw new Error(`delegated tool result did not contain an item array (looked for ${[...keys, ...SHARED_WRAPPER_KEYS].join(", ")})`);
|
|
889
|
+
}
|
|
890
|
+
function tryExtractItemsByKeys(value, keys, depth) {
|
|
891
|
+
if (depth > 4)
|
|
892
|
+
return null;
|
|
893
|
+
if (Array.isArray(value))
|
|
894
|
+
return value;
|
|
895
|
+
if (typeof value === "string") {
|
|
896
|
+
const trimmed = value.trim();
|
|
897
|
+
if (trimmed.length === 0)
|
|
898
|
+
return [];
|
|
899
|
+
if (trimmed.startsWith("[") || trimmed.startsWith("{")) {
|
|
900
|
+
try {
|
|
901
|
+
return tryExtractItemsByKeys(JSON.parse(trimmed), keys, depth + 1);
|
|
902
|
+
}
|
|
903
|
+
catch {
|
|
904
|
+
return null;
|
|
905
|
+
}
|
|
906
|
+
}
|
|
907
|
+
return null;
|
|
908
|
+
}
|
|
909
|
+
if (!value || typeof value !== "object")
|
|
910
|
+
return null;
|
|
911
|
+
const obj = value;
|
|
912
|
+
for (const key of [...keys, ...SHARED_WRAPPER_KEYS]) {
|
|
913
|
+
if (key in obj) {
|
|
914
|
+
const nested = tryExtractItemsByKeys(obj[key], keys, depth + 1);
|
|
915
|
+
if (nested)
|
|
916
|
+
return nested;
|
|
917
|
+
}
|
|
918
|
+
}
|
|
919
|
+
return null;
|
|
920
|
+
}
|
|
921
|
+
/**
|
|
922
|
+
* Per-backend Gmail search tool call. Each Codex / Claude / Gemini Gmail
|
|
923
|
+
* connector exposes a slightly different search API; this maps the
|
|
924
|
+
* cadence's intent (`newer_than:7d`, capped to `maxResults`) onto the
|
|
925
|
+
* connector's actual parameter names. The tool name resolves through
|
|
926
|
+
* `INTEGRATION_DESCRIPTORS.gmail.backendConnectors[backendId].toolNamespace`
|
|
927
|
+
* so namespace drift in the descriptor stays the single source of truth.
|
|
928
|
+
*/
|
|
929
|
+
function gmailSearchToolCall(backendId, ctx) {
|
|
930
|
+
const query = "newer_than:7d";
|
|
931
|
+
switch (backendId) {
|
|
932
|
+
case "claude":
|
|
933
|
+
return {
|
|
934
|
+
toolName: namespacedTool("gmail", "claude", "search_threads"),
|
|
935
|
+
toolArgs: { query, pageSize: ctx.maxResults },
|
|
936
|
+
};
|
|
937
|
+
case "codex":
|
|
938
|
+
return {
|
|
939
|
+
toolName: namespacedTool("gmail", "codex", "search_emails"),
|
|
940
|
+
toolArgs: { query, max_results: ctx.maxResults },
|
|
941
|
+
};
|
|
942
|
+
case "gemini":
|
|
943
|
+
return {
|
|
944
|
+
toolName: namespacedTool("gmail", "gemini", "search"),
|
|
945
|
+
toolArgs: { query, maxResults: ctx.maxResults },
|
|
946
|
+
};
|
|
947
|
+
// Exhaustive switch over the BackendId union; a future backend would
|
|
948
|
+
// surface here at compile time.
|
|
949
|
+
/* c8 ignore start */
|
|
950
|
+
default:
|
|
951
|
+
throw new Error(`unsupported backend '${backendId}' for gmail`);
|
|
952
|
+
/* c8 ignore stop */
|
|
953
|
+
}
|
|
954
|
+
}
|
|
955
|
+
/**
|
|
956
|
+
* Per-backend Notion search tool call. All three connectors accept the
|
|
957
|
+
* same shape (`query`, `filters.created_date_range.start_date`, page-size
|
|
958
|
+
* cap), but the bare tool name differs: Codex strips the `notion-` prefix
|
|
959
|
+
* (`_search` vs `notion-search`).
|
|
960
|
+
*/
|
|
961
|
+
function notionSearchToolCall(backendId, ctx) {
|
|
962
|
+
const startDate = isoDate(ctx.windowMin);
|
|
963
|
+
const args = {
|
|
964
|
+
query: "updated",
|
|
965
|
+
filters: { created_date_range: { start_date: startDate } },
|
|
966
|
+
page_size: ctx.maxResults,
|
|
967
|
+
};
|
|
968
|
+
switch (backendId) {
|
|
969
|
+
case "claude":
|
|
970
|
+
return { toolName: namespacedTool("notion", "claude", "notion-search"), toolArgs: args };
|
|
971
|
+
case "codex":
|
|
972
|
+
return { toolName: namespacedTool("notion", "codex", "search"), toolArgs: args };
|
|
973
|
+
case "gemini":
|
|
974
|
+
return { toolName: namespacedTool("notion", "gemini", "notion-search"), toolArgs: args };
|
|
975
|
+
/* c8 ignore start */
|
|
976
|
+
default:
|
|
977
|
+
throw new Error(`unsupported backend '${backendId}' for notion`);
|
|
978
|
+
/* c8 ignore stop */
|
|
979
|
+
}
|
|
980
|
+
}
|
|
981
|
+
function isoDate(iso) {
|
|
982
|
+
// Trim ISO-8601 instant down to YYYY-MM-DD. `Date.parse` is the same
|
|
983
|
+
// mechanism the validation layer uses; we slice the resulting ISO string
|
|
984
|
+
// rather than risk a per-locale formatter producing zone-shifted dates.
|
|
985
|
+
const ms = Date.parse(iso);
|
|
986
|
+
// windowMin is built by buildWindow above; an unparseable value would
|
|
987
|
+
// mean the caller corrupted it, which the integration tests would catch
|
|
988
|
+
// before this branch ever fires.
|
|
989
|
+
/* c8 ignore start */
|
|
990
|
+
if (!Number.isFinite(ms)) {
|
|
991
|
+
throw new Error(`isoDate: cannot parse '${iso}'`);
|
|
992
|
+
}
|
|
993
|
+
/* c8 ignore stop */
|
|
994
|
+
return new Date(ms).toISOString().slice(0, 10);
|
|
995
|
+
}
|
|
996
|
+
function normalizeItems(rawEvents, normalizer) {
|
|
997
|
+
return rawEvents.map((raw) => {
|
|
998
|
+
const payload = normalizer.payload(raw);
|
|
999
|
+
return {
|
|
1000
|
+
itemId: normalizer.itemId(raw),
|
|
1001
|
+
contentHash: normalizer.hash(payload),
|
|
1002
|
+
payload,
|
|
1003
|
+
itemStart: normalizer.itemStart(raw),
|
|
1004
|
+
};
|
|
1005
|
+
});
|
|
1006
|
+
}
|
|
1007
|
+
function zeroCost() {
|
|
1008
|
+
return {
|
|
1009
|
+
tokensInput: 0,
|
|
1010
|
+
tokensOutput: 0,
|
|
1011
|
+
cacheCreationTokens: 0,
|
|
1012
|
+
cacheReadTokens: 0,
|
|
1013
|
+
costUsd: 0,
|
|
1014
|
+
durationMs: 0,
|
|
1015
|
+
numTurns: 0,
|
|
1016
|
+
};
|
|
1017
|
+
}
|
|
1018
|
+
function resultCost(result) {
|
|
1019
|
+
if (!result)
|
|
1020
|
+
return zeroCost();
|
|
1021
|
+
if (result.ok)
|
|
1022
|
+
return result.cost;
|
|
1023
|
+
return result.cost ?? zeroCost();
|
|
1024
|
+
}
|
|
1025
|
+
function recordDelegatedSyncAction(db, args) {
|
|
1026
|
+
const cost = resultCost(args.invokeResult);
|
|
1027
|
+
const detail = {
|
|
1028
|
+
integration: args.def.integration,
|
|
1029
|
+
windowKey: args.def.windowKey,
|
|
1030
|
+
itemsSeen: args.itemsSeen,
|
|
1031
|
+
...(args.diff
|
|
1032
|
+
? {
|
|
1033
|
+
created: args.diff.created.length,
|
|
1034
|
+
modified: args.diff.modified.length,
|
|
1035
|
+
deleted: args.diff.deleted.length,
|
|
1036
|
+
unchanged: args.diff.unchanged,
|
|
1037
|
+
prunedOutOfWindow: args.diff.prunedOutOfWindow,
|
|
1038
|
+
isInitialSnapshot: args.diff.isInitialSnapshot,
|
|
1039
|
+
}
|
|
1040
|
+
: {}),
|
|
1041
|
+
sideEffects: args.sideEffects,
|
|
1042
|
+
...(args.retryAttempts > 0 ? { retryAttempts: args.retryAttempts } : {}),
|
|
1043
|
+
errorClass: args.invokeResult && !args.invokeResult.ok
|
|
1044
|
+
? args.invokeResult.errorClass
|
|
1045
|
+
: undefined,
|
|
1046
|
+
};
|
|
1047
|
+
try {
|
|
1048
|
+
db.prepare(`INSERT INTO agent_actions (
|
|
1049
|
+
event_id, action_type, trigger, model_used,
|
|
1050
|
+
cost_usd, tokens_input, tokens_output,
|
|
1051
|
+
cache_creation_tokens, cache_read_tokens,
|
|
1052
|
+
duration_ms, num_turns, result, detail,
|
|
1053
|
+
started_at, completed_at, error, backend, cost_source, source_kind
|
|
1054
|
+
) VALUES (
|
|
1055
|
+
NULL, 'delegated_sync', ?, ?,
|
|
1056
|
+
?, ?, ?,
|
|
1057
|
+
?, ?,
|
|
1058
|
+
?, ?, ?, ?,
|
|
1059
|
+
datetime(?), datetime(?), ?, ?, 'sdk', 'cron'
|
|
1060
|
+
)`).run(DELEGATED_SYNC_PROCESS_KEY, args.invokeResult?.modelId ?? null, cost.costUsd, cost.tokensInput, cost.tokensOutput, cost.cacheCreationTokens, cost.cacheReadTokens, cost.durationMs || Math.max(0, args.completedAt.getTime() - args.startedAt.getTime()), cost.numTurns, args.result, JSON.stringify(detail), args.startedAt.toISOString(), args.completedAt.toISOString(), args.error, args.invokeResult?.backendId ?? null);
|
|
1061
|
+
}
|
|
1062
|
+
catch (err) {
|
|
1063
|
+
logger.error({ err }, "failed to record delegated_sync action");
|
|
1064
|
+
}
|
|
1065
|
+
}
|
|
1066
|
+
export const __delegatedSyncWorkerTestExports = {
|
|
1067
|
+
calendarListBareTool,
|
|
1068
|
+
namespacedTool,
|
|
1069
|
+
extractItemsByKeys,
|
|
1070
|
+
gmailSearchToolCall,
|
|
1071
|
+
notionSearchToolCall,
|
|
1072
|
+
isoDate,
|
|
1073
|
+
collectUnrecognizedIntervalKeys,
|
|
1074
|
+
sqliteDatetimeToIso,
|
|
1075
|
+
isCadenceEnabled,
|
|
1076
|
+
TTL_CONTRACT_RATIO,
|
|
1077
|
+
CALENDAR_ITEM_KEYS,
|
|
1078
|
+
GMAIL_ITEM_KEYS,
|
|
1079
|
+
NOTION_ITEM_KEYS,
|
|
1080
|
+
CALENDAR_IMMINENT_CADENCE,
|
|
1081
|
+
CALENDAR_24H_CADENCE,
|
|
1082
|
+
GMAIL_INBOX_7D_CADENCE,
|
|
1083
|
+
NOTION_RECENTLY_UPDATED_CADENCE,
|
|
1084
|
+
DEFAULT_ACTIVE_START_HOUR,
|
|
1085
|
+
DEFAULT_ACTIVE_END_HOUR,
|
|
1086
|
+
};
|
|
1087
|
+
//# sourceMappingURL=delegated-sync-worker.js.map
|