onadit 0.0.1 → 1.0.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 (1085) hide show
  1. package/README.dev.md +124 -0
  2. package/README.md +194 -2
  3. package/dist/src/auth/keychain.d.ts +42 -0
  4. package/dist/src/auth/keychain.d.ts.map +1 -0
  5. package/dist/src/auth/keychain.js +177 -0
  6. package/dist/src/auth/keychain.js.map +1 -0
  7. package/dist/src/auth/middleware.d.ts +21 -0
  8. package/dist/src/auth/middleware.d.ts.map +1 -0
  9. package/dist/src/auth/middleware.js +93 -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/assistant-text-lookup.d.ts +31 -0
  24. package/dist/src/capture/assistant-text-lookup.d.ts.map +1 -0
  25. package/dist/src/capture/assistant-text-lookup.js +222 -0
  26. package/dist/src/capture/assistant-text-lookup.js.map +1 -0
  27. package/dist/src/capture/auto-capture.d.ts +322 -0
  28. package/dist/src/capture/auto-capture.d.ts.map +1 -0
  29. package/dist/src/capture/auto-capture.js +1167 -0
  30. package/dist/src/capture/auto-capture.js.map +1 -0
  31. package/dist/src/capture/auto-repair.d.ts +125 -0
  32. package/dist/src/capture/auto-repair.d.ts.map +1 -0
  33. package/dist/src/capture/auto-repair.js +280 -0
  34. package/dist/src/capture/auto-repair.js.map +1 -0
  35. package/dist/src/capture/batch-budget.d.ts +90 -0
  36. package/dist/src/capture/batch-budget.d.ts.map +1 -0
  37. package/dist/src/capture/batch-budget.js +148 -0
  38. package/dist/src/capture/batch-budget.js.map +1 -0
  39. package/dist/src/capture/claude-cli-triage-provider.d.ts +28 -0
  40. package/dist/src/capture/claude-cli-triage-provider.d.ts.map +1 -0
  41. package/dist/src/capture/claude-cli-triage-provider.js +101 -0
  42. package/dist/src/capture/claude-cli-triage-provider.js.map +1 -0
  43. package/dist/src/capture/codex-cli-triage-provider.d.ts +17 -0
  44. package/dist/src/capture/codex-cli-triage-provider.d.ts.map +1 -0
  45. package/dist/src/capture/codex-cli-triage-provider.js +91 -0
  46. package/dist/src/capture/codex-cli-triage-provider.js.map +1 -0
  47. package/dist/src/capture/cursor-capture.d.ts +89 -0
  48. package/dist/src/capture/cursor-capture.d.ts.map +1 -0
  49. package/dist/src/capture/cursor-capture.js +121 -0
  50. package/dist/src/capture/cursor-capture.js.map +1 -0
  51. package/dist/src/capture/observability.d.ts +131 -0
  52. package/dist/src/capture/observability.d.ts.map +1 -0
  53. package/dist/src/capture/observability.js +181 -0
  54. package/dist/src/capture/observability.js.map +1 -0
  55. package/dist/src/capture/openai-triage-provider.d.ts +92 -0
  56. package/dist/src/capture/openai-triage-provider.d.ts.map +1 -0
  57. package/dist/src/capture/openai-triage-provider.js +267 -0
  58. package/dist/src/capture/openai-triage-provider.js.map +1 -0
  59. package/dist/src/capture/recover-quarantine.d.ts +273 -0
  60. package/dist/src/capture/recover-quarantine.d.ts.map +1 -0
  61. package/dist/src/capture/recover-quarantine.js +581 -0
  62. package/dist/src/capture/recover-quarantine.js.map +1 -0
  63. package/dist/src/capture/review-queue-index.d.ts +51 -0
  64. package/dist/src/capture/review-queue-index.d.ts.map +1 -0
  65. package/dist/src/capture/review-queue-index.js +204 -0
  66. package/dist/src/capture/review-queue-index.js.map +1 -0
  67. package/dist/src/capture/review-queue.d.ts +47 -0
  68. package/dist/src/capture/review-queue.d.ts.map +1 -0
  69. package/dist/src/capture/review-queue.js +116 -0
  70. package/dist/src/capture/review-queue.js.map +1 -0
  71. package/dist/src/capture/sources.d.ts +53 -0
  72. package/dist/src/capture/sources.d.ts.map +1 -0
  73. package/dist/src/capture/sources.js +55 -0
  74. package/dist/src/capture/sources.js.map +1 -0
  75. package/dist/src/capture/stored-statements.d.ts +9 -0
  76. package/dist/src/capture/stored-statements.d.ts.map +1 -0
  77. package/dist/src/capture/stored-statements.js +63 -0
  78. package/dist/src/capture/stored-statements.js.map +1 -0
  79. package/dist/src/capture/triage-classification.d.ts +92 -0
  80. package/dist/src/capture/triage-classification.d.ts.map +1 -0
  81. package/dist/src/capture/triage-classification.js +94 -0
  82. package/dist/src/capture/triage-classification.js.map +1 -0
  83. package/dist/src/capture/triage-lane.d.ts +39 -0
  84. package/dist/src/capture/triage-lane.d.ts.map +1 -0
  85. package/dist/src/capture/triage-lane.js +217 -0
  86. package/dist/src/capture/triage-lane.js.map +1 -0
  87. package/dist/src/capture/triage-provider-factory.d.ts +36 -0
  88. package/dist/src/capture/triage-provider-factory.d.ts.map +1 -0
  89. package/dist/src/capture/triage-provider-factory.js +55 -0
  90. package/dist/src/capture/triage-provider-factory.js.map +1 -0
  91. package/dist/src/capture/triage-provider.d.ts +82 -0
  92. package/dist/src/capture/triage-provider.d.ts.map +1 -0
  93. package/dist/src/capture/triage-provider.js +126 -0
  94. package/dist/src/capture/triage-provider.js.map +1 -0
  95. package/dist/src/capture/triage.d.ts +30 -0
  96. package/dist/src/capture/triage.d.ts.map +1 -0
  97. package/dist/src/capture/triage.js +50 -0
  98. package/dist/src/capture/triage.js.map +1 -0
  99. package/dist/src/capture/user-statements-recheck.d.ts +22 -0
  100. package/dist/src/capture/user-statements-recheck.d.ts.map +1 -0
  101. package/dist/src/capture/user-statements-recheck.js +181 -0
  102. package/dist/src/capture/user-statements-recheck.js.map +1 -0
  103. package/dist/src/capture/user-statements.d.ts +84 -0
  104. package/dist/src/capture/user-statements.d.ts.map +1 -0
  105. package/dist/src/capture/user-statements.js +617 -0
  106. package/dist/src/capture/user-statements.js.map +1 -0
  107. package/dist/src/cli/agent-homes.d.ts +15 -0
  108. package/dist/src/cli/agent-homes.d.ts.map +1 -0
  109. package/dist/src/cli/agent-homes.js +45 -0
  110. package/dist/src/cli/agent-homes.js.map +1 -0
  111. package/dist/src/cli/commands/backfill.d.ts +3 -0
  112. package/dist/src/cli/commands/backfill.d.ts.map +1 -0
  113. package/dist/src/cli/commands/backfill.js +1379 -0
  114. package/dist/src/cli/commands/backfill.js.map +1 -0
  115. package/dist/src/cli/commands/brief.d.ts +12 -0
  116. package/dist/src/cli/commands/brief.d.ts.map +1 -0
  117. package/dist/src/cli/commands/brief.js +131 -0
  118. package/dist/src/cli/commands/brief.js.map +1 -0
  119. package/dist/src/cli/commands/bulk-ingest.d.ts +3 -0
  120. package/dist/src/cli/commands/bulk-ingest.d.ts.map +1 -0
  121. package/dist/src/cli/commands/bulk-ingest.js +126 -0
  122. package/dist/src/cli/commands/bulk-ingest.js.map +1 -0
  123. package/dist/src/cli/commands/capture-recover.d.ts +40 -0
  124. package/dist/src/cli/commands/capture-recover.d.ts.map +1 -0
  125. package/dist/src/cli/commands/capture-recover.js +194 -0
  126. package/dist/src/cli/commands/capture-recover.js.map +1 -0
  127. package/dist/src/cli/commands/capture.d.ts +12 -0
  128. package/dist/src/cli/commands/capture.d.ts.map +1 -0
  129. package/dist/src/cli/commands/capture.js +304 -0
  130. package/dist/src/cli/commands/capture.js.map +1 -0
  131. package/dist/src/cli/commands/chunk-backfill.d.ts +13 -0
  132. package/dist/src/cli/commands/chunk-backfill.d.ts.map +1 -0
  133. package/dist/src/cli/commands/chunk-backfill.js +157 -0
  134. package/dist/src/cli/commands/chunk-backfill.js.map +1 -0
  135. package/dist/src/cli/commands/compact.d.ts +3 -0
  136. package/dist/src/cli/commands/compact.d.ts.map +1 -0
  137. package/dist/src/cli/commands/compact.js +70 -0
  138. package/dist/src/cli/commands/compact.js.map +1 -0
  139. package/dist/src/cli/commands/cursor-probe.d.ts +20 -0
  140. package/dist/src/cli/commands/cursor-probe.d.ts.map +1 -0
  141. package/dist/src/cli/commands/cursor-probe.js +162 -0
  142. package/dist/src/cli/commands/cursor-probe.js.map +1 -0
  143. package/dist/src/cli/commands/doctor.d.ts +6 -0
  144. package/dist/src/cli/commands/doctor.d.ts.map +1 -0
  145. package/dist/src/cli/commands/doctor.js +259 -0
  146. package/dist/src/cli/commands/doctor.js.map +1 -0
  147. package/dist/src/cli/commands/feedback.d.ts +34 -0
  148. package/dist/src/cli/commands/feedback.d.ts.map +1 -0
  149. package/dist/src/cli/commands/feedback.js +214 -0
  150. package/dist/src/cli/commands/feedback.js.map +1 -0
  151. package/dist/src/cli/commands/hooks-install.d.ts +66 -0
  152. package/dist/src/cli/commands/hooks-install.d.ts.map +1 -0
  153. package/dist/src/cli/commands/hooks-install.js +228 -0
  154. package/dist/src/cli/commands/hooks-install.js.map +1 -0
  155. package/dist/src/cli/commands/import.d.ts +19 -0
  156. package/dist/src/cli/commands/import.d.ts.map +1 -0
  157. package/dist/src/cli/commands/import.js +258 -0
  158. package/dist/src/cli/commands/import.js.map +1 -0
  159. package/dist/src/cli/commands/ingest.d.ts +3 -0
  160. package/dist/src/cli/commands/ingest.d.ts.map +1 -0
  161. package/dist/src/cli/commands/ingest.js +80 -0
  162. package/dist/src/cli/commands/ingest.js.map +1 -0
  163. package/dist/src/cli/commands/mcp-install.d.ts +65 -0
  164. package/dist/src/cli/commands/mcp-install.d.ts.map +1 -0
  165. package/dist/src/cli/commands/mcp-install.js +306 -0
  166. package/dist/src/cli/commands/mcp-install.js.map +1 -0
  167. package/dist/src/cli/commands/menubar.d.ts +127 -0
  168. package/dist/src/cli/commands/menubar.d.ts.map +1 -0
  169. package/dist/src/cli/commands/menubar.js +585 -0
  170. package/dist/src/cli/commands/menubar.js.map +1 -0
  171. package/dist/src/cli/commands/onboard-first-run.d.ts +5 -0
  172. package/dist/src/cli/commands/onboard-first-run.d.ts.map +1 -0
  173. package/dist/src/cli/commands/onboard-first-run.js +156 -0
  174. package/dist/src/cli/commands/onboard-first-run.js.map +1 -0
  175. package/dist/src/cli/commands/onboard.d.ts +336 -0
  176. package/dist/src/cli/commands/onboard.d.ts.map +1 -0
  177. package/dist/src/cli/commands/onboard.js +1873 -0
  178. package/dist/src/cli/commands/onboard.js.map +1 -0
  179. package/dist/src/cli/commands/rebuild.d.ts +12 -0
  180. package/dist/src/cli/commands/rebuild.d.ts.map +1 -0
  181. package/dist/src/cli/commands/rebuild.js +167 -0
  182. package/dist/src/cli/commands/rebuild.js.map +1 -0
  183. package/dist/src/cli/commands/reconcile.d.ts +3 -0
  184. package/dist/src/cli/commands/reconcile.d.ts.map +1 -0
  185. package/dist/src/cli/commands/reconcile.js +68 -0
  186. package/dist/src/cli/commands/reconcile.js.map +1 -0
  187. package/dist/src/cli/commands/reindex.d.ts +3 -0
  188. package/dist/src/cli/commands/reindex.d.ts.map +1 -0
  189. package/dist/src/cli/commands/reindex.js +66 -0
  190. package/dist/src/cli/commands/reindex.js.map +1 -0
  191. package/dist/src/cli/commands/review.d.ts +13 -0
  192. package/dist/src/cli/commands/review.d.ts.map +1 -0
  193. package/dist/src/cli/commands/review.js +401 -0
  194. package/dist/src/cli/commands/review.js.map +1 -0
  195. package/dist/src/cli/commands/save.d.ts +3 -0
  196. package/dist/src/cli/commands/save.d.ts.map +1 -0
  197. package/dist/src/cli/commands/save.js +111 -0
  198. package/dist/src/cli/commands/save.js.map +1 -0
  199. package/dist/src/cli/commands/search.d.ts +37 -0
  200. package/dist/src/cli/commands/search.d.ts.map +1 -0
  201. package/dist/src/cli/commands/search.js +118 -0
  202. package/dist/src/cli/commands/search.js.map +1 -0
  203. package/dist/src/cli/commands/setup.d.ts +30 -0
  204. package/dist/src/cli/commands/setup.d.ts.map +1 -0
  205. package/dist/src/cli/commands/setup.js +122 -0
  206. package/dist/src/cli/commands/setup.js.map +1 -0
  207. package/dist/src/cli/commands/stats.d.ts +3 -0
  208. package/dist/src/cli/commands/stats.d.ts.map +1 -0
  209. package/dist/src/cli/commands/stats.js +42 -0
  210. package/dist/src/cli/commands/stats.js.map +1 -0
  211. package/dist/src/cli/commands/status.d.ts +17 -0
  212. package/dist/src/cli/commands/status.d.ts.map +1 -0
  213. package/dist/src/cli/commands/status.js +206 -0
  214. package/dist/src/cli/commands/status.js.map +1 -0
  215. package/dist/src/cli/commands/token-issue.d.ts +3 -0
  216. package/dist/src/cli/commands/token-issue.d.ts.map +1 -0
  217. package/dist/src/cli/commands/token-issue.js +33 -0
  218. package/dist/src/cli/commands/token-issue.js.map +1 -0
  219. package/dist/src/cli/commands/triage.d.ts +3 -0
  220. package/dist/src/cli/commands/triage.d.ts.map +1 -0
  221. package/dist/src/cli/commands/triage.js +127 -0
  222. package/dist/src/cli/commands/triage.js.map +1 -0
  223. package/dist/src/cli/commands/uninstall.d.ts +85 -0
  224. package/dist/src/cli/commands/uninstall.d.ts.map +1 -0
  225. package/dist/src/cli/commands/uninstall.js +512 -0
  226. package/dist/src/cli/commands/uninstall.js.map +1 -0
  227. package/dist/src/cli/commands/update.d.ts +105 -0
  228. package/dist/src/cli/commands/update.d.ts.map +1 -0
  229. package/dist/src/cli/commands/update.js +559 -0
  230. package/dist/src/cli/commands/update.js.map +1 -0
  231. package/dist/src/cli/default-config-path.d.ts +15 -0
  232. package/dist/src/cli/default-config-path.d.ts.map +1 -0
  233. package/dist/src/cli/default-config-path.js +28 -0
  234. package/dist/src/cli/default-config-path.js.map +1 -0
  235. package/dist/src/cli/feedback/feedback-config.d.ts +67 -0
  236. package/dist/src/cli/feedback/feedback-config.d.ts.map +1 -0
  237. package/dist/src/cli/feedback/feedback-config.js +169 -0
  238. package/dist/src/cli/feedback/feedback-config.js.map +1 -0
  239. package/dist/src/cli/feedback/feedback-history.d.ts +11 -0
  240. package/dist/src/cli/feedback/feedback-history.d.ts.map +1 -0
  241. package/dist/src/cli/feedback/feedback-history.js +145 -0
  242. package/dist/src/cli/feedback/feedback-history.js.map +1 -0
  243. package/dist/src/cli/feedback/feedback-payload.d.ts +74 -0
  244. package/dist/src/cli/feedback/feedback-payload.d.ts.map +1 -0
  245. package/dist/src/cli/feedback/feedback-payload.js +10 -0
  246. package/dist/src/cli/feedback/feedback-payload.js.map +1 -0
  247. package/dist/src/cli/feedback/feedback-relay.d.ts +15 -0
  248. package/dist/src/cli/feedback/feedback-relay.d.ts.map +1 -0
  249. package/dist/src/cli/feedback/feedback-relay.js +47 -0
  250. package/dist/src/cli/feedback/feedback-relay.js.map +1 -0
  251. package/dist/src/cli/feedback/feedback-status.d.ts +11 -0
  252. package/dist/src/cli/feedback/feedback-status.d.ts.map +1 -0
  253. package/dist/src/cli/feedback/feedback-status.js +122 -0
  254. package/dist/src/cli/feedback/feedback-status.js.map +1 -0
  255. package/dist/src/cli/feedback/invite.d.ts +17 -0
  256. package/dist/src/cli/feedback/invite.d.ts.map +1 -0
  257. package/dist/src/cli/feedback/invite.js +73 -0
  258. package/dist/src/cli/feedback/invite.js.map +1 -0
  259. package/dist/src/cli/feedback/relay-secret-store.d.ts +32 -0
  260. package/dist/src/cli/feedback/relay-secret-store.d.ts.map +1 -0
  261. package/dist/src/cli/feedback/relay-secret-store.js +137 -0
  262. package/dist/src/cli/feedback/relay-secret-store.js.map +1 -0
  263. package/dist/src/cli/hooks-writers/claude-code-policy-script.d.ts +35 -0
  264. package/dist/src/cli/hooks-writers/claude-code-policy-script.d.ts.map +1 -0
  265. package/dist/src/cli/hooks-writers/claude-code-policy-script.js +122 -0
  266. package/dist/src/cli/hooks-writers/claude-code-policy-script.js.map +1 -0
  267. package/dist/src/cli/hooks-writers/claude-code.d.ts +63 -0
  268. package/dist/src/cli/hooks-writers/claude-code.d.ts.map +1 -0
  269. package/dist/src/cli/hooks-writers/claude-code.js +289 -0
  270. package/dist/src/cli/hooks-writers/claude-code.js.map +1 -0
  271. package/dist/src/cli/hooks-writers/codex.d.ts +16 -0
  272. package/dist/src/cli/hooks-writers/codex.d.ts.map +1 -0
  273. package/dist/src/cli/hooks-writers/codex.js +17 -0
  274. package/dist/src/cli/hooks-writers/codex.js.map +1 -0
  275. package/dist/src/cli/hooks-writers/errors.d.ts +16 -0
  276. package/dist/src/cli/hooks-writers/errors.d.ts.map +1 -0
  277. package/dist/src/cli/hooks-writers/errors.js +24 -0
  278. package/dist/src/cli/hooks-writers/errors.js.map +1 -0
  279. package/dist/src/cli/hooks-writers/index.d.ts +23 -0
  280. package/dist/src/cli/hooks-writers/index.d.ts.map +1 -0
  281. package/dist/src/cli/hooks-writers/index.js +34 -0
  282. package/dist/src/cli/hooks-writers/index.js.map +1 -0
  283. package/dist/src/cli/hooks-writers/state.d.ts +43 -0
  284. package/dist/src/cli/hooks-writers/state.d.ts.map +1 -0
  285. package/dist/src/cli/hooks-writers/state.js +225 -0
  286. package/dist/src/cli/hooks-writers/state.js.map +1 -0
  287. package/dist/src/cli/hooks-writers/types.d.ts +28 -0
  288. package/dist/src/cli/hooks-writers/types.d.ts.map +1 -0
  289. package/dist/src/cli/hooks-writers/types.js +8 -0
  290. package/dist/src/cli/hooks-writers/types.js.map +1 -0
  291. package/dist/src/cli/http-client.d.ts +128 -0
  292. package/dist/src/cli/http-client.d.ts.map +1 -0
  293. package/dist/src/cli/http-client.js +401 -0
  294. package/dist/src/cli/http-client.js.map +1 -0
  295. package/dist/src/cli/index.d.ts +4 -0
  296. package/dist/src/cli/index.d.ts.map +1 -0
  297. package/dist/src/cli/index.js +99 -0
  298. package/dist/src/cli/index.js.map +1 -0
  299. package/dist/src/cli/job-poller.d.ts +13 -0
  300. package/dist/src/cli/job-poller.d.ts.map +1 -0
  301. package/dist/src/cli/job-poller.js +29 -0
  302. package/dist/src/cli/job-poller.js.map +1 -0
  303. package/dist/src/cli/mcp-config-writers/codex-toml.d.ts +20 -0
  304. package/dist/src/cli/mcp-config-writers/codex-toml.d.ts.map +1 -0
  305. package/dist/src/cli/mcp-config-writers/codex-toml.js +918 -0
  306. package/dist/src/cli/mcp-config-writers/codex-toml.js.map +1 -0
  307. package/dist/src/cli/mcp-config-writers/earlier-name-restrictions.d.ts +11 -0
  308. package/dist/src/cli/mcp-config-writers/earlier-name-restrictions.d.ts.map +1 -0
  309. package/dist/src/cli/mcp-config-writers/earlier-name-restrictions.js +152 -0
  310. package/dist/src/cli/mcp-config-writers/earlier-name-restrictions.js.map +1 -0
  311. package/dist/src/cli/mcp-config-writers/errors.d.ts +17 -0
  312. package/dist/src/cli/mcp-config-writers/errors.d.ts.map +1 -0
  313. package/dist/src/cli/mcp-config-writers/errors.js +13 -0
  314. package/dist/src/cli/mcp-config-writers/errors.js.map +1 -0
  315. package/dist/src/cli/mcp-config-writers/index.d.ts +28 -0
  316. package/dist/src/cli/mcp-config-writers/index.d.ts.map +1 -0
  317. package/dist/src/cli/mcp-config-writers/index.js +70 -0
  318. package/dist/src/cli/mcp-config-writers/index.js.map +1 -0
  319. package/dist/src/cli/mcp-config-writers/json-config.d.ts +20 -0
  320. package/dist/src/cli/mcp-config-writers/json-config.d.ts.map +1 -0
  321. package/dist/src/cli/mcp-config-writers/json-config.js +301 -0
  322. package/dist/src/cli/mcp-config-writers/json-config.js.map +1 -0
  323. package/dist/src/cli/mcp-config-writers/left-in-folder.d.ts +18 -0
  324. package/dist/src/cli/mcp-config-writers/left-in-folder.d.ts.map +1 -0
  325. package/dist/src/cli/mcp-config-writers/left-in-folder.js +140 -0
  326. package/dist/src/cli/mcp-config-writers/left-in-folder.js.map +1 -0
  327. package/dist/src/cli/mcp-config-writers/redact.d.ts +28 -0
  328. package/dist/src/cli/mcp-config-writers/redact.d.ts.map +1 -0
  329. package/dist/src/cli/mcp-config-writers/redact.js +48 -0
  330. package/dist/src/cli/mcp-config-writers/redact.js.map +1 -0
  331. package/dist/src/cli/mcp-config-writers/types.d.ts +46 -0
  332. package/dist/src/cli/mcp-config-writers/types.d.ts.map +1 -0
  333. package/dist/src/cli/mcp-config-writers/types.js +5 -0
  334. package/dist/src/cli/mcp-config-writers/types.js.map +1 -0
  335. package/dist/src/cli/output.d.ts +8 -0
  336. package/dist/src/cli/output.d.ts.map +1 -0
  337. package/dist/src/cli/output.js +34 -0
  338. package/dist/src/cli/output.js.map +1 -0
  339. package/dist/src/cli/postinstall-menubar.d.ts +38 -0
  340. package/dist/src/cli/postinstall-menubar.d.ts.map +1 -0
  341. package/dist/src/cli/postinstall-menubar.js +139 -0
  342. package/dist/src/cli/postinstall-menubar.js.map +1 -0
  343. package/dist/src/cli/status/friend-header.d.ts +61 -0
  344. package/dist/src/cli/status/friend-header.d.ts.map +1 -0
  345. package/dist/src/cli/status/friend-header.js +727 -0
  346. package/dist/src/cli/status/friend-header.js.map +1 -0
  347. package/dist/src/cli/status/local-signals.d.ts +89 -0
  348. package/dist/src/cli/status/local-signals.d.ts.map +1 -0
  349. package/dist/src/cli/status/local-signals.js +194 -0
  350. package/dist/src/cli/status/local-signals.js.map +1 -0
  351. package/dist/src/cli/token.d.ts +37 -0
  352. package/dist/src/cli/token.d.ts.map +1 -0
  353. package/dist/src/cli/token.js +105 -0
  354. package/dist/src/cli/token.js.map +1 -0
  355. package/dist/src/cli/ui.d.ts +47 -0
  356. package/dist/src/cli/ui.d.ts.map +1 -0
  357. package/dist/src/cli/ui.js +166 -0
  358. package/dist/src/cli/ui.js.map +1 -0
  359. package/dist/src/cli/uninstall/mcp-uninstall.d.ts +33 -0
  360. package/dist/src/cli/uninstall/mcp-uninstall.d.ts.map +1 -0
  361. package/dist/src/cli/uninstall/mcp-uninstall.js +116 -0
  362. package/dist/src/cli/uninstall/mcp-uninstall.js.map +1 -0
  363. package/dist/src/config/loader.d.ts +9 -0
  364. package/dist/src/config/loader.d.ts.map +1 -0
  365. package/dist/src/config/loader.js +73 -0
  366. package/dist/src/config/loader.js.map +1 -0
  367. package/dist/src/config/schema.d.ts +956 -0
  368. package/dist/src/config/schema.d.ts.map +1 -0
  369. package/dist/src/config/schema.js +339 -0
  370. package/dist/src/config/schema.js.map +1 -0
  371. package/dist/src/diagnostics/claude-preflight.d.ts +35 -0
  372. package/dist/src/diagnostics/claude-preflight.d.ts.map +1 -0
  373. package/dist/src/diagnostics/claude-preflight.js +90 -0
  374. package/dist/src/diagnostics/claude-preflight.js.map +1 -0
  375. package/dist/src/diagnostics/codex-preflight.d.ts +43 -0
  376. package/dist/src/diagnostics/codex-preflight.d.ts.map +1 -0
  377. package/dist/src/diagnostics/codex-preflight.js +128 -0
  378. package/dist/src/diagnostics/codex-preflight.js.map +1 -0
  379. package/dist/src/diagnostics/doctor.d.ts +125 -0
  380. package/dist/src/diagnostics/doctor.d.ts.map +1 -0
  381. package/dist/src/diagnostics/doctor.js +450 -0
  382. package/dist/src/diagnostics/doctor.js.map +1 -0
  383. package/dist/src/diagnostics/install-layout.d.ts +40 -0
  384. package/dist/src/diagnostics/install-layout.d.ts.map +1 -0
  385. package/dist/src/diagnostics/install-layout.js +55 -0
  386. package/dist/src/diagnostics/install-layout.js.map +1 -0
  387. package/dist/src/diagnostics/memory-coverage.d.ts +54 -0
  388. package/dist/src/diagnostics/memory-coverage.d.ts.map +1 -0
  389. package/dist/src/diagnostics/memory-coverage.js +272 -0
  390. package/dist/src/diagnostics/memory-coverage.js.map +1 -0
  391. package/dist/src/diagnostics/notify.d.ts +107 -0
  392. package/dist/src/diagnostics/notify.d.ts.map +1 -0
  393. package/dist/src/diagnostics/notify.js +217 -0
  394. package/dist/src/diagnostics/notify.js.map +1 -0
  395. package/dist/src/diagnostics/repair-prompt.d.ts +49 -0
  396. package/dist/src/diagnostics/repair-prompt.d.ts.map +1 -0
  397. package/dist/src/diagnostics/repair-prompt.js +223 -0
  398. package/dist/src/diagnostics/repair-prompt.js.map +1 -0
  399. package/dist/src/ingestion/bulk-ingest.d.ts +11 -0
  400. package/dist/src/ingestion/bulk-ingest.d.ts.map +1 -0
  401. package/dist/src/ingestion/bulk-ingest.js +11 -0
  402. package/dist/src/ingestion/bulk-ingest.js.map +1 -0
  403. package/dist/src/ingestion/chunk-meta.d.ts +85 -0
  404. package/dist/src/ingestion/chunk-meta.d.ts.map +1 -0
  405. package/dist/src/ingestion/chunk-meta.js +167 -0
  406. package/dist/src/ingestion/chunk-meta.js.map +1 -0
  407. package/dist/src/ingestion/chunk-text.d.ts +39 -0
  408. package/dist/src/ingestion/chunk-text.d.ts.map +1 -0
  409. package/dist/src/ingestion/chunk-text.js +114 -0
  410. package/dist/src/ingestion/chunk-text.js.map +1 -0
  411. package/dist/src/ingestion/cursor/cursor-store.d.ts +177 -0
  412. package/dist/src/ingestion/cursor/cursor-store.d.ts.map +1 -0
  413. package/dist/src/ingestion/cursor/cursor-store.js +242 -0
  414. package/dist/src/ingestion/cursor/cursor-store.js.map +1 -0
  415. package/dist/src/ingestion/cursor/enrich-roots.d.ts +16 -0
  416. package/dist/src/ingestion/cursor/enrich-roots.d.ts.map +1 -0
  417. package/dist/src/ingestion/cursor/enrich-roots.js +22 -0
  418. package/dist/src/ingestion/cursor/enrich-roots.js.map +1 -0
  419. package/dist/src/ingestion/cursor/vscdb-reader.d.ts +32 -0
  420. package/dist/src/ingestion/cursor/vscdb-reader.d.ts.map +1 -0
  421. package/dist/src/ingestion/cursor/vscdb-reader.js +113 -0
  422. package/dist/src/ingestion/cursor/vscdb-reader.js.map +1 -0
  423. package/dist/src/ingestion/cursor/workspace-root.d.ts +96 -0
  424. package/dist/src/ingestion/cursor/workspace-root.d.ts.map +1 -0
  425. package/dist/src/ingestion/cursor/workspace-root.js +187 -0
  426. package/dist/src/ingestion/cursor/workspace-root.js.map +1 -0
  427. package/dist/src/ingestion/extractor.d.ts +16 -0
  428. package/dist/src/ingestion/extractor.d.ts.map +1 -0
  429. package/dist/src/ingestion/extractor.js +85 -0
  430. package/dist/src/ingestion/extractor.js.map +1 -0
  431. package/dist/src/ingestion/extractors/docx.d.ts +3 -0
  432. package/dist/src/ingestion/extractors/docx.d.ts.map +1 -0
  433. package/dist/src/ingestion/extractors/docx.js +20 -0
  434. package/dist/src/ingestion/extractors/docx.js.map +1 -0
  435. package/dist/src/ingestion/extractors/pdf.d.ts +3 -0
  436. package/dist/src/ingestion/extractors/pdf.d.ts.map +1 -0
  437. package/dist/src/ingestion/extractors/pdf.js +32 -0
  438. package/dist/src/ingestion/extractors/pdf.js.map +1 -0
  439. package/dist/src/ingestion/historical-campaign.d.ts +340 -0
  440. package/dist/src/ingestion/historical-campaign.d.ts.map +1 -0
  441. package/dist/src/ingestion/historical-campaign.js +1010 -0
  442. package/dist/src/ingestion/historical-campaign.js.map +1 -0
  443. package/dist/src/ingestion/ignored-paths.d.ts +20 -0
  444. package/dist/src/ingestion/ignored-paths.d.ts.map +1 -0
  445. package/dist/src/ingestion/ignored-paths.js +45 -0
  446. package/dist/src/ingestion/ignored-paths.js.map +1 -0
  447. package/dist/src/ingestion/inbox-core/conversation-fingerprint.d.ts +2 -0
  448. package/dist/src/ingestion/inbox-core/conversation-fingerprint.d.ts.map +1 -0
  449. package/dist/src/ingestion/inbox-core/conversation-fingerprint.js +27 -0
  450. package/dist/src/ingestion/inbox-core/conversation-fingerprint.js.map +1 -0
  451. package/dist/src/ingestion/inbox-core/conversation-key.d.ts +2 -0
  452. package/dist/src/ingestion/inbox-core/conversation-key.d.ts.map +1 -0
  453. package/dist/src/ingestion/inbox-core/conversation-key.js +31 -0
  454. package/dist/src/ingestion/inbox-core/conversation-key.js.map +1 -0
  455. package/dist/src/ingestion/inbox-core/extensions.d.ts +3 -0
  456. package/dist/src/ingestion/inbox-core/extensions.d.ts.map +1 -0
  457. package/dist/src/ingestion/inbox-core/extensions.js +16 -0
  458. package/dist/src/ingestion/inbox-core/extensions.js.map +1 -0
  459. package/dist/src/ingestion/inbox-core/idempotency.d.ts +2 -0
  460. package/dist/src/ingestion/inbox-core/idempotency.d.ts.map +1 -0
  461. package/dist/src/ingestion/inbox-core/idempotency.js +22 -0
  462. package/dist/src/ingestion/inbox-core/idempotency.js.map +1 -0
  463. package/dist/src/ingestion/inbox-core/index.d.ts +20 -0
  464. package/dist/src/ingestion/inbox-core/index.d.ts.map +1 -0
  465. package/dist/src/ingestion/inbox-core/index.js +20 -0
  466. package/dist/src/ingestion/inbox-core/index.js.map +1 -0
  467. package/dist/src/ingestion/inbox-core/source-detection.d.ts +2 -0
  468. package/dist/src/ingestion/inbox-core/source-detection.d.ts.map +1 -0
  469. package/dist/src/ingestion/inbox-core/source-detection.js +23 -0
  470. package/dist/src/ingestion/inbox-core/source-detection.js.map +1 -0
  471. package/dist/src/ingestion/inbox-core/source-sniffer.d.ts +11 -0
  472. package/dist/src/ingestion/inbox-core/source-sniffer.d.ts.map +1 -0
  473. package/dist/src/ingestion/inbox-core/source-sniffer.js +69 -0
  474. package/dist/src/ingestion/inbox-core/source-sniffer.js.map +1 -0
  475. package/dist/src/ingestion/inbox-core/zip-sniffer.d.ts +70 -0
  476. package/dist/src/ingestion/inbox-core/zip-sniffer.d.ts.map +1 -0
  477. package/dist/src/ingestion/inbox-core/zip-sniffer.js +161 -0
  478. package/dist/src/ingestion/inbox-core/zip-sniffer.js.map +1 -0
  479. package/dist/src/ingestion/inbox-watcher.d.ts +12 -0
  480. package/dist/src/ingestion/inbox-watcher.d.ts.map +1 -0
  481. package/dist/src/ingestion/inbox-watcher.js +83 -0
  482. package/dist/src/ingestion/inbox-watcher.js.map +1 -0
  483. package/dist/src/ingestion/indexer.d.ts +39 -0
  484. package/dist/src/ingestion/indexer.d.ts.map +1 -0
  485. package/dist/src/ingestion/indexer.js +111 -0
  486. package/dist/src/ingestion/indexer.js.map +1 -0
  487. package/dist/src/ingestion/metadata-extraction.d.ts +56 -0
  488. package/dist/src/ingestion/metadata-extraction.d.ts.map +1 -0
  489. package/dist/src/ingestion/metadata-extraction.js +151 -0
  490. package/dist/src/ingestion/metadata-extraction.js.map +1 -0
  491. package/dist/src/ingestion/parsers/chatgpt-web.d.ts +29 -0
  492. package/dist/src/ingestion/parsers/chatgpt-web.d.ts.map +1 -0
  493. package/dist/src/ingestion/parsers/chatgpt-web.js +100 -0
  494. package/dist/src/ingestion/parsers/chatgpt-web.js.map +1 -0
  495. package/dist/src/ingestion/parsers/claude-code-jsonl.d.ts +26 -0
  496. package/dist/src/ingestion/parsers/claude-code-jsonl.d.ts.map +1 -0
  497. package/dist/src/ingestion/parsers/claude-code-jsonl.js +125 -0
  498. package/dist/src/ingestion/parsers/claude-code-jsonl.js.map +1 -0
  499. package/dist/src/ingestion/parsers/claude-desktop-sessions.d.ts +17 -0
  500. package/dist/src/ingestion/parsers/claude-desktop-sessions.d.ts.map +1 -0
  501. package/dist/src/ingestion/parsers/claude-desktop-sessions.js +112 -0
  502. package/dist/src/ingestion/parsers/claude-desktop-sessions.js.map +1 -0
  503. package/dist/src/ingestion/parsers/claude-web.d.ts +24 -0
  504. package/dist/src/ingestion/parsers/claude-web.d.ts.map +1 -0
  505. package/dist/src/ingestion/parsers/claude-web.js +75 -0
  506. package/dist/src/ingestion/parsers/claude-web.js.map +1 -0
  507. package/dist/src/ingestion/parsers/codex-jsonl.d.ts +18 -0
  508. package/dist/src/ingestion/parsers/codex-jsonl.d.ts.map +1 -0
  509. package/dist/src/ingestion/parsers/codex-jsonl.js +150 -0
  510. package/dist/src/ingestion/parsers/codex-jsonl.js.map +1 -0
  511. package/dist/src/ingestion/parsers/gemini-web.d.ts +16 -0
  512. package/dist/src/ingestion/parsers/gemini-web.d.ts.map +1 -0
  513. package/dist/src/ingestion/parsers/gemini-web.js +170 -0
  514. package/dist/src/ingestion/parsers/gemini-web.js.map +1 -0
  515. package/dist/src/ingestion/parsers/grok-cli.d.ts +19 -0
  516. package/dist/src/ingestion/parsers/grok-cli.d.ts.map +1 -0
  517. package/dist/src/ingestion/parsers/grok-cli.js +126 -0
  518. package/dist/src/ingestion/parsers/grok-cli.js.map +1 -0
  519. package/dist/src/ingestion/parsers/grok-web.d.ts +40 -0
  520. package/dist/src/ingestion/parsers/grok-web.d.ts.map +1 -0
  521. package/dist/src/ingestion/parsers/grok-web.js +67 -0
  522. package/dist/src/ingestion/parsers/grok-web.js.map +1 -0
  523. package/dist/src/ingestion/parsers/turns.d.ts +36 -0
  524. package/dist/src/ingestion/parsers/turns.d.ts.map +1 -0
  525. package/dist/src/ingestion/parsers/turns.js +25 -0
  526. package/dist/src/ingestion/parsers/turns.js.map +1 -0
  527. package/dist/src/ingestion/parsers/types.d.ts +47 -0
  528. package/dist/src/ingestion/parsers/types.d.ts.map +1 -0
  529. package/dist/src/ingestion/parsers/types.js +26 -0
  530. package/dist/src/ingestion/parsers/types.js.map +1 -0
  531. package/dist/src/ingestion/report-cards.d.ts +75 -0
  532. package/dist/src/ingestion/report-cards.d.ts.map +1 -0
  533. package/dist/src/ingestion/report-cards.js +224 -0
  534. package/dist/src/ingestion/report-cards.js.map +1 -0
  535. package/dist/src/ingestion/scanner.d.ts +48 -0
  536. package/dist/src/ingestion/scanner.d.ts.map +1 -0
  537. package/dist/src/ingestion/scanner.js +131 -0
  538. package/dist/src/ingestion/scanner.js.map +1 -0
  539. package/dist/src/ingestion/skip-quarantine.d.ts +10 -0
  540. package/dist/src/ingestion/skip-quarantine.d.ts.map +1 -0
  541. package/dist/src/ingestion/skip-quarantine.js +35 -0
  542. package/dist/src/ingestion/skip-quarantine.js.map +1 -0
  543. package/dist/src/ingestion/staging.d.ts +109 -0
  544. package/dist/src/ingestion/staging.d.ts.map +1 -0
  545. package/dist/src/ingestion/staging.js +411 -0
  546. package/dist/src/ingestion/staging.js.map +1 -0
  547. package/dist/src/ingestion/watcher.d.ts +65 -0
  548. package/dist/src/ingestion/watcher.d.ts.map +1 -0
  549. package/dist/src/ingestion/watcher.js +182 -0
  550. package/dist/src/ingestion/watcher.js.map +1 -0
  551. package/dist/src/jobs/codex-override-handler.d.ts +3 -0
  552. package/dist/src/jobs/codex-override-handler.d.ts.map +1 -0
  553. package/dist/src/jobs/codex-override-handler.js +16 -0
  554. package/dist/src/jobs/codex-override-handler.js.map +1 -0
  555. package/dist/src/jobs/handlers/compact.d.ts +30 -0
  556. package/dist/src/jobs/handlers/compact.d.ts.map +1 -0
  557. package/dist/src/jobs/handlers/compact.js +360 -0
  558. package/dist/src/jobs/handlers/compact.js.map +1 -0
  559. package/dist/src/jobs/handlers/dedupe-conversations.d.ts +134 -0
  560. package/dist/src/jobs/handlers/dedupe-conversations.d.ts.map +1 -0
  561. package/dist/src/jobs/handlers/dedupe-conversations.js +371 -0
  562. package/dist/src/jobs/handlers/dedupe-conversations.js.map +1 -0
  563. package/dist/src/jobs/handlers/ingest.d.ts +13 -0
  564. package/dist/src/jobs/handlers/ingest.d.ts.map +1 -0
  565. package/dist/src/jobs/handlers/ingest.js +557 -0
  566. package/dist/src/jobs/handlers/ingest.js.map +1 -0
  567. package/dist/src/jobs/handlers/optimize.d.ts +11 -0
  568. package/dist/src/jobs/handlers/optimize.d.ts.map +1 -0
  569. package/dist/src/jobs/handlers/optimize.js +12 -0
  570. package/dist/src/jobs/handlers/optimize.js.map +1 -0
  571. package/dist/src/jobs/handlers/reconcile.d.ts +57 -0
  572. package/dist/src/jobs/handlers/reconcile.d.ts.map +1 -0
  573. package/dist/src/jobs/handlers/reconcile.js +685 -0
  574. package/dist/src/jobs/handlers/reconcile.js.map +1 -0
  575. package/dist/src/jobs/handlers/reindex.d.ts +38 -0
  576. package/dist/src/jobs/handlers/reindex.d.ts.map +1 -0
  577. package/dist/src/jobs/handlers/reindex.js +63 -0
  578. package/dist/src/jobs/handlers/reindex.js.map +1 -0
  579. package/dist/src/jobs/handlers/save.d.ts +10 -0
  580. package/dist/src/jobs/handlers/save.d.ts.map +1 -0
  581. package/dist/src/jobs/handlers/save.js +316 -0
  582. package/dist/src/jobs/handlers/save.js.map +1 -0
  583. package/dist/src/jobs/handlers/triage.d.ts +47 -0
  584. package/dist/src/jobs/handlers/triage.d.ts.map +1 -0
  585. package/dist/src/jobs/handlers/triage.js +95 -0
  586. package/dist/src/jobs/handlers/triage.js.map +1 -0
  587. package/dist/src/jobs/maintenance-scheduler.d.ts +30 -0
  588. package/dist/src/jobs/maintenance-scheduler.d.ts.map +1 -0
  589. package/dist/src/jobs/maintenance-scheduler.js +41 -0
  590. package/dist/src/jobs/maintenance-scheduler.js.map +1 -0
  591. package/dist/src/jobs/queue.d.ts +157 -0
  592. package/dist/src/jobs/queue.d.ts.map +1 -0
  593. package/dist/src/jobs/queue.js +759 -0
  594. package/dist/src/jobs/queue.js.map +1 -0
  595. package/dist/src/jobs/types.d.ts +53 -0
  596. package/dist/src/jobs/types.d.ts.map +1 -0
  597. package/dist/src/jobs/types.js +33 -0
  598. package/dist/src/jobs/types.js.map +1 -0
  599. package/dist/src/jobs/worker-entry.d.ts +10 -0
  600. package/dist/src/jobs/worker-entry.d.ts.map +1 -0
  601. package/dist/src/jobs/worker-entry.js +252 -0
  602. package/dist/src/jobs/worker-entry.js.map +1 -0
  603. package/dist/src/jobs/worker-process.d.ts +67 -0
  604. package/dist/src/jobs/worker-process.d.ts.map +1 -0
  605. package/dist/src/jobs/worker-process.js +227 -0
  606. package/dist/src/jobs/worker-process.js.map +1 -0
  607. package/dist/src/jobs/worker.d.ts +11 -0
  608. package/dist/src/jobs/worker.d.ts.map +1 -0
  609. package/dist/src/jobs/worker.js +14 -0
  610. package/dist/src/jobs/worker.js.map +1 -0
  611. package/dist/src/main.d.ts +2 -0
  612. package/dist/src/main.d.ts.map +1 -0
  613. package/dist/src/main.js +683 -0
  614. package/dist/src/main.js.map +1 -0
  615. package/dist/src/mcp/capture-diagnostics.d.ts +51 -0
  616. package/dist/src/mcp/capture-diagnostics.d.ts.map +1 -0
  617. package/dist/src/mcp/capture-diagnostics.js +127 -0
  618. package/dist/src/mcp/capture-diagnostics.js.map +1 -0
  619. package/dist/src/mcp/errors.d.ts +8 -0
  620. package/dist/src/mcp/errors.d.ts.map +1 -0
  621. package/dist/src/mcp/errors.js +69 -0
  622. package/dist/src/mcp/errors.js.map +1 -0
  623. package/dist/src/mcp/memory-diagnostics.d.ts +6 -0
  624. package/dist/src/mcp/memory-diagnostics.d.ts.map +1 -0
  625. package/dist/src/mcp/memory-diagnostics.js +51 -0
  626. package/dist/src/mcp/memory-diagnostics.js.map +1 -0
  627. package/dist/src/mcp/names.d.ts +48 -0
  628. package/dist/src/mcp/names.d.ts.map +1 -0
  629. package/dist/src/mcp/names.js +77 -0
  630. package/dist/src/mcp/names.js.map +1 -0
  631. package/dist/src/mcp/server.d.ts +19 -0
  632. package/dist/src/mcp/server.d.ts.map +1 -0
  633. package/dist/src/mcp/server.js +184 -0
  634. package/dist/src/mcp/server.js.map +1 -0
  635. package/dist/src/mcp/stdio.d.ts +2 -0
  636. package/dist/src/mcp/stdio.d.ts.map +1 -0
  637. package/dist/src/mcp/stdio.js +8 -0
  638. package/dist/src/mcp/stdio.js.map +1 -0
  639. package/dist/src/mcp/tools/context-pack.d.ts +35 -0
  640. package/dist/src/mcp/tools/context-pack.d.ts.map +1 -0
  641. package/dist/src/mcp/tools/context-pack.js +279 -0
  642. package/dist/src/mcp/tools/context-pack.js.map +1 -0
  643. package/dist/src/mcp/tools/conversations-search.d.ts +38 -0
  644. package/dist/src/mcp/tools/conversations-search.d.ts.map +1 -0
  645. package/dist/src/mcp/tools/conversations-search.js +79 -0
  646. package/dist/src/mcp/tools/conversations-search.js.map +1 -0
  647. package/dist/src/mcp/tools/evidence-feedback.d.ts +60 -0
  648. package/dist/src/mcp/tools/evidence-feedback.d.ts.map +1 -0
  649. package/dist/src/mcp/tools/evidence-feedback.js +62 -0
  650. package/dist/src/mcp/tools/evidence-feedback.js.map +1 -0
  651. package/dist/src/mcp/tools/log-outcome.d.ts +72 -0
  652. package/dist/src/mcp/tools/log-outcome.d.ts.map +1 -0
  653. package/dist/src/mcp/tools/log-outcome.js +59 -0
  654. package/dist/src/mcp/tools/log-outcome.js.map +1 -0
  655. package/dist/src/mcp/tools/open-evidence.d.ts +37 -0
  656. package/dist/src/mcp/tools/open-evidence.d.ts.map +1 -0
  657. package/dist/src/mcp/tools/open-evidence.js +72 -0
  658. package/dist/src/mcp/tools/open-evidence.js.map +1 -0
  659. package/dist/src/mcp/tools/save.d.ts +37 -0
  660. package/dist/src/mcp/tools/save.d.ts.map +1 -0
  661. package/dist/src/mcp/tools/save.js +65 -0
  662. package/dist/src/mcp/tools/save.js.map +1 -0
  663. package/dist/src/mcp/tools/search.d.ts +37 -0
  664. package/dist/src/mcp/tools/search.d.ts.map +1 -0
  665. package/dist/src/mcp/tools/search.js +95 -0
  666. package/dist/src/mcp/tools/search.js.map +1 -0
  667. package/dist/src/mcp/tools/status.d.ts +31 -0
  668. package/dist/src/mcp/tools/status.d.ts.map +1 -0
  669. package/dist/src/mcp/tools/status.js +63 -0
  670. package/dist/src/mcp/tools/status.js.map +1 -0
  671. package/dist/src/observability/coverage.d.ts +100 -0
  672. package/dist/src/observability/coverage.d.ts.map +1 -0
  673. package/dist/src/observability/coverage.js +178 -0
  674. package/dist/src/observability/coverage.js.map +1 -0
  675. package/dist/src/observability/embedding-events.d.ts +52 -0
  676. package/dist/src/observability/embedding-events.d.ts.map +1 -0
  677. package/dist/src/observability/embedding-events.js +149 -0
  678. package/dist/src/observability/embedding-events.js.map +1 -0
  679. package/dist/src/observability/index-events.d.ts +70 -0
  680. package/dist/src/observability/index-events.d.ts.map +1 -0
  681. package/dist/src/observability/index-events.js +148 -0
  682. package/dist/src/observability/index-events.js.map +1 -0
  683. package/dist/src/observability/onboarding-metric.d.ts +131 -0
  684. package/dist/src/observability/onboarding-metric.d.ts.map +1 -0
  685. package/dist/src/observability/onboarding-metric.js +352 -0
  686. package/dist/src/observability/onboarding-metric.js.map +1 -0
  687. package/dist/src/observability/retrieval-feedback.d.ts +82 -0
  688. package/dist/src/observability/retrieval-feedback.d.ts.map +1 -0
  689. package/dist/src/observability/retrieval-feedback.js +231 -0
  690. package/dist/src/observability/retrieval-feedback.js.map +1 -0
  691. package/dist/src/observability/rift-context.d.ts +53 -0
  692. package/dist/src/observability/rift-context.d.ts.map +1 -0
  693. package/dist/src/observability/rift-context.js +141 -0
  694. package/dist/src/observability/rift-context.js.map +1 -0
  695. package/dist/src/observability/staleness.d.ts +43 -0
  696. package/dist/src/observability/staleness.d.ts.map +1 -0
  697. package/dist/src/observability/staleness.js +74 -0
  698. package/dist/src/observability/staleness.js.map +1 -0
  699. package/dist/src/observability/tool-usage-stats.d.ts +139 -0
  700. package/dist/src/observability/tool-usage-stats.d.ts.map +1 -0
  701. package/dist/src/observability/tool-usage-stats.js +245 -0
  702. package/dist/src/observability/tool-usage-stats.js.map +1 -0
  703. package/dist/src/observability/tool-usage.d.ts +231 -0
  704. package/dist/src/observability/tool-usage.d.ts.map +1 -0
  705. package/dist/src/observability/tool-usage.js +489 -0
  706. package/dist/src/observability/tool-usage.js.map +1 -0
  707. package/dist/src/observability/version-check.d.ts +75 -0
  708. package/dist/src/observability/version-check.d.ts.map +1 -0
  709. package/dist/src/observability/version-check.js +198 -0
  710. package/dist/src/observability/version-check.js.map +1 -0
  711. package/dist/src/onboarding/capture-switch.d.ts +20 -0
  712. package/dist/src/onboarding/capture-switch.d.ts.map +1 -0
  713. package/dist/src/onboarding/capture-switch.js +52 -0
  714. package/dist/src/onboarding/capture-switch.js.map +1 -0
  715. package/dist/src/onboarding/daemon-control.d.ts +33 -0
  716. package/dist/src/onboarding/daemon-control.d.ts.map +1 -0
  717. package/dist/src/onboarding/daemon-control.js +92 -0
  718. package/dist/src/onboarding/daemon-control.js.map +1 -0
  719. package/dist/src/onboarding/env-file.d.ts +18 -0
  720. package/dist/src/onboarding/env-file.d.ts.map +1 -0
  721. package/dist/src/onboarding/env-file.js +89 -0
  722. package/dist/src/onboarding/env-file.js.map +1 -0
  723. package/dist/src/onboarding/search-by-meaning.d.ts +35 -0
  724. package/dist/src/onboarding/search-by-meaning.d.ts.map +1 -0
  725. package/dist/src/onboarding/search-by-meaning.js +163 -0
  726. package/dist/src/onboarding/search-by-meaning.js.map +1 -0
  727. package/dist/src/onboarding/setup-page.d.ts +7 -0
  728. package/dist/src/onboarding/setup-page.d.ts.map +1 -0
  729. package/dist/src/onboarding/setup-page.js +823 -0
  730. package/dist/src/onboarding/setup-page.js.map +1 -0
  731. package/dist/src/onboarding/setup-session.d.ts +22 -0
  732. package/dist/src/onboarding/setup-session.d.ts.map +1 -0
  733. package/dist/src/onboarding/setup-session.js +80 -0
  734. package/dist/src/onboarding/setup-session.js.map +1 -0
  735. package/dist/src/onboarding/setup-state.d.ts +117 -0
  736. package/dist/src/onboarding/setup-state.d.ts.map +1 -0
  737. package/dist/src/onboarding/setup-state.js +267 -0
  738. package/dist/src/onboarding/setup-state.js.map +1 -0
  739. package/dist/src/onboarding/voyage-validate.d.ts +22 -0
  740. package/dist/src/onboarding/voyage-validate.d.ts.map +1 -0
  741. package/dist/src/onboarding/voyage-validate.js +96 -0
  742. package/dist/src/onboarding/voyage-validate.js.map +1 -0
  743. package/dist/src/providers/anthropic-digest.d.ts +23 -0
  744. package/dist/src/providers/anthropic-digest.d.ts.map +1 -0
  745. package/dist/src/providers/anthropic-digest.js +91 -0
  746. package/dist/src/providers/anthropic-digest.js.map +1 -0
  747. package/dist/src/providers/basic-metadata-extraction.d.ts +60 -0
  748. package/dist/src/providers/basic-metadata-extraction.d.ts.map +1 -0
  749. package/dist/src/providers/basic-metadata-extraction.js +114 -0
  750. package/dist/src/providers/basic-metadata-extraction.js.map +1 -0
  751. package/dist/src/providers/claude-cli-metadata-extraction.d.ts +47 -0
  752. package/dist/src/providers/claude-cli-metadata-extraction.d.ts.map +1 -0
  753. package/dist/src/providers/claude-cli-metadata-extraction.js +130 -0
  754. package/dist/src/providers/claude-cli-metadata-extraction.js.map +1 -0
  755. package/dist/src/providers/claude-cli-runner.d.ts +92 -0
  756. package/dist/src/providers/claude-cli-runner.d.ts.map +1 -0
  757. package/dist/src/providers/claude-cli-runner.js +598 -0
  758. package/dist/src/providers/claude-cli-runner.js.map +1 -0
  759. package/dist/src/providers/claude-input-limit.d.ts +32 -0
  760. package/dist/src/providers/claude-input-limit.d.ts.map +1 -0
  761. package/dist/src/providers/claude-input-limit.js +32 -0
  762. package/dist/src/providers/claude-input-limit.js.map +1 -0
  763. package/dist/src/providers/codex-cli-digest.d.ts +12 -0
  764. package/dist/src/providers/codex-cli-digest.d.ts.map +1 -0
  765. package/dist/src/providers/codex-cli-digest.js +70 -0
  766. package/dist/src/providers/codex-cli-digest.js.map +1 -0
  767. package/dist/src/providers/codex-cli-metadata-extraction.d.ts +15 -0
  768. package/dist/src/providers/codex-cli-metadata-extraction.d.ts.map +1 -0
  769. package/dist/src/providers/codex-cli-metadata-extraction.js +78 -0
  770. package/dist/src/providers/codex-cli-metadata-extraction.js.map +1 -0
  771. package/dist/src/providers/codex-cli-model.d.ts +110 -0
  772. package/dist/src/providers/codex-cli-model.d.ts.map +1 -0
  773. package/dist/src/providers/codex-cli-model.js +338 -0
  774. package/dist/src/providers/codex-cli-model.js.map +1 -0
  775. package/dist/src/providers/codex-cli-runner.d.ts +70 -0
  776. package/dist/src/providers/codex-cli-runner.d.ts.map +1 -0
  777. package/dist/src/providers/codex-cli-runner.js +745 -0
  778. package/dist/src/providers/codex-cli-runner.js.map +1 -0
  779. package/dist/src/providers/codex-input-limit.d.ts +43 -0
  780. package/dist/src/providers/codex-input-limit.d.ts.map +1 -0
  781. package/dist/src/providers/codex-input-limit.js +70 -0
  782. package/dist/src/providers/codex-input-limit.js.map +1 -0
  783. package/dist/src/providers/conversation-generation.d.ts +21 -0
  784. package/dist/src/providers/conversation-generation.d.ts.map +1 -0
  785. package/dist/src/providers/conversation-generation.js +132 -0
  786. package/dist/src/providers/conversation-generation.js.map +1 -0
  787. package/dist/src/providers/ollama-embed.d.ts +23 -0
  788. package/dist/src/providers/ollama-embed.d.ts.map +1 -0
  789. package/dist/src/providers/ollama-embed.js +137 -0
  790. package/dist/src/providers/ollama-embed.js.map +1 -0
  791. package/dist/src/providers/ollama.d.ts +42 -0
  792. package/dist/src/providers/ollama.d.ts.map +1 -0
  793. package/dist/src/providers/ollama.js +169 -0
  794. package/dist/src/providers/ollama.js.map +1 -0
  795. package/dist/src/providers/openai-metadata-extraction.d.ts +120 -0
  796. package/dist/src/providers/openai-metadata-extraction.d.ts.map +1 -0
  797. package/dist/src/providers/openai-metadata-extraction.js +225 -0
  798. package/dist/src/providers/openai-metadata-extraction.js.map +1 -0
  799. package/dist/src/providers/operator-overrides.d.ts +24 -0
  800. package/dist/src/providers/operator-overrides.d.ts.map +1 -0
  801. package/dist/src/providers/operator-overrides.js +84 -0
  802. package/dist/src/providers/operator-overrides.js.map +1 -0
  803. package/dist/src/providers/placeholder-embed.d.ts +56 -0
  804. package/dist/src/providers/placeholder-embed.d.ts.map +1 -0
  805. package/dist/src/providers/placeholder-embed.js +64 -0
  806. package/dist/src/providers/placeholder-embed.js.map +1 -0
  807. package/dist/src/providers/shared-request.d.ts +22 -0
  808. package/dist/src/providers/shared-request.d.ts.map +1 -0
  809. package/dist/src/providers/shared-request.js +63 -0
  810. package/dist/src/providers/shared-request.js.map +1 -0
  811. package/dist/src/providers/stub.d.ts +19 -0
  812. package/dist/src/providers/stub.d.ts.map +1 -0
  813. package/dist/src/providers/stub.js +74 -0
  814. package/dist/src/providers/stub.js.map +1 -0
  815. package/dist/src/providers/types.d.ts +100 -0
  816. package/dist/src/providers/types.d.ts.map +1 -0
  817. package/dist/src/providers/types.js +63 -0
  818. package/dist/src/providers/types.js.map +1 -0
  819. package/dist/src/providers/voyage.d.ts +55 -0
  820. package/dist/src/providers/voyage.d.ts.map +1 -0
  821. package/dist/src/providers/voyage.js +179 -0
  822. package/dist/src/providers/voyage.js.map +1 -0
  823. package/dist/src/retrieval/brief.d.ts +26 -0
  824. package/dist/src/retrieval/brief.d.ts.map +1 -0
  825. package/dist/src/retrieval/brief.js +268 -0
  826. package/dist/src/retrieval/brief.js.map +1 -0
  827. package/dist/src/retrieval/canonical-files.d.ts +79 -0
  828. package/dist/src/retrieval/canonical-files.d.ts.map +1 -0
  829. package/dist/src/retrieval/canonical-files.js +432 -0
  830. package/dist/src/retrieval/canonical-files.js.map +1 -0
  831. package/dist/src/retrieval/compact.d.ts +306 -0
  832. package/dist/src/retrieval/compact.d.ts.map +1 -0
  833. package/dist/src/retrieval/compact.js +810 -0
  834. package/dist/src/retrieval/compact.js.map +1 -0
  835. package/dist/src/retrieval/context-pack.d.ts +344 -0
  836. package/dist/src/retrieval/context-pack.d.ts.map +1 -0
  837. package/dist/src/retrieval/context-pack.js +1483 -0
  838. package/dist/src/retrieval/context-pack.js.map +1 -0
  839. package/dist/src/retrieval/conversation-dedup.d.ts +54 -0
  840. package/dist/src/retrieval/conversation-dedup.d.ts.map +1 -0
  841. package/dist/src/retrieval/conversation-dedup.js +162 -0
  842. package/dist/src/retrieval/conversation-dedup.js.map +1 -0
  843. package/dist/src/retrieval/current-truth.d.ts +360 -0
  844. package/dist/src/retrieval/current-truth.d.ts.map +1 -0
  845. package/dist/src/retrieval/current-truth.js +766 -0
  846. package/dist/src/retrieval/current-truth.js.map +1 -0
  847. package/dist/src/retrieval/cwd.d.ts +25 -0
  848. package/dist/src/retrieval/cwd.d.ts.map +1 -0
  849. package/dist/src/retrieval/cwd.js +48 -0
  850. package/dist/src/retrieval/cwd.js.map +1 -0
  851. package/dist/src/retrieval/degraded.d.ts +20 -0
  852. package/dist/src/retrieval/degraded.d.ts.map +1 -0
  853. package/dist/src/retrieval/degraded.js +43 -0
  854. package/dist/src/retrieval/degraded.js.map +1 -0
  855. package/dist/src/retrieval/evidence-key.d.ts +48 -0
  856. package/dist/src/retrieval/evidence-key.d.ts.map +1 -0
  857. package/dist/src/retrieval/evidence-key.js +131 -0
  858. package/dist/src/retrieval/evidence-key.js.map +1 -0
  859. package/dist/src/retrieval/feedback-ranking.d.ts +49 -0
  860. package/dist/src/retrieval/feedback-ranking.d.ts.map +1 -0
  861. package/dist/src/retrieval/feedback-ranking.js +138 -0
  862. package/dist/src/retrieval/feedback-ranking.js.map +1 -0
  863. package/dist/src/retrieval/git-state.d.ts +62 -0
  864. package/dist/src/retrieval/git-state.d.ts.map +1 -0
  865. package/dist/src/retrieval/git-state.js +192 -0
  866. package/dist/src/retrieval/git-state.js.map +1 -0
  867. package/dist/src/retrieval/group-by-parent.d.ts +38 -0
  868. package/dist/src/retrieval/group-by-parent.d.ts.map +1 -0
  869. package/dist/src/retrieval/group-by-parent.js +40 -0
  870. package/dist/src/retrieval/group-by-parent.js.map +1 -0
  871. package/dist/src/retrieval/hybrid.d.ts +75 -0
  872. package/dist/src/retrieval/hybrid.d.ts.map +1 -0
  873. package/dist/src/retrieval/hybrid.js +151 -0
  874. package/dist/src/retrieval/hybrid.js.map +1 -0
  875. package/dist/src/retrieval/lexical.d.ts +33 -0
  876. package/dist/src/retrieval/lexical.d.ts.map +1 -0
  877. package/dist/src/retrieval/lexical.js +379 -0
  878. package/dist/src/retrieval/lexical.js.map +1 -0
  879. package/dist/src/retrieval/locator-boost.d.ts +37 -0
  880. package/dist/src/retrieval/locator-boost.d.ts.map +1 -0
  881. package/dist/src/retrieval/locator-boost.js +129 -0
  882. package/dist/src/retrieval/locator-boost.js.map +1 -0
  883. package/dist/src/retrieval/passages.d.ts +24 -0
  884. package/dist/src/retrieval/passages.d.ts.map +1 -0
  885. package/dist/src/retrieval/passages.js +160 -0
  886. package/dist/src/retrieval/passages.js.map +1 -0
  887. package/dist/src/retrieval/post-filter.d.ts +32 -0
  888. package/dist/src/retrieval/post-filter.d.ts.map +1 -0
  889. package/dist/src/retrieval/post-filter.js +57 -0
  890. package/dist/src/retrieval/post-filter.js.map +1 -0
  891. package/dist/src/retrieval/project-index.d.ts +71 -0
  892. package/dist/src/retrieval/project-index.d.ts.map +1 -0
  893. package/dist/src/retrieval/project-index.js +348 -0
  894. package/dist/src/retrieval/project-index.js.map +1 -0
  895. package/dist/src/retrieval/recall-hint.d.ts +22 -0
  896. package/dist/src/retrieval/recall-hint.d.ts.map +1 -0
  897. package/dist/src/retrieval/recall-hint.js +33 -0
  898. package/dist/src/retrieval/recall-hint.js.map +1 -0
  899. package/dist/src/retrieval/receipt.d.ts +57 -0
  900. package/dist/src/retrieval/receipt.d.ts.map +1 -0
  901. package/dist/src/retrieval/receipt.js +122 -0
  902. package/dist/src/retrieval/receipt.js.map +1 -0
  903. package/dist/src/retrieval/report-demotion.d.ts +46 -0
  904. package/dist/src/retrieval/report-demotion.d.ts.map +1 -0
  905. package/dist/src/retrieval/report-demotion.js +169 -0
  906. package/dist/src/retrieval/report-demotion.js.map +1 -0
  907. package/dist/src/retrieval/reranker.d.ts +119 -0
  908. package/dist/src/retrieval/reranker.d.ts.map +1 -0
  909. package/dist/src/retrieval/reranker.js +220 -0
  910. package/dist/src/retrieval/reranker.js.map +1 -0
  911. package/dist/src/retrieval/stitch-chunks.d.ts +76 -0
  912. package/dist/src/retrieval/stitch-chunks.d.ts.map +1 -0
  913. package/dist/src/retrieval/stitch-chunks.js +113 -0
  914. package/dist/src/retrieval/stitch-chunks.js.map +1 -0
  915. package/dist/src/retrieval/vector.d.ts +71 -0
  916. package/dist/src/retrieval/vector.d.ts.map +1 -0
  917. package/dist/src/retrieval/vector.js +147 -0
  918. package/dist/src/retrieval/vector.js.map +1 -0
  919. package/dist/src/runtime/legacy-migration.d.ts +27 -0
  920. package/dist/src/runtime/legacy-migration.d.ts.map +1 -0
  921. package/dist/src/runtime/legacy-migration.js +140 -0
  922. package/dist/src/runtime/legacy-migration.js.map +1 -0
  923. package/dist/src/runtime/legacy-name-guard.d.ts +35 -0
  924. package/dist/src/runtime/legacy-name-guard.d.ts.map +1 -0
  925. package/dist/src/runtime/legacy-name-guard.js +58 -0
  926. package/dist/src/runtime/legacy-name-guard.js.map +1 -0
  927. package/dist/src/runtime/rift-env.d.ts +14 -0
  928. package/dist/src/runtime/rift-env.d.ts.map +1 -0
  929. package/dist/src/runtime/rift-env.js +79 -0
  930. package/dist/src/runtime/rift-env.js.map +1 -0
  931. package/dist/src/runtime/voyage-key-source.d.ts +46 -0
  932. package/dist/src/runtime/voyage-key-source.d.ts.map +1 -0
  933. package/dist/src/runtime/voyage-key-source.js +97 -0
  934. package/dist/src/runtime/voyage-key-source.js.map +1 -0
  935. package/dist/src/runtime/watcher-startup.d.ts +2 -0
  936. package/dist/src/runtime/watcher-startup.d.ts.map +1 -0
  937. package/dist/src/runtime/watcher-startup.js +4 -0
  938. package/dist/src/runtime/watcher-startup.js.map +1 -0
  939. package/dist/src/security/archive.d.ts +23 -0
  940. package/dist/src/security/archive.d.ts.map +1 -0
  941. package/dist/src/security/archive.js +163 -0
  942. package/dist/src/security/archive.js.map +1 -0
  943. package/dist/src/security/paths.d.ts +21 -0
  944. package/dist/src/security/paths.d.ts.map +1 -0
  945. package/dist/src/security/paths.js +67 -0
  946. package/dist/src/security/paths.js.map +1 -0
  947. package/dist/src/server/app.d.ts +29 -0
  948. package/dist/src/server/app.d.ts.map +1 -0
  949. package/dist/src/server/app.js +356 -0
  950. package/dist/src/server/app.js.map +1 -0
  951. package/dist/src/server/build-info.d.ts +8 -0
  952. package/dist/src/server/build-info.d.ts.map +1 -0
  953. package/dist/src/server/build-info.js +61 -0
  954. package/dist/src/server/build-info.js.map +1 -0
  955. package/dist/src/server/lifecycle.d.ts +30 -0
  956. package/dist/src/server/lifecycle.d.ts.map +1 -0
  957. package/dist/src/server/lifecycle.js +59 -0
  958. package/dist/src/server/lifecycle.js.map +1 -0
  959. package/dist/src/server/middleware/multipart.d.ts +51 -0
  960. package/dist/src/server/middleware/multipart.d.ts.map +1 -0
  961. package/dist/src/server/middleware/multipart.js +86 -0
  962. package/dist/src/server/middleware/multipart.js.map +1 -0
  963. package/dist/src/server/routes/compact.d.ts +37 -0
  964. package/dist/src/server/routes/compact.d.ts.map +1 -0
  965. package/dist/src/server/routes/compact.js +80 -0
  966. package/dist/src/server/routes/compact.js.map +1 -0
  967. package/dist/src/server/routes/context.d.ts +12 -0
  968. package/dist/src/server/routes/context.d.ts.map +1 -0
  969. package/dist/src/server/routes/context.js +73 -0
  970. package/dist/src/server/routes/context.js.map +1 -0
  971. package/dist/src/server/routes/conversations-search.d.ts +4 -0
  972. package/dist/src/server/routes/conversations-search.d.ts.map +1 -0
  973. package/dist/src/server/routes/conversations-search.js +287 -0
  974. package/dist/src/server/routes/conversations-search.js.map +1 -0
  975. package/dist/src/server/routes/enqueue.d.ts +11 -0
  976. package/dist/src/server/routes/enqueue.d.ts.map +1 -0
  977. package/dist/src/server/routes/enqueue.js +17 -0
  978. package/dist/src/server/routes/enqueue.js.map +1 -0
  979. package/dist/src/server/routes/friend-status.d.ts +481 -0
  980. package/dist/src/server/routes/friend-status.d.ts.map +1 -0
  981. package/dist/src/server/routes/friend-status.js +675 -0
  982. package/dist/src/server/routes/friend-status.js.map +1 -0
  983. package/dist/src/server/routes/ingest.d.ts +15 -0
  984. package/dist/src/server/routes/ingest.d.ts.map +1 -0
  985. package/dist/src/server/routes/ingest.js +142 -0
  986. package/dist/src/server/routes/ingest.js.map +1 -0
  987. package/dist/src/server/routes/jobs.d.ts +10 -0
  988. package/dist/src/server/routes/jobs.d.ts.map +1 -0
  989. package/dist/src/server/routes/jobs.js +29 -0
  990. package/dist/src/server/routes/jobs.js.map +1 -0
  991. package/dist/src/server/routes/mcp-usage.d.ts +17 -0
  992. package/dist/src/server/routes/mcp-usage.d.ts.map +1 -0
  993. package/dist/src/server/routes/mcp-usage.js +17 -0
  994. package/dist/src/server/routes/mcp-usage.js.map +1 -0
  995. package/dist/src/server/routes/reconcile.d.ts +4 -0
  996. package/dist/src/server/routes/reconcile.d.ts.map +1 -0
  997. package/dist/src/server/routes/reconcile.js +62 -0
  998. package/dist/src/server/routes/reconcile.js.map +1 -0
  999. package/dist/src/server/routes/reindex.d.ts +4 -0
  1000. package/dist/src/server/routes/reindex.d.ts.map +1 -0
  1001. package/dist/src/server/routes/reindex.js +77 -0
  1002. package/dist/src/server/routes/reindex.js.map +1 -0
  1003. package/dist/src/server/routes/retrieval-feedback.d.ts +3 -0
  1004. package/dist/src/server/routes/retrieval-feedback.d.ts.map +1 -0
  1005. package/dist/src/server/routes/retrieval-feedback.js +290 -0
  1006. package/dist/src/server/routes/retrieval-feedback.js.map +1 -0
  1007. package/dist/src/server/routes/save.d.ts +52 -0
  1008. package/dist/src/server/routes/save.d.ts.map +1 -0
  1009. package/dist/src/server/routes/save.js +127 -0
  1010. package/dist/src/server/routes/save.js.map +1 -0
  1011. package/dist/src/server/routes/search.d.ts +5 -0
  1012. package/dist/src/server/routes/search.d.ts.map +1 -0
  1013. package/dist/src/server/routes/search.js +689 -0
  1014. package/dist/src/server/routes/search.js.map +1 -0
  1015. package/dist/src/server/routes/setup.d.ts +46 -0
  1016. package/dist/src/server/routes/setup.d.ts.map +1 -0
  1017. package/dist/src/server/routes/setup.js +322 -0
  1018. package/dist/src/server/routes/setup.js.map +1 -0
  1019. package/dist/src/server/routes/stats.d.ts +10 -0
  1020. package/dist/src/server/routes/stats.d.ts.map +1 -0
  1021. package/dist/src/server/routes/stats.js +15 -0
  1022. package/dist/src/server/routes/stats.js.map +1 -0
  1023. package/dist/src/server/routes/status.d.ts +20 -0
  1024. package/dist/src/server/routes/status.d.ts.map +1 -0
  1025. package/dist/src/server/routes/status.js +31 -0
  1026. package/dist/src/server/routes/status.js.map +1 -0
  1027. package/dist/src/server/routes/triage.d.ts +4 -0
  1028. package/dist/src/server/routes/triage.d.ts.map +1 -0
  1029. package/dist/src/server/routes/triage.js +97 -0
  1030. package/dist/src/server/routes/triage.js.map +1 -0
  1031. package/dist/src/server/save-quality.d.ts +21 -0
  1032. package/dist/src/server/save-quality.d.ts.map +1 -0
  1033. package/dist/src/server/save-quality.js +51 -0
  1034. package/dist/src/server/save-quality.js.map +1 -0
  1035. package/dist/src/server/serving-marker.d.ts +85 -0
  1036. package/dist/src/server/serving-marker.d.ts.map +1 -0
  1037. package/dist/src/server/serving-marker.js +226 -0
  1038. package/dist/src/server/serving-marker.js.map +1 -0
  1039. package/dist/src/storage/atomic.d.ts +8 -0
  1040. package/dist/src/storage/atomic.d.ts.map +1 -0
  1041. package/dist/src/storage/atomic.js +22 -0
  1042. package/dist/src/storage/atomic.js.map +1 -0
  1043. package/dist/src/storage/chunk-backfill.d.ts +39 -0
  1044. package/dist/src/storage/chunk-backfill.d.ts.map +1 -0
  1045. package/dist/src/storage/chunk-backfill.js +295 -0
  1046. package/dist/src/storage/chunk-backfill.js.map +1 -0
  1047. package/dist/src/storage/db.d.ts +15 -0
  1048. package/dist/src/storage/db.d.ts.map +1 -0
  1049. package/dist/src/storage/db.js +47 -0
  1050. package/dist/src/storage/db.js.map +1 -0
  1051. package/dist/src/storage/filter.d.ts +42 -0
  1052. package/dist/src/storage/filter.d.ts.map +1 -0
  1053. package/dist/src/storage/filter.js +70 -0
  1054. package/dist/src/storage/filter.js.map +1 -0
  1055. package/dist/src/storage/fts.d.ts +47 -0
  1056. package/dist/src/storage/fts.d.ts.map +1 -0
  1057. package/dist/src/storage/fts.js +86 -0
  1058. package/dist/src/storage/fts.js.map +1 -0
  1059. package/dist/src/storage/integrity.d.ts +11 -0
  1060. package/dist/src/storage/integrity.d.ts.map +1 -0
  1061. package/dist/src/storage/integrity.js +66 -0
  1062. package/dist/src/storage/integrity.js.map +1 -0
  1063. package/dist/src/storage/maintenance.d.ts +27 -0
  1064. package/dist/src/storage/maintenance.d.ts.map +1 -0
  1065. package/dist/src/storage/maintenance.js +66 -0
  1066. package/dist/src/storage/maintenance.js.map +1 -0
  1067. package/dist/src/storage/rebuild.d.ts +71 -0
  1068. package/dist/src/storage/rebuild.d.ts.map +1 -0
  1069. package/dist/src/storage/rebuild.js +605 -0
  1070. package/dist/src/storage/rebuild.js.map +1 -0
  1071. package/dist/src/storage/report-card-backfill.d.ts +20 -0
  1072. package/dist/src/storage/report-card-backfill.d.ts.map +1 -0
  1073. package/dist/src/storage/report-card-backfill.js +114 -0
  1074. package/dist/src/storage/report-card-backfill.js.map +1 -0
  1075. package/dist/src/storage/shadow-swap.d.ts +20 -0
  1076. package/dist/src/storage/shadow-swap.d.ts.map +1 -0
  1077. package/dist/src/storage/shadow-swap.js +163 -0
  1078. package/dist/src/storage/shadow-swap.js.map +1 -0
  1079. package/dist/src/storage/tables.d.ts +147 -0
  1080. package/dist/src/storage/tables.d.ts.map +1 -0
  1081. package/dist/src/storage/tables.js +290 -0
  1082. package/dist/src/storage/tables.js.map +1 -0
  1083. package/operator/swiftbar/render-menu.py +475 -0
  1084. package/operator/swiftbar/rift.10s.sh +201 -0
  1085. package/package.json +57 -3
@@ -0,0 +1,823 @@
1
+ function escapeHtml(value) {
2
+ return value
3
+ .replaceAll("&", "&")
4
+ .replaceAll("<", "&lt;")
5
+ .replaceAll(">", "&gt;")
6
+ .replaceAll('"', "&quot;")
7
+ .replaceAll("'", "&#039;");
8
+ }
9
+ // Brand marks from Simple Icons (CC0). Shown only to say which tools Onadit
10
+ // connects to.
11
+ const LOGOS = {
12
+ claude: "m4.7144 15.9555 4.7174-2.6471.079-.2307-.079-.1275h-.2307l-.7893-.0486-2.6956-.0729-2.3375-.0971-2.2646-.1214-.5707-.1215-.5343-.7042.0546-.3522.4797-.3218.686.0608 1.5179.1032 2.2767.1578 1.6514.0972 2.4468.255h.3886l.0546-.1579-.1336-.0971-.1032-.0972L6.973 9.8356l-2.55-1.6879-1.3356-.9714-.7225-.4918-.3643-.4614-.1578-1.0078.6557-.7225.8803.0607.2246.0607.8925.686 1.9064 1.4754 2.4893 1.8336.3643.3035.1457-.1032.0182-.0728-.164-.2733-1.3539-2.4467-1.445-2.4893-.6435-1.032-.17-.6194c-.0607-.255-.1032-.4674-.1032-.7285L6.287.1335 6.6997 0l.9957.1336.419.3642.6192 1.4147 1.0018 2.2282 1.5543 3.0296.4553.8985.2429.8318.091.255h.1579v-.1457l.1275-1.706.2368-2.0947.2307-2.6957.0789-.7589.3764-.9107.7468-.4918.5828.2793.4797.686-.0668.4433-.2853 1.8517-.5586 2.9021-.3643 1.9429h.2125l.2429-.2429.9835-1.3053 1.6514-2.0643.7286-.8196.85-.9046.5464-.4311h1.0321l.759 1.1293-.34 1.1657-1.0625 1.3478-.8804 1.1414-1.2628 1.7-.7893 1.36.0729.1093.1882-.0183 2.8535-.607 1.5421-.2794 1.8396-.3157.8318.3886.091.3946-.3278.8075-1.967.4857-2.3072.4614-3.4364.8136-.0425.0304.0486.0607 1.5482.1457.6618.0364h1.621l3.0175.2247.7892.522.4736.6376-.079.4857-1.2142.6193-1.6393-.3886-3.825-.9107-1.3113-.3279h-.1822v.1093l1.0929 1.0686 2.0035 1.8092 2.5075 2.3314.1275.5768-.3218.4554-.34-.0486-2.2039-1.6575-.85-.7468-1.9246-1.621h-.1275v.17l.4432.6496 2.3436 3.5214.1214 1.0807-.17.3521-.6071.2125-.6679-.1214-1.3721-1.9246L14.38 17.959l-1.1414-1.9428-.1397.079-.674 7.2552-.3156.3703-.7286.2793-.6071-.4614-.3218-.7468.3218-1.4753.3886-1.9246.3157-1.53.2853-1.9004.17-.6314-.0121-.0425-.1397.0182-1.4328 1.9672-2.1796 2.9446-1.7243 1.8456-.4128.164-.7164-.3704.0667-.6618.4008-.5889 2.386-3.0357 1.4389-1.882.929-1.0868-.0062-.1579h-.0546l-6.3385 4.1164-1.1293.1457-.4857-.4554.0608-.7467.2307-.2429 1.9064-1.3114Z",
13
+ openai: "M22.2819 9.8211a5.9847 5.9847 0 0 0-.5157-4.9108 6.0462 6.0462 0 0 0-6.5098-2.9A6.0651 6.0651 0 0 0 4.9807 4.1818a5.9847 5.9847 0 0 0-3.9977 2.9 6.0462 6.0462 0 0 0 .7427 7.0966 5.98 5.98 0 0 0 .511 4.9107 6.051 6.051 0 0 0 6.5146 2.9001A5.9847 5.9847 0 0 0 13.2599 24a6.0557 6.0557 0 0 0 5.7718-4.2058 5.9894 5.9894 0 0 0 3.9977-2.9001 6.0557 6.0557 0 0 0-.7475-7.0729zm-9.022 12.6081a4.4755 4.4755 0 0 1-2.8764-1.0408l.1419-.0804 4.7783-2.7582a.7948.7948 0 0 0 .3927-.6813v-6.7369l2.02 1.1686a.071.071 0 0 1 .038.052v5.5826a4.504 4.504 0 0 1-4.4945 4.4944zm-9.6607-4.1254a4.4708 4.4708 0 0 1-.5346-3.0137l.142.0852 4.783 2.7582a.7712.7712 0 0 0 .7806 0l5.8428-3.3685v2.3324a.0804.0804 0 0 1-.0332.0615L9.74 19.9502a4.4992 4.4992 0 0 1-6.1408-1.6464zM2.3408 7.8956a4.485 4.485 0 0 1 2.3655-1.9728V11.6a.7664.7664 0 0 0 .3879.6765l5.8144 3.3543-2.0201 1.1685a.0757.0757 0 0 1-.071 0l-4.8303-2.7865A4.504 4.504 0 0 1 2.3408 7.872zm16.5963 3.8558L13.1038 8.364 15.1192 7.2a.0757.0757 0 0 1 .071 0l4.8303 2.7913a4.4944 4.4944 0 0 1-.6765 8.1042v-5.6772a.79.79 0 0 0-.407-.667zm2.0107-3.0231l-.142-.0852-4.7735-2.7818a.7759.7759 0 0 0-.7854 0L9.409 9.2297V6.8974a.0662.0662 0 0 1 .0284-.0615l4.8303-2.7866a4.4992 4.4992 0 0 1 6.6802 4.66zM8.3065 12.863l-2.02-1.1638a.0804.0804 0 0 1-.038-.0567V6.0742a4.4992 4.4992 0 0 1 7.3757-3.4537l-.142.0805L8.704 5.459a.7948.7948 0 0 0-.3927.6813zm1.0976-2.3654l2.602-1.4998 2.6069 1.4998v2.9994l-2.5974 1.4997-2.6067-1.4997Z",
14
+ cursor: "M11.503.131 1.891 5.678a.84.84 0 0 0-.42.726v11.188c0 .3.162.575.42.724l9.609 5.55a1 1 0 0 0 .998 0l9.61-5.55a.84.84 0 0 0 .42-.724V6.404a.84.84 0 0 0-.42-.726L12.497.131a1.01 1.01 0 0 0-.996 0M2.657 6.338h18.55c.263 0 .43.287.297.515L12.23 22.918c-.062.107-.229.064-.229-.06V12.335a.59.59 0 0 0-.295-.51l-9.11-5.257c-.109-.063-.064-.23.061-.23",
15
+ };
16
+ function logo(name) {
17
+ return `<svg viewBox="0 0 24 24" aria-hidden="true"><path d="${LOGOS[name]}"/></svg>`;
18
+ }
19
+ const TOOLS = [
20
+ { id: "claude-desktop", name: "Claude", logo: "claude" },
21
+ { id: "claude-code", name: "Claude Code", logo: "claude" },
22
+ { id: "codex", name: "Codex", logo: "openai" },
23
+ { id: "cursor", name: "Cursor", logo: "cursor" },
24
+ ];
25
+ // The Onadit mark ("glass"): a block cut by one slanted rift, left half solid,
26
+ // right half an outline. Same paths as operator/swiftbar/assets/rift-mark.svg.
27
+ const RIFT_MARK = `<svg class="mark" width="18" height="18" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M5 3h8.2L9.4 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2Z"/><path fill-rule="evenodd" d="M15.2 3H19a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-7.6ZM16.82 5L13.87 19H19V5Z"/></svg>`;
28
+ const CHECK_ICON = `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20 6 9 17l-5-5"/></svg>`;
29
+ export function renderSetupPage(opts) {
30
+ const token = escapeHtml(opts.token);
31
+ const version = escapeHtml(opts.version);
32
+ const toolRows = TOOLS.map((tool) => `<li class="tool" data-tool="${tool.id}"><span class="tool-logo">${logo(tool.logo)}</span><span class="tool-name">${tool.name}</span><span class="tool-state"></span></li>`).join("");
33
+ const step = (n, label) => `<button class="step" data-nav="${n}"${n === 1 ? ' aria-current="step"' : " disabled"}><span class="step-icon"><i class="dot"></i>${CHECK_ICON}</span><span>${label}</span></button>`;
34
+ return `<!doctype html>
35
+ <html lang="en">
36
+ <head>
37
+ <meta charset="utf-8">
38
+ <meta name="viewport" content="width=device-width, initial-scale=1">
39
+ <meta name="color-scheme" content="dark">
40
+ <title>Set up Onadit</title>
41
+ <style>
42
+ :root {
43
+ --canvas:#000; --rail:#050506; --panel:#0c0d0e; --field:#101112; --tile:#1a1b1d; --raised:#1f2022;
44
+ --ink:#f7f8f8; --ink-muted:#c9ccd1; --ink-subtle:#8a8f98; --ink-faint:#62666d; --ink-off:#4a4d52;
45
+ --line:rgba(255,255,255,.06); --line-mid:rgba(255,255,255,.1); --line-strong:rgba(255,255,255,.14);
46
+ --error:#ff8a8a; --ease:cubic-bezier(.2,.6,.25,1);
47
+ /* The step block starts about half a typical step above the middle,
48
+ just above optical center, and stays put between steps. */
49
+ --top:clamp(56px,calc(50vh - 280px),480px); --moon:min(920px,96vh);
50
+ }
51
+ * { box-sizing:border-box; }
52
+ html,body { margin:0; background:var(--canvas); }
53
+ body { color:var(--ink); font:15px/1.5 "Geist","Inter",-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif; -webkit-font-smoothing:antialiased; }
54
+ button,input { font:inherit; color:inherit; }
55
+ button { cursor:pointer; background:none; border:0; padding:0; }
56
+ button:disabled { cursor:default; }
57
+ :focus-visible { outline:2px solid rgba(255,255,255,.7); outline-offset:2px; }
58
+ svg { display:block; }
59
+ p { margin:0; }
60
+ .hidden { display:none !important; }
61
+
62
+ .app { display:flex; min-height:100vh; }
63
+ .rail { position:sticky; top:0; display:flex; flex-direction:column; width:272px; height:100vh; flex-shrink:0; padding:36px 20px 28px; background:var(--rail); border-right:1px solid rgba(255,255,255,.08); z-index:2; }
64
+ .brand { display:flex; align-items:center; gap:10px; padding-left:12px; font-size:17px; font-weight:600; letter-spacing:-.03em; }
65
+ .steps { display:flex; flex-direction:column; gap:4px; flex:1; padding-top:72px; }
66
+ .step { display:flex; align-items:center; gap:12px; height:40px; padding:0 12px; border-radius:10px; font-size:14px; color:var(--ink-off); text-align:left; transition:background 150ms var(--ease), color 150ms var(--ease); }
67
+ .step-icon { position:relative; width:16px; height:16px; flex-shrink:0; display:grid; place-items:center; }
68
+ .step-icon .dot { width:8px; height:8px; border-radius:50%; border:1px solid #3a3c40; transition:all 200ms var(--ease); }
69
+ .step-icon svg { position:absolute; width:14px; height:14px; opacity:0; transform:scale(.6); transition:opacity 200ms var(--ease), transform 200ms var(--ease); }
70
+ .step:not(:disabled):hover { background:rgba(255,255,255,.03); color:var(--ink-muted); }
71
+ .step.open { color:var(--ink-faint); }
72
+ .step.open .dot { border-style:dashed; border-color:var(--ink-faint); }
73
+ .step.done { color:var(--ink-subtle); }
74
+ .step.done .dot { opacity:0; }
75
+ .step.done svg { opacity:1; transform:none; }
76
+ .step.active { background:rgba(255,255,255,.05); color:var(--ink); font-weight:500; }
77
+ .step.active .dot { background:var(--ink); border-color:var(--ink); box-shadow:0 0 10px rgba(255,255,255,.6); }
78
+ .step.active svg { opacity:0; }
79
+ .rail-foot { display:flex; flex-wrap:wrap; gap:6px 14px; padding-left:12px; font-size:12px; color:var(--ink-off); }
80
+ .rail-foot > span { flex-basis:100%; white-space:nowrap; }
81
+ .rail-foot button { font-size:12px; color:var(--ink-faint); transition:color 120ms; }
82
+ .rail-foot button:hover { color:var(--ink-muted); }
83
+
84
+ /* The step column sits in the middle of the space right of the rail,
85
+ with the sphere as a dim backdrop centered behind it. */
86
+ .main { position:relative; display:flex; justify-content:center; flex:1; min-width:0; min-height:100vh; overflow:hidden; padding:var(--top) clamp(32px,5vw,96px) 64px; }
87
+ .stage { position:relative; z-index:1; width:100%; max-width:600px; }
88
+ .moon-wrap { position:absolute; inset:0; pointer-events:none; }
89
+ #moon { position:absolute; left:50%; top:50vh; width:var(--moon); height:var(--moon); transform:translate(-50%,-50%); image-rendering:pixelated; opacity:.14; transition:opacity 900ms var(--ease); }
90
+ .main[data-page="2"] #moon { opacity:.17; }
91
+ .main[data-page="3"] #moon { opacity:.19; }
92
+ .main[data-page="4"] #moon { opacity:.26; }
93
+ .page { position:relative; display:none; flex-direction:column; gap:14px; width:600px; max-width:100%; }
94
+ .page.active { display:flex; animation:arrive 260ms var(--ease); }
95
+ @keyframes arrive { from { opacity:0; transform:translateY(8px); } to { opacity:1; transform:none; } }
96
+ h1,h2 { margin:0; font-size:44px; line-height:48px; font-weight:600; letter-spacing:-.035em; }
97
+ h1:focus,h2:focus { outline:none; }
98
+ .lede { color:var(--ink-subtle); font-size:16px; line-height:24px; padding-bottom:18px; }
99
+ /* Loose text sits on the sphere: a soft dark halo keeps it clean. */
100
+ h1,h2,.lede,.link,.status,.hint,.next > p,.fine,details.help,.suggestions,.summary { text-shadow:0 0 3px #000,0 0 10px #000,0 0 18px #000; }
101
+
102
+ .button { display:inline-flex; align-items:center; justify-content:center; gap:8px; height:40px; padding:0 20px; border-radius:10px; background:var(--ink); color:#000; font-size:14px; font-weight:500; transition:background 150ms var(--ease), transform 120ms var(--ease), opacity 150ms; }
103
+ .button:hover { background:#fff; }
104
+ .button:active { transform:scale(.98); }
105
+ .button:disabled { background:rgba(255,255,255,.08); color:var(--ink-faint); transform:none; }
106
+ .link { font-size:14px; color:var(--ink-subtle); transition:color 120ms; }
107
+ .link:hover { color:var(--ink); }
108
+ .link:disabled { opacity:.4; }
109
+ .row { display:flex; align-items:center; gap:24px; padding-top:6px; }
110
+ .status { font-size:13px; color:var(--ink-subtle); overflow-wrap:anywhere; }
111
+ .status:empty { display:none; }
112
+ .status.ok { color:var(--ink-muted); }
113
+ .status.error { color:var(--error); }
114
+
115
+ .tabs { display:flex; gap:4px; width:fit-content; padding:4px; border-radius:12px; background:var(--panel); border:1px solid rgba(255,255,255,.08); }
116
+ .tabs label { position:relative; }
117
+ .tabs input { position:absolute; inset:0; opacity:0; margin:0; cursor:pointer; }
118
+ .tabs span { display:flex; align-items:center; height:34px; padding:0 16px; border-radius:8px; font-size:14px; color:var(--ink-subtle); transition:background 150ms var(--ease), color 150ms var(--ease); }
119
+ .tabs input:checked + span { background:var(--raised); color:var(--ink); font-weight:500; box-shadow:inset 0 1px 0 rgba(255,255,255,.06); }
120
+ .tabs input:not(:checked):hover + span { color:var(--ink-muted); }
121
+ .tabs input:focus-visible + span { outline:2px solid rgba(255,255,255,.7); outline-offset:-2px; }
122
+ .tabs input:disabled { cursor:default; }
123
+ .hint { font-size:13px; color:var(--ink-subtle); }
124
+ .hint:empty { display:none; }
125
+
126
+ .drop { position:relative; display:flex; flex-direction:column; align-items:center; justify-content:center; gap:16px; height:240px; padding:24px; border-radius:18px; border:1.5px dashed rgba(255,255,255,.18); background:rgba(10,11,12,.94); text-align:center; cursor:pointer; transition:border-color 200ms var(--ease), background 200ms var(--ease); }
127
+ .drop:hover,.drop:focus-within { border-color:rgba(255,255,255,.32); }
128
+ .drop.drag { border-color:var(--ink); background:#141517; }
129
+ .drop.busy { cursor:default; border-style:solid; border-color:var(--line-mid); }
130
+ .drop-icon { display:grid; place-items:center; width:52px; height:52px; border-radius:14px; background:var(--tile); box-shadow:inset 0 1px 0 rgba(255,255,255,.08); transition:transform 250ms var(--ease); }
131
+ .drop.drag .drop-icon { transform:translateY(-4px); }
132
+ .drop-icon svg { width:22px; height:22px; }
133
+ .drop strong { display:block; font-size:17px; font-weight:500; overflow-wrap:anywhere; }
134
+ .drop small { display:block; margin-top:4px; font-size:14px; color:var(--ink-subtle); }
135
+ .drop input[type=file] { position:absolute; inset:0; width:100%; height:100%; opacity:0; cursor:pointer; }
136
+ .drop.busy input[type=file] { cursor:default; }
137
+ .drop .button { pointer-events:none; }
138
+ .bar { width:240px; height:2px; border-radius:1px; background:rgba(255,255,255,.1); overflow:hidden; }
139
+ .bar i { display:block; height:100%; width:0; background:var(--ink); transition:width 150ms linear; }
140
+ details.help summary { list-style:none; cursor:pointer; font-size:14px; color:var(--ink-faint); transition:color 120ms; }
141
+ details.help summary::-webkit-details-marker { display:none; }
142
+ details.help summary:hover { color:var(--ink-muted); }
143
+ details.help p { margin-top:10px; font-size:14px; line-height:22px; color:var(--ink-subtle); max-width:520px; }
144
+ .help-row { display:flex; align-items:baseline; gap:24px; padding-top:6px; }
145
+
146
+ .field { display:flex; align-items:center; gap:10px; height:60px; padding:0 8px 0 18px; border-radius:16px; background:var(--field); border:1px solid rgba(255,255,255,.12); box-shadow:inset 0 1px 0 rgba(255,255,255,.06), 0 30px 80px rgba(0,0,0,.6); transition:border-color 150ms; }
147
+ .field:focus-within { border-color:rgba(255,255,255,.3); }
148
+ .field > svg { width:18px; height:18px; flex-shrink:0; color:var(--ink-faint); }
149
+ .field input { flex:1; min-width:0; height:100%; background:none; border:0; outline:none; font-size:15px; }
150
+ .field input::placeholder { color:var(--ink-faint); }
151
+ .field .inner { display:inline-flex; align-items:center; gap:6px; height:44px; padding:0 16px; border-radius:10px; background:var(--raised); font-size:14px; font-weight:500; flex-shrink:0; transition:background 150ms; }
152
+ .field .inner:hover { background:#2a2b2e; }
153
+ .field .inner svg { width:14px; height:14px; color:var(--ink-muted); }
154
+ .ask q { flex:1; font-size:15px; quotes:none; overflow-wrap:anywhere; }
155
+ .suggestions { display:flex; flex-wrap:wrap; align-items:center; gap:6px; font-size:13px; color:var(--ink-faint); }
156
+ .suggestions:empty { display:none; }
157
+ .suggestions button { max-width:100%; padding:5px 12px; border-radius:999px; background:var(--field); border:1px solid var(--line-mid); color:var(--ink-muted); font-size:13px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; transition:border-color 150ms, color 150ms; }
158
+ .suggestions button:hover { border-color:var(--line-strong); color:var(--ink); }
159
+
160
+ .panel { list-style:none; margin:0; padding:0; border-radius:16px; background:var(--panel); border:1px solid var(--line-mid); overflow:hidden; }
161
+ .panel:empty { display:none; }
162
+ .panel > * + * { border-top:1px solid var(--line); }
163
+ .result { padding:16px 18px; animation:arrive 260ms var(--ease) both; }
164
+ .result strong { display:block; font-size:15px; font-weight:500; overflow-wrap:anywhere; }
165
+ .result p { margin-top:4px; font-size:14px; line-height:21px; color:var(--ink-subtle); overflow-wrap:anywhere; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden; }
166
+ .result small { display:block; margin-top:6px; font-size:12px; color:var(--ink-faint); font-variant-numeric:tabular-nums; }
167
+ .result details { margin-top:6px; font-size:13px; }
168
+ .result details summary { cursor:pointer; color:var(--ink-subtle); }
169
+ .result details summary:hover { color:var(--ink); }
170
+ .result details p { display:block; -webkit-line-clamp:unset; max-height:260px; overflow:auto; white-space:pre-line; }
171
+
172
+ .tool { display:flex; align-items:center; gap:14px; height:56px; padding:0 18px; transition:opacity 250ms var(--ease); }
173
+ .tool-logo { display:grid; place-items:center; width:30px; height:30px; border-radius:8px; background:var(--tile); flex-shrink:0; color:var(--ink); }
174
+ .tool-logo svg { width:16px; height:16px; fill:currentColor; }
175
+ .tool-name { flex:1; font-size:15px; font-weight:500; }
176
+ .tool-state { display:flex; align-items:center; justify-content:flex-end; gap:7px; width:140px; flex-shrink:0; font-size:13px; color:var(--ink-faint); }
177
+ .tool.connected .tool-state { color:var(--ink-muted); }
178
+ .tool.connected .tool-state:before { content:""; width:6px; height:6px; border-radius:50%; background:var(--ink); animation:pop 300ms var(--ease); }
179
+ @keyframes pop { from { transform:scale(0); } to { transform:none; } }
180
+ .tool.missing { color:var(--ink-off); }
181
+ .tool.missing .tool-logo { background:#111213; color:var(--ink-off); }
182
+ .tool.missing .tool-state { color:var(--ink-off); }
183
+ .tool.failed .tool-state { color:var(--error); }
184
+
185
+ .next { display:flex; flex-direction:column; gap:12px; padding-top:14px; }
186
+ .next > p { font-size:14px; color:var(--ink-subtle); }
187
+ .summary { display:flex; gap:48px; padding-bottom:18px; }
188
+ #try { padding-top:0; padding-bottom:10px; }
189
+ .summary:empty { display:none; }
190
+ .summary strong { display:block; font-size:28px; line-height:34px; font-weight:600; letter-spacing:-.03em; font-variant-numeric:tabular-nums; }
191
+ .summary span { font-size:14px; color:var(--ink-subtle); }
192
+ .remaining { list-style:none; margin:0; padding:0; }
193
+ .remaining button { display:flex; align-items:center; justify-content:space-between; width:100%; height:56px; padding:0 18px; font-size:15px; font-weight:500; text-align:left; transition:background 150ms; }
194
+ .remaining button:hover { background:rgba(255,255,255,.03); }
195
+ .remaining button:after { content:"→"; color:var(--ink-faint); }
196
+ .fine { font-size:13px; color:var(--ink-faint); }
197
+
198
+ dialog { width:min(460px,calc(100% - 32px)); padding:24px; color:var(--ink); background:#141516; border:1px solid var(--line-mid); border-radius:14px; box-shadow:0 8px 40px rgba(0,0,0,.5); }
199
+ dialog::backdrop { background:rgba(0,0,0,.6); }
200
+ dialog h2 { font-size:17px; line-height:24px; letter-spacing:-.01em; margin-bottom:12px; }
201
+ dialog p { margin-bottom:10px; font-size:14px; color:var(--ink-subtle); }
202
+ dialog code { font-size:12px; color:var(--ink-muted); }
203
+ .dialog-actions { display:flex; justify-content:flex-end; gap:8px; margin-top:20px; }
204
+ .button.secondary { background:transparent; color:var(--ink); border:1px solid var(--line-strong); }
205
+ .button.secondary:hover { background:var(--raised); }
206
+ .button.danger { background:#f2a0a0; color:#2a1010; }
207
+ #remove-status { position:fixed; left:50%; bottom:24px; transform:translateX(-50%); max-width:calc(100% - 32px); padding:10px 16px; border-radius:10px; background:#141516; border:1px solid var(--line-mid); z-index:5; }
208
+
209
+ @media (max-width:960px) {
210
+ .app { flex-direction:column; }
211
+ .rail { position:static; width:auto; height:auto; padding:20px 16px 12px; border-right:0; border-bottom:1px solid rgba(255,255,255,.08); }
212
+ .brand { padding-left:0; }
213
+ .steps { flex-direction:row; flex-wrap:wrap; padding-top:16px; }
214
+ .step { height:34px; font-size:13px; }
215
+ .rail-foot { display:none; }
216
+ .main { padding:40px 16px 48px; min-height:0; }
217
+ .moon-wrap { display:none; }
218
+ h1,h2 { font-size:32px; line-height:36px; }
219
+ .drop { height:220px; }
220
+ }
221
+ @media (prefers-reduced-motion:reduce) { *,*:before,*:after { animation:none !important; transition:none !important; } }
222
+ </style>
223
+ </head>
224
+ <body>
225
+ <div class="app">
226
+ <aside class="rail">
227
+ <div class="brand">${RIFT_MARK}Onadit</div>
228
+ <nav class="steps" aria-label="Setup steps">
229
+ ${step(1, "Import your chats")}
230
+ ${step(2, "Find a memory")}
231
+ ${step(3, "Connect your tools")}
232
+ </nav>
233
+ <div class="rail-foot"><span>Onadit ${version}</span><button id="privacy">Privacy</button><button id="remove">Remove…</button></div>
234
+ </aside>
235
+ <main class="main" id="main" data-page="1">
236
+ <div class="stage">
237
+ <div class="flow">
238
+
239
+ <section class="page active" data-page="1" aria-labelledby="import-heading">
240
+ <h1 id="import-heading" tabindex="-1">Import your chats</h1>
241
+ <p class="lede">Onadit reads your export on this Mac. Nothing leaves it.</p>
242
+ <div class="tabs" role="radiogroup" aria-label="Export from">
243
+ <label><input type="radio" name="source" value="chatgpt_web" data-name="ChatGPT" checked><span>ChatGPT</span></label>
244
+ <label><input type="radio" name="source" value="claude_web" data-name="Claude"><span>Claude</span></label>
245
+ <label><input type="radio" name="source" value="gemini_web" data-name="Gemini"><span>Gemini</span></label>
246
+ <label><input type="radio" name="source" value="grok_web" data-name="Grok"><span>Grok</span></label>
247
+ </div>
248
+ <p id="source-hint" class="hint" role="status"></p>
249
+ <label class="drop" id="drop" for="archive">
250
+ <span class="drop-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M12 15V3"/><path d="m7 8 5-5 5 5"/><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/></svg></span>
251
+ <span><strong id="file-title">Drop your ChatGPT export here</strong><small id="file-detail">The .zip from your data export email</small></span>
252
+ <span class="button" id="choose">Choose file</span>
253
+ <span class="bar hidden" id="progress" role="progressbar" aria-label="Transfer to this Mac" aria-valuemin="0" aria-valuemax="100" aria-valuenow="0"><i></i></span>
254
+ <input id="archive" type="file" aria-label="Choose a conversation export" accept=".zip,.json,application/zip,application/json">
255
+ </label>
256
+ <div id="import-status" class="status" role="status"></div>
257
+ <div class="help-row">
258
+ <button class="link" id="skip-import">Skip</button>
259
+ <details class="help"><summary>No export yet?</summary><p>Request one in your AI app’s data or privacy settings. It usually arrives by email as a .zip. Skip for now and reopen this setup from the Onadit installer when it lands.</p></details>
260
+ </div>
261
+ </section>
262
+
263
+ <section class="page" data-page="2" aria-labelledby="recall-heading">
264
+ <h2 id="recall-heading" tabindex="-1">Find a memory</h2>
265
+ <p class="lede" id="archive-summary">Search a project, a person or a phrase from your chats.</p>
266
+ <div class="field">
267
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><circle cx="11" cy="11" r="7"/><path d="m20 20-3.5-3.5"/></svg>
268
+ <input id="query" type="text" aria-label="Search your conversations" placeholder="Search your conversations" autocomplete="off">
269
+ <button class="inner" id="search">Search</button>
270
+ </div>
271
+ <div id="suggestions" class="suggestions" aria-label="Topics from your archive"></div>
272
+ <div id="search-status" class="status" role="status"></div>
273
+ <div class="panel" id="results"></div>
274
+ <div class="row"><button class="button" id="recall-next" disabled>Continue</button><button class="link" id="skip-search">Skip</button></div>
275
+ </section>
276
+
277
+ <section class="page" data-page="3" aria-labelledby="connect-heading">
278
+ <h2 id="connect-heading" tabindex="-1">Connect your tools</h2>
279
+ <p class="lede" id="connect-lede">One click adds Onadit to every supported tool on this Mac.</p>
280
+ <ul class="panel" id="tools">${toolRows}</ul>
281
+ <div id="connect-status" class="status" role="status"></div>
282
+ <div class="row" id="connect-actions"><button class="button" id="connect">Connect</button><button class="link" id="skip-connect">Skip</button></div>
283
+ <div class="next hidden" id="next">
284
+ <p>Reopen <span id="reopen-names">your tools</span>, then ask:</p>
285
+ <div class="field ask"><q id="ask-text">What did I decide last time? Check my past chats.</q><button class="inner" id="copy"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="12" height="12" rx="2"/><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/></svg><span>Copy</span></button></div>
286
+ <p class="hidden" id="hooks-offer">Optional: <span id="hooks-names"></span> can get a short Onadit note about the project when a session starts, and ask Onadit before a task. The note goes to the tool’s AI provider with the rest of the session. To turn it on, run <code id="hooks-command"></code> in a terminal.</p>
287
+ <div class="row"><button class="button" id="finish">Finish</button></div>
288
+ </div>
289
+ </section>
290
+
291
+ <section class="page" data-page="4" aria-labelledby="done-heading">
292
+ <h2 id="done-heading" tabindex="-1">You’re all set</h2>
293
+ <p class="lede" id="done-lede">Onadit runs in the background. Your tools can now look through your past chats.</p>
294
+ <div class="summary" id="summary"></div>
295
+ <div class="next hidden" id="try">
296
+ <p>Try it: reopen <span id="try-names">your tools</span> and ask</p>
297
+ <div class="field ask"><q id="try-text"></q><button class="inner" id="copy-try"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="12" height="12" rx="2"/><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/></svg><span>Copy</span></button></div>
298
+ </div>
299
+ <ul class="panel remaining" id="remaining" aria-label="Steps left to finish"></ul>
300
+ <p class="fine">You can close this tab. Onadit keeps running.</p>
301
+ </section>
302
+ </div>
303
+ </div>
304
+ <div class="moon-wrap"><canvas id="moon" width="460" height="460" aria-hidden="true"></canvas></div>
305
+ </main>
306
+ </div>
307
+ <div id="remove-status" class="status hidden" role="status"></div>
308
+ <dialog id="privacy-dialog" aria-labelledby="privacy-title"><h2 id="privacy-title">On your Mac. Under your control.</h2><p>Onadit stores the conversations you add and their search index in <code>~/Library/Application Support/Rift/</code>. This setup does not read your other chat folders.</p><p>Fresh installs use keyword search, with no AI calls, account, or telemetry. Optional cloud search sends indexed text and queries to Voyage. Optional AI enrichment or capture uses the worker you enable, such as Codex or Claude Code. Existing settings are preserved when you reinstall.</p><p>When your AI tool calls Onadit, returned excerpts enter that tool’s conversation. Onadit also checks the npm registry for updates, without sending content or an installation ID.</p><p>Remove Onadit deletes its local archive, settings, credentials, background service and tool connections. Your original exports and other tools are preserved. A removal report stays in <code>~/Library/Logs/Rift/</code>.</p><form method="dialog" class="dialog-actions"><button class="button secondary">Close</button></form></dialog>
309
+ <dialog id="remove-dialog" aria-labelledby="remove-title"><h2 id="remove-title">Remove Onadit from this Mac?</h2><p>This deletes Onadit’s archive, settings, credentials and connections. Your original exports and other tools stay in place. This cannot be undone.</p><div class="dialog-actions"><form method="dialog"><button class="button secondary" autofocus>Keep Onadit</button></form><button class="button danger" id="confirm-remove">Remove Onadit</button></div></dialog>
310
+ <script>
311
+ (function () {
312
+ "use strict";
313
+ var setupToken = "${token}";
314
+ var current = 1;
315
+ var selectedFile = null;
316
+ var importing = false;
317
+ var searching = false;
318
+ var connecting = false;
319
+ var connectTried = false;
320
+ var importedCount = null;
321
+ var lastJobId = null;
322
+ try { lastJobId = sessionStorage.getItem("rift-setup-import"); } catch (_) {}
323
+ function rememberJob(id) { lastJobId = id; try { if (id) sessionStorage.setItem("rift-setup-import", id); else sessionStorage.removeItem("rift-setup-import"); } catch (_) {} }
324
+ // Skip moves on without finishing a step. The last page lists what is
325
+ // still open instead of claiming setup is done. Search only makes sense
326
+ // after an import, so it is never listed as a step left to do.
327
+ var completed = { 1: false, 2: false, 3: false };
328
+ var visited = { 1: true, 2: false, 3: false };
329
+ var stepNames = { 1: "Import your chats", 3: "Connect your tools" };
330
+ var $ = function (id) { return document.getElementById(id); };
331
+ function checked(name) { return document.querySelector('input[name="' + name + '"]:checked'); }
332
+ function authHeaders(extra) { return Object.assign({ "Authorization": "Rift-Setup " + setupToken }, extra || {}); }
333
+ function listNames(names) { return names.length > 1 ? names.slice(0, -1).join(", ") + " and " + names[names.length - 1] : names[0] || ""; }
334
+
335
+ function renderRail() {
336
+ document.querySelectorAll("[data-nav]").forEach(function (el) {
337
+ var n = Number(el.dataset.nav);
338
+ // Search needs an archive: without one it stays locked.
339
+ el.disabled = n === 2 ? !completed[1] : !visited[n] && !completed[n];
340
+ el.classList.toggle("active", n === current);
341
+ el.classList.toggle("done", completed[n] && n !== current);
342
+ el.classList.toggle("open", !completed[n] && visited[n] && n !== current && !el.disabled);
343
+ if (n === current) el.setAttribute("aria-current", "step"); else el.removeAttribute("aria-current");
344
+ });
345
+ }
346
+ function showPage(next) {
347
+ current = next;
348
+ if (next <= 3) visited[next] = true;
349
+ $("main").dataset.page = String(next);
350
+ document.querySelectorAll("section[data-page]").forEach(function (el) { el.classList.toggle("active", Number(el.dataset.page) === next); });
351
+ if (next === 4) renderDone();
352
+ renderRail();
353
+ document.querySelector('section[data-page="' + next + '"] h1, section[data-page="' + next + '"] h2').focus();
354
+ window.scrollTo({ top: 0, behavior: "instant" });
355
+ }
356
+ function renderDone() {
357
+ var open = [1, 3].filter(function (step) { return !completed[step]; });
358
+ $("done-heading").textContent = open.length ? "Almost there" : "You’re all set";
359
+ $("done-lede").textContent = open.length ? "Onadit is running on this Mac. Finish these whenever you’re ready." : "Onadit runs in the background. Your tools can now look through your past chats.";
360
+ var summary = $("summary");
361
+ summary.replaceChildren();
362
+ function stat(value, label) {
363
+ var box = document.createElement("div");
364
+ var strong = document.createElement("strong"); strong.textContent = value;
365
+ var span = document.createElement("span"); span.textContent = label;
366
+ box.append(strong, span); summary.append(box);
367
+ }
368
+ if (completed[1] && importedCount !== null) stat(importedCount.toLocaleString(), importedCount === 1 ? "conversation imported" : "conversations imported");
369
+ var connected = connectedTools().length;
370
+ if (connected) stat(String(connected), connected === 1 ? "tool connected" : "tools connected");
371
+ // The question only helps once a tool can actually reach Onadit.
372
+ $("try").classList.toggle("hidden", !connected || open.length > 0);
373
+ $("try-names").textContent = connectedTools().map(function (id) { return toolNames[id]; }).join(", ").replace(/, ([^,]*)$/, " or $1");
374
+ $("try-text").textContent = $("ask-text").textContent;
375
+ var list = $("remaining");
376
+ list.replaceChildren();
377
+ open.forEach(function (step) {
378
+ var item = document.createElement("li");
379
+ var button = document.createElement("button");
380
+ button.textContent = step === 3 && failedTools().length ? "Finish connecting your tools" : stepNames[step];
381
+ button.addEventListener("click", function () { showPage(step); });
382
+ item.append(button);
383
+ list.append(item);
384
+ });
385
+ }
386
+ document.querySelectorAll("[data-nav]").forEach(function (el) { el.addEventListener("click", function () { showPage(Number(el.dataset.nav)); }); });
387
+ $("skip-import").addEventListener("click", function () { showPage(completed[1] ? 2 : 3); });
388
+ $("skip-search").addEventListener("click", function () { showPage(3); });
389
+ $("recall-next").addEventListener("click", function () { showPage(3); });
390
+ $("skip-connect").addEventListener("click", function () { showPage(4); });
391
+ $("finish").addEventListener("click", function () { showPage(4); });
392
+ $("privacy").addEventListener("click", function () { $("privacy-dialog").showModal(); });
393
+ $("remove").addEventListener("click", function () { $("remove-dialog").showModal(); });
394
+
395
+ // Per-tool result of the last attempt: connected, failed or not_found.
396
+ // A failed tool keeps step 3 open, so it can be retried here and shows
397
+ // up as unfinished on the last page. Successful tools are never rewritten.
398
+ var toolStatus = {}, toolReasons = {};
399
+ var toolNames = { "claude-desktop": "Claude", "claude-code": "Claude Code", codex: "Codex", cursor: "Cursor" };
400
+ function toolsWith(state) { return Object.keys(toolNames).filter(function (id) { return toolStatus[id] === state; }); }
401
+ function failedTools() { return toolsWith("failed"); }
402
+ function connectedTools() { return toolsWith("connected"); }
403
+ function setTool(client, state, reason, message) {
404
+ toolStatus[client] = state;
405
+ if (state === "failed") toolReasons[client] = reason; else delete toolReasons[client];
406
+ var row = document.querySelector('[data-tool="' + client + '"]');
407
+ if (!row) return;
408
+ row.classList.remove("connected", "failed", "missing");
409
+ row.classList.add(state === "not_found" ? "missing" : state);
410
+ var label = row.querySelector(".tool-state");
411
+ label.textContent = state === "connected" ? "Connected" : state === "failed" ? "Couldn’t connect" : "Not installed";
412
+ label.title = state === "failed" ? message || "" : "";
413
+ }
414
+ function renderConnect() {
415
+ var connected = connectedTools();
416
+ var failed = failedTools();
417
+ var tried = Object.keys(toolStatus).length > 0;
418
+ completed[3] = connected.length > 0 && failed.length === 0;
419
+ $("connect").textContent = connecting ? "Connecting…" : failed.length ? "Retry" : connectTried ? "Check again" : "Connect";
420
+ $("connect").disabled = connecting;
421
+ $("skip-connect").disabled = connecting;
422
+ $("connect-actions").classList.toggle("hidden", completed[3]);
423
+ $("next").classList.toggle("hidden", connected.length === 0);
424
+ $("finish").parentElement.classList.toggle("hidden", !completed[3]);
425
+ $("reopen-names").textContent = listNames(connected.map(function (id) { return toolNames[id]; })) || "your tools";
426
+ // Connecting never installs the session hooks; the page names the command.
427
+ var hookTools = connected.filter(function (id) { return id === "claude-code" || id === "codex"; });
428
+ $("hooks-offer").classList.toggle("hidden", hookTools.length === 0);
429
+ $("hooks-names").textContent = listNames(hookTools.map(function (id) { return toolNames[id]; }));
430
+ $("hooks-command").textContent = hookTools.map(function (id) { return "onadit hooks install --client " + id; }).join(" && ");
431
+ $("connect-lede").textContent = completed[3] ? "Onadit connected to every supported tool on this Mac." : "One click adds Onadit to every supported tool on this Mac.";
432
+ var status = $("connect-status");
433
+ if (failed.length) {
434
+ var names = failed.map(function (id) { return toolNames[id]; });
435
+ var unreadable = failed.every(function (id) { return toolReasons[id] === "unreadable_settings"; });
436
+ status.className = "status error";
437
+ status.textContent = unreadable
438
+ ? "Onadit couldn’t read the settings for " + listNames(names) + " and left " + (names.length > 1 ? "them" : "it") + " unchanged. Fix or move the " + (names.length > 1 ? "files" : "file") + ", then retry."
439
+ : "Onadit couldn’t update the settings for " + listNames(names) + ". Check the file isn’t locked or read-only, then retry.";
440
+ } else if (tried && !connected.length) {
441
+ status.className = "status error";
442
+ status.textContent = "No supported tool found on this Mac. Install one, then check again.";
443
+ } else {
444
+ status.className = "status";
445
+ status.textContent = "";
446
+ }
447
+ renderRail();
448
+ }
449
+ function connectError(response, body) {
450
+ return new Error(response.status === 401 ? "This setup link expired. Reopen the Onadit installer to connect your tools." : (body && body.message) || "Onadit could not connect your tools.");
451
+ }
452
+ function connectFailed(error) {
453
+ $("connect-status").className = "status error";
454
+ $("connect-status").textContent = error instanceof Error ? error.message : "Onadit could not connect your tools.";
455
+ }
456
+ async function connectAll() {
457
+ connecting = true; connectTried = true; renderConnect();
458
+ try {
459
+ var response = await fetch("/setup/connect-all", { method: "POST", headers: authHeaders({ "Content-Type": "application/json" }), body: "{}" });
460
+ var body = await response.json();
461
+ if (!response.ok) throw connectError(response, body);
462
+ body.clients.forEach(function (result) { setTool(result.client, result.status, result.reason, result.message); });
463
+ connecting = false; renderConnect();
464
+ } catch (error) { connecting = false; renderConnect(); connectFailed(error); }
465
+ }
466
+ async function retryFailed() {
467
+ connecting = true; renderConnect();
468
+ try {
469
+ for (var client of failedTools()) {
470
+ var response = await fetch("/setup/connect-client", { method: "POST", headers: authHeaders({ "Content-Type": "application/json" }), body: JSON.stringify({ client: client }) });
471
+ var body = await response.json().catch(function () { return {}; });
472
+ if (response.status === 401) throw connectError(response, body);
473
+ if (response.ok) setTool(client, "connected"); else setTool(client, "failed", body.reason, body.message);
474
+ }
475
+ connecting = false; renderConnect();
476
+ } catch (error) { connecting = false; renderConnect(); connectFailed(error); }
477
+ }
478
+ $("connect").addEventListener("click", function () { if (failedTools().length) retryFailed(); else connectAll(); });
479
+
480
+ var archive = $("archive"), drop = $("drop");
481
+ function sourceName() { return checked("source").dataset.name; }
482
+ function resetDrop() {
483
+ drop.classList.remove("busy");
484
+ $("progress").classList.add("hidden");
485
+ $("choose").classList.remove("hidden");
486
+ $("file-title").textContent = "Drop your " + sourceName() + " export here";
487
+ $("file-detail").textContent = checked("source").value === "gemini_web" ? "A converted conversation .json file" : "The .zip from your data export email";
488
+ }
489
+ document.querySelectorAll('input[name="source"]').forEach(function (input) {
490
+ input.addEventListener("change", function () {
491
+ var gemini = checked("source").value === "gemini_web";
492
+ $("source-hint").textContent = gemini ? "Gemini needs a converted conversation JSON file. Raw Google Takeout archives are not supported yet." : "";
493
+ archive.accept = gemini ? ".json,application/json" : ".zip,.json,application/zip,application/json";
494
+ $("import-status").textContent = "";
495
+ resetDrop();
496
+ });
497
+ });
498
+ // Choosing or dropping a file starts the import: there is no separate
499
+ // Import button to find.
500
+ function chooseFile(file) {
501
+ if (importing || !file) return;
502
+ var status = $("import-status");
503
+ status.className = "status error";
504
+ status.textContent = "";
505
+ if (!/\\.(zip|json)$/i.test(file.name)) { status.textContent = "Choose the downloaded .zip or .json export. Other file types cannot be read here."; return; }
506
+ if (checked("source").value === "gemini_web" && /\\.zip$/i.test(file.name)) { status.textContent = "Raw Gemini Takeout archives are not supported yet. Choose a converted conversation JSON file."; return; }
507
+ selectedFile = file;
508
+ startImport();
509
+ }
510
+ archive.addEventListener("change", function () { chooseFile(archive.files && archive.files[0]); archive.value = ""; });
511
+ ["dragenter", "dragover"].forEach(function (name) { drop.addEventListener(name, function (event) { event.preventDefault(); if (!importing) drop.classList.add("drag"); }); });
512
+ ["dragleave", "drop"].forEach(function (name) { drop.addEventListener(name, function (event) { event.preventDefault(); drop.classList.remove("drag"); }); });
513
+ drop.addEventListener("drop", function (event) { chooseFile(event.dataTransfer && event.dataTransfer.files[0]); });
514
+
515
+ function pollJob(id) {
516
+ return new Promise(function (resolve, reject) {
517
+ // A dropped fetch or one 5xx used to abort the whole import and tell
518
+ // the user it failed while it was still running on their Mac. Blips
519
+ // are retried with a short backoff; only a terminal job state, an
520
+ // expired session, or a sustained outage stops the poll.
521
+ var blips = 0;
522
+ var MAX_BLIPS = 8;
523
+ async function poll() {
524
+ try {
525
+ var response = await fetch("/jobs/" + encodeURIComponent(id), { headers: authHeaders() });
526
+ if (response.status === 401 || response.status === 410) {
527
+ var expired = new Error("This setup link expired. Reopen the Onadit installer to get a new link. Your import is kept.");
528
+ expired.terminal = true;
529
+ throw expired;
530
+ }
531
+ if (response.status >= 500) throw new Error("transient");
532
+ var job = await response.json();
533
+ if (!response.ok) throw new Error("Onadit could not read the import status.");
534
+ blips = 0;
535
+ if (job.status === "completed") return resolve(job);
536
+ if (job.status === "failed" || job.status === "cancelled" || job.status === "interrupted") { rememberJob(null); return reject(new Error((job.error || "The import stopped before it finished.") + " Choose your export again to retry.")); }
537
+ var phase = job.progress;
538
+ $("file-detail").textContent = job.status === "queued" ? "Export received. Waiting for the current job to finish." : phase ? (phase.phase === "reading" ? "Reading " : "Indexing ") + phase.completed.toLocaleString() + " of " + phase.total.toLocaleString() + " conversations…" : "Reading conversations on this Mac…";
539
+ setTimeout(poll, 700);
540
+ } catch (error) {
541
+ if (error && error.terminal) return reject(error);
542
+ if (response && response.status === 404) { rememberJob(null); return reject(new Error("This import is no longer in Onadit’s job history. Choose your export again.")); }
543
+ blips += 1;
544
+ if (blips > MAX_BLIPS) {
545
+ return reject(new Error("Lost contact with Onadit while importing. The import may still be running. Reload this page to reconnect."));
546
+ }
547
+ $("file-detail").textContent = "Checking import status · reconnecting…";
548
+ setTimeout(poll, 700 * Math.min(blips, 4));
549
+ }
550
+ }
551
+ poll();
552
+ });
553
+ }
554
+
555
+ function setImporting(value) {
556
+ importing = value;
557
+ archive.disabled = value;
558
+ $("skip-import").disabled = value;
559
+ drop.classList.toggle("busy", value);
560
+ $("choose").classList.toggle("hidden", value);
561
+ document.querySelectorAll('input[name="source"]').forEach(function (input) { input.disabled = value; });
562
+ }
563
+ async function followImport(id, duplicate) {
564
+ var status = $("import-status");
565
+ status.className = "status";
566
+ status.textContent = "";
567
+ setImporting(true);
568
+ $("progress").classList.add("hidden");
569
+ $("file-title").textContent = selectedFile ? "Importing " + selectedFile.name : "Importing your export";
570
+ $("file-detail").textContent = "Reading conversations on this Mac…";
571
+ try {
572
+ var job = await pollJob(id);
573
+ rememberJob(null);
574
+ completed[1] = true;
575
+ var summary = job.import_summary;
576
+ importedCount = summary ? summary.conversations : null;
577
+ var label = summary ? summary.conversations.toLocaleString() + " conversations imported" : "Export imported";
578
+ if (summary && summary.first_date && summary.last_date) {
579
+ var first = summary.first_date.slice(0, 4), last = summary.last_date.slice(0, 4);
580
+ label += " · " + first + (first !== last ? "–" + last : "");
581
+ }
582
+ $("archive-summary").textContent = (duplicate ? "Already imported. " : "") + label + ". Search a project, a person or a phrase.";
583
+ var suggestions = $("suggestions");
584
+ suggestions.replaceChildren();
585
+ if (summary && summary.titles && summary.titles.length) {
586
+ suggestions.append("Try");
587
+ summary.titles.slice(0, 4).forEach(function (title) {
588
+ var suggestion = document.createElement("button");
589
+ suggestion.textContent = title;
590
+ suggestion.title = title;
591
+ suggestion.addEventListener("click", function () { $("query").value = title; runSearch(); });
592
+ suggestions.append(suggestion);
593
+ });
594
+ }
595
+ setImporting(!!lastJobId);
596
+ $("file-title").textContent = label;
597
+ $("file-detail").textContent = "Drop another export to add it";
598
+ $("choose").classList.remove("hidden");
599
+ showPage(2);
600
+ $("query").focus();
601
+ } catch (error) {
602
+ setImporting(!!lastJobId);
603
+ resetDrop();
604
+ status.className = "status error";
605
+ status.textContent = error instanceof Error ? error.message : "Cannot read import status. Reload this page to reconnect.";
606
+ }
607
+ }
608
+ function startImport() {
609
+ if (!selectedFile || importing) return;
610
+ var status = $("import-status");
611
+ var progress = $("progress");
612
+ var bar = progress.querySelector("i");
613
+ var form = new FormData();
614
+ form.append("source", checked("source").value);
615
+ form.append("file", selectedFile, selectedFile.name);
616
+ setImporting(true);
617
+ progress.classList.remove("hidden");
618
+ bar.style.width = "0%";
619
+ progress.setAttribute("aria-valuenow", "0");
620
+ status.className = "status";
621
+ status.textContent = "";
622
+ $("file-title").textContent = "Importing " + selectedFile.name;
623
+ $("file-detail").textContent = "Transferring the export to Onadit on this Mac…";
624
+ var xhr = new XMLHttpRequest();
625
+ xhr.open("POST", "/ingest");
626
+ xhr.setRequestHeader("Authorization", "Rift-Setup " + setupToken);
627
+ xhr.upload.onprogress = function (event) { if (event.lengthComputable) { var percent = Math.round(event.loaded / event.total * 100); bar.style.width = percent + "%"; progress.setAttribute("aria-valuenow", String(percent)); } };
628
+ xhr.onerror = function () { setImporting(false); resetDrop(); status.className = "status error"; status.textContent = "The local connection stopped. Choose your export again to retry. Onadit checks for duplicates."; };
629
+ xhr.onload = async function () {
630
+ try {
631
+ var body = JSON.parse(xhr.responseText || "{}");
632
+ if (xhr.status < 200 || xhr.status >= 300) throw new Error(body.message || "Onadit could not read this export. Check that the selected app matches the file.");
633
+ if (!body.job_id) throw new Error("Onadit did not return an import reference. Try importing again.");
634
+ rememberJob(body.job_id);
635
+ await followImport(body.job_id, body.duplicate);
636
+ } catch (error) {
637
+ setImporting(false);
638
+ resetDrop();
639
+ status.className = "status error";
640
+ status.textContent = error instanceof Error ? error.message : "The import did not finish.";
641
+ }
642
+ };
643
+ xhr.send(form);
644
+ }
645
+
646
+ async function runSearch() {
647
+ var query = $("query").value.trim();
648
+ var status = $("search-status");
649
+ var results = $("results");
650
+ if (!query || searching) return;
651
+ searching = true;
652
+ status.className = "status";
653
+ status.textContent = "Searching…";
654
+ results.replaceChildren();
655
+ try {
656
+ var response = await fetch("/search", { method: "POST", headers: authHeaders({ "Content-Type": "application/json" }), body: JSON.stringify({ query: query, top_k: 3, detail: "summary" }) });
657
+ var body = await response.json();
658
+ if (!response.ok) throw new Error(body.message || (response.status === 401 ? "This setup link expired. Reopen the Onadit installer to search again." : "Onadit could not search. Try again when the local connection returns."));
659
+ var hits = Array.isArray(body.results) ? body.results : [];
660
+ if (!hits.length) { status.className = "status error"; status.textContent = "No match. Try a distinctive word, a project name or a person."; return; }
661
+ status.textContent = "";
662
+ hits.forEach(function (hit, index) {
663
+ var article = document.createElement("article");
664
+ article.className = "result";
665
+ article.style.animationDelay = (index * 50) + "ms";
666
+ var title = document.createElement("strong"); title.textContent = String(hit.title || "Untitled conversation");
667
+ var snippet = document.createElement("p"); snippet.textContent = String(hit.snippet || hit.summary || "Match found in your archive.");
668
+ var meta = document.createElement("small"); meta.textContent = "Past conversation · " + String(hit.source || "") + " · " + String(hit.timestamp || "").slice(0, 10);
669
+ article.append(title, snippet, meta);
670
+ if (hit.expand && hit.expand.params) {
671
+ var full = document.createElement("details");
672
+ var label = document.createElement("summary"); label.textContent = "Read the conversation";
673
+ var content = document.createElement("p");
674
+ full.append(label, content);
675
+ var loaded = false, loading = false;
676
+ full.addEventListener("toggle", async function () {
677
+ if (!full.open || loaded || loading) return;
678
+ loading = true; content.textContent = "Opening…";
679
+ try {
680
+ var response = await fetch("/search", { method: "POST", headers: authHeaders({ "Content-Type": "application/json" }), body: JSON.stringify(Object.assign({}, hit.expand.params, { detail: "full" })) });
681
+ var body = await response.json();
682
+ if (!response.ok || !body.results || !body.results[0]) throw new Error("The conversation could not be opened. Close this section and reopen it to retry.");
683
+ content.textContent = body.results[0].content || "No text is available for this conversation.";
684
+ loaded = true;
685
+ } catch (error) { content.textContent = error instanceof Error ? error.message : "Could not open this conversation."; }
686
+ finally { loading = false; }
687
+ });
688
+ article.append(full);
689
+ }
690
+ results.append(article);
691
+ });
692
+ completed[2] = true;
693
+ $("recall-next").disabled = false;
694
+ $("ask-text").textContent = "What did I figure out about “" + query + "”? Check my past chats.";
695
+ renderRail();
696
+ } catch (error) {
697
+ status.className = "status error";
698
+ status.textContent = error instanceof Error ? error.message : "Onadit could not run the search.";
699
+ } finally { searching = false; }
700
+ }
701
+ $("search").addEventListener("click", runSearch);
702
+ $("query").addEventListener("keydown", function (event) { if (event.key === "Enter") runSearch(); });
703
+ function copyQuestion(button, text, status) {
704
+ button.addEventListener("click", async function () {
705
+ var label = button.querySelector("span");
706
+ try { await navigator.clipboard.writeText(text().trim()); label.textContent = "Copied"; setTimeout(function () { label.textContent = "Copy"; }, 1600); }
707
+ catch (_) { if (status) { status.className = "status"; status.textContent = "Clipboard access is blocked. Select and copy the question above."; } }
708
+ });
709
+ }
710
+ copyQuestion($("copy"), function () { return $("ask-text").textContent; }, $("connect-status"));
711
+ copyQuestion($("copy-try"), function () { return $("try-text").textContent; }, null);
712
+ $("confirm-remove").addEventListener("click", async function () {
713
+ $("remove-dialog").close();
714
+ this.disabled = true;
715
+ var status = $("remove-status");
716
+ status.classList.remove("hidden");
717
+ status.textContent = "Removing Onadit and its local archive…";
718
+ try {
719
+ var response = await fetch("/setup/remove", { method: "POST", headers: authHeaders({ "Content-Type": "application/json" }), body: "{}" });
720
+ if (!response.ok) throw new Error("Onadit could not start removal.");
721
+ status.className = "status ok";
722
+ status.textContent = "Removing Onadit…";
723
+ var button = this;
724
+ $("remove").disabled = true;
725
+ // Watch the removal instead of assuming it worked. A finished uninstall
726
+ // takes the daemon with it, so a failed poll IS the success signal; an
727
+ // answered poll saying "failed" means parts of Onadit are still here and
728
+ // the archive may not be deleted, which the user must be told.
729
+ var attempts = 0;
730
+ var watch = window.setInterval(async function () {
731
+ attempts += 1;
732
+ try {
733
+ var poll = await fetch("/setup/remove/status", { headers: authHeaders({}) });
734
+ var body = await poll.json();
735
+ if (body && body.state === "failed") {
736
+ window.clearInterval(watch);
737
+ button.disabled = false;
738
+ $("remove").disabled = false;
739
+ status.className = "status error";
740
+ status.textContent = body.message || "Onadit could not be removed. Some of it may still be on this Mac.";
741
+ } else if (attempts > 40) {
742
+ window.clearInterval(watch);
743
+ status.textContent = "Still removing. If this does not finish, double-click the Onadit uninstaller.";
744
+ }
745
+ } catch (pollError) {
746
+ // The daemon is stopped FIRST and everything destructive — the
747
+ // archive, credentials, MCP entries, launchers — happens after,
748
+ // with nothing left alive to report on it. So a dead connection
749
+ // proves the daemon stopped, and nothing else. Claiming "removed"
750
+ // here would tell someone their archive was deleted when the step
751
+ // that deletes it may have failed.
752
+ window.clearInterval(watch);
753
+ status.className = "status";
754
+ status.textContent = "Onadit's daemon has stopped, so this page cannot follow the rest. Onadit will tell you on screen when it finishes, and writes a full log to ~/Library/Logs/Rift/.";
755
+ }
756
+ }, 1500);
757
+ } catch (error) {
758
+ this.disabled = false;
759
+ status.className = "status error";
760
+ status.textContent = error instanceof Error ? error.message : "Onadit could not start removal.";
761
+ }
762
+ });
763
+
764
+ // The memory sphere: a dithered, lit ball drawn at half resolution and
765
+ // scaled up with crisp pixels. Each dot has its own noise threshold that
766
+ // drifts slowly, so the surface shimmers without flickering. It stops
767
+ // when the tab is hidden and stays still under reduced motion.
768
+ (function moon() {
769
+ var canvas = $("moon");
770
+ var ctx = canvas.getContext && canvas.getContext("2d");
771
+ if (!ctx) return;
772
+ var size = canvas.width, radius = size * 0.43, cx = size / 2, cy = size / 2;
773
+ var image = ctx.createImageData(size, size);
774
+ var noise = new Float32Array(size * size);
775
+ for (var i = 0; i < noise.length; i++) noise[i] = Math.random();
776
+ var still = window.matchMedia && window.matchMedia("(prefers-reduced-motion: reduce)").matches;
777
+ function draw(t) {
778
+ var data = image.data;
779
+ var angle = t * 0.00005;
780
+ var lx = Math.cos(angle) * 0.55 + 0.25, ly = -0.55, lz = 0.62;
781
+ var len = Math.sqrt(lx * lx + ly * ly + lz * lz); lx /= len; ly /= len; lz /= len;
782
+ var drift = t * 0.00004;
783
+ for (var y = 0; y < size; y++) {
784
+ for (var x = 0; x < size; x++) {
785
+ var p = (y * size + x) * 4;
786
+ var nx = (x - cx) / radius, ny = (y - cy) / radius, r2 = nx * nx + ny * ny;
787
+ var on = false;
788
+ if (r2 <= 1) {
789
+ var nz = Math.sqrt(1 - r2);
790
+ var light = Math.max(0, nx * lx + ny * ly + nz * lz);
791
+ var level = 0.04 + Math.pow(light, 1.35) * 0.9;
792
+ var threshold = (noise[y * size + x] + drift) % 1;
793
+ on = threshold < level;
794
+ } else if (noise[y * size + x] > 0.99985) {
795
+ on = true;
796
+ }
797
+ data[p] = data[p + 1] = data[p + 2] = 247;
798
+ data[p + 3] = on ? 255 : 0;
799
+ }
800
+ }
801
+ ctx.putImageData(image, 0, 0);
802
+ }
803
+ draw(0);
804
+ if (still) return;
805
+ var last = 0;
806
+ function frame(t) {
807
+ if (!document.hidden && t - last > 66) { draw(t); last = t; }
808
+ requestAnimationFrame(frame);
809
+ }
810
+ requestAnimationFrame(frame);
811
+ }());
812
+
813
+ renderRail();
814
+ if (lastJobId) followImport(lastJobId, false);
815
+ }());
816
+ </script>
817
+ </body>
818
+ </html>`;
819
+ }
820
+ export function renderExpiredSetupPage() {
821
+ return `<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width"><meta name="color-scheme" content="dark"><title>Onadit setup link expired</title><style>body{margin:0;background:#111315;color:#eceeed;font:15px/1.6 -apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif}main{max-width:520px;margin:12vh auto;padding:32px}header{color:#8a8f98;margin-bottom:40px}h1{font-size:30px;font-weight:550;line-height:1.2;letter-spacing:-1px;margin:0 0 20px}p{color:#a0a7a5}</style></head><body><main><header>rift</header><h1>This setup link has expired.</h1><p>Reopen the Onadit installer to create a new private setup link. Your data has not been changed.</p></main></body></html>`;
822
+ }
823
+ //# sourceMappingURL=setup-page.js.map