@getrift/rift 0.1.0-beta.2 → 0.1.0-beta.20
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/README.md +35 -9
- package/dist/src/auth/keychain.d.ts +9 -0
- package/dist/src/auth/keychain.d.ts.map +1 -1
- package/dist/src/auth/keychain.js +37 -0
- package/dist/src/auth/keychain.js.map +1 -1
- package/dist/src/capture/auto-capture.d.ts +7 -0
- package/dist/src/capture/auto-capture.d.ts.map +1 -1
- package/dist/src/capture/auto-capture.js +82 -15
- package/dist/src/capture/auto-capture.js.map +1 -1
- package/dist/src/capture/auto-repair.d.ts +110 -0
- package/dist/src/capture/auto-repair.d.ts.map +1 -0
- package/dist/src/capture/auto-repair.js +269 -0
- package/dist/src/capture/auto-repair.js.map +1 -0
- package/dist/src/capture/codex-cli-triage-provider.d.ts.map +1 -1
- package/dist/src/capture/codex-cli-triage-provider.js +4 -3
- package/dist/src/capture/codex-cli-triage-provider.js.map +1 -1
- package/dist/src/capture/observability.d.ts +42 -0
- package/dist/src/capture/observability.d.ts.map +1 -1
- package/dist/src/capture/observability.js +45 -4
- package/dist/src/capture/observability.js.map +1 -1
- package/dist/src/capture/recover-quarantine.d.ts +260 -0
- package/dist/src/capture/recover-quarantine.d.ts.map +1 -0
- package/dist/src/capture/recover-quarantine.js +522 -0
- package/dist/src/capture/recover-quarantine.js.map +1 -0
- package/dist/src/cli/commands/backfill.d.ts.map +1 -1
- package/dist/src/cli/commands/backfill.js +5 -2
- package/dist/src/cli/commands/backfill.js.map +1 -1
- package/dist/src/cli/commands/capture-recover.d.ts +40 -0
- package/dist/src/cli/commands/capture-recover.d.ts.map +1 -0
- package/dist/src/cli/commands/capture-recover.js +184 -0
- package/dist/src/cli/commands/capture-recover.js.map +1 -0
- package/dist/src/cli/commands/capture.d.ts.map +1 -1
- package/dist/src/cli/commands/capture.js +96 -5
- package/dist/src/cli/commands/capture.js.map +1 -1
- package/dist/src/cli/commands/doctor.d.ts +6 -0
- package/dist/src/cli/commands/doctor.d.ts.map +1 -0
- package/dist/src/cli/commands/doctor.js +242 -0
- package/dist/src/cli/commands/doctor.js.map +1 -0
- package/dist/src/cli/commands/feedback.d.ts +12 -0
- package/dist/src/cli/commands/feedback.d.ts.map +1 -1
- package/dist/src/cli/commands/feedback.js +93 -4
- package/dist/src/cli/commands/feedback.js.map +1 -1
- package/dist/src/cli/commands/mcp-install.js +5 -2
- package/dist/src/cli/commands/mcp-install.js.map +1 -1
- package/dist/src/cli/commands/menubar.d.ts +30 -0
- package/dist/src/cli/commands/menubar.d.ts.map +1 -0
- package/dist/src/cli/commands/menubar.js +180 -0
- package/dist/src/cli/commands/menubar.js.map +1 -0
- package/dist/src/cli/commands/onboard.d.ts +129 -0
- package/dist/src/cli/commands/onboard.d.ts.map +1 -1
- package/dist/src/cli/commands/onboard.js +752 -171
- package/dist/src/cli/commands/onboard.js.map +1 -1
- package/dist/src/cli/commands/rebuild.d.ts.map +1 -1
- package/dist/src/cli/commands/rebuild.js +6 -3
- package/dist/src/cli/commands/rebuild.js.map +1 -1
- package/dist/src/cli/commands/reconcile.d.ts.map +1 -1
- package/dist/src/cli/commands/reconcile.js +12 -0
- package/dist/src/cli/commands/reconcile.js.map +1 -1
- package/dist/src/cli/commands/review.d.ts.map +1 -1
- package/dist/src/cli/commands/review.js +22 -7
- package/dist/src/cli/commands/review.js.map +1 -1
- package/dist/src/cli/commands/search.d.ts +2 -0
- package/dist/src/cli/commands/search.d.ts.map +1 -1
- package/dist/src/cli/commands/search.js +34 -4
- package/dist/src/cli/commands/search.js.map +1 -1
- package/dist/src/cli/commands/status.d.ts +9 -7
- package/dist/src/cli/commands/status.d.ts.map +1 -1
- package/dist/src/cli/commands/status.js +113 -12
- package/dist/src/cli/commands/status.js.map +1 -1
- package/dist/src/cli/commands/token-issue.d.ts.map +1 -1
- package/dist/src/cli/commands/token-issue.js +9 -1
- package/dist/src/cli/commands/token-issue.js.map +1 -1
- package/dist/src/cli/commands/triage.d.ts.map +1 -1
- package/dist/src/cli/commands/triage.js +7 -5
- package/dist/src/cli/commands/triage.js.map +1 -1
- package/dist/src/cli/commands/update.d.ts +80 -0
- package/dist/src/cli/commands/update.d.ts.map +1 -0
- package/dist/src/cli/commands/update.js +378 -0
- package/dist/src/cli/commands/update.js.map +1 -0
- package/dist/src/cli/default-config-path.d.ts +15 -0
- package/dist/src/cli/default-config-path.d.ts.map +1 -0
- package/dist/src/cli/default-config-path.js +27 -0
- package/dist/src/cli/default-config-path.js.map +1 -0
- package/dist/src/cli/feedback/feedback-config.d.ts +46 -0
- package/dist/src/cli/feedback/feedback-config.d.ts.map +1 -1
- package/dist/src/cli/feedback/feedback-config.js +130 -4
- package/dist/src/cli/feedback/feedback-config.js.map +1 -1
- package/dist/src/cli/feedback/feedback-history.d.ts +7 -0
- package/dist/src/cli/feedback/feedback-history.d.ts.map +1 -1
- package/dist/src/cli/feedback/feedback-history.js +39 -9
- package/dist/src/cli/feedback/feedback-history.js.map +1 -1
- package/dist/src/cli/feedback/feedback-payload.d.ts +22 -1
- package/dist/src/cli/feedback/feedback-payload.d.ts.map +1 -1
- package/dist/src/cli/feedback/feedback-payload.js.map +1 -1
- package/dist/src/cli/feedback/feedback-relay.d.ts +2 -2
- package/dist/src/cli/feedback/feedback-relay.d.ts.map +1 -1
- package/dist/src/cli/feedback/feedback-relay.js.map +1 -1
- package/dist/src/cli/feedback/invite.d.ts +17 -0
- package/dist/src/cli/feedback/invite.d.ts.map +1 -0
- package/dist/src/cli/feedback/invite.js +67 -0
- package/dist/src/cli/feedback/invite.js.map +1 -0
- package/dist/src/cli/feedback/relay-secret-store.d.ts +32 -0
- package/dist/src/cli/feedback/relay-secret-store.d.ts.map +1 -0
- package/dist/src/cli/feedback/relay-secret-store.js +137 -0
- package/dist/src/cli/feedback/relay-secret-store.js.map +1 -0
- package/dist/src/cli/http-client.d.ts +93 -1
- package/dist/src/cli/http-client.d.ts.map +1 -1
- package/dist/src/cli/http-client.js +254 -6
- package/dist/src/cli/http-client.js.map +1 -1
- package/dist/src/cli/index.d.ts.map +1 -1
- package/dist/src/cli/index.js +29 -6
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/cli/postinstall-menubar.d.ts +22 -0
- package/dist/src/cli/postinstall-menubar.d.ts.map +1 -0
- package/dist/src/cli/postinstall-menubar.js +39 -0
- package/dist/src/cli/postinstall-menubar.js.map +1 -0
- package/dist/src/cli/status/friend-header.d.ts +8 -1
- package/dist/src/cli/status/friend-header.d.ts.map +1 -1
- package/dist/src/cli/status/friend-header.js +334 -26
- package/dist/src/cli/status/friend-header.js.map +1 -1
- package/dist/src/cli/ui.d.ts +47 -0
- package/dist/src/cli/ui.d.ts.map +1 -0
- package/dist/src/cli/ui.js +166 -0
- package/dist/src/cli/ui.js.map +1 -0
- package/dist/src/config/schema.d.ts +79 -0
- package/dist/src/config/schema.d.ts.map +1 -1
- package/dist/src/config/schema.js +44 -0
- package/dist/src/config/schema.js.map +1 -1
- package/dist/src/diagnostics/codex-preflight.d.ts +33 -0
- package/dist/src/diagnostics/codex-preflight.d.ts.map +1 -0
- package/dist/src/diagnostics/codex-preflight.js +75 -0
- package/dist/src/diagnostics/codex-preflight.js.map +1 -0
- package/dist/src/diagnostics/doctor.d.ts +106 -0
- package/dist/src/diagnostics/doctor.d.ts.map +1 -0
- package/dist/src/diagnostics/doctor.js +334 -0
- package/dist/src/diagnostics/doctor.js.map +1 -0
- package/dist/src/diagnostics/notify.d.ts +90 -0
- package/dist/src/diagnostics/notify.d.ts.map +1 -0
- package/dist/src/diagnostics/notify.js +177 -0
- package/dist/src/diagnostics/notify.js.map +1 -0
- package/dist/src/diagnostics/repair-prompt.d.ts +49 -0
- package/dist/src/diagnostics/repair-prompt.d.ts.map +1 -0
- package/dist/src/diagnostics/repair-prompt.js +223 -0
- package/dist/src/diagnostics/repair-prompt.js.map +1 -0
- package/dist/src/ingestion/inbox-core/conversation-fingerprint.d.ts +2 -0
- package/dist/src/ingestion/inbox-core/conversation-fingerprint.d.ts.map +1 -0
- package/dist/src/ingestion/inbox-core/conversation-fingerprint.js +27 -0
- package/dist/src/ingestion/inbox-core/conversation-fingerprint.js.map +1 -0
- package/dist/src/ingestion/inbox-core/conversation-key.d.ts +2 -0
- package/dist/src/ingestion/inbox-core/conversation-key.d.ts.map +1 -0
- package/dist/src/ingestion/inbox-core/conversation-key.js +31 -0
- package/dist/src/ingestion/inbox-core/conversation-key.js.map +1 -0
- package/dist/src/ingestion/inbox-core/extensions.d.ts +3 -0
- package/dist/src/ingestion/inbox-core/extensions.d.ts.map +1 -0
- package/dist/src/ingestion/inbox-core/extensions.js +16 -0
- package/dist/src/ingestion/inbox-core/extensions.js.map +1 -0
- package/dist/src/ingestion/inbox-core/idempotency.d.ts +2 -0
- package/dist/src/ingestion/inbox-core/idempotency.d.ts.map +1 -0
- package/dist/src/ingestion/inbox-core/idempotency.js +22 -0
- package/dist/src/ingestion/inbox-core/idempotency.js.map +1 -0
- package/dist/src/ingestion/inbox-core/index.d.ts +20 -0
- package/dist/src/ingestion/inbox-core/index.d.ts.map +1 -0
- package/dist/src/ingestion/inbox-core/index.js +20 -0
- package/dist/src/ingestion/inbox-core/index.js.map +1 -0
- package/dist/src/ingestion/inbox-core/source-detection.d.ts +2 -0
- package/dist/src/ingestion/inbox-core/source-detection.d.ts.map +1 -0
- package/dist/src/ingestion/inbox-core/source-detection.js +23 -0
- package/dist/src/ingestion/inbox-core/source-detection.js.map +1 -0
- package/dist/src/ingestion/inbox-core/source-sniffer.d.ts +11 -0
- package/dist/src/ingestion/inbox-core/source-sniffer.d.ts.map +1 -0
- package/dist/src/ingestion/inbox-core/source-sniffer.js +69 -0
- package/dist/src/ingestion/inbox-core/source-sniffer.js.map +1 -0
- package/dist/src/ingestion/inbox-core/zip-sniffer.d.ts +70 -0
- package/dist/src/ingestion/inbox-core/zip-sniffer.d.ts.map +1 -0
- package/dist/src/ingestion/inbox-core/zip-sniffer.js +161 -0
- package/dist/src/ingestion/inbox-core/zip-sniffer.js.map +1 -0
- package/dist/src/ingestion/inbox-watcher.d.ts.map +1 -1
- package/dist/src/ingestion/inbox-watcher.js +34 -50
- package/dist/src/ingestion/inbox-watcher.js.map +1 -1
- package/dist/src/ingestion/indexer.d.ts +7 -0
- package/dist/src/ingestion/indexer.d.ts.map +1 -1
- package/dist/src/ingestion/indexer.js +36 -2
- package/dist/src/ingestion/indexer.js.map +1 -1
- package/dist/src/ingestion/metadata-extraction.d.ts +8 -5
- package/dist/src/ingestion/metadata-extraction.d.ts.map +1 -1
- package/dist/src/ingestion/metadata-extraction.js +24 -5
- package/dist/src/ingestion/metadata-extraction.js.map +1 -1
- package/dist/src/ingestion/skip-quarantine.d.ts +10 -0
- package/dist/src/ingestion/skip-quarantine.d.ts.map +1 -0
- package/dist/src/ingestion/skip-quarantine.js +35 -0
- package/dist/src/ingestion/skip-quarantine.js.map +1 -0
- package/dist/src/jobs/handlers/compact.d.ts.map +1 -1
- package/dist/src/jobs/handlers/compact.js +30 -4
- package/dist/src/jobs/handlers/compact.js.map +1 -1
- package/dist/src/jobs/handlers/dedupe-conversations.d.ts +134 -0
- package/dist/src/jobs/handlers/dedupe-conversations.d.ts.map +1 -0
- package/dist/src/jobs/handlers/dedupe-conversations.js +371 -0
- package/dist/src/jobs/handlers/dedupe-conversations.js.map +1 -0
- package/dist/src/jobs/handlers/ingest.d.ts.map +1 -1
- package/dist/src/jobs/handlers/ingest.js +295 -41
- package/dist/src/jobs/handlers/ingest.js.map +1 -1
- package/dist/src/jobs/handlers/reconcile.d.ts +28 -0
- package/dist/src/jobs/handlers/reconcile.d.ts.map +1 -1
- package/dist/src/jobs/handlers/reconcile.js +145 -19
- package/dist/src/jobs/handlers/reconcile.js.map +1 -1
- package/dist/src/jobs/handlers/reindex.d.ts.map +1 -1
- package/dist/src/jobs/handlers/reindex.js +13 -2
- package/dist/src/jobs/handlers/reindex.js.map +1 -1
- package/dist/src/jobs/handlers/save.d.ts.map +1 -1
- package/dist/src/jobs/handlers/save.js +57 -3
- package/dist/src/jobs/handlers/save.js.map +1 -1
- package/dist/src/jobs/queue.d.ts +51 -1
- package/dist/src/jobs/queue.d.ts.map +1 -1
- package/dist/src/jobs/queue.js +466 -26
- package/dist/src/jobs/queue.js.map +1 -1
- package/dist/src/jobs/worker-entry.d.ts.map +1 -1
- package/dist/src/jobs/worker-entry.js +35 -7
- package/dist/src/jobs/worker-entry.js.map +1 -1
- package/dist/src/jobs/worker-process.d.ts +11 -0
- package/dist/src/jobs/worker-process.d.ts.map +1 -1
- package/dist/src/jobs/worker-process.js +37 -4
- package/dist/src/jobs/worker-process.js.map +1 -1
- package/dist/src/main.js +199 -46
- package/dist/src/main.js.map +1 -1
- package/dist/src/mcp/errors.d.ts.map +1 -1
- package/dist/src/mcp/errors.js +20 -1
- package/dist/src/mcp/errors.js.map +1 -1
- package/dist/src/mcp/server.d.ts.map +1 -1
- package/dist/src/mcp/server.js +43 -3
- package/dist/src/mcp/server.js.map +1 -1
- package/dist/src/mcp/tools/context-pack.d.ts.map +1 -1
- package/dist/src/mcp/tools/context-pack.js +164 -23
- package/dist/src/mcp/tools/context-pack.js.map +1 -1
- package/dist/src/mcp/tools/search.d.ts +6 -2
- package/dist/src/mcp/tools/search.d.ts.map +1 -1
- package/dist/src/mcp/tools/search.js +35 -4
- package/dist/src/mcp/tools/search.js.map +1 -1
- package/dist/src/observability/embedding-events.d.ts +52 -0
- package/dist/src/observability/embedding-events.d.ts.map +1 -0
- package/dist/src/observability/embedding-events.js +149 -0
- package/dist/src/observability/embedding-events.js.map +1 -0
- package/dist/src/observability/index-events.d.ts +70 -0
- package/dist/src/observability/index-events.d.ts.map +1 -0
- package/dist/src/observability/index-events.js +148 -0
- package/dist/src/observability/index-events.js.map +1 -0
- package/dist/src/observability/onboarding-metric.d.ts +131 -0
- package/dist/src/observability/onboarding-metric.d.ts.map +1 -0
- package/dist/src/observability/onboarding-metric.js +351 -0
- package/dist/src/observability/onboarding-metric.js.map +1 -0
- package/dist/src/observability/tool-usage-stats.d.ts +77 -4
- package/dist/src/observability/tool-usage-stats.d.ts.map +1 -1
- package/dist/src/observability/tool-usage-stats.js +112 -32
- package/dist/src/observability/tool-usage-stats.js.map +1 -1
- package/dist/src/observability/tool-usage.d.ts +100 -7
- package/dist/src/observability/tool-usage.d.ts.map +1 -1
- package/dist/src/observability/tool-usage.js +196 -33
- package/dist/src/observability/tool-usage.js.map +1 -1
- package/dist/src/observability/version-check.d.ts +71 -0
- package/dist/src/observability/version-check.d.ts.map +1 -0
- package/dist/src/observability/version-check.js +198 -0
- package/dist/src/observability/version-check.js.map +1 -0
- package/dist/src/providers/basic-metadata-extraction.d.ts +60 -0
- package/dist/src/providers/basic-metadata-extraction.d.ts.map +1 -0
- package/dist/src/providers/basic-metadata-extraction.js +114 -0
- package/dist/src/providers/basic-metadata-extraction.js.map +1 -0
- package/dist/src/providers/codex-cli-metadata-extraction.d.ts +1 -0
- package/dist/src/providers/codex-cli-metadata-extraction.d.ts.map +1 -1
- package/dist/src/providers/codex-cli-metadata-extraction.js +6 -2
- package/dist/src/providers/codex-cli-metadata-extraction.js.map +1 -1
- package/dist/src/providers/codex-cli-model.d.ts +61 -0
- package/dist/src/providers/codex-cli-model.d.ts.map +1 -0
- package/dist/src/providers/codex-cli-model.js +194 -0
- package/dist/src/providers/codex-cli-model.js.map +1 -0
- package/dist/src/providers/codex-cli-runner.d.ts +39 -0
- package/dist/src/providers/codex-cli-runner.d.ts.map +1 -1
- package/dist/src/providers/codex-cli-runner.js +234 -48
- package/dist/src/providers/codex-cli-runner.js.map +1 -1
- package/dist/src/providers/conversation-generation.d.ts.map +1 -1
- package/dist/src/providers/conversation-generation.js +43 -6
- package/dist/src/providers/conversation-generation.js.map +1 -1
- package/dist/src/providers/ollama-embed.d.ts +2 -1
- package/dist/src/providers/ollama-embed.d.ts.map +1 -1
- package/dist/src/providers/ollama-embed.js +1 -0
- package/dist/src/providers/ollama-embed.js.map +1 -1
- package/dist/src/providers/openai-metadata-extraction.d.ts +3 -3
- package/dist/src/providers/openai-metadata-extraction.d.ts.map +1 -1
- package/dist/src/providers/openai-metadata-extraction.js +18 -3
- package/dist/src/providers/openai-metadata-extraction.js.map +1 -1
- package/dist/src/providers/placeholder-embed.d.ts +56 -0
- package/dist/src/providers/placeholder-embed.d.ts.map +1 -0
- package/dist/src/providers/placeholder-embed.js +64 -0
- package/dist/src/providers/placeholder-embed.js.map +1 -0
- package/dist/src/providers/stub.d.ts +2 -0
- package/dist/src/providers/stub.d.ts.map +1 -1
- package/dist/src/providers/stub.js +2 -0
- package/dist/src/providers/stub.js.map +1 -1
- package/dist/src/providers/types.d.ts +11 -0
- package/dist/src/providers/types.d.ts.map +1 -1
- package/dist/src/providers/voyage.d.ts +2 -1
- package/dist/src/providers/voyage.d.ts.map +1 -1
- package/dist/src/providers/voyage.js +1 -0
- package/dist/src/providers/voyage.js.map +1 -1
- package/dist/src/retrieval/compact.d.ts +116 -2
- package/dist/src/retrieval/compact.d.ts.map +1 -1
- package/dist/src/retrieval/compact.js +158 -5
- package/dist/src/retrieval/compact.js.map +1 -1
- package/dist/src/retrieval/context-pack.d.ts +114 -0
- package/dist/src/retrieval/context-pack.d.ts.map +1 -1
- package/dist/src/retrieval/context-pack.js +292 -8
- package/dist/src/retrieval/context-pack.js.map +1 -1
- package/dist/src/retrieval/current-truth.d.ts +360 -0
- package/dist/src/retrieval/current-truth.d.ts.map +1 -0
- package/dist/src/retrieval/current-truth.js +766 -0
- package/dist/src/retrieval/current-truth.js.map +1 -0
- package/dist/src/retrieval/git-state.d.ts +53 -0
- package/dist/src/retrieval/git-state.d.ts.map +1 -0
- package/dist/src/retrieval/git-state.js +174 -0
- package/dist/src/retrieval/git-state.js.map +1 -0
- package/dist/src/retrieval/lexical.d.ts.map +1 -1
- package/dist/src/retrieval/lexical.js +19 -3
- package/dist/src/retrieval/lexical.js.map +1 -1
- package/dist/src/retrieval/locator-boost.d.ts +37 -0
- package/dist/src/retrieval/locator-boost.d.ts.map +1 -0
- package/dist/src/retrieval/locator-boost.js +129 -0
- package/dist/src/retrieval/locator-boost.js.map +1 -0
- package/dist/src/retrieval/report-demotion.d.ts +46 -0
- package/dist/src/retrieval/report-demotion.d.ts.map +1 -0
- package/dist/src/retrieval/report-demotion.js +169 -0
- package/dist/src/retrieval/report-demotion.js.map +1 -0
- package/dist/src/retrieval/vector.d.ts.map +1 -1
- package/dist/src/retrieval/vector.js +11 -2
- package/dist/src/retrieval/vector.js.map +1 -1
- package/dist/src/server/app.d.ts.map +1 -1
- package/dist/src/server/app.js +92 -11
- package/dist/src/server/app.js.map +1 -1
- package/dist/src/server/routes/compact.d.ts.map +1 -1
- package/dist/src/server/routes/compact.js +4 -1
- package/dist/src/server/routes/compact.js.map +1 -1
- package/dist/src/server/routes/context.d.ts +1 -1
- package/dist/src/server/routes/context.d.ts.map +1 -1
- package/dist/src/server/routes/context.js +2 -1
- package/dist/src/server/routes/context.js.map +1 -1
- package/dist/src/server/routes/conversations-search.d.ts.map +1 -1
- package/dist/src/server/routes/conversations-search.js +28 -3
- package/dist/src/server/routes/conversations-search.js.map +1 -1
- package/dist/src/server/routes/enqueue.d.ts +11 -0
- package/dist/src/server/routes/enqueue.d.ts.map +1 -0
- package/dist/src/server/routes/enqueue.js +17 -0
- package/dist/src/server/routes/enqueue.js.map +1 -0
- package/dist/src/server/routes/friend-status.d.ts +339 -3
- package/dist/src/server/routes/friend-status.d.ts.map +1 -1
- package/dist/src/server/routes/friend-status.js +447 -13
- package/dist/src/server/routes/friend-status.js.map +1 -1
- package/dist/src/server/routes/ingest.d.ts.map +1 -1
- package/dist/src/server/routes/ingest.js +5 -2
- package/dist/src/server/routes/ingest.js.map +1 -1
- package/dist/src/server/routes/mcp-usage.d.ts +5 -4
- package/dist/src/server/routes/mcp-usage.d.ts.map +1 -1
- package/dist/src/server/routes/mcp-usage.js.map +1 -1
- package/dist/src/server/routes/reconcile.d.ts.map +1 -1
- package/dist/src/server/routes/reconcile.js +20 -1
- package/dist/src/server/routes/reconcile.js.map +1 -1
- package/dist/src/server/routes/reindex.d.ts.map +1 -1
- package/dist/src/server/routes/reindex.js +4 -1
- package/dist/src/server/routes/reindex.js.map +1 -1
- package/dist/src/server/routes/save.d.ts.map +1 -1
- package/dist/src/server/routes/save.js +4 -1
- package/dist/src/server/routes/save.js.map +1 -1
- package/dist/src/server/routes/search.d.ts +1 -1
- package/dist/src/server/routes/search.d.ts.map +1 -1
- package/dist/src/server/routes/search.js +253 -29
- package/dist/src/server/routes/search.js.map +1 -1
- package/dist/src/server/routes/triage.d.ts.map +1 -1
- package/dist/src/server/routes/triage.js +4 -1
- package/dist/src/server/routes/triage.js.map +1 -1
- package/dist/src/storage/rebuild.d.ts +35 -1
- package/dist/src/storage/rebuild.d.ts.map +1 -1
- package/dist/src/storage/rebuild.js +288 -64
- package/dist/src/storage/rebuild.js.map +1 -1
- package/dist/src/storage/tables.d.ts +29 -0
- package/dist/src/storage/tables.d.ts.map +1 -1
- package/dist/src/storage/tables.js +32 -1
- package/dist/src/storage/tables.js.map +1 -1
- package/operator/swiftbar/render-menu.py +524 -0
- package/operator/swiftbar/rift.10s.sh +176 -0
- package/package.json +9 -3
|
@@ -11,15 +11,43 @@
|
|
|
11
11
|
*
|
|
12
12
|
* Phase 2 — Persist (only if all conversations passed Phase 1):
|
|
13
13
|
* 5. Write raw files (with full metadata — rebuild-safe)
|
|
14
|
-
* 6. Insert all rows into conversations_hot
|
|
14
|
+
* 6. Insert all rows into conversations_hot (or refresh into the
|
|
15
|
+
* table where an older snapshot already lives)
|
|
15
16
|
*
|
|
16
17
|
* This two-phase design ensures atomicity: either all conversations in
|
|
17
18
|
* an upload are indexed, or none are. No partial ingest.
|
|
18
19
|
*
|
|
19
20
|
* Replay safety:
|
|
20
|
-
* - Row ID is
|
|
21
|
-
*
|
|
22
|
-
* -
|
|
21
|
+
* - Row ID is deterministic on (source, provider conversation ID), so a
|
|
22
|
+
* re-imported monthly export collapses to the same row across jobs.
|
|
23
|
+
* - Raw files are written before table insert (crash safety).
|
|
24
|
+
* - Existing rows in conversations_hot OR conversations_cold are checked
|
|
25
|
+
* on replay (compacted-then-re-imported conversations don't re-enter hot).
|
|
26
|
+
*
|
|
27
|
+
* Refresh-on-grow:
|
|
28
|
+
* - For each existing row, the handler compares the incoming canonical
|
|
29
|
+
* `conversationContentFingerprint(content)` against a fingerprint
|
|
30
|
+
* derived from the existing row's own `content` column. The row, not
|
|
31
|
+
* the raw artifact, is the source of truth for "what is currently
|
|
32
|
+
* indexed"; using raw here would create a drift bug if Phase 2 crashes
|
|
33
|
+
* between writing the new raw and replacing the row. If fingerprints
|
|
34
|
+
* match, the conversation is unchanged and we skip. If they differ,
|
|
35
|
+
* the conversation has grown and we refresh: write a new raw artifact
|
|
36
|
+
* (which records the target table so crash recovery can route the
|
|
37
|
+
* restored row back to the right place), delete the old row, insert
|
|
38
|
+
* the new row in the same table where it lived (hot stays hot, cold
|
|
39
|
+
* stays cold — we do not silently re-promote). After a successful
|
|
40
|
+
* row replacement, prior raw artifacts for that row id are pruned
|
|
41
|
+
* best-effort so rebuild does not insert duplicates.
|
|
42
|
+
*
|
|
43
|
+
* Persisted fingerprint:
|
|
44
|
+
* - `conversation_fingerprint` is written both into the raw artifact and
|
|
45
|
+
* into the LanceDB row. Refresh-on-grow prefers the row column when it
|
|
46
|
+
* is non-empty (avoids re-deriving from `content` on every replay), and
|
|
47
|
+
* falls back to deriving from row `content` for legacy rows written
|
|
48
|
+
* before the column existed. The migration in `initTables` adds the
|
|
49
|
+
* column to existing tables filled with empty strings, so those rows
|
|
50
|
+
* continue to go through the derivation fallback until next refresh.
|
|
23
51
|
*/
|
|
24
52
|
import crypto from "node:crypto";
|
|
25
53
|
import fs from "node:fs";
|
|
@@ -31,7 +59,13 @@ import { parseChatGPTWeb } from "../../ingestion/parsers/chatgpt-web.js";
|
|
|
31
59
|
import { parseClaudeWeb } from "../../ingestion/parsers/claude-web.js";
|
|
32
60
|
import { parseGeminiWeb } from "../../ingestion/parsers/gemini-web.js";
|
|
33
61
|
import { parseGrokWeb } from "../../ingestion/parsers/grok-web.js";
|
|
62
|
+
import { stableConversationRowId } from "../../ingestion/inbox-core/conversation-key.js";
|
|
63
|
+
import { conversationContentFingerprint } from "../../ingestion/inbox-core/conversation-fingerprint.js";
|
|
34
64
|
import { CodexCliMetadataExtractor } from "../../providers/codex-cli-metadata-extraction.js";
|
|
65
|
+
import { BasicMetadataExtractor, RIFT_BASIC_METADATA_PROVIDER, } from "../../providers/basic-metadata-extraction.js";
|
|
66
|
+
import { RIFT_NONE_EMBEDDING_PROVIDER, isPlaceholderEmbeddingProvider, } from "../../providers/placeholder-embed.js";
|
|
67
|
+
import { recordEmbed } from "../../observability/embedding-events.js";
|
|
68
|
+
import { recordIndexWrite } from "../../observability/index-events.js";
|
|
35
69
|
/** Map of source -> parser. Only fixture-backed sources are registered. */
|
|
36
70
|
const PARSERS = {
|
|
37
71
|
chatgpt_web: parseChatGPTWeb,
|
|
@@ -39,17 +73,6 @@ const PARSERS = {
|
|
|
39
73
|
gemini_web: parseGeminiWeb,
|
|
40
74
|
grok_web: parseGrokWeb,
|
|
41
75
|
};
|
|
42
|
-
/**
|
|
43
|
-
* Generate a stable row ID from the source conversation ID and job root.
|
|
44
|
-
* This ensures replay safety: retries converge on the same row ID.
|
|
45
|
-
*/
|
|
46
|
-
function stableRowId(conversationId, jobRootId) {
|
|
47
|
-
return crypto
|
|
48
|
-
.createHash("sha256")
|
|
49
|
-
.update(`${jobRootId}:${conversationId}`)
|
|
50
|
-
.digest("hex")
|
|
51
|
-
.slice(0, 32);
|
|
52
|
-
}
|
|
53
76
|
/**
|
|
54
77
|
* Walk the retry_of chain to the root job (same logic as save handler).
|
|
55
78
|
*/
|
|
@@ -66,26 +89,107 @@ function resolveChainRoot(job, queue) {
|
|
|
66
89
|
return current;
|
|
67
90
|
}
|
|
68
91
|
/**
|
|
69
|
-
* Find the raw file for `rowId` under `rawDir`, if
|
|
92
|
+
* Find the latest raw file for `rowId` under `rawDir`, if any.
|
|
93
|
+
*
|
|
94
|
+
* Raw filenames are `<timestamp>_<rowId>.json`. After a refresh, the
|
|
95
|
+
* same row id can have multiple files (one per version); we pick the
|
|
96
|
+
* lexicographically greatest filename, which matches the ISO-8601
|
|
97
|
+
* timestamp ordering used at write time.
|
|
70
98
|
*/
|
|
71
99
|
function findRawFile(rawDir, rowId) {
|
|
72
100
|
if (!fs.existsSync(rawDir))
|
|
73
101
|
return undefined;
|
|
74
102
|
const suffix = `_${rowId}.json`;
|
|
75
|
-
const
|
|
76
|
-
|
|
103
|
+
const matches = fs.readdirSync(rawDir).filter((f) => f.endsWith(suffix));
|
|
104
|
+
if (matches.length === 0)
|
|
105
|
+
return undefined;
|
|
106
|
+
matches.sort();
|
|
107
|
+
return path.join(rawDir, matches[matches.length - 1]);
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Read (or derive) the canonical content fingerprint of an existing
|
|
111
|
+
* indexed row.
|
|
112
|
+
*
|
|
113
|
+
* Preference order:
|
|
114
|
+
* 1. The row's persisted `conversation_fingerprint` column (when
|
|
115
|
+
* non-empty) — this is the source of truth written at last ingest.
|
|
116
|
+
* 2. Derive from the row's own `content` — used for legacy rows
|
|
117
|
+
* written before the column existed (post-migration the column is
|
|
118
|
+
* present but empty for those rows).
|
|
119
|
+
*
|
|
120
|
+
* Using the row content (rather than the raw artifact on disk) as the
|
|
121
|
+
* derivation fallback avoids a raw-vs-row drift bug: if Phase 2 crashes
|
|
122
|
+
* between writing the new raw and replacing the row, the raw on disk is
|
|
123
|
+
* ahead of the table, and a subsequent re-import comparing against raw
|
|
124
|
+
* would mistakenly decide "unchanged" while the row is still stale.
|
|
125
|
+
*
|
|
126
|
+
* Returns `undefined` if neither source yields a fingerprint; callers
|
|
127
|
+
* treat that as "cannot prove unchanged" and refresh.
|
|
128
|
+
*/
|
|
129
|
+
function existingRowFingerprint(row) {
|
|
130
|
+
const stored = typeof row.conversation_fingerprint === "string"
|
|
131
|
+
? row.conversation_fingerprint
|
|
132
|
+
: "";
|
|
133
|
+
if (stored)
|
|
134
|
+
return stored;
|
|
135
|
+
const content = typeof row.content === "string" ? row.content : undefined;
|
|
136
|
+
if (!content)
|
|
137
|
+
return undefined;
|
|
138
|
+
return conversationContentFingerprint(content);
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Best-effort prune of stale raw artifacts for `rowId` under `rawDir`,
|
|
142
|
+
* keeping only `keepFileName`. Called after a refresh has successfully
|
|
143
|
+
* replaced the row in its table, so the new raw is the only one rebuild
|
|
144
|
+
* needs to re-derive the row.
|
|
145
|
+
*
|
|
146
|
+
* Safe-by-design: any pre-existing raw still on disk has older content
|
|
147
|
+
* than the row now holds, so deleting it loses nothing the table cannot
|
|
148
|
+
* already reconstruct. If a prune fails (filesystem error, race with
|
|
149
|
+
* another process), we swallow the error rather than fail the ingest —
|
|
150
|
+
* the rebuild duplicate caused by an extra raw is a much cheaper bug
|
|
151
|
+
* than a failed ingest after the row is already correct.
|
|
152
|
+
*/
|
|
153
|
+
function pruneStaleRawArtifacts(rawDir, rowId, keepFileName) {
|
|
154
|
+
if (!fs.existsSync(rawDir))
|
|
155
|
+
return;
|
|
156
|
+
const suffix = `_${rowId}.json`;
|
|
157
|
+
for (const name of fs.readdirSync(rawDir)) {
|
|
158
|
+
if (!name.endsWith(suffix))
|
|
159
|
+
continue;
|
|
160
|
+
if (name === keepFileName)
|
|
161
|
+
continue;
|
|
162
|
+
try {
|
|
163
|
+
fs.unlinkSync(path.join(rawDir, name));
|
|
164
|
+
}
|
|
165
|
+
catch {
|
|
166
|
+
// best-effort
|
|
167
|
+
}
|
|
168
|
+
}
|
|
77
169
|
}
|
|
78
170
|
export function createIngestHandler(deps) {
|
|
79
171
|
return async (job) => {
|
|
80
172
|
const rootJob = resolveChainRoot(job, deps.queue);
|
|
81
173
|
const rootPayload = rootJob.payload ??
|
|
82
174
|
job.payload;
|
|
83
|
-
const jobRootId = rootJob.id;
|
|
84
175
|
const payload = rootPayload;
|
|
85
176
|
if (!payload?.source || !payload.fileData) {
|
|
86
177
|
throw new Error("Invalid ingest job payload: missing source or fileData");
|
|
87
178
|
}
|
|
88
179
|
const metadataExtractor = (deps.metadataExtractorFactory ?? resolveMetadataExtractor)(payload, deps);
|
|
180
|
+
// Provenance markers stamped onto every row written by this job.
|
|
181
|
+
// `metadata_provider`: "rift-basic" when BasicMetadataExtractor produced
|
|
182
|
+
// the (deterministic, AI-free) metadata, else the enriching provider's
|
|
183
|
+
// name (or "" when unknown). `embedding_provider`: "rift-none" when the
|
|
184
|
+
// vector is a no-key placeholder, else "" (a valid embedding). Both are
|
|
185
|
+
// constant for the lifetime of one ingest job.
|
|
186
|
+
const metadataProviderLabel = metadataExtractor.getProvenance?.()?.provider ?? "";
|
|
187
|
+
const embeddingProviderLabel = isPlaceholderEmbeddingProvider(deps.embeddingProvider)
|
|
188
|
+
? RIFT_NONE_EMBEDDING_PROVIDER
|
|
189
|
+
: "";
|
|
190
|
+
// Lazily created only if an AI extractor throws mid-import and we need the
|
|
191
|
+
// no-AI fallback (see Phase 1 below). One instance is reused for the job.
|
|
192
|
+
let basicFallback = null;
|
|
89
193
|
// --- 1. Unpack archive securely ---
|
|
90
194
|
const fileBuffer = Buffer.from(payload.fileData, "base64");
|
|
91
195
|
const { files } = extractArchive(fileBuffer, payload.filename);
|
|
@@ -96,11 +200,18 @@ export function createIngestHandler(deps) {
|
|
|
96
200
|
}
|
|
97
201
|
const parsed = parser(files);
|
|
98
202
|
if (parsed.length === 0) {
|
|
99
|
-
//
|
|
100
|
-
|
|
203
|
+
// A user-visible inbox drop that produced zero parseable
|
|
204
|
+
// conversations is an export the friend will want to know about
|
|
205
|
+
// and re-drop — not a silent no-op. Surfacing this as a failed
|
|
206
|
+
// job lets /status/friend show `last_error_reason: "empty_export"`
|
|
207
|
+
// and the existing Next: line route the user to re-drop.
|
|
208
|
+
// The phrase "No conversations" is what classifyJobError maps to
|
|
209
|
+
// the `empty_export` class; do not rephrase without updating it.
|
|
210
|
+
throw new Error(`No conversations found in export "${payload.filename}"`);
|
|
101
211
|
}
|
|
102
212
|
const rawDir = path.join(deps.dataDir, "raw", "conversations", payload.rawSource ?? payload.source);
|
|
103
213
|
const table = getTable("conversations_hot");
|
|
214
|
+
const coldTable = getTable("conversations_cold");
|
|
104
215
|
// --- Phase 1: Process all conversations (no side effects) ---
|
|
105
216
|
// Extract metadata + embed for every conversation. If any fails,
|
|
106
217
|
// quarantine that one and throw — nothing has been persisted yet.
|
|
@@ -110,38 +221,105 @@ export function createIngestHandler(deps) {
|
|
|
110
221
|
const processed = [];
|
|
111
222
|
const recoverable = [];
|
|
112
223
|
for (const conversation of parsed) {
|
|
113
|
-
|
|
114
|
-
//
|
|
115
|
-
|
|
224
|
+
// Row id is keyed on (source, provider conversation id) so a
|
|
225
|
+
// re-imported monthly export collapses to the same row instead
|
|
226
|
+
// of duplicating every conversation under a fresh job-root id.
|
|
227
|
+
const rowId = stableConversationRowId(payload.source, conversation.id);
|
|
228
|
+
const fingerprint = conversationContentFingerprint(conversation.content);
|
|
229
|
+
// Replay / refresh guard.
|
|
230
|
+
// Check both hot AND cold — a conversation compacted into cold
|
|
231
|
+
// is exactly the kind of "old" conversation a monthly full export
|
|
232
|
+
// re-includes; without the cold check we'd duplicate it back into hot.
|
|
233
|
+
// For each existing row, compare content fingerprints to decide
|
|
234
|
+
// between skip (unchanged) and refresh (grown).
|
|
235
|
+
const existingHot = await table
|
|
116
236
|
.query()
|
|
117
237
|
.where(`id = '${rowId}'`)
|
|
118
238
|
.toArray();
|
|
119
|
-
|
|
120
|
-
|
|
239
|
+
const existingCold = existingHot.length === 0
|
|
240
|
+
? await coldTable.query().where(`id = '${rowId}'`).toArray()
|
|
241
|
+
: [];
|
|
242
|
+
const existingTable = existingHot.length > 0
|
|
243
|
+
? "conversations_hot"
|
|
244
|
+
: existingCold.length > 0
|
|
245
|
+
? "conversations_cold"
|
|
246
|
+
: undefined;
|
|
247
|
+
if (existingTable) {
|
|
248
|
+
// Row is already indexed. Decide skip vs refresh by comparing
|
|
249
|
+
// the incoming content fingerprint against a fingerprint
|
|
250
|
+
// derived from the row's own content. Using the row (not the
|
|
251
|
+
// raw artifact on disk) sidesteps drift between raw and row
|
|
252
|
+
// during the Phase 2 crash window.
|
|
253
|
+
const existingRow = (existingHot[0] ?? existingCold[0]);
|
|
254
|
+
const existingFingerprint = existingRowFingerprint(existingRow);
|
|
255
|
+
if (existingFingerprint && existingFingerprint === fingerprint) {
|
|
256
|
+
// Unchanged — preserve the existing snapshot.
|
|
257
|
+
continue;
|
|
258
|
+
}
|
|
259
|
+
// Either the conversation has grown (fingerprint differs) or
|
|
260
|
+
// we cannot prove it's unchanged (row content is empty / not
|
|
261
|
+
// a string). In both cases, fall through to refresh:
|
|
262
|
+
// re-extract metadata + re-embed, then in Phase 2 replace
|
|
263
|
+
// the row in the table where it currently lives.
|
|
121
264
|
}
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
265
|
+
else {
|
|
266
|
+
// Crash recovery: raw file exists but row missing → defer to Phase 2.
|
|
267
|
+
const existingRawPath = findRawFile(rawDir, rowId);
|
|
268
|
+
if (existingRawPath) {
|
|
269
|
+
recoverable.push({ rawPath: existingRawPath, rowId });
|
|
270
|
+
continue;
|
|
271
|
+
}
|
|
127
272
|
}
|
|
273
|
+
// Per-item provider/provenance, resolved AFTER extraction so providers
|
|
274
|
+
// that record run-specific details (e.g. Codex's cli_tag, set only on a
|
|
275
|
+
// successful run) report them. Overridden on fallback below.
|
|
128
276
|
let metadata;
|
|
277
|
+
let itemMetadataProvider;
|
|
278
|
+
let itemExtractionProvenance;
|
|
129
279
|
try {
|
|
130
280
|
metadata = await metadataExtractor.extractMetadata(conversation.content);
|
|
281
|
+
itemMetadataProvider = metadataProviderLabel;
|
|
282
|
+
itemExtractionProvenance = metadataExtractor.getProvenance?.();
|
|
131
283
|
}
|
|
132
284
|
catch (err) {
|
|
133
|
-
|
|
134
|
-
|
|
285
|
+
// Locked AI-worker policy (PLAN.MD §1): fast import must not require an
|
|
286
|
+
// AI worker. An installed-but-unauthenticated Codex — or any transient
|
|
287
|
+
// AI extractor failure — must NOT fail the import. Fall back to
|
|
288
|
+
// deterministic basic metadata and mark the row `rift-basic` so a later
|
|
289
|
+
// enrichment pass backfills exactly it. If the primary IS already basic,
|
|
290
|
+
// a throw is a real bug (BasicMetadataExtractor never throws), so keep
|
|
291
|
+
// the quarantine-and-fail behavior rather than masking it.
|
|
292
|
+
if (metadataProviderLabel === RIFT_BASIC_METADATA_PROVIDER) {
|
|
293
|
+
await quarantine(deps.dataDir, payload.source, conversation, err);
|
|
294
|
+
throw err;
|
|
295
|
+
}
|
|
296
|
+
basicFallback ??= new BasicMetadataExtractor();
|
|
297
|
+
metadata = await basicFallback.extractMetadata(conversation.content);
|
|
298
|
+
itemMetadataProvider = RIFT_BASIC_METADATA_PROVIDER;
|
|
299
|
+
itemExtractionProvenance = basicFallback.getProvenance();
|
|
135
300
|
}
|
|
136
301
|
let embedding;
|
|
137
302
|
try {
|
|
138
|
-
embedding = await deps.embeddingProvider
|
|
303
|
+
embedding = await recordEmbed(deps.dataDir, deps.embeddingProvider, {
|
|
304
|
+
pipeline: "ingest_job",
|
|
305
|
+
operation: "conversation_embedding",
|
|
306
|
+
input_count: 1,
|
|
307
|
+
}, () => deps.embeddingProvider.embed(conversation.content));
|
|
139
308
|
}
|
|
140
309
|
catch (err) {
|
|
141
310
|
await quarantine(deps.dataDir, payload.source, conversation, err);
|
|
142
311
|
throw err;
|
|
143
312
|
}
|
|
144
|
-
processed.push({
|
|
313
|
+
processed.push({
|
|
314
|
+
conversation,
|
|
315
|
+
rowId,
|
|
316
|
+
fingerprint,
|
|
317
|
+
metadata,
|
|
318
|
+
embedding,
|
|
319
|
+
metadataProvider: itemMetadataProvider,
|
|
320
|
+
extractionProvenance: itemExtractionProvenance,
|
|
321
|
+
...(existingTable ? { refreshTable: existingTable } : {}),
|
|
322
|
+
});
|
|
145
323
|
}
|
|
146
324
|
if (processed.length === 0 && recoverable.length === 0) {
|
|
147
325
|
return; // All already indexed (replay)
|
|
@@ -150,14 +328,24 @@ export function createIngestHandler(deps) {
|
|
|
150
328
|
// Write raw files first (crash safety), then insert rows.
|
|
151
329
|
// Recoverable items already have raw files — only insert rows.
|
|
152
330
|
const timestamp = new Date().toISOString().replace(/[:.]/g, "-");
|
|
331
|
+
const newRawFileNames = new Map();
|
|
153
332
|
for (const item of processed) {
|
|
154
|
-
|
|
333
|
+
// Per-item provenance: a conversation that fell back to basic metadata
|
|
334
|
+
// carries the basic extractor's provenance, not the job-level provider's.
|
|
335
|
+
const extractionProvenance = item.extractionProvenance;
|
|
336
|
+
// `target_table` lets crash recovery route the restored row to the
|
|
337
|
+
// table the slice originally targeted. Without it, a cold refresh
|
|
338
|
+
// interrupted between delete-old and add-new would be restored
|
|
339
|
+
// into `conversations_hot` on replay (silent re-promote).
|
|
340
|
+
const targetTable = item.refreshTable ?? "conversations_hot";
|
|
155
341
|
const rawData = {
|
|
156
342
|
source: payload.source,
|
|
157
343
|
conversation_id: item.conversation.id,
|
|
158
344
|
title: item.conversation.title,
|
|
159
345
|
created_at: item.conversation.createdAt,
|
|
160
346
|
content: item.conversation.content,
|
|
347
|
+
conversation_fingerprint: item.fingerprint,
|
|
348
|
+
target_table: targetTable,
|
|
161
349
|
summary: item.conversation.title,
|
|
162
350
|
domain: item.metadata.domain,
|
|
163
351
|
intent: item.metadata.intent,
|
|
@@ -165,16 +353,32 @@ export function createIngestHandler(deps) {
|
|
|
165
353
|
topics: item.metadata.topics,
|
|
166
354
|
decisions: item.metadata.decisions,
|
|
167
355
|
key_outputs: item.metadata.key_outputs,
|
|
356
|
+
metadata_provider: item.metadataProvider,
|
|
357
|
+
embedding_provider: embeddingProviderLabel,
|
|
168
358
|
ingested_at: new Date().toISOString(),
|
|
169
359
|
...(extractionProvenance
|
|
170
360
|
? { extraction_provenance: extractionProvenance }
|
|
171
361
|
: {}),
|
|
172
362
|
};
|
|
173
363
|
const rawFileName = `${timestamp}_${item.rowId}.json`;
|
|
364
|
+
newRawFileNames.set(item.rowId, rawFileName);
|
|
174
365
|
const rawPath = path.join(rawDir, rawFileName);
|
|
175
366
|
await atomicWrite(rawPath, JSON.stringify(rawData, null, 2));
|
|
176
367
|
}
|
|
177
368
|
for (const item of processed) {
|
|
369
|
+
// For a refresh, delete the old row from whichever table it lives
|
|
370
|
+
// in BEFORE inserting the new one — otherwise LanceDB ends up with
|
|
371
|
+
// two rows sharing the same id. Raw artifact for the new version
|
|
372
|
+
// is already on disk above, so if the delete-then-add window is
|
|
373
|
+
// interrupted, the next replay finds rowId missing + raw present
|
|
374
|
+
// and reindexes from raw via the recoverable path.
|
|
375
|
+
const targetTableName = item.refreshTable ?? "conversations_hot";
|
|
376
|
+
const targetTable = item.refreshTable === "conversations_cold"
|
|
377
|
+
? coldTable
|
|
378
|
+
: table;
|
|
379
|
+
if (item.refreshTable) {
|
|
380
|
+
await targetTable.delete(`id = '${item.rowId}'`);
|
|
381
|
+
}
|
|
178
382
|
const row = {
|
|
179
383
|
id: item.rowId,
|
|
180
384
|
content: item.conversation.content,
|
|
@@ -189,12 +393,30 @@ export function createIngestHandler(deps) {
|
|
|
189
393
|
key_outputs: JSON.stringify(item.metadata.key_outputs),
|
|
190
394
|
indexed_at: new Date().toISOString(),
|
|
191
395
|
idempotency_key: payload.idempotency_key ?? "",
|
|
396
|
+
conversation_fingerprint: item.fingerprint,
|
|
397
|
+
metadata_provider: item.metadataProvider,
|
|
398
|
+
embedding_provider: embeddingProviderLabel,
|
|
192
399
|
};
|
|
193
|
-
await
|
|
400
|
+
await recordIndexWrite(deps.dataDir, {
|
|
401
|
+
table: targetTableName,
|
|
402
|
+
pipeline: "ingest_job",
|
|
403
|
+
operation: item.refreshTable
|
|
404
|
+
? "conversation_refresh"
|
|
405
|
+
: "conversation_upsert",
|
|
406
|
+
row_count: 1,
|
|
407
|
+
}, () => targetTable.add([row]));
|
|
408
|
+
if (item.refreshTable) {
|
|
409
|
+
// Once the new row is in place, the prior raw artifact(s) for
|
|
410
|
+
// this rowId only carry the older content. Prune them so a
|
|
411
|
+
// future rebuild does not insert duplicate rows (one per raw)
|
|
412
|
+
// for the same conversation. Best-effort by design.
|
|
413
|
+
const keep = newRawFileNames.get(item.rowId);
|
|
414
|
+
pruneStaleRawArtifacts(rawDir, item.rowId, keep);
|
|
415
|
+
}
|
|
194
416
|
}
|
|
195
417
|
// Recover rows from existing raw files (crash recovery).
|
|
196
418
|
for (const item of recoverable) {
|
|
197
|
-
await reindexFromRaw(item.rawPath, item.rowId, payload, table, deps.embeddingProvider);
|
|
419
|
+
await reindexFromRaw(item.rawPath, item.rowId, payload, { hot: table, cold: coldTable }, deps.embeddingProvider, deps.dataDir);
|
|
198
420
|
}
|
|
199
421
|
};
|
|
200
422
|
}
|
|
@@ -208,12 +430,31 @@ function resolveMetadataExtractor(payload, deps) {
|
|
|
208
430
|
* Re-index a conversation from its raw file (crash recovery).
|
|
209
431
|
* Raw files written by Phase 2 include full metadata, so we can
|
|
210
432
|
* rebuild the row without calling the extractor again.
|
|
433
|
+
*
|
|
434
|
+
* Routing: the raw artifact's `target_table` decides hot vs cold so
|
|
435
|
+
* a cold refresh interrupted between delete-old and add-new is
|
|
436
|
+
* restored back into cold, not silently re-promoted to hot. Legacy
|
|
437
|
+
* artifacts (pre-2026-05-14) have no `target_table` field and default
|
|
438
|
+
* to hot — same behavior as before this slice.
|
|
211
439
|
*/
|
|
212
|
-
async function reindexFromRaw(rawPath, rowId, payload,
|
|
440
|
+
async function reindexFromRaw(rawPath, rowId, payload, tables, embeddingProvider, dataDir) {
|
|
213
441
|
const raw = JSON.parse(fs.readFileSync(rawPath, "utf-8"));
|
|
214
442
|
const content = raw.content ?? "";
|
|
215
443
|
const summary = raw.summary ?? "";
|
|
216
|
-
const
|
|
444
|
+
const rawTarget = raw.target_table;
|
|
445
|
+
const targetTableName = rawTarget === "conversations_cold" ? "conversations_cold" : "conversations_hot";
|
|
446
|
+
const targetTable = targetTableName === "conversations_cold" ? tables.cold : tables.hot;
|
|
447
|
+
const embedding = await recordEmbed(dataDir, embeddingProvider, {
|
|
448
|
+
pipeline: "ingest_job",
|
|
449
|
+
operation: "reindex_from_raw",
|
|
450
|
+
input_count: 1,
|
|
451
|
+
}, () => embeddingProvider.embed(content || summary));
|
|
452
|
+
const fingerprint = typeof raw.conversation_fingerprint === "string"
|
|
453
|
+
&& raw.conversation_fingerprint.length > 0
|
|
454
|
+
? raw.conversation_fingerprint
|
|
455
|
+
: content
|
|
456
|
+
? conversationContentFingerprint(content)
|
|
457
|
+
: "";
|
|
217
458
|
const row = {
|
|
218
459
|
id: rowId,
|
|
219
460
|
content,
|
|
@@ -228,8 +469,21 @@ async function reindexFromRaw(rawPath, rowId, payload, table, embeddingProvider)
|
|
|
228
469
|
key_outputs: JSON.stringify(raw.key_outputs ?? []),
|
|
229
470
|
indexed_at: new Date().toISOString(),
|
|
230
471
|
idempotency_key: payload.idempotency_key ?? "",
|
|
472
|
+
conversation_fingerprint: fingerprint,
|
|
473
|
+
// Metadata is restored from raw, so its provider marker is preserved as
|
|
474
|
+
// written. The embedding is recomputed here, so its marker reflects the
|
|
475
|
+
// provider that just ran (placeholder → "rift-none", real → "").
|
|
476
|
+
metadata_provider: typeof raw.metadata_provider === "string" ? raw.metadata_provider : "",
|
|
477
|
+
embedding_provider: isPlaceholderEmbeddingProvider(embeddingProvider)
|
|
478
|
+
? RIFT_NONE_EMBEDDING_PROVIDER
|
|
479
|
+
: "",
|
|
231
480
|
};
|
|
232
|
-
await
|
|
481
|
+
await recordIndexWrite(dataDir, {
|
|
482
|
+
table: targetTableName,
|
|
483
|
+
pipeline: "ingest_job",
|
|
484
|
+
operation: "conversation_reindex_from_raw",
|
|
485
|
+
row_count: 1,
|
|
486
|
+
}, () => targetTable.add([row]));
|
|
233
487
|
}
|
|
234
488
|
/**
|
|
235
489
|
* Quarantine a failed conversation to data/quarantine/.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ingest.js","sourceRoot":"","sources":["../../../../src/jobs/handlers/ingest.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ingest.js","sourceRoot":"","sources":["../../../../src/jobs/handlers/ingest.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,17 @@ export interface ReconcileDeps {
|
|
|
12
12
|
/** Ollama embedding provider for local-mode sources (Slice 19). */
|
|
13
13
|
localEmbeddingProvider?: EmbeddingProvider;
|
|
14
14
|
}
|
|
15
|
+
/**
|
|
16
|
+
* Optional job-payload args. When `dedupe_conversations` is true the
|
|
17
|
+
* reconcile handler runs only the dedupe pass (skipping the normal
|
|
18
|
+
* structured-doc / conversation / digest reconcile work). `apply`
|
|
19
|
+
* gates the mutation — without it the handler reports the plan but
|
|
20
|
+
* deletes nothing.
|
|
21
|
+
*/
|
|
22
|
+
export interface ReconcileJobArgs {
|
|
23
|
+
dedupe_conversations?: boolean;
|
|
24
|
+
apply?: boolean;
|
|
25
|
+
}
|
|
15
26
|
export interface ReconcileReport {
|
|
16
27
|
files_checked: number;
|
|
17
28
|
missing_reindexed: number;
|
|
@@ -24,6 +35,23 @@ export interface ReconcileReport {
|
|
|
24
35
|
* stays visible in reconcile reports.
|
|
25
36
|
*/
|
|
26
37
|
engine_owned_purged: number;
|
|
38
|
+
/**
|
|
39
|
+
* Conversation raw files NOT re-indexed because a row with the same
|
|
40
|
+
* non-empty `idempotency_key` already exists in hot/cold under a
|
|
41
|
+
* different id. This is the durable backstop against the bounded job
|
|
42
|
+
* ledger: if a failed save's job ages out of the queue and a same-key
|
|
43
|
+
* resend later indexes the conversation under a new row id, the original
|
|
44
|
+
* orphan raw must not be revived as a duplicate.
|
|
45
|
+
*/
|
|
46
|
+
missing_skipped_duplicate_key: number;
|
|
47
|
+
/**
|
|
48
|
+
* Already-indexed conversation rows DELETED because a newer raw file carrying
|
|
49
|
+
* the same non-empty `idempotency_key` won the duplicate-key race. Without
|
|
50
|
+
* this, an older indexed row would survive reconcile while a full rebuild
|
|
51
|
+
* would replace it with the newer raw — flipping the canonical row id between
|
|
52
|
+
* the two repair tools. See `compareRawRecencyDesc` (shared winner policy).
|
|
53
|
+
*/
|
|
54
|
+
duplicate_rows_removed: number;
|
|
27
55
|
}
|
|
28
56
|
export declare function createReconcileHandler(deps: ReconcileDeps): JobHandler;
|
|
29
57
|
//# sourceMappingURL=reconcile.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reconcile.d.ts","sourceRoot":"","sources":["../../../../src/jobs/handlers/reconcile.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAO,UAAU,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"reconcile.d.ts","sourceRoot":"","sources":["../../../../src/jobs/handlers/reconcile.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAO,UAAU,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAMlE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAE1D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAoB1D,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,mEAAmE;IACnE,sBAAsB,CAAC,EAAE,iBAAiB,CAAC;CAC5C;AAED;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC/B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB;;;;;;OAMG;IACH,mBAAmB,EAAE,MAAM,CAAC;IAC5B;;;;;;;OAOG;IACH,6BAA6B,EAAE,MAAM,CAAC;IACtC;;;;;;OAMG;IACH,sBAAsB,EAAE,MAAM,CAAC;CAChC;AAUD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,aAAa,GAAG,UAAU,CAgEtE"}
|