@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,129 @@
1
+ /**
2
+ * SQL-safety escaping helpers for the Deep Lake adapter (PRD-005).
3
+ *
4
+ * Ported (not imported) from honeycomb's `src/daemon/storage/sql.ts`, per
5
+ * ADR-0002: hivenectar reaches Deep Lake over the network through its own
6
+ * client and never imports the honeycomb runtime in-process, so the escaping
7
+ * floor is mirrored here rather than shared across the process boundary.
8
+ *
9
+ * The Deep Lake HTTP query endpoint binds no parameters: every value is
10
+ * escaped and interpolated into the statement by hand before it is sent.
11
+ * There is no parameterized fallback to forget to use, so these helpers ARE
12
+ * the parameter binding. Every dynamic value the Deep Lake adapter builds
13
+ * (`schema.ts`'s `buildCreateTableSql`, `deeplake-store.ts`'s query builders)
14
+ * routes through `sqlStr` / `sqlLike` / `sqlIdent` / `sLiteral` / `eLiteral`.
15
+ *
16
+ * These functions are pure, synchronous, side-effect-free, and dependency-free
17
+ * beyond the language runtime (hivenectar's zero-runtime-dependency rule).
18
+ */
19
+ /**
20
+ * Escape a string for use inside a single-quoted SQL literal.
21
+ *
22
+ * Order matters: backslashes are doubled FIRST (so the backslash added for a
23
+ * doubled quote is not itself re-escaped), then single quotes are doubled,
24
+ * then NUL and the C0/C1 control characters are dropped. The result is the
25
+ * inner body of the literal; the caller wraps it in quotes (`'${sqlStr(v)}'`,
26
+ * or via {@link sLiteral}) or uses the `E'...'` form via {@link eLiteral} when
27
+ * the body carries escape sequences.
28
+ *
29
+ * Because every quote is doubled and every backslash is doubled, an injection
30
+ * payload like `'; DROP TABLE x; --` collapses to one inert literal: the
31
+ * embedded quote can never close the string early, so no second statement is
32
+ * ever produced.
33
+ */
34
+ export function sqlStr(value) {
35
+ return value
36
+ .replace(/\\/g, "\\\\")
37
+ .replace(/'/g, "''")
38
+ .replace(/\0/g, "")
39
+ // Drop C0 controls except \t (0x09) \n (0x0A) \r (0x0D), plus DEL (0x7f).
40
+ .replace(/[\x01-\x08\x0b\x0c\x0e-\x1f\x7f]/g, "");
41
+ }
42
+ /**
43
+ * Escape a string for use inside a `LIKE` / `ILIKE` pattern.
44
+ *
45
+ * Escapes the `LIKE` metacharacters (`%` and `_`) so a literal substring
46
+ * search is never reinterpreted as a wildcard match, alongside the same
47
+ * quote-doubling and control stripping {@link sqlStr} performs. Not currently
48
+ * exercised by the source-graph store's equality-only reads, but ported
49
+ * alongside `sqlStr`/`sqlIdent` so a future prefix/substring query never has
50
+ * to reach for a hand-rolled escape.
51
+ */
52
+ export function sqlLike(value) {
53
+ return value
54
+ .replace(/[\\%_]/g, "\\$&")
55
+ .replace(/'/g, "''")
56
+ .replace(/\0/g, "")
57
+ .replace(/[\x01-\x08\x0b\x0c\x0e-\x1f\x7f]/g, "");
58
+ }
59
+ /**
60
+ * Validate a table/column identifier against `^[a-zA-Z_][a-zA-Z0-9_]*$`.
61
+ * Returns the name UNCHANGED on success; throws on anything else.
62
+ *
63
+ * Strict by design: it THROWS rather than sanitizing, because a silently
64
+ * rewritten identifier would be a worse, harder-to-debug failure than a
65
+ * rejected one. Callers pass only known schema names (table and column
66
+ * identifiers from `SOURCE_GRAPH_COLUMNS` / `SOURCE_GRAPH_VERSIONS_COLUMNS`),
67
+ * so a rejection is always a programmer error worth surfacing.
68
+ */
69
+ export function sqlIdent(name) {
70
+ if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(name)) {
71
+ throw new Error(`Invalid SQL identifier: ${JSON.stringify(name)}`);
72
+ }
73
+ return name;
74
+ }
75
+ /**
76
+ * Build an ordinary single-quoted literal from a value. Thin convenience
77
+ * around `'${sqlStr(v)}'` so call sites read as a builder call rather than raw
78
+ * quote assembly. Use for ids, paths, hashes, enum-like values, and dates.
79
+ * Use {@link eLiteral} instead when the body may carry escape sequences
80
+ * (free-text title/description/concepts).
81
+ */
82
+ export function sLiteral(value) {
83
+ return `'${sqlStr(value)}'`;
84
+ }
85
+ /**
86
+ * Build an `E'...'` escape-string literal from a raw text body.
87
+ *
88
+ * Free-text bodies that may contain escape sequences (a description or title
89
+ * with a literal backslash) must use the `E'...'` form so the
90
+ * doubled-backslash escaping from {@link sqlStr} round-trips to the intended
91
+ * bytes; a plain `'...'` literal for a body with backslashes would corrupt it.
92
+ */
93
+ export function eLiteral(body) {
94
+ return `E'${sqlStr(body)}'`;
95
+ }
96
+ /**
97
+ * Validate and render a numeric value for bare (unquoted) SQL interpolation.
98
+ * Throws unless `value` is, at runtime, a finite JavaScript `number` -
99
+ * TypeScript's `number` type is erased at runtime, so a value that merely
100
+ * carries the `number` type at compile time (e.g. `row.seq`, `row.sizeBytes`,
101
+ * `row.confidence`, or one entry of an embedding vector) is not actually
102
+ * guaranteed to be a safe, quote-free numeric literal unless this is checked
103
+ * here. Without this guard, a non-numeric value smuggled past the type
104
+ * system (a string, `NaN`, `Infinity`, or an object) would be interpolated
105
+ * bare via `String(value)` with no escaping at all - the same injection
106
+ * shape `sqlStr`/`sqlIdent` close for text and identifiers, just for the
107
+ * numeric case. Rejects `NaN`/`Infinity`/`-Infinity` too, since those are not
108
+ * valid bare-numeric SQL tokens.
109
+ */
110
+ export function sqlNum(value) {
111
+ if (typeof value !== "number" || !Number.isFinite(value)) {
112
+ throw new Error(`Invalid SQL numeric value: ${JSON.stringify(value)}`);
113
+ }
114
+ return String(value);
115
+ }
116
+ /**
117
+ * Serialize a `number[]` to a `FLOAT4[]` SQL literal (`ARRAY[...]::float4[]`),
118
+ * mirroring honeycomb's `serializeFloat4Array` (`src/daemon/storage/vector.ts`).
119
+ * Every entry is validated via {@link sqlNum} before interpolation - the
120
+ * dimension contract (`isValidEmbedding`, 768) is a separate application-level
121
+ * check the caller is still responsible for, but this function does not rely
122
+ * on the caller to have validated *finiteness*: a non-numeric or non-finite
123
+ * entry throws here rather than being interpolated bare into the statement.
124
+ */
125
+ export function sqlFloat4Array(vector) {
126
+ const numbersLit = vector.map((v) => sqlNum(v)).join(",");
127
+ return `ARRAY[${numbersLit}]::float4[]`;
128
+ }
129
+ //# sourceMappingURL=sql-guards.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-guards.js","sourceRoot":"","sources":["../../src/source-graph/sql-guards.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,MAAM,CAAC,KAAa;IAClC,OAAO,KAAK;SACT,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;SACnB,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;QACnB,0EAA0E;SACzE,OAAO,CAAC,mCAAmC,EAAE,EAAE,CAAC,CAAC;AACtD,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,OAAO,CAAC,KAAa;IACnC,OAAO,KAAK;SACT,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC;SAC1B,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;SACnB,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;SAClB,OAAO,CAAC,mCAAmC,EAAE,EAAE,CAAC,CAAC;AACtD,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAa;IACpC,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;AAC9B,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,OAAO,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;AAC9B,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,MAAM,CAAC,KAAa;IAClC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACzD,MAAM,IAAI,KAAK,CAAC,8BAA8B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAAC,MAAyB;IACtD,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1D,OAAO,SAAS,UAAU,aAAa,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * The SourceGraphStore seam (PRD-005).
3
+ *
4
+ * The interface both the in-memory adapter (PRD-005, this project, tests + local
5
+ * dev) and the future Deep Lake adapter (the real substrate, per ADR-0002 reached
6
+ * through hivenectar's own client) implement. The file-registration ladder
7
+ * (PRD-006) is written entirely against this interface, so it is testable with the
8
+ * in-memory adapter and unchanged when the Deep Lake adapter lands.
9
+ *
10
+ * All reads/writes are tenancy-scoped (org+workspace at the layer, project_id as a
11
+ * column filter, per PRD-005c). "latest version" always means MAX(seq) for a nectar.
12
+ */
13
+ import type { SourceGraphRow, SourceGraphVersionRow, Tenancy } from "./model.js";
14
+ /** A candidate for re-association: a nectar plus its latest observed version. */
15
+ export interface LatestVersion {
16
+ readonly identity: SourceGraphRow;
17
+ readonly version: SourceGraphVersionRow;
18
+ }
19
+ export interface SourceGraphStore {
20
+ /** Insert a `source_graph` identity row (mint). Throws if the nectar already exists. */
21
+ insertIdentity(row: SourceGraphRow): void;
22
+ /** Fetch an identity row by nectar, or undefined. */
23
+ getIdentity(nectar: string): SourceGraphRow | undefined;
24
+ /** Bump a nectar's `last_update_date` (called when a new version is appended). */
25
+ touchIdentity(nectar: string, lastUpdateDate: string): void;
26
+ /** Append a `source_graph_versions` row. The caller supplies seq via `nextSeq`. */
27
+ appendVersion(row: SourceGraphVersionRow): void;
28
+ /** The next monotonic seq for a nectar (0 if it has no versions yet). */
29
+ nextSeq(nectar: string): number;
30
+ /** The latest (MAX seq) version row for a nectar, or undefined. */
31
+ latestVersion(nectar: string): SourceGraphVersionRow | undefined;
32
+ /**
33
+ * Every nectar's latest version, scoped to the tenancy. The ladder derives the
34
+ * known-paths set, the missing-files set, and the by-latest-hash copy index from this.
35
+ */
36
+ listLatestVersions(tenancy: Tenancy): LatestVersion[];
37
+ /** The latest version whose current path equals `path` (ladder steps 1-2), scoped. */
38
+ latestVersionByPath(tenancy: Tenancy, path: string): LatestVersion | undefined;
39
+ /**
40
+ * A nectar whose latest version content_hash equals `contentHash` (ladder step 3
41
+ * exact-move, and the copy-event index), scoped. Returns the first match.
42
+ */
43
+ latestVersionByHash(tenancy: Tenancy, contentHash: string): LatestVersion | undefined;
44
+ /**
45
+ * Delete a nectar (its identity row + every version row), scoped to `tenancy`.
46
+ * This is the SOLE nectar-deletion path (`prune --confirm`, PRD-006d); the
47
+ * re-association ladder never deletes or reuses nectars. A no-op if the nectar
48
+ * does not exist OR its identity is outside `tenancy` (a cross-project delete
49
+ * is refused, never applied, per AC-20).
50
+ */
51
+ deleteNectar(tenancy: Tenancy, nectar: string): void;
52
+ }
53
+ /**
54
+ * The async twin of {@link SourceGraphStore} (PRD-005's Deep Lake adapter).
55
+ *
56
+ * `SourceGraphStore` is synchronous by design: the in-memory adapter backs it
57
+ * with plain `Map`s, and the file-registration ladder (`registration/ladder.ts`)
58
+ * calls it synchronously throughout, with no `await` anywhere in the ladder's
59
+ * control flow. A real Deep Lake adapter does its work over HTTP and cannot
60
+ * honor that synchronous contract, so this is a SEPARATE interface with the
61
+ * same method names and semantics, each wrapped in a `Promise` — not a
62
+ * variant of `SourceGraphStore` and not a substitute for it.
63
+ *
64
+ * `DeepLakeSourceGraphStore` (`deeplake-store.ts`) implements this interface,
65
+ * not `SourceGraphStore`. Wiring the ladder to run against an async store is
66
+ * out of scope for PRD-005's adapter work: that would mean either making the
67
+ * ladder's own control flow async (touching `registration/ladder.ts`, which
68
+ * this task does not touch) or adapting between the two seams at the call
69
+ * site. Either is a future PRD's decision once a caller actually needs the
70
+ * durable adapter wired into the live worker loop; today `InMemorySourceGraphStore`
71
+ * remains the ladder's only consumer and is unchanged by this addition.
72
+ */
73
+ export interface AsyncSourceGraphStore {
74
+ /** Insert a `source_graph` identity row (mint). Rejects if the nectar already exists. */
75
+ insertIdentity(row: SourceGraphRow): Promise<void>;
76
+ /** Fetch an identity row by nectar, or undefined. */
77
+ getIdentity(nectar: string): Promise<SourceGraphRow | undefined>;
78
+ /** Bump a nectar's `last_update_date` (called when a new version is appended). */
79
+ touchIdentity(nectar: string, lastUpdateDate: string): Promise<void>;
80
+ /** Append a `source_graph_versions` row. The caller supplies seq via `nextSeq`. */
81
+ appendVersion(row: SourceGraphVersionRow): Promise<void>;
82
+ /** The next monotonic seq for a nectar (0 if it has no versions yet). */
83
+ nextSeq(nectar: string): Promise<number>;
84
+ /** The latest (MAX seq) version row for a nectar, or undefined. */
85
+ latestVersion(nectar: string): Promise<SourceGraphVersionRow | undefined>;
86
+ /** Every nectar's latest version, scoped to the tenancy (soft-filtered by `project_id`). */
87
+ listLatestVersions(tenancy: Tenancy): Promise<LatestVersion[]>;
88
+ /** The latest version whose current path equals `path`, scoped. */
89
+ latestVersionByPath(tenancy: Tenancy, path: string): Promise<LatestVersion | undefined>;
90
+ /** A nectar whose latest version content_hash equals `contentHash`, scoped. First match. */
91
+ latestVersionByHash(tenancy: Tenancy, contentHash: string): Promise<LatestVersion | undefined>;
92
+ /**
93
+ * Delete a nectar (identity + versions), scoped to `tenancy`. The SOLE
94
+ * deletion path (`prune --confirm`); a no-op when the nectar does not exist or
95
+ * its identity is outside `tenancy` (a cross-project delete is refused, AC-20).
96
+ * The tenancy predicate makes the Deep Lake adapter inherit the same guard the
97
+ * in-memory adapter enforces, so no delete crosses a project boundary.
98
+ */
99
+ deleteNectar(tenancy: Tenancy, nectar: string): Promise<void>;
100
+ }
101
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/source-graph/store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EACV,cAAc,EACd,qBAAqB,EACrB,OAAO,EACR,MAAM,YAAY,CAAC;AAEpB,iFAAiF;AACjF,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,qBAAqB,CAAC;CACzC;AAED,MAAM,WAAW,gBAAgB;IAC/B,wFAAwF;IACxF,cAAc,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI,CAAC;IAE1C,qDAAqD;IACrD,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAAC;IAExD,kFAAkF;IAClF,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAE5D,mFAAmF;IACnF,aAAa,CAAC,GAAG,EAAE,qBAAqB,GAAG,IAAI,CAAC;IAEhD,yEAAyE;IACzE,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IAEhC,mEAAmE;IACnE,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS,CAAC;IAEjE;;;OAGG;IACH,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,aAAa,EAAE,CAAC;IAEtD,sFAAsF;IACtF,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAAC;IAE/E;;;OAGG;IACH,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAAC;IAEtF;;;;;;OAMG;IACH,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACtD;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,WAAW,qBAAqB;IACpC,yFAAyF;IACzF,cAAc,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnD,qDAAqD;IACrD,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAAC;IAEjE,kFAAkF;IAClF,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAErE,mFAAmF;IACnF,aAAa,CAAC,GAAG,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzD,yEAAyE;IACzE,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAEzC,mEAAmE;IACnE,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAAC;IAE1E,4FAA4F;IAC5F,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAE/D,mEAAmE;IACnE,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAAC;IAExF,4FAA4F;IAC5F,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAAC;IAE/F;;;;;;OAMG;IACH,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/D"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/source-graph/store.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ /** Mint a fresh nectar (26-char ULID). Never derived from content; created once. */
2
+ export declare function mintNectar(nowMs?: number): string;
3
+ /** Decode a nectar's embedded 48-bit timestamp back to milliseconds since epoch. */
4
+ export declare function nectarTimestampMs(nectar: string): number;
5
+ /** The nectar's creation time as an ISO 8601 string (for source_graph.created_at). */
6
+ export declare function nectarCreatedAt(nectar: string): string;
7
+ /** Shape check: 26 chars, all in the Crockford alphabet. */
8
+ export declare function isValidNectar(value: string): boolean;
9
+ //# sourceMappingURL=ulid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ulid.d.ts","sourceRoot":"","sources":["../../src/source-graph/ulid.ts"],"names":[],"mappings":"AAkCA,oFAAoF;AACpF,wBAAgB,UAAU,CAAC,KAAK,GAAE,MAAmB,GAAG,MAAM,CAE7D;AAED,oFAAoF;AACpF,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CASxD;AAED,sFAAsF;AACtF,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,4DAA4D;AAC5D,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAIpD"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * ULID minting for nectars (PRD-005 / PRD-006, per ai/identity-and-reassociation.md).
3
+ *
4
+ * A nectar is a 26-char ULID: 48-bit millisecond timestamp + 80 bits of
5
+ * randomness, Crockford base32, uppercase. Two load-bearing properties (per the
6
+ * corpus): lexicographic sortability by creation time, and registry-free
7
+ * collision resistance so minting is lock-free and parallel-safe. Node built-ins
8
+ * only (`node:crypto`); no `ulid` package dependency.
9
+ */
10
+ import { randomBytes } from "node:crypto";
11
+ /** Crockford base32 alphabet (excludes I, L, O, U). 32 symbols, 5 bits each. */
12
+ const ENCODING = "0123456789ABCDEFGHJKMNPQRSTVWXYZ";
13
+ const TIME_LEN = 10; // 10 chars * 5 bits = 50 bits, covers the 48-bit ms timestamp
14
+ const RANDOM_LEN = 16; // 16 chars * 5 bits = 80 bits of randomness
15
+ function encodeTime(ms, len) {
16
+ let now = Math.floor(ms);
17
+ let out = "";
18
+ for (let i = 0; i < len; i++) {
19
+ out = ENCODING[now % 32] + out;
20
+ now = Math.floor(now / 32);
21
+ }
22
+ return out;
23
+ }
24
+ function encodeRandom(len) {
25
+ // 256 is divisible by 32, so byte % 32 is unbiased across 0..31.
26
+ const bytes = randomBytes(len);
27
+ let out = "";
28
+ for (let i = 0; i < len; i++)
29
+ out += ENCODING[bytes[i] % 32];
30
+ return out;
31
+ }
32
+ /** Mint a fresh nectar (26-char ULID). Never derived from content; created once. */
33
+ export function mintNectar(nowMs = Date.now()) {
34
+ return encodeTime(nowMs, TIME_LEN) + encodeRandom(RANDOM_LEN);
35
+ }
36
+ /** Decode a nectar's embedded 48-bit timestamp back to milliseconds since epoch. */
37
+ export function nectarTimestampMs(nectar) {
38
+ const timeChars = nectar.slice(0, TIME_LEN);
39
+ let ms = 0;
40
+ for (const ch of timeChars) {
41
+ const idx = ENCODING.indexOf(ch);
42
+ if (idx === -1)
43
+ throw new Error(`invalid ULID time char: ${ch}`);
44
+ ms = ms * 32 + idx;
45
+ }
46
+ return ms;
47
+ }
48
+ /** The nectar's creation time as an ISO 8601 string (for source_graph.created_at). */
49
+ export function nectarCreatedAt(nectar) {
50
+ return new Date(nectarTimestampMs(nectar)).toISOString();
51
+ }
52
+ /** Shape check: 26 chars, all in the Crockford alphabet. */
53
+ export function isValidNectar(value) {
54
+ if (value.length !== TIME_LEN + RANDOM_LEN)
55
+ return false;
56
+ for (const ch of value)
57
+ if (ENCODING.indexOf(ch) === -1)
58
+ return false;
59
+ return true;
60
+ }
61
+ //# sourceMappingURL=ulid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ulid.js","sourceRoot":"","sources":["../../src/source-graph/ulid.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,gFAAgF;AAChF,MAAM,QAAQ,GAAG,kCAAkC,CAAC;AACpD,MAAM,QAAQ,GAAG,EAAE,CAAC,CAAC,8DAA8D;AACnF,MAAM,UAAU,GAAG,EAAE,CAAC,CAAC,4CAA4C;AAEnE,SAAS,UAAU,CAAC,EAAU,EAAE,GAAW;IACzC,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACzB,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,GAAG,GAAG,QAAQ,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC;QAC/B,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,YAAY,CAAC,GAAW;IAC/B,iEAAiE;IACjE,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE;QAAE,GAAG,IAAI,QAAQ,CAAE,KAAK,CAAC,CAAC,CAAY,GAAG,EAAE,CAAC,CAAC;IACzE,OAAO,GAAG,CAAC;AACb,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,UAAU,CAAC,QAAgB,IAAI,CAAC,GAAG,EAAE;IACnD,OAAO,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;AAChE,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC9C,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC5C,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACjC,IAAI,GAAG,KAAK,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,EAAE,EAAE,CAAC,CAAC;QACjE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC;IACrB,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,eAAe,CAAC,MAAc;IAC5C,OAAO,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;AAC3D,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,GAAG,UAAU;QAAE,OAAO,KAAK,CAAC;IACzD,KAAK,MAAM,EAAE,IAAI,KAAK;QAAE,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;IACtE,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,66 @@
1
+ import type { PipelineStatus } from "../health.js";
2
+ import { type Timer } from "../poll-loop.js";
3
+ import type { SqliteDatabaseLike } from "./db.js";
4
+ /**
5
+ * SIGNED OFF 2026-07-02 (decision #33, `PRD-DECISIONS-AND-DEFAULTS.md`),
6
+ * amended from the original 10s. doctor polls each service's SQLite
7
+ * roughly every 1s (ADR-0001); nectar's own heartbeat is a separate,
8
+ * slower write interval (last-seen only needs to look "fresh enough" relative
9
+ * to doctor's staleness threshold, not to match its poll rate 1:1). 5s
10
+ * halves the worst-case delay before a stale last_seen reveals a dead daemon
11
+ * while still avoiding a write per poll tick.
12
+ */
13
+ export declare const DEFAULT_HEARTBEAT_INTERVAL_MS = 5000;
14
+ export interface CheckinWriterOptions {
15
+ readonly db: SqliteDatabaseLike;
16
+ /** ISO 8601 "now"; injectable for deterministic tests. */
17
+ now?(): string;
18
+ }
19
+ /** Writes/refreshes the single-row `service_status` runtime record. */
20
+ export declare class CheckinWriter {
21
+ private readonly db;
22
+ private readonly nowFn;
23
+ private bindingTime;
24
+ constructor(opts: CheckinWriterOptions);
25
+ /** The binding time recorded by the most recent {@link checkin}, or null before the first check-in. */
26
+ get currentBindingTime(): string | null;
27
+ /**
28
+ * A fresh binding (AC-017a.2.1, AC-017a.3.2): a NEW binding_time, an initial
29
+ * last_seen equal to it, and the current health. Called once per daemon
30
+ * start (a restart is observed as a new binding_time while the registry
31
+ * entry and DB path stay stable).
32
+ */
33
+ checkin(health: PipelineStatus): void;
34
+ /** Advance last_seen (and refresh health) without changing binding_time (AC-017a.3.1). */
35
+ heartbeat(health: PipelineStatus): void;
36
+ private upsert;
37
+ }
38
+ export interface CheckinServiceOptions {
39
+ readonly writer: CheckinWriter;
40
+ /** The current health value, sourced from the SAME `PipelineStatus` `/health` reports (AC-017a.2.2). */
41
+ readonly health: () => PipelineStatus;
42
+ readonly intervalMs?: number;
43
+ /** Injected timer for deterministic tests (mirrors `PollLoop`'s seam). */
44
+ readonly timer?: Timer;
45
+ }
46
+ /**
47
+ * Owns the check-in-then-heartbeat lifecycle: one `checkin()` on `start()`,
48
+ * then a `heartbeat()` on a fixed interval until `stop()`. This is the piece
49
+ * `daemon.ts` starts/stops alongside the worker and the HTTP server.
50
+ */
51
+ export declare class CheckinService {
52
+ private readonly writer;
53
+ private readonly health;
54
+ private readonly intervalMs;
55
+ private readonly timer;
56
+ private handle;
57
+ private running;
58
+ constructor(opts: CheckinServiceOptions);
59
+ get isRunning(): boolean;
60
+ /** Check in (a fresh binding_time) and arm the heartbeat. Idempotent. */
61
+ start(): void;
62
+ /** Disarm the heartbeat. Idempotent. */
63
+ stop(): void;
64
+ private scheduleNext;
65
+ }
66
+ //# sourceMappingURL=checkin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkin.d.ts","sourceRoot":"","sources":["../../src/telemetry/checkin.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAa,KAAK,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAElD;;;;;;;;GAQG;AACH,eAAO,MAAM,6BAA6B,OAAQ,CAAC;AAEnD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,EAAE,EAAE,kBAAkB,CAAC;IAChC,0DAA0D;IAC1D,GAAG,CAAC,IAAI,MAAM,CAAC;CAChB;AAED,uEAAuE;AACvE,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAqB;IACxC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAe;IACrC,OAAO,CAAC,WAAW,CAAuB;gBAE9B,IAAI,EAAE,oBAAoB;IAKtC,uGAAuG;IACvG,IAAI,kBAAkB,IAAI,MAAM,GAAG,IAAI,CAEtC;IAED;;;;;OAKG;IACH,OAAO,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IAMrC,0FAA0F;IAC1F,SAAS,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IAKvC,OAAO,CAAC,MAAM;CAiBf;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,wGAAwG;IACxG,QAAQ,CAAC,MAAM,EAAE,MAAM,cAAc,CAAC;IACtC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,0EAA0E;IAC1E,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;CACxB;AAED;;;;GAIG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuB;IAC9C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,OAAO,CAAS;gBAEZ,IAAI,EAAE,qBAAqB;IAOvC,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,yEAAyE;IACzE,KAAK,IAAI,IAAI;IAab,wCAAwC;IACxC,IAAI,IAAI,IAAI;IAQZ,OAAO,CAAC,YAAY;CAWrB"}
@@ -0,0 +1,142 @@
1
+ /**
2
+ * The runtime status check-in writer (PRD-017a), per doctor's
3
+ * `ADR-0002-service-registration-static-registry-plus-runtime-sqlite.md`.
4
+ *
5
+ * `service_status` (id=1, latest-wins) carries binding time, last-seen, and
6
+ * health - the churning runtime layer doctor merges with the static
7
+ * registry entry (`doctor-registry.ts`). Two writers:
8
+ * - `checkin()` a FRESH binding: a new binding_time, an initial last_seen
9
+ * equal to it, and the current health (AC-017a.2.1).
10
+ * - `heartbeat()` advances last_seen (and refreshes health) WITHOUT touching
11
+ * binding_time, so doctor can tell "quiet but alive" from
12
+ * "dead" purely from the age of last_seen (AC-017a.3.1).
13
+ *
14
+ * `deeplake_connected`/`deeplake_last_comm` are left NULL: nectar has no
15
+ * in-process "am I currently connected to Deep Lake" signal today (the
16
+ * `DeepLakeHiveGraphStore` is a stateless per-call HTTP client, not a live
17
+ * connection) - a documented approximation, not a fabricated value. A future
18
+ * PRD that adds real connectivity tracking can populate these columns without
19
+ * a schema change (see PRD-017 evidence).
20
+ *
21
+ * Every write is fail-soft (AC-7 / AC-017a): a locked file, a permissions
22
+ * error, or a missing directory is caught and dropped, never propagated into
23
+ * daemon boot or the nectar pipeline.
24
+ */
25
+ import { NECTAR_DAEMON_NAME } from "../doctor-registry.js";
26
+ import { realTimer } from "../poll-loop.js";
27
+ /**
28
+ * SIGNED OFF 2026-07-02 (decision #33, `PRD-DECISIONS-AND-DEFAULTS.md`),
29
+ * amended from the original 10s. doctor polls each service's SQLite
30
+ * roughly every 1s (ADR-0001); nectar's own heartbeat is a separate,
31
+ * slower write interval (last-seen only needs to look "fresh enough" relative
32
+ * to doctor's staleness threshold, not to match its poll rate 1:1). 5s
33
+ * halves the worst-case delay before a stale last_seen reveals a dead daemon
34
+ * while still avoiding a write per poll tick.
35
+ */
36
+ export const DEFAULT_HEARTBEAT_INTERVAL_MS = 5_000;
37
+ /** Writes/refreshes the single-row `service_status` runtime record. */
38
+ export class CheckinWriter {
39
+ db;
40
+ nowFn;
41
+ bindingTime = null;
42
+ constructor(opts) {
43
+ this.db = opts.db;
44
+ this.nowFn = opts.now ?? (() => new Date().toISOString());
45
+ }
46
+ /** The binding time recorded by the most recent {@link checkin}, or null before the first check-in. */
47
+ get currentBindingTime() {
48
+ return this.bindingTime;
49
+ }
50
+ /**
51
+ * A fresh binding (AC-017a.2.1, AC-017a.3.2): a NEW binding_time, an initial
52
+ * last_seen equal to it, and the current health. Called once per daemon
53
+ * start (a restart is observed as a new binding_time while the registry
54
+ * entry and DB path stay stable).
55
+ */
56
+ checkin(health) {
57
+ const now = this.nowFn();
58
+ this.bindingTime = now;
59
+ this.upsert(now, now, health);
60
+ }
61
+ /** Advance last_seen (and refresh health) without changing binding_time (AC-017a.3.1). */
62
+ heartbeat(health) {
63
+ if (this.bindingTime === null)
64
+ this.bindingTime = this.nowFn();
65
+ this.upsert(this.bindingTime, this.nowFn(), health);
66
+ }
67
+ upsert(bindingTime, lastSeen, health) {
68
+ try {
69
+ this.db
70
+ .prepare(`INSERT INTO service_status (id, name, binding_time, last_seen, health, deeplake_connected, deeplake_last_comm)
71
+ VALUES (1, ?, ?, ?, ?, NULL, NULL)
72
+ ON CONFLICT(id) DO UPDATE SET
73
+ name = excluded.name,
74
+ binding_time = excluded.binding_time,
75
+ last_seen = excluded.last_seen,
76
+ health = excluded.health`)
77
+ .run(NECTAR_DAEMON_NAME, bindingTime, lastSeen, health);
78
+ }
79
+ catch {
80
+ // fail-soft (AC-7 / AC-017a): a status write error never blocks boot or the pipeline.
81
+ }
82
+ }
83
+ }
84
+ /**
85
+ * Owns the check-in-then-heartbeat lifecycle: one `checkin()` on `start()`,
86
+ * then a `heartbeat()` on a fixed interval until `stop()`. This is the piece
87
+ * `daemon.ts` starts/stops alongside the worker and the HTTP server.
88
+ */
89
+ export class CheckinService {
90
+ writer;
91
+ health;
92
+ intervalMs;
93
+ timer;
94
+ handle = null;
95
+ running = false;
96
+ constructor(opts) {
97
+ this.writer = opts.writer;
98
+ this.health = opts.health;
99
+ this.intervalMs = Math.max(1, opts.intervalMs ?? DEFAULT_HEARTBEAT_INTERVAL_MS);
100
+ this.timer = opts.timer ?? realTimer;
101
+ }
102
+ get isRunning() {
103
+ return this.running;
104
+ }
105
+ /** Check in (a fresh binding_time) and arm the heartbeat. Idempotent. */
106
+ start() {
107
+ if (this.running)
108
+ return;
109
+ this.running = true;
110
+ try {
111
+ // `this.health()` is caller-supplied and can throw; the writer is fail-soft
112
+ // but the sampler is not, so guard the whole sample-then-write here too.
113
+ this.writer.checkin(this.health());
114
+ }
115
+ catch {
116
+ // fail-soft (AC-7 / AC-017a): telemetry must never block daemon boot.
117
+ }
118
+ this.scheduleNext();
119
+ }
120
+ /** Disarm the heartbeat. Idempotent. */
121
+ stop() {
122
+ this.running = false;
123
+ if (this.handle !== null) {
124
+ this.timer.clear(this.handle);
125
+ this.handle = null;
126
+ }
127
+ }
128
+ scheduleNext() {
129
+ if (!this.running)
130
+ return;
131
+ this.handle = this.timer.set(() => {
132
+ try {
133
+ this.writer.heartbeat(this.health());
134
+ }
135
+ catch {
136
+ // fail-soft: one bad health sample must not kill the heartbeat loop.
137
+ }
138
+ this.scheduleNext();
139
+ }, this.intervalMs);
140
+ }
141
+ }
142
+ //# sourceMappingURL=checkin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkin.js","sourceRoot":"","sources":["../../src/telemetry/checkin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /** The subdirectory of the runtime dir the telemetry database lives under. */
2
+ export declare const TELEMETRY_DIR_NAME = "telemetry";
3
+ /** The telemetry database's filename, matching doctor's per-service naming (`<name>.sqlite`). */
4
+ export declare const TELEMETRY_DB_FILE_NAME = "nectar.sqlite";
5
+ /** Derive the telemetry DB path from a resolved runtime dir (keeps it alongside the pid/lock files). */
6
+ export declare function telemetryDbPathForRuntimeDir(runtimeDir: string): string;
7
+ /** The default telemetry DB path: `~/.honeycomb/telemetry/nectar.sqlite`. */
8
+ export declare function defaultTelemetryDbPath(home?: string): string;
9
+ /**
10
+ * The minimal `node:sqlite` `DatabaseSync` surface this module uses, declared
11
+ * structurally so callers (and tests) can inject a fake without a hard
12
+ * `import("node:sqlite")` type dependency.
13
+ */
14
+ export interface SqliteStatementLike {
15
+ run(...params: unknown[]): {
16
+ changes: number | bigint;
17
+ };
18
+ get(...params: unknown[]): Record<string, unknown> | undefined;
19
+ all(...params: unknown[]): Array<Record<string, unknown>>;
20
+ }
21
+ export interface SqliteDatabaseLike {
22
+ exec(sql: string): void;
23
+ prepare(sql: string): SqliteStatementLike;
24
+ close(): void;
25
+ }
26
+ /**
27
+ * Open (or create) the telemetry database at `dbPath` in WAL mode, creating all
28
+ * three tables (idempotent, additive) if absent. Throws on any failure (missing
29
+ * `node:sqlite`, an unwritable directory, a corrupt file, ...); the caller
30
+ * (`index.ts`'s `createTelemetry`) catches and degrades to a no-op rather than
31
+ * ever propagating into daemon boot or the nectar pipeline.
32
+ */
33
+ export declare function openTelemetryDb(dbPath: string): SqliteDatabaseLike;
34
+ //# sourceMappingURL=db.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/telemetry/db.ts"],"names":[],"mappings":"AA6BA,8EAA8E;AAC9E,eAAO,MAAM,kBAAkB,cAAc,CAAC;AAC9C,iGAAiG;AACjG,eAAO,MAAM,sBAAsB,kBAAkB,CAAC;AAEtD,wGAAwG;AACxG,wBAAgB,4BAA4B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEvE;AAED,6EAA6E;AAC7E,wBAAgB,sBAAsB,CAAC,IAAI,GAAE,MAAkB,GAAG,MAAM,CAEvE;AAED;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,GAAG,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG;QAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IACxD,GAAG,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IAC/D,GAAG,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAC3D;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,mBAAmB,CAAC;IAC1C,KAAK,IAAI,IAAI,CAAC;CACf;AAiBD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,kBAAkB,CA2BlE"}