backpack-ontology 0.2.25 → 0.3.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.
- package/README.md +153 -3
- package/dist/bin/backpack-benchmark.d.ts +3 -0
- package/dist/bin/backpack-benchmark.d.ts.map +1 -0
- package/dist/bin/backpack-benchmark.js +213 -0
- package/dist/bin/backpack-benchmark.js.map +1 -0
- package/dist/bin/backpack.js +3 -3
- package/dist/bin/backpack.js.map +1 -1
- package/dist/bin/init.js +8 -11
- package/dist/bin/init.js.map +1 -1
- package/dist/core/backpack.d.ts +69 -2
- package/dist/core/backpack.d.ts.map +1 -1
- package/dist/core/backpack.js +205 -3
- package/dist/core/backpack.js.map +1 -1
- package/dist/core/draft.d.ts +42 -0
- package/dist/core/draft.d.ts.map +1 -0
- package/dist/core/draft.js +232 -0
- package/dist/core/draft.js.map +1 -0
- package/dist/core/events.d.ts +114 -0
- package/dist/core/events.d.ts.map +1 -0
- package/dist/core/events.js +375 -0
- package/dist/core/events.js.map +1 -0
- package/dist/core/graph.d.ts +3 -1
- package/dist/core/graph.d.ts.map +1 -1
- package/dist/core/graph.js +50 -0
- package/dist/core/graph.js.map +1 -1
- package/dist/core/hooks.d.ts +11 -3
- package/dist/core/hooks.d.ts.map +1 -1
- package/dist/core/hooks.js +53 -47
- package/dist/core/hooks.js.map +1 -1
- package/dist/core/normalize.d.ts +28 -0
- package/dist/core/normalize.d.ts.map +1 -0
- package/dist/core/normalize.js +133 -0
- package/dist/core/normalize.js.map +1 -0
- package/dist/core/remote-fetch.d.ts +50 -0
- package/dist/core/remote-fetch.d.ts.map +1 -0
- package/dist/core/remote-fetch.js +338 -0
- package/dist/core/remote-fetch.js.map +1 -0
- package/dist/core/remote-registry.d.ts +95 -0
- package/dist/core/remote-registry.d.ts.map +1 -0
- package/dist/core/remote-registry.js +296 -0
- package/dist/core/remote-registry.js.map +1 -0
- package/dist/core/remote-schema.d.ts +31 -0
- package/dist/core/remote-schema.d.ts.map +1 -0
- package/dist/core/remote-schema.js +252 -0
- package/dist/core/remote-schema.js.map +1 -0
- package/dist/core/role-audit.d.ts +20 -0
- package/dist/core/role-audit.d.ts.map +1 -0
- package/dist/core/role-audit.js +197 -0
- package/dist/core/role-audit.js.map +1 -0
- package/dist/core/telemetry.d.ts +2 -0
- package/dist/core/telemetry.d.ts.map +1 -1
- package/dist/core/telemetry.js +16 -0
- package/dist/core/telemetry.js.map +1 -1
- package/dist/core/token-estimate.d.ts +16 -0
- package/dist/core/token-estimate.d.ts.map +1 -0
- package/dist/core/token-estimate.js +29 -0
- package/dist/core/token-estimate.js.map +1 -0
- package/dist/core/types.d.ts +30 -1
- package/dist/core/types.d.ts.map +1 -1
- package/dist/index.d.ts +9 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +9 -0
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools/bulk-tools.d.ts.map +1 -1
- package/dist/mcp/tools/bulk-tools.js +80 -12
- package/dist/mcp/tools/bulk-tools.js.map +1 -1
- package/dist/mcp/tools/edge-tools.d.ts.map +1 -1
- package/dist/mcp/tools/edge-tools.js +14 -18
- package/dist/mcp/tools/edge-tools.js.map +1 -1
- package/dist/mcp/tools/error-helpers.d.ts +16 -0
- package/dist/mcp/tools/error-helpers.d.ts.map +1 -0
- package/dist/mcp/tools/error-helpers.js +34 -0
- package/dist/mcp/tools/error-helpers.js.map +1 -0
- package/dist/mcp/tools/intelligence-tools.d.ts.map +1 -1
- package/dist/mcp/tools/intelligence-tools.js +28 -18
- package/dist/mcp/tools/intelligence-tools.js.map +1 -1
- package/dist/mcp/tools/node-tools.d.ts.map +1 -1
- package/dist/mcp/tools/node-tools.js +43 -40
- package/dist/mcp/tools/node-tools.js.map +1 -1
- package/dist/mcp/tools/ontology-tools.d.ts.map +1 -1
- package/dist/mcp/tools/ontology-tools.js +237 -12
- package/dist/mcp/tools/ontology-tools.js.map +1 -1
- package/dist/mcp/tools/remote-tools.d.ts +5 -0
- package/dist/mcp/tools/remote-tools.d.ts.map +1 -0
- package/dist/mcp/tools/remote-tools.js +295 -0
- package/dist/mcp/tools/remote-tools.js.map +1 -0
- package/dist/storage/backpack-app-backend.d.ts +1 -1
- package/dist/storage/backpack-app-backend.d.ts.map +1 -1
- package/dist/storage/backpack-app-backend.js +3 -1
- package/dist/storage/backpack-app-backend.js.map +1 -1
- package/dist/storage/event-sourced-backend.d.ts +174 -0
- package/dist/storage/event-sourced-backend.d.ts.map +1 -0
- package/dist/storage/event-sourced-backend.js +840 -0
- package/dist/storage/event-sourced-backend.js.map +1 -0
- package/dist/storage/json-file-backend.d.ts +1 -72
- package/dist/storage/json-file-backend.d.ts.map +1 -1
- package/dist/storage/json-file-backend.js +11 -549
- package/dist/storage/json-file-backend.js.map +1 -1
- package/package.json +3 -3
- package/hooks/auto-capture-prompt.md +0 -40
- package/hooks/hooks.json +0 -16
- package/hooks/suggest-viewer.sh +0 -4
package/dist/core/backpack.js
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
import { Graph } from "./graph.js";
|
|
2
|
+
import { estimateGraphTokens } from "./token-estimate.js";
|
|
3
|
+
import { auditRoles } from "./role-audit.js";
|
|
4
|
+
import { validateProposal, } from "./draft.js";
|
|
5
|
+
import { planNormalization, planSummary, } from "./normalize.js";
|
|
2
6
|
/**
|
|
3
7
|
* The main Backpack API. Composes a StorageBackend with the Graph engine.
|
|
4
8
|
*
|
|
@@ -13,6 +17,8 @@ import { Graph } from "./graph.js";
|
|
|
13
17
|
export class Backpack {
|
|
14
18
|
storage;
|
|
15
19
|
graphs = new Map();
|
|
20
|
+
versions = new Map();
|
|
21
|
+
tokenCache = new Map();
|
|
16
22
|
constructor(storage) {
|
|
17
23
|
this.storage = storage;
|
|
18
24
|
}
|
|
@@ -26,16 +32,74 @@ export class Backpack {
|
|
|
26
32
|
const data = await this.storage.loadOntology(ontologyName);
|
|
27
33
|
graph = new Graph(data);
|
|
28
34
|
this.graphs.set(ontologyName, graph);
|
|
35
|
+
// Record the version we loaded so persist() can pass it as
|
|
36
|
+
// expectedVersion for optimistic concurrency. Backends that don't
|
|
37
|
+
// support versioning return undefined (no check happens).
|
|
38
|
+
const version = await this.getVersionIfSupported(ontologyName);
|
|
39
|
+
if (version !== undefined)
|
|
40
|
+
this.versions.set(ontologyName, version);
|
|
29
41
|
}
|
|
30
42
|
return graph;
|
|
31
43
|
}
|
|
32
|
-
|
|
44
|
+
async getVersionIfSupported(name) {
|
|
45
|
+
if ("getCurrentVersion" in this.storage &&
|
|
46
|
+
typeof this.storage.getCurrentVersion === "function") {
|
|
47
|
+
try {
|
|
48
|
+
return await this.storage.getCurrentVersion(name);
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return undefined;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Save the current state of an ontology back to storage. Passes the
|
|
58
|
+
* version recorded at load time so the storage backend can detect
|
|
59
|
+
* concurrent modifications and reject the write. On conflict, the
|
|
60
|
+
* cache is invalidated and the underlying ConcurrencyError propagates.
|
|
61
|
+
*/
|
|
33
62
|
async persist(ontologyName) {
|
|
34
63
|
const graph = this.graphs.get(ontologyName);
|
|
35
|
-
if (graph)
|
|
36
|
-
|
|
64
|
+
if (!graph)
|
|
65
|
+
return;
|
|
66
|
+
this.tokenCache.delete(ontologyName);
|
|
67
|
+
const expectedVersion = this.versions.get(ontologyName);
|
|
68
|
+
try {
|
|
69
|
+
await this.storage.saveOntology(ontologyName, graph.data, expectedVersion);
|
|
70
|
+
}
|
|
71
|
+
catch (err) {
|
|
72
|
+
if (err.name === "ConcurrencyError") {
|
|
73
|
+
// Drop the stale cache so the next read pulls fresh state
|
|
74
|
+
this.graphs.delete(ontologyName);
|
|
75
|
+
this.versions.delete(ontologyName);
|
|
76
|
+
}
|
|
77
|
+
throw err;
|
|
78
|
+
}
|
|
79
|
+
// Refresh the version after a successful write. If the refresh
|
|
80
|
+
// fails (transient storage error), drop the cached version so the
|
|
81
|
+
// next persist skips the optimistic check rather than tripping a
|
|
82
|
+
// false ConcurrencyError on a stale value.
|
|
83
|
+
const newVersion = await this.getVersionIfSupported(ontologyName);
|
|
84
|
+
if (newVersion !== undefined) {
|
|
85
|
+
this.versions.set(ontologyName, newVersion);
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
this.versions.delete(ontologyName);
|
|
37
89
|
}
|
|
38
90
|
}
|
|
91
|
+
// --- Lock heartbeat (collaboration awareness) ---
|
|
92
|
+
/**
|
|
93
|
+
* Read the current lock heartbeat for a graph, if the storage backend
|
|
94
|
+
* supports it. Returns null when no fresh lock is held.
|
|
95
|
+
*/
|
|
96
|
+
async getLockInfo(name) {
|
|
97
|
+
if ("readLock" in this.storage &&
|
|
98
|
+
typeof this.storage.readLock === "function") {
|
|
99
|
+
return this.storage.readLock(name);
|
|
100
|
+
}
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
39
103
|
// --- Term Registry ---
|
|
40
104
|
async getTermsContext(ontologyName) {
|
|
41
105
|
if ("loadTerms" in this.storage && typeof this.storage.loadTerms === "function") {
|
|
@@ -47,6 +111,12 @@ export class Backpack {
|
|
|
47
111
|
async listOntologies() {
|
|
48
112
|
return this.storage.listOntologies();
|
|
49
113
|
}
|
|
114
|
+
async ontologyExists(name) {
|
|
115
|
+
return this.storage.ontologyExists(name);
|
|
116
|
+
}
|
|
117
|
+
async loadOntology(name) {
|
|
118
|
+
return this.storage.loadOntology(name);
|
|
119
|
+
}
|
|
50
120
|
async createOntology(name, description) {
|
|
51
121
|
const data = await this.storage.createOntology(name, description);
|
|
52
122
|
// Pre-cache the new (empty) graph
|
|
@@ -56,6 +126,61 @@ export class Backpack {
|
|
|
56
126
|
async deleteOntology(name) {
|
|
57
127
|
await this.storage.deleteOntology(name);
|
|
58
128
|
this.graphs.delete(name);
|
|
129
|
+
this.tokenCache.delete(name);
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Create a new ontology from a full LearningGraphData payload, preserving
|
|
133
|
+
* node and edge IDs. Used by remote graph import (where we want the local
|
|
134
|
+
* copy to have the same IDs as the source) and any other situation where
|
|
135
|
+
* a complete graph is constructed externally.
|
|
136
|
+
*
|
|
137
|
+
* Throws if an ontology with this name already exists.
|
|
138
|
+
*/
|
|
139
|
+
async createOntologyFromData(name, data) {
|
|
140
|
+
if (await this.storage.ontologyExists(name)) {
|
|
141
|
+
throw new Error(`Learning graph "${name}" already exists`);
|
|
142
|
+
}
|
|
143
|
+
// Two-step: create the empty ontology first (so storage has metadata),
|
|
144
|
+
// then save the full payload (which diffs against empty and emits adds).
|
|
145
|
+
const description = data.metadata.description ?? "";
|
|
146
|
+
await this.storage.createOntology(name, description);
|
|
147
|
+
const now = new Date().toISOString();
|
|
148
|
+
const cleaned = {
|
|
149
|
+
metadata: {
|
|
150
|
+
name,
|
|
151
|
+
description,
|
|
152
|
+
createdAt: data.metadata.createdAt || now,
|
|
153
|
+
updatedAt: now,
|
|
154
|
+
},
|
|
155
|
+
nodes: data.nodes,
|
|
156
|
+
edges: data.edges,
|
|
157
|
+
};
|
|
158
|
+
await this.storage.saveOntology(name, cleaned);
|
|
159
|
+
this.graphs.set(name, new Graph(cleaned));
|
|
160
|
+
this.tokenCache.delete(name);
|
|
161
|
+
}
|
|
162
|
+
async extractSubgraph(sourceName, nodeIds, newName, description) {
|
|
163
|
+
const graph = await this.getGraph(sourceName);
|
|
164
|
+
const idSet = new Set(nodeIds);
|
|
165
|
+
const nodes = graph.data.nodes.filter((n) => idSet.has(n.id));
|
|
166
|
+
const edges = graph.data.edges.filter((e) => idSet.has(e.sourceId) && idSet.has(e.targetId));
|
|
167
|
+
// The filtered arrays already contain references owned by the source
|
|
168
|
+
// graph; createOntologyFromData persists via the storage layer which
|
|
169
|
+
// serializes through JSON, giving the new graph independent copies.
|
|
170
|
+
// No manual deep clone needed.
|
|
171
|
+
const now = new Date().toISOString();
|
|
172
|
+
const newData = {
|
|
173
|
+
metadata: {
|
|
174
|
+
name: newName,
|
|
175
|
+
description: description || `Extracted from ${sourceName}`,
|
|
176
|
+
createdAt: now,
|
|
177
|
+
updatedAt: now,
|
|
178
|
+
},
|
|
179
|
+
nodes,
|
|
180
|
+
edges,
|
|
181
|
+
};
|
|
182
|
+
await this.createOntologyFromData(newName, newData);
|
|
183
|
+
return { nodeCount: nodes.length, edgeCount: edges.length };
|
|
59
184
|
}
|
|
60
185
|
async renameOntology(oldName, newName) {
|
|
61
186
|
await this.storage.renameOntology(oldName, newName);
|
|
@@ -63,6 +188,7 @@ export class Backpack {
|
|
|
63
188
|
if (graph) {
|
|
64
189
|
graph.data.metadata.name = newName;
|
|
65
190
|
this.graphs.delete(oldName);
|
|
191
|
+
this.tokenCache.delete(oldName);
|
|
66
192
|
this.graphs.set(newName, graph);
|
|
67
193
|
}
|
|
68
194
|
}
|
|
@@ -140,10 +266,84 @@ export class Backpack {
|
|
|
140
266
|
edgeIds: result.edgeIds,
|
|
141
267
|
};
|
|
142
268
|
}
|
|
269
|
+
/**
|
|
270
|
+
* Validate a proposed batch of nodes and edges against the current
|
|
271
|
+
* graph state. Returns warnings (non-fatal — type drift, duplicates,
|
|
272
|
+
* three-role rule violations) and errors (fatal — broken edges,
|
|
273
|
+
* invalid property shapes).
|
|
274
|
+
*
|
|
275
|
+
* Pure check: does NOT modify the graph. Used by `backpack_import_nodes`
|
|
276
|
+
* for the always-on validation pass and by `dryRun` mode for explicit
|
|
277
|
+
* propose-only invocations.
|
|
278
|
+
*/
|
|
279
|
+
async validateImport(ontologyName, nodes, edges = []) {
|
|
280
|
+
const graph = await this.getGraph(ontologyName);
|
|
281
|
+
return validateProposal(graph.data, nodes, edges);
|
|
282
|
+
}
|
|
283
|
+
async getGraphTokens(name) {
|
|
284
|
+
const cached = this.tokenCache.get(name);
|
|
285
|
+
if (cached !== undefined)
|
|
286
|
+
return cached;
|
|
287
|
+
const graph = await this.getGraph(name);
|
|
288
|
+
const tokens = estimateGraphTokens(graph.data);
|
|
289
|
+
this.tokenCache.set(name, tokens);
|
|
290
|
+
return tokens;
|
|
291
|
+
}
|
|
143
292
|
async auditOntology(name) {
|
|
144
293
|
const graph = await this.getGraph(name);
|
|
145
294
|
return graph.audit();
|
|
146
295
|
}
|
|
296
|
+
/**
|
|
297
|
+
* Plan a normalization pass: detect type drift clusters and pick
|
|
298
|
+
* the dominant variant in each. Returns the plan without applying it.
|
|
299
|
+
*/
|
|
300
|
+
async planNormalization(name) {
|
|
301
|
+
const graph = await this.getGraph(name);
|
|
302
|
+
return planNormalization(graph.data);
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Apply a normalization plan to the graph: rename non-canonical
|
|
306
|
+
* node and edge types to their canonical variants. Uses the existing
|
|
307
|
+
* persist path, which emits retype events under the hood.
|
|
308
|
+
*
|
|
309
|
+
* Returns the plan that was applied plus a summary of counts.
|
|
310
|
+
*/
|
|
311
|
+
async applyNormalization(name) {
|
|
312
|
+
const graph = await this.getGraph(name);
|
|
313
|
+
const plan = planNormalization(graph.data);
|
|
314
|
+
const nodeMap = new Map(plan.nodeTypeRenames.map((r) => [r.from, r.to]));
|
|
315
|
+
const edgeMap = new Map(plan.edgeTypeRenames.map((r) => [r.from, r.to]));
|
|
316
|
+
// Mutate the in-memory graph in place; persist() will diff and
|
|
317
|
+
// emit retype events.
|
|
318
|
+
for (const node of graph.data.nodes) {
|
|
319
|
+
const newType = nodeMap.get(node.type);
|
|
320
|
+
if (newType !== undefined)
|
|
321
|
+
node.type = newType;
|
|
322
|
+
}
|
|
323
|
+
for (const edge of graph.data.edges) {
|
|
324
|
+
const newType = edgeMap.get(edge.type);
|
|
325
|
+
if (newType !== undefined)
|
|
326
|
+
edge.type = newType;
|
|
327
|
+
}
|
|
328
|
+
if (plan.nodeTypeRenames.length > 0 || plan.edgeTypeRenames.length > 0) {
|
|
329
|
+
await this.persist(name);
|
|
330
|
+
}
|
|
331
|
+
return { plan, summary: planSummary(plan) };
|
|
332
|
+
}
|
|
333
|
+
/**
|
|
334
|
+
* Three-role-rule audit. Scans the graph for nodes that look like
|
|
335
|
+
* procedural content (should be a skill) or briefing content (should
|
|
336
|
+
* be in CLAUDE.md). Heuristic-based; conservative on purpose to avoid
|
|
337
|
+
* false positives.
|
|
338
|
+
*/
|
|
339
|
+
async auditRoles(name) {
|
|
340
|
+
const graph = await this.getGraph(name);
|
|
341
|
+
return auditRoles(graph.data.nodes);
|
|
342
|
+
}
|
|
343
|
+
async getDegreeTable(name) {
|
|
344
|
+
const graph = await this.getGraph(name);
|
|
345
|
+
return graph.getDegreeTable();
|
|
346
|
+
}
|
|
147
347
|
async connectEdges(ontologyName, edges) {
|
|
148
348
|
const graph = await this.getGraph(ontologyName);
|
|
149
349
|
const ids = graph.importEdges(edges);
|
|
@@ -166,6 +366,7 @@ export class Backpack {
|
|
|
166
366
|
throw new Error("Branches not supported by storage backend");
|
|
167
367
|
// Invalidate cached graph since we're switching branches
|
|
168
368
|
this.graphs.delete(name);
|
|
369
|
+
this.tokenCache.delete(name);
|
|
169
370
|
await this.storage.switchBranch(name, branchName);
|
|
170
371
|
}
|
|
171
372
|
async deleteBranch(name, branchName) {
|
|
@@ -188,6 +389,7 @@ export class Backpack {
|
|
|
188
389
|
if (!("rollback" in this.storage))
|
|
189
390
|
throw new Error("Snapshots not supported by storage backend");
|
|
190
391
|
this.graphs.delete(name);
|
|
392
|
+
this.tokenCache.delete(name);
|
|
191
393
|
await this.storage.rollback(name, version);
|
|
192
394
|
}
|
|
193
395
|
// --- Snippet operations ---
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backpack.js","sourceRoot":"","sources":["../../src/core/backpack.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"backpack.js","sourceRoot":"","sources":["../../src/core/backpack.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAkBnC,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAwB,MAAM,iBAAiB,CAAC;AACnE,OAAO,EACL,gBAAgB,GAIjB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,iBAAiB,EACjB,WAAW,GAEZ,MAAM,gBAAgB,CAAC;AAExB;;;;;;;;;;GAUG;AACH,MAAM,OAAO,QAAQ;IACX,OAAO,CAAiB;IACxB,MAAM,GAAuB,IAAI,GAAG,EAAE,CAAC;IACvC,QAAQ,GAAwB,IAAI,GAAG,EAAE,CAAC;IAC1C,UAAU,GAAwB,IAAI,GAAG,EAAE,CAAC;IAEpD,YAAY,OAAuB;QACjC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;IAClC,CAAC;IAED,6DAA6D;IACrD,KAAK,CAAC,QAAQ,CAAC,YAAoB;QACzC,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC1C,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;YAC3D,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;YACxB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;YACrC,2DAA2D;YAC3D,kEAAkE;YAClE,0DAA0D;YAC1D,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,CAAC;YAC/D,IAAI,OAAO,KAAK,SAAS;gBAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACtE,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,KAAK,CAAC,qBAAqB,CAAC,IAAY;QAC9C,IACE,mBAAmB,IAAI,IAAI,CAAC,OAAO;YACnC,OAAQ,IAAI,CAAC,OAAe,CAAC,iBAAiB,KAAK,UAAU,EAC7D,CAAC;YACD,IAAI,CAAC;gBACH,OAAO,MAAO,IAAI,CAAC,OAAe,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAC7D,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,SAAS,CAAC;YACnB,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,OAAO,CAAC,YAAoB;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK;YAAE,OAAO;QACnB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACrC,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACxD,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,YAAY,EAAE,KAAK,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;QAC7E,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAK,GAAa,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;gBAC/C,0DAA0D;gBAC1D,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;gBACjC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YACrC,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;QACD,+DAA+D;QAC/D,kEAAkE;QAClE,iEAAiE;QACjE,2CAA2C;QAC3C,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,CAAC;QAClE,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,mDAAmD;IAEnD;;;OAGG;IACH,KAAK,CAAC,WAAW,CAAC,IAAY;QAC5B,IACE,UAAU,IAAI,IAAI,CAAC,OAAO;YAC1B,OAAQ,IAAI,CAAC,OAAe,CAAC,QAAQ,KAAK,UAAU,EACpD,CAAC;YACD,OAAQ,IAAI,CAAC,OAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC9C,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,wBAAwB;IAExB,KAAK,CAAC,eAAe,CAAC,YAAoB;QACxC,IAAI,WAAW,IAAI,IAAI,CAAC,OAAO,IAAI,OAAQ,IAAI,CAAC,OAAe,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC;YACzF,OAAQ,IAAI,CAAC,OAAe,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QACvD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,6BAA6B;IAE7B,KAAK,CAAC,cAAc;QAClB,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,IAAY;QAC/B,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,IAAY;QAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,IAAY,EACZ,WAAmB;QAEnB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAClE,kCAAkC;QAClC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QACvC,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,IAAY;QAC/B,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACzB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,sBAAsB,CAC1B,IAAY,EACZ,IAAuB;QAEvB,IAAI,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,kBAAkB,CAAC,CAAC;QAC7D,CAAC;QACD,uEAAuE;QACvE,yEAAyE;QACzE,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,IAAI,EAAE,CAAC;QACpD,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QACrD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,OAAO,GAAsB;YACjC,QAAQ,EAAE;gBACR,IAAI;gBACJ,WAAW;gBACX,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,IAAI,GAAG;gBACzC,SAAS,EAAE,GAAG;aACf;YACD,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC;QACF,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAC1C,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,UAAkB,EAClB,OAAiB,EACjB,OAAe,EACf,WAAoB;QAEpB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC9C,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;QAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9D,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CACnC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CACtD,CAAC;QACF,qEAAqE;QACrE,qEAAqE;QACrE,oEAAoE;QACpE,+BAA+B;QAC/B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,OAAO,GAAsB;YACjC,QAAQ,EAAE;gBACR,IAAI,EAAE,OAAO;gBACb,WAAW,EAAE,WAAW,IAAI,kBAAkB,UAAU,EAAE;gBAC1D,SAAS,EAAE,GAAG;gBACd,SAAS,EAAE,GAAG;aACf;YACD,KAAK;YACL,KAAK;SACN,CAAC;QACF,MAAM,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACpD,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,OAAe,EAAE,OAAe;QACnD,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACpD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACvC,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,OAAO,CAAC;YACnC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC5B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAChC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,IAAY;QAQjC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACxC,OAAO;YACL,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ;YAC7B,SAAS,EAAE,KAAK,CAAC,YAAY,EAAE;YAC/B,SAAS,EAAE,KAAK,CAAC,YAAY,EAAE;YAC/B,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM;YAClC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM;YAClC,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE;SACxB,CAAC;IACJ,CAAC;IAED,0BAA0B;IAE1B,KAAK,CAAC,SAAS,CACb,YAAoB,EACpB,IAAa,EACb,KAAc,EACd,MAAe;QAEf,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QAChD,OAAO,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,YAAoB;QACrC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QAChD,OAAO,KAAK,CAAC,YAAY,EAAE,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,WAAW,CACf,YAAoB,EACpB,KAAa,EACb,IAAa;QAEb,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QAChD,OAAO,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,YAAoB,EAAE,MAAc;QAChD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QAChD,OAAO,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,OAAO,CACX,YAAoB,EACpB,IAAY,EACZ,UAAmC;QAEnC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QAChD,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAC7C,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,UAAU,CACd,YAAoB,EACpB,MAAc,EACd,UAAmC;QAEnC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QAChD,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAClD,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,UAAU,CACd,YAAoB,EACpB,MAAc;QAEd,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QAChD,MAAM,YAAY,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAC9C,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACjC,OAAO,EAAE,YAAY,EAAE,CAAC;IAC1B,CAAC;IAED,0BAA0B;IAE1B,KAAK,CAAC,OAAO,CACX,YAAoB,EACpB,IAAY,EACZ,QAAgB,EAChB,QAAgB,EAChB,aAAsC,EAAE;QAExC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QAChD,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;QACjE,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,YAAoB,EAAE,MAAc;QACnD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QAChD,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACzB,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,YAAY,CAChB,YAAoB,EACpB,MAAc,EACd,QAAiB,EACjB,SAA4C,EAC5C,KAAc;QAEd,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QAChD,OAAO,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IAChE,CAAC;IAED,0BAA0B;IAE1B,KAAK,CAAC,WAAW,CACf,YAAoB,EACpB,KAAmE,EACnE,KAKE;QAEF,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,KAAK,CAAC,mBAAmB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACvD,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACjC,OAAO;YACL,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM;YAC5B,GAAG,EAAE,MAAM,CAAC,OAAO;YACnB,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM;YAChC,OAAO,EAAE,MAAM,CAAC,OAAO;SACxB,CAAC;IACJ,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,cAAc,CAClB,YAAoB,EACpB,KAAqB,EACrB,QAAwB,EAAE;QAE1B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QAChD,OAAO,gBAAgB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,IAAY;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,MAAM,CAAC;QACxC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAClC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,IAAY;QAC9B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACxC,OAAO,KAAK,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,iBAAiB,CAAC,IAAY;QAClC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACxC,OAAO,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,kBAAkB,CAAC,IAAY;QAInC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAE3C,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACzE,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAEzE,+DAA+D;QAC/D,sBAAsB;QACtB,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACpC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvC,IAAI,OAAO,KAAK,SAAS;gBAAE,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;QACjD,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACpC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvC,IAAI,OAAO,KAAK,SAAS;gBAAE,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;QACjD,CAAC;QAED,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvE,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;QAED,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;IAC9C,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,UAAU,CAAC,IAAY;QAC3B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACxC,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,IAAY;QAC/B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACxC,OAAO,KAAK,CAAC,cAAc,EAAE,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,YAAY,CAChB,YAAoB,EACpB,KAAwG;QAExG,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QAChD,MAAM,GAAG,GAAG,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACrC,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACjC,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC;IACpC,CAAC;IAED,4BAA4B;IAE5B,KAAK,CAAC,YAAY,CAAC,IAAY;QAC7B,IAAI,CAAC,CAAC,cAAc,IAAI,IAAI,CAAC,OAAO,CAAC;YAAE,OAAO,EAAE,CAAC;QACjD,OAAQ,IAAI,CAAC,OAAe,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,IAAY,EAAE,UAAkB,EAAE,UAAmB;QACtE,IAAI,CAAC,CAAC,cAAc,IAAI,IAAI,CAAC,OAAO,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QACpG,MAAO,IAAI,CAAC,OAAe,CAAC,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IACzE,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,IAAY,EAAE,UAAkB;QACjD,IAAI,CAAC,CAAC,cAAc,IAAI,IAAI,CAAC,OAAO,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QACpG,yDAAyD;QACzD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACzB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC7B,MAAO,IAAI,CAAC,OAAe,CAAC,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,IAAY,EAAE,UAAkB;QACjD,IAAI,CAAC,CAAC,cAAc,IAAI,IAAI,CAAC,OAAO,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QACpG,MAAO,IAAI,CAAC,OAAe,CAAC,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC7D,CAAC;IAED,8BAA8B;IAE9B,KAAK,CAAC,cAAc,CAAC,IAAY,EAAE,KAAc;QAC/C,IAAI,CAAC,CAAC,gBAAgB,IAAI,IAAI,CAAC,OAAO,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QACvG,OAAQ,IAAI,CAAC,OAAe,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC3D,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,IAAY;QAC9B,IAAI,CAAC,CAAC,eAAe,IAAI,IAAI,CAAC,OAAO,CAAC;YAAE,OAAO,EAAE,CAAC;QAClD,OAAQ,IAAI,CAAC,OAAe,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,IAAY,EAAE,OAAe;QAC1C,IAAI,CAAC,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QACjG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACzB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC7B,MAAO,IAAI,CAAC,OAAe,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC;IAED,6BAA6B;IAE7B,KAAK,CAAC,WAAW,CAAC,IAAY,EAAE,OAK/B;QACC,IAAI,CAAC,CAAC,aAAa,IAAI,IAAI,CAAC,OAAO,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QACnG,OAAQ,IAAI,CAAC,OAAe,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC1D,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,IAAY;QAC7B,IAAI,CAAC,CAAC,cAAc,IAAI,IAAI,CAAC,OAAO,CAAC;YAAE,OAAO,EAAE,CAAC;QACjD,OAAQ,IAAI,CAAC,OAAe,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,IAAY,EAAE,SAAiB;QAC/C,IAAI,CAAC,CAAC,aAAa,IAAI,IAAI,CAAC,OAAO,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QACnG,OAAQ,IAAI,CAAC,OAAe,CAAC,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,IAAY,EAAE,SAAiB;QACjD,IAAI,CAAC,CAAC,eAAe,IAAI,IAAI,CAAC,OAAO,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QACrG,MAAO,IAAI,CAAC,OAAe,CAAC,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,IAAY,EAAE,OAAe;QAClD,IAAI,CAAC,CAAC,cAAc,IAAI,IAAI,CAAC,OAAO,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QACrG,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACtD,MAAM,QAAQ,GAAG,MAAO,IAAI,CAAC,OAAe,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAEzE,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/D,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACtE,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/D,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAEtE,OAAO;YACL,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAC5G,YAAY,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACxH,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAC5G,YAAY,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACxH,gBAAgB,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM;YACtC,iBAAiB,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM;YACxC,gBAAgB,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM;YACtC,iBAAiB,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM;SACzC,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { LearningGraphData } from "./types.js";
|
|
2
|
+
export interface ProposedNode {
|
|
3
|
+
type: string;
|
|
4
|
+
properties: Record<string, unknown>;
|
|
5
|
+
}
|
|
6
|
+
export interface ProposedEdge {
|
|
7
|
+
type: string;
|
|
8
|
+
source: number | string;
|
|
9
|
+
target: number | string;
|
|
10
|
+
properties?: Record<string, unknown>;
|
|
11
|
+
}
|
|
12
|
+
export type DraftWarningKind = "type_drift" | "duplicate_node" | "role_violation_procedural" | "role_violation_briefing";
|
|
13
|
+
export interface DraftWarning {
|
|
14
|
+
kind: DraftWarningKind;
|
|
15
|
+
/** Index into the proposed nodes array, when the warning is about a node */
|
|
16
|
+
nodeIndex?: number;
|
|
17
|
+
/** Index into the proposed edges array, when the warning is about an edge */
|
|
18
|
+
edgeIndex?: number;
|
|
19
|
+
message: string;
|
|
20
|
+
suggestion: string;
|
|
21
|
+
}
|
|
22
|
+
export type DraftErrorKind = "invalid_edge_source" | "invalid_edge_target" | "invalid_property_shape" | "self_loop_in_proposal";
|
|
23
|
+
export interface DraftError {
|
|
24
|
+
kind: DraftErrorKind;
|
|
25
|
+
nodeIndex?: number;
|
|
26
|
+
edgeIndex?: number;
|
|
27
|
+
message: string;
|
|
28
|
+
}
|
|
29
|
+
export interface DraftResult {
|
|
30
|
+
/** True iff there are no errors. Warnings do not affect this flag. */
|
|
31
|
+
ok: boolean;
|
|
32
|
+
/** Number of nodes that would be added. */
|
|
33
|
+
newNodeCount: number;
|
|
34
|
+
/** Number of edges that would be added. */
|
|
35
|
+
newEdgeCount: number;
|
|
36
|
+
/** Non-fatal observations the agent should review. */
|
|
37
|
+
warnings: DraftWarning[];
|
|
38
|
+
/** Fatal issues that block the commit. */
|
|
39
|
+
errors: DraftError[];
|
|
40
|
+
}
|
|
41
|
+
export declare function validateProposal(graph: LearningGraphData, proposedNodes: ProposedNode[], proposedEdges?: ProposedEdge[]): DraftResult;
|
|
42
|
+
//# sourceMappingURL=draft.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"draft.d.ts","sourceRoot":"","sources":["../../src/core/draft.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,iBAAiB,EAAQ,MAAM,YAAY,CAAC;AAK1D,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED,MAAM,MAAM,gBAAgB,GACxB,YAAY,GACZ,gBAAgB,GAChB,2BAA2B,GAC3B,yBAAyB,CAAC;AAE9B,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,gBAAgB,CAAC;IACvB,4EAA4E;IAC5E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6EAA6E;IAC7E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,cAAc,GACtB,qBAAqB,GACrB,qBAAqB,GACrB,wBAAwB,GACxB,uBAAuB,CAAC;AAE5B,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,cAAc,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,sEAAsE;IACtE,EAAE,EAAE,OAAO,CAAC;IACZ,2CAA2C;IAC3C,YAAY,EAAE,MAAM,CAAC;IACrB,2CAA2C;IAC3C,YAAY,EAAE,MAAM,CAAC;IACrB,sDAAsD;IACtD,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,0CAA0C;IAC1C,MAAM,EAAE,UAAU,EAAE,CAAC;CACtB;AAmFD,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,iBAAiB,EACxB,aAAa,EAAE,YAAY,EAAE,EAC7B,aAAa,GAAE,YAAY,EAAO,GACjC,WAAW,CA2Kb"}
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
// ============================================================
|
|
2
|
+
// Draft validation for batched imports.
|
|
3
|
+
//
|
|
4
|
+
// Before an import_nodes call writes events, we validate the batch
|
|
5
|
+
// against the current graph state and surface warnings (non-fatal,
|
|
6
|
+
// would still commit) and errors (fatal, blocks commit).
|
|
7
|
+
//
|
|
8
|
+
// The intent: catch dupes, type drift, role-rule violations, and
|
|
9
|
+
// broken edge endpoints BEFORE they pollute the graph. The agent
|
|
10
|
+
// can review the result and decide to fix or proceed.
|
|
11
|
+
//
|
|
12
|
+
// This module is pure: takes the existing graph + proposed batch,
|
|
13
|
+
// returns a validation result. No IO.
|
|
14
|
+
// ============================================================
|
|
15
|
+
import { auditRoles } from "./role-audit.js";
|
|
16
|
+
// --- Helpers ---
|
|
17
|
+
function firstStringValue(properties) {
|
|
18
|
+
for (const value of Object.values(properties)) {
|
|
19
|
+
if (typeof value === "string" && value.length > 0)
|
|
20
|
+
return value;
|
|
21
|
+
}
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
function normalizeType(type) {
|
|
25
|
+
return type.toLowerCase().replace(/[\s_-]/g, "");
|
|
26
|
+
}
|
|
27
|
+
function isPlainPrimitive(v) {
|
|
28
|
+
return (v === null ||
|
|
29
|
+
typeof v === "string" ||
|
|
30
|
+
typeof v === "number" ||
|
|
31
|
+
typeof v === "boolean");
|
|
32
|
+
}
|
|
33
|
+
function isAcceptableProperty(v) {
|
|
34
|
+
if (isPlainPrimitive(v))
|
|
35
|
+
return true;
|
|
36
|
+
if (Array.isArray(v)) {
|
|
37
|
+
return v.every((item) => isPlainPrimitive(item));
|
|
38
|
+
}
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
// --- Type drift detection ---
|
|
42
|
+
/**
|
|
43
|
+
* Detect when a proposed node's type is a near-miss of an existing
|
|
44
|
+
* type in the graph. Returns the existing canonical type to prefer.
|
|
45
|
+
*
|
|
46
|
+
* Examples that should match (proposed → canonical):
|
|
47
|
+
* "service" → "Service"
|
|
48
|
+
* "Microservice" → "Service" (only if exact normalize matches)
|
|
49
|
+
* "Person_Node" → "PersonNode"
|
|
50
|
+
*
|
|
51
|
+
* Conservative: only flag exact-after-normalization matches. Avoids
|
|
52
|
+
* surprising the user with aggressive substring matching.
|
|
53
|
+
*/
|
|
54
|
+
function detectTypeDrift(proposedType, existingTypes) {
|
|
55
|
+
if (existingTypes.has(proposedType))
|
|
56
|
+
return null;
|
|
57
|
+
const normalized = normalizeType(proposedType);
|
|
58
|
+
for (const existing of existingTypes) {
|
|
59
|
+
if (normalizeType(existing) === normalized) {
|
|
60
|
+
return existing;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
function indexExistingNodes(nodes) {
|
|
66
|
+
const idx = new Map();
|
|
67
|
+
for (const n of nodes) {
|
|
68
|
+
const label = firstStringValue(n.properties);
|
|
69
|
+
if (label === null)
|
|
70
|
+
continue;
|
|
71
|
+
const key = `${normalizeType(n.type)}::${label.toLowerCase()}`;
|
|
72
|
+
if (!idx.has(key)) {
|
|
73
|
+
idx.set(key, { type: n.type, label, id: n.id });
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return idx;
|
|
77
|
+
}
|
|
78
|
+
// --- Main entry ---
|
|
79
|
+
export function validateProposal(graph, proposedNodes, proposedEdges = []) {
|
|
80
|
+
const warnings = [];
|
|
81
|
+
const errors = [];
|
|
82
|
+
const existingTypes = new Set(graph.nodes.map((n) => n.type));
|
|
83
|
+
const existingIds = new Set(graph.nodes.map((n) => n.id));
|
|
84
|
+
const existingByLabel = indexExistingNodes(graph.nodes);
|
|
85
|
+
// --- Validate nodes ---
|
|
86
|
+
for (let i = 0; i < proposedNodes.length; i++) {
|
|
87
|
+
const node = proposedNodes[i];
|
|
88
|
+
// Property shape check
|
|
89
|
+
for (const [key, value] of Object.entries(node.properties)) {
|
|
90
|
+
if (!isAcceptableProperty(value)) {
|
|
91
|
+
errors.push({
|
|
92
|
+
kind: "invalid_property_shape",
|
|
93
|
+
nodeIndex: i,
|
|
94
|
+
message: `node[${i}].properties.${key}: must be string, number, boolean, null, or array of those (got ${typeof value})`,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
// Type drift
|
|
99
|
+
const drift = detectTypeDrift(node.type, existingTypes);
|
|
100
|
+
if (drift) {
|
|
101
|
+
warnings.push({
|
|
102
|
+
kind: "type_drift",
|
|
103
|
+
nodeIndex: i,
|
|
104
|
+
message: `node[${i}] uses type "${node.type}" which is similar to existing type "${drift}"`,
|
|
105
|
+
suggestion: `Use "${drift}" instead to keep the graph consistent.`,
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
// Duplicate detection
|
|
109
|
+
const label = firstStringValue(node.properties);
|
|
110
|
+
if (label !== null) {
|
|
111
|
+
const key = `${normalizeType(node.type)}::${label.toLowerCase()}`;
|
|
112
|
+
const existing = existingByLabel.get(key);
|
|
113
|
+
if (existing) {
|
|
114
|
+
warnings.push({
|
|
115
|
+
kind: "duplicate_node",
|
|
116
|
+
nodeIndex: i,
|
|
117
|
+
message: `node[${i}] (type=${node.type}, label="${label}") matches existing node ${existing.id}`,
|
|
118
|
+
suggestion: `Use backpack_update_node on ${existing.id} instead, or skip this node.`,
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// --- Three-role rule check ---
|
|
124
|
+
//
|
|
125
|
+
// Reuse the existing auditor by constructing fake Node objects from
|
|
126
|
+
// the proposals. We don't have IDs yet but the auditor only cares
|
|
127
|
+
// about type and properties.
|
|
128
|
+
const fakeNodes = proposedNodes.map((p, i) => ({
|
|
129
|
+
id: `proposed-${i}`,
|
|
130
|
+
type: p.type,
|
|
131
|
+
properties: p.properties,
|
|
132
|
+
createdAt: "",
|
|
133
|
+
updatedAt: "",
|
|
134
|
+
}));
|
|
135
|
+
const roleAudit = auditRoles(fakeNodes);
|
|
136
|
+
for (const candidate of roleAudit.proceduralCandidates) {
|
|
137
|
+
const idx = parseInt(candidate.nodeId.replace("proposed-", ""), 10);
|
|
138
|
+
warnings.push({
|
|
139
|
+
kind: "role_violation_procedural",
|
|
140
|
+
nodeIndex: idx,
|
|
141
|
+
message: `node[${idx}] looks procedural: ${candidate.reason}`,
|
|
142
|
+
suggestion: candidate.suggestion,
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
for (const candidate of roleAudit.briefingCandidates) {
|
|
146
|
+
const idx = parseInt(candidate.nodeId.replace("proposed-", ""), 10);
|
|
147
|
+
warnings.push({
|
|
148
|
+
kind: "role_violation_briefing",
|
|
149
|
+
nodeIndex: idx,
|
|
150
|
+
message: `node[${idx}] looks briefing-like: ${candidate.reason}`,
|
|
151
|
+
suggestion: candidate.suggestion,
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
// --- Validate edges ---
|
|
155
|
+
for (let i = 0; i < proposedEdges.length; i++) {
|
|
156
|
+
const edge = proposedEdges[i];
|
|
157
|
+
// Source resolution
|
|
158
|
+
let sourceValid = false;
|
|
159
|
+
let sourceCanonical = edge.source;
|
|
160
|
+
if (typeof edge.source === "number") {
|
|
161
|
+
if (Number.isInteger(edge.source) &&
|
|
162
|
+
edge.source >= 0 &&
|
|
163
|
+
edge.source < proposedNodes.length) {
|
|
164
|
+
sourceValid = true;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
else if (typeof edge.source === "string") {
|
|
168
|
+
if (existingIds.has(edge.source)) {
|
|
169
|
+
sourceValid = true;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
if (!sourceValid) {
|
|
173
|
+
errors.push({
|
|
174
|
+
kind: "invalid_edge_source",
|
|
175
|
+
edgeIndex: i,
|
|
176
|
+
message: `edge[${i}].source ${JSON.stringify(edge.source)} is neither a valid index into the proposed nodes nor an existing node ID`,
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
// Target resolution
|
|
180
|
+
let targetValid = false;
|
|
181
|
+
let targetCanonical = edge.target;
|
|
182
|
+
if (typeof edge.target === "number") {
|
|
183
|
+
if (Number.isInteger(edge.target) &&
|
|
184
|
+
edge.target >= 0 &&
|
|
185
|
+
edge.target < proposedNodes.length) {
|
|
186
|
+
targetValid = true;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
else if (typeof edge.target === "string") {
|
|
190
|
+
if (existingIds.has(edge.target)) {
|
|
191
|
+
targetValid = true;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
if (!targetValid) {
|
|
195
|
+
errors.push({
|
|
196
|
+
kind: "invalid_edge_target",
|
|
197
|
+
edgeIndex: i,
|
|
198
|
+
message: `edge[${i}].target ${JSON.stringify(edge.target)} is neither a valid index into the proposed nodes nor an existing node ID`,
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
// Self-loop check
|
|
202
|
+
if (sourceValid &&
|
|
203
|
+
targetValid &&
|
|
204
|
+
JSON.stringify(sourceCanonical) === JSON.stringify(targetCanonical)) {
|
|
205
|
+
errors.push({
|
|
206
|
+
kind: "self_loop_in_proposal",
|
|
207
|
+
edgeIndex: i,
|
|
208
|
+
message: `edge[${i}] is a self-loop (source === target)`,
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
// Edge property shape check
|
|
212
|
+
if (edge.properties) {
|
|
213
|
+
for (const [key, value] of Object.entries(edge.properties)) {
|
|
214
|
+
if (!isAcceptableProperty(value)) {
|
|
215
|
+
errors.push({
|
|
216
|
+
kind: "invalid_property_shape",
|
|
217
|
+
edgeIndex: i,
|
|
218
|
+
message: `edge[${i}].properties.${key}: must be primitive or array of primitives (got ${typeof value})`,
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
return {
|
|
225
|
+
ok: errors.length === 0,
|
|
226
|
+
newNodeCount: proposedNodes.length,
|
|
227
|
+
newEdgeCount: proposedEdges.length,
|
|
228
|
+
warnings,
|
|
229
|
+
errors,
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
//# sourceMappingURL=draft.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"draft.js","sourceRoot":"","sources":["../../src/core/draft.ts"],"names":[],"mappings":"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"}
|