@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,1008 @@
|
|
|
1
|
+
import { readdirSync, readFileSync, rmSync, statSync, unlinkSync, writeFileSync, } from "node:fs";
|
|
2
|
+
import { resolve, extname } from "node:path";
|
|
3
|
+
import { getContextDir } from "../config.js";
|
|
4
|
+
import { CONTEXT_RELATIVE_PATHS } from "./context-paths.js";
|
|
5
|
+
import { cleanupConsumedObservations, getStalePendingObservationStats, } from "../db/observations.js";
|
|
6
|
+
import { pruneOldMcpToolCalls } from "../services/mcp/tool-audit.js";
|
|
7
|
+
import { AttachmentStore } from "../services/attachments/store.js";
|
|
8
|
+
import { createLogger } from "../logging.js";
|
|
9
|
+
const logger = createLogger("retention");
|
|
10
|
+
/** Retention policies — days to keep each data type */
|
|
11
|
+
const RETENTION_DAYS = {
|
|
12
|
+
mdFileSnapshots: 30,
|
|
13
|
+
messages: 90,
|
|
14
|
+
agentActions: 90,
|
|
15
|
+
notificationLog: 60,
|
|
16
|
+
conversationSessions: 7, // inactive sessions only
|
|
17
|
+
dmConversationLog: 90,
|
|
18
|
+
observations: 7,
|
|
19
|
+
agentSchedule: 30, // completed/failed/skipped rows only
|
|
20
|
+
mcpToolCalls: 90,
|
|
21
|
+
authTelemetryCounters: 90,
|
|
22
|
+
mailMessagesIndex: 365,
|
|
23
|
+
deletedMailMessagesIndex: 30,
|
|
24
|
+
mailParseFailures: 30,
|
|
25
|
+
managementParseFailures: 30,
|
|
26
|
+
skillCurationSignals: 180,
|
|
27
|
+
skillCurationConsumedSignals: 90,
|
|
28
|
+
skillCurationProposals: 180,
|
|
29
|
+
skillCurationRuns: 180,
|
|
30
|
+
skillCurationRunningMaxHours: 24,
|
|
31
|
+
tempFiles: 1,
|
|
32
|
+
/**
|
|
33
|
+
* Pending observations are NEVER deleted by retention (the hourly_check
|
|
34
|
+
* dispatcher owns consumption). After this many days unconsumed, retention
|
|
35
|
+
* logs a warning so the operator notices a stalled pipeline.
|
|
36
|
+
*/
|
|
37
|
+
stalePendingObservationsWarn: 14,
|
|
38
|
+
// B-007 §5.9 / §6.5 — synthesized daily/ is persistent by design. The
|
|
39
|
+
// retention value here is only used as a safety net when the
|
|
40
|
+
// `daily/` folder is explicitly enabled for pruning (it is not); kept
|
|
41
|
+
// for backwards-compatible config reads.
|
|
42
|
+
dailyMd: 36500,
|
|
43
|
+
weeklyMd: 365,
|
|
44
|
+
/**
|
|
45
|
+
* Per-day git journal entries under `git/<slug>/journal/<YYYY-MM-DD>.md`.
|
|
46
|
+
* One year matches the design (docs/design/appendices/unified-repositories.md
|
|
47
|
+
* §4.5). Long-arc evolution lives in `git/<slug>/overview.md`'s
|
|
48
|
+
* `## Lifecycle Phases` and `## Notable Changes`; the journal is the
|
|
49
|
+
* granular per-day record we can afford to drop after a year.
|
|
50
|
+
*/
|
|
51
|
+
gitJournalMd: 365,
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* Retention policy for `agent/journal.md` content-level rollup.
|
|
55
|
+
*
|
|
56
|
+
* The journal is append-only — Weekly/Monthly Review routines add new
|
|
57
|
+
* `## Weekly YYYY-Www` and `## Monthly YYYY-MM` sections over time. Without
|
|
58
|
+
* pruning it grows unbounded. The policy:
|
|
59
|
+
*
|
|
60
|
+
* - Keep the most recent `keepMonthlySections` `## Monthly YYYY-MM`
|
|
61
|
+
* sections (default 24 = 2 years). Older monthlies are pruned to
|
|
62
|
+
* bound file size over multi-year operation.
|
|
63
|
+
* - Keep only the most recent `keepWeeklySections` `## Weekly YYYY-Www`
|
|
64
|
+
* sections; older weeklies are considered superseded by the monthly
|
|
65
|
+
* rollup that covers them.
|
|
66
|
+
* - Collapse duplicate `## Weekly YYYY-Www` and `## Monthly YYYY-MM`
|
|
67
|
+
* sections (last-write-wins): if the review routine ran twice in the
|
|
68
|
+
* same period, keep only the most recently appended section. This makes
|
|
69
|
+
* the append-only write path structurally idempotent.
|
|
70
|
+
* - Warn (non-destructively) when any single kept section exceeds
|
|
71
|
+
* `sectionSizeWarnBytes`. Bloat indicates the review prompt's bullet
|
|
72
|
+
* caps are being ignored; the operator should investigate rather than
|
|
73
|
+
* silently truncate information mid-sentence.
|
|
74
|
+
* - Never delete the file itself — if nothing qualifies for pruning the
|
|
75
|
+
* file is left untouched (no disk write, no snapshot noise).
|
|
76
|
+
*
|
|
77
|
+
* Invariant with the weekly_review / monthly_review prompts:
|
|
78
|
+
* `keepWeeklySections >= 4`, because `routine.monthly_review` reads the
|
|
79
|
+
* last ~4 weekly sections via `GET /api/context/agent-journal` when
|
|
80
|
+
* synthesizing its retrospective. If you lower this below 4, update the
|
|
81
|
+
* prompt in core/prompts.ts as well.
|
|
82
|
+
*/
|
|
83
|
+
const AGENT_JOURNAL_ROLLUP = {
|
|
84
|
+
keepWeeklySections: 12,
|
|
85
|
+
/**
|
|
86
|
+
* Monthly sections are the durable rollup of weekly reviews and should be
|
|
87
|
+
* kept for a long time, but not forever — after several years the file
|
|
88
|
+
* would grow into hundreds of KB, inflating prompt token costs each time
|
|
89
|
+
* the journal is loaded as context. 24 months keeps two full years of
|
|
90
|
+
* retrospectives, which is enough for long-range trend analysis while
|
|
91
|
+
* bounding file size to ~96 KB worst-case (24 × 4 KB cap).
|
|
92
|
+
*/
|
|
93
|
+
keepMonthlySections: 24,
|
|
94
|
+
/**
|
|
95
|
+
* ~4000 bytes ≈ 1000 tokens — the soft cap a weekly or monthly section
|
|
96
|
+
* should respect. Above this we log a warning so the operator sees prompt
|
|
97
|
+
* compliance drift. We never truncate content mid-section because that
|
|
98
|
+
* would corrupt the agent's own reflection history in unpredictable ways.
|
|
99
|
+
*/
|
|
100
|
+
sectionSizeWarnBytes: 4000,
|
|
101
|
+
};
|
|
102
|
+
/**
|
|
103
|
+
* Run data retention cleanup.
|
|
104
|
+
*
|
|
105
|
+
* Deletes expired data from both SQLite tables and context files
|
|
106
|
+
* based on the retention policy defined in DESIGN.md §3.5.
|
|
107
|
+
*/
|
|
108
|
+
export function runRetentionCleanup(db, config) {
|
|
109
|
+
const result = {
|
|
110
|
+
mdFileSnapshots: 0,
|
|
111
|
+
messages: 0,
|
|
112
|
+
agentActions: 0,
|
|
113
|
+
notificationLog: 0,
|
|
114
|
+
conversationSessions: 0,
|
|
115
|
+
dmConversationLog: 0,
|
|
116
|
+
observations: 0,
|
|
117
|
+
agentSchedule: 0,
|
|
118
|
+
mcpToolCalls: 0,
|
|
119
|
+
authTelemetryCounters: 0,
|
|
120
|
+
mailMessagesIndex: 0,
|
|
121
|
+
mailParseFailures: 0,
|
|
122
|
+
managementParseFailures: 0,
|
|
123
|
+
skillCurationSignals: 0,
|
|
124
|
+
skillCurationProposals: 0,
|
|
125
|
+
skillCurationRuns: 0,
|
|
126
|
+
skillCurationRunsAborted: 0,
|
|
127
|
+
attachmentOrphanRows: 0,
|
|
128
|
+
attachmentDanglingRows: 0,
|
|
129
|
+
attachmentUntrackedDirs: 0,
|
|
130
|
+
tempFiles: 0,
|
|
131
|
+
scheduleFiles: 0,
|
|
132
|
+
weeklyFiles: 0,
|
|
133
|
+
gitJournalFiles: 0,
|
|
134
|
+
agentJournalWeeklyPruned: 0,
|
|
135
|
+
agentJournalMonthlyPruned: 0,
|
|
136
|
+
agentJournalDuplicatesCollapsed: 0,
|
|
137
|
+
agentJournalOversizedSections: 0,
|
|
138
|
+
integrationWrites: 0,
|
|
139
|
+
imminentEventNotifications: 0,
|
|
140
|
+
ftsOptimized: false,
|
|
141
|
+
walCheckpointed: false,
|
|
142
|
+
};
|
|
143
|
+
// ── SQLite table cleanup (transactional) ──
|
|
144
|
+
//
|
|
145
|
+
// All DELETE operations run inside a single transaction so a mid-cleanup
|
|
146
|
+
// crash leaves the database in either the pre- or post-cleanup state,
|
|
147
|
+
// never a partial mix. Deletion counts are accumulated into a local
|
|
148
|
+
// object and only copied to `result` after the transaction commits —
|
|
149
|
+
// if the transaction rolls back, `result` stays at zero rather than
|
|
150
|
+
// reporting phantom deletions.
|
|
151
|
+
const counts = {
|
|
152
|
+
mdFileSnapshots: 0,
|
|
153
|
+
messages: 0,
|
|
154
|
+
agentActions: 0,
|
|
155
|
+
notificationLog: 0,
|
|
156
|
+
dmConversationLog: 0,
|
|
157
|
+
observations: 0,
|
|
158
|
+
conversationSessions: 0,
|
|
159
|
+
agentSchedule: 0,
|
|
160
|
+
mcpToolCalls: 0,
|
|
161
|
+
authTelemetryCounters: 0,
|
|
162
|
+
mailMessagesIndex: 0,
|
|
163
|
+
mailParseFailures: 0,
|
|
164
|
+
managementParseFailures: 0,
|
|
165
|
+
skillCurationSignals: 0,
|
|
166
|
+
skillCurationProposals: 0,
|
|
167
|
+
skillCurationRuns: 0,
|
|
168
|
+
skillCurationRunsAborted: 0,
|
|
169
|
+
integrationWrites: 0,
|
|
170
|
+
imminentEventNotifications: 0,
|
|
171
|
+
};
|
|
172
|
+
db.transaction(() => {
|
|
173
|
+
counts.mdFileSnapshots = deleteOlderThan(db, "md_file_snapshots", "created_at", RETENTION_DAYS.mdFileSnapshots);
|
|
174
|
+
counts.messages = deleteOlderThan(db, "messages", "timestamp", RETENTION_DAYS.messages);
|
|
175
|
+
counts.agentActions = deleteOlderThan(db, "agent_actions", "started_at", RETENTION_DAYS.agentActions);
|
|
176
|
+
counts.notificationLog = deleteOlderThan(db, "notification_log", "created_at", RETENTION_DAYS.notificationLog);
|
|
177
|
+
counts.dmConversationLog = deleteOlderThan(db, "dm_conversation_log", "created_at", RETENTION_DAYS.dmConversationLog);
|
|
178
|
+
counts.observations = cleanupConsumedObservations(db, RETENTION_DAYS.observations);
|
|
179
|
+
// Expired inactive sessions (status != 'active')
|
|
180
|
+
// Must delete orphaned messages FIRST to satisfy FK constraint (foreign_keys = ON)
|
|
181
|
+
db.prepare(`DELETE FROM messages WHERE session_id IN (
|
|
182
|
+
SELECT id FROM conversation_sessions
|
|
183
|
+
WHERE status != 'active'
|
|
184
|
+
AND last_message_at < datetime('now', '-' || ? || ' days')
|
|
185
|
+
)`).run(RETENTION_DAYS.conversationSessions);
|
|
186
|
+
counts.conversationSessions = db
|
|
187
|
+
.prepare(`DELETE FROM conversation_sessions
|
|
188
|
+
WHERE status != 'active'
|
|
189
|
+
AND last_message_at < datetime('now', '-' || ? || ' days')`)
|
|
190
|
+
.run(RETENTION_DAYS.conversationSessions).changes;
|
|
191
|
+
// Terminal schedule rows only — explicitly enumerate the statuses we
|
|
192
|
+
// consider terminal so that a future new status (e.g. 'cancelled')
|
|
193
|
+
// is not silently swept up until it is intentionally added here.
|
|
194
|
+
counts.agentSchedule = db
|
|
195
|
+
.prepare(`DELETE FROM agent_schedule
|
|
196
|
+
WHERE status IN ('completed', 'skipped', 'failed')
|
|
197
|
+
AND scheduled_for < datetime('now', '-' || ? || ' days')`)
|
|
198
|
+
.run(RETENTION_DAYS.agentSchedule).changes;
|
|
199
|
+
// MCP audit log — `called_at` is epoch ms, not a datetime string, so
|
|
200
|
+
// pruneOldMcpToolCalls uses integer arithmetic. Catches internally for
|
|
201
|
+
// tests that hand-craft a DB without the mcp_tool_calls table.
|
|
202
|
+
counts.mcpToolCalls = pruneOldMcpToolCalls(db, RETENTION_DAYS.mcpToolCalls);
|
|
203
|
+
counts.authTelemetryCounters = deleteIsoOlderThanIfTableExists(db, "auth_telemetry_counters", "bucket_hour", RETENTION_DAYS.authTelemetryCounters);
|
|
204
|
+
counts.mailMessagesIndex = pruneMailMessagesIndex(db);
|
|
205
|
+
counts.mailParseFailures = deleteOlderThanButKeepLatestIfTableExists(db, "parse_failures", "created_at", RETENTION_DAYS.mailParseFailures, 500);
|
|
206
|
+
counts.managementParseFailures = deleteOlderThanButKeepLatestIfTableExists(db, "management_parse_failures", "created_at", RETENTION_DAYS.managementParseFailures, 50);
|
|
207
|
+
counts.skillCurationRunsAborted = abortStaleSkillCurationRuns(db);
|
|
208
|
+
const skillCuration = pruneSkillCurationTables(db);
|
|
209
|
+
counts.skillCurationSignals = skillCuration.signals;
|
|
210
|
+
counts.skillCurationProposals = skillCuration.proposals;
|
|
211
|
+
counts.skillCurationRuns = skillCuration.runs;
|
|
212
|
+
// INTEGRATION-DRIFT-DETECTION-PLAN.md §4.2 — `integration_writes` rows
|
|
213
|
+
// are TTL-keyed; reconcile only honours rows whose expires_at is in the
|
|
214
|
+
// future. Phase-2 has no insertion path yet (Phase 4 lands route
|
|
215
|
+
// handlers that call markIntegrationWrite), but adding the sweep now
|
|
216
|
+
// means Phase 4 won't have to revisit retention. The expires_at index
|
|
217
|
+
// (idx_integration_writes_expires) keeps the prune cheap. Defensive
|
|
218
|
+
// try/catch mirrors `pruneOldMcpToolCalls` for hand-rolled test
|
|
219
|
+
// schemas that omit the table — production always has it.
|
|
220
|
+
try {
|
|
221
|
+
counts.integrationWrites = db
|
|
222
|
+
.prepare(`DELETE FROM integration_writes
|
|
223
|
+
WHERE expires_at < datetime('now')`)
|
|
224
|
+
.run().changes;
|
|
225
|
+
}
|
|
226
|
+
catch (err) {
|
|
227
|
+
logger.warn({ err }, "integration_writes prune skipped (table missing)");
|
|
228
|
+
}
|
|
229
|
+
// INTEGRATION-DRIFT-PHASE-7-PLAN.md §3.2 — imminent-meeting dedup
|
|
230
|
+
// table. Rows older than 24 h are pruned; a calendar event cannot
|
|
231
|
+
// stay imminent longer than 15 min so the safety margin is generous,
|
|
232
|
+
// and the wider window absorbs clock jitter / DST transitions
|
|
233
|
+
// without re-DMing a row that the scheduler has already emitted.
|
|
234
|
+
try {
|
|
235
|
+
counts.imminentEventNotifications = db
|
|
236
|
+
.prepare(`DELETE FROM imminent_event_notifications
|
|
237
|
+
WHERE notified_at < datetime('now', '-1 day')`)
|
|
238
|
+
.run().changes;
|
|
239
|
+
}
|
|
240
|
+
catch (err) {
|
|
241
|
+
/* c8 ignore next 5 */
|
|
242
|
+
logger.warn({ err }, "imminent_event_notifications prune skipped (table missing)");
|
|
243
|
+
}
|
|
244
|
+
})();
|
|
245
|
+
// Transaction committed — safe to copy counts into result.
|
|
246
|
+
result.mdFileSnapshots = counts.mdFileSnapshots;
|
|
247
|
+
result.messages = counts.messages;
|
|
248
|
+
result.agentActions = counts.agentActions;
|
|
249
|
+
result.notificationLog = counts.notificationLog;
|
|
250
|
+
result.dmConversationLog = counts.dmConversationLog;
|
|
251
|
+
result.observations = counts.observations;
|
|
252
|
+
result.conversationSessions = counts.conversationSessions;
|
|
253
|
+
result.agentSchedule = counts.agentSchedule;
|
|
254
|
+
result.mcpToolCalls = counts.mcpToolCalls;
|
|
255
|
+
result.authTelemetryCounters = counts.authTelemetryCounters;
|
|
256
|
+
result.mailMessagesIndex = counts.mailMessagesIndex;
|
|
257
|
+
result.mailParseFailures = counts.mailParseFailures;
|
|
258
|
+
result.managementParseFailures = counts.managementParseFailures;
|
|
259
|
+
result.skillCurationSignals = counts.skillCurationSignals;
|
|
260
|
+
result.skillCurationProposals = counts.skillCurationProposals;
|
|
261
|
+
result.skillCurationRuns = counts.skillCurationRuns;
|
|
262
|
+
result.skillCurationRunsAborted = counts.skillCurationRunsAborted;
|
|
263
|
+
result.integrationWrites = counts.integrationWrites;
|
|
264
|
+
result.imminentEventNotifications = counts.imminentEventNotifications;
|
|
265
|
+
const attachmentCleanup = cleanupAttachments(db, config.dataDir);
|
|
266
|
+
result.attachmentOrphanRows = attachmentCleanup.orphanRows;
|
|
267
|
+
result.attachmentDanglingRows = attachmentCleanup.danglingRows;
|
|
268
|
+
result.attachmentUntrackedDirs = attachmentCleanup.untrackedDirs;
|
|
269
|
+
// Surface stale pending observations so a stalled hourly_check pipeline
|
|
270
|
+
// becomes visible in daemon logs. Pending rows are intentionally not
|
|
271
|
+
// deleted (see RETENTION_DAYS.stalePendingObservationsWarn comment).
|
|
272
|
+
const stalePending = getStalePendingObservationStats(db, RETENTION_DAYS.stalePendingObservationsWarn);
|
|
273
|
+
if (stalePending.count > 0) {
|
|
274
|
+
logger.warn({
|
|
275
|
+
stalePendingCount: stalePending.count,
|
|
276
|
+
oldestObservedAt: stalePending.oldestObservedAt,
|
|
277
|
+
thresholdDays: RETENTION_DAYS.stalePendingObservationsWarn,
|
|
278
|
+
}, "Stale pending observations detected — hourly_check may be skipping or stalled");
|
|
279
|
+
}
|
|
280
|
+
// ── FTS5 segment optimization ──
|
|
281
|
+
//
|
|
282
|
+
// FTS5 content-sync tables receive DELETE commands via triggers, but the
|
|
283
|
+
// internal segments are not merged until an explicit `optimize` command.
|
|
284
|
+
// We only run this when rows were actually deleted from the parent
|
|
285
|
+
// content tables — when nothing was deleted, the segments are already
|
|
286
|
+
// optimal and the I/O would be wasted.
|
|
287
|
+
// Each FTS table is optimized independently so a failure in one does not
|
|
288
|
+
// skip the other, and the log identifies which table had the problem.
|
|
289
|
+
const ftsTargets = [
|
|
290
|
+
{ table: "fts_actions", needed: counts.agentActions > 0 },
|
|
291
|
+
{ table: "fts_messages", needed: counts.messages > 0 || counts.conversationSessions > 0 },
|
|
292
|
+
{ table: "fts_mail_messages", needed: counts.mailMessagesIndex > 0 },
|
|
293
|
+
];
|
|
294
|
+
let ftsFailures = 0;
|
|
295
|
+
for (const { table, needed } of ftsTargets) {
|
|
296
|
+
if (!needed)
|
|
297
|
+
continue;
|
|
298
|
+
try {
|
|
299
|
+
db.exec(`INSERT INTO ${table}(${table}) VALUES('optimize')`);
|
|
300
|
+
}
|
|
301
|
+
catch (err) {
|
|
302
|
+
ftsFailures++;
|
|
303
|
+
logger.warn({ err, ftsTable: table }, "FTS5 optimization failed for table");
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
const ftsAttempted = ftsTargets.some((t) => t.needed);
|
|
307
|
+
result.ftsOptimized = ftsAttempted && ftsFailures === 0;
|
|
308
|
+
// Ask SQLite to refresh query planner statistics if needed. This is a
|
|
309
|
+
// no-op when statistics are already up to date and very cheap otherwise.
|
|
310
|
+
db.pragma("optimize");
|
|
311
|
+
// ── WAL checkpoint ──
|
|
312
|
+
//
|
|
313
|
+
// After bulk deletions the WAL file can grow large. A TRUNCATE
|
|
314
|
+
// checkpoint writes all WAL frames back to the main DB file and resets
|
|
315
|
+
// the WAL to zero length, reclaiming disk space immediately.
|
|
316
|
+
try {
|
|
317
|
+
db.pragma("wal_checkpoint(TRUNCATE)");
|
|
318
|
+
result.walCheckpointed = true;
|
|
319
|
+
}
|
|
320
|
+
catch (err) {
|
|
321
|
+
logger.warn({ err }, "WAL checkpoint failed — WAL file may remain large");
|
|
322
|
+
}
|
|
323
|
+
// ── File cleanup ──
|
|
324
|
+
// Retention sweeps should never touch stale fallback data if the user
|
|
325
|
+
// is on obsidian mode with a healthy primary vault — pass `db` so
|
|
326
|
+
// `getContextDir` returns the fallback only when actually degraded.
|
|
327
|
+
const contextDir = getContextDir(config, db);
|
|
328
|
+
// B-007 §5.9 — synthesized daily journals are persistent; no sweep.
|
|
329
|
+
// weekly/ is still time-bounded because the monthly review rolls it up.
|
|
330
|
+
result.weeklyFiles = cleanOldFiles(resolve(contextDir, "weekly"), RETENTION_DAYS.weeklyMd);
|
|
331
|
+
// Unified-repositories per-day journals — one year retention. Walk
|
|
332
|
+
// every `git/<slug>/journal/` directory and prune `.md` entries
|
|
333
|
+
// older than the cutoff. Overview files are NEVER pruned.
|
|
334
|
+
result.gitJournalFiles = cleanGitJournals(resolve(contextDir, "git"), RETENTION_DAYS.gitJournalMd);
|
|
335
|
+
result.tempFiles = cleanTempFiles(resolve(config.dataDir, "tmp"), RETENTION_DAYS.tempFiles) + cleanAtomicTempFiles(contextDir, RETENTION_DAYS.tempFiles);
|
|
336
|
+
// ── Content-level rollup: agent/journal.md (B-007 §5.1) ──
|
|
337
|
+
const journalPath = resolve(contextDir, CONTEXT_RELATIVE_PATHS.agent.journal);
|
|
338
|
+
const journalSnapshotKey = CONTEXT_RELATIVE_PATHS.agent.journal.replace(/\.md$/, "");
|
|
339
|
+
const journalResult = rollupAgentJournal(journalPath, AGENT_JOURNAL_ROLLUP.keepWeeklySections, AGENT_JOURNAL_ROLLUP.sectionSizeWarnBytes, AGENT_JOURNAL_ROLLUP.keepMonthlySections,
|
|
340
|
+
// Snapshot before destructive rollup so the pre-prune state is
|
|
341
|
+
// recoverable from md_file_snapshots, just like API PUT/PATCH writes.
|
|
342
|
+
(content) => {
|
|
343
|
+
db.prepare("INSERT INTO md_file_snapshots (file_path, content, trigger) VALUES (?, ?, ?)").run(journalSnapshotKey, content, "retention_rollup");
|
|
344
|
+
});
|
|
345
|
+
result.agentJournalWeeklyPruned = journalResult.weeklyPruned;
|
|
346
|
+
result.agentJournalMonthlyPruned = journalResult.monthlyPruned;
|
|
347
|
+
result.agentJournalDuplicatesCollapsed = journalResult.duplicatesCollapsed;
|
|
348
|
+
result.agentJournalOversizedSections = journalResult.oversizedSections;
|
|
349
|
+
logger.info(result, "Retention cleanup completed");
|
|
350
|
+
return result;
|
|
351
|
+
}
|
|
352
|
+
/**
|
|
353
|
+
* Compare two ISO week keys (`YYYY-Www` slugs) chronologically.
|
|
354
|
+
*
|
|
355
|
+
* Returns a negative number if `a` is older, a positive number if `a` is
|
|
356
|
+
* newer, zero if equal. Suitable as a sort comparator.
|
|
357
|
+
*
|
|
358
|
+
* Why not a plain string comparison? The `## Weekly YYYY-Www` header in
|
|
359
|
+
* `agent/journal.md` is written by an LLM following the review prompt.
|
|
360
|
+
* The prompt asks for zero-padded ISO week numbers, but compliance is
|
|
361
|
+
* probabilistic — the model may emit `2026-W5` instead of `2026-W05`,
|
|
362
|
+
* or a backfill may use a different convention. Lexicographic compare
|
|
363
|
+
* gets these wrong:
|
|
364
|
+
*
|
|
365
|
+
* "2026-W05" < "2026-W14" ✓ correct
|
|
366
|
+
* "2026-W14" < "2026-W5" ✗ wrong — W5 is chronologically earlier
|
|
367
|
+
*
|
|
368
|
+
* Parsing into `(year, weekNumber)` integers and comparing numerically
|
|
369
|
+
* fixes this without forcing the file to be rewritten into a canonical
|
|
370
|
+
* form (which would churn mtime on every rollup even when nothing real
|
|
371
|
+
* changed).
|
|
372
|
+
*
|
|
373
|
+
* ISO 8601 year boundaries are naturally handled: W52 of year N always
|
|
374
|
+
* parses as `{year: N, week: 52}` and W01 of year N+1 as `{year: N+1,
|
|
375
|
+
* week: 1}`, so the year field dominates the comparison. Years with 53
|
|
376
|
+
* ISO weeks (e.g. 2020, 2026) are handled identically — week 53 sorts
|
|
377
|
+
* after week 52 and before the next year's W01.
|
|
378
|
+
*
|
|
379
|
+
* If either key fails to parse (malformed input, unexpected format),
|
|
380
|
+
* the comparator falls back to a plain lexicographic string compare so
|
|
381
|
+
* sort still terminates with a stable ordering — it just may not be
|
|
382
|
+
* chronologically meaningful for that pair. The size-warning pass and
|
|
383
|
+
* dedup pass both still work correctly in that case.
|
|
384
|
+
*/
|
|
385
|
+
export function compareWeeklyKey(a, b) {
|
|
386
|
+
const pa = parseWeeklyKey(a);
|
|
387
|
+
const pb = parseWeeklyKey(b);
|
|
388
|
+
if (pa === null || pb === null) {
|
|
389
|
+
// Defensive fallback — preserve sort stability for unexpected input
|
|
390
|
+
if (a === b)
|
|
391
|
+
return 0;
|
|
392
|
+
return a < b ? -1 : 1;
|
|
393
|
+
}
|
|
394
|
+
if (pa.year !== pb.year)
|
|
395
|
+
return pa.year - pb.year;
|
|
396
|
+
return pa.week - pb.week;
|
|
397
|
+
}
|
|
398
|
+
/**
|
|
399
|
+
* Parse an ISO week key like `2026-W14` or `2026-W5` into its numeric
|
|
400
|
+
* components. Returns null for anything that does not match the expected
|
|
401
|
+
* shape. Accepts 1-to-2-digit week numbers to tolerate the non-padded
|
|
402
|
+
* form; the week number is range-checked (1..53) to catch typos that
|
|
403
|
+
* happen to lex as digits.
|
|
404
|
+
*/
|
|
405
|
+
function parseWeeklyKey(key) {
|
|
406
|
+
const match = key.match(/^(\d{4})-W(\d{1,2})$/);
|
|
407
|
+
if (!match)
|
|
408
|
+
return null;
|
|
409
|
+
const year = Number.parseInt(match[1], 10);
|
|
410
|
+
const week = Number.parseInt(match[2], 10);
|
|
411
|
+
if (!Number.isFinite(year) || !Number.isFinite(week))
|
|
412
|
+
return null;
|
|
413
|
+
if (week < 1 || week > 53)
|
|
414
|
+
return null;
|
|
415
|
+
return { year, week };
|
|
416
|
+
}
|
|
417
|
+
/**
|
|
418
|
+
* Compare two month keys (`YYYY-MM` slugs) chronologically.
|
|
419
|
+
*
|
|
420
|
+
* Same defensive parsing as `compareWeeklyKey` — the LLM may emit `2026-4`
|
|
421
|
+
* instead of `2026-04`, which lexicographic compare handles wrong
|
|
422
|
+
* (`"2026-4" > "2026-10"`). Falls back to lexicographic on parse failure.
|
|
423
|
+
*/
|
|
424
|
+
export function compareMonthlyKey(a, b) {
|
|
425
|
+
const pa = parseMonthlyKey(a);
|
|
426
|
+
const pb = parseMonthlyKey(b);
|
|
427
|
+
if (pa === null || pb === null) {
|
|
428
|
+
if (a === b)
|
|
429
|
+
return 0;
|
|
430
|
+
return a < b ? -1 : 1;
|
|
431
|
+
}
|
|
432
|
+
if (pa.year !== pb.year)
|
|
433
|
+
return pa.year - pb.year;
|
|
434
|
+
return pa.month - pb.month;
|
|
435
|
+
}
|
|
436
|
+
/**
|
|
437
|
+
* Parse a month key like `2026-04` or `2026-4` into its numeric components.
|
|
438
|
+
* Returns null for anything that does not match. Accepts 1-to-2-digit months
|
|
439
|
+
* and range-checks (1..12).
|
|
440
|
+
*/
|
|
441
|
+
function parseMonthlyKey(key) {
|
|
442
|
+
const match = key.match(/^(\d{4})-(\d{1,2})$/);
|
|
443
|
+
if (!match)
|
|
444
|
+
return null;
|
|
445
|
+
const year = Number.parseInt(match[1], 10);
|
|
446
|
+
const month = Number.parseInt(match[2], 10);
|
|
447
|
+
if (!Number.isFinite(year) || !Number.isFinite(month))
|
|
448
|
+
return null;
|
|
449
|
+
if (month < 1 || month > 12)
|
|
450
|
+
return null;
|
|
451
|
+
return { year, month };
|
|
452
|
+
}
|
|
453
|
+
function tableExists(db, table) {
|
|
454
|
+
const row = db
|
|
455
|
+
.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = ?")
|
|
456
|
+
.get(table);
|
|
457
|
+
return row !== undefined;
|
|
458
|
+
}
|
|
459
|
+
function daysAgoIso(days) {
|
|
460
|
+
return new Date(Date.now() - days * 86_400_000).toISOString();
|
|
461
|
+
}
|
|
462
|
+
const OPTIONAL_RETENTION_TABLES = new Set([
|
|
463
|
+
"auth_telemetry_counters",
|
|
464
|
+
"parse_failures",
|
|
465
|
+
"management_parse_failures",
|
|
466
|
+
]);
|
|
467
|
+
const OPTIONAL_RETENTION_COLUMNS = new Set(["bucket_hour", "created_at"]);
|
|
468
|
+
function deleteIsoOlderThanIfTableExists(db, table, dateColumn, days) {
|
|
469
|
+
if (!OPTIONAL_RETENTION_TABLES.has(table) || !OPTIONAL_RETENTION_COLUMNS.has(dateColumn)) {
|
|
470
|
+
throw new Error(`Invalid optional retention target: ${table}.${dateColumn}`);
|
|
471
|
+
}
|
|
472
|
+
if (!tableExists(db, table))
|
|
473
|
+
return 0;
|
|
474
|
+
const stmt = db.prepare(`DELETE FROM ${table} WHERE ${dateColumn} < ?`);
|
|
475
|
+
return stmt.run(daysAgoIso(days)).changes;
|
|
476
|
+
}
|
|
477
|
+
function deleteOlderThanButKeepLatestIfTableExists(db, table, dateColumn, days, keepLatest) {
|
|
478
|
+
if (!OPTIONAL_RETENTION_TABLES.has(table) || !OPTIONAL_RETENTION_COLUMNS.has(dateColumn)) {
|
|
479
|
+
throw new Error(`Invalid optional retention target: ${table}.${dateColumn}`);
|
|
480
|
+
}
|
|
481
|
+
if (!tableExists(db, table))
|
|
482
|
+
return 0;
|
|
483
|
+
const stmt = db.prepare(`DELETE FROM ${table}
|
|
484
|
+
WHERE ${dateColumn} < datetime('now', '-' || ? || ' days')
|
|
485
|
+
AND id NOT IN (
|
|
486
|
+
SELECT id FROM ${table}
|
|
487
|
+
ORDER BY id DESC
|
|
488
|
+
LIMIT ?
|
|
489
|
+
)`);
|
|
490
|
+
return stmt.run(days, keepLatest).changes;
|
|
491
|
+
}
|
|
492
|
+
function pruneMailMessagesIndex(db) {
|
|
493
|
+
if (!tableExists(db, "mail_messages_index"))
|
|
494
|
+
return 0;
|
|
495
|
+
return db
|
|
496
|
+
.prepare(`DELETE FROM mail_messages_index
|
|
497
|
+
WHERE (
|
|
498
|
+
deleted_at_utc IS NOT NULL
|
|
499
|
+
AND datetime(deleted_at_utc) < datetime('now', '-' || ? || ' days')
|
|
500
|
+
)
|
|
501
|
+
OR datetime(received_at_utc) < datetime('now', '-' || ? || ' days')`)
|
|
502
|
+
.run(RETENTION_DAYS.deletedMailMessagesIndex, RETENTION_DAYS.mailMessagesIndex).changes;
|
|
503
|
+
}
|
|
504
|
+
function abortStaleSkillCurationRuns(db) {
|
|
505
|
+
if (!tableExists(db, "skill_curation_runs"))
|
|
506
|
+
return 0;
|
|
507
|
+
const cutoff = Date.now() - RETENTION_DAYS.skillCurationRunningMaxHours * 60 * 60 * 1000;
|
|
508
|
+
return db
|
|
509
|
+
.prepare(`UPDATE skill_curation_runs
|
|
510
|
+
SET status = 'aborted',
|
|
511
|
+
finalized_at = ?,
|
|
512
|
+
notes = TRIM(COALESCE(notes || char(10), '') || ?)
|
|
513
|
+
WHERE status = 'running'
|
|
514
|
+
AND started_at < ?`)
|
|
515
|
+
.run(Date.now(), "aborted by retention: stale running optimizer run", cutoff).changes;
|
|
516
|
+
}
|
|
517
|
+
function pruneSkillCurationTables(db) {
|
|
518
|
+
let signals = 0;
|
|
519
|
+
let proposals = 0;
|
|
520
|
+
let runs = 0;
|
|
521
|
+
if (tableExists(db, "skill_curation_signals")) {
|
|
522
|
+
const unconsumedCutoff = Date.now() - RETENTION_DAYS.skillCurationSignals * 86_400_000;
|
|
523
|
+
const consumedCutoff = Date.now() - RETENTION_DAYS.skillCurationConsumedSignals * 86_400_000;
|
|
524
|
+
signals = db
|
|
525
|
+
.prepare(`DELETE FROM skill_curation_signals
|
|
526
|
+
WHERE (
|
|
527
|
+
consumed_at IS NOT NULL
|
|
528
|
+
AND consumed_at < ?
|
|
529
|
+
)
|
|
530
|
+
OR (
|
|
531
|
+
consumed_at IS NULL
|
|
532
|
+
AND observed_at < ?
|
|
533
|
+
)`)
|
|
534
|
+
.run(consumedCutoff, unconsumedCutoff).changes;
|
|
535
|
+
}
|
|
536
|
+
if (tableExists(db, "skill_curation_proposals")) {
|
|
537
|
+
const proposalCutoff = Date.now() - RETENTION_DAYS.skillCurationProposals * 86_400_000;
|
|
538
|
+
proposals = db
|
|
539
|
+
.prepare(`DELETE FROM skill_curation_proposals
|
|
540
|
+
WHERE proposed_at < ?`)
|
|
541
|
+
.run(proposalCutoff).changes;
|
|
542
|
+
}
|
|
543
|
+
if (tableExists(db, "skill_curation_runs")) {
|
|
544
|
+
const runCutoff = Date.now() - RETENTION_DAYS.skillCurationRuns * 86_400_000;
|
|
545
|
+
runs = db
|
|
546
|
+
.prepare(`DELETE FROM skill_curation_runs
|
|
547
|
+
WHERE status != 'running'
|
|
548
|
+
AND started_at < ?`)
|
|
549
|
+
.run(runCutoff).changes;
|
|
550
|
+
}
|
|
551
|
+
return { signals, proposals, runs };
|
|
552
|
+
}
|
|
553
|
+
function cleanupAttachments(db, dataDir) {
|
|
554
|
+
if (!tableExists(db, "chat_attachments")) {
|
|
555
|
+
return { orphanRows: 0, danglingRows: 0, untrackedDirs: 0 };
|
|
556
|
+
}
|
|
557
|
+
try {
|
|
558
|
+
const store = new AttachmentStore(db, dataDir);
|
|
559
|
+
const orphans = store.reapOrphans(24);
|
|
560
|
+
const danglingRows = store.reapDanglingMessageRefs();
|
|
561
|
+
const untrackedDirs = store.reapUntrackedDirs({ minAgeHours: 1 });
|
|
562
|
+
return {
|
|
563
|
+
orphanRows: orphans.inbound + orphans.outbound,
|
|
564
|
+
danglingRows,
|
|
565
|
+
untrackedDirs,
|
|
566
|
+
};
|
|
567
|
+
}
|
|
568
|
+
catch (err) {
|
|
569
|
+
logger.warn({ err }, "Attachment retention cleanup failed");
|
|
570
|
+
return { orphanRows: 0, danglingRows: 0, untrackedDirs: 0 };
|
|
571
|
+
}
|
|
572
|
+
}
|
|
573
|
+
/**
|
|
574
|
+
* Roll up `agent/journal.md` in place. Three independent passes applied in
|
|
575
|
+
* order to a single parsed section list:
|
|
576
|
+
*
|
|
577
|
+
* 1. **Dedup (last-write-wins).** If the same `## Weekly YYYY-Www` or
|
|
578
|
+
* `## Monthly YYYY-MM` appears more than once (e.g. the routine was
|
|
579
|
+
* re-run), keep only the section with the highest original index
|
|
580
|
+
* (most recent append) and drop the earlier copies.
|
|
581
|
+
* 2. **Age-based pruning.** After dedup, keep only the
|
|
582
|
+
* `keepWeeklySections` most recent `## Weekly YYYY-Www` sections and
|
|
583
|
+
* the `keepMonthlySections` most recent `## Monthly YYYY-MM` sections,
|
|
584
|
+
* sorted by their respective chronological keys.
|
|
585
|
+
* 3. **Size warning.** For each kept weekly or monthly section, if the
|
|
586
|
+
* UTF-8 byte length exceeds `sectionSizeWarnBytes`, log a warning.
|
|
587
|
+
* The content itself is never truncated — that would corrupt the
|
|
588
|
+
* agent's own reflection history mid-sentence. Operators should
|
|
589
|
+
* investigate the review prompt instead.
|
|
590
|
+
*
|
|
591
|
+
* Any H2 section that is neither `Weekly` nor `Monthly` is preserved
|
|
592
|
+
* untouched — a stray user-added `## Scratchpad` does not get eaten.
|
|
593
|
+
* Preamble above the first H2 (e.g. `# Agent Journal` header) is
|
|
594
|
+
* preserved verbatim.
|
|
595
|
+
*
|
|
596
|
+
* If the file does not exist, the function returns a zero result without
|
|
597
|
+
* touching the filesystem. If nothing would change (no dedup, no pruning),
|
|
598
|
+
* the file is not rewritten — avoiding unnecessary snapshot noise and
|
|
599
|
+
* mtime churn — but the size warning is still computed so the operator
|
|
600
|
+
* still sees bloated sections.
|
|
601
|
+
*/
|
|
602
|
+
export function rollupAgentJournal(filePath, keepWeeklySections, sectionSizeWarnBytes = AGENT_JOURNAL_ROLLUP.sectionSizeWarnBytes, keepMonthlySections = AGENT_JOURNAL_ROLLUP.keepMonthlySections,
|
|
603
|
+
/**
|
|
604
|
+
* Optional callback invoked with the current file content just before
|
|
605
|
+
* the rollup writes the pruned version. The caller can use this to save
|
|
606
|
+
* a snapshot (e.g. to `md_file_snapshots`) so the pre-rollup state is
|
|
607
|
+
* recoverable if the rollup logic has a bug. If the callback throws,
|
|
608
|
+
* the rollup still proceeds — snapshot failure should not block cleanup.
|
|
609
|
+
*/
|
|
610
|
+
onBeforeWrite) {
|
|
611
|
+
const empty = {
|
|
612
|
+
weeklyPruned: 0,
|
|
613
|
+
monthlyPruned: 0,
|
|
614
|
+
duplicatesCollapsed: 0,
|
|
615
|
+
oversizedSections: 0,
|
|
616
|
+
};
|
|
617
|
+
let content;
|
|
618
|
+
try {
|
|
619
|
+
content = readFileSync(filePath, "utf-8");
|
|
620
|
+
}
|
|
621
|
+
catch {
|
|
622
|
+
return empty; // File does not exist
|
|
623
|
+
}
|
|
624
|
+
const lines = content.split("\n");
|
|
625
|
+
const sectionStartLines = [];
|
|
626
|
+
for (let i = 0; i < lines.length; i++) {
|
|
627
|
+
if (lines[i].startsWith("## "))
|
|
628
|
+
sectionStartLines.push(i);
|
|
629
|
+
}
|
|
630
|
+
if (sectionStartLines.length === 0) {
|
|
631
|
+
return empty; // No H2 sections — nothing to roll up
|
|
632
|
+
}
|
|
633
|
+
const preamble = lines.slice(0, sectionStartLines[0]).join("\n");
|
|
634
|
+
const sections = [];
|
|
635
|
+
for (let i = 0; i < sectionStartLines.length; i++) {
|
|
636
|
+
const start = sectionStartLines[i];
|
|
637
|
+
const end = i + 1 < sectionStartLines.length ? sectionStartLines[i + 1] : lines.length;
|
|
638
|
+
const text = lines.slice(start, end).join("\n");
|
|
639
|
+
const header = lines[start];
|
|
640
|
+
const weeklyMatch = header.match(/^##\s+Weekly\s+(\S+)/);
|
|
641
|
+
const monthlyMatch = header.match(/^##\s+Monthly\s+(\S+)/);
|
|
642
|
+
if (weeklyMatch) {
|
|
643
|
+
sections.push({
|
|
644
|
+
kind: "weekly",
|
|
645
|
+
key: weeklyMatch[1],
|
|
646
|
+
originalIndex: i,
|
|
647
|
+
text,
|
|
648
|
+
});
|
|
649
|
+
}
|
|
650
|
+
else if (monthlyMatch) {
|
|
651
|
+
sections.push({
|
|
652
|
+
kind: "monthly",
|
|
653
|
+
key: monthlyMatch[1],
|
|
654
|
+
originalIndex: i,
|
|
655
|
+
text,
|
|
656
|
+
});
|
|
657
|
+
}
|
|
658
|
+
else {
|
|
659
|
+
sections.push({ kind: "other", key: "", originalIndex: i, text });
|
|
660
|
+
}
|
|
661
|
+
}
|
|
662
|
+
// ── Pass 1: dedup by (kind, key), last-write-wins ──
|
|
663
|
+
//
|
|
664
|
+
// Keep the highest originalIndex for each (kind, key). Drop the earlier
|
|
665
|
+
// copies. "other" sections never participate in dedup.
|
|
666
|
+
const latestByKey = new Map();
|
|
667
|
+
for (const s of sections) {
|
|
668
|
+
if (s.kind === "other")
|
|
669
|
+
continue;
|
|
670
|
+
const k = `${s.kind}:${s.key}`;
|
|
671
|
+
const prev = latestByKey.get(k);
|
|
672
|
+
if (prev === undefined || s.originalIndex > prev) {
|
|
673
|
+
latestByKey.set(k, s.originalIndex);
|
|
674
|
+
}
|
|
675
|
+
}
|
|
676
|
+
let duplicatesCollapsed = 0;
|
|
677
|
+
const afterDedup = [];
|
|
678
|
+
for (const s of sections) {
|
|
679
|
+
if (s.kind === "other") {
|
|
680
|
+
afterDedup.push(s);
|
|
681
|
+
continue;
|
|
682
|
+
}
|
|
683
|
+
const k = `${s.kind}:${s.key}`;
|
|
684
|
+
if (latestByKey.get(k) === s.originalIndex) {
|
|
685
|
+
afterDedup.push(s);
|
|
686
|
+
}
|
|
687
|
+
else {
|
|
688
|
+
duplicatesCollapsed++;
|
|
689
|
+
}
|
|
690
|
+
}
|
|
691
|
+
// ── Pass 2: age-based pruning of weekly and monthly sections ──
|
|
692
|
+
//
|
|
693
|
+
// After dedup, each key appears at most once per kind. Sort
|
|
694
|
+
// chronologically by parsed numeric keys and keep the most recent N.
|
|
695
|
+
const dedupedWeeklies = afterDedup.filter((s) => s.kind === "weekly");
|
|
696
|
+
let weeklyPruned = 0;
|
|
697
|
+
let keepWeeklyIndices;
|
|
698
|
+
if (dedupedWeeklies.length <= keepWeeklySections) {
|
|
699
|
+
keepWeeklyIndices = new Set(dedupedWeeklies.map((s) => s.originalIndex));
|
|
700
|
+
}
|
|
701
|
+
else {
|
|
702
|
+
const sortedWeeklies = [...dedupedWeeklies].sort((a, b) => {
|
|
703
|
+
const cmp = compareWeeklyKey(a.key, b.key);
|
|
704
|
+
if (cmp !== 0)
|
|
705
|
+
return cmp;
|
|
706
|
+
return a.originalIndex - b.originalIndex;
|
|
707
|
+
});
|
|
708
|
+
keepWeeklyIndices = new Set(sortedWeeklies.slice(-keepWeeklySections).map((s) => s.originalIndex));
|
|
709
|
+
weeklyPruned = dedupedWeeklies.length - keepWeeklyIndices.size;
|
|
710
|
+
}
|
|
711
|
+
// Monthly pruning — same logic as weekly but using YYYY-MM keys.
|
|
712
|
+
const dedupedMonthlies = afterDedup.filter((s) => s.kind === "monthly");
|
|
713
|
+
let monthlyPruned = 0;
|
|
714
|
+
let keepMonthlyIndices;
|
|
715
|
+
if (dedupedMonthlies.length <= keepMonthlySections) {
|
|
716
|
+
keepMonthlyIndices = new Set(dedupedMonthlies.map((s) => s.originalIndex));
|
|
717
|
+
}
|
|
718
|
+
else {
|
|
719
|
+
const sortedMonthlies = [...dedupedMonthlies].sort((a, b) => {
|
|
720
|
+
const cmp = compareMonthlyKey(a.key, b.key);
|
|
721
|
+
if (cmp !== 0)
|
|
722
|
+
return cmp;
|
|
723
|
+
return a.originalIndex - b.originalIndex;
|
|
724
|
+
});
|
|
725
|
+
keepMonthlyIndices = new Set(sortedMonthlies.slice(-keepMonthlySections).map((s) => s.originalIndex));
|
|
726
|
+
monthlyPruned = dedupedMonthlies.length - keepMonthlyIndices.size;
|
|
727
|
+
}
|
|
728
|
+
const finalKept = afterDedup.filter((s) => {
|
|
729
|
+
if (s.kind === "weekly")
|
|
730
|
+
return keepWeeklyIndices.has(s.originalIndex);
|
|
731
|
+
if (s.kind === "monthly")
|
|
732
|
+
return keepMonthlyIndices.has(s.originalIndex);
|
|
733
|
+
return true; // "other" preserved
|
|
734
|
+
});
|
|
735
|
+
// ── Pass 3: size warning on kept weekly/monthly sections ──
|
|
736
|
+
//
|
|
737
|
+
// Non-destructive: we log, but never truncate. Mid-sentence truncation
|
|
738
|
+
// of the agent's own self-reflection would be worse than the bloat.
|
|
739
|
+
let oversizedSections = 0;
|
|
740
|
+
for (const s of finalKept) {
|
|
741
|
+
if (s.kind === "other")
|
|
742
|
+
continue;
|
|
743
|
+
const bytes = Buffer.byteLength(s.text, "utf-8");
|
|
744
|
+
if (bytes > sectionSizeWarnBytes) {
|
|
745
|
+
oversizedSections++;
|
|
746
|
+
logger.warn({
|
|
747
|
+
file: filePath,
|
|
748
|
+
sectionKind: s.kind,
|
|
749
|
+
sectionKey: s.key,
|
|
750
|
+
bytes,
|
|
751
|
+
thresholdBytes: sectionSizeWarnBytes,
|
|
752
|
+
}, "agent-journal section exceeds size threshold — review prompt bullet caps may be ignored");
|
|
753
|
+
}
|
|
754
|
+
}
|
|
755
|
+
// ── Skip rewrite if nothing changed ──
|
|
756
|
+
//
|
|
757
|
+
// The file is only rewritten when dedup OR age-based pruning modified
|
|
758
|
+
// the section list. The size warning alone never triggers a rewrite —
|
|
759
|
+
// it is observability only. This avoids snapshot-table noise on quiet
|
|
760
|
+
// days and keeps mtime stable for the dashboard's optimistic concurrency.
|
|
761
|
+
if (duplicatesCollapsed === 0 && weeklyPruned === 0 && monthlyPruned === 0) {
|
|
762
|
+
return {
|
|
763
|
+
weeklyPruned: 0,
|
|
764
|
+
monthlyPruned: 0,
|
|
765
|
+
duplicatesCollapsed: 0,
|
|
766
|
+
oversizedSections,
|
|
767
|
+
};
|
|
768
|
+
}
|
|
769
|
+
const rebuilt = [
|
|
770
|
+
preamble.length > 0 ? preamble.replace(/\n+$/, "") : "",
|
|
771
|
+
...finalKept.map((s) => s.text.replace(/\n+$/, "")),
|
|
772
|
+
]
|
|
773
|
+
.filter((chunk, idx) => chunk.length > 0 || idx === 0)
|
|
774
|
+
.join("\n\n")
|
|
775
|
+
// Preserve a trailing newline if the original file had one
|
|
776
|
+
+ (content.endsWith("\n") ? "\n" : "");
|
|
777
|
+
// Snapshot the pre-rollup content so the operator can restore if
|
|
778
|
+
// the rollup logic over-prunes. This mirrors the snapshot behavior
|
|
779
|
+
// of the Context API's PUT/PATCH paths — the rollup was previously
|
|
780
|
+
// the only write path that bypassed the snapshot system.
|
|
781
|
+
if (onBeforeWrite) {
|
|
782
|
+
try {
|
|
783
|
+
onBeforeWrite(content);
|
|
784
|
+
}
|
|
785
|
+
catch (err) {
|
|
786
|
+
logger.warn({ err, file: filePath }, "Pre-rollup snapshot failed — proceeding with rollup anyway");
|
|
787
|
+
}
|
|
788
|
+
}
|
|
789
|
+
try {
|
|
790
|
+
writeFileSync(filePath, rebuilt, "utf-8");
|
|
791
|
+
logger.debug({
|
|
792
|
+
file: filePath,
|
|
793
|
+
weeklyPruned,
|
|
794
|
+
monthlyPruned,
|
|
795
|
+
duplicatesCollapsed,
|
|
796
|
+
oversizedSections,
|
|
797
|
+
}, "Rolled up agent-journal");
|
|
798
|
+
}
|
|
799
|
+
catch (err) {
|
|
800
|
+
logger.warn({ err, file: filePath }, "Failed to write rolled-up agent-journal — leaving file untouched");
|
|
801
|
+
return empty;
|
|
802
|
+
}
|
|
803
|
+
return { weeklyPruned, monthlyPruned, duplicatesCollapsed, oversizedSections };
|
|
804
|
+
}
|
|
805
|
+
/**
|
|
806
|
+
* Read-only health check for `agent/journal.md`. Returns section counts and
|
|
807
|
+
* any oversized sections without modifying the file. Intended for the health
|
|
808
|
+
* endpoint so the dashboard can surface journal bloat without requiring the
|
|
809
|
+
* operator to watch structured logs.
|
|
810
|
+
*/
|
|
811
|
+
export function checkAgentJournalHealth(filePath, sectionSizeWarnBytes = AGENT_JOURNAL_ROLLUP.sectionSizeWarnBytes) {
|
|
812
|
+
const empty = { exists: false, weeklySections: 0, monthlySections: 0, oversizedSections: [] };
|
|
813
|
+
let content;
|
|
814
|
+
try {
|
|
815
|
+
content = readFileSync(filePath, "utf-8");
|
|
816
|
+
}
|
|
817
|
+
catch {
|
|
818
|
+
return empty;
|
|
819
|
+
}
|
|
820
|
+
const lines = content.split("\n");
|
|
821
|
+
let weeklySections = 0;
|
|
822
|
+
let monthlySections = 0;
|
|
823
|
+
const oversizedSections = [];
|
|
824
|
+
// Find all H2 section boundaries
|
|
825
|
+
const sectionStarts = [];
|
|
826
|
+
for (let i = 0; i < lines.length; i++) {
|
|
827
|
+
if (lines[i].startsWith("## "))
|
|
828
|
+
sectionStarts.push(i);
|
|
829
|
+
}
|
|
830
|
+
for (let i = 0; i < sectionStarts.length; i++) {
|
|
831
|
+
const start = sectionStarts[i];
|
|
832
|
+
const end = i + 1 < sectionStarts.length ? sectionStarts[i + 1] : lines.length;
|
|
833
|
+
const header = lines[start];
|
|
834
|
+
const sectionText = lines.slice(start, end).join("\n");
|
|
835
|
+
const isWeekly = /^##\s+Weekly\s+/.test(header);
|
|
836
|
+
const isMonthly = /^##\s+Monthly\s+/.test(header);
|
|
837
|
+
if (isWeekly)
|
|
838
|
+
weeklySections++;
|
|
839
|
+
if (isMonthly)
|
|
840
|
+
monthlySections++;
|
|
841
|
+
if ((isWeekly || isMonthly) && Buffer.byteLength(sectionText, "utf-8") > sectionSizeWarnBytes) {
|
|
842
|
+
const key = header.replace(/^##\s+/, "").trim();
|
|
843
|
+
oversizedSections.push(key);
|
|
844
|
+
}
|
|
845
|
+
}
|
|
846
|
+
return { exists: true, weeklySections, monthlySections, oversizedSections };
|
|
847
|
+
}
|
|
848
|
+
/** Allowed tables and columns for retention cleanup (defense-in-depth against SQL injection) */
|
|
849
|
+
const ALLOWED_TABLES = new Set([
|
|
850
|
+
"md_file_snapshots",
|
|
851
|
+
"messages",
|
|
852
|
+
"agent_actions",
|
|
853
|
+
"notification_log",
|
|
854
|
+
"conversation_sessions",
|
|
855
|
+
"dm_conversation_log",
|
|
856
|
+
]);
|
|
857
|
+
const ALLOWED_COLUMNS = new Set(["created_at", "timestamp", "started_at", "last_message_at"]);
|
|
858
|
+
/** Delete rows older than N days from a table */
|
|
859
|
+
function deleteOlderThan(db, table, dateColumn, days) {
|
|
860
|
+
// Whitelist validation — these values come from hardcoded constants above,
|
|
861
|
+
// but we validate anyway as defense-in-depth
|
|
862
|
+
if (!ALLOWED_TABLES.has(table) || !ALLOWED_COLUMNS.has(dateColumn)) {
|
|
863
|
+
throw new Error(`Invalid retention target: ${table}.${dateColumn}`);
|
|
864
|
+
}
|
|
865
|
+
// table/dateColumn are whitelist-validated above (not user input), safe to interpolate.
|
|
866
|
+
// days is parameterized to maintain prepared-statement discipline.
|
|
867
|
+
const stmt = db.prepare(`DELETE FROM ${table} WHERE ${dateColumn} < datetime('now', '-' || ? || ' days')`);
|
|
868
|
+
const { changes } = stmt.run(days);
|
|
869
|
+
if (changes > 0) {
|
|
870
|
+
logger.debug({ table, deleted: changes, retentionDays: days }, "Cleaned up table");
|
|
871
|
+
}
|
|
872
|
+
return changes;
|
|
873
|
+
}
|
|
874
|
+
/** Remove .md files older than N days from a directory */
|
|
875
|
+
function cleanOldFiles(dir, days) {
|
|
876
|
+
let deleted = 0;
|
|
877
|
+
const cutoff = Date.now() - days * 24 * 60 * 60 * 1000;
|
|
878
|
+
let entries;
|
|
879
|
+
try {
|
|
880
|
+
entries = readdirSync(dir);
|
|
881
|
+
}
|
|
882
|
+
catch {
|
|
883
|
+
return 0; // Directory doesn't exist
|
|
884
|
+
}
|
|
885
|
+
for (const entry of entries) {
|
|
886
|
+
if (extname(entry) !== ".md")
|
|
887
|
+
continue;
|
|
888
|
+
const filePath = resolve(dir, entry);
|
|
889
|
+
try {
|
|
890
|
+
const stat = statSync(filePath);
|
|
891
|
+
if (stat.mtimeMs < cutoff) {
|
|
892
|
+
unlinkSync(filePath);
|
|
893
|
+
deleted++;
|
|
894
|
+
logger.debug({ file: entry }, "Removed expired file");
|
|
895
|
+
}
|
|
896
|
+
}
|
|
897
|
+
catch (err) {
|
|
898
|
+
logger.warn({ err, file: entry, dir }, "Failed to stat/remove expired file — will retry next run");
|
|
899
|
+
}
|
|
900
|
+
}
|
|
901
|
+
return deleted;
|
|
902
|
+
}
|
|
903
|
+
/** Remove files/directories from the daemon-owned tmp dir after a short TTL. */
|
|
904
|
+
function cleanTempFiles(dir, days) {
|
|
905
|
+
let deleted = 0;
|
|
906
|
+
const cutoff = Date.now() - days * 24 * 60 * 60 * 1000;
|
|
907
|
+
let entries;
|
|
908
|
+
try {
|
|
909
|
+
entries = readdirSync(dir);
|
|
910
|
+
}
|
|
911
|
+
catch {
|
|
912
|
+
return 0;
|
|
913
|
+
}
|
|
914
|
+
for (const entry of entries) {
|
|
915
|
+
const filePath = resolve(dir, entry);
|
|
916
|
+
try {
|
|
917
|
+
const stat = statSync(filePath);
|
|
918
|
+
if (stat.mtimeMs >= cutoff)
|
|
919
|
+
continue;
|
|
920
|
+
rmSync(filePath, { recursive: true, force: true });
|
|
921
|
+
deleted++;
|
|
922
|
+
}
|
|
923
|
+
catch (err) {
|
|
924
|
+
logger.warn({ err, file: entry, dir }, "Failed to remove expired tmp entry — will retry next run");
|
|
925
|
+
}
|
|
926
|
+
}
|
|
927
|
+
return deleted;
|
|
928
|
+
}
|
|
929
|
+
const ATOMIC_WRITE_TEMP_RE = /\.tmp\.\d+\.[0-9a-f]{16}$/;
|
|
930
|
+
const ATOMIC_TEMP_RECURSIVE_CONTEXT_DIRS = [
|
|
931
|
+
"agent",
|
|
932
|
+
"daily",
|
|
933
|
+
"git",
|
|
934
|
+
"rules",
|
|
935
|
+
"weekly",
|
|
936
|
+
];
|
|
937
|
+
/**
|
|
938
|
+
* Remove sidecar temp files left by writeFileAtomically after a failed unlink.
|
|
939
|
+
* The pattern is intentionally exact so retention does not touch arbitrary
|
|
940
|
+
* user-authored files under the context tree. We also keep the scan bounded:
|
|
941
|
+
* the active context can be a user's primary knowledge vault, so retention only
|
|
942
|
+
* scans the root plus known daemon-managed subtrees instead of walking the whole
|
|
943
|
+
* vault.
|
|
944
|
+
*/
|
|
945
|
+
function cleanAtomicTempFiles(dir, days) {
|
|
946
|
+
const cutoff = Date.now() - days * 24 * 60 * 60 * 1000;
|
|
947
|
+
let deleted = cleanAtomicTempFilesInner(dir, cutoff, false);
|
|
948
|
+
for (const child of ATOMIC_TEMP_RECURSIVE_CONTEXT_DIRS) {
|
|
949
|
+
deleted += cleanAtomicTempFilesInner(resolve(dir, child), cutoff, true);
|
|
950
|
+
}
|
|
951
|
+
return deleted;
|
|
952
|
+
}
|
|
953
|
+
function cleanAtomicTempFilesInner(dir, cutoff, recursive) {
|
|
954
|
+
let entries;
|
|
955
|
+
try {
|
|
956
|
+
entries = readdirSync(dir, { withFileTypes: true });
|
|
957
|
+
}
|
|
958
|
+
catch {
|
|
959
|
+
return 0;
|
|
960
|
+
}
|
|
961
|
+
let deleted = 0;
|
|
962
|
+
for (const entry of entries) {
|
|
963
|
+
const filePath = resolve(dir, entry.name);
|
|
964
|
+
if (entry.isDirectory()) {
|
|
965
|
+
if (recursive) {
|
|
966
|
+
deleted += cleanAtomicTempFilesInner(filePath, cutoff, true);
|
|
967
|
+
}
|
|
968
|
+
continue;
|
|
969
|
+
}
|
|
970
|
+
if (!entry.isFile())
|
|
971
|
+
continue;
|
|
972
|
+
if (!ATOMIC_WRITE_TEMP_RE.test(entry.name))
|
|
973
|
+
continue;
|
|
974
|
+
try {
|
|
975
|
+
const stat = statSync(filePath);
|
|
976
|
+
if (stat.mtimeMs >= cutoff)
|
|
977
|
+
continue;
|
|
978
|
+
unlinkSync(filePath);
|
|
979
|
+
deleted++;
|
|
980
|
+
}
|
|
981
|
+
catch (err) {
|
|
982
|
+
logger.warn({ err, file: entry.name, dir }, "Failed to remove atomic temp file — will retry next run");
|
|
983
|
+
}
|
|
984
|
+
}
|
|
985
|
+
return deleted;
|
|
986
|
+
}
|
|
987
|
+
/**
|
|
988
|
+
* Walk `<contextDir>/git/<slug>/journal/` directories and prune `.md`
|
|
989
|
+
* entries older than `days`. The `git/<slug>/overview.md` files are
|
|
990
|
+
* permanent — never touched here. See
|
|
991
|
+
* `docs/design/appendices/unified-repositories.md` §4.5.
|
|
992
|
+
*/
|
|
993
|
+
function cleanGitJournals(gitDir, days) {
|
|
994
|
+
let deleted = 0;
|
|
995
|
+
let slugDirs;
|
|
996
|
+
try {
|
|
997
|
+
slugDirs = readdirSync(gitDir);
|
|
998
|
+
}
|
|
999
|
+
catch {
|
|
1000
|
+
return 0;
|
|
1001
|
+
}
|
|
1002
|
+
for (const slug of slugDirs) {
|
|
1003
|
+
const journalDir = resolve(gitDir, slug, "journal");
|
|
1004
|
+
deleted += cleanOldFiles(journalDir, days);
|
|
1005
|
+
}
|
|
1006
|
+
return deleted;
|
|
1007
|
+
}
|
|
1008
|
+
//# sourceMappingURL=retention.js.map
|