@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,934 @@
|
|
|
1
|
+
import { chmodSync, closeSync, existsSync, linkSync, mkdirSync, openSync, readdirSync, readSync, renameSync, rmSync, statSync, symlinkSync, readlinkSync, copyFileSync, lstatSync, unlinkSync, utimesSync, } from "node:fs";
|
|
2
|
+
import { join, relative, dirname } from "node:path";
|
|
3
|
+
import { execFileSync } from "node:child_process";
|
|
4
|
+
import { createHash } from "node:crypto";
|
|
5
|
+
import { createLogger } from "../logging.js";
|
|
6
|
+
const logger = createLogger("migration-backup");
|
|
7
|
+
const ICLOUD_EVICTED_XATTRS = [
|
|
8
|
+
"com.apple.fileprovider.evicted",
|
|
9
|
+
"com.apple.FileProviderExtendedAttributes",
|
|
10
|
+
];
|
|
11
|
+
const CROSS_FS_HASH_RETRY_BACKOFF_MS = [100, 1000, 10_000];
|
|
12
|
+
export class MigrationFsError extends Error {
|
|
13
|
+
code;
|
|
14
|
+
path;
|
|
15
|
+
constructor(code, message, path) {
|
|
16
|
+
super(message);
|
|
17
|
+
this.code = code;
|
|
18
|
+
this.path = path;
|
|
19
|
+
this.name = "MigrationFsError";
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
function sleepMs(ms) {
|
|
23
|
+
Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms);
|
|
24
|
+
}
|
|
25
|
+
function removeTreeIfExists(absPath) {
|
|
26
|
+
try {
|
|
27
|
+
if (existsSync(absPath)) {
|
|
28
|
+
rmSync(absPath, { recursive: true, force: true });
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
catch (err) {
|
|
32
|
+
logger.warn({ err, absPath }, "Failed to clean up path");
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function removeMigratedTopLevelEntries(targetDir, sourceEntries) {
|
|
36
|
+
for (const name of sourceEntries) {
|
|
37
|
+
removeTreeIfExists(join(targetDir, name));
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function listXattrs(absPath) {
|
|
41
|
+
if (process.platform !== "darwin")
|
|
42
|
+
return [];
|
|
43
|
+
try {
|
|
44
|
+
const stdout = execFileSync("xattr", [absPath], {
|
|
45
|
+
stdio: "pipe",
|
|
46
|
+
encoding: "utf-8",
|
|
47
|
+
}).trim();
|
|
48
|
+
return stdout.length > 0
|
|
49
|
+
? stdout.split("\n").map((line) => line.trim()).filter(Boolean)
|
|
50
|
+
: [];
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
return [];
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
function hasEvictedXattr(absPath) {
|
|
57
|
+
if (process.platform !== "darwin")
|
|
58
|
+
return false;
|
|
59
|
+
return ICLOUD_EVICTED_XATTRS.some((attr) => {
|
|
60
|
+
try {
|
|
61
|
+
const value = execFileSync("xattr", ["-p", attr, absPath], {
|
|
62
|
+
stdio: "pipe",
|
|
63
|
+
encoding: "utf-8",
|
|
64
|
+
}).trim();
|
|
65
|
+
return value !== "" && value !== "0";
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
function ensureHydratedFile(absPath) {
|
|
73
|
+
// `brctl` is the macOS iCloud Drive hydration CLI and does not exist
|
|
74
|
+
// on Linux/Windows. The `hasEvictedXattr` short-circuit below also
|
|
75
|
+
// returns false off darwin, but pulling the platform check up front
|
|
76
|
+
// makes this safe even if a future caller bypasses xattr inspection.
|
|
77
|
+
if (process.platform !== "darwin")
|
|
78
|
+
return;
|
|
79
|
+
if (!lstatSync(absPath).isFile() || !hasEvictedXattr(absPath)) {
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
try {
|
|
83
|
+
execFileSync("brctl", ["download", absPath], { stdio: "pipe" });
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
throw new MigrationFsError("icloud_file_evicted", `File is evicted from local storage and could not be hydrated: ${absPath}`, absPath);
|
|
87
|
+
}
|
|
88
|
+
const deadline = Date.now() + 30_000;
|
|
89
|
+
while (Date.now() < deadline) {
|
|
90
|
+
if (!hasEvictedXattr(absPath)) {
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
sleepMs(250);
|
|
94
|
+
}
|
|
95
|
+
throw new MigrationFsError("icloud_file_evicted", `File remained evicted after hydration attempt: ${absPath}`, absPath);
|
|
96
|
+
}
|
|
97
|
+
function copyXattrsBestEffort(absSrc, absDst) {
|
|
98
|
+
if (process.platform !== "darwin")
|
|
99
|
+
return;
|
|
100
|
+
for (const attr of listXattrs(absSrc)) {
|
|
101
|
+
try {
|
|
102
|
+
const hexValue = execFileSync("xattr", ["-px", attr, absSrc], {
|
|
103
|
+
stdio: "pipe",
|
|
104
|
+
encoding: "utf-8",
|
|
105
|
+
}).trim();
|
|
106
|
+
if (hexValue.length === 0)
|
|
107
|
+
continue;
|
|
108
|
+
execFileSync("xattr", ["-wx", attr, hexValue, absDst], { stdio: "pipe" });
|
|
109
|
+
}
|
|
110
|
+
catch (err) {
|
|
111
|
+
logger.warn({ err, absSrc, absDst, attr }, "Best-effort xattr copy failed");
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Recreate at `absDst` whatever symlink-ish thing lives at `absSrc`.
|
|
117
|
+
*
|
|
118
|
+
* On Windows, creating symlinks requires `SeCreateSymbolicLinkPrivilege`
|
|
119
|
+
* (Developer Mode or elevation). When that privilege is missing,
|
|
120
|
+
* `symlinkSync` throws EPERM/EACCES — we degrade to copying the symlink's
|
|
121
|
+
* resolved file content so the migration still completes. Directory and
|
|
122
|
+
* broken-link targets are logged and skipped (recursively copying through
|
|
123
|
+
* symlinked directories is risky in agent context dirs and well outside
|
|
124
|
+
* the expected shape).
|
|
125
|
+
*
|
|
126
|
+
* Defensive lstat first: a forward-flow caller passes a path that IS a
|
|
127
|
+
* symlink, but the rollback path (`restoreFromBackup`,
|
|
128
|
+
* `restoreOverwrittenTargetEntries`, `restoreDirectory`) reads from a
|
|
129
|
+
* backup directory whose "symlink" manifest entry may have been
|
|
130
|
+
* lossy-copied to a regular file on a previous Windows pass. In that
|
|
131
|
+
* round-trip case `readlinkSync` would throw EINVAL and abort rollback —
|
|
132
|
+
* the lstat branch turns it into a regular file copy instead, preserving
|
|
133
|
+
* the data the user already has on disk.
|
|
134
|
+
*
|
|
135
|
+
* Verification (`verifyMoveCompleted`, `verifyTreeSha256`) only size- and
|
|
136
|
+
* hash-checks `entry.kind === "file"` entries, so a symlink-replaced-with-
|
|
137
|
+
* file at the destination still passes both checks for the original
|
|
138
|
+
* `symlink` manifest entry.
|
|
139
|
+
*/
|
|
140
|
+
function mirrorSymlink(absSrc, absDst) {
|
|
141
|
+
let srcStat;
|
|
142
|
+
try {
|
|
143
|
+
srcStat = lstatSync(absSrc);
|
|
144
|
+
}
|
|
145
|
+
catch (err) {
|
|
146
|
+
logger.warn({ err, absSrc, absDst }, "mirrorSymlink: source missing — skipping");
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
if (!srcStat.isSymbolicLink()) {
|
|
150
|
+
// Round-trip case: a previous Windows pass already lossy-copied this
|
|
151
|
+
// entry. Mirror the regular file directly. Non-file content (a
|
|
152
|
+
// directory under a "symlink" manifest entry) shouldn't reach here
|
|
153
|
+
// under any legitimate flow — log and skip rather than recurse.
|
|
154
|
+
if (srcStat.isFile()) {
|
|
155
|
+
copyFileSync(absSrc, absDst);
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
logger.warn({ absSrc, absDst, kind: srcStat.isDirectory() ? "dir" : "other" }, "mirrorSymlink: source is neither symlink nor regular file — skipping");
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
const target = readlinkSync(absSrc);
|
|
162
|
+
try {
|
|
163
|
+
symlinkSync(target, absDst);
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
catch (err) {
|
|
167
|
+
const code = err.code;
|
|
168
|
+
const isWindowsPrivilegeError = process.platform === "win32" && (code === "EPERM" || code === "EACCES");
|
|
169
|
+
if (!isWindowsPrivilegeError) {
|
|
170
|
+
throw err;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
// Windows fallback: copy what the symlink resolves to so the data is
|
|
174
|
+
// preserved even though the link semantics are lost.
|
|
175
|
+
try {
|
|
176
|
+
const st = statSync(absSrc);
|
|
177
|
+
if (st.isFile()) {
|
|
178
|
+
copyFileSync(absSrc, absDst);
|
|
179
|
+
logger.warn({ absSrc, absDst, target }, "Windows: replaced symlink with file copy (no SeCreateSymbolicLinkPrivilege)");
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
logger.warn({ absSrc, absDst, target, kind: st.isDirectory() ? "dir" : "other" }, "Windows: skipping non-file symlink (no SeCreateSymbolicLinkPrivilege)");
|
|
183
|
+
}
|
|
184
|
+
catch (statErr) {
|
|
185
|
+
logger.warn({ statErr, absSrc, absDst, target }, "Windows: skipping broken or unresolvable symlink (no SeCreateSymbolicLinkPrivilege)");
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
function preserveMetadataBestEffort(absSrc, absDst) {
|
|
189
|
+
try {
|
|
190
|
+
const st = statSync(absSrc);
|
|
191
|
+
chmodSync(absDst, st.mode & 0o7777);
|
|
192
|
+
utimesSync(absDst, st.atime, st.mtime);
|
|
193
|
+
}
|
|
194
|
+
catch (err) {
|
|
195
|
+
logger.warn({ err, absSrc, absDst }, "Best-effort metadata copy failed");
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
function hashFileSha256(absPath) {
|
|
199
|
+
const fd = openSync(absPath, "r");
|
|
200
|
+
const hash = createHash("sha256");
|
|
201
|
+
const buffer = Buffer.allocUnsafe(64 * 1024);
|
|
202
|
+
try {
|
|
203
|
+
while (true) {
|
|
204
|
+
const bytes = readSync(fd, buffer, 0, buffer.length, null);
|
|
205
|
+
if (bytes === 0)
|
|
206
|
+
break;
|
|
207
|
+
hash.update(buffer.subarray(0, bytes));
|
|
208
|
+
}
|
|
209
|
+
return hash.digest("hex");
|
|
210
|
+
}
|
|
211
|
+
finally {
|
|
212
|
+
closeSync(fd);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
function verifyCopiedFileSha256(absSrc, absDst) {
|
|
216
|
+
const srcHash = hashFileSha256(absSrc);
|
|
217
|
+
const dstHash = hashFileSha256(absDst);
|
|
218
|
+
if (srcHash !== dstHash) {
|
|
219
|
+
throw new MigrationFsError("cross_fs_partial_failure", `SHA-256 mismatch after cross-filesystem copy: ${absSrc}`, absSrc);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
function verifyTreeSha256(manifest, sourceDir, targetDir) {
|
|
223
|
+
for (const entry of manifest.files) {
|
|
224
|
+
if (entry.kind !== "file")
|
|
225
|
+
continue;
|
|
226
|
+
const absSrc = join(sourceDir, entry.rel);
|
|
227
|
+
const absDst = join(targetDir, entry.rel);
|
|
228
|
+
ensureHydratedFile(absSrc);
|
|
229
|
+
verifyCopiedFileSha256(absSrc, absDst);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
function copyFileWithVerification(absSrc, absDst) {
|
|
233
|
+
ensureHydratedFile(absSrc);
|
|
234
|
+
let lastError;
|
|
235
|
+
for (const backoffMs of [...CROSS_FS_HASH_RETRY_BACKOFF_MS, null]) {
|
|
236
|
+
try {
|
|
237
|
+
copyFileSync(absSrc, absDst);
|
|
238
|
+
copyXattrsBestEffort(absSrc, absDst);
|
|
239
|
+
preserveMetadataBestEffort(absSrc, absDst);
|
|
240
|
+
verifyCopiedFileSha256(absSrc, absDst);
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
catch (err) {
|
|
244
|
+
lastError = err;
|
|
245
|
+
removeTreeIfExists(absDst);
|
|
246
|
+
if (backoffMs !== null) {
|
|
247
|
+
sleepMs(backoffMs);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
if (lastError instanceof MigrationFsError) {
|
|
252
|
+
throw lastError;
|
|
253
|
+
}
|
|
254
|
+
throw new MigrationFsError("cross_fs_partial_failure", `Cross-filesystem copy verification failed for ${absSrc}`, absSrc);
|
|
255
|
+
}
|
|
256
|
+
function copyTreeNodeCrossFs(sourceDir, targetDir, manifest) {
|
|
257
|
+
const dirs = [];
|
|
258
|
+
for (const entry of manifest.files) {
|
|
259
|
+
const absSrc = join(sourceDir, entry.rel);
|
|
260
|
+
const absDst = join(targetDir, entry.rel);
|
|
261
|
+
if (entry.kind === "dir") {
|
|
262
|
+
mkdirSync(absDst, { recursive: true, mode: entry.mode & 0o7777 });
|
|
263
|
+
dirs.push(entry.rel);
|
|
264
|
+
continue;
|
|
265
|
+
}
|
|
266
|
+
mkdirSync(dirname(absDst), { recursive: true });
|
|
267
|
+
if (entry.kind === "symlink") {
|
|
268
|
+
mirrorSymlink(absSrc, absDst);
|
|
269
|
+
continue;
|
|
270
|
+
}
|
|
271
|
+
copyFileWithVerification(absSrc, absDst);
|
|
272
|
+
}
|
|
273
|
+
for (const rel of dirs.reverse()) {
|
|
274
|
+
preserveMetadataBestEffort(join(sourceDir, rel), join(targetDir, rel));
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Recursively walk a directory, returning every entry as a manifest.
|
|
279
|
+
* Symlinks are recorded (not dereferenced) so they survive move/restore.
|
|
280
|
+
* The root directory itself is NOT included.
|
|
281
|
+
*/
|
|
282
|
+
export function inspectDir(rootDir) {
|
|
283
|
+
const files = [];
|
|
284
|
+
let totalBytes = 0;
|
|
285
|
+
function walk(absDir) {
|
|
286
|
+
let entries;
|
|
287
|
+
try {
|
|
288
|
+
entries = readdirSync(absDir);
|
|
289
|
+
}
|
|
290
|
+
catch (err) {
|
|
291
|
+
logger.warn({ err, dir: absDir }, "inspectDir: readdir failed, skipping");
|
|
292
|
+
return;
|
|
293
|
+
}
|
|
294
|
+
for (const name of entries) {
|
|
295
|
+
const abs = join(absDir, name);
|
|
296
|
+
const rel = relative(rootDir, abs);
|
|
297
|
+
let st;
|
|
298
|
+
try {
|
|
299
|
+
st = lstatSync(abs);
|
|
300
|
+
}
|
|
301
|
+
catch (err) {
|
|
302
|
+
logger.warn({ err, path: abs }, "inspectDir: lstat failed, skipping");
|
|
303
|
+
continue;
|
|
304
|
+
}
|
|
305
|
+
if (st.isSymbolicLink()) {
|
|
306
|
+
files.push({ rel, bytes: 0, mode: st.mode, kind: "symlink" });
|
|
307
|
+
}
|
|
308
|
+
else if (st.isDirectory()) {
|
|
309
|
+
files.push({ rel, bytes: 0, mode: st.mode, kind: "dir" });
|
|
310
|
+
walk(abs);
|
|
311
|
+
}
|
|
312
|
+
else if (st.isFile()) {
|
|
313
|
+
totalBytes += st.size;
|
|
314
|
+
files.push({ rel, bytes: st.size, mode: st.mode, kind: "file" });
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
if (existsSync(rootDir))
|
|
319
|
+
walk(rootDir);
|
|
320
|
+
return { files, totalBytes };
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Plan §6.4 — the set of files/directories the agent considers its own.
|
|
324
|
+
* Used by the conflict detector to decide whether a target pre-existing
|
|
325
|
+
* file is an agent-file collision (needs policy) or foreign content
|
|
326
|
+
* (interleave vs abort).
|
|
327
|
+
*
|
|
328
|
+
* Keep this list synced with the top-level contents written by setup
|
|
329
|
+
* and the morning/evening routines. A new top-level path that the agent
|
|
330
|
+
* writes MUST be added here, or a migration could silently overwrite
|
|
331
|
+
* user data that happens to share the name.
|
|
332
|
+
*/
|
|
333
|
+
export const AGENT_FILE_TOP_LEVEL = new Set([
|
|
334
|
+
"today.md",
|
|
335
|
+
"yesterday.md",
|
|
336
|
+
"roadmap.md",
|
|
337
|
+
"_index.md",
|
|
338
|
+
"context-index.md",
|
|
339
|
+
"agent-journal.md",
|
|
340
|
+
"user.md",
|
|
341
|
+
"agent",
|
|
342
|
+
"bases",
|
|
343
|
+
"daily",
|
|
344
|
+
"dossiers",
|
|
345
|
+
"git",
|
|
346
|
+
"git-repos",
|
|
347
|
+
"inbox",
|
|
348
|
+
"monthly",
|
|
349
|
+
"projects",
|
|
350
|
+
"routines",
|
|
351
|
+
"rules",
|
|
352
|
+
"schedule",
|
|
353
|
+
"user",
|
|
354
|
+
"user-details",
|
|
355
|
+
"weekly",
|
|
356
|
+
]);
|
|
357
|
+
/**
|
|
358
|
+
* Entries the migration silently ignores in a target directory — either
|
|
359
|
+
* benign (Obsidian bookkeeping files that should stay in place) or
|
|
360
|
+
* platform cruft (macOS `.DS_Store`). A target containing ONLY these
|
|
361
|
+
* is treated as effectively empty and allowed under every conflict policy.
|
|
362
|
+
*/
|
|
363
|
+
const BENIGN_TARGET_ENTRIES = new Set([
|
|
364
|
+
".obsidian",
|
|
365
|
+
".DS_Store",
|
|
366
|
+
]);
|
|
367
|
+
/**
|
|
368
|
+
* True when `dir` contains no regular files anywhere in its subtree —
|
|
369
|
+
* only directories and symlinks. Used by `inspectTarget` to filter out
|
|
370
|
+
* stale skeleton scaffolding (the daemon's own `ensureSkeletonFiles`
|
|
371
|
+
* mkdirs every CONTEXT_DIR_NAMES entry on every boot, and a previous
|
|
372
|
+
* plain → obsidian migration leaves those empty dirs behind at the
|
|
373
|
+
* data dir). Such residue is by definition not user content and must
|
|
374
|
+
* not block a rollback under `policy: "abort"`.
|
|
375
|
+
*
|
|
376
|
+
* Symlinks are treated as files for safety — a stale symlink could
|
|
377
|
+
* point at user data we shouldn't quietly overwrite.
|
|
378
|
+
*/
|
|
379
|
+
function dirHasNoFiles(dir) {
|
|
380
|
+
let entries;
|
|
381
|
+
try {
|
|
382
|
+
entries = readdirSync(dir);
|
|
383
|
+
}
|
|
384
|
+
catch {
|
|
385
|
+
return false;
|
|
386
|
+
}
|
|
387
|
+
for (const name of entries) {
|
|
388
|
+
const child = join(dir, name);
|
|
389
|
+
let st;
|
|
390
|
+
try {
|
|
391
|
+
st = lstatSync(child);
|
|
392
|
+
}
|
|
393
|
+
catch {
|
|
394
|
+
return false;
|
|
395
|
+
}
|
|
396
|
+
if (st.isDirectory()) {
|
|
397
|
+
if (!dirHasNoFiles(child))
|
|
398
|
+
return false;
|
|
399
|
+
continue;
|
|
400
|
+
}
|
|
401
|
+
return false;
|
|
402
|
+
}
|
|
403
|
+
return true;
|
|
404
|
+
}
|
|
405
|
+
/**
|
|
406
|
+
* Classify the target directory state. Entries that appear under the
|
|
407
|
+
* agent's own top-level set AND also exist in the source are flagged as
|
|
408
|
+
* agent-file conflicts; everything else under the target is "foreign"
|
|
409
|
+
* content the user put there (or an untracked leftover).
|
|
410
|
+
*
|
|
411
|
+
* Works off top-level names rather than a full recursive diff because
|
|
412
|
+
* the plan's policies are framed at the file-set level (whole
|
|
413
|
+
* `projects/` subtree either moves intact or aborts), and a recursive
|
|
414
|
+
* diff would be O(both trees) for no extra safety. The one recursive
|
|
415
|
+
* walk we do — `dirHasNoFiles` — only runs on top-level directories
|
|
416
|
+
* (typically <20) and short-circuits on the first file, so it's cheap.
|
|
417
|
+
*/
|
|
418
|
+
export function inspectTarget(targetDir, sourceEntries) {
|
|
419
|
+
if (!existsSync(targetDir)) {
|
|
420
|
+
return {
|
|
421
|
+
targetExists: false,
|
|
422
|
+
targetIsEmpty: true,
|
|
423
|
+
foreignEntries: [],
|
|
424
|
+
agentFileConflicts: [],
|
|
425
|
+
};
|
|
426
|
+
}
|
|
427
|
+
// Filter out benign bookkeeping entries AND empty-directory residue
|
|
428
|
+
// that the skeleton seeder leaves behind. An empty dir, even one with
|
|
429
|
+
// empty subdirs, is scaffolding the daemon owns — never user content.
|
|
430
|
+
const entries = readdirSync(targetDir).filter((name) => {
|
|
431
|
+
if (BENIGN_TARGET_ENTRIES.has(name))
|
|
432
|
+
return false;
|
|
433
|
+
const abs = join(targetDir, name);
|
|
434
|
+
let st;
|
|
435
|
+
try {
|
|
436
|
+
st = lstatSync(abs);
|
|
437
|
+
}
|
|
438
|
+
catch {
|
|
439
|
+
return true;
|
|
440
|
+
}
|
|
441
|
+
if (st.isDirectory() && dirHasNoFiles(abs))
|
|
442
|
+
return false;
|
|
443
|
+
return true;
|
|
444
|
+
});
|
|
445
|
+
if (entries.length === 0) {
|
|
446
|
+
return {
|
|
447
|
+
targetExists: true,
|
|
448
|
+
targetIsEmpty: true,
|
|
449
|
+
foreignEntries: [],
|
|
450
|
+
agentFileConflicts: [],
|
|
451
|
+
};
|
|
452
|
+
}
|
|
453
|
+
const foreignEntries = [];
|
|
454
|
+
const agentFileConflicts = [];
|
|
455
|
+
for (const name of entries) {
|
|
456
|
+
const isAgentName = AGENT_FILE_TOP_LEVEL.has(name);
|
|
457
|
+
const overlapsSource = sourceEntries.has(name);
|
|
458
|
+
if (isAgentName && overlapsSource) {
|
|
459
|
+
agentFileConflicts.push(name);
|
|
460
|
+
}
|
|
461
|
+
else {
|
|
462
|
+
foreignEntries.push(name);
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
return {
|
|
466
|
+
targetExists: true,
|
|
467
|
+
targetIsEmpty: false,
|
|
468
|
+
foreignEntries,
|
|
469
|
+
agentFileConflicts,
|
|
470
|
+
};
|
|
471
|
+
}
|
|
472
|
+
export function resolveConflictPolicy(report, policy) {
|
|
473
|
+
if (!report.targetExists || report.targetIsEmpty) {
|
|
474
|
+
return { ok: true };
|
|
475
|
+
}
|
|
476
|
+
if (report.foreignEntries.length > 0 && policy === "abort") {
|
|
477
|
+
return {
|
|
478
|
+
ok: false,
|
|
479
|
+
error: "target_has_unrelated_files",
|
|
480
|
+
entries: report.foreignEntries,
|
|
481
|
+
};
|
|
482
|
+
}
|
|
483
|
+
if (report.agentFileConflicts.length > 0) {
|
|
484
|
+
if (policy === "abort" || policy === "merge") {
|
|
485
|
+
return {
|
|
486
|
+
ok: false,
|
|
487
|
+
error: "target_has_agent_file_conflicts",
|
|
488
|
+
entries: report.agentFileConflicts,
|
|
489
|
+
};
|
|
490
|
+
}
|
|
491
|
+
// "overwrite_agent_files": proceed.
|
|
492
|
+
}
|
|
493
|
+
return { ok: true };
|
|
494
|
+
}
|
|
495
|
+
/**
|
|
496
|
+
* Detect whether two paths sit on the same filesystem via their stat
|
|
497
|
+
* device numbers. If either path doesn't exist, walks up to the nearest
|
|
498
|
+
* existing ancestor (same strategy as the config-level realpath helper).
|
|
499
|
+
*/
|
|
500
|
+
export function onSameFilesystem(a, b) {
|
|
501
|
+
const devOf = (p) => {
|
|
502
|
+
let cur = p;
|
|
503
|
+
while (cur && cur !== "/" && cur !== ".") {
|
|
504
|
+
try {
|
|
505
|
+
return statSync(cur).dev;
|
|
506
|
+
}
|
|
507
|
+
catch {
|
|
508
|
+
cur = dirname(cur);
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
try {
|
|
512
|
+
return statSync("/").dev;
|
|
513
|
+
}
|
|
514
|
+
catch {
|
|
515
|
+
return null;
|
|
516
|
+
}
|
|
517
|
+
};
|
|
518
|
+
const devA = devOf(a);
|
|
519
|
+
const devB = devOf(b);
|
|
520
|
+
return devA !== null && devB !== null && devA === devB;
|
|
521
|
+
}
|
|
522
|
+
/**
|
|
523
|
+
* Create a point-in-time backup of `sourceDir` under `backupDir`.
|
|
524
|
+
*
|
|
525
|
+
* Same-filesystem: every file is created as a hardlink to its source
|
|
526
|
+
* counterpart. This is O(1) per file with zero extra disk. Directories
|
|
527
|
+
* and symlinks are recreated literally. The hardlink aliasing means the
|
|
528
|
+
* backup tracks subsequent source mutations — callers running a
|
|
529
|
+
* migration must call `finalizeBackup` after the move so post-migration
|
|
530
|
+
* writes cannot mutate the rollback copy.
|
|
531
|
+
*
|
|
532
|
+
* Cross-filesystem: files are copy_file_range'd (or the node copy
|
|
533
|
+
* fallback). Slower but creates a genuinely independent snapshot so no
|
|
534
|
+
* finalization is required.
|
|
535
|
+
*/
|
|
536
|
+
export function createBackup(sourceDir, backupDir) {
|
|
537
|
+
if (existsSync(backupDir)) {
|
|
538
|
+
throw new Error(`Backup directory already exists: ${backupDir}`);
|
|
539
|
+
}
|
|
540
|
+
mkdirSync(backupDir, { recursive: true });
|
|
541
|
+
const manifest = inspectDir(sourceDir);
|
|
542
|
+
const hardlinked = onSameFilesystem(sourceDir, backupDir);
|
|
543
|
+
try {
|
|
544
|
+
for (const entry of manifest.files) {
|
|
545
|
+
const absSrc = join(sourceDir, entry.rel);
|
|
546
|
+
const absDst = join(backupDir, entry.rel);
|
|
547
|
+
if (entry.kind === "dir") {
|
|
548
|
+
mkdirSync(absDst, { recursive: true, mode: entry.mode & 0o7777 });
|
|
549
|
+
}
|
|
550
|
+
else if (entry.kind === "symlink") {
|
|
551
|
+
mkdirSync(dirname(absDst), { recursive: true });
|
|
552
|
+
mirrorSymlink(absSrc, absDst);
|
|
553
|
+
}
|
|
554
|
+
else if (entry.kind === "file") {
|
|
555
|
+
ensureHydratedFile(absSrc);
|
|
556
|
+
mkdirSync(dirname(absDst), { recursive: true });
|
|
557
|
+
if (hardlinked) {
|
|
558
|
+
linkSync(absSrc, absDst);
|
|
559
|
+
}
|
|
560
|
+
else {
|
|
561
|
+
copyFileSync(absSrc, absDst);
|
|
562
|
+
copyXattrsBestEffort(absSrc, absDst);
|
|
563
|
+
preserveMetadataBestEffort(absSrc, absDst);
|
|
564
|
+
}
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
}
|
|
568
|
+
catch (err) {
|
|
569
|
+
removeTreeIfExists(backupDir);
|
|
570
|
+
throw err;
|
|
571
|
+
}
|
|
572
|
+
logger.info({ sourceDir, backupDir, files: manifest.files.length, bytes: manifest.totalBytes, hardlinked }, "Backup created");
|
|
573
|
+
return { backupDir, manifest, hardlinked };
|
|
574
|
+
}
|
|
575
|
+
/**
|
|
576
|
+
* Break hardlink aliases to make the backup independent of the post-
|
|
577
|
+
* migration source. Each file in the backup is copied out under a
|
|
578
|
+
* sibling name and atomically renamed back over the hardlink. If the
|
|
579
|
+
* backup was already a cross-fs copy, this is a no-op.
|
|
580
|
+
*
|
|
581
|
+
* Should be called AFTER the move commits and the settings update
|
|
582
|
+
* succeeds — before that, the backup's own content is load-bearing for
|
|
583
|
+
* rollback and we don't want to fault a broken-link scenario during
|
|
584
|
+
* recovery.
|
|
585
|
+
*/
|
|
586
|
+
export function finalizeBackup(backup) {
|
|
587
|
+
if (!backup.hardlinked) {
|
|
588
|
+
logger.debug({ backupDir: backup.backupDir }, "Backup not hardlinked — finalize is a no-op");
|
|
589
|
+
return;
|
|
590
|
+
}
|
|
591
|
+
for (const entry of backup.manifest.files) {
|
|
592
|
+
if (entry.kind !== "file")
|
|
593
|
+
continue;
|
|
594
|
+
const abs = join(backup.backupDir, entry.rel);
|
|
595
|
+
const tmp = `${abs}.finalize-${process.pid}-${Date.now()}`;
|
|
596
|
+
copyFileSync(abs, tmp);
|
|
597
|
+
unlinkSync(abs);
|
|
598
|
+
renameSync(tmp, abs);
|
|
599
|
+
}
|
|
600
|
+
logger.info({ backupDir: backup.backupDir, files: backup.manifest.files.length }, "Backup finalized (hardlinks broken)");
|
|
601
|
+
}
|
|
602
|
+
/**
|
|
603
|
+
* Move `sourceDir` to `targetDir`. Uses `rename(2)` when both paths are
|
|
604
|
+
* on the same filesystem AND the target doesn't exist yet — a single
|
|
605
|
+
* atomic syscall that preserves every metadata bit. Otherwise falls
|
|
606
|
+
* back to an entry-by-entry merge (same-fs) or `cp -aR` (cross-fs).
|
|
607
|
+
*
|
|
608
|
+
* Conflict handling: `targetDir` may already contain entries — the
|
|
609
|
+
* caller is responsible for deciding via `inspectTarget` +
|
|
610
|
+
* `resolveConflictPolicy` whether those entries should survive (merge
|
|
611
|
+
* / benign-only case) or be replaced (overwrite_agent_files). moveTree
|
|
612
|
+
* is permissive at the syscall level: if a source entry already exists
|
|
613
|
+
* at the target, the target's version is replaced. The policy layer
|
|
614
|
+
* runs BEFORE moveTree to make sure this is the desired behavior.
|
|
615
|
+
*/
|
|
616
|
+
export function moveTree(sourceDir, targetDir) {
|
|
617
|
+
const sameFs = onSameFilesystem(sourceDir, dirname(targetDir));
|
|
618
|
+
if (sameFs) {
|
|
619
|
+
if (existsSync(targetDir)) {
|
|
620
|
+
// Target exists with contents (foreign, benign, or conflicting).
|
|
621
|
+
// rename(2) can't replace a non-empty directory, so iterate.
|
|
622
|
+
return mergeMoveSameFs(sourceDir, targetDir);
|
|
623
|
+
}
|
|
624
|
+
mkdirSync(dirname(targetDir), { recursive: true });
|
|
625
|
+
renameSync(sourceDir, targetDir);
|
|
626
|
+
return;
|
|
627
|
+
}
|
|
628
|
+
// Cross-filesystem: prefer `cp -aR` on POSIX (preserves mtime, mode,
|
|
629
|
+
// xattr, resource forks). Windows has no `cp` binary, so go straight to
|
|
630
|
+
// the Node fallback. The trailing `/.` on the POSIX path copies the
|
|
631
|
+
// contents into an existing target directory (which we ensure exists).
|
|
632
|
+
const manifest = inspectDir(sourceDir);
|
|
633
|
+
const sourceTopLevel = listTopLevel(sourceDir);
|
|
634
|
+
for (const entry of manifest.files) {
|
|
635
|
+
if (entry.kind !== "file")
|
|
636
|
+
continue;
|
|
637
|
+
ensureHydratedFile(join(sourceDir, entry.rel));
|
|
638
|
+
}
|
|
639
|
+
mkdirSync(targetDir, { recursive: true });
|
|
640
|
+
if (process.platform === "win32") {
|
|
641
|
+
try {
|
|
642
|
+
copyTreeNodeCrossFs(sourceDir, targetDir, manifest);
|
|
643
|
+
}
|
|
644
|
+
catch (err) {
|
|
645
|
+
removeMigratedTopLevelEntries(targetDir, sourceTopLevel);
|
|
646
|
+
logger.error({ err, targetDir }, "Cross-filesystem move failed");
|
|
647
|
+
throw err;
|
|
648
|
+
}
|
|
649
|
+
}
|
|
650
|
+
else {
|
|
651
|
+
try {
|
|
652
|
+
execFileSync("cp", ["-aR", `${sourceDir}/.`, targetDir], { stdio: "pipe" });
|
|
653
|
+
verifyTreeSha256(manifest, sourceDir, targetDir);
|
|
654
|
+
}
|
|
655
|
+
catch (err) {
|
|
656
|
+
// Clean up partial target so the caller's rollback sees a clean slate.
|
|
657
|
+
removeMigratedTopLevelEntries(targetDir, sourceTopLevel);
|
|
658
|
+
try {
|
|
659
|
+
mkdirSync(targetDir, { recursive: true });
|
|
660
|
+
copyTreeNodeCrossFs(sourceDir, targetDir, manifest);
|
|
661
|
+
}
|
|
662
|
+
catch (fallbackErr) {
|
|
663
|
+
removeMigratedTopLevelEntries(targetDir, sourceTopLevel);
|
|
664
|
+
logger.error({ err, fallbackErr, targetDir }, "Cross-filesystem move failed");
|
|
665
|
+
if (fallbackErr instanceof MigrationFsError) {
|
|
666
|
+
throw fallbackErr;
|
|
667
|
+
}
|
|
668
|
+
if (err instanceof MigrationFsError) {
|
|
669
|
+
throw err;
|
|
670
|
+
}
|
|
671
|
+
throw fallbackErr;
|
|
672
|
+
}
|
|
673
|
+
}
|
|
674
|
+
}
|
|
675
|
+
// Source still exists on cross-fs copy; remove it to complete the move.
|
|
676
|
+
rmSync(sourceDir, { recursive: true, force: true });
|
|
677
|
+
}
|
|
678
|
+
/**
|
|
679
|
+
* Same-fs merge — hardlink every source entry into the target,
|
|
680
|
+
* overwriting any colliding file. Directories are recreated (no-op
|
|
681
|
+
* when they exist); symlinks are recreated after removing the existing
|
|
682
|
+
* target entry if any; regular files are linked after unlinking the
|
|
683
|
+
* target's pre-existing version. Source is removed after the walk.
|
|
684
|
+
*
|
|
685
|
+
* Pre-existing target entries that don't collide with source (foreign
|
|
686
|
+
* files, `.obsidian/`, `.DS_Store`) are left untouched.
|
|
687
|
+
*/
|
|
688
|
+
function mergeMoveSameFs(sourceDir, targetDir) {
|
|
689
|
+
const manifest = inspectDir(sourceDir);
|
|
690
|
+
for (const entry of manifest.files) {
|
|
691
|
+
const absSrc = join(sourceDir, entry.rel);
|
|
692
|
+
const absDst = join(targetDir, entry.rel);
|
|
693
|
+
mkdirSync(dirname(absDst), { recursive: true });
|
|
694
|
+
if (entry.kind === "dir") {
|
|
695
|
+
mkdirSync(absDst, { recursive: true, mode: entry.mode & 0o7777 });
|
|
696
|
+
}
|
|
697
|
+
else if (entry.kind === "symlink") {
|
|
698
|
+
// Remove any colliding target entry so symlink creation succeeds.
|
|
699
|
+
try {
|
|
700
|
+
if (existsSync(absDst))
|
|
701
|
+
rmSync(absDst, { recursive: true, force: true });
|
|
702
|
+
}
|
|
703
|
+
catch (err) {
|
|
704
|
+
logger.warn({ err, absDst }, "mergeMoveSameFs: failed to unlink colliding symlink target");
|
|
705
|
+
}
|
|
706
|
+
mirrorSymlink(absSrc, absDst);
|
|
707
|
+
}
|
|
708
|
+
else {
|
|
709
|
+
// Regular file: unlink colliding target (linkSync fails with EEXIST).
|
|
710
|
+
try {
|
|
711
|
+
if (existsSync(absDst))
|
|
712
|
+
unlinkSync(absDst);
|
|
713
|
+
}
|
|
714
|
+
catch (err) {
|
|
715
|
+
logger.warn({ err, absDst }, "mergeMoveSameFs: failed to unlink colliding file");
|
|
716
|
+
}
|
|
717
|
+
linkSync(absSrc, absDst);
|
|
718
|
+
}
|
|
719
|
+
}
|
|
720
|
+
rmSync(sourceDir, { recursive: true, force: true });
|
|
721
|
+
}
|
|
722
|
+
/**
|
|
723
|
+
* Restore the source directory from a backup. Called from the endpoint's
|
|
724
|
+
* rollback path when the move succeeded but a subsequent step (DB
|
|
725
|
+
* rewrite, settings write) failed.
|
|
726
|
+
*
|
|
727
|
+
* Strategy: wipe whatever partial state landed at `sourceDir` (or
|
|
728
|
+
* `targetDir`), then copy the backup tree back to `sourceDir`. Backup
|
|
729
|
+
* remains intact afterwards so the admin can inspect it or we can
|
|
730
|
+
* retry.
|
|
731
|
+
*/
|
|
732
|
+
export function restoreFromBackup(backup, sourceDir) {
|
|
733
|
+
// Wipe any partial source first — rollback is destructive by design.
|
|
734
|
+
if (existsSync(sourceDir)) {
|
|
735
|
+
rmSync(sourceDir, { recursive: true, force: true });
|
|
736
|
+
}
|
|
737
|
+
mkdirSync(sourceDir, { recursive: true });
|
|
738
|
+
for (const entry of backup.manifest.files) {
|
|
739
|
+
const absSrc = join(backup.backupDir, entry.rel);
|
|
740
|
+
const absDst = join(sourceDir, entry.rel);
|
|
741
|
+
if (entry.kind === "dir") {
|
|
742
|
+
mkdirSync(absDst, { recursive: true, mode: entry.mode & 0o7777 });
|
|
743
|
+
}
|
|
744
|
+
else if (entry.kind === "symlink") {
|
|
745
|
+
mkdirSync(dirname(absDst), { recursive: true });
|
|
746
|
+
if (existsSync(absSrc)) {
|
|
747
|
+
mirrorSymlink(absSrc, absDst);
|
|
748
|
+
}
|
|
749
|
+
}
|
|
750
|
+
else if (entry.kind === "file") {
|
|
751
|
+
mkdirSync(dirname(absDst), { recursive: true });
|
|
752
|
+
copyFileSync(absSrc, absDst);
|
|
753
|
+
}
|
|
754
|
+
}
|
|
755
|
+
logger.info({ sourceDir, backupDir: backup.backupDir, files: backup.manifest.files.length }, "Source restored from backup");
|
|
756
|
+
}
|
|
757
|
+
/**
|
|
758
|
+
* Collect the set of top-level entry names (files and directories) in
|
|
759
|
+
* `sourceDir`. Used by `inspectTarget` to decide which target entries
|
|
760
|
+
* overlap with source file names.
|
|
761
|
+
*/
|
|
762
|
+
export function listTopLevel(dir) {
|
|
763
|
+
if (!existsSync(dir))
|
|
764
|
+
return new Set();
|
|
765
|
+
return new Set(readdirSync(dir).filter((name) => !BENIGN_TARGET_ENTRIES.has(name)));
|
|
766
|
+
}
|
|
767
|
+
/**
|
|
768
|
+
* Plan §6.5 "verification after move" — walk every entry in the
|
|
769
|
+
* pre-move source manifest and confirm it exists at `targetDir` with
|
|
770
|
+
* the expected size. Cheap existence-and-size check (no content hash)
|
|
771
|
+
* that surfaces partial copies, truncated writes, or a filesystem that
|
|
772
|
+
* silently dropped a file. Called after `moveTree` succeeds; any
|
|
773
|
+
* missing or mismatched entry triggers rollback at the route level.
|
|
774
|
+
*
|
|
775
|
+
* Directories and symlinks are verified for existence only — size for
|
|
776
|
+
* those is meaningless on most filesystems.
|
|
777
|
+
*/
|
|
778
|
+
export function verifyMoveCompleted(manifest, targetDir) {
|
|
779
|
+
const missing = [];
|
|
780
|
+
const sizeMismatch = [];
|
|
781
|
+
for (const entry of manifest.files) {
|
|
782
|
+
const abs = join(targetDir, entry.rel);
|
|
783
|
+
let st;
|
|
784
|
+
try {
|
|
785
|
+
st = lstatSync(abs);
|
|
786
|
+
}
|
|
787
|
+
catch {
|
|
788
|
+
missing.push(entry.rel);
|
|
789
|
+
continue;
|
|
790
|
+
}
|
|
791
|
+
if (entry.kind === "file" && st.size !== entry.bytes) {
|
|
792
|
+
sizeMismatch.push({ rel: entry.rel, expected: entry.bytes, actual: st.size });
|
|
793
|
+
}
|
|
794
|
+
}
|
|
795
|
+
return { ok: missing.length === 0 && sizeMismatch.length === 0, missing, sizeMismatch };
|
|
796
|
+
}
|
|
797
|
+
/**
|
|
798
|
+
* Expose the source manifest from a completed backup so the route can
|
|
799
|
+
* re-verify post-move without re-walking the (now-empty) source.
|
|
800
|
+
*/
|
|
801
|
+
export function getBackupManifest(backup) {
|
|
802
|
+
return backup.manifest;
|
|
803
|
+
}
|
|
804
|
+
/**
|
|
805
|
+
* Reserved subdirectory inside a backup that holds target-side entries
|
|
806
|
+
* the `overwrite_agent_files` policy is about to destroy. Kept as a
|
|
807
|
+
* separate tree inside the backup so:
|
|
808
|
+
* - `restoreFromBackup` doesn't accidentally restore them to source,
|
|
809
|
+
* - the retention sweep still reaches them when the backup expires.
|
|
810
|
+
*/
|
|
811
|
+
const OVERWRITTEN_TARGET_SUBDIR = "_overwritten_target";
|
|
812
|
+
/**
|
|
813
|
+
* Before `moveTree` runs in `overwrite_agent_files` mode, stash the
|
|
814
|
+
* target-side entries that are about to be overwritten so a failed
|
|
815
|
+
* migration can restore them. Without this the user's pre-existing
|
|
816
|
+
* `today.md` at target is gone forever the moment mergeMove unlinks
|
|
817
|
+
* it, and rollback has no way to reach it (the source backup doesn't
|
|
818
|
+
* contain target's version).
|
|
819
|
+
*
|
|
820
|
+
* Same-fs uses hardlinks (zero extra disk); cross-fs copies. Returns
|
|
821
|
+
* the list of stashed entries so rollback knows what to restore.
|
|
822
|
+
*/
|
|
823
|
+
export function stashOverwrittenTargetEntries(targetDir, entries, backupDir) {
|
|
824
|
+
if (entries.length === 0)
|
|
825
|
+
return [];
|
|
826
|
+
const stashRoot = join(backupDir, OVERWRITTEN_TARGET_SUBDIR);
|
|
827
|
+
mkdirSync(stashRoot, { recursive: true });
|
|
828
|
+
const sameFs = onSameFilesystem(targetDir, backupDir);
|
|
829
|
+
const stashed = [];
|
|
830
|
+
for (const name of entries) {
|
|
831
|
+
const src = join(targetDir, name);
|
|
832
|
+
if (!existsSync(src))
|
|
833
|
+
continue;
|
|
834
|
+
const dst = join(stashRoot, name);
|
|
835
|
+
const st = lstatSync(src);
|
|
836
|
+
if (st.isDirectory()) {
|
|
837
|
+
// Recursively hardlink-or-copy the subtree.
|
|
838
|
+
stashDirectory(src, dst, sameFs);
|
|
839
|
+
}
|
|
840
|
+
else if (st.isSymbolicLink()) {
|
|
841
|
+
mirrorSymlink(src, dst);
|
|
842
|
+
}
|
|
843
|
+
else {
|
|
844
|
+
if (sameFs) {
|
|
845
|
+
linkSync(src, dst);
|
|
846
|
+
}
|
|
847
|
+
else {
|
|
848
|
+
copyFileSync(src, dst);
|
|
849
|
+
}
|
|
850
|
+
}
|
|
851
|
+
stashed.push(name);
|
|
852
|
+
}
|
|
853
|
+
logger.info({ stashRoot, entries: stashed, hardlinked: sameFs }, "Overwritten target entries stashed");
|
|
854
|
+
return stashed;
|
|
855
|
+
}
|
|
856
|
+
function stashDirectory(srcDir, dstDir, sameFs) {
|
|
857
|
+
mkdirSync(dstDir, { recursive: true });
|
|
858
|
+
for (const name of readdirSync(srcDir)) {
|
|
859
|
+
const src = join(srcDir, name);
|
|
860
|
+
const dst = join(dstDir, name);
|
|
861
|
+
const st = lstatSync(src);
|
|
862
|
+
if (st.isDirectory()) {
|
|
863
|
+
stashDirectory(src, dst, sameFs);
|
|
864
|
+
}
|
|
865
|
+
else if (st.isSymbolicLink()) {
|
|
866
|
+
mirrorSymlink(src, dst);
|
|
867
|
+
}
|
|
868
|
+
else {
|
|
869
|
+
if (sameFs) {
|
|
870
|
+
linkSync(src, dst);
|
|
871
|
+
}
|
|
872
|
+
else {
|
|
873
|
+
copyFileSync(src, dst);
|
|
874
|
+
}
|
|
875
|
+
}
|
|
876
|
+
}
|
|
877
|
+
}
|
|
878
|
+
/**
|
|
879
|
+
* Restore target-side entries that `stashOverwrittenTargetEntries`
|
|
880
|
+
* saved. Called by rollback when the overwrite path ran but a later
|
|
881
|
+
* step failed. Removes any colliding source-version that moveTree
|
|
882
|
+
* placed at target (rollback caller already attempts this for
|
|
883
|
+
* migration-added entries; this path ensures it covers the overwrite
|
|
884
|
+
* collisions too) then re-places the original target-side version.
|
|
885
|
+
*/
|
|
886
|
+
export function restoreOverwrittenTargetEntries(backup, targetDir, entries) {
|
|
887
|
+
if (entries.length === 0)
|
|
888
|
+
return;
|
|
889
|
+
const stashRoot = join(backup.backupDir, OVERWRITTEN_TARGET_SUBDIR);
|
|
890
|
+
if (!existsSync(stashRoot))
|
|
891
|
+
return;
|
|
892
|
+
for (const name of entries) {
|
|
893
|
+
const src = join(stashRoot, name);
|
|
894
|
+
const dst = join(targetDir, name);
|
|
895
|
+
if (!existsSync(src))
|
|
896
|
+
continue;
|
|
897
|
+
try {
|
|
898
|
+
if (existsSync(dst))
|
|
899
|
+
rmSync(dst, { recursive: true, force: true });
|
|
900
|
+
}
|
|
901
|
+
catch (err) {
|
|
902
|
+
logger.warn({ err, dst }, "restoreOverwrittenTargetEntries: pre-cleanup failed");
|
|
903
|
+
}
|
|
904
|
+
const st = lstatSync(src);
|
|
905
|
+
if (st.isDirectory()) {
|
|
906
|
+
restoreDirectory(src, dst);
|
|
907
|
+
}
|
|
908
|
+
else if (st.isSymbolicLink()) {
|
|
909
|
+
mirrorSymlink(src, dst);
|
|
910
|
+
}
|
|
911
|
+
else {
|
|
912
|
+
copyFileSync(src, dst);
|
|
913
|
+
}
|
|
914
|
+
}
|
|
915
|
+
logger.info({ targetDir, entries }, "Overwritten target entries restored");
|
|
916
|
+
}
|
|
917
|
+
function restoreDirectory(srcDir, dstDir) {
|
|
918
|
+
mkdirSync(dstDir, { recursive: true });
|
|
919
|
+
for (const name of readdirSync(srcDir)) {
|
|
920
|
+
const src = join(srcDir, name);
|
|
921
|
+
const dst = join(dstDir, name);
|
|
922
|
+
const st = lstatSync(src);
|
|
923
|
+
if (st.isDirectory()) {
|
|
924
|
+
restoreDirectory(src, dst);
|
|
925
|
+
}
|
|
926
|
+
else if (st.isSymbolicLink()) {
|
|
927
|
+
mirrorSymlink(src, dst);
|
|
928
|
+
}
|
|
929
|
+
else {
|
|
930
|
+
copyFileSync(src, dst);
|
|
931
|
+
}
|
|
932
|
+
}
|
|
933
|
+
}
|
|
934
|
+
//# sourceMappingURL=migration-backup.js.map
|