@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,198 @@
1
+ /**
2
+ * The brooding pipeline orchestrator (PRD-007).
3
+ *
4
+ * Runs the FIXED order carried verbatim from `brooding-pipeline.md`, mirroring
5
+ * honeycomb's `runGraphBuild` discover->extract->persist composition:
6
+ *
7
+ * discover -> pre-check -> bucket -> describe -> embed -> persist -> regenerate-projection
8
+ *
9
+ * `planBrood` runs discover -> pre-check -> bucket -> estimate with NO LLM call
10
+ * and NO store write (the `--dry-run` cost preview). `runBrood` runs the full
11
+ * pipeline: it inherits hash-matched files ($0), applies the resumability state
12
+ * machine to skip already-brooded files, mints identities, describes and embeds
13
+ * the survivors, persists the rows, and regenerates the projection.
14
+ *
15
+ * Every mint and every description is a committed store write (no in-memory
16
+ * accumulation), so a killed brood resumes from `describe_status` with no
17
+ * lockfile (PRD-007c). All stages beyond discovery reuse the existing modules:
18
+ * `hive-graph` (store/model/ulid/hash/paths), `portkey` (transport), `embeddings`
19
+ * (provider), `projection` (inherit/rebuild).
20
+ */
21
+ import type { HiveGraphRow, HiveGraphVersionRow, Tenancy } from "../hive-graph/model.js";
22
+ import type { HiveGraphStore } from "../hive-graph/store.js";
23
+ import type { RegistrationFs } from "../registration/service.js";
24
+ import type { IgnorePredicate } from "../registration/ignore.js";
25
+ import { type PortkeyFetch } from "../portkey/transport.js";
26
+ import type { PortkeyEnabled } from "../portkey/config.js";
27
+ import { type EmbedProvider } from "../embeddings/provider.js";
28
+ import { type PortableProjection } from "../projection/format.js";
29
+ import { type DiscoverySource, type GitLsFiles } from "./discovery.js";
30
+ import { type PreparedFile } from "./precheck.js";
31
+ import { type PackBatchesOptions } from "./bucketing.js";
32
+ import { type BroodCostEstimate } from "./cost.js";
33
+ import { type DescribeFn } from "./describe.js";
34
+ /** A typed pipeline error (e.g. a real brood invoked with no describe transport). */
35
+ export declare class BroodError extends Error {
36
+ constructor(message: string);
37
+ }
38
+ /** Shared configuration for {@link planBrood} and {@link runBrood}. */
39
+ export interface BroodConfig {
40
+ readonly store: HiveGraphStore;
41
+ readonly tenancy: Tenancy;
42
+ /** The project root discovery walks and the projection is written under. */
43
+ readonly root: string;
44
+ /** Filesystem seam (stat/read/list); typically `createDiskRegistrationFs(root)`. */
45
+ readonly fs: RegistrationFs;
46
+ /** git-ls-files seam (default spawns git); overridden in tests. */
47
+ readonly gitLsFiles?: GitLsFiles;
48
+ /** Ignore predicate for the walk fallback (default: the shared CodeGraph ignore). */
49
+ readonly isIgnored?: IgnorePredicate;
50
+ /**
51
+ * The committed projection consulted by the pre-check. `undefined` -> attempt
52
+ * to load `<root>/.honeycomb/nectars.json`; `null` -> no projection (every
53
+ * candidate is a survivor).
54
+ */
55
+ readonly projection?: PortableProjection | null;
56
+ /** ISO 8601 "now"; injectable for deterministic tests. */
57
+ readonly now?: () => string;
58
+ /** Dynamic batch-packing overrides (default: the decision #22 constants). */
59
+ readonly packOptions?: PackBatchesOptions;
60
+ /** Structured log sink; defaults to a no-op. */
61
+ readonly log?: (line: Record<string, unknown>) => void;
62
+ }
63
+ /** Options that shape a full {@link runBrood} (the CLI flags). */
64
+ export interface BroodRunOptions {
65
+ /** `--force`: re-describe every non-skipped file, ignoring existing descriptions. */
66
+ readonly force?: boolean;
67
+ /** `--limit N`: brood at most N pending (describe-eligible) files (cost cap). */
68
+ readonly limit?: number;
69
+ /** `--dry-run`: discover + bucket + estimate, no LLM call, no writes. */
70
+ readonly dryRun?: boolean;
71
+ /** `--model <new>`: the resolved describe model id (audit-stamped on each row). */
72
+ readonly model?: string;
73
+ }
74
+ /** Transport + provider seams a full describe run needs (never touched by dry-run). */
75
+ export interface BroodRuntimeDeps {
76
+ /** The chat transport. Default wires {@link describeViaPortkey} against `portkey`. */
77
+ readonly describe?: DescribeFn;
78
+ /** Portkey credentials used to build the default `describe` when none is given. */
79
+ readonly portkey?: PortkeyEnabled;
80
+ /** Injectable fetch for the default describe transport (tests). */
81
+ readonly fetch?: PortkeyFetch;
82
+ /** The embedding provider (default: the disabled provider -> NULL embeddings, BM25 fallback). */
83
+ readonly embedProvider?: EmbedProvider;
84
+ /** Active embedding model id stamped as `embed_model` on rows carrying an embedding (PRD-018i / NEC-018). */
85
+ readonly embedModelId?: string | null;
86
+ /** Projection regeneration seam (default: `rebuildProjection` from the store). Return the written path. */
87
+ readonly regenerateProjection?: (store: HiveGraphStore, tenancy: Tenancy, root: string) => string;
88
+ }
89
+ /** The bucket + estimate a dry-run (or the plan phase of a run) produces. */
90
+ export interface BroodPlan {
91
+ readonly source: DiscoverySource;
92
+ /** PRD-018c AC-018c.10/11: set when `source` is "walk" because git was present but errored (never when git is simply absent). */
93
+ readonly degraded?: {
94
+ readonly reason: string;
95
+ };
96
+ readonly discoveredCount: number;
97
+ readonly inheritedCount: number;
98
+ readonly survivorCount: number;
99
+ readonly skipBinaryCount: number;
100
+ readonly skipTooLargeCount: number;
101
+ readonly batchFileCount: number;
102
+ readonly soloFileCount: number;
103
+ readonly batchCalls: number;
104
+ readonly soloCalls: number;
105
+ readonly estimate: BroodCostEstimate;
106
+ }
107
+ /**
108
+ * Real per-call token usage summed across every describe call this run
109
+ * (brooding review M4 / EX-3), as opposed to {@link BroodPlan.estimate}'s
110
+ * pre-run projection. Zero on a dry-run (no calls are made).
111
+ */
112
+ export interface ActualBroodUsage {
113
+ readonly inputTokens: number;
114
+ readonly outputTokens: number;
115
+ readonly usd: number;
116
+ }
117
+ /** The full outcome of a {@link runBrood}. */
118
+ export interface BroodResult extends BroodPlan {
119
+ readonly dryRun: boolean;
120
+ /** Files skipped on resume because already terminally brooded (rule 1). */
121
+ readonly skippedResumeCount: number;
122
+ /** Files whose nectar was reused (rule 2 re-enqueue). */
123
+ readonly reenqueueCount: number;
124
+ /** Files minted fresh (rule 3 discover-fresh). */
125
+ readonly freshCount: number;
126
+ /** Files that reached `describe_status = 'described'` this run. */
127
+ readonly describedCount: number;
128
+ /** Files whose description failed this run (re-enqueueable). */
129
+ readonly failedCount: number;
130
+ /** The projection path written at end-of-brood, or null on dry-run. */
131
+ readonly projectionPath: string | null;
132
+ /** Real per-call usage summed from describe results (brooding review M4 / EX-3); zero on dry-run. */
133
+ readonly actualUsage: ActualBroodUsage;
134
+ }
135
+ export declare function defaultNow(): string;
136
+ /**
137
+ * The store-agnostic subset {@link resolveProjection} needs. Both the sync
138
+ * {@link BroodConfig} and the async brood config (`pipeline-async.ts`) satisfy
139
+ * it, so the projection-resolution + row-building helpers below are shared
140
+ * verbatim across the sync and async pipelines rather than duplicated.
141
+ */
142
+ export interface BroodProjectionContext {
143
+ readonly root: string;
144
+ readonly tenancy: Tenancy;
145
+ readonly projection?: PortableProjection | null;
146
+ }
147
+ /** Resolve the projection to consult: explicit value, else a disk load, else null. */
148
+ export declare function resolveProjection(config: BroodProjectionContext): PortableProjection | null;
149
+ /** The subset of {@link BroodRunOptions} a plan-only pass needs (`--force` only; a plan never brooding-limits or dry-runs itself). */
150
+ export interface PlanBroodOptions {
151
+ readonly force?: boolean;
152
+ }
153
+ /**
154
+ * The `--dry-run` cost preview (PRD-007d): discover -> pre-check -> bucket ->
155
+ * estimate. Makes NO LLM call and writes NOTHING (no rows, no projection). The
156
+ * bucket counts and estimate reflect only the resumability-remaining survivors
157
+ * (brooding review M4 / EX-3), so a preview on a partially-brooded project
158
+ * quotes the cost of finishing the job, not re-doing it.
159
+ */
160
+ export declare function planBrood(config: BroodConfig, options?: PlanBroodOptions): BroodPlan;
161
+ export interface RowFields {
162
+ readonly title?: string;
163
+ readonly description?: string;
164
+ readonly concepts?: string;
165
+ readonly describeStatus: HiveGraphVersionRow["describeStatus"];
166
+ readonly describeModel?: string;
167
+ readonly describedAt?: string;
168
+ readonly embedding?: number[] | null;
169
+ /** Embedding-model provenance (PRD-018i / NEC-018); stamped only when `embedding` is non-null. */
170
+ readonly embedModel?: string | null;
171
+ }
172
+ /** Build a version row for a prepared file at `seq` with the given describe fields. */
173
+ export declare function buildVersionRow(tenancy: Tenancy, now: string, prepared: PreparedFile, nectar: string, seq: number, fields: RowFields): HiveGraphVersionRow;
174
+ /** Mint a fresh identity row for a brooded file (originally minted; no copy provenance). */
175
+ export declare function buildIdentity(tenancy: Tenancy, now: string, nectar: string): HiveGraphRow;
176
+ export interface ToBroodItem {
177
+ readonly prepared: PreparedFile;
178
+ readonly action: "fresh" | "re-enqueue";
179
+ /** The existing nectar for a re-enqueue; undefined for fresh (minted in phase A). */
180
+ readonly existingNectar?: string;
181
+ /** True when the re-enqueue's latest version is already `pending` (no new pending write needed). */
182
+ readonly latestPending?: boolean;
183
+ }
184
+ /**
185
+ * The full brooding run (PRD-007). Applies resumability, mints, describes,
186
+ * embeds, persists, and regenerates the projection. On `dryRun`, delegates to
187
+ * {@link planBrood} and returns without any LLM call or store write.
188
+ */
189
+ export declare function runBrood(config: BroodConfig, deps?: BroodRuntimeDeps, options?: BroodRunOptions): Promise<BroodResult>;
190
+ /** The describe-transport seams shared by the sync and async brood runtime deps. */
191
+ export interface DescribeSeams {
192
+ readonly describe?: DescribeFn;
193
+ readonly portkey?: PortkeyEnabled;
194
+ readonly fetch?: PortkeyFetch;
195
+ }
196
+ /** Resolve the describe transport: explicit seam, else build one from Portkey creds. */
197
+ export declare function resolveDescribeFn(deps: DescribeSeams, describeCount: number): DescribeFn;
198
+ //# sourceMappingURL=pipeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/brooding/pipeline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,454 @@
1
+ import { mintNectar, nectarCreatedAt } from "../hive-graph/ulid.js";
2
+ import { filenameOf, extOf } from "../hive-graph/paths.js";
3
+ import { describeViaPortkey } from "../portkey/transport.js";
4
+ import { createOffProvider } from "../embeddings/provider.js";
5
+ import { isValidEmbedding } from "../hive-graph/model.js";
6
+ import { loadProjectionFromFile, } from "../projection/load.js";
7
+ import { DEFAULT_PROJECTION_REL_PATH } from "../projection/format.js";
8
+ import { projectionFinalPath, rebuildProjection } from "../projection/write.js";
9
+ import { discoverFiles } from "./discovery.js";
10
+ import { contentHashPrecheck, prepareFiles } from "./precheck.js";
11
+ import { bucketFiles, classifyBucket } from "./bucketing.js";
12
+ import { estimateBroodCost, usageCostUsd } from "./cost.js";
13
+ import { describeBatchGroup, describeSoloFile, embedDescriptions, } from "./describe.js";
14
+ import { classifyResume } from "./resumability.js";
15
+ /** A typed pipeline error (e.g. a real brood invoked with no describe transport). */
16
+ export class BroodError extends Error {
17
+ constructor(message) {
18
+ super(message);
19
+ this.name = "BroodError";
20
+ }
21
+ }
22
+ const ZERO_ACTUAL_USAGE = { inputTokens: 0, outputTokens: 0, usd: 0 };
23
+ export function defaultNow() {
24
+ return new Date().toISOString();
25
+ }
26
+ /** Resolve the projection to consult: explicit value, else a disk load, else null. */
27
+ export function resolveProjection(config) {
28
+ if (config.projection !== undefined)
29
+ return config.projection;
30
+ const path = projectionFinalPath(config.root, DEFAULT_PROJECTION_REL_PATH);
31
+ const result = loadProjectionFromFile(path, { tenancy: config.tenancy });
32
+ return result.ok ? result.doc : null;
33
+ }
34
+ /** The set of nectars already present in the store (skip re-inheriting these). */
35
+ function existingNectarSet(store, tenancy) {
36
+ const set = new Set();
37
+ for (const lv of store.listLatestVersions(tenancy))
38
+ set.add(lv.identity.nectar);
39
+ return set;
40
+ }
41
+ /** Stage 1-3: discover -> pre-check -> bucket, returning the survivors + buckets. */
42
+ function discoverPrecheckBucket(config, options = {}) {
43
+ const discovery = discoverFiles({
44
+ root: config.root,
45
+ fs: config.fs,
46
+ gitLsFiles: config.gitLsFiles,
47
+ isIgnored: config.isIgnored,
48
+ });
49
+ const prepared = prepareFiles(config.fs, discovery.files);
50
+ const precheck = contentHashPrecheck(prepared, {
51
+ tenancy: config.tenancy,
52
+ projection: resolveProjection(config),
53
+ existingNectars: existingNectarSet(config.store, config.tenancy),
54
+ nowIso: (config.now ?? defaultNow)(),
55
+ });
56
+ // Apply the resume partition before bucketing (brooding review M4 / EX-3):
57
+ // a `--dry-run` (or the plan phase of a run) should quote the REMAINING
58
+ // cost, not the full original cost, on a project that was already
59
+ // partially (or fully) brooded.
60
+ const remaining = [];
61
+ for (const p of precheck.survivors) {
62
+ const existing = config.store.latestVersionByPath(config.tenancy, p.file.relPath);
63
+ const action = classifyResume(existing?.version, { force: options.force, preparedContentHash: p.contentHash });
64
+ if (action !== "skip")
65
+ remaining.push(p);
66
+ }
67
+ const bucketed = bucketFiles(remaining, config.packOptions);
68
+ return {
69
+ source: discovery.source,
70
+ ...(discovery.degraded !== undefined ? { degraded: discovery.degraded } : {}),
71
+ discoveredCount: discovery.files.length,
72
+ inheritedRows: precheck.inheritedRows,
73
+ survivors: precheck.survivors,
74
+ bucketed,
75
+ };
76
+ }
77
+ /**
78
+ * The `--dry-run` cost preview (PRD-007d): discover -> pre-check -> bucket ->
79
+ * estimate. Makes NO LLM call and writes NOTHING (no rows, no projection). The
80
+ * bucket counts and estimate reflect only the resumability-remaining survivors
81
+ * (brooding review M4 / EX-3), so a preview on a partially-brooded project
82
+ * quotes the cost of finishing the job, not re-doing it.
83
+ */
84
+ export function planBrood(config, options = {}) {
85
+ const { source, degraded, discoveredCount, inheritedRows, bucketed } = discoverPrecheckBucket(config, options);
86
+ const estimate = estimateBroodCost(bucketed);
87
+ return {
88
+ source,
89
+ ...(degraded !== undefined ? { degraded } : {}),
90
+ discoveredCount,
91
+ inheritedCount: inheritedRows.length,
92
+ survivorCount: bucketed.skipBinary.length + bucketed.skipTooLarge.length + bucketed.batchFileCount + bucketed.soloFileCount,
93
+ skipBinaryCount: bucketed.skipBinary.length,
94
+ skipTooLargeCount: bucketed.skipTooLarge.length,
95
+ batchFileCount: bucketed.batchFileCount,
96
+ soloFileCount: bucketed.soloFileCount,
97
+ batchCalls: bucketed.batches.length,
98
+ soloCalls: bucketed.soloFiles.length,
99
+ estimate,
100
+ };
101
+ }
102
+ /** Build a version row for a prepared file at `seq` with the given describe fields. */
103
+ export function buildVersionRow(tenancy, now, prepared, nectar, seq, fields) {
104
+ const f = prepared.file;
105
+ return {
106
+ nectar,
107
+ contentHash: prepared.contentHash,
108
+ seq,
109
+ path: f.relPath,
110
+ filename: filenameOf(f.relPath),
111
+ ext: extOf(f.relPath),
112
+ sizeBytes: f.sizeBytes,
113
+ mtimeObserved: f.mtimeObserved,
114
+ title: fields.title ?? "",
115
+ description: fields.description ?? "",
116
+ concepts: fields.concepts ?? "[]",
117
+ embedding: fields.embedding ?? null,
118
+ embedModel: fields.embedding != null ? (fields.embedModel ?? null) : null,
119
+ confidence: null,
120
+ fingerprint: null,
121
+ describedAt: fields.describedAt ?? "",
122
+ describeModel: fields.describeModel ?? "",
123
+ describeStatus: fields.describeStatus,
124
+ observedAt: now,
125
+ orgId: tenancy.orgId,
126
+ workspaceId: tenancy.workspaceId,
127
+ projectId: tenancy.projectId,
128
+ lastUpdateDate: now,
129
+ };
130
+ }
131
+ /** Mint a fresh identity row for a brooded file (originally minted; no copy provenance). */
132
+ export function buildIdentity(tenancy, now, nectar) {
133
+ return {
134
+ nectar,
135
+ kind: "file",
136
+ createdAt: nectarCreatedAt(nectar),
137
+ derivedFromNectar: "",
138
+ forkContentHash: "",
139
+ orgId: tenancy.orgId,
140
+ workspaceId: tenancy.workspaceId,
141
+ projectId: tenancy.projectId,
142
+ lastUpdateDate: now,
143
+ };
144
+ }
145
+ /**
146
+ * The full brooding run (PRD-007). Applies resumability, mints, describes,
147
+ * embeds, persists, and regenerates the projection. On `dryRun`, delegates to
148
+ * {@link planBrood} and returns without any LLM call or store write.
149
+ */
150
+ export async function runBrood(config, deps = {}, options = {}) {
151
+ const now = config.now ?? defaultNow;
152
+ if (options.dryRun === true) {
153
+ const plan = planBrood(config, { force: options.force });
154
+ return {
155
+ ...plan,
156
+ dryRun: true,
157
+ skippedResumeCount: 0,
158
+ reenqueueCount: 0,
159
+ freshCount: 0,
160
+ describedCount: 0,
161
+ failedCount: 0,
162
+ projectionPath: null,
163
+ actualUsage: ZERO_ACTUAL_USAGE,
164
+ };
165
+ }
166
+ // ── Stage 1-2: discover + pre-check (writes inherited rows, $0) ──────────────
167
+ const discovery = discoverFiles({
168
+ root: config.root,
169
+ fs: config.fs,
170
+ gitLsFiles: config.gitLsFiles,
171
+ isIgnored: config.isIgnored,
172
+ });
173
+ const prepared = prepareFiles(config.fs, discovery.files);
174
+ const precheck = contentHashPrecheck(prepared, {
175
+ tenancy: config.tenancy,
176
+ projection: resolveProjection(config),
177
+ existingNectars: existingNectarSet(config.store, config.tenancy),
178
+ nowIso: now(),
179
+ });
180
+ for (const row of precheck.inheritedRows) {
181
+ if (config.store.getIdentity(row.identity.nectar) === undefined) {
182
+ config.store.insertIdentity(row.identity);
183
+ }
184
+ config.store.appendVersion(row.version);
185
+ }
186
+ // ── Resumability: partition survivors into skip / re-enqueue / fresh ─────────
187
+ let skippedResumeCount = 0;
188
+ const toBrood = [];
189
+ for (const p of precheck.survivors) {
190
+ const existing = config.store.latestVersionByPath(config.tenancy, p.file.relPath);
191
+ const action = classifyResume(existing?.version, {
192
+ force: options.force,
193
+ preparedContentHash: p.contentHash,
194
+ });
195
+ if (action === "skip") {
196
+ skippedResumeCount += 1;
197
+ continue;
198
+ }
199
+ if (action === "re-enqueue") {
200
+ toBrood.push({
201
+ prepared: p,
202
+ action: "re-enqueue",
203
+ existingNectar: existing?.identity.nectar,
204
+ latestPending: existing?.version.describeStatus === "pending",
205
+ });
206
+ }
207
+ else {
208
+ toBrood.push({ prepared: p, action: "fresh" });
209
+ }
210
+ }
211
+ // ── Stage 3: bucket. Skip buckets are terminal writes; batch/solo get described.
212
+ const skipItems = [];
213
+ const describeItems = [];
214
+ for (const item of toBrood) {
215
+ const bucket = classifyBucket(item.prepared);
216
+ if (bucket === "skip-binary" || bucket === "skip-too-large")
217
+ skipItems.push(item);
218
+ else
219
+ describeItems.push(item);
220
+ }
221
+ // Persist the skip buckets (mint nectar / reuse; write a terminal skip row).
222
+ let skipBinaryCount = 0;
223
+ let skipTooLargeCount = 0;
224
+ for (const item of skipItems) {
225
+ const bucket = classifyBucket(item.prepared);
226
+ const status = bucket === "skip-binary" ? "skipped-binary" : "skipped-too-large";
227
+ if (status === "skipped-binary")
228
+ skipBinaryCount += 1;
229
+ else
230
+ skipTooLargeCount += 1;
231
+ persistTerminal(config, now(), item, {
232
+ title: filenameOf(item.prepared.file.relPath),
233
+ describeStatus: status,
234
+ });
235
+ }
236
+ // ── `--limit N`: cap describe-eligible files (the rest resume on a later run).
237
+ const capped = options.limit !== undefined && options.limit >= 0
238
+ ? describeItems.slice(0, options.limit)
239
+ : describeItems;
240
+ // ── Phase A: mint identities + write pending rows for the describe set ───────
241
+ const nectarByPrepared = new Map();
242
+ let freshCount = 0;
243
+ let reenqueueCount = 0;
244
+ for (const item of capped) {
245
+ if (item.action === "fresh") {
246
+ freshCount += 1;
247
+ const nectar = mintNectar();
248
+ config.store.insertIdentity(buildIdentity(config.tenancy, now(), nectar));
249
+ config.store.appendVersion(buildVersionRow(config.tenancy, now(), item.prepared, nectar, 0, { describeStatus: "pending" }));
250
+ nectarByPrepared.set(item.prepared, nectar);
251
+ }
252
+ else {
253
+ reenqueueCount += 1;
254
+ const nectar = item.existingNectar;
255
+ if (item.latestPending !== true) {
256
+ // Make the latest version pending again (re-enqueue a failed/described row).
257
+ const seq = config.store.nextSeq(nectar);
258
+ config.store.appendVersion(buildVersionRow(config.tenancy, now(), item.prepared, nectar, seq, { describeStatus: "pending" }));
259
+ config.store.touchIdentity(nectar, now());
260
+ }
261
+ nectarByPrepared.set(item.prepared, nectar);
262
+ }
263
+ }
264
+ // ── Stage 4-6: describe -> embed -> persist, INCREMENTALLY per batch group
265
+ // and per solo call (NEC-003 / AC-018e.1-3): a chunk's described+failed rows
266
+ // are committed to the store before the next chunk's describe call runs, so
267
+ // a mid-run kill (or a throwing embed provider, violating its never-rejects
268
+ // contract) leaves every already-completed chunk durable rather than lost to
269
+ // an end-of-run accumulation. A transport-level batch failure marks its rows
270
+ // failed with no solo retry, and a truncated batch is halved and retried
271
+ // (NEC-013); the positional-fallback safety lives in `describe.ts` (NEC-014).
272
+ const describe = resolveDescribeFn(deps, capped.length);
273
+ const bucketed = bucketFiles(capped.map((i) => i.prepared), config.packOptions);
274
+ const embedProvider = deps.embedProvider ?? createOffProvider();
275
+ const embedModelId = deps.embedModelId ?? null;
276
+ const preparedByNectar = new Map();
277
+ for (const [prepared, nectar] of nectarByPrepared)
278
+ preparedByNectar.set(nectar, prepared);
279
+ const targetFor = (p) => ({ nectar: nectarByPrepared.get(p), prepared: p });
280
+ let describedCount = 0;
281
+ let failedCount = 0;
282
+ let actualInputTokens = 0;
283
+ let actualOutputTokens = 0;
284
+ function accumulateUsage(usage) {
285
+ if (usage === null)
286
+ return;
287
+ actualInputTokens += usage.inputTokens;
288
+ actualOutputTokens += usage.outputTokens;
289
+ }
290
+ /**
291
+ * Embed one chunk's described payloads and persist them immediately. This is
292
+ * the single write path Stage 4 uses for every described outcome (batch or
293
+ * solo), so a chunk is durable before the pipeline moves on to the next
294
+ * describe call.
295
+ */
296
+ async function persistDescribedChunk(entries) {
297
+ if (entries.length === 0)
298
+ return;
299
+ const vectors = await embedDescriptions(embedProvider, entries.map((e) => e.payload));
300
+ entries.forEach((e, i) => {
301
+ const raw = vectors[i] ?? null;
302
+ const embedding = isValidEmbedding(raw) ? raw : null;
303
+ const seq = config.store.nextSeq(e.nectar);
304
+ config.store.appendVersion(buildVersionRow(config.tenancy, now(), e.prepared, e.nectar, seq, {
305
+ title: e.payload.title,
306
+ description: e.payload.description,
307
+ concepts: e.payload.concepts,
308
+ describeStatus: "described",
309
+ describeModel: e.model,
310
+ describedAt: now(),
311
+ embedding,
312
+ embedModel: embedding !== null ? embedModelId : null,
313
+ }));
314
+ config.store.touchIdentity(e.nectar, now());
315
+ describedCount += 1;
316
+ });
317
+ }
318
+ /** Persist a set of nectars as `failed` immediately (re-enqueueable next run / by the enricher). */
319
+ function persistFailedNectars(nectars) {
320
+ for (const nectar of nectars) {
321
+ const prepared = preparedByNectar.get(nectar);
322
+ if (prepared === undefined)
323
+ continue;
324
+ const seq = config.store.nextSeq(nectar);
325
+ config.store.appendVersion(buildVersionRow(config.tenancy, now(), prepared, nectar, seq, { describeStatus: "failed" }));
326
+ config.store.touchIdentity(nectar, now());
327
+ failedCount += 1;
328
+ }
329
+ }
330
+ /** Describe one solo target and persist its outcome before the next solo call is issued (AC-018e.2). */
331
+ async function describeAndPersistSolo(target) {
332
+ const solo = await describeSoloFile(target, describe, options.model);
333
+ accumulateUsage(solo.usage);
334
+ if (solo.payload !== null) {
335
+ await persistDescribedChunk([
336
+ { nectar: target.nectar, prepared: target.prepared, payload: solo.payload, model: solo.model },
337
+ ]);
338
+ }
339
+ else {
340
+ persistFailedNectars([target.nectar]);
341
+ }
342
+ }
343
+ /**
344
+ * Describe one batch group, applying the failure-class retry policy
345
+ * (NEC-013) and the malformed-entry solo retry (spec-preserved), persisting
346
+ * as soon as each outcome is known.
347
+ */
348
+ async function describeAndPersistGroup(targets) {
349
+ if (targets.length === 0)
350
+ return;
351
+ const result = await describeBatchGroup(targets, describe, { model: options.model });
352
+ accumulateUsage(result.usage);
353
+ if (result.outcome === "transport-failed") {
354
+ // Whole-call transport failure: fail the batch's rows and move on; the
355
+ // spec reserves the solo retry for malformed entries, not this (AC-018f.1).
356
+ persistFailedNectars(result.failed);
357
+ return;
358
+ }
359
+ if (result.outcome === "truncated") {
360
+ if (targets.length === 1) {
361
+ // Cannot split further; a single-file batch that still truncates is failed.
362
+ persistFailedNectars(targets.map((t) => t.nectar));
363
+ return;
364
+ }
365
+ const mid = Math.ceil(targets.length / 2);
366
+ await describeAndPersistGroup(targets.slice(0, mid));
367
+ await describeAndPersistGroup(targets.slice(mid));
368
+ return;
369
+ }
370
+ // outcome === "ok": persist the well-formed entries, then solo-retry the
371
+ // malformed ones (per spec), persisting each solo result immediately.
372
+ const describedEntries = [];
373
+ for (const d of result.described) {
374
+ const target = targets.find((t) => t.nectar === d.nectar);
375
+ if (target !== undefined) {
376
+ describedEntries.push({ nectar: d.nectar, prepared: target.prepared, payload: d.payload, model: result.model });
377
+ }
378
+ }
379
+ await persistDescribedChunk(describedEntries);
380
+ for (const nectar of result.failed) {
381
+ const target = targets.find((t) => t.nectar === nectar);
382
+ if (target === undefined) {
383
+ persistFailedNectars([nectar]);
384
+ continue;
385
+ }
386
+ await describeAndPersistSolo(target);
387
+ }
388
+ }
389
+ for (const group of bucketed.batches) {
390
+ await describeAndPersistGroup(group.files.map(targetFor));
391
+ }
392
+ for (const p of bucketed.soloFiles) {
393
+ await describeAndPersistSolo(targetFor(p));
394
+ }
395
+ // ── Stage 7: regenerate the projection ──────────────────────────────────────
396
+ const regenerate = deps.regenerateProjection ??
397
+ ((store, tenancy, root) => rebuildProjection(store, tenancy, { projectRoot: root }).path);
398
+ const projectionPath = regenerate(config.store, config.tenancy, config.root);
399
+ const estimate = estimateBroodCost(bucketed);
400
+ return {
401
+ source: discovery.source,
402
+ discoveredCount: discovery.files.length,
403
+ inheritedCount: precheck.inheritedRows.length,
404
+ survivorCount: precheck.survivors.length,
405
+ skipBinaryCount,
406
+ skipTooLargeCount,
407
+ batchFileCount: bucketed.batchFileCount,
408
+ soloFileCount: bucketed.soloFileCount,
409
+ batchCalls: bucketed.batches.length,
410
+ soloCalls: bucketed.soloFiles.length,
411
+ estimate,
412
+ dryRun: false,
413
+ skippedResumeCount,
414
+ reenqueueCount,
415
+ freshCount,
416
+ describedCount,
417
+ failedCount,
418
+ projectionPath,
419
+ actualUsage: {
420
+ inputTokens: actualInputTokens,
421
+ outputTokens: actualOutputTokens,
422
+ usd: usageCostUsd(actualInputTokens, actualOutputTokens),
423
+ },
424
+ };
425
+ }
426
+ /** Persist a terminal (skip) row: mint+insert for fresh, append+touch for re-enqueue. */
427
+ function persistTerminal(config, now, item, fields) {
428
+ if (item.action === "fresh") {
429
+ const nectar = mintNectar();
430
+ config.store.insertIdentity(buildIdentity(config.tenancy, now, nectar));
431
+ config.store.appendVersion(buildVersionRow(config.tenancy, now, item.prepared, nectar, 0, fields));
432
+ }
433
+ else {
434
+ const nectar = item.existingNectar;
435
+ const seq = config.store.nextSeq(nectar);
436
+ config.store.appendVersion(buildVersionRow(config.tenancy, now, item.prepared, nectar, seq, fields));
437
+ config.store.touchIdentity(nectar, now);
438
+ }
439
+ }
440
+ /** Resolve the describe transport: explicit seam, else build one from Portkey creds. */
441
+ export function resolveDescribeFn(deps, describeCount) {
442
+ if (deps.describe !== undefined)
443
+ return deps.describe;
444
+ if (describeCount === 0) {
445
+ // Nothing to describe; return a transport that is never called.
446
+ return () => Promise.reject(new BroodError("describe transport not configured"));
447
+ }
448
+ const portkey = deps.portkey;
449
+ if (portkey === undefined) {
450
+ throw new BroodError("runBrood: a describe transport is required (pass deps.describe, or deps.portkey to build the default)");
451
+ }
452
+ return (req) => describeViaPortkey(req, { portkey, fetch: deps.fetch });
453
+ }
454
+ //# sourceMappingURL=pipeline.js.map