havensdk-store 0.1.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.
Files changed (57) hide show
  1. package/dist/cjs/index.d.ts +10 -0
  2. package/dist/cjs/index.d.ts.map +1 -0
  3. package/dist/cjs/index.js +18 -0
  4. package/dist/cjs/index.js.map +1 -0
  5. package/dist/cjs/memory.d.ts +53 -0
  6. package/dist/cjs/memory.d.ts.map +1 -0
  7. package/dist/cjs/memory.js +87 -0
  8. package/dist/cjs/memory.js.map +1 -0
  9. package/dist/cjs/schema.d.ts +5 -0
  10. package/dist/cjs/schema.d.ts.map +1 -0
  11. package/dist/cjs/schema.js +82 -0
  12. package/dist/cjs/schema.js.map +1 -0
  13. package/dist/cjs/session.d.ts +27 -0
  14. package/dist/cjs/session.d.ts.map +1 -0
  15. package/dist/cjs/session.js +105 -0
  16. package/dist/cjs/session.js.map +1 -0
  17. package/dist/cjs/sqlite-store.d.ts +15 -0
  18. package/dist/cjs/sqlite-store.d.ts.map +1 -0
  19. package/dist/cjs/sqlite-store.js +91 -0
  20. package/dist/cjs/sqlite-store.js.map +1 -0
  21. package/dist/cjs/types.d.ts +31 -0
  22. package/dist/cjs/types.d.ts.map +1 -0
  23. package/dist/cjs/types.js +3 -0
  24. package/dist/cjs/types.js.map +1 -0
  25. package/dist/cjs/vector.d.ts +36 -0
  26. package/dist/cjs/vector.d.ts.map +1 -0
  27. package/dist/cjs/vector.js +80 -0
  28. package/dist/cjs/vector.js.map +1 -0
  29. package/dist/index.d.ts +10 -0
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.js +9 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/memory.d.ts +53 -0
  34. package/dist/memory.d.ts.map +1 -0
  35. package/dist/memory.js +83 -0
  36. package/dist/memory.js.map +1 -0
  37. package/dist/schema.d.ts +5 -0
  38. package/dist/schema.d.ts.map +1 -0
  39. package/dist/schema.js +79 -0
  40. package/dist/schema.js.map +1 -0
  41. package/dist/session.d.ts +27 -0
  42. package/dist/session.d.ts.map +1 -0
  43. package/dist/session.js +68 -0
  44. package/dist/session.js.map +1 -0
  45. package/dist/sqlite-store.d.ts +15 -0
  46. package/dist/sqlite-store.d.ts.map +1 -0
  47. package/dist/sqlite-store.js +87 -0
  48. package/dist/sqlite-store.js.map +1 -0
  49. package/dist/types.d.ts +31 -0
  50. package/dist/types.d.ts.map +1 -0
  51. package/dist/types.js +2 -0
  52. package/dist/types.js.map +1 -0
  53. package/dist/vector.d.ts +36 -0
  54. package/dist/vector.d.ts.map +1 -0
  55. package/dist/vector.js +76 -0
  56. package/dist/vector.js.map +1 -0
  57. package/package.json +57 -0
@@ -0,0 +1,10 @@
1
+ export type { HavenStore, RunRecord, MessageRecord } from "./types";
2
+ export { SqliteStore } from "./sqlite-store";
3
+ export { MIGRATIONS } from "./schema";
4
+ export { HashVectorStore } from "./vector";
5
+ export type { VectorStore, VectorSearchResult } from "./vector";
6
+ export { InMemoryGraph, SqliteMemoryGraph } from "./memory";
7
+ export type { Memory, MemoryEdge, MemoryGraph, MemoryType, EdgeType } from "./memory";
8
+ export { JsonlSessionStore } from "./session";
9
+ export type { SessionStore, SessionMessage } from "./session";
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAGtC,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAGhE,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC5D,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAGtF,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.JsonlSessionStore = exports.SqliteMemoryGraph = exports.InMemoryGraph = exports.HashVectorStore = exports.MIGRATIONS = exports.SqliteStore = void 0;
4
+ var sqlite_store_1 = require("./sqlite-store");
5
+ Object.defineProperty(exports, "SqliteStore", { enumerable: true, get: function () { return sqlite_store_1.SqliteStore; } });
6
+ var schema_1 = require("./schema");
7
+ Object.defineProperty(exports, "MIGRATIONS", { enumerable: true, get: function () { return schema_1.MIGRATIONS; } });
8
+ // Vector search
9
+ var vector_1 = require("./vector");
10
+ Object.defineProperty(exports, "HashVectorStore", { enumerable: true, get: function () { return vector_1.HashVectorStore; } });
11
+ // Memory graph
12
+ var memory_1 = require("./memory");
13
+ Object.defineProperty(exports, "InMemoryGraph", { enumerable: true, get: function () { return memory_1.InMemoryGraph; } });
14
+ Object.defineProperty(exports, "SqliteMemoryGraph", { enumerable: true, get: function () { return memory_1.SqliteMemoryGraph; } });
15
+ // Session store
16
+ var session_1 = require("./session");
17
+ Object.defineProperty(exports, "JsonlSessionStore", { enumerable: true, get: function () { return session_1.JsonlSessionStore; } });
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AACA,+CAA6C;AAApC,2GAAA,WAAW,OAAA;AACpB,mCAAsC;AAA7B,oGAAA,UAAU,OAAA;AAEnB,gBAAgB;AAChB,mCAA2C;AAAlC,yGAAA,eAAe,OAAA;AAGxB,eAAe;AACf,mCAA4D;AAAnD,uGAAA,aAAa,OAAA;AAAE,2GAAA,iBAAiB,OAAA;AAGzC,gBAAgB;AAChB,qCAA8C;AAArC,4GAAA,iBAAiB,OAAA"}
@@ -0,0 +1,53 @@
1
+ import type { VectorStore } from "./vector";
2
+ export type MemoryType = "fact" | "preference" | "decision" | "identity" | "event" | "observation" | "goal" | "todo";
3
+ export type EdgeType = "related_to" | "updates" | "contradicts" | "caused_by" | "part_of";
4
+ export interface Memory {
5
+ id: string;
6
+ type: MemoryType;
7
+ content: string;
8
+ metadata?: Record<string, unknown>;
9
+ createdAt: string;
10
+ expiresAt?: string;
11
+ }
12
+ export interface MemoryEdge {
13
+ id: string;
14
+ sourceId: string;
15
+ targetId: string;
16
+ type: EdgeType;
17
+ createdAt: string;
18
+ }
19
+ export interface MemoryGraph {
20
+ save(memory: Omit<Memory, "id" | "createdAt">): Promise<Memory>;
21
+ recall(query: string, options?: {
22
+ limit?: number;
23
+ types?: MemoryType[];
24
+ }): Promise<Memory[]>;
25
+ get(id: string): Promise<Memory | null>;
26
+ link(sourceId: string, targetId: string, type: EdgeType): Promise<void>;
27
+ getLinks(memoryId: string): Promise<MemoryEdge[]>;
28
+ delete(id: string): Promise<void>;
29
+ }
30
+ /**
31
+ * In-memory typed memory graph with hybrid search.
32
+ * Stores memories and their relationships as a graph structure.
33
+ */
34
+ export declare class InMemoryGraph implements MemoryGraph {
35
+ private memories;
36
+ private edges;
37
+ private vectorStore;
38
+ constructor(vectorStore?: VectorStore);
39
+ save(memory: Omit<Memory, "id" | "createdAt">): Promise<Memory>;
40
+ recall(query: string, options?: {
41
+ limit?: number;
42
+ types?: MemoryType[];
43
+ }): Promise<Memory[]>;
44
+ get(id: string): Promise<Memory | null>;
45
+ link(sourceId: string, targetId: string, type: EdgeType): Promise<void>;
46
+ getLinks(memoryId: string): Promise<MemoryEdge[]>;
47
+ delete(id: string): Promise<void>;
48
+ }
49
+ /**
50
+ * @deprecated Use `InMemoryGraph` instead. This alias will be removed in a future version.
51
+ */
52
+ export declare const SqliteMemoryGraph: typeof InMemoryGraph;
53
+ //# sourceMappingURL=memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/memory.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAG5C,MAAM,MAAM,UAAU,GAClB,MAAM,GACN,YAAY,GACZ,UAAU,GACV,UAAU,GACV,OAAO,GACP,aAAa,GACb,MAAM,GACN,MAAM,CAAC;AAEX,MAAM,MAAM,QAAQ,GAChB,YAAY,GACZ,SAAS,GACT,aAAa,GACb,WAAW,GACX,SAAS,CAAC;AAEd,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,GAAG,WAAW,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAChE,MAAM,CACJ,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,UAAU,EAAE,CAAA;KAAE,GACjD,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACrB,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxE,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAClD,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnC;AAOD;;;GAGG;AACH,qBAAa,aAAc,YAAW,WAAW;IAC/C,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,WAAW,CAAc;gBAErB,WAAW,CAAC,EAAE,WAAW;IAI/B,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,GAAG,WAAW,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAe/D,MAAM,CACV,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,UAAU,EAAE,CAAA;KAAE,GACjD,OAAO,CAAC,MAAM,EAAE,CAAC;IAuBd,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAIvC,IAAI,CACR,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,QAAQ,GACb,OAAO,CAAC,IAAI,CAAC;IAYV,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAUjD,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CASxC;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,sBAAgB,CAAC"}
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SqliteMemoryGraph = exports.InMemoryGraph = void 0;
4
+ const crypto_1 = require("crypto");
5
+ const vector_1 = require("./vector");
6
+ /**
7
+ * In-memory typed memory graph with hybrid search.
8
+ * Stores memories and their relationships as a graph structure.
9
+ */
10
+ class InMemoryGraph {
11
+ memories = new Map();
12
+ edges = new Map();
13
+ vectorStore;
14
+ constructor(vectorStore) {
15
+ this.vectorStore = vectorStore ?? new vector_1.HashVectorStore();
16
+ }
17
+ async save(memory) {
18
+ const id = (0, crypto_1.randomUUID)();
19
+ const now = new Date().toISOString();
20
+ const mem = { ...memory, id, createdAt: now };
21
+ this.memories.set(id, mem);
22
+ await this.vectorStore.save(mem.content, {
23
+ memoryId: id,
24
+ type: mem.type,
25
+ metadata: mem.metadata,
26
+ });
27
+ return mem;
28
+ }
29
+ async recall(query, options) {
30
+ const limit = options?.limit ?? 10;
31
+ const types = options?.types;
32
+ const vectorResults = await this.vectorStore.search(query, {
33
+ limit: limit * 2,
34
+ });
35
+ const results = [];
36
+ for (const vr of vectorResults) {
37
+ const memId = vr.metadata?.memoryId;
38
+ if (!memId)
39
+ continue;
40
+ const mem = this.memories.get(memId);
41
+ if (!mem)
42
+ continue;
43
+ if (types && !types.includes(mem.type))
44
+ continue;
45
+ results.push({ memory: mem, score: vr.score });
46
+ }
47
+ results.sort((a, b) => b.score - a.score);
48
+ return results.slice(0, limit).map((r) => r.memory);
49
+ }
50
+ async get(id) {
51
+ return this.memories.get(id) ?? null;
52
+ }
53
+ async link(sourceId, targetId, type) {
54
+ const id = (0, crypto_1.randomUUID)();
55
+ const edge = {
56
+ id,
57
+ sourceId,
58
+ targetId,
59
+ type,
60
+ createdAt: new Date().toISOString(),
61
+ };
62
+ this.edges.set(id, edge);
63
+ }
64
+ async getLinks(memoryId) {
65
+ const links = [];
66
+ for (const edge of this.edges.values()) {
67
+ if (edge.sourceId === memoryId || edge.targetId === memoryId) {
68
+ links.push(edge);
69
+ }
70
+ }
71
+ return links;
72
+ }
73
+ async delete(id) {
74
+ this.memories.delete(id);
75
+ for (const [edgeId, edge] of this.edges) {
76
+ if (edge.sourceId === id || edge.targetId === id) {
77
+ this.edges.delete(edgeId);
78
+ }
79
+ }
80
+ }
81
+ }
82
+ exports.InMemoryGraph = InMemoryGraph;
83
+ /**
84
+ * @deprecated Use `InMemoryGraph` instead. This alias will be removed in a future version.
85
+ */
86
+ exports.SqliteMemoryGraph = InMemoryGraph;
87
+ //# sourceMappingURL=memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/memory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare const MIGRATIONS: {
2
+ version: number;
3
+ up: string;
4
+ }[];
5
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/schema.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU;;;GA6EtB,CAAC"}
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MIGRATIONS = void 0;
4
+ exports.MIGRATIONS = [
5
+ {
6
+ version: 1,
7
+ up: `
8
+ CREATE TABLE IF NOT EXISTS runs (
9
+ id TEXT PRIMARY KEY,
10
+ input TEXT NOT NULL,
11
+ agent_name TEXT NOT NULL,
12
+ status TEXT NOT NULL DEFAULT 'running',
13
+ started_at TEXT NOT NULL DEFAULT (datetime('now')),
14
+ finished_at TEXT,
15
+ metadata TEXT
16
+ );
17
+
18
+ CREATE TABLE IF NOT EXISTS messages (
19
+ id TEXT PRIMARY KEY,
20
+ run_id TEXT NOT NULL REFERENCES runs(id),
21
+ role TEXT NOT NULL,
22
+ content TEXT NOT NULL,
23
+ name TEXT,
24
+ tool_call_id TEXT,
25
+ created_at TEXT NOT NULL DEFAULT (datetime('now'))
26
+ );
27
+
28
+ CREATE INDEX IF NOT EXISTS idx_messages_run_id ON messages(run_id);
29
+
30
+ CREATE TABLE IF NOT EXISTS state (
31
+ key TEXT PRIMARY KEY,
32
+ value TEXT NOT NULL
33
+ );
34
+
35
+ CREATE TABLE IF NOT EXISTS _migrations (
36
+ version INTEGER PRIMARY KEY,
37
+ applied_at TEXT NOT NULL DEFAULT (datetime('now'))
38
+ );
39
+
40
+ INSERT OR IGNORE INTO _migrations (version) VALUES (1);
41
+ `,
42
+ },
43
+ {
44
+ version: 2,
45
+ up: `
46
+ CREATE TABLE IF NOT EXISTS memories (
47
+ id TEXT PRIMARY KEY,
48
+ type TEXT NOT NULL,
49
+ content TEXT NOT NULL,
50
+ metadata TEXT,
51
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
52
+ expires_at TEXT
53
+ );
54
+
55
+ CREATE INDEX IF NOT EXISTS idx_memories_type ON memories(type);
56
+ CREATE INDEX IF NOT EXISTS idx_memories_created ON memories(created_at);
57
+
58
+ CREATE TABLE IF NOT EXISTS memory_edges (
59
+ id TEXT PRIMARY KEY,
60
+ source_id TEXT NOT NULL REFERENCES memories(id) ON DELETE CASCADE,
61
+ target_id TEXT NOT NULL REFERENCES memories(id) ON DELETE CASCADE,
62
+ type TEXT NOT NULL,
63
+ created_at TEXT NOT NULL DEFAULT (datetime('now'))
64
+ );
65
+
66
+ CREATE INDEX IF NOT EXISTS idx_edges_source ON memory_edges(source_id);
67
+ CREATE INDEX IF NOT EXISTS idx_edges_target ON memory_edges(target_id);
68
+
69
+ CREATE TABLE IF NOT EXISTS embeddings (
70
+ id TEXT PRIMARY KEY,
71
+ content TEXT NOT NULL,
72
+ metadata TEXT,
73
+ created_at TEXT NOT NULL DEFAULT (datetime('now'))
74
+ );
75
+
76
+ CREATE VIRTUAL TABLE IF NOT EXISTS embedding_search USING fts5(content);
77
+
78
+ INSERT OR IGNORE INTO _migrations (version) VALUES (2);
79
+ `,
80
+ },
81
+ ];
82
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/schema.ts"],"names":[],"mappings":";;;AAAa,QAAA,UAAU,GAAG;IACxB;QACE,OAAO,EAAE,CAAC;QACV,EAAE,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAkCH;KACF;IACD;QACE,OAAO,EAAE,CAAC;QACV,EAAE,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAkCH;KACF;CACF,CAAC"}
@@ -0,0 +1,27 @@
1
+ export interface SessionMessage {
2
+ id: string;
3
+ role: "user" | "assistant" | "system" | "tool";
4
+ content: string;
5
+ timestamp: string;
6
+ metadata?: Record<string, unknown>;
7
+ }
8
+ export interface SessionStore {
9
+ append(sessionId: string, message: Omit<SessionMessage, "id" | "timestamp">): Promise<void>;
10
+ read(sessionId: string): Promise<SessionMessage[]>;
11
+ list(): Promise<string[]>;
12
+ delete(sessionId: string): Promise<void>;
13
+ }
14
+ /**
15
+ * Append-only JSONL session store for crash-safe persistence.
16
+ * Each message is written as a single line, making recovery simple.
17
+ */
18
+ export declare class JsonlSessionStore implements SessionStore {
19
+ private basePath;
20
+ constructor(basePath?: string);
21
+ private getSessionPath;
22
+ append(sessionId: string, message: Omit<SessionMessage, "id" | "timestamp">): Promise<void>;
23
+ read(sessionId: string): Promise<SessionMessage[]>;
24
+ list(): Promise<string[]>;
25
+ delete(sessionId: string): Promise<void>;
26
+ }
27
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/session.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,GAAG,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5F,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IACnD,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1B,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1C;AAED;;;GAGG;AACH,qBAAa,iBAAkB,YAAW,YAAY;IACpD,OAAO,CAAC,QAAQ,CAAS;gBAEb,QAAQ,SAAoB;IAOxC,OAAO,CAAC,cAAc;IAIhB,MAAM,CACV,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,GAAG,WAAW,CAAC,GAChD,OAAO,CAAC,IAAI,CAAC;IAYV,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAwBlD,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAazB,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAQ/C"}
@@ -0,0 +1,105 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.JsonlSessionStore = void 0;
37
+ const fs_1 = require("fs");
38
+ const path_1 = require("path");
39
+ const crypto_1 = require("crypto");
40
+ /**
41
+ * Append-only JSONL session store for crash-safe persistence.
42
+ * Each message is written as a single line, making recovery simple.
43
+ */
44
+ class JsonlSessionStore {
45
+ basePath;
46
+ constructor(basePath = ".haven/sessions") {
47
+ this.basePath = basePath;
48
+ if (!(0, fs_1.existsSync)(basePath)) {
49
+ (0, fs_1.mkdirSync)(basePath, { recursive: true });
50
+ }
51
+ }
52
+ getSessionPath(sessionId) {
53
+ return (0, path_1.join)(this.basePath, `${sessionId}.jsonl`);
54
+ }
55
+ async append(sessionId, message) {
56
+ const path = this.getSessionPath(sessionId);
57
+ const msg = {
58
+ ...message,
59
+ id: (0, crypto_1.randomUUID)(),
60
+ timestamp: new Date().toISOString(),
61
+ };
62
+ const line = JSON.stringify(msg) + "\n";
63
+ (0, fs_1.appendFileSync)(path, line, "utf8");
64
+ }
65
+ async read(sessionId) {
66
+ const path = this.getSessionPath(sessionId);
67
+ if (!(0, fs_1.existsSync)(path)) {
68
+ return [];
69
+ }
70
+ const { readFileSync } = await Promise.resolve().then(() => __importStar(require("fs")));
71
+ const content = readFileSync(path, "utf8");
72
+ const lines = content.trim().split("\n");
73
+ const messages = [];
74
+ for (const line of lines) {
75
+ if (!line.trim())
76
+ continue;
77
+ try {
78
+ messages.push(JSON.parse(line));
79
+ }
80
+ catch {
81
+ // Skip malformed lines
82
+ }
83
+ }
84
+ return messages;
85
+ }
86
+ async list() {
87
+ const { readdirSync } = await Promise.resolve().then(() => __importStar(require("fs")));
88
+ if (!(0, fs_1.existsSync)(this.basePath)) {
89
+ return [];
90
+ }
91
+ const files = readdirSync(this.basePath);
92
+ return files
93
+ .filter((f) => f.endsWith(".jsonl"))
94
+ .map((f) => f.replace(/\.jsonl$/, ""));
95
+ }
96
+ async delete(sessionId) {
97
+ const { unlinkSync } = await Promise.resolve().then(() => __importStar(require("fs")));
98
+ const path = this.getSessionPath(sessionId);
99
+ if ((0, fs_1.existsSync)(path)) {
100
+ unlinkSync(path);
101
+ }
102
+ }
103
+ }
104
+ exports.JsonlSessionStore = JsonlSessionStore;
105
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { HavenStore, RunRecord, MessageRecord } from "./types";
2
+ export declare class SqliteStore implements HavenStore {
3
+ private db;
4
+ constructor(path?: string);
5
+ init(): Promise<void>;
6
+ close(): Promise<void>;
7
+ createRun(input: string, agentName: string): Promise<RunRecord>;
8
+ finishRun(runId: string, status: RunRecord["status"]): Promise<void>;
9
+ getRun(runId: string): Promise<RunRecord | null>;
10
+ appendMessage(runId: string, msg: Omit<MessageRecord, "id" | "runId" | "createdAt">): Promise<void>;
11
+ getMessages(runId: string): Promise<MessageRecord[]>;
12
+ setState(key: string, value: unknown): Promise<void>;
13
+ getState<T = unknown>(key: string): Promise<T | null>;
14
+ }
15
+ //# sourceMappingURL=sqlite-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-store.d.ts","sourceRoot":"","sources":["../../src/sqlite-store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AA0BpE,qBAAa,WAAY,YAAW,UAAU;IAC5C,OAAO,CAAC,EAAE,CAAW;gBAET,IAAI,SAAmB;IAS7B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAMrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAW/D,SAAS,CACb,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,GAC1B,OAAO,CAAC,IAAI,CAAC;IAOV,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAgBhD,aAAa,CACjB,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,GAAG,OAAO,GAAG,WAAW,CAAC,GACrD,OAAO,CAAC,IAAI,CAAC;IAkBV,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAiBpD,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAMpD,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;CAM5D"}
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SqliteStore = void 0;
4
+ const bun_sqlite_1 = require("bun:sqlite");
5
+ const schema_1 = require("./schema");
6
+ const crypto_1 = require("crypto");
7
+ const fs_1 = require("fs");
8
+ const path_1 = require("path");
9
+ class SqliteStore {
10
+ db;
11
+ constructor(path = ".haven/data.db") {
12
+ if (path !== ":memory:") {
13
+ (0, fs_1.mkdirSync)((0, path_1.dirname)(path), { recursive: true });
14
+ }
15
+ this.db = new bun_sqlite_1.Database(path, { create: true });
16
+ this.db.exec("PRAGMA journal_mode = WAL");
17
+ this.db.exec("PRAGMA foreign_keys = ON");
18
+ }
19
+ async init() {
20
+ for (const migration of schema_1.MIGRATIONS) {
21
+ this.db.exec(migration.up);
22
+ }
23
+ }
24
+ async close() {
25
+ this.db.close();
26
+ }
27
+ async createRun(input, agentName) {
28
+ const id = (0, crypto_1.randomUUID)();
29
+ const now = new Date().toISOString();
30
+ this.db
31
+ .prepare("INSERT INTO runs (id, input, agent_name, status, started_at) VALUES (?, ?, ?, ?, ?)")
32
+ .run(id, input, agentName, "running", now);
33
+ return { id, input, agentName, status: "running", startedAt: now };
34
+ }
35
+ async finishRun(runId, status) {
36
+ const now = new Date().toISOString();
37
+ this.db
38
+ .prepare("UPDATE runs SET status = ?, finished_at = ? WHERE id = ?")
39
+ .run(status, now, runId);
40
+ }
41
+ async getRun(runId) {
42
+ const row = this.db
43
+ .prepare("SELECT * FROM runs WHERE id = ?")
44
+ .get(runId);
45
+ if (!row)
46
+ return null;
47
+ return {
48
+ id: row.id,
49
+ input: row.input,
50
+ agentName: row.agent_name,
51
+ status: row.status,
52
+ startedAt: row.started_at,
53
+ finishedAt: row.finished_at ?? undefined,
54
+ metadata: row.metadata ? JSON.parse(row.metadata) : undefined,
55
+ };
56
+ }
57
+ async appendMessage(runId, msg) {
58
+ const id = (0, crypto_1.randomUUID)();
59
+ const now = new Date().toISOString();
60
+ this.db
61
+ .prepare("INSERT INTO messages (id, run_id, role, content, name, tool_call_id, created_at) VALUES (?, ?, ?, ?, ?, ?, ?)")
62
+ .run(id, runId, msg.role, msg.content, msg.name ?? null, msg.toolCallId ?? null, now);
63
+ }
64
+ async getMessages(runId) {
65
+ const rows = this.db
66
+ .prepare("SELECT * FROM messages WHERE run_id = ? ORDER BY created_at ASC")
67
+ .all(runId);
68
+ return rows.map((row) => ({
69
+ id: row.id,
70
+ runId: row.run_id,
71
+ role: row.role,
72
+ content: row.content,
73
+ name: row.name ?? undefined,
74
+ toolCallId: row.tool_call_id ?? undefined,
75
+ createdAt: row.created_at,
76
+ }));
77
+ }
78
+ async setState(key, value) {
79
+ this.db
80
+ .prepare("INSERT OR REPLACE INTO state (key, value) VALUES (?, ?)")
81
+ .run(key, JSON.stringify(value));
82
+ }
83
+ async getState(key) {
84
+ const row = this.db
85
+ .prepare("SELECT value FROM state WHERE key = ?")
86
+ .get(key);
87
+ return row ? JSON.parse(row.value) : null;
88
+ }
89
+ }
90
+ exports.SqliteStore = SqliteStore;
91
+ //# sourceMappingURL=sqlite-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-store.js","sourceRoot":"","sources":["../../src/sqlite-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import type { Role } from "havensdk";
2
+ export interface RunRecord {
3
+ id: string;
4
+ input: string;
5
+ agentName: string;
6
+ status: "running" | "completed" | "failed";
7
+ startedAt: string;
8
+ finishedAt?: string;
9
+ metadata?: Record<string, unknown>;
10
+ }
11
+ export interface MessageRecord {
12
+ id: string;
13
+ runId: string;
14
+ role: Role;
15
+ content: string;
16
+ name?: string;
17
+ toolCallId?: string;
18
+ createdAt: string;
19
+ }
20
+ export interface HavenStore {
21
+ init(): Promise<void>;
22
+ close(): Promise<void>;
23
+ createRun(input: string, agentName: string): Promise<RunRecord>;
24
+ finishRun(runId: string, status: RunRecord["status"]): Promise<void>;
25
+ getRun(runId: string): Promise<RunRecord | null>;
26
+ appendMessage(runId: string, message: Omit<MessageRecord, "id" | "runId" | "createdAt">): Promise<void>;
27
+ getMessages(runId: string): Promise<MessageRecord[]>;
28
+ setState(key: string, value: unknown): Promise<void>;
29
+ getState<T = unknown>(key: string): Promise<T | null>;
30
+ }
31
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAErC,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAChE,SAAS,CACP,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,GAC1B,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;IAEjD,aAAa,CACX,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,GAAG,OAAO,GAAG,WAAW,CAAC,GACzD,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAErD,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;CACvD"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,36 @@
1
+ export interface VectorSearchResult {
2
+ id: string;
3
+ score: number;
4
+ metadata: Record<string, unknown>;
5
+ content: string;
6
+ }
7
+ export interface VectorStore {
8
+ save(content: string, metadata: Record<string, unknown>): Promise<string>;
9
+ search(query: string, options?: {
10
+ limit?: number;
11
+ }): Promise<VectorSearchResult[]>;
12
+ delete(id: string): Promise<void>;
13
+ }
14
+ /**
15
+ * Simple hash-based vector store for local-first operation.
16
+ * Uses SimHash-like approach for similarity scoring.
17
+ * No external API dependency - works entirely locally.
18
+ */
19
+ export declare class HashVectorStore implements VectorStore {
20
+ private embeddings;
21
+ private idCounter;
22
+ /**
23
+ * Generate a simple hash-based embedding vector (128 dimensions)
24
+ */
25
+ private generateEmbedding;
26
+ /**
27
+ * Compute cosine similarity between two vectors
28
+ */
29
+ private cosineSimilarity;
30
+ save(content: string, metadata?: Record<string, unknown>): Promise<string>;
31
+ search(query: string, options?: {
32
+ limit?: number;
33
+ }): Promise<VectorSearchResult[]>;
34
+ delete(id: string): Promise<void>;
35
+ }
36
+ //# sourceMappingURL=vector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vector.d.ts","sourceRoot":"","sources":["../../src/vector.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1E,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC;IACnF,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnC;AAED;;;;GAIG;AACH,qBAAa,eAAgB,YAAW,WAAW;IACjD,OAAO,CAAC,UAAU,CAAgG;IAClH,OAAO,CAAC,SAAS,CAAK;IAEtB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA6BzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAWlB,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAO9E,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAoBlF,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGxC"}