@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.
Files changed (390) 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 +80 -0
  46. package/dist/src/cli/commands/menubar.d.ts.map +1 -0
  47. package/dist/src/cli/commands/menubar.js +388 -0
  48. package/dist/src/cli/commands/menubar.js.map +1 -0
  49. package/dist/src/cli/commands/onboard.d.ts +143 -5
  50. package/dist/src/cli/commands/onboard.d.ts.map +1 -1
  51. package/dist/src/cli/commands/onboard.js +844 -188
  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 +117 -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 +390 -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 +53 -0
  116. package/dist/src/cli/postinstall-menubar.js.map +1 -0
  117. package/dist/src/cli/status/friend-header.d.ts +16 -1
  118. package/dist/src/cli/status/friend-header.d.ts.map +1 -1
  119. package/dist/src/cli/status/friend-header.js +354 -26
  120. package/dist/src/cli/status/friend-header.js.map +1 -1
  121. package/dist/src/cli/status/local-signals.d.ts +18 -0
  122. package/dist/src/cli/status/local-signals.d.ts.map +1 -1
  123. package/dist/src/cli/status/local-signals.js +29 -0
  124. package/dist/src/cli/status/local-signals.js.map +1 -1
  125. package/dist/src/cli/ui.d.ts +47 -0
  126. package/dist/src/cli/ui.d.ts.map +1 -0
  127. package/dist/src/cli/ui.js +166 -0
  128. package/dist/src/cli/ui.js.map +1 -0
  129. package/dist/src/config/schema.d.ts +79 -0
  130. package/dist/src/config/schema.d.ts.map +1 -1
  131. package/dist/src/config/schema.js +44 -0
  132. package/dist/src/config/schema.js.map +1 -1
  133. package/dist/src/diagnostics/codex-preflight.d.ts +33 -0
  134. package/dist/src/diagnostics/codex-preflight.d.ts.map +1 -0
  135. package/dist/src/diagnostics/codex-preflight.js +75 -0
  136. package/dist/src/diagnostics/codex-preflight.js.map +1 -0
  137. package/dist/src/diagnostics/doctor.d.ts +114 -0
  138. package/dist/src/diagnostics/doctor.d.ts.map +1 -0
  139. package/dist/src/diagnostics/doctor.js +352 -0
  140. package/dist/src/diagnostics/doctor.js.map +1 -0
  141. package/dist/src/diagnostics/notify.d.ts +90 -0
  142. package/dist/src/diagnostics/notify.d.ts.map +1 -0
  143. package/dist/src/diagnostics/notify.js +177 -0
  144. package/dist/src/diagnostics/notify.js.map +1 -0
  145. package/dist/src/diagnostics/repair-prompt.d.ts +49 -0
  146. package/dist/src/diagnostics/repair-prompt.d.ts.map +1 -0
  147. package/dist/src/diagnostics/repair-prompt.js +223 -0
  148. package/dist/src/diagnostics/repair-prompt.js.map +1 -0
  149. package/dist/src/ingestion/inbox-core/conversation-fingerprint.d.ts +2 -0
  150. package/dist/src/ingestion/inbox-core/conversation-fingerprint.d.ts.map +1 -0
  151. package/dist/src/ingestion/inbox-core/conversation-fingerprint.js +27 -0
  152. package/dist/src/ingestion/inbox-core/conversation-fingerprint.js.map +1 -0
  153. package/dist/src/ingestion/inbox-core/conversation-key.d.ts +2 -0
  154. package/dist/src/ingestion/inbox-core/conversation-key.d.ts.map +1 -0
  155. package/dist/src/ingestion/inbox-core/conversation-key.js +31 -0
  156. package/dist/src/ingestion/inbox-core/conversation-key.js.map +1 -0
  157. package/dist/src/ingestion/inbox-core/extensions.d.ts +3 -0
  158. package/dist/src/ingestion/inbox-core/extensions.d.ts.map +1 -0
  159. package/dist/src/ingestion/inbox-core/extensions.js +16 -0
  160. package/dist/src/ingestion/inbox-core/extensions.js.map +1 -0
  161. package/dist/src/ingestion/inbox-core/idempotency.d.ts +2 -0
  162. package/dist/src/ingestion/inbox-core/idempotency.d.ts.map +1 -0
  163. package/dist/src/ingestion/inbox-core/idempotency.js +22 -0
  164. package/dist/src/ingestion/inbox-core/idempotency.js.map +1 -0
  165. package/dist/src/ingestion/inbox-core/index.d.ts +20 -0
  166. package/dist/src/ingestion/inbox-core/index.d.ts.map +1 -0
  167. package/dist/src/ingestion/inbox-core/index.js +20 -0
  168. package/dist/src/ingestion/inbox-core/index.js.map +1 -0
  169. package/dist/src/ingestion/inbox-core/source-detection.d.ts +2 -0
  170. package/dist/src/ingestion/inbox-core/source-detection.d.ts.map +1 -0
  171. package/dist/src/ingestion/inbox-core/source-detection.js +23 -0
  172. package/dist/src/ingestion/inbox-core/source-detection.js.map +1 -0
  173. package/dist/src/ingestion/inbox-core/source-sniffer.d.ts +11 -0
  174. package/dist/src/ingestion/inbox-core/source-sniffer.d.ts.map +1 -0
  175. package/dist/src/ingestion/inbox-core/source-sniffer.js +69 -0
  176. package/dist/src/ingestion/inbox-core/source-sniffer.js.map +1 -0
  177. package/dist/src/ingestion/inbox-core/zip-sniffer.d.ts +70 -0
  178. package/dist/src/ingestion/inbox-core/zip-sniffer.d.ts.map +1 -0
  179. package/dist/src/ingestion/inbox-core/zip-sniffer.js +161 -0
  180. package/dist/src/ingestion/inbox-core/zip-sniffer.js.map +1 -0
  181. package/dist/src/ingestion/inbox-watcher.d.ts.map +1 -1
  182. package/dist/src/ingestion/inbox-watcher.js +34 -50
  183. package/dist/src/ingestion/inbox-watcher.js.map +1 -1
  184. package/dist/src/ingestion/indexer.d.ts +7 -0
  185. package/dist/src/ingestion/indexer.d.ts.map +1 -1
  186. package/dist/src/ingestion/indexer.js +36 -2
  187. package/dist/src/ingestion/indexer.js.map +1 -1
  188. package/dist/src/ingestion/metadata-extraction.d.ts +8 -5
  189. package/dist/src/ingestion/metadata-extraction.d.ts.map +1 -1
  190. package/dist/src/ingestion/metadata-extraction.js +24 -5
  191. package/dist/src/ingestion/metadata-extraction.js.map +1 -1
  192. package/dist/src/ingestion/skip-quarantine.d.ts +10 -0
  193. package/dist/src/ingestion/skip-quarantine.d.ts.map +1 -0
  194. package/dist/src/ingestion/skip-quarantine.js +35 -0
  195. package/dist/src/ingestion/skip-quarantine.js.map +1 -0
  196. package/dist/src/jobs/handlers/compact.d.ts.map +1 -1
  197. package/dist/src/jobs/handlers/compact.js +30 -4
  198. package/dist/src/jobs/handlers/compact.js.map +1 -1
  199. package/dist/src/jobs/handlers/dedupe-conversations.d.ts +134 -0
  200. package/dist/src/jobs/handlers/dedupe-conversations.d.ts.map +1 -0
  201. package/dist/src/jobs/handlers/dedupe-conversations.js +371 -0
  202. package/dist/src/jobs/handlers/dedupe-conversations.js.map +1 -0
  203. package/dist/src/jobs/handlers/ingest.d.ts.map +1 -1
  204. package/dist/src/jobs/handlers/ingest.js +295 -41
  205. package/dist/src/jobs/handlers/ingest.js.map +1 -1
  206. package/dist/src/jobs/handlers/reconcile.d.ts +28 -0
  207. package/dist/src/jobs/handlers/reconcile.d.ts.map +1 -1
  208. package/dist/src/jobs/handlers/reconcile.js +145 -19
  209. package/dist/src/jobs/handlers/reconcile.js.map +1 -1
  210. package/dist/src/jobs/handlers/reindex.d.ts.map +1 -1
  211. package/dist/src/jobs/handlers/reindex.js +13 -2
  212. package/dist/src/jobs/handlers/reindex.js.map +1 -1
  213. package/dist/src/jobs/handlers/save.d.ts.map +1 -1
  214. package/dist/src/jobs/handlers/save.js +57 -3
  215. package/dist/src/jobs/handlers/save.js.map +1 -1
  216. package/dist/src/jobs/queue.d.ts +51 -1
  217. package/dist/src/jobs/queue.d.ts.map +1 -1
  218. package/dist/src/jobs/queue.js +466 -26
  219. package/dist/src/jobs/queue.js.map +1 -1
  220. package/dist/src/jobs/worker-entry.d.ts.map +1 -1
  221. package/dist/src/jobs/worker-entry.js +35 -7
  222. package/dist/src/jobs/worker-entry.js.map +1 -1
  223. package/dist/src/jobs/worker-process.d.ts +11 -0
  224. package/dist/src/jobs/worker-process.d.ts.map +1 -1
  225. package/dist/src/jobs/worker-process.js +37 -4
  226. package/dist/src/jobs/worker-process.js.map +1 -1
  227. package/dist/src/main.js +199 -46
  228. package/dist/src/main.js.map +1 -1
  229. package/dist/src/mcp/errors.d.ts.map +1 -1
  230. package/dist/src/mcp/errors.js +20 -1
  231. package/dist/src/mcp/errors.js.map +1 -1
  232. package/dist/src/mcp/server.d.ts.map +1 -1
  233. package/dist/src/mcp/server.js +43 -3
  234. package/dist/src/mcp/server.js.map +1 -1
  235. package/dist/src/mcp/tools/context-pack.d.ts.map +1 -1
  236. package/dist/src/mcp/tools/context-pack.js +164 -23
  237. package/dist/src/mcp/tools/context-pack.js.map +1 -1
  238. package/dist/src/mcp/tools/search.d.ts +6 -2
  239. package/dist/src/mcp/tools/search.d.ts.map +1 -1
  240. package/dist/src/mcp/tools/search.js +35 -4
  241. package/dist/src/mcp/tools/search.js.map +1 -1
  242. package/dist/src/observability/embedding-events.d.ts +52 -0
  243. package/dist/src/observability/embedding-events.d.ts.map +1 -0
  244. package/dist/src/observability/embedding-events.js +149 -0
  245. package/dist/src/observability/embedding-events.js.map +1 -0
  246. package/dist/src/observability/index-events.d.ts +70 -0
  247. package/dist/src/observability/index-events.d.ts.map +1 -0
  248. package/dist/src/observability/index-events.js +148 -0
  249. package/dist/src/observability/index-events.js.map +1 -0
  250. package/dist/src/observability/onboarding-metric.d.ts +131 -0
  251. package/dist/src/observability/onboarding-metric.d.ts.map +1 -0
  252. package/dist/src/observability/onboarding-metric.js +351 -0
  253. package/dist/src/observability/onboarding-metric.js.map +1 -0
  254. package/dist/src/observability/tool-usage-stats.d.ts +77 -4
  255. package/dist/src/observability/tool-usage-stats.d.ts.map +1 -1
  256. package/dist/src/observability/tool-usage-stats.js +112 -32
  257. package/dist/src/observability/tool-usage-stats.js.map +1 -1
  258. package/dist/src/observability/tool-usage.d.ts +100 -7
  259. package/dist/src/observability/tool-usage.d.ts.map +1 -1
  260. package/dist/src/observability/tool-usage.js +196 -33
  261. package/dist/src/observability/tool-usage.js.map +1 -1
  262. package/dist/src/observability/version-check.d.ts +71 -0
  263. package/dist/src/observability/version-check.d.ts.map +1 -0
  264. package/dist/src/observability/version-check.js +198 -0
  265. package/dist/src/observability/version-check.js.map +1 -0
  266. package/dist/src/providers/basic-metadata-extraction.d.ts +60 -0
  267. package/dist/src/providers/basic-metadata-extraction.d.ts.map +1 -0
  268. package/dist/src/providers/basic-metadata-extraction.js +114 -0
  269. package/dist/src/providers/basic-metadata-extraction.js.map +1 -0
  270. package/dist/src/providers/codex-cli-metadata-extraction.d.ts +1 -0
  271. package/dist/src/providers/codex-cli-metadata-extraction.d.ts.map +1 -1
  272. package/dist/src/providers/codex-cli-metadata-extraction.js +6 -2
  273. package/dist/src/providers/codex-cli-metadata-extraction.js.map +1 -1
  274. package/dist/src/providers/codex-cli-model.d.ts +61 -0
  275. package/dist/src/providers/codex-cli-model.d.ts.map +1 -0
  276. package/dist/src/providers/codex-cli-model.js +194 -0
  277. package/dist/src/providers/codex-cli-model.js.map +1 -0
  278. package/dist/src/providers/codex-cli-runner.d.ts +39 -0
  279. package/dist/src/providers/codex-cli-runner.d.ts.map +1 -1
  280. package/dist/src/providers/codex-cli-runner.js +234 -48
  281. package/dist/src/providers/codex-cli-runner.js.map +1 -1
  282. package/dist/src/providers/conversation-generation.d.ts.map +1 -1
  283. package/dist/src/providers/conversation-generation.js +43 -6
  284. package/dist/src/providers/conversation-generation.js.map +1 -1
  285. package/dist/src/providers/ollama-embed.d.ts +2 -1
  286. package/dist/src/providers/ollama-embed.d.ts.map +1 -1
  287. package/dist/src/providers/ollama-embed.js +1 -0
  288. package/dist/src/providers/ollama-embed.js.map +1 -1
  289. package/dist/src/providers/openai-metadata-extraction.d.ts +3 -3
  290. package/dist/src/providers/openai-metadata-extraction.d.ts.map +1 -1
  291. package/dist/src/providers/openai-metadata-extraction.js +18 -3
  292. package/dist/src/providers/openai-metadata-extraction.js.map +1 -1
  293. package/dist/src/providers/placeholder-embed.d.ts +56 -0
  294. package/dist/src/providers/placeholder-embed.d.ts.map +1 -0
  295. package/dist/src/providers/placeholder-embed.js +64 -0
  296. package/dist/src/providers/placeholder-embed.js.map +1 -0
  297. package/dist/src/providers/stub.d.ts +2 -0
  298. package/dist/src/providers/stub.d.ts.map +1 -1
  299. package/dist/src/providers/stub.js +2 -0
  300. package/dist/src/providers/stub.js.map +1 -1
  301. package/dist/src/providers/types.d.ts +11 -0
  302. package/dist/src/providers/types.d.ts.map +1 -1
  303. package/dist/src/providers/voyage.d.ts +2 -1
  304. package/dist/src/providers/voyage.d.ts.map +1 -1
  305. package/dist/src/providers/voyage.js +1 -0
  306. package/dist/src/providers/voyage.js.map +1 -1
  307. package/dist/src/retrieval/compact.d.ts +116 -2
  308. package/dist/src/retrieval/compact.d.ts.map +1 -1
  309. package/dist/src/retrieval/compact.js +158 -5
  310. package/dist/src/retrieval/compact.js.map +1 -1
  311. package/dist/src/retrieval/context-pack.d.ts +114 -0
  312. package/dist/src/retrieval/context-pack.d.ts.map +1 -1
  313. package/dist/src/retrieval/context-pack.js +292 -8
  314. package/dist/src/retrieval/context-pack.js.map +1 -1
  315. package/dist/src/retrieval/current-truth.d.ts +360 -0
  316. package/dist/src/retrieval/current-truth.d.ts.map +1 -0
  317. package/dist/src/retrieval/current-truth.js +766 -0
  318. package/dist/src/retrieval/current-truth.js.map +1 -0
  319. package/dist/src/retrieval/git-state.d.ts +53 -0
  320. package/dist/src/retrieval/git-state.d.ts.map +1 -0
  321. package/dist/src/retrieval/git-state.js +174 -0
  322. package/dist/src/retrieval/git-state.js.map +1 -0
  323. package/dist/src/retrieval/lexical.d.ts.map +1 -1
  324. package/dist/src/retrieval/lexical.js +19 -3
  325. package/dist/src/retrieval/lexical.js.map +1 -1
  326. package/dist/src/retrieval/locator-boost.d.ts +37 -0
  327. package/dist/src/retrieval/locator-boost.d.ts.map +1 -0
  328. package/dist/src/retrieval/locator-boost.js +129 -0
  329. package/dist/src/retrieval/locator-boost.js.map +1 -0
  330. package/dist/src/retrieval/report-demotion.d.ts +46 -0
  331. package/dist/src/retrieval/report-demotion.d.ts.map +1 -0
  332. package/dist/src/retrieval/report-demotion.js +169 -0
  333. package/dist/src/retrieval/report-demotion.js.map +1 -0
  334. package/dist/src/retrieval/vector.d.ts.map +1 -1
  335. package/dist/src/retrieval/vector.js +11 -2
  336. package/dist/src/retrieval/vector.js.map +1 -1
  337. package/dist/src/server/app.d.ts.map +1 -1
  338. package/dist/src/server/app.js +92 -11
  339. package/dist/src/server/app.js.map +1 -1
  340. package/dist/src/server/routes/compact.d.ts.map +1 -1
  341. package/dist/src/server/routes/compact.js +4 -1
  342. package/dist/src/server/routes/compact.js.map +1 -1
  343. package/dist/src/server/routes/context.d.ts +1 -1
  344. package/dist/src/server/routes/context.d.ts.map +1 -1
  345. package/dist/src/server/routes/context.js +2 -1
  346. package/dist/src/server/routes/context.js.map +1 -1
  347. package/dist/src/server/routes/conversations-search.d.ts.map +1 -1
  348. package/dist/src/server/routes/conversations-search.js +28 -3
  349. package/dist/src/server/routes/conversations-search.js.map +1 -1
  350. package/dist/src/server/routes/enqueue.d.ts +11 -0
  351. package/dist/src/server/routes/enqueue.d.ts.map +1 -0
  352. package/dist/src/server/routes/enqueue.js +17 -0
  353. package/dist/src/server/routes/enqueue.js.map +1 -0
  354. package/dist/src/server/routes/friend-status.d.ts +339 -3
  355. package/dist/src/server/routes/friend-status.d.ts.map +1 -1
  356. package/dist/src/server/routes/friend-status.js +447 -13
  357. package/dist/src/server/routes/friend-status.js.map +1 -1
  358. package/dist/src/server/routes/ingest.d.ts.map +1 -1
  359. package/dist/src/server/routes/ingest.js +5 -2
  360. package/dist/src/server/routes/ingest.js.map +1 -1
  361. package/dist/src/server/routes/mcp-usage.d.ts +5 -4
  362. package/dist/src/server/routes/mcp-usage.d.ts.map +1 -1
  363. package/dist/src/server/routes/mcp-usage.js.map +1 -1
  364. package/dist/src/server/routes/reconcile.d.ts.map +1 -1
  365. package/dist/src/server/routes/reconcile.js +20 -1
  366. package/dist/src/server/routes/reconcile.js.map +1 -1
  367. package/dist/src/server/routes/reindex.d.ts.map +1 -1
  368. package/dist/src/server/routes/reindex.js +4 -1
  369. package/dist/src/server/routes/reindex.js.map +1 -1
  370. package/dist/src/server/routes/save.d.ts.map +1 -1
  371. package/dist/src/server/routes/save.js +4 -1
  372. package/dist/src/server/routes/save.js.map +1 -1
  373. package/dist/src/server/routes/search.d.ts +1 -1
  374. package/dist/src/server/routes/search.d.ts.map +1 -1
  375. package/dist/src/server/routes/search.js +253 -29
  376. package/dist/src/server/routes/search.js.map +1 -1
  377. package/dist/src/server/routes/triage.d.ts.map +1 -1
  378. package/dist/src/server/routes/triage.js +4 -1
  379. package/dist/src/server/routes/triage.js.map +1 -1
  380. package/dist/src/storage/rebuild.d.ts +35 -1
  381. package/dist/src/storage/rebuild.d.ts.map +1 -1
  382. package/dist/src/storage/rebuild.js +288 -64
  383. package/dist/src/storage/rebuild.js.map +1 -1
  384. package/dist/src/storage/tables.d.ts +29 -0
  385. package/dist/src/storage/tables.d.ts.map +1 -1
  386. package/dist/src/storage/tables.js +32 -1
  387. package/dist/src/storage/tables.js.map +1 -1
  388. package/operator/swiftbar/render-menu.py +524 -0
  389. package/operator/swiftbar/rift.10s.sh +176 -0
  390. package/package.json +9 -3
@@ -0,0 +1,388 @@
1
+ /**
2
+ * `rift menubar install` — install/refresh the SwiftBar heartbeat plugin AND
3
+ * make it actually visible.
4
+ *
5
+ * The menu surface lives in `operator/swiftbar/` because it is a tiny
6
+ * operator-adjacent script, but beta users should not have to symlink repo
7
+ * paths by hand. This command links the packaged wrapper into SwiftBar's
8
+ * plugin folder. The wrapper follows the symlink back to the package so the
9
+ * renderer beside it updates whenever `npm install -g @getrift/rift@beta`
10
+ * replaces the package on disk.
11
+ *
12
+ * Dropping the plugin file is necessary but NOT sufficient for the icon to
13
+ * appear (this was the beta.20 first-run bug): SwiftBar is a separate app, and
14
+ * if it is not installed, or installed but never launched, the friend sees
15
+ * nothing. So this command now also:
16
+ * 1. resolves SwiftBar's REAL plugin directory (`defaults read … PluginDirectory`)
17
+ * and installs into it, configuring the default the first time so a fresh
18
+ * SwiftBar reads our plugin instead of prompting the user to pick a folder;
19
+ * 2. launches (or refreshes) SwiftBar when the app is present, so the icon
20
+ * shows without a second manual step;
21
+ * 3. when SwiftBar is missing, returns a structured, non-fatal recovery
22
+ * action (`brew install --cask swiftbar`, or a direct download) instead of
23
+ * silently "succeeding" with no visible menu.
24
+ *
25
+ * Every system side effect (reading/writing SwiftBar defaults, launching the
26
+ * app, detecting Homebrew) goes through an injectable `MenuBarHost` so the
27
+ * behavior is unit-testable without touching the real machine.
28
+ */
29
+ import fs from "node:fs";
30
+ import os from "node:os";
31
+ import path from "node:path";
32
+ import { execFileSync } from "node:child_process";
33
+ import { fileURLToPath } from "node:url";
34
+ import { Command } from "commander";
35
+ import { printError, printJson, printText } from "../output.js";
36
+ export const SWIFTBAR_PLUGIN_NAME = "rift.10s.sh";
37
+ export const SWIFTBAR_RENDERER_NAME = "render-menu.py";
38
+ /** SwiftBar's macOS preferences domain (used for `defaults` reads/writes). */
39
+ export const SWIFTBAR_DEFAULTS_DOMAIN = "com.ameba.SwiftBar";
40
+ const SWIFTBAR_DOWNLOAD_URL = "https://swiftbar.app";
41
+ export function makeMenuBarCommand() {
42
+ const cmd = new Command("menubar").description("Install and manage the Rift menu bar");
43
+ cmd
44
+ .command("install")
45
+ .description("Install or refresh the SwiftBar menu plugin")
46
+ .option("--plugin-dir <path>", "Override SwiftBar's plugin directory")
47
+ .option("--copy", "Copy scripts instead of symlinking to the packaged files")
48
+ .option("--yes", "Non-interactive install; accepted for install scripts")
49
+ .action((opts, command) => {
50
+ const globalOpts = command.optsWithGlobals();
51
+ let result;
52
+ try {
53
+ const installOpts = {};
54
+ if (opts.pluginDir)
55
+ installOpts.pluginDir = opts.pluginDir;
56
+ if (opts.copy !== undefined)
57
+ installOpts.copy = opts.copy;
58
+ result = installMenuBar(installOpts);
59
+ }
60
+ catch (err) {
61
+ const message = err instanceof Error ? err.message : String(err);
62
+ if (globalOpts.json) {
63
+ printJson({ ok: false, error: message });
64
+ }
65
+ else {
66
+ printError(`Menu bar install failed: ${message}`);
67
+ }
68
+ process.exitCode = 1;
69
+ return;
70
+ }
71
+ if (globalOpts.json) {
72
+ printJson(result);
73
+ }
74
+ else {
75
+ for (const line of result.transcript)
76
+ printText(line);
77
+ }
78
+ if (!result.ok)
79
+ process.exitCode = result.skipped ? 0 : 1;
80
+ });
81
+ return cmd;
82
+ }
83
+ export function defaultSwiftBarPluginDir(homeDir = os.homedir()) {
84
+ return path.join(homeDir, "Library", "Application Support", "SwiftBar", "Plugins");
85
+ }
86
+ export function installMenuBar(opts = {}) {
87
+ const platform = opts.platform ?? process.platform;
88
+ const homeDir = opts.homeDir ?? os.homedir();
89
+ const host = opts.host ?? defaultMenuBarHost(homeDir);
90
+ if (platform !== "darwin") {
91
+ const reason = "SwiftBar menu is macOS-only.";
92
+ const pluginDir = path.resolve(opts.pluginDir ?? process.env.RIFT_SWIFTBAR_PLUGIN_DIR ?? defaultSwiftBarPluginDir(homeDir));
93
+ return {
94
+ ok: true,
95
+ skipped: true,
96
+ reason,
97
+ pluginDir,
98
+ pluginPath: path.join(pluginDir, SWIFTBAR_PLUGIN_NAME),
99
+ sourceDir: null,
100
+ sourcePath: null,
101
+ rendererPath: null,
102
+ mode: null,
103
+ backupPath: null,
104
+ swiftBarDetected: false,
105
+ swiftBarOpened: false,
106
+ pluginDirSource: "default",
107
+ menuVisible: false,
108
+ recovery: null,
109
+ transcript: [`Menu bar skipped: ${reason}`],
110
+ };
111
+ }
112
+ const swiftBarApp = host.findSwiftBarApp();
113
+ const swiftBarDetected = swiftBarApp !== null;
114
+ // --- Resolve the plugin directory SwiftBar actually reads from ---
115
+ // Precedence: an explicit override (operator/test) wins; otherwise honor
116
+ // SwiftBar's own configured directory; otherwise fall back to the default
117
+ // and, when SwiftBar is present but unconfigured, persist that default so a
118
+ // fresh SwiftBar loads our plugin instead of prompting for a folder.
119
+ const explicitDir = opts.pluginDir ?? process.env.RIFT_SWIFTBAR_PLUGIN_DIR ?? null;
120
+ let pluginDirSource;
121
+ let resolvedDir;
122
+ if (explicitDir) {
123
+ resolvedDir = explicitDir;
124
+ pluginDirSource = "override";
125
+ }
126
+ else {
127
+ const configured = swiftBarDetected ? host.readPluginDirectory() : null;
128
+ if (configured) {
129
+ resolvedDir = configured;
130
+ pluginDirSource = "configured";
131
+ }
132
+ else {
133
+ resolvedDir = defaultSwiftBarPluginDir(homeDir);
134
+ // Only write SwiftBar's default when the app is present but has no
135
+ // directory yet — never clobber a folder the user already chose.
136
+ if (swiftBarDetected && host.writePluginDirectory(resolvedDir)) {
137
+ pluginDirSource = "default-written";
138
+ }
139
+ else {
140
+ pluginDirSource = "default";
141
+ }
142
+ }
143
+ }
144
+ const pluginDir = path.resolve(resolvedDir);
145
+ const pluginPath = path.join(pluginDir, SWIFTBAR_PLUGIN_NAME);
146
+ const transcript = [];
147
+ const sourceDir = path.resolve(opts.sourceDir ??
148
+ path.join(opts.packageRoot ?? findPackageRoot(), "operator", "swiftbar"));
149
+ const sourcePath = path.join(sourceDir, SWIFTBAR_PLUGIN_NAME);
150
+ const rendererPath = path.join(sourceDir, SWIFTBAR_RENDERER_NAME);
151
+ assertReadableFile(sourcePath, "SwiftBar wrapper");
152
+ assertReadableFile(rendererPath, "SwiftBar renderer");
153
+ fs.mkdirSync(pluginDir, { recursive: true });
154
+ let backupPath = null;
155
+ const mode = opts.copy ? "copy" : "symlink";
156
+ if (mode === "symlink") {
157
+ backupPath = replaceExistingPlugin(pluginPath, sourcePath, opts.now);
158
+ fs.symlinkSync(sourcePath, pluginPath);
159
+ }
160
+ else {
161
+ backupPath = replaceExistingPlugin(pluginPath, sourcePath, opts.now);
162
+ fs.copyFileSync(sourcePath, pluginPath);
163
+ fs.copyFileSync(rendererPath, path.join(pluginDir, SWIFTBAR_RENDERER_NAME));
164
+ fs.chmodSync(pluginPath, 0o755);
165
+ }
166
+ transcript.push("Menu bar installed.");
167
+ // --- Make it visible: launch/refresh SwiftBar, or hand back a recovery ---
168
+ // Invariant: when `menuVisible` is false on a non-skipped install, `recovery`
169
+ // is ALWAYS non-null. Callers (postinstall, update) branch on that, so a
170
+ // launch/config failure can never be laundered into a silent "installed".
171
+ let swiftBarOpened = false;
172
+ let menuVisible = false;
173
+ let recovery = null;
174
+ if (!swiftBarDetected) {
175
+ recovery = buildRecovery(host.hasHomebrew());
176
+ transcript.push("SwiftBar is not installed — it is the free app that draws Rift's menu bar icon.");
177
+ transcript.push(` ${recovery}`);
178
+ }
179
+ else if (pluginDirSource === "default") {
180
+ // SwiftBar is present but we could NOT tell it which folder to scan: it had
181
+ // no PluginDirectory configured and `defaults write` failed. Launching it
182
+ // now would just prompt the user to pick a folder, so the icon is not
183
+ // reliably shown. Be honest — attempt the launch, but report not-visible
184
+ // with the one manual step (point SwiftBar at our folder).
185
+ const wasRunning = host.isSwiftBarRunning();
186
+ swiftBarOpened = host.openSwiftBar(wasRunning);
187
+ recovery =
188
+ "SwiftBar could not be pointed at Rift's plugin folder automatically. " +
189
+ `Open SwiftBar's preferences and set the plugin folder to ${pluginDir}, ` +
190
+ "then re-run: rift menubar install";
191
+ transcript.push("SwiftBar is installed, but Rift could not set its plugin folder automatically.");
192
+ transcript.push(` ${recovery}`);
193
+ }
194
+ else {
195
+ const wasRunning = host.isSwiftBarRunning();
196
+ swiftBarOpened = host.openSwiftBar(wasRunning);
197
+ menuVisible = swiftBarOpened;
198
+ if (swiftBarOpened) {
199
+ transcript.push(wasRunning
200
+ ? "Refreshed the Rift menu in SwiftBar — the icon is in your menu bar."
201
+ : "Launched SwiftBar — the Rift icon should appear in your menu bar.");
202
+ }
203
+ else {
204
+ // App is there and pointed at the right folder, but we could not drive it
205
+ // (sandboxed context, GUI session unavailable, etc.). Not a silent
206
+ // success: hand back the one manual step.
207
+ recovery =
208
+ "SwiftBar is installed but Rift could not launch it automatically. " +
209
+ "Open SwiftBar yourself to show the Rift icon.";
210
+ transcript.push("SwiftBar is installed but could not be launched automatically.");
211
+ transcript.push(` ${recovery}`);
212
+ }
213
+ }
214
+ return {
215
+ ok: true,
216
+ skipped: false,
217
+ reason: null,
218
+ pluginDir,
219
+ pluginPath,
220
+ sourceDir,
221
+ sourcePath,
222
+ rendererPath,
223
+ mode,
224
+ backupPath,
225
+ swiftBarDetected,
226
+ swiftBarOpened,
227
+ pluginDirSource,
228
+ menuVisible,
229
+ recovery,
230
+ transcript,
231
+ };
232
+ }
233
+ /** Plain-language recovery line for a machine without SwiftBar installed. */
234
+ function buildRecovery(hasHomebrew) {
235
+ return hasHomebrew
236
+ ? "Install it: brew install --cask swiftbar — then re-run: rift menubar install"
237
+ : `Download it from ${SWIFTBAR_DOWNLOAD_URL}, then re-run: rift menubar install`;
238
+ }
239
+ function assertReadableFile(filePath, label) {
240
+ if (!fs.existsSync(filePath) || !fs.statSync(filePath).isFile()) {
241
+ throw new Error(`${label} missing from package: ${filePath}`);
242
+ }
243
+ }
244
+ function replaceExistingPlugin(pluginPath, sourcePath, now) {
245
+ let stat;
246
+ try {
247
+ stat = fs.lstatSync(pluginPath);
248
+ }
249
+ catch {
250
+ return null;
251
+ }
252
+ if (stat.isSymbolicLink()) {
253
+ const target = fs.readlinkSync(pluginPath);
254
+ const resolved = path.resolve(path.dirname(pluginPath), target);
255
+ if (resolved === sourcePath) {
256
+ fs.unlinkSync(pluginPath);
257
+ return null;
258
+ }
259
+ fs.unlinkSync(pluginPath);
260
+ return null;
261
+ }
262
+ const stamp = toBackupStamp((now ? now() : new Date()).toISOString());
263
+ const backupPath = `${pluginPath}.bak.${stamp}`;
264
+ fs.renameSync(pluginPath, backupPath);
265
+ return backupPath;
266
+ }
267
+ function toBackupStamp(iso) {
268
+ return iso.replace(/[:.]/g, "-");
269
+ }
270
+ function findPackageRoot() {
271
+ let dir = path.dirname(fileURLToPath(import.meta.url));
272
+ for (let i = 0; i < 8; i += 1) {
273
+ if (fs.existsSync(path.join(dir, "package.json")) &&
274
+ fs.existsSync(path.join(dir, "operator", "swiftbar", SWIFTBAR_PLUGIN_NAME))) {
275
+ return dir;
276
+ }
277
+ const parent = path.dirname(dir);
278
+ if (parent === dir)
279
+ break;
280
+ dir = parent;
281
+ }
282
+ throw new Error("Could not locate packaged SwiftBar assets.");
283
+ }
284
+ // ---------------------------------------------------------------------------
285
+ // Default host: real, best-effort system operations. Every call swallows its
286
+ // own failures and degrades to a safe value — a missing `defaults`/`open`/
287
+ // `brew`/`pgrep`, a sandboxed context, or a non-macOS host never throws.
288
+ // ---------------------------------------------------------------------------
289
+ export function defaultMenuBarHost(homeDir) {
290
+ return {
291
+ findSwiftBarApp() {
292
+ const candidates = [
293
+ "/Applications/SwiftBar.app",
294
+ path.join(homeDir, "Applications", "SwiftBar.app"),
295
+ ];
296
+ const direct = candidates.find((candidate) => fs.existsSync(candidate));
297
+ if (direct)
298
+ return direct;
299
+ // Fallback: a SwiftBar installed somewhere non-standard (direct download
300
+ // dragged elsewhere, Setapp, etc.) is still registered with macOS. Ask
301
+ // LaunchServices via Spotlight for the bundle id so we don't mislabel a
302
+ // present app as "missing" and skip reading its real plugin folder.
303
+ const found = runCapture("mdfind", [
304
+ `kMDItemCFBundleIdentifier == '${SWIFTBAR_DEFAULTS_DOMAIN}'`,
305
+ ]);
306
+ if (found) {
307
+ const first = found.split("\n")[0]?.trim();
308
+ if (first && fs.existsSync(first))
309
+ return first;
310
+ }
311
+ return null;
312
+ },
313
+ readPluginDirectory() {
314
+ const raw = runCapture("defaults", [
315
+ "read",
316
+ SWIFTBAR_DEFAULTS_DOMAIN,
317
+ "PluginDirectory",
318
+ ]);
319
+ if (!raw)
320
+ return null;
321
+ return expandTilde(raw.trim(), homeDir);
322
+ },
323
+ writePluginDirectory(dir) {
324
+ return runOk("defaults", [
325
+ "write",
326
+ SWIFTBAR_DEFAULTS_DOMAIN,
327
+ "PluginDirectory",
328
+ "-string",
329
+ dir,
330
+ ]);
331
+ },
332
+ isSwiftBarRunning() {
333
+ // pgrep exits 0 when a match exists, 1 when none — runOk maps that.
334
+ return runOk("pgrep", ["-x", "SwiftBar"]);
335
+ },
336
+ openSwiftBar(refresh) {
337
+ if (refresh) {
338
+ // Ask a running SwiftBar to reload plugins so a just-updated wrapper
339
+ // is reflected immediately; fall through to a plain launch if that
340
+ // URL scheme is unavailable.
341
+ if (runOk("open", ["-g", "swiftbar://refreshallplugins"]))
342
+ return true;
343
+ }
344
+ // `-g` launches in the background without stealing focus from the user.
345
+ return runOk("open", ["-g", "-a", "SwiftBar"]);
346
+ },
347
+ hasHomebrew() {
348
+ return runOk("/bin/sh", ["-c", "command -v brew"]);
349
+ },
350
+ };
351
+ }
352
+ /** Expand a leading `~` to the home dir; SwiftBar stores `~`-relative paths. */
353
+ function expandTilde(value, homeDir) {
354
+ if (value === "~")
355
+ return homeDir;
356
+ if (value.startsWith("~/"))
357
+ return path.join(homeDir, value.slice(2));
358
+ return value;
359
+ }
360
+ /** Run a command, return trimmed stdout, or null on any non-zero/failure. */
361
+ function runCapture(cmd, args) {
362
+ try {
363
+ const out = execFileSync(cmd, args, {
364
+ encoding: "utf8",
365
+ stdio: ["ignore", "pipe", "ignore"],
366
+ timeout: 10_000,
367
+ });
368
+ const trimmed = out.trim();
369
+ return trimmed.length > 0 ? trimmed : null;
370
+ }
371
+ catch {
372
+ return null;
373
+ }
374
+ }
375
+ /** Run a command, return true on exit 0, false on any non-zero/failure. */
376
+ function runOk(cmd, args) {
377
+ try {
378
+ execFileSync(cmd, args, {
379
+ stdio: ["ignore", "ignore", "ignore"],
380
+ timeout: 10_000,
381
+ });
382
+ return true;
383
+ }
384
+ catch {
385
+ return false;
386
+ }
387
+ }
388
+ //# sourceMappingURL=menubar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"menubar.js","sourceRoot":"","sources":["../../../../src/cli/commands/menubar.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEhE,MAAM,CAAC,MAAM,oBAAoB,GAAG,aAAa,CAAC;AAClD,MAAM,CAAC,MAAM,sBAAsB,GAAG,gBAAgB,CAAC;AAEvD,8EAA8E;AAC9E,MAAM,CAAC,MAAM,wBAAwB,GAAG,oBAAoB,CAAC;AAC7D,MAAM,qBAAqB,GAAG,sBAAsB,CAAC;AAiFrD,MAAM,UAAU,kBAAkB;IAChC,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,sCAAsC,CAAC,CAAC;IAEvF,GAAG;SACA,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,6CAA6C,CAAC;SAC1D,MAAM,CAAC,qBAAqB,EAAE,sCAAsC,CAAC;SACrE,MAAM,CAAC,QAAQ,EAAE,0DAA0D,CAAC;SAC5E,MAAM,CAAC,OAAO,EAAE,uDAAuD,CAAC;SACxE,MAAM,CAAC,CAAC,IAA8B,EAAE,OAAO,EAAE,EAAE;QAClD,MAAM,UAAU,GAAG,OAAO,CAAC,eAAe,EAAwB,CAAC;QACnE,IAAI,MAA4B,CAAC;QACjC,IAAI,CAAC;YACH,MAAM,WAAW,GAA0B,EAAE,CAAC;YAC9C,IAAI,IAAI,CAAC,SAAS;gBAAE,WAAW,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YAC3D,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;gBAAE,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YAC1D,MAAM,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;gBACpB,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;YAC3C,CAAC;iBAAM,CAAC;gBACN,UAAU,CAAC,4BAA4B,OAAO,EAAE,CAAC,CAAC;YACpD,CAAC;YACD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QACD,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;YACpB,SAAS,CAAC,MAAM,CAAC,CAAC;QACpB,CAAC;aAAM,CAAC;YACN,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,UAAU;gBAAE,SAAS,CAAC,IAAI,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,EAAE;YAAE,OAAO,CAAC,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEL,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE;IAC7D,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;AACrF,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,OAA8B,EAAE;IAEhC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC;IACnD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;IAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAEtD,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,8BAA8B,CAAC;QAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAC5B,IAAI,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,wBAAwB,CAAC,OAAO,CAAC,CAC5F,CAAC;QACF,OAAO;YACL,EAAE,EAAE,IAAI;YACR,OAAO,EAAE,IAAI;YACb,MAAM;YACN,SAAS;YACT,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,oBAAoB,CAAC;YACtD,SAAS,EAAE,IAAI;YACf,UAAU,EAAE,IAAI;YAChB,YAAY,EAAE,IAAI;YAClB,IAAI,EAAE,IAAI;YACV,UAAU,EAAE,IAAI;YAChB,gBAAgB,EAAE,KAAK;YACvB,cAAc,EAAE,KAAK;YACrB,eAAe,EAAE,SAAS;YAC1B,WAAW,EAAE,KAAK;YAClB,QAAQ,EAAE,IAAI;YACd,UAAU,EAAE,CAAC,qBAAqB,MAAM,EAAE,CAAC;SAC5C,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;IAC3C,MAAM,gBAAgB,GAAG,WAAW,KAAK,IAAI,CAAC;IAE9C,oEAAoE;IACpE,yEAAyE;IACzE,0EAA0E;IAC1E,4EAA4E;IAC5E,qEAAqE;IACrE,MAAM,WAAW,GACf,IAAI,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,IAAI,CAAC;IACjE,IAAI,eAAwD,CAAC;IAC7D,IAAI,WAAmB,CAAC;IACxB,IAAI,WAAW,EAAE,CAAC;QAChB,WAAW,GAAG,WAAW,CAAC;QAC1B,eAAe,GAAG,UAAU,CAAC;IAC/B,CAAC;SAAM,CAAC;QACN,MAAM,UAAU,GAAG,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACxE,IAAI,UAAU,EAAE,CAAC;YACf,WAAW,GAAG,UAAU,CAAC;YACzB,eAAe,GAAG,YAAY,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,WAAW,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAC;YAChD,mEAAmE;YACnE,iEAAiE;YACjE,IAAI,gBAAgB,IAAI,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC/D,eAAe,GAAG,iBAAiB,CAAC;YACtC,CAAC;iBAAM,CAAC;gBACN,eAAe,GAAG,SAAS,CAAC;YAC9B,CAAC;QACH,CAAC;IACH,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;IAC9D,MAAM,UAAU,GAAa,EAAE,CAAC;IAEhC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAC5B,IAAI,CAAC,SAAS;QACZ,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,eAAe,EAAE,EAAE,UAAU,EAAE,UAAU,CAAC,CAC3E,CAAC;IACF,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;IAC9D,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,sBAAsB,CAAC,CAAC;IAClE,kBAAkB,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;IACnD,kBAAkB,CAAC,YAAY,EAAE,mBAAmB,CAAC,CAAC;IAEtD,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE7C,IAAI,UAAU,GAAkB,IAAI,CAAC;IACrC,MAAM,IAAI,GAAuB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IAChE,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,UAAU,GAAG,qBAAqB,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QACrE,EAAE,CAAC,WAAW,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACzC,CAAC;SAAM,CAAC;QACN,UAAU,GAAG,qBAAqB,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QACrE,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QACxC,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,sBAAsB,CAAC,CAAC,CAAC;QAC5E,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAClC,CAAC;IAED,UAAU,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAEvC,4EAA4E;IAC5E,8EAA8E;IAC9E,yEAAyE;IACzE,0EAA0E;IAC1E,IAAI,cAAc,GAAG,KAAK,CAAC;IAC3B,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,IAAI,QAAQ,GAAkB,IAAI,CAAC;IACnC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAC7C,UAAU,CAAC,IAAI,CACb,iFAAiF,CAClF,CAAC;QACF,UAAU,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC;IACnC,CAAC;SAAM,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;QACzC,4EAA4E;QAC5E,0EAA0E;QAC1E,sEAAsE;QACtE,yEAAyE;QACzE,2DAA2D;QAC3D,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC5C,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QAC/C,QAAQ;YACN,uEAAuE;gBACvE,4DAA4D,SAAS,IAAI;gBACzE,mCAAmC,CAAC;QACtC,UAAU,CAAC,IAAI,CACb,gFAAgF,CACjF,CAAC;QACF,UAAU,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC;IACnC,CAAC;SAAM,CAAC;QACN,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC5C,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QAC/C,WAAW,GAAG,cAAc,CAAC;QAC7B,IAAI,cAAc,EAAE,CAAC;YACnB,UAAU,CAAC,IAAI,CACb,UAAU;gBACR,CAAC,CAAC,qEAAqE;gBACvE,CAAC,CAAC,mEAAmE,CACxE,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,0EAA0E;YAC1E,mEAAmE;YACnE,0CAA0C;YAC1C,QAAQ;gBACN,oEAAoE;oBACpE,+CAA+C,CAAC;YAClD,UAAU,CAAC,IAAI,CACb,gEAAgE,CACjE,CAAC;YACF,UAAU,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED,OAAO;QACL,EAAE,EAAE,IAAI;QACR,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,IAAI;QACZ,SAAS;QACT,UAAU;QACV,SAAS;QACT,UAAU;QACV,YAAY;QACZ,IAAI;QACJ,UAAU;QACV,gBAAgB;QAChB,cAAc;QACd,eAAe;QACf,WAAW;QACX,QAAQ;QACR,UAAU;KACX,CAAC;AACJ,CAAC;AAED,6EAA6E;AAC7E,SAAS,aAAa,CAAC,WAAoB;IACzC,OAAO,WAAW;QAChB,CAAC,CAAC,8EAA8E;QAChF,CAAC,CAAC,oBAAoB,qBAAqB,qCAAqC,CAAC;AACrF,CAAC;AAED,SAAS,kBAAkB,CAAC,QAAgB,EAAE,KAAa;IACzD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;QAChE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,0BAA0B,QAAQ,EAAE,CAAC,CAAC;IAChE,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAC5B,UAAkB,EAClB,UAAkB,EAClB,GAA6B;IAE7B,IAAI,IAAc,CAAC;IACnB,IAAI,CAAC;QACH,IAAI,GAAG,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,CAAC;QAChE,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;YAC5B,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YAC1B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,KAAK,GAAG,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IACtE,MAAM,UAAU,GAAG,GAAG,UAAU,QAAQ,KAAK,EAAE,CAAC;IAChD,EAAE,CAAC,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACtC,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,aAAa,CAAC,GAAW;IAChC,OAAO,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,eAAe;IACtB,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACvD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,IACE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;YAC7C,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,UAAU,EAAE,oBAAoB,CAAC,CAAC,EAC3E,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,MAAM,KAAK,GAAG;YAAE,MAAM;QAC1B,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;AAChE,CAAC;AAED,8EAA8E;AAC9E,6EAA6E;AAC7E,2EAA2E;AAC3E,yEAAyE;AACzE,8EAA8E;AAE9E,MAAM,UAAU,kBAAkB,CAAC,OAAe;IAChD,OAAO;QACL,eAAe;YACb,MAAM,UAAU,GAAG;gBACjB,4BAA4B;gBAC5B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,cAAc,CAAC;aACnD,CAAC;YACF,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;YACxE,IAAI,MAAM;gBAAE,OAAO,MAAM,CAAC;YAC1B,yEAAyE;YACzE,uEAAuE;YACvE,wEAAwE;YACxE,oEAAoE;YACpE,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE;gBACjC,iCAAiC,wBAAwB,GAAG;aAC7D,CAAC,CAAC;YACH,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;gBAC3C,IAAI,KAAK,IAAI,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC;oBAAE,OAAO,KAAK,CAAC;YAClD,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,mBAAmB;YACjB,MAAM,GAAG,GAAG,UAAU,CAAC,UAAU,EAAE;gBACjC,MAAM;gBACN,wBAAwB;gBACxB,iBAAiB;aAClB,CAAC,CAAC;YACH,IAAI,CAAC,GAAG;gBAAE,OAAO,IAAI,CAAC;YACtB,OAAO,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;QAC1C,CAAC;QAED,oBAAoB,CAAC,GAAW;YAC9B,OAAO,KAAK,CAAC,UAAU,EAAE;gBACvB,OAAO;gBACP,wBAAwB;gBACxB,iBAAiB;gBACjB,SAAS;gBACT,GAAG;aACJ,CAAC,CAAC;QACL,CAAC;QAED,iBAAiB;YACf,oEAAoE;YACpE,OAAO,KAAK,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;QAC5C,CAAC;QAED,YAAY,CAAC,OAAgB;YAC3B,IAAI,OAAO,EAAE,CAAC;gBACZ,qEAAqE;gBACrE,mEAAmE;gBACnE,6BAA6B;gBAC7B,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,8BAA8B,CAAC,CAAC;oBAAE,OAAO,IAAI,CAAC;YACzE,CAAC;YACD,wEAAwE;YACxE,OAAO,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;QACjD,CAAC;QAED,WAAW;YACT,OAAO,KAAK,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC;QACrD,CAAC;KACF,CAAC;AACJ,CAAC;AAED,gFAAgF;AAChF,SAAS,WAAW,CAAC,KAAa,EAAE,OAAe;IACjD,IAAI,KAAK,KAAK,GAAG;QAAE,OAAO,OAAO,CAAC;IAClC,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACtE,OAAO,KAAK,CAAC;AACf,CAAC;AAED,6EAA6E;AAC7E,SAAS,UAAU,CAAC,GAAW,EAAE,IAAc;IAC7C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE;YAClC,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;YACnC,OAAO,EAAE,MAAM;SAChB,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QAC3B,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,2EAA2E;AAC3E,SAAS,KAAK,CAAC,GAAW,EAAE,IAAc;IACxC,IAAI,CAAC;QACH,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE;YACtB,KAAK,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;YACrC,OAAO,EAAE,MAAM;SAChB,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -1,8 +1,60 @@
1
+ import readline from "node:readline";
1
2
  import { Command } from "commander";
2
3
  import { loadRiftEnv } from "../../runtime/rift-env.js";
3
4
  import { validateVoyageKey } from "../../onboarding/voyage-validate.js";
4
5
  import { writeEnvFile } from "../../onboarding/env-file.js";
6
+ import { type RelaySecretStore } from "../feedback/relay-secret-store.js";
7
+ /**
8
+ * Commander.js note on `--no-<flag>` shape.
9
+ *
10
+ * `.option("--no-foo", ...)` sets `opts.foo = false` on the parsed
11
+ * options, NOT `opts.noFoo = true`. Two consequences:
12
+ * 1. We accept BOTH shapes in this interface: the affirmative key
13
+ * (`codexCapture: boolean`, `importExport: string | boolean`, …)
14
+ * is what Commander populates; the `no*` keys exist purely so
15
+ * tests that drive `runOnboard` programmatically can keep passing
16
+ * `{ noCodexCapture: true }` without going through the parser.
17
+ * 2. Every read goes through `isOff(opts, "<affirmative>", "<no*>")`
18
+ * so a real CLI invocation and a programmatic one resolve to the
19
+ * same truth. Reading only `opts.no*` (the pre-2026-05-19 bug)
20
+ * silently ignored the CLI form.
21
+ */
22
+ interface OnboardOpts {
23
+ voyageKey?: string | boolean;
24
+ noVoyageKey?: boolean;
25
+ voyageLabel?: string;
26
+ invite?: string;
27
+ enableFeedbackRelay?: string;
28
+ relaySecret?: string;
29
+ allowUnsignedFeedbackRelay?: boolean;
30
+ feedbackRelay?: boolean;
31
+ noFeedbackRelay?: boolean;
32
+ email?: string;
33
+ importExport?: string | boolean;
34
+ noImportExport?: boolean;
35
+ reconfigureVoyage?: boolean;
36
+ yes?: boolean;
37
+ skipCapture?: boolean;
38
+ withClaudeHook?: boolean;
39
+ claudeHook?: boolean;
40
+ noClaudeHook?: boolean;
41
+ codexCapture?: boolean;
42
+ noCodexCapture?: boolean;
43
+ enableCodexEnrichment?: boolean;
44
+ enableCapture?: boolean;
45
+ }
46
+ /**
47
+ * Resolve a `--no-<flag>` to a single boolean ("yes, skip this thing").
48
+ * Commander populates the affirmative key with `false`; programmatic
49
+ * callers may pass the `no*` key with `true`. Either form wins.
50
+ */
51
+ export declare function isOff<K extends keyof OnboardOpts, N extends keyof OnboardOpts>(opts: OnboardOpts, affirmative: K, negative: N): boolean;
52
+ interface GlobalOpts {
53
+ config: string;
54
+ json: boolean;
55
+ }
5
56
  export declare function makeOnboardCommand(): Command;
57
+ export declare function runOnboard(opts: OnboardOpts, globalOpts: GlobalOpts): Promise<void>;
6
58
  /**
7
59
  * Sanitize a raw `--voyage-label`, persist it when valid, and return the
8
60
  * string the caller should use for display. Invalid labels are dropped
@@ -27,6 +79,36 @@ export declare function applyVoyageLabel(rawLabel: string | undefined, configPat
27
79
  * string in the file.
28
80
  */
29
81
  export declare function persistVoyageLabel(configPath: string, label: string): void;
82
+ /**
83
+ * Persist the Codex AI-metadata-enrichment opt-in into config.json. Default
84
+ * onboarding leaves `enrichment.ai_metadata = false` (AI-free import + keyword
85
+ * search, zero Codex calls). When the user passes `--enable-codex-enrichment`,
86
+ * this flips it to true so the daemon/worker select the Codex-backed extractor.
87
+ * Backs the file up first, mirroring `persistVoyageLabel`.
88
+ *
89
+ * Exported for orchestrator-level tests; `runOnboard` is the only production
90
+ * caller. Returns true when the flag was set and persisted, false otherwise.
91
+ */
92
+ export declare function applyCodexEnrichmentOptIn(enable: boolean | undefined, configPath: string, emit: (line: string) => void): boolean;
93
+ /**
94
+ * Persist the scheduled-capture opt-in. Default install writes
95
+ * `capture.enabled = false` (trust-first: zero Codex calls on a fresh
96
+ * machine). When the user passes `--enable-capture`, this flips it to true
97
+ * so the daemon runs auto-capture on its interval. Backs the file up first,
98
+ * mirroring `applyCodexEnrichmentOptIn`.
99
+ *
100
+ * Exported for orchestrator-level tests; `runOnboard` is the only production
101
+ * caller. Returns true when the flag was set and persisted, false otherwise.
102
+ */
103
+ export declare function applyCaptureOptIn(enable: boolean | undefined, configPath: string, emit: (line: string) => void): boolean;
104
+ /**
105
+ * Resolve the Voyage key, or `""` to mean "finish without a key" (keyword-only
106
+ * lexical mode). The key is no longer mandatory: a friend can import and search
107
+ * first, then add a key later for semantic ranking. Returns `""` on explicit
108
+ * opt-out (`--no-voyage-key`), on `--yes` with no key available, or when the
109
+ * interactive prompt is left blank.
110
+ */
111
+ export declare function collectVoyageKey(opts: OnboardOpts, rl: readline.Interface): Promise<string>;
30
112
  type DaemonRefreshOutcome = {
31
113
  ok: true;
32
114
  kickstarted: boolean;
@@ -35,9 +117,56 @@ type DaemonRefreshOutcome = {
35
117
  reason: string;
36
118
  kind: "not_configured" | "agent_not_loaded" | "kickstart_failed" | "health_failed" | "smoke_failed";
37
119
  };
120
+ /**
121
+ * Result of ensureToken. Per A-1.1: existing-token is success
122
+ * (`source: "existing"`), not a failure variant. Per A-1.2: the
123
+ * locked-keychain classification covers reads (readToken /
124
+ * findLatestVersion) and writes (issueToken) — they share the same
125
+ * macOS error string.
126
+ */
127
+ export type EnsureTokenResult = {
128
+ ok: true;
129
+ token: string;
130
+ source: "existing" | "issued";
131
+ } | {
132
+ ok: false;
133
+ reason: "keychain_locked" | "other";
134
+ message: string;
135
+ hint: string;
136
+ };
137
+ export declare function classifyTokenFailure(err: unknown): {
138
+ reason: "keychain_locked" | "other";
139
+ message: string;
140
+ };
141
+ export declare function ensureToken(configPath: string): Promise<EnsureTokenResult>;
142
+ export declare function describeTokenFailure(reason: string): string;
143
+ interface FeedbackConfig {
144
+ enabled: boolean;
145
+ url?: string;
146
+ installation_id?: string;
147
+ email?: string;
148
+ unsigned?: boolean;
149
+ }
150
+ /**
151
+ * Conservative email check — enough to catch obvious typos at the prompt;
152
+ * the relay endpoint can re-validate. Returns the normalized (trimmed,
153
+ * lowercased) address, or undefined if it doesn't look like an email.
154
+ */
155
+ export declare function normalizeEmail(raw: string): string | undefined;
156
+ /**
157
+ * Bundled "stay connected" opt-in. One yes/no that, on yes, collects an
158
+ * email used for product news, pricing, a leaving-beta heads-up, and a
159
+ * feedback channel. Opt-in only: `--yes` alone never subscribes (consent
160
+ * must be active), `--no-feedback-relay` declines, and `--email` subscribes
161
+ * non-interactively. The relay URL stays operator-only infra; when none is
162
+ * configured the email is captured locally (sidecar + beta-signups.jsonl)
163
+ * and reaches the operator once an endpoint is wired.
164
+ */
165
+ export declare function collectFeedbackPreference(opts: OnboardOpts, dataDir: string, rl: readline.Interface, store?: RelaySecretStore): Promise<FeedbackConfig>;
38
166
  export declare function runFirstCapturePass(configPath: string, dataDir: string): Promise<{
39
167
  saved: number;
40
168
  reviewed: number;
169
+ fatal?: boolean;
41
170
  }>;
42
171
  export type RecallResult = {
43
172
  ok: true;
@@ -47,15 +176,24 @@ export type RecallResult = {
47
176
  reason: string;
48
177
  };
49
178
  /**
50
- * Pure outcome decision for the next-action card. Onboarding is only
51
- * "complete" when this run actually ingested user data AND a recall
52
- * query against the freshly-ingested data returned at least one hit.
53
- * Smoke is non-indexing (see daemonRefreshFlow), so any hit is real
54
- * user data, not a leftover probe.
179
+ * Pure outcome decision for the next-action card.
180
+ *
181
+ * "Complete + verified" needs both: this run ingested user data AND a recall
182
+ * query returned a hit (smoke is non-indexing see daemonRefreshFlow so a
183
+ * hit is real user data, not a leftover probe).
184
+ *
185
+ * But an EMPTY archive is not a failure. By default capture is OFF (zero-Codex
186
+ * trust default) and import is optional, so a friend who simply presses Enter
187
+ * past the import prompt has finished a valid setup — they just have nothing to
188
+ * recall yet. That case (`ingestAttempted === false`) is reported as DONE, not
189
+ * "incomplete". We only flag a retry when an ingest was actually attempted and
190
+ * still added nothing.
55
191
  */
56
192
  export declare function decideOnboardOutcome(input: {
57
193
  ingestedAny: boolean;
58
194
  recall: RecallResult;
195
+ /** True when capture ran or an import was attempted this run. */
196
+ ingestAttempted?: boolean;
59
197
  }): string[];
60
198
  export interface ReconfigureDeps {
61
199
  key: string;
@@ -1 +1 @@
1
- {"version":3,"file":"onboard.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/onboard.ts"],"names":[],"mappings":"AA2BA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,OAAO,EAEL,WAAW,EACZ,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAmD5D,wBAAgB,kBAAkB,IAAI,OAAO,CAsC5C;AAuLD;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAC3B,MAAM,GAAG,IAAI,CAgBf;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAmC1E;AA6DD,KAAK,oBAAoB,GACrB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,GAClC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,gBAAgB,GAAG,kBAAkB,GAAG,kBAAkB,GAAG,eAAe,GAAG,cAAc,CAAA;CAAE,CAAC;AAgOvI,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAqD9C;AAqFD,MAAM,MAAM,YAAY,GACpB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC1B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAElC;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAC1C,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE,YAAY,CAAC;CACtB,GAAG,MAAM,EAAE,CAyBX;AAwDD,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAC7C,qEAAqE;IACrE,QAAQ,CAAC,EAAE,OAAO,iBAAiB,CAAC;IACpC,6DAA6D;IAC7D,KAAK,CAAC,EAAE,OAAO,YAAY,CAAC;IAC5B,wDAAwD;IACxD,OAAO,CAAC,EAAE,OAAO,WAAW,CAAC;IAC7B,0CAA0C;IAC1C,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/B;AAED;;;;;;;;;GASG;AACH,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,eAAe,GACpB,OAAO,CAAC,IAAI,CAAC,CAgCf;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,iBAAiB,EAC9B,oBAAoB,EAAE,MAAM,GAAG,SAAS,GACvC,IAAI,CAyBN"}
1
+ {"version":3,"file":"onboard.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/onboard.ts"],"names":[],"mappings":"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"}