@getrift/rift 0.0.0 → 0.1.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (651) hide show
  1. package/README.dev.md +110 -0
  2. package/dist/src/auth/keychain.d.ts +25 -0
  3. package/dist/src/auth/keychain.d.ts.map +1 -0
  4. package/dist/src/auth/keychain.js +113 -0
  5. package/dist/src/auth/keychain.js.map +1 -0
  6. package/dist/src/auth/middleware.d.ts +20 -0
  7. package/dist/src/auth/middleware.d.ts.map +1 -0
  8. package/dist/src/auth/middleware.js +49 -0
  9. package/dist/src/auth/middleware.js.map +1 -0
  10. package/dist/src/auth/rate-limit.d.ts +16 -0
  11. package/dist/src/auth/rate-limit.d.ts.map +1 -0
  12. package/dist/src/auth/rate-limit.js +38 -0
  13. package/dist/src/auth/rate-limit.js.map +1 -0
  14. package/dist/src/auth/rotation.d.ts +67 -0
  15. package/dist/src/auth/rotation.d.ts.map +1 -0
  16. package/dist/src/auth/rotation.js +190 -0
  17. package/dist/src/auth/rotation.js.map +1 -0
  18. package/dist/src/backfill/project-context-batch-constructor.d.ts +127 -0
  19. package/dist/src/backfill/project-context-batch-constructor.d.ts.map +1 -0
  20. package/dist/src/backfill/project-context-batch-constructor.js +210 -0
  21. package/dist/src/backfill/project-context-batch-constructor.js.map +1 -0
  22. package/dist/src/capture/auto-capture.d.ts +162 -0
  23. package/dist/src/capture/auto-capture.d.ts.map +1 -0
  24. package/dist/src/capture/auto-capture.js +601 -0
  25. package/dist/src/capture/auto-capture.js.map +1 -0
  26. package/dist/src/capture/batch-budget.d.ts +90 -0
  27. package/dist/src/capture/batch-budget.d.ts.map +1 -0
  28. package/dist/src/capture/batch-budget.js +148 -0
  29. package/dist/src/capture/batch-budget.js.map +1 -0
  30. package/dist/src/capture/codex-cli-triage-provider.d.ts +17 -0
  31. package/dist/src/capture/codex-cli-triage-provider.d.ts.map +1 -0
  32. package/dist/src/capture/codex-cli-triage-provider.js +109 -0
  33. package/dist/src/capture/codex-cli-triage-provider.js.map +1 -0
  34. package/dist/src/capture/observability.d.ts +42 -0
  35. package/dist/src/capture/observability.d.ts.map +1 -0
  36. package/dist/src/capture/observability.js +87 -0
  37. package/dist/src/capture/observability.js.map +1 -0
  38. package/dist/src/capture/openai-triage-provider.d.ts +92 -0
  39. package/dist/src/capture/openai-triage-provider.d.ts.map +1 -0
  40. package/dist/src/capture/openai-triage-provider.js +267 -0
  41. package/dist/src/capture/openai-triage-provider.js.map +1 -0
  42. package/dist/src/capture/review-queue-index.d.ts +51 -0
  43. package/dist/src/capture/review-queue-index.d.ts.map +1 -0
  44. package/dist/src/capture/review-queue-index.js +204 -0
  45. package/dist/src/capture/review-queue-index.js.map +1 -0
  46. package/dist/src/capture/review-queue.d.ts +43 -0
  47. package/dist/src/capture/review-queue.d.ts.map +1 -0
  48. package/dist/src/capture/review-queue.js +116 -0
  49. package/dist/src/capture/review-queue.js.map +1 -0
  50. package/dist/src/capture/sources.d.ts +7 -0
  51. package/dist/src/capture/sources.d.ts.map +1 -0
  52. package/dist/src/capture/sources.js +3 -0
  53. package/dist/src/capture/sources.js.map +1 -0
  54. package/dist/src/capture/triage-lane.d.ts +39 -0
  55. package/dist/src/capture/triage-lane.d.ts.map +1 -0
  56. package/dist/src/capture/triage-lane.js +217 -0
  57. package/dist/src/capture/triage-lane.js.map +1 -0
  58. package/dist/src/capture/triage-provider.d.ts +75 -0
  59. package/dist/src/capture/triage-provider.d.ts.map +1 -0
  60. package/dist/src/capture/triage-provider.js +120 -0
  61. package/dist/src/capture/triage-provider.js.map +1 -0
  62. package/dist/src/capture/triage.d.ts +30 -0
  63. package/dist/src/capture/triage.d.ts.map +1 -0
  64. package/dist/src/capture/triage.js +48 -0
  65. package/dist/src/capture/triage.js.map +1 -0
  66. package/dist/src/cli/commands/backfill.d.ts +3 -0
  67. package/dist/src/cli/commands/backfill.d.ts.map +1 -0
  68. package/dist/src/cli/commands/backfill.js +1376 -0
  69. package/dist/src/cli/commands/backfill.js.map +1 -0
  70. package/dist/src/cli/commands/bulk-ingest.d.ts +3 -0
  71. package/dist/src/cli/commands/bulk-ingest.d.ts.map +1 -0
  72. package/dist/src/cli/commands/bulk-ingest.js +126 -0
  73. package/dist/src/cli/commands/bulk-ingest.js.map +1 -0
  74. package/dist/src/cli/commands/capture.d.ts +12 -0
  75. package/dist/src/cli/commands/capture.d.ts.map +1 -0
  76. package/dist/src/cli/commands/capture.js +123 -0
  77. package/dist/src/cli/commands/capture.js.map +1 -0
  78. package/dist/src/cli/commands/compact.d.ts +3 -0
  79. package/dist/src/cli/commands/compact.d.ts.map +1 -0
  80. package/dist/src/cli/commands/compact.js +70 -0
  81. package/dist/src/cli/commands/compact.js.map +1 -0
  82. package/dist/src/cli/commands/feedback.d.ts +22 -0
  83. package/dist/src/cli/commands/feedback.d.ts.map +1 -0
  84. package/dist/src/cli/commands/feedback.js +125 -0
  85. package/dist/src/cli/commands/feedback.js.map +1 -0
  86. package/dist/src/cli/commands/hooks-install.d.ts +19 -0
  87. package/dist/src/cli/commands/hooks-install.d.ts.map +1 -0
  88. package/dist/src/cli/commands/hooks-install.js +103 -0
  89. package/dist/src/cli/commands/hooks-install.js.map +1 -0
  90. package/dist/src/cli/commands/import.d.ts +19 -0
  91. package/dist/src/cli/commands/import.d.ts.map +1 -0
  92. package/dist/src/cli/commands/import.js +258 -0
  93. package/dist/src/cli/commands/import.js.map +1 -0
  94. package/dist/src/cli/commands/ingest.d.ts +3 -0
  95. package/dist/src/cli/commands/ingest.d.ts.map +1 -0
  96. package/dist/src/cli/commands/ingest.js +80 -0
  97. package/dist/src/cli/commands/ingest.js.map +1 -0
  98. package/dist/src/cli/commands/mcp-install.d.ts +25 -0
  99. package/dist/src/cli/commands/mcp-install.d.ts.map +1 -0
  100. package/dist/src/cli/commands/mcp-install.js +134 -0
  101. package/dist/src/cli/commands/mcp-install.js.map +1 -0
  102. package/dist/src/cli/commands/onboard.d.ts +98 -0
  103. package/dist/src/cli/commands/onboard.d.ts.map +1 -0
  104. package/dist/src/cli/commands/onboard.js +823 -0
  105. package/dist/src/cli/commands/onboard.js.map +1 -0
  106. package/dist/src/cli/commands/rebuild.d.ts +12 -0
  107. package/dist/src/cli/commands/rebuild.d.ts.map +1 -0
  108. package/dist/src/cli/commands/rebuild.js +164 -0
  109. package/dist/src/cli/commands/rebuild.js.map +1 -0
  110. package/dist/src/cli/commands/reconcile.d.ts +3 -0
  111. package/dist/src/cli/commands/reconcile.d.ts.map +1 -0
  112. package/dist/src/cli/commands/reconcile.js +56 -0
  113. package/dist/src/cli/commands/reconcile.js.map +1 -0
  114. package/dist/src/cli/commands/reindex.d.ts +3 -0
  115. package/dist/src/cli/commands/reindex.d.ts.map +1 -0
  116. package/dist/src/cli/commands/reindex.js +66 -0
  117. package/dist/src/cli/commands/reindex.js.map +1 -0
  118. package/dist/src/cli/commands/review.d.ts +13 -0
  119. package/dist/src/cli/commands/review.d.ts.map +1 -0
  120. package/dist/src/cli/commands/review.js +383 -0
  121. package/dist/src/cli/commands/review.js.map +1 -0
  122. package/dist/src/cli/commands/save.d.ts +3 -0
  123. package/dist/src/cli/commands/save.d.ts.map +1 -0
  124. package/dist/src/cli/commands/save.js +111 -0
  125. package/dist/src/cli/commands/save.js.map +1 -0
  126. package/dist/src/cli/commands/search.d.ts +35 -0
  127. package/dist/src/cli/commands/search.d.ts.map +1 -0
  128. package/dist/src/cli/commands/search.js +88 -0
  129. package/dist/src/cli/commands/search.js.map +1 -0
  130. package/dist/src/cli/commands/stats.d.ts +3 -0
  131. package/dist/src/cli/commands/stats.d.ts.map +1 -0
  132. package/dist/src/cli/commands/stats.js +42 -0
  133. package/dist/src/cli/commands/stats.js.map +1 -0
  134. package/dist/src/cli/commands/status.d.ts +15 -0
  135. package/dist/src/cli/commands/status.d.ts.map +1 -0
  136. package/dist/src/cli/commands/status.js +89 -0
  137. package/dist/src/cli/commands/status.js.map +1 -0
  138. package/dist/src/cli/commands/token-issue.d.ts +3 -0
  139. package/dist/src/cli/commands/token-issue.d.ts.map +1 -0
  140. package/dist/src/cli/commands/token-issue.js +25 -0
  141. package/dist/src/cli/commands/token-issue.js.map +1 -0
  142. package/dist/src/cli/commands/triage.d.ts +3 -0
  143. package/dist/src/cli/commands/triage.d.ts.map +1 -0
  144. package/dist/src/cli/commands/triage.js +125 -0
  145. package/dist/src/cli/commands/triage.js.map +1 -0
  146. package/dist/src/cli/commands/uninstall.d.ts +3 -0
  147. package/dist/src/cli/commands/uninstall.d.ts.map +1 -0
  148. package/dist/src/cli/commands/uninstall.js +238 -0
  149. package/dist/src/cli/commands/uninstall.js.map +1 -0
  150. package/dist/src/cli/feedback/feedback-config.d.ts +21 -0
  151. package/dist/src/cli/feedback/feedback-config.d.ts.map +1 -0
  152. package/dist/src/cli/feedback/feedback-config.js +43 -0
  153. package/dist/src/cli/feedback/feedback-config.js.map +1 -0
  154. package/dist/src/cli/feedback/feedback-history.d.ts +4 -0
  155. package/dist/src/cli/feedback/feedback-history.d.ts.map +1 -0
  156. package/dist/src/cli/feedback/feedback-history.js +115 -0
  157. package/dist/src/cli/feedback/feedback-history.js.map +1 -0
  158. package/dist/src/cli/feedback/feedback-payload.d.ts +53 -0
  159. package/dist/src/cli/feedback/feedback-payload.d.ts.map +1 -0
  160. package/dist/src/cli/feedback/feedback-payload.js +10 -0
  161. package/dist/src/cli/feedback/feedback-payload.js.map +1 -0
  162. package/dist/src/cli/feedback/feedback-relay.d.ts +15 -0
  163. package/dist/src/cli/feedback/feedback-relay.d.ts.map +1 -0
  164. package/dist/src/cli/feedback/feedback-relay.js +47 -0
  165. package/dist/src/cli/feedback/feedback-relay.js.map +1 -0
  166. package/dist/src/cli/feedback/feedback-status.d.ts +11 -0
  167. package/dist/src/cli/feedback/feedback-status.d.ts.map +1 -0
  168. package/dist/src/cli/feedback/feedback-status.js +122 -0
  169. package/dist/src/cli/feedback/feedback-status.js.map +1 -0
  170. package/dist/src/cli/hooks-writers/claude-code-policy-script.d.ts +25 -0
  171. package/dist/src/cli/hooks-writers/claude-code-policy-script.d.ts.map +1 -0
  172. package/dist/src/cli/hooks-writers/claude-code-policy-script.js +85 -0
  173. package/dist/src/cli/hooks-writers/claude-code-policy-script.js.map +1 -0
  174. package/dist/src/cli/hooks-writers/claude-code.d.ts +12 -0
  175. package/dist/src/cli/hooks-writers/claude-code.d.ts.map +1 -0
  176. package/dist/src/cli/hooks-writers/claude-code.js +228 -0
  177. package/dist/src/cli/hooks-writers/claude-code.js.map +1 -0
  178. package/dist/src/cli/hooks-writers/errors.d.ts +16 -0
  179. package/dist/src/cli/hooks-writers/errors.d.ts.map +1 -0
  180. package/dist/src/cli/hooks-writers/errors.js +24 -0
  181. package/dist/src/cli/hooks-writers/errors.js.map +1 -0
  182. package/dist/src/cli/hooks-writers/index.d.ts +13 -0
  183. package/dist/src/cli/hooks-writers/index.d.ts.map +1 -0
  184. package/dist/src/cli/hooks-writers/index.js +26 -0
  185. package/dist/src/cli/hooks-writers/index.js.map +1 -0
  186. package/dist/src/cli/hooks-writers/types.d.ts +27 -0
  187. package/dist/src/cli/hooks-writers/types.d.ts.map +1 -0
  188. package/dist/src/cli/hooks-writers/types.js +9 -0
  189. package/dist/src/cli/hooks-writers/types.js.map +1 -0
  190. package/dist/src/cli/http-client.d.ts +36 -0
  191. package/dist/src/cli/http-client.d.ts.map +1 -0
  192. package/dist/src/cli/http-client.js +153 -0
  193. package/dist/src/cli/http-client.js.map +1 -0
  194. package/dist/src/cli/index.d.ts +4 -0
  195. package/dist/src/cli/index.d.ts.map +1 -0
  196. package/dist/src/cli/index.js +68 -0
  197. package/dist/src/cli/index.js.map +1 -0
  198. package/dist/src/cli/job-poller.d.ts +13 -0
  199. package/dist/src/cli/job-poller.d.ts.map +1 -0
  200. package/dist/src/cli/job-poller.js +29 -0
  201. package/dist/src/cli/job-poller.js.map +1 -0
  202. package/dist/src/cli/mcp-config-writers/codex-toml.d.ts +10 -0
  203. package/dist/src/cli/mcp-config-writers/codex-toml.d.ts.map +1 -0
  204. package/dist/src/cli/mcp-config-writers/codex-toml.js +410 -0
  205. package/dist/src/cli/mcp-config-writers/codex-toml.js.map +1 -0
  206. package/dist/src/cli/mcp-config-writers/errors.d.ts +17 -0
  207. package/dist/src/cli/mcp-config-writers/errors.d.ts.map +1 -0
  208. package/dist/src/cli/mcp-config-writers/errors.js +13 -0
  209. package/dist/src/cli/mcp-config-writers/errors.js.map +1 -0
  210. package/dist/src/cli/mcp-config-writers/index.d.ts +18 -0
  211. package/dist/src/cli/mcp-config-writers/index.d.ts.map +1 -0
  212. package/dist/src/cli/mcp-config-writers/index.js +49 -0
  213. package/dist/src/cli/mcp-config-writers/index.js.map +1 -0
  214. package/dist/src/cli/mcp-config-writers/json-config.d.ts +12 -0
  215. package/dist/src/cli/mcp-config-writers/json-config.d.ts.map +1 -0
  216. package/dist/src/cli/mcp-config-writers/json-config.js +177 -0
  217. package/dist/src/cli/mcp-config-writers/json-config.js.map +1 -0
  218. package/dist/src/cli/mcp-config-writers/redact.d.ts +28 -0
  219. package/dist/src/cli/mcp-config-writers/redact.d.ts.map +1 -0
  220. package/dist/src/cli/mcp-config-writers/redact.js +48 -0
  221. package/dist/src/cli/mcp-config-writers/redact.js.map +1 -0
  222. package/dist/src/cli/mcp-config-writers/types.d.ts +32 -0
  223. package/dist/src/cli/mcp-config-writers/types.d.ts.map +1 -0
  224. package/dist/src/cli/mcp-config-writers/types.js +5 -0
  225. package/dist/src/cli/mcp-config-writers/types.js.map +1 -0
  226. package/dist/src/cli/output.d.ts +8 -0
  227. package/dist/src/cli/output.d.ts.map +1 -0
  228. package/dist/src/cli/output.js +34 -0
  229. package/dist/src/cli/output.js.map +1 -0
  230. package/dist/src/cli/status/friend-header.d.ts +33 -0
  231. package/dist/src/cli/status/friend-header.d.ts.map +1 -0
  232. package/dist/src/cli/status/friend-header.js +108 -0
  233. package/dist/src/cli/status/friend-header.js.map +1 -0
  234. package/dist/src/cli/status/local-signals.d.ts +14 -0
  235. package/dist/src/cli/status/local-signals.d.ts.map +1 -0
  236. package/dist/src/cli/status/local-signals.js +73 -0
  237. package/dist/src/cli/status/local-signals.js.map +1 -0
  238. package/dist/src/cli/token.d.ts +37 -0
  239. package/dist/src/cli/token.d.ts.map +1 -0
  240. package/dist/src/cli/token.js +105 -0
  241. package/dist/src/cli/token.js.map +1 -0
  242. package/dist/src/cli/uninstall/mcp-uninstall.d.ts +33 -0
  243. package/dist/src/cli/uninstall/mcp-uninstall.d.ts.map +1 -0
  244. package/dist/src/cli/uninstall/mcp-uninstall.js +181 -0
  245. package/dist/src/cli/uninstall/mcp-uninstall.js.map +1 -0
  246. package/dist/src/config/loader.d.ts +9 -0
  247. package/dist/src/config/loader.d.ts.map +1 -0
  248. package/dist/src/config/loader.js +73 -0
  249. package/dist/src/config/loader.js.map +1 -0
  250. package/dist/src/config/schema.d.ts +635 -0
  251. package/dist/src/config/schema.d.ts.map +1 -0
  252. package/dist/src/config/schema.js +208 -0
  253. package/dist/src/config/schema.js.map +1 -0
  254. package/dist/src/ingestion/bulk-ingest.d.ts +11 -0
  255. package/dist/src/ingestion/bulk-ingest.d.ts.map +1 -0
  256. package/dist/src/ingestion/bulk-ingest.js +11 -0
  257. package/dist/src/ingestion/bulk-ingest.js.map +1 -0
  258. package/dist/src/ingestion/extractor.d.ts +16 -0
  259. package/dist/src/ingestion/extractor.d.ts.map +1 -0
  260. package/dist/src/ingestion/extractor.js +85 -0
  261. package/dist/src/ingestion/extractor.js.map +1 -0
  262. package/dist/src/ingestion/extractors/docx.d.ts +3 -0
  263. package/dist/src/ingestion/extractors/docx.d.ts.map +1 -0
  264. package/dist/src/ingestion/extractors/docx.js +20 -0
  265. package/dist/src/ingestion/extractors/docx.js.map +1 -0
  266. package/dist/src/ingestion/extractors/pdf.d.ts +3 -0
  267. package/dist/src/ingestion/extractors/pdf.d.ts.map +1 -0
  268. package/dist/src/ingestion/extractors/pdf.js +32 -0
  269. package/dist/src/ingestion/extractors/pdf.js.map +1 -0
  270. package/dist/src/ingestion/historical-campaign.d.ts +340 -0
  271. package/dist/src/ingestion/historical-campaign.d.ts.map +1 -0
  272. package/dist/src/ingestion/historical-campaign.js +1010 -0
  273. package/dist/src/ingestion/historical-campaign.js.map +1 -0
  274. package/dist/src/ingestion/ignored-paths.d.ts +20 -0
  275. package/dist/src/ingestion/ignored-paths.d.ts.map +1 -0
  276. package/dist/src/ingestion/ignored-paths.js +45 -0
  277. package/dist/src/ingestion/ignored-paths.js.map +1 -0
  278. package/dist/src/ingestion/inbox-watcher.d.ts +12 -0
  279. package/dist/src/ingestion/inbox-watcher.d.ts.map +1 -0
  280. package/dist/src/ingestion/inbox-watcher.js +99 -0
  281. package/dist/src/ingestion/inbox-watcher.js.map +1 -0
  282. package/dist/src/ingestion/indexer.d.ts +32 -0
  283. package/dist/src/ingestion/indexer.d.ts.map +1 -0
  284. package/dist/src/ingestion/indexer.js +68 -0
  285. package/dist/src/ingestion/indexer.js.map +1 -0
  286. package/dist/src/ingestion/metadata-extraction.d.ts +53 -0
  287. package/dist/src/ingestion/metadata-extraction.d.ts.map +1 -0
  288. package/dist/src/ingestion/metadata-extraction.js +132 -0
  289. package/dist/src/ingestion/metadata-extraction.js.map +1 -0
  290. package/dist/src/ingestion/parsers/chatgpt-web.d.ts +29 -0
  291. package/dist/src/ingestion/parsers/chatgpt-web.d.ts.map +1 -0
  292. package/dist/src/ingestion/parsers/chatgpt-web.js +100 -0
  293. package/dist/src/ingestion/parsers/chatgpt-web.js.map +1 -0
  294. package/dist/src/ingestion/parsers/claude-code-jsonl.d.ts +16 -0
  295. package/dist/src/ingestion/parsers/claude-code-jsonl.d.ts.map +1 -0
  296. package/dist/src/ingestion/parsers/claude-code-jsonl.js +123 -0
  297. package/dist/src/ingestion/parsers/claude-code-jsonl.js.map +1 -0
  298. package/dist/src/ingestion/parsers/claude-web.d.ts +24 -0
  299. package/dist/src/ingestion/parsers/claude-web.d.ts.map +1 -0
  300. package/dist/src/ingestion/parsers/claude-web.js +78 -0
  301. package/dist/src/ingestion/parsers/claude-web.js.map +1 -0
  302. package/dist/src/ingestion/parsers/codex-jsonl.d.ts +18 -0
  303. package/dist/src/ingestion/parsers/codex-jsonl.d.ts.map +1 -0
  304. package/dist/src/ingestion/parsers/codex-jsonl.js +125 -0
  305. package/dist/src/ingestion/parsers/codex-jsonl.js.map +1 -0
  306. package/dist/src/ingestion/parsers/gemini-web.d.ts +16 -0
  307. package/dist/src/ingestion/parsers/gemini-web.d.ts.map +1 -0
  308. package/dist/src/ingestion/parsers/gemini-web.js +170 -0
  309. package/dist/src/ingestion/parsers/gemini-web.js.map +1 -0
  310. package/dist/src/ingestion/parsers/grok-web.d.ts +40 -0
  311. package/dist/src/ingestion/parsers/grok-web.d.ts.map +1 -0
  312. package/dist/src/ingestion/parsers/grok-web.js +67 -0
  313. package/dist/src/ingestion/parsers/grok-web.js.map +1 -0
  314. package/dist/src/ingestion/parsers/types.d.ts +34 -0
  315. package/dist/src/ingestion/parsers/types.d.ts.map +1 -0
  316. package/dist/src/ingestion/parsers/types.js +26 -0
  317. package/dist/src/ingestion/parsers/types.js.map +1 -0
  318. package/dist/src/ingestion/scanner.d.ts +48 -0
  319. package/dist/src/ingestion/scanner.d.ts.map +1 -0
  320. package/dist/src/ingestion/scanner.js +131 -0
  321. package/dist/src/ingestion/scanner.js.map +1 -0
  322. package/dist/src/ingestion/staging.d.ts +109 -0
  323. package/dist/src/ingestion/staging.d.ts.map +1 -0
  324. package/dist/src/ingestion/staging.js +411 -0
  325. package/dist/src/ingestion/staging.js.map +1 -0
  326. package/dist/src/ingestion/watcher.d.ts +65 -0
  327. package/dist/src/ingestion/watcher.d.ts.map +1 -0
  328. package/dist/src/ingestion/watcher.js +182 -0
  329. package/dist/src/ingestion/watcher.js.map +1 -0
  330. package/dist/src/jobs/codex-override-handler.d.ts +3 -0
  331. package/dist/src/jobs/codex-override-handler.d.ts.map +1 -0
  332. package/dist/src/jobs/codex-override-handler.js +16 -0
  333. package/dist/src/jobs/codex-override-handler.js.map +1 -0
  334. package/dist/src/jobs/handlers/compact.d.ts +30 -0
  335. package/dist/src/jobs/handlers/compact.d.ts.map +1 -0
  336. package/dist/src/jobs/handlers/compact.js +329 -0
  337. package/dist/src/jobs/handlers/compact.js.map +1 -0
  338. package/dist/src/jobs/handlers/ingest.d.ts +13 -0
  339. package/dist/src/jobs/handlers/ingest.d.ts.map +1 -0
  340. package/dist/src/jobs/handlers/ingest.js +255 -0
  341. package/dist/src/jobs/handlers/ingest.js.map +1 -0
  342. package/dist/src/jobs/handlers/reconcile.d.ts +29 -0
  343. package/dist/src/jobs/handlers/reconcile.d.ts.map +1 -0
  344. package/dist/src/jobs/handlers/reconcile.js +476 -0
  345. package/dist/src/jobs/handlers/reconcile.js.map +1 -0
  346. package/dist/src/jobs/handlers/reindex.d.ts +38 -0
  347. package/dist/src/jobs/handlers/reindex.d.ts.map +1 -0
  348. package/dist/src/jobs/handlers/reindex.js +52 -0
  349. package/dist/src/jobs/handlers/reindex.js.map +1 -0
  350. package/dist/src/jobs/handlers/save.d.ts +10 -0
  351. package/dist/src/jobs/handlers/save.d.ts.map +1 -0
  352. package/dist/src/jobs/handlers/save.js +206 -0
  353. package/dist/src/jobs/handlers/save.js.map +1 -0
  354. package/dist/src/jobs/handlers/triage.d.ts +47 -0
  355. package/dist/src/jobs/handlers/triage.d.ts.map +1 -0
  356. package/dist/src/jobs/handlers/triage.js +95 -0
  357. package/dist/src/jobs/handlers/triage.js.map +1 -0
  358. package/dist/src/jobs/queue.d.ts +107 -0
  359. package/dist/src/jobs/queue.d.ts.map +1 -0
  360. package/dist/src/jobs/queue.js +319 -0
  361. package/dist/src/jobs/queue.js.map +1 -0
  362. package/dist/src/jobs/types.d.ts +39 -0
  363. package/dist/src/jobs/types.d.ts.map +1 -0
  364. package/dist/src/jobs/types.js +29 -0
  365. package/dist/src/jobs/types.js.map +1 -0
  366. package/dist/src/jobs/worker-entry.d.ts +10 -0
  367. package/dist/src/jobs/worker-entry.d.ts.map +1 -0
  368. package/dist/src/jobs/worker-entry.js +210 -0
  369. package/dist/src/jobs/worker-entry.js.map +1 -0
  370. package/dist/src/jobs/worker-process.d.ts +50 -0
  371. package/dist/src/jobs/worker-process.d.ts.map +1 -0
  372. package/dist/src/jobs/worker-process.js +186 -0
  373. package/dist/src/jobs/worker-process.js.map +1 -0
  374. package/dist/src/jobs/worker.d.ts +11 -0
  375. package/dist/src/jobs/worker.d.ts.map +1 -0
  376. package/dist/src/jobs/worker.js +14 -0
  377. package/dist/src/jobs/worker.js.map +1 -0
  378. package/dist/src/main.d.ts +2 -0
  379. package/dist/src/main.d.ts.map +1 -0
  380. package/dist/src/main.js +425 -0
  381. package/dist/src/main.js.map +1 -0
  382. package/dist/src/mcp/errors.d.ts +8 -0
  383. package/dist/src/mcp/errors.d.ts.map +1 -0
  384. package/dist/src/mcp/errors.js +50 -0
  385. package/dist/src/mcp/errors.js.map +1 -0
  386. package/dist/src/mcp/server.d.ts +10 -0
  387. package/dist/src/mcp/server.d.ts.map +1 -0
  388. package/dist/src/mcp/server.js +94 -0
  389. package/dist/src/mcp/server.js.map +1 -0
  390. package/dist/src/mcp/tools/context-pack.d.ts +35 -0
  391. package/dist/src/mcp/tools/context-pack.d.ts.map +1 -0
  392. package/dist/src/mcp/tools/context-pack.js +97 -0
  393. package/dist/src/mcp/tools/context-pack.js.map +1 -0
  394. package/dist/src/mcp/tools/conversations-search.d.ts +38 -0
  395. package/dist/src/mcp/tools/conversations-search.d.ts.map +1 -0
  396. package/dist/src/mcp/tools/conversations-search.js +73 -0
  397. package/dist/src/mcp/tools/conversations-search.js.map +1 -0
  398. package/dist/src/mcp/tools/save.d.ts +32 -0
  399. package/dist/src/mcp/tools/save.d.ts.map +1 -0
  400. package/dist/src/mcp/tools/save.js +60 -0
  401. package/dist/src/mcp/tools/save.js.map +1 -0
  402. package/dist/src/mcp/tools/search.d.ts +33 -0
  403. package/dist/src/mcp/tools/search.d.ts.map +1 -0
  404. package/dist/src/mcp/tools/search.js +58 -0
  405. package/dist/src/mcp/tools/search.js.map +1 -0
  406. package/dist/src/mcp/tools/status.d.ts +17 -0
  407. package/dist/src/mcp/tools/status.d.ts.map +1 -0
  408. package/dist/src/mcp/tools/status.js +12 -0
  409. package/dist/src/mcp/tools/status.js.map +1 -0
  410. package/dist/src/observability/coverage.d.ts +100 -0
  411. package/dist/src/observability/coverage.d.ts.map +1 -0
  412. package/dist/src/observability/coverage.js +180 -0
  413. package/dist/src/observability/coverage.js.map +1 -0
  414. package/dist/src/observability/rift-context.d.ts +47 -0
  415. package/dist/src/observability/rift-context.d.ts.map +1 -0
  416. package/dist/src/observability/rift-context.js +118 -0
  417. package/dist/src/observability/rift-context.js.map +1 -0
  418. package/dist/src/observability/staleness.d.ts +43 -0
  419. package/dist/src/observability/staleness.d.ts.map +1 -0
  420. package/dist/src/observability/staleness.js +74 -0
  421. package/dist/src/observability/staleness.js.map +1 -0
  422. package/dist/src/observability/tool-usage-stats.d.ts +23 -0
  423. package/dist/src/observability/tool-usage-stats.d.ts.map +1 -0
  424. package/dist/src/observability/tool-usage-stats.js +83 -0
  425. package/dist/src/observability/tool-usage-stats.js.map +1 -0
  426. package/dist/src/observability/tool-usage.d.ts +68 -0
  427. package/dist/src/observability/tool-usage.d.ts.map +1 -0
  428. package/dist/src/observability/tool-usage.js +207 -0
  429. package/dist/src/observability/tool-usage.js.map +1 -0
  430. package/dist/src/onboarding/daemon-control.d.ts +33 -0
  431. package/dist/src/onboarding/daemon-control.d.ts.map +1 -0
  432. package/dist/src/onboarding/daemon-control.js +92 -0
  433. package/dist/src/onboarding/daemon-control.js.map +1 -0
  434. package/dist/src/onboarding/env-file.d.ts +18 -0
  435. package/dist/src/onboarding/env-file.d.ts.map +1 -0
  436. package/dist/src/onboarding/env-file.js +89 -0
  437. package/dist/src/onboarding/env-file.js.map +1 -0
  438. package/dist/src/onboarding/voyage-validate.d.ts +16 -0
  439. package/dist/src/onboarding/voyage-validate.d.ts.map +1 -0
  440. package/dist/src/onboarding/voyage-validate.js +85 -0
  441. package/dist/src/onboarding/voyage-validate.js.map +1 -0
  442. package/dist/src/providers/anthropic-digest.d.ts +23 -0
  443. package/dist/src/providers/anthropic-digest.d.ts.map +1 -0
  444. package/dist/src/providers/anthropic-digest.js +91 -0
  445. package/dist/src/providers/anthropic-digest.js.map +1 -0
  446. package/dist/src/providers/codex-cli-digest.d.ts +12 -0
  447. package/dist/src/providers/codex-cli-digest.d.ts.map +1 -0
  448. package/dist/src/providers/codex-cli-digest.js +70 -0
  449. package/dist/src/providers/codex-cli-digest.js.map +1 -0
  450. package/dist/src/providers/codex-cli-metadata-extraction.d.ts +14 -0
  451. package/dist/src/providers/codex-cli-metadata-extraction.d.ts.map +1 -0
  452. package/dist/src/providers/codex-cli-metadata-extraction.js +101 -0
  453. package/dist/src/providers/codex-cli-metadata-extraction.js.map +1 -0
  454. package/dist/src/providers/codex-cli-runner.d.ts +14 -0
  455. package/dist/src/providers/codex-cli-runner.d.ts.map +1 -0
  456. package/dist/src/providers/codex-cli-runner.js +272 -0
  457. package/dist/src/providers/codex-cli-runner.js.map +1 -0
  458. package/dist/src/providers/conversation-generation.d.ts +10 -0
  459. package/dist/src/providers/conversation-generation.d.ts.map +1 -0
  460. package/dist/src/providers/conversation-generation.js +54 -0
  461. package/dist/src/providers/conversation-generation.js.map +1 -0
  462. package/dist/src/providers/ollama-embed.d.ts +22 -0
  463. package/dist/src/providers/ollama-embed.d.ts.map +1 -0
  464. package/dist/src/providers/ollama-embed.js +133 -0
  465. package/dist/src/providers/ollama-embed.js.map +1 -0
  466. package/dist/src/providers/ollama.d.ts +42 -0
  467. package/dist/src/providers/ollama.d.ts.map +1 -0
  468. package/dist/src/providers/ollama.js +169 -0
  469. package/dist/src/providers/ollama.js.map +1 -0
  470. package/dist/src/providers/openai-metadata-extraction.d.ts +73 -0
  471. package/dist/src/providers/openai-metadata-extraction.d.ts.map +1 -0
  472. package/dist/src/providers/openai-metadata-extraction.js +161 -0
  473. package/dist/src/providers/openai-metadata-extraction.js.map +1 -0
  474. package/dist/src/providers/operator-overrides.d.ts +24 -0
  475. package/dist/src/providers/operator-overrides.d.ts.map +1 -0
  476. package/dist/src/providers/operator-overrides.js +84 -0
  477. package/dist/src/providers/operator-overrides.js.map +1 -0
  478. package/dist/src/providers/stub.d.ts +17 -0
  479. package/dist/src/providers/stub.d.ts.map +1 -0
  480. package/dist/src/providers/stub.js +72 -0
  481. package/dist/src/providers/stub.js.map +1 -0
  482. package/dist/src/providers/types.d.ts +82 -0
  483. package/dist/src/providers/types.d.ts.map +1 -0
  484. package/dist/src/providers/types.js +52 -0
  485. package/dist/src/providers/types.js.map +1 -0
  486. package/dist/src/providers/voyage.d.ts +23 -0
  487. package/dist/src/providers/voyage.d.ts.map +1 -0
  488. package/dist/src/providers/voyage.js +135 -0
  489. package/dist/src/providers/voyage.js.map +1 -0
  490. package/dist/src/retrieval/compact.d.ts +89 -0
  491. package/dist/src/retrieval/compact.d.ts.map +1 -0
  492. package/dist/src/retrieval/compact.js +348 -0
  493. package/dist/src/retrieval/compact.js.map +1 -0
  494. package/dist/src/retrieval/context-pack.d.ts +123 -0
  495. package/dist/src/retrieval/context-pack.d.ts.map +1 -0
  496. package/dist/src/retrieval/context-pack.js +553 -0
  497. package/dist/src/retrieval/context-pack.js.map +1 -0
  498. package/dist/src/retrieval/cwd.d.ts +25 -0
  499. package/dist/src/retrieval/cwd.d.ts.map +1 -0
  500. package/dist/src/retrieval/cwd.js +48 -0
  501. package/dist/src/retrieval/cwd.js.map +1 -0
  502. package/dist/src/retrieval/degraded.d.ts +20 -0
  503. package/dist/src/retrieval/degraded.d.ts.map +1 -0
  504. package/dist/src/retrieval/degraded.js +43 -0
  505. package/dist/src/retrieval/degraded.js.map +1 -0
  506. package/dist/src/retrieval/hybrid.d.ts +38 -0
  507. package/dist/src/retrieval/hybrid.d.ts.map +1 -0
  508. package/dist/src/retrieval/hybrid.js +82 -0
  509. package/dist/src/retrieval/hybrid.js.map +1 -0
  510. package/dist/src/retrieval/lexical.d.ts +28 -0
  511. package/dist/src/retrieval/lexical.d.ts.map +1 -0
  512. package/dist/src/retrieval/lexical.js +301 -0
  513. package/dist/src/retrieval/lexical.js.map +1 -0
  514. package/dist/src/retrieval/post-filter.d.ts +32 -0
  515. package/dist/src/retrieval/post-filter.d.ts.map +1 -0
  516. package/dist/src/retrieval/post-filter.js +57 -0
  517. package/dist/src/retrieval/post-filter.js.map +1 -0
  518. package/dist/src/retrieval/reranker.d.ts +72 -0
  519. package/dist/src/retrieval/reranker.d.ts.map +1 -0
  520. package/dist/src/retrieval/reranker.js +129 -0
  521. package/dist/src/retrieval/reranker.js.map +1 -0
  522. package/dist/src/retrieval/vector.d.ts +47 -0
  523. package/dist/src/retrieval/vector.d.ts.map +1 -0
  524. package/dist/src/retrieval/vector.js +112 -0
  525. package/dist/src/retrieval/vector.js.map +1 -0
  526. package/dist/src/runtime/legacy-migration.d.ts +27 -0
  527. package/dist/src/runtime/legacy-migration.d.ts.map +1 -0
  528. package/dist/src/runtime/legacy-migration.js +140 -0
  529. package/dist/src/runtime/legacy-migration.js.map +1 -0
  530. package/dist/src/runtime/legacy-name-guard.d.ts +35 -0
  531. package/dist/src/runtime/legacy-name-guard.d.ts.map +1 -0
  532. package/dist/src/runtime/legacy-name-guard.js +58 -0
  533. package/dist/src/runtime/legacy-name-guard.js.map +1 -0
  534. package/dist/src/runtime/rift-env.d.ts +14 -0
  535. package/dist/src/runtime/rift-env.d.ts.map +1 -0
  536. package/dist/src/runtime/rift-env.js +79 -0
  537. package/dist/src/runtime/rift-env.js.map +1 -0
  538. package/dist/src/runtime/watcher-startup.d.ts +2 -0
  539. package/dist/src/runtime/watcher-startup.d.ts.map +1 -0
  540. package/dist/src/runtime/watcher-startup.js +4 -0
  541. package/dist/src/runtime/watcher-startup.js.map +1 -0
  542. package/dist/src/security/archive.d.ts +23 -0
  543. package/dist/src/security/archive.d.ts.map +1 -0
  544. package/dist/src/security/archive.js +163 -0
  545. package/dist/src/security/archive.js.map +1 -0
  546. package/dist/src/security/paths.d.ts +21 -0
  547. package/dist/src/security/paths.d.ts.map +1 -0
  548. package/dist/src/security/paths.js +67 -0
  549. package/dist/src/security/paths.js.map +1 -0
  550. package/dist/src/server/app.d.ts +29 -0
  551. package/dist/src/server/app.d.ts.map +1 -0
  552. package/dist/src/server/app.js +226 -0
  553. package/dist/src/server/app.js.map +1 -0
  554. package/dist/src/server/build-info.d.ts +8 -0
  555. package/dist/src/server/build-info.d.ts.map +1 -0
  556. package/dist/src/server/build-info.js +61 -0
  557. package/dist/src/server/build-info.js.map +1 -0
  558. package/dist/src/server/lifecycle.d.ts +30 -0
  559. package/dist/src/server/lifecycle.d.ts.map +1 -0
  560. package/dist/src/server/lifecycle.js +59 -0
  561. package/dist/src/server/lifecycle.js.map +1 -0
  562. package/dist/src/server/middleware/multipart.d.ts +51 -0
  563. package/dist/src/server/middleware/multipart.d.ts.map +1 -0
  564. package/dist/src/server/middleware/multipart.js +86 -0
  565. package/dist/src/server/middleware/multipart.js.map +1 -0
  566. package/dist/src/server/routes/compact.d.ts +37 -0
  567. package/dist/src/server/routes/compact.d.ts.map +1 -0
  568. package/dist/src/server/routes/compact.js +77 -0
  569. package/dist/src/server/routes/compact.js.map +1 -0
  570. package/dist/src/server/routes/context.d.ts +5 -0
  571. package/dist/src/server/routes/context.d.ts.map +1 -0
  572. package/dist/src/server/routes/context.js +50 -0
  573. package/dist/src/server/routes/context.js.map +1 -0
  574. package/dist/src/server/routes/conversations-search.d.ts +4 -0
  575. package/dist/src/server/routes/conversations-search.d.ts.map +1 -0
  576. package/dist/src/server/routes/conversations-search.js +243 -0
  577. package/dist/src/server/routes/conversations-search.js.map +1 -0
  578. package/dist/src/server/routes/friend-status.d.ts +72 -0
  579. package/dist/src/server/routes/friend-status.d.ts.map +1 -0
  580. package/dist/src/server/routes/friend-status.js +71 -0
  581. package/dist/src/server/routes/friend-status.js.map +1 -0
  582. package/dist/src/server/routes/ingest.d.ts +15 -0
  583. package/dist/src/server/routes/ingest.d.ts.map +1 -0
  584. package/dist/src/server/routes/ingest.js +139 -0
  585. package/dist/src/server/routes/ingest.js.map +1 -0
  586. package/dist/src/server/routes/jobs.d.ts +10 -0
  587. package/dist/src/server/routes/jobs.d.ts.map +1 -0
  588. package/dist/src/server/routes/jobs.js +29 -0
  589. package/dist/src/server/routes/jobs.js.map +1 -0
  590. package/dist/src/server/routes/mcp-usage.d.ts +13 -0
  591. package/dist/src/server/routes/mcp-usage.d.ts.map +1 -0
  592. package/dist/src/server/routes/mcp-usage.js +17 -0
  593. package/dist/src/server/routes/mcp-usage.js.map +1 -0
  594. package/dist/src/server/routes/reconcile.d.ts +4 -0
  595. package/dist/src/server/routes/reconcile.d.ts.map +1 -0
  596. package/dist/src/server/routes/reconcile.js +43 -0
  597. package/dist/src/server/routes/reconcile.js.map +1 -0
  598. package/dist/src/server/routes/reindex.d.ts +4 -0
  599. package/dist/src/server/routes/reindex.d.ts.map +1 -0
  600. package/dist/src/server/routes/reindex.js +74 -0
  601. package/dist/src/server/routes/reindex.js.map +1 -0
  602. package/dist/src/server/routes/save.d.ts +40 -0
  603. package/dist/src/server/routes/save.d.ts.map +1 -0
  604. package/dist/src/server/routes/save.js +112 -0
  605. package/dist/src/server/routes/save.js.map +1 -0
  606. package/dist/src/server/routes/search.d.ts +5 -0
  607. package/dist/src/server/routes/search.d.ts.map +1 -0
  608. package/dist/src/server/routes/search.js +400 -0
  609. package/dist/src/server/routes/search.js.map +1 -0
  610. package/dist/src/server/routes/stats.d.ts +10 -0
  611. package/dist/src/server/routes/stats.d.ts.map +1 -0
  612. package/dist/src/server/routes/stats.js +15 -0
  613. package/dist/src/server/routes/stats.js.map +1 -0
  614. package/dist/src/server/routes/status.d.ts +20 -0
  615. package/dist/src/server/routes/status.d.ts.map +1 -0
  616. package/dist/src/server/routes/status.js +31 -0
  617. package/dist/src/server/routes/status.js.map +1 -0
  618. package/dist/src/server/routes/triage.d.ts +4 -0
  619. package/dist/src/server/routes/triage.d.ts.map +1 -0
  620. package/dist/src/server/routes/triage.js +94 -0
  621. package/dist/src/server/routes/triage.js.map +1 -0
  622. package/dist/src/server/save-quality.d.ts +21 -0
  623. package/dist/src/server/save-quality.d.ts.map +1 -0
  624. package/dist/src/server/save-quality.js +51 -0
  625. package/dist/src/server/save-quality.js.map +1 -0
  626. package/dist/src/storage/atomic.d.ts +8 -0
  627. package/dist/src/storage/atomic.d.ts.map +1 -0
  628. package/dist/src/storage/atomic.js +22 -0
  629. package/dist/src/storage/atomic.js.map +1 -0
  630. package/dist/src/storage/db.d.ts +15 -0
  631. package/dist/src/storage/db.d.ts.map +1 -0
  632. package/dist/src/storage/db.js +43 -0
  633. package/dist/src/storage/db.js.map +1 -0
  634. package/dist/src/storage/integrity.d.ts +11 -0
  635. package/dist/src/storage/integrity.d.ts.map +1 -0
  636. package/dist/src/storage/integrity.js +66 -0
  637. package/dist/src/storage/integrity.js.map +1 -0
  638. package/dist/src/storage/rebuild.d.ts +37 -0
  639. package/dist/src/storage/rebuild.d.ts.map +1 -0
  640. package/dist/src/storage/rebuild.js +353 -0
  641. package/dist/src/storage/rebuild.js.map +1 -0
  642. package/dist/src/storage/shadow-swap.d.ts +20 -0
  643. package/dist/src/storage/shadow-swap.d.ts.map +1 -0
  644. package/dist/src/storage/shadow-swap.js +163 -0
  645. package/dist/src/storage/shadow-swap.js.map +1 -0
  646. package/dist/src/storage/tables.d.ts +77 -0
  647. package/dist/src/storage/tables.d.ts.map +1 -0
  648. package/dist/src/storage/tables.js +196 -0
  649. package/dist/src/storage/tables.js.map +1 -0
  650. package/package.json +45 -14
  651. package/index.js +0 -3
@@ -0,0 +1,425 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { loadConfig } from "./config/loader.js";
4
+ import { buildApp } from "./server/app.js";
5
+ import { registerShutdownHandlers } from "./server/lifecycle.js";
6
+ import { macKeychain } from "./auth/keychain.js";
7
+ import { TokenManager } from "./auth/rotation.js";
8
+ import { JobQueue } from "./jobs/queue.js";
9
+ import { WorkerPool, createWorkerHandler } from "./jobs/worker-process.js";
10
+ import { createCodexOverrideAwareHandler } from "./jobs/codex-override-handler.js";
11
+ import { createIngestHandler } from "./jobs/handlers/ingest.js";
12
+ import { createTriageHandler } from "./jobs/handlers/triage.js";
13
+ import { initTables, closeTables } from "./storage/tables.js";
14
+ import { checkIntegrity } from "./storage/integrity.js";
15
+ import { Watcher } from "./ingestion/watcher.js";
16
+ import { Indexer } from "./ingestion/indexer.js";
17
+ import { Scanner } from "./ingestion/scanner.js";
18
+ import { buildIgnoredPaths } from "./ingestion/ignored-paths.js";
19
+ import { createInboxWatcher } from "./ingestion/inbox-watcher.js";
20
+ import { watcherStartupDisabled as watcherStartupDisabledFromEnv } from "./runtime/watcher-startup.js";
21
+ import { loadRiftEnv } from "./runtime/rift-env.js";
22
+ import { runLegacyMigration } from "./runtime/legacy-migration.js";
23
+ import { VoyageEmbeddingProvider } from "./providers/voyage.js";
24
+ import { OllamaEmbeddingProvider } from "./providers/ollama-embed.js";
25
+ import { checkOllamaHealth } from "./providers/ollama.js";
26
+ import { createDaemonConversationGenerationProviders } from "./providers/conversation-generation.js";
27
+ import { setDefaultTriageProvider } from "./capture/triage.js";
28
+ import { CodexCliTriageProvider } from "./capture/codex-cli-triage-provider.js";
29
+ import { generateCapabilityMap, getCapabilityCounts, writeRiftContext, } from "./observability/rift-context.js";
30
+ import { getBuildInfo } from "./server/build-info.js";
31
+ const configPath = process.argv[2];
32
+ if (!configPath) {
33
+ process.stderr.write("Usage: rift <config-path>\n");
34
+ process.exit(1);
35
+ }
36
+ const absoluteConfigPath = path.resolve(configPath);
37
+ const config = loadConfig(absoluteConfigPath);
38
+ // Run hidden legacy migration BEFORE loadRiftEnv so the env loader never
39
+ // resolves to the legacy path on a machine carrying pre-rename state.
40
+ // Idempotent — no-op on a clean Mac, and on second boot.
41
+ try {
42
+ await runLegacyMigration({ dataDir: config.data_paths.data_dir });
43
+ }
44
+ catch (err) {
45
+ process.stderr.write(`Legacy migration failed (non-fatal): ${err instanceof Error ? err.message : String(err)}\n`);
46
+ }
47
+ const envLoadResult = loadRiftEnv();
48
+ if (envLoadResult.loadedKeys.length > 0) {
49
+ process.stderr.write(`Loaded ${envLoadResult.loadedKeys.length} runtime secret(s).\n`);
50
+ }
51
+ const tokenManager = new TokenManager(macKeychain);
52
+ await tokenManager.load();
53
+ const queuePath = path.join(config.data_paths.jobs_dir, "queue.json");
54
+ const jobQueue = new JobQueue(queuePath);
55
+ await jobQueue.load();
56
+ // Hold processing so recovered jobs don't execute before the startup
57
+ // integrity check completes. Released after initTables + rebuild enqueue.
58
+ jobQueue.hold();
59
+ // --- Cloud embedding provider (needed for search + cloud watchers) ---
60
+ const hasCloudSources = config.sources.some((s) => s.extraction !== "local");
61
+ const voyageApiKey = process.env["VOYAGE_API_KEY"];
62
+ if (hasCloudSources && !voyageApiKey) {
63
+ process.stderr.write("VOYAGE_API_KEY environment variable required (cloud sources configured)\n");
64
+ process.exit(1);
65
+ }
66
+ let embeddingProvider;
67
+ if (voyageApiKey) {
68
+ const cachePath = path.join(config.data_paths.data_dir, "embeddings");
69
+ embeddingProvider = new VoyageEmbeddingProvider({
70
+ apiKey: voyageApiKey,
71
+ model: config.embedding.model,
72
+ cachePath,
73
+ });
74
+ }
75
+ else {
76
+ process.stderr.write("Running in local-only mode (no VOYAGE_API_KEY — cloud features disabled)\n");
77
+ }
78
+ // --- Ollama providers (for extraction: "local" sources) ---
79
+ const localSources = config.sources.filter((s) => s.extraction === "local");
80
+ let ollamaEmbedding;
81
+ if (localSources.length > 0) {
82
+ await checkOllamaHealth();
83
+ ollamaEmbedding = new OllamaEmbeddingProvider({
84
+ cachePath: path.join(config.data_paths.data_dir, "embeddings-local"),
85
+ });
86
+ process.stderr.write(`Ollama providers initialized for ${localSources.length} local source(s)\n`);
87
+ }
88
+ const conversationProviders = await createDaemonConversationGenerationProviders(config);
89
+ const metadataExtractor = conversationProviders.metadataExtractor;
90
+ const digestSummarizer = conversationProviders.digestSummarizer;
91
+ process.stderr.write(conversationProviders.usingLocalGeneration
92
+ ? "Local generation enabled for conversation metadata extraction and digests\n"
93
+ : "Cloud generation routed through Codex CLI for metadata extraction and digests\n");
94
+ // --- Worker pool (heavy jobs run in child processes) ---
95
+ const workerEntryPoint = path.resolve(path.dirname(new URL(import.meta.url).pathname), "jobs", "worker-entry.js");
96
+ const workerPool = new WorkerPool(workerEntryPoint, absoluteConfigPath);
97
+ // Declare watchers + scanner early so buildApp can capture the reference.
98
+ const watchers = [];
99
+ const scanSources = config.sources.filter((s) => s.mode === "scheduled_scan");
100
+ const scanner = scanSources.length > 0
101
+ ? new Scanner(config.data_paths.data_dir)
102
+ : null;
103
+ const watcherStartupDisabled = watcherStartupDisabledFromEnv();
104
+ // --- Register worker-wrapped handlers BEFORE buildApp ---
105
+ // Heavy jobs run in child processes; parent handles queue + watcher
106
+ // coordination. Registering before buildApp ensures:
107
+ // 1. buildApp's hasHandler() checks see worker handlers, skip fallbacks
108
+ // 2. Recovered jobs from queue.load() don't execute in-process
109
+ jobQueue.registerHandler("save", createWorkerHandler(workerPool, "save", absoluteConfigPath, watchers, scanner, jobQueue));
110
+ // Ingest is always available in the queue. Worker-side provider selection is
111
+ // config-driven, and VOYAGE_API_KEY is still validated at job execution time.
112
+ const workerIngestHandler = createWorkerHandler(workerPool, "ingest", absoluteConfigPath, watchers, scanner, jobQueue);
113
+ const codexOverrideIngestHandler = embeddingProvider
114
+ ? createIngestHandler({
115
+ embeddingProvider,
116
+ metadataExtractor,
117
+ dataDir: config.data_paths.data_dir,
118
+ queue: jobQueue,
119
+ })
120
+ : null;
121
+ jobQueue.registerHandler("ingest", codexOverrideIngestHandler
122
+ ? createCodexOverrideAwareHandler(workerIngestHandler, codexOverrideIngestHandler)
123
+ : workerIngestHandler);
124
+ if (digestSummarizer) {
125
+ jobQueue.registerHandler("compact", createWorkerHandler(workerPool, "compact", absoluteConfigPath, watchers, scanner, jobQueue));
126
+ }
127
+ jobQueue.registerHandler("reindex", createWorkerHandler(workerPool, "reindex", absoluteConfigPath, watchers, scanner, jobQueue));
128
+ jobQueue.registerHandler("reconcile", createWorkerHandler(workerPool, "reconcile", absoluteConfigPath, watchers, scanner, jobQueue));
129
+ const workerTriageHandler = createWorkerHandler(workerPool, "triage", absoluteConfigPath, watchers, scanner, jobQueue);
130
+ jobQueue.registerHandler("triage", createCodexOverrideAwareHandler(workerTriageHandler, createTriageHandler({
131
+ dataDir: config.data_paths.data_dir,
132
+ openai: config.openai,
133
+ })));
134
+ // Auto-capture (in-process) calls triageConversation() directly. Use the
135
+ // operator's authenticated Codex CLI runtime instead of a separate OpenAI
136
+ // Keychain secret.
137
+ setDefaultTriageProvider(new CodexCliTriageProvider());
138
+ const { server, markReady } = await buildApp(config, tokenManager, jobQueue, embeddingProvider, watchers, scanner, digestSummarizer, metadataExtractor, ollamaEmbedding);
139
+ registerShutdownHandlers(server, {
140
+ onShutdown: () => workerPool.shutdown(),
141
+ });
142
+ // SIGHUP reloads tokens from Keychain so CLI-issued tokens become
143
+ // usable without a full daemon restart. noGrace ensures the new token
144
+ // is the sole active credential (PRD: no grace overlap on token issue).
145
+ process.on("SIGHUP", () => {
146
+ tokenManager
147
+ .reload({ noGrace: true })
148
+ .then(() => {
149
+ process.stderr.write("Reloaded auth tokens from Keychain\n");
150
+ })
151
+ .catch((err) => {
152
+ process.stderr.write(`Failed to reload tokens: ${err instanceof Error ? err.message : String(err)}\n`);
153
+ });
154
+ });
155
+ await server.listen({ host: config.server.host, port: config.server.port });
156
+ // --- Startup integrity check (runs BEFORE initTables to detect corruption) ---
157
+ const integrity = await checkIntegrity(config.data_paths.data_dir);
158
+ // Close the connection used by integrity check so initTables gets a fresh state.
159
+ const { closeConnection: closeConn, resetConnectionRef: resetConn } = await import("./storage/db.js");
160
+ closeConn();
161
+ resetConn();
162
+ // --- Initialize storage and ingestion pipeline ---
163
+ await initTables(config.data_paths.data_dir);
164
+ if (!integrity.healthy) {
165
+ process.stderr.write(`Startup integrity check: corruption detected in [${integrity.corruptTables.join(", ")}]. Auto-triggering rebuild.\n`);
166
+ // Use createUrgent to bypass the exclusivity gate and insert at
167
+ // the front of the queue. Other queued exclusive jobs (recovered or
168
+ // legitimate) naturally wait — one-at-a-time processing means they
169
+ // run after the rebuild against healthy storage.
170
+ const rebuildResult = await jobQueue.createUrgent("reindex", {
171
+ payload: { scope: "all", rebuild: true },
172
+ });
173
+ process.stderr.write(`Startup rebuild enqueued as job ${rebuildResult.job.id}\n`);
174
+ }
175
+ else {
176
+ process.stderr.write("Startup integrity check: all tables healthy\n");
177
+ }
178
+ // Integrity check done + tables initialized — safe to process jobs.
179
+ jobQueue.releaseHold();
180
+ // --- Source ownership helper (longest-prefix match) ---
181
+ // Used by watcher + scan loops to route files to the correct provider
182
+ // when source roots overlap or nest (e.g., cloud=/docs + local=/docs/private).
183
+ function findOwningSource(filePath) {
184
+ let best;
185
+ let bestLen = 0;
186
+ for (const s of config.sources) {
187
+ if (filePath.startsWith(s.path) && s.path.length > bestLen) {
188
+ best = s;
189
+ bestLen = s.path.length;
190
+ }
191
+ }
192
+ return best;
193
+ }
194
+ function buildWatcherIgnoredPaths(source) {
195
+ return buildIgnoredPaths(source, config.data_paths);
196
+ }
197
+ // --- File watchers (mode: "watch") ---
198
+ const watchSources = config.sources.filter((s) => s.mode === "watch");
199
+ if (watcherStartupDisabled) {
200
+ process.stderr.write("Watcher startup disabled by RIFT_DISABLE_WATCHERS=1\n");
201
+ }
202
+ else {
203
+ for (const source of watchSources) {
204
+ // Select embedding provider based on extraction mode.
205
+ const embedding = source.extraction === "local" && ollamaEmbedding
206
+ ? ollamaEmbedding
207
+ : embeddingProvider;
208
+ if (!embedding) {
209
+ process.stderr.write(`Skipping watcher for ${source.path}: no embedding provider available\n`);
210
+ continue;
211
+ }
212
+ const indexer = new Indexer(embedding, {
213
+ sourceType: "filesystem_watched",
214
+ sourceScope: source.scope,
215
+ clientName: source.client_name ?? "",
216
+ allowedRoots: [source.path],
217
+ ...(source.extraction === "local" ? { tableName: "structured_docs_local" } : {}),
218
+ });
219
+ // Wrap handler to skip files owned by a more-specific source root.
220
+ // Without this, a cloud watcher on /docs would also index files under
221
+ // /docs/private (a nested local source), leaking local content to cloud.
222
+ const handler = (event) => {
223
+ const owner = findOwningSource(event.path);
224
+ if (owner && owner.path !== source.path)
225
+ return Promise.resolve();
226
+ return indexer.handleEvent(event);
227
+ };
228
+ const watcher = new Watcher([source.path], handler, {
229
+ ignoredPaths: buildWatcherIgnoredPaths(source),
230
+ });
231
+ await watcher.start();
232
+ watchers.push(watcher);
233
+ }
234
+ if (watchers.length > 0) {
235
+ process.stderr.write(`Started ${watchers.length} file watcher(s)\n`);
236
+ }
237
+ // --- Inbox watcher ---
238
+ if (jobQueue.hasHandler("ingest")) {
239
+ const inboxWatcher = createInboxWatcher({
240
+ dataDir: config.data_paths.data_dir,
241
+ queue: jobQueue,
242
+ });
243
+ await inboxWatcher.start();
244
+ watchers.push(inboxWatcher);
245
+ process.stderr.write("Inbox watcher started\n");
246
+ }
247
+ }
248
+ // --- Scheduled scan (mode: "scheduled_scan") ---
249
+ let scanInterval = null;
250
+ const scanIntervalSeconds = config.scan.interval_seconds;
251
+ const scanIntervalMs = scanIntervalSeconds * 1000;
252
+ if (config.cron.cron_enabled && scanSources.length > 0 && scanner) {
253
+ const scanDirs = scanSources.map((s) => s.path);
254
+ // Union ignored paths across all scheduled_scan sources. `walkDirectory`
255
+ // uses prefix matching, so paths outside a given root are no-ops for
256
+ // that root — the flat list is safe across sources.
257
+ const scanIgnoredPaths = Array.from(new Set(scanSources.flatMap((s) => buildIgnoredPaths(s, config.data_paths))));
258
+ const runScan = async () => {
259
+ if (scanner.isPaused)
260
+ return;
261
+ try {
262
+ const result = await scanner.scan(scanDirs, { ignoredPaths: scanIgnoredPaths });
263
+ for (const event of result.events) {
264
+ // Use longest-prefix match across ALL sources so files under a
265
+ // nested source root (e.g., local=/docs/private under cloud=/docs)
266
+ // are attributed to the most-specific owner.
267
+ const owner = findOwningSource(event.path);
268
+ if (!owner || owner.mode !== "scheduled_scan")
269
+ continue;
270
+ const embedding = owner.extraction === "local" && ollamaEmbedding
271
+ ? ollamaEmbedding
272
+ : embeddingProvider;
273
+ if (!embedding)
274
+ continue;
275
+ const indexer = new Indexer(embedding, {
276
+ sourceType: "filesystem_scheduled_scan",
277
+ sourceScope: owner.scope,
278
+ clientName: owner.client_name ?? "",
279
+ allowedRoots: [owner.path],
280
+ ...(owner.extraction === "local" ? { tableName: "structured_docs_local" } : {}),
281
+ });
282
+ await indexer.handleEvent(event);
283
+ }
284
+ scanner.setNextScan(new Date(Date.now() + scanIntervalMs).toISOString());
285
+ }
286
+ catch (err) {
287
+ process.stderr.write(`Scan error: ${err instanceof Error ? err.message : String(err)}\n`);
288
+ }
289
+ };
290
+ if (scanner.isDue(scanIntervalSeconds)) {
291
+ process.stderr.write("Scheduled scan overdue — running catch-up scan\n");
292
+ void runScan();
293
+ }
294
+ scanInterval = setInterval(() => void runScan(), scanIntervalMs);
295
+ scanner.setNextScan(new Date(Date.now() + scanIntervalMs).toISOString());
296
+ process.stderr.write(`Scheduled scan enabled for ${scanSources.length} source(s) (interval: ${scanIntervalSeconds}s)\n`);
297
+ }
298
+ // --- Automatic capture (local CLI conversations) ---
299
+ let captureInterval = null;
300
+ if (config.capture.enabled) {
301
+ const { runAutoCapture, zeroCounts, buildDaemonAutoCaptureDeps } = await import("./capture/auto-capture.js");
302
+ const { appendAutoCaptureRunRecord, buildAutoCaptureRunRecord, } = await import("./capture/observability.js");
303
+ const captureIntervalMs = config.capture.interval_seconds * 1000;
304
+ const runCapture = async () => {
305
+ const startedAt = new Date();
306
+ try {
307
+ const report = await runAutoCapture(buildDaemonAutoCaptureDeps({
308
+ config,
309
+ saveFn: async (opts) => {
310
+ const result = await jobQueue.create("save", {
311
+ idempotency_key: opts.idempotency_key,
312
+ payload: {
313
+ source: opts.source,
314
+ summary: opts.summary,
315
+ content: opts.content,
316
+ topics: opts.topics,
317
+ domain: opts.domain,
318
+ idempotency_key: opts.idempotency_key,
319
+ replace_idempotency_key: opts.replace_idempotency_key,
320
+ },
321
+ });
322
+ if ("conflict" in result) {
323
+ throw new Error("Job queue conflict during auto-capture save");
324
+ }
325
+ // Wait for job to reach a terminal state so auto-capture only
326
+ // marks the conversation as processed after a confirmed save.
327
+ // If the job fails, this throws, and auto-capture's per-session
328
+ // error handler skips persisting state — the conversation will
329
+ // be retried on the next capture run.
330
+ const jobId = result.job.id;
331
+ const maxWaitMs = 120_000;
332
+ const pollMs = 250;
333
+ const start = Date.now();
334
+ while (Date.now() - start < maxWaitMs) {
335
+ const j = jobQueue.get(jobId);
336
+ if (!j)
337
+ return; // Pruned — treat as success
338
+ if (j.status === "completed")
339
+ return;
340
+ if (j.status === "failed") {
341
+ throw new Error(`Save job failed: ${j.error ?? "unknown"}`);
342
+ }
343
+ await new Promise((r) => setTimeout(r, pollMs));
344
+ }
345
+ throw new Error("Save job timed out");
346
+ },
347
+ }));
348
+ const durationMs = Date.now() - startedAt.getTime();
349
+ await appendAutoCaptureRunRecord(config.data_paths.data_dir, buildAutoCaptureRunRecord({
350
+ timestamp: startedAt.toISOString(),
351
+ enabledSources: config.capture.sources,
352
+ durationMs,
353
+ report,
354
+ }));
355
+ process.stderr.write(`Auto-capture: ${report.saved} saved, ${report.review} review, ${report.discarded} discarded, ${report.errors} errors, ${report.new_conversations} new, ${durationMs}ms\n`);
356
+ }
357
+ catch (err) {
358
+ const error = err instanceof Error ? err.message : String(err);
359
+ try {
360
+ await appendAutoCaptureRunRecord(config.data_paths.data_dir, {
361
+ timestamp: startedAt.toISOString(),
362
+ enabled_sources: config.capture.sources,
363
+ run_ok: false,
364
+ preflight_ok: true,
365
+ duration_ms: Date.now() - startedAt.getTime(),
366
+ counts_by_source: Object.fromEntries(config.capture.sources.map((source) => [source, zeroCounts()])),
367
+ errors: [{
368
+ sessionId: "run",
369
+ error,
370
+ }],
371
+ run_error: error,
372
+ });
373
+ }
374
+ catch (observabilityErr) {
375
+ process.stderr.write(`Auto-capture observability append failed: ${observabilityErr instanceof Error ? observabilityErr.message : String(observabilityErr)}\n`);
376
+ }
377
+ process.stderr.write(`Auto-capture error: ${error}\n`);
378
+ }
379
+ };
380
+ // Run once at startup (after tables are ready)
381
+ void runCapture();
382
+ captureInterval = setInterval(() => void runCapture(), captureIntervalMs);
383
+ process.stderr.write(`Auto-capture enabled for ${config.capture.sources.join(", ")} (interval: ${config.capture.interval_seconds}s)\n`);
384
+ }
385
+ // Write PID file so the CLI can find and signal this process.
386
+ const pidPath = path.join(config.data_paths.data_dir, "rift.pid");
387
+ fs.writeFileSync(pidPath, String(process.pid));
388
+ // Clean up PID file, auth timers, watchers, scan interval, and tables on exit.
389
+ // Worker pool is shut down via registerShutdownHandlers' onShutdown hook
390
+ // (runs before process.exit, so the 3s SIGKILL escalation works).
391
+ process.on("exit", () => {
392
+ if (scanInterval)
393
+ clearInterval(scanInterval);
394
+ if (captureInterval)
395
+ clearInterval(captureInterval);
396
+ tokenManager.shutdown();
397
+ for (const w of watchers) {
398
+ void w.stop();
399
+ }
400
+ closeTables();
401
+ try {
402
+ fs.unlinkSync(pidPath);
403
+ }
404
+ catch {
405
+ // Best-effort — process is exiting.
406
+ }
407
+ });
408
+ const buildInfo = getBuildInfo();
409
+ process.stderr.write(`rift ${buildInfo.version} (commit ${buildInfo.commit.slice(0, 12)}, node ${buildInfo.node}) listening on ${config.server.host}:${config.server.port}\n`);
410
+ // Regenerate the on-disk capability map at boot so a fresh daemon always
411
+ // advertises the current tool surface, independent of whether /status is
412
+ // ever hit. Before this, `data/rift-context.md` only refreshed as a side
413
+ // effect of GET /status, leaving newly-shipped tools (e.g. rift_context_pack)
414
+ // missing from the map right after a deploy. Best-effort: writeRiftContext
415
+ // already swallows and logs its own failures.
416
+ try {
417
+ const counts = await getCapabilityCounts();
418
+ const capabilityMap = generateCapabilityMap(counts);
419
+ await writeRiftContext(config.data_paths.data_dir, capabilityMap);
420
+ }
421
+ catch (err) {
422
+ process.stderr.write(`Boot capability-map regeneration failed (non-fatal): ${err instanceof Error ? err.message : String(err)}\n`);
423
+ }
424
+ markReady();
425
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export declare function formatError(err: unknown): {
2
+ content: {
3
+ type: "text";
4
+ text: string;
5
+ }[];
6
+ isError: true;
7
+ };
8
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/mcp/errors.ts"],"names":[],"mappings":"AAMA,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO;;;;;;EAqCvC"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Shared error formatting for MCP tool handlers.
3
+ * Translates CliError codes into human-readable MCP error content.
4
+ */
5
+ import { CliError } from "../cli/http-client.js";
6
+ export function formatError(err) {
7
+ if (err instanceof CliError) {
8
+ let message;
9
+ switch (err.code) {
10
+ case "connection_refused":
11
+ message = "Rift daemon is not running. Start it first.";
12
+ break;
13
+ case "unauthorized":
14
+ message =
15
+ "Authentication failed. Run: rift token issue <config-path>";
16
+ break;
17
+ case "validation":
18
+ message = `Validation error: ${formatBody(err.body)}`;
19
+ break;
20
+ case "conflict":
21
+ message = "Another exclusive operation is running. Try again later.";
22
+ break;
23
+ case "rate_limited":
24
+ message = "Rate limited. Retry later.";
25
+ break;
26
+ case "server_error":
27
+ message = `Server error: ${formatBody(err.body)}`;
28
+ break;
29
+ default:
30
+ message = err.message;
31
+ }
32
+ return {
33
+ content: [{ type: "text", text: message }],
34
+ isError: true,
35
+ };
36
+ }
37
+ const text = err instanceof Error ? err.message : String(err);
38
+ return {
39
+ content: [{ type: "text", text: `Error: ${text}` }],
40
+ isError: true,
41
+ };
42
+ }
43
+ function formatBody(body) {
44
+ if (body === undefined || body === null)
45
+ return "(no details)";
46
+ if (typeof body === "string")
47
+ return body;
48
+ return JSON.stringify(body, null, 2);
49
+ }
50
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/mcp/errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjD,MAAM,UAAU,WAAW,CAAC,GAAY;IACtC,IAAI,GAAG,YAAY,QAAQ,EAAE,CAAC;QAC5B,IAAI,OAAe,CAAC;QACpB,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;YACjB,KAAK,oBAAoB;gBACvB,OAAO,GAAG,6CAA6C,CAAC;gBACxD,MAAM;YACR,KAAK,cAAc;gBACjB,OAAO;oBACL,4DAA4D,CAAC;gBAC/D,MAAM;YACR,KAAK,YAAY;gBACf,OAAO,GAAG,qBAAqB,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtD,MAAM;YACR,KAAK,UAAU;gBACb,OAAO,GAAG,0DAA0D,CAAC;gBACrE,MAAM;YACR,KAAK,cAAc;gBACjB,OAAO,GAAG,4BAA4B,CAAC;gBACvC,MAAM;YACR,KAAK,cAAc;gBACjB,OAAO,GAAG,iBAAiB,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClD,MAAM;YACR;gBACE,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;QAC1B,CAAC;QACD,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;YACnD,OAAO,EAAE,IAAa;SACvB,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC9D,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAU,IAAI,EAAE,EAAE,CAAC;QAC5D,OAAO,EAAE,IAAa;KACvB,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,IAAa;IAC/B,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,cAAc,CAAC;IAC/D,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC1C,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACvC,CAAC"}
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env node
2
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
3
+ export interface CreateServerOpts {
4
+ configPath: string;
5
+ tokenOverride?: string | null;
6
+ /** Test-only: inject a custom fetch implementation. */
7
+ fetchFn?: typeof fetch;
8
+ }
9
+ export declare function createMcpServer(opts: CreateServerOpts): Promise<McpServer>;
10
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/mcp/server.ts"],"names":[],"mappings":";AAYA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAsBpE,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,uDAAuD;IACvD,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;CACxB;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,SAAS,CAAC,CA+GhF"}
@@ -0,0 +1,94 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Rift MCP server.
4
+ *
5
+ * Stdio-based MCP server that exposes Rift tools to LLM agents.
6
+ * Delegates all calls to the localhost HTTP daemon via the shared CLI
7
+ * HTTP client.
8
+ *
9
+ * Usage: node dist/src/mcp/server.js <config-path>
10
+ */
11
+ import fs from "node:fs";
12
+ import path from "node:path";
13
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
14
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
15
+ import { loadConfig } from "../config/loader.js";
16
+ import { createHttpClient, readToken, resolveBaseUrl, } from "../cli/http-client.js";
17
+ import { saveSchema, handleRiftSave } from "./tools/save.js";
18
+ import { searchSchema, handleRiftSearch } from "./tools/search.js";
19
+ import { conversationsSearchSchema, handleRiftConversationsSearch, } from "./tools/conversations-search.js";
20
+ import { contextPackSchema, handleRiftContextPack, } from "./tools/context-pack.js";
21
+ import { handleRiftStatus } from "./tools/status.js";
22
+ import { ToolUsageLogger } from "../observability/tool-usage.js";
23
+ import { getBuildInfo } from "../server/build-info.js";
24
+ export async function createMcpServer(opts) {
25
+ const config = loadConfig(opts.configPath);
26
+ const baseUrl = resolveBaseUrl(opts.configPath);
27
+ const dataDir = config.data_paths.data_dir;
28
+ const token = opts.tokenOverride ?? (await readToken());
29
+ if (!token) {
30
+ throw new Error("No auth token found. Run: rift token issue <config-path>");
31
+ }
32
+ const client = createHttpClient({
33
+ baseUrl,
34
+ token,
35
+ ...(opts.fetchFn ? { fetchFn: opts.fetchFn } : {}),
36
+ });
37
+ const logger = new ToolUsageLogger(dataDir);
38
+ const server = new McpServer({
39
+ name: "rift",
40
+ version: getBuildInfo().version,
41
+ });
42
+ // --- Tools ---
43
+ server.tool("rift_save", 'Save an LLM agent session to Rift. Provide source and summary (required). Optionally include domain, decisions made, key outputs, topics, and an idempotency_key to prevent duplicates. Returns a job_id (processed async).', saveSchema, async (args) => logger.wrap("rift_save", args, () => handleRiftSave(args, client)));
44
+ server.tool("rift_search", 'Search across all Rift memory: watched files, project docs, conversations, and digests. Use scope to narrow: "documents" for files, "conversations" for chat history, "clients" for client work, "projects" for project files. Use cwd to scope file results to the current project directory (conversations are not filtered by cwd). If cwd doesn\'t match a configured source directory, search runs across all data. Returns ranked results with relevance scores.', searchSchema, async (args) => logger.wrap("rift_search", args, () => handleRiftSearch(args, client)));
45
+ server.tool("rift_conversations_search", 'Search conversation history with structured filters. Use detail="summary" for recent conversations (last 30 days + digests), detail="full" for older conversations. Filter by source, domain, intent, quality (enum values). Narrow further by topic or decision (free-text, matches against conversation metadata). More precise than rift_search for conversation-specific queries.', conversationsSearchSchema, async (args) => logger.wrap("rift_conversations_search", args, () => handleRiftConversationsSearch(args, client)));
46
+ server.tool("rift_context_pack", 'Build a compact, bucketed context pack for an active task. Returns prior decisions, project constraints (MUST/NEVER-style rules), example conversations, and rule documents — all summarized, never raw transcripts. Response is strictly bounded by max_bytes (default 4096, ceiling 16384). Use cwd to narrow document/rule results to the current project. Prefer this over rift_search when you need durable context to steer an agent, not a ranked hit list.', contextPackSchema, async (args) => logger.wrap("rift_context_pack", args, () => handleRiftContextPack(args, client)));
47
+ server.tool("rift_status", "Capability map for Rift: lists the memory classes available (conversations, digests, structured documents), names the tools for each job (rift_search, rift_conversations_search, rift_context_pack, rift_status), and states default behavior. Call this before deciding whether to search. Not for content retrieval — use rift_search for that.", {}, async () => logger.wrap("rift_status", {}, () => handleRiftStatus({}, client)));
48
+ // --- Resource ---
49
+ server.resource("rift-context.md", "rift://rift-context.md", { description: "Current Rift system status as markdown", mimeType: "text/markdown" }, async (uri) => {
50
+ const filePath = path.join(dataDir, "rift-context.md");
51
+ try {
52
+ const content = fs.readFileSync(filePath, "utf-8");
53
+ return {
54
+ contents: [
55
+ { uri: uri.href, text: content, mimeType: "text/markdown" },
56
+ ],
57
+ };
58
+ }
59
+ catch (err) {
60
+ const code = err.code;
61
+ const message = code === "ENOENT"
62
+ ? "rift-context.md not found. Call rift_status to generate it."
63
+ : `Failed to read rift-context.md: ${err instanceof Error ? err.message : String(err)}`;
64
+ return {
65
+ contents: [
66
+ { uri: uri.href, text: message, mimeType: "text/markdown" },
67
+ ],
68
+ };
69
+ }
70
+ });
71
+ return server;
72
+ }
73
+ // --- Standalone execution ---
74
+ const isMain = process.argv[1] &&
75
+ (process.argv[1].endsWith("/mcp/server.js") ||
76
+ process.argv[1].endsWith("/mcp/server.ts"));
77
+ if (isMain) {
78
+ const configPath = process.argv[2];
79
+ if (!configPath) {
80
+ process.stderr.write("Usage: rift-mcp <config-path>\n");
81
+ process.exit(1);
82
+ }
83
+ createMcpServer({ configPath })
84
+ .then(async (server) => {
85
+ const transport = new StdioServerTransport();
86
+ await server.connect(transport);
87
+ process.stderr.write("Rift MCP server running on stdio\n");
88
+ })
89
+ .catch((err) => {
90
+ process.stderr.write(`Fatal: ${err instanceof Error ? err.message : String(err)}\n`);
91
+ process.exit(1);
92
+ });
93
+ }
94
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/mcp/server.ts"],"names":[],"mappings":"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"}