@dungle-scrubs/hippo 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/LICENSE +21 -0
- package/README.md +439 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +559 -0
- package/dist/cli.js.map +1 -0
- package/dist/db.d.ts +45 -0
- package/dist/db.d.ts.map +1 -0
- package/dist/db.js +80 -0
- package/dist/db.js.map +1 -0
- package/dist/extractor.d.ts +23 -0
- package/dist/extractor.d.ts.map +1 -0
- package/dist/extractor.js +121 -0
- package/dist/extractor.js.map +1 -0
- package/dist/hash.d.ts +11 -0
- package/dist/hash.d.ts.map +1 -0
- package/dist/hash.js +14 -0
- package/dist/hash.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +40 -0
- package/dist/index.js.map +1 -0
- package/dist/providers/embedding.d.ts +27 -0
- package/dist/providers/embedding.d.ts.map +1 -0
- package/dist/providers/embedding.js +41 -0
- package/dist/providers/embedding.js.map +1 -0
- package/dist/providers/llm.d.ts +29 -0
- package/dist/providers/llm.d.ts.map +1 -0
- package/dist/providers/llm.js +74 -0
- package/dist/providers/llm.js.map +1 -0
- package/dist/schema.d.ts +20 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +78 -0
- package/dist/schema.js.map +1 -0
- package/dist/server/config.d.ts +38 -0
- package/dist/server/config.d.ts.map +1 -0
- package/dist/server/config.js +71 -0
- package/dist/server/config.js.map +1 -0
- package/dist/server/index.d.ts +13 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +372 -0
- package/dist/server/index.js.map +1 -0
- package/dist/similarity.d.ts +41 -0
- package/dist/similarity.d.ts.map +1 -0
- package/dist/similarity.js +70 -0
- package/dist/similarity.js.map +1 -0
- package/dist/strength.d.ts +59 -0
- package/dist/strength.d.ts.map +1 -0
- package/dist/strength.js +76 -0
- package/dist/strength.js.map +1 -0
- package/dist/tools/append-memory-block.d.ts +22 -0
- package/dist/tools/append-memory-block.d.ts.map +1 -0
- package/dist/tools/append-memory-block.js +45 -0
- package/dist/tools/append-memory-block.js.map +1 -0
- package/dist/tools/forget-memory.d.ts +31 -0
- package/dist/tools/forget-memory.d.ts.map +1 -0
- package/dist/tools/forget-memory.js +77 -0
- package/dist/tools/forget-memory.js.map +1 -0
- package/dist/tools/index.d.ts +9 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +9 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/recall-conversation.d.ts +21 -0
- package/dist/tools/recall-conversation.d.ts.map +1 -0
- package/dist/tools/recall-conversation.js +93 -0
- package/dist/tools/recall-conversation.js.map +1 -0
- package/dist/tools/recall-memories.d.ts +29 -0
- package/dist/tools/recall-memories.d.ts.map +1 -0
- package/dist/tools/recall-memories.js +106 -0
- package/dist/tools/recall-memories.js.map +1 -0
- package/dist/tools/recall-memory-block.d.ts +21 -0
- package/dist/tools/recall-memory-block.d.ts.map +1 -0
- package/dist/tools/recall-memory-block.js +36 -0
- package/dist/tools/recall-memory-block.js.map +1 -0
- package/dist/tools/remember-facts.d.ts +30 -0
- package/dist/tools/remember-facts.d.ts.map +1 -0
- package/dist/tools/remember-facts.js +235 -0
- package/dist/tools/remember-facts.js.map +1 -0
- package/dist/tools/replace-memory-block.d.ts +25 -0
- package/dist/tools/replace-memory-block.d.ts.map +1 -0
- package/dist/tools/replace-memory-block.js +69 -0
- package/dist/tools/replace-memory-block.js.map +1 -0
- package/dist/tools/store-memory.d.ts +27 -0
- package/dist/tools/store-memory.d.ts.map +1 -0
- package/dist/tools/store-memory.js +129 -0
- package/dist/tools/store-memory.js.map +1 -0
- package/dist/types.d.ts +86 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/ulid.d.ts +13 -0
- package/dist/ulid.d.ts.map +1 -0
- package/dist/ulid.js +39 -0
- package/dist/ulid.js.map +1 -0
- package/package.json +70 -0
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import type { Message } from "@mariozechner/pi-ai";
|
|
2
|
+
import type { Database } from "better-sqlite3";
|
|
3
|
+
/**
|
|
4
|
+
* LLM completion interface — structurally compatible with marrow's LlmClient.
|
|
5
|
+
*
|
|
6
|
+
* Accepts pi-ai's Message[] so marrow's OpenRouterLlmClient can be passed
|
|
7
|
+
* directly without an adapter.
|
|
8
|
+
*/
|
|
9
|
+
export interface LlmClient {
|
|
10
|
+
/**
|
|
11
|
+
* Send messages with a system prompt and get a text response.
|
|
12
|
+
*
|
|
13
|
+
* @param messages - pi-ai Message array (UserMessage | AssistantMessage | ToolResultMessage)
|
|
14
|
+
* @param systemPrompt - System-level instruction
|
|
15
|
+
* @param signal - Optional abort signal
|
|
16
|
+
* @returns The model's text response
|
|
17
|
+
*/
|
|
18
|
+
complete(messages: Message[], systemPrompt: string, signal?: AbortSignal): Promise<string>;
|
|
19
|
+
}
|
|
20
|
+
/** Embedding function injected by the consumer. */
|
|
21
|
+
export type EmbedFn = (text: string, signal?: AbortSignal) => Promise<Float32Array>;
|
|
22
|
+
/** Chunk kind discriminator. */
|
|
23
|
+
export type ChunkKind = "fact" | "memory";
|
|
24
|
+
/** A row from the chunks table. */
|
|
25
|
+
export interface Chunk {
|
|
26
|
+
readonly access_count: number;
|
|
27
|
+
readonly agent_id: string;
|
|
28
|
+
readonly content: string;
|
|
29
|
+
readonly content_hash: string | null;
|
|
30
|
+
readonly created_at: string;
|
|
31
|
+
readonly embedding: Buffer;
|
|
32
|
+
readonly id: string;
|
|
33
|
+
readonly kind: ChunkKind;
|
|
34
|
+
readonly last_accessed_at: string;
|
|
35
|
+
readonly metadata: string | null;
|
|
36
|
+
readonly encounter_count: number;
|
|
37
|
+
readonly running_intensity: number;
|
|
38
|
+
readonly superseded_by: string | null;
|
|
39
|
+
}
|
|
40
|
+
/** A row from the memory_blocks table. */
|
|
41
|
+
export interface MemoryBlock {
|
|
42
|
+
readonly agent_id: string;
|
|
43
|
+
readonly key: string;
|
|
44
|
+
readonly updated_at: string;
|
|
45
|
+
readonly value: string;
|
|
46
|
+
}
|
|
47
|
+
/** A single extracted fact from the LLM extraction pipeline. */
|
|
48
|
+
export interface ExtractedFact {
|
|
49
|
+
readonly fact: string;
|
|
50
|
+
readonly intensity: number;
|
|
51
|
+
}
|
|
52
|
+
/** Classification result for conflict resolution. */
|
|
53
|
+
export type ConflictClassification = "DISTINCT" | "DUPLICATE" | "SUPERSEDES";
|
|
54
|
+
/** Result of a search query against chunks. */
|
|
55
|
+
export interface SearchResult {
|
|
56
|
+
readonly chunk: Chunk;
|
|
57
|
+
readonly score: number;
|
|
58
|
+
}
|
|
59
|
+
/** Options for creating hippo tools. */
|
|
60
|
+
export interface HippoOptions {
|
|
61
|
+
readonly agentId: string;
|
|
62
|
+
readonly db: Database;
|
|
63
|
+
readonly embed: EmbedFn;
|
|
64
|
+
readonly llm: LlmClient;
|
|
65
|
+
readonly messagesTable?: string;
|
|
66
|
+
}
|
|
67
|
+
/** Result summary returned by remember_facts. */
|
|
68
|
+
export interface RememberFactsResult {
|
|
69
|
+
readonly facts: readonly RememberFactAction[];
|
|
70
|
+
}
|
|
71
|
+
/** Action taken for a single extracted fact. */
|
|
72
|
+
export type RememberFactAction = {
|
|
73
|
+
readonly action: "inserted";
|
|
74
|
+
readonly content: string;
|
|
75
|
+
readonly intensity: number;
|
|
76
|
+
} | {
|
|
77
|
+
readonly action: "reinforced";
|
|
78
|
+
readonly content: string;
|
|
79
|
+
readonly newIntensity: number;
|
|
80
|
+
readonly oldIntensity: number;
|
|
81
|
+
} | {
|
|
82
|
+
readonly action: "superseded";
|
|
83
|
+
readonly content: string;
|
|
84
|
+
readonly oldContent: string;
|
|
85
|
+
};
|
|
86
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/dist/ulid.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal ULID generator (Crockford Base32, 48-bit timestamp + 80-bit random).
|
|
3
|
+
*
|
|
4
|
+
* No external dependency needed — ULIDs are just encoded timestamps with randomness.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Generate a ULID (Universally Unique Lexicographically Sortable Identifier).
|
|
8
|
+
*
|
|
9
|
+
* @param timestamp - Optional timestamp in ms (defaults to Date.now())
|
|
10
|
+
* @returns 26-character ULID string
|
|
11
|
+
*/
|
|
12
|
+
export declare function ulid(timestamp?: number): string;
|
|
13
|
+
//# sourceMappingURL=ulid.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ulid.d.ts","sourceRoot":"","sources":["../src/ulid.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAoBH;;;;;GAKG;AACH,wBAAgB,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAY/C"}
|
package/dist/ulid.js
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal ULID generator (Crockford Base32, 48-bit timestamp + 80-bit random).
|
|
3
|
+
*
|
|
4
|
+
* No external dependency needed — ULIDs are just encoded timestamps with randomness.
|
|
5
|
+
*/
|
|
6
|
+
const ENCODING = "0123456789ABCDEFGHJKMNPQRSTVWXYZ";
|
|
7
|
+
/**
|
|
8
|
+
* Encode a number into Crockford Base32 of exactly `len` characters.
|
|
9
|
+
*
|
|
10
|
+
* @param value - Non-negative integer to encode
|
|
11
|
+
* @param len - Output string length (zero-padded)
|
|
12
|
+
* @returns Crockford Base32 string
|
|
13
|
+
*/
|
|
14
|
+
function encodeBase32(value, len) {
|
|
15
|
+
let result = "";
|
|
16
|
+
for (let i = len - 1; i >= 0; i--) {
|
|
17
|
+
result = ENCODING[value & 0x1f] + result;
|
|
18
|
+
value = Math.floor(value / 32);
|
|
19
|
+
}
|
|
20
|
+
return result;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Generate a ULID (Universally Unique Lexicographically Sortable Identifier).
|
|
24
|
+
*
|
|
25
|
+
* @param timestamp - Optional timestamp in ms (defaults to Date.now())
|
|
26
|
+
* @returns 26-character ULID string
|
|
27
|
+
*/
|
|
28
|
+
export function ulid(timestamp) {
|
|
29
|
+
const ts = timestamp ?? Date.now();
|
|
30
|
+
const timePart = encodeBase32(ts, 10);
|
|
31
|
+
// 16 random chars × 5 bits = 80 bits of randomness
|
|
32
|
+
const randomBytes = crypto.getRandomValues(new Uint8Array(16));
|
|
33
|
+
let randomPart = "";
|
|
34
|
+
for (const byte of randomBytes) {
|
|
35
|
+
randomPart += ENCODING[byte & 0x1f];
|
|
36
|
+
}
|
|
37
|
+
return timePart + randomPart;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=ulid.js.map
|
package/dist/ulid.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ulid.js","sourceRoot":"","sources":["../src/ulid.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,QAAQ,GAAG,kCAAkC,CAAC;AAEpD;;;;;;GAMG;AACH,SAAS,YAAY,CAAC,KAAa,EAAE,GAAW;IAC/C,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,MAAM,GAAG,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,MAAM,CAAC;QACzC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,IAAI,CAAC,SAAkB;IACtC,MAAM,EAAE,GAAG,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;IACnC,MAAM,QAAQ,GAAG,YAAY,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAEtC,mDAAmD;IACnD,MAAM,WAAW,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/D,IAAI,UAAU,GAAG,EAAE,CAAC;IACpB,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAChC,UAAU,IAAI,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IACrC,CAAC;IAED,OAAO,QAAQ,GAAG,UAAU,CAAC;AAC9B,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@dungle-scrubs/hippo",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "Persistent memory for AI agents — facts, semantic search, conflict resolution, and decay. SQLite-backed, zero external services.",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"author": "Kevin Frilot",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "git+https://github.com/dungle-scrubs/hippo.git"
|
|
11
|
+
},
|
|
12
|
+
"files": [
|
|
13
|
+
"dist"
|
|
14
|
+
],
|
|
15
|
+
"exports": {
|
|
16
|
+
".": {
|
|
17
|
+
"types": "./dist/index.d.ts",
|
|
18
|
+
"import": "./dist/index.js"
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
"types": "./dist/index.d.ts",
|
|
22
|
+
"bin": {
|
|
23
|
+
"hippo": "./dist/cli.js",
|
|
24
|
+
"hippo-server": "./dist/server/index.js"
|
|
25
|
+
},
|
|
26
|
+
"scripts": {
|
|
27
|
+
"build": "tsc -p tsconfig.build.json",
|
|
28
|
+
"check": "biome check .",
|
|
29
|
+
"format": "biome format --write .",
|
|
30
|
+
"lint": "biome lint .",
|
|
31
|
+
"lint:fix": "biome lint --fix .",
|
|
32
|
+
"prepare": "husky",
|
|
33
|
+
"test": "vitest run",
|
|
34
|
+
"test:watch": "vitest",
|
|
35
|
+
"typecheck": "tsc --noEmit"
|
|
36
|
+
},
|
|
37
|
+
"dependencies": {
|
|
38
|
+
"@modelcontextprotocol/sdk": "^1.27.0",
|
|
39
|
+
"@sinclair/typebox": "^0.34.48",
|
|
40
|
+
"commander": "^14.0.3",
|
|
41
|
+
"express": "^5.2.1",
|
|
42
|
+
"zod": "^4.3.6"
|
|
43
|
+
},
|
|
44
|
+
"peerDependencies": {
|
|
45
|
+
"@mariozechner/pi-agent-core": ">=0.52.0",
|
|
46
|
+
"@mariozechner/pi-ai": ">=0.52.0",
|
|
47
|
+
"better-sqlite3": ">=12.0.0"
|
|
48
|
+
},
|
|
49
|
+
"devDependencies": {
|
|
50
|
+
"@biomejs/biome": "^2.3.14",
|
|
51
|
+
"@mariozechner/pi-agent-core": "0.52.12",
|
|
52
|
+
"@mariozechner/pi-ai": "0.52.12",
|
|
53
|
+
"@types/better-sqlite3": "^7.6.13",
|
|
54
|
+
"@types/express": "^5.0.6",
|
|
55
|
+
"better-sqlite3": "^12.6.2",
|
|
56
|
+
"husky": "^9.1.7",
|
|
57
|
+
"typescript": "^5.9.3",
|
|
58
|
+
"vitest": "^4.0.18"
|
|
59
|
+
},
|
|
60
|
+
"engines": {
|
|
61
|
+
"node": ">=22"
|
|
62
|
+
},
|
|
63
|
+
"packageManager": "pnpm@10.28.1",
|
|
64
|
+
"pnpm": {
|
|
65
|
+
"onlyBuiltDependencies": [
|
|
66
|
+
"better-sqlite3",
|
|
67
|
+
"esbuild"
|
|
68
|
+
]
|
|
69
|
+
}
|
|
70
|
+
}
|