@getrift/rift 0.1.0-beta.2 → 0.1.0-beta.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (386) hide show
  1. package/README.md +35 -9
  2. package/dist/src/auth/keychain.d.ts +9 -0
  3. package/dist/src/auth/keychain.d.ts.map +1 -1
  4. package/dist/src/auth/keychain.js +37 -0
  5. package/dist/src/auth/keychain.js.map +1 -1
  6. package/dist/src/capture/auto-capture.d.ts +7 -0
  7. package/dist/src/capture/auto-capture.d.ts.map +1 -1
  8. package/dist/src/capture/auto-capture.js +82 -15
  9. package/dist/src/capture/auto-capture.js.map +1 -1
  10. package/dist/src/capture/auto-repair.d.ts +110 -0
  11. package/dist/src/capture/auto-repair.d.ts.map +1 -0
  12. package/dist/src/capture/auto-repair.js +269 -0
  13. package/dist/src/capture/auto-repair.js.map +1 -0
  14. package/dist/src/capture/codex-cli-triage-provider.d.ts.map +1 -1
  15. package/dist/src/capture/codex-cli-triage-provider.js +4 -3
  16. package/dist/src/capture/codex-cli-triage-provider.js.map +1 -1
  17. package/dist/src/capture/observability.d.ts +42 -0
  18. package/dist/src/capture/observability.d.ts.map +1 -1
  19. package/dist/src/capture/observability.js +45 -4
  20. package/dist/src/capture/observability.js.map +1 -1
  21. package/dist/src/capture/recover-quarantine.d.ts +260 -0
  22. package/dist/src/capture/recover-quarantine.d.ts.map +1 -0
  23. package/dist/src/capture/recover-quarantine.js +522 -0
  24. package/dist/src/capture/recover-quarantine.js.map +1 -0
  25. package/dist/src/cli/commands/backfill.d.ts.map +1 -1
  26. package/dist/src/cli/commands/backfill.js +5 -2
  27. package/dist/src/cli/commands/backfill.js.map +1 -1
  28. package/dist/src/cli/commands/capture-recover.d.ts +40 -0
  29. package/dist/src/cli/commands/capture-recover.d.ts.map +1 -0
  30. package/dist/src/cli/commands/capture-recover.js +184 -0
  31. package/dist/src/cli/commands/capture-recover.js.map +1 -0
  32. package/dist/src/cli/commands/capture.d.ts.map +1 -1
  33. package/dist/src/cli/commands/capture.js +96 -5
  34. package/dist/src/cli/commands/capture.js.map +1 -1
  35. package/dist/src/cli/commands/doctor.d.ts +6 -0
  36. package/dist/src/cli/commands/doctor.d.ts.map +1 -0
  37. package/dist/src/cli/commands/doctor.js +242 -0
  38. package/dist/src/cli/commands/doctor.js.map +1 -0
  39. package/dist/src/cli/commands/feedback.d.ts +12 -0
  40. package/dist/src/cli/commands/feedback.d.ts.map +1 -1
  41. package/dist/src/cli/commands/feedback.js +93 -4
  42. package/dist/src/cli/commands/feedback.js.map +1 -1
  43. package/dist/src/cli/commands/mcp-install.js +5 -2
  44. package/dist/src/cli/commands/mcp-install.js.map +1 -1
  45. package/dist/src/cli/commands/menubar.d.ts +30 -0
  46. package/dist/src/cli/commands/menubar.d.ts.map +1 -0
  47. package/dist/src/cli/commands/menubar.js +180 -0
  48. package/dist/src/cli/commands/menubar.js.map +1 -0
  49. package/dist/src/cli/commands/onboard.d.ts +129 -0
  50. package/dist/src/cli/commands/onboard.d.ts.map +1 -1
  51. package/dist/src/cli/commands/onboard.js +752 -171
  52. package/dist/src/cli/commands/onboard.js.map +1 -1
  53. package/dist/src/cli/commands/rebuild.d.ts.map +1 -1
  54. package/dist/src/cli/commands/rebuild.js +6 -3
  55. package/dist/src/cli/commands/rebuild.js.map +1 -1
  56. package/dist/src/cli/commands/reconcile.d.ts.map +1 -1
  57. package/dist/src/cli/commands/reconcile.js +12 -0
  58. package/dist/src/cli/commands/reconcile.js.map +1 -1
  59. package/dist/src/cli/commands/review.d.ts.map +1 -1
  60. package/dist/src/cli/commands/review.js +22 -7
  61. package/dist/src/cli/commands/review.js.map +1 -1
  62. package/dist/src/cli/commands/search.d.ts +2 -0
  63. package/dist/src/cli/commands/search.d.ts.map +1 -1
  64. package/dist/src/cli/commands/search.js +34 -4
  65. package/dist/src/cli/commands/search.js.map +1 -1
  66. package/dist/src/cli/commands/status.d.ts +9 -7
  67. package/dist/src/cli/commands/status.d.ts.map +1 -1
  68. package/dist/src/cli/commands/status.js +113 -12
  69. package/dist/src/cli/commands/status.js.map +1 -1
  70. package/dist/src/cli/commands/token-issue.d.ts.map +1 -1
  71. package/dist/src/cli/commands/token-issue.js +9 -1
  72. package/dist/src/cli/commands/token-issue.js.map +1 -1
  73. package/dist/src/cli/commands/triage.d.ts.map +1 -1
  74. package/dist/src/cli/commands/triage.js +7 -5
  75. package/dist/src/cli/commands/triage.js.map +1 -1
  76. package/dist/src/cli/commands/update.d.ts +80 -0
  77. package/dist/src/cli/commands/update.d.ts.map +1 -0
  78. package/dist/src/cli/commands/update.js +378 -0
  79. package/dist/src/cli/commands/update.js.map +1 -0
  80. package/dist/src/cli/default-config-path.d.ts +15 -0
  81. package/dist/src/cli/default-config-path.d.ts.map +1 -0
  82. package/dist/src/cli/default-config-path.js +27 -0
  83. package/dist/src/cli/default-config-path.js.map +1 -0
  84. package/dist/src/cli/feedback/feedback-config.d.ts +46 -0
  85. package/dist/src/cli/feedback/feedback-config.d.ts.map +1 -1
  86. package/dist/src/cli/feedback/feedback-config.js +130 -4
  87. package/dist/src/cli/feedback/feedback-config.js.map +1 -1
  88. package/dist/src/cli/feedback/feedback-history.d.ts +7 -0
  89. package/dist/src/cli/feedback/feedback-history.d.ts.map +1 -1
  90. package/dist/src/cli/feedback/feedback-history.js +39 -9
  91. package/dist/src/cli/feedback/feedback-history.js.map +1 -1
  92. package/dist/src/cli/feedback/feedback-payload.d.ts +22 -1
  93. package/dist/src/cli/feedback/feedback-payload.d.ts.map +1 -1
  94. package/dist/src/cli/feedback/feedback-payload.js.map +1 -1
  95. package/dist/src/cli/feedback/feedback-relay.d.ts +2 -2
  96. package/dist/src/cli/feedback/feedback-relay.d.ts.map +1 -1
  97. package/dist/src/cli/feedback/feedback-relay.js.map +1 -1
  98. package/dist/src/cli/feedback/invite.d.ts +17 -0
  99. package/dist/src/cli/feedback/invite.d.ts.map +1 -0
  100. package/dist/src/cli/feedback/invite.js +67 -0
  101. package/dist/src/cli/feedback/invite.js.map +1 -0
  102. package/dist/src/cli/feedback/relay-secret-store.d.ts +32 -0
  103. package/dist/src/cli/feedback/relay-secret-store.d.ts.map +1 -0
  104. package/dist/src/cli/feedback/relay-secret-store.js +137 -0
  105. package/dist/src/cli/feedback/relay-secret-store.js.map +1 -0
  106. package/dist/src/cli/http-client.d.ts +93 -1
  107. package/dist/src/cli/http-client.d.ts.map +1 -1
  108. package/dist/src/cli/http-client.js +254 -6
  109. package/dist/src/cli/http-client.js.map +1 -1
  110. package/dist/src/cli/index.d.ts.map +1 -1
  111. package/dist/src/cli/index.js +29 -6
  112. package/dist/src/cli/index.js.map +1 -1
  113. package/dist/src/cli/postinstall-menubar.d.ts +22 -0
  114. package/dist/src/cli/postinstall-menubar.d.ts.map +1 -0
  115. package/dist/src/cli/postinstall-menubar.js +39 -0
  116. package/dist/src/cli/postinstall-menubar.js.map +1 -0
  117. package/dist/src/cli/status/friend-header.d.ts +8 -1
  118. package/dist/src/cli/status/friend-header.d.ts.map +1 -1
  119. package/dist/src/cli/status/friend-header.js +334 -26
  120. package/dist/src/cli/status/friend-header.js.map +1 -1
  121. package/dist/src/cli/ui.d.ts +47 -0
  122. package/dist/src/cli/ui.d.ts.map +1 -0
  123. package/dist/src/cli/ui.js +166 -0
  124. package/dist/src/cli/ui.js.map +1 -0
  125. package/dist/src/config/schema.d.ts +79 -0
  126. package/dist/src/config/schema.d.ts.map +1 -1
  127. package/dist/src/config/schema.js +44 -0
  128. package/dist/src/config/schema.js.map +1 -1
  129. package/dist/src/diagnostics/codex-preflight.d.ts +33 -0
  130. package/dist/src/diagnostics/codex-preflight.d.ts.map +1 -0
  131. package/dist/src/diagnostics/codex-preflight.js +75 -0
  132. package/dist/src/diagnostics/codex-preflight.js.map +1 -0
  133. package/dist/src/diagnostics/doctor.d.ts +106 -0
  134. package/dist/src/diagnostics/doctor.d.ts.map +1 -0
  135. package/dist/src/diagnostics/doctor.js +334 -0
  136. package/dist/src/diagnostics/doctor.js.map +1 -0
  137. package/dist/src/diagnostics/notify.d.ts +90 -0
  138. package/dist/src/diagnostics/notify.d.ts.map +1 -0
  139. package/dist/src/diagnostics/notify.js +177 -0
  140. package/dist/src/diagnostics/notify.js.map +1 -0
  141. package/dist/src/diagnostics/repair-prompt.d.ts +49 -0
  142. package/dist/src/diagnostics/repair-prompt.d.ts.map +1 -0
  143. package/dist/src/diagnostics/repair-prompt.js +223 -0
  144. package/dist/src/diagnostics/repair-prompt.js.map +1 -0
  145. package/dist/src/ingestion/inbox-core/conversation-fingerprint.d.ts +2 -0
  146. package/dist/src/ingestion/inbox-core/conversation-fingerprint.d.ts.map +1 -0
  147. package/dist/src/ingestion/inbox-core/conversation-fingerprint.js +27 -0
  148. package/dist/src/ingestion/inbox-core/conversation-fingerprint.js.map +1 -0
  149. package/dist/src/ingestion/inbox-core/conversation-key.d.ts +2 -0
  150. package/dist/src/ingestion/inbox-core/conversation-key.d.ts.map +1 -0
  151. package/dist/src/ingestion/inbox-core/conversation-key.js +31 -0
  152. package/dist/src/ingestion/inbox-core/conversation-key.js.map +1 -0
  153. package/dist/src/ingestion/inbox-core/extensions.d.ts +3 -0
  154. package/dist/src/ingestion/inbox-core/extensions.d.ts.map +1 -0
  155. package/dist/src/ingestion/inbox-core/extensions.js +16 -0
  156. package/dist/src/ingestion/inbox-core/extensions.js.map +1 -0
  157. package/dist/src/ingestion/inbox-core/idempotency.d.ts +2 -0
  158. package/dist/src/ingestion/inbox-core/idempotency.d.ts.map +1 -0
  159. package/dist/src/ingestion/inbox-core/idempotency.js +22 -0
  160. package/dist/src/ingestion/inbox-core/idempotency.js.map +1 -0
  161. package/dist/src/ingestion/inbox-core/index.d.ts +20 -0
  162. package/dist/src/ingestion/inbox-core/index.d.ts.map +1 -0
  163. package/dist/src/ingestion/inbox-core/index.js +20 -0
  164. package/dist/src/ingestion/inbox-core/index.js.map +1 -0
  165. package/dist/src/ingestion/inbox-core/source-detection.d.ts +2 -0
  166. package/dist/src/ingestion/inbox-core/source-detection.d.ts.map +1 -0
  167. package/dist/src/ingestion/inbox-core/source-detection.js +23 -0
  168. package/dist/src/ingestion/inbox-core/source-detection.js.map +1 -0
  169. package/dist/src/ingestion/inbox-core/source-sniffer.d.ts +11 -0
  170. package/dist/src/ingestion/inbox-core/source-sniffer.d.ts.map +1 -0
  171. package/dist/src/ingestion/inbox-core/source-sniffer.js +69 -0
  172. package/dist/src/ingestion/inbox-core/source-sniffer.js.map +1 -0
  173. package/dist/src/ingestion/inbox-core/zip-sniffer.d.ts +70 -0
  174. package/dist/src/ingestion/inbox-core/zip-sniffer.d.ts.map +1 -0
  175. package/dist/src/ingestion/inbox-core/zip-sniffer.js +161 -0
  176. package/dist/src/ingestion/inbox-core/zip-sniffer.js.map +1 -0
  177. package/dist/src/ingestion/inbox-watcher.d.ts.map +1 -1
  178. package/dist/src/ingestion/inbox-watcher.js +34 -50
  179. package/dist/src/ingestion/inbox-watcher.js.map +1 -1
  180. package/dist/src/ingestion/indexer.d.ts +7 -0
  181. package/dist/src/ingestion/indexer.d.ts.map +1 -1
  182. package/dist/src/ingestion/indexer.js +36 -2
  183. package/dist/src/ingestion/indexer.js.map +1 -1
  184. package/dist/src/ingestion/metadata-extraction.d.ts +8 -5
  185. package/dist/src/ingestion/metadata-extraction.d.ts.map +1 -1
  186. package/dist/src/ingestion/metadata-extraction.js +24 -5
  187. package/dist/src/ingestion/metadata-extraction.js.map +1 -1
  188. package/dist/src/ingestion/skip-quarantine.d.ts +10 -0
  189. package/dist/src/ingestion/skip-quarantine.d.ts.map +1 -0
  190. package/dist/src/ingestion/skip-quarantine.js +35 -0
  191. package/dist/src/ingestion/skip-quarantine.js.map +1 -0
  192. package/dist/src/jobs/handlers/compact.d.ts.map +1 -1
  193. package/dist/src/jobs/handlers/compact.js +30 -4
  194. package/dist/src/jobs/handlers/compact.js.map +1 -1
  195. package/dist/src/jobs/handlers/dedupe-conversations.d.ts +134 -0
  196. package/dist/src/jobs/handlers/dedupe-conversations.d.ts.map +1 -0
  197. package/dist/src/jobs/handlers/dedupe-conversations.js +371 -0
  198. package/dist/src/jobs/handlers/dedupe-conversations.js.map +1 -0
  199. package/dist/src/jobs/handlers/ingest.d.ts.map +1 -1
  200. package/dist/src/jobs/handlers/ingest.js +295 -41
  201. package/dist/src/jobs/handlers/ingest.js.map +1 -1
  202. package/dist/src/jobs/handlers/reconcile.d.ts +28 -0
  203. package/dist/src/jobs/handlers/reconcile.d.ts.map +1 -1
  204. package/dist/src/jobs/handlers/reconcile.js +145 -19
  205. package/dist/src/jobs/handlers/reconcile.js.map +1 -1
  206. package/dist/src/jobs/handlers/reindex.d.ts.map +1 -1
  207. package/dist/src/jobs/handlers/reindex.js +13 -2
  208. package/dist/src/jobs/handlers/reindex.js.map +1 -1
  209. package/dist/src/jobs/handlers/save.d.ts.map +1 -1
  210. package/dist/src/jobs/handlers/save.js +57 -3
  211. package/dist/src/jobs/handlers/save.js.map +1 -1
  212. package/dist/src/jobs/queue.d.ts +51 -1
  213. package/dist/src/jobs/queue.d.ts.map +1 -1
  214. package/dist/src/jobs/queue.js +466 -26
  215. package/dist/src/jobs/queue.js.map +1 -1
  216. package/dist/src/jobs/worker-entry.d.ts.map +1 -1
  217. package/dist/src/jobs/worker-entry.js +35 -7
  218. package/dist/src/jobs/worker-entry.js.map +1 -1
  219. package/dist/src/jobs/worker-process.d.ts +11 -0
  220. package/dist/src/jobs/worker-process.d.ts.map +1 -1
  221. package/dist/src/jobs/worker-process.js +37 -4
  222. package/dist/src/jobs/worker-process.js.map +1 -1
  223. package/dist/src/main.js +199 -46
  224. package/dist/src/main.js.map +1 -1
  225. package/dist/src/mcp/errors.d.ts.map +1 -1
  226. package/dist/src/mcp/errors.js +20 -1
  227. package/dist/src/mcp/errors.js.map +1 -1
  228. package/dist/src/mcp/server.d.ts.map +1 -1
  229. package/dist/src/mcp/server.js +43 -3
  230. package/dist/src/mcp/server.js.map +1 -1
  231. package/dist/src/mcp/tools/context-pack.d.ts.map +1 -1
  232. package/dist/src/mcp/tools/context-pack.js +164 -23
  233. package/dist/src/mcp/tools/context-pack.js.map +1 -1
  234. package/dist/src/mcp/tools/search.d.ts +6 -2
  235. package/dist/src/mcp/tools/search.d.ts.map +1 -1
  236. package/dist/src/mcp/tools/search.js +35 -4
  237. package/dist/src/mcp/tools/search.js.map +1 -1
  238. package/dist/src/observability/embedding-events.d.ts +52 -0
  239. package/dist/src/observability/embedding-events.d.ts.map +1 -0
  240. package/dist/src/observability/embedding-events.js +149 -0
  241. package/dist/src/observability/embedding-events.js.map +1 -0
  242. package/dist/src/observability/index-events.d.ts +70 -0
  243. package/dist/src/observability/index-events.d.ts.map +1 -0
  244. package/dist/src/observability/index-events.js +148 -0
  245. package/dist/src/observability/index-events.js.map +1 -0
  246. package/dist/src/observability/onboarding-metric.d.ts +131 -0
  247. package/dist/src/observability/onboarding-metric.d.ts.map +1 -0
  248. package/dist/src/observability/onboarding-metric.js +351 -0
  249. package/dist/src/observability/onboarding-metric.js.map +1 -0
  250. package/dist/src/observability/tool-usage-stats.d.ts +77 -4
  251. package/dist/src/observability/tool-usage-stats.d.ts.map +1 -1
  252. package/dist/src/observability/tool-usage-stats.js +112 -32
  253. package/dist/src/observability/tool-usage-stats.js.map +1 -1
  254. package/dist/src/observability/tool-usage.d.ts +100 -7
  255. package/dist/src/observability/tool-usage.d.ts.map +1 -1
  256. package/dist/src/observability/tool-usage.js +196 -33
  257. package/dist/src/observability/tool-usage.js.map +1 -1
  258. package/dist/src/observability/version-check.d.ts +71 -0
  259. package/dist/src/observability/version-check.d.ts.map +1 -0
  260. package/dist/src/observability/version-check.js +198 -0
  261. package/dist/src/observability/version-check.js.map +1 -0
  262. package/dist/src/providers/basic-metadata-extraction.d.ts +60 -0
  263. package/dist/src/providers/basic-metadata-extraction.d.ts.map +1 -0
  264. package/dist/src/providers/basic-metadata-extraction.js +114 -0
  265. package/dist/src/providers/basic-metadata-extraction.js.map +1 -0
  266. package/dist/src/providers/codex-cli-metadata-extraction.d.ts +1 -0
  267. package/dist/src/providers/codex-cli-metadata-extraction.d.ts.map +1 -1
  268. package/dist/src/providers/codex-cli-metadata-extraction.js +6 -2
  269. package/dist/src/providers/codex-cli-metadata-extraction.js.map +1 -1
  270. package/dist/src/providers/codex-cli-model.d.ts +61 -0
  271. package/dist/src/providers/codex-cli-model.d.ts.map +1 -0
  272. package/dist/src/providers/codex-cli-model.js +194 -0
  273. package/dist/src/providers/codex-cli-model.js.map +1 -0
  274. package/dist/src/providers/codex-cli-runner.d.ts +39 -0
  275. package/dist/src/providers/codex-cli-runner.d.ts.map +1 -1
  276. package/dist/src/providers/codex-cli-runner.js +234 -48
  277. package/dist/src/providers/codex-cli-runner.js.map +1 -1
  278. package/dist/src/providers/conversation-generation.d.ts.map +1 -1
  279. package/dist/src/providers/conversation-generation.js +43 -6
  280. package/dist/src/providers/conversation-generation.js.map +1 -1
  281. package/dist/src/providers/ollama-embed.d.ts +2 -1
  282. package/dist/src/providers/ollama-embed.d.ts.map +1 -1
  283. package/dist/src/providers/ollama-embed.js +1 -0
  284. package/dist/src/providers/ollama-embed.js.map +1 -1
  285. package/dist/src/providers/openai-metadata-extraction.d.ts +3 -3
  286. package/dist/src/providers/openai-metadata-extraction.d.ts.map +1 -1
  287. package/dist/src/providers/openai-metadata-extraction.js +18 -3
  288. package/dist/src/providers/openai-metadata-extraction.js.map +1 -1
  289. package/dist/src/providers/placeholder-embed.d.ts +56 -0
  290. package/dist/src/providers/placeholder-embed.d.ts.map +1 -0
  291. package/dist/src/providers/placeholder-embed.js +64 -0
  292. package/dist/src/providers/placeholder-embed.js.map +1 -0
  293. package/dist/src/providers/stub.d.ts +2 -0
  294. package/dist/src/providers/stub.d.ts.map +1 -1
  295. package/dist/src/providers/stub.js +2 -0
  296. package/dist/src/providers/stub.js.map +1 -1
  297. package/dist/src/providers/types.d.ts +11 -0
  298. package/dist/src/providers/types.d.ts.map +1 -1
  299. package/dist/src/providers/voyage.d.ts +2 -1
  300. package/dist/src/providers/voyage.d.ts.map +1 -1
  301. package/dist/src/providers/voyage.js +1 -0
  302. package/dist/src/providers/voyage.js.map +1 -1
  303. package/dist/src/retrieval/compact.d.ts +116 -2
  304. package/dist/src/retrieval/compact.d.ts.map +1 -1
  305. package/dist/src/retrieval/compact.js +158 -5
  306. package/dist/src/retrieval/compact.js.map +1 -1
  307. package/dist/src/retrieval/context-pack.d.ts +114 -0
  308. package/dist/src/retrieval/context-pack.d.ts.map +1 -1
  309. package/dist/src/retrieval/context-pack.js +292 -8
  310. package/dist/src/retrieval/context-pack.js.map +1 -1
  311. package/dist/src/retrieval/current-truth.d.ts +360 -0
  312. package/dist/src/retrieval/current-truth.d.ts.map +1 -0
  313. package/dist/src/retrieval/current-truth.js +766 -0
  314. package/dist/src/retrieval/current-truth.js.map +1 -0
  315. package/dist/src/retrieval/git-state.d.ts +53 -0
  316. package/dist/src/retrieval/git-state.d.ts.map +1 -0
  317. package/dist/src/retrieval/git-state.js +174 -0
  318. package/dist/src/retrieval/git-state.js.map +1 -0
  319. package/dist/src/retrieval/lexical.d.ts.map +1 -1
  320. package/dist/src/retrieval/lexical.js +19 -3
  321. package/dist/src/retrieval/lexical.js.map +1 -1
  322. package/dist/src/retrieval/locator-boost.d.ts +37 -0
  323. package/dist/src/retrieval/locator-boost.d.ts.map +1 -0
  324. package/dist/src/retrieval/locator-boost.js +129 -0
  325. package/dist/src/retrieval/locator-boost.js.map +1 -0
  326. package/dist/src/retrieval/report-demotion.d.ts +46 -0
  327. package/dist/src/retrieval/report-demotion.d.ts.map +1 -0
  328. package/dist/src/retrieval/report-demotion.js +169 -0
  329. package/dist/src/retrieval/report-demotion.js.map +1 -0
  330. package/dist/src/retrieval/vector.d.ts.map +1 -1
  331. package/dist/src/retrieval/vector.js +11 -2
  332. package/dist/src/retrieval/vector.js.map +1 -1
  333. package/dist/src/server/app.d.ts.map +1 -1
  334. package/dist/src/server/app.js +92 -11
  335. package/dist/src/server/app.js.map +1 -1
  336. package/dist/src/server/routes/compact.d.ts.map +1 -1
  337. package/dist/src/server/routes/compact.js +4 -1
  338. package/dist/src/server/routes/compact.js.map +1 -1
  339. package/dist/src/server/routes/context.d.ts +1 -1
  340. package/dist/src/server/routes/context.d.ts.map +1 -1
  341. package/dist/src/server/routes/context.js +2 -1
  342. package/dist/src/server/routes/context.js.map +1 -1
  343. package/dist/src/server/routes/conversations-search.d.ts.map +1 -1
  344. package/dist/src/server/routes/conversations-search.js +28 -3
  345. package/dist/src/server/routes/conversations-search.js.map +1 -1
  346. package/dist/src/server/routes/enqueue.d.ts +11 -0
  347. package/dist/src/server/routes/enqueue.d.ts.map +1 -0
  348. package/dist/src/server/routes/enqueue.js +17 -0
  349. package/dist/src/server/routes/enqueue.js.map +1 -0
  350. package/dist/src/server/routes/friend-status.d.ts +339 -3
  351. package/dist/src/server/routes/friend-status.d.ts.map +1 -1
  352. package/dist/src/server/routes/friend-status.js +447 -13
  353. package/dist/src/server/routes/friend-status.js.map +1 -1
  354. package/dist/src/server/routes/ingest.d.ts.map +1 -1
  355. package/dist/src/server/routes/ingest.js +5 -2
  356. package/dist/src/server/routes/ingest.js.map +1 -1
  357. package/dist/src/server/routes/mcp-usage.d.ts +5 -4
  358. package/dist/src/server/routes/mcp-usage.d.ts.map +1 -1
  359. package/dist/src/server/routes/mcp-usage.js.map +1 -1
  360. package/dist/src/server/routes/reconcile.d.ts.map +1 -1
  361. package/dist/src/server/routes/reconcile.js +20 -1
  362. package/dist/src/server/routes/reconcile.js.map +1 -1
  363. package/dist/src/server/routes/reindex.d.ts.map +1 -1
  364. package/dist/src/server/routes/reindex.js +4 -1
  365. package/dist/src/server/routes/reindex.js.map +1 -1
  366. package/dist/src/server/routes/save.d.ts.map +1 -1
  367. package/dist/src/server/routes/save.js +4 -1
  368. package/dist/src/server/routes/save.js.map +1 -1
  369. package/dist/src/server/routes/search.d.ts +1 -1
  370. package/dist/src/server/routes/search.d.ts.map +1 -1
  371. package/dist/src/server/routes/search.js +253 -29
  372. package/dist/src/server/routes/search.js.map +1 -1
  373. package/dist/src/server/routes/triage.d.ts.map +1 -1
  374. package/dist/src/server/routes/triage.js +4 -1
  375. package/dist/src/server/routes/triage.js.map +1 -1
  376. package/dist/src/storage/rebuild.d.ts +35 -1
  377. package/dist/src/storage/rebuild.d.ts.map +1 -1
  378. package/dist/src/storage/rebuild.js +288 -64
  379. package/dist/src/storage/rebuild.js.map +1 -1
  380. package/dist/src/storage/tables.d.ts +29 -0
  381. package/dist/src/storage/tables.d.ts.map +1 -1
  382. package/dist/src/storage/tables.js +32 -1
  383. package/dist/src/storage/tables.js.map +1 -1
  384. package/operator/swiftbar/render-menu.py +524 -0
  385. package/operator/swiftbar/rift.10s.sh +176 -0
  386. package/package.json +9 -3
@@ -0,0 +1,378 @@
1
+ /**
2
+ * `rift update` — friend-readable in-place upgrade for the npm-installed CLI.
3
+ *
4
+ * Steps (in order, each one printed):
5
+ * 1. Resolve the target version with FRESH registry metadata
6
+ * (`npm view --prefer-online @getrift/rift@beta version`), then
7
+ * `npm install -g --prefer-online @getrift/rift@<that exact version>`.
8
+ * Pinning the exact version (not the `@beta` tag) plus `--prefer-online`
9
+ * removes the two ways an install can be a silent no-op: a stale local
10
+ * cache resolving the tag to the already-installed version, and the
11
+ * verify step later reading that same stale cache so a no-op "matches"
12
+ * itself. Falls back to `sudo npm install -g …` exactly like
13
+ * scripts/install.sh, so friends who installed via the one-liner without
14
+ * nvm don't hit a permission wall. When we can resolve where the `rift`
15
+ * on the friend's PATH lives, we install into THAT prefix (`--prefix`)
16
+ * so the copy their terminal runs is the copy that gets upgraded.
17
+ * 2. VERIFY: run the `rift` on PATH and confirm its version now equals the
18
+ * freshly-resolved expected version. An exit-0 npm install is NOT proof
19
+ * of an upgrade — npm can install into a different prefix than the binary
20
+ * on PATH. And if we could not reach the registry to learn the expected
21
+ * version at all, we FAIL as "could not verify" rather than passing on
22
+ * "installed something". We refuse to report success until the active
23
+ * version provably equals a freshly-resolved expected version. This is
24
+ * the load-bearing fix for the beta.18→beta.19 silent no-op that shipped
25
+ * a CLI too old to read its own (valid) config.
26
+ * 3. `launchctl kickstart -k gui/$UID/com.getrift.daemon` — restarts the
27
+ * daemon so it picks up the new code on disk.
28
+ * 4. Poll `/health` until 200 (or timeout) — proves the new build can
29
+ * actually start.
30
+ * 5. Refresh the SwiftBar menu plugin — keeps the 10-second menu surface
31
+ * on the same packaged scripts as the just-installed CLI.
32
+ *
33
+ * Failure contract:
34
+ * - npm install failure (step 1): the previous install is left in place.
35
+ * `npm install -g` with the same dist-tag is atomic enough here — npm
36
+ * replaces `bin/rift` only after a successful tarball install.
37
+ * - Verification failure (step 2): npm reported success but the `rift` on
38
+ * PATH is still the old version. The transcript names both versions and
39
+ * all the paths, leads with a plain-English headline ("Rift updated one
40
+ * copy, but your terminal still points at another copy."), and prints the
41
+ * exact command to install into the right prefix.
42
+ * - Kickstart or /health failure (steps 3–4): the new package is already
43
+ * installed on disk; only daemon recovery is needed. The transcript
44
+ * says so explicitly and points at the manual recovery action.
45
+ * In every branch the output is a friend-readable error pointing at the
46
+ * next recovery step; we never drop into "your install is broken" territory.
47
+ *
48
+ * Deliberately not in scope here:
49
+ * - No publishing.
50
+ * - No clean-Mac validation.
51
+ * - No Sparkle / background self-update.
52
+ * - No telemetry. The npm-registry probe lives in the daemon's daily
53
+ * loop (see src/observability/version-check.ts); this command does
54
+ * not write to that snapshot.
55
+ */
56
+ import { spawn, execFile } from "node:child_process";
57
+ import path from "node:path";
58
+ import { Command } from "commander";
59
+ import { kickstartDaemon, waitForHealth, } from "../../onboarding/daemon-control.js";
60
+ import { installMenuBar } from "./menubar.js";
61
+ import { printJson, printText } from "../output.js";
62
+ const RIFT_PACKAGE_NAME = "@getrift/rift";
63
+ const RIFT_PACKAGE_SPEC = "@getrift/rift@beta";
64
+ const RIFT_BETA_TAG = "@getrift/rift@beta";
65
+ const DAEMON_BASE_URL = "http://127.0.0.1:3577";
66
+ const HEALTH_TIMEOUT_MS = 30_000;
67
+ const defaultRunner = {
68
+ runNpmInstall: defaultNpmInstall,
69
+ resolveActiveCli: defaultResolveActiveCli,
70
+ getActiveCliVersion: defaultGetActiveCliVersion,
71
+ getExpectedVersion: defaultGetExpectedVersion,
72
+ getNpmGlobalPrefix: defaultGetNpmGlobalPrefix,
73
+ kickstart: kickstartDaemon,
74
+ waitForHealth,
75
+ installMenuBar,
76
+ };
77
+ export function makeUpdateCommand() {
78
+ return new Command("update")
79
+ .description("Reinstall the latest @getrift/rift@beta and restart the daemon")
80
+ .action(async (_opts, cmd) => {
81
+ const globalOpts = cmd.optsWithGlobals();
82
+ const result = await runUpdate(defaultRunner);
83
+ if (globalOpts.json) {
84
+ printJson(result);
85
+ }
86
+ else {
87
+ for (const line of result.transcript)
88
+ printText(line);
89
+ }
90
+ if (!result.ok)
91
+ process.exitCode = 1;
92
+ });
93
+ }
94
+ /**
95
+ * Pure orchestration so tests can inject a mock runner. The function
96
+ * always returns — exit-code mapping is the caller's job.
97
+ */
98
+ export async function runUpdate(runner) {
99
+ const transcript = [];
100
+ const say = (line) => {
101
+ transcript.push(line);
102
+ };
103
+ // --- Step 1a: resolve the target version with FRESH registry metadata ---
104
+ // Resolve the expected version BEFORE installing, and force a registry
105
+ // round-trip (`npm view --prefer-online`). This is load-bearing: if both
106
+ // `npm install @beta` and the verification's `npm view @beta` read the same
107
+ // stale local cache, the tag can resolve to the version already installed —
108
+ // a no-op that then "verifies" against itself (beta.18 == beta.18) and the
109
+ // command lies. Pinning to the freshly-resolved EXACT version below removes
110
+ // the tag indirection from the install entirely.
111
+ const active = await runner.resolveActiveCli();
112
+ const installPrefix = active.prefix;
113
+ const expected = await runner.getExpectedVersion();
114
+ // --- Step 1b: npm install ---
115
+ // Install the exact pinned version when we know it (so a stale-cached tag
116
+ // can't redirect us), falling back to the @beta tag only when the registry
117
+ // probe failed. Install into the prefix that owns the `rift` on PATH so the
118
+ // copy the friend's shell runs is the copy that gets upgraded; when we can't
119
+ // resolve it, fall back to npm's choice and let verify (Step 2) catch a split.
120
+ const installSpec = expected ? `${RIFT_PACKAGE_NAME}@${expected}` : RIFT_PACKAGE_SPEC;
121
+ say(`==> Installing ${installSpec} via npm` +
122
+ (installPrefix ? ` (into ${installPrefix})` : ""));
123
+ let npmCode = await runner.runNpmInstall(installSpec, false, installPrefix);
124
+ if (npmCode !== 0) {
125
+ // npm exits non-zero on a permission denied error; mirror install.sh
126
+ // and retry under sudo so a non-nvm user on a system Node doesn't get
127
+ // stuck. The sudo prompt itself surfaces inline in the friend's
128
+ // terminal — we don't try to suppress it.
129
+ say(" npm install failed without sudo — retrying with sudo");
130
+ npmCode = await runner.runNpmInstall(installSpec, true, installPrefix);
131
+ }
132
+ if (npmCode !== 0) {
133
+ say("");
134
+ say("Update failed at step 1 (npm install).");
135
+ say("Your existing Rift install is unchanged.");
136
+ say(`Try manually: npm install -g --prefer-online ${RIFT_PACKAGE_SPEC}`);
137
+ return { ok: false, step: "npm", transcript };
138
+ }
139
+ say(" npm install completed.");
140
+ // --- Step 2: verify the active CLI actually upgraded ---
141
+ // An exit-0 npm install is NOT proof. npm can install into a different
142
+ // prefix than the binary on PATH, or (when we fell back to the tag) resolve
143
+ // `@beta` to the version already installed. In both cases the friend's shell
144
+ // still runs the old build. Refuse to claim success until the `rift` on PATH
145
+ // reports the expected version — and if we never resolved the expected
146
+ // version, say so honestly rather than passing on "installed something".
147
+ say("==> Verifying the rift on your PATH is up to date");
148
+ const activeVersion = await runner.getActiveCliVersion();
149
+ const verdict = evaluateUpgrade(expected, activeVersion);
150
+ if (!verdict.ok) {
151
+ const npmPrefix = await runner.getNpmGlobalPrefix();
152
+ appendVerifyDiagnosis(say, {
153
+ expected,
154
+ activeVersion,
155
+ active,
156
+ installPrefix,
157
+ npmPrefix,
158
+ reason: verdict.reason,
159
+ });
160
+ return { ok: false, step: "verify", transcript };
161
+ }
162
+ say(` Active rift is ${activeVersion} (matches the published @beta).`);
163
+ // --- Step 3: kickstart daemon ---
164
+ say("==> Restarting the Rift daemon");
165
+ const kick = await runner.kickstart();
166
+ if (kick.status !== "ok") {
167
+ say("");
168
+ say("Update installed, but the daemon did not restart cleanly.");
169
+ if (kick.hint)
170
+ say(` ${kick.hint}`);
171
+ say("Try: launchctl kickstart -k gui/$UID/com.getrift.daemon");
172
+ return { ok: false, step: "kickstart", transcript };
173
+ }
174
+ say(" Daemon kickstarted.");
175
+ // --- Step 4: wait for /health ---
176
+ say("==> Waiting for the daemon to answer /health");
177
+ const health = await runner.waitForHealth({
178
+ baseUrl: DAEMON_BASE_URL,
179
+ timeoutMs: HEALTH_TIMEOUT_MS,
180
+ });
181
+ if (!health.ok) {
182
+ say("");
183
+ say("Update installed and daemon kickstarted, but /health did not return 200.");
184
+ say(` ${health.reason}`);
185
+ say("Inspect with: rift status");
186
+ return { ok: false, step: "health", transcript };
187
+ }
188
+ say(` Daemon healthy (uptime ${health.uptimeSeconds}s).`);
189
+ // --- Step 5: refresh menu bar plugin ---
190
+ say("==> Refreshing the Rift menu bar");
191
+ try {
192
+ const menu = runner.installMenuBar();
193
+ if (menu.skipped) {
194
+ say(` Menu bar skipped: ${menu.reason ?? "not available"}`);
195
+ }
196
+ else {
197
+ say(" Menu bar refreshed.");
198
+ }
199
+ }
200
+ catch (err) {
201
+ say(" Menu bar refresh skipped.");
202
+ say(` ${err instanceof Error ? err.message : String(err)}`);
203
+ }
204
+ say("");
205
+ say("Rift updated. Run `rift status` to confirm the new version.");
206
+ return { ok: true, transcript };
207
+ }
208
+ /**
209
+ * Decide whether the active CLI actually upgraded. The contract is strict and
210
+ * biased toward honesty — "could not confirm" is a FAILURE, never a pass:
211
+ * - no active version at all → the binary is broken (`no_binary`).
212
+ * - no expected version → we couldn't reach the registry to learn the latest
213
+ * beta, so we cannot claim the update landed (`unverified`). This is the
214
+ * deliberate fix for "couldn't verify" silently becoming "updated".
215
+ * - active != expected → still the old (or wrong) build (`mismatch`).
216
+ * Only an active version that equals a freshly-resolved expected version is OK.
217
+ */
218
+ export function evaluateUpgrade(expected, activeVersion) {
219
+ if (!activeVersion)
220
+ return { ok: false, reason: "no_binary" };
221
+ if (!expected)
222
+ return { ok: false, reason: "unverified" };
223
+ if (activeVersion !== expected)
224
+ return { ok: false, reason: "mismatch" };
225
+ return { ok: true };
226
+ }
227
+ /**
228
+ * Friend-readable verification failure. Leads with a plain-English headline,
229
+ * then prints versions and paths so the detail is actionable. The branch is
230
+ * chosen from the classified `reason`, and — crucially — only calls it a
231
+ * prefix split when the install was NOT targeted at the active CLI's prefix.
232
+ * Since we install with `--prefix <active.prefix>` whenever we can resolve it,
233
+ * a failure there is a stale-cache / no-op, NOT a split; telling the friend to
234
+ * re-run the same targeted command would be misleading.
235
+ */
236
+ function appendVerifyDiagnosis(say, ctx) {
237
+ const { expected, activeVersion, active, installPrefix, npmPrefix, reason } = ctx;
238
+ // The prefix npm actually wrote to: the one we targeted, else npm's default.
239
+ const actualInstallPrefix = installPrefix ?? npmPrefix;
240
+ // A genuine split is only possible when we did NOT target the active prefix
241
+ // (installPrefix === null) AND the binary on PATH lives outside where npm
242
+ // installed. When we targeted active.prefix, npm wrote exactly there.
243
+ const prefixSplit = reason === "mismatch" &&
244
+ installPrefix === null &&
245
+ active.binPath !== null &&
246
+ npmPrefix !== null &&
247
+ !binaryLivesUnderPrefix(active.binPath, npmPrefix);
248
+ say("");
249
+ if (reason === "no_binary") {
250
+ say("Rift installed, but `rift --version` would not run afterward.");
251
+ }
252
+ else if (reason === "unverified") {
253
+ say("Rift installed something, but I could not confirm it is the latest.");
254
+ }
255
+ else if (prefixSplit) {
256
+ say("Rift updated one copy, but your terminal still points at another copy.");
257
+ }
258
+ else {
259
+ say("Rift installed, but the rift in your PATH is still the old version.");
260
+ }
261
+ // Detail block — keep the headline understandable, put specifics below it.
262
+ say("");
263
+ if (expected)
264
+ say(` Expected (published @beta): ${expected}`);
265
+ else
266
+ say(" Expected (published @beta): unknown — npm registry probe failed");
267
+ say(` Active (your shell's rift): ${activeVersion ?? "unknown"}`);
268
+ if (active.binPath)
269
+ say(` Active rift path: ${active.binPath}`);
270
+ if (actualInstallPrefix) {
271
+ say(` Installed into prefix: ${actualInstallPrefix}`);
272
+ }
273
+ if (prefixSplit && npmPrefix) {
274
+ say(` npm global prefix: ${npmPrefix}`);
275
+ }
276
+ // Recovery.
277
+ say("");
278
+ if (reason === "unverified") {
279
+ say("This usually means npm couldn't reach the registry. Check your");
280
+ say("connection and re-run `rift update`. To verify by hand:");
281
+ say(` npm view ${RIFT_BETA_TAG} version # the target`);
282
+ say(" rift --version # what your shell runs");
283
+ }
284
+ else if (prefixSplit) {
285
+ const targetPrefix = active.prefix ?? deriveBinPrefix(active.binPath);
286
+ say("Fix: install into the copy your terminal actually runs:");
287
+ if (targetPrefix) {
288
+ say(` npm install -g --prefix ${targetPrefix} --prefer-online ${RIFT_BETA_TAG}`);
289
+ }
290
+ else {
291
+ say(` npm install -g --prefer-online ${RIFT_BETA_TAG}`);
292
+ }
293
+ }
294
+ else {
295
+ // no_binary or same-prefix no-op: most often a stale npm metadata cache.
296
+ say("Your npm metadata cache may be stale (the install was a no-op).");
297
+ say(`Fix: npm install -g --prefer-online ${RIFT_BETA_TAG}`);
298
+ say(" (if it repeats: npm cache clean --force, then re-run rift update)");
299
+ }
300
+ }
301
+ /** True when `binPath` sits inside `<prefix>/bin` (i.e. npm's `-g` bin dir). */
302
+ function binaryLivesUnderPrefix(binPath, prefix) {
303
+ const binDir = path.join(prefix, "bin") + path.sep;
304
+ return (binPath + path.sep).startsWith(binDir);
305
+ }
306
+ /** prefix that owns a `<prefix>/bin/rift` binary, or null if not that shape. */
307
+ function deriveBinPrefix(binPath) {
308
+ if (!binPath)
309
+ return null;
310
+ const binDir = path.dirname(binPath);
311
+ return path.basename(binDir) === "bin" ? path.dirname(binDir) : null;
312
+ }
313
+ function defaultNpmInstall(spec, useSudo, prefix) {
314
+ return new Promise((resolve) => {
315
+ const prefixArgs = prefix ? ["--prefix", prefix] : [];
316
+ // `--prefer-online` forces npm to revalidate registry metadata instead of
317
+ // trusting a possibly-stale local cache — defense in depth on top of the
318
+ // pinned exact version, so even the tag-fallback path installs fresh.
319
+ const baseArgs = ["install", "-g", "--prefer-online", ...prefixArgs, spec];
320
+ const cmd = useSudo ? "sudo" : "npm";
321
+ const args = useSudo ? ["npm", ...baseArgs] : baseArgs;
322
+ const child = spawn(cmd, args, { stdio: "inherit" });
323
+ child.on("error", () => resolve(1));
324
+ child.on("close", (code) => resolve(code ?? 1));
325
+ });
326
+ }
327
+ /** Run a command, capture trimmed stdout, return null on any failure. */
328
+ function capture(cmd, args) {
329
+ return new Promise((resolve) => {
330
+ execFile(cmd, args, { timeout: 20_000, encoding: "utf8" }, (err, stdout) => {
331
+ if (err) {
332
+ resolve(null);
333
+ return;
334
+ }
335
+ const out = stdout.trim();
336
+ resolve(out.length > 0 ? out : null);
337
+ });
338
+ });
339
+ }
340
+ /**
341
+ * Resolve the `rift` the friend's shell runs and the prefix that owns it.
342
+ * Uses `command -v rift` (PATH lookup) rather than this process's own path —
343
+ * the running update is the OLD build, and we want the binary a fresh shell
344
+ * would launch. Prefix is the parent of the binary's `bin/` dir, which is
345
+ * exactly what `npm install -g --prefix` expects.
346
+ */
347
+ async function defaultResolveActiveCli() {
348
+ const binPath = await capture("/bin/sh", ["-c", "command -v rift"]);
349
+ if (!binPath)
350
+ return { binPath: null, prefix: null };
351
+ // /opt/homebrew/bin/rift → bin dir /opt/homebrew/bin → prefix /opt/homebrew
352
+ const binDir = path.dirname(binPath);
353
+ const prefix = path.basename(binDir) === "bin" ? path.dirname(binDir) : null;
354
+ return { binPath, prefix };
355
+ }
356
+ /** Version reported by the `rift` on PATH (`rift --version`). */
357
+ async function defaultGetActiveCliVersion() {
358
+ const out = await capture("/bin/sh", ["-c", "rift --version"]);
359
+ if (!out)
360
+ return null;
361
+ // commander prints a bare version line; tolerate any extra decoration.
362
+ const match = out.match(/\d+\.\d+\.\d+[^\s]*/);
363
+ return match ? match[0] : out;
364
+ }
365
+ /**
366
+ * Expected version from the published `@beta` dist-tag, with FRESH metadata.
367
+ * `--prefer-online` is load-bearing: without it this probe can read the same
368
+ * stale cache the install did, so a no-op install would "verify" against an
369
+ * equally-stale expected version and the command would lie.
370
+ */
371
+ function defaultGetExpectedVersion() {
372
+ return capture("npm", ["view", "--prefer-online", RIFT_BETA_TAG, "version"]);
373
+ }
374
+ /** npm's own global prefix (`npm prefix -g`). */
375
+ function defaultGetNpmGlobalPrefix() {
376
+ return capture("npm", ["prefix", "-g"]);
377
+ }
378
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../../src/cli/commands/update.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Canonical config path used when `--config` is not provided.
3
+ *
4
+ * Mirrors the path written by `scripts/install.sh`:
5
+ * $HOME/Library/Application Support/Rift/data/config.json
6
+ *
7
+ * Without this, the CLI default was `config.json` (relative to cwd),
8
+ * which broke every invocation made outside the data dir on a fresh
9
+ * friend install — `rift status` from the home folder would `ENOENT`.
10
+ *
11
+ * Override with the `RIFT_CONFIG` env var (absolute path) for tests
12
+ * or operators running multiple instances side-by-side.
13
+ */
14
+ export declare function defaultConfigPath(): string;
15
+ //# sourceMappingURL=default-config-path.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default-config-path.d.ts","sourceRoot":"","sources":["../../../src/cli/default-config-path.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAiB1C"}
@@ -0,0 +1,27 @@
1
+ import os from "node:os";
2
+ import path from "node:path";
3
+ /**
4
+ * Canonical config path used when `--config` is not provided.
5
+ *
6
+ * Mirrors the path written by `scripts/install.sh`:
7
+ * $HOME/Library/Application Support/Rift/data/config.json
8
+ *
9
+ * Without this, the CLI default was `config.json` (relative to cwd),
10
+ * which broke every invocation made outside the data dir on a fresh
11
+ * friend install — `rift status` from the home folder would `ENOENT`.
12
+ *
13
+ * Override with the `RIFT_CONFIG` env var (absolute path) for tests
14
+ * or operators running multiple instances side-by-side.
15
+ */
16
+ export function defaultConfigPath() {
17
+ // Per A-2.1: empty or whitespace-only RIFT_CONFIG falls through to the
18
+ // default. Treating " " as set would give the user a confusing
19
+ // `Config not found at /<cwd>` message later, when they think they
20
+ // didn't set the env var at all.
21
+ const override = process.env.RIFT_CONFIG;
22
+ if (typeof override === "string" && override.trim().length > 0) {
23
+ return path.resolve(override);
24
+ }
25
+ return path.join(os.homedir(), "Library", "Application Support", "Rift", "data", "config.json");
26
+ }
27
+ //# sourceMappingURL=default-config-path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default-config-path.js","sourceRoot":"","sources":["../../../src/cli/default-config-path.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,iBAAiB;IAC/B,uEAAuE;IACvE,iEAAiE;IACjE,mEAAmE;IACnE,iCAAiC;IACjC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;IACzC,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/D,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CACd,EAAE,CAAC,OAAO,EAAE,EACZ,SAAS,EACT,qBAAqB,EACrB,MAAM,EACN,MAAM,EACN,aAAa,CACd,CAAC;AACJ,CAAC"}
@@ -1,21 +1,67 @@
1
1
  import { z } from "zod";
2
+ import type { RelaySecretStore } from "./relay-secret-store.js";
2
3
  export declare const FeedbackConfigSchema: z.ZodObject<{
3
4
  enabled: z.ZodBoolean;
4
5
  url: z.ZodOptional<z.ZodString>;
5
6
  installation_id: z.ZodOptional<z.ZodString>;
6
7
  hmac_secret: z.ZodOptional<z.ZodString>;
8
+ unsigned: z.ZodOptional<z.ZodBoolean>;
9
+ email: z.ZodOptional<z.ZodString>;
7
10
  }, "strict", z.ZodTypeAny, {
8
11
  enabled: boolean;
9
12
  url?: string | undefined;
13
+ email?: string | undefined;
10
14
  installation_id?: string | undefined;
11
15
  hmac_secret?: string | undefined;
16
+ unsigned?: boolean | undefined;
12
17
  }, {
13
18
  enabled: boolean;
14
19
  url?: string | undefined;
20
+ email?: string | undefined;
15
21
  installation_id?: string | undefined;
16
22
  hmac_secret?: string | undefined;
23
+ unsigned?: boolean | undefined;
17
24
  }>;
18
25
  export type FeedbackConfig = z.infer<typeof FeedbackConfigSchema>;
19
26
  export declare function feedbackConfigPath(dataDir: string): string;
20
27
  export declare function loadFeedbackConfig(dataDir: string): FeedbackConfig;
28
+ /**
29
+ * Persist the feedback config, ALWAYS stripping the deprecated `hmac_secret`
30
+ * — the secret belongs in the Keychain, never the sidecar. Writes mode 0600.
31
+ */
32
+ export declare function writeFeedbackConfig(dataDir: string, cfg: FeedbackConfig): void;
33
+ /**
34
+ * Resolve the relay HMAC secret, migrating a legacy plaintext sidecar secret
35
+ * into the Keychain on first use. Order:
36
+ * 1. Keychain (the canonical home) — return it if present.
37
+ * 2. Legacy `hmac_secret` in the sidecar — write it to the Keychain, strip
38
+ * it from the file, then return it.
39
+ * 3. None / not securely resolvable — return null.
40
+ *
41
+ * NEVER returns a secret that isn't (or didn't just become) securely stored:
42
+ * - If the Keychain READ fails (e.g. locked), returns null — the caller must
43
+ * not downgrade to an unsigned production POST.
44
+ * - A legacy plaintext secret is returned ONLY after it is successfully
45
+ * written to the Keychain. If that write fails, returns null (no silent
46
+ * plaintext fallback); migration retries next time once the Keychain is
47
+ * reachable.
48
+ *
49
+ * NEVER throws — it runs in the best-effort `rift feedback` relay path. The
50
+ * plaintext strip is best-effort and RETRYABLE: a strip that fails (e.g. a
51
+ * read-only sidecar) leaves the plaintext for a later call to remove, and a
52
+ * later call strips a lingering plaintext copy even when the Keychain already
53
+ * holds the secret (the partial-migration case).
54
+ */
55
+ export declare function resolveRelaySecret(deps: {
56
+ dataDir: string;
57
+ store: RelaySecretStore;
58
+ }): Promise<string | null>;
59
+ /**
60
+ * Turn the relay on for this install (from an accepted invite or operator
61
+ * flags): set `enabled` + `url`, mint an `installation_id` when absent, and
62
+ * preserve any existing email. `writeFeedbackConfig` guarantees no secret
63
+ * lands in the sidecar — the caller writes the secret to the Keychain. Returns
64
+ * the persisted config.
65
+ */
66
+ export declare function applyRelayUrl(dataDir: string, url: string): FeedbackConfig;
21
67
  //# sourceMappingURL=feedback-config.d.ts.map
@@ -1 +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"}
1
+ {"version":3,"file":"feedback-config.d.ts","sourceRoot":"","sources":["../../../../src/cli/feedback/feedback-config.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;EAmBtB,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;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,GAAG,IAAI,CAc9E;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,gBAAgB,CAAC;CACzB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA6BzB;AAkBD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,cAAc,CAU1E"}