@ryanstark24/sfgraph-core 1.1.8 → 1.4.0

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 (346) hide show
  1. package/dist/analyze/__tests__/audit-graph.test.js +79 -0
  2. package/dist/analyze/__tests__/audit-graph.test.js.map +1 -1
  3. package/dist/analyze/__tests__/edge-filters.test.d.ts +2 -0
  4. package/dist/analyze/__tests__/edge-filters.test.d.ts.map +1 -0
  5. package/dist/analyze/__tests__/edge-filters.test.js +66 -0
  6. package/dist/analyze/__tests__/edge-filters.test.js.map +1 -0
  7. package/dist/analyze/__tests__/find-nodes.test.d.ts +2 -0
  8. package/dist/analyze/__tests__/find-nodes.test.d.ts.map +1 -0
  9. package/dist/analyze/__tests__/find-nodes.test.js +129 -0
  10. package/dist/analyze/__tests__/find-nodes.test.js.map +1 -0
  11. package/dist/analyze/__tests__/findings.test.d.ts +2 -0
  12. package/dist/analyze/__tests__/findings.test.d.ts.map +1 -0
  13. package/dist/analyze/__tests__/findings.test.js +100 -0
  14. package/dist/analyze/__tests__/findings.test.js.map +1 -0
  15. package/dist/analyze/__tests__/governor-risks-detection.test.js +90 -0
  16. package/dist/analyze/__tests__/governor-risks-detection.test.js.map +1 -1
  17. package/dist/analyze/__tests__/security-fls-filter.test.d.ts +2 -0
  18. package/dist/analyze/__tests__/security-fls-filter.test.d.ts.map +1 -0
  19. package/dist/analyze/__tests__/security-fls-filter.test.js +23 -0
  20. package/dist/analyze/__tests__/security-fls-filter.test.js.map +1 -0
  21. package/dist/analyze/audit-graph.d.ts +26 -2
  22. package/dist/analyze/audit-graph.d.ts.map +1 -1
  23. package/dist/analyze/audit-graph.js +52 -5
  24. package/dist/analyze/audit-graph.js.map +1 -1
  25. package/dist/analyze/dependencies.d.ts +2 -2
  26. package/dist/analyze/dependencies.d.ts.map +1 -1
  27. package/dist/analyze/dependencies.js +9 -3
  28. package/dist/analyze/dependencies.js.map +1 -1
  29. package/dist/analyze/dependents.d.ts +6 -1
  30. package/dist/analyze/dependents.d.ts.map +1 -1
  31. package/dist/analyze/dependents.js +12 -2
  32. package/dist/analyze/dependents.js.map +1 -1
  33. package/dist/analyze/edge-filters.d.ts +37 -0
  34. package/dist/analyze/edge-filters.d.ts.map +1 -0
  35. package/dist/analyze/edge-filters.js +51 -0
  36. package/dist/analyze/edge-filters.js.map +1 -0
  37. package/dist/analyze/find-nodes.d.ts +38 -0
  38. package/dist/analyze/find-nodes.d.ts.map +1 -0
  39. package/dist/analyze/find-nodes.js +51 -0
  40. package/dist/analyze/find-nodes.js.map +1 -0
  41. package/dist/analyze/findings.d.ts +86 -0
  42. package/dist/analyze/findings.d.ts.map +1 -0
  43. package/dist/analyze/findings.js +141 -0
  44. package/dist/analyze/findings.js.map +1 -0
  45. package/dist/analyze/index.d.ts +2 -0
  46. package/dist/analyze/index.d.ts.map +1 -1
  47. package/dist/analyze/index.js +2 -0
  48. package/dist/analyze/index.js.map +1 -1
  49. package/dist/analyze/populate.d.ts.map +1 -1
  50. package/dist/analyze/populate.js +55 -10
  51. package/dist/analyze/populate.js.map +1 -1
  52. package/dist/analyze/security.d.ts +15 -0
  53. package/dist/analyze/security.d.ts.map +1 -1
  54. package/dist/analyze/security.js +59 -3
  55. package/dist/analyze/security.js.map +1 -1
  56. package/dist/analyze/wip-impact.d.ts.map +1 -1
  57. package/dist/analyze/wip-impact.js +12 -2
  58. package/dist/analyze/wip-impact.js.map +1 -1
  59. package/dist/domain/edge-fact.d.ts +25 -0
  60. package/dist/domain/edge-fact.d.ts.map +1 -1
  61. package/dist/domain/metadata-category.d.ts +1 -0
  62. package/dist/domain/metadata-category.d.ts.map +1 -1
  63. package/dist/domain/metadata-category.js +1 -0
  64. package/dist/domain/metadata-category.js.map +1 -1
  65. package/dist/domain/rel-types.d.ts +4 -0
  66. package/dist/domain/rel-types.d.ts.map +1 -1
  67. package/dist/domain/rel-types.js +7 -0
  68. package/dist/domain/rel-types.js.map +1 -1
  69. package/dist/embedding/__tests__/embed.test.d.ts +2 -0
  70. package/dist/embedding/__tests__/embed.test.d.ts.map +1 -0
  71. package/dist/embedding/__tests__/embed.test.js +72 -0
  72. package/dist/embedding/__tests__/embed.test.js.map +1 -0
  73. package/dist/embedding/embed.d.ts.map +1 -1
  74. package/dist/embedding/embed.js +14 -1
  75. package/dist/embedding/embed.js.map +1 -1
  76. package/dist/extractors/interfaces/metadata-source.d.ts +11 -0
  77. package/dist/extractors/interfaces/metadata-source.d.ts.map +1 -1
  78. package/dist/extractors/live-org/__tests__/bulk-retrieve.test.js.map +1 -1
  79. package/dist/extractors/live-org/__tests__/custom-settings.test.d.ts +2 -0
  80. package/dist/extractors/live-org/__tests__/custom-settings.test.d.ts.map +1 -0
  81. package/dist/extractors/live-org/__tests__/custom-settings.test.js +79 -0
  82. package/dist/extractors/live-org/__tests__/custom-settings.test.js.map +1 -0
  83. package/dist/extractors/live-org/__tests__/extractor-enrichment.test.js +70 -8
  84. package/dist/extractors/live-org/__tests__/extractor-enrichment.test.js.map +1 -1
  85. package/dist/extractors/live-org/__tests__/liveness.test.d.ts +2 -0
  86. package/dist/extractors/live-org/__tests__/liveness.test.d.ts.map +1 -0
  87. package/dist/extractors/live-org/__tests__/liveness.test.js +148 -0
  88. package/dist/extractors/live-org/__tests__/liveness.test.js.map +1 -0
  89. package/dist/extractors/live-org/__tests__/mcd-baseline.test.d.ts +2 -0
  90. package/dist/extractors/live-org/__tests__/mcd-baseline.test.d.ts.map +1 -0
  91. package/dist/extractors/live-org/__tests__/mcd-baseline.test.js +177 -0
  92. package/dist/extractors/live-org/__tests__/mcd-baseline.test.js.map +1 -0
  93. package/dist/extractors/live-org/__tests__/metadata-read-batch.test.d.ts +2 -0
  94. package/dist/extractors/live-org/__tests__/metadata-read-batch.test.d.ts.map +1 -0
  95. package/dist/extractors/live-org/__tests__/metadata-read-batch.test.js +75 -0
  96. package/dist/extractors/live-org/__tests__/metadata-read-batch.test.js.map +1 -0
  97. package/dist/extractors/live-org/__tests__/omnistudio-retrieve.test.d.ts +2 -0
  98. package/dist/extractors/live-org/__tests__/omnistudio-retrieve.test.d.ts.map +1 -0
  99. package/dist/extractors/live-org/__tests__/omnistudio-retrieve.test.js +135 -0
  100. package/dist/extractors/live-org/__tests__/omnistudio-retrieve.test.js.map +1 -0
  101. package/dist/extractors/live-org/__tests__/pools.test.js +4 -1
  102. package/dist/extractors/live-org/__tests__/pools.test.js.map +1 -1
  103. package/dist/extractors/live-org/__tests__/rate-limit.test.js +1 -6
  104. package/dist/extractors/live-org/__tests__/rate-limit.test.js.map +1 -1
  105. package/dist/extractors/live-org/__tests__/soql-rebatch.test.d.ts +2 -0
  106. package/dist/extractors/live-org/__tests__/soql-rebatch.test.d.ts.map +1 -0
  107. package/dist/extractors/live-org/__tests__/soql-rebatch.test.js +118 -0
  108. package/dist/extractors/live-org/__tests__/soql-rebatch.test.js.map +1 -0
  109. package/dist/extractors/live-org/__tests__/stop-waiting.test.d.ts +2 -0
  110. package/dist/extractors/live-org/__tests__/stop-waiting.test.d.ts.map +1 -0
  111. package/dist/extractors/live-org/__tests__/stop-waiting.test.js +243 -0
  112. package/dist/extractors/live-org/__tests__/stop-waiting.test.js.map +1 -0
  113. package/dist/extractors/live-org/__tests__/vlocity-runner.test.js +27 -0
  114. package/dist/extractors/live-org/__tests__/vlocity-runner.test.js.map +1 -1
  115. package/dist/extractors/live-org/__tests__/watchdog-budgets.test.d.ts +2 -0
  116. package/dist/extractors/live-org/__tests__/watchdog-budgets.test.d.ts.map +1 -0
  117. package/dist/extractors/live-org/__tests__/watchdog-budgets.test.js +40 -0
  118. package/dist/extractors/live-org/__tests__/watchdog-budgets.test.js.map +1 -0
  119. package/dist/extractors/live-org/__tests__/wedge-isolation.test.d.ts +2 -0
  120. package/dist/extractors/live-org/__tests__/wedge-isolation.test.d.ts.map +1 -0
  121. package/dist/extractors/live-org/__tests__/wedge-isolation.test.js +270 -0
  122. package/dist/extractors/live-org/__tests__/wedge-isolation.test.js.map +1 -0
  123. package/dist/extractors/live-org/bulk-retrieve.d.ts +176 -0
  124. package/dist/extractors/live-org/bulk-retrieve.d.ts.map +1 -1
  125. package/dist/extractors/live-org/bulk-retrieve.js +509 -71
  126. package/dist/extractors/live-org/bulk-retrieve.js.map +1 -1
  127. package/dist/extractors/live-org/capabilities.d.ts.map +1 -1
  128. package/dist/extractors/live-org/capabilities.js.map +1 -1
  129. package/dist/extractors/live-org/extractors/__tests__/apex.test.d.ts +2 -0
  130. package/dist/extractors/live-org/extractors/__tests__/apex.test.d.ts.map +1 -0
  131. package/dist/extractors/live-org/extractors/__tests__/apex.test.js +73 -0
  132. package/dist/extractors/live-org/extractors/__tests__/apex.test.js.map +1 -0
  133. package/dist/extractors/live-org/extractors/__tests__/lwc.parallel.test.d.ts +2 -0
  134. package/dist/extractors/live-org/extractors/__tests__/lwc.parallel.test.d.ts.map +1 -0
  135. package/dist/extractors/live-org/extractors/__tests__/lwc.parallel.test.js +183 -0
  136. package/dist/extractors/live-org/extractors/__tests__/lwc.parallel.test.js.map +1 -0
  137. package/dist/extractors/live-org/extractors/apex.d.ts.map +1 -1
  138. package/dist/extractors/live-org/extractors/apex.js +76 -51
  139. package/dist/extractors/live-org/extractors/apex.js.map +1 -1
  140. package/dist/extractors/live-org/extractors/custom-settings.d.ts +3 -0
  141. package/dist/extractors/live-org/extractors/custom-settings.d.ts.map +1 -0
  142. package/dist/extractors/live-org/extractors/custom-settings.js +66 -0
  143. package/dist/extractors/live-org/extractors/custom-settings.js.map +1 -0
  144. package/dist/extractors/live-org/extractors/flow.d.ts.map +1 -1
  145. package/dist/extractors/live-org/extractors/flow.js.map +1 -1
  146. package/dist/extractors/live-org/extractors/generic-metadata.d.ts.map +1 -1
  147. package/dist/extractors/live-org/extractors/generic-metadata.js.map +1 -1
  148. package/dist/extractors/live-org/extractors/generic-sobject.js.map +1 -1
  149. package/dist/extractors/live-org/extractors/lwc.d.ts.map +1 -1
  150. package/dist/extractors/live-org/extractors/lwc.js +81 -41
  151. package/dist/extractors/live-org/extractors/lwc.js.map +1 -1
  152. package/dist/extractors/live-org/extractors/mcd-baseline.d.ts +60 -0
  153. package/dist/extractors/live-org/extractors/mcd-baseline.d.ts.map +1 -0
  154. package/dist/extractors/live-org/extractors/mcd-baseline.js +118 -0
  155. package/dist/extractors/live-org/extractors/mcd-baseline.js.map +1 -0
  156. package/dist/extractors/live-org/extractors/object.d.ts.map +1 -1
  157. package/dist/extractors/live-org/extractors/object.js.map +1 -1
  158. package/dist/extractors/live-org/extractors/omnistudio-retrieve.d.ts +23 -0
  159. package/dist/extractors/live-org/extractors/omnistudio-retrieve.d.ts.map +1 -0
  160. package/dist/extractors/live-org/extractors/omnistudio-retrieve.js +172 -0
  161. package/dist/extractors/live-org/extractors/omnistudio-retrieve.js.map +1 -0
  162. package/dist/extractors/live-org/extractors/omnistudio.d.ts +8 -1
  163. package/dist/extractors/live-org/extractors/omnistudio.d.ts.map +1 -1
  164. package/dist/extractors/live-org/extractors/omnistudio.js +59 -6
  165. package/dist/extractors/live-org/extractors/omnistudio.js.map +1 -1
  166. package/dist/extractors/live-org/rate-limit.d.ts +98 -15
  167. package/dist/extractors/live-org/rate-limit.d.ts.map +1 -1
  168. package/dist/extractors/live-org/rate-limit.js +278 -41
  169. package/dist/extractors/live-org/rate-limit.js.map +1 -1
  170. package/dist/extractors/live-org/vlocity/runner.d.ts +1 -1
  171. package/dist/extractors/live-org/vlocity/runner.d.ts.map +1 -1
  172. package/dist/extractors/live-org/vlocity/runner.js +49 -14
  173. package/dist/extractors/live-org/vlocity/runner.js.map +1 -1
  174. package/dist/index.d.ts +1 -0
  175. package/dist/index.d.ts.map +1 -1
  176. package/dist/index.js +1 -0
  177. package/dist/index.js.map +1 -1
  178. package/dist/ingest/__tests__/config-values.test.d.ts +2 -0
  179. package/dist/ingest/__tests__/config-values.test.d.ts.map +1 -0
  180. package/dist/ingest/__tests__/config-values.test.js +65 -0
  181. package/dist/ingest/__tests__/config-values.test.js.map +1 -0
  182. package/dist/ingest/__tests__/full-sync-deletion.test.js +11 -4
  183. package/dist/ingest/__tests__/full-sync-deletion.test.js.map +1 -1
  184. package/dist/ingest/__tests__/live-ingest.detect-deletions-guard.test.d.ts +10 -0
  185. package/dist/ingest/__tests__/live-ingest.detect-deletions-guard.test.d.ts.map +1 -0
  186. package/dist/ingest/__tests__/live-ingest.detect-deletions-guard.test.js +251 -0
  187. package/dist/ingest/__tests__/live-ingest.detect-deletions-guard.test.js.map +1 -0
  188. package/dist/ingest/__tests__/live-ingest.test.js.map +1 -1
  189. package/dist/ingest/__tests__/multi-org-orchestrator.test.js +3 -0
  190. package/dist/ingest/__tests__/multi-org-orchestrator.test.js.map +1 -1
  191. package/dist/ingest/__tests__/parser-dispatch.test.d.ts +2 -0
  192. package/dist/ingest/__tests__/parser-dispatch.test.d.ts.map +1 -0
  193. package/dist/ingest/__tests__/parser-dispatch.test.js +55 -0
  194. package/dist/ingest/__tests__/parser-dispatch.test.js.map +1 -0
  195. package/dist/ingest/__tests__/vlocity-dispatch-integration.test.d.ts +2 -0
  196. package/dist/ingest/__tests__/vlocity-dispatch-integration.test.d.ts.map +1 -0
  197. package/dist/ingest/__tests__/vlocity-dispatch-integration.test.js +134 -0
  198. package/dist/ingest/__tests__/vlocity-dispatch-integration.test.js.map +1 -0
  199. package/dist/ingest/detect-deletions-guard.d.ts +45 -0
  200. package/dist/ingest/detect-deletions-guard.d.ts.map +1 -0
  201. package/dist/ingest/detect-deletions-guard.js +63 -0
  202. package/dist/ingest/detect-deletions-guard.js.map +1 -0
  203. package/dist/ingest/live-ingest.d.ts +86 -0
  204. package/dist/ingest/live-ingest.d.ts.map +1 -1
  205. package/dist/ingest/live-ingest.js +783 -449
  206. package/dist/ingest/live-ingest.js.map +1 -1
  207. package/dist/parsers/__tests__/datatransform-structured.test.d.ts +2 -0
  208. package/dist/parsers/__tests__/datatransform-structured.test.d.ts.map +1 -0
  209. package/dist/parsers/__tests__/datatransform-structured.test.js +147 -0
  210. package/dist/parsers/__tests__/datatransform-structured.test.js.map +1 -0
  211. package/dist/parsers/__tests__/edge-provenance.test.d.ts +2 -0
  212. package/dist/parsers/__tests__/edge-provenance.test.d.ts.map +1 -0
  213. package/dist/parsers/__tests__/edge-provenance.test.js +47 -0
  214. package/dist/parsers/__tests__/edge-provenance.test.js.map +1 -0
  215. package/dist/parsers/__tests__/lwc-bindings.test.js +78 -3
  216. package/dist/parsers/__tests__/lwc-bindings.test.js.map +1 -1
  217. package/dist/parsers/__tests__/mcd-gap-fills.test.d.ts +2 -0
  218. package/dist/parsers/__tests__/mcd-gap-fills.test.d.ts.map +1 -0
  219. package/dist/parsers/__tests__/mcd-gap-fills.test.js +75 -0
  220. package/dist/parsers/__tests__/mcd-gap-fills.test.js.map +1 -0
  221. package/dist/parsers/__tests__/object-inline-fields.test.js +2 -2
  222. package/dist/parsers/__tests__/object-inline-fields.test.js.map +1 -1
  223. package/dist/parsers/__tests__/omnistudio-overlap.test.d.ts +2 -0
  224. package/dist/parsers/__tests__/omnistudio-overlap.test.d.ts.map +1 -0
  225. package/dist/parsers/__tests__/omnistudio-overlap.test.js +163 -0
  226. package/dist/parsers/__tests__/omnistudio-overlap.test.js.map +1 -0
  227. package/dist/parsers/__tests__/omnistudio.golden.test.js +5 -6
  228. package/dist/parsers/__tests__/omnistudio.golden.test.js.map +1 -1
  229. package/dist/parsers/__tests__/reflection-walker.test.d.ts +2 -0
  230. package/dist/parsers/__tests__/reflection-walker.test.d.ts.map +1 -0
  231. package/dist/parsers/__tests__/reflection-walker.test.js +162 -0
  232. package/dist/parsers/__tests__/reflection-walker.test.js.map +1 -0
  233. package/dist/parsers/__tests__/vlocity.golden.test.js +9 -13
  234. package/dist/parsers/__tests__/vlocity.golden.test.js.map +1 -1
  235. package/dist/parsers/apex/__tests__/ast-extractor.test.js +64 -4
  236. package/dist/parsers/apex/__tests__/ast-extractor.test.js.map +1 -1
  237. package/dist/parsers/apex/__tests__/empty-body.test.d.ts +2 -0
  238. package/dist/parsers/apex/__tests__/empty-body.test.d.ts.map +1 -0
  239. package/dist/parsers/apex/__tests__/empty-body.test.js +40 -0
  240. package/dist/parsers/apex/__tests__/empty-body.test.js.map +1 -0
  241. package/dist/parsers/apex/__tests__/is-test-attribute.test.d.ts +2 -0
  242. package/dist/parsers/apex/__tests__/is-test-attribute.test.d.ts.map +1 -0
  243. package/dist/parsers/apex/__tests__/is-test-attribute.test.js +56 -0
  244. package/dist/parsers/apex/__tests__/is-test-attribute.test.js.map +1 -0
  245. package/dist/parsers/apex/__tests__/regex-arg-count.test.d.ts +2 -0
  246. package/dist/parsers/apex/__tests__/regex-arg-count.test.d.ts.map +1 -0
  247. package/dist/parsers/apex/__tests__/regex-arg-count.test.js +82 -0
  248. package/dist/parsers/apex/__tests__/regex-arg-count.test.js.map +1 -0
  249. package/dist/parsers/apex/__tests__/regex-inloop.test.d.ts +2 -0
  250. package/dist/parsers/apex/__tests__/regex-inloop.test.d.ts.map +1 -0
  251. package/dist/parsers/apex/__tests__/regex-inloop.test.js +70 -0
  252. package/dist/parsers/apex/__tests__/regex-inloop.test.js.map +1 -0
  253. package/dist/parsers/apex/arity-resolver.d.ts.map +1 -1
  254. package/dist/parsers/apex/arity-resolver.js.map +1 -1
  255. package/dist/parsers/apex/ast-extractor.d.ts.map +1 -1
  256. package/dist/parsers/apex/ast-extractor.js +33 -1
  257. package/dist/parsers/apex/ast-extractor.js.map +1 -1
  258. package/dist/parsers/apex/class.d.ts.map +1 -1
  259. package/dist/parsers/apex/class.js +162 -5
  260. package/dist/parsers/apex/class.js.map +1 -1
  261. package/dist/parsers/apex/trigger.d.ts.map +1 -1
  262. package/dist/parsers/apex/trigger.js +10 -0
  263. package/dist/parsers/apex/trigger.js.map +1 -1
  264. package/dist/parsers/common.d.ts +4 -1
  265. package/dist/parsers/common.d.ts.map +1 -1
  266. package/dist/parsers/common.js +15 -2
  267. package/dist/parsers/common.js.map +1 -1
  268. package/dist/parsers/flow/__tests__/invocable-resolver.test.js.map +1 -1
  269. package/dist/parsers/flow/invocable-resolver.d.ts.map +1 -1
  270. package/dist/parsers/flow/invocable-resolver.js.map +1 -1
  271. package/dist/parsers/generic/reflection-walker.d.ts +90 -0
  272. package/dist/parsers/generic/reflection-walker.d.ts.map +1 -0
  273. package/dist/parsers/generic/reflection-walker.js +193 -0
  274. package/dist/parsers/generic/reflection-walker.js.map +1 -0
  275. package/dist/parsers/lwc/html-visitor.d.ts.map +1 -1
  276. package/dist/parsers/lwc/html-visitor.js +82 -3
  277. package/dist/parsers/lwc/html-visitor.js.map +1 -1
  278. package/dist/parsers/lwc/js-visitor.d.ts.map +1 -1
  279. package/dist/parsers/lwc/js-visitor.js +6 -2
  280. package/dist/parsers/lwc/js-visitor.js.map +1 -1
  281. package/dist/parsers/object/object.d.ts.map +1 -1
  282. package/dist/parsers/object/object.js +35 -5
  283. package/dist/parsers/object/object.js.map +1 -1
  284. package/dist/parsers/omnistudio/data-transform.d.ts.map +1 -1
  285. package/dist/parsers/omnistudio/data-transform.js +39 -6
  286. package/dist/parsers/omnistudio/data-transform.js.map +1 -1
  287. package/dist/parsers/omnistudio/integration-procedure.d.ts.map +1 -1
  288. package/dist/parsers/omnistudio/integration-procedure.js +3 -2
  289. package/dist/parsers/omnistudio/integration-procedure.js.map +1 -1
  290. package/dist/parsers/omnistudio/overlap-detector.d.ts +50 -0
  291. package/dist/parsers/omnistudio/overlap-detector.d.ts.map +1 -0
  292. package/dist/parsers/omnistudio/overlap-detector.js +122 -0
  293. package/dist/parsers/omnistudio/overlap-detector.js.map +1 -0
  294. package/dist/parsers/omnistudio/process.d.ts.map +1 -1
  295. package/dist/parsers/omnistudio/process.js +3 -2
  296. package/dist/parsers/omnistudio/process.js.map +1 -1
  297. package/dist/parsers/omnistudio/ui-card.d.ts.map +1 -1
  298. package/dist/parsers/omnistudio/ui-card.js +3 -2
  299. package/dist/parsers/omnistudio/ui-card.js.map +1 -1
  300. package/dist/parsers/rules/custom-metadata-type.yml +7 -0
  301. package/dist/parsers/rules/custom-setting.yml +24 -0
  302. package/dist/parsers/vlocity/common.d.ts +16 -0
  303. package/dist/parsers/vlocity/common.d.ts.map +1 -1
  304. package/dist/parsers/vlocity/common.js +62 -0
  305. package/dist/parsers/vlocity/common.js.map +1 -1
  306. package/dist/parsers/vlocity/data-raptor.d.ts.map +1 -1
  307. package/dist/parsers/vlocity/data-raptor.js +43 -14
  308. package/dist/parsers/vlocity/data-raptor.js.map +1 -1
  309. package/dist/render/__tests__/sarif.test.d.ts +2 -0
  310. package/dist/render/__tests__/sarif.test.d.ts.map +1 -0
  311. package/dist/render/__tests__/sarif.test.js +126 -0
  312. package/dist/render/__tests__/sarif.test.js.map +1 -0
  313. package/dist/render/sarif.d.ts +94 -0
  314. package/dist/render/sarif.d.ts.map +1 -0
  315. package/dist/render/sarif.js +131 -0
  316. package/dist/render/sarif.js.map +1 -0
  317. package/dist/storage/__tests__/analysis-tables-migration.test.js +1 -1
  318. package/dist/storage/__tests__/graph-store.test.js +13 -0
  319. package/dist/storage/__tests__/graph-store.test.js.map +1 -1
  320. package/dist/storage/__tests__/migrations.test.js +4 -4
  321. package/dist/storage/__tests__/rename-stability.test.d.ts +2 -0
  322. package/dist/storage/__tests__/rename-stability.test.d.ts.map +1 -0
  323. package/dist/storage/__tests__/rename-stability.test.js +135 -0
  324. package/dist/storage/__tests__/rename-stability.test.js.map +1 -0
  325. package/dist/storage/__tests__/sync-generation.test.d.ts +2 -0
  326. package/dist/storage/__tests__/sync-generation.test.d.ts.map +1 -0
  327. package/dist/storage/__tests__/sync-generation.test.js +159 -0
  328. package/dist/storage/__tests__/sync-generation.test.js.map +1 -0
  329. package/dist/storage/index.d.ts +1 -0
  330. package/dist/storage/index.d.ts.map +1 -1
  331. package/dist/storage/index.js +1 -0
  332. package/dist/storage/index.js.map +1 -1
  333. package/dist/storage/interfaces.d.ts +60 -0
  334. package/dist/storage/interfaces.d.ts.map +1 -1
  335. package/dist/storage/sqlite/graph-store.d.ts +21 -1
  336. package/dist/storage/sqlite/graph-store.d.ts.map +1 -1
  337. package/dist/storage/sqlite/graph-store.js +86 -0
  338. package/dist/storage/sqlite/graph-store.js.map +1 -1
  339. package/dist/storage/sqlite/migrations.d.ts.map +1 -1
  340. package/dist/storage/sqlite/migrations.js +38 -0
  341. package/dist/storage/sqlite/migrations.js.map +1 -1
  342. package/dist/storage/sqlite/rename-stability.d.ts +94 -0
  343. package/dist/storage/sqlite/rename-stability.d.ts.map +1 -0
  344. package/dist/storage/sqlite/rename-stability.js +92 -0
  345. package/dist/storage/sqlite/rename-stability.js.map +1 -0
  346. package/package.json +4 -1
@@ -0,0 +1,134 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { iterVlocityRecords } from "../../extractors/live-org/vlocity/runner.js";
3
+ import { parserRegistry } from "../../parsers/index.js";
4
+ import { adaptParserInput } from "../live-ingest.js";
5
+ /**
6
+ * End-to-end coverage for the runner→dispatch→parser seam that shipped
7
+ * broken: the Vlocity runner emits memberType "DataRaptor" /
8
+ * "IntegrationProcedure" / "OmniScript" / "VlocityCard", but the four rich
9
+ * parsers register under "Vlocity"-prefixed type names. adaptParserInput
10
+ * didn't map between them, so every datapack except VlocityCard fell through
11
+ * to the opaque node parser — shallow nodes, ZERO DR_/IP_/OS_ edges. The
12
+ * golden tests call parsers directly and never exercised this seam, which is
13
+ * how it stayed broken through a full live ingest.
14
+ *
15
+ * This test drives a mocked Vlocity org through the REAL runner (with child
16
+ * fetches), then through the REAL dispatch + registry lookup + parse, and
17
+ * asserts the resulting edges are the rich lineage edges — not opaque.
18
+ */
19
+ const caps = {
20
+ vlocityNamespaces: ["vlocity_cmt"],
21
+ vlocityLegacy: true,
22
+ };
23
+ const ctx = {
24
+ orgId: "00DTestVloc",
25
+ sourceUri: "test://vloc",
26
+ parseTimestamp: "2026-01-01T00:00:00.000Z",
27
+ namespace: "vlocity_cmt",
28
+ logger: { debug() { }, info() { }, warn() { }, error() { } },
29
+ };
30
+ async function collect(it) {
31
+ const out = [];
32
+ for await (const m of it)
33
+ out.push(m);
34
+ return out;
35
+ }
36
+ /** Run one runner-emitted member through the exact path live-ingest uses. */
37
+ async function dispatchAndParse(member) {
38
+ const adapted = adaptParserInput(member.ref, member.content);
39
+ expect(adapted, `no adapter for ${member.ref.memberType}`).not.toBeNull();
40
+ const parser = parserRegistry.for(adapted.type);
41
+ expect(parser, `no parser registered for ${adapted.type}`).toBeDefined();
42
+ return parser.parse(adapted.input, ctx);
43
+ }
44
+ function rels(edges) {
45
+ return new Set(edges.map((e) => e.relType));
46
+ }
47
+ describe("Vlocity runner → dispatch → parser integration", () => {
48
+ it("DataRaptor: runner child mappings become DR_READS_FIELD lineage, not opaque", async () => {
49
+ const conn = {
50
+ query: async (soql) => {
51
+ if (soql.includes("__DRBundle__c")) {
52
+ return {
53
+ records: [{ Id: "a0D1", Name: "AccountExtract", vlocity_cmt__Type__c: "Extract" }],
54
+ done: true,
55
+ };
56
+ }
57
+ if (soql.includes("__DRMapItem__c")) {
58
+ // DRMapItem correlates to its bundle by Name (no DRBundleId field).
59
+ return {
60
+ records: [
61
+ {
62
+ Id: "a0M1",
63
+ Name: "AccountExtract",
64
+ vlocity_cmt__InterfaceObjectName__c: "Account",
65
+ vlocity_cmt__InterfaceFieldAPIName__c: "Name",
66
+ vlocity_cmt__DomainObjectAPIName__c: "json",
67
+ vlocity_cmt__DomainObjectFieldAPIName__c: "Details:Name",
68
+ },
69
+ ],
70
+ done: true,
71
+ };
72
+ }
73
+ return { records: [], done: true };
74
+ },
75
+ };
76
+ const members = await collect(iterVlocityRecords(conn, caps, "00DTestVloc"));
77
+ const dr = members.find((m) => m.ref.memberType === "DataRaptor");
78
+ expect(dr).toBeDefined();
79
+ const result = await dispatchAndParse(dr);
80
+ // The decisive assertion: rich lineage edge, NOT an opaque node.
81
+ const relSet = rels(result.edges);
82
+ expect(relSet.has("DR_READS_FIELD")).toBe(true);
83
+ expect(result.edges.some((e) => String(e.dstQualifiedName) === "CustomField:Account.Name")).toBe(true);
84
+ // Node is the rich DataRaptor label, not OpaqueMetadata.
85
+ expect(result.nodes[0]?.label).toBe("DataRaptor");
86
+ });
87
+ it("IntegrationProcedure: runner element graph becomes IP_* edges", async () => {
88
+ const conn = {
89
+ query: async (soql) => {
90
+ if (soql.includes("__OmniScript__c") && soql.toLowerCase().includes("isprocedure")) {
91
+ return {
92
+ records: [{ Id: "a0I1", Name: "MyIP", vlocity_cmt__IsProcedure__c: true }],
93
+ done: true,
94
+ };
95
+ }
96
+ if (soql.includes("__Element__c")) {
97
+ return {
98
+ records: [
99
+ {
100
+ Id: "e1",
101
+ Name: "callDR",
102
+ vlocity_cmt__Type__c: "DataRaptor Extract Action",
103
+ vlocity_cmt__PropertySet__c: JSON.stringify({ bundle: "AccountExtract" }),
104
+ vlocity_cmt__OmniScriptId__c: "a0I1",
105
+ },
106
+ ],
107
+ done: true,
108
+ };
109
+ }
110
+ return { records: [], done: true };
111
+ },
112
+ };
113
+ const members = await collect(iterVlocityRecords(conn, caps, "00DTestVloc"));
114
+ const ip = members.find((m) => m.ref.memberType === "IntegrationProcedure");
115
+ expect(ip).toBeDefined();
116
+ const result = await dispatchAndParse(ip);
117
+ expect(result.nodes[0]?.label).toBe("IntegrationProcedure");
118
+ expect(rels(result.edges).has("IP_CALLS_DR")).toBe(true);
119
+ });
120
+ it("maps each runner memberType to its rich parser (none fall to opaque)", () => {
121
+ for (const [memberType, expectedParserType] of [
122
+ ["DataRaptor", "VlocityDataRaptor"],
123
+ ["IntegrationProcedure", "VlocityIntegrationProcedure"],
124
+ ["OmniScript", "VlocityOmniScript"],
125
+ ["VlocityCard", "VlocityCard"],
126
+ ]) {
127
+ const adapted = adaptParserInput({ memberType, memberName: "X" }, JSON.stringify({ Name: "X" }));
128
+ expect(adapted?.type, `${memberType} should map to ${expectedParserType}`).toBe(expectedParserType);
129
+ expect(adapted?.type).not.toBe("OpaqueMetadata");
130
+ expect(parserRegistry.for(adapted.type)).toBeDefined();
131
+ }
132
+ });
133
+ });
134
+ //# sourceMappingURL=vlocity-dispatch-integration.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vlocity-dispatch-integration.test.js","sourceRoot":"","sources":["../../../src/ingest/__tests__/vlocity-dispatch-integration.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * W1.5-07 — Per-label deletion-sweep guard.
3
+ *
4
+ * The `--detect-deletions` full-sync sweep at `live-ingest.ts` used to skip
5
+ * only when `streamAborted === true`. A wedged source (W1.5-02) completes
6
+ * with `streamAborted === false`, `parseErrors === 0`, and an empty
7
+ * `touchedQnames` for its label. The set-difference sweep therefore wiped
8
+ * every node of that label — a graph-extinction risk that compounded
9
+ * catastrophically with the wedge cascade.
10
+ *
11
+ * This module encodes the per-label decision: given the prior persisted
12
+ * count, the current run's touched count, and a configurable drop-ratio
13
+ * ceiling, return either `{ proceed: true }` or `{ proceed: false, warning }`
14
+ * with a namespaced-string warning describing why the deletion was refused.
15
+ *
16
+ * Pure / no I/O — the live-ingest sweep wraps this and applies the deletion
17
+ * (or skips it) according to the verdict.
18
+ */
19
+ export interface DeletionGuardVerdict {
20
+ proceed: boolean;
21
+ /** Populated only when `proceed === false`. Format documented in
22
+ * PLAN.md §W1.5-07:
23
+ * `wedge:detect-deletions:refuse:label=<L>:reason=<R>:...`. */
24
+ warning?: string;
25
+ }
26
+ /**
27
+ * Parse the `SFGRAPH_DETECT_DELETIONS_MAX_DROP_RATIO` env var (or the value
28
+ * supplied as `raw`) and clamp to `[0, 1]`. Returns the default 0.30 when
29
+ * unset/invalid. Exported so the live-ingest call site and the tests
30
+ * stay in lockstep with the env-var contract.
31
+ */
32
+ export declare function resolveMaxDropRatio(raw: string | undefined): number;
33
+ /**
34
+ * Evaluate the deletion-sweep guard for a single label.
35
+ *
36
+ * - `priorCount === 0` → proceed (no-op anyway).
37
+ * - `priorCount > 0 && touchedCount === 0` → refuse with `reason=empty-stream`.
38
+ * - `dropRatio > maxDropRatio` → refuse with `reason=drop-ratio`.
39
+ * - Otherwise → proceed.
40
+ *
41
+ * Edge case: `touchedCount > priorCount` (new nodes created this run) — the
42
+ * raw ratio would be negative; clamped to 0 → proceed.
43
+ */
44
+ export declare function evaluateDeletionGuard(label: string, priorCount: number, touchedCount: number, maxDropRatio: number): DeletionGuardVerdict;
45
+ //# sourceMappingURL=detect-deletions-guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect-deletions-guard.d.ts","sourceRoot":"","sources":["../../src/ingest/detect-deletions-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB;;oEAEgE;IAChE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAKnE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,GACnB,oBAAoB,CAqBtB"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * W1.5-07 — Per-label deletion-sweep guard.
3
+ *
4
+ * The `--detect-deletions` full-sync sweep at `live-ingest.ts` used to skip
5
+ * only when `streamAborted === true`. A wedged source (W1.5-02) completes
6
+ * with `streamAborted === false`, `parseErrors === 0`, and an empty
7
+ * `touchedQnames` for its label. The set-difference sweep therefore wiped
8
+ * every node of that label — a graph-extinction risk that compounded
9
+ * catastrophically with the wedge cascade.
10
+ *
11
+ * This module encodes the per-label decision: given the prior persisted
12
+ * count, the current run's touched count, and a configurable drop-ratio
13
+ * ceiling, return either `{ proceed: true }` or `{ proceed: false, warning }`
14
+ * with a namespaced-string warning describing why the deletion was refused.
15
+ *
16
+ * Pure / no I/O — the live-ingest sweep wraps this and applies the deletion
17
+ * (or skips it) according to the verdict.
18
+ */
19
+ /**
20
+ * Parse the `SFGRAPH_DETECT_DELETIONS_MAX_DROP_RATIO` env var (or the value
21
+ * supplied as `raw`) and clamp to `[0, 1]`. Returns the default 0.30 when
22
+ * unset/invalid. Exported so the live-ingest call site and the tests
23
+ * stay in lockstep with the env-var contract.
24
+ */
25
+ export function resolveMaxDropRatio(raw) {
26
+ if (raw === undefined || raw === "")
27
+ return 0.3;
28
+ const parsed = Number.parseFloat(raw);
29
+ if (!Number.isFinite(parsed))
30
+ return 0.3;
31
+ return Math.min(1, Math.max(0, parsed));
32
+ }
33
+ /**
34
+ * Evaluate the deletion-sweep guard for a single label.
35
+ *
36
+ * - `priorCount === 0` → proceed (no-op anyway).
37
+ * - `priorCount > 0 && touchedCount === 0` → refuse with `reason=empty-stream`.
38
+ * - `dropRatio > maxDropRatio` → refuse with `reason=drop-ratio`.
39
+ * - Otherwise → proceed.
40
+ *
41
+ * Edge case: `touchedCount > priorCount` (new nodes created this run) — the
42
+ * raw ratio would be negative; clamped to 0 → proceed.
43
+ */
44
+ export function evaluateDeletionGuard(label, priorCount, touchedCount, maxDropRatio) {
45
+ if (priorCount <= 0)
46
+ return { proceed: true };
47
+ if (touchedCount === 0) {
48
+ return {
49
+ proceed: false,
50
+ warning: `wedge:detect-deletions:refuse:label=${label}:reason=empty-stream:priorCount=${priorCount}`,
51
+ };
52
+ }
53
+ const rawDropRatio = (priorCount - touchedCount) / priorCount;
54
+ const dropRatio = rawDropRatio < 0 ? 0 : rawDropRatio;
55
+ if (dropRatio > maxDropRatio) {
56
+ return {
57
+ proceed: false,
58
+ warning: `wedge:detect-deletions:refuse:label=${label}:reason=drop-ratio:dropped=${priorCount - touchedCount}:prior=${priorCount}:ratio=${dropRatio.toFixed(2)}`,
59
+ };
60
+ }
61
+ return { proceed: true };
62
+ }
63
+ //# sourceMappingURL=detect-deletions-guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect-deletions-guard.js","sourceRoot":"","sources":["../../src/ingest/detect-deletions-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAUH;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAuB;IACzD,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,EAAE;QAAE,OAAO,GAAG,CAAC;IAChD,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,GAAG,CAAC;IACzC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,qBAAqB,CACnC,KAAa,EACb,UAAkB,EAClB,YAAoB,EACpB,YAAoB;IAEpB,IAAI,UAAU,IAAI,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAE9C,IAAI,YAAY,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO;YACL,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,uCAAuC,KAAK,mCAAmC,UAAU,EAAE;SACrG,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,CAAC,UAAU,GAAG,YAAY,CAAC,GAAG,UAAU,CAAC;IAC9D,MAAM,SAAS,GAAG,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;IAEtD,IAAI,SAAS,GAAG,YAAY,EAAE,CAAC;QAC7B,OAAO;YACL,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,uCAAuC,KAAK,8BAA8B,UAAU,GAAG,YAAY,UAAU,UAAU,UAAU,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;SACjK,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC3B,CAAC"}
@@ -2,6 +2,7 @@ import { type OrgId } from "@ryanstark24/sfgraph-shared";
2
2
  import type { Logger } from "@ryanstark24/sfgraph-shared";
3
3
  import "../parsers/index.js";
4
4
  import { type VectorSink } from "../embedding/index.js";
5
+ import type { MemberRef } from "../extractors/interfaces/metadata-source.js";
5
6
  import { type ResolveOrgDeps, type ResolvedOrg } from "../extractors/live-org/auth.js";
6
7
  import { type OrgCapabilities } from "../extractors/live-org/capabilities.js";
7
8
  import type { BetterSqlite3Database, GraphStore } from "../storage/interfaces.js";
@@ -46,6 +47,51 @@ export interface LiveIngestOpts {
46
47
  skipReportPath?: string;
47
48
  /** Skip the post-merge Vlocity↔OmniStudio canonical resolve pass. */
48
49
  disableCrossFlavor?: boolean;
50
+ /**
51
+ * Skip the post-merge OmniStudio overlap detector that annotates
52
+ * CANONICAL_OF edges with `signaturesMatch` + `divergencePoints`.
53
+ * Default **on** — runs every ingest. Pitfalls research flagged the
54
+ * false-positive recovery cost as high (a wrong "diverged" label
55
+ * sends an engineer chasing a non-issue); we accept that risk in
56
+ * exchange for migration-audit visibility on every sync. Filter by
57
+ * `attributes.signaturesMatch === false` on CANONICAL_OF edges to
58
+ * surface the diverged set; ignore the flag if the column doesn't
59
+ * matter to your use case.
60
+ */
61
+ disableOverlapDetect?: boolean;
62
+ /**
63
+ * Skip the MCD baseline pre-fan-out pass that queries
64
+ * `MetadataComponentDependency` for long-tail metadata types (Layouts,
65
+ * FieldSets, EmailTemplates, Tabs, Groups, Queues) and writes
66
+ * source='mcd' edges before the regular parser fan-out starts.
67
+ * Default **on** — long-tail coverage is generally a clear win;
68
+ * disable only for ingest-time-sensitive scenarios where ~6 Tooling
69
+ * SOQL queries per type are unwelcome.
70
+ */
71
+ disableMcdBaseline?: boolean;
72
+ /**
73
+ * Skip the Metadata API `retrieve()` path for OmniStudio-on-Core
74
+ * types (OmniUiCard, OmniIntegrationProcedure, OmniDataTransform).
75
+ * Default **on** — the SOQL path runs alongside this and the
76
+ * retrieve path yields the full design-time XML envelope (vs
77
+ * PropertySet JSON only). Disable when your org is quota-constrained
78
+ * (Metadata API allows 10k retrieve calls per 24h org-wide) or when
79
+ * you don't need the XML envelope downstream. Quota-guard auto-skips
80
+ * at >=90% utilization regardless of this flag.
81
+ */
82
+ disableOmnistudioRetrieve?: boolean;
83
+ /**
84
+ * Skip the reflection-based generic walker (post-merge). Default
85
+ * **on** — scans every node's attributes for string values that
86
+ * match an existing qname's bare name and emits low-confidence
87
+ * REFERENCES edges tagged `source: 'reflection'`. Pitfalls research
88
+ * flagged precision concerns (false positives when a string
89
+ * coincidentally equals a qname); we accept that in exchange for
90
+ * coverage of OmniStudio/Vlocity blobs the platform doesn't expose
91
+ * a schema for. Filter `attributes.source !== 'reflection'` for the
92
+ * parser-quality subset when precision matters.
93
+ */
94
+ disableReflectionWalker?: boolean;
49
95
  /** Skip the post-merge Apex method arity resolver pass. */
50
96
  disableArityResolve?: boolean;
51
97
  /** Skip the post-merge Flow→Apex method-level resolver pass. */
@@ -69,6 +115,46 @@ export interface LiveIngestResult {
69
115
  flowMethodsResolved: number;
70
116
  /** Number of edges whose dst node does not exist after all post-passes. */
71
117
  danglingEdges: number;
118
+ /** REFERENCES edges emitted by the reflection walker. Zero when
119
+ * `disableReflectionWalker: true` was passed. */
120
+ reflectionEdges: number;
121
+ /**
122
+ * Overlap-detector summary. Zero across the board when
123
+ * `disableOverlapDetect: true` was passed; otherwise populated.
124
+ */
125
+ overlap: {
126
+ /** CANONICAL_OF pairs whose endpoints share an identical signature. */
127
+ matched: number;
128
+ /** CANONICAL_OF pairs whose endpoint signatures diverge. */
129
+ diverged: number;
130
+ /** CANONICAL_OF pairs with no outgoing non-canonical edges on either side. */
131
+ empty: number;
132
+ /** Total CANONICAL_OF edges annotated. */
133
+ annotated: number;
134
+ };
135
+ /**
136
+ * Per-source warnings collected during ingest. Each entry is a stringified
137
+ * `label: reason` describing a skipped extractor, a failed per-type query,
138
+ * a child-fetch failure, or any other non-fatal event the run wants
139
+ * surfaced to MCP consumers (get_ingest_job) rather than buried in stdout.
140
+ * Empty array on a clean run.
141
+ */
142
+ warnings: string[];
72
143
  }
144
+ /**
145
+ * Build the text embedded for a node's semantic vector. Beyond the
146
+ * label/qname/description baseline, this folds in CONFIG VALUES so
147
+ * `find_similar` matches on what a config artifact actually resolves to —
148
+ * a Custom Metadata record's field values, a Custom Label's text, a Custom
149
+ * Setting's rows. Without this, searching "endpoint for product push" can't
150
+ * reach `End_Point_Urls.ProductPush_PLDT` because only its name was embedded.
151
+ * Exported for tests.
152
+ */
153
+ export declare function buildEmbedText(label: string, qname: string, attributes: Record<string, unknown> | undefined): string;
154
+ /** Exported for tests — maps a RawMember to the registered parser's input shape. */
155
+ export declare function adaptParserInput(ref: MemberRef, content: string): {
156
+ type: string;
157
+ input: unknown;
158
+ } | null;
73
159
  export declare function liveIngest(opts: LiveIngestOpts): Promise<LiveIngestResult>;
74
160
  //# sourceMappingURL=live-ingest.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"live-ingest.d.ts","sourceRoot":"","sources":["../../src/ingest/live-ingest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,KAAK,EAAmB,MAAM,6BAA6B,CAAC;AAC1E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AAO1D,OAAO,qBAAqB,CAAC;AAG7B,OAAO,EAAkB,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExE,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,WAAW,EAAc,MAAM,gCAAgC,CAAC;AAEnG,OAAO,EAAE,KAAK,eAAe,EAAqB,MAAM,wCAAwC,CAAC;AAQjG,OAAO,KAAK,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAClF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,aAAa,GAAG,MAAM,CAAC;AAEzD,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,UAAU,EAAE,UAAU,CAAC;IACvB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6CAA6C;IAC7C,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,8CAA8C;IAC9C,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,2CAA2C;IAC3C,WAAW,CAAC,EAAE,cAAc,CAAC;IAC7B,oFAAoF;IACpF,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,gEAAgE;IAChE,UAAU,CAAC,EAAE,qBAAqB,CAAC;IACnC,yEAAyE;IACzE,WAAW,CAAC,EAAE,UAAU,CAAC;IACzB;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;OAIG;IACH,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACzB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qEAAqE;IACrE,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,2DAA2D;IAC3D,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,gEAAgE;IAChE,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC,oDAAoD;IACpD,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,KAAK,CAAC;IACb,YAAY,EAAE,eAAe,CAAC;IAC9B,IAAI,EAAE,UAAU,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,yEAAyE;IACzE,gBAAgB,EAAE,MAAM,CAAC;IACzB,2EAA2E;IAC3E,aAAa,EAAE,MAAM,CAAC;IACtB,gEAAgE;IAChE,mBAAmB,EAAE,MAAM,CAAC;IAC5B,2EAA2E;IAC3E,aAAa,EAAE,MAAM,CAAC;CACvB;AAmLD,wBAAsB,UAAU,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAwiBhF"}
1
+ {"version":3,"file":"live-ingest.d.ts","sourceRoot":"","sources":["../../src/ingest/live-ingest.ts"],"names":[],"mappings":"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"}