@openweave/weave-graph 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/node.js ADDED
@@ -0,0 +1,79 @@
1
+ import { NodeType } from "./types";
2
+ import { randomUUID } from "crypto";
3
+ /**
4
+ * NodeBuilder utility for creating and managing graph nodes
5
+ */
6
+ export class NodeBuilder {
7
+ /**
8
+ * Create a new node with the given type and label
9
+ */
10
+ static create(type, label, description, metadata) {
11
+ return {
12
+ id: randomUUID(),
13
+ type,
14
+ label,
15
+ description,
16
+ metadata: metadata ?? {},
17
+ createdAt: new Date(),
18
+ updatedAt: new Date(),
19
+ frequency: 1,
20
+ };
21
+ }
22
+ /**
23
+ * Create a CONCEPT node
24
+ */
25
+ static concept(label, description) {
26
+ return this.create(NodeType.CONCEPT, label, description);
27
+ }
28
+ /**
29
+ * Create a DECISION node
30
+ */
31
+ static decision(label, description) {
32
+ return this.create(NodeType.DECISION, label, description);
33
+ }
34
+ /**
35
+ * Create a MILESTONE node
36
+ */
37
+ static milestone(label, description) {
38
+ return this.create(NodeType.MILESTONE, label, description);
39
+ }
40
+ /**
41
+ * Create an ERROR node
42
+ */
43
+ static error(label, description) {
44
+ return this.create(NodeType.ERROR, label, description);
45
+ }
46
+ /**
47
+ * Create a CORRECTION node
48
+ */
49
+ static correction(label, description) {
50
+ return this.create(NodeType.CORRECTION, label, description);
51
+ }
52
+ /**
53
+ * Create a CODE_ENTITY node
54
+ */
55
+ static codeEntity(label, description) {
56
+ return this.create(NodeType.CODE_ENTITY, label, description);
57
+ }
58
+ /**
59
+ * Clone a node with updated values
60
+ */
61
+ static clone(node, updates) {
62
+ return {
63
+ ...node,
64
+ updatedAt: new Date(),
65
+ ...updates,
66
+ };
67
+ }
68
+ /**
69
+ * Increment frequency counter for a node
70
+ */
71
+ static incrementFrequency(node) {
72
+ return {
73
+ ...node,
74
+ frequency: (node.frequency ?? 1) + 1,
75
+ updatedAt: new Date(),
76
+ };
77
+ }
78
+ }
79
+ //# sourceMappingURL=node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,QAAQ,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC;;GAEG;AACH,MAAM,OAAO,WAAW;IACtB;;OAEG;IACH,MAAM,CAAC,MAAM,CACX,IAAc,EACd,KAAa,EACb,WAAoB,EACpB,QAAkC;QAElC,OAAO;YACL,EAAE,EAAE,UAAU,EAAE;YAChB,IAAI;YACJ,KAAK;YACL,WAAW;YACX,QAAQ,EAAE,QAAQ,IAAI,EAAE;YACxB,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,SAAS,EAAE,CAAC;SACb,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,KAAa,EAAE,WAAoB;QAChD,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;IAC3D,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,KAAa,EAAE,WAAoB;QACjD,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;IAC5D,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,KAAa,EAAE,WAAoB;QAClD,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;IAC7D,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,KAAa,EAAE,WAAoB;QAC9C,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;IACzD,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,KAAa,EAAE,WAAoB;QACnD,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;IAC9D,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,KAAa,EAAE,WAAoB;QACnD,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;IAC/D,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CACV,IAAU,EACV,OAAuB;QAEvB,OAAO;YACL,GAAG,IAAI;YACP,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,GAAG,OAAO;SACX,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,kBAAkB,CAAC,IAAU;QAClC,OAAO;YACL,GAAG,IAAI;YACP,SAAS,EAAE,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,CAAC;YACpC,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,58 @@
1
+ import { ContextGraphManager } from "./index";
2
+ import { GraphSnapshot } from "./types";
3
+ /**
4
+ * PersistenceManager
5
+ * Handles saving and loading graph snapshots to/from disk
6
+ * Organizes files by chat_id in a configurable data directory
7
+ */
8
+ export declare class PersistenceManager {
9
+ private dataDir;
10
+ constructor(dataDir?: string);
11
+ /**
12
+ * Get the file path for a given chat_id
13
+ */
14
+ private getFilePath;
15
+ /**
16
+ * Ensure the data directory exists
17
+ */
18
+ ensureDataDir(): Promise<void>;
19
+ /**
20
+ * Save a graph snapshot to disk
21
+ */
22
+ saveGraph(snapshot: GraphSnapshot): Promise<void>;
23
+ /**
24
+ * Load a graph snapshot from disk
25
+ */
26
+ loadGraph(chatId: string): Promise<GraphSnapshot | null>;
27
+ /**
28
+ * Load or create a graph manager for a chat session
29
+ */
30
+ loadOrCreateGraph(chatId: string, compressionThreshold?: number): Promise<ContextGraphManager>;
31
+ /**
32
+ * Check if a graph exists on disk
33
+ */
34
+ graphExists(chatId: string): Promise<boolean>;
35
+ /**
36
+ * Delete a graph from disk
37
+ */
38
+ deleteGraph(chatId: string): Promise<void>;
39
+ /**
40
+ * List all saved chat sessions
41
+ */
42
+ listSessions(): Promise<Array<{
43
+ chatId: string;
44
+ createdAt: Date;
45
+ updatedAt: Date;
46
+ nodeCount: number;
47
+ edgeCount: number;
48
+ }>>;
49
+ /**
50
+ * Change the data directory
51
+ */
52
+ setDataDir(newDataDir: string): void;
53
+ /**
54
+ * Get the current data directory
55
+ */
56
+ getDataDir(): string;
57
+ }
58
+ //# sourceMappingURL=persistence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../src/persistence.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC;;;;GAIG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,GAAE,MAAuB;IAI5C;;OAEG;IACH,OAAO,CAAC,WAAW;IAKnB;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAUpC;;OAEG;IACG,SAAS,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAoCvD;;OAEG;IACG,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IA4C9D;;OAEG;IACG,iBAAiB,CACrB,MAAM,EAAE,MAAM,EACd,oBAAoB,CAAC,EAAE,MAAM,GAC5B,OAAO,CAAC,mBAAmB,CAAC;IAU/B;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAUnD;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYhD;;OAEG;IACG,YAAY,IAAI,OAAO,CAC3B,KAAK,CAAC;QACJ,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,IAAI,CAAC;QAChB,SAAS,EAAE,IAAI,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC,CACH;IAmCD;;OAEG;IACH,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAIpC;;OAEG;IACH,UAAU,IAAI,MAAM;CAGrB"}
@@ -0,0 +1,188 @@
1
+ import { promises as fs } from "fs";
2
+ import * as path from "path";
3
+ import { ContextGraphManager } from "./index";
4
+ /**
5
+ * PersistenceManager
6
+ * Handles saving and loading graph snapshots to/from disk
7
+ * Organizes files by chat_id in a configurable data directory
8
+ */
9
+ export class PersistenceManager {
10
+ dataDir;
11
+ constructor(dataDir = "./weave-data") {
12
+ this.dataDir = dataDir;
13
+ }
14
+ /**
15
+ * Get the file path for a given chat_id
16
+ */
17
+ getFilePath(chatId) {
18
+ const sanitizedId = chatId.replace(/[^a-zA-Z0-9_-]/g, "_");
19
+ return path.join(this.dataDir, `${sanitizedId}.json`);
20
+ }
21
+ /**
22
+ * Ensure the data directory exists
23
+ */
24
+ async ensureDataDir() {
25
+ try {
26
+ await fs.mkdir(this.dataDir, { recursive: true });
27
+ }
28
+ catch (error) {
29
+ if (error.code !== "EEXIST") {
30
+ throw error;
31
+ }
32
+ }
33
+ }
34
+ /**
35
+ * Save a graph snapshot to disk
36
+ */
37
+ async saveGraph(snapshot) {
38
+ await this.ensureDataDir();
39
+ const filePath = this.getFilePath(snapshot.metadata.chatId);
40
+ const serialized = {
41
+ ...snapshot,
42
+ metadata: {
43
+ ...snapshot.metadata,
44
+ createdAt: snapshot.metadata.createdAt.toISOString(),
45
+ updatedAt: snapshot.metadata.updatedAt.toISOString(),
46
+ },
47
+ nodes: Object.fromEntries(Object.entries(snapshot.nodes).map(([id, node]) => [
48
+ id,
49
+ {
50
+ ...node,
51
+ createdAt: node.createdAt.toISOString(),
52
+ updatedAt: node.updatedAt.toISOString(),
53
+ },
54
+ ])),
55
+ edges: Object.fromEntries(Object.entries(snapshot.edges).map(([id, edge]) => [
56
+ id,
57
+ {
58
+ ...edge,
59
+ createdAt: edge.createdAt.toISOString(),
60
+ updatedAt: edge.updatedAt.toISOString(),
61
+ },
62
+ ])),
63
+ };
64
+ await fs.writeFile(filePath, JSON.stringify(serialized, null, 2), "utf-8");
65
+ }
66
+ /**
67
+ * Load a graph snapshot from disk
68
+ */
69
+ async loadGraph(chatId) {
70
+ const filePath = this.getFilePath(chatId);
71
+ try {
72
+ const content = await fs.readFile(filePath, "utf-8");
73
+ const parsed = JSON.parse(content);
74
+ // Deserialize dates
75
+ return {
76
+ ...parsed,
77
+ metadata: {
78
+ ...parsed.metadata,
79
+ createdAt: new Date(parsed.metadata.createdAt),
80
+ updatedAt: new Date(parsed.metadata.updatedAt),
81
+ },
82
+ nodes: Object.fromEntries(Object.entries(parsed.nodes).map(([id, node]) => [
83
+ id,
84
+ {
85
+ ...node,
86
+ createdAt: new Date(node.createdAt),
87
+ updatedAt: new Date(node.updatedAt),
88
+ },
89
+ ])),
90
+ edges: Object.fromEntries(Object.entries(parsed.edges).map(([id, edge]) => [
91
+ id,
92
+ {
93
+ ...edge,
94
+ createdAt: new Date(edge.createdAt),
95
+ updatedAt: new Date(edge.updatedAt),
96
+ },
97
+ ])),
98
+ };
99
+ }
100
+ catch (error) {
101
+ if (error.code === "ENOENT") {
102
+ return null;
103
+ }
104
+ throw error;
105
+ }
106
+ }
107
+ /**
108
+ * Load or create a graph manager for a chat session
109
+ */
110
+ async loadOrCreateGraph(chatId, compressionThreshold) {
111
+ const snapshot = await this.loadGraph(chatId);
112
+ if (snapshot) {
113
+ return ContextGraphManager.fromSnapshot(snapshot);
114
+ }
115
+ return new ContextGraphManager(chatId, compressionThreshold);
116
+ }
117
+ /**
118
+ * Check if a graph exists on disk
119
+ */
120
+ async graphExists(chatId) {
121
+ const filePath = this.getFilePath(chatId);
122
+ try {
123
+ await fs.access(filePath);
124
+ return true;
125
+ }
126
+ catch {
127
+ return false;
128
+ }
129
+ }
130
+ /**
131
+ * Delete a graph from disk
132
+ */
133
+ async deleteGraph(chatId) {
134
+ const filePath = this.getFilePath(chatId);
135
+ try {
136
+ await fs.unlink(filePath);
137
+ }
138
+ catch (error) {
139
+ if (error.code !== "ENOENT") {
140
+ throw error;
141
+ }
142
+ }
143
+ }
144
+ /**
145
+ * List all saved chat sessions
146
+ */
147
+ async listSessions() {
148
+ await this.ensureDataDir();
149
+ try {
150
+ const files = await fs.readdir(this.dataDir);
151
+ const jsonFiles = files.filter((f) => f.endsWith(".json"));
152
+ const sessions = await Promise.all(jsonFiles.map(async (file) => {
153
+ const chatId = file.replace(".json", "");
154
+ const snapshot = await this.loadGraph(chatId);
155
+ if (!snapshot) {
156
+ return null;
157
+ }
158
+ return {
159
+ chatId,
160
+ createdAt: snapshot.metadata.createdAt,
161
+ updatedAt: snapshot.metadata.updatedAt,
162
+ nodeCount: Object.keys(snapshot.nodes).length,
163
+ edgeCount: Object.keys(snapshot.edges).length,
164
+ };
165
+ }));
166
+ return sessions.filter((s) => s !== null);
167
+ }
168
+ catch (error) {
169
+ if (error.code === "ENOENT") {
170
+ return [];
171
+ }
172
+ throw error;
173
+ }
174
+ }
175
+ /**
176
+ * Change the data directory
177
+ */
178
+ setDataDir(newDataDir) {
179
+ this.dataDir = newDataDir;
180
+ }
181
+ /**
182
+ * Get the current data directory
183
+ */
184
+ getDataDir() {
185
+ return this.dataDir;
186
+ }
187
+ }
188
+ //# sourceMappingURL=persistence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persistence.js","sourceRoot":"","sources":["../src/persistence.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Node Types for WeaveGraph
3
+ * Represents different kinds of concepts in the knowledge graph
4
+ */
5
+ export declare enum NodeType {
6
+ CONCEPT = "CONCEPT",
7
+ DECISION = "DECISION",
8
+ MILESTONE = "MILESTONE",
9
+ ERROR = "ERROR",
10
+ CORRECTION = "CORRECTION",
11
+ CODE_ENTITY = "CODE_ENTITY"
12
+ }
13
+ /**
14
+ * Edge Types for WeaveGraph
15
+ * Represents different semantic relationships between nodes
16
+ */
17
+ export declare enum EdgeType {
18
+ RELATES = "RELATES",
19
+ CAUSES = "CAUSES",
20
+ CORRECTS = "CORRECTS",
21
+ IMPLEMENTS = "IMPLEMENTS",
22
+ DEPENDS_ON = "DEPENDS_ON",
23
+ BLOCKS = "BLOCKS"
24
+ }
25
+ /**
26
+ * Node in the WeaveGraph
27
+ * Base representation of a concept, decision, error, etc.
28
+ */
29
+ export interface Node {
30
+ id: string;
31
+ type: NodeType;
32
+ label: string;
33
+ description?: string;
34
+ metadata?: Record<string, unknown>;
35
+ createdAt: Date;
36
+ updatedAt: Date;
37
+ frequency?: number;
38
+ }
39
+ /**
40
+ * Edge in the WeaveGraph
41
+ * Represents a semantic relationship between two nodes
42
+ */
43
+ export interface Edge {
44
+ id: string;
45
+ sourceId: string;
46
+ targetId: string;
47
+ type: EdgeType;
48
+ weight?: number;
49
+ metadata?: Record<string, unknown>;
50
+ createdAt: Date;
51
+ updatedAt: Date;
52
+ }
53
+ /**
54
+ * Query result from keyword-based search
55
+ */
56
+ export interface QueryResult {
57
+ nodes: Node[];
58
+ edges: Edge[];
59
+ }
60
+ /**
61
+ * Serialized graph for persistence
62
+ */
63
+ export interface GraphSnapshot {
64
+ nodes: Record<string, Node>;
65
+ edges: Record<string, Edge>;
66
+ metadata: {
67
+ chatId: string;
68
+ version: string;
69
+ createdAt: Date;
70
+ updatedAt: Date;
71
+ compressionThreshold: number;
72
+ };
73
+ }
74
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,oBAAY,QAAQ;IAClB,OAAO,YAAY;IACnB,QAAQ,aAAa;IACrB,SAAS,cAAc;IACvB,KAAK,UAAU;IACf,UAAU,eAAe;IACzB,WAAW,gBAAgB;CAC5B;AAED;;;GAGG;AACH,oBAAY,QAAQ;IAClB,OAAO,YAAY;IACnB,MAAM,WAAW;IACjB,QAAQ,aAAa;IACrB,UAAU,eAAe;IACzB,UAAU,eAAe;IACzB,MAAM,WAAW;CAClB;AAED;;;GAGG;AACH,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,KAAK,EAAE,IAAI,EAAE,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC5B,QAAQ,EAAE;QACR,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,IAAI,CAAC;QAChB,SAAS,EAAE,IAAI,CAAC;QAChB,oBAAoB,EAAE,MAAM,CAAC;KAC9B,CAAC;CACH"}
package/dist/types.js ADDED
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Node Types for WeaveGraph
3
+ * Represents different kinds of concepts in the knowledge graph
4
+ */
5
+ export var NodeType;
6
+ (function (NodeType) {
7
+ NodeType["CONCEPT"] = "CONCEPT";
8
+ NodeType["DECISION"] = "DECISION";
9
+ NodeType["MILESTONE"] = "MILESTONE";
10
+ NodeType["ERROR"] = "ERROR";
11
+ NodeType["CORRECTION"] = "CORRECTION";
12
+ NodeType["CODE_ENTITY"] = "CODE_ENTITY";
13
+ })(NodeType || (NodeType = {}));
14
+ /**
15
+ * Edge Types for WeaveGraph
16
+ * Represents different semantic relationships between nodes
17
+ */
18
+ export var EdgeType;
19
+ (function (EdgeType) {
20
+ EdgeType["RELATES"] = "RELATES";
21
+ EdgeType["CAUSES"] = "CAUSES";
22
+ EdgeType["CORRECTS"] = "CORRECTS";
23
+ EdgeType["IMPLEMENTS"] = "IMPLEMENTS";
24
+ EdgeType["DEPENDS_ON"] = "DEPENDS_ON";
25
+ EdgeType["BLOCKS"] = "BLOCKS";
26
+ })(EdgeType || (EdgeType = {}));
27
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAN,IAAY,QAOX;AAPD,WAAY,QAAQ;IAClB,+BAAmB,CAAA;IACnB,iCAAqB,CAAA;IACrB,mCAAuB,CAAA;IACvB,2BAAe,CAAA;IACf,qCAAyB,CAAA;IACzB,uCAA2B,CAAA;AAC7B,CAAC,EAPW,QAAQ,KAAR,QAAQ,QAOnB;AAED;;;GAGG;AACH,MAAM,CAAN,IAAY,QAOX;AAPD,WAAY,QAAQ;IAClB,+BAAmB,CAAA;IACnB,6BAAiB,CAAA;IACjB,iCAAqB,CAAA;IACrB,qCAAyB,CAAA;IACzB,qCAAyB,CAAA;IACzB,6BAAiB,CAAA;AACnB,CAAC,EAPW,QAAQ,KAAR,QAAQ,QAOnB"}
package/package.json ADDED
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "@openweave/weave-graph",
3
+ "version": "0.2.0",
4
+ "description": "WeaveGraph — Persistent node & edge data model for AI agent context",
5
+ "private": false,
6
+ "license": "MIT",
7
+ "type": "module",
8
+ "main": "./dist/index.js",
9
+ "types": "./dist/index.d.ts",
10
+ "files": [
11
+ "dist",
12
+ "README.md"
13
+ ],
14
+ "exports": {
15
+ ".": {
16
+ "import": "./dist/index.js",
17
+ "types": "./dist/index.d.ts"
18
+ }
19
+ },
20
+ "keywords": [
21
+ "weave",
22
+ "graph",
23
+ "context",
24
+ "ai-agent",
25
+ "semantic-memory"
26
+ ],
27
+ "devDependencies": {
28
+ "@types/node": "22.10.2",
29
+ "typescript": "5.7.2",
30
+ "vitest": "3.0.0"
31
+ },
32
+ "dependencies": {
33
+ "@openweave/weave-provider": "0.8.0"
34
+ },
35
+ "scripts": {
36
+ "build": "tsc",
37
+ "dev": "tsc --watch",
38
+ "test": "vitest",
39
+ "lint": "eslint src --max-warnings 0",
40
+ "clean": "rm -rf dist"
41
+ }
42
+ }