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.
- package/README.md +26 -6
- package/dist/cli.js +26 -6
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +22 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +255 -3
- package/dist/config.js.map +1 -1
- package/dist/config.test.d.ts +3 -2
- package/dist/config.test.d.ts.map +1 -1
- package/dist/config.test.js +95 -6
- package/dist/config.test.js.map +1 -1
- package/dist/daemon/capture-policy.d.ts +4 -4
- package/dist/daemon/capture-policy.d.ts.map +1 -1
- package/dist/daemon/capture-policy.js +8 -17
- package/dist/daemon/capture-policy.js.map +1 -1
- package/dist/daemon/capture-policy.test.js +2 -2
- package/dist/daemon/capture-policy.test.js.map +1 -1
- package/dist/daemon/consolidation.d.ts +4 -1
- package/dist/daemon/consolidation.d.ts.map +1 -1
- package/dist/daemon/consolidation.js +18 -4
- package/dist/daemon/consolidation.js.map +1 -1
- package/dist/daemon/entity-typing.d.ts +42 -0
- package/dist/daemon/entity-typing.d.ts.map +1 -0
- package/dist/daemon/entity-typing.js +295 -0
- package/dist/daemon/entity-typing.js.map +1 -0
- package/dist/daemon/entity-typing.test.d.ts +2 -0
- package/dist/daemon/entity-typing.test.d.ts.map +1 -0
- package/dist/daemon/entity-typing.test.js +50 -0
- package/dist/daemon/entity-typing.test.js.map +1 -0
- package/dist/daemon/episode-summary.d.ts +4 -8
- package/dist/daemon/episode-summary.d.ts.map +1 -1
- package/dist/daemon/episode-summary.js +52 -18
- package/dist/daemon/episode-summary.js.map +1 -1
- package/dist/daemon/episode-summary.test.js +10 -7
- package/dist/daemon/episode-summary.test.js.map +1 -1
- package/dist/daemon/extraction-quality.test.d.ts +2 -0
- package/dist/daemon/extraction-quality.test.d.ts.map +1 -0
- package/dist/daemon/extraction-quality.test.js +283 -0
- package/dist/daemon/extraction-quality.test.js.map +1 -0
- package/dist/daemon/extraction-rules.d.ts +131 -0
- package/dist/daemon/extraction-rules.d.ts.map +1 -0
- package/dist/daemon/extraction-rules.js +321 -0
- package/dist/daemon/extraction-rules.js.map +1 -0
- package/dist/daemon/extraction-rules.test.d.ts +2 -0
- package/dist/daemon/extraction-rules.test.d.ts.map +1 -0
- package/dist/daemon/extraction-rules.test.js +183 -0
- package/dist/daemon/extraction-rules.test.js.map +1 -0
- package/dist/daemon/extraction.d.ts +19 -1
- package/dist/daemon/extraction.d.ts.map +1 -1
- package/dist/daemon/extraction.js +183 -26
- package/dist/daemon/extraction.js.map +1 -1
- package/dist/daemon/extraction.test.js +96 -2
- package/dist/daemon/extraction.test.js.map +1 -1
- package/dist/daemon/loop.d.ts.map +1 -1
- package/dist/daemon/loop.js +22 -0
- package/dist/daemon/loop.js.map +1 -1
- package/dist/daemon/loop.test.d.ts +2 -0
- package/dist/daemon/loop.test.d.ts.map +1 -0
- package/dist/daemon/loop.test.js +85 -0
- package/dist/daemon/loop.test.js.map +1 -0
- package/dist/daemon/maintenance-state.d.ts +36 -0
- package/dist/daemon/maintenance-state.d.ts.map +1 -0
- package/dist/daemon/maintenance-state.js +95 -0
- package/dist/daemon/maintenance-state.js.map +1 -0
- package/dist/daemon/maintenance-state.test.d.ts +2 -0
- package/dist/daemon/maintenance-state.test.d.ts.map +1 -0
- package/dist/daemon/maintenance-state.test.js +56 -0
- package/dist/daemon/maintenance-state.test.js.map +1 -0
- package/dist/daemon/qdrant.d.ts +37 -1
- package/dist/daemon/qdrant.d.ts.map +1 -1
- package/dist/daemon/qdrant.js +107 -12
- package/dist/daemon/qdrant.js.map +1 -1
- package/dist/daemon/qdrant.test.js +57 -1
- package/dist/daemon/qdrant.test.js.map +1 -1
- package/dist/daemon/relations-vocab.d.ts +44 -0
- package/dist/daemon/relations-vocab.d.ts.map +1 -0
- package/dist/daemon/relations-vocab.js +168 -0
- package/dist/daemon/relations-vocab.js.map +1 -0
- package/dist/daemon/relations-vocab.test.d.ts +2 -0
- package/dist/daemon/relations-vocab.test.d.ts.map +1 -0
- package/dist/daemon/relations-vocab.test.js +69 -0
- package/dist/daemon/relations-vocab.test.js.map +1 -0
- package/dist/daemon/relations.d.ts +49 -34
- package/dist/daemon/relations.d.ts.map +1 -1
- package/dist/daemon/relations.js +249 -153
- package/dist/daemon/relations.js.map +1 -1
- package/dist/daemon/relations.test.d.ts +2 -0
- package/dist/daemon/relations.test.d.ts.map +1 -0
- package/dist/daemon/relations.test.js +36 -0
- package/dist/daemon/relations.test.js.map +1 -0
- package/dist/daemon/session-index.d.ts +1 -8
- package/dist/daemon/session-index.d.ts.map +1 -1
- package/dist/daemon/session-index.js +8 -10
- package/dist/daemon/session-index.js.map +1 -1
- package/dist/daemon/session-index.test.js +15 -9
- package/dist/daemon/session-index.test.js.map +1 -1
- package/dist/daemon/session-summary.d.ts +1 -8
- package/dist/daemon/session-summary.d.ts.map +1 -1
- package/dist/daemon/session-summary.js +17 -12
- package/dist/daemon/session-summary.js.map +1 -1
- package/dist/daemon/session-summary.test.js +5 -3
- package/dist/daemon/session-summary.test.js.map +1 -1
- package/dist/daemon/watcher-health.d.ts +20 -0
- package/dist/daemon/watcher-health.d.ts.map +1 -0
- package/dist/daemon/watcher-health.js +78 -0
- package/dist/daemon/watcher-health.js.map +1 -0
- package/dist/daemon/watcher-health.test.d.ts +5 -0
- package/dist/daemon/watcher-health.test.d.ts.map +1 -0
- package/dist/daemon/watcher-health.test.js +96 -0
- package/dist/daemon/watcher-health.test.js.map +1 -0
- package/dist/daemon/watcher.test.d.ts +3 -2
- package/dist/daemon/watcher.test.d.ts.map +1 -1
- package/dist/daemon/watcher.test.js +9 -19
- package/dist/daemon/watcher.test.js.map +1 -1
- package/dist/daemon/workstream-resolver.d.ts +76 -0
- package/dist/daemon/workstream-resolver.d.ts.map +1 -0
- package/dist/daemon/workstream-resolver.js +180 -0
- package/dist/daemon/workstream-resolver.js.map +1 -0
- package/dist/daemon/workstream-resolver.test.d.ts +2 -0
- package/dist/daemon/workstream-resolver.test.d.ts.map +1 -0
- package/dist/daemon/workstream-resolver.test.js +128 -0
- package/dist/daemon/workstream-resolver.test.js.map +1 -0
- package/dist/daemon/workstream-summary.d.ts +1 -8
- package/dist/daemon/workstream-summary.d.ts.map +1 -1
- package/dist/daemon/workstream-summary.js +22 -14
- package/dist/daemon/workstream-summary.js.map +1 -1
- package/dist/daemon/workstream-summary.test.js +9 -6
- package/dist/daemon/workstream-summary.test.js.map +1 -1
- package/dist/lib/qdrant-client.d.ts +34 -0
- package/dist/lib/qdrant-client.d.ts.map +1 -1
- package/dist/lib/qdrant-client.js +54 -0
- package/dist/lib/qdrant-client.js.map +1 -1
- package/dist/lib/qdrant-client.test.js +49 -1
- package/dist/lib/qdrant-client.test.js.map +1 -1
- package/dist/llm/inference/index.d.ts +2 -1
- package/dist/llm/inference/index.d.ts.map +1 -1
- package/dist/llm/inference/index.js +37 -2
- package/dist/llm/inference/index.js.map +1 -1
- package/dist/llm/inference/index.test.js +44 -3
- package/dist/llm/inference/index.test.js.map +1 -1
- package/dist/llm/inference/providers/bedrock.d.ts +23 -0
- package/dist/llm/inference/providers/bedrock.d.ts.map +1 -1
- package/dist/llm/inference/providers/bedrock.js +10 -1
- package/dist/llm/inference/providers/bedrock.js.map +1 -1
- package/dist/llm/inference/providers/bedrock.test.js +49 -2
- package/dist/llm/inference/providers/bedrock.test.js.map +1 -1
- package/dist/llm/inference/providers/ollama.d.ts.map +1 -1
- package/dist/llm/inference/providers/ollama.js +7 -1
- package/dist/llm/inference/providers/ollama.js.map +1 -1
- package/dist/llm/inference/providers/openai.d.ts.map +1 -1
- package/dist/llm/inference/providers/openai.js +7 -1
- package/dist/llm/inference/providers/openai.js.map +1 -1
- package/dist/llm/inference/providers/openai.test.js +38 -2
- package/dist/llm/inference/providers/openai.test.js.map +1 -1
- package/dist/llm/inference/providers/portkey.d.ts.map +1 -1
- package/dist/llm/inference/providers/portkey.js +7 -1
- package/dist/llm/inference/providers/portkey.js.map +1 -1
- package/dist/llm/inference/types.d.ts +15 -0
- package/dist/llm/inference/types.d.ts.map +1 -1
- package/dist/llm/telemetry.d.ts +8 -1
- package/dist/llm/telemetry.d.ts.map +1 -1
- package/dist/llm/telemetry.js.map +1 -1
- package/dist/mcp/helpers.d.ts.map +1 -1
- package/dist/mcp/helpers.js +17 -2
- package/dist/mcp/helpers.js.map +1 -1
- package/dist/mcp/taxonomy.d.ts +6 -18
- package/dist/mcp/taxonomy.d.ts.map +1 -1
- package/dist/mcp/taxonomy.js +15 -25
- package/dist/mcp/taxonomy.js.map +1 -1
- package/dist/mcp/taxonomy.test.js +23 -7
- package/dist/mcp/taxonomy.test.js.map +1 -1
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +355 -17
- package/dist/mcp/tools.js.map +1 -1
- package/dist/mcp/tools.test.js +279 -5
- package/dist/mcp/tools.test.js.map +1 -1
- package/dist/privacy/redaction.d.ts +21 -0
- package/dist/privacy/redaction.d.ts.map +1 -0
- package/dist/privacy/redaction.js +83 -0
- package/dist/privacy/redaction.js.map +1 -0
- package/dist/privacy/redaction.test.d.ts +2 -0
- package/dist/privacy/redaction.test.d.ts.map +1 -0
- package/dist/privacy/redaction.test.js +51 -0
- package/dist/privacy/redaction.test.js.map +1 -0
- package/dist/prompts/distill.d.ts.map +1 -1
- package/dist/prompts/distill.js +3 -2
- package/dist/prompts/distill.js.map +1 -1
- package/dist/prompts/entity-typing.d.ts +18 -0
- package/dist/prompts/entity-typing.d.ts.map +1 -0
- package/dist/prompts/entity-typing.js +60 -0
- package/dist/prompts/entity-typing.js.map +1 -0
- package/dist/prompts/episode-summary.d.ts.map +1 -1
- package/dist/prompts/episode-summary.js +17 -3
- package/dist/prompts/episode-summary.js.map +1 -1
- package/dist/prompts/extraction.d.ts.map +1 -1
- package/dist/prompts/extraction.js +114 -5
- package/dist/prompts/extraction.js.map +1 -1
- package/dist/prompts/index.d.ts +1 -0
- package/dist/prompts/index.d.ts.map +1 -1
- package/dist/prompts/index.js +1 -0
- package/dist/prompts/index.js.map +1 -1
- package/dist/prompts/relations.d.ts.map +1 -1
- package/dist/prompts/relations.js +72 -4
- package/dist/prompts/relations.js.map +1 -1
- package/dist/render.d.ts.map +1 -1
- package/dist/render.js +7 -1
- package/dist/render.js.map +1 -1
- package/dist/render.test.js +3 -2
- package/dist/render.test.js.map +1 -1
- package/dist/status.d.ts +94 -0
- package/dist/status.d.ts.map +1 -0
- package/dist/status.js +378 -0
- package/dist/status.js.map +1 -0
- package/dist/status.test.d.ts +5 -0
- package/dist/status.test.d.ts.map +1 -0
- package/dist/status.test.js +203 -0
- package/dist/status.test.js.map +1 -0
- 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
|
|
2
|
+
* Relationship inference.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
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
|
|
13
|
+
interface ChangedCoOccurrence {
|
|
20
14
|
entityA: string;
|
|
21
15
|
entityB: string;
|
|
22
|
-
|
|
23
|
-
|
|
16
|
+
triggeringFactIds: string[];
|
|
17
|
+
latestUpdatedAt: string;
|
|
24
18
|
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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
|
-
|
|
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,
|
|
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
|
|
1
|
+
{"version":3,"file":"relations.d.ts","sourceRoot":"","sources":["../../src/daemon/relations.ts"],"names":[],"mappings":"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"}
|