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.
- package/dist/cjs/index.d.ts +10 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +18 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/memory.d.ts +53 -0
- package/dist/cjs/memory.d.ts.map +1 -0
- package/dist/cjs/memory.js +87 -0
- package/dist/cjs/memory.js.map +1 -0
- package/dist/cjs/schema.d.ts +5 -0
- package/dist/cjs/schema.d.ts.map +1 -0
- package/dist/cjs/schema.js +82 -0
- package/dist/cjs/schema.js.map +1 -0
- package/dist/cjs/session.d.ts +27 -0
- package/dist/cjs/session.d.ts.map +1 -0
- package/dist/cjs/session.js +105 -0
- package/dist/cjs/session.js.map +1 -0
- package/dist/cjs/sqlite-store.d.ts +15 -0
- package/dist/cjs/sqlite-store.d.ts.map +1 -0
- package/dist/cjs/sqlite-store.js +91 -0
- package/dist/cjs/sqlite-store.js.map +1 -0
- package/dist/cjs/types.d.ts +31 -0
- package/dist/cjs/types.d.ts.map +1 -0
- package/dist/cjs/types.js +3 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/cjs/vector.d.ts +36 -0
- package/dist/cjs/vector.d.ts.map +1 -0
- package/dist/cjs/vector.js +80 -0
- package/dist/cjs/vector.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/memory.d.ts +53 -0
- package/dist/memory.d.ts.map +1 -0
- package/dist/memory.js +83 -0
- package/dist/memory.js.map +1 -0
- package/dist/schema.d.ts +5 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +79 -0
- package/dist/schema.js.map +1 -0
- package/dist/session.d.ts +27 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +68 -0
- package/dist/session.js.map +1 -0
- package/dist/sqlite-store.d.ts +15 -0
- package/dist/sqlite-store.d.ts.map +1 -0
- package/dist/sqlite-store.js +87 -0
- package/dist/sqlite-store.js.map +1 -0
- package/dist/types.d.ts +31 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/vector.d.ts +36 -0
- package/dist/vector.d.ts.map +1 -0
- package/dist/vector.js +76 -0
- package/dist/vector.js.map +1 -0
- package/package.json +57 -0
package/dist/vector.d.ts
ADDED
|
@@ -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"}
|
package/dist/vector.js
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { createHash } from "crypto";
|
|
2
|
+
/**
|
|
3
|
+
* Simple hash-based vector store for local-first operation.
|
|
4
|
+
* Uses SimHash-like approach for similarity scoring.
|
|
5
|
+
* No external API dependency - works entirely locally.
|
|
6
|
+
*/
|
|
7
|
+
export class HashVectorStore {
|
|
8
|
+
embeddings = new Map();
|
|
9
|
+
idCounter = 0;
|
|
10
|
+
/**
|
|
11
|
+
* Generate a simple hash-based embedding vector (128 dimensions)
|
|
12
|
+
*/
|
|
13
|
+
generateEmbedding(text) {
|
|
14
|
+
const normalized = text.toLowerCase().trim();
|
|
15
|
+
const tokens = normalized.split(/\s+/).filter(t => t.length > 0);
|
|
16
|
+
// Create 128-dimensional vector from n-gram hashes
|
|
17
|
+
const dimensions = 128;
|
|
18
|
+
const vector = new Float32Array(dimensions);
|
|
19
|
+
for (let n = 1; n <= 3; n++) {
|
|
20
|
+
for (let i = 0; i <= tokens.length - n; i++) {
|
|
21
|
+
const ngram = tokens.slice(i, i + n).join(" ");
|
|
22
|
+
const hash = createHash("sha256").update(ngram).digest();
|
|
23
|
+
for (let j = 0; j < Math.min(32, dimensions); j++) {
|
|
24
|
+
vector[j * 4 % dimensions] += hash[j] / 255;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
// Normalize
|
|
29
|
+
const magnitude = Math.sqrt(vector.reduce((sum, v) => sum + v * v, 0));
|
|
30
|
+
if (magnitude > 0) {
|
|
31
|
+
for (let i = 0; i < dimensions; i++) {
|
|
32
|
+
vector[i] /= magnitude;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return Buffer.from(vector.buffer);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Compute cosine similarity between two vectors
|
|
39
|
+
*/
|
|
40
|
+
cosineSimilarity(a, b) {
|
|
41
|
+
const va = new Float32Array(a.buffer, a.byteOffset, a.byteLength / 4);
|
|
42
|
+
const vb = new Float32Array(b.buffer, b.byteOffset, b.byteLength / 4);
|
|
43
|
+
let dot = 0;
|
|
44
|
+
for (let i = 0; i < va.length; i++) {
|
|
45
|
+
dot += va[i] * vb[i];
|
|
46
|
+
}
|
|
47
|
+
return dot; // Already normalized, so dot = cosine
|
|
48
|
+
}
|
|
49
|
+
async save(content, metadata = {}) {
|
|
50
|
+
const id = `vec_${++this.idCounter}_${Date.now()}`;
|
|
51
|
+
const hash = this.generateEmbedding(content);
|
|
52
|
+
this.embeddings.set(id, { hash, metadata, content });
|
|
53
|
+
return id;
|
|
54
|
+
}
|
|
55
|
+
async search(query, options) {
|
|
56
|
+
const limit = options?.limit ?? 5;
|
|
57
|
+
const queryHash = this.generateEmbedding(query);
|
|
58
|
+
const results = [];
|
|
59
|
+
for (const [id, data] of this.embeddings) {
|
|
60
|
+
const score = this.cosineSimilarity(queryHash, data.hash);
|
|
61
|
+
results.push({
|
|
62
|
+
id,
|
|
63
|
+
score,
|
|
64
|
+
metadata: data.metadata,
|
|
65
|
+
content: data.content,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
// Sort by score descending
|
|
69
|
+
results.sort((a, b) => b.score - a.score);
|
|
70
|
+
return results.slice(0, limit);
|
|
71
|
+
}
|
|
72
|
+
async delete(id) {
|
|
73
|
+
this.embeddings.delete(id);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=vector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vector.js","sourceRoot":"","sources":["../src/vector.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "havensdk-store",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "SQLite-backed persistence for Haven runs and state.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/cjs/index.js",
|
|
7
|
+
"module": "dist/index.js",
|
|
8
|
+
"types": "dist/index.d.ts",
|
|
9
|
+
"sideEffects": false,
|
|
10
|
+
"exports": {
|
|
11
|
+
".": {
|
|
12
|
+
"types": "./dist/index.d.ts",
|
|
13
|
+
"import": "./dist/index.js",
|
|
14
|
+
"require": "./dist/cjs/index.js"
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"repository": {
|
|
18
|
+
"type": "git",
|
|
19
|
+
"url": "https://github.com/doanbactam/haven.git"
|
|
20
|
+
},
|
|
21
|
+
"bugs": {
|
|
22
|
+
"url": "https://github.com/doanbactam/haven/issues"
|
|
23
|
+
},
|
|
24
|
+
"homepage": "https://github.com/doanbactam/haven#readme",
|
|
25
|
+
"files": [
|
|
26
|
+
"dist"
|
|
27
|
+
],
|
|
28
|
+
"keywords": [
|
|
29
|
+
"sqlite",
|
|
30
|
+
"store",
|
|
31
|
+
"agents",
|
|
32
|
+
"typescript",
|
|
33
|
+
"bun"
|
|
34
|
+
],
|
|
35
|
+
"license": "MIT",
|
|
36
|
+
"engines": {
|
|
37
|
+
"bun": ">=1.3.0"
|
|
38
|
+
},
|
|
39
|
+
"scripts": {
|
|
40
|
+
"build": "tsc",
|
|
41
|
+
"build:cjs": "tsc -p tsconfig.cjs.json",
|
|
42
|
+
"test": "bun test",
|
|
43
|
+
"types": "tsc --noEmit",
|
|
44
|
+
"lint": "eslint src/",
|
|
45
|
+
"clean": "rm -rf dist",
|
|
46
|
+
"prepublishOnly": "bun run build && bun run build:cjs && bun run types && bun test"
|
|
47
|
+
},
|
|
48
|
+
"publishConfig": {
|
|
49
|
+
"access": "public"
|
|
50
|
+
},
|
|
51
|
+
"dependencies": {
|
|
52
|
+
"havensdk": "workspace:*"
|
|
53
|
+
},
|
|
54
|
+
"devDependencies": {
|
|
55
|
+
"typescript": "^5.8.2"
|
|
56
|
+
}
|
|
57
|
+
}
|