@legioncodeinc/nectar 0.0.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 (467) hide show
  1. package/LICENSE.md +662 -0
  2. package/README.md +307 -0
  3. package/dist/api/daemon-api-wiring.d.ts +72 -0
  4. package/dist/api/daemon-api-wiring.d.ts.map +1 -0
  5. package/dist/api/daemon-api-wiring.js +150 -0
  6. package/dist/api/daemon-api-wiring.js.map +1 -0
  7. package/dist/api/hive-graph-api.d.ts +136 -0
  8. package/dist/api/hive-graph-api.d.ts.map +1 -0
  9. package/dist/api/hive-graph-api.js +234 -0
  10. package/dist/api/hive-graph-api.js.map +1 -0
  11. package/dist/api/loopback-client.d.ts +27 -0
  12. package/dist/api/loopback-client.d.ts.map +1 -0
  13. package/dist/api/loopback-client.js +87 -0
  14. package/dist/api/loopback-client.js.map +1 -0
  15. package/dist/api/router.d.ts +172 -0
  16. package/dist/api/router.d.ts.map +1 -0
  17. package/dist/api/router.js +212 -0
  18. package/dist/api/router.js.map +1 -0
  19. package/dist/api/status-query.d.ts +49 -0
  20. package/dist/api/status-query.d.ts.map +1 -0
  21. package/dist/api/status-query.js +103 -0
  22. package/dist/api/status-query.js.map +1 -0
  23. package/dist/brood-guard.d.ts +24 -0
  24. package/dist/brood-guard.d.ts.map +1 -0
  25. package/dist/brood-guard.js +19 -0
  26. package/dist/brood-guard.js.map +1 -0
  27. package/dist/brood-prereqs.d.ts +62 -0
  28. package/dist/brood-prereqs.d.ts.map +1 -0
  29. package/dist/brood-prereqs.js +87 -0
  30. package/dist/brood-prereqs.js.map +1 -0
  31. package/dist/brooding/bucketing.d.ts +68 -0
  32. package/dist/brooding/bucketing.d.ts.map +1 -0
  33. package/dist/brooding/bucketing.js +122 -0
  34. package/dist/brooding/bucketing.js.map +1 -0
  35. package/dist/brooding/cli.d.ts +78 -0
  36. package/dist/brooding/cli.d.ts.map +1 -0
  37. package/dist/brooding/cli.js +140 -0
  38. package/dist/brooding/cli.js.map +1 -0
  39. package/dist/brooding/constants.d.ts +75 -0
  40. package/dist/brooding/constants.d.ts.map +1 -0
  41. package/dist/brooding/constants.js +91 -0
  42. package/dist/brooding/constants.js.map +1 -0
  43. package/dist/brooding/cost.d.ts +110 -0
  44. package/dist/brooding/cost.d.ts.map +1 -0
  45. package/dist/brooding/cost.js +96 -0
  46. package/dist/brooding/cost.js.map +1 -0
  47. package/dist/brooding/describe.d.ts +152 -0
  48. package/dist/brooding/describe.d.ts.map +1 -0
  49. package/dist/brooding/describe.js +281 -0
  50. package/dist/brooding/describe.js.map +1 -0
  51. package/dist/brooding/discovery.d.ts +116 -0
  52. package/dist/brooding/discovery.d.ts.map +1 -0
  53. package/dist/brooding/discovery.js +179 -0
  54. package/dist/brooding/discovery.js.map +1 -0
  55. package/dist/brooding/index.d.ts +23 -0
  56. package/dist/brooding/index.d.ts.map +1 -0
  57. package/dist/brooding/index.js +33 -0
  58. package/dist/brooding/index.js.map +1 -0
  59. package/dist/brooding/pipeline-async.d.ts +97 -0
  60. package/dist/brooding/pipeline-async.d.ts.map +1 -0
  61. package/dist/brooding/pipeline-async.js +364 -0
  62. package/dist/brooding/pipeline-async.js.map +1 -0
  63. package/dist/brooding/pipeline.d.ts +198 -0
  64. package/dist/brooding/pipeline.d.ts.map +1 -0
  65. package/dist/brooding/pipeline.js +454 -0
  66. package/dist/brooding/pipeline.js.map +1 -0
  67. package/dist/brooding/precheck.d.ts +52 -0
  68. package/dist/brooding/precheck.d.ts.map +1 -0
  69. package/dist/brooding/precheck.js +143 -0
  70. package/dist/brooding/precheck.js.map +1 -0
  71. package/dist/brooding/resumability.d.ts +57 -0
  72. package/dist/brooding/resumability.d.ts.map +1 -0
  73. package/dist/brooding/resumability.js +46 -0
  74. package/dist/brooding/resumability.js.map +1 -0
  75. package/dist/cli.d.ts +139 -0
  76. package/dist/cli.d.ts.map +1 -0
  77. package/dist/cli.js +912 -0
  78. package/dist/cli.js.map +1 -0
  79. package/dist/config-file.d.ts +52 -0
  80. package/dist/config-file.d.ts.map +1 -0
  81. package/dist/config-file.js +130 -0
  82. package/dist/config-file.js.map +1 -0
  83. package/dist/config.d.ts +49 -0
  84. package/dist/config.d.ts.map +1 -0
  85. package/dist/config.js +98 -0
  86. package/dist/config.js.map +1 -0
  87. package/dist/daemon.d.ts +265 -0
  88. package/dist/daemon.d.ts.map +1 -0
  89. package/dist/daemon.js +664 -0
  90. package/dist/daemon.js.map +1 -0
  91. package/dist/doctor-registry.d.ts +134 -0
  92. package/dist/doctor-registry.d.ts.map +1 -0
  93. package/dist/doctor-registry.js +173 -0
  94. package/dist/doctor-registry.js.map +1 -0
  95. package/dist/embeddings/cohere-portkey.d.ts +67 -0
  96. package/dist/embeddings/cohere-portkey.d.ts.map +1 -0
  97. package/dist/embeddings/cohere-portkey.js +171 -0
  98. package/dist/embeddings/cohere-portkey.js.map +1 -0
  99. package/dist/embeddings/config.d.ts +74 -0
  100. package/dist/embeddings/config.d.ts.map +1 -0
  101. package/dist/embeddings/config.js +131 -0
  102. package/dist/embeddings/config.js.map +1 -0
  103. package/dist/embeddings/guard.d.ts +34 -0
  104. package/dist/embeddings/guard.d.ts.map +1 -0
  105. package/dist/embeddings/guard.js +67 -0
  106. package/dist/embeddings/guard.js.map +1 -0
  107. package/dist/embeddings/hosted-portkey.d.ts +73 -0
  108. package/dist/embeddings/hosted-portkey.d.ts.map +1 -0
  109. package/dist/embeddings/hosted-portkey.js +179 -0
  110. package/dist/embeddings/hosted-portkey.js.map +1 -0
  111. package/dist/embeddings/http.d.ts +33 -0
  112. package/dist/embeddings/http.d.ts.map +1 -0
  113. package/dist/embeddings/http.js +19 -0
  114. package/dist/embeddings/http.js.map +1 -0
  115. package/dist/embeddings/index.d.ts +17 -0
  116. package/dist/embeddings/index.d.ts.map +1 -0
  117. package/dist/embeddings/index.js +17 -0
  118. package/dist/embeddings/index.js.map +1 -0
  119. package/dist/embeddings/local-nomic.d.ts +78 -0
  120. package/dist/embeddings/local-nomic.d.ts.map +1 -0
  121. package/dist/embeddings/local-nomic.js +126 -0
  122. package/dist/embeddings/local-nomic.js.map +1 -0
  123. package/dist/embeddings/provider.d.ts +79 -0
  124. package/dist/embeddings/provider.d.ts.map +1 -0
  125. package/dist/embeddings/provider.js +50 -0
  126. package/dist/embeddings/provider.js.map +1 -0
  127. package/dist/enricher/config.d.ts +43 -0
  128. package/dist/enricher/config.d.ts.map +1 -0
  129. package/dist/enricher/config.js +34 -0
  130. package/dist/enricher/config.js.map +1 -0
  131. package/dist/enricher/content-cache.d.ts +29 -0
  132. package/dist/enricher/content-cache.d.ts.map +1 -0
  133. package/dist/enricher/content-cache.js +24 -0
  134. package/dist/enricher/content-cache.js.map +1 -0
  135. package/dist/enricher/cycle.d.ts +71 -0
  136. package/dist/enricher/cycle.d.ts.map +1 -0
  137. package/dist/enricher/cycle.js +319 -0
  138. package/dist/enricher/cycle.js.map +1 -0
  139. package/dist/enricher/describe.d.ts +61 -0
  140. package/dist/enricher/describe.d.ts.map +1 -0
  141. package/dist/enricher/describe.js +175 -0
  142. package/dist/enricher/describe.js.map +1 -0
  143. package/dist/enricher/failure.d.ts +25 -0
  144. package/dist/enricher/failure.d.ts.map +1 -0
  145. package/dist/enricher/failure.js +46 -0
  146. package/dist/enricher/failure.js.map +1 -0
  147. package/dist/enricher/index.d.ts +22 -0
  148. package/dist/enricher/index.d.ts.map +1 -0
  149. package/dist/enricher/index.js +22 -0
  150. package/dist/enricher/index.js.map +1 -0
  151. package/dist/enricher/jaccard.d.ts +11 -0
  152. package/dist/enricher/jaccard.d.ts.map +1 -0
  153. package/dist/enricher/jaccard.js +29 -0
  154. package/dist/enricher/jaccard.js.map +1 -0
  155. package/dist/enricher/loop.d.ts +22 -0
  156. package/dist/enricher/loop.d.ts.map +1 -0
  157. package/dist/enricher/loop.js +34 -0
  158. package/dist/enricher/loop.js.map +1 -0
  159. package/dist/enricher/meaningful-change.d.ts +28 -0
  160. package/dist/enricher/meaningful-change.d.ts.map +1 -0
  161. package/dist/enricher/meaningful-change.js +41 -0
  162. package/dist/enricher/meaningful-change.js.map +1 -0
  163. package/dist/enricher/observability.d.ts +22 -0
  164. package/dist/enricher/observability.d.ts.map +1 -0
  165. package/dist/enricher/observability.js +55 -0
  166. package/dist/enricher/observability.js.map +1 -0
  167. package/dist/enricher/pending-query.d.ts +35 -0
  168. package/dist/enricher/pending-query.d.ts.map +1 -0
  169. package/dist/enricher/pending-query.js +54 -0
  170. package/dist/enricher/pending-query.js.map +1 -0
  171. package/dist/enricher/sql-update.d.ts +7 -0
  172. package/dist/enricher/sql-update.d.ts.map +1 -0
  173. package/dist/enricher/sql-update.js +22 -0
  174. package/dist/enricher/sql-update.js.map +1 -0
  175. package/dist/enricher/store-adapter.d.ts +98 -0
  176. package/dist/enricher/store-adapter.d.ts.map +1 -0
  177. package/dist/enricher/store-adapter.js +129 -0
  178. package/dist/enricher/store-adapter.js.map +1 -0
  179. package/dist/enricher/store.d.ts +58 -0
  180. package/dist/enricher/store.d.ts.map +1 -0
  181. package/dist/enricher/store.js +126 -0
  182. package/dist/enricher/store.js.map +1 -0
  183. package/dist/enricher/tokenize.d.ts +10 -0
  184. package/dist/enricher/tokenize.d.ts.map +1 -0
  185. package/dist/enricher/tokenize.js +28 -0
  186. package/dist/enricher/tokenize.js.map +1 -0
  187. package/dist/errors.d.ts +41 -0
  188. package/dist/errors.d.ts.map +1 -0
  189. package/dist/errors.js +56 -0
  190. package/dist/errors.js.map +1 -0
  191. package/dist/health.d.ts +147 -0
  192. package/dist/health.d.ts.map +1 -0
  193. package/dist/health.js +168 -0
  194. package/dist/health.js.map +1 -0
  195. package/dist/hive-graph/deeplake-credentials.d.ts +68 -0
  196. package/dist/hive-graph/deeplake-credentials.d.ts.map +1 -0
  197. package/dist/hive-graph/deeplake-credentials.js +135 -0
  198. package/dist/hive-graph/deeplake-credentials.js.map +1 -0
  199. package/dist/hive-graph/deeplake-heal.d.ts +63 -0
  200. package/dist/hive-graph/deeplake-heal.d.ts.map +1 -0
  201. package/dist/hive-graph/deeplake-heal.js +118 -0
  202. package/dist/hive-graph/deeplake-heal.js.map +1 -0
  203. package/dist/hive-graph/deeplake-store.d.ts +199 -0
  204. package/dist/hive-graph/deeplake-store.d.ts.map +1 -0
  205. package/dist/hive-graph/deeplake-store.js +541 -0
  206. package/dist/hive-graph/deeplake-store.js.map +1 -0
  207. package/dist/hive-graph/deeplake-transport.d.ts +89 -0
  208. package/dist/hive-graph/deeplake-transport.d.ts.map +1 -0
  209. package/dist/hive-graph/deeplake-transport.js +145 -0
  210. package/dist/hive-graph/deeplake-transport.js.map +1 -0
  211. package/dist/hive-graph/hash.d.ts +3 -0
  212. package/dist/hive-graph/hash.d.ts.map +1 -0
  213. package/dist/hive-graph/hash.js +12 -0
  214. package/dist/hive-graph/hash.js.map +1 -0
  215. package/dist/hive-graph/memory-store.d.ts +39 -0
  216. package/dist/hive-graph/memory-store.d.ts.map +1 -0
  217. package/dist/hive-graph/memory-store.js +125 -0
  218. package/dist/hive-graph/memory-store.js.map +1 -0
  219. package/dist/hive-graph/model.d.ts +109 -0
  220. package/dist/hive-graph/model.d.ts.map +1 -0
  221. package/dist/hive-graph/model.js +36 -0
  222. package/dist/hive-graph/model.js.map +1 -0
  223. package/dist/hive-graph/paths.d.ts +7 -0
  224. package/dist/hive-graph/paths.d.ts.map +1 -0
  225. package/dist/hive-graph/paths.js +26 -0
  226. package/dist/hive-graph/paths.js.map +1 -0
  227. package/dist/hive-graph/project-scope.d.ts +99 -0
  228. package/dist/hive-graph/project-scope.d.ts.map +1 -0
  229. package/dist/hive-graph/project-scope.js +286 -0
  230. package/dist/hive-graph/project-scope.js.map +1 -0
  231. package/dist/hive-graph/schema.d.ts +53 -0
  232. package/dist/hive-graph/schema.d.ts.map +1 -0
  233. package/dist/hive-graph/schema.js +139 -0
  234. package/dist/hive-graph/schema.js.map +1 -0
  235. package/dist/hive-graph/search-types.d.ts +82 -0
  236. package/dist/hive-graph/search-types.d.ts.map +1 -0
  237. package/dist/hive-graph/search-types.js +2 -0
  238. package/dist/hive-graph/search-types.js.map +1 -0
  239. package/dist/hive-graph/search.d.ts +51 -0
  240. package/dist/hive-graph/search.d.ts.map +1 -0
  241. package/dist/hive-graph/search.js +417 -0
  242. package/dist/hive-graph/search.js.map +1 -0
  243. package/dist/hive-graph/sql-guards.d.ts +99 -0
  244. package/dist/hive-graph/sql-guards.d.ts.map +1 -0
  245. package/dist/hive-graph/sql-guards.js +129 -0
  246. package/dist/hive-graph/sql-guards.js.map +1 -0
  247. package/dist/hive-graph/store.d.ts +151 -0
  248. package/dist/hive-graph/store.d.ts.map +1 -0
  249. package/dist/hive-graph/store.js +2 -0
  250. package/dist/hive-graph/store.js.map +1 -0
  251. package/dist/hive-graph/ulid.d.ts +14 -0
  252. package/dist/hive-graph/ulid.d.ts.map +1 -0
  253. package/dist/hive-graph/ulid.js +109 -0
  254. package/dist/hive-graph/ulid.js.map +1 -0
  255. package/dist/hivedoctor-registry.d.ts +111 -0
  256. package/dist/hivedoctor-registry.d.ts.map +1 -0
  257. package/dist/hivedoctor-registry.js +143 -0
  258. package/dist/hivedoctor-registry.js.map +1 -0
  259. package/dist/index.d.ts +106 -0
  260. package/dist/index.d.ts.map +1 -0
  261. package/dist/index.js +78 -0
  262. package/dist/index.js.map +1 -0
  263. package/dist/lock.d.ts +66 -0
  264. package/dist/lock.d.ts.map +1 -0
  265. package/dist/lock.js +282 -0
  266. package/dist/lock.js.map +1 -0
  267. package/dist/poll-loop.d.ts +71 -0
  268. package/dist/poll-loop.d.ts.map +1 -0
  269. package/dist/poll-loop.js +130 -0
  270. package/dist/poll-loop.js.map +1 -0
  271. package/dist/portkey/config.d.ts +46 -0
  272. package/dist/portkey/config.d.ts.map +1 -0
  273. package/dist/portkey/config.js +68 -0
  274. package/dist/portkey/config.js.map +1 -0
  275. package/dist/portkey/describe-model.d.ts +53 -0
  276. package/dist/portkey/describe-model.d.ts.map +1 -0
  277. package/dist/portkey/describe-model.js +56 -0
  278. package/dist/portkey/describe-model.js.map +1 -0
  279. package/dist/portkey/headers.d.ts +31 -0
  280. package/dist/portkey/headers.d.ts.map +1 -0
  281. package/dist/portkey/headers.js +37 -0
  282. package/dist/portkey/headers.js.map +1 -0
  283. package/dist/portkey/transport.d.ts +89 -0
  284. package/dist/portkey/transport.d.ts.map +1 -0
  285. package/dist/portkey/transport.js +167 -0
  286. package/dist/portkey/transport.js.map +1 -0
  287. package/dist/projection/format.d.ts +51 -0
  288. package/dist/projection/format.d.ts.map +1 -0
  289. package/dist/projection/format.js +81 -0
  290. package/dist/projection/format.js.map +1 -0
  291. package/dist/projection/generate.d.ts +31 -0
  292. package/dist/projection/generate.d.ts.map +1 -0
  293. package/dist/projection/generate.js +83 -0
  294. package/dist/projection/generate.js.map +1 -0
  295. package/dist/projection/inherit.d.ts +27 -0
  296. package/dist/projection/inherit.d.ts.map +1 -0
  297. package/dist/projection/inherit.js +128 -0
  298. package/dist/projection/inherit.js.map +1 -0
  299. package/dist/projection/load.d.ts +47 -0
  300. package/dist/projection/load.d.ts.map +1 -0
  301. package/dist/projection/load.js +258 -0
  302. package/dist/projection/load.js.map +1 -0
  303. package/dist/projection/store-adapter.d.ts +42 -0
  304. package/dist/projection/store-adapter.d.ts.map +1 -0
  305. package/dist/projection/store-adapter.js +42 -0
  306. package/dist/projection/store-adapter.js.map +1 -0
  307. package/dist/projection/write.d.ts +79 -0
  308. package/dist/projection/write.d.ts.map +1 -0
  309. package/dist/projection/write.js +122 -0
  310. package/dist/projection/write.js.map +1 -0
  311. package/dist/registration/classify.d.ts +33 -0
  312. package/dist/registration/classify.d.ts.map +1 -0
  313. package/dist/registration/classify.js +32 -0
  314. package/dist/registration/classify.js.map +1 -0
  315. package/dist/registration/copy-detect.d.ts +22 -0
  316. package/dist/registration/copy-detect.d.ts.map +1 -0
  317. package/dist/registration/copy-detect.js +12 -0
  318. package/dist/registration/copy-detect.js.map +1 -0
  319. package/dist/registration/disk-fs.d.ts +41 -0
  320. package/dist/registration/disk-fs.d.ts.map +1 -0
  321. package/dist/registration/disk-fs.js +175 -0
  322. package/dist/registration/disk-fs.js.map +1 -0
  323. package/dist/registration/fs-watch.d.ts +114 -0
  324. package/dist/registration/fs-watch.d.ts.map +1 -0
  325. package/dist/registration/fs-watch.js +266 -0
  326. package/dist/registration/fs-watch.js.map +1 -0
  327. package/dist/registration/ignore.d.ts +77 -0
  328. package/dist/registration/ignore.d.ts.map +1 -0
  329. package/dist/registration/ignore.js +249 -0
  330. package/dist/registration/ignore.js.map +1 -0
  331. package/dist/registration/ladder.d.ts +211 -0
  332. package/dist/registration/ladder.d.ts.map +1 -0
  333. package/dist/registration/ladder.js +378 -0
  334. package/dist/registration/ladder.js.map +1 -0
  335. package/dist/registration/paths-safe.d.ts +21 -0
  336. package/dist/registration/paths-safe.d.ts.map +1 -0
  337. package/dist/registration/paths-safe.js +88 -0
  338. package/dist/registration/paths-safe.js.map +1 -0
  339. package/dist/registration/prune-cli.d.ts +48 -0
  340. package/dist/registration/prune-cli.d.ts.map +1 -0
  341. package/dist/registration/prune-cli.js +57 -0
  342. package/dist/registration/prune-cli.js.map +1 -0
  343. package/dist/registration/review-cli.d.ts +42 -0
  344. package/dist/registration/review-cli.d.ts.map +1 -0
  345. package/dist/registration/review-cli.js +110 -0
  346. package/dist/registration/review-cli.js.map +1 -0
  347. package/dist/registration/review-store.d.ts +73 -0
  348. package/dist/registration/review-store.d.ts.map +1 -0
  349. package/dist/registration/review-store.js +243 -0
  350. package/dist/registration/review-store.js.map +1 -0
  351. package/dist/registration/service.d.ts +196 -0
  352. package/dist/registration/service.d.ts.map +1 -0
  353. package/dist/registration/service.js +384 -0
  354. package/dist/registration/service.js.map +1 -0
  355. package/dist/registration/store-bridge.d.ts +133 -0
  356. package/dist/registration/store-bridge.d.ts.map +1 -0
  357. package/dist/registration/store-bridge.js +159 -0
  358. package/dist/registration/store-bridge.js.map +1 -0
  359. package/dist/registration/tlsh.d.ts +125 -0
  360. package/dist/registration/tlsh.d.ts.map +1 -0
  361. package/dist/registration/tlsh.js +274 -0
  362. package/dist/registration/tlsh.js.map +1 -0
  363. package/dist/server.d.ts +26 -0
  364. package/dist/server.d.ts.map +1 -0
  365. package/dist/server.js +156 -0
  366. package/dist/server.js.map +1 -0
  367. package/dist/service/argv.d.ts +52 -0
  368. package/dist/service/argv.d.ts.map +1 -0
  369. package/dist/service/argv.js +127 -0
  370. package/dist/service/argv.js.map +1 -0
  371. package/dist/service/command-runner.d.ts +54 -0
  372. package/dist/service/command-runner.d.ts.map +1 -0
  373. package/dist/service/command-runner.js +55 -0
  374. package/dist/service/command-runner.js.map +1 -0
  375. package/dist/service/index.d.ts +83 -0
  376. package/dist/service/index.d.ts.map +1 -0
  377. package/dist/service/index.js +270 -0
  378. package/dist/service/index.js.map +1 -0
  379. package/dist/service/platform.d.ts +110 -0
  380. package/dist/service/platform.d.ts.map +1 -0
  381. package/dist/service/platform.js +157 -0
  382. package/dist/service/platform.js.map +1 -0
  383. package/dist/service/templates.d.ts +88 -0
  384. package/dist/service/templates.d.ts.map +1 -0
  385. package/dist/service/templates.js +212 -0
  386. package/dist/service/templates.js.map +1 -0
  387. package/dist/source-graph/deeplake-credentials.d.ts +57 -0
  388. package/dist/source-graph/deeplake-credentials.d.ts.map +1 -0
  389. package/dist/source-graph/deeplake-credentials.js +109 -0
  390. package/dist/source-graph/deeplake-credentials.js.map +1 -0
  391. package/dist/source-graph/deeplake-heal.d.ts +53 -0
  392. package/dist/source-graph/deeplake-heal.d.ts.map +1 -0
  393. package/dist/source-graph/deeplake-heal.js +41 -0
  394. package/dist/source-graph/deeplake-heal.js.map +1 -0
  395. package/dist/source-graph/deeplake-store.d.ts +151 -0
  396. package/dist/source-graph/deeplake-store.d.ts.map +1 -0
  397. package/dist/source-graph/deeplake-store.js +389 -0
  398. package/dist/source-graph/deeplake-store.js.map +1 -0
  399. package/dist/source-graph/deeplake-transport.d.ts +74 -0
  400. package/dist/source-graph/deeplake-transport.d.ts.map +1 -0
  401. package/dist/source-graph/deeplake-transport.js +107 -0
  402. package/dist/source-graph/deeplake-transport.js.map +1 -0
  403. package/dist/source-graph/hash.d.ts +3 -0
  404. package/dist/source-graph/hash.d.ts.map +1 -0
  405. package/dist/source-graph/hash.js +12 -0
  406. package/dist/source-graph/hash.js.map +1 -0
  407. package/dist/source-graph/memory-store.d.ts +32 -0
  408. package/dist/source-graph/memory-store.d.ts.map +1 -0
  409. package/dist/source-graph/memory-store.js +81 -0
  410. package/dist/source-graph/memory-store.js.map +1 -0
  411. package/dist/source-graph/model.d.ts +102 -0
  412. package/dist/source-graph/model.d.ts.map +1 -0
  413. package/dist/source-graph/model.js +36 -0
  414. package/dist/source-graph/model.js.map +1 -0
  415. package/dist/source-graph/paths.d.ts +7 -0
  416. package/dist/source-graph/paths.d.ts.map +1 -0
  417. package/dist/source-graph/paths.js +26 -0
  418. package/dist/source-graph/paths.js.map +1 -0
  419. package/dist/source-graph/schema.d.ts +44 -0
  420. package/dist/source-graph/schema.d.ts.map +1 -0
  421. package/dist/source-graph/schema.js +123 -0
  422. package/dist/source-graph/schema.js.map +1 -0
  423. package/dist/source-graph/sql-guards.d.ts +99 -0
  424. package/dist/source-graph/sql-guards.d.ts.map +1 -0
  425. package/dist/source-graph/sql-guards.js +129 -0
  426. package/dist/source-graph/sql-guards.js.map +1 -0
  427. package/dist/source-graph/store.d.ts +101 -0
  428. package/dist/source-graph/store.d.ts.map +1 -0
  429. package/dist/source-graph/store.js +2 -0
  430. package/dist/source-graph/store.js.map +1 -0
  431. package/dist/source-graph/ulid.d.ts +9 -0
  432. package/dist/source-graph/ulid.d.ts.map +1 -0
  433. package/dist/source-graph/ulid.js +61 -0
  434. package/dist/source-graph/ulid.js.map +1 -0
  435. package/dist/telemetry/checkin.d.ts +66 -0
  436. package/dist/telemetry/checkin.d.ts.map +1 -0
  437. package/dist/telemetry/checkin.js +142 -0
  438. package/dist/telemetry/checkin.js.map +1 -0
  439. package/dist/telemetry/db.d.ts +34 -0
  440. package/dist/telemetry/db.d.ts.map +1 -0
  441. package/dist/telemetry/db.js +122 -0
  442. package/dist/telemetry/db.js.map +1 -0
  443. package/dist/telemetry/index.d.ts +76 -0
  444. package/dist/telemetry/index.d.ts.map +1 -0
  445. package/dist/telemetry/index.js +98 -0
  446. package/dist/telemetry/index.js.map +1 -0
  447. package/dist/telemetry/logs.d.ts +83 -0
  448. package/dist/telemetry/logs.d.ts.map +1 -0
  449. package/dist/telemetry/logs.js +110 -0
  450. package/dist/telemetry/logs.js.map +1 -0
  451. package/dist/telemetry/metrics.d.ts +82 -0
  452. package/dist/telemetry/metrics.d.ts.map +1 -0
  453. package/dist/telemetry/metrics.js +148 -0
  454. package/dist/telemetry/metrics.js.map +1 -0
  455. package/dist/telemetry-usage/emit.d.ts +105 -0
  456. package/dist/telemetry-usage/emit.d.ts.map +1 -0
  457. package/dist/telemetry-usage/emit.js +267 -0
  458. package/dist/telemetry-usage/emit.js.map +1 -0
  459. package/dist/telemetry-usage/posthog-key.d.ts +22 -0
  460. package/dist/telemetry-usage/posthog-key.d.ts.map +1 -0
  461. package/dist/telemetry-usage/posthog-key.js +22 -0
  462. package/dist/telemetry-usage/posthog-key.js.map +1 -0
  463. package/dist/worker.d.ts +69 -0
  464. package/dist/worker.d.ts.map +1 -0
  465. package/dist/worker.js +91 -0
  466. package/dist/worker.js.map +1 -0
  467. package/package.json +44 -0
@@ -0,0 +1,42 @@
1
+ /**
2
+ * `nectar review-matches` command logic (PRD-006d AC-18).
3
+ *
4
+ * Lists the pending low-confidence step-4 candidates (new path <-> candidate
5
+ * missing nectar, with confidence / TLSH distance and a diff preview) and lets
6
+ * the operator accept or reject each:
7
+ * - accept -> carry the candidate nectar onto the new path (as a
8
+ * high-confidence step 4 would have) and drop the pending entry;
9
+ * - reject -> leave the new path minted fresh (it already was, at review time)
10
+ * and the missing entry in the set; drop the pending entry;
11
+ * - skip -> leave the entry for a later review.
12
+ *
13
+ * DELIBERATE SPEC GAP (AC-18): the accept/reject interaction defaults to
14
+ * interactive (list -> choose -> confirm). This module takes the per-candidate
15
+ * decision through an injected `decide` seam so the interactive prompt (wired in
16
+ * the CLI) is the default while tests supply a scripted decider. NO
17
+ * `--accept`/`--reject`/`--all` flag grammar is invented; the flag surface
18
+ * remains a flagged implementation decision.
19
+ */
20
+ import type { HiveGraphStore } from "../hive-graph/store.js";
21
+ import type { Tenancy } from "../hive-graph/model.js";
22
+ import type { PendingReviewStore, PendingReviewCandidate } from "./review-store.js";
23
+ export type ReviewDecision = "accept" | "reject" | "skip";
24
+ export interface ReviewMatchesDeps {
25
+ readonly store: HiveGraphStore;
26
+ readonly tenancy: Tenancy;
27
+ readonly pendingReviews: PendingReviewStore;
28
+ /** Per-candidate decision. The interactive prompt (default) or a scripted test decider. */
29
+ decide(candidate: PendingReviewCandidate, preview: string): Promise<ReviewDecision> | ReviewDecision;
30
+ /** Output sink (stdout in the CLI, a capture in tests). */
31
+ out(line: string): void;
32
+ now(): string;
33
+ onEnrichQueued?(nectar: string): void;
34
+ }
35
+ export interface ReviewMatchesResult {
36
+ readonly accepted: number;
37
+ readonly rejected: number;
38
+ readonly skipped: number;
39
+ readonly staleDropped: number;
40
+ }
41
+ export declare function runReviewMatches(deps: ReviewMatchesDeps): Promise<ReviewMatchesResult>;
42
+ //# sourceMappingURL=review-cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-cli.d.ts","sourceRoot":"","sources":["../../src/registration/review-cli.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEtD,OAAO,KAAK,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAGpF,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE1D,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,cAAc,EAAE,kBAAkB,CAAC;IAC5C,2FAA2F;IAC3F,MAAM,CAAC,SAAS,EAAE,sBAAsB,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,GAAG,cAAc,CAAC;IACrG,2DAA2D;IAC3D,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,GAAG,IAAI,MAAM,CAAC;IACd,cAAc,CAAC,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvC;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAgBD,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAwG5F"}
@@ -0,0 +1,110 @@
1
+ import { inTenancy } from "../hive-graph/model.js";
2
+ import { carryNectar } from "./ladder.js";
3
+ /** Build a short human-readable preview for one candidate. */
4
+ function buildPreview(store, candidate) {
5
+ const source = store.latestVersion(candidate.candidateNectar);
6
+ const lastKnownPath = source?.path ?? "(unknown)";
7
+ const distance = candidate.distance === null ? "n/a" : String(candidate.distance);
8
+ return [
9
+ `candidate ${candidate.id}`,
10
+ ` new path: ${candidate.newPath}`,
11
+ ` maybe nectar: ${candidate.candidateNectar} (last known at ${lastKnownPath})`,
12
+ ` confidence: ${candidate.confidence.toFixed(3)} (distance ${distance})`,
13
+ ` new content hash: ${candidate.contentHash}`,
14
+ ].join("\n");
15
+ }
16
+ export async function runReviewMatches(deps) {
17
+ const items = deps.pendingReviews.list();
18
+ if (items.length === 0) {
19
+ deps.out("No pending matches to review.");
20
+ return { accepted: 0, rejected: 0, skipped: 0, staleDropped: 0 };
21
+ }
22
+ let accepted = 0;
23
+ let rejected = 0;
24
+ let skipped = 0;
25
+ let staleDropped = 0;
26
+ for (const candidate of items) {
27
+ const preview = buildPreview(deps.store, candidate);
28
+ deps.out(preview);
29
+ const decision = await deps.decide(candidate, preview);
30
+ switch (decision) {
31
+ case "accept": {
32
+ // Verify the candidate nectar exists AND is in this tenancy before carrying;
33
+ // an accept must never re-associate a nectar from another project (AC-20).
34
+ const identity = deps.store.getIdentity(candidate.candidateNectar);
35
+ if (identity === undefined || !inTenancy(identity, deps.tenancy)) {
36
+ deps.pendingReviews.remove(candidate.id);
37
+ deps.out(`candidate ${candidate.candidateNectar} is not in scope; dropped stale review`);
38
+ staleDropped += 1;
39
+ break;
40
+ }
41
+ // Stale-content guard (PRD-018d NEC-036, AC-018d.8): the candidate's
42
+ // `contentHash` is a snapshot taken when the review was raised. If the
43
+ // placeholder mint (`mintedNectar`) has since seen a further edit at
44
+ // `newPath` (a step-2 append onto that SAME identity, keyed by path),
45
+ // its latest content hash no longer matches what was queued, so the
46
+ // recorded hash/size/mtime metadata this accept would carry onto the
47
+ // identity is outdated. Resolve as stale instead of carrying it.
48
+ // Checked against the mintedNectar's own version (not "whatever is
49
+ // currently at newPath") so it is precise even when mintedNectar is a
50
+ // synthetic id in a test fixture that was never actually minted (in
51
+ // which case there is nothing to compare and the accept proceeds).
52
+ const mintedVersion = deps.store.latestVersion(candidate.mintedNectar);
53
+ if (mintedVersion !== undefined && mintedVersion.contentHash !== candidate.contentHash) {
54
+ deps.pendingReviews.remove(candidate.id);
55
+ deps.out(`candidate ${candidate.candidateNectar} is stale (content at ${candidate.newPath} changed since queued); dropped stale review`);
56
+ staleDropped += 1;
57
+ break;
58
+ }
59
+ const carried = carryNectar(deps.store, deps.tenancy, deps.now(), candidate.candidateNectar, {
60
+ relPath: candidate.newPath,
61
+ contentHash: candidate.contentHash,
62
+ sizeBytes: candidate.sizeBytes,
63
+ mtimeObserved: candidate.mtimeObserved,
64
+ }, candidate.confidence);
65
+ deps.pendingReviews.remove(candidate.id);
66
+ if (carried) {
67
+ // Retire the placeholder nectar the ladder minted for newPath at review
68
+ // time, so exactly one identity (the carried one) points at newPath and
69
+ // there is no duplicate. Only when the carry succeeded, and only for a
70
+ // real, in-scope mint that is not the carried nectar itself. The
71
+ // tenancy-scoped delete is the sole deletion path.
72
+ let retiredNote = "";
73
+ const minted = candidate.mintedNectar;
74
+ if (minted !== "" && minted !== candidate.candidateNectar) {
75
+ const mintIdentity = deps.store.getIdentity(minted);
76
+ if (mintIdentity !== undefined && inTenancy(mintIdentity, deps.tenancy)) {
77
+ deps.store.deleteNectar(deps.tenancy, minted);
78
+ retiredNote = `; retired placeholder mint ${minted}`;
79
+ }
80
+ }
81
+ deps.onEnrichQueued?.(candidate.candidateNectar);
82
+ deps.out(`accepted: carried ${candidate.candidateNectar} to ${candidate.newPath}${retiredNote}`);
83
+ accepted += 1;
84
+ }
85
+ else {
86
+ deps.out(`candidate ${candidate.candidateNectar} no longer exists; dropped stale review`);
87
+ staleDropped += 1;
88
+ }
89
+ break;
90
+ }
91
+ case "reject": {
92
+ deps.pendingReviews.remove(candidate.id);
93
+ deps.out(`rejected: ${candidate.newPath} keeps its fresh nectar ${candidate.mintedNectar}`);
94
+ rejected += 1;
95
+ break;
96
+ }
97
+ case "skip": {
98
+ deps.out(`skipped: ${candidate.newPath} left for later review`);
99
+ skipped += 1;
100
+ break;
101
+ }
102
+ default: {
103
+ const _exhaustive = decision;
104
+ return _exhaustive;
105
+ }
106
+ }
107
+ }
108
+ return { accepted, rejected, skipped, staleDropped };
109
+ }
110
+ //# sourceMappingURL=review-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-cli.js","sourceRoot":"","sources":["../../src/registration/review-cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ /** One unreviewed step-4 candidate. Carries everything an accept needs so no disk re-read is required. */
2
+ export interface PendingReviewCandidate {
3
+ /** Stable id (a minted ULID) so accept/reject can target one entry. */
4
+ readonly id: string;
5
+ /** The candidate MISSING nectar the new path may be. */
6
+ readonly candidateNectar: string;
7
+ /** The new path (already minted fresh at review time). */
8
+ readonly newPath: string;
9
+ readonly confidence: number;
10
+ readonly distance: number | null;
11
+ /** The new file's content hash + metadata, so accept can carry without reading disk. */
12
+ readonly contentHash: string;
13
+ readonly sizeBytes: number;
14
+ readonly mtimeObserved: string;
15
+ /** The fresh nectar minted for `newPath` when the candidate was raised. */
16
+ readonly mintedNectar: string;
17
+ readonly createdAt: string;
18
+ }
19
+ export interface PendingReviewStore {
20
+ add(candidate: PendingReviewCandidate): void;
21
+ list(): PendingReviewCandidate[];
22
+ remove(id: string): void;
23
+ }
24
+ export declare class InMemoryPendingReviewStore implements PendingReviewStore {
25
+ private readonly items;
26
+ /**
27
+ * Dedupe/replace by `(candidateNectar, newPath)` (PRD-018d NEC-036/AC-18d.7):
28
+ * a re-observation of the same target while a candidate for it is already
29
+ * pending refreshes that candidate in place instead of appending a sibling,
30
+ * so the queue never grows per re-observation of one path.
31
+ */
32
+ add(candidate: PendingReviewCandidate): void;
33
+ list(): PendingReviewCandidate[];
34
+ remove(id: string): void;
35
+ }
36
+ /** A JSON-file-backed pending-review queue in the daemon runtime dir. Fail-open on a malformed/missing file. */
37
+ export declare class FilePendingReviewStore implements PendingReviewStore {
38
+ private readonly filePath;
39
+ constructor(filePath: string);
40
+ /** Sibling lock file guarding the read-modify-write critical section in `add`/`remove`. */
41
+ private lockPath;
42
+ private read;
43
+ /**
44
+ * Atomic write: serialize to a unique temp file in the same directory, then
45
+ * `renameSync` it over the target (atomic on the same filesystem). A reader
46
+ * therefore never sees a torn/partial file, and two concurrent writers cannot
47
+ * interleave bytes (last rename wins). This queue is ephemeral, last-write-wins
48
+ * operational state (not durable domain state, which lives in Deep Lake, FR-8).
49
+ * `write()` on its own only guarantees atomicity (no torn file); it is the
50
+ * callers `add`/`remove` that additionally guarantee no LOST update, by
51
+ * holding {@link acquireFileLock} across their whole read-then-write
52
+ * (PRD-018d AC-018d.6). The temp file is cleaned up on failure.
53
+ */
54
+ private write;
55
+ /**
56
+ * Serialized (PRD-018d AC-018d.6) read-modify-write: the advisory lock makes
57
+ * this critical section mutually exclusive with any other `add`/`remove`
58
+ * call on the same file, from this process or another, so a daemon `add()`
59
+ * racing a CLI `remove()` can no longer resurrect a resolved candidate or
60
+ * silently drop a fresh one (M5) - whichever call wins the lock re-reads
61
+ * AFTER acquiring it, so it always sees the other's already-applied write.
62
+ *
63
+ * Also dedupes/replaces by `(candidateNectar, newPath)` (AC-018d.7): a
64
+ * re-observation of the same target refreshes the existing candidate in
65
+ * place rather than appending a sibling, so the queue does not grow per
66
+ * re-observation of one path (M6).
67
+ */
68
+ add(candidate: PendingReviewCandidate): void;
69
+ list(): PendingReviewCandidate[];
70
+ /** Serialized (PRD-018d AC-018d.6) the same way as {@link add}. */
71
+ remove(id: string): void;
72
+ }
73
+ //# sourceMappingURL=review-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-store.d.ts","sourceRoot":"","sources":["../../src/registration/review-store.ts"],"names":[],"mappings":"AAsBA,0GAA0G;AAC1G,MAAM,WAAW,sBAAsB;IACrC,uEAAuE;IACvE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,wDAAwD;IACxD,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,0DAA0D;IAC1D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,wFAAwF;IACxF,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,2EAA2E;IAC3E,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,CAAC,SAAS,EAAE,sBAAsB,GAAG,IAAI,CAAC;IAC7C,IAAI,IAAI,sBAAsB,EAAE,CAAC;IACjC,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,qBAAa,0BAA2B,YAAW,kBAAkB;IACnE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA6C;IAEnE;;;;;OAKG;IACH,GAAG,CAAC,SAAS,EAAE,sBAAsB,GAAG,IAAI;IAa5C,IAAI,IAAI,sBAAsB,EAAE;IAIhC,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;CAGzB;AAqGD,gHAAgH;AAChH,qBAAa,sBAAuB,YAAW,kBAAkB;IACnD,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,EAAE,MAAM;IAE7C,2FAA2F;IAC3F,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,IAAI;IAiBZ;;;;;;;;;;OAUG;IACH,OAAO,CAAC,KAAK;IAiBb;;;;;;;;;;;;OAYG;IACH,GAAG,CAAC,SAAS,EAAE,sBAAsB,GAAG,IAAI;IAc5C,IAAI,IAAI,sBAAsB,EAAE;IAIhC,mEAAmE;IACnE,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;CASzB"}
@@ -0,0 +1,243 @@
1
+ /**
2
+ * The pending-candidate surface for `review-matches` (PRD-006d AC-18).
3
+ *
4
+ * The settled handler writes a low-confidence step-4 candidate here (via
5
+ * `onReviewNeeded`); the `review-matches` command reads them back, lets the
6
+ * operator accept (carry the nectar) or reject (leave the fresh mint), and
7
+ * removes each as it is resolved.
8
+ *
9
+ * Two implementations:
10
+ * - {@link InMemoryPendingReviewStore}: the in-process surface the running
11
+ * daemon and the tests use.
12
+ * - {@link FilePendingReviewStore}: a JSON file under the daemon runtime dir so
13
+ * a separate `review-matches` CLI process can see candidates a daemon queued.
14
+ * This is an ephemeral operational queue (like the PID/lock files that share
15
+ * the runtime dir), NOT durable domain state, so it does not conflict with
16
+ * the Deep-Lake-is-the-only-durable-store rule (FR-8): the durable nectar
17
+ * rows live in Deep Lake; this file only tracks unreviewed candidates.
18
+ */
19
+ import { closeSync, mkdirSync, openSync, readFileSync, renameSync, rmSync, statSync, writeFileSync } from "node:fs";
20
+ import { basename, dirname, join } from "node:path";
21
+ import { randomBytes } from "node:crypto";
22
+ export class InMemoryPendingReviewStore {
23
+ items = new Map();
24
+ /**
25
+ * Dedupe/replace by `(candidateNectar, newPath)` (PRD-018d NEC-036/AC-18d.7):
26
+ * a re-observation of the same target while a candidate for it is already
27
+ * pending refreshes that candidate in place instead of appending a sibling,
28
+ * so the queue never grows per re-observation of one path.
29
+ */
30
+ add(candidate) {
31
+ for (const [id, existing] of this.items) {
32
+ if (id !== candidate.id &&
33
+ existing.candidateNectar === candidate.candidateNectar &&
34
+ existing.newPath === candidate.newPath) {
35
+ this.items.delete(id);
36
+ }
37
+ }
38
+ this.items.set(candidate.id, { ...candidate });
39
+ }
40
+ list() {
41
+ return [...this.items.values()].map((c) => ({ ...c }));
42
+ }
43
+ remove(id) {
44
+ this.items.delete(id);
45
+ }
46
+ }
47
+ function isCandidate(value) {
48
+ if (typeof value !== "object" || value === null)
49
+ return false;
50
+ const c = value;
51
+ return (typeof c["id"] === "string" &&
52
+ typeof c["candidateNectar"] === "string" &&
53
+ typeof c["newPath"] === "string" &&
54
+ typeof c["confidence"] === "number" &&
55
+ (c["distance"] === null || typeof c["distance"] === "number") &&
56
+ typeof c["contentHash"] === "string" &&
57
+ typeof c["sizeBytes"] === "number" &&
58
+ typeof c["mtimeObserved"] === "string" &&
59
+ typeof c["mintedNectar"] === "string" &&
60
+ typeof c["createdAt"] === "string");
61
+ }
62
+ /** How long an `add()`/`remove()` waits for the advisory lock before giving up. */
63
+ const LOCK_MAX_WAIT_MS = 5000;
64
+ /** Poll interval while waiting for the advisory lock. */
65
+ const LOCK_RETRY_DELAY_MS = 5;
66
+ /**
67
+ * A lock file whose mtime is older than this is presumed abandoned by a
68
+ * crashed holder (CodeRabbit PR-18 finding #4): a crash between
69
+ * {@link acquireFileLock} and the caller's `finally` release used to leave
70
+ * `${filePath}.lock` behind forever, wedging every later `add()`/`remove()`
71
+ * to the full {@link LOCK_MAX_WAIT_MS} timeout. A live holder's critical
72
+ * section (a small JSON read-modify-write) always finishes well within
73
+ * `LOCK_MAX_WAIT_MS`; 3x that gives comfortable headroom over the slowest
74
+ * legitimate hold (another racer's full wait plus its own critical section)
75
+ * before this reclaims the lock as abandoned.
76
+ */
77
+ const LOCK_STALE_MS = LOCK_MAX_WAIT_MS * 3;
78
+ /** A synchronous, event-loop-blocking sleep (Node allows `Atomics.wait` on the main thread; browsers do not). */
79
+ function sleepSyncMs(ms) {
80
+ Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms);
81
+ }
82
+ /**
83
+ * Acquire an advisory, exclusive-create file lock at `lockPath`, blocking
84
+ * (synchronously) until it is free or `LOCK_MAX_WAIT_MS` elapses. Mirrors the
85
+ * daemon's single-instance lock's exclusive-create-is-the-atomic-winner-picker
86
+ * idiom (`lock.ts` `acquireSingleInstanceLock`), scaled down to a short-lived
87
+ * critical section instead of a whole-process-lifetime lock: unlike the daemon
88
+ * lock, this one carries no owner identity and is never force-reclaimed, so
89
+ * two racing holders can never both believe they hold it (PRD-018d NEC-036 /
90
+ * AC-018d.6 - this is what turns the read-modify-write in {@link
91
+ * FilePendingReviewStore.add}/{@link FilePendingReviewStore.remove} into a
92
+ * SERIALIZED critical section across the daemon and the `review-matches` CLI,
93
+ * the store's stated two-writer use case).
94
+ */
95
+ /** True when `lockPath`'s mtime is older than {@link LOCK_STALE_MS} (an abandoned lock). False when it no longer exists (the caller's ENOENT race: another process reclaimed first). */
96
+ function isLockStale(lockPath) {
97
+ try {
98
+ return Date.now() - statSync(lockPath).mtimeMs > LOCK_STALE_MS;
99
+ }
100
+ catch {
101
+ return false; // gone already; the create-retry below will settle it
102
+ }
103
+ }
104
+ function acquireFileLock(lockPath) {
105
+ mkdirSync(dirname(lockPath), { recursive: true });
106
+ const deadline = Date.now() + LOCK_MAX_WAIT_MS;
107
+ for (;;) {
108
+ try {
109
+ closeSync(openSync(lockPath, "wx"));
110
+ return;
111
+ }
112
+ catch (err) {
113
+ if (err.code !== "EEXIST")
114
+ throw err;
115
+ // CodeRabbit PR-18 finding #4: reclaim an abandoned lock by mtime instead
116
+ // of waiting out the full timeout behind it every time.
117
+ if (isLockStale(lockPath)) {
118
+ try {
119
+ rmSync(lockPath);
120
+ }
121
+ catch (rmErr) {
122
+ // ENOENT: another process reclaimed it first between our stat and
123
+ // our rm; anything else is a real filesystem problem.
124
+ if (rmErr.code !== "ENOENT")
125
+ throw rmErr;
126
+ }
127
+ continue; // re-attempt the exclusive create immediately
128
+ }
129
+ if (Date.now() >= deadline) {
130
+ throw new Error(`timed out waiting for the pending-review lock at ${lockPath}`);
131
+ }
132
+ sleepSyncMs(LOCK_RETRY_DELAY_MS);
133
+ }
134
+ }
135
+ }
136
+ /** Release the advisory lock. Never throws (a missing lock on release is fine; the goal already holds). */
137
+ function releaseFileLock(lockPath) {
138
+ try {
139
+ rmSync(lockPath, { force: true });
140
+ }
141
+ catch {
142
+ // best-effort; nothing more to do if removal itself fails
143
+ }
144
+ }
145
+ /** A JSON-file-backed pending-review queue in the daemon runtime dir. Fail-open on a malformed/missing file. */
146
+ export class FilePendingReviewStore {
147
+ filePath;
148
+ constructor(filePath) {
149
+ this.filePath = filePath;
150
+ }
151
+ /** Sibling lock file guarding the read-modify-write critical section in `add`/`remove`. */
152
+ lockPath() {
153
+ return `${this.filePath}.lock`;
154
+ }
155
+ read() {
156
+ let raw;
157
+ try {
158
+ raw = readFileSync(this.filePath, "utf8");
159
+ }
160
+ catch {
161
+ return [];
162
+ }
163
+ let parsed;
164
+ try {
165
+ parsed = JSON.parse(raw);
166
+ }
167
+ catch {
168
+ return [];
169
+ }
170
+ if (!Array.isArray(parsed))
171
+ return [];
172
+ return parsed.filter(isCandidate);
173
+ }
174
+ /**
175
+ * Atomic write: serialize to a unique temp file in the same directory, then
176
+ * `renameSync` it over the target (atomic on the same filesystem). A reader
177
+ * therefore never sees a torn/partial file, and two concurrent writers cannot
178
+ * interleave bytes (last rename wins). This queue is ephemeral, last-write-wins
179
+ * operational state (not durable domain state, which lives in Deep Lake, FR-8).
180
+ * `write()` on its own only guarantees atomicity (no torn file); it is the
181
+ * callers `add`/`remove` that additionally guarantee no LOST update, by
182
+ * holding {@link acquireFileLock} across their whole read-then-write
183
+ * (PRD-018d AC-018d.6). The temp file is cleaned up on failure.
184
+ */
185
+ write(items) {
186
+ const dir = dirname(this.filePath);
187
+ mkdirSync(dir, { recursive: true });
188
+ const tmp = join(dir, `${basename(this.filePath)}.${process.pid}.${randomBytes(6).toString("hex")}.tmp`);
189
+ try {
190
+ writeFileSync(tmp, `${JSON.stringify(items, null, 2)}\n`, "utf8");
191
+ renameSync(tmp, this.filePath);
192
+ }
193
+ catch (err) {
194
+ try {
195
+ rmSync(tmp, { force: true });
196
+ }
197
+ catch {
198
+ // best-effort cleanup; surface the original write error below
199
+ }
200
+ throw err;
201
+ }
202
+ }
203
+ /**
204
+ * Serialized (PRD-018d AC-018d.6) read-modify-write: the advisory lock makes
205
+ * this critical section mutually exclusive with any other `add`/`remove`
206
+ * call on the same file, from this process or another, so a daemon `add()`
207
+ * racing a CLI `remove()` can no longer resurrect a resolved candidate or
208
+ * silently drop a fresh one (M5) - whichever call wins the lock re-reads
209
+ * AFTER acquiring it, so it always sees the other's already-applied write.
210
+ *
211
+ * Also dedupes/replaces by `(candidateNectar, newPath)` (AC-018d.7): a
212
+ * re-observation of the same target refreshes the existing candidate in
213
+ * place rather than appending a sibling, so the queue does not grow per
214
+ * re-observation of one path (M6).
215
+ */
216
+ add(candidate) {
217
+ const lockPath = this.lockPath();
218
+ acquireFileLock(lockPath);
219
+ try {
220
+ const items = this.read().filter((c) => c.id !== candidate.id && !(c.candidateNectar === candidate.candidateNectar && c.newPath === candidate.newPath));
221
+ items.push({ ...candidate });
222
+ this.write(items);
223
+ }
224
+ finally {
225
+ releaseFileLock(lockPath);
226
+ }
227
+ }
228
+ list() {
229
+ return this.read();
230
+ }
231
+ /** Serialized (PRD-018d AC-018d.6) the same way as {@link add}. */
232
+ remove(id) {
233
+ const lockPath = this.lockPath();
234
+ acquireFileLock(lockPath);
235
+ try {
236
+ this.write(this.read().filter((c) => c.id !== id));
237
+ }
238
+ finally {
239
+ releaseFileLock(lockPath);
240
+ }
241
+ }
242
+ }
243
+ //# sourceMappingURL=review-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-store.js","sourceRoot":"","sources":["../../src/registration/review-store.ts"],"names":[],"mappings":"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"}