@saihm/shm 0.0.0-stage → 0.38.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (672) hide show
  1. package/LICENSE +97 -0
  2. package/NOTICE +12 -0
  3. package/README.md +159 -2
  4. package/dist/adapter/epoch.d.ts +4 -0
  5. package/dist/adapter/epoch.d.ts.map +1 -0
  6. package/dist/adapter/epoch.js +16 -0
  7. package/dist/adapter/epoch.js.map +1 -0
  8. package/dist/adapter/frontmatter.d.ts +19 -0
  9. package/dist/adapter/frontmatter.d.ts.map +1 -0
  10. package/dist/adapter/frontmatter.js +95 -0
  11. package/dist/adapter/frontmatter.js.map +1 -0
  12. package/dist/adapter/index.d.ts +4 -0
  13. package/dist/adapter/index.d.ts.map +1 -0
  14. package/dist/adapter/index.js +4 -0
  15. package/dist/adapter/index.js.map +1 -0
  16. package/dist/adapter/markdown_dir_port.d.ts +48 -0
  17. package/dist/adapter/markdown_dir_port.d.ts.map +1 -0
  18. package/dist/adapter/markdown_dir_port.js +175 -0
  19. package/dist/adapter/markdown_dir_port.js.map +1 -0
  20. package/dist/aggregate/document_aggregation.d.ts +40 -0
  21. package/dist/aggregate/document_aggregation.d.ts.map +1 -0
  22. package/dist/aggregate/document_aggregation.js +101 -0
  23. package/dist/aggregate/document_aggregation.js.map +1 -0
  24. package/dist/aggregate/index.d.ts +2 -0
  25. package/dist/aggregate/index.d.ts.map +1 -0
  26. package/dist/aggregate/index.js +2 -0
  27. package/dist/aggregate/index.js.map +1 -0
  28. package/dist/answer/answer_layer.d.ts +33 -0
  29. package/dist/answer/answer_layer.d.ts.map +1 -0
  30. package/dist/answer/answer_layer.js +75 -0
  31. package/dist/answer/answer_layer.js.map +1 -0
  32. package/dist/answer/caching_body_source.d.ts +42 -0
  33. package/dist/answer/caching_body_source.d.ts.map +1 -0
  34. package/dist/answer/caching_body_source.js +120 -0
  35. package/dist/answer/caching_body_source.js.map +1 -0
  36. package/dist/answer/claude_cli_backend.d.ts +10 -0
  37. package/dist/answer/claude_cli_backend.d.ts.map +1 -0
  38. package/dist/answer/claude_cli_backend.js +60 -0
  39. package/dist/answer/claude_cli_backend.js.map +1 -0
  40. package/dist/answer/context.d.ts +6 -0
  41. package/dist/answer/context.d.ts.map +1 -0
  42. package/dist/answer/context.js +83 -0
  43. package/dist/answer/context.js.map +1 -0
  44. package/dist/answer/corpus_warmer.d.ts +44 -0
  45. package/dist/answer/corpus_warmer.d.ts.map +1 -0
  46. package/dist/answer/corpus_warmer.js +80 -0
  47. package/dist/answer/corpus_warmer.js.map +1 -0
  48. package/dist/answer/gate.d.ts +3 -0
  49. package/dist/answer/gate.d.ts.map +1 -0
  50. package/dist/answer/gate.js +35 -0
  51. package/dist/answer/gate.js.map +1 -0
  52. package/dist/answer/index.d.ts +20 -0
  53. package/dist/answer/index.d.ts.map +1 -0
  54. package/dist/answer/index.js +11 -0
  55. package/dist/answer/index.js.map +1 -0
  56. package/dist/answer/own_cell_body_source.d.ts +34 -0
  57. package/dist/answer/own_cell_body_source.d.ts.map +1 -0
  58. package/dist/answer/own_cell_body_source.js +66 -0
  59. package/dist/answer/own_cell_body_source.js.map +1 -0
  60. package/dist/answer/persistent_body_source.d.ts +50 -0
  61. package/dist/answer/persistent_body_source.d.ts.map +1 -0
  62. package/dist/answer/persistent_body_source.js +173 -0
  63. package/dist/answer/persistent_body_source.js.map +1 -0
  64. package/dist/answer/saihm_body_source.d.ts +27 -0
  65. package/dist/answer/saihm_body_source.d.ts.map +1 -0
  66. package/dist/answer/saihm_body_source.js +88 -0
  67. package/dist/answer/saihm_body_source.js.map +1 -0
  68. package/dist/answer/structured_answerer.d.ts +23 -0
  69. package/dist/answer/structured_answerer.d.ts.map +1 -0
  70. package/dist/answer/structured_answerer.js +103 -0
  71. package/dist/answer/structured_answerer.js.map +1 -0
  72. package/dist/answer/supersede.d.ts +12 -0
  73. package/dist/answer/supersede.d.ts.map +1 -0
  74. package/dist/answer/supersede.js +27 -0
  75. package/dist/answer/supersede.js.map +1 -0
  76. package/dist/answer/types.d.ts +53 -0
  77. package/dist/answer/types.d.ts.map +1 -0
  78. package/dist/answer/types.js +2 -0
  79. package/dist/answer/types.js.map +1 -0
  80. package/dist/assemble/brief.d.ts +83 -0
  81. package/dist/assemble/brief.d.ts.map +1 -0
  82. package/dist/assemble/brief.js +312 -0
  83. package/dist/assemble/brief.js.map +1 -0
  84. package/dist/assemble/index.d.ts +4 -0
  85. package/dist/assemble/index.d.ts.map +1 -0
  86. package/dist/assemble/index.js +4 -0
  87. package/dist/assemble/index.js.map +1 -0
  88. package/dist/assemble/posture.d.ts +23 -0
  89. package/dist/assemble/posture.d.ts.map +1 -0
  90. package/dist/assemble/posture.js +68 -0
  91. package/dist/assemble/posture.js.map +1 -0
  92. package/dist/assemble/thread.d.ts +53 -0
  93. package/dist/assemble/thread.d.ts.map +1 -0
  94. package/dist/assemble/thread.js +122 -0
  95. package/dist/assemble/thread.js.map +1 -0
  96. package/dist/attention/index.d.ts +5 -0
  97. package/dist/attention/index.d.ts.map +1 -0
  98. package/dist/attention/index.js +3 -0
  99. package/dist/attention/index.js.map +1 -0
  100. package/dist/attention/obligations.d.ts +23 -0
  101. package/dist/attention/obligations.d.ts.map +1 -0
  102. package/dist/attention/obligations.js +110 -0
  103. package/dist/attention/obligations.js.map +1 -0
  104. package/dist/attention/queue.d.ts +38 -0
  105. package/dist/attention/queue.d.ts.map +1 -0
  106. package/dist/attention/queue.js +102 -0
  107. package/dist/attention/queue.js.map +1 -0
  108. package/dist/claim/index.d.ts +23 -0
  109. package/dist/claim/index.d.ts.map +1 -0
  110. package/dist/claim/index.js +57 -0
  111. package/dist/claim/index.js.map +1 -0
  112. package/dist/claim/withdrawn.d.ts +17 -0
  113. package/dist/claim/withdrawn.d.ts.map +1 -0
  114. package/dist/claim/withdrawn.js +41 -0
  115. package/dist/claim/withdrawn.js.map +1 -0
  116. package/dist/compliance/index.d.ts +3 -0
  117. package/dist/compliance/index.d.ts.map +1 -0
  118. package/dist/compliance/index.js +3 -0
  119. package/dist/compliance/index.js.map +1 -0
  120. package/dist/compliance/report.d.ts +123 -0
  121. package/dist/compliance/report.d.ts.map +1 -0
  122. package/dist/compliance/report.js +295 -0
  123. package/dist/compliance/report.js.map +1 -0
  124. package/dist/compliance/trail.d.ts +180 -0
  125. package/dist/compliance/trail.d.ts.map +1 -0
  126. package/dist/compliance/trail.js +130 -0
  127. package/dist/compliance/trail.js.map +1 -0
  128. package/dist/consolidate/body_redundancy.d.ts +54 -0
  129. package/dist/consolidate/body_redundancy.d.ts.map +1 -0
  130. package/dist/consolidate/body_redundancy.js +150 -0
  131. package/dist/consolidate/body_redundancy.js.map +1 -0
  132. package/dist/consolidate/consolidator.d.ts +62 -0
  133. package/dist/consolidate/consolidator.d.ts.map +1 -0
  134. package/dist/consolidate/consolidator.js +260 -0
  135. package/dist/consolidate/consolidator.js.map +1 -0
  136. package/dist/consolidate/index.d.ts +4 -0
  137. package/dist/consolidate/index.d.ts.map +1 -0
  138. package/dist/consolidate/index.js +4 -0
  139. package/dist/consolidate/index.js.map +1 -0
  140. package/dist/consolidate/index_guard.d.ts +63 -0
  141. package/dist/consolidate/index_guard.d.ts.map +1 -0
  142. package/dist/consolidate/index_guard.js +212 -0
  143. package/dist/consolidate/index_guard.js.map +1 -0
  144. package/dist/coordination/identity.d.ts +39 -0
  145. package/dist/coordination/identity.d.ts.map +1 -0
  146. package/dist/coordination/identity.js +97 -0
  147. package/dist/coordination/identity.js.map +1 -0
  148. package/dist/coordination/inbound.d.ts +41 -0
  149. package/dist/coordination/inbound.d.ts.map +1 -0
  150. package/dist/coordination/inbound.js +119 -0
  151. package/dist/coordination/inbound.js.map +1 -0
  152. package/dist/coordination/index.d.ts +12 -0
  153. package/dist/coordination/index.d.ts.map +1 -0
  154. package/dist/coordination/index.js +7 -0
  155. package/dist/coordination/index.js.map +1 -0
  156. package/dist/coordination/note_lineage.d.ts +50 -0
  157. package/dist/coordination/note_lineage.d.ts.map +1 -0
  158. package/dist/coordination/note_lineage.js +132 -0
  159. package/dist/coordination/note_lineage.js.map +1 -0
  160. package/dist/coordination/outbound.d.ts +33 -0
  161. package/dist/coordination/outbound.d.ts.map +1 -0
  162. package/dist/coordination/outbound.js +69 -0
  163. package/dist/coordination/outbound.js.map +1 -0
  164. package/dist/coordination/share_states.d.ts +178 -0
  165. package/dist/coordination/share_states.d.ts.map +1 -0
  166. package/dist/coordination/share_states.js +864 -0
  167. package/dist/coordination/share_states.js.map +1 -0
  168. package/dist/coordination/untrusted_text.d.ts +3 -0
  169. package/dist/coordination/untrusted_text.d.ts.map +1 -0
  170. package/dist/coordination/untrusted_text.js +21 -0
  171. package/dist/coordination/untrusted_text.js.map +1 -0
  172. package/dist/deref/dereference.d.ts +68 -0
  173. package/dist/deref/dereference.d.ts.map +1 -0
  174. package/dist/deref/dereference.js +199 -0
  175. package/dist/deref/dereference.js.map +1 -0
  176. package/dist/deref/index.d.ts +3 -0
  177. package/dist/deref/index.d.ts.map +1 -0
  178. package/dist/deref/index.js +3 -0
  179. package/dist/deref/index.js.map +1 -0
  180. package/dist/deref/policy.d.ts +76 -0
  181. package/dist/deref/policy.d.ts.map +1 -0
  182. package/dist/deref/policy.js +281 -0
  183. package/dist/deref/policy.js.map +1 -0
  184. package/dist/derived/checkpoint.d.ts +22 -0
  185. package/dist/derived/checkpoint.d.ts.map +1 -0
  186. package/dist/derived/checkpoint.js +92 -0
  187. package/dist/derived/checkpoint.js.map +1 -0
  188. package/dist/derived/codec.d.ts +26 -0
  189. package/dist/derived/codec.d.ts.map +1 -0
  190. package/dist/derived/codec.js +116 -0
  191. package/dist/derived/codec.js.map +1 -0
  192. package/dist/derived/cycle.d.ts +96 -0
  193. package/dist/derived/cycle.d.ts.map +1 -0
  194. package/dist/derived/cycle.js +199 -0
  195. package/dist/derived/cycle.js.map +1 -0
  196. package/dist/derived/index.d.ts +7 -0
  197. package/dist/derived/index.d.ts.map +1 -0
  198. package/dist/derived/index.js +7 -0
  199. package/dist/derived/index.js.map +1 -0
  200. package/dist/derived/ledger.d.ts +54 -0
  201. package/dist/derived/ledger.d.ts.map +1 -0
  202. package/dist/derived/ledger.js +123 -0
  203. package/dist/derived/ledger.js.map +1 -0
  204. package/dist/derived/lineage_index.d.ts +17 -0
  205. package/dist/derived/lineage_index.d.ts.map +1 -0
  206. package/dist/derived/lineage_index.js +51 -0
  207. package/dist/derived/lineage_index.js.map +1 -0
  208. package/dist/derived/store.d.ts +92 -0
  209. package/dist/derived/store.d.ts.map +1 -0
  210. package/dist/derived/store.js +230 -0
  211. package/dist/derived/store.js.map +1 -0
  212. package/dist/embed/index.d.ts +5 -0
  213. package/dist/embed/index.d.ts.map +1 -0
  214. package/dist/embed/index.js +4 -0
  215. package/dist/embed/index.js.map +1 -0
  216. package/dist/embed/local_minilm.d.ts +9 -0
  217. package/dist/embed/local_minilm.d.ts.map +1 -0
  218. package/dist/embed/local_minilm.js +31 -0
  219. package/dist/embed/local_minilm.js.map +1 -0
  220. package/dist/embed/remote_http.d.ts +26 -0
  221. package/dist/embed/remote_http.d.ts.map +1 -0
  222. package/dist/embed/remote_http.js +40 -0
  223. package/dist/embed/remote_http.js.map +1 -0
  224. package/dist/embed/router.d.ts +16 -0
  225. package/dist/embed/router.d.ts.map +1 -0
  226. package/dist/embed/router.js +47 -0
  227. package/dist/embed/router.js.map +1 -0
  228. package/dist/embed/types.d.ts +23 -0
  229. package/dist/embed/types.d.ts.map +1 -0
  230. package/dist/embed/types.js +2 -0
  231. package/dist/embed/types.js.map +1 -0
  232. package/dist/entitlement/entitlement.d.ts +24 -0
  233. package/dist/entitlement/entitlement.d.ts.map +1 -0
  234. package/dist/entitlement/entitlement.js +78 -0
  235. package/dist/entitlement/entitlement.js.map +1 -0
  236. package/dist/entitlement/index.d.ts +2 -0
  237. package/dist/entitlement/index.d.ts.map +1 -0
  238. package/dist/entitlement/index.js +2 -0
  239. package/dist/entitlement/index.js.map +1 -0
  240. package/dist/erasure/bus.d.ts +18 -0
  241. package/dist/erasure/bus.d.ts.map +1 -0
  242. package/dist/erasure/bus.js +56 -0
  243. package/dist/erasure/bus.js.map +1 -0
  244. package/dist/erasure/changes_feed.d.ts +125 -0
  245. package/dist/erasure/changes_feed.d.ts.map +1 -0
  246. package/dist/erasure/changes_feed.js +252 -0
  247. package/dist/erasure/changes_feed.js.map +1 -0
  248. package/dist/erasure/changes_reader.d.ts +44 -0
  249. package/dist/erasure/changes_reader.d.ts.map +1 -0
  250. package/dist/erasure/changes_reader.js +184 -0
  251. package/dist/erasure/changes_reader.js.map +1 -0
  252. package/dist/erasure/feed_watcher.d.ts +140 -0
  253. package/dist/erasure/feed_watcher.d.ts.map +1 -0
  254. package/dist/erasure/feed_watcher.js +418 -0
  255. package/dist/erasure/feed_watcher.js.map +1 -0
  256. package/dist/erasure/index.d.ts +15 -0
  257. package/dist/erasure/index.d.ts.map +1 -0
  258. package/dist/erasure/index.js +8 -0
  259. package/dist/erasure/index.js.map +1 -0
  260. package/dist/erasure/index_watcher.d.ts +28 -0
  261. package/dist/erasure/index_watcher.d.ts.map +1 -0
  262. package/dist/erasure/index_watcher.js +87 -0
  263. package/dist/erasure/index_watcher.js.map +1 -0
  264. package/dist/erasure/reconcile.d.ts +72 -0
  265. package/dist/erasure/reconcile.d.ts.map +1 -0
  266. package/dist/erasure/reconcile.js +125 -0
  267. package/dist/erasure/reconcile.js.map +1 -0
  268. package/dist/erasure/withheld_store.d.ts +30 -0
  269. package/dist/erasure/withheld_store.d.ts.map +1 -0
  270. package/dist/erasure/withheld_store.js +91 -0
  271. package/dist/erasure/withheld_store.js.map +1 -0
  272. package/dist/fleet/index.d.ts +2 -0
  273. package/dist/fleet/index.d.ts.map +1 -0
  274. package/dist/fleet/index.js +2 -0
  275. package/dist/fleet/index.js.map +1 -0
  276. package/dist/fleet/knowledge.d.ts +74 -0
  277. package/dist/fleet/knowledge.d.ts.map +1 -0
  278. package/dist/fleet/knowledge.js +178 -0
  279. package/dist/fleet/knowledge.js.map +1 -0
  280. package/dist/gate/index.d.ts +5 -0
  281. package/dist/gate/index.d.ts.map +1 -0
  282. package/dist/gate/index.js +3 -0
  283. package/dist/gate/index.js.map +1 -0
  284. package/dist/gate/scope.d.ts +21 -0
  285. package/dist/gate/scope.d.ts.map +1 -0
  286. package/dist/gate/scope.js +40 -0
  287. package/dist/gate/scope.js.map +1 -0
  288. package/dist/gate/symmetry.d.ts +55 -0
  289. package/dist/gate/symmetry.d.ts.map +1 -0
  290. package/dist/gate/symmetry.js +162 -0
  291. package/dist/gate/symmetry.js.map +1 -0
  292. package/dist/history/answerable.d.ts +51 -0
  293. package/dist/history/answerable.d.ts.map +1 -0
  294. package/dist/history/answerable.js +112 -0
  295. package/dist/history/answerable.js.map +1 -0
  296. package/dist/history/index.d.ts +2 -0
  297. package/dist/history/index.d.ts.map +1 -0
  298. package/dist/history/index.js +2 -0
  299. package/dist/history/index.js.map +1 -0
  300. package/dist/host/adapter.d.ts +69 -0
  301. package/dist/host/adapter.d.ts.map +1 -0
  302. package/dist/host/adapter.js +159 -0
  303. package/dist/host/adapter.js.map +1 -0
  304. package/dist/host/cli.d.ts +3 -0
  305. package/dist/host/cli.d.ts.map +1 -0
  306. package/dist/host/cli.js +44 -0
  307. package/dist/host/cli.js.map +1 -0
  308. package/dist/host/client.d.ts +22 -0
  309. package/dist/host/client.d.ts.map +1 -0
  310. package/dist/host/client.js +135 -0
  311. package/dist/host/client.js.map +1 -0
  312. package/dist/host/compaction.d.ts +16 -0
  313. package/dist/host/compaction.d.ts.map +1 -0
  314. package/dist/host/compaction.js +89 -0
  315. package/dist/host/compaction.js.map +1 -0
  316. package/dist/host/event.d.ts +22 -0
  317. package/dist/host/event.d.ts.map +1 -0
  318. package/dist/host/event.js +47 -0
  319. package/dist/host/event.js.map +1 -0
  320. package/dist/host/index.d.ts +10 -0
  321. package/dist/host/index.d.ts.map +1 -0
  322. package/dist/host/index.js +10 -0
  323. package/dist/host/index.js.map +1 -0
  324. package/dist/host/reply.d.ts +11 -0
  325. package/dist/host/reply.d.ts.map +1 -0
  326. package/dist/host/reply.js +24 -0
  327. package/dist/host/reply.js.map +1 -0
  328. package/dist/host/session_brief.d.ts +80 -0
  329. package/dist/host/session_brief.d.ts.map +1 -0
  330. package/dist/host/session_brief.js +294 -0
  331. package/dist/host/session_brief.js.map +1 -0
  332. package/dist/host/session_start_event.d.ts +12 -0
  333. package/dist/host/session_start_event.d.ts.map +1 -0
  334. package/dist/host/session_start_event.js +35 -0
  335. package/dist/host/session_start_event.js.map +1 -0
  336. package/dist/host/sessions.d.ts +8 -0
  337. package/dist/host/sessions.d.ts.map +1 -0
  338. package/dist/host/sessions.js +32 -0
  339. package/dist/host/sessions.js.map +1 -0
  340. package/dist/host/socket_path.d.ts +3 -0
  341. package/dist/host/socket_path.d.ts.map +1 -0
  342. package/dist/host/socket_path.js +14 -0
  343. package/dist/host/socket_path.js.map +1 -0
  344. package/dist/inbound/index.d.ts +8 -0
  345. package/dist/inbound/index.d.ts.map +1 -0
  346. package/dist/inbound/index.js +5 -0
  347. package/dist/inbound/index.js.map +1 -0
  348. package/dist/index.d.ts +108 -0
  349. package/dist/index.d.ts.map +1 -0
  350. package/dist/index.js +55 -0
  351. package/dist/index.js.map +1 -0
  352. package/dist/ingest/index.d.ts +13 -0
  353. package/dist/ingest/index.d.ts.map +1 -0
  354. package/dist/ingest/index.js +146 -0
  355. package/dist/ingest/index.js.map +1 -0
  356. package/dist/ingest/parse.d.ts +20 -0
  357. package/dist/ingest/parse.d.ts.map +1 -0
  358. package/dist/ingest/parse.js +141 -0
  359. package/dist/ingest/parse.js.map +1 -0
  360. package/dist/ingest/resolve_prefix.d.ts +19 -0
  361. package/dist/ingest/resolve_prefix.d.ts.map +1 -0
  362. package/dist/ingest/resolve_prefix.js +63 -0
  363. package/dist/ingest/resolve_prefix.js.map +1 -0
  364. package/dist/ingest/types.d.ts +47 -0
  365. package/dist/ingest/types.d.ts.map +1 -0
  366. package/dist/ingest/types.js +2 -0
  367. package/dist/ingest/types.js.map +1 -0
  368. package/dist/inject/action_cue.d.ts +11 -0
  369. package/dist/inject/action_cue.d.ts.map +1 -0
  370. package/dist/inject/action_cue.js +49 -0
  371. package/dist/inject/action_cue.js.map +1 -0
  372. package/dist/inject/index.d.ts +11 -0
  373. package/dist/inject/index.d.ts.map +1 -0
  374. package/dist/inject/index.js +6 -0
  375. package/dist/inject/index.js.map +1 -0
  376. package/dist/inject/novelty.d.ts +19 -0
  377. package/dist/inject/novelty.d.ts.map +1 -0
  378. package/dist/inject/novelty.js +34 -0
  379. package/dist/inject/novelty.js.map +1 -0
  380. package/dist/inject/outcome.d.ts +20 -0
  381. package/dist/inject/outcome.d.ts.map +1 -0
  382. package/dist/inject/outcome.js +26 -0
  383. package/dist/inject/outcome.js.map +1 -0
  384. package/dist/inject/population.d.ts +6 -0
  385. package/dist/inject/population.d.ts.map +1 -0
  386. package/dist/inject/population.js +23 -0
  387. package/dist/inject/population.js.map +1 -0
  388. package/dist/inject/proactive_injector.d.ts +56 -0
  389. package/dist/inject/proactive_injector.d.ts.map +1 -0
  390. package/dist/inject/proactive_injector.js +153 -0
  391. package/dist/inject/proactive_injector.js.map +1 -0
  392. package/dist/inject/token_estimate.d.ts +3 -0
  393. package/dist/inject/token_estimate.d.ts.map +1 -0
  394. package/dist/inject/token_estimate.js +2 -0
  395. package/dist/inject/token_estimate.js.map +1 -0
  396. package/dist/inject/window.d.ts +6 -0
  397. package/dist/inject/window.d.ts.map +1 -0
  398. package/dist/inject/window.js +10 -0
  399. package/dist/inject/window.js.map +1 -0
  400. package/dist/modes/behaviour_modes.d.ts +21 -0
  401. package/dist/modes/behaviour_modes.d.ts.map +1 -0
  402. package/dist/modes/behaviour_modes.js +137 -0
  403. package/dist/modes/behaviour_modes.js.map +1 -0
  404. package/dist/policy/index.d.ts +2 -0
  405. package/dist/policy/index.d.ts.map +1 -0
  406. package/dist/policy/index.js +2 -0
  407. package/dist/policy/index.js.map +1 -0
  408. package/dist/policy/store_policy.d.ts +47 -0
  409. package/dist/policy/store_policy.d.ts.map +1 -0
  410. package/dist/policy/store_policy.js +125 -0
  411. package/dist/policy/store_policy.js.map +1 -0
  412. package/dist/profile/index.d.ts +5 -0
  413. package/dist/profile/index.d.ts.map +1 -0
  414. package/dist/profile/index.js +3 -0
  415. package/dist/profile/index.js.map +1 -0
  416. package/dist/profile/lever_profile.d.ts +27 -0
  417. package/dist/profile/lever_profile.d.ts.map +1 -0
  418. package/dist/profile/lever_profile.js +55 -0
  419. package/dist/profile/lever_profile.js.map +1 -0
  420. package/dist/profile/production.d.ts +12 -0
  421. package/dist/profile/production.d.ts.map +1 -0
  422. package/dist/profile/production.js +13 -0
  423. package/dist/profile/production.js.map +1 -0
  424. package/dist/provenance/build_fingerprint.d.ts +9 -0
  425. package/dist/provenance/build_fingerprint.d.ts.map +1 -0
  426. package/dist/provenance/build_fingerprint.js +47 -0
  427. package/dist/provenance/build_fingerprint.js.map +1 -0
  428. package/dist/provenance/derived_number.d.ts +33 -0
  429. package/dist/provenance/derived_number.d.ts.map +1 -0
  430. package/dist/provenance/derived_number.js +52 -0
  431. package/dist/provenance/derived_number.js.map +1 -0
  432. package/dist/provenance/index.d.ts +7 -0
  433. package/dist/provenance/index.d.ts.map +1 -0
  434. package/dist/provenance/index.js +4 -0
  435. package/dist/provenance/index.js.map +1 -0
  436. package/dist/provenance/live_state.d.ts +49 -0
  437. package/dist/provenance/live_state.d.ts.map +1 -0
  438. package/dist/provenance/live_state.js +141 -0
  439. package/dist/provenance/live_state.js.map +1 -0
  440. package/dist/rerank/cross_encoder.d.ts +14 -0
  441. package/dist/rerank/cross_encoder.d.ts.map +1 -0
  442. package/dist/rerank/cross_encoder.js +40 -0
  443. package/dist/rerank/cross_encoder.js.map +1 -0
  444. package/dist/rerank/identity.d.ts +6 -0
  445. package/dist/rerank/identity.d.ts.map +1 -0
  446. package/dist/rerank/identity.js +7 -0
  447. package/dist/rerank/identity.js.map +1 -0
  448. package/dist/rerank/index.d.ts +8 -0
  449. package/dist/rerank/index.d.ts.map +1 -0
  450. package/dist/rerank/index.js +5 -0
  451. package/dist/rerank/index.js.map +1 -0
  452. package/dist/rerank/reranking_retriever.d.ts +20 -0
  453. package/dist/rerank/reranking_retriever.d.ts.map +1 -0
  454. package/dist/rerank/reranking_retriever.js +38 -0
  455. package/dist/rerank/reranking_retriever.js.map +1 -0
  456. package/dist/rerank/reranking_select.d.ts +33 -0
  457. package/dist/rerank/reranking_select.d.ts.map +1 -0
  458. package/dist/rerank/reranking_select.js +116 -0
  459. package/dist/rerank/reranking_select.js.map +1 -0
  460. package/dist/rerank/types.d.ts +9 -0
  461. package/dist/rerank/types.d.ts.map +1 -0
  462. package/dist/rerank/types.js +2 -0
  463. package/dist/rerank/types.js.map +1 -0
  464. package/dist/resume/index.d.ts +3 -0
  465. package/dist/resume/index.d.ts.map +1 -0
  466. package/dist/resume/index.js +2 -0
  467. package/dist/resume/index.js.map +1 -0
  468. package/dist/resume/resume.d.ts +33 -0
  469. package/dist/resume/resume.d.ts.map +1 -0
  470. package/dist/resume/resume.js +86 -0
  471. package/dist/resume/resume.js.map +1 -0
  472. package/dist/retrieval/hnsw_store.d.ts +37 -0
  473. package/dist/retrieval/hnsw_store.d.ts.map +1 -0
  474. package/dist/retrieval/hnsw_store.js +284 -0
  475. package/dist/retrieval/hnsw_store.js.map +1 -0
  476. package/dist/retrieval/label_text.d.ts +2 -0
  477. package/dist/retrieval/label_text.d.ts.map +1 -0
  478. package/dist/retrieval/label_text.js +7 -0
  479. package/dist/retrieval/label_text.js.map +1 -0
  480. package/dist/retrieval/link_graph.d.ts +38 -0
  481. package/dist/retrieval/link_graph.d.ts.map +1 -0
  482. package/dist/retrieval/link_graph.js +118 -0
  483. package/dist/retrieval/link_graph.js.map +1 -0
  484. package/dist/retrieval/query_expansion.d.ts +18 -0
  485. package/dist/retrieval/query_expansion.d.ts.map +1 -0
  486. package/dist/retrieval/query_expansion.js +55 -0
  487. package/dist/retrieval/query_expansion.js.map +1 -0
  488. package/dist/retrieval/scope.d.ts +36 -0
  489. package/dist/retrieval/scope.d.ts.map +1 -0
  490. package/dist/retrieval/scope.js +120 -0
  491. package/dist/retrieval/scope.js.map +1 -0
  492. package/dist/retrieval/semantic.d.ts +136 -0
  493. package/dist/retrieval/semantic.d.ts.map +1 -0
  494. package/dist/retrieval/semantic.js +490 -0
  495. package/dist/retrieval/semantic.js.map +1 -0
  496. package/dist/retrieval/session_closed.d.ts +5 -0
  497. package/dist/retrieval/session_closed.d.ts.map +1 -0
  498. package/dist/retrieval/session_closed.js +8 -0
  499. package/dist/retrieval/session_closed.js.map +1 -0
  500. package/dist/retrieval/thread_lifecycle.d.ts +68 -0
  501. package/dist/retrieval/thread_lifecycle.d.ts.map +1 -0
  502. package/dist/retrieval/thread_lifecycle.js +201 -0
  503. package/dist/retrieval/thread_lifecycle.js.map +1 -0
  504. package/dist/retrieval/vector_store.d.ts +22 -0
  505. package/dist/retrieval/vector_store.d.ts.map +1 -0
  506. package/dist/retrieval/vector_store.js +41 -0
  507. package/dist/retrieval/vector_store.js.map +1 -0
  508. package/dist/retrieval/version_supersession.d.ts +13 -0
  509. package/dist/retrieval/version_supersession.d.ts.map +1 -0
  510. package/dist/retrieval/version_supersession.js +97 -0
  511. package/dist/retrieval/version_supersession.js.map +1 -0
  512. package/dist/saihm_client/federated_port.d.ts +30 -0
  513. package/dist/saihm_client/federated_port.d.ts.map +1 -0
  514. package/dist/saihm_client/federated_port.js +99 -0
  515. package/dist/saihm_client/federated_port.js.map +1 -0
  516. package/dist/saihm_client/in_memory_port.d.ts +35 -0
  517. package/dist/saihm_client/in_memory_port.d.ts.map +1 -0
  518. package/dist/saihm_client/in_memory_port.js +100 -0
  519. package/dist/saihm_client/in_memory_port.js.map +1 -0
  520. package/dist/saihm_client/index.d.ts +12 -0
  521. package/dist/saihm_client/index.d.ts.map +1 -0
  522. package/dist/saihm_client/index.js +8 -0
  523. package/dist/saihm_client/index.js.map +1 -0
  524. package/dist/saihm_client/mcp_client.d.ts +38 -0
  525. package/dist/saihm_client/mcp_client.d.ts.map +1 -0
  526. package/dist/saihm_client/mcp_client.js +266 -0
  527. package/dist/saihm_client/mcp_client.js.map +1 -0
  528. package/dist/saihm_client/server_features.d.ts +112 -0
  529. package/dist/saihm_client/server_features.d.ts.map +1 -0
  530. package/dist/saihm_client/server_features.js +415 -0
  531. package/dist/saihm_client/server_features.js.map +1 -0
  532. package/dist/saihm_client/share_guard.d.ts +9 -0
  533. package/dist/saihm_client/share_guard.d.ts.map +1 -0
  534. package/dist/saihm_client/share_guard.js +53 -0
  535. package/dist/saihm_client/share_guard.js.map +1 -0
  536. package/dist/saihm_client/timing.d.ts +100 -0
  537. package/dist/saihm_client/timing.d.ts.map +1 -0
  538. package/dist/saihm_client/timing.js +250 -0
  539. package/dist/saihm_client/timing.js.map +1 -0
  540. package/dist/saihm_client/types.d.ts +108 -0
  541. package/dist/saihm_client/types.d.ts.map +1 -0
  542. package/dist/saihm_client/types.js +19 -0
  543. package/dist/saihm_client/types.js.map +1 -0
  544. package/dist/service/handlers.d.ts +91 -0
  545. package/dist/service/handlers.d.ts.map +1 -0
  546. package/dist/service/handlers.js +173 -0
  547. package/dist/service/handlers.js.map +1 -0
  548. package/dist/service/http.d.ts +27 -0
  549. package/dist/service/http.d.ts.map +1 -0
  550. package/dist/service/http.js +261 -0
  551. package/dist/service/http.js.map +1 -0
  552. package/dist/service/index.d.ts +5 -0
  553. package/dist/service/index.d.ts.map +1 -0
  554. package/dist/service/index.js +5 -0
  555. package/dist/service/index.js.map +1 -0
  556. package/dist/service/resident.d.ts +50 -0
  557. package/dist/service/resident.d.ts.map +1 -0
  558. package/dist/service/resident.js +162 -0
  559. package/dist/service/resident.js.map +1 -0
  560. package/dist/service/service_level.d.ts +36 -0
  561. package/dist/service/service_level.d.ts.map +1 -0
  562. package/dist/service/service_level.js +65 -0
  563. package/dist/service/service_level.js.map +1 -0
  564. package/dist/session/change_feed.d.ts +82 -0
  565. package/dist/session/change_feed.d.ts.map +1 -0
  566. package/dist/session/change_feed.js +203 -0
  567. package/dist/session/change_feed.js.map +1 -0
  568. package/dist/session/index.d.ts +6 -0
  569. package/dist/session/index.d.ts.map +1 -0
  570. package/dist/session/index.js +4 -0
  571. package/dist/session/index.js.map +1 -0
  572. package/dist/session/memory_session.d.ts +426 -0
  573. package/dist/session/memory_session.d.ts.map +1 -0
  574. package/dist/session/memory_session.js +1183 -0
  575. package/dist/session/memory_session.js.map +1 -0
  576. package/dist/standing/content_fingerprint.d.ts +28 -0
  577. package/dist/standing/content_fingerprint.d.ts.map +1 -0
  578. package/dist/standing/content_fingerprint.js +95 -0
  579. package/dist/standing/content_fingerprint.js.map +1 -0
  580. package/dist/standing/standing_answers.d.ts +44 -0
  581. package/dist/standing/standing_answers.d.ts.map +1 -0
  582. package/dist/standing/standing_answers.js +72 -0
  583. package/dist/standing/standing_answers.js.map +1 -0
  584. package/dist/standing/standing_store.d.ts +44 -0
  585. package/dist/standing/standing_store.d.ts.map +1 -0
  586. package/dist/standing/standing_store.js +238 -0
  587. package/dist/standing/standing_store.js.map +1 -0
  588. package/dist/standing/surface.d.ts +20 -0
  589. package/dist/standing/surface.d.ts.map +1 -0
  590. package/dist/standing/surface.js +74 -0
  591. package/dist/standing/surface.js.map +1 -0
  592. package/dist/store/atomic_write.d.ts +7 -0
  593. package/dist/store/atomic_write.d.ts.map +1 -0
  594. package/dist/store/atomic_write.js +23 -0
  595. package/dist/store/atomic_write.js.map +1 -0
  596. package/dist/store/body_store.d.ts +42 -0
  597. package/dist/store/body_store.d.ts.map +1 -0
  598. package/dist/store/body_store.js +252 -0
  599. package/dist/store/body_store.js.map +1 -0
  600. package/dist/store/encrypted_store.d.ts +21 -0
  601. package/dist/store/encrypted_store.d.ts.map +1 -0
  602. package/dist/store/encrypted_store.js +266 -0
  603. package/dist/store/encrypted_store.js.map +1 -0
  604. package/dist/store/index.d.ts +21 -0
  605. package/dist/store/index.d.ts.map +1 -0
  606. package/dist/store/index.js +11 -0
  607. package/dist/store/index.js.map +1 -0
  608. package/dist/store/index_snapshot.d.ts +15 -0
  609. package/dist/store/index_snapshot.d.ts.map +1 -0
  610. package/dist/store/index_snapshot.js +126 -0
  611. package/dist/store/index_snapshot.js.map +1 -0
  612. package/dist/store/mcp_warm_start.d.ts +93 -0
  613. package/dist/store/mcp_warm_start.d.ts.map +1 -0
  614. package/dist/store/mcp_warm_start.js +406 -0
  615. package/dist/store/mcp_warm_start.js.map +1 -0
  616. package/dist/store/require_dir.d.ts +2 -0
  617. package/dist/store/require_dir.d.ts.map +1 -0
  618. package/dist/store/require_dir.js +9 -0
  619. package/dist/store/require_dir.js.map +1 -0
  620. package/dist/store/snapshot_format.d.ts +43 -0
  621. package/dist/store/snapshot_format.d.ts.map +1 -0
  622. package/dist/store/snapshot_format.js +119 -0
  623. package/dist/store/snapshot_format.js.map +1 -0
  624. package/dist/store/state_dir.d.ts +19 -0
  625. package/dist/store/state_dir.d.ts.map +1 -0
  626. package/dist/store/state_dir.js +42 -0
  627. package/dist/store/state_dir.js.map +1 -0
  628. package/dist/store/types.d.ts +37 -0
  629. package/dist/store/types.d.ts.map +1 -0
  630. package/dist/store/types.js +11 -0
  631. package/dist/store/types.js.map +1 -0
  632. package/dist/store/warm_index.d.ts +68 -0
  633. package/dist/store/warm_index.d.ts.map +1 -0
  634. package/dist/store/warm_index.js +279 -0
  635. package/dist/store/warm_index.js.map +1 -0
  636. package/dist/store/warm_start.d.ts +57 -0
  637. package/dist/store/warm_start.d.ts.map +1 -0
  638. package/dist/store/warm_start.js +68 -0
  639. package/dist/store/warm_start.js.map +1 -0
  640. package/dist/store/writer_lock.d.ts +34 -0
  641. package/dist/store/writer_lock.d.ts.map +1 -0
  642. package/dist/store/writer_lock.js +169 -0
  643. package/dist/store/writer_lock.js.map +1 -0
  644. package/dist/tiers/index.d.ts +2 -0
  645. package/dist/tiers/index.d.ts.map +1 -0
  646. package/dist/tiers/index.js +2 -0
  647. package/dist/tiers/index.js.map +1 -0
  648. package/dist/tiers/membership.d.ts +48 -0
  649. package/dist/tiers/membership.d.ts.map +1 -0
  650. package/dist/tiers/membership.js +85 -0
  651. package/dist/tiers/membership.js.map +1 -0
  652. package/dist/tuning/holdout.d.ts +54 -0
  653. package/dist/tuning/holdout.d.ts.map +1 -0
  654. package/dist/tuning/holdout.js +231 -0
  655. package/dist/tuning/holdout.js.map +1 -0
  656. package/dist/tuning/index.d.ts +7 -0
  657. package/dist/tuning/index.d.ts.map +1 -0
  658. package/dist/tuning/index.js +4 -0
  659. package/dist/tuning/index.js.map +1 -0
  660. package/dist/tuning/lever_stack.d.ts +27 -0
  661. package/dist/tuning/lever_stack.d.ts.map +1 -0
  662. package/dist/tuning/lever_stack.js +76 -0
  663. package/dist/tuning/lever_stack.js.map +1 -0
  664. package/dist/tuning/paired.d.ts +22 -0
  665. package/dist/tuning/paired.d.ts.map +1 -0
  666. package/dist/tuning/paired.js +74 -0
  667. package/dist/tuning/paired.js.map +1 -0
  668. package/dist/util/concurrency.d.ts +2 -0
  669. package/dist/util/concurrency.d.ts.map +1 -0
  670. package/dist/util/concurrency.js +19 -0
  671. package/dist/util/concurrency.js.map +1 -0
  672. package/package.json +161 -4
@@ -0,0 +1,72 @@
1
+ import type { IndexEntry, RecalledBody } from "../saihm_client/types.js";
2
+ export interface ReconcileCandidate {
3
+ readonly cellId: string;
4
+ readonly substrateCellId: string;
5
+ readonly probe?: string;
6
+ }
7
+ export type ReconcileVerdict = "live" | "erased" | "suspect" | "unverifiable";
8
+ export type ReconcileEvidence = "index" | "recall" | "listing" | "none";
9
+ export interface ReconcileDecision {
10
+ readonly cellId: string;
11
+ readonly substrateCellId: string;
12
+ readonly verdict: ReconcileVerdict;
13
+ readonly evidence: ReconcileEvidence;
14
+ readonly reason?: string;
15
+ readonly refetch?: boolean;
16
+ }
17
+ export type ProbeResult = {
18
+ readonly ok: true;
19
+ readonly bodies: readonly RecalledBody[];
20
+ readonly cap: number;
21
+ readonly servedBy?: string;
22
+ } | {
23
+ readonly ok: false;
24
+ readonly reason: string;
25
+ };
26
+ export interface ReconcileSummary {
27
+ readonly method: ReconcileEvidence;
28
+ readonly checked: number;
29
+ readonly live: number;
30
+ readonly erased: number;
31
+ readonly suspect: number;
32
+ readonly unverifiable: number;
33
+ readonly deferred: number;
34
+ readonly decisions: readonly ReconcileDecision[];
35
+ readonly notes: readonly string[];
36
+ }
37
+ export declare function decideFromIndex(c: ReconcileCandidate, entries: ReadonlyMap<string, IndexEntry>): ReconcileDecision;
38
+ export declare function decideFromProbe(c: ReconcileCandidate, r: ProbeResult | undefined): ReconcileDecision;
39
+ export interface ListingCandidate extends ReconcileCandidate {
40
+ readonly heldSeq?: string;
41
+ readonly heldCommitment?: string;
42
+ readonly writtenAtMs?: number;
43
+ }
44
+ export interface ListingEvidence {
45
+ readonly complete: boolean;
46
+ readonly startedAtMs: number;
47
+ readonly cells: ReadonlyMap<string, {
48
+ readonly seq: string | null;
49
+ readonly commitment?: string;
50
+ }>;
51
+ }
52
+ export interface ListingPageInput {
53
+ readonly cells: readonly {
54
+ readonly cellId: string;
55
+ readonly seq: string | null;
56
+ readonly commitment?: string;
57
+ }[];
58
+ readonly next: string | null;
59
+ readonly servedBy?: string;
60
+ }
61
+ export interface CollectedListing extends ListingEvidence {
62
+ readonly pages: number;
63
+ readonly incompleteReason?: string;
64
+ }
65
+ export declare const DEFAULT_LISTING_MAX_PAGES = 1000;
66
+ export declare function collectListing(fetchPage: (after: string | undefined) => Promise<ListingPageInput>, opts?: {
67
+ readonly maxPages?: number;
68
+ readonly now?: () => number;
69
+ }): Promise<CollectedListing>;
70
+ export declare function decideFromListing(c: ListingCandidate, l: ListingEvidence): ReconcileDecision;
71
+ export declare function summarize(method: ReconcileEvidence, decisions: readonly ReconcileDecision[], deferred: number, extraNotes?: readonly string[]): ReconcileSummary;
72
+ //# sourceMappingURL=reconcile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reconcile.d.ts","sourceRoot":"","sources":["../../src/erasure/reconcile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,125 @@
1
+ export function decideFromIndex(c, entries) {
2
+ const e = entries.get(c.substrateCellId.toLowerCase());
3
+ const base = { cellId: c.cellId, substrateCellId: c.substrateCellId, evidence: "index" };
4
+ if (e === undefined)
5
+ return { ...base, verdict: "unverifiable", reason: "not listed in the substrate's index — a listing proves presence, never absence" };
6
+ if (e.forgotten)
7
+ return { ...base, verdict: "erased", reason: "the substrate's index carries forgotten: true" };
8
+ return { ...base, verdict: "live" };
9
+ }
10
+ export function decideFromProbe(c, r) {
11
+ const base = { cellId: c.cellId, substrateCellId: c.substrateCellId, evidence: "recall" };
12
+ if (c.probe === undefined || c.probe.trim().length === 0)
13
+ return { ...base, evidence: "none", verdict: "unverifiable", reason: "no probe: the transport exposes no index and the candidate names no text to recall by" };
14
+ if (r === undefined)
15
+ return { ...base, evidence: "none", verdict: "unverifiable", reason: "not probed" };
16
+ if (!r.ok)
17
+ return { ...base, verdict: "unverifiable", reason: `probe failed: ${r.reason}` };
18
+ const want = c.substrateCellId.toLowerCase();
19
+ if (r.bodies.some((b) => b.cellId.toLowerCase() === want))
20
+ return { ...base, verdict: "live" };
21
+ if (r.servedBy !== undefined && r.servedBy !== "origin")
22
+ return { ...base, verdict: "unverifiable", reason: "the probe was answered by a replica: its freshness bounds lag, not omission — absence there is not evidence" };
23
+ if (r.bodies.length >= r.cap)
24
+ return { ...base, verdict: "unverifiable", reason: `probe result reached the transport's cap (${r.cap}); absence beyond a cap is not evidence` };
25
+ return { ...base, verdict: "suspect", reason: "the substrate returned the probe's matches without this cell and no erasure line was seen: withheld, not erased" };
26
+ }
27
+ const DECIMAL_SEQ = /^\d+$/;
28
+ export const DEFAULT_LISTING_MAX_PAGES = 1000;
29
+ export async function collectListing(fetchPage, opts = {}) {
30
+ const maxPages = opts.maxPages ?? DEFAULT_LISTING_MAX_PAGES;
31
+ if (!Number.isInteger(maxPages) || maxPages < 1)
32
+ throw new RangeError("collectListing: maxPages must be a positive integer");
33
+ const startedAtMs = (opts.now ?? Date.now)();
34
+ const cells = new Map();
35
+ const seenNext = new Set();
36
+ let after;
37
+ let pages = 0;
38
+ const partial = (incompleteReason) => ({ complete: false, startedAtMs, cells, pages, incompleteReason });
39
+ for (;;) {
40
+ if (pages >= maxPages)
41
+ return partial(`the page budget (${maxPages}) ran out before the last page`);
42
+ let page;
43
+ try {
44
+ page = await fetchPage(after);
45
+ }
46
+ catch {
47
+ return partial("a page could not be fetched");
48
+ }
49
+ pages++;
50
+ if (page.servedBy !== undefined && page.servedBy !== "origin")
51
+ return partial("a page was answered by a replica: only the origin's listing may end anything");
52
+ for (const c of page.cells) {
53
+ if (cells.has(c.cellId))
54
+ return partial("an id was listed twice: the listing is not consistent");
55
+ cells.set(c.cellId, c.commitment !== undefined ? { seq: c.seq, commitment: c.commitment } : { seq: c.seq });
56
+ }
57
+ if (page.next === null)
58
+ return { complete: true, startedAtMs, cells, pages };
59
+ if (page.next === after || seenNext.has(page.next))
60
+ return partial("`next` did not move forward");
61
+ seenNext.add(page.next);
62
+ after = page.next;
63
+ }
64
+ }
65
+ export function decideFromListing(c, l) {
66
+ const base = { cellId: c.cellId, substrateCellId: c.substrateCellId, evidence: "listing" };
67
+ let listed = l.cells.get(c.substrateCellId);
68
+ if (listed === undefined) {
69
+ const want = c.substrateCellId.toLowerCase();
70
+ for (const [id, v] of l.cells)
71
+ if (id.toLowerCase() === want) {
72
+ listed = v;
73
+ break;
74
+ }
75
+ }
76
+ if (listed !== undefined) {
77
+ if (c.heldSeq === undefined)
78
+ return { ...base, verdict: "live" };
79
+ if (listed.seq === null)
80
+ return { ...base, verdict: "live", refetch: true, reason: "listed without a version: fetch it to verify" };
81
+ const sameSeq = DECIMAL_SEQ.test(c.heldSeq) && DECIMAL_SEQ.test(listed.seq) && BigInt(c.heldSeq) === BigInt(listed.seq);
82
+ const sameCommitment = c.heldCommitment === undefined || listed.commitment === undefined || c.heldCommitment === listed.commitment;
83
+ return sameSeq && sameCommitment ? { ...base, verdict: "live" } : { ...base, verdict: "live", refetch: true, reason: "listed at another version than the one this copy was made from: fetch it again" };
84
+ }
85
+ if (!l.complete)
86
+ return { ...base, verdict: "unverifiable", reason: "not in a partial listing — only a listing paged to its end proves absence" };
87
+ if (c.writtenAtMs !== undefined && c.writtenAtMs >= l.startedAtMs) {
88
+ return { ...base, verdict: "unverifiable", reason: "confirmed after the listing started: the listing may have passed its id before it existed" };
89
+ }
90
+ return { ...base, verdict: "erased", reason: "absent from a complete listing — erased, recorded incomplete: a listing cannot show how a cell disappeared" };
91
+ }
92
+ export function summarize(method, decisions, deferred, extraNotes = []) {
93
+ let live = 0, erased = 0, suspect = 0, unverifiable = 0;
94
+ for (const d of decisions) {
95
+ if (d.verdict === "live")
96
+ live++;
97
+ else if (d.verdict === "erased")
98
+ erased++;
99
+ else if (d.verdict === "suspect")
100
+ suspect++;
101
+ else
102
+ unverifiable++;
103
+ }
104
+ const notes = [];
105
+ if (decisions.length === 0 && deferred === 0)
106
+ notes.push("no candidates: nothing could have been reconciled — this run is vacuous, not clean");
107
+ if (erased > 0) {
108
+ notes.push(method === "listing"
109
+ ? `${erased} copied row(s) ERASED: absent from a complete version listing (no erasure line seen): purged here, recorded incomplete`
110
+ : `${erased} copied row(s) ERASED on the substrate's index (forgotten there, no erasure line seen): purged here`);
111
+ }
112
+ const refetch = decisions.filter((d) => d.refetch === true).length;
113
+ if (refetch > 0)
114
+ notes.push(`${refetch} copied row(s) live at a NEWER version: fetched again`);
115
+ if (suspect > 0)
116
+ notes.push(`${suspect} copied row(s) WITHHELD: the substrate no longer returns them for their own text and no erasure line was seen — served again when a later run finds them`);
117
+ if (unverifiable > 0)
118
+ notes.push(`${unverifiable} candidate(s) UNVERIFIABLE (not listed, a partial listing, written during the listing, capped or failed probe, or no probe): unchanged, still served`);
119
+ if (deferred > 0)
120
+ notes.push(`${deferred} candidate(s) DEFERRED by the per-run probe budget: unchanged, still served`);
121
+ for (const n of extraNotes)
122
+ notes.push(n);
123
+ return { method, checked: decisions.length, live, erased, suspect, unverifiable, deferred, decisions, notes };
124
+ }
125
+ //# sourceMappingURL=reconcile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reconcile.js","sourceRoot":"","sources":["../../src/erasure/reconcile.ts"],"names":[],"mappings":"AAoCA,MAAM,UAAU,eAAe,CAAC,CAAqB,EAAE,OAAwC;IAC7F,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC,CAAC;IACvD,MAAM,IAAI,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC,eAAe,EAAE,QAAQ,EAAE,OAAgB,EAAE,CAAC;IAClG,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,gFAAgF,EAAE,CAAC;IAC3J,IAAI,CAAC,CAAC,SAAS;QAAE,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,+CAA+C,EAAE,CAAC;IAChH,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,CAAqB,EAAE,CAA0B;IAC/E,MAAM,IAAI,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC,eAAe,EAAE,QAAQ,EAAE,QAAiB,EAAE,CAAC;IACnG,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,uFAAuF,EAAE,CAAC;IACzN,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;IACzG,IAAI,CAAC,CAAC,CAAC,EAAE;QAAE,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;IAC5F,MAAM,IAAI,GAAG,CAAC,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC;IAC7C,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC;QAAE,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAC/F,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,CAAC,QAAQ,KAAK,QAAQ;QAAE,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,6GAA6G,EAAE,CAAC;IAC5N,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG;QAAE,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,6CAA6C,CAAC,CAAC,GAAG,yCAAyC,EAAE,CAAC;IAC/K,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,iHAAiH,EAAE,CAAC;AACpK,CAAC;AAcD,MAAM,WAAW,GAAG,OAAO,CAAC;AAa5B,MAAM,CAAC,MAAM,yBAAyB,GAAG,IAAI,CAAC;AAE9C,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,SAAmE,EACnE,OAAoE,EAAE;IAEtE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,yBAAyB,CAAC;IAC5D,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,qDAAqD,CAAC,CAAC;IAC7H,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IAC7C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAyE,CAAC;IAC/F,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,IAAI,KAAyB,CAAC;IAC9B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,MAAM,OAAO,GAAG,CAAC,gBAAwB,EAAoB,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC;IACnI,SAAS,CAAC;QACR,IAAI,KAAK,IAAI,QAAQ;YAAE,OAAO,OAAO,CAAC,oBAAoB,QAAQ,gCAAgC,CAAC,CAAC;QACpG,IAAI,IAAsB,CAAC;QAC3B,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,OAAO,CAAC,6BAA6B,CAAC,CAAC;QAChD,CAAC;QACD,KAAK,EAAE,CAAC;QACR,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ;YAAE,OAAO,OAAO,CAAC,8EAA8E,CAAC,CAAC;QAC9J,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC3B,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;gBAAE,OAAO,OAAO,CAAC,uDAAuD,CAAC,CAAC;YACjG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QAC9G,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI;YAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QAC7E,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,OAAO,CAAC,6BAA6B,CAAC,CAAC;QAClG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;IACpB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,CAAmB,EAAE,CAAkB;IACvE,MAAM,IAAI,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC,eAAe,EAAE,QAAQ,EAAE,SAAkB,EAAE,CAAC;IACpG,IAAI,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;IAC5C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,CAAC,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC;QAC7C,KAAK,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK;YAAE,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE,CAAC;gBAAC,MAAM,GAAG,CAAC,CAAC;gBAAC,MAAM;YAAC,CAAC;IACtF,CAAC;IACD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,IAAI,CAAC,CAAC,OAAO,KAAK,SAAS;YAAE,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QACjE,IAAI,MAAM,CAAC,GAAG,KAAK,IAAI;YAAE,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,8CAA8C,EAAE,CAAC;QACpI,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACxH,MAAM,cAAc,GAAG,CAAC,CAAC,cAAc,KAAK,SAAS,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,IAAI,CAAC,CAAC,cAAc,KAAK,MAAM,CAAC,UAAU,CAAC;QACnI,OAAO,OAAO,IAAI,cAAc,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,gFAAgF,EAAE,CAAC;IAC1M,CAAC;IACD,IAAI,CAAC,CAAC,CAAC,QAAQ;QAAE,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,2EAA2E,EAAE,CAAC;IAClJ,IAAI,CAAC,CAAC,WAAW,KAAK,SAAS,IAAI,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;QAClE,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,2FAA2F,EAAE,CAAC;IACnJ,CAAC;IACD,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,4GAA4G,EAAE,CAAC;AAC9J,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,MAAyB,EAAE,SAAuC,EAAE,QAAgB,EAAE,aAAgC,EAAE;IAChJ,IAAI,IAAI,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,YAAY,GAAG,CAAC,CAAC;IACxD,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,IAAI,CAAC,CAAC,OAAO,KAAK,MAAM;YAAE,IAAI,EAAE,CAAC;aAC5B,IAAI,CAAC,CAAC,OAAO,KAAK,QAAQ;YAAE,MAAM,EAAE,CAAC;aACrC,IAAI,CAAC,CAAC,OAAO,KAAK,SAAS;YAAE,OAAO,EAAE,CAAC;;YACvC,YAAY,EAAE,CAAC;IACtB,CAAC;IACD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,KAAK,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,oFAAoF,CAAC,CAAC;IAC/I,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS;YAC7B,CAAC,CAAC,GAAG,MAAM,wHAAwH;YACnI,CAAC,CAAC,GAAG,MAAM,qGAAqG,CAAC,CAAC;IACtH,CAAC;IACD,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,MAAM,CAAC;IACnE,IAAI,OAAO,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,uDAAuD,CAAC,CAAC;IAC/F,IAAI,OAAO,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,0JAA0J,CAAC,CAAC;IAClM,IAAI,YAAY,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,YAAY,sJAAsJ,CAAC,CAAC;IACxM,IAAI,QAAQ,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,6EAA6E,CAAC,CAAC;IACvH,KAAK,MAAM,CAAC,IAAI,UAAU;QAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1C,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAChH,CAAC"}
@@ -0,0 +1,30 @@
1
+ export declare const WITHHELD_FILE_VERSION = 1;
2
+ export interface WithheldStore {
3
+ load(): Promise<readonly string[] | undefined>;
4
+ save(cellIds: readonly string[]): Promise<void>;
5
+ quarantine?(): Promise<string | undefined>;
6
+ }
7
+ export declare class MemoryWithheldStore implements WithheldStore {
8
+ private ids;
9
+ quarantine(): Promise<string | undefined>;
10
+ load(): Promise<readonly string[] | undefined>;
11
+ save(cellIds: readonly string[]): Promise<void>;
12
+ }
13
+ export declare class WithheldStoreCorruptError extends Error {
14
+ readonly path: string;
15
+ constructor(path: string, detail: string);
16
+ }
17
+ export interface FileWithheldStoreOptions {
18
+ readonly owner?: string;
19
+ }
20
+ export declare class FileWithheldStore implements WithheldStore {
21
+ readonly path: string;
22
+ readonly opts: FileWithheldStoreOptions;
23
+ lastLoadedOwner: string | null | undefined;
24
+ constructor(path: string, opts?: FileWithheldStoreOptions);
25
+ probeWritable(): Promise<void>;
26
+ load(): Promise<readonly string[] | undefined>;
27
+ quarantine(): Promise<string | undefined>;
28
+ save(cellIds: readonly string[]): Promise<void>;
29
+ }
30
+ //# sourceMappingURL=withheld_store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"withheld_store.d.ts","sourceRoot":"","sources":["../../src/erasure/withheld_store.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,qBAAqB,IAAI,CAAC;AAEvC,MAAM,WAAW,aAAa;IAC5B,IAAI,IAAI,OAAO,CAAC,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC;IAC/C,IAAI,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,UAAU,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;CAC5C;AAED,qBAAa,mBAAoB,YAAW,aAAa;IACvD,OAAO,CAAC,GAAG,CAAgC;IACrC,UAAU,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAGzC,IAAI,IAAI,OAAO,CAAC,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IAG9C,IAAI,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAGtD;AAED,qBAAa,yBAA0B,SAAQ,KAAK;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM;gBAAZ,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAIlD;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,iBAAkB,YAAW,aAAa;IAGzC,QAAQ,CAAC,IAAI,EAAE,MAAM;IAAE,QAAQ,CAAC,IAAI,EAAE,wBAAwB;IAF1E,eAAe,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;gBAEtB,IAAI,EAAE,MAAM,EAAW,IAAI,GAAE,wBAA6B;IAIzE,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ9B,IAAI,IAAI,OAAO,CAAC,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IA4B9C,UAAU,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAWzC,IAAI,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAItD"}
@@ -0,0 +1,91 @@
1
+ import { open, readFile, rename, unlink } from "node:fs/promises";
2
+ import { writeFileAtomic } from "../store/atomic_write.js";
3
+ import { assertStateDir, ensureStateDir } from "../store/state_dir.js";
4
+ import { dirname } from "node:path";
5
+ import { randomBytes } from "node:crypto";
6
+ export const WITHHELD_FILE_VERSION = 1;
7
+ export class MemoryWithheldStore {
8
+ ids;
9
+ async quarantine() {
10
+ return undefined;
11
+ }
12
+ async load() {
13
+ return this.ids;
14
+ }
15
+ async save(cellIds) {
16
+ this.ids = [...cellIds];
17
+ }
18
+ }
19
+ export class WithheldStoreCorruptError extends Error {
20
+ path;
21
+ constructor(path, detail) {
22
+ super(`withheld store ${path}: ${detail}`);
23
+ this.path = path;
24
+ this.name = "WithheldStoreCorruptError";
25
+ }
26
+ }
27
+ export class FileWithheldStore {
28
+ path;
29
+ opts;
30
+ lastLoadedOwner;
31
+ constructor(path, opts = {}) {
32
+ this.path = path;
33
+ this.opts = opts;
34
+ assertStateDir("FileWithheldStore", dirname(path));
35
+ }
36
+ async probeWritable() {
37
+ await ensureStateDir("FileWithheldStore", dirname(this.path));
38
+ const probe = `${this.path}.probe.${process.pid}.${randomBytes(6).toString("hex")}`;
39
+ const fh = await open(probe, "wx", 0o600);
40
+ await fh.close();
41
+ await unlink(probe);
42
+ }
43
+ async load() {
44
+ assertStateDir("FileWithheldStore", dirname(this.path));
45
+ let text;
46
+ try {
47
+ text = await readFile(this.path, "utf8");
48
+ }
49
+ catch (e) {
50
+ if (e.code === "ENOENT") {
51
+ this.lastLoadedOwner = null;
52
+ return undefined;
53
+ }
54
+ throw new WithheldStoreCorruptError(this.path, `unreadable: ${e instanceof Error ? e.message : String(e)}`);
55
+ }
56
+ let o;
57
+ try {
58
+ o = JSON.parse(text);
59
+ }
60
+ catch {
61
+ throw new WithheldStoreCorruptError(this.path, "not JSON");
62
+ }
63
+ if (typeof o !== "object" || o === null)
64
+ throw new WithheldStoreCorruptError(this.path, "not an object");
65
+ const { v, withheld, owner } = o;
66
+ if (v !== WITHHELD_FILE_VERSION)
67
+ throw new WithheldStoreCorruptError(this.path, `version ${String(v)} is not ${WITHHELD_FILE_VERSION}`);
68
+ if (!Array.isArray(withheld) || !withheld.every((x) => typeof x === "string" && x.length > 0)) {
69
+ throw new WithheldStoreCorruptError(this.path, "`withheld` is not a list of non-empty ids");
70
+ }
71
+ this.lastLoadedOwner = typeof owner === "string" && owner.length > 0 ? owner : null;
72
+ return [...new Set(withheld)].sort();
73
+ }
74
+ async quarantine() {
75
+ const to = `${this.path}.corrupt.${new Date().toISOString().replace(/[:.]/g, "-")}`;
76
+ try {
77
+ await rename(this.path, to);
78
+ return to;
79
+ }
80
+ catch (e) {
81
+ if (e.code === "ENOENT")
82
+ return undefined;
83
+ throw e;
84
+ }
85
+ }
86
+ async save(cellIds) {
87
+ await ensureStateDir("FileWithheldStore", dirname(this.path));
88
+ await writeFileAtomic(this.path, JSON.stringify({ v: WITHHELD_FILE_VERSION, withheld: [...new Set(cellIds)].sort(), ...(this.opts.owner !== undefined ? { owner: this.opts.owner } : {}) }));
89
+ }
90
+ }
91
+ //# sourceMappingURL=withheld_store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"withheld_store.js","sourceRoot":"","sources":["../../src/erasure/withheld_store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { assembleFleetReport, renderFleetReport, LARGEST_CLUSTERS, type FleetRow, type FleetPolicy, type FleetFlag, type FleetPartition, type ClusterSummary, type FleetConcentration, type FleetVerdict, type FleetReport, type FleetInput, } from "./knowledge.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/fleet/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,UAAU,GAChB,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { assembleFleetReport, renderFleetReport, LARGEST_CLUSTERS, } from "./knowledge.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/fleet/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,GAUjB,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,74 @@
1
+ import type { RedundancyCluster } from "../consolidate/consolidator.js";
2
+ export interface FleetRow {
3
+ readonly cellId: string;
4
+ readonly ingestEpoch?: number;
5
+ readonly namespace: string;
6
+ readonly thread?: string;
7
+ readonly supersededBy?: string;
8
+ readonly retiredBy?: string;
9
+ readonly derived?: true;
10
+ }
11
+ export interface FleetPolicy {
12
+ readonly thinBelow?: number;
13
+ readonly staleAfterHours?: number;
14
+ readonly driftWindowHours?: number;
15
+ }
16
+ export type FleetFlag = "thin" | "stale";
17
+ export interface FleetPartition {
18
+ readonly key: string;
19
+ readonly cells: number;
20
+ readonly share: number;
21
+ readonly unstamped: number;
22
+ readonly oldest?: number;
23
+ readonly newest?: number;
24
+ readonly ageHours?: number;
25
+ readonly superseded: number;
26
+ readonly supersessionRate: number;
27
+ readonly recentSupersessions?: number;
28
+ readonly retired: number;
29
+ readonly derived: number;
30
+ readonly flags: readonly FleetFlag[];
31
+ }
32
+ export interface ClusterSummary {
33
+ readonly namespace: string;
34
+ readonly size: number;
35
+ readonly minSim: number;
36
+ readonly cellIds: readonly string[];
37
+ }
38
+ export type FleetConcentration = {
39
+ readonly status: "computed";
40
+ readonly clusters: number;
41
+ readonly redundantCells: number;
42
+ readonly redundancyRate: number;
43
+ readonly byNamespace: readonly {
44
+ readonly namespace: string;
45
+ readonly clusters: number;
46
+ readonly redundantCells: number;
47
+ }[];
48
+ readonly largest: readonly ClusterSummary[];
49
+ } | {
50
+ readonly status: "not-computed";
51
+ };
52
+ export type FleetVerdict = "assembled" | "empty";
53
+ export interface FleetReport {
54
+ readonly verdict: FleetVerdict;
55
+ readonly fleet: FleetPartition;
56
+ readonly namespaces: readonly FleetPartition[];
57
+ readonly threads: readonly FleetPartition[];
58
+ readonly unthreaded: number;
59
+ readonly concentration: FleetConcentration;
60
+ readonly policy: FleetPolicy;
61
+ readonly nowEpoch?: number;
62
+ readonly notes: readonly string[];
63
+ }
64
+ export interface FleetInput {
65
+ readonly rows: readonly FleetRow[];
66
+ readonly clusters?: readonly RedundancyCluster[];
67
+ readonly nowEpoch?: number;
68
+ readonly policy?: FleetPolicy;
69
+ readonly epochOf?: (cellId: string) => number | undefined;
70
+ }
71
+ export declare const LARGEST_CLUSTERS = 5;
72
+ export declare function assembleFleetReport(input: FleetInput): FleetReport;
73
+ export declare function renderFleetReport(r: FleetReport): string;
74
+ //# sourceMappingURL=knowledge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge.d.ts","sourceRoot":"","sources":["../../src/fleet/knowledge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAExE,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACpC;AAED,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;AAEzC,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,CAAC;CACtC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAED,MAAM,MAAM,kBAAkB,GAC1B;IACE,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,SAAS;QAAE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC5H,QAAQ,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,CAAC;CAC7C,GACD;IAAE,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAA;CAAE,CAAC;AAExC,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,OAAO,CAAC;AAEjD,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,SAAS,cAAc,EAAE,CAAC;IAC/C,QAAQ,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,CAAC;IAC5C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,kBAAkB,CAAC;IAC3C,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,SAAS,QAAQ,EAAE,CAAC;IACnC,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACjD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;CAC3D;AAED,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAgGlC,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,UAAU,GAAG,WAAW,CAyBlE;AAoBD,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,WAAW,GAAG,MAAM,CAoBxD"}
@@ -0,0 +1,178 @@
1
+ export const LARGEST_CLUSTERS = 5;
2
+ const finitePos = (v) => v !== undefined && Number.isFinite(v) && v > 0;
3
+ const finiteNonNeg = (v) => v !== undefined && Number.isFinite(v) && v >= 0;
4
+ function partition(key, rows, fleetCells, input) {
5
+ const policy = input.policy ?? {};
6
+ let oldest;
7
+ let newest;
8
+ let unstamped = 0;
9
+ let superseded = 0;
10
+ let retired = 0;
11
+ let derived = 0;
12
+ const windowEvaluable = finiteNonNeg(input.nowEpoch) && finiteNonNeg(policy.driftWindowHours) && input.epochOf !== undefined;
13
+ let recent = 0;
14
+ for (const r of rows) {
15
+ if (finitePos(r.ingestEpoch)) {
16
+ if (oldest === undefined || r.ingestEpoch < oldest)
17
+ oldest = r.ingestEpoch;
18
+ if (newest === undefined || r.ingestEpoch > newest)
19
+ newest = r.ingestEpoch;
20
+ }
21
+ else {
22
+ unstamped++;
23
+ }
24
+ if (r.supersededBy !== undefined) {
25
+ superseded++;
26
+ if (windowEvaluable) {
27
+ const at = input.epochOf(r.supersededBy);
28
+ if (finitePos(at) && at >= input.nowEpoch - policy.driftWindowHours)
29
+ recent++;
30
+ }
31
+ }
32
+ if (r.retiredBy !== undefined)
33
+ retired++;
34
+ if (r.derived === true)
35
+ derived++;
36
+ }
37
+ const cells = rows.length;
38
+ const ageHours = finiteNonNeg(input.nowEpoch) && newest !== undefined ? input.nowEpoch - newest : undefined;
39
+ const flags = [];
40
+ if (finiteNonNeg(policy.thinBelow) && cells < policy.thinBelow)
41
+ flags.push("thin");
42
+ if (finiteNonNeg(policy.staleAfterHours) && ageHours !== undefined && ageHours > policy.staleAfterHours)
43
+ flags.push("stale");
44
+ return {
45
+ key,
46
+ cells,
47
+ share: fleetCells === 0 ? 0 : cells / fleetCells,
48
+ unstamped,
49
+ ...(oldest !== undefined ? { oldest } : {}),
50
+ ...(newest !== undefined ? { newest } : {}),
51
+ ...(ageHours !== undefined ? { ageHours } : {}),
52
+ superseded,
53
+ supersessionRate: cells === 0 ? 0 : superseded / cells,
54
+ ...(windowEvaluable ? { recentSupersessions: recent } : {}),
55
+ retired,
56
+ derived,
57
+ flags,
58
+ };
59
+ }
60
+ function groupBy(rows, keyOf) {
61
+ const out = new Map();
62
+ for (const r of rows) {
63
+ const k = keyOf(r);
64
+ if (k === undefined)
65
+ continue;
66
+ const g = out.get(k);
67
+ if (g)
68
+ g.push(r);
69
+ else
70
+ out.set(k, [r]);
71
+ }
72
+ return out;
73
+ }
74
+ const bySizeThenKey = (a, b) => b.cells - a.cells || (a.key < b.key ? -1 : a.key > b.key ? 1 : 0);
75
+ function concentration(clusters, fleetCells) {
76
+ if (clusters === undefined)
77
+ return { status: "not-computed" };
78
+ const byNs = new Map();
79
+ let redundantCells = 0;
80
+ for (const c of clusters) {
81
+ const extra = Math.max(0, c.cellIds.length - 1);
82
+ redundantCells += extra;
83
+ const g = byNs.get(c.namespace) ?? { clusters: 0, redundantCells: 0 };
84
+ g.clusters++;
85
+ g.redundantCells += extra;
86
+ byNs.set(c.namespace, g);
87
+ }
88
+ const largest = [...clusters]
89
+ .sort((a, b) => b.cellIds.length - a.cellIds.length || (a.namespace < b.namespace ? -1 : a.namespace > b.namespace ? 1 : 0))
90
+ .slice(0, LARGEST_CLUSTERS)
91
+ .map((c) => ({ namespace: c.namespace, size: c.cellIds.length, minSim: c.minSim, cellIds: c.cellIds }));
92
+ return {
93
+ status: "computed",
94
+ clusters: clusters.length,
95
+ redundantCells,
96
+ redundancyRate: fleetCells === 0 ? 0 : redundantCells / fleetCells,
97
+ byNamespace: [...byNs.entries()]
98
+ .map(([namespace, g]) => ({ namespace, ...g }))
99
+ .sort((a, b) => b.redundantCells - a.redundantCells || (a.namespace < b.namespace ? -1 : a.namespace > b.namespace ? 1 : 0)),
100
+ largest,
101
+ };
102
+ }
103
+ export function assembleFleetReport(input) {
104
+ const rows = input.rows;
105
+ const policy = input.policy ?? {};
106
+ const fleet = partition("fleet", rows, rows.length, input);
107
+ const namespaces = [...groupBy(rows, (r) => r.namespace).entries()].map(([k, g]) => partition(k, g, rows.length, input)).sort(bySizeThenKey);
108
+ const threads = [...groupBy(rows, (r) => r.thread).entries()].map(([k, g]) => partition(k, g, rows.length, input)).sort(bySizeThenKey);
109
+ const unthreaded = rows.filter((r) => r.thread === undefined).length;
110
+ const notes = [];
111
+ if (!finiteNonNeg(policy.thinBelow) && !finiteNonNeg(policy.staleAfterHours))
112
+ notes.push("no thinness/staleness policy supplied: no partition is flagged");
113
+ else if (finiteNonNeg(policy.staleAfterHours) && !finiteNonNeg(input.nowEpoch))
114
+ notes.push("staleAfterHours needs nowEpoch: no partition is flagged stale");
115
+ if (!finiteNonNeg(input.nowEpoch))
116
+ notes.push("no nowEpoch: ages not computed");
117
+ if (finiteNonNeg(policy.driftWindowHours) && (!finiteNonNeg(input.nowEpoch) || input.epochOf === undefined))
118
+ notes.push("driftWindowHours needs nowEpoch and epochOf: recent supersessions not counted");
119
+ if (input.clusters === undefined)
120
+ notes.push("clusters not supplied: concentration not computed");
121
+ if (fleet.unstamped > 0)
122
+ notes.push(`${fleet.unstamped} row(s) carry no ingest epoch and take part in no age`);
123
+ return {
124
+ verdict: rows.length === 0 ? "empty" : "assembled",
125
+ fleet,
126
+ namespaces,
127
+ threads,
128
+ unthreaded,
129
+ concentration: concentration(input.clusters, rows.length),
130
+ policy,
131
+ ...(finiteNonNeg(input.nowEpoch) ? { nowEpoch: input.nowEpoch } : {}),
132
+ notes,
133
+ };
134
+ }
135
+ const pct = (x) => `${(x * 100).toFixed(1)}%`;
136
+ function partitionLine(p) {
137
+ const bits = [
138
+ `${p.cells} cell(s)`,
139
+ pct(p.share),
140
+ p.oldest !== undefined && p.newest !== undefined ? `@${p.oldest}h..@${p.newest}h` : "undated",
141
+ p.ageHours !== undefined ? `age ${p.ageHours}h` : "",
142
+ p.unstamped > 0 ? `unstamped ${p.unstamped}` : "",
143
+ `superseded ${p.superseded} (${pct(p.supersessionRate)})`,
144
+ p.recentSupersessions !== undefined ? `recent ${p.recentSupersessions}` : "",
145
+ p.retired > 0 ? `retired ${p.retired}` : "",
146
+ p.derived > 0 ? `derived ${p.derived}` : "",
147
+ p.flags.length > 0 ? `[${p.flags.join(",")}]` : "",
148
+ ].filter((b) => b !== "");
149
+ return `${p.key}: ${bits.join(" · ")}`;
150
+ }
151
+ export function renderFleetReport(r) {
152
+ const lines = [];
153
+ lines.push(`FLEET — ${r.verdict} · ${partitionLine(r.fleet)}`);
154
+ lines.push(` namespaces (${r.namespaces.length}):`);
155
+ for (const p of r.namespaces)
156
+ lines.push(` ${partitionLine(p)}`);
157
+ lines.push(` threads (${r.threads.length}; unthreaded ${r.unthreaded}):`);
158
+ for (const p of r.threads)
159
+ lines.push(` ${partitionLine(p)}`);
160
+ if (r.concentration.status === "computed") {
161
+ const c = r.concentration;
162
+ lines.push(` concentration: ${c.clusters} cluster(s) · redundant ${c.redundantCells} (${pct(c.redundancyRate)})`);
163
+ for (const n of c.byNamespace)
164
+ lines.push(` ${n.namespace}: ${n.clusters} cluster(s), redundant ${n.redundantCells}`);
165
+ for (const l of c.largest)
166
+ lines.push(` largest: ${l.namespace} ×${l.size} minSim ${l.minSim.toFixed(3)} [${l.cellIds.join(", ")}]`);
167
+ }
168
+ else {
169
+ lines.push(" concentration: not computed");
170
+ }
171
+ if (r.notes.length > 0) {
172
+ lines.push(" notes:");
173
+ for (const n of r.notes)
174
+ lines.push(` ${n}`);
175
+ }
176
+ return lines.join("\n");
177
+ }
178
+ //# sourceMappingURL=knowledge.js.map