@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,1148 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
import { existsSync, readdirSync } from "node:fs";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { AGENT_ROLE_DESCRIPTOR, APP_NAME, formatAgentOutboundLabel, formatSqliteDatetime, isRoutineEvent, isMessageEvent, isScheduledDmEvent, isScheduledEvent, localDateStr, normalizeAgentDisplayName, nowInTimezone, getAgentDayBoundsUtc, getAgentDayDateStr, parseSqliteUtcMs, } from "@aitne/shared";
|
|
5
|
+
import { getContextDir } from "../config.js";
|
|
6
|
+
import { getDegradedMode } from "../db/runtime-state.js";
|
|
7
|
+
import { readIntegrations } from "../db/integrations-store.js";
|
|
8
|
+
import { CONTEXT_RELATIVE_PATHS } from "./context-paths.js";
|
|
9
|
+
import { OWNER_DM_SCOPE, OWNER_SCOPE_KEY, DASHBOARD_CHAT_SCOPE, DASHBOARD_SCOPE_KEY, getConversationScope, } from "../messaging/constants.js";
|
|
10
|
+
import { getProactiveForwardType, isProactiveForwardMetadata, metadataDispatchIds, parseMessageMetadata, } from "./channel-timeline.js";
|
|
11
|
+
import { createLogger } from "../logging.js";
|
|
12
|
+
import { truncateRoadmap } from "./roadmap-truncate.js";
|
|
13
|
+
import { isIntegrationDelegated } from "./integration-lifecycle.js";
|
|
14
|
+
const logger = createLogger("context-builder");
|
|
15
|
+
const YESTERDAY_AGENT_ACTION_LIMIT = 40;
|
|
16
|
+
const YESTERDAY_MESSAGE_LIMIT = 60;
|
|
17
|
+
const YESTERDAY_DM_LOG_LIMIT = 20;
|
|
18
|
+
export class ContextBuilder {
|
|
19
|
+
config;
|
|
20
|
+
db;
|
|
21
|
+
services;
|
|
22
|
+
constructor(config, db, services) {
|
|
23
|
+
this.config = config;
|
|
24
|
+
this.db = db;
|
|
25
|
+
this.services = services;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Resolve the readable primary-vault location for prompt construction.
|
|
29
|
+
*
|
|
30
|
+
* During degraded mode we intentionally return `null` instead of the
|
|
31
|
+
* fallback `<dataDir>/context`: reactive sessions may still run so the
|
|
32
|
+
* user can fix the vault, but they must not see stale context data from
|
|
33
|
+
* a legacy location.
|
|
34
|
+
*/
|
|
35
|
+
get readableContextDir() {
|
|
36
|
+
if (getDegradedMode(this.db)) {
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
return getContextDir(this.config);
|
|
40
|
+
}
|
|
41
|
+
async build(event) {
|
|
42
|
+
const sections = [];
|
|
43
|
+
const degradedState = getDegradedMode(this.db);
|
|
44
|
+
if (degradedState) {
|
|
45
|
+
sections.push([
|
|
46
|
+
"<management_mode_degraded>",
|
|
47
|
+
`- reason: ${degradedState.reason}`,
|
|
48
|
+
`- path: ${degradedState.path ?? "(unset)"}`,
|
|
49
|
+
`- since: ${degradedState.since}`,
|
|
50
|
+
"Primary vault reads are disabled while Management Mode is degraded.",
|
|
51
|
+
"Context files were intentionally not loaded to avoid serving stale fallback data.",
|
|
52
|
+
"</management_mode_degraded>",
|
|
53
|
+
].join("\n"));
|
|
54
|
+
}
|
|
55
|
+
// Always injected (all sessions) — B-007 §5.1 canonical paths.
|
|
56
|
+
const [userMd, rulesMd, todayMd] = await Promise.all([
|
|
57
|
+
this.readFile(CONTEXT_RELATIVE_PATHS.user.profile),
|
|
58
|
+
this.readFile(CONTEXT_RELATIVE_PATHS.rules.management),
|
|
59
|
+
this.readFile(CONTEXT_RELATIVE_PATHS.today),
|
|
60
|
+
]);
|
|
61
|
+
// Capture the read time as the authoritative "as of when did this
|
|
62
|
+
// conversation see today.md" anchor. Read-time (not mtime) is what the
|
|
63
|
+
// freshness contract needs: mtime advances every quiet append from
|
|
64
|
+
// background routines, but the value that matters here is when THIS
|
|
65
|
+
// session's snapshot was taken. See STAGE-C-DM-FRESHNESS-PLAN §Task 1.
|
|
66
|
+
const todayReadAt = todayMd ? new Date().toISOString() : null;
|
|
67
|
+
if (userMd)
|
|
68
|
+
sections.push(`<user>\n${userMd}\n</user>`);
|
|
69
|
+
if (rulesMd)
|
|
70
|
+
sections.push(`<management_rules>\n${rulesMd}\n</management_rules>`);
|
|
71
|
+
if (todayMd) {
|
|
72
|
+
// Truncate ## Agent Log to last N entries for non-evening sessions.
|
|
73
|
+
// Evening review needs the full log to assess the day.
|
|
74
|
+
const skipTruncation = isRoutineEvent(event) && event.routine === "evening_review";
|
|
75
|
+
const injected = skipTruncation
|
|
76
|
+
? todayMd
|
|
77
|
+
: truncateAgentLog(todayMd, 10);
|
|
78
|
+
sections.push(`<today snapshot_at="${todayReadAt}">\n${injected}\n</today>`);
|
|
79
|
+
}
|
|
80
|
+
const agentDisplayName = normalizeAgentDisplayName(typeof event.data.agentDisplayName === "string"
|
|
81
|
+
? event.data.agentDisplayName
|
|
82
|
+
: this.config.agentDisplayName);
|
|
83
|
+
// Three-axis identity (see packages/shared/src/branding.ts):
|
|
84
|
+
// product = the software running this session (rebrand target)
|
|
85
|
+
// role = LLM role anchor (kept stable across rebrands)
|
|
86
|
+
// display_name = how the agent signs messages to the operator
|
|
87
|
+
// Naming each axis explicitly prevents the LLM from conflating brand
|
|
88
|
+
// with role when the operator renames their instance.
|
|
89
|
+
sections.push([
|
|
90
|
+
"<agent_identity>",
|
|
91
|
+
`- product: ${APP_NAME}`,
|
|
92
|
+
`- role: ${AGENT_ROLE_DESCRIPTOR} (acting on behalf of the operator)`,
|
|
93
|
+
`- display_name: ${agentDisplayName}`,
|
|
94
|
+
`- whatsapp_label: ${formatAgentOutboundLabel(agentDisplayName)}`,
|
|
95
|
+
"</agent_identity>",
|
|
96
|
+
].join("\n"));
|
|
97
|
+
const now = new Date();
|
|
98
|
+
const tz = this.config.timezone || undefined;
|
|
99
|
+
const local = nowInTimezone(tz, now);
|
|
100
|
+
const localTimeStr = `${local.year}-${String(local.month).padStart(2, "0")}-${String(local.day).padStart(2, "0")} ${String(local.hours).padStart(2, "0")}:${String(local.minutes).padStart(2, "0")}`;
|
|
101
|
+
const tzLabel = this.config.timezone || "system";
|
|
102
|
+
sections.push(`<current_time utc="${now.toISOString()}" local="${localTimeStr}" timezone="${tzLabel}" />`);
|
|
103
|
+
// Agent-day date — explicit, unambiguous date for today.md line 1 and
|
|
104
|
+
// every "today" reference in skills. The agent-day starts at
|
|
105
|
+
// `dayBoundaryHour` (default 04:00) in `tzLabel`, so before that boundary
|
|
106
|
+
// the agent-day date is the previous calendar date. Example: at 02:00
|
|
107
|
+
// local on 2026-04-28 with boundary_hour=4, agent_day_date is "2026-04-27".
|
|
108
|
+
// Skills MUST use this attribute (not <current_time>) for any date stamp
|
|
109
|
+
// written to today.md or roadmap.md so the daemon's
|
|
110
|
+
// hasCurrentAgentDayTodayMd / rotateDayFiles checks line up with what
|
|
111
|
+
// the agent writes.
|
|
112
|
+
const dayBoundaryHour = this.config.dayBoundaryHour ?? 4;
|
|
113
|
+
const agentDayDateStr = getAgentDayDateStr(tz, dayBoundaryHour, now);
|
|
114
|
+
const agentDayWeekday = new Date(`${agentDayDateStr}T12:00:00Z`).toLocaleDateString("en-US", {
|
|
115
|
+
weekday: "long",
|
|
116
|
+
timeZone: "UTC",
|
|
117
|
+
});
|
|
118
|
+
sections.push(`<current_agent_day date="${agentDayDateStr}" weekday="${agentDayWeekday}" boundary_hour="${dayBoundaryHour}" />`);
|
|
119
|
+
sections.push(`<event_correlation_id>${event.correlationId}</event_correlation_id>`);
|
|
120
|
+
if (typeof event.data?.todayWriteLockId === "string") {
|
|
121
|
+
sections.push(`<today_write_lock_id>${event.data.todayWriteLockId}</today_write_lock_id>`);
|
|
122
|
+
}
|
|
123
|
+
if (typeof event.data?.roadmapWriteLockId === "string") {
|
|
124
|
+
sections.push(`<roadmap_write_lock_id>${event.data.roadmapWriteLockId}</roadmap_write_lock_id>`);
|
|
125
|
+
}
|
|
126
|
+
// cost-reduction-structural §B — Stage 3 / Stage 2-triage events
|
|
127
|
+
// arrive with a pre-rendered `<gate_decision>` block from the
|
|
128
|
+
// dispatcher. Inject verbatim so the routine can branch on the
|
|
129
|
+
// gate's reason without re-deriving signals.
|
|
130
|
+
if (event.data?.gateDecision &&
|
|
131
|
+
typeof event.data.gateDecision === "object" &&
|
|
132
|
+
typeof event.data.gateDecision.block === "string") {
|
|
133
|
+
sections.push(event.data.gateDecision.block);
|
|
134
|
+
}
|
|
135
|
+
// The <obsidian_vault_path> prompt fragment always points at the EXTERNAL
|
|
136
|
+
// Obsidian vault (CLI skill target), never the agent's primary vault.
|
|
137
|
+
// Kept verbatim for skill compatibility even after the field rename.
|
|
138
|
+
if (this.config.externalObsidianVaultPath) {
|
|
139
|
+
sections.push(`<obsidian_vault_path>${this.config.externalObsidianVaultPath}</obsidian_vault_path>`);
|
|
140
|
+
}
|
|
141
|
+
// B-007 §3 P6 / §5.9 — expose the two setup-wizard answers to every
|
|
142
|
+
// task-flow so prompts can branch on them without re-reading the DB.
|
|
143
|
+
// `primary_language` governs user-editable prose language; `vault_mode`
|
|
144
|
+
// toggles `[[wikilink]]` emission in synthesized content like daily/*.md.
|
|
145
|
+
const primaryLanguage = this.config.primaryLanguage ?? "en";
|
|
146
|
+
const vaultMode = this.config.vaultMode ?? "plain";
|
|
147
|
+
sections.push(`<settings primary_language="${primaryLanguage}" vault_mode="${vaultMode}" />`);
|
|
148
|
+
// Integration modes — expose the current `direct | delegated | disabled`
|
|
149
|
+
// state of every registered integration so task-flows can branch without
|
|
150
|
+
// re-reading the DB or relying on "is this MCP tool in my allowed-tools
|
|
151
|
+
// list" self-introspection, which is unreliable across backends. For
|
|
152
|
+
// delegated keys, also emit `<key>_delegated_to="<backend>"` so the
|
|
153
|
+
// hourly_check delegated variants can pick the cross-backend proxy path
|
|
154
|
+
// vs the same-backend native MCP path per integration without reading
|
|
155
|
+
// `~/.personal-agent/integrations.md` themselves
|
|
156
|
+
// (DELEGATED-MODE-V2-DESIGN.md §5.4).
|
|
157
|
+
const integrationsSnapshot = readIntegrations(this.db);
|
|
158
|
+
const integrationAttrs = Object.entries(integrationsSnapshot)
|
|
159
|
+
.flatMap(([key, state]) => {
|
|
160
|
+
const attrs = [`${key}="${state.mode}"`];
|
|
161
|
+
if (state.mode === "delegated" && state.delegatedBackend) {
|
|
162
|
+
attrs.push(`${key}_delegated_to="${state.delegatedBackend}"`);
|
|
163
|
+
}
|
|
164
|
+
return attrs;
|
|
165
|
+
})
|
|
166
|
+
.join(" ");
|
|
167
|
+
sections.push(`<integration_modes ${integrationAttrs} />`);
|
|
168
|
+
// Routine events: additional context
|
|
169
|
+
if (isRoutineEvent(event)) {
|
|
170
|
+
// Silent-by-default protocol: applies uniformly to every routine
|
|
171
|
+
// event (morning / evening / hourly / weekly / monthly / roadmap /
|
|
172
|
+
// any future routine). The daemon does NOT forward the agent's
|
|
173
|
+
// final text as a user notification for routines; POST /api/notify
|
|
174
|
+
// is the only user-visible channel. Each routine prompt owns its
|
|
175
|
+
// own go/no-go decision for whether to make that call. Injected
|
|
176
|
+
// here instead of duplicated per-prompt so new routines inherit
|
|
177
|
+
// the rule automatically.
|
|
178
|
+
sections.push([
|
|
179
|
+
"<routine_protocol>",
|
|
180
|
+
"This is an autonomous background run. Your final text response",
|
|
181
|
+
"is an internal agent log — the daemon does not forward it to",
|
|
182
|
+
"the user. POST /api/notify is the only user-visible channel for",
|
|
183
|
+
"routine events, so if you don't call it, the user sees nothing.",
|
|
184
|
+
"Each routine prompt owns the go/no-go decision for whether to",
|
|
185
|
+
"call /api/notify.",
|
|
186
|
+
"</routine_protocol>",
|
|
187
|
+
].join("\n"));
|
|
188
|
+
if (event.routine === "morning_routine") {
|
|
189
|
+
// yesterday.md is created by Dispatcher.rotateDayFiles() before this runs.
|
|
190
|
+
// It contains the previous day's today.md (with ## Handoff section).
|
|
191
|
+
const [yesterdayMd, roadmapMd, activeProjects, yesterdaySqlite] = await Promise.all([
|
|
192
|
+
this.readFile("yesterday.md"),
|
|
193
|
+
this.readFile("roadmap.md"),
|
|
194
|
+
this.buildActiveProjectsSection(),
|
|
195
|
+
this.buildYesterdaySqliteContext(),
|
|
196
|
+
]);
|
|
197
|
+
if (yesterdayMd)
|
|
198
|
+
sections.push(`<yesterday>\n${yesterdayMd}\n</yesterday>`);
|
|
199
|
+
sections.push(`<yesterday_agent_actions>\n${yesterdaySqlite.agentActions}\n</yesterday_agent_actions>`);
|
|
200
|
+
sections.push(`<yesterday_messages>\n${yesterdaySqlite.messages}\n</yesterday_messages>`);
|
|
201
|
+
sections.push(`<yesterday_dm_conversation_log>\n${yesterdaySqlite.dmConversationLog}\n</yesterday_dm_conversation_log>`);
|
|
202
|
+
if (roadmapMd)
|
|
203
|
+
sections.push(`<roadmap>\n${truncateRoadmap(roadmapMd, { timezone: this.config.timezone || undefined })}\n</roadmap>`);
|
|
204
|
+
if (activeProjects)
|
|
205
|
+
sections.push(`<active_projects>\n${activeProjects}\n</active_projects>`);
|
|
206
|
+
// Fetch 7-day calendar events for today.md / roadmap.md updates.
|
|
207
|
+
// Delegated mode emits an MCP-fetch directive inside the same block.
|
|
208
|
+
sections.push(await this.buildCalendarBlock(7, "calendar_events_7d"));
|
|
209
|
+
}
|
|
210
|
+
else if (event.routine === "roadmap_refresh") {
|
|
211
|
+
const [roadmapMd, activeProjects] = await Promise.all([
|
|
212
|
+
this.readFile("roadmap.md"),
|
|
213
|
+
this.buildActiveProjectsSection(),
|
|
214
|
+
]);
|
|
215
|
+
// Roadmap refresh must see the full file — the session
|
|
216
|
+
// regenerates `## Agent Action Plan` wholesale, so any entry the
|
|
217
|
+
// truncator dropped would be erased on PUT. Do NOT truncate here.
|
|
218
|
+
if (roadmapMd)
|
|
219
|
+
sections.push(`<roadmap>\n${roadmapMd}\n</roadmap>`);
|
|
220
|
+
if (activeProjects)
|
|
221
|
+
sections.push(`<active_projects>\n${activeProjects}\n</active_projects>`);
|
|
222
|
+
// 7-day DM rolling-summary window. RFC-B Phase 1 wants the
|
|
223
|
+
// refresh to incorporate long-horizon intent captured in recent
|
|
224
|
+
// DMs; the rolling summaries in dm_conversation_log are the
|
|
225
|
+
// cheapest source (already AI-condensed by the dispatcher).
|
|
226
|
+
const dmLog7d = this.buildRecentDmConversationLog(7);
|
|
227
|
+
sections.push(`<recent_dm_conversation_log days="7">\n${dmLog7d}\n</recent_dm_conversation_log>`);
|
|
228
|
+
// Signal calendar availability — agent fetches 90-day events itself.
|
|
229
|
+
// The delegated variant of this task flow bypasses `<calendar_status>`
|
|
230
|
+
// and goes straight to the backend connector's list_events / search
|
|
231
|
+
// tool; the delegated branch below keeps the hint informational so
|
|
232
|
+
// the prompt stays legible when the variant isn't loaded for some
|
|
233
|
+
// reason (e.g. hot-switch in progress).
|
|
234
|
+
if (isIntegrationDelegated(this.db, "google_calendar")) {
|
|
235
|
+
sections.push(`<calendar_status>Google Calendar is delegated. Use the backend connector's list_events / search tool for the 90-day window — direct /api/calendar/* returns 410.</calendar_status>`);
|
|
236
|
+
}
|
|
237
|
+
else if (this.services.calendar?.available) {
|
|
238
|
+
sections.push(`<calendar_status>Calendar service available. Use GET /api/calendar/events?date=today&days=90 to fetch events.</calendar_status>`);
|
|
239
|
+
}
|
|
240
|
+
else {
|
|
241
|
+
sections.push(`<calendar_status>Calendar service not available. Skip calendar-based sections — preserve existing roadmap content.</calendar_status>`);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
else if (event.routine === "evening_review") {
|
|
245
|
+
const [roadmapMd, activeProjects] = await Promise.all([
|
|
246
|
+
this.readFile("roadmap.md"),
|
|
247
|
+
this.buildActiveProjectsSection(),
|
|
248
|
+
]);
|
|
249
|
+
if (roadmapMd)
|
|
250
|
+
sections.push(`<roadmap>\n${truncateRoadmap(roadmapMd, { timezone: this.config.timezone || undefined })}\n</roadmap>`);
|
|
251
|
+
if (activeProjects)
|
|
252
|
+
sections.push(`<active_projects>\n${activeProjects}\n</active_projects>`);
|
|
253
|
+
// 3-day calendar look-ahead for evening review. Delegated mode emits
|
|
254
|
+
// an MCP-fetch directive inside the same block so the flow works
|
|
255
|
+
// without a routine-specific delegated variant.
|
|
256
|
+
sections.push(await this.buildCalendarBlock(3, "calendar_events_3d"));
|
|
257
|
+
}
|
|
258
|
+
else if (event.routine === "user_profile_sweep") {
|
|
259
|
+
// Both phases read the same current-agent-day bounds at session
|
|
260
|
+
// start — the phase flag is preserved for journaling only and
|
|
261
|
+
// does not branch the window. The guard below exists purely as
|
|
262
|
+
// a misconfig fuse: if the event arrives without a valid phase
|
|
263
|
+
// (e.g. a manual trigger that didn't thread `data.phase`), skip
|
|
264
|
+
// the injection so the task-flow's Step 1 abort path (USER-PROFILE-
|
|
265
|
+
// CAPTURE-PLAN.md §2.3 Step 1 / §2.4) fires as documented rather
|
|
266
|
+
// than silently running the sweep with an unlabeled log line.
|
|
267
|
+
const phase = event.data?.phase;
|
|
268
|
+
if (phase === "morning" || phase === "evening") {
|
|
269
|
+
const agentDayDm = this.buildAgentDayDmContext();
|
|
270
|
+
sections.push(`<agent_day_messages>\n${agentDayDm.messages}\n</agent_day_messages>`);
|
|
271
|
+
sections.push(`<agent_day_dm_conversation_log>\n${agentDayDm.dmConversationLog}\n</agent_day_dm_conversation_log>`);
|
|
272
|
+
}
|
|
273
|
+
else {
|
|
274
|
+
logger.warn({ phase, correlationId: event.correlationId }, "user_profile_sweep event missing valid phase — skipping window injection");
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
else if (event.routine === "today_refresh") {
|
|
278
|
+
// Dashboard-triggered manual refresh of today.md's User Schedule
|
|
279
|
+
// section. The task flow fetches calendar events itself (so the
|
|
280
|
+
// flow body works uniformly across direct and delegated modes);
|
|
281
|
+
// this status hint is informational and mainly helps the direct
|
|
282
|
+
// path distinguish configured-but-unavailable from delegated.
|
|
283
|
+
if (isIntegrationDelegated(this.db, "google_calendar")) {
|
|
284
|
+
sections.push(`<calendar_status>Google Calendar is delegated. Fetch today's events via the backend connector's list_events / search tool — direct /api/calendar/* returns 410.</calendar_status>`);
|
|
285
|
+
}
|
|
286
|
+
else if (this.services.calendar?.available) {
|
|
287
|
+
sections.push(`<calendar_status>Calendar service available. Use GET /api/calendar/events?date=today&days=1 to fetch today's events.</calendar_status>`);
|
|
288
|
+
}
|
|
289
|
+
else {
|
|
290
|
+
sections.push(`<calendar_status>Calendar service not available. If direct /api/calendar returns 503 or 410, log and skip the User Schedule rewrite.</calendar_status>`);
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
else if (event.routine === "weekly_review" ||
|
|
294
|
+
event.routine === "monthly_review") {
|
|
295
|
+
const [roadmapMd, activeProjects] = await Promise.all([
|
|
296
|
+
this.readFile("roadmap.md"),
|
|
297
|
+
this.buildActiveProjectsSection(),
|
|
298
|
+
]);
|
|
299
|
+
if (roadmapMd)
|
|
300
|
+
sections.push(`<roadmap>\n${truncateRoadmap(roadmapMd, { timezone: this.config.timezone || undefined })}\n</roadmap>`);
|
|
301
|
+
if (activeProjects) {
|
|
302
|
+
sections.push(`<active_projects>\n${activeProjects}\n</active_projects>`);
|
|
303
|
+
}
|
|
304
|
+
const lookaheadDays = event.routine === "monthly_review" ? 30 : 7;
|
|
305
|
+
sections.push(await this.buildCalendarBlock(lookaheadDays, `calendar_events_${lookaheadDays}d`));
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
// Agent task / DM-tone events: inject live calendar + origin
|
|
309
|
+
// metadata for informed execution. Both scheduled.task and
|
|
310
|
+
// scheduled.dm need this — without it, scheduled sessions would
|
|
311
|
+
// execute "blind" knowing only today.md (which may be stale) and
|
|
312
|
+
// the task description (which may be terse).
|
|
313
|
+
if (isScheduledEvent(event)) {
|
|
314
|
+
// 1-day live calendar — critical for temporal awareness (meetings,
|
|
315
|
+
// conflicts). Delegated mode emits an MCP-fetch directive inside the
|
|
316
|
+
// same block.
|
|
317
|
+
sections.push(await this.buildCalendarBlock(1, "calendar_today"));
|
|
318
|
+
// Task origin metadata — tells the agent WHO scheduled this
|
|
319
|
+
sections.push(`<task_origin source="${event.source}" schedule_id="${event.scheduleId ?? "none"}" />`);
|
|
320
|
+
sections.push(`<task_context>\n${JSON.stringify(event.taskContext ?? {}, null, 2)}\n</task_context>`);
|
|
321
|
+
// Dashboard regeneration tasks additionally get roadmap + projects
|
|
322
|
+
// (Calendar data is already embedded in the task description by the API endpoint)
|
|
323
|
+
if (event.source === "dashboard_regenerate") {
|
|
324
|
+
const [roadmapMd, activeProjects] = await Promise.all([
|
|
325
|
+
this.readFile("roadmap.md"),
|
|
326
|
+
this.buildActiveProjectsSection(),
|
|
327
|
+
]);
|
|
328
|
+
if (roadmapMd)
|
|
329
|
+
sections.push(`<roadmap>\n${roadmapMd}\n</roadmap>`);
|
|
330
|
+
if (activeProjects)
|
|
331
|
+
sections.push(`<active_projects>\n${activeProjects}\n</active_projects>`);
|
|
332
|
+
}
|
|
333
|
+
// SCHEDULED-DM-IMPLEMENTATION-PLAN §3.3 / §5.7 — DM-tone
|
|
334
|
+
// sessions additionally see the user's recent DM activity and
|
|
335
|
+
// the rolling owner-DM history so the LLM can detect the
|
|
336
|
+
// conversation state (asleep vs. active vs. very-recent) and
|
|
337
|
+
// pick Variant A (greeting) vs. Variant B (mid-conversation
|
|
338
|
+
// weave) per the scheduled.dm.md task-flow.
|
|
339
|
+
if (isScheduledDmEvent(event)) {
|
|
340
|
+
const recentDms = this.buildRecentDmActivityBlock(60);
|
|
341
|
+
if (recentDms) {
|
|
342
|
+
sections.push(`<recent_dm_messages window="60min">\n${recentDms}\n</recent_dm_messages>`);
|
|
343
|
+
}
|
|
344
|
+
const dmHistory = this.buildOwnerDmConversationHistory(20);
|
|
345
|
+
if (dmHistory) {
|
|
346
|
+
sections.push(`<recent_dm_conversation>\n${dmHistory}\n</recent_dm_conversation>`);
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
// Message events: include conversation history from the active session.
|
|
351
|
+
// Cross-session continuity (expired/closed sessions) is handled separately
|
|
352
|
+
// by the dispatcher's buildCrossSessionConversationHistory(), which injects
|
|
353
|
+
// history via the backend's conversationHistory parameter. Doing it here
|
|
354
|
+
// as well would duplicate the data under two different XML tags.
|
|
355
|
+
if (isMessageEvent(event)) {
|
|
356
|
+
const history = this.getConversationHistory(event);
|
|
357
|
+
if (history) {
|
|
358
|
+
sections.push(`<conversation_history>\n${history}\n</conversation_history>`);
|
|
359
|
+
}
|
|
360
|
+
const otherSurface = this.buildRecentOtherSurfaceBlock(event);
|
|
361
|
+
if (otherSurface) {
|
|
362
|
+
sections.push(`<recent_other_surface>\n${otherSurface}\n</recent_other_surface>`);
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
return sections.join("\n\n");
|
|
366
|
+
}
|
|
367
|
+
/**
|
|
368
|
+
* Compute the calendar lookahead window anchored at the user-timezone
|
|
369
|
+
* midnight boundary. Shared by direct-mode fetches and the delegated-mode
|
|
370
|
+
* MCP-fetch directive so both paths describe exactly the same range.
|
|
371
|
+
*/
|
|
372
|
+
computeCalendarWindow(days) {
|
|
373
|
+
const tz = this.config.timezone || undefined;
|
|
374
|
+
const dayBounds = getAgentDayBoundsUtc(tz, 0);
|
|
375
|
+
const startMs = parseSqliteUtcMs(dayBounds.start);
|
|
376
|
+
return {
|
|
377
|
+
timeMin: new Date(startMs).toISOString(),
|
|
378
|
+
timeMax: new Date(startMs + days * 24 * 60 * 60 * 1000).toISOString(),
|
|
379
|
+
};
|
|
380
|
+
}
|
|
381
|
+
/**
|
|
382
|
+
* Build a `<calendar_events_…>` context block, honouring Google Calendar
|
|
383
|
+
* integration mode:
|
|
384
|
+
*
|
|
385
|
+
* - **direct + service available** → embed the formatted event list (prior
|
|
386
|
+
* behaviour).
|
|
387
|
+
* - **delegated** → the daemon has no local CalendarService to call. Emit
|
|
388
|
+
* a structured directive telling the task-flow agent to fetch the same
|
|
389
|
+
* window itself via its backend's Google Calendar MCP tool and treat the
|
|
390
|
+
* response as the contents of this block.
|
|
391
|
+
* - **direct but service broken / disabled** → emit the legacy
|
|
392
|
+
* `<calendar_status>` unavailable line so the flow degrades gracefully.
|
|
393
|
+
*
|
|
394
|
+
* All callers funnel through this method so the three surfaces
|
|
395
|
+
* (morning / evening / weekly+monthly and the agent-task path) stay in
|
|
396
|
+
* lock-step when delegated-mode handling changes.
|
|
397
|
+
*/
|
|
398
|
+
async buildCalendarBlock(days, blockName) {
|
|
399
|
+
const integrations = readIntegrations(this.db);
|
|
400
|
+
const calendarMode = integrations.google_calendar?.mode ?? "disabled";
|
|
401
|
+
// Delegated mode wins over a live `services.calendar` — if the user
|
|
402
|
+
// set the integration to delegated, respect that even if Google
|
|
403
|
+
// credentials are still resident. Using the direct path here would
|
|
404
|
+
// silently violate the mode invariant and leave the MCP tool surface
|
|
405
|
+
// (exposed to the session) out of sync with the data surface.
|
|
406
|
+
if (calendarMode === "delegated") {
|
|
407
|
+
const { timeMin, timeMax } = this.computeCalendarWindow(days);
|
|
408
|
+
return [
|
|
409
|
+
`<${blockName} mode="delegated" timeMin="${timeMin}" timeMax="${timeMax}" days="${days}">`,
|
|
410
|
+
"Calendar is delegated — see `<integration_modes>`. Fetch this",
|
|
411
|
+
"window yourself, then treat the returned events as the contents",
|
|
412
|
+
"of this block for the rest of the task flow. Pick the path by",
|
|
413
|
+
"your session backend vs `<integration_modes>.google_calendar_delegated_to`:",
|
|
414
|
+
"",
|
|
415
|
+
" Same-backend (delegated_to == your session backend) — use your",
|
|
416
|
+
" native Google Calendar MCP tool:",
|
|
417
|
+
` Claude: mcp__claude_ai_Google_Calendar__list_events(calendarId="primary", timeMin="${timeMin}", timeMax="${timeMax}", maxResults=50)`,
|
|
418
|
+
` Codex: mcp__codex_apps__google_calendar._search(timeMin="${timeMin}", timeMax="${timeMax}")`,
|
|
419
|
+
` Gemini: mcp_google-workspace_calendar.listEvents(timeMin="${timeMin}", timeMax="${timeMax}", maxResults=50)`,
|
|
420
|
+
"",
|
|
421
|
+
" Cross-backend (delegated_to != your session backend) — call the",
|
|
422
|
+
" daemon's task-mode endpoint with a natural-language `task` and",
|
|
423
|
+
" `outputSchema`, so the configured account is used (your own",
|
|
424
|
+
" backend's Google MCP would query the wrong account):",
|
|
425
|
+
" curl -s -X POST http://localhost:8321/api/integrations/google_calendar/exec \\",
|
|
426
|
+
" -H 'Content-Type: application/json' \\",
|
|
427
|
+
` -d '{"task":"List every event on my primary calendar between ${timeMin} and ${timeMax}. Return id, title, start, end, attendees.","outputSchema":{"type":"object","required":["events"],"properties":{"events":{"type":"array","items":{"type":"object","required":["id","title","start","end"]}}}},"maxToolCalls":3,"cacheable":true}'`,
|
|
428
|
+
" Do NOT call `/api/calendar/events` (returns 410 in delegated mode).",
|
|
429
|
+
"",
|
|
430
|
+
"If the call errors out, log one line to ## Agent Log and proceed",
|
|
431
|
+
"as if the window were empty. Do NOT emit `(calendar unavailable)`",
|
|
432
|
+
"as a user-visible marker — that string is reserved for the case",
|
|
433
|
+
"where the tool itself is missing (mode misconfigured).",
|
|
434
|
+
`</${blockName}>`,
|
|
435
|
+
].join("\n");
|
|
436
|
+
}
|
|
437
|
+
if (this.services.calendar) {
|
|
438
|
+
const section = await this.fetchCalendarEvents(days);
|
|
439
|
+
if (section !== null)
|
|
440
|
+
return `<${blockName}>\n${section}\n</${blockName}>`;
|
|
441
|
+
}
|
|
442
|
+
// Direct mode with no service (not configured / init failed) or disabled.
|
|
443
|
+
return `<calendar_status>Calendar service not available. Google Calendar is not configured or failed to initialize.</calendar_status>`;
|
|
444
|
+
}
|
|
445
|
+
/**
|
|
446
|
+
* Fetch calendar events for the next N days and format as markdown.
|
|
447
|
+
* Groups events by date with day-of-week and Today/Tomorrow labels.
|
|
448
|
+
* Returns null if CalendarService is not available.
|
|
449
|
+
*/
|
|
450
|
+
async fetchCalendarEvents(days) {
|
|
451
|
+
if (!this.services.calendar)
|
|
452
|
+
return null;
|
|
453
|
+
try {
|
|
454
|
+
const { timeMin, timeMax } = this.computeCalendarWindow(days);
|
|
455
|
+
const events = await this.services.calendar.listEvents(timeMin, timeMax);
|
|
456
|
+
if (events.length === 0) {
|
|
457
|
+
return `Calendar connected (Google Calendar). No events found in the next ${days} days.`;
|
|
458
|
+
}
|
|
459
|
+
return this.formatCalendarEvents(events, days);
|
|
460
|
+
}
|
|
461
|
+
catch (err) {
|
|
462
|
+
logger.warn({ err }, "Failed to fetch calendar events for context");
|
|
463
|
+
return null;
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
/** Format calendar events grouped by date */
|
|
467
|
+
formatCalendarEvents(events, days) {
|
|
468
|
+
const now = new Date();
|
|
469
|
+
const tz = this.config.timezone || undefined;
|
|
470
|
+
const todayStr = localDateStr(now, tz);
|
|
471
|
+
const tomorrow = new Date(now);
|
|
472
|
+
tomorrow.setDate(tomorrow.getDate() + 1);
|
|
473
|
+
const tomorrowStr = localDateStr(tomorrow, tz);
|
|
474
|
+
const dayNames = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
|
|
475
|
+
// Group events by local date in the configured timezone.
|
|
476
|
+
const byDate = new Map();
|
|
477
|
+
for (const event of events) {
|
|
478
|
+
if (!event.start)
|
|
479
|
+
continue;
|
|
480
|
+
const dateStr = event.start.length === 10
|
|
481
|
+
? event.start
|
|
482
|
+
: localDateStr(new Date(event.start), tz);
|
|
483
|
+
const group = byDate.get(dateStr) ?? [];
|
|
484
|
+
group.push(event);
|
|
485
|
+
byDate.set(dateStr, group);
|
|
486
|
+
}
|
|
487
|
+
const lines = [];
|
|
488
|
+
// Generate all dates in range
|
|
489
|
+
for (let i = 0; i < days; i++) {
|
|
490
|
+
const date = new Date(now);
|
|
491
|
+
date.setDate(date.getDate() + i);
|
|
492
|
+
const dateStr = localDateStr(date, tz);
|
|
493
|
+
const localInfo = nowInTimezone(tz, date);
|
|
494
|
+
const dayName = dayNames[localInfo.dayOfWeek];
|
|
495
|
+
let label = "";
|
|
496
|
+
if (dateStr === todayStr)
|
|
497
|
+
label = " — Today";
|
|
498
|
+
else if (dateStr === tomorrowStr)
|
|
499
|
+
label = " — Tomorrow";
|
|
500
|
+
lines.push(`## ${dateStr} (${dayName})${label}`);
|
|
501
|
+
const dayEvents = byDate.get(dateStr);
|
|
502
|
+
if (!dayEvents || dayEvents.length === 0) {
|
|
503
|
+
lines.push("- (no events)");
|
|
504
|
+
}
|
|
505
|
+
else {
|
|
506
|
+
for (const event of dayEvents) {
|
|
507
|
+
const timeRange = this.formatTimeRange(event);
|
|
508
|
+
const summary = event.summary ?? "Untitled";
|
|
509
|
+
const locationPart = event.location ? ` @ ${event.location}` : "";
|
|
510
|
+
lines.push(`- ${timeRange} ${summary}${locationPart}`);
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
lines.push("");
|
|
514
|
+
}
|
|
515
|
+
return lines.join("\n").trimEnd();
|
|
516
|
+
}
|
|
517
|
+
/** Format event time range as "HH:MM–HH:MM" or "All day" */
|
|
518
|
+
formatTimeRange(event) {
|
|
519
|
+
if (!event.start || !event.end)
|
|
520
|
+
return "All day";
|
|
521
|
+
// All-day events have date format (YYYY-MM-DD) without time component
|
|
522
|
+
if (event.start.length === 10)
|
|
523
|
+
return "All day";
|
|
524
|
+
const startDate = new Date(event.start);
|
|
525
|
+
const endDate = new Date(event.end);
|
|
526
|
+
const startTime = this.formatLocalTime(startDate);
|
|
527
|
+
const endTime = this.formatLocalTime(endDate);
|
|
528
|
+
return `${startTime}\u2013${endTime}`;
|
|
529
|
+
}
|
|
530
|
+
formatLocalTime(date) {
|
|
531
|
+
const local = nowInTimezone(this.config.timezone || undefined, date);
|
|
532
|
+
return `${String(local.hours).padStart(2, "0")}:${String(local.minutes).padStart(2, "0")}`;
|
|
533
|
+
}
|
|
534
|
+
/**
|
|
535
|
+
* SCHEDULED-DM-IMPLEMENTATION-PLAN §5.7 — return inbound owner-DM
|
|
536
|
+
* messages received in the last `windowMinutes` across BOTH
|
|
537
|
+
* owner-facing scopes (`owner_dm` for messaging-app DMs and
|
|
538
|
+
* `dashboard_chat` for the dashboard chat panel), formatted one per
|
|
539
|
+
* line oldest first. Returns null when there are no messages so the
|
|
540
|
+
* caller can omit the block entirely.
|
|
541
|
+
*
|
|
542
|
+
* The two-scope query mirrors §3.6's gate set: the briefing
|
|
543
|
+
* serializes behind both surfaces, so the LLM must see both
|
|
544
|
+
* surfaces when classifying conversation state. A single-scope read
|
|
545
|
+
* here would mis-classify state as `asleep` whenever the user is
|
|
546
|
+
* mid-conversation on the OTHER surface — exactly the
|
|
547
|
+
* voice-mismatch failure the design exists to fix.
|
|
548
|
+
*
|
|
549
|
+
* `docs_qa` is intentionally excluded — that surface is research
|
|
550
|
+
* lookups, not conversation; gating against it would freeze
|
|
551
|
+
* briefings during long doc-searches.
|
|
552
|
+
*/
|
|
553
|
+
buildRecentDmActivityBlock(windowMinutes) {
|
|
554
|
+
const sinceUtc = formatSqliteDatetime(new Date(Date.now() - windowMinutes * 60_000));
|
|
555
|
+
const rows = this.db
|
|
556
|
+
.prepare(`SELECT m.role, m.content, m.timestamp
|
|
557
|
+
FROM messages m
|
|
558
|
+
JOIN conversation_sessions s ON m.session_id = s.id
|
|
559
|
+
WHERE s.scope IN (?, ?) AND m.role = 'user' AND m.timestamp >= ?
|
|
560
|
+
ORDER BY m.timestamp ASC
|
|
561
|
+
LIMIT 30`)
|
|
562
|
+
.all(OWNER_DM_SCOPE, DASHBOARD_CHAT_SCOPE, sinceUtc);
|
|
563
|
+
if (rows.length === 0)
|
|
564
|
+
return null;
|
|
565
|
+
return rows
|
|
566
|
+
.map((r) => `[${r.timestamp}] ${truncateForBlock(r.content, 200)}`)
|
|
567
|
+
.join("\n");
|
|
568
|
+
}
|
|
569
|
+
/**
|
|
570
|
+
* SCHEDULED-DM-IMPLEMENTATION-PLAN §5.7 — return the last `limit`
|
|
571
|
+
* owner-facing messages across BOTH `owner_dm` and `dashboard_chat`
|
|
572
|
+
* scopes (interleaved by timestamp), formatted with role tags. Used
|
|
573
|
+
* by `<recent_dm_conversation>` for topic awareness in the bridge
|
|
574
|
+
* phrasing of Variant B briefings.
|
|
575
|
+
*
|
|
576
|
+
* Two-scope read — same reasoning as `buildRecentDmActivityBlock`:
|
|
577
|
+
* the briefing must reconstruct topic context from whichever surface
|
|
578
|
+
* the user has been using, not just the messaging-app one.
|
|
579
|
+
*/
|
|
580
|
+
buildOwnerDmConversationHistory(limit) {
|
|
581
|
+
const rows = this.db
|
|
582
|
+
.prepare(`SELECT m.role, m.content, m.timestamp, m.metadata
|
|
583
|
+
FROM messages m
|
|
584
|
+
JOIN conversation_sessions s ON m.session_id = s.id
|
|
585
|
+
WHERE (s.scope = ? AND s.scope_key = ?)
|
|
586
|
+
OR (s.scope = ? AND s.scope_key = ?)
|
|
587
|
+
ORDER BY m.timestamp DESC, m.id DESC
|
|
588
|
+
LIMIT ?`)
|
|
589
|
+
.all(OWNER_DM_SCOPE, OWNER_SCOPE_KEY, DASHBOARD_CHAT_SCOPE, DASHBOARD_SCOPE_KEY, limit);
|
|
590
|
+
if (rows.length === 0)
|
|
591
|
+
return null;
|
|
592
|
+
return rows
|
|
593
|
+
.reverse()
|
|
594
|
+
.map((r) => {
|
|
595
|
+
const forwardSuffix = r.role === "assistant"
|
|
596
|
+
&& isProactiveForwardMetadata(parseMessageMetadata(r.metadata))
|
|
597
|
+
? " (forwarded from autonomous run)"
|
|
598
|
+
: "";
|
|
599
|
+
return `[${r.timestamp}] [${r.role}]${forwardSuffix}: ${truncateForBlock(r.content, 400)}`;
|
|
600
|
+
})
|
|
601
|
+
.join("\n");
|
|
602
|
+
}
|
|
603
|
+
getConversationHistory(event) {
|
|
604
|
+
const maxMessages = this.config.historyInjectionMaxMessages ?? 50;
|
|
605
|
+
let rows;
|
|
606
|
+
if (event.isDm) {
|
|
607
|
+
const { scope, scopeKey } = getConversationScope({
|
|
608
|
+
platform: event.platform,
|
|
609
|
+
channel: event.channel,
|
|
610
|
+
threadId: event.threadId,
|
|
611
|
+
isDm: true,
|
|
612
|
+
// Without `intent`, a docs_qa event would query under
|
|
613
|
+
// `dashboard_chat` and inject chat history into the QA prompt
|
|
614
|
+
// (or miss its own QA history). Thread it through so each
|
|
615
|
+
// dashboard scope retrieves only its own conversation.
|
|
616
|
+
intent: event.intent,
|
|
617
|
+
});
|
|
618
|
+
// DM: load the active conversation for the matching DM surface.
|
|
619
|
+
rows = this.db
|
|
620
|
+
.prepare(`SELECT
|
|
621
|
+
m.session_id,
|
|
622
|
+
m.role,
|
|
623
|
+
m.content,
|
|
624
|
+
m.platform,
|
|
625
|
+
m.timestamp,
|
|
626
|
+
m.metadata,
|
|
627
|
+
m.backend,
|
|
628
|
+
m.model_id,
|
|
629
|
+
s.backend_session_id
|
|
630
|
+
FROM messages m
|
|
631
|
+
JOIN conversation_sessions s ON m.session_id = s.id
|
|
632
|
+
WHERE s.scope = ? AND s.scope_key = ? AND s.status = 'active'
|
|
633
|
+
ORDER BY m.timestamp DESC, m.id DESC LIMIT ?`)
|
|
634
|
+
.all(scope, scopeKey, maxMessages);
|
|
635
|
+
}
|
|
636
|
+
else {
|
|
637
|
+
// Non-DM: query by (platform, channel, thread).
|
|
638
|
+
// Hard-cap at 20 — threads are short-lived and higher limits risk
|
|
639
|
+
// injecting stale context from unrelated earlier threads.
|
|
640
|
+
const threadLimit = Math.min(maxMessages, 20);
|
|
641
|
+
rows = this.db
|
|
642
|
+
.prepare(`SELECT
|
|
643
|
+
m.session_id,
|
|
644
|
+
m.role,
|
|
645
|
+
m.content,
|
|
646
|
+
m.platform,
|
|
647
|
+
m.timestamp,
|
|
648
|
+
m.metadata,
|
|
649
|
+
m.backend,
|
|
650
|
+
m.model_id,
|
|
651
|
+
s.backend_session_id
|
|
652
|
+
FROM messages m
|
|
653
|
+
JOIN conversation_sessions s ON m.session_id = s.id
|
|
654
|
+
WHERE s.platform = ? AND s.channel_id = ? AND s.thread_id IS ?
|
|
655
|
+
ORDER BY m.timestamp DESC, m.id DESC LIMIT ?`)
|
|
656
|
+
.all(event.platform, event.channel, event.threadId ?? null, threadLimit);
|
|
657
|
+
}
|
|
658
|
+
if (rows.length === 0)
|
|
659
|
+
return null;
|
|
660
|
+
// Truncate by approximate token budget (1 token ≈ 4 chars).
|
|
661
|
+
const maxTokens = this.config.historyInjectionMaxTokens ?? 8000;
|
|
662
|
+
const reversed = rows.reverse();
|
|
663
|
+
const proactiveRows = [];
|
|
664
|
+
let tokenBudget = maxTokens * 4; // chars remaining
|
|
665
|
+
const lines = [];
|
|
666
|
+
for (const r of reversed) {
|
|
667
|
+
const metadata = parseMessageMetadata(r.metadata);
|
|
668
|
+
const isForward = isProactiveForwardMetadata(metadata);
|
|
669
|
+
const tag = r.backend
|
|
670
|
+
? `[${r.timestamp}] [${r.role}/${r.backend}:${r.model_id ?? "?"}]`
|
|
671
|
+
: `[${r.timestamp}] [${r.role}]`;
|
|
672
|
+
const forwardSuffix = r.role === "assistant" && isForward
|
|
673
|
+
? " (forwarded from autonomous run)"
|
|
674
|
+
: "";
|
|
675
|
+
const line = `${tag}${forwardSuffix}: ${r.content}`;
|
|
676
|
+
tokenBudget -= line.length;
|
|
677
|
+
if (tokenBudget < 0 && lines.length > 0) {
|
|
678
|
+
lines.unshift(`[...${reversed.length - lines.length} older messages omitted]`);
|
|
679
|
+
break;
|
|
680
|
+
}
|
|
681
|
+
if (isForward) {
|
|
682
|
+
proactiveRows.push({
|
|
683
|
+
sessionId: r.session_id,
|
|
684
|
+
dispatchIds: metadataDispatchIds(metadata),
|
|
685
|
+
sessionResumed: r.backend_session_id !== null,
|
|
686
|
+
});
|
|
687
|
+
}
|
|
688
|
+
lines.push(line);
|
|
689
|
+
}
|
|
690
|
+
if (proactiveRows.length > 0) {
|
|
691
|
+
this.logProactiveForwardInjected(proactiveRows);
|
|
692
|
+
}
|
|
693
|
+
return lines.join("\n");
|
|
694
|
+
}
|
|
695
|
+
buildRecentOtherSurfaceBlock(event) {
|
|
696
|
+
if (!event.isDm || event.intent === "docs_qa")
|
|
697
|
+
return null;
|
|
698
|
+
const windowMinutes = this.config.historyOtherSurfaceWindowMinutes ?? 1440;
|
|
699
|
+
if (!Number.isFinite(windowMinutes) || windowMinutes <= 0)
|
|
700
|
+
return null;
|
|
701
|
+
const { scope } = getConversationScope({
|
|
702
|
+
platform: event.platform,
|
|
703
|
+
channel: event.channel,
|
|
704
|
+
threadId: event.threadId,
|
|
705
|
+
isDm: true,
|
|
706
|
+
intent: event.intent,
|
|
707
|
+
});
|
|
708
|
+
const other = scope === OWNER_DM_SCOPE
|
|
709
|
+
? { scope: DASHBOARD_CHAT_SCOPE, scopeKey: DASHBOARD_SCOPE_KEY }
|
|
710
|
+
: scope === DASHBOARD_CHAT_SCOPE
|
|
711
|
+
? { scope: OWNER_DM_SCOPE, scopeKey: OWNER_SCOPE_KEY }
|
|
712
|
+
: null;
|
|
713
|
+
if (!other)
|
|
714
|
+
return null;
|
|
715
|
+
const sinceUtc = formatSqliteDatetime(new Date(Date.now() - windowMinutes * 60_000));
|
|
716
|
+
const rows = this.db
|
|
717
|
+
.prepare(`SELECT
|
|
718
|
+
m.role,
|
|
719
|
+
m.content,
|
|
720
|
+
m.platform,
|
|
721
|
+
m.timestamp,
|
|
722
|
+
m.metadata,
|
|
723
|
+
s.scope,
|
|
724
|
+
s.scope_key
|
|
725
|
+
FROM messages m
|
|
726
|
+
JOIN conversation_sessions s ON m.session_id = s.id
|
|
727
|
+
WHERE s.scope = ?
|
|
728
|
+
AND s.scope_key = ?
|
|
729
|
+
AND s.status = 'active'
|
|
730
|
+
AND m.timestamp >= ?
|
|
731
|
+
ORDER BY m.timestamp ASC, m.id ASC
|
|
732
|
+
LIMIT 60`)
|
|
733
|
+
.all(other.scope, other.scopeKey, sinceUtc);
|
|
734
|
+
if (rows.length === 0)
|
|
735
|
+
return null;
|
|
736
|
+
const lines = [];
|
|
737
|
+
const ordinaryGroups = new Map();
|
|
738
|
+
for (const row of rows) {
|
|
739
|
+
const metadata = parseMessageMetadata(row.metadata);
|
|
740
|
+
const forwardType = getProactiveForwardType(metadata);
|
|
741
|
+
if (forwardType) {
|
|
742
|
+
lines.push(`[${row.timestamp}] [${forwardType} → ${row.platform}]: ${row.content}`);
|
|
743
|
+
continue;
|
|
744
|
+
}
|
|
745
|
+
const key = `${row.scope}:${row.scope_key}`;
|
|
746
|
+
const timestampMs = parseSqliteUtcMs(row.timestamp);
|
|
747
|
+
const existing = ordinaryGroups.get(key);
|
|
748
|
+
if (existing) {
|
|
749
|
+
existing.count += 1;
|
|
750
|
+
existing.firstMs = Math.min(existing.firstMs, timestampMs);
|
|
751
|
+
existing.lastMs = Math.max(existing.lastMs, timestampMs);
|
|
752
|
+
}
|
|
753
|
+
else {
|
|
754
|
+
ordinaryGroups.set(key, {
|
|
755
|
+
scope: row.scope,
|
|
756
|
+
count: 1,
|
|
757
|
+
firstMs: timestampMs,
|
|
758
|
+
lastMs: timestampMs,
|
|
759
|
+
});
|
|
760
|
+
}
|
|
761
|
+
}
|
|
762
|
+
for (const group of ordinaryGroups.values()) {
|
|
763
|
+
const spanMinutes = Math.max(1, Math.ceil((group.lastMs - group.firstMs) / 60_000));
|
|
764
|
+
lines.push(`(${group.scope}: ${group.count} turns in last ${spanMinutes} minutes)`);
|
|
765
|
+
}
|
|
766
|
+
return lines.length > 0 ? lines.join("\n") : null;
|
|
767
|
+
}
|
|
768
|
+
logProactiveForwardInjected(rows) {
|
|
769
|
+
const sessionId = rows[rows.length - 1]?.sessionId;
|
|
770
|
+
if (sessionId === undefined)
|
|
771
|
+
return;
|
|
772
|
+
const dispatchIds = [
|
|
773
|
+
...new Set(rows.flatMap((row) => row.dispatchIds)),
|
|
774
|
+
];
|
|
775
|
+
try {
|
|
776
|
+
this.db
|
|
777
|
+
.prepare(`INSERT INTO agent_actions (
|
|
778
|
+
action_type, trigger, result, detail, started_at
|
|
779
|
+
)
|
|
780
|
+
VALUES (
|
|
781
|
+
'proactive_forward_injected',
|
|
782
|
+
'reactive',
|
|
783
|
+
'success',
|
|
784
|
+
?,
|
|
785
|
+
CURRENT_TIMESTAMP
|
|
786
|
+
)`)
|
|
787
|
+
.run(JSON.stringify({
|
|
788
|
+
sessionId,
|
|
789
|
+
dispatchIds,
|
|
790
|
+
forwardCount: rows.length,
|
|
791
|
+
sessionResumed: rows.some((row) => row.sessionResumed),
|
|
792
|
+
}));
|
|
793
|
+
}
|
|
794
|
+
catch (err) {
|
|
795
|
+
logger.warn({ err, sessionId }, "Failed to log proactive forward injection");
|
|
796
|
+
}
|
|
797
|
+
}
|
|
798
|
+
async readFile(relativePath) {
|
|
799
|
+
const contextDir = this.readableContextDir;
|
|
800
|
+
if (!contextDir)
|
|
801
|
+
return null;
|
|
802
|
+
const fullPath = join(contextDir, relativePath);
|
|
803
|
+
if (!existsSync(fullPath))
|
|
804
|
+
return null;
|
|
805
|
+
try {
|
|
806
|
+
return await readFile(fullPath, "utf-8");
|
|
807
|
+
}
|
|
808
|
+
catch {
|
|
809
|
+
return null;
|
|
810
|
+
}
|
|
811
|
+
}
|
|
812
|
+
async buildActiveProjectsSection() {
|
|
813
|
+
const contextDir = this.readableContextDir;
|
|
814
|
+
if (!contextDir)
|
|
815
|
+
return null;
|
|
816
|
+
const projectsDir = join(contextDir, CONTEXT_RELATIVE_PATHS.projects.dir);
|
|
817
|
+
if (!existsSync(projectsDir))
|
|
818
|
+
return null;
|
|
819
|
+
const projectFiles = readdirSync(projectsDir)
|
|
820
|
+
.filter((name) => name.endsWith(".md"))
|
|
821
|
+
.filter((name) => !name.startsWith("_"));
|
|
822
|
+
if (projectFiles.length === 0)
|
|
823
|
+
return null;
|
|
824
|
+
const summaries = (await Promise.all(projectFiles.map(async (name) => {
|
|
825
|
+
const content = await this.readFile(`${CONTEXT_RELATIVE_PATHS.projects.dir}/${name}`);
|
|
826
|
+
if (!content)
|
|
827
|
+
return null;
|
|
828
|
+
return summarizeProjectFile(name, content);
|
|
829
|
+
})))
|
|
830
|
+
.filter((summary) => summary !== null)
|
|
831
|
+
.filter((summary) => summary.state !== "archived");
|
|
832
|
+
if (summaries.length === 0)
|
|
833
|
+
return null;
|
|
834
|
+
summaries.sort((a, b) => {
|
|
835
|
+
const aUpdated = a.updated ?? "";
|
|
836
|
+
const bUpdated = b.updated ?? "";
|
|
837
|
+
if (aUpdated !== bUpdated)
|
|
838
|
+
return bUpdated.localeCompare(aUpdated);
|
|
839
|
+
return a.title.localeCompare(b.title);
|
|
840
|
+
});
|
|
841
|
+
const lines = ["# Active projects", ""];
|
|
842
|
+
for (const project of summaries) {
|
|
843
|
+
const parts = [`state: ${project.state}`];
|
|
844
|
+
if (project.nextMilestone) {
|
|
845
|
+
parts.push(`next: ${project.nextMilestone}`);
|
|
846
|
+
}
|
|
847
|
+
if (project.due) {
|
|
848
|
+
parts.push(`due: ${project.due}`);
|
|
849
|
+
}
|
|
850
|
+
lines.push(`- ${project.title} (\`${project.slug}\`) — ${parts.join("; ")}`);
|
|
851
|
+
}
|
|
852
|
+
return lines.join("\n");
|
|
853
|
+
}
|
|
854
|
+
/**
|
|
855
|
+
* Render a rolling 7-day (or N-day) window of DM conversation-log
|
|
856
|
+
* summaries for roadmap_refresh. Unlike `buildYesterdaySqliteContext`,
|
|
857
|
+
* which is anchored to the previous agent-day for journal synthesis,
|
|
858
|
+
* this window is calendar-rolling — refreshes can trigger at any
|
|
859
|
+
* time, and the prompt needs whatever recent DM context exists.
|
|
860
|
+
*
|
|
861
|
+
* Returns a formatted markdown block; falls back to a "(none)" stub
|
|
862
|
+
* so the prompt can always cite the tag unconditionally.
|
|
863
|
+
*/
|
|
864
|
+
buildRecentDmConversationLog(days) {
|
|
865
|
+
const timezoneLabel = this.config.timezone || "system";
|
|
866
|
+
const nowMs = Date.now();
|
|
867
|
+
const startMs = nowMs - days * 24 * 60 * 60 * 1000;
|
|
868
|
+
const startSqlite = formatSqliteDatetime(new Date(startMs));
|
|
869
|
+
const endSqlite = formatSqliteDatetime(new Date(nowMs));
|
|
870
|
+
const total = this.db
|
|
871
|
+
.prepare(`SELECT COUNT(*) as cnt FROM dm_conversation_log
|
|
872
|
+
WHERE created_at >= ? AND created_at < ?`)
|
|
873
|
+
.get(startSqlite, endSqlite).cnt;
|
|
874
|
+
const rows = this.db
|
|
875
|
+
.prepare(`SELECT platform, scope, scope_key, summary, message_count, created_at
|
|
876
|
+
FROM dm_conversation_log
|
|
877
|
+
WHERE created_at >= ? AND created_at < ?
|
|
878
|
+
ORDER BY created_at DESC
|
|
879
|
+
LIMIT ?`)
|
|
880
|
+
.all(startSqlite, endSqlite, YESTERDAY_DM_LOG_LIMIT).reverse();
|
|
881
|
+
const lines = [
|
|
882
|
+
`- Window: last ${days} days`,
|
|
883
|
+
`- Timezone: ${timezoneLabel}`,
|
|
884
|
+
`- Rows: ${total}`,
|
|
885
|
+
];
|
|
886
|
+
if (total > rows.length) {
|
|
887
|
+
lines.push(`- Showing latest ${rows.length} rows only`);
|
|
888
|
+
}
|
|
889
|
+
if (rows.length === 0) {
|
|
890
|
+
lines.push("- (none)");
|
|
891
|
+
return lines.join("\n");
|
|
892
|
+
}
|
|
893
|
+
for (const row of rows) {
|
|
894
|
+
const scopeKey = row.scope_key && row.scope_key.length > 0 ? `/${row.scope_key}` : "";
|
|
895
|
+
lines.push(`- ${formatSqliteTimestampForContext(row.created_at, timezoneLabel)} [${row.platform}:${row.scope}${scopeKey}] (${row.message_count} msgs) ${truncateContextText(row.summary, 220)}`);
|
|
896
|
+
}
|
|
897
|
+
return lines.join("\n");
|
|
898
|
+
}
|
|
899
|
+
async buildYesterdaySqliteContext() {
|
|
900
|
+
const tz = this.config.timezone || undefined;
|
|
901
|
+
const dayBoundaryHour = this.config.dayBoundaryHour ?? 4;
|
|
902
|
+
const previousAgentDayRef = new Date(Date.now() - 24 * 60 * 60 * 1000);
|
|
903
|
+
const bounds = getAgentDayBoundsUtc(tz, dayBoundaryHour, previousAgentDayRef);
|
|
904
|
+
const dayLabel = localDateStr(new Date(parseSqliteUtcMs(bounds.start)), tz);
|
|
905
|
+
const timezoneLabel = this.config.timezone || "system";
|
|
906
|
+
const agentActionTotal = this.db
|
|
907
|
+
.prepare(`SELECT COUNT(*) as cnt FROM agent_actions
|
|
908
|
+
WHERE started_at >= ? AND started_at < ?`)
|
|
909
|
+
.get(bounds.start, bounds.end).cnt;
|
|
910
|
+
const agentActionRows = this.db
|
|
911
|
+
.prepare(`SELECT action_type, trigger, result, started_at, completed_at, error
|
|
912
|
+
FROM agent_actions
|
|
913
|
+
WHERE started_at >= ? AND started_at < ?
|
|
914
|
+
ORDER BY started_at DESC
|
|
915
|
+
LIMIT ?`)
|
|
916
|
+
.all(bounds.start, bounds.end, YESTERDAY_AGENT_ACTION_LIMIT).reverse();
|
|
917
|
+
const messageTotal = this.db
|
|
918
|
+
.prepare(`SELECT COUNT(*) as cnt FROM messages
|
|
919
|
+
WHERE timestamp >= ? AND timestamp < ?
|
|
920
|
+
AND role != 'system'`)
|
|
921
|
+
.get(bounds.start, bounds.end).cnt;
|
|
922
|
+
const messageRows = this.db
|
|
923
|
+
.prepare(`SELECT role, content, platform, timestamp
|
|
924
|
+
FROM messages
|
|
925
|
+
WHERE timestamp >= ? AND timestamp < ?
|
|
926
|
+
AND role != 'system'
|
|
927
|
+
ORDER BY timestamp DESC
|
|
928
|
+
LIMIT ?`)
|
|
929
|
+
.all(bounds.start, bounds.end, YESTERDAY_MESSAGE_LIMIT).reverse();
|
|
930
|
+
const dmLogTotal = this.db
|
|
931
|
+
.prepare(`SELECT COUNT(*) as cnt FROM dm_conversation_log
|
|
932
|
+
WHERE created_at >= ? AND created_at < ?`)
|
|
933
|
+
.get(bounds.start, bounds.end).cnt;
|
|
934
|
+
const dmLogRows = this.db
|
|
935
|
+
.prepare(`SELECT platform, scope, scope_key, summary, message_count, created_at
|
|
936
|
+
FROM dm_conversation_log
|
|
937
|
+
WHERE created_at >= ? AND created_at < ?
|
|
938
|
+
ORDER BY created_at DESC
|
|
939
|
+
LIMIT ?`)
|
|
940
|
+
.all(bounds.start, bounds.end, YESTERDAY_DM_LOG_LIMIT).reverse();
|
|
941
|
+
return {
|
|
942
|
+
agentActions: formatYesterdayAgentActions(dayLabel, timezoneLabel, agentActionRows, agentActionTotal),
|
|
943
|
+
messages: formatYesterdayMessages(dayLabel, timezoneLabel, messageRows, messageTotal),
|
|
944
|
+
dmConversationLog: formatYesterdayDmConversationLog(dayLabel, timezoneLabel, dmLogRows, dmLogTotal),
|
|
945
|
+
};
|
|
946
|
+
}
|
|
947
|
+
/**
|
|
948
|
+
* Current-agent-day variant of `buildYesterdaySqliteContext` for the
|
|
949
|
+
* user-profile sweep (§Phase 2). Resolves the day bounds to the
|
|
950
|
+
* CURRENT agent-day — at 03:50 that window is ~04:00 yesterday →
|
|
951
|
+
* 03:50 today (the agent-day about to close), and at 17:50 it is
|
|
952
|
+
* ~04:00 today → 17:50 today. The sweep reads DM traffic + rolling
|
|
953
|
+
* summaries but not agent_actions (not needed for fact extraction).
|
|
954
|
+
*/
|
|
955
|
+
buildAgentDayDmContext() {
|
|
956
|
+
const tz = this.config.timezone || undefined;
|
|
957
|
+
const dayBoundaryHour = this.config.dayBoundaryHour ?? 4;
|
|
958
|
+
const bounds = getAgentDayBoundsUtc(tz, dayBoundaryHour);
|
|
959
|
+
const dayLabel = localDateStr(new Date(parseSqliteUtcMs(bounds.start)), tz);
|
|
960
|
+
const timezoneLabel = this.config.timezone || "system";
|
|
961
|
+
const messageTotal = this.db
|
|
962
|
+
.prepare(`SELECT COUNT(*) as cnt FROM messages
|
|
963
|
+
WHERE timestamp >= ? AND timestamp < ?
|
|
964
|
+
AND role != 'system'`)
|
|
965
|
+
.get(bounds.start, bounds.end).cnt;
|
|
966
|
+
const messageRows = this.db
|
|
967
|
+
.prepare(`SELECT role, content, platform, timestamp
|
|
968
|
+
FROM messages
|
|
969
|
+
WHERE timestamp >= ? AND timestamp < ?
|
|
970
|
+
AND role != 'system'
|
|
971
|
+
ORDER BY timestamp DESC
|
|
972
|
+
LIMIT ?`)
|
|
973
|
+
.all(bounds.start, bounds.end, YESTERDAY_MESSAGE_LIMIT).reverse();
|
|
974
|
+
const dmLogTotal = this.db
|
|
975
|
+
.prepare(`SELECT COUNT(*) as cnt FROM dm_conversation_log
|
|
976
|
+
WHERE created_at >= ? AND created_at < ?`)
|
|
977
|
+
.get(bounds.start, bounds.end).cnt;
|
|
978
|
+
const dmLogRows = this.db
|
|
979
|
+
.prepare(`SELECT platform, scope, scope_key, summary, message_count, created_at
|
|
980
|
+
FROM dm_conversation_log
|
|
981
|
+
WHERE created_at >= ? AND created_at < ?
|
|
982
|
+
ORDER BY created_at DESC
|
|
983
|
+
LIMIT ?`)
|
|
984
|
+
.all(bounds.start, bounds.end, YESTERDAY_DM_LOG_LIMIT).reverse();
|
|
985
|
+
return {
|
|
986
|
+
messages: formatYesterdayMessages(dayLabel, timezoneLabel, messageRows, messageTotal),
|
|
987
|
+
dmConversationLog: formatYesterdayDmConversationLog(dayLabel, timezoneLabel, dmLogRows, dmLogTotal),
|
|
988
|
+
};
|
|
989
|
+
}
|
|
990
|
+
}
|
|
991
|
+
/**
|
|
992
|
+
* Truncate `value` to at most `max` chars, collapsing newlines so the
|
|
993
|
+
* result fits on one line. Suffix `…` when truncation occurs. Used by
|
|
994
|
+
* the scheduled.dm DM-activity / DM-history blocks.
|
|
995
|
+
*/
|
|
996
|
+
function truncateForBlock(value, max) {
|
|
997
|
+
const oneLine = value.replace(/\s+/g, " ").trim();
|
|
998
|
+
if (oneLine.length <= max)
|
|
999
|
+
return oneLine;
|
|
1000
|
+
return `${oneLine.slice(0, max - 1)}…`;
|
|
1001
|
+
}
|
|
1002
|
+
function summarizeProjectFile(filename, content) {
|
|
1003
|
+
const slug = filename.replace(/\.md$/, "");
|
|
1004
|
+
const { frontmatter, body } = splitFrontmatter(content);
|
|
1005
|
+
const state = readFrontmatterScalar(frontmatter, "state") ?? "active";
|
|
1006
|
+
const title = body.match(/^#\s+(.+)$/m)?.[1]?.trim() || slug;
|
|
1007
|
+
return {
|
|
1008
|
+
slug,
|
|
1009
|
+
title,
|
|
1010
|
+
state,
|
|
1011
|
+
due: readFrontmatterScalar(frontmatter, "due"),
|
|
1012
|
+
nextMilestone: readFrontmatterScalar(frontmatter, "next_milestone"),
|
|
1013
|
+
updated: readFrontmatterScalar(frontmatter, "updated"),
|
|
1014
|
+
};
|
|
1015
|
+
}
|
|
1016
|
+
function splitFrontmatter(content) {
|
|
1017
|
+
if (!content.startsWith("---\n")) {
|
|
1018
|
+
return { frontmatter: "", body: content };
|
|
1019
|
+
}
|
|
1020
|
+
const endIdx = content.indexOf("\n---", 4);
|
|
1021
|
+
if (endIdx < 0) {
|
|
1022
|
+
return { frontmatter: "", body: content };
|
|
1023
|
+
}
|
|
1024
|
+
return {
|
|
1025
|
+
frontmatter: content.slice(4, endIdx),
|
|
1026
|
+
body: content.slice(endIdx + 4).replace(/^\n+/, ""),
|
|
1027
|
+
};
|
|
1028
|
+
}
|
|
1029
|
+
function readFrontmatterScalar(frontmatter, key) {
|
|
1030
|
+
if (!frontmatter)
|
|
1031
|
+
return null;
|
|
1032
|
+
const escapedKey = key.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
1033
|
+
const match = frontmatter.match(new RegExp(`^${escapedKey}:\\s*(.+)$`, "m"));
|
|
1034
|
+
if (!match)
|
|
1035
|
+
return null;
|
|
1036
|
+
return match[1].trim().replace(/^['"]|['"]$/g, "");
|
|
1037
|
+
}
|
|
1038
|
+
/**
|
|
1039
|
+
* Truncate the ## Agent Log section of today.md to the last `maxEntries`
|
|
1040
|
+
* bullet lines. Operates on the string content only (does not touch disk).
|
|
1041
|
+
* Inserts an omission marker pointing to GET /api/context/today.
|
|
1042
|
+
*/
|
|
1043
|
+
function truncateAgentLog(content, maxEntries) {
|
|
1044
|
+
// Match "\n## Agent Log\n" to avoid false positives inside code blocks or
|
|
1045
|
+
// quoted text. The leading \n ensures we match a heading at line start, not
|
|
1046
|
+
// a substring of prose. today.md's structure is daemon-controlled, but this
|
|
1047
|
+
// is defence-in-depth against accidental matches in Handoff/Notes.
|
|
1048
|
+
const needle = "\n## Agent Log\n";
|
|
1049
|
+
const needleIdx = content.indexOf(needle);
|
|
1050
|
+
if (needleIdx < 0)
|
|
1051
|
+
return content;
|
|
1052
|
+
const headerIdx = needleIdx + 1; // skip the leading \n to point at "##"
|
|
1053
|
+
const sectionHeader = "## Agent Log";
|
|
1054
|
+
// Find the end of the Agent Log section (next ## heading or EOF)
|
|
1055
|
+
const afterHeader = headerIdx + sectionHeader.length;
|
|
1056
|
+
const nextSectionIdx = content.indexOf("\n## ", afterHeader);
|
|
1057
|
+
const sectionEnd = nextSectionIdx >= 0 ? nextSectionIdx : content.length;
|
|
1058
|
+
const sectionBody = content.slice(afterHeader, sectionEnd);
|
|
1059
|
+
const lines = sectionBody.split("\n");
|
|
1060
|
+
// Extract bullet lines (start with "- ")
|
|
1061
|
+
const bulletLines = lines.filter((l) => l.trimStart().startsWith("- "));
|
|
1062
|
+
if (bulletLines.length <= maxEntries)
|
|
1063
|
+
return content;
|
|
1064
|
+
// Keep only the last maxEntries bullets
|
|
1065
|
+
const omitted = bulletLines.length - maxEntries;
|
|
1066
|
+
const kept = bulletLines.slice(-maxEntries);
|
|
1067
|
+
const truncatedBody = [
|
|
1068
|
+
"",
|
|
1069
|
+
`[...${omitted} earlier entries omitted — use GET /api/context/today for full content]`,
|
|
1070
|
+
...kept,
|
|
1071
|
+
"",
|
|
1072
|
+
].join("\n");
|
|
1073
|
+
return (content.slice(0, headerIdx) +
|
|
1074
|
+
sectionHeader +
|
|
1075
|
+
truncatedBody +
|
|
1076
|
+
content.slice(sectionEnd));
|
|
1077
|
+
}
|
|
1078
|
+
function formatYesterdayAgentActions(dayLabel, timezoneLabel, rows, total) {
|
|
1079
|
+
const lines = [
|
|
1080
|
+
`- Agent day: ${dayLabel}`,
|
|
1081
|
+
`- Timezone: ${timezoneLabel}`,
|
|
1082
|
+
`- Rows: ${total}`,
|
|
1083
|
+
];
|
|
1084
|
+
if (total > rows.length) {
|
|
1085
|
+
lines.push(`- Showing latest ${rows.length} rows only`);
|
|
1086
|
+
}
|
|
1087
|
+
if (rows.length === 0) {
|
|
1088
|
+
lines.push("- (none)");
|
|
1089
|
+
return lines.join("\n");
|
|
1090
|
+
}
|
|
1091
|
+
for (const row of rows) {
|
|
1092
|
+
const trigger = row.trigger ? ` (${row.trigger})` : "";
|
|
1093
|
+
const result = row.result ?? "unknown";
|
|
1094
|
+
const error = row.error
|
|
1095
|
+
? ` — error: ${truncateContextText(row.error, 140)}`
|
|
1096
|
+
: "";
|
|
1097
|
+
lines.push(`- ${formatSqliteTimestampForContext(row.started_at, timezoneLabel)} [${result}] ${row.action_type}${trigger}${error}`);
|
|
1098
|
+
}
|
|
1099
|
+
return lines.join("\n");
|
|
1100
|
+
}
|
|
1101
|
+
function formatYesterdayMessages(dayLabel, timezoneLabel, rows, total) {
|
|
1102
|
+
const lines = [
|
|
1103
|
+
`- Agent day: ${dayLabel}`,
|
|
1104
|
+
`- Timezone: ${timezoneLabel}`,
|
|
1105
|
+
`- Rows: ${total}`,
|
|
1106
|
+
];
|
|
1107
|
+
if (total > rows.length) {
|
|
1108
|
+
lines.push(`- Showing latest ${rows.length} rows only`);
|
|
1109
|
+
}
|
|
1110
|
+
if (rows.length === 0) {
|
|
1111
|
+
lines.push("- (none)");
|
|
1112
|
+
return lines.join("\n");
|
|
1113
|
+
}
|
|
1114
|
+
for (const row of rows) {
|
|
1115
|
+
lines.push(`- ${formatSqliteTimestampForContext(row.timestamp, timezoneLabel)} [${row.platform}/${row.role}] ${truncateContextText(row.content, 180)}`);
|
|
1116
|
+
}
|
|
1117
|
+
return lines.join("\n");
|
|
1118
|
+
}
|
|
1119
|
+
function formatYesterdayDmConversationLog(dayLabel, timezoneLabel, rows, total) {
|
|
1120
|
+
const lines = [
|
|
1121
|
+
`- Agent day: ${dayLabel}`,
|
|
1122
|
+
`- Timezone: ${timezoneLabel}`,
|
|
1123
|
+
`- Rows: ${total}`,
|
|
1124
|
+
];
|
|
1125
|
+
if (total > rows.length) {
|
|
1126
|
+
lines.push(`- Showing latest ${rows.length} rows only`);
|
|
1127
|
+
}
|
|
1128
|
+
if (rows.length === 0) {
|
|
1129
|
+
lines.push("- (none)");
|
|
1130
|
+
return lines.join("\n");
|
|
1131
|
+
}
|
|
1132
|
+
for (const row of rows) {
|
|
1133
|
+
const scopeKey = row.scope_key && row.scope_key.length > 0 ? `/${row.scope_key}` : "";
|
|
1134
|
+
lines.push(`- ${formatSqliteTimestampForContext(row.created_at, timezoneLabel)} [${row.platform}:${row.scope}${scopeKey}] (${row.message_count} msgs) ${truncateContextText(row.summary, 220)}`);
|
|
1135
|
+
}
|
|
1136
|
+
return lines.join("\n");
|
|
1137
|
+
}
|
|
1138
|
+
function formatSqliteTimestampForContext(timestamp, timezone) {
|
|
1139
|
+
const local = nowInTimezone(timezone === "system" ? undefined : timezone, new Date(parseSqliteUtcMs(timestamp)));
|
|
1140
|
+
return `${local.year}-${String(local.month).padStart(2, "0")}-${String(local.day).padStart(2, "0")} ${String(local.hours).padStart(2, "0")}:${String(local.minutes).padStart(2, "0")}`;
|
|
1141
|
+
}
|
|
1142
|
+
function truncateContextText(text, maxChars) {
|
|
1143
|
+
const compact = text.replace(/\s+/g, " ").trim();
|
|
1144
|
+
if (compact.length <= maxChars)
|
|
1145
|
+
return compact;
|
|
1146
|
+
return `${compact.slice(0, maxChars - 3)}...`;
|
|
1147
|
+
}
|
|
1148
|
+
//# sourceMappingURL=context-builder.js.map
|