@graph-ir/core 0.2.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 (92) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +26 -0
  3. package/dist/generation/id-generator.d.ts +81 -0
  4. package/dist/generation/id-generator.d.ts.map +1 -0
  5. package/dist/generation/id-generator.js +193 -0
  6. package/dist/generation/id-generator.js.map +1 -0
  7. package/dist/generation/index.d.ts +7 -0
  8. package/dist/generation/index.d.ts.map +1 -0
  9. package/dist/generation/index.js +7 -0
  10. package/dist/generation/index.js.map +1 -0
  11. package/dist/index.d.ts +12 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +26 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/output/ci.d.ts +36 -0
  16. package/dist/output/ci.d.ts.map +1 -0
  17. package/dist/output/ci.js +145 -0
  18. package/dist/output/ci.js.map +1 -0
  19. package/dist/output/index.d.ts +20 -0
  20. package/dist/output/index.d.ts.map +1 -0
  21. package/dist/output/index.js +40 -0
  22. package/dist/output/index.js.map +1 -0
  23. package/dist/output/json.d.ts +24 -0
  24. package/dist/output/json.d.ts.map +1 -0
  25. package/dist/output/json.js +49 -0
  26. package/dist/output/json.js.map +1 -0
  27. package/dist/output/pretty.d.ts +44 -0
  28. package/dist/output/pretty.d.ts.map +1 -0
  29. package/dist/output/pretty.js +227 -0
  30. package/dist/output/pretty.js.map +1 -0
  31. package/dist/output/types.d.ts +63 -0
  32. package/dist/output/types.d.ts.map +1 -0
  33. package/dist/output/types.js +5 -0
  34. package/dist/output/types.js.map +1 -0
  35. package/dist/schemas/graph-ir.schema.json +360 -0
  36. package/dist/skills/diff.d.ts +73 -0
  37. package/dist/skills/diff.d.ts.map +1 -0
  38. package/dist/skills/diff.js +315 -0
  39. package/dist/skills/diff.js.map +1 -0
  40. package/dist/skills/migrate.d.ts +40 -0
  41. package/dist/skills/migrate.d.ts.map +1 -0
  42. package/dist/skills/migrate.js +288 -0
  43. package/dist/skills/migrate.js.map +1 -0
  44. package/dist/skills/visualize.d.ts +30 -0
  45. package/dist/skills/visualize.d.ts.map +1 -0
  46. package/dist/skills/visualize.js +254 -0
  47. package/dist/skills/visualize.js.map +1 -0
  48. package/dist/symbols/index.d.ts +12 -0
  49. package/dist/symbols/index.d.ts.map +1 -0
  50. package/dist/symbols/index.js +12 -0
  51. package/dist/symbols/index.js.map +1 -0
  52. package/dist/symbols/notation-registry.d.ts +61 -0
  53. package/dist/symbols/notation-registry.d.ts.map +1 -0
  54. package/dist/symbols/notation-registry.js +114 -0
  55. package/dist/symbols/notation-registry.js.map +1 -0
  56. package/dist/symbols/symbol-registry.d.ts +58 -0
  57. package/dist/symbols/symbol-registry.d.ts.map +1 -0
  58. package/dist/symbols/symbol-registry.js +88 -0
  59. package/dist/symbols/symbol-registry.js.map +1 -0
  60. package/dist/symbols/types.d.ts +166 -0
  61. package/dist/symbols/types.d.ts.map +1 -0
  62. package/dist/symbols/types.js +13 -0
  63. package/dist/symbols/types.js.map +1 -0
  64. package/dist/testing/diff.d.ts +46 -0
  65. package/dist/testing/diff.d.ts.map +1 -0
  66. package/dist/testing/diff.js +400 -0
  67. package/dist/testing/diff.js.map +1 -0
  68. package/dist/testing/index.d.ts +10 -0
  69. package/dist/testing/index.d.ts.map +1 -0
  70. package/dist/testing/index.js +10 -0
  71. package/dist/testing/index.js.map +1 -0
  72. package/dist/testing/snapshot.d.ts +95 -0
  73. package/dist/testing/snapshot.d.ts.map +1 -0
  74. package/dist/testing/snapshot.js +172 -0
  75. package/dist/testing/snapshot.js.map +1 -0
  76. package/dist/types.d.ts +240 -0
  77. package/dist/types.d.ts.map +1 -0
  78. package/dist/types.js +7 -0
  79. package/dist/types.js.map +1 -0
  80. package/dist/validation/index.d.ts +9 -0
  81. package/dist/validation/index.d.ts.map +1 -0
  82. package/dist/validation/index.js +8 -0
  83. package/dist/validation/index.js.map +1 -0
  84. package/dist/validation/ir-validator.d.ts +51 -0
  85. package/dist/validation/ir-validator.d.ts.map +1 -0
  86. package/dist/validation/ir-validator.js +349 -0
  87. package/dist/validation/ir-validator.js.map +1 -0
  88. package/dist/validation/validator.d.ts +13 -0
  89. package/dist/validation/validator.d.ts.map +1 -0
  90. package/dist/validation/validator.js +19 -0
  91. package/dist/validation/validator.js.map +1 -0
  92. package/package.json +73 -0
@@ -0,0 +1,360 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://graph-ir.dev/schemas/graph-ir.schema.json",
4
+ "title": "Graph-IR",
5
+ "description": "Graph Intermediate Representation schema",
6
+ "type": "object",
7
+ "required": ["version", "id", "nodes", "edges"],
8
+ "properties": {
9
+ "version": {
10
+ "type": "string",
11
+ "description": "Schema version for migration support",
12
+ "pattern": "^\\d+\\.\\d+\\.\\d+$"
13
+ },
14
+ "id": {
15
+ "type": "string",
16
+ "description": "Unique identifier for this graph",
17
+ "minLength": 1
18
+ },
19
+ "name": {
20
+ "type": "string",
21
+ "description": "Human-readable name"
22
+ },
23
+ "nodes": {
24
+ "type": "array",
25
+ "description": "Top-level nodes",
26
+ "items": { "$ref": "#/$defs/GraphNode" }
27
+ },
28
+ "edges": {
29
+ "type": "array",
30
+ "description": "Connections between nodes",
31
+ "items": { "$ref": "#/$defs/GraphEdge" }
32
+ },
33
+ "metadata": { "$ref": "#/$defs/GraphMetadata" },
34
+ "layoutOptions": { "$ref": "#/$defs/LayoutOptions" }
35
+ },
36
+ "$defs": {
37
+ "GraphNode": {
38
+ "type": "object",
39
+ "required": ["id", "type"],
40
+ "properties": {
41
+ "id": {
42
+ "type": "string",
43
+ "description": "Unique identifier within the graph",
44
+ "minLength": 1
45
+ },
46
+ "type": {
47
+ "type": "string",
48
+ "description": "Node type (e.g., 'service', 'database')",
49
+ "minLength": 1
50
+ },
51
+ "label": {
52
+ "type": "string",
53
+ "description": "Display label"
54
+ },
55
+ "description": {
56
+ "type": "string",
57
+ "description": "Optional description"
58
+ },
59
+ "symbol": {
60
+ "type": "string",
61
+ "description": "Symbol registry key used for visual representation"
62
+ },
63
+ "variant": {
64
+ "type": "string",
65
+ "description": "Optional variant of the selected symbol"
66
+ },
67
+ "properties": {
68
+ "type": "object",
69
+ "description": "Custom properties",
70
+ "additionalProperties": true
71
+ },
72
+ "children": {
73
+ "type": "array",
74
+ "description": "Child nodes for compound graphs",
75
+ "items": { "$ref": "#/$defs/GraphNode" }
76
+ },
77
+ "parent": {
78
+ "type": "string",
79
+ "description": "Parent node ID"
80
+ },
81
+ "ports": {
82
+ "type": "array",
83
+ "description": "Connection points",
84
+ "items": { "$ref": "#/$defs/Port" }
85
+ },
86
+ "dimensions": { "$ref": "#/$defs/Dimensions" },
87
+ "position": { "$ref": "#/$defs/Position" },
88
+ "pinned": {
89
+ "type": "boolean",
90
+ "description": "Preserve position during layout"
91
+ },
92
+ "layoutOptions": { "$ref": "#/$defs/NodeLayoutOptions" },
93
+ "sourceInfo": { "$ref": "#/$defs/SourceInfo" }
94
+ }
95
+ },
96
+ "Port": {
97
+ "type": "object",
98
+ "required": ["id", "side"],
99
+ "properties": {
100
+ "id": {
101
+ "type": "string",
102
+ "description": "Unique identifier within parent node",
103
+ "minLength": 1
104
+ },
105
+ "side": {
106
+ "type": "string",
107
+ "enum": ["NORTH", "SOUTH", "EAST", "WEST"],
108
+ "description": "Which side of the node"
109
+ },
110
+ "label": {
111
+ "type": "string",
112
+ "description": "Optional label"
113
+ },
114
+ "position": {
115
+ "type": "number",
116
+ "minimum": 0,
117
+ "maximum": 1,
118
+ "description": "Position along the side (0.0 to 1.0)"
119
+ },
120
+ "properties": {
121
+ "type": "object",
122
+ "additionalProperties": true
123
+ }
124
+ }
125
+ },
126
+ "GraphEdge": {
127
+ "type": "object",
128
+ "required": ["id", "source", "target"],
129
+ "properties": {
130
+ "id": {
131
+ "type": "string",
132
+ "description": "Unique identifier within the graph",
133
+ "minLength": 1
134
+ },
135
+ "source": {
136
+ "type": "string",
137
+ "description": "Source node ID",
138
+ "minLength": 1
139
+ },
140
+ "target": {
141
+ "type": "string",
142
+ "description": "Target node ID",
143
+ "minLength": 1
144
+ },
145
+ "sourcePort": {
146
+ "type": "string",
147
+ "description": "Source port ID"
148
+ },
149
+ "targetPort": {
150
+ "type": "string",
151
+ "description": "Target port ID"
152
+ },
153
+ "type": {
154
+ "type": "string",
155
+ "description": "Edge type"
156
+ },
157
+ "label": {
158
+ "type": "string",
159
+ "description": "Display label"
160
+ },
161
+ "properties": {
162
+ "type": "object",
163
+ "additionalProperties": true
164
+ },
165
+ "routingPoints": {
166
+ "type": "array",
167
+ "items": { "$ref": "#/$defs/Position" }
168
+ },
169
+ "style": { "$ref": "#/$defs/EdgeStyle" },
170
+ "sourceInfo": { "$ref": "#/$defs/SourceInfo" }
171
+ }
172
+ },
173
+ "EdgeStyle": {
174
+ "type": "object",
175
+ "properties": {
176
+ "lineStyle": {
177
+ "type": "string",
178
+ "enum": ["solid", "dashed", "dotted"]
179
+ },
180
+ "targetArrow": {
181
+ "type": "string",
182
+ "enum": ["arrow", "diamond", "circle", "none"]
183
+ },
184
+ "sourceArrow": {
185
+ "type": "string",
186
+ "enum": ["arrow", "diamond", "circle", "none"]
187
+ },
188
+ "routing": {
189
+ "type": "string",
190
+ "enum": ["orthogonal", "polyline", "spline"]
191
+ }
192
+ }
193
+ },
194
+ "Dimensions": {
195
+ "type": "object",
196
+ "required": ["width", "height"],
197
+ "properties": {
198
+ "width": { "type": "number", "minimum": 0 },
199
+ "height": { "type": "number", "minimum": 0 }
200
+ }
201
+ },
202
+ "Position": {
203
+ "type": "object",
204
+ "required": ["x", "y"],
205
+ "properties": {
206
+ "x": { "type": "number" },
207
+ "y": { "type": "number" }
208
+ }
209
+ },
210
+ "LayoutOptions": {
211
+ "type": "object",
212
+ "properties": {
213
+ "algorithm": {
214
+ "type": "string",
215
+ "enum": ["layered", "force", "radial", "tree", "fixed"]
216
+ },
217
+ "direction": {
218
+ "type": "string",
219
+ "enum": ["DOWN", "UP", "LEFT", "RIGHT"]
220
+ },
221
+ "spacing": { "$ref": "#/$defs/SpacingOptions" },
222
+ "edgeRouting": {
223
+ "type": "string",
224
+ "enum": ["orthogonal", "polyline", "spline"]
225
+ },
226
+ "hierarchyHandling": {
227
+ "type": "string",
228
+ "enum": ["INCLUDE_CHILDREN", "SEPARATE_CHILDREN"]
229
+ },
230
+ "algorithmOptions": {
231
+ "type": "object",
232
+ "additionalProperties": {
233
+ "oneOf": [
234
+ { "type": "string" },
235
+ { "type": "number" },
236
+ { "type": "boolean" }
237
+ ]
238
+ }
239
+ }
240
+ }
241
+ },
242
+ "SpacingOptions": {
243
+ "type": "object",
244
+ "properties": {
245
+ "nodeNode": { "type": "number", "minimum": 0 },
246
+ "nodeEdge": { "type": "number", "minimum": 0 },
247
+ "edgeEdge": { "type": "number", "minimum": 0 },
248
+ "layerSpacing": { "type": "number", "minimum": 0 }
249
+ }
250
+ },
251
+ "NodeLayoutOptions": {
252
+ "type": "object",
253
+ "properties": {
254
+ "portConstraints": {
255
+ "type": "string",
256
+ "enum": ["FREE", "FIXED_SIDE", "FIXED_ORDER", "FIXED_POS"]
257
+ },
258
+ "portAlignment": {
259
+ "type": "string",
260
+ "enum": ["BEGIN", "CENTER", "END", "JUSTIFIED"]
261
+ },
262
+ "sizeConstraints": {
263
+ "type": "array",
264
+ "items": {
265
+ "type": "string",
266
+ "enum": ["MINIMUM_SIZE", "NODE_LABELS", "PORTS"]
267
+ }
268
+ },
269
+ "minimumSize": { "$ref": "#/$defs/Dimensions" },
270
+ "padding": {
271
+ "type": "object",
272
+ "properties": {
273
+ "top": { "type": "number", "minimum": 0 },
274
+ "right": { "type": "number", "minimum": 0 },
275
+ "bottom": { "type": "number", "minimum": 0 },
276
+ "left": { "type": "number", "minimum": 0 }
277
+ }
278
+ }
279
+ }
280
+ },
281
+ "SourceInfo": {
282
+ "type": "object",
283
+ "required": ["range"],
284
+ "properties": {
285
+ "range": { "$ref": "#/$defs/SourceRange" },
286
+ "leadingComments": {
287
+ "type": "array",
288
+ "items": { "$ref": "#/$defs/Comment" }
289
+ },
290
+ "trailingComment": { "$ref": "#/$defs/Comment" },
291
+ "leadingWhitespace": { "type": "string" },
292
+ "modified": { "type": "boolean" },
293
+ "originalText": { "type": "string" }
294
+ }
295
+ },
296
+ "SourceRange": {
297
+ "type": "object",
298
+ "required": ["start", "end"],
299
+ "properties": {
300
+ "start": { "type": "integer", "minimum": 0 },
301
+ "end": { "type": "integer", "minimum": 0 },
302
+ "startPosition": {
303
+ "type": "object",
304
+ "required": ["line", "column"],
305
+ "properties": {
306
+ "line": { "type": "integer", "minimum": 0 },
307
+ "column": { "type": "integer", "minimum": 0 }
308
+ }
309
+ },
310
+ "endPosition": {
311
+ "type": "object",
312
+ "required": ["line", "column"],
313
+ "properties": {
314
+ "line": { "type": "integer", "minimum": 0 },
315
+ "column": { "type": "integer", "minimum": 0 }
316
+ }
317
+ }
318
+ }
319
+ },
320
+ "Comment": {
321
+ "type": "object",
322
+ "required": ["text", "style"],
323
+ "properties": {
324
+ "text": { "type": "string" },
325
+ "style": {
326
+ "type": "string",
327
+ "enum": ["line", "block"]
328
+ },
329
+ "range": { "$ref": "#/$defs/SourceRange" }
330
+ }
331
+ },
332
+ "GraphMetadata": {
333
+ "type": "object",
334
+ "properties": {
335
+ "author": { "type": "string" },
336
+ "created": {
337
+ "type": "string",
338
+ "format": "date-time"
339
+ },
340
+ "modified": {
341
+ "type": "string",
342
+ "format": "date-time"
343
+ },
344
+ "description": { "type": "string" },
345
+ "tags": {
346
+ "type": "array",
347
+ "items": { "type": "string" }
348
+ },
349
+ "notation": {
350
+ "type": "string",
351
+ "description": "Notation used by the graph, such as flowchart or ERD"
352
+ },
353
+ "custom": {
354
+ "type": "object",
355
+ "additionalProperties": true
356
+ }
357
+ }
358
+ }
359
+ }
360
+ }
@@ -0,0 +1,73 @@
1
+ /**
2
+ * IR Diff Skill
3
+ *
4
+ * Compare two Graph-IR files and display semantic differences.
5
+ */
6
+ import type { GraphIR } from '@graph-ir/core';
7
+ export interface DiffOptions {
8
+ /** Fields to ignore during comparison */
9
+ ignore?: string[];
10
+ /** Output format */
11
+ format?: 'pretty' | 'json' | 'markdown';
12
+ /** Only show summary statistics */
13
+ statsOnly?: boolean;
14
+ }
15
+ export interface DiffResult {
16
+ success: boolean;
17
+ changes: {
18
+ nodes: {
19
+ added: NodeChange[];
20
+ removed: NodeChange[];
21
+ modified: NodeModification[];
22
+ };
23
+ edges: {
24
+ added: EdgeChange[];
25
+ removed: EdgeChange[];
26
+ modified: EdgeModification[];
27
+ };
28
+ };
29
+ summary: {
30
+ nodes: {
31
+ added: number;
32
+ modified: number;
33
+ removed: number;
34
+ };
35
+ edges: {
36
+ added: number;
37
+ modified: number;
38
+ removed: number;
39
+ };
40
+ };
41
+ output: string;
42
+ errors: string[];
43
+ }
44
+ interface NodeChange {
45
+ id: string;
46
+ type: string;
47
+ label?: string;
48
+ }
49
+ interface EdgeChange {
50
+ id: string;
51
+ source: string;
52
+ target: string;
53
+ label?: string;
54
+ }
55
+ interface FieldChange {
56
+ path: string;
57
+ from: unknown;
58
+ to: unknown;
59
+ }
60
+ interface NodeModification {
61
+ id: string;
62
+ changes: FieldChange[];
63
+ }
64
+ interface EdgeModification {
65
+ id: string;
66
+ changes: FieldChange[];
67
+ }
68
+ /**
69
+ * Compare two Graph-IR objects
70
+ */
71
+ export declare function diffIR(base: GraphIR, target: GraphIR, options?: DiffOptions): DiffResult;
72
+ export {};
73
+ //# sourceMappingURL=diff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/skills/diff.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAwB,MAAM,gBAAgB,CAAC;AAEpE,MAAM,WAAW,WAAW;IAC1B,yCAAyC;IACzC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,oBAAoB;IACpB,MAAM,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;IACxC,mCAAmC;IACnC,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE;QACP,KAAK,EAAE;YACL,KAAK,EAAE,UAAU,EAAE,CAAC;YACpB,OAAO,EAAE,UAAU,EAAE,CAAC;YACtB,QAAQ,EAAE,gBAAgB,EAAE,CAAC;SAC9B,CAAC;QACF,KAAK,EAAE;YACL,KAAK,EAAE,UAAU,EAAE,CAAC;YACpB,OAAO,EAAE,UAAU,EAAE,CAAC;YACtB,QAAQ,EAAE,gBAAgB,EAAE,CAAC;SAC9B,CAAC;KACH,CAAC;IACF,OAAO,EAAE;QACP,KAAK,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC;QAC5D,KAAK,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC;KAC7D,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,UAAU,UAAU;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,UAAU;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;IACd,EAAE,EAAE,OAAO,CAAC;CACb;AAED,UAAU,gBAAgB;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB;AAED,UAAU,gBAAgB;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB;AAID;;GAEG;AACH,wBAAgB,MAAM,CACpB,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,OAAO,EACf,OAAO,GAAE,WAAgB,GACxB,UAAU,CA8IZ"}