opencode-graphiti 0.1.5 → 0.1.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/esm/src/config.d.ts.map +1 -1
- package/esm/src/config.js +4 -2
- package/esm/src/handlers/chat.d.ts +2 -1
- package/esm/src/handlers/chat.d.ts.map +1 -1
- package/esm/src/handlers/chat.js +89 -49
- package/esm/src/handlers/compacting.d.ts +1 -0
- package/esm/src/handlers/compacting.d.ts.map +1 -1
- package/esm/src/handlers/compacting.js +2 -1
- package/esm/src/handlers/event.d.ts +2 -2
- package/esm/src/handlers/event.d.ts.map +1 -1
- package/esm/src/handlers/event.js +52 -1
- package/esm/src/handlers/system.d.ts +11 -0
- package/esm/src/handlers/system.d.ts.map +1 -0
- package/esm/src/handlers/system.js +18 -0
- package/esm/src/index.d.ts.map +1 -1
- package/esm/src/index.js +8 -2
- package/esm/src/services/client.d.ts +8 -1
- package/esm/src/services/client.d.ts.map +1 -1
- package/esm/src/services/client.js +23 -0
- package/esm/src/services/compaction.d.ts +10 -0
- package/esm/src/services/compaction.d.ts.map +1 -1
- package/esm/src/services/compaction.js +106 -18
- package/esm/src/services/context-limit.d.ts +2 -8
- package/esm/src/services/context-limit.d.ts.map +1 -1
- package/esm/src/services/context-limit.js +3 -1
- package/esm/src/services/context.d.ts +27 -2
- package/esm/src/services/context.d.ts.map +1 -1
- package/esm/src/services/context.js +107 -13
- package/esm/src/services/logger.d.ts.map +1 -1
- package/esm/src/services/logger.js +1 -2
- package/esm/src/session.d.ts +6 -25
- package/esm/src/session.d.ts.map +1 -1
- package/esm/src/session.js +4 -7
- package/esm/src/types/index.d.ts +8 -2
- package/esm/src/types/index.d.ts.map +1 -1
- package/package.json +2 -3
- package/script/src/config.d.ts.map +1 -1
- package/script/src/config.js +4 -2
- package/script/src/handlers/chat.d.ts +2 -1
- package/script/src/handlers/chat.d.ts.map +1 -1
- package/script/src/handlers/chat.js +88 -48
- package/script/src/handlers/compacting.d.ts +1 -0
- package/script/src/handlers/compacting.d.ts.map +1 -1
- package/script/src/handlers/compacting.js +2 -1
- package/script/src/handlers/event.d.ts +2 -2
- package/script/src/handlers/event.d.ts.map +1 -1
- package/script/src/handlers/event.js +52 -1
- package/script/src/handlers/system.d.ts +11 -0
- package/script/src/handlers/system.d.ts.map +1 -0
- package/script/src/handlers/system.js +21 -0
- package/script/src/index.d.ts.map +1 -1
- package/script/src/index.js +8 -2
- package/script/src/services/client.d.ts +8 -1
- package/script/src/services/client.d.ts.map +1 -1
- package/script/src/services/client.js +23 -0
- package/script/src/services/compaction.d.ts +10 -0
- package/script/src/services/compaction.d.ts.map +1 -1
- package/script/src/services/compaction.js +108 -17
- package/script/src/services/context-limit.d.ts +2 -8
- package/script/src/services/context-limit.d.ts.map +1 -1
- package/script/src/services/context-limit.js +3 -1
- package/script/src/services/context.d.ts +27 -2
- package/script/src/services/context.d.ts.map +1 -1
- package/script/src/services/context.js +118 -14
- package/script/src/services/logger.d.ts.map +1 -1
- package/script/src/services/logger.js +1 -35
- package/script/src/session.d.ts +6 -25
- package/script/src/session.d.ts.map +1 -1
- package/script/src/session.js +4 -7
- package/script/src/types/index.d.ts +8 -2
- package/script/src/types/index.d.ts.map +1 -1
- package/esm/_dnt.shims.d.ts +0 -6
- package/esm/_dnt.shims.d.ts.map +0 -1
- package/esm/_dnt.shims.js +0 -61
- package/script/_dnt.shims.d.ts +0 -6
- package/script/_dnt.shims.d.ts.map +0 -1
- package/script/_dnt.shims.js +0 -65
|
@@ -1,11 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
list: (options?: {
|
|
4
|
-
directory?: string;
|
|
5
|
-
}) => Promise<unknown>;
|
|
6
|
-
};
|
|
7
|
-
}
|
|
8
|
-
export declare function resolveContextLimit(providerID: string, modelID: string, client: ProviderListClient, directory: string): Promise<number>;
|
|
1
|
+
import type { OpencodeClient } from "@opencode-ai/sdk";
|
|
2
|
+
export declare function resolveContextLimit(providerID: string, modelID: string, client: OpencodeClient, directory: string): Promise<number>;
|
|
9
3
|
/**
|
|
10
4
|
* Calculate the character budget for memory injection
|
|
11
5
|
* (5% of context limit * 4 chars/token).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-limit.d.ts","sourceRoot":"","sources":["../../../src/src/services/context-limit.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"context-limit.d.ts","sourceRoot":"","sources":["../../../src/src/services/context-limit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAOvD,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,cAAc,EACtB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,CAiCjB;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAErE"}
|
|
@@ -11,7 +11,9 @@ async function resolveContextLimit(providerID, modelID, client, directory) {
|
|
|
11
11
|
if (cached)
|
|
12
12
|
return cached;
|
|
13
13
|
try {
|
|
14
|
-
const providers = await client.provider.list({
|
|
14
|
+
const providers = await client.provider.list({
|
|
15
|
+
query: { directory },
|
|
16
|
+
});
|
|
15
17
|
const list = providers.providers ?? [];
|
|
16
18
|
for (const provider of list) {
|
|
17
19
|
const providerInfo = provider;
|
|
@@ -1,8 +1,33 @@
|
|
|
1
1
|
import type { GraphitiFact, GraphitiNode } from "../types/index.js";
|
|
2
|
-
export declare const
|
|
2
|
+
export declare const parseDate: (value?: string) => Date | null;
|
|
3
|
+
export declare const isFactInvalid: (fact: GraphitiFact, now: Date) => boolean;
|
|
4
|
+
export declare const annotateStaleFact: (fact: GraphitiFact, now: Date, factStaleDays: number) => GraphitiFact;
|
|
5
|
+
export declare const sortFactsByRecency: (facts: GraphitiFact[]) => GraphitiFact[];
|
|
6
|
+
export declare const filterAndAnnotateFacts: (facts: GraphitiFact[], options?: {
|
|
7
|
+
factStaleDays?: number;
|
|
8
|
+
now?: Date;
|
|
9
|
+
}) => GraphitiFact[];
|
|
10
|
+
export declare const formatFactLine: (fact: GraphitiFact) => string;
|
|
11
|
+
export declare const formatFactLines: (facts: GraphitiFact[], options?: {
|
|
12
|
+
factStaleDays?: number;
|
|
13
|
+
now?: Date;
|
|
14
|
+
}) => string[];
|
|
3
15
|
export declare const formatNodeLines: (nodes: GraphitiNode[]) => string[];
|
|
16
|
+
export declare const deduplicateFactsByUuid: (facts: GraphitiFact[]) => GraphitiFact[];
|
|
17
|
+
export declare const deduplicateNodesByUuid: (nodes: GraphitiNode[]) => GraphitiNode[];
|
|
18
|
+
export declare const removeNodesReferencedByFacts: (facts: GraphitiFact[], nodes: GraphitiNode[]) => GraphitiNode[];
|
|
19
|
+
export declare const deduplicateContext: (params: {
|
|
20
|
+
facts: GraphitiFact[];
|
|
21
|
+
nodes: GraphitiNode[];
|
|
22
|
+
}) => {
|
|
23
|
+
facts: GraphitiFact[];
|
|
24
|
+
nodes: GraphitiNode[];
|
|
25
|
+
};
|
|
4
26
|
/**
|
|
5
27
|
* Format Graphiti facts and nodes into a user-facing context block.
|
|
6
28
|
*/
|
|
7
|
-
export declare function formatMemoryContext(facts: GraphitiFact[], nodes: GraphitiNode[]
|
|
29
|
+
export declare function formatMemoryContext(facts: GraphitiFact[], nodes: GraphitiNode[], options?: {
|
|
30
|
+
factStaleDays?: number;
|
|
31
|
+
now?: Date;
|
|
32
|
+
}): string;
|
|
8
33
|
//# sourceMappingURL=context.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/src/services/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/src/services/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAIpE,eAAO,MAAM,SAAS,GAAI,QAAQ,MAAM,KAAG,IAAI,GAAG,IAKjD,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,MAAM,YAAY,EAAE,KAAK,IAAI,KAAG,OAQ7D,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC5B,MAAM,YAAY,EAClB,KAAK,IAAI,EACT,eAAe,MAAM,KACpB,YAUF,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,OAAO,YAAY,EAAE,KAAG,YAAY,EAWtE,CAAC;AAEF,eAAO,MAAM,sBAAsB,GACjC,OAAO,YAAY,EAAE,EACrB,UAAU;IACR,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ,KACA,YAAY,EAMd,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,MAAM,YAAY,KAAG,MAMnD,CAAC;AAEF,eAAO,MAAM,eAAe,GAC1B,OAAO,YAAY,EAAE,EACrB,UAAU;IACR,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ,KACA,MAAM,EAGR,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,OAAO,YAAY,EAAE,KAAG,MAAM,EAK1D,CAAC;AAEL,eAAO,MAAM,sBAAsB,GACjC,OAAO,YAAY,EAAE,KACpB,YAAY,EASd,CAAC;AAEF,eAAO,MAAM,sBAAsB,GACjC,OAAO,YAAY,EAAE,KACpB,YAAY,EASd,CAAC;AAEF,eAAO,MAAM,4BAA4B,GACvC,OAAO,YAAY,EAAE,EACrB,OAAO,YAAY,EAAE,KACpB,YAAY,EAOd,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,QAAQ;IACzC,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,KAAK,EAAE,YAAY,EAAE,CAAC;CACvB,KAAG;IAAE,KAAK,EAAE,YAAY,EAAE,CAAC;IAAC,KAAK,EAAE,YAAY,EAAE,CAAA;CAQjD,CAAC;AAEF;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,YAAY,EAAE,EACrB,KAAK,EAAE,YAAY,EAAE,EACrB,OAAO,CAAC,EAAE;IACR,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ,GACA,MAAM,CA6BR"}
|
|
@@ -1,43 +1,147 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.formatNodeLines = exports.formatFactLines = void 0;
|
|
3
|
+
exports.deduplicateContext = exports.removeNodesReferencedByFacts = exports.deduplicateNodesByUuid = exports.deduplicateFactsByUuid = exports.formatNodeLines = exports.formatFactLines = exports.formatFactLine = exports.filterAndAnnotateFacts = exports.sortFactsByRecency = exports.annotateStaleFact = exports.isFactInvalid = exports.parseDate = void 0;
|
|
4
4
|
exports.formatMemoryContext = formatMemoryContext;
|
|
5
|
-
const
|
|
5
|
+
const DAY_MS = 24 * 60 * 60 * 1000;
|
|
6
|
+
const parseDate = (value) => {
|
|
7
|
+
if (!value)
|
|
8
|
+
return null;
|
|
9
|
+
const parsed = Date.parse(value);
|
|
10
|
+
if (Number.isNaN(parsed))
|
|
11
|
+
return null;
|
|
12
|
+
return new Date(parsed);
|
|
13
|
+
};
|
|
14
|
+
exports.parseDate = parseDate;
|
|
15
|
+
const isFactInvalid = (fact, now) => {
|
|
16
|
+
const invalidAt = (0, exports.parseDate)(fact.invalid_at);
|
|
17
|
+
if (invalidAt && invalidAt.getTime() < now.getTime())
|
|
18
|
+
return true;
|
|
19
|
+
const validAt = (0, exports.parseDate)(fact.valid_at);
|
|
20
|
+
if (validAt && validAt.getTime() > now.getTime())
|
|
21
|
+
return true;
|
|
22
|
+
return false;
|
|
23
|
+
};
|
|
24
|
+
exports.isFactInvalid = isFactInvalid;
|
|
25
|
+
const annotateStaleFact = (fact, now, factStaleDays) => {
|
|
26
|
+
const validAt = (0, exports.parseDate)(fact.valid_at);
|
|
27
|
+
if (!validAt)
|
|
28
|
+
return fact;
|
|
29
|
+
const ageDays = Math.floor((now.getTime() - validAt.getTime()) / DAY_MS);
|
|
30
|
+
if (ageDays < 0)
|
|
31
|
+
return fact;
|
|
32
|
+
if (ageDays < factStaleDays)
|
|
33
|
+
return fact;
|
|
34
|
+
return {
|
|
35
|
+
...fact,
|
|
36
|
+
fact: `[stale: ${ageDays} days ago] ${fact.fact}`,
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
exports.annotateStaleFact = annotateStaleFact;
|
|
40
|
+
const sortFactsByRecency = (facts) => {
|
|
41
|
+
const indexed = facts.map((fact, index) => ({
|
|
42
|
+
fact,
|
|
43
|
+
index,
|
|
44
|
+
time: (0, exports.parseDate)(fact.valid_at)?.getTime() ?? -Infinity,
|
|
45
|
+
}));
|
|
46
|
+
indexed.sort((a, b) => {
|
|
47
|
+
if (a.time !== b.time)
|
|
48
|
+
return b.time - a.time;
|
|
49
|
+
return a.index - b.index;
|
|
50
|
+
});
|
|
51
|
+
return indexed.map((entry) => entry.fact);
|
|
52
|
+
};
|
|
53
|
+
exports.sortFactsByRecency = sortFactsByRecency;
|
|
54
|
+
const filterAndAnnotateFacts = (facts, options) => {
|
|
55
|
+
const now = options?.now ?? new Date();
|
|
56
|
+
const factStaleDays = options?.factStaleDays ?? 30;
|
|
57
|
+
const filtered = facts.filter((fact) => !(0, exports.isFactInvalid)(fact, now));
|
|
58
|
+
const sorted = (0, exports.sortFactsByRecency)(filtered);
|
|
59
|
+
return sorted.map((fact) => (0, exports.annotateStaleFact)(fact, now, factStaleDays));
|
|
60
|
+
};
|
|
61
|
+
exports.filterAndAnnotateFacts = filterAndAnnotateFacts;
|
|
62
|
+
const formatFactLine = (fact) => {
|
|
6
63
|
const entities = [];
|
|
7
64
|
if (fact.source_node?.name)
|
|
8
65
|
entities.push(fact.source_node.name);
|
|
9
66
|
if (fact.target_node?.name)
|
|
10
67
|
entities.push(fact.target_node.name);
|
|
11
68
|
const entityStr = entities.length > 0 ? ` [${entities.join(" -> ")}]` : "";
|
|
12
|
-
return
|
|
13
|
-
}
|
|
69
|
+
return `- ${fact.fact}${entityStr}`;
|
|
70
|
+
};
|
|
71
|
+
exports.formatFactLine = formatFactLine;
|
|
72
|
+
const formatFactLines = (facts, options) => {
|
|
73
|
+
const annotated = (0, exports.filterAndAnnotateFacts)(facts, options);
|
|
74
|
+
return annotated.map((fact) => (0, exports.formatFactLine)(fact));
|
|
75
|
+
};
|
|
14
76
|
exports.formatFactLines = formatFactLines;
|
|
15
77
|
const formatNodeLines = (nodes) => nodes.map((node) => {
|
|
16
78
|
const labels = node.labels?.length ? ` (${node.labels.join(", ")})` : "";
|
|
17
79
|
const summary = node.summary ? `: ${node.summary}` : "";
|
|
18
|
-
return
|
|
80
|
+
return `- **${node.name}**${labels}${summary}`;
|
|
19
81
|
});
|
|
20
82
|
exports.formatNodeLines = formatNodeLines;
|
|
83
|
+
const deduplicateFactsByUuid = (facts) => {
|
|
84
|
+
const seen = new Set();
|
|
85
|
+
const deduped = [];
|
|
86
|
+
for (const fact of facts) {
|
|
87
|
+
if (seen.has(fact.uuid))
|
|
88
|
+
continue;
|
|
89
|
+
seen.add(fact.uuid);
|
|
90
|
+
deduped.push(fact);
|
|
91
|
+
}
|
|
92
|
+
return deduped;
|
|
93
|
+
};
|
|
94
|
+
exports.deduplicateFactsByUuid = deduplicateFactsByUuid;
|
|
95
|
+
const deduplicateNodesByUuid = (nodes) => {
|
|
96
|
+
const seen = new Set();
|
|
97
|
+
const deduped = [];
|
|
98
|
+
for (const node of nodes) {
|
|
99
|
+
if (seen.has(node.uuid))
|
|
100
|
+
continue;
|
|
101
|
+
seen.add(node.uuid);
|
|
102
|
+
deduped.push(node);
|
|
103
|
+
}
|
|
104
|
+
return deduped;
|
|
105
|
+
};
|
|
106
|
+
exports.deduplicateNodesByUuid = deduplicateNodesByUuid;
|
|
107
|
+
const removeNodesReferencedByFacts = (facts, nodes) => {
|
|
108
|
+
const factNodeUuids = new Set();
|
|
109
|
+
for (const fact of facts) {
|
|
110
|
+
if (fact.source_node?.uuid)
|
|
111
|
+
factNodeUuids.add(fact.source_node.uuid);
|
|
112
|
+
if (fact.target_node?.uuid)
|
|
113
|
+
factNodeUuids.add(fact.target_node.uuid);
|
|
114
|
+
}
|
|
115
|
+
return nodes.filter((node) => !factNodeUuids.has(node.uuid));
|
|
116
|
+
};
|
|
117
|
+
exports.removeNodesReferencedByFacts = removeNodesReferencedByFacts;
|
|
118
|
+
const deduplicateContext = (params) => {
|
|
119
|
+
const dedupedFacts = (0, exports.deduplicateFactsByUuid)(params.facts);
|
|
120
|
+
const dedupedNodes = (0, exports.deduplicateNodesByUuid)(params.nodes);
|
|
121
|
+
const filteredNodes = (0, exports.removeNodesReferencedByFacts)(dedupedFacts, dedupedNodes);
|
|
122
|
+
return { facts: dedupedFacts, nodes: filteredNodes };
|
|
123
|
+
};
|
|
124
|
+
exports.deduplicateContext = deduplicateContext;
|
|
21
125
|
/**
|
|
22
126
|
* Format Graphiti facts and nodes into a user-facing context block.
|
|
23
127
|
*/
|
|
24
|
-
function formatMemoryContext(facts, nodes) {
|
|
128
|
+
function formatMemoryContext(facts, nodes, options) {
|
|
25
129
|
if (facts.length === 0 && nodes.length === 0) {
|
|
26
130
|
return "";
|
|
27
131
|
}
|
|
28
132
|
const sections = [];
|
|
29
|
-
sections.push("
|
|
30
|
-
sections.push("
|
|
133
|
+
sections.push("# Persistent Memory (from Graphiti Knowledge Graph)");
|
|
134
|
+
sections.push("The following information was retrieved from your persistent memory.");
|
|
135
|
+
sections.push("Use this context to inform your responses, but do not mention it unless asked.");
|
|
31
136
|
if (facts.length > 0) {
|
|
32
|
-
sections.push("
|
|
33
|
-
sections.push(
|
|
34
|
-
sections.push(
|
|
137
|
+
sections.push("");
|
|
138
|
+
sections.push("## Known Facts");
|
|
139
|
+
sections.push(...(0, exports.formatFactLines)(facts, options));
|
|
35
140
|
}
|
|
36
141
|
if (nodes.length > 0) {
|
|
37
|
-
sections.push("
|
|
142
|
+
sections.push("");
|
|
143
|
+
sections.push("## Known Entities");
|
|
38
144
|
sections.push(...(0, exports.formatNodeLines)(nodes));
|
|
39
|
-
sections.push("</nodes>");
|
|
40
145
|
}
|
|
41
|
-
sections.push("</memory>");
|
|
42
146
|
return sections.join("\n");
|
|
43
147
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/src/services/logger.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/src/services/logger.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,MAAM;oBACD,OAAO,EAAE;oBAGT,OAAO,EAAE;qBAGR,OAAO,EAAE;qBAGT,OAAO,EAAE;CAG3B,CAAC"}
|
|
@@ -1,45 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
4
|
};
|
|
38
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
6
|
exports.logger = void 0;
|
|
40
|
-
const dntShim = __importStar(require("../../_dnt.shims.js"));
|
|
41
7
|
const node_process_1 = __importDefault(require("node:process"));
|
|
42
|
-
const console =
|
|
8
|
+
const console = globalThis.console;
|
|
43
9
|
const PREFIX = "[graphiti]";
|
|
44
10
|
exports.logger = {
|
|
45
11
|
info: (...args) => {
|
package/script/src/session.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { OpencodeClient } from "@opencode-ai/sdk";
|
|
1
2
|
import type { GraphitiClient } from "./services/client.js";
|
|
2
3
|
/**
|
|
3
4
|
* Per-session state tracked by the plugin.
|
|
@@ -9,8 +10,10 @@ export type SessionState = {
|
|
|
9
10
|
userGroupId: string;
|
|
10
11
|
/** Whether memories have been injected into this session yet. */
|
|
11
12
|
injectedMemories: boolean;
|
|
12
|
-
/**
|
|
13
|
-
|
|
13
|
+
/** Fact UUIDs included in the last memory injection. */
|
|
14
|
+
lastInjectionFactUuids: Set<string>;
|
|
15
|
+
/** Cached formatted memory context for system prompt injection. */
|
|
16
|
+
cachedMemoryContext?: string;
|
|
14
17
|
/** Count of messages observed in this session. */
|
|
15
18
|
messageCount: number;
|
|
16
19
|
/** Buffered message strings awaiting flush. */
|
|
@@ -20,28 +23,6 @@ export type SessionState = {
|
|
|
20
23
|
/** True when this session is the primary (non-subagent) session. */
|
|
21
24
|
isMain: boolean;
|
|
22
25
|
};
|
|
23
|
-
/**
|
|
24
|
-
* Minimal SDK client interface needed for session operations.
|
|
25
|
-
*/
|
|
26
|
-
export interface SdkSessionClient {
|
|
27
|
-
session: {
|
|
28
|
-
/** Retrieve session metadata by ID. */
|
|
29
|
-
get: (args: {
|
|
30
|
-
path: {
|
|
31
|
-
id: string;
|
|
32
|
-
};
|
|
33
|
-
}) => Promise<unknown>;
|
|
34
|
-
/** List recent messages for a session. */
|
|
35
|
-
messages: (args: {
|
|
36
|
-
sessionID: string;
|
|
37
|
-
limit?: number;
|
|
38
|
-
}) => Promise<unknown>;
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Manages session lifecycle, parent ID resolution, message buffering,
|
|
43
|
-
* and flushing of pending messages to Graphiti.
|
|
44
|
-
*/
|
|
45
26
|
/**
|
|
46
27
|
* Tracks per-session state, parent resolution, message buffering,
|
|
47
28
|
* and flushing pending messages to Graphiti.
|
|
@@ -55,7 +36,7 @@ export declare class SessionManager {
|
|
|
55
36
|
private parentIdCache;
|
|
56
37
|
private pendingAssistantMessages;
|
|
57
38
|
private bufferedAssistantMessageIds;
|
|
58
|
-
constructor(defaultGroupId: string, defaultUserGroupId: string, sdkClient:
|
|
39
|
+
constructor(defaultGroupId: string, defaultUserGroupId: string, sdkClient: OpencodeClient, graphitiClient: GraphitiClient);
|
|
59
40
|
/** Get the current session state, if present. */
|
|
60
41
|
getState(sessionId: string): SessionState | undefined;
|
|
61
42
|
/** Persist session state for the given session ID. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/src/session.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/src/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EAGf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAI3D;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,0CAA0C;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,kDAAkD;IAClD,WAAW,EAAE,MAAM,CAAC;IACpB,iEAAiE;IACjE,gBAAgB,EAAE,OAAO,CAAC;IAC1B,wDAAwD;IACxD,sBAAsB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACpC,mEAAmE;IACnE,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kDAAkD;IAClD,YAAY,EAAE,MAAM,CAAC;IACrB,+CAA+C;IAC/C,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,sCAAsC;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,oEAAoE;IACpE,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF;;;GAGG;AACH,qBAAa,cAAc;IAUvB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAZjC,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,aAAa,CAAoC;IACzD,OAAO,CAAC,wBAAwB,CAG5B;IACJ,OAAO,CAAC,2BAA2B,CAAqB;gBAGrC,cAAc,EAAE,MAAM,EACtB,kBAAkB,EAAE,MAAM,EAC1B,SAAS,EAAE,cAAc,EACzB,cAAc,EAAE,cAAc;IAGjD,iDAAiD;IACjD,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAIrD,sDAAsD;IACtD,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI;IAItD,gDAAgD;IAChD,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAI7D,qDAAqD;IAC/C,eAAe,CACnB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAsBrC,yDAAyD;IACnD,mBAAmB,CACvB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;QAAE,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC;IA0B7D,yDAAyD;IACnD,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAK5D,6DAA6D;IAC7D,mBAAmB,CACjB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,GACX,IAAI;IAKP,gEAAgE;IAChE,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;IAKlE;;OAEG;IACH,wBAAwB,CACtB,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,IAAI;IAwCP,+EAA+E;IACzE,oBAAoB,CACxB,SAAS,EAAE,MAAM,EACjB,iBAAiB,EAAE,MAAM,EACzB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC;IAgFhB,iDAAiD;IACjD,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAKlE,uCAAuC;IACvC,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;YAexB,2BAA2B;CAiC1C"}
|
package/script/src/session.js
CHANGED
|
@@ -3,10 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.SessionManager = void 0;
|
|
4
4
|
const logger_js_1 = require("./services/logger.js");
|
|
5
5
|
const utils_js_1 = require("./utils.js");
|
|
6
|
-
/**
|
|
7
|
-
* Manages session lifecycle, parent ID resolution, message buffering,
|
|
8
|
-
* and flushing of pending messages to Graphiti.
|
|
9
|
-
*/
|
|
10
6
|
/**
|
|
11
7
|
* Tracks per-session state, parent resolution, message buffering,
|
|
12
8
|
* and flushing pending messages to Graphiti.
|
|
@@ -113,7 +109,8 @@ class SessionManager {
|
|
|
113
109
|
groupId: this.defaultGroupId,
|
|
114
110
|
userGroupId: this.defaultUserGroupId,
|
|
115
111
|
injectedMemories: false,
|
|
116
|
-
|
|
112
|
+
lastInjectionFactUuids: new Set(),
|
|
113
|
+
cachedMemoryContext: undefined,
|
|
117
114
|
messageCount: 0,
|
|
118
115
|
pendingMessages: [],
|
|
119
116
|
contextLimit: 200_000,
|
|
@@ -274,8 +271,8 @@ class SessionManager {
|
|
|
274
271
|
async fetchLatestAssistantMessage(sessionId) {
|
|
275
272
|
try {
|
|
276
273
|
const response = await this.sdkClient.session.messages({
|
|
277
|
-
|
|
278
|
-
limit: 20,
|
|
274
|
+
path: { id: sessionId },
|
|
275
|
+
query: { limit: 20 },
|
|
279
276
|
});
|
|
280
277
|
const payload = response && typeof response === "object" &&
|
|
281
278
|
"data" in response
|
|
@@ -4,8 +4,10 @@ export interface GraphitiConfig {
|
|
|
4
4
|
endpoint: string;
|
|
5
5
|
/** Prefix for group IDs to namespace project memories. */
|
|
6
6
|
groupIdPrefix: string;
|
|
7
|
-
/**
|
|
8
|
-
|
|
7
|
+
/** Jaccard similarity threshold below which reinjection occurs. */
|
|
8
|
+
driftThreshold: number;
|
|
9
|
+
/** Number of days after which facts are considered stale. */
|
|
10
|
+
factStaleDays: number;
|
|
9
11
|
}
|
|
10
12
|
/** A fact retrieved from the Graphiti knowledge graph. */
|
|
11
13
|
export interface GraphitiFact {
|
|
@@ -59,6 +61,10 @@ export interface GraphitiEpisode {
|
|
|
59
61
|
content: string;
|
|
60
62
|
/** Optional episode source type. */
|
|
61
63
|
source?: string;
|
|
64
|
+
/** Optional source description for the episode. */
|
|
65
|
+
sourceDescription?: string;
|
|
66
|
+
/** Optional source description (snake_case payload). */
|
|
67
|
+
source_description?: string;
|
|
62
68
|
/** Optional episode creation timestamp. */
|
|
63
69
|
created_at?: string;
|
|
64
70
|
/** Optional labels associated with the episode. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/src/types/index.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,MAAM,WAAW,cAAc;IAC7B,+CAA+C;IAC/C,QAAQ,EAAE,MAAM,CAAC;IACjB,0DAA0D;IAC1D,aAAa,EAAE,MAAM,CAAC;IACtB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/src/types/index.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,MAAM,WAAW,cAAc;IAC7B,+CAA+C;IAC/C,QAAQ,EAAE,MAAM,CAAC;IACjB,0DAA0D;IAC1D,aAAa,EAAE,MAAM,CAAC;IACtB,mEAAmE;IACnE,cAAc,EAAE,MAAM,CAAC;IACvB,6DAA6D;IAC7D,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,0DAA0D;AAC1D,MAAM,WAAW,YAAY;IAC3B,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uCAAuC;IACvC,WAAW,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,uCAAuC;IACvC,WAAW,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAC9C;AAED,kDAAkD;AAClD,MAAM,WAAW,qBAAqB;IACpC,mCAAmC;IACnC,KAAK,EAAE,YAAY,EAAE,CAAC;CACvB;AAED,0DAA0D;AAC1D,MAAM,WAAW,YAAY;IAC3B,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,gCAAgC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gDAAgD;IAChD,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,kDAAkD;AAClD,MAAM,WAAW,qBAAqB;IACpC,mCAAmC;IACnC,KAAK,EAAE,YAAY,EAAE,CAAC;CACvB;AAED,iDAAiD;AACjD,MAAM,WAAW,eAAe;IAC9B,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,6BAA6B;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,4BAA4B;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,oCAAoC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,wDAAwD;IACxD,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,2CAA2C;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB"}
|
package/esm/_dnt.shims.d.ts
DELETED
package/esm/_dnt.shims.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"_dnt.shims.d.ts","sourceRoot":"","sources":["../src/_dnt.shims.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAKvC,eAAO,MAAM,aAAa;;CAA2C,CAAC"}
|
package/esm/_dnt.shims.js
DELETED
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import { Deno } from "@deno/shim-deno";
|
|
2
|
-
export { Deno } from "@deno/shim-deno";
|
|
3
|
-
const dntGlobals = {
|
|
4
|
-
Deno,
|
|
5
|
-
};
|
|
6
|
-
export const dntGlobalThis = createMergeProxy(globalThis, dntGlobals);
|
|
7
|
-
function createMergeProxy(baseObj, extObj) {
|
|
8
|
-
return new Proxy(baseObj, {
|
|
9
|
-
get(_target, prop, _receiver) {
|
|
10
|
-
if (prop in extObj) {
|
|
11
|
-
return extObj[prop];
|
|
12
|
-
}
|
|
13
|
-
else {
|
|
14
|
-
return baseObj[prop];
|
|
15
|
-
}
|
|
16
|
-
},
|
|
17
|
-
set(_target, prop, value) {
|
|
18
|
-
if (prop in extObj) {
|
|
19
|
-
delete extObj[prop];
|
|
20
|
-
}
|
|
21
|
-
baseObj[prop] = value;
|
|
22
|
-
return true;
|
|
23
|
-
},
|
|
24
|
-
deleteProperty(_target, prop) {
|
|
25
|
-
let success = false;
|
|
26
|
-
if (prop in extObj) {
|
|
27
|
-
delete extObj[prop];
|
|
28
|
-
success = true;
|
|
29
|
-
}
|
|
30
|
-
if (prop in baseObj) {
|
|
31
|
-
delete baseObj[prop];
|
|
32
|
-
success = true;
|
|
33
|
-
}
|
|
34
|
-
return success;
|
|
35
|
-
},
|
|
36
|
-
ownKeys(_target) {
|
|
37
|
-
const baseKeys = Reflect.ownKeys(baseObj);
|
|
38
|
-
const extKeys = Reflect.ownKeys(extObj);
|
|
39
|
-
const extKeysSet = new Set(extKeys);
|
|
40
|
-
return [...baseKeys.filter((k) => !extKeysSet.has(k)), ...extKeys];
|
|
41
|
-
},
|
|
42
|
-
defineProperty(_target, prop, desc) {
|
|
43
|
-
if (prop in extObj) {
|
|
44
|
-
delete extObj[prop];
|
|
45
|
-
}
|
|
46
|
-
Reflect.defineProperty(baseObj, prop, desc);
|
|
47
|
-
return true;
|
|
48
|
-
},
|
|
49
|
-
getOwnPropertyDescriptor(_target, prop) {
|
|
50
|
-
if (prop in extObj) {
|
|
51
|
-
return Reflect.getOwnPropertyDescriptor(extObj, prop);
|
|
52
|
-
}
|
|
53
|
-
else {
|
|
54
|
-
return Reflect.getOwnPropertyDescriptor(baseObj, prop);
|
|
55
|
-
}
|
|
56
|
-
},
|
|
57
|
-
has(_target, prop) {
|
|
58
|
-
return prop in extObj || prop in baseObj;
|
|
59
|
-
},
|
|
60
|
-
});
|
|
61
|
-
}
|
package/script/_dnt.shims.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"_dnt.shims.d.ts","sourceRoot":"","sources":["../src/_dnt.shims.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAKvC,eAAO,MAAM,aAAa;;CAA2C,CAAC"}
|
package/script/_dnt.shims.js
DELETED
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.dntGlobalThis = exports.Deno = void 0;
|
|
4
|
-
const shim_deno_1 = require("@deno/shim-deno");
|
|
5
|
-
var shim_deno_2 = require("@deno/shim-deno");
|
|
6
|
-
Object.defineProperty(exports, "Deno", { enumerable: true, get: function () { return shim_deno_2.Deno; } });
|
|
7
|
-
const dntGlobals = {
|
|
8
|
-
Deno: shim_deno_1.Deno,
|
|
9
|
-
};
|
|
10
|
-
exports.dntGlobalThis = createMergeProxy(globalThis, dntGlobals);
|
|
11
|
-
function createMergeProxy(baseObj, extObj) {
|
|
12
|
-
return new Proxy(baseObj, {
|
|
13
|
-
get(_target, prop, _receiver) {
|
|
14
|
-
if (prop in extObj) {
|
|
15
|
-
return extObj[prop];
|
|
16
|
-
}
|
|
17
|
-
else {
|
|
18
|
-
return baseObj[prop];
|
|
19
|
-
}
|
|
20
|
-
},
|
|
21
|
-
set(_target, prop, value) {
|
|
22
|
-
if (prop in extObj) {
|
|
23
|
-
delete extObj[prop];
|
|
24
|
-
}
|
|
25
|
-
baseObj[prop] = value;
|
|
26
|
-
return true;
|
|
27
|
-
},
|
|
28
|
-
deleteProperty(_target, prop) {
|
|
29
|
-
let success = false;
|
|
30
|
-
if (prop in extObj) {
|
|
31
|
-
delete extObj[prop];
|
|
32
|
-
success = true;
|
|
33
|
-
}
|
|
34
|
-
if (prop in baseObj) {
|
|
35
|
-
delete baseObj[prop];
|
|
36
|
-
success = true;
|
|
37
|
-
}
|
|
38
|
-
return success;
|
|
39
|
-
},
|
|
40
|
-
ownKeys(_target) {
|
|
41
|
-
const baseKeys = Reflect.ownKeys(baseObj);
|
|
42
|
-
const extKeys = Reflect.ownKeys(extObj);
|
|
43
|
-
const extKeysSet = new Set(extKeys);
|
|
44
|
-
return [...baseKeys.filter((k) => !extKeysSet.has(k)), ...extKeys];
|
|
45
|
-
},
|
|
46
|
-
defineProperty(_target, prop, desc) {
|
|
47
|
-
if (prop in extObj) {
|
|
48
|
-
delete extObj[prop];
|
|
49
|
-
}
|
|
50
|
-
Reflect.defineProperty(baseObj, prop, desc);
|
|
51
|
-
return true;
|
|
52
|
-
},
|
|
53
|
-
getOwnPropertyDescriptor(_target, prop) {
|
|
54
|
-
if (prop in extObj) {
|
|
55
|
-
return Reflect.getOwnPropertyDescriptor(extObj, prop);
|
|
56
|
-
}
|
|
57
|
-
else {
|
|
58
|
-
return Reflect.getOwnPropertyDescriptor(baseObj, prop);
|
|
59
|
-
}
|
|
60
|
-
},
|
|
61
|
-
has(_target, prop) {
|
|
62
|
-
return prop in extObj || prop in baseObj;
|
|
63
|
-
},
|
|
64
|
-
});
|
|
65
|
-
}
|