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.
Files changed (105) hide show
  1. package/README.md +153 -3
  2. package/dist/bin/backpack-benchmark.d.ts +3 -0
  3. package/dist/bin/backpack-benchmark.d.ts.map +1 -0
  4. package/dist/bin/backpack-benchmark.js +213 -0
  5. package/dist/bin/backpack-benchmark.js.map +1 -0
  6. package/dist/bin/backpack.js +3 -3
  7. package/dist/bin/backpack.js.map +1 -1
  8. package/dist/bin/init.js +8 -11
  9. package/dist/bin/init.js.map +1 -1
  10. package/dist/core/backpack.d.ts +69 -2
  11. package/dist/core/backpack.d.ts.map +1 -1
  12. package/dist/core/backpack.js +205 -3
  13. package/dist/core/backpack.js.map +1 -1
  14. package/dist/core/draft.d.ts +42 -0
  15. package/dist/core/draft.d.ts.map +1 -0
  16. package/dist/core/draft.js +232 -0
  17. package/dist/core/draft.js.map +1 -0
  18. package/dist/core/events.d.ts +114 -0
  19. package/dist/core/events.d.ts.map +1 -0
  20. package/dist/core/events.js +375 -0
  21. package/dist/core/events.js.map +1 -0
  22. package/dist/core/graph.d.ts +3 -1
  23. package/dist/core/graph.d.ts.map +1 -1
  24. package/dist/core/graph.js +50 -0
  25. package/dist/core/graph.js.map +1 -1
  26. package/dist/core/hooks.d.ts +11 -3
  27. package/dist/core/hooks.d.ts.map +1 -1
  28. package/dist/core/hooks.js +53 -47
  29. package/dist/core/hooks.js.map +1 -1
  30. package/dist/core/normalize.d.ts +28 -0
  31. package/dist/core/normalize.d.ts.map +1 -0
  32. package/dist/core/normalize.js +133 -0
  33. package/dist/core/normalize.js.map +1 -0
  34. package/dist/core/remote-fetch.d.ts +50 -0
  35. package/dist/core/remote-fetch.d.ts.map +1 -0
  36. package/dist/core/remote-fetch.js +338 -0
  37. package/dist/core/remote-fetch.js.map +1 -0
  38. package/dist/core/remote-registry.d.ts +95 -0
  39. package/dist/core/remote-registry.d.ts.map +1 -0
  40. package/dist/core/remote-registry.js +296 -0
  41. package/dist/core/remote-registry.js.map +1 -0
  42. package/dist/core/remote-schema.d.ts +31 -0
  43. package/dist/core/remote-schema.d.ts.map +1 -0
  44. package/dist/core/remote-schema.js +252 -0
  45. package/dist/core/remote-schema.js.map +1 -0
  46. package/dist/core/role-audit.d.ts +20 -0
  47. package/dist/core/role-audit.d.ts.map +1 -0
  48. package/dist/core/role-audit.js +197 -0
  49. package/dist/core/role-audit.js.map +1 -0
  50. package/dist/core/telemetry.d.ts +2 -0
  51. package/dist/core/telemetry.d.ts.map +1 -1
  52. package/dist/core/telemetry.js +16 -0
  53. package/dist/core/telemetry.js.map +1 -1
  54. package/dist/core/token-estimate.d.ts +16 -0
  55. package/dist/core/token-estimate.d.ts.map +1 -0
  56. package/dist/core/token-estimate.js +29 -0
  57. package/dist/core/token-estimate.js.map +1 -0
  58. package/dist/core/types.d.ts +30 -1
  59. package/dist/core/types.d.ts.map +1 -1
  60. package/dist/index.d.ts +9 -1
  61. package/dist/index.d.ts.map +1 -1
  62. package/dist/index.js +8 -1
  63. package/dist/index.js.map +1 -1
  64. package/dist/mcp/server.d.ts.map +1 -1
  65. package/dist/mcp/server.js +9 -0
  66. package/dist/mcp/server.js.map +1 -1
  67. package/dist/mcp/tools/bulk-tools.d.ts.map +1 -1
  68. package/dist/mcp/tools/bulk-tools.js +80 -12
  69. package/dist/mcp/tools/bulk-tools.js.map +1 -1
  70. package/dist/mcp/tools/edge-tools.d.ts.map +1 -1
  71. package/dist/mcp/tools/edge-tools.js +14 -18
  72. package/dist/mcp/tools/edge-tools.js.map +1 -1
  73. package/dist/mcp/tools/error-helpers.d.ts +16 -0
  74. package/dist/mcp/tools/error-helpers.d.ts.map +1 -0
  75. package/dist/mcp/tools/error-helpers.js +34 -0
  76. package/dist/mcp/tools/error-helpers.js.map +1 -0
  77. package/dist/mcp/tools/intelligence-tools.d.ts.map +1 -1
  78. package/dist/mcp/tools/intelligence-tools.js +28 -18
  79. package/dist/mcp/tools/intelligence-tools.js.map +1 -1
  80. package/dist/mcp/tools/node-tools.d.ts.map +1 -1
  81. package/dist/mcp/tools/node-tools.js +43 -40
  82. package/dist/mcp/tools/node-tools.js.map +1 -1
  83. package/dist/mcp/tools/ontology-tools.d.ts.map +1 -1
  84. package/dist/mcp/tools/ontology-tools.js +237 -12
  85. package/dist/mcp/tools/ontology-tools.js.map +1 -1
  86. package/dist/mcp/tools/remote-tools.d.ts +5 -0
  87. package/dist/mcp/tools/remote-tools.d.ts.map +1 -0
  88. package/dist/mcp/tools/remote-tools.js +295 -0
  89. package/dist/mcp/tools/remote-tools.js.map +1 -0
  90. package/dist/storage/backpack-app-backend.d.ts +1 -1
  91. package/dist/storage/backpack-app-backend.d.ts.map +1 -1
  92. package/dist/storage/backpack-app-backend.js +3 -1
  93. package/dist/storage/backpack-app-backend.js.map +1 -1
  94. package/dist/storage/event-sourced-backend.d.ts +174 -0
  95. package/dist/storage/event-sourced-backend.d.ts.map +1 -0
  96. package/dist/storage/event-sourced-backend.js +840 -0
  97. package/dist/storage/event-sourced-backend.js.map +1 -0
  98. package/dist/storage/json-file-backend.d.ts +1 -72
  99. package/dist/storage/json-file-backend.d.ts.map +1 -1
  100. package/dist/storage/json-file-backend.js +11 -549
  101. package/dist/storage/json-file-backend.js.map +1 -1
  102. package/package.json +3 -3
  103. package/hooks/auto-capture-prompt.md +0 -40
  104. package/hooks/hooks.json +0 -16
  105. package/hooks/suggest-viewer.sh +0 -4
@@ -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
- /** Save the current state of an ontology back to storage. */
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
- await this.storage.saveOntology(ontologyName, graph.data);
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":"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"}
@@ -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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"}