@getrift/rift 0.0.0 → 0.1.0-beta.0

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 (628) hide show
  1. package/README.dev.md +110 -0
  2. package/README.md +130 -0
  3. package/dist/src/auth/keychain.d.ts +25 -0
  4. package/dist/src/auth/keychain.d.ts.map +1 -0
  5. package/dist/src/auth/keychain.js +113 -0
  6. package/dist/src/auth/keychain.js.map +1 -0
  7. package/dist/src/auth/middleware.d.ts +20 -0
  8. package/dist/src/auth/middleware.d.ts.map +1 -0
  9. package/dist/src/auth/middleware.js +49 -0
  10. package/dist/src/auth/middleware.js.map +1 -0
  11. package/dist/src/auth/rate-limit.d.ts +16 -0
  12. package/dist/src/auth/rate-limit.d.ts.map +1 -0
  13. package/dist/src/auth/rate-limit.js +38 -0
  14. package/dist/src/auth/rate-limit.js.map +1 -0
  15. package/dist/src/auth/rotation.d.ts +67 -0
  16. package/dist/src/auth/rotation.d.ts.map +1 -0
  17. package/dist/src/auth/rotation.js +190 -0
  18. package/dist/src/auth/rotation.js.map +1 -0
  19. package/dist/src/backfill/project-context-batch-constructor.d.ts +127 -0
  20. package/dist/src/backfill/project-context-batch-constructor.d.ts.map +1 -0
  21. package/dist/src/backfill/project-context-batch-constructor.js +210 -0
  22. package/dist/src/backfill/project-context-batch-constructor.js.map +1 -0
  23. package/dist/src/capture/auto-capture.d.ts +162 -0
  24. package/dist/src/capture/auto-capture.d.ts.map +1 -0
  25. package/dist/src/capture/auto-capture.js +601 -0
  26. package/dist/src/capture/auto-capture.js.map +1 -0
  27. package/dist/src/capture/batch-budget.d.ts +90 -0
  28. package/dist/src/capture/batch-budget.d.ts.map +1 -0
  29. package/dist/src/capture/batch-budget.js +148 -0
  30. package/dist/src/capture/batch-budget.js.map +1 -0
  31. package/dist/src/capture/codex-cli-triage-provider.d.ts +17 -0
  32. package/dist/src/capture/codex-cli-triage-provider.d.ts.map +1 -0
  33. package/dist/src/capture/codex-cli-triage-provider.js +109 -0
  34. package/dist/src/capture/codex-cli-triage-provider.js.map +1 -0
  35. package/dist/src/capture/observability.d.ts +42 -0
  36. package/dist/src/capture/observability.d.ts.map +1 -0
  37. package/dist/src/capture/observability.js +87 -0
  38. package/dist/src/capture/observability.js.map +1 -0
  39. package/dist/src/capture/openai-triage-provider.d.ts +92 -0
  40. package/dist/src/capture/openai-triage-provider.d.ts.map +1 -0
  41. package/dist/src/capture/openai-triage-provider.js +267 -0
  42. package/dist/src/capture/openai-triage-provider.js.map +1 -0
  43. package/dist/src/capture/review-queue-index.d.ts +51 -0
  44. package/dist/src/capture/review-queue-index.d.ts.map +1 -0
  45. package/dist/src/capture/review-queue-index.js +204 -0
  46. package/dist/src/capture/review-queue-index.js.map +1 -0
  47. package/dist/src/capture/review-queue.d.ts +43 -0
  48. package/dist/src/capture/review-queue.d.ts.map +1 -0
  49. package/dist/src/capture/review-queue.js +116 -0
  50. package/dist/src/capture/review-queue.js.map +1 -0
  51. package/dist/src/capture/sources.d.ts +7 -0
  52. package/dist/src/capture/sources.d.ts.map +1 -0
  53. package/dist/src/capture/sources.js +3 -0
  54. package/dist/src/capture/sources.js.map +1 -0
  55. package/dist/src/capture/triage-lane.d.ts +39 -0
  56. package/dist/src/capture/triage-lane.d.ts.map +1 -0
  57. package/dist/src/capture/triage-lane.js +217 -0
  58. package/dist/src/capture/triage-lane.js.map +1 -0
  59. package/dist/src/capture/triage-provider.d.ts +75 -0
  60. package/dist/src/capture/triage-provider.d.ts.map +1 -0
  61. package/dist/src/capture/triage-provider.js +120 -0
  62. package/dist/src/capture/triage-provider.js.map +1 -0
  63. package/dist/src/capture/triage.d.ts +30 -0
  64. package/dist/src/capture/triage.d.ts.map +1 -0
  65. package/dist/src/capture/triage.js +48 -0
  66. package/dist/src/capture/triage.js.map +1 -0
  67. package/dist/src/cli/commands/backfill.d.ts +3 -0
  68. package/dist/src/cli/commands/backfill.d.ts.map +1 -0
  69. package/dist/src/cli/commands/backfill.js +1376 -0
  70. package/dist/src/cli/commands/backfill.js.map +1 -0
  71. package/dist/src/cli/commands/bulk-ingest.d.ts +3 -0
  72. package/dist/src/cli/commands/bulk-ingest.d.ts.map +1 -0
  73. package/dist/src/cli/commands/bulk-ingest.js +126 -0
  74. package/dist/src/cli/commands/bulk-ingest.js.map +1 -0
  75. package/dist/src/cli/commands/capture.d.ts +12 -0
  76. package/dist/src/cli/commands/capture.d.ts.map +1 -0
  77. package/dist/src/cli/commands/capture.js +123 -0
  78. package/dist/src/cli/commands/capture.js.map +1 -0
  79. package/dist/src/cli/commands/compact.d.ts +3 -0
  80. package/dist/src/cli/commands/compact.d.ts.map +1 -0
  81. package/dist/src/cli/commands/compact.js +70 -0
  82. package/dist/src/cli/commands/compact.js.map +1 -0
  83. package/dist/src/cli/commands/feedback.d.ts +22 -0
  84. package/dist/src/cli/commands/feedback.d.ts.map +1 -0
  85. package/dist/src/cli/commands/feedback.js +125 -0
  86. package/dist/src/cli/commands/feedback.js.map +1 -0
  87. package/dist/src/cli/commands/import.d.ts +19 -0
  88. package/dist/src/cli/commands/import.d.ts.map +1 -0
  89. package/dist/src/cli/commands/import.js +258 -0
  90. package/dist/src/cli/commands/import.js.map +1 -0
  91. package/dist/src/cli/commands/ingest.d.ts +3 -0
  92. package/dist/src/cli/commands/ingest.d.ts.map +1 -0
  93. package/dist/src/cli/commands/ingest.js +80 -0
  94. package/dist/src/cli/commands/ingest.js.map +1 -0
  95. package/dist/src/cli/commands/mcp-install.d.ts +25 -0
  96. package/dist/src/cli/commands/mcp-install.d.ts.map +1 -0
  97. package/dist/src/cli/commands/mcp-install.js +134 -0
  98. package/dist/src/cli/commands/mcp-install.js.map +1 -0
  99. package/dist/src/cli/commands/onboard.d.ts +98 -0
  100. package/dist/src/cli/commands/onboard.d.ts.map +1 -0
  101. package/dist/src/cli/commands/onboard.js +742 -0
  102. package/dist/src/cli/commands/onboard.js.map +1 -0
  103. package/dist/src/cli/commands/rebuild.d.ts +12 -0
  104. package/dist/src/cli/commands/rebuild.d.ts.map +1 -0
  105. package/dist/src/cli/commands/rebuild.js +164 -0
  106. package/dist/src/cli/commands/rebuild.js.map +1 -0
  107. package/dist/src/cli/commands/reconcile.d.ts +3 -0
  108. package/dist/src/cli/commands/reconcile.d.ts.map +1 -0
  109. package/dist/src/cli/commands/reconcile.js +56 -0
  110. package/dist/src/cli/commands/reconcile.js.map +1 -0
  111. package/dist/src/cli/commands/reindex.d.ts +3 -0
  112. package/dist/src/cli/commands/reindex.d.ts.map +1 -0
  113. package/dist/src/cli/commands/reindex.js +66 -0
  114. package/dist/src/cli/commands/reindex.js.map +1 -0
  115. package/dist/src/cli/commands/review.d.ts +13 -0
  116. package/dist/src/cli/commands/review.d.ts.map +1 -0
  117. package/dist/src/cli/commands/review.js +383 -0
  118. package/dist/src/cli/commands/review.js.map +1 -0
  119. package/dist/src/cli/commands/save.d.ts +3 -0
  120. package/dist/src/cli/commands/save.d.ts.map +1 -0
  121. package/dist/src/cli/commands/save.js +111 -0
  122. package/dist/src/cli/commands/save.js.map +1 -0
  123. package/dist/src/cli/commands/search.d.ts +35 -0
  124. package/dist/src/cli/commands/search.d.ts.map +1 -0
  125. package/dist/src/cli/commands/search.js +88 -0
  126. package/dist/src/cli/commands/search.js.map +1 -0
  127. package/dist/src/cli/commands/stats.d.ts +3 -0
  128. package/dist/src/cli/commands/stats.d.ts.map +1 -0
  129. package/dist/src/cli/commands/stats.js +42 -0
  130. package/dist/src/cli/commands/stats.js.map +1 -0
  131. package/dist/src/cli/commands/status.d.ts +15 -0
  132. package/dist/src/cli/commands/status.d.ts.map +1 -0
  133. package/dist/src/cli/commands/status.js +89 -0
  134. package/dist/src/cli/commands/status.js.map +1 -0
  135. package/dist/src/cli/commands/token-issue.d.ts +3 -0
  136. package/dist/src/cli/commands/token-issue.d.ts.map +1 -0
  137. package/dist/src/cli/commands/token-issue.js +25 -0
  138. package/dist/src/cli/commands/token-issue.js.map +1 -0
  139. package/dist/src/cli/commands/triage.d.ts +3 -0
  140. package/dist/src/cli/commands/triage.d.ts.map +1 -0
  141. package/dist/src/cli/commands/triage.js +125 -0
  142. package/dist/src/cli/commands/triage.js.map +1 -0
  143. package/dist/src/cli/commands/uninstall.d.ts +3 -0
  144. package/dist/src/cli/commands/uninstall.d.ts.map +1 -0
  145. package/dist/src/cli/commands/uninstall.js +238 -0
  146. package/dist/src/cli/commands/uninstall.js.map +1 -0
  147. package/dist/src/cli/feedback/feedback-config.d.ts +21 -0
  148. package/dist/src/cli/feedback/feedback-config.d.ts.map +1 -0
  149. package/dist/src/cli/feedback/feedback-config.js +43 -0
  150. package/dist/src/cli/feedback/feedback-config.js.map +1 -0
  151. package/dist/src/cli/feedback/feedback-history.d.ts +4 -0
  152. package/dist/src/cli/feedback/feedback-history.d.ts.map +1 -0
  153. package/dist/src/cli/feedback/feedback-history.js +115 -0
  154. package/dist/src/cli/feedback/feedback-history.js.map +1 -0
  155. package/dist/src/cli/feedback/feedback-payload.d.ts +53 -0
  156. package/dist/src/cli/feedback/feedback-payload.d.ts.map +1 -0
  157. package/dist/src/cli/feedback/feedback-payload.js +10 -0
  158. package/dist/src/cli/feedback/feedback-payload.js.map +1 -0
  159. package/dist/src/cli/feedback/feedback-relay.d.ts +15 -0
  160. package/dist/src/cli/feedback/feedback-relay.d.ts.map +1 -0
  161. package/dist/src/cli/feedback/feedback-relay.js +47 -0
  162. package/dist/src/cli/feedback/feedback-relay.js.map +1 -0
  163. package/dist/src/cli/feedback/feedback-status.d.ts +11 -0
  164. package/dist/src/cli/feedback/feedback-status.d.ts.map +1 -0
  165. package/dist/src/cli/feedback/feedback-status.js +122 -0
  166. package/dist/src/cli/feedback/feedback-status.js.map +1 -0
  167. package/dist/src/cli/http-client.d.ts +36 -0
  168. package/dist/src/cli/http-client.d.ts.map +1 -0
  169. package/dist/src/cli/http-client.js +153 -0
  170. package/dist/src/cli/http-client.js.map +1 -0
  171. package/dist/src/cli/index.d.ts +4 -0
  172. package/dist/src/cli/index.d.ts.map +1 -0
  173. package/dist/src/cli/index.js +66 -0
  174. package/dist/src/cli/index.js.map +1 -0
  175. package/dist/src/cli/job-poller.d.ts +13 -0
  176. package/dist/src/cli/job-poller.d.ts.map +1 -0
  177. package/dist/src/cli/job-poller.js +29 -0
  178. package/dist/src/cli/job-poller.js.map +1 -0
  179. package/dist/src/cli/mcp-config-writers/codex-toml.d.ts +10 -0
  180. package/dist/src/cli/mcp-config-writers/codex-toml.d.ts.map +1 -0
  181. package/dist/src/cli/mcp-config-writers/codex-toml.js +410 -0
  182. package/dist/src/cli/mcp-config-writers/codex-toml.js.map +1 -0
  183. package/dist/src/cli/mcp-config-writers/errors.d.ts +17 -0
  184. package/dist/src/cli/mcp-config-writers/errors.d.ts.map +1 -0
  185. package/dist/src/cli/mcp-config-writers/errors.js +13 -0
  186. package/dist/src/cli/mcp-config-writers/errors.js.map +1 -0
  187. package/dist/src/cli/mcp-config-writers/index.d.ts +18 -0
  188. package/dist/src/cli/mcp-config-writers/index.d.ts.map +1 -0
  189. package/dist/src/cli/mcp-config-writers/index.js +49 -0
  190. package/dist/src/cli/mcp-config-writers/index.js.map +1 -0
  191. package/dist/src/cli/mcp-config-writers/json-config.d.ts +12 -0
  192. package/dist/src/cli/mcp-config-writers/json-config.d.ts.map +1 -0
  193. package/dist/src/cli/mcp-config-writers/json-config.js +177 -0
  194. package/dist/src/cli/mcp-config-writers/json-config.js.map +1 -0
  195. package/dist/src/cli/mcp-config-writers/redact.d.ts +28 -0
  196. package/dist/src/cli/mcp-config-writers/redact.d.ts.map +1 -0
  197. package/dist/src/cli/mcp-config-writers/redact.js +48 -0
  198. package/dist/src/cli/mcp-config-writers/redact.js.map +1 -0
  199. package/dist/src/cli/mcp-config-writers/types.d.ts +32 -0
  200. package/dist/src/cli/mcp-config-writers/types.d.ts.map +1 -0
  201. package/dist/src/cli/mcp-config-writers/types.js +5 -0
  202. package/dist/src/cli/mcp-config-writers/types.js.map +1 -0
  203. package/dist/src/cli/output.d.ts +8 -0
  204. package/dist/src/cli/output.d.ts.map +1 -0
  205. package/dist/src/cli/output.js +34 -0
  206. package/dist/src/cli/output.js.map +1 -0
  207. package/dist/src/cli/status/friend-header.d.ts +33 -0
  208. package/dist/src/cli/status/friend-header.d.ts.map +1 -0
  209. package/dist/src/cli/status/friend-header.js +108 -0
  210. package/dist/src/cli/status/friend-header.js.map +1 -0
  211. package/dist/src/cli/status/local-signals.d.ts +14 -0
  212. package/dist/src/cli/status/local-signals.d.ts.map +1 -0
  213. package/dist/src/cli/status/local-signals.js +73 -0
  214. package/dist/src/cli/status/local-signals.js.map +1 -0
  215. package/dist/src/cli/token.d.ts +37 -0
  216. package/dist/src/cli/token.d.ts.map +1 -0
  217. package/dist/src/cli/token.js +105 -0
  218. package/dist/src/cli/token.js.map +1 -0
  219. package/dist/src/cli/uninstall/mcp-uninstall.d.ts +33 -0
  220. package/dist/src/cli/uninstall/mcp-uninstall.d.ts.map +1 -0
  221. package/dist/src/cli/uninstall/mcp-uninstall.js +181 -0
  222. package/dist/src/cli/uninstall/mcp-uninstall.js.map +1 -0
  223. package/dist/src/config/loader.d.ts +9 -0
  224. package/dist/src/config/loader.d.ts.map +1 -0
  225. package/dist/src/config/loader.js +73 -0
  226. package/dist/src/config/loader.js.map +1 -0
  227. package/dist/src/config/schema.d.ts +635 -0
  228. package/dist/src/config/schema.d.ts.map +1 -0
  229. package/dist/src/config/schema.js +208 -0
  230. package/dist/src/config/schema.js.map +1 -0
  231. package/dist/src/ingestion/bulk-ingest.d.ts +11 -0
  232. package/dist/src/ingestion/bulk-ingest.d.ts.map +1 -0
  233. package/dist/src/ingestion/bulk-ingest.js +11 -0
  234. package/dist/src/ingestion/bulk-ingest.js.map +1 -0
  235. package/dist/src/ingestion/extractor.d.ts +16 -0
  236. package/dist/src/ingestion/extractor.d.ts.map +1 -0
  237. package/dist/src/ingestion/extractor.js +85 -0
  238. package/dist/src/ingestion/extractor.js.map +1 -0
  239. package/dist/src/ingestion/extractors/docx.d.ts +3 -0
  240. package/dist/src/ingestion/extractors/docx.d.ts.map +1 -0
  241. package/dist/src/ingestion/extractors/docx.js +20 -0
  242. package/dist/src/ingestion/extractors/docx.js.map +1 -0
  243. package/dist/src/ingestion/extractors/pdf.d.ts +3 -0
  244. package/dist/src/ingestion/extractors/pdf.d.ts.map +1 -0
  245. package/dist/src/ingestion/extractors/pdf.js +32 -0
  246. package/dist/src/ingestion/extractors/pdf.js.map +1 -0
  247. package/dist/src/ingestion/historical-campaign.d.ts +340 -0
  248. package/dist/src/ingestion/historical-campaign.d.ts.map +1 -0
  249. package/dist/src/ingestion/historical-campaign.js +1010 -0
  250. package/dist/src/ingestion/historical-campaign.js.map +1 -0
  251. package/dist/src/ingestion/ignored-paths.d.ts +20 -0
  252. package/dist/src/ingestion/ignored-paths.d.ts.map +1 -0
  253. package/dist/src/ingestion/ignored-paths.js +45 -0
  254. package/dist/src/ingestion/ignored-paths.js.map +1 -0
  255. package/dist/src/ingestion/inbox-watcher.d.ts +12 -0
  256. package/dist/src/ingestion/inbox-watcher.d.ts.map +1 -0
  257. package/dist/src/ingestion/inbox-watcher.js +99 -0
  258. package/dist/src/ingestion/inbox-watcher.js.map +1 -0
  259. package/dist/src/ingestion/indexer.d.ts +32 -0
  260. package/dist/src/ingestion/indexer.d.ts.map +1 -0
  261. package/dist/src/ingestion/indexer.js +68 -0
  262. package/dist/src/ingestion/indexer.js.map +1 -0
  263. package/dist/src/ingestion/metadata-extraction.d.ts +53 -0
  264. package/dist/src/ingestion/metadata-extraction.d.ts.map +1 -0
  265. package/dist/src/ingestion/metadata-extraction.js +132 -0
  266. package/dist/src/ingestion/metadata-extraction.js.map +1 -0
  267. package/dist/src/ingestion/parsers/chatgpt-web.d.ts +29 -0
  268. package/dist/src/ingestion/parsers/chatgpt-web.d.ts.map +1 -0
  269. package/dist/src/ingestion/parsers/chatgpt-web.js +100 -0
  270. package/dist/src/ingestion/parsers/chatgpt-web.js.map +1 -0
  271. package/dist/src/ingestion/parsers/claude-code-jsonl.d.ts +16 -0
  272. package/dist/src/ingestion/parsers/claude-code-jsonl.d.ts.map +1 -0
  273. package/dist/src/ingestion/parsers/claude-code-jsonl.js +123 -0
  274. package/dist/src/ingestion/parsers/claude-code-jsonl.js.map +1 -0
  275. package/dist/src/ingestion/parsers/claude-web.d.ts +24 -0
  276. package/dist/src/ingestion/parsers/claude-web.d.ts.map +1 -0
  277. package/dist/src/ingestion/parsers/claude-web.js +78 -0
  278. package/dist/src/ingestion/parsers/claude-web.js.map +1 -0
  279. package/dist/src/ingestion/parsers/codex-jsonl.d.ts +18 -0
  280. package/dist/src/ingestion/parsers/codex-jsonl.d.ts.map +1 -0
  281. package/dist/src/ingestion/parsers/codex-jsonl.js +125 -0
  282. package/dist/src/ingestion/parsers/codex-jsonl.js.map +1 -0
  283. package/dist/src/ingestion/parsers/gemini-web.d.ts +16 -0
  284. package/dist/src/ingestion/parsers/gemini-web.d.ts.map +1 -0
  285. package/dist/src/ingestion/parsers/gemini-web.js +170 -0
  286. package/dist/src/ingestion/parsers/gemini-web.js.map +1 -0
  287. package/dist/src/ingestion/parsers/grok-web.d.ts +40 -0
  288. package/dist/src/ingestion/parsers/grok-web.d.ts.map +1 -0
  289. package/dist/src/ingestion/parsers/grok-web.js +67 -0
  290. package/dist/src/ingestion/parsers/grok-web.js.map +1 -0
  291. package/dist/src/ingestion/parsers/types.d.ts +34 -0
  292. package/dist/src/ingestion/parsers/types.d.ts.map +1 -0
  293. package/dist/src/ingestion/parsers/types.js +26 -0
  294. package/dist/src/ingestion/parsers/types.js.map +1 -0
  295. package/dist/src/ingestion/scanner.d.ts +48 -0
  296. package/dist/src/ingestion/scanner.d.ts.map +1 -0
  297. package/dist/src/ingestion/scanner.js +131 -0
  298. package/dist/src/ingestion/scanner.js.map +1 -0
  299. package/dist/src/ingestion/staging.d.ts +109 -0
  300. package/dist/src/ingestion/staging.d.ts.map +1 -0
  301. package/dist/src/ingestion/staging.js +411 -0
  302. package/dist/src/ingestion/staging.js.map +1 -0
  303. package/dist/src/ingestion/watcher.d.ts +65 -0
  304. package/dist/src/ingestion/watcher.d.ts.map +1 -0
  305. package/dist/src/ingestion/watcher.js +182 -0
  306. package/dist/src/ingestion/watcher.js.map +1 -0
  307. package/dist/src/jobs/codex-override-handler.d.ts +3 -0
  308. package/dist/src/jobs/codex-override-handler.d.ts.map +1 -0
  309. package/dist/src/jobs/codex-override-handler.js +16 -0
  310. package/dist/src/jobs/codex-override-handler.js.map +1 -0
  311. package/dist/src/jobs/handlers/compact.d.ts +30 -0
  312. package/dist/src/jobs/handlers/compact.d.ts.map +1 -0
  313. package/dist/src/jobs/handlers/compact.js +329 -0
  314. package/dist/src/jobs/handlers/compact.js.map +1 -0
  315. package/dist/src/jobs/handlers/ingest.d.ts +13 -0
  316. package/dist/src/jobs/handlers/ingest.d.ts.map +1 -0
  317. package/dist/src/jobs/handlers/ingest.js +255 -0
  318. package/dist/src/jobs/handlers/ingest.js.map +1 -0
  319. package/dist/src/jobs/handlers/reconcile.d.ts +29 -0
  320. package/dist/src/jobs/handlers/reconcile.d.ts.map +1 -0
  321. package/dist/src/jobs/handlers/reconcile.js +476 -0
  322. package/dist/src/jobs/handlers/reconcile.js.map +1 -0
  323. package/dist/src/jobs/handlers/reindex.d.ts +38 -0
  324. package/dist/src/jobs/handlers/reindex.d.ts.map +1 -0
  325. package/dist/src/jobs/handlers/reindex.js +52 -0
  326. package/dist/src/jobs/handlers/reindex.js.map +1 -0
  327. package/dist/src/jobs/handlers/save.d.ts +10 -0
  328. package/dist/src/jobs/handlers/save.d.ts.map +1 -0
  329. package/dist/src/jobs/handlers/save.js +206 -0
  330. package/dist/src/jobs/handlers/save.js.map +1 -0
  331. package/dist/src/jobs/handlers/triage.d.ts +47 -0
  332. package/dist/src/jobs/handlers/triage.d.ts.map +1 -0
  333. package/dist/src/jobs/handlers/triage.js +95 -0
  334. package/dist/src/jobs/handlers/triage.js.map +1 -0
  335. package/dist/src/jobs/queue.d.ts +107 -0
  336. package/dist/src/jobs/queue.d.ts.map +1 -0
  337. package/dist/src/jobs/queue.js +319 -0
  338. package/dist/src/jobs/queue.js.map +1 -0
  339. package/dist/src/jobs/types.d.ts +39 -0
  340. package/dist/src/jobs/types.d.ts.map +1 -0
  341. package/dist/src/jobs/types.js +29 -0
  342. package/dist/src/jobs/types.js.map +1 -0
  343. package/dist/src/jobs/worker-entry.d.ts +10 -0
  344. package/dist/src/jobs/worker-entry.d.ts.map +1 -0
  345. package/dist/src/jobs/worker-entry.js +210 -0
  346. package/dist/src/jobs/worker-entry.js.map +1 -0
  347. package/dist/src/jobs/worker-process.d.ts +50 -0
  348. package/dist/src/jobs/worker-process.d.ts.map +1 -0
  349. package/dist/src/jobs/worker-process.js +186 -0
  350. package/dist/src/jobs/worker-process.js.map +1 -0
  351. package/dist/src/jobs/worker.d.ts +11 -0
  352. package/dist/src/jobs/worker.d.ts.map +1 -0
  353. package/dist/src/jobs/worker.js +14 -0
  354. package/dist/src/jobs/worker.js.map +1 -0
  355. package/dist/src/main.d.ts +2 -0
  356. package/dist/src/main.d.ts.map +1 -0
  357. package/dist/src/main.js +425 -0
  358. package/dist/src/main.js.map +1 -0
  359. package/dist/src/mcp/errors.d.ts +8 -0
  360. package/dist/src/mcp/errors.d.ts.map +1 -0
  361. package/dist/src/mcp/errors.js +50 -0
  362. package/dist/src/mcp/errors.js.map +1 -0
  363. package/dist/src/mcp/server.d.ts +10 -0
  364. package/dist/src/mcp/server.d.ts.map +1 -0
  365. package/dist/src/mcp/server.js +94 -0
  366. package/dist/src/mcp/server.js.map +1 -0
  367. package/dist/src/mcp/tools/context-pack.d.ts +35 -0
  368. package/dist/src/mcp/tools/context-pack.d.ts.map +1 -0
  369. package/dist/src/mcp/tools/context-pack.js +97 -0
  370. package/dist/src/mcp/tools/context-pack.js.map +1 -0
  371. package/dist/src/mcp/tools/conversations-search.d.ts +38 -0
  372. package/dist/src/mcp/tools/conversations-search.d.ts.map +1 -0
  373. package/dist/src/mcp/tools/conversations-search.js +73 -0
  374. package/dist/src/mcp/tools/conversations-search.js.map +1 -0
  375. package/dist/src/mcp/tools/save.d.ts +32 -0
  376. package/dist/src/mcp/tools/save.d.ts.map +1 -0
  377. package/dist/src/mcp/tools/save.js +60 -0
  378. package/dist/src/mcp/tools/save.js.map +1 -0
  379. package/dist/src/mcp/tools/search.d.ts +33 -0
  380. package/dist/src/mcp/tools/search.d.ts.map +1 -0
  381. package/dist/src/mcp/tools/search.js +58 -0
  382. package/dist/src/mcp/tools/search.js.map +1 -0
  383. package/dist/src/mcp/tools/status.d.ts +17 -0
  384. package/dist/src/mcp/tools/status.d.ts.map +1 -0
  385. package/dist/src/mcp/tools/status.js +12 -0
  386. package/dist/src/mcp/tools/status.js.map +1 -0
  387. package/dist/src/observability/coverage.d.ts +100 -0
  388. package/dist/src/observability/coverage.d.ts.map +1 -0
  389. package/dist/src/observability/coverage.js +180 -0
  390. package/dist/src/observability/coverage.js.map +1 -0
  391. package/dist/src/observability/rift-context.d.ts +47 -0
  392. package/dist/src/observability/rift-context.d.ts.map +1 -0
  393. package/dist/src/observability/rift-context.js +118 -0
  394. package/dist/src/observability/rift-context.js.map +1 -0
  395. package/dist/src/observability/staleness.d.ts +43 -0
  396. package/dist/src/observability/staleness.d.ts.map +1 -0
  397. package/dist/src/observability/staleness.js +74 -0
  398. package/dist/src/observability/staleness.js.map +1 -0
  399. package/dist/src/observability/tool-usage-stats.d.ts +23 -0
  400. package/dist/src/observability/tool-usage-stats.d.ts.map +1 -0
  401. package/dist/src/observability/tool-usage-stats.js +83 -0
  402. package/dist/src/observability/tool-usage-stats.js.map +1 -0
  403. package/dist/src/observability/tool-usage.d.ts +68 -0
  404. package/dist/src/observability/tool-usage.d.ts.map +1 -0
  405. package/dist/src/observability/tool-usage.js +207 -0
  406. package/dist/src/observability/tool-usage.js.map +1 -0
  407. package/dist/src/onboarding/daemon-control.d.ts +33 -0
  408. package/dist/src/onboarding/daemon-control.d.ts.map +1 -0
  409. package/dist/src/onboarding/daemon-control.js +92 -0
  410. package/dist/src/onboarding/daemon-control.js.map +1 -0
  411. package/dist/src/onboarding/env-file.d.ts +18 -0
  412. package/dist/src/onboarding/env-file.d.ts.map +1 -0
  413. package/dist/src/onboarding/env-file.js +89 -0
  414. package/dist/src/onboarding/env-file.js.map +1 -0
  415. package/dist/src/onboarding/voyage-validate.d.ts +16 -0
  416. package/dist/src/onboarding/voyage-validate.d.ts.map +1 -0
  417. package/dist/src/onboarding/voyage-validate.js +85 -0
  418. package/dist/src/onboarding/voyage-validate.js.map +1 -0
  419. package/dist/src/providers/anthropic-digest.d.ts +23 -0
  420. package/dist/src/providers/anthropic-digest.d.ts.map +1 -0
  421. package/dist/src/providers/anthropic-digest.js +91 -0
  422. package/dist/src/providers/anthropic-digest.js.map +1 -0
  423. package/dist/src/providers/codex-cli-digest.d.ts +12 -0
  424. package/dist/src/providers/codex-cli-digest.d.ts.map +1 -0
  425. package/dist/src/providers/codex-cli-digest.js +70 -0
  426. package/dist/src/providers/codex-cli-digest.js.map +1 -0
  427. package/dist/src/providers/codex-cli-metadata-extraction.d.ts +14 -0
  428. package/dist/src/providers/codex-cli-metadata-extraction.d.ts.map +1 -0
  429. package/dist/src/providers/codex-cli-metadata-extraction.js +101 -0
  430. package/dist/src/providers/codex-cli-metadata-extraction.js.map +1 -0
  431. package/dist/src/providers/codex-cli-runner.d.ts +14 -0
  432. package/dist/src/providers/codex-cli-runner.d.ts.map +1 -0
  433. package/dist/src/providers/codex-cli-runner.js +272 -0
  434. package/dist/src/providers/codex-cli-runner.js.map +1 -0
  435. package/dist/src/providers/conversation-generation.d.ts +10 -0
  436. package/dist/src/providers/conversation-generation.d.ts.map +1 -0
  437. package/dist/src/providers/conversation-generation.js +54 -0
  438. package/dist/src/providers/conversation-generation.js.map +1 -0
  439. package/dist/src/providers/ollama-embed.d.ts +22 -0
  440. package/dist/src/providers/ollama-embed.d.ts.map +1 -0
  441. package/dist/src/providers/ollama-embed.js +133 -0
  442. package/dist/src/providers/ollama-embed.js.map +1 -0
  443. package/dist/src/providers/ollama.d.ts +42 -0
  444. package/dist/src/providers/ollama.d.ts.map +1 -0
  445. package/dist/src/providers/ollama.js +169 -0
  446. package/dist/src/providers/ollama.js.map +1 -0
  447. package/dist/src/providers/openai-metadata-extraction.d.ts +73 -0
  448. package/dist/src/providers/openai-metadata-extraction.d.ts.map +1 -0
  449. package/dist/src/providers/openai-metadata-extraction.js +161 -0
  450. package/dist/src/providers/openai-metadata-extraction.js.map +1 -0
  451. package/dist/src/providers/operator-overrides.d.ts +24 -0
  452. package/dist/src/providers/operator-overrides.d.ts.map +1 -0
  453. package/dist/src/providers/operator-overrides.js +84 -0
  454. package/dist/src/providers/operator-overrides.js.map +1 -0
  455. package/dist/src/providers/stub.d.ts +17 -0
  456. package/dist/src/providers/stub.d.ts.map +1 -0
  457. package/dist/src/providers/stub.js +72 -0
  458. package/dist/src/providers/stub.js.map +1 -0
  459. package/dist/src/providers/types.d.ts +82 -0
  460. package/dist/src/providers/types.d.ts.map +1 -0
  461. package/dist/src/providers/types.js +52 -0
  462. package/dist/src/providers/types.js.map +1 -0
  463. package/dist/src/providers/voyage.d.ts +23 -0
  464. package/dist/src/providers/voyage.d.ts.map +1 -0
  465. package/dist/src/providers/voyage.js +135 -0
  466. package/dist/src/providers/voyage.js.map +1 -0
  467. package/dist/src/retrieval/compact.d.ts +89 -0
  468. package/dist/src/retrieval/compact.d.ts.map +1 -0
  469. package/dist/src/retrieval/compact.js +348 -0
  470. package/dist/src/retrieval/compact.js.map +1 -0
  471. package/dist/src/retrieval/context-pack.d.ts +123 -0
  472. package/dist/src/retrieval/context-pack.d.ts.map +1 -0
  473. package/dist/src/retrieval/context-pack.js +553 -0
  474. package/dist/src/retrieval/context-pack.js.map +1 -0
  475. package/dist/src/retrieval/cwd.d.ts +25 -0
  476. package/dist/src/retrieval/cwd.d.ts.map +1 -0
  477. package/dist/src/retrieval/cwd.js +48 -0
  478. package/dist/src/retrieval/cwd.js.map +1 -0
  479. package/dist/src/retrieval/degraded.d.ts +20 -0
  480. package/dist/src/retrieval/degraded.d.ts.map +1 -0
  481. package/dist/src/retrieval/degraded.js +43 -0
  482. package/dist/src/retrieval/degraded.js.map +1 -0
  483. package/dist/src/retrieval/hybrid.d.ts +38 -0
  484. package/dist/src/retrieval/hybrid.d.ts.map +1 -0
  485. package/dist/src/retrieval/hybrid.js +82 -0
  486. package/dist/src/retrieval/hybrid.js.map +1 -0
  487. package/dist/src/retrieval/lexical.d.ts +28 -0
  488. package/dist/src/retrieval/lexical.d.ts.map +1 -0
  489. package/dist/src/retrieval/lexical.js +301 -0
  490. package/dist/src/retrieval/lexical.js.map +1 -0
  491. package/dist/src/retrieval/post-filter.d.ts +32 -0
  492. package/dist/src/retrieval/post-filter.d.ts.map +1 -0
  493. package/dist/src/retrieval/post-filter.js +57 -0
  494. package/dist/src/retrieval/post-filter.js.map +1 -0
  495. package/dist/src/retrieval/reranker.d.ts +72 -0
  496. package/dist/src/retrieval/reranker.d.ts.map +1 -0
  497. package/dist/src/retrieval/reranker.js +129 -0
  498. package/dist/src/retrieval/reranker.js.map +1 -0
  499. package/dist/src/retrieval/vector.d.ts +47 -0
  500. package/dist/src/retrieval/vector.d.ts.map +1 -0
  501. package/dist/src/retrieval/vector.js +112 -0
  502. package/dist/src/retrieval/vector.js.map +1 -0
  503. package/dist/src/runtime/legacy-migration.d.ts +27 -0
  504. package/dist/src/runtime/legacy-migration.d.ts.map +1 -0
  505. package/dist/src/runtime/legacy-migration.js +140 -0
  506. package/dist/src/runtime/legacy-migration.js.map +1 -0
  507. package/dist/src/runtime/legacy-name-guard.d.ts +35 -0
  508. package/dist/src/runtime/legacy-name-guard.d.ts.map +1 -0
  509. package/dist/src/runtime/legacy-name-guard.js +58 -0
  510. package/dist/src/runtime/legacy-name-guard.js.map +1 -0
  511. package/dist/src/runtime/rift-env.d.ts +14 -0
  512. package/dist/src/runtime/rift-env.d.ts.map +1 -0
  513. package/dist/src/runtime/rift-env.js +79 -0
  514. package/dist/src/runtime/rift-env.js.map +1 -0
  515. package/dist/src/runtime/watcher-startup.d.ts +2 -0
  516. package/dist/src/runtime/watcher-startup.d.ts.map +1 -0
  517. package/dist/src/runtime/watcher-startup.js +4 -0
  518. package/dist/src/runtime/watcher-startup.js.map +1 -0
  519. package/dist/src/security/archive.d.ts +23 -0
  520. package/dist/src/security/archive.d.ts.map +1 -0
  521. package/dist/src/security/archive.js +163 -0
  522. package/dist/src/security/archive.js.map +1 -0
  523. package/dist/src/security/paths.d.ts +21 -0
  524. package/dist/src/security/paths.d.ts.map +1 -0
  525. package/dist/src/security/paths.js +67 -0
  526. package/dist/src/security/paths.js.map +1 -0
  527. package/dist/src/server/app.d.ts +29 -0
  528. package/dist/src/server/app.d.ts.map +1 -0
  529. package/dist/src/server/app.js +226 -0
  530. package/dist/src/server/app.js.map +1 -0
  531. package/dist/src/server/build-info.d.ts +8 -0
  532. package/dist/src/server/build-info.d.ts.map +1 -0
  533. package/dist/src/server/build-info.js +61 -0
  534. package/dist/src/server/build-info.js.map +1 -0
  535. package/dist/src/server/lifecycle.d.ts +30 -0
  536. package/dist/src/server/lifecycle.d.ts.map +1 -0
  537. package/dist/src/server/lifecycle.js +59 -0
  538. package/dist/src/server/lifecycle.js.map +1 -0
  539. package/dist/src/server/middleware/multipart.d.ts +51 -0
  540. package/dist/src/server/middleware/multipart.d.ts.map +1 -0
  541. package/dist/src/server/middleware/multipart.js +86 -0
  542. package/dist/src/server/middleware/multipart.js.map +1 -0
  543. package/dist/src/server/routes/compact.d.ts +37 -0
  544. package/dist/src/server/routes/compact.d.ts.map +1 -0
  545. package/dist/src/server/routes/compact.js +77 -0
  546. package/dist/src/server/routes/compact.js.map +1 -0
  547. package/dist/src/server/routes/context.d.ts +5 -0
  548. package/dist/src/server/routes/context.d.ts.map +1 -0
  549. package/dist/src/server/routes/context.js +50 -0
  550. package/dist/src/server/routes/context.js.map +1 -0
  551. package/dist/src/server/routes/conversations-search.d.ts +4 -0
  552. package/dist/src/server/routes/conversations-search.d.ts.map +1 -0
  553. package/dist/src/server/routes/conversations-search.js +243 -0
  554. package/dist/src/server/routes/conversations-search.js.map +1 -0
  555. package/dist/src/server/routes/friend-status.d.ts +72 -0
  556. package/dist/src/server/routes/friend-status.d.ts.map +1 -0
  557. package/dist/src/server/routes/friend-status.js +71 -0
  558. package/dist/src/server/routes/friend-status.js.map +1 -0
  559. package/dist/src/server/routes/ingest.d.ts +15 -0
  560. package/dist/src/server/routes/ingest.d.ts.map +1 -0
  561. package/dist/src/server/routes/ingest.js +139 -0
  562. package/dist/src/server/routes/ingest.js.map +1 -0
  563. package/dist/src/server/routes/jobs.d.ts +10 -0
  564. package/dist/src/server/routes/jobs.d.ts.map +1 -0
  565. package/dist/src/server/routes/jobs.js +29 -0
  566. package/dist/src/server/routes/jobs.js.map +1 -0
  567. package/dist/src/server/routes/mcp-usage.d.ts +13 -0
  568. package/dist/src/server/routes/mcp-usage.d.ts.map +1 -0
  569. package/dist/src/server/routes/mcp-usage.js +17 -0
  570. package/dist/src/server/routes/mcp-usage.js.map +1 -0
  571. package/dist/src/server/routes/reconcile.d.ts +4 -0
  572. package/dist/src/server/routes/reconcile.d.ts.map +1 -0
  573. package/dist/src/server/routes/reconcile.js +43 -0
  574. package/dist/src/server/routes/reconcile.js.map +1 -0
  575. package/dist/src/server/routes/reindex.d.ts +4 -0
  576. package/dist/src/server/routes/reindex.d.ts.map +1 -0
  577. package/dist/src/server/routes/reindex.js +74 -0
  578. package/dist/src/server/routes/reindex.js.map +1 -0
  579. package/dist/src/server/routes/save.d.ts +40 -0
  580. package/dist/src/server/routes/save.d.ts.map +1 -0
  581. package/dist/src/server/routes/save.js +112 -0
  582. package/dist/src/server/routes/save.js.map +1 -0
  583. package/dist/src/server/routes/search.d.ts +5 -0
  584. package/dist/src/server/routes/search.d.ts.map +1 -0
  585. package/dist/src/server/routes/search.js +400 -0
  586. package/dist/src/server/routes/search.js.map +1 -0
  587. package/dist/src/server/routes/stats.d.ts +10 -0
  588. package/dist/src/server/routes/stats.d.ts.map +1 -0
  589. package/dist/src/server/routes/stats.js +15 -0
  590. package/dist/src/server/routes/stats.js.map +1 -0
  591. package/dist/src/server/routes/status.d.ts +20 -0
  592. package/dist/src/server/routes/status.d.ts.map +1 -0
  593. package/dist/src/server/routes/status.js +31 -0
  594. package/dist/src/server/routes/status.js.map +1 -0
  595. package/dist/src/server/routes/triage.d.ts +4 -0
  596. package/dist/src/server/routes/triage.d.ts.map +1 -0
  597. package/dist/src/server/routes/triage.js +94 -0
  598. package/dist/src/server/routes/triage.js.map +1 -0
  599. package/dist/src/server/save-quality.d.ts +21 -0
  600. package/dist/src/server/save-quality.d.ts.map +1 -0
  601. package/dist/src/server/save-quality.js +51 -0
  602. package/dist/src/server/save-quality.js.map +1 -0
  603. package/dist/src/storage/atomic.d.ts +8 -0
  604. package/dist/src/storage/atomic.d.ts.map +1 -0
  605. package/dist/src/storage/atomic.js +22 -0
  606. package/dist/src/storage/atomic.js.map +1 -0
  607. package/dist/src/storage/db.d.ts +15 -0
  608. package/dist/src/storage/db.d.ts.map +1 -0
  609. package/dist/src/storage/db.js +43 -0
  610. package/dist/src/storage/db.js.map +1 -0
  611. package/dist/src/storage/integrity.d.ts +11 -0
  612. package/dist/src/storage/integrity.d.ts.map +1 -0
  613. package/dist/src/storage/integrity.js +66 -0
  614. package/dist/src/storage/integrity.js.map +1 -0
  615. package/dist/src/storage/rebuild.d.ts +37 -0
  616. package/dist/src/storage/rebuild.d.ts.map +1 -0
  617. package/dist/src/storage/rebuild.js +353 -0
  618. package/dist/src/storage/rebuild.js.map +1 -0
  619. package/dist/src/storage/shadow-swap.d.ts +20 -0
  620. package/dist/src/storage/shadow-swap.d.ts.map +1 -0
  621. package/dist/src/storage/shadow-swap.js +163 -0
  622. package/dist/src/storage/shadow-swap.js.map +1 -0
  623. package/dist/src/storage/tables.d.ts +77 -0
  624. package/dist/src/storage/tables.d.ts.map +1 -0
  625. package/dist/src/storage/tables.js +196 -0
  626. package/dist/src/storage/tables.js.map +1 -0
  627. package/package.json +45 -14
  628. package/index.js +0 -3
@@ -0,0 +1,170 @@
1
+ const MONTHS = new Map([
2
+ ["jan", 0],
3
+ ["janv", 0],
4
+ ["january", 0],
5
+ ["feb", 1],
6
+ ["fev", 1],
7
+ ["fevr", 1],
8
+ ["fevrier", 1],
9
+ ["february", 1],
10
+ ["mar", 2],
11
+ ["mars", 2],
12
+ ["march", 2],
13
+ ["apr", 3],
14
+ ["avr", 3],
15
+ ["april", 3],
16
+ ["may", 4],
17
+ ["mai", 4],
18
+ ["jun", 5],
19
+ ["juin", 5],
20
+ ["june", 5],
21
+ ["jul", 6],
22
+ ["juil", 6],
23
+ ["july", 6],
24
+ ["aug", 7],
25
+ ["aout", 7],
26
+ ["august", 7],
27
+ ["sep", 8],
28
+ ["sept", 8],
29
+ ["september", 8],
30
+ ["oct", 9],
31
+ ["october", 9],
32
+ ["nov", 10],
33
+ ["november", 10],
34
+ ["dec", 11],
35
+ ["decembre", 11],
36
+ ["december", 11],
37
+ ]);
38
+ const ACTIVITY_TIMESTAMP_PATTERN = /\b(\d{1,2})\s+([A-Za-zÀ-ÿ.]+)\s+(\d{4}),\s+(\d{2}):(\d{2}):(\d{2})\s+(CEST|CET|UTC)\b/g;
39
+ function normalizeMonthToken(value) {
40
+ return value
41
+ .normalize("NFD")
42
+ .replace(/[\u0300-\u036f]/g, "")
43
+ .replace(/\./g, "")
44
+ .toLowerCase();
45
+ }
46
+ function toIsoIfValid(date) {
47
+ return Number.isNaN(date.getTime()) ? null : date.toISOString();
48
+ }
49
+ function parseActivityTimestamp(value) {
50
+ const match = value.trim().match(/^(\d{1,2})\s+([A-Za-zÀ-ÿ.]+)\s+(\d{4}),\s+(\d{2}):(\d{2}):(\d{2})\s+(CEST|CET|UTC)$/);
51
+ if (!match)
52
+ return null;
53
+ const dayText = match[1];
54
+ const monthText = match[2];
55
+ const yearText = match[3];
56
+ const hourText = match[4];
57
+ const minuteText = match[5];
58
+ const secondText = match[6];
59
+ const zone = match[7];
60
+ if (!dayText ||
61
+ !monthText ||
62
+ !yearText ||
63
+ !hourText ||
64
+ !minuteText ||
65
+ !secondText ||
66
+ !zone) {
67
+ return null;
68
+ }
69
+ const month = MONTHS.get(normalizeMonthToken(monthText));
70
+ if (month === undefined)
71
+ return null;
72
+ const offset = zone === "CEST" ? "+02:00" : zone === "CET" ? "+01:00" : "Z";
73
+ const isoLike = `${yearText}-${String(month + 1).padStart(2, "0")}-${dayText.padStart(2, "0")}T${hourText}:${minuteText}:${secondText}${offset}`;
74
+ return toIsoIfValid(new Date(isoLike));
75
+ }
76
+ function extractTimestampFromContent(content) {
77
+ let match = null;
78
+ let last = null;
79
+ ACTIVITY_TIMESTAMP_PATTERN.lastIndex = 0;
80
+ while ((match = ACTIVITY_TIMESTAMP_PATTERN.exec(content)) !== null) {
81
+ last = match[0];
82
+ }
83
+ return last ? parseActivityTimestamp(last) : null;
84
+ }
85
+ function normalizeCreatedAt(card) {
86
+ if (typeof card.create_time === "number" && Number.isFinite(card.create_time)) {
87
+ const ms = card.create_time > 1_000_000_000_000
88
+ ? card.create_time
89
+ : card.create_time * 1000;
90
+ const fromNumber = toIsoIfValid(new Date(ms));
91
+ if (fromNumber)
92
+ return fromNumber;
93
+ }
94
+ if (typeof card.create_time === "string" && card.create_time.trim()) {
95
+ const fromString = parseActivityTimestamp(card.create_time) ??
96
+ toIsoIfValid(new Date(card.create_time));
97
+ if (fromString)
98
+ return fromString;
99
+ }
100
+ if (typeof card.timestamp_text === "string" && card.timestamp_text.trim()) {
101
+ const fromTimestampText = parseActivityTimestamp(card.timestamp_text);
102
+ if (fromTimestampText)
103
+ return fromTimestampText;
104
+ }
105
+ if (typeof card.content === "string" && card.content.trim()) {
106
+ const fromContent = extractTimestampFromContent(card.content);
107
+ if (fromContent)
108
+ return fromContent;
109
+ }
110
+ return "";
111
+ }
112
+ function isGeminiActivityCard(entry) {
113
+ if (!entry || typeof entry !== "object")
114
+ return false;
115
+ const card = entry;
116
+ return (typeof card.conversation_id === "string" &&
117
+ card.conversation_id.length > 0 &&
118
+ card.source === "gemini_web" &&
119
+ card.operative_unit === "gemini_activity_card" &&
120
+ card.original_export_format === "google_takeout_html");
121
+ }
122
+ /**
123
+ * Parse the repo's staged Gemini activity-card JSON format into the
124
+ * shared ParsedConversation shape used by ingest/backfill.
125
+ */
126
+ export const parseGeminiWeb = (files) => {
127
+ const results = [];
128
+ for (const file of files) {
129
+ if (!file.path.toLowerCase().endsWith(".json"))
130
+ continue;
131
+ let parsed;
132
+ try {
133
+ parsed = JSON.parse(file.data.toString("utf-8"));
134
+ }
135
+ catch {
136
+ continue;
137
+ }
138
+ if (!Array.isArray(parsed))
139
+ continue;
140
+ for (const entry of parsed) {
141
+ if (!isGeminiActivityCard(entry))
142
+ continue;
143
+ if ((entry.assistant_turns ?? 0) < 1)
144
+ continue;
145
+ const id = entry.conversation_id;
146
+ if (typeof id !== "string" || id.length === 0)
147
+ continue;
148
+ const content = typeof entry.content === "string" && entry.content.trim()
149
+ ? entry.content.trim()
150
+ : typeof entry.preview === "string" && entry.preview.trim()
151
+ ? entry.preview.trim()
152
+ : null;
153
+ if (!content)
154
+ continue;
155
+ const title = typeof entry.title === "string" && entry.title.trim()
156
+ ? entry.title.trim()
157
+ : typeof entry.prompt === "string" && entry.prompt.trim()
158
+ ? entry.prompt.trim()
159
+ : "Untitled Gemini activity";
160
+ results.push({
161
+ id,
162
+ title,
163
+ createdAt: normalizeCreatedAt(entry),
164
+ content,
165
+ });
166
+ }
167
+ }
168
+ return results;
169
+ };
170
+ //# sourceMappingURL=gemini-web.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini-web.js","sourceRoot":"","sources":["../../../../src/ingestion/parsers/gemini-web.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Grok web export parser.
3
+ *
4
+ * Parses `prod-grok-backend.json` from Grok's account-export bundle.
5
+ * Shape (verified April 2026, 347 conversations, 1869 messages):
6
+ * {
7
+ * conversations: [
8
+ * {
9
+ * conversation: { id, title, create_time, ... },
10
+ * responses: [
11
+ * { response: { _id, message, sender, create_time,
12
+ * parent_response_id, model, ... },
13
+ * share_link }
14
+ * ]
15
+ * }
16
+ * ],
17
+ * projects, tasks, media_posts
18
+ * }
19
+ *
20
+ * Messages are in temporal order within `responses[]` (0 / 1869
21
+ * out-of-order in the corpus). Branching exists via
22
+ * `parent_response_id` but affects only 13 / 347 conversations; v1
23
+ * walks `responses[]` linearly as a deliberate accuracy tradeoff —
24
+ * matches what the Claude web parser does.
25
+ *
26
+ * Not captured in v1 (deferred): `web_search_results`, `xpost_ids`,
27
+ * `agent_thinking_traces`, `steps[]`, per-response `model`,
28
+ * workspace personalities.
29
+ */
30
+ import type { ConversationParser } from "./types.js";
31
+ /**
32
+ * Parse Grok web export files into normalized conversations.
33
+ *
34
+ * Accepts `prod-grok-backend.json` (the only meaningful payload in
35
+ * the account-export zip). Empty conversations and those without a
36
+ * non-human turn are skipped; the staging gate already filters these
37
+ * out, this is belt-and-braces.
38
+ */
39
+ export declare const parseGrokWeb: ConversationParser;
40
+ //# sourceMappingURL=grok-web.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grok-web.d.ts","sourceRoot":"","sources":["../../../../src/ingestion/parsers/grok-web.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAO,KAAK,EAAsB,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAwCzE;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,EAAE,kBA+C1B,CAAC"}
@@ -0,0 +1,67 @@
1
+ function isHumanSender(sender) {
2
+ return typeof sender === "string" && sender.toLowerCase() === "human";
3
+ }
4
+ function isoOrNow(value) {
5
+ if (typeof value === "string" && value.trim()) {
6
+ const d = new Date(value);
7
+ if (!Number.isNaN(d.getTime()))
8
+ return d.toISOString();
9
+ }
10
+ return new Date().toISOString();
11
+ }
12
+ /**
13
+ * Parse Grok web export files into normalized conversations.
14
+ *
15
+ * Accepts `prod-grok-backend.json` (the only meaningful payload in
16
+ * the account-export zip). Empty conversations and those without a
17
+ * non-human turn are skipped; the staging gate already filters these
18
+ * out, this is belt-and-braces.
19
+ */
20
+ export const parseGrokWeb = (files) => {
21
+ const results = [];
22
+ for (const file of files) {
23
+ if (!file.path.toLowerCase().endsWith(".json"))
24
+ continue;
25
+ let parsed;
26
+ try {
27
+ parsed = JSON.parse(file.data.toString("utf-8"));
28
+ }
29
+ catch {
30
+ continue;
31
+ }
32
+ const root = parsed;
33
+ const conversations = root?.conversations;
34
+ if (!Array.isArray(conversations))
35
+ continue;
36
+ for (const wrapper of conversations) {
37
+ const meta = wrapper?.conversation;
38
+ const responses = wrapper?.responses;
39
+ if (!meta?.id || !Array.isArray(responses))
40
+ continue;
41
+ const lines = [];
42
+ let sawAssistant = false;
43
+ for (const resp of responses) {
44
+ const r = resp?.response;
45
+ if (!r)
46
+ continue;
47
+ const text = typeof r.message === "string" ? r.message.trim() : "";
48
+ if (!text)
49
+ continue;
50
+ const prefix = isHumanSender(r.sender) ? "User" : "Assistant";
51
+ if (prefix === "Assistant")
52
+ sawAssistant = true;
53
+ lines.push(`${prefix}: ${text}`);
54
+ }
55
+ if (lines.length === 0 || !sawAssistant)
56
+ continue;
57
+ results.push({
58
+ id: meta.id,
59
+ title: meta.title?.trim() || "Untitled",
60
+ createdAt: isoOrNow(meta.create_time),
61
+ content: lines.join("\n\n"),
62
+ });
63
+ }
64
+ }
65
+ return results;
66
+ };
67
+ //# sourceMappingURL=grok-web.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grok-web.js","sourceRoot":"","sources":["../../../../src/ingestion/parsers/grok-web.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Shared types for web conversation parsers — Slice 13.
3
+ *
4
+ * Each source-specific parser returns ParsedConversation[].
5
+ * Metadata (domain, intent, quality, etc.) is added later by
6
+ * the MetadataExtractor, not by the parser.
7
+ */
8
+ export interface ParsedConversation {
9
+ /** Conversation UUID from the source export. */
10
+ id: string;
11
+ /** Conversation title. */
12
+ title: string;
13
+ /** ISO 8601 creation timestamp. */
14
+ createdAt: string;
15
+ /** Formatted conversation text (all messages, role-prefixed). */
16
+ content: string;
17
+ }
18
+ /**
19
+ * A parser takes extracted files (from archive.ts) and returns
20
+ * normalized conversation entries.
21
+ */
22
+ export type ConversationParser = (files: Array<{
23
+ path: string;
24
+ data: Buffer;
25
+ }>) => ParsedConversation[];
26
+ /** Sources with implemented parsers (backed by real fixtures). */
27
+ export declare const SUPPORTED_INGEST_SOURCES: readonly ["chatgpt_web", "claude_web", "gemini_web", "grok_web"];
28
+ export type SupportedIngestSource = (typeof SUPPORTED_INGEST_SOURCES)[number];
29
+ /** All web sources that POST /ingest accepts in the enum (some deferred). */
30
+ export declare const INGEST_SOURCES: readonly ["chatgpt_web", "claude_web", "grok_web", "gemini_web"];
31
+ export type IngestSource = (typeof INGEST_SOURCES)[number];
32
+ /** Check if a source has an implemented parser. */
33
+ export declare function isSourceSupported(source: string): source is SupportedIngestSource;
34
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/ingestion/parsers/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,kBAAkB;IACjC,gDAAgD;IAChD,EAAE,EAAE,MAAM,CAAC;IACX,0BAA0B;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,mCAAmC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,iEAAiE;IACjE,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAC/B,KAAK,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,KACzC,kBAAkB,EAAE,CAAC;AAE1B,kEAAkE;AAClE,eAAO,MAAM,wBAAwB,kEAK3B,CAAC;AACX,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,wBAAwB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE9E,6EAA6E;AAC7E,eAAO,MAAM,cAAc,kEAKjB,CAAC;AACX,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3D,mDAAmD;AACnD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,IAAI,qBAAqB,CAEjF"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Shared types for web conversation parsers — Slice 13.
3
+ *
4
+ * Each source-specific parser returns ParsedConversation[].
5
+ * Metadata (domain, intent, quality, etc.) is added later by
6
+ * the MetadataExtractor, not by the parser.
7
+ */
8
+ /** Sources with implemented parsers (backed by real fixtures). */
9
+ export const SUPPORTED_INGEST_SOURCES = [
10
+ "chatgpt_web",
11
+ "claude_web",
12
+ "gemini_web",
13
+ "grok_web",
14
+ ];
15
+ /** All web sources that POST /ingest accepts in the enum (some deferred). */
16
+ export const INGEST_SOURCES = [
17
+ "chatgpt_web",
18
+ "claude_web",
19
+ "grok_web",
20
+ "gemini_web",
21
+ ];
22
+ /** Check if a source has an implemented parser. */
23
+ export function isSourceSupported(source) {
24
+ return SUPPORTED_INGEST_SOURCES.includes(source);
25
+ }
26
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/ingestion/parsers/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAqBH,kEAAkE;AAClE,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,aAAa;IACb,YAAY;IACZ,YAAY;IACZ,UAAU;CACF,CAAC;AAGX,6EAA6E;AAC7E,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,aAAa;IACb,YAAY;IACZ,UAAU;IACV,YAAY;CACJ,CAAC;AAGX,mDAAmD;AACnD,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC9C,OAAQ,wBAA8C,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC1E,CAAC"}
@@ -0,0 +1,48 @@
1
+ import { type FileEvent } from "./indexer.js";
2
+ export interface ScanResult {
3
+ events: FileEvent[];
4
+ filesChecked: number;
5
+ }
6
+ export interface ScanOptions {
7
+ ignoredPaths?: readonly string[];
8
+ }
9
+ export interface WalkOptions {
10
+ ignoredPaths?: readonly string[];
11
+ }
12
+ export interface ScanState {
13
+ last_scan_at: string | null;
14
+ next_scan_at: string | null;
15
+ }
16
+ export declare class Scanner {
17
+ private paused;
18
+ private readonly statePath;
19
+ private state;
20
+ constructor(dataDir: string);
21
+ /**
22
+ * Scan the given directories for new or modified files.
23
+ * Returns FileEvents for files that need indexing.
24
+ * Returns empty result if paused.
25
+ */
26
+ scan(dirs: readonly string[], opts?: ScanOptions): Promise<ScanResult>;
27
+ pause(): void;
28
+ resume(): void;
29
+ get isPaused(): boolean;
30
+ get scanState(): ScanState;
31
+ setNextScan(nextScanAt: string): void;
32
+ /**
33
+ * Whether a scan is due based on the configured interval.
34
+ * True if we have never scanned or if `last_scan_at + interval` is in the past.
35
+ */
36
+ isDue(intervalSeconds: number): boolean;
37
+ private loadState;
38
+ private saveState;
39
+ }
40
+ /**
41
+ * Recursively walk a directory, returning all file paths.
42
+ * Honors the same ignored-path policy as the live Watcher via
43
+ * `isWatcherPathIgnored`: always skips .git / node_modules / .DS_Store,
44
+ * plus any caller-supplied roots (e.g. engine data_dir, dist, logs).
45
+ * Does not follow symlinks.
46
+ */
47
+ export declare function walkDirectory(dir: string, opts?: WalkOptions): string[];
48
+ //# sourceMappingURL=scanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../../src/ingestion/scanner.ts"],"names":[],"mappings":"AAYA,OAAO,EAAU,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAMtD,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,WAAW;IAC1B,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,SAAS;IACxB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,qBAAa,OAAO;IAClB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,KAAK,CAAyD;gBAE1D,OAAO,EAAE,MAAM;IAK3B;;;;OAIG;IACG,IAAI,CACR,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,IAAI,GAAE,WAAgB,GACrB,OAAO,CAAC,UAAU,CAAC;IAyCtB,KAAK,IAAI,IAAI;IAIb,MAAM,IAAI,IAAI;IAId,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,IAAI,SAAS,IAAI,SAAS,CAEzB;IAED,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAKrC;;;OAGG;IACH,KAAK,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO;IAMvC,OAAO,CAAC,SAAS;YASH,SAAS;CAGxB;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,WAAgB,GAAG,MAAM,EAAE,CAgB3E"}
@@ -0,0 +1,131 @@
1
+ /**
2
+ * Scheduled scanner for mode: "scheduled_scan" directories.
3
+ *
4
+ * Walks directories, compares file mtimes against indexed state
5
+ * in structured_docs, and returns FileEvents for new/modified files.
6
+ * Reuses the Indexer pipeline from Slice 5.
7
+ *
8
+ * Exposes pause()/resume() for Live-Indexer / Repair-Job Coordination.
9
+ */
10
+ import fs from "node:fs";
11
+ import path from "node:path";
12
+ import { isSupported } from "./extractor.js";
13
+ import { fileId } from "./indexer.js";
14
+ import { getTable } from "../storage/tables.js";
15
+ import { atomicWrite } from "../storage/atomic.js";
16
+ import { isWatcherPathIgnored } from "./watcher.js";
17
+ export class Scanner {
18
+ paused = false;
19
+ statePath;
20
+ state = { last_scan_at: null, next_scan_at: null };
21
+ constructor(dataDir) {
22
+ this.statePath = path.join(dataDir, "scan-state.json");
23
+ this.loadState();
24
+ }
25
+ /**
26
+ * Scan the given directories for new or modified files.
27
+ * Returns FileEvents for files that need indexing.
28
+ * Returns empty result if paused.
29
+ */
30
+ async scan(dirs, opts = {}) {
31
+ if (this.paused)
32
+ return { events: [], filesChecked: 0 };
33
+ let filesChecked = 0;
34
+ const events = [];
35
+ const table = getTable("structured_docs");
36
+ const walkOpts = opts.ignoredPaths
37
+ ? { ignoredPaths: opts.ignoredPaths }
38
+ : {};
39
+ for (const dir of dirs) {
40
+ const files = walkDirectory(dir, walkOpts);
41
+ for (const filePath of files) {
42
+ if (!isSupported(filePath))
43
+ continue;
44
+ filesChecked++;
45
+ const id = fileId(filePath);
46
+ const existing = (await table
47
+ .query()
48
+ .where(`id = '${id}'`)
49
+ .toArray());
50
+ if (existing.length === 0) {
51
+ events.push({ type: "add", path: filePath });
52
+ }
53
+ else {
54
+ const stats = fs.statSync(filePath);
55
+ const indexedAt = new Date(existing[0].indexed_at);
56
+ if (stats.mtime > indexedAt) {
57
+ events.push({ type: "change", path: filePath });
58
+ }
59
+ }
60
+ }
61
+ }
62
+ this.state.last_scan_at = new Date().toISOString();
63
+ await this.saveState();
64
+ return { events, filesChecked };
65
+ }
66
+ pause() {
67
+ this.paused = true;
68
+ }
69
+ resume() {
70
+ this.paused = false;
71
+ }
72
+ get isPaused() {
73
+ return this.paused;
74
+ }
75
+ get scanState() {
76
+ return { ...this.state };
77
+ }
78
+ setNextScan(nextScanAt) {
79
+ this.state.next_scan_at = nextScanAt;
80
+ this.saveState().catch(() => { });
81
+ }
82
+ /**
83
+ * Whether a scan is due based on the configured interval.
84
+ * True if we have never scanned or if `last_scan_at + interval` is in the past.
85
+ */
86
+ isDue(intervalSeconds) {
87
+ if (!this.state.last_scan_at)
88
+ return true;
89
+ const lastScan = new Date(this.state.last_scan_at).getTime();
90
+ return Date.now() >= lastScan + intervalSeconds * 1000;
91
+ }
92
+ loadState() {
93
+ try {
94
+ const raw = fs.readFileSync(this.statePath, "utf-8");
95
+ this.state = JSON.parse(raw);
96
+ }
97
+ catch {
98
+ // No state file yet — use defaults
99
+ }
100
+ }
101
+ async saveState() {
102
+ await atomicWrite(this.statePath, JSON.stringify(this.state, null, 2));
103
+ }
104
+ }
105
+ /**
106
+ * Recursively walk a directory, returning all file paths.
107
+ * Honors the same ignored-path policy as the live Watcher via
108
+ * `isWatcherPathIgnored`: always skips .git / node_modules / .DS_Store,
109
+ * plus any caller-supplied roots (e.g. engine data_dir, dist, logs).
110
+ * Does not follow symlinks.
111
+ */
112
+ export function walkDirectory(dir, opts = {}) {
113
+ const results = [];
114
+ if (!fs.existsSync(dir))
115
+ return results;
116
+ const ignoredPaths = opts.ignoredPaths ?? [];
117
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
118
+ for (const entry of entries) {
119
+ const fullPath = path.join(dir, entry.name);
120
+ if (isWatcherPathIgnored(fullPath, ignoredPaths))
121
+ continue;
122
+ if (entry.isDirectory() && !entry.isSymbolicLink()) {
123
+ results.push(...walkDirectory(fullPath, opts));
124
+ }
125
+ else if (entry.isFile()) {
126
+ results.push(fullPath);
127
+ }
128
+ }
129
+ return results;
130
+ }
131
+ //# sourceMappingURL=scanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../../src/ingestion/scanner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,109 @@
1
+ import { type IngestSource } from "./parsers/types.js";
2
+ /** Files smaller than this are classified as `too_small`. */
3
+ export declare const MIN_USEFUL_BYTES = 512;
4
+ /** Per-source extension allowlist for preflight classification. */
5
+ export declare const SOURCE_EXTENSIONS: Record<IngestSource, readonly string[]>;
6
+ /**
7
+ * Junk markers — see module header for meanings. Stable strings; persisted
8
+ * into preflight.json and inspected by tests.
9
+ */
10
+ export type JunkMarker = "empty" | "too_small" | "non_utf8" | "duplicate_hash" | "no_assistant_turns" | "unsupported_format";
11
+ export interface ManifestFile {
12
+ name: string;
13
+ path: string;
14
+ size_bytes: number;
15
+ }
16
+ export interface Manifest {
17
+ batch_name: string;
18
+ created_at: string;
19
+ source: IngestSource;
20
+ path: string;
21
+ files: ManifestFile[];
22
+ }
23
+ export interface PreflightFile {
24
+ name: string;
25
+ path: string;
26
+ size_bytes: number;
27
+ extension: string;
28
+ supported: boolean;
29
+ utf8_ok: boolean;
30
+ content_hash: string | null;
31
+ duplicate_hash: boolean;
32
+ junk_markers: JunkMarker[];
33
+ notes: string[];
34
+ }
35
+ export interface SizeDistribution {
36
+ min: number;
37
+ max: number;
38
+ median: number;
39
+ total: number;
40
+ }
41
+ export interface Preflight {
42
+ batch_name: string;
43
+ source: IngestSource;
44
+ generated_at: string;
45
+ total_files: number;
46
+ supported_files: number;
47
+ unsupported_files: number;
48
+ size_distribution: SizeDistribution;
49
+ duplicate_candidates: number;
50
+ parseability: {
51
+ parseable: number;
52
+ unparseable: number;
53
+ };
54
+ junk_candidates: number;
55
+ files: PreflightFile[];
56
+ }
57
+ export interface StagingArtifacts {
58
+ manifest: Manifest;
59
+ preflight: Preflight;
60
+ }
61
+ /**
62
+ * Cheap-sample size for utf-8 / zip-magic checks on files that are too
63
+ * large to fully validate. Files at or below this size are read in full
64
+ * by the same code path (sample === whole file).
65
+ */
66
+ export declare const PARSE_SAMPLE_BYTES: number;
67
+ /**
68
+ * Largest file we will fully read into memory for structural JSON
69
+ * validation. Above this cap, JSON files are flagged as
70
+ * `unvalidated_too_large` instead of being trusted on a sniff. The cap
71
+ * comfortably accommodates real ChatGPT/Claude exports while protecting
72
+ * against pathological inputs.
73
+ */
74
+ export declare const FULL_VALIDATION_CAP_BYTES: number;
75
+ /**
76
+ * List every file in a batch folder, excluding our own manifest/preflight
77
+ * artifacts. Returns absolute paths, sorted by name for deterministic output.
78
+ */
79
+ export declare function listBatchFiles(batchDir: string): string[];
80
+ /**
81
+ * Build a manifest for a staged batch. Does not touch file contents.
82
+ */
83
+ export declare function buildManifest(params: {
84
+ batchDir: string;
85
+ source: IngestSource;
86
+ now?: Date;
87
+ }): Manifest;
88
+ /**
89
+ * Run preflight classification on every file listed in the manifest.
90
+ * No network, no model calls. Reads up to PARSE_SAMPLE_BYTES per file.
91
+ */
92
+ export declare function runPreflight(params: {
93
+ manifest: Manifest;
94
+ now?: Date;
95
+ }): Preflight;
96
+ /**
97
+ * Persist manifest and preflight as `manifest.json` and `preflight.json`
98
+ * inside the batch directory. Overwrites any previous artifacts.
99
+ */
100
+ export declare function writeStagingArtifacts(batchDir: string, artifacts: StagingArtifacts): void;
101
+ /**
102
+ * Convenience wrapper: build manifest, run preflight, persist both.
103
+ */
104
+ export declare function stageBatch(params: {
105
+ batchDir: string;
106
+ source: IngestSource;
107
+ now?: Date;
108
+ }): StagingArtifacts;
109
+ //# sourceMappingURL=staging.d.ts.map