@graph-ir/core 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -2
- package/dist/canonical-types.d.ts +207 -0
- package/dist/canonical-types.d.ts.map +1 -0
- package/dist/canonical-types.js +3 -0
- package/dist/canonical-types.js.map +1 -0
- package/dist/generation/id-generator.d.ts.map +1 -1
- package/dist/generation/id-generator.js +16 -10
- package/dist/generation/id-generator.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/output/types.d.ts.map +1 -1
- package/dist/schemas/graph-ir.schema.json +327 -271
- package/dist/skills/diff.d.ts +4 -0
- package/dist/skills/diff.d.ts.map +1 -1
- package/dist/skills/diff.js +93 -11
- package/dist/skills/diff.js.map +1 -1
- package/dist/skills/migrate.d.ts +13 -18
- package/dist/skills/migrate.d.ts.map +1 -1
- package/dist/skills/migrate.js +224 -247
- package/dist/skills/migrate.js.map +1 -1
- package/dist/skills/visualize.d.ts.map +1 -1
- package/dist/skills/visualize.js +29 -5
- package/dist/skills/visualize.js.map +1 -1
- package/dist/testing/diff.d.ts +1 -1
- package/dist/testing/diff.d.ts.map +1 -1
- package/dist/testing/diff.js +23 -19
- package/dist/testing/diff.js.map +1 -1
- package/dist/types.d.ts +12 -214
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +3 -2
- package/dist/types.js.map +1 -1
- package/dist/validation/ir-validator.d.ts +27 -44
- package/dist/validation/ir-validator.d.ts.map +1 -1
- package/dist/validation/ir-validator.js +481 -294
- package/dist/validation/ir-validator.js.map +1 -1
- package/dist/validation/validator.d.ts.map +1 -1
- package/package.json +9 -4
- package/specification.json +9 -0
package/dist/skills/migrate.js
CHANGED
|
@@ -1,287 +1,264 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
// Define migrations between versions
|
|
9
|
-
const MIGRATIONS = [
|
|
10
|
-
// Example: 0.9.0 -> 1.0.0
|
|
11
|
-
{
|
|
12
|
-
fromVersion: '0.9.0',
|
|
13
|
-
toVersion: '1.0.0',
|
|
14
|
-
changes: [
|
|
15
|
-
{
|
|
16
|
-
type: 'rename',
|
|
17
|
-
path: 'nodes[*].props',
|
|
18
|
-
description: 'Rename "props" to "properties"',
|
|
19
|
-
},
|
|
20
|
-
{
|
|
21
|
-
type: 'rename',
|
|
22
|
-
path: 'edges[*].from',
|
|
23
|
-
description: 'Rename "from" to "source"',
|
|
24
|
-
},
|
|
25
|
-
{
|
|
26
|
-
type: 'rename',
|
|
27
|
-
path: 'edges[*].to',
|
|
28
|
-
description: 'Rename "to" to "target"',
|
|
29
|
-
},
|
|
30
|
-
{
|
|
31
|
-
type: 'add',
|
|
32
|
-
path: 'edges[*].id',
|
|
33
|
-
description: 'Add required edge IDs',
|
|
34
|
-
},
|
|
35
|
-
],
|
|
36
|
-
migrate: (ir) => {
|
|
37
|
-
const result = { ...ir };
|
|
38
|
-
// Rename node props -> properties
|
|
39
|
-
if (Array.isArray(result.nodes)) {
|
|
40
|
-
result.nodes = result.nodes.map((node, index) => {
|
|
41
|
-
const newNode = { ...node };
|
|
42
|
-
if ('props' in newNode) {
|
|
43
|
-
newNode.properties = newNode.props;
|
|
44
|
-
delete newNode.props;
|
|
45
|
-
}
|
|
46
|
-
return newNode;
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
// Rename edge from/to -> source/target and add IDs
|
|
50
|
-
if (Array.isArray(result.edges)) {
|
|
51
|
-
result.edges = result.edges.map((edge, index) => {
|
|
52
|
-
const newEdge = { ...edge };
|
|
53
|
-
if ('from' in newEdge) {
|
|
54
|
-
newEdge.source = newEdge.from;
|
|
55
|
-
delete newEdge.from;
|
|
56
|
-
}
|
|
57
|
-
if ('to' in newEdge) {
|
|
58
|
-
newEdge.target = newEdge.to;
|
|
59
|
-
delete newEdge.to;
|
|
60
|
-
}
|
|
61
|
-
if (!('id' in newEdge)) {
|
|
62
|
-
newEdge.id = `e${index + 1}`;
|
|
63
|
-
}
|
|
64
|
-
return newEdge;
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
result.version = '1.0.0';
|
|
68
|
-
return result;
|
|
69
|
-
},
|
|
70
|
-
},
|
|
71
|
-
// Example: 0.8.0 -> 0.9.0
|
|
72
|
-
{
|
|
73
|
-
fromVersion: '0.8.0',
|
|
74
|
-
toVersion: '0.9.0',
|
|
75
|
-
changes: [
|
|
76
|
-
{
|
|
77
|
-
type: 'add',
|
|
78
|
-
path: 'version',
|
|
79
|
-
description: 'Add required version field',
|
|
80
|
-
value: '0.9.0',
|
|
81
|
-
},
|
|
82
|
-
{
|
|
83
|
-
type: 'add',
|
|
84
|
-
path: 'id',
|
|
85
|
-
description: 'Add required graph ID',
|
|
86
|
-
},
|
|
87
|
-
],
|
|
88
|
-
migrate: (ir) => {
|
|
89
|
-
const result = { ...ir };
|
|
90
|
-
if (!result.version) {
|
|
91
|
-
result.version = '0.9.0';
|
|
92
|
-
}
|
|
93
|
-
if (!result.id) {
|
|
94
|
-
result.id = 'migrated-graph';
|
|
95
|
-
}
|
|
96
|
-
return result;
|
|
97
|
-
},
|
|
98
|
-
},
|
|
99
|
-
];
|
|
100
|
-
/**
|
|
101
|
-
* Migrate a Graph-IR to the target version
|
|
102
|
-
*/
|
|
103
|
-
export function migrateIR(ir, options = {}) {
|
|
104
|
-
const errors = [];
|
|
105
|
-
const warnings = [];
|
|
106
|
-
const allChanges = [];
|
|
107
|
-
// Detect source version
|
|
108
|
-
const fromVersion = options.fromVersion || detectVersion(ir);
|
|
109
|
-
const toVersion = options.toVersion || CURRENT_VERSION;
|
|
110
|
-
if (!fromVersion) {
|
|
111
|
-
return {
|
|
112
|
-
success: false,
|
|
113
|
-
migrated: null,
|
|
114
|
-
fromVersion: 'unknown',
|
|
115
|
-
toVersion,
|
|
116
|
-
changes: [],
|
|
117
|
-
errors: ['Could not detect source version. Please specify --from <version>'],
|
|
118
|
-
warnings: [],
|
|
119
|
-
};
|
|
1
|
+
import { validateIR } from '../validation/validator.js';
|
|
2
|
+
const CURRENT_VERSION = '2.0.0';
|
|
3
|
+
export function migrateIR(input, options = {}) {
|
|
4
|
+
const fromVersion = options.fromVersion ?? detectVersion(input);
|
|
5
|
+
const toVersion = options.toVersion ?? CURRENT_VERSION;
|
|
6
|
+
if (!fromVersion || !isRecord(input)) {
|
|
7
|
+
return failure(fromVersion ?? 'unknown', toVersion, ['Could not detect source version. Specify fromVersion explicitly.']);
|
|
120
8
|
}
|
|
121
|
-
|
|
122
|
-
|
|
9
|
+
if (toVersion !== CURRENT_VERSION) {
|
|
10
|
+
return failure(fromVersion, toVersion, [`Unsupported migration target ${toVersion}`]);
|
|
11
|
+
}
|
|
12
|
+
if (fromVersion === CURRENT_VERSION) {
|
|
13
|
+
const candidate = structuredClone(input);
|
|
14
|
+
const validationErrors = validateMigrationCandidate(candidate);
|
|
15
|
+
if (validationErrors.length > 0) {
|
|
16
|
+
return invalidCandidate(fromVersion, toVersion, [], [], validationErrors);
|
|
17
|
+
}
|
|
123
18
|
return {
|
|
124
19
|
success: true,
|
|
125
|
-
migrated:
|
|
20
|
+
migrated: options.dryRun ? null : candidate,
|
|
126
21
|
fromVersion,
|
|
127
22
|
toVersion,
|
|
128
23
|
changes: [],
|
|
24
|
+
losses: [],
|
|
129
25
|
errors: [],
|
|
130
26
|
warnings: ['Already at target version'],
|
|
131
27
|
};
|
|
132
28
|
}
|
|
133
|
-
|
|
134
|
-
const
|
|
135
|
-
if (
|
|
29
|
+
let working = structuredClone(input);
|
|
30
|
+
const changes = [];
|
|
31
|
+
if (fromVersion === '0.8.0' || fromVersion === '0.9.0') {
|
|
32
|
+
working = normalizeLegacyToOne(working, changes);
|
|
33
|
+
}
|
|
34
|
+
else if (fromVersion !== '1.0.0') {
|
|
35
|
+
return failure(fromVersion, toVersion, [`No migration path from ${fromVersion}`]);
|
|
36
|
+
}
|
|
37
|
+
const losses = collectAmbiguousLosses(working);
|
|
38
|
+
if (losses.length > 0 && (options.ambiguousGeometry ?? 'error') === 'error') {
|
|
136
39
|
return {
|
|
137
40
|
success: false,
|
|
138
41
|
migrated: null,
|
|
139
42
|
fromVersion,
|
|
140
43
|
toVersion,
|
|
141
|
-
changes
|
|
142
|
-
|
|
44
|
+
changes,
|
|
45
|
+
losses,
|
|
46
|
+
errors: [
|
|
47
|
+
'Schema 1.x geometry has ambiguous provenance; choose ambiguousGeometry="drop" or migrate with producer-owned provenance.',
|
|
48
|
+
],
|
|
143
49
|
warnings: [],
|
|
144
50
|
};
|
|
145
51
|
}
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
success: false,
|
|
162
|
-
migrated: null,
|
|
163
|
-
fromVersion,
|
|
164
|
-
toVersion,
|
|
165
|
-
changes: allChanges,
|
|
166
|
-
errors: [`Migration failed at ${migration.fromVersion} → ${migration.toVersion}: ${errorMsg}`],
|
|
167
|
-
warnings,
|
|
168
|
-
};
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
}
|
|
52
|
+
if (losses.length > 0) {
|
|
53
|
+
removeAmbiguousGeometry(working, changes);
|
|
54
|
+
}
|
|
55
|
+
promoteEdgeDescriptions(working, changes);
|
|
56
|
+
working.version = CURRENT_VERSION;
|
|
57
|
+
changes.push({
|
|
58
|
+
type: 'transform',
|
|
59
|
+
path: '/version',
|
|
60
|
+
description: 'Set serialized schema version to 2.0.0',
|
|
61
|
+
value: CURRENT_VERSION,
|
|
62
|
+
});
|
|
63
|
+
const candidate = working;
|
|
64
|
+
const validationErrors = validateMigrationCandidate(candidate);
|
|
65
|
+
if (validationErrors.length > 0) {
|
|
66
|
+
return invalidCandidate(fromVersion, toVersion, changes, losses, validationErrors);
|
|
172
67
|
}
|
|
173
68
|
return {
|
|
174
69
|
success: true,
|
|
175
|
-
migrated: options.dryRun ? null :
|
|
70
|
+
migrated: options.dryRun ? null : candidate,
|
|
176
71
|
fromVersion,
|
|
177
72
|
toVersion,
|
|
178
|
-
changes
|
|
179
|
-
|
|
180
|
-
|
|
73
|
+
changes,
|
|
74
|
+
losses,
|
|
75
|
+
errors: [],
|
|
76
|
+
warnings: losses.map((loss) => `Dropped ambiguous ${loss.field} at ${loss.path}`),
|
|
181
77
|
};
|
|
182
78
|
}
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
79
|
+
function validateMigrationCandidate(candidate) {
|
|
80
|
+
const result = validateIR(candidate);
|
|
81
|
+
return result.errors.map((error) => `${error.code} ${error.path || '/'}: ${error.message}`);
|
|
82
|
+
}
|
|
83
|
+
function invalidCandidate(fromVersion, toVersion, changes, losses, errors) {
|
|
84
|
+
return {
|
|
85
|
+
success: false,
|
|
86
|
+
migrated: null,
|
|
87
|
+
fromVersion,
|
|
88
|
+
toVersion,
|
|
89
|
+
changes,
|
|
90
|
+
losses,
|
|
91
|
+
errors: ['Migrated candidate is not valid GraphIR 2.0.0', ...errors],
|
|
92
|
+
warnings: losses.map((loss) => `Would drop ambiguous ${loss.field} at ${loss.path}`),
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
function normalizeLegacyToOne(input, changes) {
|
|
96
|
+
const result = { ...input };
|
|
97
|
+
if (!result.id) {
|
|
98
|
+
result.id = 'migrated-graph';
|
|
99
|
+
changes.push({ type: 'add', path: '/id', description: 'Add graph ID' });
|
|
189
100
|
}
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
101
|
+
if (Array.isArray(result.nodes)) {
|
|
102
|
+
result.nodes = result.nodes.map((value) => {
|
|
103
|
+
if (!isRecord(value))
|
|
104
|
+
return value;
|
|
105
|
+
const node = { ...value };
|
|
106
|
+
if ('props' in node && !('properties' in node)) {
|
|
107
|
+
node.properties = node.props;
|
|
108
|
+
delete node.props;
|
|
109
|
+
changes.push({ type: 'rename', path: '/nodes/*/props', description: 'Rename props to properties' });
|
|
110
|
+
}
|
|
111
|
+
return node;
|
|
112
|
+
});
|
|
194
113
|
}
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
114
|
+
if (Array.isArray(result.edges)) {
|
|
115
|
+
result.edges = result.edges.map((value, index) => {
|
|
116
|
+
if (!isRecord(value))
|
|
117
|
+
return value;
|
|
118
|
+
const edge = { ...value };
|
|
119
|
+
if ('from' in edge && !('source' in edge)) {
|
|
120
|
+
edge.source = edge.from;
|
|
121
|
+
delete edge.from;
|
|
122
|
+
}
|
|
123
|
+
if ('to' in edge && !('target' in edge)) {
|
|
124
|
+
edge.target = edge.to;
|
|
125
|
+
delete edge.to;
|
|
126
|
+
}
|
|
127
|
+
if (!edge.id)
|
|
128
|
+
edge.id = `e${index + 1}`;
|
|
129
|
+
return edge;
|
|
130
|
+
});
|
|
131
|
+
changes.push({ type: 'transform', path: '/edges', description: 'Normalize legacy edge fields and IDs' });
|
|
202
132
|
}
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
133
|
+
result.version = '1.0.0';
|
|
134
|
+
return result;
|
|
135
|
+
}
|
|
136
|
+
function collectAmbiguousLosses(input) {
|
|
137
|
+
const losses = [];
|
|
138
|
+
visitNodes(input.nodes, '/nodes', (node, path) => {
|
|
139
|
+
for (const field of ['position', 'pinned', 'dimensions']) {
|
|
140
|
+
if (field in node) {
|
|
141
|
+
losses.push({
|
|
142
|
+
path: `${path}/${field}`,
|
|
143
|
+
field,
|
|
144
|
+
reason: `Schema 1.x ${field} did not distinguish authored and computed geometry`,
|
|
145
|
+
});
|
|
146
|
+
}
|
|
209
147
|
}
|
|
148
|
+
});
|
|
149
|
+
if (Array.isArray(input.edges)) {
|
|
150
|
+
input.edges.forEach((value, index) => {
|
|
151
|
+
if (isRecord(value) && 'routingPoints' in value) {
|
|
152
|
+
losses.push({
|
|
153
|
+
path: `/edges/${index}/routingPoints`,
|
|
154
|
+
field: 'routingPoints',
|
|
155
|
+
reason: 'Schema 1.x routing points did not distinguish authored waypoints and generated bends',
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
});
|
|
210
159
|
}
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
if (!obj.id && !obj.version) {
|
|
218
|
-
return '0.8.0';
|
|
160
|
+
if (isRecord(input.layoutOptions) && 'algorithmOptions' in input.layoutOptions) {
|
|
161
|
+
losses.push({
|
|
162
|
+
path: '/layoutOptions/algorithmOptions',
|
|
163
|
+
field: 'algorithmOptions',
|
|
164
|
+
reason: 'Raw engine options are not portable authored GraphIR 2.0',
|
|
165
|
+
});
|
|
219
166
|
}
|
|
220
|
-
return
|
|
167
|
+
return losses;
|
|
221
168
|
}
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
while (current !== to) {
|
|
230
|
-
const migration = MIGRATIONS.find((m) => m.fromVersion === current);
|
|
231
|
-
if (!migration) {
|
|
232
|
-
break;
|
|
169
|
+
function removeAmbiguousGeometry(input, changes) {
|
|
170
|
+
visitNodes(input.nodes, '/nodes', (node, path) => {
|
|
171
|
+
for (const field of ['position', 'pinned', 'dimensions']) {
|
|
172
|
+
if (field in node) {
|
|
173
|
+
delete node[field];
|
|
174
|
+
changes.push({ type: 'remove', path: `${path}/${field}`, description: `Drop ambiguous ${field}` });
|
|
175
|
+
}
|
|
233
176
|
}
|
|
234
|
-
|
|
235
|
-
|
|
177
|
+
});
|
|
178
|
+
if (Array.isArray(input.edges)) {
|
|
179
|
+
input.edges.forEach((value, index) => {
|
|
180
|
+
if (isRecord(value) && 'routingPoints' in value) {
|
|
181
|
+
delete value.routingPoints;
|
|
182
|
+
changes.push({ type: 'remove', path: `/edges/${index}/routingPoints`, description: 'Drop ambiguous routing points' });
|
|
183
|
+
}
|
|
184
|
+
});
|
|
236
185
|
}
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
186
|
+
if (isRecord(input.layoutOptions) && 'algorithmOptions' in input.layoutOptions) {
|
|
187
|
+
delete input.layoutOptions.algorithmOptions;
|
|
188
|
+
changes.push({ type: 'remove', path: '/layoutOptions/algorithmOptions', description: 'Drop non-portable engine options' });
|
|
240
189
|
}
|
|
241
|
-
return path;
|
|
242
190
|
}
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
191
|
+
function promoteEdgeDescriptions(input, changes) {
|
|
192
|
+
if (!Array.isArray(input.edges))
|
|
193
|
+
return;
|
|
194
|
+
input.edges.forEach((value, index) => {
|
|
195
|
+
if (!isRecord(value) || value.description !== undefined || !isRecord(value.properties))
|
|
196
|
+
return;
|
|
197
|
+
if (typeof value.properties.description !== 'string')
|
|
198
|
+
return;
|
|
199
|
+
value.description = value.properties.description;
|
|
200
|
+
delete value.properties.description;
|
|
201
|
+
if (Object.keys(value.properties).length === 0)
|
|
202
|
+
delete value.properties;
|
|
203
|
+
changes.push({
|
|
204
|
+
type: 'transform',
|
|
205
|
+
path: `/edges/${index}/description`,
|
|
206
|
+
description: 'Promote unambiguous properties.description',
|
|
207
|
+
});
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
function visitNodes(value, path, visit) {
|
|
211
|
+
if (!Array.isArray(value))
|
|
212
|
+
return;
|
|
213
|
+
value.forEach((candidate, index) => {
|
|
214
|
+
if (!isRecord(candidate))
|
|
215
|
+
return;
|
|
216
|
+
const nodePath = `${path}/${index}`;
|
|
217
|
+
visit(candidate, nodePath);
|
|
218
|
+
visitNodes(candidate.children, `${nodePath}/children`, visit);
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
function detectVersion(input) {
|
|
222
|
+
if (!isRecord(input))
|
|
223
|
+
return null;
|
|
224
|
+
if (typeof input.version === 'string')
|
|
225
|
+
return input.version;
|
|
226
|
+
if (!input.id)
|
|
227
|
+
return '0.8.0';
|
|
228
|
+
if (Array.isArray(input.nodes) || Array.isArray(input.edges))
|
|
229
|
+
return '0.9.0';
|
|
230
|
+
return null;
|
|
231
|
+
}
|
|
232
|
+
function isRecord(value) {
|
|
233
|
+
return value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
234
|
+
}
|
|
235
|
+
function failure(fromVersion, toVersion, errors) {
|
|
236
|
+
return {
|
|
237
|
+
success: false,
|
|
238
|
+
migrated: null,
|
|
239
|
+
fromVersion,
|
|
240
|
+
toVersion,
|
|
241
|
+
changes: [],
|
|
242
|
+
losses: [],
|
|
243
|
+
errors,
|
|
244
|
+
warnings: [],
|
|
245
|
+
};
|
|
246
|
+
}
|
|
246
247
|
export function formatMigrationResult(result, dryRun) {
|
|
247
|
-
const lines = [
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
lines.push(
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
lines.push(`Changes (${result.changes.length}):`);
|
|
262
|
-
for (const change of result.changes) {
|
|
263
|
-
const icon = change.type === 'add' ? '+' :
|
|
264
|
-
change.type === 'remove' ? '-' :
|
|
265
|
-
change.type === 'rename' ? '~' : '→';
|
|
266
|
-
lines.push(` ${icon} ${change.description}`);
|
|
267
|
-
lines.push(` Path: ${change.path}`);
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
if (result.warnings.length > 0) {
|
|
271
|
-
lines.push('');
|
|
272
|
-
lines.push('Warnings:');
|
|
273
|
-
for (const warning of result.warnings) {
|
|
274
|
-
lines.push(` ⚠ ${warning}`);
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
if (result.errors.length > 0) {
|
|
278
|
-
lines.push('');
|
|
279
|
-
lines.push('Errors:');
|
|
280
|
-
for (const error of result.errors) {
|
|
281
|
-
lines.push(` ✗ ${error}`);
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
lines.push('');
|
|
248
|
+
const lines = [
|
|
249
|
+
dryRun ? 'Migration Plan (Dry Run)' : 'Migration Result',
|
|
250
|
+
'═'.repeat(40),
|
|
251
|
+
`Version: ${result.fromVersion} → ${result.toVersion}`,
|
|
252
|
+
'',
|
|
253
|
+
];
|
|
254
|
+
for (const change of result.changes)
|
|
255
|
+
lines.push(` ${change.type}: ${change.path} — ${change.description}`);
|
|
256
|
+
for (const loss of result.losses)
|
|
257
|
+
lines.push(` loss: ${loss.path} — ${loss.reason}`);
|
|
258
|
+
for (const warning of result.warnings)
|
|
259
|
+
lines.push(` warning: ${warning}`);
|
|
260
|
+
for (const error of result.errors)
|
|
261
|
+
lines.push(` error: ${error}`);
|
|
285
262
|
lines.push(result.success ? '✓ Migration successful' : '✗ Migration failed');
|
|
286
263
|
return lines.join('\n');
|
|
287
264
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/skills/migrate.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/skills/migrate.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAqCxD,MAAM,eAAe,GAAG,OAAO,CAAC;AAEhC,MAAM,UAAU,SAAS,CACvB,KAAc,EACd,UAA4B,EAAE;IAE9B,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC;IAChE,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,eAAe,CAAC;IACvD,IAAI,CAAC,WAAW,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrC,OAAO,OAAO,CACZ,WAAW,IAAI,SAAS,EACxB,SAAS,EACT,CAAC,kEAAkE,CAAC,CACrE,CAAC;IACJ,CAAC;IACD,IAAI,SAAS,KAAK,eAAe,EAAE,CAAC;QAClC,OAAO,OAAO,CAAC,WAAW,EAAE,SAAS,EAAE,CAAC,gCAAgC,SAAS,EAAE,CAAC,CAAC,CAAC;IACxF,CAAC;IACD,IAAI,WAAW,KAAK,eAAe,EAAE,CAAC;QACpC,MAAM,SAAS,GAAG,eAAe,CAAC,KAAK,CAAY,CAAC;QACpD,MAAM,gBAAgB,GAAG,0BAA0B,CAAC,SAAS,CAAC,CAAC;QAC/D,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,OAAO,gBAAgB,CAAC,WAAW,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,EAAE,gBAAgB,CAAC,CAAC;QAC5E,CAAC;QACD,OAAO;YACL,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;YAC3C,WAAW;YACX,SAAS;YACT,OAAO,EAAE,EAAE;YACX,MAAM,EAAE,EAAE;YACV,MAAM,EAAE,EAAE;YACV,QAAQ,EAAE,CAAC,2BAA2B,CAAC;SACxC,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,GAAG,eAAe,CAAC,KAAK,CAA4B,CAAC;IAChE,MAAM,OAAO,GAAsB,EAAE,CAAC;IACtC,IAAI,WAAW,KAAK,OAAO,IAAI,WAAW,KAAK,OAAO,EAAE,CAAC;QACvD,OAAO,GAAG,oBAAoB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC;SAAM,IAAI,WAAW,KAAK,OAAO,EAAE,CAAC;QACnC,OAAO,OAAO,CAAC,WAAW,EAAE,SAAS,EAAE,CAAC,0BAA0B,WAAW,EAAE,CAAC,CAAC,CAAC;IACpF,CAAC;IAED,MAAM,MAAM,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAC/C,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,IAAI,OAAO,CAAC,KAAK,OAAO,EAAE,CAAC;QAC5E,OAAO;YACL,OAAO,EAAE,KAAK;YACd,QAAQ,EAAE,IAAI;YACd,WAAW;YACX,SAAS;YACT,OAAO;YACP,MAAM;YACN,MAAM,EAAE;gBACN,0HAA0H;aAC3H;YACD,QAAQ,EAAE,EAAE;SACb,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,uBAAuB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IACD,uBAAuB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC1C,OAAO,CAAC,OAAO,GAAG,eAAe,CAAC;IAClC,OAAO,CAAC,IAAI,CAAC;QACX,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,wCAAwC;QACrD,KAAK,EAAE,eAAe;KACvB,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,OAA6B,CAAC;IAChD,MAAM,gBAAgB,GAAG,0BAA0B,CAAC,SAAS,CAAC,CAAC;IAC/D,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,OAAO,gBAAgB,CAAC,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC;IACrF,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;QAC3C,WAAW;QACX,SAAS;QACT,OAAO;QACP,MAAM;QACN,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,qBAAqB,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;KAClF,CAAC;AACJ,CAAC;AAED,SAAS,0BAA0B,CAAC,SAAkB;IACpD,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IACrC,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACjC,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,GAAG,KAAK,KAAK,CAAC,OAAO,EAAE,CACvD,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CACvB,WAAmB,EACnB,SAAiB,EACjB,OAA0B,EAC1B,MAAuB,EACvB,MAAgB;IAEhB,OAAO;QACL,OAAO,EAAE,KAAK;QACd,QAAQ,EAAE,IAAI;QACd,WAAW;QACX,SAAS;QACT,OAAO;QACP,MAAM;QACN,MAAM,EAAE,CAAC,+CAA+C,EAAE,GAAG,MAAM,CAAC;QACpE,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,wBAAwB,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;KACrF,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAC3B,KAA8B,EAC9B,OAA0B;IAE1B,MAAM,MAAM,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;IAC5B,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,MAAM,CAAC,EAAE,GAAG,gBAAgB,CAAC;QAC7B,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,CAAC,CAAC;IAC1E,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACxC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,OAAO,KAAK,CAAC;YACnC,MAAM,IAAI,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;YAC1B,IAAI,OAAO,IAAI,IAAI,IAAI,CAAC,CAAC,YAAY,IAAI,IAAI,CAAC,EAAE,CAAC;gBAC/C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC;gBAC7B,OAAO,IAAI,CAAC,KAAK,CAAC;gBAClB,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,gBAAgB,EAAE,WAAW,EAAE,4BAA4B,EAAE,CAAC,CAAC;YACtG,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAC/C,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,OAAO,KAAK,CAAC;YACnC,MAAM,IAAI,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;YAC1B,IAAI,MAAM,IAAI,IAAI,IAAI,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC,EAAE,CAAC;gBAC1C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC;gBACxB,OAAO,IAAI,CAAC,IAAI,CAAC;YACnB,CAAC;YACD,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC,EAAE,CAAC;gBACxC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;gBACtB,OAAO,IAAI,CAAC,EAAE,CAAC;YACjB,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,EAAE;gBAAE,IAAI,CAAC,EAAE,GAAG,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACxC,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sCAAsC,EAAE,CAAC,CAAC;IAC3G,CAAC;IACD,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,sBAAsB,CAAC,KAA8B;IAC5D,MAAM,MAAM,GAAoB,EAAE,CAAC;IACnC,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE;QAC/C,KAAK,MAAM,KAAK,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,YAAY,CAAU,EAAE,CAAC;YAClE,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;gBAClB,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,GAAG,IAAI,IAAI,KAAK,EAAE;oBACxB,KAAK;oBACL,MAAM,EAAE,cAAc,KAAK,qDAAqD;iBACjF,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IACH,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACnC,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,eAAe,IAAI,KAAK,EAAE,CAAC;gBAChD,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,UAAU,KAAK,gBAAgB;oBACrC,KAAK,EAAE,eAAe;oBACtB,MAAM,EAAE,sFAAsF;iBAC/F,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IACD,IAAI,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,kBAAkB,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;QAC/E,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,iCAAiC;YACvC,KAAK,EAAE,kBAAkB;YACzB,MAAM,EAAE,0DAA0D;SACnE,CAAC,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,uBAAuB,CAC9B,KAA8B,EAC9B,OAA0B;IAE1B,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE;QAC/C,KAAK,MAAM,KAAK,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,YAAY,CAAU,EAAE,CAAC;YAClE,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;gBAClB,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;gBACnB,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,IAAI,IAAI,KAAK,EAAE,EAAE,WAAW,EAAE,kBAAkB,KAAK,EAAE,EAAE,CAAC,CAAC;YACrG,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IACH,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACnC,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,eAAe,IAAI,KAAK,EAAE,CAAC;gBAChD,OAAO,KAAK,CAAC,aAAa,CAAC;gBAC3B,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,KAAK,gBAAgB,EAAE,WAAW,EAAE,+BAA+B,EAAE,CAAC,CAAC;YACxH,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IACD,IAAI,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,kBAAkB,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;QAC/E,OAAO,KAAK,CAAC,aAAa,CAAC,gBAAgB,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,iCAAiC,EAAE,WAAW,EAAE,kCAAkC,EAAE,CAAC,CAAC;IAC7H,CAAC;AACH,CAAC;AAED,SAAS,uBAAuB,CAC9B,KAA8B,EAC9B,OAA0B;IAE1B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;QAAE,OAAO;IACxC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACnC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC;YAAE,OAAO;QAC/F,IAAI,OAAO,KAAK,CAAC,UAAU,CAAC,WAAW,KAAK,QAAQ;YAAE,OAAO;QAC7D,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC;QACjD,OAAO,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC;QACpC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC,UAAU,CAAC;QACxE,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,UAAU,KAAK,cAAc;YACnC,WAAW,EAAE,4CAA4C;SAC1D,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,UAAU,CACjB,KAAc,EACd,IAAY,EACZ,KAA4D;IAE5D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO;IAClC,KAAK,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE;QACjC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;YAAE,OAAO;QACjC,MAAM,QAAQ,GAAG,GAAG,IAAI,IAAI,KAAK,EAAE,CAAC;QACpC,KAAK,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC3B,UAAU,CAAC,SAAS,CAAC,QAAQ,EAAE,GAAG,QAAQ,WAAW,EAAE,KAAK,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAClC,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,OAAO,CAAC;IAC5D,IAAI,CAAC,KAAK,CAAC,EAAE;QAAE,OAAO,OAAO,CAAC;IAC9B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC;IAC7E,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,OAAO,CAAC,WAAmB,EAAE,SAAiB,EAAE,MAAgB;IACvE,OAAO;QACL,OAAO,EAAE,KAAK;QACd,QAAQ,EAAE,IAAI;QACd,WAAW;QACX,SAAS;QACT,OAAO,EAAE,EAAE;QACX,MAAM,EAAE,EAAE;QACV,MAAM;QACN,QAAQ,EAAE,EAAE;KACb,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,MAAuB,EAAE,MAAe;IAC5E,MAAM,KAAK,GAAG;QACZ,MAAM,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,kBAAkB;QACxD,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QACd,YAAY,MAAM,CAAC,WAAW,MAAM,MAAM,CAAC,SAAS,EAAE;QACtD,EAAE;KACH,CAAC;IACF,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO;QAAE,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;IAC5G,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACtF,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ;QAAE,KAAK,CAAC,IAAI,CAAC,cAAc,OAAO,EAAE,CAAC,CAAC;IAC3E,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,YAAY,KAAK,EAAE,CAAC,CAAC;IACnE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC;IAC7E,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"visualize.d.ts","sourceRoot":"","sources":["../../src/skills/visualize.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAwB,MAAM,gBAAgB,CAAC;AAEpE,MAAM,WAAW,oBAAoB;IACnC,oBAAoB;IACpB,KAAK,CAAC,EAAE,KAAK,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;IAC5C,qBAAqB;IACrB,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,MAAM,CAAC;IAC7C,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sBAAsB;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,uBAAuB;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAWD;;GAEG;AACH,wBAAgB,WAAW,CACzB,EAAE,EAAE,OAAO,EACX,OAAO,GAAE,oBAAyB,GACjC,mBAAmB,
|
|
1
|
+
{"version":3,"file":"visualize.d.ts","sourceRoot":"","sources":["../../src/skills/visualize.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAwB,MAAM,gBAAgB,CAAC;AAEpE,MAAM,WAAW,oBAAoB;IACnC,oBAAoB;IACpB,KAAK,CAAC,EAAE,KAAK,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;IAC5C,qBAAqB;IACrB,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,MAAM,CAAC;IAC7C,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sBAAsB;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,uBAAuB;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAWD;;GAEG;AACH,wBAAgB,WAAW,CACzB,EAAE,EAAE,OAAO,EACX,OAAO,GAAE,oBAAyB,GACjC,mBAAmB,CAmCrB"}
|