bikky 0.3.3 → 0.3.6

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 (218) hide show
  1. package/README.md +26 -6
  2. package/dist/cli.js +26 -6
  3. package/dist/cli.js.map +1 -1
  4. package/dist/config.d.ts +22 -0
  5. package/dist/config.d.ts.map +1 -1
  6. package/dist/config.js +255 -3
  7. package/dist/config.js.map +1 -1
  8. package/dist/config.test.d.ts +3 -2
  9. package/dist/config.test.d.ts.map +1 -1
  10. package/dist/config.test.js +95 -6
  11. package/dist/config.test.js.map +1 -1
  12. package/dist/daemon/capture-policy.d.ts +4 -4
  13. package/dist/daemon/capture-policy.d.ts.map +1 -1
  14. package/dist/daemon/capture-policy.js +8 -17
  15. package/dist/daemon/capture-policy.js.map +1 -1
  16. package/dist/daemon/capture-policy.test.js +2 -2
  17. package/dist/daemon/capture-policy.test.js.map +1 -1
  18. package/dist/daemon/consolidation.d.ts +4 -1
  19. package/dist/daemon/consolidation.d.ts.map +1 -1
  20. package/dist/daemon/consolidation.js +18 -4
  21. package/dist/daemon/consolidation.js.map +1 -1
  22. package/dist/daemon/entity-typing.d.ts +42 -0
  23. package/dist/daemon/entity-typing.d.ts.map +1 -0
  24. package/dist/daemon/entity-typing.js +295 -0
  25. package/dist/daemon/entity-typing.js.map +1 -0
  26. package/dist/daemon/entity-typing.test.d.ts +2 -0
  27. package/dist/daemon/entity-typing.test.d.ts.map +1 -0
  28. package/dist/daemon/entity-typing.test.js +50 -0
  29. package/dist/daemon/entity-typing.test.js.map +1 -0
  30. package/dist/daemon/episode-summary.d.ts +4 -8
  31. package/dist/daemon/episode-summary.d.ts.map +1 -1
  32. package/dist/daemon/episode-summary.js +52 -18
  33. package/dist/daemon/episode-summary.js.map +1 -1
  34. package/dist/daemon/episode-summary.test.js +10 -7
  35. package/dist/daemon/episode-summary.test.js.map +1 -1
  36. package/dist/daemon/extraction-quality.test.d.ts +2 -0
  37. package/dist/daemon/extraction-quality.test.d.ts.map +1 -0
  38. package/dist/daemon/extraction-quality.test.js +283 -0
  39. package/dist/daemon/extraction-quality.test.js.map +1 -0
  40. package/dist/daemon/extraction-rules.d.ts +131 -0
  41. package/dist/daemon/extraction-rules.d.ts.map +1 -0
  42. package/dist/daemon/extraction-rules.js +321 -0
  43. package/dist/daemon/extraction-rules.js.map +1 -0
  44. package/dist/daemon/extraction-rules.test.d.ts +2 -0
  45. package/dist/daemon/extraction-rules.test.d.ts.map +1 -0
  46. package/dist/daemon/extraction-rules.test.js +183 -0
  47. package/dist/daemon/extraction-rules.test.js.map +1 -0
  48. package/dist/daemon/extraction.d.ts +19 -1
  49. package/dist/daemon/extraction.d.ts.map +1 -1
  50. package/dist/daemon/extraction.js +183 -26
  51. package/dist/daemon/extraction.js.map +1 -1
  52. package/dist/daemon/extraction.test.js +96 -2
  53. package/dist/daemon/extraction.test.js.map +1 -1
  54. package/dist/daemon/loop.d.ts.map +1 -1
  55. package/dist/daemon/loop.js +22 -0
  56. package/dist/daemon/loop.js.map +1 -1
  57. package/dist/daemon/loop.test.d.ts +2 -0
  58. package/dist/daemon/loop.test.d.ts.map +1 -0
  59. package/dist/daemon/loop.test.js +85 -0
  60. package/dist/daemon/loop.test.js.map +1 -0
  61. package/dist/daemon/maintenance-state.d.ts +36 -0
  62. package/dist/daemon/maintenance-state.d.ts.map +1 -0
  63. package/dist/daemon/maintenance-state.js +95 -0
  64. package/dist/daemon/maintenance-state.js.map +1 -0
  65. package/dist/daemon/maintenance-state.test.d.ts +2 -0
  66. package/dist/daemon/maintenance-state.test.d.ts.map +1 -0
  67. package/dist/daemon/maintenance-state.test.js +56 -0
  68. package/dist/daemon/maintenance-state.test.js.map +1 -0
  69. package/dist/daemon/qdrant.d.ts +37 -1
  70. package/dist/daemon/qdrant.d.ts.map +1 -1
  71. package/dist/daemon/qdrant.js +107 -12
  72. package/dist/daemon/qdrant.js.map +1 -1
  73. package/dist/daemon/qdrant.test.js +57 -1
  74. package/dist/daemon/qdrant.test.js.map +1 -1
  75. package/dist/daemon/relations-vocab.d.ts +44 -0
  76. package/dist/daemon/relations-vocab.d.ts.map +1 -0
  77. package/dist/daemon/relations-vocab.js +168 -0
  78. package/dist/daemon/relations-vocab.js.map +1 -0
  79. package/dist/daemon/relations-vocab.test.d.ts +2 -0
  80. package/dist/daemon/relations-vocab.test.d.ts.map +1 -0
  81. package/dist/daemon/relations-vocab.test.js +69 -0
  82. package/dist/daemon/relations-vocab.test.js.map +1 -0
  83. package/dist/daemon/relations.d.ts +49 -34
  84. package/dist/daemon/relations.d.ts.map +1 -1
  85. package/dist/daemon/relations.js +249 -153
  86. package/dist/daemon/relations.js.map +1 -1
  87. package/dist/daemon/relations.test.d.ts +2 -0
  88. package/dist/daemon/relations.test.d.ts.map +1 -0
  89. package/dist/daemon/relations.test.js +36 -0
  90. package/dist/daemon/relations.test.js.map +1 -0
  91. package/dist/daemon/session-index.d.ts +1 -8
  92. package/dist/daemon/session-index.d.ts.map +1 -1
  93. package/dist/daemon/session-index.js +8 -10
  94. package/dist/daemon/session-index.js.map +1 -1
  95. package/dist/daemon/session-index.test.js +15 -9
  96. package/dist/daemon/session-index.test.js.map +1 -1
  97. package/dist/daemon/session-summary.d.ts +1 -8
  98. package/dist/daemon/session-summary.d.ts.map +1 -1
  99. package/dist/daemon/session-summary.js +17 -12
  100. package/dist/daemon/session-summary.js.map +1 -1
  101. package/dist/daemon/session-summary.test.js +5 -3
  102. package/dist/daemon/session-summary.test.js.map +1 -1
  103. package/dist/daemon/watcher-health.d.ts +20 -0
  104. package/dist/daemon/watcher-health.d.ts.map +1 -0
  105. package/dist/daemon/watcher-health.js +78 -0
  106. package/dist/daemon/watcher-health.js.map +1 -0
  107. package/dist/daemon/watcher-health.test.d.ts +5 -0
  108. package/dist/daemon/watcher-health.test.d.ts.map +1 -0
  109. package/dist/daemon/watcher-health.test.js +96 -0
  110. package/dist/daemon/watcher-health.test.js.map +1 -0
  111. package/dist/daemon/watcher.test.d.ts +3 -2
  112. package/dist/daemon/watcher.test.d.ts.map +1 -1
  113. package/dist/daemon/watcher.test.js +9 -19
  114. package/dist/daemon/watcher.test.js.map +1 -1
  115. package/dist/daemon/workstream-resolver.d.ts +76 -0
  116. package/dist/daemon/workstream-resolver.d.ts.map +1 -0
  117. package/dist/daemon/workstream-resolver.js +180 -0
  118. package/dist/daemon/workstream-resolver.js.map +1 -0
  119. package/dist/daemon/workstream-resolver.test.d.ts +2 -0
  120. package/dist/daemon/workstream-resolver.test.d.ts.map +1 -0
  121. package/dist/daemon/workstream-resolver.test.js +128 -0
  122. package/dist/daemon/workstream-resolver.test.js.map +1 -0
  123. package/dist/daemon/workstream-summary.d.ts +1 -8
  124. package/dist/daemon/workstream-summary.d.ts.map +1 -1
  125. package/dist/daemon/workstream-summary.js +22 -14
  126. package/dist/daemon/workstream-summary.js.map +1 -1
  127. package/dist/daemon/workstream-summary.test.js +9 -6
  128. package/dist/daemon/workstream-summary.test.js.map +1 -1
  129. package/dist/lib/qdrant-client.d.ts +34 -0
  130. package/dist/lib/qdrant-client.d.ts.map +1 -1
  131. package/dist/lib/qdrant-client.js +54 -0
  132. package/dist/lib/qdrant-client.js.map +1 -1
  133. package/dist/lib/qdrant-client.test.js +49 -1
  134. package/dist/lib/qdrant-client.test.js.map +1 -1
  135. package/dist/llm/inference/index.d.ts +2 -1
  136. package/dist/llm/inference/index.d.ts.map +1 -1
  137. package/dist/llm/inference/index.js +37 -2
  138. package/dist/llm/inference/index.js.map +1 -1
  139. package/dist/llm/inference/index.test.js +44 -3
  140. package/dist/llm/inference/index.test.js.map +1 -1
  141. package/dist/llm/inference/providers/bedrock.d.ts +23 -0
  142. package/dist/llm/inference/providers/bedrock.d.ts.map +1 -1
  143. package/dist/llm/inference/providers/bedrock.js +10 -1
  144. package/dist/llm/inference/providers/bedrock.js.map +1 -1
  145. package/dist/llm/inference/providers/bedrock.test.js +49 -2
  146. package/dist/llm/inference/providers/bedrock.test.js.map +1 -1
  147. package/dist/llm/inference/providers/ollama.d.ts.map +1 -1
  148. package/dist/llm/inference/providers/ollama.js +7 -1
  149. package/dist/llm/inference/providers/ollama.js.map +1 -1
  150. package/dist/llm/inference/providers/openai.d.ts.map +1 -1
  151. package/dist/llm/inference/providers/openai.js +7 -1
  152. package/dist/llm/inference/providers/openai.js.map +1 -1
  153. package/dist/llm/inference/providers/openai.test.js +38 -2
  154. package/dist/llm/inference/providers/openai.test.js.map +1 -1
  155. package/dist/llm/inference/providers/portkey.d.ts.map +1 -1
  156. package/dist/llm/inference/providers/portkey.js +7 -1
  157. package/dist/llm/inference/providers/portkey.js.map +1 -1
  158. package/dist/llm/inference/types.d.ts +15 -0
  159. package/dist/llm/inference/types.d.ts.map +1 -1
  160. package/dist/llm/telemetry.d.ts +8 -1
  161. package/dist/llm/telemetry.d.ts.map +1 -1
  162. package/dist/llm/telemetry.js.map +1 -1
  163. package/dist/mcp/helpers.d.ts.map +1 -1
  164. package/dist/mcp/helpers.js +17 -2
  165. package/dist/mcp/helpers.js.map +1 -1
  166. package/dist/mcp/taxonomy.d.ts +6 -18
  167. package/dist/mcp/taxonomy.d.ts.map +1 -1
  168. package/dist/mcp/taxonomy.js +15 -25
  169. package/dist/mcp/taxonomy.js.map +1 -1
  170. package/dist/mcp/taxonomy.test.js +23 -7
  171. package/dist/mcp/taxonomy.test.js.map +1 -1
  172. package/dist/mcp/tools.d.ts.map +1 -1
  173. package/dist/mcp/tools.js +355 -17
  174. package/dist/mcp/tools.js.map +1 -1
  175. package/dist/mcp/tools.test.js +279 -5
  176. package/dist/mcp/tools.test.js.map +1 -1
  177. package/dist/privacy/redaction.d.ts +21 -0
  178. package/dist/privacy/redaction.d.ts.map +1 -0
  179. package/dist/privacy/redaction.js +83 -0
  180. package/dist/privacy/redaction.js.map +1 -0
  181. package/dist/privacy/redaction.test.d.ts +2 -0
  182. package/dist/privacy/redaction.test.d.ts.map +1 -0
  183. package/dist/privacy/redaction.test.js +51 -0
  184. package/dist/privacy/redaction.test.js.map +1 -0
  185. package/dist/prompts/distill.d.ts.map +1 -1
  186. package/dist/prompts/distill.js +3 -2
  187. package/dist/prompts/distill.js.map +1 -1
  188. package/dist/prompts/entity-typing.d.ts +18 -0
  189. package/dist/prompts/entity-typing.d.ts.map +1 -0
  190. package/dist/prompts/entity-typing.js +60 -0
  191. package/dist/prompts/entity-typing.js.map +1 -0
  192. package/dist/prompts/episode-summary.d.ts.map +1 -1
  193. package/dist/prompts/episode-summary.js +17 -3
  194. package/dist/prompts/episode-summary.js.map +1 -1
  195. package/dist/prompts/extraction.d.ts.map +1 -1
  196. package/dist/prompts/extraction.js +114 -5
  197. package/dist/prompts/extraction.js.map +1 -1
  198. package/dist/prompts/index.d.ts +1 -0
  199. package/dist/prompts/index.d.ts.map +1 -1
  200. package/dist/prompts/index.js +1 -0
  201. package/dist/prompts/index.js.map +1 -1
  202. package/dist/prompts/relations.d.ts.map +1 -1
  203. package/dist/prompts/relations.js +72 -4
  204. package/dist/prompts/relations.js.map +1 -1
  205. package/dist/render.d.ts.map +1 -1
  206. package/dist/render.js +7 -1
  207. package/dist/render.js.map +1 -1
  208. package/dist/render.test.js +3 -2
  209. package/dist/render.test.js.map +1 -1
  210. package/dist/status.d.ts +94 -0
  211. package/dist/status.d.ts.map +1 -0
  212. package/dist/status.js +378 -0
  213. package/dist/status.js.map +1 -0
  214. package/dist/status.test.d.ts +5 -0
  215. package/dist/status.test.d.ts.map +1 -0
  216. package/dist/status.test.js +203 -0
  217. package/dist/status.test.js.map +1 -0
  218. package/package.json +1 -1
@@ -0,0 +1,69 @@
1
+ import { test } from "node:test";
2
+ import assert from "node:assert/strict";
3
+ import { CANONICAL_RELATION_TYPES, GENERIC_ENTITY_STOP_LIST, canonicalTypesForPrompt, isGenericEntity, mapToCanonical, } from "./relations-vocab.js";
4
+ test("isGenericEntity: filters generic nouns", () => {
5
+ assert.equal(isGenericEntity("user"), true);
6
+ assert.equal(isGenericEntity("USER"), true);
7
+ assert.equal(isGenericEntity(" data "), true);
8
+ assert.equal(isGenericEntity("error"), true);
9
+ assert.equal(isGenericEntity("session"), true);
10
+ });
11
+ test("isGenericEntity: keeps real entities", () => {
12
+ assert.equal(isGenericEntity("bikky"), false);
13
+ assert.equal(isGenericEntity("qdrant"), false);
14
+ assert.equal(isGenericEntity("tg-bot"), false);
15
+ assert.equal(isGenericEntity("workspace_id"), false);
16
+ });
17
+ test("GENERIC_ENTITY_STOP_LIST: includes the obvious noise words", () => {
18
+ for (const word of ["user", "data", "test", "error", "fact", "memory", "session"]) {
19
+ assert.equal(GENERIC_ENTITY_STOP_LIST.has(word), true, `expected ${word} in stop list`);
20
+ }
21
+ });
22
+ test("mapToCanonical: keeps canonical labels unchanged", () => {
23
+ for (const t of CANONICAL_RELATION_TYPES) {
24
+ const r = mapToCanonical(t);
25
+ assert.equal(r.canonical, t);
26
+ assert.equal(r.changed, false);
27
+ assert.equal(r.inVocabulary, true);
28
+ }
29
+ });
30
+ test("mapToCanonical: 'uses' → 'depends-on'", () => {
31
+ const r = mapToCanonical("uses");
32
+ assert.equal(r.canonical, "depends-on");
33
+ assert.equal(r.changed, true);
34
+ assert.equal(r.inVocabulary, true);
35
+ });
36
+ test("mapToCanonical: 'depends_on' (snake) → 'depends-on'", () => {
37
+ const r = mapToCanonical("depends_on");
38
+ assert.equal(r.canonical, "depends-on");
39
+ assert.equal(r.inVocabulary, true);
40
+ });
41
+ test("mapToCanonical: 'Sends To' (mixed case + space) → 'calls'", () => {
42
+ const r = mapToCanonical("Sends To");
43
+ assert.equal(r.canonical, "calls");
44
+ assert.equal(r.changed, true);
45
+ assert.equal(r.inVocabulary, true);
46
+ });
47
+ test("mapToCanonical: 'manages' → 'owns'", () => {
48
+ assert.equal(mapToCanonical("manages").canonical, "owns");
49
+ });
50
+ test("mapToCanonical: 'replaces' → 'succeeds'", () => {
51
+ assert.equal(mapToCanonical("replaces").canonical, "succeeds");
52
+ });
53
+ test("mapToCanonical: unknown type passes through normalised, marked out-of-vocab", () => {
54
+ const r = mapToCanonical("bikkifies");
55
+ assert.equal(r.canonical, "bikkifies");
56
+ assert.equal(r.inVocabulary, false);
57
+ });
58
+ test("mapToCanonical: unknown type with spaces collapsed", () => {
59
+ const r = mapToCanonical("Wiggles Around");
60
+ assert.equal(r.canonical, "wiggles-around");
61
+ assert.equal(r.inVocabulary, false);
62
+ });
63
+ test("canonicalTypesForPrompt: includes every canonical type", () => {
64
+ const block = canonicalTypesForPrompt();
65
+ for (const t of CANONICAL_RELATION_TYPES) {
66
+ assert.ok(block.includes(t), `missing ${t} in prompt block`);
67
+ }
68
+ });
69
+ //# sourceMappingURL=relations-vocab.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relations-vocab.test.js","sourceRoot":"","sources":["../../src/daemon/relations-vocab.test.ts"],"names":[],"mappings":"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"}
@@ -1,62 +1,77 @@
1
1
  /**
2
- * Relationship Inference
2
+ * Relationship inference.
3
3
  *
4
- * Periodic task that infers typed relationships between entities by analysing
5
- * their shared facts. Runs inside the consolidation tick cadence.
6
- *
7
- * Flow:
8
- * 1. Scroll all non-superseded facts → build entity co-occurrence map
9
- * 2. Filter out pairs that already have a `kind: "relation"` fact
10
- * 3. For the top N pairs by shared-fact count, fetch the actual shared facts
11
- * 4. Send to a cheap LLM for a 2-4 word relationship label
12
- * 5. Store via storeFact with kind: "relation", source: "daemon"
4
+ * Infers typed relationships between entities from recently changed facts. The
5
+ * daemon keeps a persistent cursor so each cycle considers new evidence first
6
+ * instead of rebuilding a whole-collection co-occurrence map.
13
7
  */
14
8
  import type { BikkyConfig } from "../config.js";
15
- import type { LogFn } from "./qdrant.js";
9
+ import type { LogFn, QdrantScrollResult } from "./qdrant.js";
16
10
  declare const setLogger: (fn: LogFn) => void;
17
- /** Canonical pair key — alphabetical so (a,b) === (b,a) */
11
+ /** Canonical pair key — alphabetical so (a,b) === (b,a). */
18
12
  declare const pairKey: (a: string, b: string) => string;
19
- interface CoOccurrence {
13
+ interface ChangedCoOccurrence {
20
14
  entityA: string;
21
15
  entityB: string;
22
- count: number;
23
- factIds: string[];
16
+ triggeringFactIds: string[];
17
+ latestUpdatedAt: string;
24
18
  }
25
- /**
26
- * Scroll ALL non-superseded facts in batches and build a co-occurrence map.
27
- * Returns pairs sorted by count descending.
28
- */
29
- declare const buildCoOccurrenceMap: () => Promise<CoOccurrence[]>;
19
+ interface RelationFact {
20
+ id: string;
21
+ content: string;
22
+ category: string;
23
+ updated_at: string;
24
+ session_id?: string | null;
25
+ workstream_key?: string | null;
26
+ metadata: Record<string, string | number | boolean | null>;
27
+ }
28
+ interface RelationCandidate {
29
+ entityA: string;
30
+ entityB: string;
31
+ triggeringFactIds: string[];
32
+ supportingFactIds: string[];
33
+ facts: Array<{
34
+ id: string;
35
+ content: string;
36
+ category: string;
37
+ }>;
38
+ sessionIds: string[];
39
+ workstreamKeys: string[];
40
+ latestUpdatedAt: string;
41
+ }
42
+ declare const buildChangedCoOccurrenceCandidates: (facts: QdrantScrollResult[]) => ChangedCoOccurrence[];
30
43
  /**
31
44
  * Get the set of entity pairs that already have a daemon-inferred relation.
32
45
  * Returns a Set of pairKeys.
33
46
  */
34
47
  declare const getExistingRelations: () => Promise<Set<string>>;
35
- /**
36
- * Use LLM to infer a relationship label from shared facts.
37
- * Returns null if the LLM can't determine a meaningful relationship.
38
- * The LLM decides directionality — `from` is the subject, `to` is the object.
39
- */
40
- declare const inferRelation: (entityA: string, entityB: string, sharedFacts: Array<{
41
- content: string;
42
- category: string;
43
- }>) => Promise<{
48
+ declare const fetchSupportingFacts: (entityA: string, entityB: string) => Promise<RelationFact[]>;
49
+ declare const inferRelation: (candidate: RelationCandidate) => Promise<{
44
50
  from: string;
45
51
  type: string;
46
52
  to: string;
47
53
  content: string;
48
54
  evidence?: string;
49
55
  confidence?: number;
56
+ inVocabulary?: boolean;
57
+ judgment?: {
58
+ evidence_strength?: number;
59
+ durability?: string;
60
+ directionality_clarity?: string;
61
+ };
50
62
  } | null>;
51
- /**
52
- * Store an inferred relation as a memory fact.
53
- */
54
- declare const storeRelation: (fromEntity: string, toEntity: string, relationType: string, content: string, sharedFactIds: string[], extras?: {
63
+ declare const storeRelation: (fromEntity: string, toEntity: string, relationType: string, content: string, candidate: RelationCandidate, extras?: {
55
64
  evidence?: string;
56
65
  confidence?: number;
66
+ inVocabulary?: boolean;
67
+ judgment?: {
68
+ evidence_strength?: number;
69
+ durability?: string;
70
+ directionality_clarity?: string;
71
+ };
57
72
  }) => Promise<string>;
58
73
  declare const tick: (config: BikkyConfig) => Promise<void>;
59
74
  /** Reset state (for testing). */
60
75
  declare const _reset: () => void;
61
- export { tick, setLogger, _reset, buildCoOccurrenceMap, getExistingRelations, inferRelation, storeRelation, pairKey, };
76
+ export { tick, setLogger, _reset, buildChangedCoOccurrenceCandidates, fetchSupportingFacts, getExistingRelations, inferRelation, storeRelation, pairKey, };
62
77
  //# sourceMappingURL=relations.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"relations.d.ts","sourceRoot":"","sources":["../../src/daemon/relations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAUH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,KAAK,EAAiB,MAAM,aAAa,CAAC;AAOxD,QAAA,MAAM,SAAS,GAAI,IAAI,KAAK,KAAG,IAAuB,CAAC;AAcvD,2DAA2D;AAC3D,QAAA,MAAM,OAAO,GAAI,GAAG,MAAM,EAAE,GAAG,MAAM,KAAG,MAGvC,CAAC;AAEF,UAAU,YAAY;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;GAGG;AACH,QAAA,MAAM,oBAAoB,QAAa,OAAO,CAAC,YAAY,EAAE,CA2E5D,CAAC;AAEF;;;GAGG;AACH,QAAA,MAAM,oBAAoB,QAAa,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CA8CzD,CAAC;AAqBF;;;;GAIG;AACH,QAAA,MAAM,aAAa,GACjB,SAAS,MAAM,EACf,SAAS,MAAM,EACf,aAAa,KAAK,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,KACxD,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAqDpH,CAAC;AAEF;;GAEG;AACH,QAAA,MAAM,aAAa,GACjB,YAAY,MAAM,EAClB,UAAU,MAAM,EAChB,cAAc,MAAM,EACpB,SAAS,MAAM,EACf,eAAe,MAAM,EAAE,EACvB,SAAQ;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAO,KACtD,OAAO,CAAC,MAAM,CAmChB,CAAC;AAIF,QAAA,MAAM,IAAI,GAAU,QAAQ,WAAW,KAAG,OAAO,CAAC,IAAI,CAgErD,CAAC;AAEF,iCAAiC;AACjC,QAAA,MAAM,MAAM,QAAO,IAElB,CAAC;AAEF,OAAO,EACL,IAAI,EACJ,SAAS,EACT,MAAM,EAEN,oBAAoB,EACpB,oBAAoB,EACpB,aAAa,EACb,aAAa,EACb,OAAO,GACR,CAAC"}
1
+ {"version":3,"file":"relations.d.ts","sourceRoot":"","sources":["../../src/daemon/relations.ts"],"names":[],"mappings":"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"}