mindcache 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 +53 -0
- package/lib/index.d.ts +31 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +155 -0
- package/lib/index.js.map +1 -0
- package/package.json +72 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 MindCache
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# MindCache
|
|
2
|
+
|
|
3
|
+
A TypeScript library for managing short-term memory in AI agents through a simple, LLM-friendly key-value repository.
|
|
4
|
+
|
|
5
|
+
MindCache aims to solve one of the fundamental challenges in AI agent development: **memory management**. As AI agents interact with users and process information, they need a way to store, retrieve, and reason about contextual data.
|
|
6
|
+
|
|
7
|
+
This library is opinionated and enforced good practices to ease and accelerate the development of AI agents.
|
|
8
|
+
|
|
9
|
+
Managing cross-session memory is out of scope for this library. This is for short-term memory only.
|
|
10
|
+
|
|
11
|
+
## Core Concepts
|
|
12
|
+
|
|
13
|
+
MindCache operates as an intelligent key-value repository designed specifically for AI agents:
|
|
14
|
+
|
|
15
|
+
- **Universal Storage**: Store any data type that an LLM can process - text, images, value of any kind.
|
|
16
|
+
- **LLM-Readable**: The storage format is optimized for LLM consumption, allowing agents to easily understand and reason about stored information
|
|
17
|
+
- **LLM-Writable**: Agents can directly read from and write to the memory store using simple tool calls
|
|
18
|
+
- **System Prompt Generation**: Automatically generate system prompts that summarize the entire memory state, giving your AI agent instant context
|
|
19
|
+
- **Markdown-Friendly**: Markdown is the preferred format for storing data.
|
|
20
|
+
|
|
21
|
+
## Integration & Compatibility
|
|
22
|
+
|
|
23
|
+
MindCache is built with modern web development in mind:
|
|
24
|
+
|
|
25
|
+
- **Vercel AI SDK**: Native compatibility with Vercel's AI SDK for seamless integration
|
|
26
|
+
- **Next.js Ready**: Drop-in support for Next.js projects with minimal configuration
|
|
27
|
+
- **Framework Agnostic**: Works with any TypeScript/JavaScript environment
|
|
28
|
+
- **Edge Compatible**: Designed to work in serverless and edge environments
|
|
29
|
+
|
|
30
|
+
## What's Included
|
|
31
|
+
|
|
32
|
+
This project will ship with:
|
|
33
|
+
|
|
34
|
+
- **Core Library**: The main MindCache TypeScript library
|
|
35
|
+
- **Documentation**: Comprehensive guides and API documentation
|
|
36
|
+
- **Examples**: Multiple implementation examples including:
|
|
37
|
+
- Next.js + Vercel AI SDK integration
|
|
38
|
+
- Basic usage patterns
|
|
39
|
+
- Advanced memory management strategies
|
|
40
|
+
- Real-world use cases
|
|
41
|
+
|
|
42
|
+
## 🚧 Development Status
|
|
43
|
+
|
|
44
|
+
This project is currently in development. The readme file is just there to guide the AI that is writing the code.
|
|
45
|
+
|
|
46
|
+
## 📄 License
|
|
47
|
+
|
|
48
|
+
MIT License - see [LICENSE](LICENSE) for details.
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
|
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
type STM = {
|
|
2
|
+
[key: string]: any;
|
|
3
|
+
};
|
|
4
|
+
type Listener = () => void;
|
|
5
|
+
declare class MindCache {
|
|
6
|
+
private stm;
|
|
7
|
+
private listeners;
|
|
8
|
+
private globalListeners;
|
|
9
|
+
get(key: string): any;
|
|
10
|
+
set(key: string, value: any): void;
|
|
11
|
+
has(key: string): boolean;
|
|
12
|
+
delete(key: string): boolean;
|
|
13
|
+
clear(): void;
|
|
14
|
+
keys(): string[];
|
|
15
|
+
values(): any[];
|
|
16
|
+
entries(): [string, any][];
|
|
17
|
+
size(): number;
|
|
18
|
+
getAll(): STM;
|
|
19
|
+
update(newSTM: STM): void;
|
|
20
|
+
subscribe(key: string, listener: Listener): void;
|
|
21
|
+
unsubscribe(key: string, listener: Listener): void;
|
|
22
|
+
subscribeToAll(listener: Listener): void;
|
|
23
|
+
unsubscribeFromAll(listener: Listener): void;
|
|
24
|
+
private notifyGlobalListeners;
|
|
25
|
+
injectSTM(template: string): string;
|
|
26
|
+
getSTM(): string;
|
|
27
|
+
}
|
|
28
|
+
export declare const mindcache: MindCache;
|
|
29
|
+
export { MindCache };
|
|
30
|
+
export type { STM, Listener };
|
|
31
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,KAAK,GAAG,GAAG;IACT,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB,CAAC;AAEF,KAAK,QAAQ,GAAG,MAAM,IAAI,CAAC;AAE3B,cAAM,SAAS;IACb,OAAO,CAAC,GAAG,CAAW;IACtB,OAAO,CAAC,SAAS,CAAqC;IACtD,OAAO,CAAC,eAAe,CAAkB;IAGzC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG;IAarB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IAUlC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAQzB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAe5B,KAAK,IAAI,IAAI;IAMb,IAAI,IAAI,MAAM,EAAE;IAKhB,MAAM,IAAI,GAAG,EAAE;IAUf,OAAO,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE;IAU1B,IAAI,IAAI,MAAM;IAKd,MAAM,IAAI,GAAG;IAUb,MAAM,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI;IAMzB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAQhD,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAOlD,cAAc,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAKxC,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAK5C,OAAO,CAAC,qBAAqB;IAK7B,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAsBnC,MAAM,IAAI,MAAM;CAYjB;AAGD,eAAO,MAAM,SAAS,WAAkB,CAAC;AAGzC,OAAO,EAAE,SAAS,EAAE,CAAC;AAGrB,YAAY,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC"}
|
package/lib/index.js
ADDED
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MindCache = exports.mindcache = void 0;
|
|
4
|
+
class MindCache {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.stm = {};
|
|
7
|
+
this.listeners = {};
|
|
8
|
+
this.globalListeners = [];
|
|
9
|
+
}
|
|
10
|
+
// Get a value from the STM
|
|
11
|
+
get(key) {
|
|
12
|
+
if (key === '$date') {
|
|
13
|
+
const today = new Date();
|
|
14
|
+
return today.toISOString().split('T')[0];
|
|
15
|
+
}
|
|
16
|
+
if (key === '$time') {
|
|
17
|
+
const now = new Date();
|
|
18
|
+
return now.toTimeString().split(' ')[0];
|
|
19
|
+
}
|
|
20
|
+
return this.stm[key];
|
|
21
|
+
}
|
|
22
|
+
// Set a value in the STM
|
|
23
|
+
set(key, value) {
|
|
24
|
+
//console.log('Setting STM:', key, value);
|
|
25
|
+
this.stm[key] = value;
|
|
26
|
+
if (this.listeners[key]) {
|
|
27
|
+
this.listeners[key].forEach(listener => listener());
|
|
28
|
+
}
|
|
29
|
+
this.notifyGlobalListeners();
|
|
30
|
+
}
|
|
31
|
+
// Check if a key exists in the STM
|
|
32
|
+
has(key) {
|
|
33
|
+
if (key === '$date' || key === '$time') {
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
return key in this.stm;
|
|
37
|
+
}
|
|
38
|
+
// Delete a key-value pair from the STM
|
|
39
|
+
delete(key) {
|
|
40
|
+
if (!(key in this.stm)) {
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
const deleted = delete this.stm[key];
|
|
44
|
+
if (deleted) {
|
|
45
|
+
this.notifyGlobalListeners();
|
|
46
|
+
if (this.listeners[key]) {
|
|
47
|
+
this.listeners[key].forEach(listener => listener());
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return deleted;
|
|
51
|
+
}
|
|
52
|
+
// Clear the entire STM
|
|
53
|
+
clear() {
|
|
54
|
+
this.stm = {};
|
|
55
|
+
this.notifyGlobalListeners();
|
|
56
|
+
}
|
|
57
|
+
// Get all keys in the STM
|
|
58
|
+
keys() {
|
|
59
|
+
return [...Object.keys(this.stm), '$date', '$time'];
|
|
60
|
+
}
|
|
61
|
+
// Get all values in the STM
|
|
62
|
+
values() {
|
|
63
|
+
const now = new Date();
|
|
64
|
+
return [
|
|
65
|
+
...Object.values(this.stm),
|
|
66
|
+
now.toISOString().split('T')[0],
|
|
67
|
+
now.toTimeString().split(' ')[0]
|
|
68
|
+
];
|
|
69
|
+
}
|
|
70
|
+
// Get all entries (key-value pairs) in the STM
|
|
71
|
+
entries() {
|
|
72
|
+
const now = new Date();
|
|
73
|
+
return [
|
|
74
|
+
...Object.entries(this.stm),
|
|
75
|
+
['$date', now.toISOString().split('T')[0]],
|
|
76
|
+
['$time', now.toTimeString().split(' ')[0]]
|
|
77
|
+
];
|
|
78
|
+
}
|
|
79
|
+
// Get the size of the STM
|
|
80
|
+
size() {
|
|
81
|
+
return Object.keys(this.stm).length + 2; // +2 for $date and $time
|
|
82
|
+
}
|
|
83
|
+
// Get a copy of the entire STM object
|
|
84
|
+
getAll() {
|
|
85
|
+
const now = new Date();
|
|
86
|
+
return {
|
|
87
|
+
...this.stm,
|
|
88
|
+
'$date': now.toISOString().split('T')[0],
|
|
89
|
+
'$time': now.toTimeString().split(' ')[0]
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
// Update the STM with multiple key-value pairs
|
|
93
|
+
update(newSTM) {
|
|
94
|
+
this.stm = { ...this.stm, ...newSTM };
|
|
95
|
+
this.notifyGlobalListeners();
|
|
96
|
+
}
|
|
97
|
+
// Subscribe to changes for a specific key
|
|
98
|
+
subscribe(key, listener) {
|
|
99
|
+
if (!this.listeners[key]) {
|
|
100
|
+
this.listeners[key] = [];
|
|
101
|
+
}
|
|
102
|
+
this.listeners[key].push(listener);
|
|
103
|
+
}
|
|
104
|
+
// Unsubscribe from changes for a specific key
|
|
105
|
+
unsubscribe(key, listener) {
|
|
106
|
+
if (this.listeners[key]) {
|
|
107
|
+
this.listeners[key] = this.listeners[key].filter(l => l !== listener);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
// Subscribe to changes for all STM keys
|
|
111
|
+
subscribeToAll(listener) {
|
|
112
|
+
this.globalListeners.push(listener);
|
|
113
|
+
}
|
|
114
|
+
// Unsubscribe from all STM changes
|
|
115
|
+
unsubscribeFromAll(listener) {
|
|
116
|
+
this.globalListeners = this.globalListeners.filter(l => l !== listener);
|
|
117
|
+
}
|
|
118
|
+
// Helper method to notify all global listeners
|
|
119
|
+
notifyGlobalListeners() {
|
|
120
|
+
this.globalListeners.forEach(listener => listener());
|
|
121
|
+
}
|
|
122
|
+
// Replace placeholders in a string with STM values
|
|
123
|
+
injectSTM(template) {
|
|
124
|
+
// find all the keys in the template
|
|
125
|
+
const keys = template.match(/\{([$\w]+)\}/g);
|
|
126
|
+
if (!keys) {
|
|
127
|
+
return template;
|
|
128
|
+
}
|
|
129
|
+
// Extract the actual key names without the curly braces
|
|
130
|
+
const cleanKeys = keys.map(key => key.replace(/[{}]/g, ''));
|
|
131
|
+
// Build inputValues with the clean keys
|
|
132
|
+
const inputValues = cleanKeys.reduce((acc, key) => ({
|
|
133
|
+
...acc,
|
|
134
|
+
[key]: this.get(key)
|
|
135
|
+
}), {});
|
|
136
|
+
// Replace the placeholders with actual values
|
|
137
|
+
return template.replace(/\{([$\w]+)\}/g, (match, key) => inputValues[key] || '');
|
|
138
|
+
}
|
|
139
|
+
// Get a formatted string of all STM key-value pairs
|
|
140
|
+
getSTM() {
|
|
141
|
+
const now = new Date();
|
|
142
|
+
const stmWithDateTime = {
|
|
143
|
+
...this.stm,
|
|
144
|
+
'$date': now.toISOString().split('T')[0],
|
|
145
|
+
'$time': now.toTimeString().split(' ')[0]
|
|
146
|
+
};
|
|
147
|
+
return Object.entries(stmWithDateTime)
|
|
148
|
+
.map(([key, value]) => `${key}: ${value}`)
|
|
149
|
+
.join(', ');
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
exports.MindCache = MindCache;
|
|
153
|
+
// Create and export a single instance of MindCache
|
|
154
|
+
exports.mindcache = new MindCache();
|
|
155
|
+
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "mindcache",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "A TypeScript library for managing short-term memory in AI agents through a simple, LLM-friendly key-value repository",
|
|
5
|
+
"main": "lib/index.js",
|
|
6
|
+
"types": "lib/index.d.ts",
|
|
7
|
+
"files": [
|
|
8
|
+
"lib/**/*",
|
|
9
|
+
"README.md",
|
|
10
|
+
"LICENSE"
|
|
11
|
+
],
|
|
12
|
+
"scripts": {
|
|
13
|
+
"build": "tsc",
|
|
14
|
+
"build:watch": "tsc --watch",
|
|
15
|
+
"test": "jest",
|
|
16
|
+
"test:watch": "jest --watch",
|
|
17
|
+
"lint": "eslint src/**/*.ts",
|
|
18
|
+
"lint:fix": "eslint src/**/*.ts --fix",
|
|
19
|
+
"prepublishOnly": "npm run build",
|
|
20
|
+
"dev": "tsc --watch",
|
|
21
|
+
"clean": "rimraf lib"
|
|
22
|
+
},
|
|
23
|
+
"keywords": [
|
|
24
|
+
"ai",
|
|
25
|
+
"llm",
|
|
26
|
+
"memory",
|
|
27
|
+
"agent",
|
|
28
|
+
"typescript",
|
|
29
|
+
"vercel-ai-sdk",
|
|
30
|
+
"nextjs",
|
|
31
|
+
"key-value",
|
|
32
|
+
"storage",
|
|
33
|
+
"context"
|
|
34
|
+
],
|
|
35
|
+
"author": "MindCache Team",
|
|
36
|
+
"license": "MIT",
|
|
37
|
+
"repository": {
|
|
38
|
+
"type": "git",
|
|
39
|
+
"url": "https://github.com/your-username/mindcache.git"
|
|
40
|
+
},
|
|
41
|
+
"bugs": {
|
|
42
|
+
"url": "https://github.com/your-username/mindcache/issues"
|
|
43
|
+
},
|
|
44
|
+
"homepage": "https://github.com/your-username/mindcache#readme",
|
|
45
|
+
"devDependencies": {
|
|
46
|
+
"@types/jest": "^29.5.0",
|
|
47
|
+
"@types/node": "^20.0.0",
|
|
48
|
+
"@typescript-eslint/eslint-plugin": "^6.0.0",
|
|
49
|
+
"@typescript-eslint/parser": "^6.0.0",
|
|
50
|
+
"audit-ci": "^7.0.0",
|
|
51
|
+
"eslint": "^8.0.0",
|
|
52
|
+
"eslint-config-standard": "^17.1.0",
|
|
53
|
+
"jest": "^29.5.0",
|
|
54
|
+
"rimraf": "^5.0.0",
|
|
55
|
+
"ts-jest": "^29.1.0",
|
|
56
|
+
"typescript": "^5.0.0"
|
|
57
|
+
},
|
|
58
|
+
"peerDependencies": {
|
|
59
|
+
"ai": "^3.0.0"
|
|
60
|
+
},
|
|
61
|
+
"peerDependenciesMeta": {
|
|
62
|
+
"ai": {
|
|
63
|
+
"optional": true
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
"engines": {
|
|
67
|
+
"node": ">=18.0.0"
|
|
68
|
+
},
|
|
69
|
+
"publishConfig": {
|
|
70
|
+
"access": "public"
|
|
71
|
+
}
|
|
72
|
+
}
|