thread-archive 0.0.2__tar.gz → 0.0.8__tar.gz

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 (579) hide show
  1. thread_archive-0.0.8/.gitignore +63 -0
  2. thread_archive-0.0.8/.mcp.json.example +12 -0
  3. thread_archive-0.0.8/CHANGELOG.md +117 -0
  4. thread_archive-0.0.8/PKG-INFO +579 -0
  5. thread_archive-0.0.8/README.md +523 -0
  6. thread_archive-0.0.8/claude-install.md +155 -0
  7. thread_archive-0.0.8/docs/benchmarks.md +172 -0
  8. thread_archive-0.0.8/docs/format.md +180 -0
  9. thread_archive-0.0.8/docs/providers.md +339 -0
  10. thread_archive-0.0.8/docs/related.md +76 -0
  11. thread_archive-0.0.8/docs/releasing.md +168 -0
  12. thread_archive-0.0.8/docs/search-quality.md +416 -0
  13. thread_archive-0.0.8/frontend/.gitignore +4 -0
  14. thread_archive-0.0.8/frontend/e2e/helpers.ts +686 -0
  15. thread_archive-0.0.8/frontend/e2e/route-coverage.spec.ts +40 -0
  16. thread_archive-0.0.8/frontend/e2e/routes.ts +75 -0
  17. thread_archive-0.0.8/frontend/e2e/smoke.spec.ts +298 -0
  18. {thread_archive-0.0.2 → thread_archive-0.0.8}/frontend/package-lock.json +816 -1
  19. {thread_archive-0.0.2 → thread_archive-0.0.8}/frontend/package.json +8 -2
  20. thread_archive-0.0.8/frontend/playwright.config.ts +42 -0
  21. thread_archive-0.0.8/frontend/src/App.tsx +111 -0
  22. thread_archive-0.0.8/frontend/src/api.ts +1075 -0
  23. thread_archive-0.0.8/frontend/src/chartColor.ts +39 -0
  24. thread_archive-0.0.8/frontend/src/components/AllThreadsView.tsx +214 -0
  25. thread_archive-0.0.8/frontend/src/components/AskQuestion.tsx +152 -0
  26. thread_archive-0.0.8/frontend/src/components/BenchRunView.tsx +736 -0
  27. thread_archive-0.0.8/frontend/src/components/HealthView.tsx +915 -0
  28. thread_archive-0.0.8/frontend/src/components/Landing.tsx +104 -0
  29. thread_archive-0.0.8/frontend/src/components/Markdown.tsx +40 -0
  30. thread_archive-0.0.8/frontend/src/components/Message.tsx +454 -0
  31. thread_archive-0.0.8/frontend/src/components/ModelStatsView.tsx +198 -0
  32. thread_archive-0.0.8/frontend/src/components/RetrievalView.tsx +532 -0
  33. thread_archive-0.0.8/frontend/src/components/SearchBox.tsx +158 -0
  34. thread_archive-0.0.8/frontend/src/components/SearchLabView.tsx +444 -0
  35. thread_archive-0.0.8/frontend/src/components/SearchView.tsx +229 -0
  36. thread_archive-0.0.8/frontend/src/components/Sidebar.tsx +121 -0
  37. thread_archive-0.0.8/frontend/src/components/StatsView.tsx +381 -0
  38. thread_archive-0.0.8/frontend/src/components/StatusBar.tsx +51 -0
  39. thread_archive-0.0.8/frontend/src/components/ThreadView.tsx +304 -0
  40. thread_archive-0.0.8/frontend/src/components/UploadView.tsx +321 -0
  41. thread_archive-0.0.8/frontend/src/components/charts.tsx +482 -0
  42. thread_archive-0.0.8/frontend/src/components/labRuns.tsx +226 -0
  43. thread_archive-0.0.8/frontend/src/dev.ts +25 -0
  44. thread_archive-0.0.8/frontend/src/modelColor.ts +126 -0
  45. thread_archive-0.0.8/frontend/src/styles.css +1386 -0
  46. thread_archive-0.0.8/frontend/src/test/AllThreadsView.test.tsx +197 -0
  47. thread_archive-0.0.8/frontend/src/test/App.test.tsx +124 -0
  48. thread_archive-0.0.8/frontend/src/test/AskQuestion.test.tsx +186 -0
  49. thread_archive-0.0.8/frontend/src/test/BenchRunView.test.tsx +293 -0
  50. thread_archive-0.0.8/frontend/src/test/HealthView.test.tsx +554 -0
  51. thread_archive-0.0.8/frontend/src/test/Landing.test.tsx +103 -0
  52. {thread_archive-0.0.2 → thread_archive-0.0.8}/frontend/src/test/Message.test.tsx +126 -0
  53. thread_archive-0.0.8/frontend/src/test/ModelStatsView.test.tsx +109 -0
  54. thread_archive-0.0.8/frontend/src/test/RetrievalView.test.tsx +164 -0
  55. thread_archive-0.0.8/frontend/src/test/SearchLabView.test.tsx +407 -0
  56. thread_archive-0.0.8/frontend/src/test/SearchView.test.tsx +220 -0
  57. thread_archive-0.0.8/frontend/src/test/Sidebar.test.tsx +109 -0
  58. thread_archive-0.0.8/frontend/src/test/StatsView.test.tsx +274 -0
  59. thread_archive-0.0.8/frontend/src/test/StatusBar.test.tsx +39 -0
  60. thread_archive-0.0.8/frontend/src/test/ThreadView.test.tsx +245 -0
  61. thread_archive-0.0.8/frontend/src/test/UploadView.test.tsx +193 -0
  62. thread_archive-0.0.8/frontend/src/test/dev.test.ts +41 -0
  63. thread_archive-0.0.8/frontend/src/test/modelColor.test.ts +94 -0
  64. thread_archive-0.0.8/frontend/src/test/msw.ts +71 -0
  65. thread_archive-0.0.8/frontend/src/test/mswServer.ts +15 -0
  66. thread_archive-0.0.8/frontend/src/test/setup.ts +50 -0
  67. thread_archive-0.0.8/frontend/vite.config.ts +73 -0
  68. thread_archive-0.0.8/pyproject.toml +229 -0
  69. thread_archive-0.0.8/scripts/check_frontend_build.py +58 -0
  70. thread_archive-0.0.8/scripts/coverage_gate.py +118 -0
  71. thread_archive-0.0.8/scripts/gen_third_party_notices.py +67 -0
  72. thread_archive-0.0.8/search_lab/README.md +467 -0
  73. thread_archive-0.0.8/search_lab/__init__.py +38 -0
  74. thread_archive-0.0.8/search_lab/__main__.py +44 -0
  75. thread_archive-0.0.8/search_lab/beir_eval.py +497 -0
  76. thread_archive-0.0.8/search_lab/bench_runs.py +309 -0
  77. thread_archive-0.0.8/search_lab/benchmark.py +575 -0
  78. thread_archive-0.0.8/search_lab/cdr_eval.py +360 -0
  79. thread_archive-0.0.8/search_lab/eval_core.py +682 -0
  80. thread_archive-0.0.8/search_lab/eval_home.py +212 -0
  81. thread_archive-0.0.8/search_lab/haystack_corpus.py +185 -0
  82. thread_archive-0.0.8/search_lab/haystack_eval.py +570 -0
  83. thread_archive-0.0.8/search_lab/inventory.py +740 -0
  84. thread_archive-0.0.8/search_lab/latency_replay.py +228 -0
  85. thread_archive-0.0.8/search_lab/mtrag_eval.py +443 -0
  86. thread_archive-0.0.8/search_lab/perltqa_eval.py +415 -0
  87. thread_archive-0.0.8/search_lab/quality-baseline.json +109 -0
  88. thread_archive-0.0.8/search_lab/quality_gate.py +401 -0
  89. thread_archive-0.0.8/search_lab/retrieval_eval.py +130 -0
  90. thread_archive-0.0.8/search_lab/retrieval_report.py +341 -0
  91. thread_archive-0.0.8/search_lab/run_meta.py +82 -0
  92. thread_archive-0.0.8/search_lab/snapshot.py +426 -0
  93. thread_archive-0.0.8/search_lab/speed.py +376 -0
  94. thread_archive-0.0.8/src/thread_archive/__init__.py +46 -0
  95. thread_archive-0.0.8/src/thread_archive/__main__.py +11 -0
  96. thread_archive-0.0.8/src/thread_archive/_api.py +811 -0
  97. thread_archive-0.0.8/src/thread_archive/_config.py +222 -0
  98. thread_archive-0.0.8/src/thread_archive/_dev/__init__.py +50 -0
  99. thread_archive-0.0.8/src/thread_archive/_importers/__init__.py +85 -0
  100. {thread_archive-0.0.2 → thread_archive-0.0.8}/src/thread_archive/_importers/_continuation.py +3 -3
  101. {thread_archive-0.0.2 → thread_archive-0.0.8}/src/thread_archive/_importers/_cursor.py +17 -3
  102. {thread_archive-0.0.2 → thread_archive-0.0.8}/src/thread_archive/_importers/_events.py +136 -22
  103. {thread_archive-0.0.2 → thread_archive-0.0.8}/src/thread_archive/_importers/_line_stream.py +85 -21
  104. thread_archive-0.0.8/src/thread_archive/_importers/_probe.py +212 -0
  105. thread_archive-0.0.8/src/thread_archive/_importers/_read.py +153 -0
  106. thread_archive-0.0.8/src/thread_archive/_importers/_result.py +43 -0
  107. {thread_archive-0.0.2 → thread_archive-0.0.8}/src/thread_archive/_importers/_sidecar.py +4 -7
  108. thread_archive-0.0.8/src/thread_archive/_importers/_skip_ledger.py +169 -0
  109. {thread_archive-0.0.2 → thread_archive-0.0.8}/src/thread_archive/_importers/_state.py +37 -9
  110. {thread_archive-0.0.2 → thread_archive-0.0.8}/src/thread_archive/_importers/_titles.py +2 -2
  111. thread_archive-0.0.8/src/thread_archive/_importers/_validation_ledger.py +158 -0
  112. thread_archive-0.0.8/src/thread_archive/_importers/_versions.py +103 -0
  113. {thread_archive-0.0.2 → thread_archive-0.0.8}/src/thread_archive/_importers/antigravity.py +55 -24
  114. {thread_archive-0.0.2 → thread_archive-0.0.8}/src/thread_archive/_importers/claude_code.py +120 -26
  115. {thread_archive-0.0.2 → thread_archive-0.0.8}/src/thread_archive/_importers/claude_science.py +159 -39
  116. thread_archive-0.0.8/src/thread_archive/_importers/codex.py +554 -0
  117. {thread_archive-0.0.2 → thread_archive-0.0.8}/src/thread_archive/_importers/cowork.py +75 -13
  118. {thread_archive-0.0.2 → thread_archive-0.0.8}/src/thread_archive/_importers/cursor.py +160 -49
  119. {thread_archive-0.0.2 → thread_archive-0.0.8}/src/thread_archive/_importers/exports.py +202 -31
  120. {thread_archive-0.0.2 → thread_archive-0.0.8}/src/thread_archive/_importers/grok.py +131 -61
  121. {thread_archive-0.0.2 → thread_archive-0.0.8}/src/thread_archive/_importers/opencode.py +127 -44
  122. thread_archive-0.0.8/src/thread_archive/_knowledge/__init__.py +33 -0
  123. {thread_archive-0.0.2 → thread_archive-0.0.8}/src/thread_archive/_knowledge/materialize.py +20 -24
  124. thread_archive-0.0.8/src/thread_archive/_knowledge/read.py +220 -0
  125. thread_archive-0.0.8/src/thread_archive/_mcp/server.py +344 -0
  126. thread_archive-0.0.8/src/thread_archive/_ops/__init__.py +14 -0
  127. thread_archive-0.0.8/src/thread_archive/_ops/amend.py +193 -0
  128. thread_archive-0.0.8/src/thread_archive/_ops/backup.py +1079 -0
  129. thread_archive-0.0.8/src/thread_archive/_ops/coverage.py +460 -0
  130. thread_archive-0.0.8/src/thread_archive/_ops/disk.py +184 -0
  131. thread_archive-0.0.8/src/thread_archive/_ops/health.py +288 -0
  132. thread_archive-0.0.8/src/thread_archive/_ops/ledger.py +188 -0
  133. thread_archive-0.0.8/src/thread_archive/_ops/load_runs.py +473 -0
  134. thread_archive-0.0.8/src/thread_archive/_ops/nightly.py +256 -0
  135. thread_archive-0.0.8/src/thread_archive/_ops/notices.py +415 -0
  136. thread_archive-0.0.8/src/thread_archive/_ops/source_mirror.py +376 -0
  137. thread_archive-0.0.8/src/thread_archive/_ops/verify.py +1116 -0
  138. thread_archive-0.0.8/src/thread_archive/_providers/__init__.py +188 -0
  139. thread_archive-0.0.2/src/thread_archive/_retrieval/_codex.py → thread_archive-0.0.8/src/thread_archive/_providers/_codex_render.py +20 -1
  140. thread_archive-0.0.8/src/thread_archive/_providers/builtins.py +209 -0
  141. thread_archive-0.0.8/src/thread_archive/_providers/discovery.py +111 -0
  142. thread_archive-0.0.8/src/thread_archive/_repair/__init__.py +32 -0
  143. thread_archive-0.0.8/src/thread_archive/_repair/activate.py +158 -0
  144. thread_archive-0.0.8/src/thread_archive/_repair/ledger.py +47 -0
  145. thread_archive-0.0.8/src/thread_archive/_repair/protocol.md +61 -0
  146. thread_archive-0.0.8/src/thread_archive/_repair/quirks/_default.md +27 -0
  147. thread_archive-0.0.8/src/thread_archive/_repair/quirks/claude-code.md +66 -0
  148. thread_archive-0.0.8/src/thread_archive/_repair/reimport.py +177 -0
  149. thread_archive-0.0.8/src/thread_archive/_repair/retire.py +105 -0
  150. thread_archive-0.0.8/src/thread_archive/_repair/scaffold.py +544 -0
  151. thread_archive-0.0.8/src/thread_archive/_retrieval/__init__.py +1033 -0
  152. thread_archive-0.0.8/src/thread_archive/_retrieval/_contention.py +207 -0
  153. {thread_archive-0.0.2 → thread_archive-0.0.8}/src/thread_archive/_retrieval/_context.py +32 -13
  154. {thread_archive-0.0.2 → thread_archive-0.0.8}/src/thread_archive/_retrieval/_extract.py +71 -16
  155. thread_archive-0.0.8/src/thread_archive/_retrieval/_paths.py +405 -0
  156. thread_archive-0.0.8/src/thread_archive/_retrieval/_probe.py +241 -0
  157. thread_archive-0.0.8/src/thread_archive/_retrieval/_types.py +157 -0
  158. thread_archive-0.0.8/src/thread_archive/_retrieval/browse.py +233 -0
  159. thread_archive-0.0.8/src/thread_archive/_retrieval/code.py +769 -0
  160. thread_archive-0.0.8/src/thread_archive/_retrieval/community.py +107 -0
  161. thread_archive-0.0.8/src/thread_archive/_retrieval/embed.py +407 -0
  162. thread_archive-0.0.8/src/thread_archive/_retrieval/embed_graph.py +462 -0
  163. thread_archive-0.0.8/src/thread_archive/_retrieval/format.py +336 -0
  164. thread_archive-0.0.8/src/thread_archive/_retrieval/fts.py +1526 -0
  165. thread_archive-0.0.8/src/thread_archive/_retrieval/graph_cache.py +315 -0
  166. thread_archive-0.0.8/src/thread_archive/_retrieval/model_slot.py +108 -0
  167. thread_archive-0.0.8/src/thread_archive/_retrieval/params.py +132 -0
  168. thread_archive-0.0.8/src/thread_archive/_retrieval/pool_cache.py +216 -0
  169. thread_archive-0.0.8/src/thread_archive/_retrieval/rank.py +538 -0
  170. thread_archive-0.0.8/src/thread_archive/_retrieval/read.py +1814 -0
  171. thread_archive-0.0.8/src/thread_archive/_retrieval/subjects.py +145 -0
  172. thread_archive-0.0.8/src/thread_archive/_retrieval/usage.py +298 -0
  173. thread_archive-0.0.8/src/thread_archive/_retrieval/vectors.py +1259 -0
  174. thread_archive-0.0.8/src/thread_archive/_scripts/backfill_codex_model.py +404 -0
  175. thread_archive-0.0.8/src/thread_archive/_scripts/backfill_dropped_fields.py +957 -0
  176. thread_archive-0.0.8/src/thread_archive/_scripts/backfill_export_annotations.py +681 -0
  177. {thread_archive-0.0.2 → thread_archive-0.0.8}/src/thread_archive/_scripts/backfill_recompute.py +33 -20
  178. {thread_archive-0.0.2 → thread_archive-0.0.8}/src/thread_archive/_scripts/backfill_reconcile.py +48 -17
  179. thread_archive-0.0.8/src/thread_archive/_scripts/backfill_subagent_type.py +144 -0
  180. thread_archive-0.0.8/src/thread_archive/_scripts/backfill_usage_cost.py +190 -0
  181. {thread_archive-0.0.2 → thread_archive-0.0.8}/src/thread_archive/_scripts/denamespace_dedup_keys.py +2 -2
  182. thread_archive-0.0.8/src/thread_archive/_scripts/migrate_thread_ulids.py +383 -0
  183. {thread_archive-0.0.2 → thread_archive-0.0.8}/src/thread_archive/_scripts/recover_dropped_events.py +28 -22
  184. {thread_archive-0.0.2 → thread_archive-0.0.8}/src/thread_archive/_scripts/repair_grok_tool_names.py +56 -34
  185. thread_archive-0.0.8/src/thread_archive/_service/__init__.py +184 -0
  186. thread_archive-0.0.8/src/thread_archive/_service/base.py +137 -0
  187. thread_archive-0.0.8/src/thread_archive/_service/launchd.py +382 -0
  188. thread_archive-0.0.8/src/thread_archive/_service/spec.py +221 -0
  189. thread_archive-0.0.8/src/thread_archive/_service/systemd.py +406 -0
  190. thread_archive-0.0.8/src/thread_archive/_setup/__init__.py +15 -0
  191. thread_archive-0.0.8/src/thread_archive/_setup/clients.py +206 -0
  192. thread_archive-0.0.8/src/thread_archive/_setup/machine.py +200 -0
  193. thread_archive-0.0.8/src/thread_archive/_setup/uninstall.py +403 -0
  194. thread_archive-0.0.8/src/thread_archive/_setup/wizard.py +713 -0
  195. {thread_archive-0.0.2 → thread_archive-0.0.8}/src/thread_archive/_store/__init__.py +31 -1
  196. {thread_archive-0.0.2 → thread_archive-0.0.8}/src/thread_archive/_store/_base.py +81 -6
  197. {thread_archive-0.0.2 → thread_archive-0.0.8}/src/thread_archive/_store/_defaults.py +2 -2
  198. thread_archive-0.0.8/src/thread_archive/_store/_metrics.py +871 -0
  199. thread_archive-0.0.8/src/thread_archive/_store/models.py +636 -0
  200. thread_archive-0.0.8/src/thread_archive/_store/resolve.py +102 -0
  201. thread_archive-0.0.8/src/thread_archive/_store/schema.py +146 -0
  202. thread_archive-0.0.8/src/thread_archive/_store/ulid.py +134 -0
  203. {thread_archive-0.0.2 → thread_archive-0.0.8}/src/thread_archive/_thread_import/__init__.py +0 -8
  204. {thread_archive-0.0.2 → thread_archive-0.0.8}/src/thread_archive/_thread_import/event_builder.py +178 -31
  205. {thread_archive-0.0.2 → thread_archive-0.0.8}/src/thread_archive/_thread_import/parsers/__init__.py +29 -55
  206. {thread_archive-0.0.2 → thread_archive-0.0.8}/src/thread_archive/_thread_import/parsers/base.py +5 -203
  207. {thread_archive-0.0.2 → thread_archive-0.0.8}/src/thread_archive/_thread_import/parsers/chatgpt.py +89 -46
  208. {thread_archive-0.0.2 → thread_archive-0.0.8}/src/thread_archive/_thread_import/parsers/chatgpt_content.py +103 -33
  209. {thread_archive-0.0.2 → thread_archive-0.0.8}/src/thread_archive/_thread_import/parsers/claude.py +96 -64
  210. {thread_archive-0.0.2 → thread_archive-0.0.8}/src/thread_archive/_thread_import/parsers/claude_code.py +103 -54
  211. {thread_archive-0.0.2 → thread_archive-0.0.8}/src/thread_archive/_thread_import/parsers/claude_code_blocks.py +7 -6
  212. {thread_archive-0.0.2 → thread_archive-0.0.8}/src/thread_archive/_thread_import/parsers/config/__init__.py +5 -3
  213. thread_archive-0.0.8/src/thread_archive/_thread_import/parsers/config/base.py +416 -0
  214. thread_archive-0.0.8/src/thread_archive/_thread_import/parsers/residual.py +96 -0
  215. {thread_archive-0.0.2 → thread_archive-0.0.8}/src/thread_archive/_thread_import/parsers/types/__init__.py +0 -9
  216. {thread_archive-0.0.2 → thread_archive-0.0.8}/src/thread_archive/_thread_import/parsers/validators/types.py +54 -0
  217. {thread_archive-0.0.2 → thread_archive-0.0.8}/src/thread_archive/_thread_import/timestamps.py +5 -0
  218. thread_archive-0.0.8/src/thread_archive/_tools.py +680 -0
  219. thread_archive-0.0.8/src/thread_archive/_truth/blobs.py +276 -0
  220. thread_archive-0.0.8/src/thread_archive/_truth/drain.py +620 -0
  221. thread_archive-0.0.8/src/thread_archive/_truth/jsonl_log.py +155 -0
  222. thread_archive-0.0.8/src/thread_archive/_truth/layout.py +434 -0
  223. thread_archive-0.0.8/src/thread_archive/_truth/locks.py +185 -0
  224. thread_archive-0.0.8/src/thread_archive/_truth/maintenance.py +350 -0
  225. thread_archive-0.0.8/src/thread_archive/_truth/rebuild.py +1278 -0
  226. {thread_archive-0.0.2 → thread_archive-0.0.8}/src/thread_archive/_truth/repair.py +31 -41
  227. thread_archive-0.0.8/src/thread_archive/_update.py +457 -0
  228. {thread_archive-0.0.2 → thread_archive-0.0.8}/src/thread_archive/_watcher/__init__.py +14 -8
  229. thread_archive-0.0.8/src/thread_archive/_watcher/base.py +161 -0
  230. thread_archive-0.0.8/src/thread_archive/_watcher/daemon.py +703 -0
  231. thread_archive-0.0.8/src/thread_archive/_watcher/drift_snapshot.py +249 -0
  232. thread_archive-0.0.8/src/thread_archive/_watcher/export_drop.py +312 -0
  233. {thread_archive-0.0.2 → thread_archive-0.0.8}/src/thread_archive/_watcher/exthost.py +19 -7
  234. thread_archive-0.0.8/src/thread_archive/_watcher/fingerprints.py +165 -0
  235. thread_archive-0.0.8/src/thread_archive/_watcher/ingest_log.py +239 -0
  236. {thread_archive-0.0.2 → thread_archive-0.0.8}/src/thread_archive/_watcher/lazy.py +5 -4
  237. thread_archive-0.0.8/src/thread_archive/_watcher/paths.py +53 -0
  238. thread_archive-0.0.8/src/thread_archive/_watcher/sources.py +608 -0
  239. thread_archive-0.0.8/src/thread_archive/_web/THIRD_PARTY_NOTICES.md +3000 -0
  240. thread_archive-0.0.8/src/thread_archive/_web/__init__.py +19 -0
  241. thread_archive-0.0.8/src/thread_archive/_web/metrics.py +136 -0
  242. thread_archive-0.0.8/src/thread_archive/_web/server.py +1351 -0
  243. thread_archive-0.0.8/src/thread_archive/_web/static/assets/index-BO9yJLj2.css +10 -0
  244. thread_archive-0.0.8/src/thread_archive/_web/static/assets/index-CSQLtI19.js +101 -0
  245. {thread_archive-0.0.2 → thread_archive-0.0.8}/src/thread_archive/_web/static/index.html +2 -2
  246. thread_archive-0.0.8/src/thread_archive/cli.py +2234 -0
  247. thread_archive-0.0.8/src/thread_archive/provider/__init__.py +396 -0
  248. thread_archive-0.0.8/src/thread_archive/provider/parse.py +144 -0
  249. thread_archive-0.0.8/src/thread_archive/provider/testing.py +191 -0
  250. thread_archive-0.0.8/tests/conftest.py +148 -0
  251. thread_archive-0.0.8/tests/goldens/providers/chatgpt-web.json +288 -0
  252. {thread_archive-0.0.2 → thread_archive-0.0.8}/tests/goldens/providers/claude-code.json +9 -0
  253. thread_archive-0.0.8/tests/goldens/providers/claude-science.json +332 -0
  254. thread_archive-0.0.8/tests/goldens/providers/claude-web.json +199 -0
  255. thread_archive-0.0.8/tests/goldens/providers/cowork.json +242 -0
  256. {thread_archive-0.0.2 → thread_archive-0.0.8}/tests/goldens/providers/grok.json +39 -11
  257. {thread_archive-0.0.2 → thread_archive-0.0.8}/tests/goldens/providers/opencode.json +1 -0
  258. thread_archive-0.0.8/tests/helpers.py +234 -0
  259. {thread_archive-0.0.2 → thread_archive-0.0.8}/tests/install/Dockerfile +21 -9
  260. thread_archive-0.0.8/tests/install/README.md +69 -0
  261. {thread_archive-0.0.2 → thread_archive-0.0.8}/tests/install/e2e_check.py +24 -3
  262. thread_archive-0.0.8/tests/install/first_run.py +197 -0
  263. thread_archive-0.0.8/tests/install/make_fixtures.py +436 -0
  264. {thread_archive-0.0.2 → thread_archive-0.0.8}/tests/install/run_in_container.sh +10 -1
  265. {thread_archive-0.0.2 → thread_archive-0.0.8}/tests/install/run_install_test.sh +14 -0
  266. thread_archive-0.0.8/tests/kg_seed.py +173 -0
  267. thread_archive-0.0.8/tests/meta/test_dependency_tiers.py +303 -0
  268. {thread_archive-0.0.2/tests → thread_archive-0.0.8/tests/meta}/test_import_ratchet.py +1 -1
  269. thread_archive-0.0.8/tests/meta/test_isolation.py +259 -0
  270. thread_archive-0.0.8/tests/meta/test_no_global_patch.py +104 -0
  271. thread_archive-0.0.8/tests/meta/test_no_patch.py +138 -0
  272. thread_archive-0.0.8/tests/meta/test_no_private_patch.py +129 -0
  273. thread_archive-0.0.8/tests/meta/test_output_summary.py +67 -0
  274. thread_archive-0.0.8/tests/meta/test_package_tree.py +90 -0
  275. {thread_archive-0.0.2 → thread_archive-0.0.8}/tests/mp_child.py +7 -7
  276. thread_archive-0.0.8/tests/quality_corpus.py +346 -0
  277. thread_archive-0.0.8/tests/test_amend.py +166 -0
  278. {thread_archive-0.0.2 → thread_archive-0.0.8}/tests/test_api.py +57 -0
  279. thread_archive-0.0.8/tests/test_backfill_codex_model.py +270 -0
  280. thread_archive-0.0.8/tests/test_backfill_dropped_fields.py +1304 -0
  281. thread_archive-0.0.8/tests/test_backfill_export_annotations.py +955 -0
  282. thread_archive-0.0.8/tests/test_backfill_subagent_type.py +253 -0
  283. {thread_archive-0.0.2 → thread_archive-0.0.8}/tests/test_backup_mirror.py +161 -29
  284. thread_archive-0.0.8/tests/test_beir_calibration.py +91 -0
  285. thread_archive-0.0.8/tests/test_bench_runner.py +462 -0
  286. thread_archive-0.0.8/tests/test_benchmark_loaders.py +372 -0
  287. thread_archive-0.0.8/tests/test_blobs.py +252 -0
  288. thread_archive-0.0.8/tests/test_browse.py +143 -0
  289. thread_archive-0.0.8/tests/test_capture_coverage.py +612 -0
  290. thread_archive-0.0.8/tests/test_cc_annotations.py +288 -0
  291. thread_archive-0.0.8/tests/test_checkpoint_timings.py +58 -0
  292. thread_archive-0.0.8/tests/test_cli_retrieval.py +198 -0
  293. thread_archive-0.0.8/tests/test_cli_smoke.py +467 -0
  294. thread_archive-0.0.8/tests/test_code_axis.py +1090 -0
  295. thread_archive-0.0.8/tests/test_codex_dropped_fields.py +307 -0
  296. {thread_archive-0.0.2 → thread_archive-0.0.8}/tests/test_codex_render.py +25 -3
  297. {thread_archive-0.0.2 → thread_archive-0.0.8}/tests/test_continuation.py +1 -1
  298. thread_archive-0.0.8/tests/test_cov_api.py +278 -0
  299. thread_archive-0.0.8/tests/test_cov_cli.py +1892 -0
  300. thread_archive-0.0.8/tests/test_cov_importers_a.py +798 -0
  301. thread_archive-0.0.8/tests/test_cov_importers_b.py +1376 -0
  302. thread_archive-0.0.8/tests/test_cov_ops_truth.py +765 -0
  303. thread_archive-0.0.8/tests/test_cov_parsers_cc.py +856 -0
  304. thread_archive-0.0.8/tests/test_cov_parsers_chat.py +870 -0
  305. thread_archive-0.0.8/tests/test_cov_retrieval.py +951 -0
  306. thread_archive-0.0.8/tests/test_cov_scripts.py +1208 -0
  307. thread_archive-0.0.8/tests/test_cov_setup.py +1073 -0
  308. thread_archive-0.0.8/tests/test_cov_vectors.py +1125 -0
  309. thread_archive-0.0.8/tests/test_cov_watcher.py +934 -0
  310. thread_archive-0.0.8/tests/test_coverage_gate.py +64 -0
  311. thread_archive-0.0.8/tests/test_cursor_antigravity_dropped_fields.py +264 -0
  312. {thread_archive-0.0.2 → thread_archive-0.0.8}/tests/test_dedup_collapse_and_deep_verify.py +13 -8
  313. thread_archive-0.0.8/tests/test_disk.py +187 -0
  314. thread_archive-0.0.8/tests/test_drift_snapshot.py +155 -0
  315. {thread_archive-0.0.2 → thread_archive-0.0.8}/tests/test_durability_and_homes.py +55 -19
  316. thread_archive-0.0.8/tests/test_embed_graph.py +242 -0
  317. thread_archive-0.0.8/tests/test_eval.py +129 -0
  318. thread_archive-0.0.8/tests/test_eval_home.py +121 -0
  319. {thread_archive-0.0.2 → thread_archive-0.0.8}/tests/test_event_builder.py +31 -0
  320. thread_archive-0.0.8/tests/test_export_drop.py +412 -0
  321. thread_archive-0.0.8/tests/test_exports.py +231 -0
  322. thread_archive-0.0.8/tests/test_exports_dropped_fields.py +411 -0
  323. {thread_archive-0.0.2 → thread_archive-0.0.8}/tests/test_exthost.py +34 -26
  324. thread_archive-0.0.8/tests/test_fingerprint_poll.py +105 -0
  325. thread_archive-0.0.8/tests/test_graph_cache.py +438 -0
  326. thread_archive-0.0.8/tests/test_grok_dropped_fields.py +165 -0
  327. thread_archive-0.0.8/tests/test_haystack_corpus.py +116 -0
  328. {thread_archive-0.0.2 → thread_archive-0.0.8}/tests/test_import_state_watermarks.py +75 -2
  329. {thread_archive-0.0.2 → thread_archive-0.0.8}/tests/test_importer_claude_code.py +49 -12
  330. {thread_archive-0.0.2 → thread_archive-0.0.8}/tests/test_importer_claude_science.py +2 -2
  331. {thread_archive-0.0.2 → thread_archive-0.0.8}/tests/test_importer_providers.py +71 -34
  332. thread_archive-0.0.8/tests/test_ingest_log.py +227 -0
  333. thread_archive-0.0.8/tests/test_ingest_probe.py +171 -0
  334. {thread_archive-0.0.2 → thread_archive-0.0.8}/tests/test_integrity_hardening.py +76 -21
  335. {thread_archive-0.0.2 → thread_archive-0.0.8}/tests/test_kg_materialize.py +63 -2
  336. thread_archive-0.0.8/tests/test_kg_read.py +219 -0
  337. thread_archive-0.0.8/tests/test_lab_inventory.py +391 -0
  338. {thread_archive-0.0.2 → thread_archive-0.0.8}/tests/test_launchd.py +33 -3
  339. thread_archive-0.0.8/tests/test_lazy_ingest.py +126 -0
  340. thread_archive-0.0.8/tests/test_ledger_retention.py +99 -0
  341. thread_archive-0.0.8/tests/test_load_runs.py +301 -0
  342. thread_archive-0.0.8/tests/test_load_runs_integration.py +83 -0
  343. {thread_archive-0.0.2 → thread_archive-0.0.8}/tests/test_manifest.py +1 -1
  344. thread_archive-0.0.8/tests/test_mcp.py +664 -0
  345. thread_archive-0.0.8/tests/test_migrate_thread_ulids.py +411 -0
  346. {thread_archive-0.0.2 → thread_archive-0.0.8}/tests/test_migration_scripts.py +184 -41
  347. thread_archive-0.0.8/tests/test_nightly.py +469 -0
  348. thread_archive-0.0.8/tests/test_notices.py +328 -0
  349. thread_archive-0.0.8/tests/test_opencode_dropped_fields.py +207 -0
  350. {thread_archive-0.0.2 → thread_archive-0.0.8}/tests/test_package_artifact.py +110 -19
  351. thread_archive-0.0.8/tests/test_parse_validation.py +318 -0
  352. thread_archive-0.0.8/tests/test_parser_robustness.py +230 -0
  353. thread_archive-0.0.8/tests/test_pool_cache.py +291 -0
  354. {thread_archive-0.0.2 → thread_archive-0.0.8}/tests/test_preserve_codex.py +44 -0
  355. {thread_archive-0.0.2 → thread_archive-0.0.8}/tests/test_preserve_cursor_import.py +11 -12
  356. {thread_archive-0.0.2 → thread_archive-0.0.8}/tests/test_preserve_exports.py +19 -45
  357. {thread_archive-0.0.2 → thread_archive-0.0.8}/tests/test_preserve_grok.py +39 -2
  358. thread_archive-0.0.8/tests/test_preserve_unmodeled.py +180 -0
  359. thread_archive-0.0.8/tests/test_provider_goldens.py +413 -0
  360. thread_archive-0.0.8/tests/test_provider_render.py +228 -0
  361. thread_archive-0.0.8/tests/test_provider_testing_harness.py +174 -0
  362. thread_archive-0.0.8/tests/test_public_api.py +192 -0
  363. {thread_archive-0.0.2 → thread_archive-0.0.8}/tests/test_read.py +279 -48
  364. thread_archive-0.0.8/tests/test_read_ask_user_question.py +123 -0
  365. thread_archive-0.0.8/tests/test_read_hooks.py +125 -0
  366. thread_archive-0.0.8/tests/test_read_queued_slotting.py +341 -0
  367. {thread_archive-0.0.2 → thread_archive-0.0.8}/tests/test_read_unknown_events.py +3 -2
  368. thread_archive-0.0.8/tests/test_read_user_query_unwrap.py +126 -0
  369. thread_archive-0.0.8/tests/test_reality_mechanisms.py +364 -0
  370. thread_archive-0.0.8/tests/test_recovery_bundle.py +153 -0
  371. {thread_archive-0.0.2 → thread_archive-0.0.8}/tests/test_reindex_fail_closed.py +118 -2
  372. thread_archive-0.0.8/tests/test_reindex_swap_reconnect.py +113 -0
  373. thread_archive-0.0.8/tests/test_repair.py +601 -0
  374. thread_archive-0.0.8/tests/test_restore.py +163 -0
  375. thread_archive-0.0.8/tests/test_retrieval_eval.py +405 -0
  376. {thread_archive-0.0.2 → thread_archive-0.0.8}/tests/test_retrieval_meta_and_filters.py +0 -11
  377. thread_archive-0.0.8/tests/test_retrieval_report.py +182 -0
  378. thread_archive-0.0.8/tests/test_science_cowork_dropped_fields.py +375 -0
  379. thread_archive-0.0.8/tests/test_search.py +657 -0
  380. thread_archive-0.0.8/tests/test_search_fuzz.py +202 -0
  381. thread_archive-0.0.8/tests/test_search_gate.py +392 -0
  382. thread_archive-0.0.8/tests/test_search_grouping.py +320 -0
  383. thread_archive-0.0.8/tests/test_search_pagination.py +428 -0
  384. thread_archive-0.0.8/tests/test_search_params.py +82 -0
  385. thread_archive-0.0.8/tests/test_search_probe.py +133 -0
  386. thread_archive-0.0.8/tests/test_search_quality.py +124 -0
  387. thread_archive-0.0.8/tests/test_search_quality_models.py +71 -0
  388. thread_archive-0.0.8/tests/test_search_recall_shape.py +174 -0
  389. thread_archive-0.0.8/tests/test_self_update.py +380 -0
  390. thread_archive-0.0.8/tests/test_serve_overhead.py +155 -0
  391. thread_archive-0.0.8/tests/test_service.py +141 -0
  392. thread_archive-0.0.8/tests/test_setup_wizard.py +652 -0
  393. {thread_archive-0.0.2 → thread_archive-0.0.8}/tests/test_shard_twins.py +1 -1
  394. thread_archive-0.0.8/tests/test_snapshot.py +314 -0
  395. thread_archive-0.0.8/tests/test_source_mirror.py +172 -0
  396. thread_archive-0.0.8/tests/test_speed.py +262 -0
  397. thread_archive-0.0.8/tests/test_stats.py +706 -0
  398. thread_archive-0.0.8/tests/test_store.py +424 -0
  399. thread_archive-0.0.8/tests/test_stream_delta_absorption.py +250 -0
  400. thread_archive-0.0.8/tests/test_structured_agent_sessions.py +107 -0
  401. thread_archive-0.0.8/tests/test_subjects.py +126 -0
  402. thread_archive-0.0.8/tests/test_summaries.py +92 -0
  403. thread_archive-0.0.8/tests/test_systemd.py +282 -0
  404. thread_archive-0.0.8/tests/test_systemd_integration.py +109 -0
  405. thread_archive-0.0.8/tests/test_timestamp_consolidation.py +71 -0
  406. {thread_archive-0.0.2 → thread_archive-0.0.8}/tests/test_truth.py +55 -40
  407. {thread_archive-0.0.2 → thread_archive-0.0.8}/tests/test_truth_manifest.py +21 -4
  408. {thread_archive-0.0.2 → thread_archive-0.0.8}/tests/test_truth_repair.py +27 -23
  409. thread_archive-0.0.8/tests/test_ulid.py +186 -0
  410. thread_archive-0.0.8/tests/test_uninstall.py +428 -0
  411. thread_archive-0.0.8/tests/test_usage_ledger.py +362 -0
  412. thread_archive-0.0.8/tests/test_vectors.py +962 -0
  413. {thread_archive-0.0.2 → thread_archive-0.0.8}/tests/test_vendor_thread_import.py +1 -1
  414. {thread_archive-0.0.2 → thread_archive-0.0.8}/tests/test_verify.py +84 -6
  415. thread_archive-0.0.8/tests/test_watch.py +595 -0
  416. thread_archive-0.0.8/tests/test_watch_fingerprints.py +187 -0
  417. thread_archive-0.0.8/tests/test_watch_ingest_telemetry.py +129 -0
  418. thread_archive-0.0.8/tests/test_web.py +1551 -0
  419. thread_archive-0.0.2/.gitignore +0 -39
  420. thread_archive-0.0.2/.mcp.json.example +0 -13
  421. thread_archive-0.0.2/CHANGELOG.md +0 -328
  422. thread_archive-0.0.2/PKG-INFO +0 -296
  423. thread_archive-0.0.2/README.md +0 -257
  424. thread_archive-0.0.2/claude-install.md +0 -144
  425. thread_archive-0.0.2/docs/format.md +0 -130
  426. thread_archive-0.0.2/docs/plans/reindex-atomic-swap.md +0 -120
  427. thread_archive-0.0.2/frontend/.gitignore +0 -1
  428. thread_archive-0.0.2/frontend/src/App.tsx +0 -24
  429. thread_archive-0.0.2/frontend/src/api.ts +0 -103
  430. thread_archive-0.0.2/frontend/src/components/Landing.tsx +0 -7
  431. thread_archive-0.0.2/frontend/src/components/Markdown.tsx +0 -20
  432. thread_archive-0.0.2/frontend/src/components/Message.tsx +0 -242
  433. thread_archive-0.0.2/frontend/src/components/SearchView.tsx +0 -80
  434. thread_archive-0.0.2/frontend/src/components/Sidebar.tsx +0 -77
  435. thread_archive-0.0.2/frontend/src/components/StatusBar.tsx +0 -21
  436. thread_archive-0.0.2/frontend/src/components/ThreadView.tsx +0 -99
  437. thread_archive-0.0.2/frontend/src/modelColor.ts +0 -63
  438. thread_archive-0.0.2/frontend/src/styles.css +0 -222
  439. thread_archive-0.0.2/frontend/src/test/SearchView.test.tsx +0 -100
  440. thread_archive-0.0.2/frontend/src/test/ThreadView.test.tsx +0 -111
  441. thread_archive-0.0.2/frontend/src/test/setup.ts +0 -10
  442. thread_archive-0.0.2/frontend/vite.config.ts +0 -25
  443. thread_archive-0.0.2/pyproject.toml +0 -118
  444. thread_archive-0.0.2/scripts/coverage_gate.py +0 -94
  445. thread_archive-0.0.2/scripts/golden_from_usage.py +0 -173
  446. thread_archive-0.0.2/scripts/librarian_backfill.py +0 -160
  447. thread_archive-0.0.2/scripts/retrieval_eval.py +0 -170
  448. thread_archive-0.0.2/src/thread_archive/__init__.py +0 -34
  449. thread_archive-0.0.2/src/thread_archive/_api.py +0 -2235
  450. thread_archive-0.0.2/src/thread_archive/_config.py +0 -126
  451. thread_archive-0.0.2/src/thread_archive/_importers/__init__.py +0 -81
  452. thread_archive-0.0.2/src/thread_archive/_importers/_read.py +0 -82
  453. thread_archive-0.0.2/src/thread_archive/_importers/_result.py +0 -17
  454. thread_archive-0.0.2/src/thread_archive/_importers/cloth.py +0 -20
  455. thread_archive-0.0.2/src/thread_archive/_importers/codex.py +0 -324
  456. thread_archive-0.0.2/src/thread_archive/_knowledge/__init__.py +0 -67
  457. thread_archive-0.0.2/src/thread_archive/_knowledge/_claims.py +0 -116
  458. thread_archive-0.0.2/src/thread_archive/_knowledge/_community.py +0 -75
  459. thread_archive-0.0.2/src/thread_archive/_knowledge/graph.py +0 -208
  460. thread_archive-0.0.2/src/thread_archive/_knowledge/write.py +0 -438
  461. thread_archive-0.0.2/src/thread_archive/_launchd.py +0 -167
  462. thread_archive-0.0.2/src/thread_archive/_mcp/librarian.py +0 -151
  463. thread_archive-0.0.2/src/thread_archive/_mcp/server.py +0 -307
  464. thread_archive-0.0.2/src/thread_archive/_retrieval/__init__.py +0 -280
  465. thread_archive-0.0.2/src/thread_archive/_retrieval/embed.py +0 -186
  466. thread_archive-0.0.2/src/thread_archive/_retrieval/format.py +0 -149
  467. thread_archive-0.0.2/src/thread_archive/_retrieval/fts.py +0 -538
  468. thread_archive-0.0.2/src/thread_archive/_retrieval/rank.py +0 -228
  469. thread_archive-0.0.2/src/thread_archive/_retrieval/read.py +0 -908
  470. thread_archive-0.0.2/src/thread_archive/_retrieval/rerank.py +0 -143
  471. thread_archive-0.0.2/src/thread_archive/_retrieval/vectors.py +0 -611
  472. thread_archive-0.0.2/src/thread_archive/_scripts/repair_grok_tool_names_backup_20260704T155625Z.json +0 -275
  473. thread_archive-0.0.2/src/thread_archive/_scripts/repair_grok_tool_names_plan_20260704.json +0 -435
  474. thread_archive-0.0.2/src/thread_archive/_setup/__init__.py +0 -12
  475. thread_archive-0.0.2/src/thread_archive/_setup/clients.py +0 -89
  476. thread_archive-0.0.2/src/thread_archive/_setup/wizard.py +0 -474
  477. thread_archive-0.0.2/src/thread_archive/_store/models.py +0 -370
  478. thread_archive-0.0.2/src/thread_archive/_store/schema.py +0 -84
  479. thread_archive-0.0.2/src/thread_archive/_thread_import/api.py +0 -78
  480. thread_archive-0.0.2/src/thread_archive/_thread_import/exporters/__init__.py +0 -9
  481. thread_archive-0.0.2/src/thread_archive/_thread_import/exporters/_cursor_kv_mixin.py +0 -166
  482. thread_archive-0.0.2/src/thread_archive/_thread_import/exporters/_cursor_parse_mixin.py +0 -149
  483. thread_archive-0.0.2/src/thread_archive/_thread_import/exporters/cursor.py +0 -582
  484. thread_archive-0.0.2/src/thread_archive/_thread_import/exporters/cursor_parse.py +0 -145
  485. thread_archive-0.0.2/src/thread_archive/_thread_import/parsers/claude_code_sessions.py +0 -90
  486. thread_archive-0.0.2/src/thread_archive/_thread_import/parsers/config/base.py +0 -220
  487. thread_archive-0.0.2/src/thread_archive/_thread_import/parsers/cursor.py +0 -538
  488. thread_archive-0.0.2/src/thread_archive/_thread_import/parsers/cursor_blocks.py +0 -365
  489. thread_archive-0.0.2/src/thread_archive/_thread_import/parsers/pipeline/__init__.py +0 -29
  490. thread_archive-0.0.2/src/thread_archive/_thread_import/parsers/pipeline/base.py +0 -251
  491. thread_archive-0.0.2/src/thread_archive/_thread_import/parsers/pipeline/interfaces.py +0 -191
  492. thread_archive-0.0.2/src/thread_archive/_thread_import/parsers/transformers/__init__.py +0 -22
  493. thread_archive-0.0.2/src/thread_archive/_thread_import/parsers/transformers/active_path.py +0 -87
  494. thread_archive-0.0.2/src/thread_archive/_thread_import/parsers/transformers/coalescing.py +0 -389
  495. thread_archive-0.0.2/src/thread_archive/_thread_import/parsers/transformers/ide_context.py +0 -158
  496. thread_archive-0.0.2/src/thread_archive/_thread_import/parsers/transformers/thinking_merge.py +0 -68
  497. thread_archive-0.0.2/src/thread_archive/_thread_import/parsers/types/cursor.py +0 -109
  498. thread_archive-0.0.2/src/thread_archive/_thread_import/schemas/__init__.py +0 -231
  499. thread_archive-0.0.2/src/thread_archive/_thread_import/schemas/chatgpt/v1.json +0 -197
  500. thread_archive-0.0.2/src/thread_archive/_thread_import/schemas/chatgpt/v2.json +0 -203
  501. thread_archive-0.0.2/src/thread_archive/_thread_import/schemas/claude/v1.json +0 -188
  502. thread_archive-0.0.2/src/thread_archive/_thread_import/schemas/claude_code/v1.json +0 -183
  503. thread_archive-0.0.2/src/thread_archive/_thread_import/schemas/cursor/v1.json +0 -143
  504. thread_archive-0.0.2/src/thread_archive/_thread_import/schemas/cursor/v2.json +0 -200
  505. thread_archive-0.0.2/src/thread_archive/_truth/jsonl_log.py +0 -2340
  506. thread_archive-0.0.2/src/thread_archive/_watcher/base.py +0 -65
  507. thread_archive-0.0.2/src/thread_archive/_watcher/daemon.py +0 -289
  508. thread_archive-0.0.2/src/thread_archive/_watcher/export_drop.py +0 -203
  509. thread_archive-0.0.2/src/thread_archive/_watcher/sources.py +0 -616
  510. thread_archive-0.0.2/src/thread_archive/_web/__init__.py +0 -15
  511. thread_archive-0.0.2/src/thread_archive/_web/server.py +0 -299
  512. thread_archive-0.0.2/src/thread_archive/_web/static/assets/index-DECSH1Mz.css +0 -10
  513. thread_archive-0.0.2/src/thread_archive/_web/static/assets/index-Djq0FK0y.js +0 -101
  514. thread_archive-0.0.2/src/thread_archive/cli.py +0 -746
  515. thread_archive-0.0.2/tests/conftest.py +0 -68
  516. thread_archive-0.0.2/tests/goldens/providers/cloth.json +0 -120
  517. thread_archive-0.0.2/tests/helpers.py +0 -74
  518. thread_archive-0.0.2/tests/install/README.md +0 -56
  519. thread_archive-0.0.2/tests/install/make_fixtures.py +0 -176
  520. thread_archive-0.0.2/tests/test_cli_smoke.py +0 -69
  521. thread_archive-0.0.2/tests/test_export_drop.py +0 -204
  522. thread_archive-0.0.2/tests/test_exports.py +0 -85
  523. thread_archive-0.0.2/tests/test_kg_write.py +0 -278
  524. thread_archive-0.0.2/tests/test_knowledge.py +0 -86
  525. thread_archive-0.0.2/tests/test_lazy_ingest.py +0 -97
  526. thread_archive-0.0.2/tests/test_librarian_claims.py +0 -113
  527. thread_archive-0.0.2/tests/test_librarian_gate.py +0 -107
  528. thread_archive-0.0.2/tests/test_mcp.py +0 -140
  529. thread_archive-0.0.2/tests/test_mcp_librarian.py +0 -75
  530. thread_archive-0.0.2/tests/test_nightly.py +0 -270
  531. thread_archive-0.0.2/tests/test_provider_goldens.py +0 -300
  532. thread_archive-0.0.2/tests/test_public_api.py +0 -85
  533. thread_archive-0.0.2/tests/test_read_queued_slotting.py +0 -117
  534. thread_archive-0.0.2/tests/test_rerank.py +0 -170
  535. thread_archive-0.0.2/tests/test_search.py +0 -321
  536. thread_archive-0.0.2/tests/test_setup_wizard.py +0 -256
  537. thread_archive-0.0.2/tests/test_store.py +0 -193
  538. thread_archive-0.0.2/tests/test_transformer_coalescing.py +0 -287
  539. thread_archive-0.0.2/tests/test_vectors.py +0 -230
  540. thread_archive-0.0.2/tests/test_watch.py +0 -308
  541. thread_archive-0.0.2/tests/test_web.py +0 -348
  542. {thread_archive-0.0.2 → thread_archive-0.0.8}/LICENSE +0 -0
  543. {thread_archive-0.0.2 → thread_archive-0.0.8}/frontend/index.html +0 -0
  544. {thread_archive-0.0.2 → thread_archive-0.0.8}/frontend/src/components/RawMode.tsx +0 -0
  545. {thread_archive-0.0.2 → thread_archive-0.0.8}/frontend/src/main.tsx +0 -0
  546. {thread_archive-0.0.2 → thread_archive-0.0.8}/frontend/tsconfig.json +0 -0
  547. {thread_archive-0.0.2 → thread_archive-0.0.8}/src/thread_archive/_mcp/__init__.py +0 -0
  548. {thread_archive-0.0.2 → thread_archive-0.0.8}/src/thread_archive/_retrieval/_classify.py +0 -0
  549. {thread_archive-0.0.2 → thread_archive-0.0.8}/src/thread_archive/_scripts/__init__.py +0 -0
  550. {thread_archive-0.0.2 → thread_archive-0.0.8}/src/thread_archive/_store/_types.py +0 -0
  551. {thread_archive-0.0.2 → thread_archive-0.0.8}/src/thread_archive/_thread_import/parsers/claude_code_ide.py +0 -0
  552. {thread_archive-0.0.2 → thread_archive-0.0.8}/src/thread_archive/_thread_import/parsers/types/chatgpt.py +0 -0
  553. {thread_archive-0.0.2 → thread_archive-0.0.8}/src/thread_archive/_thread_import/parsers/types/claude.py +0 -0
  554. {thread_archive-0.0.2 → thread_archive-0.0.8}/src/thread_archive/_thread_import/parsers/types/claude_code.py +0 -0
  555. {thread_archive-0.0.2 → thread_archive-0.0.8}/src/thread_archive/_thread_import/parsers/validators/__init__.py +0 -0
  556. {thread_archive-0.0.2 → thread_archive-0.0.8}/src/thread_archive/_thread_import/parsers/validators/base.py +0 -0
  557. {thread_archive-0.0.2 → thread_archive-0.0.8}/src/thread_archive/_thread_import/parsers/validators/content.py +0 -0
  558. {thread_archive-0.0.2 → thread_archive-0.0.8}/src/thread_archive/_thread_import/parsers/validators/referential.py +0 -0
  559. {thread_archive-0.0.2 → thread_archive-0.0.8}/src/thread_archive/_thread_import/parsers/validators/thinking.py +0 -0
  560. {thread_archive-0.0.2 → thread_archive-0.0.8}/src/thread_archive/_thread_import/tool_names.py +0 -0
  561. {thread_archive-0.0.2 → thread_archive-0.0.8}/src/thread_archive/_truth/__init__.py +0 -0
  562. {thread_archive-0.0.2 → thread_archive-0.0.8}/tests/__init__.py +0 -0
  563. {thread_archive-0.0.2 → thread_archive-0.0.8}/tests/goldens/providers/antigravity.json +0 -0
  564. {thread_archive-0.0.2 → thread_archive-0.0.8}/tests/goldens/providers/codex.json +0 -0
  565. {thread_archive-0.0.2 → thread_archive-0.0.8}/tests/goldens/providers/cursor.json +0 -0
  566. {thread_archive-0.0.2 → thread_archive-0.0.8}/tests/install/obfuscate_fixtures.py +0 -0
  567. {thread_archive-0.0.2 → thread_archive-0.0.8}/tests/test_backfill_dedup_key.py +0 -0
  568. {thread_archive-0.0.2 → thread_archive-0.0.8}/tests/test_chatgpt_timestamps.py +0 -0
  569. {thread_archive-0.0.2 → thread_archive-0.0.8}/tests/test_drain_intent.py +0 -0
  570. {thread_archive-0.0.2 → thread_archive-0.0.8}/tests/test_event_builder_fidelity.py +0 -0
  571. {thread_archive-0.0.2 → thread_archive-0.0.8}/tests/test_importer_cowork.py +0 -0
  572. {thread_archive-0.0.2 → thread_archive-0.0.8}/tests/test_ingest_cursor_hardening.py +0 -0
  573. {thread_archive-0.0.2 → thread_archive-0.0.8}/tests/test_multiprocess_durability.py +0 -0
  574. {thread_archive-0.0.2 → thread_archive-0.0.8}/tests/test_preserve_antigravity.py +0 -0
  575. {thread_archive-0.0.2 → thread_archive-0.0.8}/tests/test_preserve_cc_builder.py +0 -0
  576. {thread_archive-0.0.2 → thread_archive-0.0.8}/tests/test_preserve_opencode.py +0 -0
  577. {thread_archive-0.0.2 → thread_archive-0.0.8}/tests/test_recover_dropped_events.py +0 -0
  578. {thread_archive-0.0.2 → thread_archive-0.0.8}/tests/test_structured_model_split.py +0 -0
  579. {thread_archive-0.0.2 → thread_archive-0.0.8}/tests/test_vector_sidecar.py +0 -0
@@ -0,0 +1,63 @@
1
+ # venvs
2
+ .venv/
3
+ venv/
4
+
5
+ # node — build-time only (frontend/ has its own ignore; this catches strays at
6
+ # the root, e.g. a vitest cache from a run invoked with the wrong cwd)
7
+ /node_modules/
8
+
9
+ # python
10
+ __pycache__/
11
+ *.py[cod]
12
+ *.egg-info/
13
+ /dist/
14
+ .pytest_cache/
15
+ .ruff_cache/
16
+ .mypy_cache/
17
+ # hypothesis's example database (tests/test_search_fuzz.py) — a local replay
18
+ # cache of falsifying examples, regenerated on demand.
19
+ .hypothesis/
20
+
21
+ # Xcode/SwiftPM DerivedData. Archive has no native build of its own; a `.build/`
22
+ # here only appears when a sibling mac Makefile is invoked with the wrong cwd —
23
+ # ignored so that stray output never clutters this repo's status.
24
+ .build/
25
+
26
+ # Archive data lives in the user's home (~/.thread/archive), NEVER in the repo.
27
+ # These are belt-and-suspenders in case a run is pointed at the repo by mistake.
28
+ # All anchored to the repo root so they can't shadow the source tree (e.g. the
29
+ # `src/thread_archive/truth/` module must stay tracked).
30
+ /data/
31
+ /index.db
32
+ /index.db-*
33
+ /truth/
34
+ /*.sqlite
35
+
36
+ # Machine-specific MCP client config — generated at install time with absolute paths
37
+ # to this clone's venv (see claude-install.md). The tracked template is .mcp.json.example.
38
+ /.mcp.json
39
+
40
+ # Obfuscated corpus built from real local stores by tests/install/obfuscate_fixtures.py.
41
+ # Private even after obfuscation — never commit it.
42
+ tests/install/fixtures-real/
43
+
44
+ # Live-repair undo records: real transcript/tool payloads from this host's
45
+ # archive. Operator data, never repository content — tracking one publishes
46
+ # private conversations. tests/meta/test_package_tree.py gates this in CI.
47
+ /host/repair-dumps/
48
+
49
+ # coverage data (pytest --cov; the CI pytest row reports coverage per run,
50
+ # and writes coverage.json for the coverage-gate row). Unanchored — a pytest
51
+ # run from any subdirectory drops its .coverage there, not just at the root.
52
+ # coverage-*.json catches sharded/per-run coverage dumps tools leave at the root.
53
+ .coverage
54
+ .coverage.*
55
+ coverage.json
56
+ coverage-*.json
57
+
58
+ # BEIR calibration cache (search_lab/beir_eval.py, the `beir` test lane): downloaded
59
+ # datasets + the built archive/embeddings, kept so re-runs skip the rebuild.
60
+ /.beir-cache/
61
+
62
+ # os
63
+ .DS_Store
@@ -0,0 +1,12 @@
1
+ {
2
+ "_comment": "Template. Copy to .mcp.json and replace ABSOLUTE_REPO_PATH with this clone's absolute path (the install step does this for you). The tools are read-only; this template explicitly opts the process into local catch-up ingest.",
3
+ "mcpServers": {
4
+ "thread-archive": {
5
+ "command": "ABSOLUTE_REPO_PATH/.venv/bin/archive-mcp",
6
+ "env": {
7
+ "THREAD_ARCHIVE_HOME": "~/.thread/archive",
8
+ "THREAD_ARCHIVE_MCP_INGEST": "1"
9
+ }
10
+ }
11
+ }
12
+ }
@@ -0,0 +1,117 @@
1
+ # Changelog
2
+
3
+ ## Unreleased
4
+
5
+ ## 0.0.8 — 2026-07-28
6
+
7
+ - PyPI is a supported install (`pip install thread-archive`): a `v*` release tag publishes the wheel + sdist via
8
+ Trusted Publishing. The base dependency pins `mcp<2` — mcp 2.0 removes the FastMCP API archive-mcp imports.
9
+ - Search ranks the same across restarts: the corpus graph persists beside the vector pack (TTL-bounded, shape-checked),
10
+ `status` reports it, and a restart re-reads nothing — fingerprints persist and unchanged files skip the parse.
11
+ - Ingest is instrumented per stage (`thread-archive source ingest`), checkpoints and MCP serving itemize their time,
12
+ telemetry ledgers rotate to stamped segments readers walk in full, and embed drains return torch's cached memory.
13
+ - Search quality is gated at release: `python -m search_lab gate` holds the bench set to accepted numbers, failing
14
+ regressions, unmeasured ranking changes, and stale rows. `thread_search(commit=…)` resolves all files, not 300.
15
+ - The stats page gains charts and a real time axis; backup verify bounds mirror coverage on both sides; a disabled
16
+ self-updater stops filing update notices; bug reports collect `status` + `source coverage` output up front.
17
+
18
+ ## 0.0.7 — 2026-07-27
19
+
20
+ - The command is `thread-archive`; verbs group under `source`/`index`/`backup`/`service`, old spellings still resolve.
21
+ - Retrieval reaches the shell (`search`, `read`), `web` opens the viewer, `uninstall` takes it back off a machine.
22
+ - Search's p99 falls from 57s to ~1.5s: the cross-encoder is gone and the vector pack rebuilds off the request path.
23
+ - Ranking now scores its arms rather than their ranks, and weighs match coverage; BEIR scifact nDCG@10 0.509 → 0.650.
24
+ - Search enumerates as well as finds — `page=`, real totals, `path=`/`commit=` scopes; tool output leaves the index.
25
+ - Gone: redaction and its keyring, the topic graph, and the measurement surface; updates are operator-run only.
26
+ - Python floor 3.12; the base install is lexical-only (Leiden behind an extra); a `setup` re-run keeps your opt-outs.
27
+ - The viewer opens as a retrieval workspace, takes an account export by drag-and-drop, and routes no dev page.
28
+ - Searches, web requests, watcher passes and loads are timed; `status` reports disk cost and degraded capabilities.
29
+ - A red backup leaves `backup-failures.jsonl`; Codex stops importing as Claude Code; stats stop double-counting tokens.
30
+
31
+ ## 0.0.6 — 2026-07-21
32
+
33
+ - The `archive` script is gone; `thread_archive` is the one front door (setup + every verb); reinstall agents to repoint.
34
+ - Linux (systemd `--user`) support: launchd gives way to a platform-neutral backend registry; a new OS is now a drop-in.
35
+ - The archive no longer knows thread-librarian exists; the subjects lens moves in-tree, curated analytics move out.
36
+ - The search stack is tunable end to end via a frozen `SearchParams`; an `evals/` lab races configs on mined queries.
37
+ - Ranking gains a corpus-native coherence signal, live when the reranker stands down; embed/rerank models are injectable.
38
+ - `thread_archive eval`: a read-only search-quality self-checkup over your own archive; nothing leaves the machine.
39
+ - Web viewer: a header line naming a thread's subagents and a Playwright gate over the prod bundle; topic pages retire.
40
+ - A first-run test finds every harness's store in its default spot on macOS and Linux; Docker and package lanes gate it.
41
+ - Security hardening: config fails closed, a bare MCP is read-only, the viewer sends CSP; SECURITY/CONTRIBUTING land.
42
+ - Truth-format boundaries fail closed with migrate-before-restart; the backup mirror now deletes renamed ULID twins.
43
+
44
+ ## 0.0.5 — 2026-07-20
45
+
46
+ - Thread ids are ULIDs (truth format v2); legacy integer ids resolve forever as aliases; a one-shot migration ships.
47
+ - Curation moves out: thread-librarian is its own repo and plugin; archive keeps the knowledge data plane and graph.
48
+ - Providers are pluggable: a public provider API (discovery, render policies, session-id shapes) the built-ins share.
49
+ - Installs self-update from release tags: daily probe, 48h soak, smoke check, rollback — pushing a tag is shipping.
50
+ - Import drift self-repairs: raw source mirror, unmodeled-field preservation, degradation verdicts, `archive fix-import`.
51
+ - Retrieval is measured on real usage: the log-mined click eval gates CI; the re-rank pays only on vocab-mismatch heads.
52
+ - FTS drops to external-content (~4 GB smaller), the semantic matrix mmaps; search gains browse, grouping, dup folds.
53
+ - Agent-run threads leave default search; `thread_read` grows ends/last/topics modes; images and attachments are viewable.
54
+ - The knowledge graph projects over the whole corpus (evidence edges, thread nodes), not the librarian's links alone.
55
+ - Importer dropped-field sweep over every provider; the amendment seam and backfills enrich already-stored history.
56
+
57
+ ## 0.0.4 — 2026-07-16
58
+
59
+ - Self-curation runs on a schedule: `archive curate librarian|gardener` spawns bounded headless drains, installed as
60
+ hourly/daily LaunchAgents; the librarian writes stored summaries again and the gardener gets MCP diagnostics.
61
+ - `archive restore` does real recovery (staged rebuild, atomic publication, `--generation`); backups sync a
62
+ `.recovery/` bundle (config, keyring, retained exports), enforce owner-only mirrors, and fail on a stale bundle.
63
+ - The graph reads back out (`topic_get`/`topic_members`, curated topic pages, `topic_id` search scope); the viewer
64
+ gains topics/hierarchy views, an all-threads page, search-hit deep links, hook rendering, last-activity ordering.
65
+ - Retrieval usage is ledgered with latency (ids only); the topical arm and the usage-mined golden eval are deleted.
66
+ - Capture health stops over-alarming; export redrops merge grown conversations and originals are never deleted;
67
+ ChatGPT branch structure and claude.ai attachments reach truth; repair dumps are purged from git history.
68
+ - Privacy/hardening: 0700 homes, loopback-only MCP, pinned embed revision, 300s bulk write timeout, coverage floors.
69
+
70
+ ## 0.0.3 — 2026-07-15
71
+
72
+ - Distribution moves to clone-install (the brief PyPI/Homebrew run is retired): `pip install -e .` from a clone or
73
+ `pip install git+<repo-url>@vX.Y.Z`; releases are annotated `vX.Y.Z` tags cut per `docs/releasing.md`.
74
+ - `archive redact`: crypto-shredding redaction (reversible / escrowed / forgotten) across every store without breaking
75
+ the truth log's shape, verify, or dedup; setup schedules the nightly backup (`archive daemon install --backup`).
76
+ - One shared MCP server (`archive-mcp --http` behind a LaunchAgent) replaces a ~3 GB resident model per stdio client.
77
+ - Search ~5× faster at identical results, quality CI-gated (MRR/recall floors) over a usage-mined golden set; the
78
+ topic graph demoted to a `subjects:` lens; assistant text indexed; Codex turns get the real serving model.
79
+ - Capture blind-spot detection (skip ledger, watch-pass heartbeat, `archive coverage` reconciliation); ChatGPT exports
80
+ import and zero-yield imports are quarantined, not deleted; SMB destinations work; ingest rides out FTS rebuilds.
81
+ - Hardening: viewer loopback guard, suite isolation + `tests/meta/` ratchets, `_truth`/`_ops` split, mypy gate.
82
+
83
+ ## 0.0.2 — 2026-07-11
84
+
85
+ - First release published to PyPI (since retired — see 0.0.3): first-run setup wizard (discovers stores, imports with
86
+ narration, wires watcher + MCP), a status view, and `config.json` choices every ingest path honors.
87
+ - Zero-daemon path: `archive-mcp` cohosts lazy catch-up ingest under an ingest-owner flock; `archive daemon` verbs
88
+ manage the launchd watcher from the package.
89
+ - Public API narrowed to the retrieval MCP tools + the versioned truth format (`docs/format.md`); retrieval CLI verbs
90
+ removed, the Python API privatized, all ratchet-pinned; version single-sourced from `__version__`.
91
+ - Nightly publishes a tier-aware verdict; verify hardening (fresh-connection quick_check, cross-store parity, named
92
+ failure evidence); a content-hash cursor rewind and write-mutex mirror copies close three silent-loss paths.
93
+ - Boundary test lanes: wheel into a clean venv driven over MCP stdio, SIGKILLed-writer durability, provider goldens,
94
+ frontend component tests, per-package coverage floors.
95
+
96
+ ## 0.0.1 — 2026-07-11
97
+
98
+ - Retrieval correctness pass: the semantic arm sits out scoped/count/oldest searches, exclusions narrow the KNN scope,
99
+ chunk pooling precedes the top-k cut, a bm25 OR-fallback serves conversational queries, `sort='oldest'` is in order.
100
+ - Crash-safe truth appends: drain intent journal, all-or-nothing batches, torn-tail repair, exclusive cross-process
101
+ write locking, dedup enforced as a DB constraint.
102
+ - Reindex fails closed; backup hardened (atomic publishes, shrink guard, restore drills); `archive nightly` runs
103
+ backup → verify → drill under a monitored heartbeat; `verify` grew tiers; `archive repair` restores red to green.
104
+ - One-time duplicate repair: ~27k duplicated turns collapsed, ~237k dedup keys backfilled; rebuilds reproduce the
105
+ repair instead of undoing it.
106
+ - Retrieval overhaul: titles/summaries indexed as docs, long-document chunking, identifier-recall fixes, auto-widening
107
+ MCP scope, an MRR/recall eval harness; the suite pinned model-free (~2 min → ~8 s), coverage on every CI sweep.
108
+
109
+ ## 0.0.0 — initial release
110
+
111
+ - Serverless local archive over `~/.thread/archive`: append-only JSONL truth plus a rebuildable SQLite index.
112
+ - Multi-provider importers: Claude Code, Cursor, OpenCode, ChatGPT/Anthropic exports, Grok, cloth, and friends.
113
+ - Watcher daemon (`archive watch`) tails harness stores and ingests continuously.
114
+ - Retrieval MCP server: `thread_search` (FTS + optional semantic/rerank arms) and `thread_read`.
115
+ - Librarian MCP: topics, citations, thread links, and a review queue for knowledge curation.
116
+ - Read-only web viewer cohosted at `:8787` (`archive watch --web`).
117
+ - CLI: import/export, reindex, checkpoint, backup, verify.