@medicine-wheel/relational-query 0.4.3 → 0.4.5

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 CHANGED
@@ -37,6 +37,37 @@ const path = shortestPath('from-id', 'to-id', nodes, edges);
37
37
  const neighbors = neighborhood('node-id', nodes, edges, 2);
38
38
  ```
39
39
 
40
+ ### Protocol Guards (avoidance protocols)
41
+ Conditional edge filters evaluated **before** a crossing. A guard does not veto —
42
+ when a boundary is reached it returns an escalation directive (delegate to a
43
+ custodian). The legacy `respectCeremonyBoundaries`/`ocapOnly` booleans are now
44
+ built-in guards; `avoidanceProtocolGuard` reads a relation's `context`.
45
+
46
+ ```ts
47
+ import { traverse, avoidanceProtocolGuard } from '@medicine-wheel/relational-query';
48
+
49
+ const result = traverse('node-id', nodes, edges, relations, {
50
+ maxDepth: 3,
51
+ guards: [avoidanceProtocolGuard],
52
+ context: { identity: 'agent-mia', ceremonyState: 'open' },
53
+ });
54
+
55
+ // Crossings a guard refused, surfaced for delegation:
56
+ result.escalations; // [{ fromId, toId, guard, reason, escalateTo }]
57
+ ```
58
+
59
+ ### RDF → Flat Kinship-Graph Migration
60
+ Map RDF triples onto co-equal nodes + named relations. `rdfs:subClassOf` and
61
+ `rdf:type` flatten to the `co-emerges-with` edge — never a re-introduced hierarchy.
62
+
63
+ ```ts
64
+ import { rdfToKinshipGraph, kinshipGraphToCypher, kinshipGraphToJsonl } from '@medicine-wheel/relational-query';
65
+
66
+ const graph = rdfToKinshipGraph(triples, { source: 'treaty-dataset' });
67
+ const cypher = kinshipGraphToCypher(graph); // MERGE statements for KuzuDB
68
+ const jsonl = kinshipGraphToJsonl(graph); // newline-delimited node/relation records
69
+ ```
70
+
40
71
  ### Accountability Audit
41
72
  Relational health metrics and OCAP® compliance reports.
42
73
 
@@ -0,0 +1,69 @@
1
+ /**
2
+ * @medicine-wheel/relational-query — Protocol Guards
3
+ *
4
+ * Avoidance protocols expressed as code logic: conditional edge filters
5
+ * evaluated BEFORE a traversal crosses a relation. A guard does not veto at
6
+ * inference time — when a boundary is reached it returns an escalation
7
+ * directive (delegate to a qualified custodian), the "in-the-loop" pattern.
8
+ *
9
+ * Built-in guards reproduce the former `respectCeremonyBoundaries` and
10
+ * `ocapOnly` booleans; the avoidance-protocol guard reads the optional
11
+ * `RelationContext` carried by a first-class Relation.
12
+ */
13
+ import type { Relation, RelationalEdge } from '@medicine-wheel/ontology-core';
14
+ /** Runtime context an agent/being presents when traversing the kinship graph. */
15
+ export interface TraversalContext {
16
+ /** Identity of the being attempting traversal (matched against authorized_kin). */
17
+ identity?: string;
18
+ /** Current ceremony state / scope (matched against relation.context.active_context). */
19
+ ceremonyState?: string;
20
+ /** Free-form additional context for custom guards. */
21
+ [key: string]: unknown;
22
+ }
23
+ /** The decision a guard returns for a single edge crossing. */
24
+ export interface GuardDecision {
25
+ allowed: boolean;
26
+ /** When blocked, who to escalate to — delegation, not a veto. */
27
+ escalateTo?: string;
28
+ /** Human-readable reason. */
29
+ reason?: string;
30
+ }
31
+ /**
32
+ * A protocol guard: a conditional edge filter evaluated before traversal.
33
+ * Receives the edge, its first-class Relation (if one is mapped), and the
34
+ * runtime context; returns whether the edge may be crossed.
35
+ */
36
+ export interface ProtocolGuard {
37
+ name: string;
38
+ evaluate(edge: RelationalEdge, relation: Relation | undefined, context: TraversalContext): GuardDecision;
39
+ }
40
+ /** A boundary a guard refused to cross, surfaced for delegation. */
41
+ export interface GuardEscalation {
42
+ fromId: string;
43
+ toId: string;
44
+ /** Name of the guard that blocked the crossing. */
45
+ guard: string;
46
+ reason?: string;
47
+ escalateTo?: string;
48
+ }
49
+ /** Stop at edges that have not been honored through ceremony. */
50
+ export declare const ceremonyBoundaryGuard: ProtocolGuard;
51
+ /** Only follow OCAP®-compliant relations; edges with no mapped relation are open. */
52
+ export declare const ocapComplianceGuard: ProtocolGuard;
53
+ /**
54
+ * The avoidance protocol. A relation that carries a `context` is traversable
55
+ * only when (a) its `active_context` matches the runtime ceremony state and
56
+ * (b) the traversing identity is among `authorized_kin`. On failure it does
57
+ * not block silently — it escalates to `authorized_by` (or a qualified
58
+ * custodian). Relations with no declared context are open.
59
+ */
60
+ export declare const avoidanceProtocolGuard: ProtocolGuard;
61
+ /**
62
+ * Evaluate a stack of guards against one edge crossing. The first guard that
63
+ * blocks wins; if every guard allows, the crossing is permitted.
64
+ */
65
+ export declare function evaluateGuards(guards: ProtocolGuard[], edge: RelationalEdge, relation: Relation | undefined, context: TraversalContext): {
66
+ decision: GuardDecision;
67
+ guard?: string;
68
+ };
69
+ //# sourceMappingURL=guards.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../src/guards.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAG9E,iFAAiF;AACjF,MAAM,WAAW,gBAAgB;IAC/B,mFAAmF;IACnF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wFAAwF;IACxF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,sDAAsD;IACtD,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,+DAA+D;AAC/D,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,iEAAiE;IACjE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6BAA6B;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CACN,IAAI,EAAE,cAAc,EACpB,QAAQ,EAAE,QAAQ,GAAG,SAAS,EAC9B,OAAO,EAAE,gBAAgB,GACxB,aAAa,CAAC;CAClB;AAED,oEAAoE;AACpE,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAID,iEAAiE;AACjE,eAAO,MAAM,qBAAqB,EAAE,aAUnC,CAAC;AAEF,qFAAqF;AACrF,eAAO,MAAM,mBAAmB,EAAE,aAajC,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,EAAE,aA4BpC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,aAAa,EAAE,EACvB,IAAI,EAAE,cAAc,EACpB,QAAQ,EAAE,QAAQ,GAAG,SAAS,EAC9B,OAAO,EAAE,gBAAgB,GACxB;IAAE,QAAQ,EAAE,aAAa,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAM7C"}
package/dist/guards.js ADDED
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.avoidanceProtocolGuard = exports.ocapComplianceGuard = exports.ceremonyBoundaryGuard = void 0;
4
+ exports.evaluateGuards = evaluateGuards;
5
+ const ontology_core_1 = require("@medicine-wheel/ontology-core");
6
+ // ── Built-in guards ─────────────────────────────────────────────────────────
7
+ /** Stop at edges that have not been honored through ceremony. */
8
+ exports.ceremonyBoundaryGuard = {
9
+ name: 'ceremony-boundary',
10
+ evaluate(edge) {
11
+ if (edge.ceremony_honored)
12
+ return { allowed: true };
13
+ return {
14
+ allowed: false,
15
+ reason: 'Edge has not been honored through ceremony',
16
+ escalateTo: 'fire_keeper',
17
+ };
18
+ },
19
+ };
20
+ /** Only follow OCAP®-compliant relations; edges with no mapped relation are open. */
21
+ exports.ocapComplianceGuard = {
22
+ name: 'ocap-compliance',
23
+ evaluate(_edge, relation) {
24
+ if (!relation)
25
+ return { allowed: true };
26
+ if (relation.ocap && (0, ontology_core_1.checkOcapCompliance)(relation.ocap).compliant) {
27
+ return { allowed: true };
28
+ }
29
+ return {
30
+ allowed: false,
31
+ reason: 'Relation is not OCAP®-compliant',
32
+ escalateTo: 'data_steward',
33
+ };
34
+ },
35
+ };
36
+ /**
37
+ * The avoidance protocol. A relation that carries a `context` is traversable
38
+ * only when (a) its `active_context` matches the runtime ceremony state and
39
+ * (b) the traversing identity is among `authorized_kin`. On failure it does
40
+ * not block silently — it escalates to `authorized_by` (or a qualified
41
+ * custodian). Relations with no declared context are open.
42
+ */
43
+ exports.avoidanceProtocolGuard = {
44
+ name: 'avoidance-protocol',
45
+ evaluate(_edge, relation, context) {
46
+ const ctx = relation?.context;
47
+ if (!ctx)
48
+ return { allowed: true };
49
+ const custodian = ctx.authorized_by ?? 'qualified_custodian';
50
+ if (ctx.active_context && context.ceremonyState && ctx.active_context !== context.ceremonyState) {
51
+ return {
52
+ allowed: false,
53
+ reason: `Relation is valid in '${ctx.active_context}', not '${context.ceremonyState}'`,
54
+ escalateTo: custodian,
55
+ };
56
+ }
57
+ if (ctx.authorized_kin && ctx.authorized_kin.length > 0) {
58
+ if (!context.identity || !ctx.authorized_kin.includes(context.identity)) {
59
+ return {
60
+ allowed: false,
61
+ reason: 'Traversing identity is not among authorized_kin',
62
+ escalateTo: custodian,
63
+ };
64
+ }
65
+ }
66
+ return { allowed: true };
67
+ },
68
+ };
69
+ /**
70
+ * Evaluate a stack of guards against one edge crossing. The first guard that
71
+ * blocks wins; if every guard allows, the crossing is permitted.
72
+ */
73
+ function evaluateGuards(guards, edge, relation, context) {
74
+ for (const guard of guards) {
75
+ const decision = guard.evaluate(edge, relation, context);
76
+ if (!decision.allowed)
77
+ return { decision, guard: guard.name };
78
+ }
79
+ return { decision: { allowed: true } };
80
+ }
81
+ //# sourceMappingURL=guards.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guards.js","sourceRoot":"","sources":["../src/guards.ts"],"names":[],"mappings":";;;AAkIA,wCAWC;AAhID,iEAAoE;AA6CpE,+EAA+E;AAE/E,iEAAiE;AACpD,QAAA,qBAAqB,GAAkB;IAClD,IAAI,EAAE,mBAAmB;IACzB,QAAQ,CAAC,IAAI;QACX,IAAI,IAAI,CAAC,gBAAgB;YAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACpD,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,4CAA4C;YACpD,UAAU,EAAE,aAAa;SAC1B,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,qFAAqF;AACxE,QAAA,mBAAmB,GAAkB;IAChD,IAAI,EAAE,iBAAiB;IACvB,QAAQ,CAAC,KAAK,EAAE,QAAQ;QACtB,IAAI,CAAC,QAAQ;YAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACxC,IAAI,QAAQ,CAAC,IAAI,IAAI,IAAA,mCAAmB,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;YAClE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC3B,CAAC;QACD,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,iCAAiC;YACzC,UAAU,EAAE,cAAc;SAC3B,CAAC;IACJ,CAAC;CACF,CAAC;AAEF;;;;;;GAMG;AACU,QAAA,sBAAsB,GAAkB;IACnD,IAAI,EAAE,oBAAoB;IAC1B,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO;QAC/B,MAAM,GAAG,GAAG,QAAQ,EAAE,OAAO,CAAC;QAC9B,IAAI,CAAC,GAAG;YAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAEnC,MAAM,SAAS,GAAG,GAAG,CAAC,aAAa,IAAI,qBAAqB,CAAC;QAE7D,IAAI,GAAG,CAAC,cAAc,IAAI,OAAO,CAAC,aAAa,IAAI,GAAG,CAAC,cAAc,KAAK,OAAO,CAAC,aAAa,EAAE,CAAC;YAChG,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,yBAAyB,GAAG,CAAC,cAAc,WAAW,OAAO,CAAC,aAAa,GAAG;gBACtF,UAAU,EAAE,SAAS;aACtB,CAAC;QACJ,CAAC;QAED,IAAI,GAAG,CAAC,cAAc,IAAI,GAAG,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxD,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACxE,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,MAAM,EAAE,iDAAiD;oBACzD,UAAU,EAAE,SAAS;iBACtB,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;CACF,CAAC;AAEF;;;GAGG;AACH,SAAgB,cAAc,CAC5B,MAAuB,EACvB,IAAoB,EACpB,QAA8B,EAC9B,OAAyB;IAEzB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QACzD,IAAI,CAAC,QAAQ,CAAC,OAAO;YAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;IAChE,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC;AACzC,CAAC"}
package/dist/index.d.ts CHANGED
@@ -5,8 +5,12 @@
5
5
  * for the Medicine Wheel relational web.
6
6
  */
7
7
  export type { NodeFilter, EdgeFilter, RelationFilter, SortField, SortOrder, QuerySort, QueryPagination, QueryOptions, QueryResult, TraversalDirection, TraversalOptions, TraversalPath, TraversalResult, AccountabilityReport, } from './types.js';
8
+ export type { TraversalContext, GuardDecision, ProtocolGuard, GuardEscalation, } from './guards.js';
9
+ export { ceremonyBoundaryGuard, ocapComplianceGuard, avoidanceProtocolGuard, evaluateGuards, } from './guards.js';
8
10
  export { filterNodes, filterEdges, filterRelations, sortNodes, paginate, filterByRelation, relationCounts, filterByMinRelations, } from './query.js';
9
11
  export { traverse, shortestPath, neighborhood, } from './traversal.js';
10
12
  export { auditAccountability, isOcapCompliant, relationsNeedingAttention, } from './audit.js';
11
13
  export { queryStewards, queryCeremonyProvenance, queryInquiries, queryKinshipHubs, queryKinshipRelations, queryDirectionAlignment, queryReciprocityFlows, queryInquiriesBySun, queryCeremonies, queryAllInquiries, formatReciprocityObservation, formatDirectionObservation, } from './cypher.js';
14
+ export type { RdfTriple, MigrationOptions, KinshipGraph } from './migrate.js';
15
+ export { rdfToKinshipGraph, kinshipGraphToCypher, kinshipGraphToJsonl, localName, } from './migrate.js';
12
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,YAAY,EACV,UAAU,EACV,UAAU,EACV,cAAc,EACd,SAAS,EACT,SAAS,EACT,SAAS,EACT,eAAe,EACf,YAAY,EACZ,WAAW,EACX,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,EACb,eAAe,EACf,oBAAoB,GACrB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,WAAW,EACX,WAAW,EACX,eAAe,EACf,SAAS,EACT,QAAQ,EACR,gBAAgB,EAChB,cAAc,EACd,oBAAoB,GACrB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,YAAY,GACb,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,yBAAyB,GAC1B,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,aAAa,EACb,uBAAuB,EACvB,cAAc,EACd,gBAAgB,EAChB,qBAAqB,EACrB,uBAAuB,EACvB,qBAAqB,EACrB,mBAAmB,EACnB,eAAe,EACf,iBAAiB,EACjB,4BAA4B,EAC5B,0BAA0B,GAC3B,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,YAAY,EACV,UAAU,EACV,UAAU,EACV,cAAc,EACd,SAAS,EACT,SAAS,EACT,SAAS,EACT,eAAe,EACf,YAAY,EACZ,WAAW,EACX,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,EACb,eAAe,EACf,oBAAoB,GACrB,MAAM,YAAY,CAAC;AAGpB,YAAY,EACV,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,eAAe,GAChB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,sBAAsB,EACtB,cAAc,GACf,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,WAAW,EACX,WAAW,EACX,eAAe,EACf,SAAS,EACT,QAAQ,EACR,gBAAgB,EAChB,cAAc,EACd,oBAAoB,GACrB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,YAAY,GACb,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,yBAAyB,GAC1B,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,aAAa,EACb,uBAAuB,EACvB,cAAc,EACd,gBAAgB,EAChB,qBAAqB,EACrB,uBAAuB,EACvB,qBAAqB,EACrB,mBAAmB,EACnB,eAAe,EACf,iBAAiB,EACjB,4BAA4B,EAC5B,0BAA0B,GAC3B,MAAM,aAAa,CAAC;AAGrB,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC9E,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,EACnB,SAAS,GACV,MAAM,cAAc,CAAC"}
package/dist/index.js CHANGED
@@ -6,7 +6,12 @@
6
6
  * for the Medicine Wheel relational web.
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.formatDirectionObservation = exports.formatReciprocityObservation = exports.queryAllInquiries = exports.queryCeremonies = exports.queryInquiriesBySun = exports.queryReciprocityFlows = exports.queryDirectionAlignment = exports.queryKinshipRelations = exports.queryKinshipHubs = exports.queryInquiries = exports.queryCeremonyProvenance = exports.queryStewards = exports.relationsNeedingAttention = exports.isOcapCompliant = exports.auditAccountability = exports.neighborhood = exports.shortestPath = exports.traverse = exports.filterByMinRelations = exports.relationCounts = exports.filterByRelation = exports.paginate = exports.sortNodes = exports.filterRelations = exports.filterEdges = exports.filterNodes = void 0;
9
+ exports.localName = exports.kinshipGraphToJsonl = exports.kinshipGraphToCypher = exports.rdfToKinshipGraph = exports.formatDirectionObservation = exports.formatReciprocityObservation = exports.queryAllInquiries = exports.queryCeremonies = exports.queryInquiriesBySun = exports.queryReciprocityFlows = exports.queryDirectionAlignment = exports.queryKinshipRelations = exports.queryKinshipHubs = exports.queryInquiries = exports.queryCeremonyProvenance = exports.queryStewards = exports.relationsNeedingAttention = exports.isOcapCompliant = exports.auditAccountability = exports.neighborhood = exports.shortestPath = exports.traverse = exports.filterByMinRelations = exports.relationCounts = exports.filterByRelation = exports.paginate = exports.sortNodes = exports.filterRelations = exports.filterEdges = exports.filterNodes = exports.evaluateGuards = exports.avoidanceProtocolGuard = exports.ocapComplianceGuard = exports.ceremonyBoundaryGuard = void 0;
10
+ var guards_js_1 = require("./guards.js");
11
+ Object.defineProperty(exports, "ceremonyBoundaryGuard", { enumerable: true, get: function () { return guards_js_1.ceremonyBoundaryGuard; } });
12
+ Object.defineProperty(exports, "ocapComplianceGuard", { enumerable: true, get: function () { return guards_js_1.ocapComplianceGuard; } });
13
+ Object.defineProperty(exports, "avoidanceProtocolGuard", { enumerable: true, get: function () { return guards_js_1.avoidanceProtocolGuard; } });
14
+ Object.defineProperty(exports, "evaluateGuards", { enumerable: true, get: function () { return guards_js_1.evaluateGuards; } });
10
15
  // Query builder
11
16
  var query_js_1 = require("./query.js");
12
17
  Object.defineProperty(exports, "filterNodes", { enumerable: true, get: function () { return query_js_1.filterNodes; } });
@@ -41,4 +46,9 @@ Object.defineProperty(exports, "queryCeremonies", { enumerable: true, get: funct
41
46
  Object.defineProperty(exports, "queryAllInquiries", { enumerable: true, get: function () { return cypher_js_1.queryAllInquiries; } });
42
47
  Object.defineProperty(exports, "formatReciprocityObservation", { enumerable: true, get: function () { return cypher_js_1.formatReciprocityObservation; } });
43
48
  Object.defineProperty(exports, "formatDirectionObservation", { enumerable: true, get: function () { return cypher_js_1.formatDirectionObservation; } });
49
+ var migrate_js_1 = require("./migrate.js");
50
+ Object.defineProperty(exports, "rdfToKinshipGraph", { enumerable: true, get: function () { return migrate_js_1.rdfToKinshipGraph; } });
51
+ Object.defineProperty(exports, "kinshipGraphToCypher", { enumerable: true, get: function () { return migrate_js_1.kinshipGraphToCypher; } });
52
+ Object.defineProperty(exports, "kinshipGraphToJsonl", { enumerable: true, get: function () { return migrate_js_1.kinshipGraphToJsonl; } });
53
+ Object.defineProperty(exports, "localName", { enumerable: true, get: function () { return migrate_js_1.localName; } });
44
54
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAoBH,gBAAgB;AAChB,uCASoB;AARlB,uGAAA,WAAW,OAAA;AACX,uGAAA,WAAW,OAAA;AACX,2GAAA,eAAe,OAAA;AACf,qGAAA,SAAS,OAAA;AACT,oGAAA,QAAQ,OAAA;AACR,4GAAA,gBAAgB,OAAA;AAChB,0GAAA,cAAc,OAAA;AACd,gHAAA,oBAAoB,OAAA;AAGtB,YAAY;AACZ,+CAIwB;AAHtB,wGAAA,QAAQ,OAAA;AACR,4GAAA,YAAY,OAAA;AACZ,4GAAA,YAAY,OAAA;AAGd,QAAQ;AACR,uCAIoB;AAHlB,+GAAA,mBAAmB,OAAA;AACnB,2GAAA,eAAe,OAAA;AACf,qHAAA,yBAAyB,OAAA;AAG3B,2DAA2D;AAC3D,yCAaqB;AAZnB,0GAAA,aAAa,OAAA;AACb,oHAAA,uBAAuB,OAAA;AACvB,2GAAA,cAAc,OAAA;AACd,6GAAA,gBAAgB,OAAA;AAChB,kHAAA,qBAAqB,OAAA;AACrB,oHAAA,uBAAuB,OAAA;AACvB,kHAAA,qBAAqB,OAAA;AACrB,gHAAA,mBAAmB,OAAA;AACnB,4GAAA,eAAe,OAAA;AACf,8GAAA,iBAAiB,OAAA;AACjB,yHAAA,4BAA4B,OAAA;AAC5B,uHAAA,0BAA0B,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AA2BH,yCAKqB;AAJnB,kHAAA,qBAAqB,OAAA;AACrB,gHAAA,mBAAmB,OAAA;AACnB,mHAAA,sBAAsB,OAAA;AACtB,2GAAA,cAAc,OAAA;AAGhB,gBAAgB;AAChB,uCASoB;AARlB,uGAAA,WAAW,OAAA;AACX,uGAAA,WAAW,OAAA;AACX,2GAAA,eAAe,OAAA;AACf,qGAAA,SAAS,OAAA;AACT,oGAAA,QAAQ,OAAA;AACR,4GAAA,gBAAgB,OAAA;AAChB,0GAAA,cAAc,OAAA;AACd,gHAAA,oBAAoB,OAAA;AAGtB,YAAY;AACZ,+CAIwB;AAHtB,wGAAA,QAAQ,OAAA;AACR,4GAAA,YAAY,OAAA;AACZ,4GAAA,YAAY,OAAA;AAGd,QAAQ;AACR,uCAIoB;AAHlB,+GAAA,mBAAmB,OAAA;AACnB,2GAAA,eAAe,OAAA;AACf,qHAAA,yBAAyB,OAAA;AAG3B,2DAA2D;AAC3D,yCAaqB;AAZnB,0GAAA,aAAa,OAAA;AACb,oHAAA,uBAAuB,OAAA;AACvB,2GAAA,cAAc,OAAA;AACd,6GAAA,gBAAgB,OAAA;AAChB,kHAAA,qBAAqB,OAAA;AACrB,oHAAA,uBAAuB,OAAA;AACvB,kHAAA,qBAAqB,OAAA;AACrB,gHAAA,mBAAmB,OAAA;AACnB,4GAAA,eAAe,OAAA;AACf,8GAAA,iBAAiB,OAAA;AACjB,yHAAA,4BAA4B,OAAA;AAC5B,uHAAA,0BAA0B,OAAA;AAK5B,2CAKsB;AAJpB,+GAAA,iBAAiB,OAAA;AACjB,kHAAA,oBAAoB,OAAA;AACpB,iHAAA,mBAAmB,OAAA;AACnB,uGAAA,SAAS,OAAA"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * @medicine-wheel/relational-query — RDF → Flat Kinship-Graph Migration
3
+ *
4
+ * Ingests RDF triples and emits a flat kinship graph (co-equal nodes + named,
5
+ * context-bound relations). The reconciliation move: `rdfs:subClassOf` and
6
+ * `rdf:type` — the axes that encode taxonomic subordination — are mapped onto
7
+ * a NAMED kinship edge (`co-emerges-with` by default), never re-introduced as
8
+ * a class hierarchy. Source provenance is carried into each relation's
9
+ * `context.authorized_by`.
10
+ */
11
+ import type { Relation, RelationalNode, KinshipEdgeName } from '@medicine-wheel/ontology-core';
12
+ /** A single RDF statement (subject–predicate–object), IRIs or prefixed names. */
13
+ export interface RdfTriple {
14
+ subject: string;
15
+ predicate: string;
16
+ object: string;
17
+ }
18
+ export interface MigrationOptions {
19
+ /** Provenance label written into each relation's context.authorized_by. */
20
+ source?: string;
21
+ /** Predicate (IRI or prefixed) → kinship edge name overrides. */
22
+ predicateMap?: Record<string, KinshipEdgeName>;
23
+ /** Predicates whose (literal) objects fold into node.name. */
24
+ labelPredicates?: string[];
25
+ /** Decide whether an RDF term is a resource (→ node) vs a literal (→ attribute). */
26
+ isResource?: (term: string) => boolean;
27
+ /** ISO timestamp for created/updated fields (defaults to now). */
28
+ now?: string;
29
+ }
30
+ export interface KinshipGraph {
31
+ nodes: RelationalNode[];
32
+ relations: Relation[];
33
+ }
34
+ /** The local name of an IRI or prefixed term (after the last #, / or :). */
35
+ export declare function localName(term: string): string;
36
+ /** Migrate RDF triples into a flat kinship graph. */
37
+ export declare function rdfToKinshipGraph(triples: RdfTriple[], options?: MigrationOptions): KinshipGraph;
38
+ /** Emit MERGE statements for a kinship graph (KuzuDB / openCypher). */
39
+ export declare function kinshipGraphToCypher(graph: KinshipGraph): string[];
40
+ /** Emit newline-delimited JSON (one node/relation per line) for the JSONL store. */
41
+ export declare function kinshipGraphToJsonl(graph: KinshipGraph): string;
42
+ //# sourceMappingURL=migrate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../src/migrate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EACV,QAAQ,EACR,cAAc,EACd,eAAe,EAChB,MAAM,+BAA+B,CAAC;AAGvC,iFAAiF;AACjF,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,2EAA2E;IAC3E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC/C,8DAA8D;IAC9D,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,oFAAoF;IACpF,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IACvC,kEAAkE;IAClE,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,SAAS,EAAE,QAAQ,EAAE,CAAC;CACvB;AAyBD,4EAA4E;AAC5E,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAU9C;AAED,qDAAqD;AACrD,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,SAAS,EAAE,EACpB,OAAO,GAAE,gBAAqB,GAC7B,YAAY,CAyEd;AAMD,uEAAuE;AACvE,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,EAAE,CAelE;AAED,oFAAoF;AACpF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAK/D"}
@@ -0,0 +1,137 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.localName = localName;
4
+ exports.rdfToKinshipGraph = rdfToKinshipGraph;
5
+ exports.kinshipGraphToCypher = kinshipGraphToCypher;
6
+ exports.kinshipGraphToJsonl = kinshipGraphToJsonl;
7
+ const ontology_core_1 = require("@medicine-wheel/ontology-core");
8
+ /**
9
+ * The subordinating axes are flattened to co-emergence: an instance/subclass
10
+ * stands beside its kind rather than beneath it.
11
+ */
12
+ const DEFAULT_PREDICATE_MAP = {
13
+ a: 'co-emerges-with',
14
+ 'rdf:type': 'co-emerges-with',
15
+ 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type': 'co-emerges-with',
16
+ 'rdfs:subClassOf': 'co-emerges-with',
17
+ 'http://www.w3.org/2000/01/rdf-schema#subClassOf': 'co-emerges-with',
18
+ };
19
+ const DEFAULT_LABEL_PREDICATES = [
20
+ 'rdfs:label',
21
+ 'http://www.w3.org/2000/01/rdf-schema#label',
22
+ ];
23
+ function defaultIsResource(term) {
24
+ if (/^https?:\/\//.test(term))
25
+ return true;
26
+ // A prefixed name like `mw:Direction` or `ex:river` (not a free-text literal).
27
+ return /^[A-Za-z][\w-]*:[\w./#-]+$/.test(term);
28
+ }
29
+ /** The local name of an IRI or prefixed term (after the last #, / or :). */
30
+ function localName(term) {
31
+ const hash = term.lastIndexOf('#');
32
+ if (hash >= 0)
33
+ return term.slice(hash + 1);
34
+ if (/^https?:\/\//.test(term)) {
35
+ const slash = term.lastIndexOf('/');
36
+ if (slash >= 0)
37
+ return term.slice(slash + 1);
38
+ }
39
+ const colon = term.lastIndexOf(':');
40
+ if (colon >= 0)
41
+ return term.slice(colon + 1);
42
+ return term;
43
+ }
44
+ /** Migrate RDF triples into a flat kinship graph. */
45
+ function rdfToKinshipGraph(triples, options = {}) {
46
+ const now = options.now ?? new Date().toISOString();
47
+ const source = options.source;
48
+ const predicateMap = { ...DEFAULT_PREDICATE_MAP, ...(options.predicateMap ?? {}) };
49
+ const labelPredicates = new Set(options.labelPredicates ?? DEFAULT_LABEL_PREDICATES);
50
+ const isResource = options.isResource ?? defaultIsResource;
51
+ const nodeMap = new Map();
52
+ const relations = [];
53
+ let relSeq = 0;
54
+ const ensureNode = (id) => {
55
+ let n = nodeMap.get(id);
56
+ if (!n) {
57
+ // Every being lands on the same flat ontological layer.
58
+ n = { id, name: id, type: 'knowledge', metadata: {}, created_at: now, updated_at: now };
59
+ nodeMap.set(id, n);
60
+ }
61
+ return n;
62
+ };
63
+ for (const t of triples) {
64
+ const subject = ensureNode(t.subject);
65
+ // Literal object → an attribute on the subject node.
66
+ if (!isResource(t.object)) {
67
+ if (labelPredicates.has(t.predicate)) {
68
+ subject.name = t.object;
69
+ }
70
+ else {
71
+ subject.metadata[localName(t.predicate)] = t.object;
72
+ }
73
+ continue;
74
+ }
75
+ // Resource object → a named kinship relation.
76
+ ensureNode(t.object);
77
+ const local = localName(t.predicate);
78
+ const kinship_type = predicateMap[t.predicate] ?? ((0, ontology_core_1.isKinshipEdgeName)(local) ? local : undefined);
79
+ relations.push({
80
+ id: `rel-${relSeq++}`,
81
+ from_id: t.subject,
82
+ to_id: t.object,
83
+ relationship_type: local,
84
+ ...(kinship_type ? { kinship_type } : {}),
85
+ strength: 1,
86
+ obligations: [],
87
+ // Migrated relations are unverified until a steward honors them — an
88
+ // honest default rather than assumed compliance/consent.
89
+ ocap: {
90
+ ownership: source ?? 'unknown',
91
+ control: source ?? 'unknown',
92
+ access: 'community',
93
+ possession: 'community-server',
94
+ compliant: false,
95
+ steward: source,
96
+ },
97
+ accountability: {
98
+ respect: 0,
99
+ reciprocity: 0,
100
+ responsibility: 0,
101
+ wilson_alignment: 0,
102
+ relations_honored: [],
103
+ },
104
+ ...(source ? { context: { authorized_by: source } } : {}),
105
+ metadata: { source_predicate: t.predicate },
106
+ created_at: now,
107
+ updated_at: now,
108
+ });
109
+ }
110
+ return { nodes: [...nodeMap.values()], relations };
111
+ }
112
+ function esc(value) {
113
+ return value.replace(/\\/g, '\\\\').replace(/'/g, "\\'");
114
+ }
115
+ /** Emit MERGE statements for a kinship graph (KuzuDB / openCypher). */
116
+ function kinshipGraphToCypher(graph) {
117
+ const stmts = [];
118
+ for (const n of graph.nodes) {
119
+ stmts.push(`MERGE (n {id: '${esc(n.id)}'}) SET n.name = '${esc(n.name)}', n.type = '${esc(n.type)}'`);
120
+ }
121
+ for (const r of graph.relations) {
122
+ const type = r.kinship_type ?? r.relationship_type;
123
+ stmts.push(`MATCH (a {id: '${esc(r.from_id)}'}), (b {id: '${esc(r.to_id)}'}) ` +
124
+ `MERGE (a)-[:KINSHIP {type: '${esc(type)}'}]->(b)`);
125
+ }
126
+ return stmts;
127
+ }
128
+ /** Emit newline-delimited JSON (one node/relation per line) for the JSONL store. */
129
+ function kinshipGraphToJsonl(graph) {
130
+ const lines = [];
131
+ for (const n of graph.nodes)
132
+ lines.push(JSON.stringify({ kind: 'node', ...n }));
133
+ for (const r of graph.relations)
134
+ lines.push(JSON.stringify({ kind: 'relation', ...r }));
135
+ return lines.join('\n');
136
+ }
137
+ //# sourceMappingURL=migrate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../src/migrate.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"traversal.d.ts","sourceRoot":"","sources":["../src/traversal.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAE9F,OAAO,KAAK,EACV,gBAAgB,EAChB,aAAa,EACb,eAAe,EAGhB,MAAM,YAAY,CAAC;AAiCpB,mDAAmD;AACnD,wBAAgB,QAAQ,CACtB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,cAAc,EAAE,EACvB,KAAK,EAAE,cAAc,EAAE,EACvB,SAAS,EAAE,QAAQ,EAAE,EACrB,IAAI,GAAE,OAAO,CAAC,gBAAgB,CAAM,GACnC,eAAe,CA+FjB;AAED,2CAA2C;AAC3C,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,cAAc,EAAE,EACvB,KAAK,EAAE,cAAc,EAAE,GACtB,aAAa,GAAG,IAAI,CA4CtB;AAED,6CAA6C;AAC7C,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,cAAc,EAAE,EACvB,KAAK,EAAE,cAAc,EAAE,EACvB,QAAQ,GAAE,MAAU,GACnB,cAAc,EAAE,CAMlB"}
1
+ {"version":3,"file":"traversal.d.ts","sourceRoot":"","sources":["../src/traversal.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAC9F,OAAO,KAAK,EACV,gBAAgB,EAChB,aAAa,EACb,eAAe,EAChB,MAAM,YAAY,CAAC;AAmCpB,mDAAmD;AACnD,wBAAgB,QAAQ,CACtB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,cAAc,EAAE,EACvB,KAAK,EAAE,cAAc,EAAE,EACvB,SAAS,EAAE,QAAQ,EAAE,EACrB,IAAI,GAAE,OAAO,CAAC,gBAAgB,CAAM,GACnC,eAAe,CA8GjB;AAED,2CAA2C;AAC3C,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,cAAc,EAAE,EACvB,KAAK,EAAE,cAAc,EAAE,GACtB,aAAa,GAAG,IAAI,CA4CtB;AAED,6CAA6C;AAC7C,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,cAAc,EAAE,EACvB,KAAK,EAAE,cAAc,EAAE,EACvB,QAAQ,GAAE,MAAU,GACnB,cAAc,EAAE,CAMlB"}
package/dist/traversal.js CHANGED
@@ -3,8 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.traverse = traverse;
4
4
  exports.shortestPath = shortestPath;
5
5
  exports.neighborhood = neighborhood;
6
- const ontology_core_1 = require("@medicine-wheel/ontology-core");
7
6
  const query_js_1 = require("./query.js");
7
+ const guards_js_1 = require("./guards.js");
8
8
  const DEFAULT_OPTIONS = {
9
9
  maxDepth: 3,
10
10
  direction: 'both',
@@ -36,17 +36,23 @@ function traverse(rootId, nodes, edges, relations, opts = {}) {
36
36
  if (options.edgeFilter) {
37
37
  filteredEdges = (0, query_js_1.filterEdges)(edges, options.edgeFilter);
38
38
  }
39
- // OCAP filter: only follow edges whose relations are compliant
40
- if (options.ocapOnly) {
41
- const compliantRelIds = new Set(relations
42
- .filter(r => r.ocap && (0, ontology_core_1.checkOcapCompliance)(r.ocap).compliant)
43
- .map(r => r.id));
44
- // Keep edges that match compliant relation IDs or have no relation mapping
45
- filteredEdges = filteredEdges.filter(e => {
46
- const relId = `${e.from_id}-${e.to_id}`;
47
- const reverseId = `${e.to_id}-${e.from_id}`;
48
- return compliantRelIds.has(relId) || compliantRelIds.has(reverseId) || !relations.some(r => r.id === relId || r.id === reverseId);
49
- });
39
+ // Assemble the protocol-guard stack. The former `respectCeremonyBoundaries`
40
+ // and `ocapOnly` booleans are now built-in guards, evaluated per crossing
41
+ // alongside any caller-supplied guards.
42
+ const guards = [];
43
+ if (options.respectCeremonyBoundaries)
44
+ guards.push(guards_js_1.ceremonyBoundaryGuard);
45
+ if (options.ocapOnly)
46
+ guards.push(guards_js_1.ocapComplianceGuard);
47
+ if (options.guards)
48
+ guards.push(...options.guards);
49
+ const guardContext = options.context ?? {};
50
+ // Map an edge (by endpoint pair, in either direction) to its first-class
51
+ // Relation, so guards can read the relation's OCAP flags and context.
52
+ const relationLookup = new Map();
53
+ for (const r of relations) {
54
+ relationLookup.set(`${r.from_id}|${r.to_id}`, r);
55
+ relationLookup.set(`${r.to_id}|${r.from_id}`, r);
50
56
  }
51
57
  // Build adjacency
52
58
  const adj = buildAdjacency(filteredEdges, options.direction);
@@ -58,6 +64,7 @@ function traverse(rootId, nodes, edges, relations, opts = {}) {
58
64
  }
59
65
  // BFS traversal
60
66
  const paths = [];
67
+ const escalations = [];
61
68
  const visited = new Set([rootId]);
62
69
  let maxDepthReached = false;
63
70
  const queue = [{ nodeId: rootId, path: [rootNode], edgePath: [], depth: 0 }];
@@ -71,9 +78,21 @@ function traverse(rootId, nodes, edges, relations, opts = {}) {
71
78
  for (const { nodeId, edge } of neighbors) {
72
79
  if (visited.has(nodeId))
73
80
  continue;
74
- // Ceremony boundary check
75
- if (options.respectCeremonyBoundaries && !edge.ceremony_honored) {
76
- continue;
81
+ // Protocol guards: evaluate before crossing the edge. A blocked crossing
82
+ // is recorded as an escalation (delegation), not a silent skip.
83
+ if (guards.length > 0) {
84
+ const relation = relationLookup.get(`${edge.from_id}|${edge.to_id}`);
85
+ const { decision, guard } = (0, guards_js_1.evaluateGuards)(guards, edge, relation, guardContext);
86
+ if (!decision.allowed) {
87
+ escalations.push({
88
+ fromId: current.nodeId,
89
+ toId: nodeId,
90
+ guard: guard ?? 'unknown',
91
+ reason: decision.reason,
92
+ escalateTo: decision.escalateTo,
93
+ });
94
+ continue;
95
+ }
77
96
  }
78
97
  const node = nodeMap.get(nodeId);
79
98
  if (!node)
@@ -100,7 +119,7 @@ function traverse(rootId, nodes, edges, relations, opts = {}) {
100
119
  });
101
120
  }
102
121
  }
103
- return { root: rootNode, paths, visitedNodes: visited, maxDepthReached };
122
+ return { root: rootNode, paths, visitedNodes: visited, maxDepthReached, escalations };
104
123
  }
105
124
  /** Find shortest path between two nodes */
106
125
  function shortestPath(fromId, toId, nodes, edges) {
@@ -1 +1 @@
1
- {"version":3,"file":"traversal.js","sourceRoot":"","sources":["../src/traversal.ts"],"names":[],"mappings":";;AA8CA,4BAqGC;AAGD,oCAiDC;AAGD,oCAWC;AAhND,iEAAoE;AAQpE,yCAAsD;AAEtD,MAAM,eAAe,GAAqB;IACxC,QAAQ,EAAE,CAAC;IACX,SAAS,EAAE,MAAM;IACjB,yBAAyB,EAAE,KAAK;IAChC,QAAQ,EAAE,KAAK;CAChB,CAAC;AAEF,wCAAwC;AACxC,SAAS,cAAc,CACrB,KAAuB,EACvB,SAA2C;IAE3C,MAAM,GAAG,GAAG,IAAI,GAAG,EAA2D,CAAC;IAE/E,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,SAAS,KAAK,UAAU,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;YACrD,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACzC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACxC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC9B,CAAC;QACD,IAAI,SAAS,KAAK,UAAU,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;YACrD,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YACvC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1C,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED,mDAAmD;AACnD,SAAgB,QAAQ,CACtB,MAAc,EACd,KAAuB,EACvB,KAAuB,EACvB,SAAqB,EACrB,OAAkC,EAAE;IAEpC,MAAM,OAAO,GAAG,EAAE,GAAG,eAAe,EAAE,GAAG,IAAI,EAAE,CAAC;IAEhD,mBAAmB;IACnB,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACvB,aAAa,GAAG,IAAA,sBAAW,EAAC,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IACzD,CAAC;IAED,+DAA+D;IAC/D,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,MAAM,eAAe,GAAG,IAAI,GAAG,CAC7B,SAAS;aACN,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,IAAA,mCAAmB,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC;aAC5D,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAClB,CAAC;QACF,2EAA2E;QAC3E,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;YACvC,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;YACxC,MAAM,SAAS,GAAG,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;YAC5C,OAAO,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;QACpI,CAAC,CAAC,CAAC;IACL,CAAC;IAED,kBAAkB;IAClB,MAAM,GAAG,GAAG,cAAc,CAAC,aAAa,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAE7D,cAAc;IACd,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,mCAAmC,MAAM,GAAG,CAAC,CAAC;IAChE,CAAC;IAED,gBAAgB;IAChB,MAAM,KAAK,GAAoB,EAAE,CAAC;IAClC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1C,IAAI,eAAe,GAAG,KAAK,CAAC;IAS5B,MAAM,KAAK,GAAgB,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IAE1F,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,EAAG,CAAC;QAE/B,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACtC,eAAe,GAAG,IAAI,CAAC;YACvB,SAAS;QACX,CAAC;QAED,MAAM,SAAS,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAChD,KAAK,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,SAAS,EAAE,CAAC;YACzC,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;gBAAE,SAAS;YAElC,0BAA0B;YAC1B,IAAI,OAAO,CAAC,yBAAyB,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAChE,SAAS;YACX,CAAC;YAED,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACjC,IAAI,CAAC,IAAI;gBAAE,SAAS;YAEpB,cAAc;YACd,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;gBACvB,MAAM,QAAQ,GAAG,IAAA,sBAAW,EAAC,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;gBACzD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;oBAAE,SAAS;YACtC,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAEpB,MAAM,OAAO,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACxC,MAAM,WAAW,GAAG,CAAC,GAAG,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAEhD,KAAK,CAAC,IAAI,CAAC;gBACT,KAAK,EAAE,OAAO;gBACd,KAAK,EAAE,WAAW;gBAClB,KAAK,EAAE,OAAO,CAAC,KAAK,GAAG,CAAC;aACzB,CAAC,CAAC;YAEH,KAAK,CAAC,IAAI,CAAC;gBACT,MAAM;gBACN,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,WAAW;gBACrB,KAAK,EAAE,OAAO,CAAC,KAAK,GAAG,CAAC;aACzB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC;AAC3E,CAAC;AAED,2CAA2C;AAC3C,SAAgB,YAAY,CAC1B,MAAc,EACd,IAAY,EACZ,KAAuB,EACvB,KAAuB;IAEvB,MAAM,GAAG,GAAG,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IAQ1C,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAE3B,MAAM,KAAK,GAAgB,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;IAEhF,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,EAAG,CAAC;QAE/B,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;YAC5B,OAAO;gBACL,KAAK,EAAE,OAAO,CAAC,IAAI;gBACnB,KAAK,EAAE,OAAO,CAAC,QAAQ;gBACvB,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;aAC/B,CAAC;QACJ,CAAC;QAED,MAAM,SAAS,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAChD,KAAK,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,SAAS,EAAE,CAAC;YACzC,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;gBAAE,SAAS;YAClC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAEpB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACjC,IAAI,CAAC,IAAI;gBAAE,SAAS;YAEpB,KAAK,CAAC,IAAI,CAAC;gBACT,MAAM;gBACN,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;gBAC7B,QAAQ,EAAE,CAAC,GAAG,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC;aACtC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,6CAA6C;AAC7C,SAAgB,YAAY,CAC1B,MAAc,EACd,KAAuB,EACvB,KAAuB,EACvB,WAAmB,CAAC;IAEpB,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;IACnF,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC;SAC5B,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;SAC1B,MAAM,CAAC,CAAC,CAAC,EAAuB,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;AACzD,CAAC"}
1
+ {"version":3,"file":"traversal.js","sourceRoot":"","sources":["../src/traversal.ts"],"names":[],"mappings":";;AA6CA,4BAoHC;AAGD,oCAiDC;AAGD,oCAWC;AAzND,yCAAsD;AAEtD,2CAAyF;AAEzF,MAAM,eAAe,GAAqB;IACxC,QAAQ,EAAE,CAAC;IACX,SAAS,EAAE,MAAM;IACjB,yBAAyB,EAAE,KAAK;IAChC,QAAQ,EAAE,KAAK;CAChB,CAAC;AAEF,wCAAwC;AACxC,SAAS,cAAc,CACrB,KAAuB,EACvB,SAA2C;IAE3C,MAAM,GAAG,GAAG,IAAI,GAAG,EAA2D,CAAC;IAE/E,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,SAAS,KAAK,UAAU,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;YACrD,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACzC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACxC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC9B,CAAC;QACD,IAAI,SAAS,KAAK,UAAU,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;YACrD,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YACvC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1C,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED,mDAAmD;AACnD,SAAgB,QAAQ,CACtB,MAAc,EACd,KAAuB,EACvB,KAAuB,EACvB,SAAqB,EACrB,OAAkC,EAAE;IAEpC,MAAM,OAAO,GAAG,EAAE,GAAG,eAAe,EAAE,GAAG,IAAI,EAAE,CAAC;IAEhD,mBAAmB;IACnB,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACvB,aAAa,GAAG,IAAA,sBAAW,EAAC,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IACzD,CAAC;IAED,4EAA4E;IAC5E,0EAA0E;IAC1E,wCAAwC;IACxC,MAAM,MAAM,GAAoB,EAAE,CAAC;IACnC,IAAI,OAAO,CAAC,yBAAyB;QAAE,MAAM,CAAC,IAAI,CAAC,iCAAqB,CAAC,CAAC;IAC1E,IAAI,OAAO,CAAC,QAAQ;QAAE,MAAM,CAAC,IAAI,CAAC,+BAAmB,CAAC,CAAC;IACvD,IAAI,OAAO,CAAC,MAAM;QAAE,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACnD,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;IAE3C,yEAAyE;IACzE,sEAAsE;IACtE,MAAM,cAAc,GAAG,IAAI,GAAG,EAAoB,CAAC;IACnD,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;QACjD,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IACnD,CAAC;IAED,kBAAkB;IAClB,MAAM,GAAG,GAAG,cAAc,CAAC,aAAa,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAE7D,cAAc;IACd,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,mCAAmC,MAAM,GAAG,CAAC,CAAC;IAChE,CAAC;IAED,gBAAgB;IAChB,MAAM,KAAK,GAAoB,EAAE,CAAC;IAClC,MAAM,WAAW,GAAsB,EAAE,CAAC;IAC1C,MAAM,OAAO,GAAG,IAAI,GAAG,CAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1C,IAAI,eAAe,GAAG,KAAK,CAAC;IAS5B,MAAM,KAAK,GAAgB,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IAE1F,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,EAAG,CAAC;QAE/B,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACtC,eAAe,GAAG,IAAI,CAAC;YACvB,SAAS;QACX,CAAC;QAED,MAAM,SAAS,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAChD,KAAK,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,SAAS,EAAE,CAAC;YACzC,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;gBAAE,SAAS;YAElC,yEAAyE;YACzE,gEAAgE;YAChE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtB,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;gBACrE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,IAAA,0BAAc,EAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;gBACjF,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;oBACtB,WAAW,CAAC,IAAI,CAAC;wBACf,MAAM,EAAE,OAAO,CAAC,MAAM;wBACtB,IAAI,EAAE,MAAM;wBACZ,KAAK,EAAE,KAAK,IAAI,SAAS;wBACzB,MAAM,EAAE,QAAQ,CAAC,MAAM;wBACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;qBAChC,CAAC,CAAC;oBACH,SAAS;gBACX,CAAC;YACH,CAAC;YAED,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACjC,IAAI,CAAC,IAAI;gBAAE,SAAS;YAEpB,cAAc;YACd,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;gBACvB,MAAM,QAAQ,GAAG,IAAA,sBAAW,EAAC,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;gBACzD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;oBAAE,SAAS;YACtC,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAEpB,MAAM,OAAO,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACxC,MAAM,WAAW,GAAG,CAAC,GAAG,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAEhD,KAAK,CAAC,IAAI,CAAC;gBACT,KAAK,EAAE,OAAO;gBACd,KAAK,EAAE,WAAW;gBAClB,KAAK,EAAE,OAAO,CAAC,KAAK,GAAG,CAAC;aACzB,CAAC,CAAC;YAEH,KAAK,CAAC,IAAI,CAAC;gBACT,MAAM;gBACN,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,WAAW;gBACrB,KAAK,EAAE,OAAO,CAAC,KAAK,GAAG,CAAC;aACzB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,CAAC;AACxF,CAAC;AAED,2CAA2C;AAC3C,SAAgB,YAAY,CAC1B,MAAc,EACd,IAAY,EACZ,KAAuB,EACvB,KAAuB;IAEvB,MAAM,GAAG,GAAG,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IAQ1C,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAE3B,MAAM,KAAK,GAAgB,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;IAEhF,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,EAAG,CAAC;QAE/B,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;YAC5B,OAAO;gBACL,KAAK,EAAE,OAAO,CAAC,IAAI;gBACnB,KAAK,EAAE,OAAO,CAAC,QAAQ;gBACvB,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;aAC/B,CAAC;QACJ,CAAC;QAED,MAAM,SAAS,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAChD,KAAK,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,SAAS,EAAE,CAAC;YACzC,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;gBAAE,SAAS;YAClC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAEpB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACjC,IAAI,CAAC,IAAI;gBAAE,SAAS;YAEpB,KAAK,CAAC,IAAI,CAAC;gBACT,MAAM;gBACN,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;gBAC7B,QAAQ,EAAE,CAAC,GAAG,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC;aACtC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,6CAA6C;AAC7C,SAAgB,YAAY,CAC1B,MAAc,EACd,KAAuB,EACvB,KAAuB,EACvB,WAAmB,CAAC;IAEpB,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;IACnF,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC;SAC5B,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;SAC1B,MAAM,CAAC,CAAC,CAAC,EAAuB,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;AACzD,CAAC"}
package/dist/types.d.ts CHANGED
@@ -5,6 +5,7 @@
5
5
  * with Indigenous protocol awareness.
6
6
  */
7
7
  import type { DirectionName, NodeType, RelationalNode, RelationalEdge } from '@medicine-wheel/ontology-core';
8
+ import type { ProtocolGuard, TraversalContext, GuardEscalation } from './guards.js';
8
9
  export interface NodeFilter {
9
10
  type?: NodeType | NodeType[];
10
11
  direction?: DirectionName | DirectionName[];
@@ -58,10 +59,14 @@ export interface TraversalOptions {
58
59
  direction: TraversalDirection;
59
60
  edgeFilter?: EdgeFilter;
60
61
  nodeFilter?: NodeFilter;
61
- /** Stop traversal at nodes without ceremony-honored edges */
62
+ /** Stop traversal at nodes without ceremony-honored edges (built-in guard) */
62
63
  respectCeremonyBoundaries?: boolean;
63
- /** Only follow OCAP-compliant relations */
64
+ /** Only follow OCAP-compliant relations (built-in guard) */
64
65
  ocapOnly?: boolean;
66
+ /** Additional protocol guards evaluated before each edge crossing */
67
+ guards?: ProtocolGuard[];
68
+ /** Runtime context (identity, ceremony state) supplied to the guards */
69
+ context?: TraversalContext;
65
70
  }
66
71
  export interface TraversalPath {
67
72
  nodes: RelationalNode[];
@@ -73,6 +78,8 @@ export interface TraversalResult {
73
78
  paths: TraversalPath[];
74
79
  visitedNodes: Set<string>;
75
80
  maxDepthReached: boolean;
81
+ /** Edge crossings a protocol guard refused, surfaced for delegation. */
82
+ escalations: GuardEscalation[];
76
83
  }
77
84
  export interface AccountabilityReport {
78
85
  totalRelations: number;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@medicine-wheel/relational-query",
3
- "version": "0.4.3",
3
+ "version": "0.4.5",
4
4
  "description": "Query builder for relational webs with Indigenous protocol awareness — traversal, accountability, OCAP® compliance",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -33,7 +33,7 @@
33
33
  "author": "jgwill",
34
34
  "license": "MIT",
35
35
  "dependencies": {
36
- "@medicine-wheel/ontology-core": "^0.4.3"
36
+ "@medicine-wheel/ontology-core": "^0.4.5"
37
37
  },
38
38
  "devDependencies": {
39
39
  "typescript": "^5.7.0"