@getrift/rift 0.1.0-beta.2 → 0.1.0-beta.21
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 +80 -0
- package/dist/src/cli/commands/menubar.d.ts.map +1 -0
- package/dist/src/cli/commands/menubar.js +388 -0
- package/dist/src/cli/commands/menubar.js.map +1 -0
- package/dist/src/cli/commands/onboard.d.ts +143 -5
- package/dist/src/cli/commands/onboard.d.ts.map +1 -1
- package/dist/src/cli/commands/onboard.js +844 -188
- 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 +117 -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 +390 -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 +53 -0
- package/dist/src/cli/postinstall-menubar.js.map +1 -0
- package/dist/src/cli/status/friend-header.d.ts +16 -1
- package/dist/src/cli/status/friend-header.d.ts.map +1 -1
- package/dist/src/cli/status/friend-header.js +354 -26
- package/dist/src/cli/status/friend-header.js.map +1 -1
- package/dist/src/cli/status/local-signals.d.ts +18 -0
- package/dist/src/cli/status/local-signals.d.ts.map +1 -1
- package/dist/src/cli/status/local-signals.js +29 -0
- package/dist/src/cli/status/local-signals.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 +114 -0
- package/dist/src/diagnostics/doctor.d.ts.map +1 -0
- package/dist/src/diagnostics/doctor.js +352 -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,7 +11,7 @@
|
|
|
11
11
|
* substrings stay in the renderer's input contract — the caller is
|
|
12
12
|
* responsible for never passing a full Voyage key into `voyageLast4`.
|
|
13
13
|
*/
|
|
14
|
-
import type { FriendStatusPayload } from "../../server/routes/friend-status.js";
|
|
14
|
+
import type { FriendStatusOnboarding, FriendStatusPayload } from "../../server/routes/friend-status.js";
|
|
15
15
|
export interface McpClientStatus {
|
|
16
16
|
/** Display label (e.g., "claude-desktop"). */
|
|
17
17
|
client: string;
|
|
@@ -24,10 +24,25 @@ export interface RenderHeaderInput {
|
|
|
24
24
|
voyageLast4: string | null;
|
|
25
25
|
/** MCP-client install presence, in display order. */
|
|
26
26
|
mcpClients: McpClientStatus[];
|
|
27
|
+
/**
|
|
28
|
+
* SwiftBar presence — null when the question does not apply (non-macOS) or
|
|
29
|
+
* was not probed. Only the `installed: false` case renders a line, so a
|
|
30
|
+
* healthy/unprobed install stays quiet, matching `rift doctor`.
|
|
31
|
+
*/
|
|
32
|
+
swiftBar?: {
|
|
33
|
+
installed: boolean;
|
|
34
|
+
} | null;
|
|
27
35
|
/** Clock injection for tests; defaults to Date.now(). */
|
|
28
36
|
now?: () => number;
|
|
29
37
|
}
|
|
30
38
|
export declare function renderFriendHeader(input: RenderHeaderInput): string[];
|
|
31
39
|
export declare function formatAge(iso: string, now: number): string;
|
|
40
|
+
/**
|
|
41
|
+
* Render the `time_to_first_useful_recall` line. Returns null when the
|
|
42
|
+
* state is `hidden` so the caller can drop the line entirely — a fresh
|
|
43
|
+
* post-onboard install should not advertise a metric it has not yet
|
|
44
|
+
* earned the right to display.
|
|
45
|
+
*/
|
|
46
|
+
export declare function renderOnboardingLine(onboarding: FriendStatusOnboarding | undefined, now: number): string | null;
|
|
32
47
|
export declare function formatDuration(seconds: number): string;
|
|
33
48
|
//# sourceMappingURL=friend-header.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"friend-header.d.ts","sourceRoot":"","sources":["../../../../src/cli/status/friend-header.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"friend-header.d.ts","sourceRoot":"","sources":["../../../../src/cli/status/friend-header.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EACV,sBAAsB,EACtB,mBAAmB,EACpB,MAAM,sCAAsC,CAAC;AAG9C,MAAM,WAAW,eAAe;IAC9B,8CAA8C;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACnC,yEAAyE;IACzE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,qDAAqD;IACrD,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B;;;;OAIG;IACH,QAAQ,CAAC,EAAE;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IACzC,yDAAyD;IACzD,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,EAAE,CAyFrE;AAgXD,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAI1D;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,sBAAsB,GAAG,SAAS,EAC9C,GAAG,EAAE,MAAM,GACV,MAAM,GAAG,IAAI,CAef;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAUtD"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { formatOnboardingDuration } from "../../observability/onboarding-metric.js";
|
|
1
2
|
export function renderFriendHeader(input) {
|
|
2
3
|
const { status } = input;
|
|
3
4
|
const now = input.now ? input.now() : Date.now();
|
|
@@ -7,30 +8,133 @@ export function renderFriendHeader(input) {
|
|
|
7
8
|
lines.push("Next: run: launchctl kickstart -k gui/$UID/com.getrift.daemon");
|
|
8
9
|
return lines;
|
|
9
10
|
}
|
|
11
|
+
// Derive when the current daemon process started so we can tell
|
|
12
|
+
// "happened during this uptime" from "historical error from a prior
|
|
13
|
+
// run." Without this, a 20h-old schema_mismatch keeps advertising
|
|
14
|
+
// "broken" in the Next: line for a full 24h after a perfectly
|
|
15
|
+
// healthy respawn.
|
|
16
|
+
const daemonStartMs = now - status.daemon.uptime_seconds * 1000;
|
|
10
17
|
// 1. version + daemon
|
|
11
|
-
lines.push(`Rift v${status.build.version} · daemon: running (uptime ${formatDuration(status.daemon.uptime_seconds)}) · port ${status.daemon.port}
|
|
18
|
+
lines.push(`Rift v${status.build.version} · daemon: running (uptime ${formatDuration(status.daemon.uptime_seconds)}) · port ${status.daemon.port}${status.daemon.voyage_key_present ? " ✓" : status.daemon.capture_enabled ? " ✗" : ""}`);
|
|
12
19
|
// 2. voyage
|
|
13
20
|
lines.push(renderVoyageLine(input, now));
|
|
14
|
-
// 3.
|
|
21
|
+
// 3. index — distinct from voyage: an embed can succeed but the
|
|
22
|
+
// downstream LanceDB write can still fail (schema, lock, IO).
|
|
23
|
+
// Without this line the user has no signal that "embedded" does not
|
|
24
|
+
// imply "searchable yet".
|
|
25
|
+
lines.push(renderIndexLine(status.index, now));
|
|
26
|
+
// 4. inbox — surfaces drop-folder freshness. Distinct from index:
|
|
27
|
+
// a watcher-fed write can succeed at the index lane without ever
|
|
28
|
+
// having processed an inbox file. This line is the user-visible
|
|
29
|
+
// confirmation that the inbox path itself is wired up and current.
|
|
30
|
+
lines.push(renderInboxLine(status.inbox, now));
|
|
31
|
+
// 5. codex
|
|
15
32
|
lines.push(renderCodexLine(status.codex, now));
|
|
16
|
-
//
|
|
17
|
-
|
|
18
|
-
//
|
|
33
|
+
// 6. capture — when the daemon's own scheduled loop is failing but a
|
|
34
|
+
// manual run is working, split into "what works now" (the manual run)
|
|
35
|
+
// plus an honest "Automatic:" advisory, so a manual success never
|
|
36
|
+
// paints the scheduled loop green. Collapses back to one line once the
|
|
37
|
+
// daemon records a healthy run.
|
|
38
|
+
const daemonCaptureStale = isDaemonCaptureStale(status.capture, daemonStartMs);
|
|
39
|
+
lines.push(renderCaptureLine(status.capture, now, daemonCaptureStale));
|
|
40
|
+
const automaticCaptureLine = renderAutomaticCaptureLine(status.capture, now, daemonCaptureStale);
|
|
41
|
+
if (automaticCaptureLine)
|
|
42
|
+
lines.push(automaticCaptureLine);
|
|
43
|
+
// 7. MCP
|
|
19
44
|
lines.push(renderMcpLine(input.mcpClients));
|
|
20
|
-
//
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
45
|
+
// 7b. menu bar — only when probed (macOS) AND SwiftBar is absent. The plugin
|
|
46
|
+
// is installed but the app that draws the icon is missing, so `status`
|
|
47
|
+
// surfaces the same "menu can't show" warning `doctor` does instead of
|
|
48
|
+
// leaving a silently-missing icon undiagnosed. Installed/unprobed stays
|
|
49
|
+
// quiet so a healthy install never grows a noise line.
|
|
50
|
+
const swiftBarLine = renderSwiftBarLine(input.swiftBar);
|
|
51
|
+
if (swiftBarLine)
|
|
52
|
+
lines.push(swiftBarLine);
|
|
53
|
+
// 8. feedback
|
|
54
|
+
lines.push(`Feedback: ${renderFeedbackLine(status.feedback)}`);
|
|
55
|
+
// 9. update — surfaced only when the daemon's last probe found a
|
|
56
|
+
// newer beta. Probe failures and up-to-date installs print nothing
|
|
57
|
+
// so npm reachability cannot make Rift look broken.
|
|
58
|
+
const updateLine = renderUpdateLine(status.update);
|
|
59
|
+
if (updateLine)
|
|
60
|
+
lines.push(updateLine);
|
|
61
|
+
// 10. onboarding — `time_to_first_useful_recall`. Hidden state prints
|
|
62
|
+
// nothing so a fresh post-onboard install never shows a stale
|
|
63
|
+
// placeholder. Pending shows the in-flight wait; completed shows
|
|
64
|
+
// the captured duration + the MCP tool that closed it.
|
|
65
|
+
const onboardingLine = renderOnboardingLine(status.onboarding, now);
|
|
66
|
+
if (onboardingLine)
|
|
67
|
+
lines.push(onboardingLine);
|
|
24
68
|
lines.push("");
|
|
25
|
-
lines.push(`Next: ${decideNextLine({ status, mcpClients: input.mcpClients })}`);
|
|
69
|
+
lines.push(`Next: ${decideNextLine({ status, mcpClients: input.mcpClients, daemonStartMs })}`);
|
|
26
70
|
return lines;
|
|
27
71
|
}
|
|
72
|
+
/**
|
|
73
|
+
* True only when `iso` parses to a timestamp after the daemon's current
|
|
74
|
+
* start. Historical errors that predate the running process are not
|
|
75
|
+
* current and must not drive the Next: nudge — a friend with a healthy
|
|
76
|
+
* respawned daemon would otherwise see "broken, file feedback" for the
|
|
77
|
+
* full 24h window every error class keeps.
|
|
78
|
+
*/
|
|
79
|
+
function isCurrentUptime(iso, daemonStartMs) {
|
|
80
|
+
if (!iso)
|
|
81
|
+
return false;
|
|
82
|
+
const ts = Date.parse(iso);
|
|
83
|
+
if (Number.isNaN(ts))
|
|
84
|
+
return false;
|
|
85
|
+
return ts >= daemonStartMs;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Translate internal error class names into copy a friend can act on.
|
|
89
|
+
* Falls back to the raw class so new/unknown values still surface
|
|
90
|
+
* (better an unfamiliar word than a missing one).
|
|
91
|
+
*/
|
|
92
|
+
function humanizeErrorClass(reason) {
|
|
93
|
+
if (!reason)
|
|
94
|
+
return "unknown";
|
|
95
|
+
switch (reason) {
|
|
96
|
+
case "schema_mismatch":
|
|
97
|
+
return "index format changed by update";
|
|
98
|
+
case "lock_conflict":
|
|
99
|
+
return "index busy (concurrent write)";
|
|
100
|
+
case "provider_400":
|
|
101
|
+
return "embedding rejected by Voyage";
|
|
102
|
+
case "network":
|
|
103
|
+
return "network error";
|
|
104
|
+
default:
|
|
105
|
+
return reason;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
function renderFeedbackLine(feedback) {
|
|
109
|
+
if (feedback.relay_enabled) {
|
|
110
|
+
return "relay on (local JSONL + Clem-side relay)";
|
|
111
|
+
}
|
|
112
|
+
if (feedback.contact_opted_in) {
|
|
113
|
+
// Opted in for updates, but no relay endpoint is wired yet — be honest
|
|
114
|
+
// that nothing is transmitting, without telling them to "opt in" again.
|
|
115
|
+
return "opted in — stays local until the beta relay is live";
|
|
116
|
+
}
|
|
117
|
+
return "relay off (local JSONL only) — opt in via rift onboard";
|
|
118
|
+
}
|
|
119
|
+
function renderUpdateLine(update) {
|
|
120
|
+
if (!update.available)
|
|
121
|
+
return null;
|
|
122
|
+
if (!update.latest_beta)
|
|
123
|
+
return null;
|
|
124
|
+
return `Update: available ${update.installed} → ${update.latest_beta} — run: rift update`;
|
|
125
|
+
}
|
|
28
126
|
function renderVoyageLine(input, now) {
|
|
29
127
|
const { status, voyageLast4 } = input;
|
|
30
128
|
if (!status)
|
|
31
129
|
return "Voyage: unknown";
|
|
32
130
|
if (!status.daemon.voyage_key_present) {
|
|
33
|
-
|
|
131
|
+
// No key is an intentional local mode, not a fault: keyword (lexical)
|
|
132
|
+
// search is fully on; only semantic search is off. We only nudge toward a
|
|
133
|
+
// Voyage key when a feature that actually needs one (auto-capture) is
|
|
134
|
+
// enabled — otherwise the line must read as "working as configured."
|
|
135
|
+
return status.daemon.capture_enabled
|
|
136
|
+
? "Search: keyword on, semantic off — auto-capture needs a Voyage key: rift onboard --reconfigure-voyage"
|
|
137
|
+
: "Search: keyword on · semantic off (no Voyage key — local mode)";
|
|
34
138
|
}
|
|
35
139
|
const last4 = voyageLast4 ? `last 4 …${voyageLast4}` : "key valid";
|
|
36
140
|
const labelSuffix = status.voyage.project_label
|
|
@@ -39,26 +143,151 @@ function renderVoyageLine(input, now) {
|
|
|
39
143
|
const embedSuffix = status.voyage.last_embed_at
|
|
40
144
|
? `, last embed ${formatAge(status.voyage.last_embed_at, now)}`
|
|
41
145
|
: "";
|
|
42
|
-
|
|
146
|
+
const errorSuffix = status.voyage.last_error_at
|
|
147
|
+
? ` · last error ${formatAge(status.voyage.last_error_at, now)} (${status.voyage.last_error_reason ?? "unknown"})`
|
|
148
|
+
: "";
|
|
149
|
+
return `Voyage: key valid (${last4}${embedSuffix})${labelSuffix}${errorSuffix}`;
|
|
150
|
+
}
|
|
151
|
+
function renderIndexLine(index, now) {
|
|
152
|
+
if (index.last_update_at === null && index.last_error_at === null) {
|
|
153
|
+
return "Index: no writes yet";
|
|
154
|
+
}
|
|
155
|
+
const updateSuffix = index.last_update_at
|
|
156
|
+
? `last update ${formatAge(index.last_update_at, now)}`
|
|
157
|
+
: "no writes yet";
|
|
158
|
+
const errorSuffix = index.last_error_at
|
|
159
|
+
? ` · last error ${formatAge(index.last_error_at, now)} (${index.last_error_reason ?? "unknown"})`
|
|
160
|
+
: "";
|
|
161
|
+
return `Index: ${updateSuffix}${errorSuffix}`;
|
|
162
|
+
}
|
|
163
|
+
function renderInboxLine(inbox, now) {
|
|
164
|
+
// Older daemons (pre-this-slice) don't ship an `inbox` block. Treat
|
|
165
|
+
// the missing block exactly as "idle" — the line stays present and
|
|
166
|
+
// the CLI never crashes on a cross-version mismatch.
|
|
167
|
+
if (!inbox ||
|
|
168
|
+
(inbox.last_import_at === null &&
|
|
169
|
+
inbox.last_error_at === null &&
|
|
170
|
+
inbox.pending === 0)) {
|
|
171
|
+
return "Inbox: nothing dropped yet — drop a web export under data/inbox/";
|
|
172
|
+
}
|
|
173
|
+
const parts = [];
|
|
174
|
+
if (inbox.last_import_at) {
|
|
175
|
+
parts.push(`last import ${formatAge(inbox.last_import_at, now)}`);
|
|
176
|
+
}
|
|
177
|
+
if (inbox.pending > 0) {
|
|
178
|
+
parts.push(`${inbox.pending} pending`);
|
|
179
|
+
}
|
|
180
|
+
const head = parts.length > 0 ? parts.join(" · ") : "idle";
|
|
181
|
+
const errorSuffix = inbox.last_error_at
|
|
182
|
+
? ` · last error ${formatAge(inbox.last_error_at, now)} (${inbox.last_error_reason ?? "unknown"})`
|
|
183
|
+
: "";
|
|
184
|
+
return `Inbox: ${head}${errorSuffix}`;
|
|
43
185
|
}
|
|
44
186
|
function renderCodexLine(codex, now) {
|
|
45
187
|
if (codex.last_preflight_at === null) {
|
|
46
|
-
return "Codex CLI:
|
|
188
|
+
return "Codex CLI: not checked yet — auto-capture has not run";
|
|
47
189
|
}
|
|
48
190
|
if (codex.last_preflight_ok === true) {
|
|
49
|
-
return `Codex CLI: authed ✓ (last
|
|
191
|
+
return `Codex CLI: authed ✓ (last checked: ${formatAge(codex.last_preflight_at, now)})`;
|
|
192
|
+
}
|
|
193
|
+
const checked = `last checked: ${formatAge(codex.last_preflight_at, now)}`;
|
|
194
|
+
if (codex.last_preflight_error_class === "auth") {
|
|
195
|
+
return `Codex CLI: auth expired ✗ (${checked}) — run: codex login`;
|
|
50
196
|
}
|
|
51
|
-
|
|
197
|
+
// Not auth — say what actually failed and don't nag about login.
|
|
198
|
+
const summary = codex.last_preflight_error_summary ?? "Codex preflight failed.";
|
|
199
|
+
return `Codex CLI: probe failing ✗ (${checked}) — ${summary}`;
|
|
52
200
|
}
|
|
53
|
-
|
|
201
|
+
/**
|
|
202
|
+
* True when the daemon's own scheduled loop last failed (during this
|
|
203
|
+
* uptime) but the newest run is a healthy ad-hoc run (a manual `rift
|
|
204
|
+
* capture` or the onboard first-capture pass). This is the "capture works
|
|
205
|
+
* now, but automation is still failing" split — kept in sync with the
|
|
206
|
+
* `capture_daemon_stale` check in diagnostics/doctor.ts.
|
|
207
|
+
*
|
|
208
|
+
* `last_daemon_failed` carries the full failure verdict (a `run_ok`-only
|
|
209
|
+
* check would miss the common expired-Codex case, which completes with
|
|
210
|
+
* `run_ok: true, preflight_ok: false`). The newest run must be a non-daemon
|
|
211
|
+
* trigger — legacy untagged rows report as `daemon`, so `!== "daemon"`
|
|
212
|
+
* cleanly means manual or onboard.
|
|
213
|
+
*/
|
|
214
|
+
function isDaemonCaptureStale(capture, daemonStartMs) {
|
|
215
|
+
return (capture.last_daemon_failed === true &&
|
|
216
|
+
isCurrentUptime(capture.last_daemon_run_at ?? null, daemonStartMs) &&
|
|
217
|
+
capture.last_run_trigger != null &&
|
|
218
|
+
capture.last_run_trigger !== "daemon" &&
|
|
219
|
+
capture.last_run_ok === true &&
|
|
220
|
+
capture.last_errors === 0);
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Split the parked-oversized count into "still self-repairing" vs. "exhausted
|
|
224
|
+
* retries, needs a manual save". The daemon ships explicit `oversized_repairing`
|
|
225
|
+
* / `oversized_repair_failed`; an older daemon omits them, so we fall back to
|
|
226
|
+
* treating every parked session as still-repairing (`parked - failed`, with
|
|
227
|
+
* failed defaulting to 0) — the calm, accurate read for a daemon that simply
|
|
228
|
+
* hasn't reported a budget yet.
|
|
229
|
+
*/
|
|
230
|
+
function deriveParkedState(capture) {
|
|
231
|
+
const parked = capture.oversized_parked ?? 0;
|
|
232
|
+
const failed = capture.oversized_repair_failed ?? 0;
|
|
233
|
+
const repairing = capture.oversized_repairing ?? Math.max(parked - failed, 0);
|
|
234
|
+
return { parked, repairing, failed };
|
|
235
|
+
}
|
|
236
|
+
function renderCaptureLine(capture, now, daemonStale) {
|
|
54
237
|
if (capture.last_run_at === null) {
|
|
55
|
-
|
|
238
|
+
const nextOnly = formatNextRunSuffix(capture.next_run_at, now);
|
|
239
|
+
return nextOnly
|
|
240
|
+
? `Capture: no runs yet · ${nextOnly}`
|
|
241
|
+
: "Capture: no runs yet";
|
|
56
242
|
}
|
|
57
243
|
const age = formatAge(capture.last_run_at, now);
|
|
58
|
-
const
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
244
|
+
const runLabel = capture.last_run_trigger === "manual" ? "last manual run" : "last run";
|
|
245
|
+
// Driven by the parked-session count (state of the world), NOT
|
|
246
|
+
// `last_quarantined` (the last run's count) — otherwise this visible line
|
|
247
|
+
// flickers between showing and hiding as a stable oversized file dedups on
|
|
248
|
+
// one run and re-quarantines on the next. Large sessions now self-repair in
|
|
249
|
+
// the background, so the suffix reports honest state: "saving …" while Rift
|
|
250
|
+
// is still recovering them, "need a manual save" only once retries are
|
|
251
|
+
// exhausted — never a bare "run the repair command" on a self-healing path.
|
|
252
|
+
const { repairing, failed } = deriveParkedState(capture);
|
|
253
|
+
const parkedSuffix = failed > 0
|
|
254
|
+
? ` · ${failed} large session${failed === 1 ? "" : "s"} need a manual save`
|
|
255
|
+
: repairing > 0
|
|
256
|
+
? ` · saving ${repairing} large session${repairing === 1 ? "" : "s"} to memory`
|
|
257
|
+
: "";
|
|
258
|
+
// When the split "Automatic:" line is shown it carries the daemon's next
|
|
259
|
+
// tick, so keep it off this line — otherwise a manual run would look
|
|
260
|
+
// scheduled. With no split, this line keeps the next-tick hint.
|
|
261
|
+
const nextSuffix = daemonStale
|
|
262
|
+
? null
|
|
263
|
+
: formatNextRunSuffix(capture.next_run_at, now);
|
|
264
|
+
const nextPart = nextSuffix ? ` · ${nextSuffix}` : "";
|
|
265
|
+
return `Capture: ${runLabel} ${age} — ${capture.last_saved} saved · ${capture.last_review} review · ${capture.last_errors} failed${parkedSuffix}${nextPart}`;
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* The "Automatic:" advisory line — shown only when `isDaemonCaptureStale`
|
|
269
|
+
* holds (the scheduled loop's last run failed while a manual run is
|
|
270
|
+
* working). Returns null otherwise; a healthy or not-yet-run daemon needs
|
|
271
|
+
* no second capture line.
|
|
272
|
+
*/
|
|
273
|
+
function renderAutomaticCaptureLine(capture, now, daemonStale) {
|
|
274
|
+
if (!daemonStale || !capture.last_daemon_run_at)
|
|
275
|
+
return null;
|
|
276
|
+
const age = formatAge(capture.last_daemon_run_at, now);
|
|
277
|
+
const nextSuffix = formatNextRunSuffix(capture.next_run_at, now);
|
|
278
|
+
const nextPart = nextSuffix ? ` · ${nextSuffix}` : "";
|
|
279
|
+
return `Automatic: last daemon run ${age} failed${nextPart}`;
|
|
280
|
+
}
|
|
281
|
+
function formatNextRunSuffix(iso, now) {
|
|
282
|
+
if (!iso)
|
|
283
|
+
return null;
|
|
284
|
+
const then = Date.parse(iso);
|
|
285
|
+
if (Number.isNaN(then))
|
|
286
|
+
return null;
|
|
287
|
+
const deltaSeconds = Math.round((then - now) / 1000);
|
|
288
|
+
if (deltaSeconds <= 0)
|
|
289
|
+
return "next tick due";
|
|
290
|
+
return `next in ${formatDuration(deltaSeconds)}`;
|
|
62
291
|
}
|
|
63
292
|
function renderMcpLine(clients) {
|
|
64
293
|
if (clients.length === 0)
|
|
@@ -68,21 +297,97 @@ function renderMcpLine(clients) {
|
|
|
68
297
|
: `${c.client} ✗ (run: rift mcp install --client=${c.client})`);
|
|
69
298
|
return `MCP: ${parts.join(" · ")}`;
|
|
70
299
|
}
|
|
300
|
+
/**
|
|
301
|
+
* Render the menu-bar advisory line, or null to omit it. Only the probed-and-
|
|
302
|
+
* absent case prints — `null` (non-macOS / unprobed, e.g. the daemon notifier)
|
|
303
|
+
* and `installed: true` both stay silent.
|
|
304
|
+
*/
|
|
305
|
+
function renderSwiftBarLine(swiftBar) {
|
|
306
|
+
if (!swiftBar || swiftBar.installed)
|
|
307
|
+
return null;
|
|
308
|
+
// Lead with the real first step (install the app); `rift menubar install`
|
|
309
|
+
// alone would only re-print that same recovery, so name it directly.
|
|
310
|
+
return "Menu bar: SwiftBar not installed ✗ (icon can't show → install SwiftBar from swiftbar.app, then run: rift menubar install)";
|
|
311
|
+
}
|
|
71
312
|
function decideNextLine(input) {
|
|
72
|
-
const { status, mcpClients } = input;
|
|
73
|
-
|
|
74
|
-
|
|
313
|
+
const { status, mcpClients, daemonStartMs } = input;
|
|
314
|
+
// A missing key is only an action item when something needs it. With
|
|
315
|
+
// auto-capture off, no-key is the intended local mode, so it must not claim
|
|
316
|
+
// the Next: line — that would read as "broken" on a healthy local install.
|
|
317
|
+
if (!status.daemon.voyage_key_present && status.daemon.capture_enabled) {
|
|
318
|
+
return "Auto-capture is on but has no Voyage key to embed with → run: rift onboard --reconfigure-voyage";
|
|
75
319
|
}
|
|
76
320
|
if (status.codex.last_preflight_ok === false) {
|
|
77
|
-
|
|
321
|
+
if (status.codex.last_preflight_error_class === "auth") {
|
|
322
|
+
return "Codex auth expired → run: codex login";
|
|
323
|
+
}
|
|
324
|
+
if (status.codex.last_preflight_error_class === "model") {
|
|
325
|
+
return "Codex rejected the model → set codex_cli.model, then: rift capture";
|
|
326
|
+
}
|
|
327
|
+
if (status.codex.last_preflight_error_class === "binary") {
|
|
328
|
+
return "Codex CLI missing or moved → reinstall/upgrade codex, then: rift capture";
|
|
329
|
+
}
|
|
330
|
+
return "Codex capture probe failing → re-run: rift capture";
|
|
78
331
|
}
|
|
79
|
-
|
|
332
|
+
// Recency gating: only errors stamped *after* the current daemon
|
|
333
|
+
// start can drive the Next: action. A 20h-old schema_mismatch from a
|
|
334
|
+
// prior process should not advertise "broken, file feedback" on a
|
|
335
|
+
// healthy respawn.
|
|
336
|
+
if (isCurrentUptime(status.voyage.last_error_at, daemonStartMs)) {
|
|
337
|
+
return `Voyage embedding errors since daemon start (${humanizeErrorClass(status.voyage.last_error_reason)}) → run: rift feedback --kind=broke --with-status`;
|
|
338
|
+
}
|
|
339
|
+
if (isCurrentUptime(status.index.last_error_at, daemonStartMs)) {
|
|
340
|
+
return `Index write errors since daemon start (${humanizeErrorClass(status.index.last_error_reason)}) → run: rift feedback --kind=broke --with-status`;
|
|
341
|
+
}
|
|
342
|
+
// Inbox import failures are usually the user's own drop being rejected
|
|
343
|
+
// (malformed export, corrupted ZIP, unsupported source). The fix is on
|
|
344
|
+
// their side — re-drop a fresh export — not in the feedback flow.
|
|
345
|
+
// We deliberately do NOT name `data/quarantine/`: pre-parse failures
|
|
346
|
+
// (e.g. corrupted ZIPs that throw inside extractArchive) never write
|
|
347
|
+
// a quarantine record, so the path would point at an empty folder.
|
|
348
|
+
// Only the parser-level per-conversation failures land there, and
|
|
349
|
+
// the user doesn't need to disambiguate before re-dropping.
|
|
350
|
+
if (status.inbox && isCurrentUptime(status.inbox.last_error_at, daemonStartMs)) {
|
|
351
|
+
return `Inbox import errors since daemon start (${humanizeErrorClass(status.inbox.last_error_reason)}) → re-drop a fresh export under data/inbox/`;
|
|
352
|
+
}
|
|
353
|
+
// Capture errors only count when the failing run happened during the
|
|
354
|
+
// current daemon uptime — a prior process's failure shouldn't keep
|
|
355
|
+
// nudging the friend post-respawn.
|
|
356
|
+
if (status.capture.last_errors > 0 &&
|
|
357
|
+
isCurrentUptime(status.capture.last_run_at, daemonStartMs)) {
|
|
80
358
|
return "Capture errors detected → run: rift feedback --kind=broke --with-status";
|
|
81
359
|
}
|
|
360
|
+
// Scheduled loop failing while the newest run is a healthy manual one:
|
|
361
|
+
// capture works now, so surface the honest "will re-check" advisory
|
|
362
|
+
// rather than a broken-capture action or "nothing broken."
|
|
363
|
+
if (isDaemonCaptureStale(status.capture, daemonStartMs)) {
|
|
364
|
+
return "capture works now; automatic capture will re-check on the next scheduled run";
|
|
365
|
+
}
|
|
82
366
|
const missing = mcpClients.filter((c) => !c.installed).map((c) => c.client);
|
|
83
367
|
if (missing.length > 0) {
|
|
84
368
|
return `MCP not installed for ${missing.join(", ")} → run: rift mcp install --client=${missing[0]}`;
|
|
85
369
|
}
|
|
370
|
+
// Oversized Codex sessions parked in quarantine are a graceful skip, not an
|
|
371
|
+
// error — and they now SELF-REPAIR in the background. So the default copy is
|
|
372
|
+
// the honest in-progress state ("Rift is saving N … to memory"), with NO
|
|
373
|
+
// command for the friend to run. The manual `rift doctor repair
|
|
374
|
+
// capture-large-sessions` is surfaced only once a session has exhausted its
|
|
375
|
+
// bounded retry budget — the genuine "Rift couldn't, you take over" case.
|
|
376
|
+
const { repairing, failed } = deriveParkedState(status.capture);
|
|
377
|
+
if (failed > 0) {
|
|
378
|
+
return `${failed} large Codex session${failed === 1 ? "" : "s"} could not be saved automatically → run: rift doctor repair capture-large-sessions`;
|
|
379
|
+
}
|
|
380
|
+
if (repairing > 0) {
|
|
381
|
+
return `Rift is saving ${repairing} large Codex session${repairing === 1 ? "" : "s"} to memory — no action needed`;
|
|
382
|
+
}
|
|
383
|
+
// Update available wins over "nothing broken" — a friend who runs
|
|
384
|
+
// status precisely to find out what to do next should see the update
|
|
385
|
+
// hint surfaced as the action, not buried under "all green." It is
|
|
386
|
+
// still strictly below every real error branch above, so a broken
|
|
387
|
+
// daemon never prefers an update suggestion over a Voyage/Index fix.
|
|
388
|
+
if (status.update.available && status.update.latest_beta) {
|
|
389
|
+
return `Update available (${status.update.installed} → ${status.update.latest_beta}) → run: rift update`;
|
|
390
|
+
}
|
|
86
391
|
return 'nothing broken. Try rift search "<topic>".';
|
|
87
392
|
}
|
|
88
393
|
export function formatAge(iso, now) {
|
|
@@ -91,6 +396,29 @@ export function formatAge(iso, now) {
|
|
|
91
396
|
return "unknown";
|
|
92
397
|
return formatDuration(Math.max(0, Math.round((now - then) / 1000))) + " ago";
|
|
93
398
|
}
|
|
399
|
+
/**
|
|
400
|
+
* Render the `time_to_first_useful_recall` line. Returns null when the
|
|
401
|
+
* state is `hidden` so the caller can drop the line entirely — a fresh
|
|
402
|
+
* post-onboard install should not advertise a metric it has not yet
|
|
403
|
+
* earned the right to display.
|
|
404
|
+
*/
|
|
405
|
+
export function renderOnboardingLine(onboarding, now) {
|
|
406
|
+
if (!onboarding)
|
|
407
|
+
return null;
|
|
408
|
+
if (onboarding.state === "hidden")
|
|
409
|
+
return null;
|
|
410
|
+
if (onboarding.state === "pending") {
|
|
411
|
+
const since = onboarding.useful_state_reached_at
|
|
412
|
+
? ` (waiting ${formatAge(onboarding.useful_state_reached_at, now)})`
|
|
413
|
+
: "";
|
|
414
|
+
return `First recall: pending — index ready, awaiting your first useful AI-client query${since}`;
|
|
415
|
+
}
|
|
416
|
+
const duration = onboarding.duration_seconds !== null
|
|
417
|
+
? formatOnboardingDuration(onboarding.duration_seconds)
|
|
418
|
+
: "?";
|
|
419
|
+
const tool = onboarding.first_useful_recall_tool ?? "?";
|
|
420
|
+
return `First recall: ${duration} after first useful state · via ${tool}`;
|
|
421
|
+
}
|
|
94
422
|
export function formatDuration(seconds) {
|
|
95
423
|
if (seconds < 60)
|
|
96
424
|
return `${seconds}s`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"friend-header.js","sourceRoot":"","sources":["../../../../src/cli/status/friend-header.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"friend-header.js","sourceRoot":"","sources":["../../../../src/cli/status/friend-header.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,wBAAwB,EAAE,MAAM,0CAA0C,CAAC;AAyBpF,MAAM,UAAU,kBAAkB,CAAC,KAAwB;IACzD,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IACzB,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;IAEjD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAC3C,KAAK,CAAC,IAAI,CAAC,sEAAsE,CAAC,CAAC;QACnF,OAAO,KAAK,CAAC;IACf,CAAC;IAED,gEAAgE;IAChE,oEAAoE;IACpE,kEAAkE;IAClE,8DAA8D;IAC9D,mBAAmB;IACnB,MAAM,aAAa,GAAG,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC;IAEhE,sBAAsB;IACtB,KAAK,CAAC,IAAI,CACR,SAAS,MAAM,CAAC,KAAK,CAAC,OAAO,gCAAgC,cAAc,CACzE,MAAM,CAAC,MAAM,CAAC,cAAc,CAC7B,cAAc,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAC1H,CAAC;IAEF,YAAY;IACZ,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IAEzC,gEAAgE;IAChE,8DAA8D;IAC9D,oEAAoE;IACpE,0BAA0B;IAC1B,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IAE/C,kEAAkE;IAClE,iEAAiE;IACjE,gEAAgE;IAChE,mEAAmE;IACnE,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IAE/C,WAAW;IACX,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IAE/C,qEAAqE;IACrE,yEAAyE;IACzE,qEAAqE;IACrE,0EAA0E;IAC1E,mCAAmC;IACnC,MAAM,kBAAkB,GAAG,oBAAoB,CAAC,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IAC/E,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,kBAAkB,CAAC,CAAC,CAAC;IACvE,MAAM,oBAAoB,GAAG,0BAA0B,CACrD,MAAM,CAAC,OAAO,EACd,GAAG,EACH,kBAAkB,CACnB,CAAC;IACF,IAAI,oBAAoB;QAAE,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IAE3D,SAAS;IACT,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;IAE5C,6EAA6E;IAC7E,2EAA2E;IAC3E,2EAA2E;IAC3E,4EAA4E;IAC5E,2DAA2D;IAC3D,MAAM,YAAY,GAAG,kBAAkB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACxD,IAAI,YAAY;QAAE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAE3C,cAAc;IACd,KAAK,CAAC,IAAI,CAAC,gBAAgB,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAElE,iEAAiE;IACjE,sEAAsE;IACtE,uDAAuD;IACvD,MAAM,UAAU,GAAG,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACnD,IAAI,UAAU;QAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAEvC,sEAAsE;IACtE,kEAAkE;IAClE,qEAAqE;IACrE,2DAA2D;IAC3D,MAAM,cAAc,GAAG,oBAAoB,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IACpE,IAAI,cAAc;QAAE,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAE/C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CACR,gBAAgB,cAAc,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,aAAa,EAAE,CAAC,EAAE,CAC1F,CAAC;IACF,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;GAMG;AACH,SAAS,eAAe,CAAC,GAAkB,EAAE,aAAqB;IAChE,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC;IACvB,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,OAAO,EAAE,IAAI,aAAa,CAAC;AAC7B,CAAC;AAED;;;;GAIG;AACH,SAAS,kBAAkB,CAAC,MAAqB;IAC/C,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC9B,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,iBAAiB;YACpB,OAAO,gCAAgC,CAAC;QAC1C,KAAK,eAAe;YAClB,OAAO,+BAA+B,CAAC;QACzC,KAAK,cAAc;YACjB,OAAO,8BAA8B,CAAC;QACxC,KAAK,SAAS;YACZ,OAAO,eAAe,CAAC;QACzB;YACE,OAAO,MAAM,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,QAAyC;IACnE,IAAI,QAAQ,CAAC,aAAa,EAAE,CAAC;QAC3B,OAAO,0CAA0C,CAAC;IACpD,CAAC;IACD,IAAI,QAAQ,CAAC,gBAAgB,EAAE,CAAC;QAC9B,uEAAuE;QACvE,wEAAwE;QACxE,OAAO,qDAAqD,CAAC;IAC/D,CAAC;IACD,OAAO,wDAAwD,CAAC;AAClE,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAqC;IAC7D,IAAI,CAAC,MAAM,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,CAAC,MAAM,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IACrC,OAAO,0BAA0B,MAAM,CAAC,SAAS,MAAM,MAAM,CAAC,WAAW,qBAAqB,CAAC;AACjG,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAwB,EAAE,GAAW;IAC7D,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC;IACtC,IAAI,CAAC,MAAM;QAAE,OAAO,sBAAsB,CAAC;IAC3C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC;QACtC,sEAAsE;QACtE,0EAA0E;QAC1E,sEAAsE;QACtE,qEAAqE;QACrE,OAAO,MAAM,CAAC,MAAM,CAAC,eAAe;YAClC,CAAC,CAAC,4GAA4G;YAC9G,CAAC,CAAC,qEAAqE,CAAC;IAC5E,CAAC;IACD,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,WAAW,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;IACnE,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa;QAC7C,CAAC,CAAC,YAAY,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE;QAC3C,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa;QAC7C,CAAC,CAAC,gBAAgB,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,GAAG,CAAC,EAAE;QAC/D,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa;QAC7C,CAAC,CAAC,iBAAiB,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,GAAG,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,iBAAiB,IAAI,SAAS,GAAG;QAClH,CAAC,CAAC,EAAE,CAAC;IACP,OAAO,2BAA2B,KAAK,GAAG,WAAW,IAAI,WAAW,GAAG,WAAW,EAAE,CAAC;AACvF,CAAC;AAED,SAAS,eAAe,CACtB,KAAmC,EACnC,GAAW;IAEX,IAAI,KAAK,CAAC,cAAc,KAAK,IAAI,IAAI,KAAK,CAAC,aAAa,KAAK,IAAI,EAAE,CAAC;QAClE,OAAO,4BAA4B,CAAC;IACtC,CAAC;IACD,MAAM,YAAY,GAAG,KAAK,CAAC,cAAc;QACvC,CAAC,CAAC,eAAe,SAAS,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC,EAAE;QACvD,CAAC,CAAC,eAAe,CAAC;IACpB,MAAM,WAAW,GAAG,KAAK,CAAC,aAAa;QACrC,CAAC,CAAC,iBAAiB,SAAS,CAAC,KAAK,CAAC,aAAa,EAAE,GAAG,CAAC,KAAK,KAAK,CAAC,iBAAiB,IAAI,SAAS,GAAG;QAClG,CAAC,CAAC,EAAE,CAAC;IACP,OAAO,gBAAgB,YAAY,GAAG,WAAW,EAAE,CAAC;AACtD,CAAC;AAED,SAAS,eAAe,CACtB,KAA+C,EAC/C,GAAW;IAEX,oEAAoE;IACpE,mEAAmE;IACnE,qDAAqD;IACrD,IACE,CAAC,KAAK;QACN,CAAC,KAAK,CAAC,cAAc,KAAK,IAAI;YAC5B,KAAK,CAAC,aAAa,KAAK,IAAI;YAC5B,KAAK,CAAC,OAAO,KAAK,CAAC,CAAC,EACtB,CAAC;QACD,OAAO,wEAAwE,CAAC;IAClF,CAAC;IACD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,eAAe,SAAS,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;IACzC,CAAC;IACD,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAC3D,MAAM,WAAW,GAAG,KAAK,CAAC,aAAa;QACrC,CAAC,CAAC,iBAAiB,SAAS,CAAC,KAAK,CAAC,aAAa,EAAE,GAAG,CAAC,KAAK,KAAK,CAAC,iBAAiB,IAAI,SAAS,GAAG;QAClG,CAAC,CAAC,EAAE,CAAC;IACP,OAAO,gBAAgB,IAAI,GAAG,WAAW,EAAE,CAAC;AAC9C,CAAC;AAED,SAAS,eAAe,CACtB,KAAmC,EACnC,GAAW;IAEX,IAAI,KAAK,CAAC,iBAAiB,KAAK,IAAI,EAAE,CAAC;QACrC,OAAO,yDAAyD,CAAC;IACnE,CAAC;IACD,IAAI,KAAK,CAAC,iBAAiB,KAAK,IAAI,EAAE,CAAC;QACrC,OAAO,wCAAwC,SAAS,CAAC,KAAK,CAAC,iBAAiB,EAAE,GAAG,CAAC,GAAG,CAAC;IAC5F,CAAC;IACD,MAAM,OAAO,GAAG,iBAAiB,SAAS,CAAC,KAAK,CAAC,iBAAiB,EAAE,GAAG,CAAC,EAAE,CAAC;IAC3E,IAAI,KAAK,CAAC,0BAA0B,KAAK,MAAM,EAAE,CAAC;QAChD,OAAO,gCAAgC,OAAO,sBAAsB,CAAC;IACvE,CAAC;IACD,iEAAiE;IACjE,MAAM,OAAO,GACX,KAAK,CAAC,4BAA4B,IAAI,yBAAyB,CAAC;IAClE,OAAO,iCAAiC,OAAO,OAAO,OAAO,EAAE,CAAC;AAClE,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAS,oBAAoB,CAC3B,OAAuC,EACvC,aAAqB;IAErB,OAAO,CACL,OAAO,CAAC,kBAAkB,KAAK,IAAI;QACnC,eAAe,CAAC,OAAO,CAAC,kBAAkB,IAAI,IAAI,EAAE,aAAa,CAAC;QAClE,OAAO,CAAC,gBAAgB,IAAI,IAAI;QAChC,OAAO,CAAC,gBAAgB,KAAK,QAAQ;QACrC,OAAO,CAAC,WAAW,KAAK,IAAI;QAC5B,OAAO,CAAC,WAAW,KAAK,CAAC,CAC1B,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,iBAAiB,CAAC,OAAuC;IAKhE,MAAM,MAAM,GAAG,OAAO,CAAC,gBAAgB,IAAI,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,OAAO,CAAC,uBAAuB,IAAI,CAAC,CAAC;IACpD,MAAM,SAAS,GAAG,OAAO,CAAC,mBAAmB,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC;IAC9E,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;AACvC,CAAC;AAED,SAAS,iBAAiB,CACxB,OAAuC,EACvC,GAAW,EACX,WAAoB;IAEpB,IAAI,OAAO,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,mBAAmB,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QAC/D,OAAO,QAAQ;YACb,CAAC,CAAC,8BAA8B,QAAQ,EAAE;YAC1C,CAAC,CAAC,0BAA0B,CAAC;IACjC,CAAC;IACD,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IAChD,MAAM,QAAQ,GACZ,OAAO,CAAC,gBAAgB,KAAK,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,UAAU,CAAC;IACzE,+DAA+D;IAC/D,0EAA0E;IAC1E,2EAA2E;IAC3E,4EAA4E;IAC5E,4EAA4E;IAC5E,uEAAuE;IACvE,4EAA4E;IAC5E,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACzD,MAAM,YAAY,GAChB,MAAM,GAAG,CAAC;QACR,CAAC,CAAC,MAAM,MAAM,iBAAiB,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,qBAAqB;QAC3E,CAAC,CAAC,SAAS,GAAG,CAAC;YACb,CAAC,CAAC,aAAa,SAAS,iBAAiB,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,YAAY;YAC/E,CAAC,CAAC,EAAE,CAAC;IACX,yEAAyE;IACzE,qEAAqE;IACrE,gEAAgE;IAChE,MAAM,UAAU,GAAG,WAAW;QAC5B,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACtD,OAAO,gBAAgB,QAAQ,IAAI,GAAG,MAAM,OAAO,CAAC,UAAU,YAAY,OAAO,CAAC,WAAW,aAAa,OAAO,CAAC,WAAW,UAAU,YAAY,GAAG,QAAQ,EAAE,CAAC;AACnK,CAAC;AAED;;;;;GAKG;AACH,SAAS,0BAA0B,CACjC,OAAuC,EACvC,GAAW,EACX,WAAoB;IAEpB,IAAI,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,kBAAkB;QAAE,OAAO,IAAI,CAAC;IAC7D,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;IACvD,MAAM,UAAU,GAAG,mBAAmB,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IACjE,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACtD,OAAO,gCAAgC,GAAG,UAAU,QAAQ,EAAE,CAAC;AACjE,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAkB,EAAE,GAAW;IAC1D,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACpC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IACrD,IAAI,YAAY,IAAI,CAAC;QAAE,OAAO,eAAe,CAAC;IAC9C,OAAO,WAAW,cAAc,CAAC,YAAY,CAAC,EAAE,CAAC;AACnD,CAAC;AAED,SAAS,aAAa,CAAC,OAA0B;IAC/C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,oCAAoC,CAAC;IACtE,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAC9B,CAAC,CAAC,SAAS;QACT,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI;QACjB,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,sCAAsC,CAAC,CAAC,MAAM,GAAG,CACjE,CAAC;IACF,OAAO,gBAAgB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;AAC/C,CAAC;AAED;;;;GAIG;AACH,SAAS,kBAAkB,CACzB,QAAmD;IAEnD,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IACjD,0EAA0E;IAC1E,qEAAqE;IACrE,OAAO,8HAA8H,CAAC;AACxI,CAAC;AAED,SAAS,cAAc,CAAC,KAIvB;IACC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,KAAK,CAAC;IACpD,qEAAqE;IACrE,4EAA4E;IAC5E,2EAA2E;IAC3E,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,kBAAkB,IAAI,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;QACvE,OAAO,iGAAiG,CAAC;IAC3G,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,CAAC,iBAAiB,KAAK,KAAK,EAAE,CAAC;QAC7C,IAAI,MAAM,CAAC,KAAK,CAAC,0BAA0B,KAAK,MAAM,EAAE,CAAC;YACvD,OAAO,uCAAuC,CAAC;QACjD,CAAC;QACD,IAAI,MAAM,CAAC,KAAK,CAAC,0BAA0B,KAAK,OAAO,EAAE,CAAC;YACxD,OAAO,oEAAoE,CAAC;QAC9E,CAAC;QACD,IAAI,MAAM,CAAC,KAAK,CAAC,0BAA0B,KAAK,QAAQ,EAAE,CAAC;YACzD,OAAO,0EAA0E,CAAC;QACpF,CAAC;QACD,OAAO,oDAAoD,CAAC;IAC9D,CAAC;IACD,iEAAiE;IACjE,qEAAqE;IACrE,kEAAkE;IAClE,mBAAmB;IACnB,IAAI,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,aAAa,CAAC,EAAE,CAAC;QAChE,OAAO,+CAA+C,kBAAkB,CAAC,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,mDAAmD,CAAC;IAC/J,CAAC;IACD,IAAI,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,EAAE,aAAa,CAAC,EAAE,CAAC;QAC/D,OAAO,0CAA0C,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,mDAAmD,CAAC;IACzJ,CAAC;IACD,uEAAuE;IACvE,uEAAuE;IACvE,kEAAkE;IAClE,qEAAqE;IACrE,qEAAqE;IACrE,mEAAmE;IACnE,kEAAkE;IAClE,4DAA4D;IAC5D,IAAI,MAAM,CAAC,KAAK,IAAI,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,EAAE,aAAa,CAAC,EAAE,CAAC;QAC/E,OAAO,2CAA2C,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,8CAA8C,CAAC;IACrJ,CAAC;IACD,qEAAqE;IACrE,mEAAmE;IACnE,mCAAmC;IACnC,IACE,MAAM,CAAC,OAAO,CAAC,WAAW,GAAG,CAAC;QAC9B,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,aAAa,CAAC,EAC1D,CAAC;QACD,OAAO,yEAAyE,CAAC;IACnF,CAAC;IACD,uEAAuE;IACvE,oEAAoE;IACpE,2DAA2D;IAC3D,IAAI,oBAAoB,CAAC,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC,EAAE,CAAC;QACxD,OAAO,8EAA8E,CAAC;IACxF,CAAC;IACD,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC5E,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,yBAAyB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,qCAAqC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IACtG,CAAC;IACD,4EAA4E;IAC5E,6EAA6E;IAC7E,yEAAyE;IACzE,gEAAgE;IAChE,4EAA4E;IAC5E,0EAA0E;IAC1E,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAChE,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QACf,OAAO,GAAG,MAAM,uBAAuB,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,oFAAoF,CAAC;IACrJ,CAAC;IACD,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;QAClB,OAAO,kBAAkB,SAAS,uBAAuB,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,+BAA+B,CAAC;IACrH,CAAC;IACD,kEAAkE;IAClE,qEAAqE;IACrE,mEAAmE;IACnE,kEAAkE;IAClE,qEAAqE;IACrE,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QACzD,OAAO,qBAAqB,MAAM,CAAC,MAAM,CAAC,SAAS,MAAM,MAAM,CAAC,MAAM,CAAC,WAAW,sBAAsB,CAAC;IAC3G,CAAC;IACD,OAAO,4CAA4C,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,GAAW,EAAE,GAAW;IAChD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IACzC,OAAO,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;AAC/E,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAClC,UAA8C,EAC9C,GAAW;IAEX,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAC7B,IAAI,UAAU,CAAC,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC/C,IAAI,UAAU,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,UAAU,CAAC,uBAAuB;YAC9C,CAAC,CAAC,aAAa,SAAS,CAAC,UAAU,CAAC,uBAAuB,EAAE,GAAG,CAAC,GAAG;YACpE,CAAC,CAAC,EAAE,CAAC;QACP,OAAO,kFAAkF,KAAK,EAAE,CAAC;IACnG,CAAC;IACD,MAAM,QAAQ,GACZ,UAAU,CAAC,gBAAgB,KAAK,IAAI;QAClC,CAAC,CAAC,wBAAwB,CAAC,UAAU,CAAC,gBAAgB,CAAC;QACvD,CAAC,CAAC,GAAG,CAAC;IACV,MAAM,IAAI,GAAG,UAAU,CAAC,wBAAwB,IAAI,GAAG,CAAC;IACxD,OAAO,iBAAiB,QAAQ,mCAAmC,IAAI,EAAE,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,GAAG,OAAO,GAAG,CAAC;IACvC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IACzC,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,GAAG,OAAO,GAAG,CAAC;IACvC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,OAAO,GAAG,EAAE,CAAC;IAC5B,IAAI,KAAK,GAAG,EAAE;QAAE,OAAO,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,KAAK,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC;IACzE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;IACpC,MAAM,QAAQ,GAAG,KAAK,GAAG,EAAE,CAAC;IAC5B,OAAO,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,QAAQ,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC;AAC7D,CAAC"}
|
|
@@ -5,10 +5,28 @@ export interface LocalSignals {
|
|
|
5
5
|
client: ClientId;
|
|
6
6
|
installed: boolean;
|
|
7
7
|
}>;
|
|
8
|
+
/**
|
|
9
|
+
* SwiftBar presence — null when the question does not apply (non-macOS),
|
|
10
|
+
* otherwise whether SwiftBar.app (the app that draws Rift's menu bar icon)
|
|
11
|
+
* is installed. Lets `rift doctor`/`rift status` surface a "menu can't show"
|
|
12
|
+
* state instead of leaving a silently-missing icon undiagnosed.
|
|
13
|
+
*/
|
|
14
|
+
swiftBar: {
|
|
15
|
+
installed: boolean;
|
|
16
|
+
} | null;
|
|
8
17
|
}
|
|
9
18
|
export declare function readLocalSignals(opts?: {
|
|
10
19
|
homeDir?: string;
|
|
20
|
+
platform?: NodeJS.Platform;
|
|
11
21
|
}): LocalSignals;
|
|
22
|
+
/**
|
|
23
|
+
* Whether SwiftBar.app is installed. Checks the two standard Applications
|
|
24
|
+
* folders first, then falls back to a Spotlight/LaunchServices lookup by bundle
|
|
25
|
+
* id so a SwiftBar installed in a non-standard folder isn't mislabeled as
|
|
26
|
+
* missing (which would make `rift doctor` contradict `rift menubar install`).
|
|
27
|
+
* Best-effort: a missing/unindexed `mdfind` just leaves the answer false.
|
|
28
|
+
*/
|
|
29
|
+
export declare function detectSwiftBarApp(homeDir: string): boolean;
|
|
12
30
|
export declare function readVoyageLast4(envPath: string): string | null;
|
|
13
31
|
export declare function detectRiftServerEntry(client: ClientId, homeDir: string): boolean;
|
|
14
32
|
//# sourceMappingURL=local-signals.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-signals.d.ts","sourceRoot":"","sources":["../../../../src/cli/status/local-signals.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"local-signals.d.ts","sourceRoot":"","sources":["../../../../src/cli/status/local-signals.ts"],"names":[],"mappings":"AAgBA,OAAO,EAGL,KAAK,QAAQ,EACd,MAAM,gCAAgC,CAAC;AAGxC,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,QAAQ,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC5D;;;;;OAKG;IACH,QAAQ,EAAE;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;CACzC;AAED,wBAAgB,gBAAgB,CAAC,IAAI,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAA;CAAO,GAAG,YAAY,CAc1G;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAiB1D;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAY9D;AAYD,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,QAAQ,EAChB,OAAO,EAAE,MAAM,GACd,OAAO,CAkBT"}
|
|
@@ -11,18 +11,47 @@
|
|
|
11
11
|
*/
|
|
12
12
|
import fs from "node:fs";
|
|
13
13
|
import os from "node:os";
|
|
14
|
+
import path from "node:path";
|
|
15
|
+
import { execFileSync } from "node:child_process";
|
|
14
16
|
import { ALL_CLIENTS, defaultClientConfigPath, } from "../mcp-config-writers/index.js";
|
|
15
17
|
import { defaultRiftEnvPath } from "../../runtime/rift-env.js";
|
|
16
18
|
export function readLocalSignals(opts = {}) {
|
|
17
19
|
const homeDir = opts.homeDir ?? os.homedir();
|
|
20
|
+
const platform = opts.platform ?? process.platform;
|
|
18
21
|
return {
|
|
19
22
|
voyageLast4: readVoyageLast4(defaultRiftEnvPath(homeDir)),
|
|
20
23
|
mcpClients: ALL_CLIENTS.map((client) => ({
|
|
21
24
|
client,
|
|
22
25
|
installed: detectRiftServerEntry(client, homeDir),
|
|
23
26
|
})),
|
|
27
|
+
swiftBar: platform === "darwin"
|
|
28
|
+
? { installed: detectSwiftBarApp(homeDir) }
|
|
29
|
+
: null,
|
|
24
30
|
};
|
|
25
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* Whether SwiftBar.app is installed. Checks the two standard Applications
|
|
34
|
+
* folders first, then falls back to a Spotlight/LaunchServices lookup by bundle
|
|
35
|
+
* id so a SwiftBar installed in a non-standard folder isn't mislabeled as
|
|
36
|
+
* missing (which would make `rift doctor` contradict `rift menubar install`).
|
|
37
|
+
* Best-effort: a missing/unindexed `mdfind` just leaves the answer false.
|
|
38
|
+
*/
|
|
39
|
+
export function detectSwiftBarApp(homeDir) {
|
|
40
|
+
const onDisk = [
|
|
41
|
+
"/Applications/SwiftBar.app",
|
|
42
|
+
path.join(homeDir, "Applications", "SwiftBar.app"),
|
|
43
|
+
].some((candidate) => fs.existsSync(candidate));
|
|
44
|
+
if (onDisk)
|
|
45
|
+
return true;
|
|
46
|
+
try {
|
|
47
|
+
const out = execFileSync("mdfind", ["kMDItemCFBundleIdentifier == 'com.ameba.SwiftBar'"], { encoding: "utf8", stdio: ["ignore", "pipe", "ignore"], timeout: 10_000 });
|
|
48
|
+
const first = out.split("\n")[0]?.trim();
|
|
49
|
+
return Boolean(first && fs.existsSync(first));
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
26
55
|
export function readVoyageLast4(envPath) {
|
|
27
56
|
let raw;
|
|
28
57
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-signals.js","sourceRoot":"","sources":["../../../../src/cli/status/local-signals.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"local-signals.js","sourceRoot":"","sources":["../../../../src/cli/status/local-signals.ts"],"names":[],"mappings":"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"}
|