@getrift/rift 0.0.0 → 0.1.0-beta.1
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.dev.md +110 -0
- package/dist/src/auth/keychain.d.ts +25 -0
- package/dist/src/auth/keychain.d.ts.map +1 -0
- package/dist/src/auth/keychain.js +113 -0
- package/dist/src/auth/keychain.js.map +1 -0
- package/dist/src/auth/middleware.d.ts +20 -0
- package/dist/src/auth/middleware.d.ts.map +1 -0
- package/dist/src/auth/middleware.js +49 -0
- package/dist/src/auth/middleware.js.map +1 -0
- package/dist/src/auth/rate-limit.d.ts +16 -0
- package/dist/src/auth/rate-limit.d.ts.map +1 -0
- package/dist/src/auth/rate-limit.js +38 -0
- package/dist/src/auth/rate-limit.js.map +1 -0
- package/dist/src/auth/rotation.d.ts +67 -0
- package/dist/src/auth/rotation.d.ts.map +1 -0
- package/dist/src/auth/rotation.js +190 -0
- package/dist/src/auth/rotation.js.map +1 -0
- package/dist/src/backfill/project-context-batch-constructor.d.ts +127 -0
- package/dist/src/backfill/project-context-batch-constructor.d.ts.map +1 -0
- package/dist/src/backfill/project-context-batch-constructor.js +210 -0
- package/dist/src/backfill/project-context-batch-constructor.js.map +1 -0
- package/dist/src/capture/auto-capture.d.ts +162 -0
- package/dist/src/capture/auto-capture.d.ts.map +1 -0
- package/dist/src/capture/auto-capture.js +601 -0
- package/dist/src/capture/auto-capture.js.map +1 -0
- package/dist/src/capture/batch-budget.d.ts +90 -0
- package/dist/src/capture/batch-budget.d.ts.map +1 -0
- package/dist/src/capture/batch-budget.js +148 -0
- package/dist/src/capture/batch-budget.js.map +1 -0
- package/dist/src/capture/codex-cli-triage-provider.d.ts +17 -0
- package/dist/src/capture/codex-cli-triage-provider.d.ts.map +1 -0
- package/dist/src/capture/codex-cli-triage-provider.js +109 -0
- package/dist/src/capture/codex-cli-triage-provider.js.map +1 -0
- package/dist/src/capture/observability.d.ts +42 -0
- package/dist/src/capture/observability.d.ts.map +1 -0
- package/dist/src/capture/observability.js +87 -0
- package/dist/src/capture/observability.js.map +1 -0
- package/dist/src/capture/openai-triage-provider.d.ts +92 -0
- package/dist/src/capture/openai-triage-provider.d.ts.map +1 -0
- package/dist/src/capture/openai-triage-provider.js +267 -0
- package/dist/src/capture/openai-triage-provider.js.map +1 -0
- package/dist/src/capture/review-queue-index.d.ts +51 -0
- package/dist/src/capture/review-queue-index.d.ts.map +1 -0
- package/dist/src/capture/review-queue-index.js +204 -0
- package/dist/src/capture/review-queue-index.js.map +1 -0
- package/dist/src/capture/review-queue.d.ts +43 -0
- package/dist/src/capture/review-queue.d.ts.map +1 -0
- package/dist/src/capture/review-queue.js +116 -0
- package/dist/src/capture/review-queue.js.map +1 -0
- package/dist/src/capture/sources.d.ts +7 -0
- package/dist/src/capture/sources.d.ts.map +1 -0
- package/dist/src/capture/sources.js +3 -0
- package/dist/src/capture/sources.js.map +1 -0
- package/dist/src/capture/triage-lane.d.ts +39 -0
- package/dist/src/capture/triage-lane.d.ts.map +1 -0
- package/dist/src/capture/triage-lane.js +217 -0
- package/dist/src/capture/triage-lane.js.map +1 -0
- package/dist/src/capture/triage-provider.d.ts +75 -0
- package/dist/src/capture/triage-provider.d.ts.map +1 -0
- package/dist/src/capture/triage-provider.js +120 -0
- package/dist/src/capture/triage-provider.js.map +1 -0
- package/dist/src/capture/triage.d.ts +30 -0
- package/dist/src/capture/triage.d.ts.map +1 -0
- package/dist/src/capture/triage.js +48 -0
- package/dist/src/capture/triage.js.map +1 -0
- package/dist/src/cli/commands/backfill.d.ts +3 -0
- package/dist/src/cli/commands/backfill.d.ts.map +1 -0
- package/dist/src/cli/commands/backfill.js +1376 -0
- package/dist/src/cli/commands/backfill.js.map +1 -0
- package/dist/src/cli/commands/bulk-ingest.d.ts +3 -0
- package/dist/src/cli/commands/bulk-ingest.d.ts.map +1 -0
- package/dist/src/cli/commands/bulk-ingest.js +126 -0
- package/dist/src/cli/commands/bulk-ingest.js.map +1 -0
- package/dist/src/cli/commands/capture.d.ts +12 -0
- package/dist/src/cli/commands/capture.d.ts.map +1 -0
- package/dist/src/cli/commands/capture.js +123 -0
- package/dist/src/cli/commands/capture.js.map +1 -0
- package/dist/src/cli/commands/compact.d.ts +3 -0
- package/dist/src/cli/commands/compact.d.ts.map +1 -0
- package/dist/src/cli/commands/compact.js +70 -0
- package/dist/src/cli/commands/compact.js.map +1 -0
- package/dist/src/cli/commands/feedback.d.ts +22 -0
- package/dist/src/cli/commands/feedback.d.ts.map +1 -0
- package/dist/src/cli/commands/feedback.js +125 -0
- package/dist/src/cli/commands/feedback.js.map +1 -0
- package/dist/src/cli/commands/hooks-install.d.ts +19 -0
- package/dist/src/cli/commands/hooks-install.d.ts.map +1 -0
- package/dist/src/cli/commands/hooks-install.js +103 -0
- package/dist/src/cli/commands/hooks-install.js.map +1 -0
- package/dist/src/cli/commands/import.d.ts +19 -0
- package/dist/src/cli/commands/import.d.ts.map +1 -0
- package/dist/src/cli/commands/import.js +258 -0
- package/dist/src/cli/commands/import.js.map +1 -0
- package/dist/src/cli/commands/ingest.d.ts +3 -0
- package/dist/src/cli/commands/ingest.d.ts.map +1 -0
- package/dist/src/cli/commands/ingest.js +80 -0
- package/dist/src/cli/commands/ingest.js.map +1 -0
- package/dist/src/cli/commands/mcp-install.d.ts +25 -0
- package/dist/src/cli/commands/mcp-install.d.ts.map +1 -0
- package/dist/src/cli/commands/mcp-install.js +134 -0
- package/dist/src/cli/commands/mcp-install.js.map +1 -0
- package/dist/src/cli/commands/onboard.d.ts +98 -0
- package/dist/src/cli/commands/onboard.d.ts.map +1 -0
- package/dist/src/cli/commands/onboard.js +823 -0
- package/dist/src/cli/commands/onboard.js.map +1 -0
- package/dist/src/cli/commands/rebuild.d.ts +12 -0
- package/dist/src/cli/commands/rebuild.d.ts.map +1 -0
- package/dist/src/cli/commands/rebuild.js +164 -0
- package/dist/src/cli/commands/rebuild.js.map +1 -0
- package/dist/src/cli/commands/reconcile.d.ts +3 -0
- package/dist/src/cli/commands/reconcile.d.ts.map +1 -0
- package/dist/src/cli/commands/reconcile.js +56 -0
- package/dist/src/cli/commands/reconcile.js.map +1 -0
- package/dist/src/cli/commands/reindex.d.ts +3 -0
- package/dist/src/cli/commands/reindex.d.ts.map +1 -0
- package/dist/src/cli/commands/reindex.js +66 -0
- package/dist/src/cli/commands/reindex.js.map +1 -0
- package/dist/src/cli/commands/review.d.ts +13 -0
- package/dist/src/cli/commands/review.d.ts.map +1 -0
- package/dist/src/cli/commands/review.js +383 -0
- package/dist/src/cli/commands/review.js.map +1 -0
- package/dist/src/cli/commands/save.d.ts +3 -0
- package/dist/src/cli/commands/save.d.ts.map +1 -0
- package/dist/src/cli/commands/save.js +111 -0
- package/dist/src/cli/commands/save.js.map +1 -0
- package/dist/src/cli/commands/search.d.ts +35 -0
- package/dist/src/cli/commands/search.d.ts.map +1 -0
- package/dist/src/cli/commands/search.js +88 -0
- package/dist/src/cli/commands/search.js.map +1 -0
- package/dist/src/cli/commands/stats.d.ts +3 -0
- package/dist/src/cli/commands/stats.d.ts.map +1 -0
- package/dist/src/cli/commands/stats.js +42 -0
- package/dist/src/cli/commands/stats.js.map +1 -0
- package/dist/src/cli/commands/status.d.ts +15 -0
- package/dist/src/cli/commands/status.d.ts.map +1 -0
- package/dist/src/cli/commands/status.js +89 -0
- package/dist/src/cli/commands/status.js.map +1 -0
- package/dist/src/cli/commands/token-issue.d.ts +3 -0
- package/dist/src/cli/commands/token-issue.d.ts.map +1 -0
- package/dist/src/cli/commands/token-issue.js +25 -0
- package/dist/src/cli/commands/token-issue.js.map +1 -0
- package/dist/src/cli/commands/triage.d.ts +3 -0
- package/dist/src/cli/commands/triage.d.ts.map +1 -0
- package/dist/src/cli/commands/triage.js +125 -0
- package/dist/src/cli/commands/triage.js.map +1 -0
- package/dist/src/cli/commands/uninstall.d.ts +3 -0
- package/dist/src/cli/commands/uninstall.d.ts.map +1 -0
- package/dist/src/cli/commands/uninstall.js +238 -0
- package/dist/src/cli/commands/uninstall.js.map +1 -0
- package/dist/src/cli/feedback/feedback-config.d.ts +21 -0
- package/dist/src/cli/feedback/feedback-config.d.ts.map +1 -0
- package/dist/src/cli/feedback/feedback-config.js +43 -0
- package/dist/src/cli/feedback/feedback-config.js.map +1 -0
- package/dist/src/cli/feedback/feedback-history.d.ts +4 -0
- package/dist/src/cli/feedback/feedback-history.d.ts.map +1 -0
- package/dist/src/cli/feedback/feedback-history.js +115 -0
- package/dist/src/cli/feedback/feedback-history.js.map +1 -0
- package/dist/src/cli/feedback/feedback-payload.d.ts +53 -0
- package/dist/src/cli/feedback/feedback-payload.d.ts.map +1 -0
- package/dist/src/cli/feedback/feedback-payload.js +10 -0
- package/dist/src/cli/feedback/feedback-payload.js.map +1 -0
- package/dist/src/cli/feedback/feedback-relay.d.ts +15 -0
- package/dist/src/cli/feedback/feedback-relay.d.ts.map +1 -0
- package/dist/src/cli/feedback/feedback-relay.js +47 -0
- package/dist/src/cli/feedback/feedback-relay.js.map +1 -0
- package/dist/src/cli/feedback/feedback-status.d.ts +11 -0
- package/dist/src/cli/feedback/feedback-status.d.ts.map +1 -0
- package/dist/src/cli/feedback/feedback-status.js +122 -0
- package/dist/src/cli/feedback/feedback-status.js.map +1 -0
- package/dist/src/cli/hooks-writers/claude-code-policy-script.d.ts +25 -0
- package/dist/src/cli/hooks-writers/claude-code-policy-script.d.ts.map +1 -0
- package/dist/src/cli/hooks-writers/claude-code-policy-script.js +85 -0
- package/dist/src/cli/hooks-writers/claude-code-policy-script.js.map +1 -0
- package/dist/src/cli/hooks-writers/claude-code.d.ts +12 -0
- package/dist/src/cli/hooks-writers/claude-code.d.ts.map +1 -0
- package/dist/src/cli/hooks-writers/claude-code.js +228 -0
- package/dist/src/cli/hooks-writers/claude-code.js.map +1 -0
- package/dist/src/cli/hooks-writers/errors.d.ts +16 -0
- package/dist/src/cli/hooks-writers/errors.d.ts.map +1 -0
- package/dist/src/cli/hooks-writers/errors.js +24 -0
- package/dist/src/cli/hooks-writers/errors.js.map +1 -0
- package/dist/src/cli/hooks-writers/index.d.ts +13 -0
- package/dist/src/cli/hooks-writers/index.d.ts.map +1 -0
- package/dist/src/cli/hooks-writers/index.js +26 -0
- package/dist/src/cli/hooks-writers/index.js.map +1 -0
- package/dist/src/cli/hooks-writers/types.d.ts +27 -0
- package/dist/src/cli/hooks-writers/types.d.ts.map +1 -0
- package/dist/src/cli/hooks-writers/types.js +9 -0
- package/dist/src/cli/hooks-writers/types.js.map +1 -0
- package/dist/src/cli/http-client.d.ts +36 -0
- package/dist/src/cli/http-client.d.ts.map +1 -0
- package/dist/src/cli/http-client.js +153 -0
- package/dist/src/cli/http-client.js.map +1 -0
- package/dist/src/cli/index.d.ts +4 -0
- package/dist/src/cli/index.d.ts.map +1 -0
- package/dist/src/cli/index.js +68 -0
- package/dist/src/cli/index.js.map +1 -0
- package/dist/src/cli/job-poller.d.ts +13 -0
- package/dist/src/cli/job-poller.d.ts.map +1 -0
- package/dist/src/cli/job-poller.js +29 -0
- package/dist/src/cli/job-poller.js.map +1 -0
- package/dist/src/cli/mcp-config-writers/codex-toml.d.ts +10 -0
- package/dist/src/cli/mcp-config-writers/codex-toml.d.ts.map +1 -0
- package/dist/src/cli/mcp-config-writers/codex-toml.js +410 -0
- package/dist/src/cli/mcp-config-writers/codex-toml.js.map +1 -0
- package/dist/src/cli/mcp-config-writers/errors.d.ts +17 -0
- package/dist/src/cli/mcp-config-writers/errors.d.ts.map +1 -0
- package/dist/src/cli/mcp-config-writers/errors.js +13 -0
- package/dist/src/cli/mcp-config-writers/errors.js.map +1 -0
- package/dist/src/cli/mcp-config-writers/index.d.ts +18 -0
- package/dist/src/cli/mcp-config-writers/index.d.ts.map +1 -0
- package/dist/src/cli/mcp-config-writers/index.js +49 -0
- package/dist/src/cli/mcp-config-writers/index.js.map +1 -0
- package/dist/src/cli/mcp-config-writers/json-config.d.ts +12 -0
- package/dist/src/cli/mcp-config-writers/json-config.d.ts.map +1 -0
- package/dist/src/cli/mcp-config-writers/json-config.js +177 -0
- package/dist/src/cli/mcp-config-writers/json-config.js.map +1 -0
- package/dist/src/cli/mcp-config-writers/redact.d.ts +28 -0
- package/dist/src/cli/mcp-config-writers/redact.d.ts.map +1 -0
- package/dist/src/cli/mcp-config-writers/redact.js +48 -0
- package/dist/src/cli/mcp-config-writers/redact.js.map +1 -0
- package/dist/src/cli/mcp-config-writers/types.d.ts +32 -0
- package/dist/src/cli/mcp-config-writers/types.d.ts.map +1 -0
- package/dist/src/cli/mcp-config-writers/types.js +5 -0
- package/dist/src/cli/mcp-config-writers/types.js.map +1 -0
- package/dist/src/cli/output.d.ts +8 -0
- package/dist/src/cli/output.d.ts.map +1 -0
- package/dist/src/cli/output.js +34 -0
- package/dist/src/cli/output.js.map +1 -0
- package/dist/src/cli/status/friend-header.d.ts +33 -0
- package/dist/src/cli/status/friend-header.d.ts.map +1 -0
- package/dist/src/cli/status/friend-header.js +108 -0
- package/dist/src/cli/status/friend-header.js.map +1 -0
- package/dist/src/cli/status/local-signals.d.ts +14 -0
- package/dist/src/cli/status/local-signals.d.ts.map +1 -0
- package/dist/src/cli/status/local-signals.js +73 -0
- package/dist/src/cli/status/local-signals.js.map +1 -0
- package/dist/src/cli/token.d.ts +37 -0
- package/dist/src/cli/token.d.ts.map +1 -0
- package/dist/src/cli/token.js +105 -0
- package/dist/src/cli/token.js.map +1 -0
- package/dist/src/cli/uninstall/mcp-uninstall.d.ts +33 -0
- package/dist/src/cli/uninstall/mcp-uninstall.d.ts.map +1 -0
- package/dist/src/cli/uninstall/mcp-uninstall.js +181 -0
- package/dist/src/cli/uninstall/mcp-uninstall.js.map +1 -0
- package/dist/src/config/loader.d.ts +9 -0
- package/dist/src/config/loader.d.ts.map +1 -0
- package/dist/src/config/loader.js +73 -0
- package/dist/src/config/loader.js.map +1 -0
- package/dist/src/config/schema.d.ts +635 -0
- package/dist/src/config/schema.d.ts.map +1 -0
- package/dist/src/config/schema.js +208 -0
- package/dist/src/config/schema.js.map +1 -0
- package/dist/src/ingestion/bulk-ingest.d.ts +11 -0
- package/dist/src/ingestion/bulk-ingest.d.ts.map +1 -0
- package/dist/src/ingestion/bulk-ingest.js +11 -0
- package/dist/src/ingestion/bulk-ingest.js.map +1 -0
- package/dist/src/ingestion/extractor.d.ts +16 -0
- package/dist/src/ingestion/extractor.d.ts.map +1 -0
- package/dist/src/ingestion/extractor.js +85 -0
- package/dist/src/ingestion/extractor.js.map +1 -0
- package/dist/src/ingestion/extractors/docx.d.ts +3 -0
- package/dist/src/ingestion/extractors/docx.d.ts.map +1 -0
- package/dist/src/ingestion/extractors/docx.js +20 -0
- package/dist/src/ingestion/extractors/docx.js.map +1 -0
- package/dist/src/ingestion/extractors/pdf.d.ts +3 -0
- package/dist/src/ingestion/extractors/pdf.d.ts.map +1 -0
- package/dist/src/ingestion/extractors/pdf.js +32 -0
- package/dist/src/ingestion/extractors/pdf.js.map +1 -0
- package/dist/src/ingestion/historical-campaign.d.ts +340 -0
- package/dist/src/ingestion/historical-campaign.d.ts.map +1 -0
- package/dist/src/ingestion/historical-campaign.js +1010 -0
- package/dist/src/ingestion/historical-campaign.js.map +1 -0
- package/dist/src/ingestion/ignored-paths.d.ts +20 -0
- package/dist/src/ingestion/ignored-paths.d.ts.map +1 -0
- package/dist/src/ingestion/ignored-paths.js +45 -0
- package/dist/src/ingestion/ignored-paths.js.map +1 -0
- package/dist/src/ingestion/inbox-watcher.d.ts +12 -0
- package/dist/src/ingestion/inbox-watcher.d.ts.map +1 -0
- package/dist/src/ingestion/inbox-watcher.js +99 -0
- package/dist/src/ingestion/inbox-watcher.js.map +1 -0
- package/dist/src/ingestion/indexer.d.ts +32 -0
- package/dist/src/ingestion/indexer.d.ts.map +1 -0
- package/dist/src/ingestion/indexer.js +68 -0
- package/dist/src/ingestion/indexer.js.map +1 -0
- package/dist/src/ingestion/metadata-extraction.d.ts +53 -0
- package/dist/src/ingestion/metadata-extraction.d.ts.map +1 -0
- package/dist/src/ingestion/metadata-extraction.js +132 -0
- package/dist/src/ingestion/metadata-extraction.js.map +1 -0
- package/dist/src/ingestion/parsers/chatgpt-web.d.ts +29 -0
- package/dist/src/ingestion/parsers/chatgpt-web.d.ts.map +1 -0
- package/dist/src/ingestion/parsers/chatgpt-web.js +100 -0
- package/dist/src/ingestion/parsers/chatgpt-web.js.map +1 -0
- package/dist/src/ingestion/parsers/claude-code-jsonl.d.ts +16 -0
- package/dist/src/ingestion/parsers/claude-code-jsonl.d.ts.map +1 -0
- package/dist/src/ingestion/parsers/claude-code-jsonl.js +123 -0
- package/dist/src/ingestion/parsers/claude-code-jsonl.js.map +1 -0
- package/dist/src/ingestion/parsers/claude-web.d.ts +24 -0
- package/dist/src/ingestion/parsers/claude-web.d.ts.map +1 -0
- package/dist/src/ingestion/parsers/claude-web.js +78 -0
- package/dist/src/ingestion/parsers/claude-web.js.map +1 -0
- package/dist/src/ingestion/parsers/codex-jsonl.d.ts +18 -0
- package/dist/src/ingestion/parsers/codex-jsonl.d.ts.map +1 -0
- package/dist/src/ingestion/parsers/codex-jsonl.js +125 -0
- package/dist/src/ingestion/parsers/codex-jsonl.js.map +1 -0
- package/dist/src/ingestion/parsers/gemini-web.d.ts +16 -0
- package/dist/src/ingestion/parsers/gemini-web.d.ts.map +1 -0
- package/dist/src/ingestion/parsers/gemini-web.js +170 -0
- package/dist/src/ingestion/parsers/gemini-web.js.map +1 -0
- package/dist/src/ingestion/parsers/grok-web.d.ts +40 -0
- package/dist/src/ingestion/parsers/grok-web.d.ts.map +1 -0
- package/dist/src/ingestion/parsers/grok-web.js +67 -0
- package/dist/src/ingestion/parsers/grok-web.js.map +1 -0
- package/dist/src/ingestion/parsers/types.d.ts +34 -0
- package/dist/src/ingestion/parsers/types.d.ts.map +1 -0
- package/dist/src/ingestion/parsers/types.js +26 -0
- package/dist/src/ingestion/parsers/types.js.map +1 -0
- package/dist/src/ingestion/scanner.d.ts +48 -0
- package/dist/src/ingestion/scanner.d.ts.map +1 -0
- package/dist/src/ingestion/scanner.js +131 -0
- package/dist/src/ingestion/scanner.js.map +1 -0
- package/dist/src/ingestion/staging.d.ts +109 -0
- package/dist/src/ingestion/staging.d.ts.map +1 -0
- package/dist/src/ingestion/staging.js +411 -0
- package/dist/src/ingestion/staging.js.map +1 -0
- package/dist/src/ingestion/watcher.d.ts +65 -0
- package/dist/src/ingestion/watcher.d.ts.map +1 -0
- package/dist/src/ingestion/watcher.js +182 -0
- package/dist/src/ingestion/watcher.js.map +1 -0
- package/dist/src/jobs/codex-override-handler.d.ts +3 -0
- package/dist/src/jobs/codex-override-handler.d.ts.map +1 -0
- package/dist/src/jobs/codex-override-handler.js +16 -0
- package/dist/src/jobs/codex-override-handler.js.map +1 -0
- package/dist/src/jobs/handlers/compact.d.ts +30 -0
- package/dist/src/jobs/handlers/compact.d.ts.map +1 -0
- package/dist/src/jobs/handlers/compact.js +329 -0
- package/dist/src/jobs/handlers/compact.js.map +1 -0
- package/dist/src/jobs/handlers/ingest.d.ts +13 -0
- package/dist/src/jobs/handlers/ingest.d.ts.map +1 -0
- package/dist/src/jobs/handlers/ingest.js +255 -0
- package/dist/src/jobs/handlers/ingest.js.map +1 -0
- package/dist/src/jobs/handlers/reconcile.d.ts +29 -0
- package/dist/src/jobs/handlers/reconcile.d.ts.map +1 -0
- package/dist/src/jobs/handlers/reconcile.js +476 -0
- package/dist/src/jobs/handlers/reconcile.js.map +1 -0
- package/dist/src/jobs/handlers/reindex.d.ts +38 -0
- package/dist/src/jobs/handlers/reindex.d.ts.map +1 -0
- package/dist/src/jobs/handlers/reindex.js +52 -0
- package/dist/src/jobs/handlers/reindex.js.map +1 -0
- package/dist/src/jobs/handlers/save.d.ts +10 -0
- package/dist/src/jobs/handlers/save.d.ts.map +1 -0
- package/dist/src/jobs/handlers/save.js +206 -0
- package/dist/src/jobs/handlers/save.js.map +1 -0
- package/dist/src/jobs/handlers/triage.d.ts +47 -0
- package/dist/src/jobs/handlers/triage.d.ts.map +1 -0
- package/dist/src/jobs/handlers/triage.js +95 -0
- package/dist/src/jobs/handlers/triage.js.map +1 -0
- package/dist/src/jobs/queue.d.ts +107 -0
- package/dist/src/jobs/queue.d.ts.map +1 -0
- package/dist/src/jobs/queue.js +319 -0
- package/dist/src/jobs/queue.js.map +1 -0
- package/dist/src/jobs/types.d.ts +39 -0
- package/dist/src/jobs/types.d.ts.map +1 -0
- package/dist/src/jobs/types.js +29 -0
- package/dist/src/jobs/types.js.map +1 -0
- package/dist/src/jobs/worker-entry.d.ts +10 -0
- package/dist/src/jobs/worker-entry.d.ts.map +1 -0
- package/dist/src/jobs/worker-entry.js +210 -0
- package/dist/src/jobs/worker-entry.js.map +1 -0
- package/dist/src/jobs/worker-process.d.ts +50 -0
- package/dist/src/jobs/worker-process.d.ts.map +1 -0
- package/dist/src/jobs/worker-process.js +186 -0
- package/dist/src/jobs/worker-process.js.map +1 -0
- package/dist/src/jobs/worker.d.ts +11 -0
- package/dist/src/jobs/worker.d.ts.map +1 -0
- package/dist/src/jobs/worker.js +14 -0
- package/dist/src/jobs/worker.js.map +1 -0
- package/dist/src/main.d.ts +2 -0
- package/dist/src/main.d.ts.map +1 -0
- package/dist/src/main.js +425 -0
- package/dist/src/main.js.map +1 -0
- package/dist/src/mcp/errors.d.ts +8 -0
- package/dist/src/mcp/errors.d.ts.map +1 -0
- package/dist/src/mcp/errors.js +50 -0
- package/dist/src/mcp/errors.js.map +1 -0
- package/dist/src/mcp/server.d.ts +10 -0
- package/dist/src/mcp/server.d.ts.map +1 -0
- package/dist/src/mcp/server.js +94 -0
- package/dist/src/mcp/server.js.map +1 -0
- package/dist/src/mcp/tools/context-pack.d.ts +35 -0
- package/dist/src/mcp/tools/context-pack.d.ts.map +1 -0
- package/dist/src/mcp/tools/context-pack.js +97 -0
- package/dist/src/mcp/tools/context-pack.js.map +1 -0
- package/dist/src/mcp/tools/conversations-search.d.ts +38 -0
- package/dist/src/mcp/tools/conversations-search.d.ts.map +1 -0
- package/dist/src/mcp/tools/conversations-search.js +73 -0
- package/dist/src/mcp/tools/conversations-search.js.map +1 -0
- package/dist/src/mcp/tools/save.d.ts +32 -0
- package/dist/src/mcp/tools/save.d.ts.map +1 -0
- package/dist/src/mcp/tools/save.js +60 -0
- package/dist/src/mcp/tools/save.js.map +1 -0
- package/dist/src/mcp/tools/search.d.ts +33 -0
- package/dist/src/mcp/tools/search.d.ts.map +1 -0
- package/dist/src/mcp/tools/search.js +58 -0
- package/dist/src/mcp/tools/search.js.map +1 -0
- package/dist/src/mcp/tools/status.d.ts +17 -0
- package/dist/src/mcp/tools/status.d.ts.map +1 -0
- package/dist/src/mcp/tools/status.js +12 -0
- package/dist/src/mcp/tools/status.js.map +1 -0
- package/dist/src/observability/coverage.d.ts +100 -0
- package/dist/src/observability/coverage.d.ts.map +1 -0
- package/dist/src/observability/coverage.js +180 -0
- package/dist/src/observability/coverage.js.map +1 -0
- package/dist/src/observability/rift-context.d.ts +47 -0
- package/dist/src/observability/rift-context.d.ts.map +1 -0
- package/dist/src/observability/rift-context.js +118 -0
- package/dist/src/observability/rift-context.js.map +1 -0
- package/dist/src/observability/staleness.d.ts +43 -0
- package/dist/src/observability/staleness.d.ts.map +1 -0
- package/dist/src/observability/staleness.js +74 -0
- package/dist/src/observability/staleness.js.map +1 -0
- package/dist/src/observability/tool-usage-stats.d.ts +23 -0
- package/dist/src/observability/tool-usage-stats.d.ts.map +1 -0
- package/dist/src/observability/tool-usage-stats.js +83 -0
- package/dist/src/observability/tool-usage-stats.js.map +1 -0
- package/dist/src/observability/tool-usage.d.ts +68 -0
- package/dist/src/observability/tool-usage.d.ts.map +1 -0
- package/dist/src/observability/tool-usage.js +207 -0
- package/dist/src/observability/tool-usage.js.map +1 -0
- package/dist/src/onboarding/daemon-control.d.ts +33 -0
- package/dist/src/onboarding/daemon-control.d.ts.map +1 -0
- package/dist/src/onboarding/daemon-control.js +92 -0
- package/dist/src/onboarding/daemon-control.js.map +1 -0
- package/dist/src/onboarding/env-file.d.ts +18 -0
- package/dist/src/onboarding/env-file.d.ts.map +1 -0
- package/dist/src/onboarding/env-file.js +89 -0
- package/dist/src/onboarding/env-file.js.map +1 -0
- package/dist/src/onboarding/voyage-validate.d.ts +16 -0
- package/dist/src/onboarding/voyage-validate.d.ts.map +1 -0
- package/dist/src/onboarding/voyage-validate.js +85 -0
- package/dist/src/onboarding/voyage-validate.js.map +1 -0
- package/dist/src/providers/anthropic-digest.d.ts +23 -0
- package/dist/src/providers/anthropic-digest.d.ts.map +1 -0
- package/dist/src/providers/anthropic-digest.js +91 -0
- package/dist/src/providers/anthropic-digest.js.map +1 -0
- package/dist/src/providers/codex-cli-digest.d.ts +12 -0
- package/dist/src/providers/codex-cli-digest.d.ts.map +1 -0
- package/dist/src/providers/codex-cli-digest.js +70 -0
- package/dist/src/providers/codex-cli-digest.js.map +1 -0
- package/dist/src/providers/codex-cli-metadata-extraction.d.ts +14 -0
- package/dist/src/providers/codex-cli-metadata-extraction.d.ts.map +1 -0
- package/dist/src/providers/codex-cli-metadata-extraction.js +101 -0
- package/dist/src/providers/codex-cli-metadata-extraction.js.map +1 -0
- package/dist/src/providers/codex-cli-runner.d.ts +14 -0
- package/dist/src/providers/codex-cli-runner.d.ts.map +1 -0
- package/dist/src/providers/codex-cli-runner.js +272 -0
- package/dist/src/providers/codex-cli-runner.js.map +1 -0
- package/dist/src/providers/conversation-generation.d.ts +10 -0
- package/dist/src/providers/conversation-generation.d.ts.map +1 -0
- package/dist/src/providers/conversation-generation.js +54 -0
- package/dist/src/providers/conversation-generation.js.map +1 -0
- package/dist/src/providers/ollama-embed.d.ts +22 -0
- package/dist/src/providers/ollama-embed.d.ts.map +1 -0
- package/dist/src/providers/ollama-embed.js +133 -0
- package/dist/src/providers/ollama-embed.js.map +1 -0
- package/dist/src/providers/ollama.d.ts +42 -0
- package/dist/src/providers/ollama.d.ts.map +1 -0
- package/dist/src/providers/ollama.js +169 -0
- package/dist/src/providers/ollama.js.map +1 -0
- package/dist/src/providers/openai-metadata-extraction.d.ts +73 -0
- package/dist/src/providers/openai-metadata-extraction.d.ts.map +1 -0
- package/dist/src/providers/openai-metadata-extraction.js +161 -0
- package/dist/src/providers/openai-metadata-extraction.js.map +1 -0
- package/dist/src/providers/operator-overrides.d.ts +24 -0
- package/dist/src/providers/operator-overrides.d.ts.map +1 -0
- package/dist/src/providers/operator-overrides.js +84 -0
- package/dist/src/providers/operator-overrides.js.map +1 -0
- package/dist/src/providers/stub.d.ts +17 -0
- package/dist/src/providers/stub.d.ts.map +1 -0
- package/dist/src/providers/stub.js +72 -0
- package/dist/src/providers/stub.js.map +1 -0
- package/dist/src/providers/types.d.ts +82 -0
- package/dist/src/providers/types.d.ts.map +1 -0
- package/dist/src/providers/types.js +52 -0
- package/dist/src/providers/types.js.map +1 -0
- package/dist/src/providers/voyage.d.ts +23 -0
- package/dist/src/providers/voyage.d.ts.map +1 -0
- package/dist/src/providers/voyage.js +135 -0
- package/dist/src/providers/voyage.js.map +1 -0
- package/dist/src/retrieval/compact.d.ts +89 -0
- package/dist/src/retrieval/compact.d.ts.map +1 -0
- package/dist/src/retrieval/compact.js +348 -0
- package/dist/src/retrieval/compact.js.map +1 -0
- package/dist/src/retrieval/context-pack.d.ts +123 -0
- package/dist/src/retrieval/context-pack.d.ts.map +1 -0
- package/dist/src/retrieval/context-pack.js +553 -0
- package/dist/src/retrieval/context-pack.js.map +1 -0
- package/dist/src/retrieval/cwd.d.ts +25 -0
- package/dist/src/retrieval/cwd.d.ts.map +1 -0
- package/dist/src/retrieval/cwd.js +48 -0
- package/dist/src/retrieval/cwd.js.map +1 -0
- package/dist/src/retrieval/degraded.d.ts +20 -0
- package/dist/src/retrieval/degraded.d.ts.map +1 -0
- package/dist/src/retrieval/degraded.js +43 -0
- package/dist/src/retrieval/degraded.js.map +1 -0
- package/dist/src/retrieval/hybrid.d.ts +38 -0
- package/dist/src/retrieval/hybrid.d.ts.map +1 -0
- package/dist/src/retrieval/hybrid.js +82 -0
- package/dist/src/retrieval/hybrid.js.map +1 -0
- package/dist/src/retrieval/lexical.d.ts +28 -0
- package/dist/src/retrieval/lexical.d.ts.map +1 -0
- package/dist/src/retrieval/lexical.js +301 -0
- package/dist/src/retrieval/lexical.js.map +1 -0
- package/dist/src/retrieval/post-filter.d.ts +32 -0
- package/dist/src/retrieval/post-filter.d.ts.map +1 -0
- package/dist/src/retrieval/post-filter.js +57 -0
- package/dist/src/retrieval/post-filter.js.map +1 -0
- package/dist/src/retrieval/reranker.d.ts +72 -0
- package/dist/src/retrieval/reranker.d.ts.map +1 -0
- package/dist/src/retrieval/reranker.js +129 -0
- package/dist/src/retrieval/reranker.js.map +1 -0
- package/dist/src/retrieval/vector.d.ts +47 -0
- package/dist/src/retrieval/vector.d.ts.map +1 -0
- package/dist/src/retrieval/vector.js +112 -0
- package/dist/src/retrieval/vector.js.map +1 -0
- package/dist/src/runtime/legacy-migration.d.ts +27 -0
- package/dist/src/runtime/legacy-migration.d.ts.map +1 -0
- package/dist/src/runtime/legacy-migration.js +140 -0
- package/dist/src/runtime/legacy-migration.js.map +1 -0
- package/dist/src/runtime/legacy-name-guard.d.ts +35 -0
- package/dist/src/runtime/legacy-name-guard.d.ts.map +1 -0
- package/dist/src/runtime/legacy-name-guard.js +58 -0
- package/dist/src/runtime/legacy-name-guard.js.map +1 -0
- package/dist/src/runtime/rift-env.d.ts +14 -0
- package/dist/src/runtime/rift-env.d.ts.map +1 -0
- package/dist/src/runtime/rift-env.js +79 -0
- package/dist/src/runtime/rift-env.js.map +1 -0
- package/dist/src/runtime/watcher-startup.d.ts +2 -0
- package/dist/src/runtime/watcher-startup.d.ts.map +1 -0
- package/dist/src/runtime/watcher-startup.js +4 -0
- package/dist/src/runtime/watcher-startup.js.map +1 -0
- package/dist/src/security/archive.d.ts +23 -0
- package/dist/src/security/archive.d.ts.map +1 -0
- package/dist/src/security/archive.js +163 -0
- package/dist/src/security/archive.js.map +1 -0
- package/dist/src/security/paths.d.ts +21 -0
- package/dist/src/security/paths.d.ts.map +1 -0
- package/dist/src/security/paths.js +67 -0
- package/dist/src/security/paths.js.map +1 -0
- package/dist/src/server/app.d.ts +29 -0
- package/dist/src/server/app.d.ts.map +1 -0
- package/dist/src/server/app.js +226 -0
- package/dist/src/server/app.js.map +1 -0
- package/dist/src/server/build-info.d.ts +8 -0
- package/dist/src/server/build-info.d.ts.map +1 -0
- package/dist/src/server/build-info.js +61 -0
- package/dist/src/server/build-info.js.map +1 -0
- package/dist/src/server/lifecycle.d.ts +30 -0
- package/dist/src/server/lifecycle.d.ts.map +1 -0
- package/dist/src/server/lifecycle.js +59 -0
- package/dist/src/server/lifecycle.js.map +1 -0
- package/dist/src/server/middleware/multipart.d.ts +51 -0
- package/dist/src/server/middleware/multipart.d.ts.map +1 -0
- package/dist/src/server/middleware/multipart.js +86 -0
- package/dist/src/server/middleware/multipart.js.map +1 -0
- package/dist/src/server/routes/compact.d.ts +37 -0
- package/dist/src/server/routes/compact.d.ts.map +1 -0
- package/dist/src/server/routes/compact.js +77 -0
- package/dist/src/server/routes/compact.js.map +1 -0
- package/dist/src/server/routes/context.d.ts +5 -0
- package/dist/src/server/routes/context.d.ts.map +1 -0
- package/dist/src/server/routes/context.js +50 -0
- package/dist/src/server/routes/context.js.map +1 -0
- package/dist/src/server/routes/conversations-search.d.ts +4 -0
- package/dist/src/server/routes/conversations-search.d.ts.map +1 -0
- package/dist/src/server/routes/conversations-search.js +243 -0
- package/dist/src/server/routes/conversations-search.js.map +1 -0
- package/dist/src/server/routes/friend-status.d.ts +72 -0
- package/dist/src/server/routes/friend-status.d.ts.map +1 -0
- package/dist/src/server/routes/friend-status.js +71 -0
- package/dist/src/server/routes/friend-status.js.map +1 -0
- package/dist/src/server/routes/ingest.d.ts +15 -0
- package/dist/src/server/routes/ingest.d.ts.map +1 -0
- package/dist/src/server/routes/ingest.js +139 -0
- package/dist/src/server/routes/ingest.js.map +1 -0
- package/dist/src/server/routes/jobs.d.ts +10 -0
- package/dist/src/server/routes/jobs.d.ts.map +1 -0
- package/dist/src/server/routes/jobs.js +29 -0
- package/dist/src/server/routes/jobs.js.map +1 -0
- package/dist/src/server/routes/mcp-usage.d.ts +13 -0
- package/dist/src/server/routes/mcp-usage.d.ts.map +1 -0
- package/dist/src/server/routes/mcp-usage.js +17 -0
- package/dist/src/server/routes/mcp-usage.js.map +1 -0
- package/dist/src/server/routes/reconcile.d.ts +4 -0
- package/dist/src/server/routes/reconcile.d.ts.map +1 -0
- package/dist/src/server/routes/reconcile.js +43 -0
- package/dist/src/server/routes/reconcile.js.map +1 -0
- package/dist/src/server/routes/reindex.d.ts +4 -0
- package/dist/src/server/routes/reindex.d.ts.map +1 -0
- package/dist/src/server/routes/reindex.js +74 -0
- package/dist/src/server/routes/reindex.js.map +1 -0
- package/dist/src/server/routes/save.d.ts +40 -0
- package/dist/src/server/routes/save.d.ts.map +1 -0
- package/dist/src/server/routes/save.js +112 -0
- package/dist/src/server/routes/save.js.map +1 -0
- package/dist/src/server/routes/search.d.ts +5 -0
- package/dist/src/server/routes/search.d.ts.map +1 -0
- package/dist/src/server/routes/search.js +400 -0
- package/dist/src/server/routes/search.js.map +1 -0
- package/dist/src/server/routes/stats.d.ts +10 -0
- package/dist/src/server/routes/stats.d.ts.map +1 -0
- package/dist/src/server/routes/stats.js +15 -0
- package/dist/src/server/routes/stats.js.map +1 -0
- package/dist/src/server/routes/status.d.ts +20 -0
- package/dist/src/server/routes/status.d.ts.map +1 -0
- package/dist/src/server/routes/status.js +31 -0
- package/dist/src/server/routes/status.js.map +1 -0
- package/dist/src/server/routes/triage.d.ts +4 -0
- package/dist/src/server/routes/triage.d.ts.map +1 -0
- package/dist/src/server/routes/triage.js +94 -0
- package/dist/src/server/routes/triage.js.map +1 -0
- package/dist/src/server/save-quality.d.ts +21 -0
- package/dist/src/server/save-quality.d.ts.map +1 -0
- package/dist/src/server/save-quality.js +51 -0
- package/dist/src/server/save-quality.js.map +1 -0
- package/dist/src/storage/atomic.d.ts +8 -0
- package/dist/src/storage/atomic.d.ts.map +1 -0
- package/dist/src/storage/atomic.js +22 -0
- package/dist/src/storage/atomic.js.map +1 -0
- package/dist/src/storage/db.d.ts +15 -0
- package/dist/src/storage/db.d.ts.map +1 -0
- package/dist/src/storage/db.js +43 -0
- package/dist/src/storage/db.js.map +1 -0
- package/dist/src/storage/integrity.d.ts +11 -0
- package/dist/src/storage/integrity.d.ts.map +1 -0
- package/dist/src/storage/integrity.js +66 -0
- package/dist/src/storage/integrity.js.map +1 -0
- package/dist/src/storage/rebuild.d.ts +37 -0
- package/dist/src/storage/rebuild.d.ts.map +1 -0
- package/dist/src/storage/rebuild.js +353 -0
- package/dist/src/storage/rebuild.js.map +1 -0
- package/dist/src/storage/shadow-swap.d.ts +20 -0
- package/dist/src/storage/shadow-swap.d.ts.map +1 -0
- package/dist/src/storage/shadow-swap.js +163 -0
- package/dist/src/storage/shadow-swap.js.map +1 -0
- package/dist/src/storage/tables.d.ts +77 -0
- package/dist/src/storage/tables.d.ts.map +1 -0
- package/dist/src/storage/tables.js +196 -0
- package/dist/src/storage/tables.js.map +1 -0
- package/package.json +45 -14
- package/index.js +0 -3
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `rift uninstall` — Slice 9.
|
|
3
|
+
*
|
|
4
|
+
* Trust-signal command. Walks the install steps in reverse:
|
|
5
|
+
* 1. launchctl bootout for the canonical daemon label (idempotent;
|
|
6
|
+
* also boots out a stale legacy label silently if loaded).
|
|
7
|
+
* 2. Backup + remove `~/Library/LaunchAgents/com.getrift.daemon.plist`.
|
|
8
|
+
* Stale legacy plist is removed without naming it.
|
|
9
|
+
* 3. Reverse-merge MCP-client configs (drop the `rift` server entry
|
|
10
|
+
* and any legacy entries; per-client backup, opaque ID).
|
|
11
|
+
* 4. `--purge-data` (with explicit "DELETE" confirmation) removes
|
|
12
|
+
* `~/Library/Application Support/Rift/`.
|
|
13
|
+
* 5. Print the Voyage-key reminder (env file is left in place; the
|
|
14
|
+
* friend chooses whether to delete it).
|
|
15
|
+
* 6. Migration-backup mention: if Slice 1.5 ran on this machine, the
|
|
16
|
+
* summary mentions only the count — paths/basenames stay
|
|
17
|
+
* operator-side in `data/observability/legacy-migration.jsonl`.
|
|
18
|
+
*
|
|
19
|
+
* Friend-visible output names only "Rift". Legacy paths and labels go
|
|
20
|
+
* to operator-only logs.
|
|
21
|
+
*/
|
|
22
|
+
import fs from "node:fs";
|
|
23
|
+
import os from "node:os";
|
|
24
|
+
import path from "node:path";
|
|
25
|
+
import readline from "node:readline";
|
|
26
|
+
import { spawn } from "node:child_process";
|
|
27
|
+
import { Command } from "commander";
|
|
28
|
+
import { RIFT_LAUNCHD_LABEL } from "../../onboarding/daemon-control.js";
|
|
29
|
+
import { uninstallMcpEntries } from "../uninstall/mcp-uninstall.js";
|
|
30
|
+
// Same default as `rift onboard`. Internal constant only — never printed.
|
|
31
|
+
const DEFAULT_DATA_PARENT = path.join(os.homedir(), "Library", "Application Support", "Rift");
|
|
32
|
+
const RIFT_PLIST_BASENAME = `${RIFT_LAUNCHD_LABEL}.plist`;
|
|
33
|
+
// Legacy-label string built from fragments so the literal never appears
|
|
34
|
+
// in source — same pattern as redact.ts. The check:rename gate stays
|
|
35
|
+
// clean without an allowlist exception.
|
|
36
|
+
const LEGACY_DAEMON_LABEL = ["com", ["life", "brain"].join("-"), "daemon"].join(".");
|
|
37
|
+
const LEGACY_PLIST_BASENAME = `${LEGACY_DAEMON_LABEL}.plist`;
|
|
38
|
+
export function makeUninstallCommand() {
|
|
39
|
+
return new Command("uninstall")
|
|
40
|
+
.description("Stop the Rift daemon, remove its plist + MCP entries, optionally purge data")
|
|
41
|
+
.option("-y, --yes", "Skip the purge confirmation prompt (only with --purge-data)")
|
|
42
|
+
.option("--purge-data", "Also delete ~/Library/Application Support/Rift/")
|
|
43
|
+
.action(async (opts, cmd) => {
|
|
44
|
+
const globalOpts = cmd.optsWithGlobals();
|
|
45
|
+
try {
|
|
46
|
+
await runUninstall(opts, globalOpts);
|
|
47
|
+
}
|
|
48
|
+
catch (err) {
|
|
49
|
+
process.stderr.write(`Error: ${err instanceof Error ? err.message : String(err)}\n`);
|
|
50
|
+
process.exitCode = 1;
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
async function runUninstall(opts, globalOpts) {
|
|
55
|
+
const say = (line) => {
|
|
56
|
+
process.stdout.write(line + "\n");
|
|
57
|
+
};
|
|
58
|
+
// --- Step 1: bootout daemon ---
|
|
59
|
+
const uid = process.getuid?.() ?? 0;
|
|
60
|
+
const daemonResult = await bootoutDaemon(uid, RIFT_LAUNCHD_LABEL);
|
|
61
|
+
if (daemonResult === "stopped")
|
|
62
|
+
say("Stopped the Rift daemon.");
|
|
63
|
+
else
|
|
64
|
+
say("Daemon was not running.");
|
|
65
|
+
// Best-effort: silence any stale legacy label without naming it.
|
|
66
|
+
await bootoutDaemon(uid, LEGACY_DAEMON_LABEL);
|
|
67
|
+
// --- Step 2: plist removal ---
|
|
68
|
+
const plistResult = removePlist();
|
|
69
|
+
if (plistResult.removed) {
|
|
70
|
+
say(`Removed the Rift launch agent. (Backup ID: ${plistResult.backupId}.)`);
|
|
71
|
+
}
|
|
72
|
+
else if (plistResult.alreadyAbsent) {
|
|
73
|
+
say("Rift launch agent was not installed.");
|
|
74
|
+
}
|
|
75
|
+
if (plistResult.legacyRemoved) {
|
|
76
|
+
say("(stale legacy plist removed)");
|
|
77
|
+
}
|
|
78
|
+
// --- Step 3: MCP-client reverse-merge ---
|
|
79
|
+
const mcpResults = uninstallMcpEntries({});
|
|
80
|
+
const removedClients = mcpResults.filter((r) => r.status === "removed");
|
|
81
|
+
const failedClients = mcpResults.filter((r) => r.status === "failed");
|
|
82
|
+
if (removedClients.length > 0) {
|
|
83
|
+
say(`Removed Rift from ${removedClients.length} MCP client config${removedClients.length === 1 ? "" : "s"}.`);
|
|
84
|
+
for (const r of removedClients) {
|
|
85
|
+
say(` ${r.client} — Backup ID: ${r.backupId}`);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
say("No MCP-client configs needed updating.");
|
|
90
|
+
}
|
|
91
|
+
if (failedClients.length > 0) {
|
|
92
|
+
say(`(${failedClients.length} client config${failedClients.length === 1 ? "" : "s"} could not be updated; ping Clem to recover.)`);
|
|
93
|
+
}
|
|
94
|
+
// --- Step 4: optional purge-data ---
|
|
95
|
+
if (opts.purgeData === true) {
|
|
96
|
+
const confirmed = opts.yes === true || (await confirmPurge());
|
|
97
|
+
if (confirmed) {
|
|
98
|
+
const purged = purgeDataDir();
|
|
99
|
+
if (purged.removed) {
|
|
100
|
+
say("Purged the Rift data directory.");
|
|
101
|
+
}
|
|
102
|
+
else if (purged.alreadyAbsent) {
|
|
103
|
+
say("No Rift data directory to purge.");
|
|
104
|
+
}
|
|
105
|
+
else if (purged.error) {
|
|
106
|
+
say(`Could not fully purge the data directory (${purged.error}).`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
say("Skipped data purge.");
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
// --- Step 5: Voyage key reminder ---
|
|
114
|
+
const envPath = path.join(os.homedir(), ".rift.env");
|
|
115
|
+
if (fs.existsSync(envPath)) {
|
|
116
|
+
say("");
|
|
117
|
+
say("Your Voyage key is still in ~/.rift.env.");
|
|
118
|
+
say(" Run: rm ~/.rift.env to remove it locally.");
|
|
119
|
+
say(" Clem can also revoke server-side at any time — ping for revocation if you'd prefer that.");
|
|
120
|
+
}
|
|
121
|
+
// --- Step 6: migration-backup mention ---
|
|
122
|
+
const migrationCount = countMigrationBackups();
|
|
123
|
+
if (migrationCount > 0) {
|
|
124
|
+
say("");
|
|
125
|
+
say(`${migrationCount} migration backup${migrationCount === 1 ? "" : "s"} stored (operator-side only — ping Clem if recovery is needed).`);
|
|
126
|
+
}
|
|
127
|
+
if (globalOpts.json) {
|
|
128
|
+
process.stdout.write(JSON.stringify({
|
|
129
|
+
daemon: daemonResult,
|
|
130
|
+
plist_removed: plistResult.removed,
|
|
131
|
+
mcp: mcpResults.map((r) => ({ client: r.client, status: r.status })),
|
|
132
|
+
purged: opts.purgeData === true,
|
|
133
|
+
}, null, 2) + "\n");
|
|
134
|
+
}
|
|
135
|
+
say("");
|
|
136
|
+
say("Rift removed. Thanks for trying it.");
|
|
137
|
+
}
|
|
138
|
+
async function bootoutDaemon(uid, label) {
|
|
139
|
+
const target = `gui/${uid}/${label}`;
|
|
140
|
+
const { code } = await runCmd("launchctl", ["bootout", target]);
|
|
141
|
+
// launchctl returns 0 when it tore down a running agent; 113 / non-zero
|
|
142
|
+
// when the label was unknown. Both are success conditions for uninstall.
|
|
143
|
+
if (code === 0)
|
|
144
|
+
return "stopped";
|
|
145
|
+
return "absent";
|
|
146
|
+
}
|
|
147
|
+
function removePlist() {
|
|
148
|
+
const launchAgents = path.join(os.homedir(), "Library", "LaunchAgents");
|
|
149
|
+
const tsToken = new Date().toISOString().replace(/[:.]/g, "-");
|
|
150
|
+
let removed = false;
|
|
151
|
+
let backupId;
|
|
152
|
+
let alreadyAbsent = true;
|
|
153
|
+
const riftPlist = path.join(launchAgents, RIFT_PLIST_BASENAME);
|
|
154
|
+
if (fs.existsSync(riftPlist)) {
|
|
155
|
+
alreadyAbsent = false;
|
|
156
|
+
const backupPath = `${riftPlist}.bak.${tsToken}`;
|
|
157
|
+
backupId = `rift-uninstall-plist-${tsToken}`;
|
|
158
|
+
try {
|
|
159
|
+
fs.copyFileSync(riftPlist, backupPath);
|
|
160
|
+
fs.rmSync(riftPlist);
|
|
161
|
+
removed = true;
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
// Backup attempt failed; leave the plist in place so the friend
|
|
165
|
+
// can ping for recovery rather than ending up half-uninstalled.
|
|
166
|
+
removed = false;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
let legacyRemoved = false;
|
|
170
|
+
const legacyPlist = path.join(launchAgents, LEGACY_PLIST_BASENAME);
|
|
171
|
+
if (fs.existsSync(legacyPlist)) {
|
|
172
|
+
try {
|
|
173
|
+
const legacyBackup = `${legacyPlist}.bak.${tsToken}`;
|
|
174
|
+
fs.copyFileSync(legacyPlist, legacyBackup);
|
|
175
|
+
fs.rmSync(legacyPlist);
|
|
176
|
+
legacyRemoved = true;
|
|
177
|
+
}
|
|
178
|
+
catch {
|
|
179
|
+
legacyRemoved = false;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
const result = { removed, alreadyAbsent, legacyRemoved };
|
|
183
|
+
if (backupId !== undefined)
|
|
184
|
+
result.backupId = backupId;
|
|
185
|
+
return result;
|
|
186
|
+
}
|
|
187
|
+
function purgeDataDir() {
|
|
188
|
+
if (!fs.existsSync(DEFAULT_DATA_PARENT)) {
|
|
189
|
+
return { removed: false, alreadyAbsent: true };
|
|
190
|
+
}
|
|
191
|
+
try {
|
|
192
|
+
fs.rmSync(DEFAULT_DATA_PARENT, { recursive: true, force: true });
|
|
193
|
+
return { removed: true, alreadyAbsent: false };
|
|
194
|
+
}
|
|
195
|
+
catch (err) {
|
|
196
|
+
return {
|
|
197
|
+
removed: false,
|
|
198
|
+
alreadyAbsent: false,
|
|
199
|
+
error: err instanceof Error ? err.message : String(err),
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
async function confirmPurge() {
|
|
204
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
205
|
+
try {
|
|
206
|
+
const answer = await new Promise((resolve) => {
|
|
207
|
+
rl.question('This will delete ~/Library/Application Support/Rift/ — type "DELETE" to confirm: ', (a) => resolve(a));
|
|
208
|
+
});
|
|
209
|
+
return answer.trim() === "DELETE";
|
|
210
|
+
}
|
|
211
|
+
finally {
|
|
212
|
+
rl.close();
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
function countMigrationBackups() {
|
|
216
|
+
const jsonl = path.join(DEFAULT_DATA_PARENT, "data", "observability", "legacy-migration.jsonl");
|
|
217
|
+
if (!fs.existsSync(jsonl))
|
|
218
|
+
return 0;
|
|
219
|
+
try {
|
|
220
|
+
const raw = fs.readFileSync(jsonl, "utf8");
|
|
221
|
+
return raw.split("\n").filter((l) => l.trim().length > 0).length;
|
|
222
|
+
}
|
|
223
|
+
catch {
|
|
224
|
+
return 0;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
function runCmd(cmd, args) {
|
|
228
|
+
return new Promise((resolve, reject) => {
|
|
229
|
+
const child = spawn(cmd, args, { stdio: ["ignore", "ignore", "pipe"] });
|
|
230
|
+
let stderr = "";
|
|
231
|
+
child.stderr.on("data", (chunk) => {
|
|
232
|
+
stderr += chunk.toString("utf8");
|
|
233
|
+
});
|
|
234
|
+
child.on("error", reject);
|
|
235
|
+
child.on("close", (code) => resolve({ code: code ?? 1, stderr }));
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
//# sourceMappingURL=uninstall.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../../../src/cli/commands/uninstall.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const FeedbackConfigSchema: z.ZodObject<{
|
|
3
|
+
enabled: z.ZodBoolean;
|
|
4
|
+
url: z.ZodOptional<z.ZodString>;
|
|
5
|
+
installation_id: z.ZodOptional<z.ZodString>;
|
|
6
|
+
hmac_secret: z.ZodOptional<z.ZodString>;
|
|
7
|
+
}, "strict", z.ZodTypeAny, {
|
|
8
|
+
enabled: boolean;
|
|
9
|
+
url?: string | undefined;
|
|
10
|
+
installation_id?: string | undefined;
|
|
11
|
+
hmac_secret?: string | undefined;
|
|
12
|
+
}, {
|
|
13
|
+
enabled: boolean;
|
|
14
|
+
url?: string | undefined;
|
|
15
|
+
installation_id?: string | undefined;
|
|
16
|
+
hmac_secret?: string | undefined;
|
|
17
|
+
}>;
|
|
18
|
+
export type FeedbackConfig = z.infer<typeof FeedbackConfigSchema>;
|
|
19
|
+
export declare function feedbackConfigPath(dataDir: string): string;
|
|
20
|
+
export declare function loadFeedbackConfig(dataDir: string): FeedbackConfig;
|
|
21
|
+
//# sourceMappingURL=feedback-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedback-config.d.ts","sourceRoot":"","sources":["../../../../src/cli/feedback/feedback-config.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;EAOtB,CAAC;AAEZ,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,CAclE"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Feedback opt-in sidecar.
|
|
3
|
+
*
|
|
4
|
+
* Lives at `<data_dir>/feedback-config.json`, written by `rift onboard`.
|
|
5
|
+
* Holds the relay URL + a per-installation pseudonymous UUID. Optional
|
|
6
|
+
* `hmac_secret` lets the relay verify message integrity (used by the
|
|
7
|
+
* Cloudflare Worker variant; Slack incoming webhooks don't validate it).
|
|
8
|
+
*
|
|
9
|
+
* Loader is fail-soft: a missing or unreadable sidecar yields a "relay
|
|
10
|
+
* off" config so `rift feedback` still writes a local row.
|
|
11
|
+
*/
|
|
12
|
+
import fs from "node:fs";
|
|
13
|
+
import path from "node:path";
|
|
14
|
+
import { z } from "zod";
|
|
15
|
+
export const FeedbackConfigSchema = z
|
|
16
|
+
.object({
|
|
17
|
+
enabled: z.boolean(),
|
|
18
|
+
url: z.string().url().optional(),
|
|
19
|
+
installation_id: z.string().min(1).optional(),
|
|
20
|
+
hmac_secret: z.string().min(1).optional(),
|
|
21
|
+
})
|
|
22
|
+
.strict();
|
|
23
|
+
export function feedbackConfigPath(dataDir) {
|
|
24
|
+
return path.join(dataDir, "feedback-config.json");
|
|
25
|
+
}
|
|
26
|
+
export function loadFeedbackConfig(dataDir) {
|
|
27
|
+
const file = feedbackConfigPath(dataDir);
|
|
28
|
+
let raw;
|
|
29
|
+
try {
|
|
30
|
+
raw = fs.readFileSync(file, "utf8");
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return { enabled: false };
|
|
34
|
+
}
|
|
35
|
+
try {
|
|
36
|
+
const parsed = JSON.parse(raw);
|
|
37
|
+
return FeedbackConfigSchema.parse(parsed);
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return { enabled: false };
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=feedback-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedback-config.js","sourceRoot":"","sources":["../../../../src/cli/feedback/feedback-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC;KAClC,MAAM,CAAC;IACN,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;IACpB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IAChC,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC7C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CAC1C,CAAC;KACD,MAAM,EAAE,CAAC;AAIZ,MAAM,UAAU,kBAAkB,CAAC,OAAe;IAChD,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAAe;IAChD,MAAM,IAAI,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACzC,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC5B,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC;QAC1C,OAAO,oBAAoB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC5B,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedback-history.d.ts","sourceRoot":"","sources":["../../../../src/cli/feedback/feedback-history.ts"],"names":[],"mappings":"AA4EA,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMlD;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAkBzD;AAED,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAC3B,IAAI,CAaN"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Render `rift feedback --history` for a friend.
|
|
3
|
+
*
|
|
4
|
+
* The local JSONL at `data/observability/feedback.jsonl` is canonical and
|
|
5
|
+
* left untouched — it can hold raw notes, paths, and (in legacy rows) the
|
|
6
|
+
* superseded product names. This renderer is the friend-visible surface,
|
|
7
|
+
* and so it MUST never echo:
|
|
8
|
+
* - any superseded product/tool name (the pre-Rift names this codebase
|
|
9
|
+
* used to ship under, or any of their `<prefix>_*` MCP tool names),
|
|
10
|
+
* - filesystem paths anchored at common macOS roots (`/Users/`, `~/`,
|
|
11
|
+
* `/private/var/`, `/var/`, `/tmp/`, `/Volumes/`),
|
|
12
|
+
* - anything that looks like an API key, bearer token, or other long
|
|
13
|
+
* high-entropy blob,
|
|
14
|
+
* - control characters or embedded newlines — a stored note must not be
|
|
15
|
+
* able to inject ANSI escapes or fake terminal lines into the
|
|
16
|
+
* friend-visible history.
|
|
17
|
+
*
|
|
18
|
+
* Malformed rows print a fixed placeholder; their raw content never reaches
|
|
19
|
+
* stdout. Recognized fields (`ts`, `kind`, `note`) are extracted and
|
|
20
|
+
* sanitized one by one — extra fields are dropped, never serialized.
|
|
21
|
+
*
|
|
22
|
+
* The legacy-name regex literals are assembled from fragments at module
|
|
23
|
+
* load time so the source file itself never contains the forbidden
|
|
24
|
+
* substrings (the rename gate scans this file). The control-character
|
|
25
|
+
* pattern is built from a string literal for the same reason — no raw
|
|
26
|
+
* control bytes appear in this source file.
|
|
27
|
+
*/
|
|
28
|
+
import fs from "node:fs";
|
|
29
|
+
import path from "node:path";
|
|
30
|
+
import { isFeedbackKind } from "./feedback-payload.js";
|
|
31
|
+
const LEGACY_PREFIX = "life";
|
|
32
|
+
const LEGACY_SUFFIX = "brain";
|
|
33
|
+
const LEGACY_NAME_PATTERNS = [
|
|
34
|
+
new RegExp(`\\b${LEGACY_PREFIX}[-_]${LEGACY_SUFFIX}\\b`, "gi"),
|
|
35
|
+
new RegExp(`\\b${LEGACY_PREFIX}${LEGACY_SUFFIX}\\b`, "gi"),
|
|
36
|
+
new RegExp(`\\bsecond-${LEGACY_SUFFIX}\\b`, "gi"),
|
|
37
|
+
new RegExp(`\\b${LEGACY_PREFIX}_[a-z0-9_]+\\b`, "gi"),
|
|
38
|
+
];
|
|
39
|
+
/**
|
|
40
|
+
* Match an absolute path under a known macOS root (or `~`), spanning multiple
|
|
41
|
+
* path components.
|
|
42
|
+
*
|
|
43
|
+
* A space inside a component continues the path when EITHER:
|
|
44
|
+
* - an upcoming `/` proves we are still inside an interior segment
|
|
45
|
+
* (`/Volumes/My Drive/export.json` — `Drive/` ahead), OR
|
|
46
|
+
* - the next token starts with an uppercase letter, signalling Title-Case
|
|
47
|
+
* continuation (`/Volumes/My Drive` — terminal multi-word directory).
|
|
48
|
+
*
|
|
49
|
+
* Token chars exclude sentence punctuation (`.,;:?!`) plus the universally
|
|
50
|
+
* unsafe set (`/'"\``, whitespace). `.` is re-admitted via `\.(?!\s)` so
|
|
51
|
+
* extensions (`foo.json`, `.rift.env`) and dotted multi-segment names still
|
|
52
|
+
* compose, but a sentence-ending `.<space>` ends the path:
|
|
53
|
+
* `/Volumes/My Drive. Then it crashed.` → `<path>. Then it crashed.`
|
|
54
|
+
* `/tmp/Test Folder, opened it` → `<path>, opened it`
|
|
55
|
+
*
|
|
56
|
+
* Lowercase prose after the path stops the match cleanly (no `/` ahead and
|
|
57
|
+
* not Title Case), preserving friend-visible context like `then crashed`,
|
|
58
|
+
* `before lunch`, `for output`. Title-Case prose right after a path may be
|
|
59
|
+
* over-redacted; we accept that — a leaked path suffix is worse than a
|
|
60
|
+
* couple of swallowed prose words.
|
|
61
|
+
*/
|
|
62
|
+
const PATH_PATTERNS = [
|
|
63
|
+
/(?:\/(?:private\/var|Volumes|Users|var|tmp)|~)(?:\/(?:[^\/\s'"`.,;:?!]|\.(?!\s))+(?: (?:(?=(?:[^\/\s'"`.,;:?!]|\.(?!\s))*\/)|[A-Z])(?:[^\/\s'"`.,;:?!]|\.(?!\s))*)*)+/g,
|
|
64
|
+
];
|
|
65
|
+
const SECRET_PATTERNS = [
|
|
66
|
+
/\b(?:sk|pa|pk|rk|gh[opsu])-[A-Za-z0-9_-]{16,}/g,
|
|
67
|
+
/\bBearer\s+[A-Za-z0-9_.~+/=-]{16,}/gi,
|
|
68
|
+
/\b[A-Za-z0-9_/+=-]{32,}\b/g,
|
|
69
|
+
];
|
|
70
|
+
const CONTROL_CHARS = new RegExp("[\\u0000-\\u001f\\u007f]+", "g");
|
|
71
|
+
export function sanitizeText(input) {
|
|
72
|
+
let out = input.replace(CONTROL_CHARS, " ").replace(/ {2,}/g, " ");
|
|
73
|
+
for (const re of PATH_PATTERNS)
|
|
74
|
+
out = out.replace(re, "<path>");
|
|
75
|
+
for (const re of LEGACY_NAME_PATTERNS)
|
|
76
|
+
out = out.replace(re, "<legacy>");
|
|
77
|
+
for (const re of SECRET_PATTERNS)
|
|
78
|
+
out = out.replace(re, "<redacted>");
|
|
79
|
+
return out;
|
|
80
|
+
}
|
|
81
|
+
export function formatHistoryLine(rawLine) {
|
|
82
|
+
let parsed;
|
|
83
|
+
try {
|
|
84
|
+
parsed = JSON.parse(rawLine);
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
return "[malformed row — skipped]";
|
|
88
|
+
}
|
|
89
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
90
|
+
return "[malformed row — skipped]";
|
|
91
|
+
}
|
|
92
|
+
const row = parsed;
|
|
93
|
+
const ts = typeof row.ts === "string" ? sanitizeText(row.ts) : "?";
|
|
94
|
+
const kind = typeof row.kind === "string" && isFeedbackKind(row.kind) ? row.kind : "?";
|
|
95
|
+
const noteRaw = typeof row.note === "string" ? row.note : "";
|
|
96
|
+
const note = sanitizeText(noteRaw).trim();
|
|
97
|
+
const status = row.status_snapshot ? " (with status)" : "";
|
|
98
|
+
return `${ts} · ${kind} · ${note}${status}`;
|
|
99
|
+
}
|
|
100
|
+
export function renderHistory(dataDir, emit) {
|
|
101
|
+
const file = path.join(dataDir, "observability", "feedback.jsonl");
|
|
102
|
+
if (!fs.existsSync(file)) {
|
|
103
|
+
emit("No feedback rows yet.");
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
const raw = fs.readFileSync(file, "utf8");
|
|
107
|
+
const lines = raw.split("\n").filter((l) => l.length > 0);
|
|
108
|
+
if (lines.length === 0) {
|
|
109
|
+
emit("No feedback rows yet.");
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
for (const line of lines)
|
|
113
|
+
emit(formatHistoryLine(line));
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=feedback-history.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedback-history.js","sourceRoot":"","sources":["../../../../src/cli/feedback/feedback-history.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build the feedback row that lands in `data/observability/feedback.jsonl`
|
|
3
|
+
* and (optionally) on the relay.
|
|
4
|
+
*
|
|
5
|
+
* Privacy contract — what this payload carries:
|
|
6
|
+
* - `ts` : ISO timestamp the friend hit enter.
|
|
7
|
+
* - `installation_id` : per-install random UUID from `feedback-config.json`,
|
|
8
|
+
* present only if relay opt-in is on. **Not** the
|
|
9
|
+
* friend's username, hostname, or email.
|
|
10
|
+
* - `kind` : enum free-form intent tag (worked|broke|surprised|idea).
|
|
11
|
+
* - `note` : free text from the friend. **Untrusted** — the
|
|
12
|
+
* friend can paste anything they like into this. We
|
|
13
|
+
* write it locally as-is, and forward it as-is to
|
|
14
|
+
* the relay (no scrubbing). The relay endpoint is
|
|
15
|
+
* opt-in; the friend chose to share it. Local-only
|
|
16
|
+
* rows never leave the machine.
|
|
17
|
+
* - `version` / `commit` / `node` : daemon build identity.
|
|
18
|
+
* - `status_snapshot?`: only when `--with-status`. Sanitized: counts and
|
|
19
|
+
* booleans, no path strings, no error messages, no
|
|
20
|
+
* Voyage key bytes, no machine name.
|
|
21
|
+
*/
|
|
22
|
+
import type { BuildInfo } from "../../server/build-info.js";
|
|
23
|
+
export type FeedbackKind = "worked" | "broke" | "surprised" | "idea";
|
|
24
|
+
export declare const FEEDBACK_KINDS: readonly FeedbackKind[];
|
|
25
|
+
export interface FeedbackStatusSnapshot {
|
|
26
|
+
health: {
|
|
27
|
+
status: "ok" | "unreachable";
|
|
28
|
+
uptime_seconds: number | null;
|
|
29
|
+
voyage_key_present: boolean | null;
|
|
30
|
+
};
|
|
31
|
+
build: BuildInfo | null;
|
|
32
|
+
auto_capture: {
|
|
33
|
+
last_run_ts: string | null;
|
|
34
|
+
last_run_ok: boolean | null;
|
|
35
|
+
last_preflight_ok: boolean | null;
|
|
36
|
+
last_run_error_count: number | null;
|
|
37
|
+
last_run_saved: number | null;
|
|
38
|
+
last_run_review: number | null;
|
|
39
|
+
last_run_discarded: number | null;
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
export interface FeedbackPayload {
|
|
43
|
+
ts: string;
|
|
44
|
+
installation_id?: string;
|
|
45
|
+
kind: FeedbackKind;
|
|
46
|
+
note: string;
|
|
47
|
+
version: string;
|
|
48
|
+
commit: string;
|
|
49
|
+
node: string;
|
|
50
|
+
status_snapshot?: FeedbackStatusSnapshot;
|
|
51
|
+
}
|
|
52
|
+
export declare function isFeedbackKind(s: string): s is FeedbackKind;
|
|
53
|
+
//# sourceMappingURL=feedback-payload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedback-payload.d.ts","sourceRoot":"","sources":["../../../../src/cli/feedback/feedback-payload.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAE5D,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,OAAO,GAAG,WAAW,GAAG,MAAM,CAAC;AAErE,eAAO,MAAM,cAAc,EAAE,SAAS,YAAY,EAKxC,CAAC;AAEX,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE;QACN,MAAM,EAAE,IAAI,GAAG,aAAa,CAAC;QAC7B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;QAC9B,kBAAkB,EAAE,OAAO,GAAG,IAAI,CAAC;KACpC,CAAC;IACF,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IACxB,YAAY,EAAE;QACZ,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3B,WAAW,EAAE,OAAO,GAAG,IAAI,CAAC;QAC5B,iBAAiB,EAAE,OAAO,GAAG,IAAI,CAAC;QAClC,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;QACpC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;QAC9B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;QAC/B,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;KACnC,CAAC;CACH;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,IAAI,EAAE,YAAY,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,CAAC,EAAE,sBAAsB,CAAC;CAC1C;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,IAAI,YAAY,CAE3D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedback-payload.js","sourceRoot":"","sources":["../../../../src/cli/feedback/feedback-payload.ts"],"names":[],"mappings":"AAyBA,MAAM,CAAC,MAAM,cAAc,GAA4B;IACrD,QAAQ;IACR,OAAO;IACP,WAAW;IACX,MAAM;CACE,CAAC;AA+BX,MAAM,UAAU,cAAc,CAAC,CAAS;IACtC,OAAQ,cAAoC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC3D,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { FeedbackPayload } from "./feedback-payload.js";
|
|
2
|
+
export interface RelayResult {
|
|
3
|
+
attempted: boolean;
|
|
4
|
+
ok: boolean;
|
|
5
|
+
status?: number;
|
|
6
|
+
error?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface RelayOpts {
|
|
9
|
+
url: string;
|
|
10
|
+
hmacSecret?: string;
|
|
11
|
+
fetchFn?: typeof fetch;
|
|
12
|
+
timeoutMs?: number;
|
|
13
|
+
}
|
|
14
|
+
export declare function postFeedback(payload: FeedbackPayload, opts: RelayOpts): Promise<RelayResult>;
|
|
15
|
+
//# sourceMappingURL=feedback-relay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedback-relay.d.ts","sourceRoot":"","sources":["../../../../src/cli/feedback/feedback-relay.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,YAAY,CAChC,OAAO,EAAE,eAAe,EACxB,IAAI,EAAE,SAAS,GACd,OAAO,CAAC,WAAW,CAAC,CA+BtB"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Best-effort relay POST. Local JSONL row is canonical; this is the
|
|
3
|
+
* opt-in fan-out to a Clem-controlled endpoint.
|
|
4
|
+
*
|
|
5
|
+
* Behavior:
|
|
6
|
+
* - 5 s timeout. Network failure / non-2xx is non-fatal — caller surfaces
|
|
7
|
+
* the result, but the row already lives in the local JSONL.
|
|
8
|
+
* - Optional HMAC-SHA256 over the canonical JSON body, sent as
|
|
9
|
+
* `X-Rift-Signature: sha256=<hex>`. Slack incoming webhooks ignore it;
|
|
10
|
+
* the future Cloudflare Worker validates it.
|
|
11
|
+
*/
|
|
12
|
+
import { createHmac } from "node:crypto";
|
|
13
|
+
export async function postFeedback(payload, opts) {
|
|
14
|
+
const fetchFn = opts.fetchFn ?? fetch;
|
|
15
|
+
const body = JSON.stringify(payload);
|
|
16
|
+
const headers = {
|
|
17
|
+
"content-type": "application/json",
|
|
18
|
+
};
|
|
19
|
+
if (opts.hmacSecret) {
|
|
20
|
+
const sig = createHmac("sha256", opts.hmacSecret).update(body).digest("hex");
|
|
21
|
+
headers["x-rift-signature"] = `sha256=${sig}`;
|
|
22
|
+
}
|
|
23
|
+
const controller = new AbortController();
|
|
24
|
+
const timer = setTimeout(() => controller.abort(), opts.timeoutMs ?? 5_000);
|
|
25
|
+
try {
|
|
26
|
+
const res = await fetchFn(opts.url, {
|
|
27
|
+
method: "POST",
|
|
28
|
+
body,
|
|
29
|
+
headers,
|
|
30
|
+
signal: controller.signal,
|
|
31
|
+
});
|
|
32
|
+
return res.ok
|
|
33
|
+
? { attempted: true, ok: true, status: res.status }
|
|
34
|
+
: { attempted: true, ok: false, status: res.status };
|
|
35
|
+
}
|
|
36
|
+
catch (err) {
|
|
37
|
+
return {
|
|
38
|
+
attempted: true,
|
|
39
|
+
ok: false,
|
|
40
|
+
error: err instanceof Error ? err.message : String(err),
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
finally {
|
|
44
|
+
clearTimeout(timer);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=feedback-relay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedback-relay.js","sourceRoot":"","sources":["../../../../src/cli/feedback/feedback-relay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAiBzC,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,OAAwB,EACxB,IAAe;IAEf,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC;IACtC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,kBAAkB;KACnC,CAAC;IACF,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,MAAM,GAAG,GAAG,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7E,OAAO,CAAC,kBAAkB,CAAC,GAAG,UAAU,GAAG,EAAE,CAAC;IAChD,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,CAAC;IAC5E,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE;YAClC,MAAM,EAAE,MAAM;YACd,IAAI;YACJ,OAAO;YACP,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAAC;QACH,OAAO,GAAG,CAAC,EAAE;YACX,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE;YACnD,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;IACzD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,SAAS,EAAE,IAAI;YACf,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;SACxD,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { FeedbackStatusSnapshot } from "./feedback-payload.js";
|
|
2
|
+
export interface BuildSnapshotDeps {
|
|
3
|
+
dataDir: string;
|
|
4
|
+
baseUrl: string | null;
|
|
5
|
+
/** Test injection. */
|
|
6
|
+
fetchFn?: typeof fetch;
|
|
7
|
+
/** Test injection: clock used for the network timeout. */
|
|
8
|
+
timeoutMs?: number;
|
|
9
|
+
}
|
|
10
|
+
export declare function buildStatusSnapshot(deps: BuildSnapshotDeps): Promise<FeedbackStatusSnapshot>;
|
|
11
|
+
//# sourceMappingURL=feedback-status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedback-status.d.ts","sourceRoot":"","sources":["../../../../src/cli/feedback/feedback-status.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAEpE,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,sBAAsB;IACtB,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;IACvB,0DAA0D;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,iBAAiB,GACtB,OAAO,CAAC,sBAAsB,CAAC,CAQjC"}
|