@grafema/util 0.3.0-beta

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 (324) hide show
  1. package/LICENSE +190 -0
  2. package/dist/api/GraphAPI.d.ts +87 -0
  3. package/dist/api/GraphAPI.d.ts.map +1 -0
  4. package/dist/api/GraphAPI.js +212 -0
  5. package/dist/api/GraphAPI.js.map +1 -0
  6. package/dist/api/GuaranteeAPI.d.ts +147 -0
  7. package/dist/api/GuaranteeAPI.d.ts.map +1 -0
  8. package/dist/api/GuaranteeAPI.js +290 -0
  9. package/dist/api/GuaranteeAPI.js.map +1 -0
  10. package/dist/config/ConfigLoader.d.ts +214 -0
  11. package/dist/config/ConfigLoader.d.ts.map +1 -0
  12. package/dist/config/ConfigLoader.js +441 -0
  13. package/dist/config/ConfigLoader.js.map +1 -0
  14. package/dist/config/index.d.ts +6 -0
  15. package/dist/config/index.d.ts.map +1 -0
  16. package/dist/config/index.js +5 -0
  17. package/dist/config/index.js.map +1 -0
  18. package/dist/core/CoverageAnalyzer.d.ts +65 -0
  19. package/dist/core/CoverageAnalyzer.d.ts.map +1 -0
  20. package/dist/core/CoverageAnalyzer.js +199 -0
  21. package/dist/core/CoverageAnalyzer.js.map +1 -0
  22. package/dist/core/FileExplainer.d.ts +101 -0
  23. package/dist/core/FileExplainer.d.ts.map +1 -0
  24. package/dist/core/FileExplainer.js +140 -0
  25. package/dist/core/FileExplainer.js.map +1 -0
  26. package/dist/core/FileOverview.d.ts +124 -0
  27. package/dist/core/FileOverview.d.ts.map +1 -0
  28. package/dist/core/FileOverview.js +279 -0
  29. package/dist/core/FileOverview.js.map +1 -0
  30. package/dist/core/GrafemaUri.d.ts +66 -0
  31. package/dist/core/GrafemaUri.d.ts.map +1 -0
  32. package/dist/core/GrafemaUri.js +191 -0
  33. package/dist/core/GrafemaUri.js.map +1 -0
  34. package/dist/core/GraphBackend.d.ts +158 -0
  35. package/dist/core/GraphBackend.d.ts.map +1 -0
  36. package/dist/core/GraphBackend.js +85 -0
  37. package/dist/core/GraphBackend.js.map +1 -0
  38. package/dist/core/GraphFreshnessChecker.d.ts +33 -0
  39. package/dist/core/GraphFreshnessChecker.d.ts.map +1 -0
  40. package/dist/core/GraphFreshnessChecker.js +104 -0
  41. package/dist/core/GraphFreshnessChecker.js.map +1 -0
  42. package/dist/core/GuaranteeManager.d.ts +254 -0
  43. package/dist/core/GuaranteeManager.d.ts.map +1 -0
  44. package/dist/core/GuaranteeManager.js +447 -0
  45. package/dist/core/GuaranteeManager.js.map +1 -0
  46. package/dist/core/HashUtils.d.ts +24 -0
  47. package/dist/core/HashUtils.d.ts.map +1 -0
  48. package/dist/core/HashUtils.js +46 -0
  49. package/dist/core/HashUtils.js.map +1 -0
  50. package/dist/core/IncrementalReanalyzer.d.ts +33 -0
  51. package/dist/core/IncrementalReanalyzer.d.ts.map +1 -0
  52. package/dist/core/IncrementalReanalyzer.js +67 -0
  53. package/dist/core/IncrementalReanalyzer.js.map +1 -0
  54. package/dist/core/ResourceRegistry.d.ts +17 -0
  55. package/dist/core/ResourceRegistry.d.ts.map +1 -0
  56. package/dist/core/ResourceRegistry.js +32 -0
  57. package/dist/core/ResourceRegistry.js.map +1 -0
  58. package/dist/core/SemanticId.d.ts +159 -0
  59. package/dist/core/SemanticId.d.ts.map +1 -0
  60. package/dist/core/SemanticId.js +291 -0
  61. package/dist/core/SemanticId.js.map +1 -0
  62. package/dist/core/VersionManager.d.ts +166 -0
  63. package/dist/core/VersionManager.d.ts.map +1 -0
  64. package/dist/core/VersionManager.js +239 -0
  65. package/dist/core/VersionManager.js.map +1 -0
  66. package/dist/core/brandNodeInternal.d.ts +14 -0
  67. package/dist/core/brandNodeInternal.d.ts.map +1 -0
  68. package/dist/core/brandNodeInternal.js +4 -0
  69. package/dist/core/brandNodeInternal.js.map +1 -0
  70. package/dist/core/nodes/GuaranteeNode.d.ts +76 -0
  71. package/dist/core/nodes/GuaranteeNode.d.ts.map +1 -0
  72. package/dist/core/nodes/GuaranteeNode.js +118 -0
  73. package/dist/core/nodes/GuaranteeNode.js.map +1 -0
  74. package/dist/core/nodes/IssueNode.d.ts +73 -0
  75. package/dist/core/nodes/IssueNode.d.ts.map +1 -0
  76. package/dist/core/nodes/IssueNode.js +130 -0
  77. package/dist/core/nodes/IssueNode.js.map +1 -0
  78. package/dist/core/nodes/NodeKind.d.ts +104 -0
  79. package/dist/core/nodes/NodeKind.d.ts.map +1 -0
  80. package/dist/core/nodes/NodeKind.js +166 -0
  81. package/dist/core/nodes/NodeKind.js.map +1 -0
  82. package/dist/diagnostics/DiagnosticCollector.d.ts +103 -0
  83. package/dist/diagnostics/DiagnosticCollector.d.ts.map +1 -0
  84. package/dist/diagnostics/DiagnosticCollector.js +133 -0
  85. package/dist/diagnostics/DiagnosticCollector.js.map +1 -0
  86. package/dist/diagnostics/DiagnosticReporter.d.ts +122 -0
  87. package/dist/diagnostics/DiagnosticReporter.d.ts.map +1 -0
  88. package/dist/diagnostics/DiagnosticReporter.js +300 -0
  89. package/dist/diagnostics/DiagnosticReporter.js.map +1 -0
  90. package/dist/diagnostics/DiagnosticWriter.d.ts +31 -0
  91. package/dist/diagnostics/DiagnosticWriter.d.ts.map +1 -0
  92. package/dist/diagnostics/DiagnosticWriter.js +44 -0
  93. package/dist/diagnostics/DiagnosticWriter.js.map +1 -0
  94. package/dist/diagnostics/categories.d.ts +57 -0
  95. package/dist/diagnostics/categories.d.ts.map +1 -0
  96. package/dist/diagnostics/categories.js +71 -0
  97. package/dist/diagnostics/categories.js.map +1 -0
  98. package/dist/diagnostics/index.d.ts +17 -0
  99. package/dist/diagnostics/index.d.ts.map +1 -0
  100. package/dist/diagnostics/index.js +15 -0
  101. package/dist/diagnostics/index.js.map +1 -0
  102. package/dist/errors/GrafemaError.d.ts +200 -0
  103. package/dist/errors/GrafemaError.d.ts.map +1 -0
  104. package/dist/errors/GrafemaError.js +209 -0
  105. package/dist/errors/GrafemaError.js.map +1 -0
  106. package/dist/index.d.ts +75 -0
  107. package/dist/index.d.ts.map +1 -0
  108. package/dist/index.js +76 -0
  109. package/dist/index.js.map +1 -0
  110. package/dist/instructions/index.d.ts +8 -0
  111. package/dist/instructions/index.d.ts.map +1 -0
  112. package/dist/instructions/index.js +20 -0
  113. package/dist/instructions/index.js.map +1 -0
  114. package/dist/instructions/onboarding.md +133 -0
  115. package/dist/knowledge/KnowledgeBase.d.ts +113 -0
  116. package/dist/knowledge/KnowledgeBase.d.ts.map +1 -0
  117. package/dist/knowledge/KnowledgeBase.js +420 -0
  118. package/dist/knowledge/KnowledgeBase.js.map +1 -0
  119. package/dist/knowledge/SemanticAddressResolver.d.ts +59 -0
  120. package/dist/knowledge/SemanticAddressResolver.d.ts.map +1 -0
  121. package/dist/knowledge/SemanticAddressResolver.js +160 -0
  122. package/dist/knowledge/SemanticAddressResolver.js.map +1 -0
  123. package/dist/knowledge/git-ingest.d.ts +58 -0
  124. package/dist/knowledge/git-ingest.d.ts.map +1 -0
  125. package/dist/knowledge/git-ingest.js +301 -0
  126. package/dist/knowledge/git-ingest.js.map +1 -0
  127. package/dist/knowledge/git-queries.d.ts +86 -0
  128. package/dist/knowledge/git-queries.d.ts.map +1 -0
  129. package/dist/knowledge/git-queries.js +177 -0
  130. package/dist/knowledge/git-queries.js.map +1 -0
  131. package/dist/knowledge/index.d.ts +14 -0
  132. package/dist/knowledge/index.d.ts.map +1 -0
  133. package/dist/knowledge/index.js +10 -0
  134. package/dist/knowledge/index.js.map +1 -0
  135. package/dist/knowledge/parser.d.ts +39 -0
  136. package/dist/knowledge/parser.d.ts.map +1 -0
  137. package/dist/knowledge/parser.js +292 -0
  138. package/dist/knowledge/parser.js.map +1 -0
  139. package/dist/knowledge/types.d.ts +133 -0
  140. package/dist/knowledge/types.d.ts.map +1 -0
  141. package/dist/knowledge/types.js +8 -0
  142. package/dist/knowledge/types.js.map +1 -0
  143. package/dist/logging/Logger.d.ts +98 -0
  144. package/dist/logging/Logger.d.ts.map +1 -0
  145. package/dist/logging/Logger.js +274 -0
  146. package/dist/logging/Logger.js.map +1 -0
  147. package/dist/notation/archetypes.d.ts +36 -0
  148. package/dist/notation/archetypes.d.ts.map +1 -0
  149. package/dist/notation/archetypes.js +173 -0
  150. package/dist/notation/archetypes.js.map +1 -0
  151. package/dist/notation/fold.d.ts +25 -0
  152. package/dist/notation/fold.d.ts.map +1 -0
  153. package/dist/notation/fold.js +598 -0
  154. package/dist/notation/fold.js.map +1 -0
  155. package/dist/notation/index.d.ts +18 -0
  156. package/dist/notation/index.d.ts.map +1 -0
  157. package/dist/notation/index.js +16 -0
  158. package/dist/notation/index.js.map +1 -0
  159. package/dist/notation/lodExtractor.d.ts +32 -0
  160. package/dist/notation/lodExtractor.d.ts.map +1 -0
  161. package/dist/notation/lodExtractor.js +149 -0
  162. package/dist/notation/lodExtractor.js.map +1 -0
  163. package/dist/notation/nameShortener.d.ts +22 -0
  164. package/dist/notation/nameShortener.d.ts.map +1 -0
  165. package/dist/notation/nameShortener.js +24 -0
  166. package/dist/notation/nameShortener.js.map +1 -0
  167. package/dist/notation/perspectives.d.ts +11 -0
  168. package/dist/notation/perspectives.d.ts.map +1 -0
  169. package/dist/notation/perspectives.js +16 -0
  170. package/dist/notation/perspectives.js.map +1 -0
  171. package/dist/notation/renderer.d.ts +31 -0
  172. package/dist/notation/renderer.d.ts.map +1 -0
  173. package/dist/notation/renderer.js +315 -0
  174. package/dist/notation/renderer.js.map +1 -0
  175. package/dist/notation/traceRenderer.d.ts +39 -0
  176. package/dist/notation/traceRenderer.d.ts.map +1 -0
  177. package/dist/notation/traceRenderer.js +358 -0
  178. package/dist/notation/traceRenderer.js.map +1 -0
  179. package/dist/notation/types.d.ts +66 -0
  180. package/dist/notation/types.d.ts.map +1 -0
  181. package/dist/notation/types.js +10 -0
  182. package/dist/notation/types.js.map +1 -0
  183. package/dist/queries/NodeContext.d.ts +81 -0
  184. package/dist/queries/NodeContext.d.ts.map +1 -0
  185. package/dist/queries/NodeContext.js +196 -0
  186. package/dist/queries/NodeContext.js.map +1 -0
  187. package/dist/queries/findCallsInFunction.d.ts +62 -0
  188. package/dist/queries/findCallsInFunction.d.ts.map +1 -0
  189. package/dist/queries/findCallsInFunction.js +169 -0
  190. package/dist/queries/findCallsInFunction.js.map +1 -0
  191. package/dist/queries/findContainingFunction.d.ts +57 -0
  192. package/dist/queries/findContainingFunction.d.ts.map +1 -0
  193. package/dist/queries/findContainingFunction.js +91 -0
  194. package/dist/queries/findContainingFunction.js.map +1 -0
  195. package/dist/queries/index.d.ts +18 -0
  196. package/dist/queries/index.d.ts.map +1 -0
  197. package/dist/queries/index.js +14 -0
  198. package/dist/queries/index.js.map +1 -0
  199. package/dist/queries/traceDataflow.d.ts +65 -0
  200. package/dist/queries/traceDataflow.d.ts.map +1 -0
  201. package/dist/queries/traceDataflow.js +754 -0
  202. package/dist/queries/traceDataflow.js.map +1 -0
  203. package/dist/queries/traceValues.d.ts +70 -0
  204. package/dist/queries/traceValues.d.ts.map +1 -0
  205. package/dist/queries/traceValues.js +373 -0
  206. package/dist/queries/traceValues.js.map +1 -0
  207. package/dist/queries/types.d.ts +166 -0
  208. package/dist/queries/types.d.ts.map +1 -0
  209. package/dist/queries/types.js +10 -0
  210. package/dist/queries/types.js.map +1 -0
  211. package/dist/schema/GraphSchemaExtractor.d.ts +53 -0
  212. package/dist/schema/GraphSchemaExtractor.d.ts.map +1 -0
  213. package/dist/schema/GraphSchemaExtractor.js +125 -0
  214. package/dist/schema/GraphSchemaExtractor.js.map +1 -0
  215. package/dist/schema/InterfaceSchemaExtractor.d.ts +73 -0
  216. package/dist/schema/InterfaceSchemaExtractor.d.ts.map +1 -0
  217. package/dist/schema/InterfaceSchemaExtractor.js +113 -0
  218. package/dist/schema/InterfaceSchemaExtractor.js.map +1 -0
  219. package/dist/schema/index.d.ts +5 -0
  220. package/dist/schema/index.d.ts.map +1 -0
  221. package/dist/schema/index.js +3 -0
  222. package/dist/schema/index.js.map +1 -0
  223. package/dist/storage/backends/RFDBServerBackend.d.ts +356 -0
  224. package/dist/storage/backends/RFDBServerBackend.d.ts.map +1 -0
  225. package/dist/storage/backends/RFDBServerBackend.js +748 -0
  226. package/dist/storage/backends/RFDBServerBackend.js.map +1 -0
  227. package/dist/storage/backends/typeValidation.d.ts +47 -0
  228. package/dist/storage/backends/typeValidation.d.ts.map +1 -0
  229. package/dist/storage/backends/typeValidation.js +141 -0
  230. package/dist/storage/backends/typeValidation.js.map +1 -0
  231. package/dist/utils/findRfdbBinary.d.ts +67 -0
  232. package/dist/utils/findRfdbBinary.d.ts.map +1 -0
  233. package/dist/utils/findRfdbBinary.js +261 -0
  234. package/dist/utils/findRfdbBinary.js.map +1 -0
  235. package/dist/utils/lazyDownload.d.ts +43 -0
  236. package/dist/utils/lazyDownload.d.ts.map +1 -0
  237. package/dist/utils/lazyDownload.js +175 -0
  238. package/dist/utils/lazyDownload.js.map +1 -0
  239. package/dist/utils/moduleResolution.d.ts +134 -0
  240. package/dist/utils/moduleResolution.d.ts.map +1 -0
  241. package/dist/utils/moduleResolution.js +189 -0
  242. package/dist/utils/moduleResolution.js.map +1 -0
  243. package/dist/utils/resolveNodeFile.d.ts +13 -0
  244. package/dist/utils/resolveNodeFile.d.ts.map +1 -0
  245. package/dist/utils/resolveNodeFile.js +18 -0
  246. package/dist/utils/resolveNodeFile.js.map +1 -0
  247. package/dist/utils/startRfdbServer.d.ts +63 -0
  248. package/dist/utils/startRfdbServer.d.ts.map +1 -0
  249. package/dist/utils/startRfdbServer.js +142 -0
  250. package/dist/utils/startRfdbServer.js.map +1 -0
  251. package/dist/validation/PathValidator.d.ts +80 -0
  252. package/dist/validation/PathValidator.d.ts.map +1 -0
  253. package/dist/validation/PathValidator.js +252 -0
  254. package/dist/validation/PathValidator.js.map +1 -0
  255. package/dist/version.d.ts +11 -0
  256. package/dist/version.d.ts.map +1 -0
  257. package/dist/version.js +26 -0
  258. package/dist/version.js.map +1 -0
  259. package/package.json +50 -0
  260. package/src/api/GraphAPI.ts +307 -0
  261. package/src/api/GuaranteeAPI.ts +402 -0
  262. package/src/config/ConfigLoader.ts +653 -0
  263. package/src/config/index.ts +13 -0
  264. package/src/core/CoverageAnalyzer.ts +243 -0
  265. package/src/core/FileExplainer.ts +179 -0
  266. package/src/core/FileOverview.ts +397 -0
  267. package/src/core/GrafemaUri.ts +216 -0
  268. package/src/core/GraphBackend.ts +266 -0
  269. package/src/core/GraphFreshnessChecker.ts +145 -0
  270. package/src/core/GuaranteeManager.ts +684 -0
  271. package/src/core/HashUtils.ts +48 -0
  272. package/src/core/IncrementalReanalyzer.ts +106 -0
  273. package/src/core/ResourceRegistry.ts +39 -0
  274. package/src/core/SemanticId.ts +423 -0
  275. package/src/core/VersionManager.ts +405 -0
  276. package/src/core/brandNodeInternal.ts +16 -0
  277. package/src/core/nodes/GuaranteeNode.ts +162 -0
  278. package/src/core/nodes/IssueNode.ts +177 -0
  279. package/src/core/nodes/NodeKind.ts +192 -0
  280. package/src/diagnostics/DiagnosticCollector.ts +170 -0
  281. package/src/diagnostics/DiagnosticReporter.ts +395 -0
  282. package/src/diagnostics/DiagnosticWriter.ts +50 -0
  283. package/src/diagnostics/categories.ts +104 -0
  284. package/src/diagnostics/index.ts +30 -0
  285. package/src/errors/GrafemaError.ts +297 -0
  286. package/src/index.ts +261 -0
  287. package/src/instructions/index.ts +21 -0
  288. package/src/instructions/onboarding.md +133 -0
  289. package/src/knowledge/KnowledgeBase.ts +486 -0
  290. package/src/knowledge/SemanticAddressResolver.ts +191 -0
  291. package/src/knowledge/git-ingest.ts +402 -0
  292. package/src/knowledge/git-queries.ts +269 -0
  293. package/src/knowledge/index.ts +29 -0
  294. package/src/knowledge/parser.ts +294 -0
  295. package/src/knowledge/types.ts +146 -0
  296. package/src/logging/Logger.ts +303 -0
  297. package/src/notation/archetypes.ts +189 -0
  298. package/src/notation/fold.ts +696 -0
  299. package/src/notation/index.ts +27 -0
  300. package/src/notation/lodExtractor.ts +177 -0
  301. package/src/notation/nameShortener.ts +24 -0
  302. package/src/notation/perspectives.ts +18 -0
  303. package/src/notation/renderer.ts +394 -0
  304. package/src/notation/traceRenderer.ts +458 -0
  305. package/src/notation/types.ts +79 -0
  306. package/src/queries/NodeContext.ts +280 -0
  307. package/src/queries/findCallsInFunction.ts +249 -0
  308. package/src/queries/findContainingFunction.ts +124 -0
  309. package/src/queries/index.ts +44 -0
  310. package/src/queries/traceDataflow.ts +838 -0
  311. package/src/queries/traceValues.ts +531 -0
  312. package/src/queries/types.ts +191 -0
  313. package/src/schema/GraphSchemaExtractor.ts +177 -0
  314. package/src/schema/InterfaceSchemaExtractor.ts +173 -0
  315. package/src/schema/index.ts +5 -0
  316. package/src/storage/backends/RFDBServerBackend.ts +895 -0
  317. package/src/storage/backends/typeValidation.ts +154 -0
  318. package/src/utils/findRfdbBinary.ts +288 -0
  319. package/src/utils/lazyDownload.ts +206 -0
  320. package/src/utils/moduleResolution.ts +271 -0
  321. package/src/utils/resolveNodeFile.ts +18 -0
  322. package/src/utils/startRfdbServer.ts +197 -0
  323. package/src/validation/PathValidator.ts +334 -0
  324. package/src/version.ts +28 -0
@@ -0,0 +1,290 @@
1
+ /**
2
+ * GuaranteeAPI - CRUD API for contract-based guarantees
3
+ *
4
+ * Contract-based guarantees use JSON schema validation instead of Datalog rules.
5
+ * They have namespaced types: guarantee:queue, guarantee:api, guarantee:permission
6
+ *
7
+ * This API complements GuaranteeManager which handles Datalog-based GUARANTEE nodes.
8
+ */
9
+ import { GuaranteeNode } from '../core/nodes/GuaranteeNode.js';
10
+ // Lazy-loaded Ajv instance to avoid import issues
11
+ let ajvInstance = null;
12
+ async function getAjv() {
13
+ if (!ajvInstance) {
14
+ const AjvModule = await import('ajv');
15
+ // Handle both ESM default export and CJS module.exports
16
+ const AjvClass = AjvModule.default || AjvModule;
17
+ // Use Function constructor pattern to avoid TS2351
18
+ const createAjv = AjvClass;
19
+ ajvInstance = new createAjv({ allErrors: true });
20
+ }
21
+ return ajvInstance;
22
+ }
23
+ /**
24
+ * GuaranteeAPI - CRUD operations for contract-based guarantees
25
+ */
26
+ export class GuaranteeAPI {
27
+ graph;
28
+ schemaCache;
29
+ constructor(graph) {
30
+ this.graph = graph;
31
+ this.schemaCache = new Map();
32
+ }
33
+ /**
34
+ * Create a new contract-based guarantee
35
+ */
36
+ async createGuarantee(input) {
37
+ // Parse type to get namespace
38
+ const parsed = GuaranteeNode.parseId(`${input.type}#${input.name}`);
39
+ if (!parsed) {
40
+ throw new Error(`Invalid guarantee type: ${input.type}`);
41
+ }
42
+ // Create the guarantee node
43
+ const node = GuaranteeNode.create(parsed.namespace, input.name, {
44
+ priority: input.priority,
45
+ status: input.status,
46
+ owner: input.owner,
47
+ schema: input.schema,
48
+ condition: input.condition,
49
+ description: input.description,
50
+ });
51
+ // Validate before saving
52
+ const errors = GuaranteeNode.validate(node);
53
+ if (errors.length > 0) {
54
+ throw new Error(`Invalid guarantee: ${errors.join(', ')}`);
55
+ }
56
+ // Save to graph
57
+ await this.graph.addNode(node);
58
+ // Create GOVERNS edges if specified
59
+ if (input.governs && input.governs.length > 0) {
60
+ for (const targetId of input.governs) {
61
+ await this.addGoverns(node.id, targetId);
62
+ }
63
+ }
64
+ return node;
65
+ }
66
+ /**
67
+ * Get a guarantee by ID
68
+ */
69
+ async getGuarantee(id) {
70
+ const node = await this.graph.getNode(id);
71
+ if (!node)
72
+ return null;
73
+ // Verify it's a guarantee type
74
+ if (!GuaranteeNode.isGuaranteeType(node.type)) {
75
+ return null;
76
+ }
77
+ return node;
78
+ }
79
+ /**
80
+ * Find guarantees matching filter
81
+ */
82
+ async findGuarantees(filter = {}) {
83
+ const guarantees = [];
84
+ const types = this.normalizeTypeFilter(filter.type);
85
+ for (const type of types) {
86
+ for await (const node of this.graph.queryNodes({ type })) {
87
+ const g = node;
88
+ // Apply additional filters
89
+ if (filter.priority) {
90
+ const priorities = Array.isArray(filter.priority) ? filter.priority : [filter.priority];
91
+ if (!priorities.includes(g.priority))
92
+ continue;
93
+ }
94
+ if (filter.status) {
95
+ const statuses = Array.isArray(filter.status) ? filter.status : [filter.status];
96
+ if (!statuses.includes(g.status))
97
+ continue;
98
+ }
99
+ if (filter.owner && g.owner !== filter.owner)
100
+ continue;
101
+ guarantees.push(g);
102
+ }
103
+ }
104
+ return guarantees;
105
+ }
106
+ /**
107
+ * Update a guarantee
108
+ */
109
+ async updateGuarantee(id, updates) {
110
+ const existing = await this.getGuarantee(id);
111
+ if (!existing) {
112
+ throw new Error(`Guarantee not found: ${id}`);
113
+ }
114
+ // Apply updates
115
+ const updated = {
116
+ ...existing,
117
+ ...updates,
118
+ updatedAt: Date.now(),
119
+ };
120
+ // Validate
121
+ const errors = GuaranteeNode.validate(updated);
122
+ if (errors.length > 0) {
123
+ throw new Error(`Invalid guarantee after update: ${errors.join(', ')}`);
124
+ }
125
+ // Delete old and add new (upsert)
126
+ await this.graph.deleteNode(id);
127
+ await this.graph.addNode(updated);
128
+ return updated;
129
+ }
130
+ /**
131
+ * Delete a guarantee
132
+ */
133
+ async deleteGuarantee(id) {
134
+ const existing = await this.getGuarantee(id);
135
+ if (!existing) {
136
+ return false;
137
+ }
138
+ // Delete GOVERNS edges
139
+ const edges = await this.graph.getOutgoingEdges(id, ['GOVERNS']);
140
+ for (const edge of edges) {
141
+ await this.graph.deleteEdge(edge.src, edge.dst, 'GOVERNS');
142
+ }
143
+ // Delete the node
144
+ await this.graph.deleteNode(id);
145
+ return true;
146
+ }
147
+ /**
148
+ * Add GOVERNS edge from guarantee to a node
149
+ */
150
+ async addGoverns(guaranteeId, nodeId) {
151
+ // Verify guarantee exists
152
+ const guarantee = await this.getGuarantee(guaranteeId);
153
+ if (!guarantee) {
154
+ throw new Error(`Guarantee not found: ${guaranteeId}`);
155
+ }
156
+ // Verify target node exists
157
+ const targetNode = await this.graph.getNode(nodeId);
158
+ if (!targetNode) {
159
+ throw new Error(`Target node not found: ${nodeId}`);
160
+ }
161
+ // Create GOVERNS edge
162
+ await this.graph.addEdge({
163
+ type: 'GOVERNS',
164
+ src: guaranteeId,
165
+ dst: nodeId,
166
+ });
167
+ }
168
+ /**
169
+ * Remove GOVERNS edge
170
+ */
171
+ async removeGoverns(guaranteeId, nodeId) {
172
+ await this.graph.deleteEdge(guaranteeId, nodeId, 'GOVERNS');
173
+ }
174
+ /**
175
+ * Get nodes governed by a guarantee
176
+ */
177
+ async getGoverned(guaranteeId) {
178
+ const edges = await this.graph.getOutgoingEdges(guaranteeId, ['GOVERNS']);
179
+ return edges.map(e => e.dst);
180
+ }
181
+ /**
182
+ * Get guarantees governing a node
183
+ */
184
+ async getGoverningGuarantees(nodeId) {
185
+ const edges = await this.graph.getIncomingEdges(nodeId, ['GOVERNS']);
186
+ const guarantees = [];
187
+ for (const edge of edges) {
188
+ const g = await this.getGuarantee(edge.src);
189
+ if (g)
190
+ guarantees.push(g);
191
+ }
192
+ return guarantees;
193
+ }
194
+ /**
195
+ * Check a guarantee using JSON schema validation
196
+ * Returns validation results for governed nodes
197
+ */
198
+ async checkGuarantee(id) {
199
+ const guarantee = await this.getGuarantee(id);
200
+ if (!guarantee) {
201
+ throw new Error(`Guarantee not found: ${id}`);
202
+ }
203
+ const result = {
204
+ id,
205
+ name: guarantee.name ?? id,
206
+ passed: true,
207
+ errors: [],
208
+ validatedCount: 0,
209
+ };
210
+ // If no schema defined, consider it passing
211
+ if (!guarantee.schema) {
212
+ return result;
213
+ }
214
+ // Get or compile schema validator
215
+ let validate = this.schemaCache.get(id);
216
+ if (!validate) {
217
+ try {
218
+ const ajv = await getAjv();
219
+ validate = ajv.compile(guarantee.schema);
220
+ this.schemaCache.set(id, validate);
221
+ }
222
+ catch (e) {
223
+ result.passed = false;
224
+ const message = e instanceof Error ? e.message : String(e);
225
+ result.errors.push(`Invalid schema: ${message}`);
226
+ return result;
227
+ }
228
+ }
229
+ // Get governed nodes and validate them
230
+ const governedIds = await this.getGoverned(id);
231
+ // At this point validate is guaranteed to be defined (we returned if compile failed)
232
+ const validator = validate;
233
+ for (const nodeId of governedIds) {
234
+ const node = await this.graph.getNode(nodeId);
235
+ if (!node)
236
+ continue;
237
+ result.validatedCount++;
238
+ const valid = validator(node);
239
+ if (!valid) {
240
+ result.passed = false;
241
+ const errors = validator.errors;
242
+ if (errors) {
243
+ for (const err of errors) {
244
+ result.errors.push(`${nodeId}: ${err.instancePath} ${err.message}`);
245
+ }
246
+ }
247
+ }
248
+ }
249
+ return result;
250
+ }
251
+ /**
252
+ * Check all guarantees
253
+ */
254
+ async checkAllGuarantees() {
255
+ const guarantees = await this.findGuarantees();
256
+ const results = [];
257
+ let passed = 0;
258
+ let failed = 0;
259
+ for (const g of guarantees) {
260
+ const result = await this.checkGuarantee(g.id);
261
+ results.push(result);
262
+ if (result.passed)
263
+ passed++;
264
+ else
265
+ failed++;
266
+ }
267
+ return {
268
+ total: guarantees.length,
269
+ passed,
270
+ failed,
271
+ results,
272
+ };
273
+ }
274
+ /**
275
+ * Normalize type filter to array of types
276
+ */
277
+ normalizeTypeFilter(type) {
278
+ if (!type) {
279
+ return GuaranteeNode.getTypes();
280
+ }
281
+ return Array.isArray(type) ? type : [type];
282
+ }
283
+ /**
284
+ * Clear schema cache (useful after schema updates)
285
+ */
286
+ clearSchemaCache() {
287
+ this.schemaCache.clear();
288
+ }
289
+ }
290
+ //# sourceMappingURL=GuaranteeAPI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GuaranteeAPI.js","sourceRoot":"","sources":["../../src/api/GuaranteeAPI.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,214 @@
1
+ import type { ServiceDefinition, RoutingRule } from '@grafema/types';
2
+ /**
3
+ * Grafema configuration schema.
4
+ *
5
+ * YAML Location: .grafema/config.yaml (preferred) or .grafema/config.json (deprecated)
6
+ *
7
+ * Example config.yaml:
8
+ *
9
+ * ```yaml
10
+ * # Plugins for each analysis phase
11
+ * plugins:
12
+ * indexing:
13
+ * - JSModuleIndexer
14
+ * analysis:
15
+ * - CoreV2Analyzer
16
+ * - ExpressRouteAnalyzer
17
+ * enrichment:
18
+ * - ExportEntityLinker
19
+ * validation:
20
+ * - EvalBanValidator
21
+ *
22
+ * # Optional: Explicit service definitions (bypass auto-discovery)
23
+ * services:
24
+ * - name: "backend"
25
+ * path: "apps/backend" # Relative to project root
26
+ * entryPoint: "src/index.ts" # Optional, auto-detected if omitted
27
+ * - name: "frontend"
28
+ * path: "apps/frontend"
29
+ * ```
30
+ *
31
+ * If 'services' is not specified or empty, auto-discovery is used (SimpleProjectDiscovery).
32
+ * If 'services' is specified and non-empty, auto-discovery plugins are skipped entirely.
33
+ */
34
+ export interface GrafemaConfig {
35
+ /**
36
+ * Config schema version (major.minor.patch, no pre-release tag).
37
+ * Must be compatible with the running Grafema version.
38
+ * If omitted, no version check is performed (backward compatibility).
39
+ *
40
+ * @example "0.2.5"
41
+ */
42
+ version?: string;
43
+ plugins: {
44
+ discovery?: string[];
45
+ indexing: string[];
46
+ analysis: string[];
47
+ enrichment: string[];
48
+ validation: string[];
49
+ };
50
+ /**
51
+ * Optional explicit services for manual configuration.
52
+ * If provided and non-empty, auto-discovery is skipped.
53
+ */
54
+ services: ServiceDefinition[];
55
+ /**
56
+ * Glob patterns for files to include during indexing (optional).
57
+ * See OrchestratorConfig.include for documentation.
58
+ */
59
+ include?: string[];
60
+ /**
61
+ * Glob patterns for files to exclude during indexing (optional).
62
+ * See OrchestratorConfig.exclude for documentation.
63
+ */
64
+ exclude?: string[];
65
+ /**
66
+ * Routing rules for cross-service URL mapping (REG-256).
67
+ * Describes how infrastructure (nginx, gateway) transforms URLs between services.
68
+ *
69
+ * @example
70
+ * ```yaml
71
+ * routing:
72
+ * - from: frontend
73
+ * to: backend
74
+ * stripPrefix: /api
75
+ * - from: frontend
76
+ * to: auth-service
77
+ * stripPrefix: /auth
78
+ * ```
79
+ */
80
+ routing?: RoutingRule[];
81
+ /**
82
+ * Enable strict mode for fail-fast debugging.
83
+ * When true, analysis fails if enrichers cannot resolve references.
84
+ * When false (default), graceful degradation with warnings.
85
+ *
86
+ * Can be overridden via CLI: --strict
87
+ */
88
+ strict?: boolean;
89
+ /**
90
+ * Multi-root workspace configuration (REG-76).
91
+ * Allows indexing multiple directories as a single unified graph.
92
+ * Each root is prefixed in semantic IDs to prevent collisions.
93
+ *
94
+ * @example
95
+ * ```yaml
96
+ * workspace:
97
+ * roots:
98
+ * - ./backend
99
+ * - ./frontend
100
+ * - ./shared
101
+ * ```
102
+ */
103
+ workspace?: WorkspaceConfig;
104
+ /**
105
+ * URI configuration for grafema:// identifiers.
106
+ * Used by MCP and CLI for compact<->URI conversion.
107
+ */
108
+ uri?: {
109
+ /** URI authority (e.g., "github.com/owner/repo"). Auto-detected if omitted. */
110
+ authority?: string;
111
+ };
112
+ }
113
+ /**
114
+ * Multi-root workspace configuration.
115
+ * Each root directory is indexed separately but produces a unified graph.
116
+ * Root names (basename of path) are prefixed to file paths in semantic IDs.
117
+ */
118
+ export interface WorkspaceConfig {
119
+ /**
120
+ * List of root directories to include in the workspace.
121
+ * Paths are relative to the project root (where .grafema/ is located).
122
+ * Each root's basename is used as prefix in semantic IDs.
123
+ */
124
+ roots: string[];
125
+ }
126
+ /**
127
+ * Default plugin configuration.
128
+ * Matches current DEFAULT_PLUGINS in analyze.ts and config.ts (MCP).
129
+ */
130
+ export declare const DEFAULT_CONFIG: GrafemaConfig;
131
+ /**
132
+ * Load Grafema config from project directory.
133
+ *
134
+ * Priority:
135
+ * 1. config.yaml (preferred)
136
+ * 2. config.json (deprecated, fallback)
137
+ * 3. DEFAULT_CONFIG (if neither exists)
138
+ *
139
+ * Warnings:
140
+ * - Logs deprecation warning if config.json is used
141
+ * - Logs parse errors but doesn't throw (returns defaults)
142
+ *
143
+ * @param projectPath - Absolute path to project root
144
+ * @param logger - Optional logger for warnings (defaults to console.warn)
145
+ * @returns Parsed config or defaults
146
+ */
147
+ export declare function loadConfig(projectPath: string, logger?: {
148
+ warn: (msg: string) => void;
149
+ }): GrafemaConfig;
150
+ /**
151
+ * Validate config version compatibility with running Grafema version.
152
+ * THROWS on error (fail loudly per project convention).
153
+ *
154
+ * Compares major.minor.patch (pre-release tags are stripped).
155
+ * If config has no version field, validation passes silently (backward compat).
156
+ *
157
+ * @param configVersion - Version string from config file (may be undefined)
158
+ * @param currentVersion - Override for testing (defaults to GRAFEMA_VERSION)
159
+ */
160
+ export declare function validateVersion(configVersion: unknown, currentVersion?: string): void;
161
+ /**
162
+ * Validate services array structure.
163
+ * THROWS on error (fail loudly per Linus review).
164
+ *
165
+ * @param services - Parsed services array (may be undefined)
166
+ * @param projectPath - Project root for path validation
167
+ */
168
+ export declare function validateServices(services: unknown, projectPath: string): void;
169
+ /**
170
+ * Validate workspace configuration (REG-76).
171
+ * THROWS on error (fail loudly per project convention).
172
+ *
173
+ * Validation rules:
174
+ * 1. workspace.roots must be an array if provided
175
+ * 2. Each root must be a non-empty string
176
+ * 3. Each root path must exist and be a directory
177
+ * 4. Root basenames must be unique (to prevent semantic ID collisions)
178
+ *
179
+ * @param workspace - Parsed workspace config (may be undefined)
180
+ * @param projectPath - Project root for path validation
181
+ */
182
+ export declare function validateWorkspace(workspace: unknown, projectPath: string): void;
183
+ /**
184
+ * Validate routing rules structure (REG-256).
185
+ * THROWS on error (fail loudly per project convention).
186
+ *
187
+ * Validation rules:
188
+ * 1. Must be an array if provided
189
+ * 2. Each rule must have 'from' and 'to' as non-empty strings
190
+ * 3. 'stripPrefix' must start with '/' if provided
191
+ * 4. 'addPrefix' must start with '/' if provided
192
+ * 5. 'from' and 'to' must reference services defined in the services array
193
+ *
194
+ * @param routing - Parsed routing rules (may be undefined)
195
+ * @param services - Parsed services array (for cross-validation)
196
+ */
197
+ export declare function validateRouting(routing: unknown, services: ServiceDefinition[]): void;
198
+ /**
199
+ * Validate include/exclude patterns.
200
+ * THROWS on error (fail loudly per project convention).
201
+ *
202
+ * Validation rules:
203
+ * 1. Must be arrays if provided
204
+ * 2. Array elements must be non-empty strings
205
+ * 3. Warn (don't error) if include array is empty (would exclude everything)
206
+ *
207
+ * @param include - Parsed include patterns (may be undefined)
208
+ * @param exclude - Parsed exclude patterns (may be undefined)
209
+ * @param logger - Logger for warnings
210
+ */
211
+ export declare function validatePatterns(include: unknown, exclude: unknown, logger: {
212
+ warn: (msg: string) => void;
213
+ }): void;
214
+ //# sourceMappingURL=ConfigLoader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfigLoader.d.ts","sourceRoot":"","sources":["../../src/config/ConfigLoader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAGrE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,OAAO,EAAE;QACP,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;QACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,UAAU,EAAE,MAAM,EAAE,CAAC;QACrB,UAAU,EAAE,MAAM,EAAE,CAAC;KACtB,CAAC;IACF;;;OAGG;IACH,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAE9B;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAEnB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAEnB;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;IAExB;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;;;;;;;;;;;;OAaG;IACH,SAAS,CAAC,EAAE,eAAe,CAAC;IAE5B;;;OAGG;IACH,GAAG,CAAC,EAAE;QACJ,+EAA+E;QAC/E,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,aA0C5B,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,UAAU,CACxB,WAAW,EAAE,MAAM,EACnB,MAAM,GAAE;IAAE,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;CAAY,GAChD,aAAa,CAsFf;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAC7B,aAAa,EAAE,OAAO,EACtB,cAAc,CAAC,EAAE,MAAM,GACtB,IAAI,CAyBN;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAqE7E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CA+D/E;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,GAAG,IAAI,CA8DrF;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE;IAAE,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE,GACtC,IAAI,CAkCN"}