borderless-agent 0.0.1-alpha.1

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 (90) hide show
  1. package/README.md +274 -0
  2. package/dist/agentBuilder.d.ts +51 -0
  3. package/dist/agentBuilder.d.ts.map +1 -0
  4. package/dist/agentBuilder.js +130 -0
  5. package/dist/agentBuilder.js.map +1 -0
  6. package/dist/agentInstance.d.ts +45 -0
  7. package/dist/agentInstance.d.ts.map +1 -0
  8. package/dist/agentInstance.js +501 -0
  9. package/dist/agentInstance.js.map +1 -0
  10. package/dist/agentsCore.d.ts +16 -0
  11. package/dist/agentsCore.d.ts.map +1 -0
  12. package/dist/agentsCore.js +50 -0
  13. package/dist/agentsCore.js.map +1 -0
  14. package/dist/cli/index.d.ts +5 -0
  15. package/dist/cli/index.d.ts.map +1 -0
  16. package/dist/cli/index.js +11 -0
  17. package/dist/cli/index.js.map +1 -0
  18. package/dist/cli/main.d.ts +36 -0
  19. package/dist/cli/main.d.ts.map +1 -0
  20. package/dist/cli/main.js +306 -0
  21. package/dist/cli/main.js.map +1 -0
  22. package/dist/config.d.ts +26 -0
  23. package/dist/config.d.ts.map +1 -0
  24. package/dist/config.js +98 -0
  25. package/dist/config.js.map +1 -0
  26. package/dist/contextCore.d.ts +97 -0
  27. package/dist/contextCore.d.ts.map +1 -0
  28. package/dist/contextCore.js +533 -0
  29. package/dist/contextCore.js.map +1 -0
  30. package/dist/index.d.ts +28 -0
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +46 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/llmProtocol.d.ts +60 -0
  35. package/dist/llmProtocol.d.ts.map +1 -0
  36. package/dist/llmProtocol.js +202 -0
  37. package/dist/llmProtocol.js.map +1 -0
  38. package/dist/loopCore.d.ts +22 -0
  39. package/dist/loopCore.d.ts.map +1 -0
  40. package/dist/loopCore.js +288 -0
  41. package/dist/loopCore.js.map +1 -0
  42. package/dist/main.d.ts +9 -0
  43. package/dist/main.d.ts.map +1 -0
  44. package/dist/main.js +15 -0
  45. package/dist/main.js.map +1 -0
  46. package/dist/memoryCore.d.ts +37 -0
  47. package/dist/memoryCore.d.ts.map +1 -0
  48. package/dist/memoryCore.js +346 -0
  49. package/dist/memoryCore.js.map +1 -0
  50. package/dist/server/app.d.ts +13 -0
  51. package/dist/server/app.d.ts.map +1 -0
  52. package/dist/server/app.js +200 -0
  53. package/dist/server/app.js.map +1 -0
  54. package/dist/sessionCore.d.ts +54 -0
  55. package/dist/sessionCore.d.ts.map +1 -0
  56. package/dist/sessionCore.js +312 -0
  57. package/dist/sessionCore.js.map +1 -0
  58. package/dist/skillsCore.d.ts +23 -0
  59. package/dist/skillsCore.d.ts.map +1 -0
  60. package/dist/skillsCore.js +202 -0
  61. package/dist/skillsCore.js.map +1 -0
  62. package/dist/storage/cloudBackend.d.ts +48 -0
  63. package/dist/storage/cloudBackend.d.ts.map +1 -0
  64. package/dist/storage/cloudBackend.js +301 -0
  65. package/dist/storage/cloudBackend.js.map +1 -0
  66. package/dist/storage/fileBackend.d.ts +41 -0
  67. package/dist/storage/fileBackend.d.ts.map +1 -0
  68. package/dist/storage/fileBackend.js +240 -0
  69. package/dist/storage/fileBackend.js.map +1 -0
  70. package/dist/storage/index.d.ts +21 -0
  71. package/dist/storage/index.d.ts.map +1 -0
  72. package/dist/storage/index.js +58 -0
  73. package/dist/storage/index.js.map +1 -0
  74. package/dist/storage/protocols.d.ts +29 -0
  75. package/dist/storage/protocols.d.ts.map +1 -0
  76. package/dist/storage/protocols.js +20 -0
  77. package/dist/storage/protocols.js.map +1 -0
  78. package/dist/todoCore.d.ts +15 -0
  79. package/dist/todoCore.d.ts.map +1 -0
  80. package/dist/todoCore.js +52 -0
  81. package/dist/todoCore.js.map +1 -0
  82. package/dist/toolsCore.d.ts +31 -0
  83. package/dist/toolsCore.d.ts.map +1 -0
  84. package/dist/toolsCore.js +609 -0
  85. package/dist/toolsCore.js.map +1 -0
  86. package/dist/types.d.ts +144 -0
  87. package/dist/types.d.ts.map +1 -0
  88. package/dist/types.js +8 -0
  89. package/dist/types.js.map +1 -0
  90. package/package.json +48 -0
@@ -0,0 +1,37 @@
1
+ /**
2
+ * memoryCore.ts - Long-term memory store (episodic + semantic, retrieval, forgetting).
3
+ *
4
+ * Implements:
5
+ * - Episodic: concrete events
6
+ * - Semantic: distilled insights
7
+ * - Retrieval: score = α·Recency + β·Importance + γ·Relevance
8
+ * - Forgetting: garbage collection by TTL and max_items
9
+ * - Sensitive data detection and sanitization
10
+ */
11
+ export interface MemoryStore {
12
+ load(): Record<string, any>[];
13
+ save(items: Record<string, any>[]): void;
14
+ }
15
+ export declare function setMemoryStore(store: MemoryStore | null): void;
16
+ export declare const MEMORY_ENABLED: boolean;
17
+ export declare const MAX_HISTORY_TURNS = 30;
18
+ export declare const MAX_MEMORY_ITEMS = 500;
19
+ export declare const MAX_MEMORY_AGE_DAYS = 90;
20
+ export declare const ALPHA_RECENCY = 0.25;
21
+ export declare const BETA_IMPORTANCE = 0.35;
22
+ export declare const GAMMA_RELEVANCE = 0.4;
23
+ export declare function detectSensitiveData(text: string): boolean;
24
+ export declare function sanitizeForStorage(data: any): any;
25
+ export declare function loadUserPreferences(): Record<string, any>;
26
+ export declare function loadProjectKnowledge(): string | null;
27
+ export declare function recordPattern(pattern: Record<string, any>): void;
28
+ export declare function getRelevantPatterns(query: string, limit?: number): Record<string, any>[];
29
+ export declare function writeEvent(content: string, importance?: number): void;
30
+ export declare function writeInsight(content: string, importance?: number): void;
31
+ export declare function retrieve(query: string, k?: number, alpha?: number, beta?: number, gamma?: number): [string, number, Record<string, any>][];
32
+ export declare function garbageCollect(maxItems?: number, maxAgeDays?: number): number;
33
+ export declare function consolidateTurn(userMessage: string, assistantSummary: string, toolCallsSummary?: {
34
+ name: string;
35
+ success: boolean;
36
+ }[]): void;
37
+ //# sourceMappingURL=memoryCore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memoryCore.d.ts","sourceRoot":"","sources":["../src/memoryCore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAWH,MAAM,WAAW,WAAW;IACxB,IAAI,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;IAC9B,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC;CAC5C;AAID,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,GAAG,IAAI,CAE9D;AAGD,eAAO,MAAM,cAAc,SAC2C,CAAC;AASvE,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,eAAO,MAAM,gBAAgB,MAAM,CAAC;AACpC,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAGtC,eAAO,MAAM,aAAa,OAAO,CAAC;AAClC,eAAO,MAAM,eAAe,OAAO,CAAC;AACpC,eAAO,MAAM,eAAe,MAAO,CAAC;AA0CpC,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAMzD;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,CAiBjD;AAMD,wBAAgB,mBAAmB,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAgBzD;AAED,wBAAgB,oBAAoB,IAAI,MAAM,GAAG,IAAI,CAQpD;AA2BD,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAwBhE;AAED,wBAAgB,mBAAmB,CAC/B,KAAK,EAAE,MAAM,EACb,KAAK,GAAE,MAAU,GAClB,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAevB;AA4BD,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,GAAE,MAAY,GAAG,IAAI,CAY1E;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,GAAE,MAAY,GAAG,IAAI,CAY5E;AAED,wBAAgB,QAAQ,CACpB,KAAK,EAAE,MAAM,EACb,CAAC,GAAE,MAAU,EACb,KAAK,GAAE,MAAsB,EAC7B,IAAI,GAAE,MAAwB,EAC9B,KAAK,GAAE,MAAwB,GAChC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,CAezC;AAED,wBAAgB,cAAc,CAC1B,QAAQ,GAAE,MAAyB,EACnC,UAAU,GAAE,MAA4B,GACzC,MAAM,CAcR;AAED,wBAAgB,eAAe,CAC3B,WAAW,EAAE,MAAM,EACnB,gBAAgB,EAAE,MAAM,EACxB,gBAAgB,CAAC,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,EAAE,GACxD,IAAI,CAyBN"}
@@ -0,0 +1,346 @@
1
+ "use strict";
2
+ /**
3
+ * memoryCore.ts - Long-term memory store (episodic + semantic, retrieval, forgetting).
4
+ *
5
+ * Implements:
6
+ * - Episodic: concrete events
7
+ * - Semantic: distilled insights
8
+ * - Retrieval: score = α·Recency + β·Importance + γ·Relevance
9
+ * - Forgetting: garbage collection by TTL and max_items
10
+ * - Sensitive data detection and sanitization
11
+ */
12
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ var desc = Object.getOwnPropertyDescriptor(m, k);
15
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
16
+ desc = { enumerable: true, get: function() { return m[k]; } };
17
+ }
18
+ Object.defineProperty(o, k2, desc);
19
+ }) : (function(o, m, k, k2) {
20
+ if (k2 === undefined) k2 = k;
21
+ o[k2] = m[k];
22
+ }));
23
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
24
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
25
+ }) : function(o, v) {
26
+ o["default"] = v;
27
+ });
28
+ var __importStar = (this && this.__importStar) || (function () {
29
+ var ownKeys = function(o) {
30
+ ownKeys = Object.getOwnPropertyNames || function (o) {
31
+ var ar = [];
32
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
33
+ return ar;
34
+ };
35
+ return ownKeys(o);
36
+ };
37
+ return function (mod) {
38
+ if (mod && mod.__esModule) return mod;
39
+ var result = {};
40
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
41
+ __setModuleDefault(result, mod);
42
+ return result;
43
+ };
44
+ })();
45
+ Object.defineProperty(exports, "__esModule", { value: true });
46
+ exports.GAMMA_RELEVANCE = exports.BETA_IMPORTANCE = exports.ALPHA_RECENCY = exports.MAX_MEMORY_AGE_DAYS = exports.MAX_MEMORY_ITEMS = exports.MAX_HISTORY_TURNS = exports.MEMORY_ENABLED = void 0;
47
+ exports.setMemoryStore = setMemoryStore;
48
+ exports.detectSensitiveData = detectSensitiveData;
49
+ exports.sanitizeForStorage = sanitizeForStorage;
50
+ exports.loadUserPreferences = loadUserPreferences;
51
+ exports.loadProjectKnowledge = loadProjectKnowledge;
52
+ exports.recordPattern = recordPattern;
53
+ exports.getRelevantPatterns = getRelevantPatterns;
54
+ exports.writeEvent = writeEvent;
55
+ exports.writeInsight = writeInsight;
56
+ exports.retrieve = retrieve;
57
+ exports.garbageCollect = garbageCollect;
58
+ exports.consolidateTurn = consolidateTurn;
59
+ const fs = __importStar(require("fs"));
60
+ const path = __importStar(require("path"));
61
+ const uuid_1 = require("uuid");
62
+ const config_1 = require("./config");
63
+ let _memoryStore = null;
64
+ function setMemoryStore(store) {
65
+ _memoryStore = store;
66
+ }
67
+ // Disable via AGENT_MEMORY=0
68
+ exports.MEMORY_ENABLED = !['0', 'false'].includes((process.env.AGENT_MEMORY ?? '1').trim());
69
+ const MEMORY_DIR = process.env.AGENT_MEMORY_DIR ?? path.join(config_1.WORKDIR, 'data', 'memory');
70
+ const MEMORY_FILE = path.join(MEMORY_DIR, 'memories.json');
71
+ const PREFERENCES_FILE = process.env.AGENT_PREFERENCES_FILE ?? path.join(MEMORY_DIR, 'preferences.json');
72
+ const PATTERNS_FILE = process.env.AGENT_PATTERNS_FILE ?? path.join(MEMORY_DIR, 'patterns.json');
73
+ exports.MAX_HISTORY_TURNS = 30;
74
+ exports.MAX_MEMORY_ITEMS = 500;
75
+ exports.MAX_MEMORY_AGE_DAYS = 90;
76
+ // Retrieval weights
77
+ exports.ALPHA_RECENCY = 0.25;
78
+ exports.BETA_IMPORTANCE = 0.35;
79
+ exports.GAMMA_RELEVANCE = 0.40;
80
+ // ---------------------------------------------------------------------------
81
+ // File helpers
82
+ // ---------------------------------------------------------------------------
83
+ function ensureDir(dir) {
84
+ fs.mkdirSync(dir, { recursive: true });
85
+ }
86
+ function loadMemories() {
87
+ if (_memoryStore)
88
+ return _memoryStore.load();
89
+ ensureDir(MEMORY_DIR);
90
+ if (!fs.existsSync(MEMORY_FILE))
91
+ return [];
92
+ try {
93
+ return JSON.parse(fs.readFileSync(MEMORY_FILE, 'utf-8'));
94
+ }
95
+ catch {
96
+ return [];
97
+ }
98
+ }
99
+ function saveMemories(items) {
100
+ const sanitized = sanitizeForStorage(items);
101
+ if (_memoryStore) {
102
+ _memoryStore.save(sanitized);
103
+ return;
104
+ }
105
+ ensureDir(MEMORY_DIR);
106
+ fs.writeFileSync(MEMORY_FILE, JSON.stringify(sanitized, null, 2), 'utf-8');
107
+ }
108
+ // ---------------------------------------------------------------------------
109
+ // Privacy: sensitive data detection and sanitization
110
+ // ---------------------------------------------------------------------------
111
+ const SENSITIVE_PATTERNS = [
112
+ [/\b(api[_-]?key|apikey)\s*[:=]\s*[\w\-]+/gi, '***'],
113
+ [/\b(password|passwd|pwd)\s*[:=]\s*\S+/gi, '***'],
114
+ [/\b(token|secret|auth)\s*[:=]\s*[\w\-.]+/gi, '***'],
115
+ [/\b(credit[_\s]?card|card\s*#?)\s*[:=]?\s*\d[\d\s\-]+/gi, '***'],
116
+ ];
117
+ function detectSensitiveData(text) {
118
+ if (!text || typeof text !== 'string')
119
+ return false;
120
+ const lower = text.toLowerCase();
121
+ return [
122
+ 'api_key', 'api-key', 'password', 'token', 'secret', 'credential', 'private_key',
123
+ ].some((p) => lower.includes(p));
124
+ }
125
+ function sanitizeForStorage(data) {
126
+ if (typeof data === 'object' && data !== null) {
127
+ if (Array.isArray(data))
128
+ return data.map(sanitizeForStorage);
129
+ const result = {};
130
+ for (const [k, v] of Object.entries(data)) {
131
+ result[k] = sanitizeForStorage(v);
132
+ }
133
+ return result;
134
+ }
135
+ if (typeof data === 'string') {
136
+ let out = data;
137
+ for (const [pat, repl] of SENSITIVE_PATTERNS) {
138
+ out = out.replace(pat, repl);
139
+ }
140
+ return out;
141
+ }
142
+ return data;
143
+ }
144
+ // ---------------------------------------------------------------------------
145
+ // User preferences, project knowledge, patterns
146
+ // ---------------------------------------------------------------------------
147
+ function loadUserPreferences() {
148
+ const prefPath = path.isAbsolute(PREFERENCES_FILE)
149
+ ? PREFERENCES_FILE
150
+ : path.join(MEMORY_DIR, path.basename(PREFERENCES_FILE));
151
+ if (!fs.existsSync(prefPath)) {
152
+ return {
153
+ model: process.env.MODEL_ID ?? 'gpt-4o',
154
+ permissions: {},
155
+ features: [],
156
+ };
157
+ }
158
+ try {
159
+ return JSON.parse(fs.readFileSync(prefPath, 'utf-8'));
160
+ }
161
+ catch {
162
+ return { model: process.env.MODEL_ID ?? 'gpt-4o', permissions: {}, features: [] };
163
+ }
164
+ }
165
+ function loadProjectKnowledge() {
166
+ const claudeMd = path.join(config_1.WORKDIR, 'CLAUDE.md');
167
+ if (!fs.existsSync(claudeMd))
168
+ return null;
169
+ try {
170
+ return fs.readFileSync(claudeMd, 'utf-8').trim();
171
+ }
172
+ catch {
173
+ return null;
174
+ }
175
+ }
176
+ function loadPatternsRaw() {
177
+ const pPath = path.isAbsolute(PATTERNS_FILE)
178
+ ? PATTERNS_FILE
179
+ : path.join(MEMORY_DIR, path.basename(PATTERNS_FILE));
180
+ if (!fs.existsSync(pPath))
181
+ return [];
182
+ try {
183
+ const data = JSON.parse(fs.readFileSync(pPath, 'utf-8'));
184
+ return Array.isArray(data) ? data : [];
185
+ }
186
+ catch {
187
+ return [];
188
+ }
189
+ }
190
+ function savePatternsRaw(items) {
191
+ const pPath = path.isAbsolute(PATTERNS_FILE)
192
+ ? PATTERNS_FILE
193
+ : path.join(MEMORY_DIR, path.basename(PATTERNS_FILE));
194
+ ensureDir(MEMORY_DIR);
195
+ fs.writeFileSync(pPath, JSON.stringify(sanitizeForStorage(items), null, 2), 'utf-8');
196
+ }
197
+ function recordPattern(pattern) {
198
+ const now = Date.now() / 1000;
199
+ const patterns = loadPatternsRaw();
200
+ const name = pattern.name ?? pattern.type ?? '';
201
+ const existing = patterns.find((p) => p.name === name ||
202
+ (p.type === pattern.type && p.context === pattern.context));
203
+ if (existing) {
204
+ existing.frequency = (existing.frequency ?? 0) + 1;
205
+ existing.last_used = now;
206
+ for (const [k, v] of Object.entries(pattern)) {
207
+ if (k !== 'frequency' && k !== 'last_used')
208
+ existing[k] = v;
209
+ }
210
+ }
211
+ else {
212
+ patterns.push({
213
+ ...pattern,
214
+ frequency: pattern.frequency ?? 1,
215
+ last_used: pattern.last_used ?? now,
216
+ });
217
+ }
218
+ patterns.sort((a, b) => -(a.frequency ?? 0) + (b.frequency ?? 0) || -(a.last_used ?? 0) + (b.last_used ?? 0));
219
+ savePatternsRaw(patterns.slice(0, 500));
220
+ }
221
+ function getRelevantPatterns(query, limit = 5) {
222
+ if (!query?.trim())
223
+ return [];
224
+ const words = new Set(normalizeText(query));
225
+ const patterns = loadPatternsRaw();
226
+ const scored = [];
227
+ for (const p of patterns) {
228
+ const ctx = (p.context ?? '') + ' ' + (p.name ?? '') + ' ' + (p.type ?? '');
229
+ const ctxWords = new Set(normalizeText(ctx));
230
+ let overlap = 0;
231
+ for (const w of words)
232
+ if (ctxWords.has(w))
233
+ overlap++;
234
+ scored.push([overlap / Math.max(1, words.size), p]);
235
+ }
236
+ scored.sort((a, b) => b[0] - a[0]);
237
+ return scored.slice(0, limit).map(([, p]) => p);
238
+ }
239
+ // ---------------------------------------------------------------------------
240
+ // Text helpers
241
+ // ---------------------------------------------------------------------------
242
+ function normalizeText(text) {
243
+ return (text ?? '').trim().toLowerCase().match(/\w{2,}/g) ?? [];
244
+ }
245
+ function relevanceScore(query, content) {
246
+ const qWords = new Set(normalizeText(query));
247
+ const cWords = new Set(normalizeText(content));
248
+ if (qWords.size === 0)
249
+ return 0;
250
+ let overlap = 0;
251
+ for (const w of qWords)
252
+ if (cWords.has(w))
253
+ overlap++;
254
+ return Math.min(1.0, overlap / qWords.size + (0.1 * overlap) / Math.max(1, cWords.size));
255
+ }
256
+ function recencyScore(createdTs, now) {
257
+ const daysAgo = (now - createdTs) / 86400;
258
+ return Math.pow(0.99, daysAgo);
259
+ }
260
+ // ---------------------------------------------------------------------------
261
+ // Core memory operations
262
+ // ---------------------------------------------------------------------------
263
+ function writeEvent(content, importance = 0.5) {
264
+ const items = loadMemories();
265
+ const now = Date.now() / 1000;
266
+ items.push({
267
+ id: (0, uuid_1.v4)(),
268
+ type: 'episodic',
269
+ content: (content || '').trim().slice(0, 2000),
270
+ importance: Math.max(0, Math.min(1, importance)),
271
+ created_at: now,
272
+ last_accessed: now,
273
+ });
274
+ saveMemories(items);
275
+ }
276
+ function writeInsight(content, importance = 0.6) {
277
+ const items = loadMemories();
278
+ const now = Date.now() / 1000;
279
+ items.push({
280
+ id: (0, uuid_1.v4)(),
281
+ type: 'semantic',
282
+ content: (content || '').trim().slice(0, 2000),
283
+ importance: Math.max(0, Math.min(1, importance)),
284
+ created_at: now,
285
+ last_accessed: now,
286
+ });
287
+ saveMemories(items);
288
+ }
289
+ function retrieve(query, k = 5, alpha = exports.ALPHA_RECENCY, beta = exports.BETA_IMPORTANCE, gamma = exports.GAMMA_RELEVANCE) {
290
+ if (!exports.MEMORY_ENABLED)
291
+ return [];
292
+ const items = loadMemories();
293
+ if (!items.length)
294
+ return [];
295
+ const now = Date.now() / 1000;
296
+ const scored = [];
297
+ for (const m of items) {
298
+ const rec = recencyScore(m.created_at, now);
299
+ const imp = m.importance ?? 0.5;
300
+ const rel = relevanceScore(query, m.content ?? '');
301
+ const score = alpha * rec + beta * imp + gamma * rel;
302
+ scored.push([score, m]);
303
+ }
304
+ scored.sort((a, b) => b[0] - a[0]);
305
+ return scored.slice(0, k).map(([score, m]) => [m.content, score, m]);
306
+ }
307
+ function garbageCollect(maxItems = exports.MAX_MEMORY_ITEMS, maxAgeDays = exports.MAX_MEMORY_AGE_DAYS) {
308
+ const items = loadMemories();
309
+ const now = Date.now() / 1000;
310
+ const cutoffTs = now - maxAgeDays * 86400;
311
+ let kept = items.filter((m) => m.created_at >= cutoffTs || (m.importance ?? 0) >= 0.7);
312
+ kept.sort((a, b) => -(a.importance ?? 0) + (b.importance ?? 0) || -a.created_at + b.created_at);
313
+ kept = kept.slice(0, maxItems);
314
+ const removed = items.length - kept.length;
315
+ saveMemories(kept);
316
+ return removed;
317
+ }
318
+ function consolidateTurn(userMessage, assistantSummary, toolCallsSummary) {
319
+ if (!exports.MEMORY_ENABLED)
320
+ return;
321
+ if (!userMessage && !assistantSummary)
322
+ return;
323
+ const content = `User: ${userMessage.slice(0, 200)}. Assistant: ${assistantSummary.slice(0, 300)}.`;
324
+ writeEvent(content, 0.4);
325
+ recordPattern({
326
+ type: 'turn',
327
+ name: 'conversation_turn',
328
+ context: userMessage.slice(0, 150),
329
+ });
330
+ if (toolCallsSummary) {
331
+ for (const tc of toolCallsSummary) {
332
+ if (tc.success) {
333
+ recordPattern({
334
+ type: 'tool_use',
335
+ name: tc.name ?? 'tool',
336
+ context: userMessage.slice(0, 100),
337
+ });
338
+ }
339
+ }
340
+ }
341
+ const items = loadMemories();
342
+ if (items.length > exports.MAX_MEMORY_ITEMS) {
343
+ garbageCollect(exports.MAX_MEMORY_ITEMS, exports.MAX_MEMORY_AGE_DAYS);
344
+ }
345
+ }
346
+ //# sourceMappingURL=memoryCore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memoryCore.js","sourceRoot":"","sources":["../src/memoryCore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * server/app.ts - Express HTTP server for the general-purpose agent.
3
+ *
4
+ * Same endpoints as the Python FastAPI server:
5
+ * POST /sessions
6
+ * GET /sessions
7
+ * GET /sessions/:id
8
+ * POST /sessions/:id/turn
9
+ * POST /sessions/:id/turn/stream (SSE)
10
+ */
11
+ declare const app: import("express-serve-static-core").Express;
12
+ export { app };
13
+ //# sourceMappingURL=app.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/server/app.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AA+CH,QAAA,MAAM,GAAG,6CAAY,CAAC;AA8JtB,OAAO,EAAE,GAAG,EAAE,CAAC"}
@@ -0,0 +1,200 @@
1
+ "use strict";
2
+ /**
3
+ * server/app.ts - Express HTTP server for the general-purpose agent.
4
+ *
5
+ * Same endpoints as the Python FastAPI server:
6
+ * POST /sessions
7
+ * GET /sessions
8
+ * GET /sessions/:id
9
+ * POST /sessions/:id/turn
10
+ * POST /sessions/:id/turn/stream (SSE)
11
+ */
12
+ var __importDefault = (this && this.__importDefault) || function (mod) {
13
+ return (mod && mod.__esModule) ? mod : { "default": mod };
14
+ };
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.app = void 0;
17
+ const express_1 = __importDefault(require("express"));
18
+ const config_1 = require("../config");
19
+ const contextCore_1 = require("../contextCore");
20
+ const sessionCore_1 = require("../sessionCore");
21
+ const toolsCore_1 = require("../toolsCore");
22
+ const storage_1 = require("../storage");
23
+ const memoryCore_1 = require("../memoryCore");
24
+ const skillsCore_1 = require("../skillsCore");
25
+ const main_1 = require("../cli/main");
26
+ // ---------------------------------------------------------------------------
27
+ // Singleton state
28
+ // ---------------------------------------------------------------------------
29
+ let sessionMgr = null;
30
+ function getSessionMgr() {
31
+ if (!sessionMgr)
32
+ initServer();
33
+ return sessionMgr;
34
+ }
35
+ function serverApprovalCallback(toolName, toolArgs) {
36
+ // In server mode, deny mutating tools by default
37
+ return false;
38
+ }
39
+ function initServer() {
40
+ if (sessionMgr)
41
+ return;
42
+ (0, config_1.setupAgentLogging)();
43
+ const backend = (0, storage_1.getStorageBackend)();
44
+ sessionMgr = new sessionCore_1.SessionManager({ store: backend.sessionStore });
45
+ (0, memoryCore_1.setMemoryStore)(backend.memoryStore);
46
+ skillsCore_1.SKILLS.setStore(backend.skillStore);
47
+ (0, toolsCore_1.setFileAccessCallback)((p) => sessionMgr.recordFileAccess(p));
48
+ (0, toolsCore_1.setExecutorApprovalCallback)(serverApprovalCallback);
49
+ config_1.logger.info('Agent server started; SessionManager ready.');
50
+ }
51
+ // ---------------------------------------------------------------------------
52
+ // Express app
53
+ // ---------------------------------------------------------------------------
54
+ const app = (0, express_1.default)();
55
+ exports.app = app;
56
+ app.use(express_1.default.json());
57
+ // POST /sessions — create new session
58
+ app.post('/sessions', (_req, res) => {
59
+ const mgr = getSessionMgr();
60
+ const session = mgr.createSession({ context: { started: true } });
61
+ res.status(201).json({ session_id: session.id });
62
+ });
63
+ // GET /sessions — list sessions
64
+ app.get('/sessions', (req, res) => {
65
+ const mgr = getSessionMgr();
66
+ const limit = Math.min(Math.max(parseInt(String(req.query.limit ?? '20'), 10) || 20, 1), 100);
67
+ const summaries = mgr.listSessionsSummary(limit);
68
+ res.json(summaries);
69
+ });
70
+ // GET /sessions/:id — get session info
71
+ app.get('/sessions/:sessionId', (req, res) => {
72
+ const mgr = getSessionMgr();
73
+ const session = mgr.restoreSession(req.params.sessionId);
74
+ if (!session) {
75
+ res.status(404).json({ detail: 'Session not found' });
76
+ return;
77
+ }
78
+ const turns = session.history.filter((m) => m.role === 'user').length;
79
+ res.json({
80
+ id: session.id,
81
+ updated_at: session.updatedAt,
82
+ turns,
83
+ state: session.state,
84
+ });
85
+ });
86
+ // POST /sessions/:id/turn — synchronous turn
87
+ app.post('/sessions/:sessionId/turn', async (req, res) => {
88
+ const mgr = getSessionMgr();
89
+ const createIfMissing = req.query.create_if_missing === 'true';
90
+ let session = mgr.restoreSession(req.params.sessionId);
91
+ let created = false;
92
+ if (!session) {
93
+ if (createIfMissing) {
94
+ session = mgr.createSession({ context: { started: true } });
95
+ created = true;
96
+ }
97
+ else {
98
+ res.status(404).json({ detail: 'Session not found' });
99
+ return;
100
+ }
101
+ }
102
+ const message = (req.body?.message ?? '').trim();
103
+ if (!message) {
104
+ res.status(400).json({ detail: 'message must be non-empty' });
105
+ return;
106
+ }
107
+ try {
108
+ const lifecycle = new contextCore_1.LifecycleManager();
109
+ const savedSummary = session.context.conversation_summary;
110
+ if (savedSummary)
111
+ lifecycle.setConversationSummary(savedSummary);
112
+ const budget = (0, contextCore_1.getBudget)({ model: config_1.MODEL });
113
+ const history = [...session.history];
114
+ const result = await (0, main_1.runTurn)({
115
+ userInput: message,
116
+ history,
117
+ sessionMgr: mgr,
118
+ lifecycle,
119
+ budget,
120
+ });
121
+ res.json({
122
+ reply: result.lastAssistantText ?? '',
123
+ pending_approvals: [],
124
+ session_id: created ? session.id : undefined,
125
+ });
126
+ }
127
+ catch (e) {
128
+ config_1.logger.error(`turn failed: ${e}`);
129
+ res.status(500).json({ detail: String(e).slice(0, 500) });
130
+ }
131
+ });
132
+ // POST /sessions/:id/turn/stream — SSE streaming turn
133
+ app.post('/sessions/:sessionId/turn/stream', async (req, res) => {
134
+ const mgr = getSessionMgr();
135
+ const createIfMissing = req.query.create_if_missing === 'true';
136
+ let session = mgr.restoreSession(req.params.sessionId);
137
+ if (!session) {
138
+ if (createIfMissing) {
139
+ session = mgr.createSession({ context: { started: true } });
140
+ }
141
+ else {
142
+ res.status(404).json({ detail: 'Session not found' });
143
+ return;
144
+ }
145
+ }
146
+ const message = (req.body?.message ?? '').trim();
147
+ if (!message) {
148
+ res.status(400).json({ detail: 'message must be non-empty' });
149
+ return;
150
+ }
151
+ res.writeHead(200, {
152
+ 'Content-Type': 'text/event-stream',
153
+ 'Cache-Control': 'no-cache',
154
+ Connection: 'keep-alive',
155
+ 'X-Accel-Buffering': 'no',
156
+ });
157
+ const streamCallback = (chunk) => {
158
+ res.write(`data: ${JSON.stringify({ type: 'delta', delta: chunk })}\n\n`);
159
+ };
160
+ try {
161
+ const lifecycle = new contextCore_1.LifecycleManager();
162
+ const savedSummary = session.context.conversation_summary;
163
+ if (savedSummary)
164
+ lifecycle.setConversationSummary(savedSummary);
165
+ const budget = (0, contextCore_1.getBudget)({ model: config_1.MODEL });
166
+ const history = [...session.history];
167
+ const result = await (0, main_1.runTurn)({
168
+ userInput: message,
169
+ history,
170
+ sessionMgr: mgr,
171
+ lifecycle,
172
+ budget,
173
+ streamCallback,
174
+ });
175
+ res.write(`data: ${JSON.stringify({
176
+ type: 'done',
177
+ reply: result.lastAssistantText ?? '',
178
+ pending_approvals: [],
179
+ })}\n\n`);
180
+ }
181
+ catch (e) {
182
+ config_1.logger.error(`turn_stream failed: ${e}`);
183
+ res.write(`data: ${JSON.stringify({
184
+ type: 'error',
185
+ detail: String(e).slice(0, 500),
186
+ })}\n\n`);
187
+ }
188
+ finally {
189
+ res.end();
190
+ }
191
+ });
192
+ // Start server if run directly
193
+ if (require.main === module) {
194
+ const port = parseInt(process.env.PORT ?? '8000', 10);
195
+ initServer();
196
+ app.listen(port, () => {
197
+ config_1.logger.info(`Agent API server listening on port ${port}`);
198
+ });
199
+ }
200
+ //# sourceMappingURL=app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/server/app.ts"],"names":[],"mappings":"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"}