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,48 @@
1
+ /**
2
+ * storage/cloudBackend.ts - Cloud-backed storage (S3-compatible).
3
+ *
4
+ * Uses @aws-sdk/client-s3; set AGENT_STORAGE_BACKEND=cloud and configure bucket + credentials.
5
+ */
6
+ import { S3Client } from '@aws-sdk/client-s3';
7
+ import { SessionStore, MemoryStore, SkillStore, ContextStore, StorageBackend } from './protocols';
8
+ export declare class CloudSessionStore implements SessionStore {
9
+ private _client;
10
+ private _bucket;
11
+ constructor(client?: S3Client, bucket?: string);
12
+ private _key;
13
+ get(sessionId: string): Record<string, any> | null;
14
+ getAsync(sessionId: string): Promise<Record<string, any> | null>;
15
+ put(sessionId: string, data: Record<string, any>): void;
16
+ listIds(): string[];
17
+ listIdsAsync(): Promise<string[]>;
18
+ listSummaries(limit?: number): Record<string, any>[];
19
+ listSummariesAsync(limit?: number): Promise<Record<string, any>[]>;
20
+ }
21
+ export declare class CloudMemoryStore implements MemoryStore {
22
+ private _client;
23
+ private _bucket;
24
+ constructor(client?: S3Client, bucket?: string);
25
+ load(): Record<string, any>[];
26
+ loadAsync(): Promise<Record<string, any>[]>;
27
+ save(items: Record<string, any>[]): void;
28
+ }
29
+ export declare class CloudSkillStore implements SkillStore {
30
+ private _client;
31
+ private _bucket;
32
+ constructor(client?: S3Client, bucket?: string);
33
+ listSkills(): string[];
34
+ listSkillsAsync(): Promise<string[]>;
35
+ getSkill(name: string): Record<string, any> | null;
36
+ getSkillAsync(name: string): Promise<Record<string, any> | null>;
37
+ }
38
+ export declare class CloudContextStore implements ContextStore {
39
+ private _client;
40
+ private _bucket;
41
+ constructor(client?: S3Client, bucket?: string);
42
+ private _key;
43
+ get(sessionId: string): Record<string, any> | null;
44
+ getAsync(sessionId: string): Promise<Record<string, any> | null>;
45
+ set(sessionId: string, data: Record<string, any>): void;
46
+ }
47
+ export declare function createCloudBackend(client?: S3Client, bucket?: string): StorageBackend;
48
+ //# sourceMappingURL=cloudBackend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloudBackend.d.ts","sourceRoot":"","sources":["../../src/storage/cloudBackend.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACH,QAAQ,EAIX,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACH,YAAY,EACZ,WAAW,EACX,UAAU,EACV,YAAY,EACZ,cAAc,EACjB,MAAM,aAAa,CAAC;AAqDrB,qBAAa,iBAAkB,YAAW,YAAY;IAClD,OAAO,CAAC,OAAO,CAAW;IAC1B,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,MAAM;IAW9C,OAAO,CAAC,IAAI;IAIZ,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAK5C,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;IAYtE,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAWvD,OAAO,IAAI,MAAM,EAAE;IAIb,YAAY,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAsBvC,aAAa,CAAC,KAAK,GAAE,MAAW,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE;IAIlD,kBAAkB,CAAC,KAAK,GAAE,MAAW,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;CAgB/E;AAMD,qBAAa,gBAAiB,YAAW,WAAW;IAChD,OAAO,CAAC,OAAO,CAAW;IAC1B,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,MAAM;IAW9C,IAAI,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE;IAIvB,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;IAajD,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI;CAU3C;AAMD,qBAAa,eAAgB,YAAW,UAAU;IAC9C,OAAO,CAAC,OAAO,CAAW;IAC1B,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,MAAM;IAW9C,UAAU,IAAI,MAAM,EAAE;IAIhB,eAAe,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAsB1C,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAI5C,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;CAYzE;AAMD,qBAAa,iBAAkB,YAAW,YAAY;IAClD,OAAO,CAAC,OAAO,CAAW;IAC1B,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,MAAM;IAW9C,OAAO,CAAC,IAAI;IAIZ,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAI5C,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;IAetE,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;CAU1D;AAMD,wBAAgB,kBAAkB,CAC9B,MAAM,CAAC,EAAE,QAAQ,EACjB,MAAM,CAAC,EAAE,MAAM,GAChB,cAAc,CAiBhB"}
@@ -0,0 +1,301 @@
1
+ "use strict";
2
+ /**
3
+ * storage/cloudBackend.ts - Cloud-backed storage (S3-compatible).
4
+ *
5
+ * Uses @aws-sdk/client-s3; set AGENT_STORAGE_BACKEND=cloud and configure bucket + credentials.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.CloudContextStore = exports.CloudSkillStore = exports.CloudMemoryStore = exports.CloudSessionStore = void 0;
9
+ exports.createCloudBackend = createCloudBackend;
10
+ const client_s3_1 = require("@aws-sdk/client-s3");
11
+ const protocols_1 = require("./protocols");
12
+ // Key prefixes
13
+ const KEY_PREFIX = 'agent';
14
+ const SESSIONS_PREFIX = `${KEY_PREFIX}/sessions/`;
15
+ const MEMORY_KEY = `${KEY_PREFIX}/memory/data`;
16
+ const SKILLS_PREFIX = `${KEY_PREFIX}/skills/`;
17
+ const CONTEXT_PREFIX = `${KEY_PREFIX}/context/`;
18
+ function configBucket() {
19
+ const v = (process.env.AGENT_STORAGE_BUCKET ?? '').trim();
20
+ if (!v)
21
+ throw new Error('Cloud storage requires AGENT_STORAGE_BUCKET');
22
+ return v;
23
+ }
24
+ function configEndpoint() {
25
+ return (process.env.AGENT_S3_ENDPOINT ?? '').trim() || undefined;
26
+ }
27
+ function configRegion() {
28
+ return ((process.env.AGENT_STORAGE_REGION ?? process.env.AWS_REGION ?? 'us-east-1').trim());
29
+ }
30
+ function getClient() {
31
+ const bucket = configBucket();
32
+ const endpoint = configEndpoint();
33
+ const region = configRegion();
34
+ const opts = {
35
+ region,
36
+ forcePathStyle: true,
37
+ };
38
+ if (endpoint)
39
+ opts.endpoint = endpoint;
40
+ return { client: new client_s3_1.S3Client(opts), bucket };
41
+ }
42
+ function encode(data) {
43
+ return Buffer.from(JSON.stringify(data), 'utf-8');
44
+ }
45
+ async function streamToString(stream) {
46
+ const chunks = [];
47
+ for await (const chunk of stream) {
48
+ chunks.push(typeof chunk === 'string' ? Buffer.from(chunk) : chunk);
49
+ }
50
+ return Buffer.concat(chunks).toString('utf-8');
51
+ }
52
+ // ---------------------------------------------------------------------------
53
+ // CloudSessionStore
54
+ // ---------------------------------------------------------------------------
55
+ class CloudSessionStore {
56
+ _client;
57
+ _bucket;
58
+ constructor(client, bucket) {
59
+ if (client && bucket) {
60
+ this._client = client;
61
+ this._bucket = bucket;
62
+ }
63
+ else {
64
+ const c = getClient();
65
+ this._client = c.client;
66
+ this._bucket = c.bucket;
67
+ }
68
+ }
69
+ _key(sessionId) {
70
+ return `${SESSIONS_PREFIX}${sessionId}`;
71
+ }
72
+ get(sessionId) {
73
+ // Sync wrapper — callers should await if needed
74
+ return null; // Placeholder: S3 ops are async
75
+ }
76
+ async getAsync(sessionId) {
77
+ try {
78
+ const resp = await this._client.send(new client_s3_1.GetObjectCommand({ Bucket: this._bucket, Key: this._key(sessionId) }));
79
+ const body = await streamToString(resp.Body);
80
+ return JSON.parse(body);
81
+ }
82
+ catch {
83
+ return null;
84
+ }
85
+ }
86
+ put(sessionId, data) {
87
+ this._client.send(new client_s3_1.PutObjectCommand({
88
+ Bucket: this._bucket,
89
+ Key: this._key(sessionId),
90
+ Body: encode(data),
91
+ ContentType: 'application/json; charset=utf-8',
92
+ }));
93
+ }
94
+ listIds() {
95
+ return []; // Async — use listIdsAsync
96
+ }
97
+ async listIdsAsync() {
98
+ const ids = [];
99
+ let continuationToken;
100
+ do {
101
+ const resp = await this._client.send(new client_s3_1.ListObjectsV2Command({
102
+ Bucket: this._bucket,
103
+ Prefix: SESSIONS_PREFIX,
104
+ ContinuationToken: continuationToken,
105
+ }));
106
+ for (const obj of resp.Contents ?? []) {
107
+ const k = obj.Key ?? '';
108
+ if (k.endsWith('/'))
109
+ continue;
110
+ const sid = k.slice(SESSIONS_PREFIX.length);
111
+ if (sid)
112
+ ids.push(sid);
113
+ }
114
+ continuationToken = resp.NextContinuationToken;
115
+ } while (continuationToken);
116
+ return ids.sort();
117
+ }
118
+ listSummaries(limit = 20) {
119
+ return []; // Async — use listSummariesAsync
120
+ }
121
+ async listSummariesAsync(limit = 20) {
122
+ const ids = await this.listIdsAsync();
123
+ const entries = [];
124
+ for (const sid of ids) {
125
+ const data = await this.getAsync(sid);
126
+ if (!data)
127
+ continue;
128
+ entries.push({
129
+ id: sid,
130
+ updated_at: data.updated_at ?? 0,
131
+ turns: (data.history ?? []).filter((m) => m.role === 'user').length,
132
+ state: data.state ?? 'active',
133
+ });
134
+ }
135
+ entries.sort((a, b) => b.updated_at - a.updated_at);
136
+ return entries.slice(0, limit);
137
+ }
138
+ }
139
+ exports.CloudSessionStore = CloudSessionStore;
140
+ // ---------------------------------------------------------------------------
141
+ // CloudMemoryStore
142
+ // ---------------------------------------------------------------------------
143
+ class CloudMemoryStore {
144
+ _client;
145
+ _bucket;
146
+ constructor(client, bucket) {
147
+ if (client && bucket) {
148
+ this._client = client;
149
+ this._bucket = bucket;
150
+ }
151
+ else {
152
+ const c = getClient();
153
+ this._client = c.client;
154
+ this._bucket = c.bucket;
155
+ }
156
+ }
157
+ load() {
158
+ return []; // Async — use loadAsync
159
+ }
160
+ async loadAsync() {
161
+ try {
162
+ const resp = await this._client.send(new client_s3_1.GetObjectCommand({ Bucket: this._bucket, Key: MEMORY_KEY }));
163
+ const body = await streamToString(resp.Body);
164
+ const data = JSON.parse(body);
165
+ return Array.isArray(data) ? data : [];
166
+ }
167
+ catch {
168
+ return [];
169
+ }
170
+ }
171
+ save(items) {
172
+ this._client.send(new client_s3_1.PutObjectCommand({
173
+ Bucket: this._bucket,
174
+ Key: MEMORY_KEY,
175
+ Body: encode(items),
176
+ ContentType: 'application/json; charset=utf-8',
177
+ }));
178
+ }
179
+ }
180
+ exports.CloudMemoryStore = CloudMemoryStore;
181
+ // ---------------------------------------------------------------------------
182
+ // CloudSkillStore
183
+ // ---------------------------------------------------------------------------
184
+ class CloudSkillStore {
185
+ _client;
186
+ _bucket;
187
+ constructor(client, bucket) {
188
+ if (client && bucket) {
189
+ this._client = client;
190
+ this._bucket = bucket;
191
+ }
192
+ else {
193
+ const c = getClient();
194
+ this._client = c.client;
195
+ this._bucket = c.bucket;
196
+ }
197
+ }
198
+ listSkills() {
199
+ return []; // Async — use listSkillsAsync
200
+ }
201
+ async listSkillsAsync() {
202
+ const names = [];
203
+ let continuationToken;
204
+ do {
205
+ const resp = await this._client.send(new client_s3_1.ListObjectsV2Command({
206
+ Bucket: this._bucket,
207
+ Prefix: SKILLS_PREFIX,
208
+ ContinuationToken: continuationToken,
209
+ }));
210
+ for (const obj of resp.Contents ?? []) {
211
+ const k = obj.Key ?? '';
212
+ if (k.endsWith('/'))
213
+ continue;
214
+ const name = k.slice(SKILLS_PREFIX.length);
215
+ if (name)
216
+ names.push(name);
217
+ }
218
+ continuationToken = resp.NextContinuationToken;
219
+ } while (continuationToken);
220
+ return names.sort();
221
+ }
222
+ getSkill(name) {
223
+ return null; // Async — use getSkillAsync
224
+ }
225
+ async getSkillAsync(name) {
226
+ const key = `${SKILLS_PREFIX}${name}`;
227
+ try {
228
+ const resp = await this._client.send(new client_s3_1.GetObjectCommand({ Bucket: this._bucket, Key: key }));
229
+ const body = await streamToString(resp.Body);
230
+ return JSON.parse(body);
231
+ }
232
+ catch {
233
+ return null;
234
+ }
235
+ }
236
+ }
237
+ exports.CloudSkillStore = CloudSkillStore;
238
+ // ---------------------------------------------------------------------------
239
+ // CloudContextStore
240
+ // ---------------------------------------------------------------------------
241
+ class CloudContextStore {
242
+ _client;
243
+ _bucket;
244
+ constructor(client, bucket) {
245
+ if (client && bucket) {
246
+ this._client = client;
247
+ this._bucket = bucket;
248
+ }
249
+ else {
250
+ const c = getClient();
251
+ this._client = c.client;
252
+ this._bucket = c.bucket;
253
+ }
254
+ }
255
+ _key(sessionId) {
256
+ return `${CONTEXT_PREFIX}${sessionId}`;
257
+ }
258
+ get(sessionId) {
259
+ return null; // Async — use getAsync
260
+ }
261
+ async getAsync(sessionId) {
262
+ try {
263
+ const resp = await this._client.send(new client_s3_1.GetObjectCommand({ Bucket: this._bucket, Key: this._key(sessionId) }));
264
+ const body = await streamToString(resp.Body);
265
+ const data = JSON.parse(body);
266
+ return data && typeof data === 'object' && !Array.isArray(data)
267
+ ? data
268
+ : null;
269
+ }
270
+ catch {
271
+ return null;
272
+ }
273
+ }
274
+ set(sessionId, data) {
275
+ this._client.send(new client_s3_1.PutObjectCommand({
276
+ Bucket: this._bucket,
277
+ Key: this._key(sessionId),
278
+ Body: encode(data),
279
+ ContentType: 'application/json; charset=utf-8',
280
+ }));
281
+ }
282
+ }
283
+ exports.CloudContextStore = CloudContextStore;
284
+ // ---------------------------------------------------------------------------
285
+ // Factory
286
+ // ---------------------------------------------------------------------------
287
+ function createCloudBackend(client, bucket) {
288
+ let c;
289
+ let b;
290
+ if (client && bucket) {
291
+ c = client;
292
+ b = bucket;
293
+ }
294
+ else {
295
+ const result = getClient();
296
+ c = result.client;
297
+ b = result.bucket;
298
+ }
299
+ return new protocols_1.StorageBackend(new CloudSessionStore(c, b), new CloudMemoryStore(c, b), new CloudSkillStore(c, b), new CloudContextStore(c, b));
300
+ }
301
+ //# sourceMappingURL=cloudBackend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloudBackend.js","sourceRoot":"","sources":["../../src/storage/cloudBackend.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * storage/fileBackend.ts - File-backed storage implementations.
3
+ */
4
+ import { SessionStore, MemoryStore, SkillStore, ContextStore, StorageBackend } from './protocols';
5
+ export declare class FileSessionStore implements SessionStore {
6
+ private _dir;
7
+ constructor(storageDir?: string);
8
+ private _path;
9
+ get(sessionId: string): Record<string, any> | null;
10
+ put(sessionId: string, data: Record<string, any>): void;
11
+ listIds(): string[];
12
+ listSummaries(limit?: number): Record<string, any>[];
13
+ }
14
+ export declare class FileMemoryStore implements MemoryStore {
15
+ private _path;
16
+ constructor(memoryFile?: string);
17
+ load(): Record<string, any>[];
18
+ save(items: Record<string, any>[]): void;
19
+ }
20
+ export declare class FileSkillStore implements SkillStore {
21
+ private _dir;
22
+ private _cache;
23
+ constructor(skillsDir?: string);
24
+ private _parseSkillMd;
25
+ listSkills(): string[];
26
+ getSkill(name: string): Record<string, any> | null;
27
+ }
28
+ export declare class FileContextStore implements ContextStore {
29
+ private _dir;
30
+ constructor(contextDir?: string);
31
+ private _path;
32
+ get(sessionId: string): Record<string, any> | null;
33
+ set(sessionId: string, data: Record<string, any>): void;
34
+ }
35
+ export declare function createFileBackend(options?: {
36
+ sessionDir?: string;
37
+ memoryFile?: string;
38
+ skillsDir?: string;
39
+ contextDir?: string;
40
+ }): StorageBackend;
41
+ //# sourceMappingURL=fileBackend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fileBackend.d.ts","sourceRoot":"","sources":["../../src/storage/fileBackend.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EACH,YAAY,EACZ,WAAW,EACX,UAAU,EACV,YAAY,EACZ,cAAc,EACjB,MAAM,aAAa,CAAC;AAmCrB,qBAAa,gBAAiB,YAAW,YAAY;IACjD,OAAO,CAAC,IAAI,CAAS;gBAET,UAAU,CAAC,EAAE,MAAM;IAI/B,OAAO,CAAC,KAAK;IAIb,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAIlD,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAKvD,OAAO,IAAI,MAAM,EAAE;IAUnB,aAAa,CAAC,KAAK,GAAE,MAAW,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE;CAwB3D;AAMD,qBAAa,eAAgB,YAAW,WAAW;IAC/C,OAAO,CAAC,KAAK,CAAS;gBAEV,UAAU,CAAC,EAAE,MAAM;IAI/B,IAAI,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE;IAK7B,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI;CAG3C;AAMD,qBAAa,cAAe,YAAW,UAAU;IAC7C,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,MAAM,CAA2C;gBAE7C,SAAS,CAAC,EAAE,MAAM;IAI9B,OAAO,CAAC,aAAa;IAiCrB,UAAU,IAAI,MAAM,EAAE;IAiBtB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;CAMrD;AAMD,qBAAa,gBAAiB,YAAW,YAAY;IACjD,OAAO,CAAC,IAAI,CAAS;gBAET,UAAU,CAAC,EAAE,MAAM;IAI/B,OAAO,CAAC,KAAK;IAIb,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAOlD,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;CAG1D;AAMD,wBAAgB,iBAAiB,CAAC,OAAO,CAAC,EAAE;IACxC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB,GAAG,cAAc,CAOjB"}
@@ -0,0 +1,240 @@
1
+ "use strict";
2
+ /**
3
+ * storage/fileBackend.ts - File-backed storage implementations.
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.FileContextStore = exports.FileSkillStore = exports.FileMemoryStore = exports.FileSessionStore = void 0;
40
+ exports.createFileBackend = createFileBackend;
41
+ const fs = __importStar(require("fs"));
42
+ const path = __importStar(require("path"));
43
+ const config_1 = require("../config");
44
+ const protocols_1 = require("./protocols");
45
+ // Default paths
46
+ const DEFAULT_SESSION_DIR = process.env.AGENT_SESSION_DIR ?? path.join(config_1.WORKDIR, 'data', 'sessions');
47
+ const DEFAULT_MEMORY_DIR = process.env.AGENT_MEMORY_DIR ?? path.join(config_1.WORKDIR, 'data', 'memory');
48
+ const DEFAULT_MEMORY_FILE = path.join(DEFAULT_MEMORY_DIR, 'memories.json');
49
+ const DEFAULT_SKILLS_DIR = process.env.AGENT_SKILLS_DIR ?? path.join(config_1.WORKDIR, 'skills');
50
+ const DEFAULT_CONTEXT_DIR = process.env.AGENT_CONTEXT_DIR ?? path.join(config_1.WORKDIR, 'data', 'context');
51
+ function ensureDir(dir) {
52
+ fs.mkdirSync(dir, { recursive: true });
53
+ }
54
+ function jsonRead(filePath) {
55
+ if (!fs.existsSync(filePath))
56
+ return null;
57
+ try {
58
+ return JSON.parse(fs.readFileSync(filePath, 'utf-8'));
59
+ }
60
+ catch {
61
+ return null;
62
+ }
63
+ }
64
+ function jsonWrite(filePath, data) {
65
+ ensureDir(path.dirname(filePath));
66
+ fs.writeFileSync(filePath, JSON.stringify(data, null, 2), 'utf-8');
67
+ }
68
+ // ---------------------------------------------------------------------------
69
+ // FileSessionStore
70
+ // ---------------------------------------------------------------------------
71
+ class FileSessionStore {
72
+ _dir;
73
+ constructor(storageDir) {
74
+ this._dir = storageDir ?? DEFAULT_SESSION_DIR;
75
+ }
76
+ _path(sessionId) {
77
+ return path.join(this._dir, `${sessionId}.json`);
78
+ }
79
+ get(sessionId) {
80
+ return jsonRead(this._path(sessionId));
81
+ }
82
+ put(sessionId, data) {
83
+ ensureDir(this._dir);
84
+ jsonWrite(this._path(sessionId), data);
85
+ }
86
+ listIds() {
87
+ const ids = new Set();
88
+ if (fs.existsSync(this._dir)) {
89
+ for (const f of fs.readdirSync(this._dir)) {
90
+ if (f.endsWith('.json'))
91
+ ids.add(path.basename(f, '.json'));
92
+ }
93
+ }
94
+ return [...ids].sort();
95
+ }
96
+ listSummaries(limit = 20) {
97
+ const entries = [];
98
+ const seen = new Set();
99
+ if (fs.existsSync(this._dir)) {
100
+ for (const f of fs.readdirSync(this._dir)) {
101
+ if (!f.endsWith('.json'))
102
+ continue;
103
+ const sid = path.basename(f, '.json');
104
+ if (seen.has(sid))
105
+ continue;
106
+ const data = jsonRead(path.join(this._dir, f));
107
+ if (!data)
108
+ continue;
109
+ entries.push({
110
+ id: sid,
111
+ updated_at: data.updated_at ?? 0,
112
+ turns: (data.history ?? []).filter((m) => m.role === 'user').length,
113
+ state: data.state ?? 'active',
114
+ });
115
+ seen.add(sid);
116
+ }
117
+ }
118
+ entries.sort((a, b) => b.updated_at - a.updated_at);
119
+ return entries.slice(0, limit);
120
+ }
121
+ }
122
+ exports.FileSessionStore = FileSessionStore;
123
+ // ---------------------------------------------------------------------------
124
+ // FileMemoryStore
125
+ // ---------------------------------------------------------------------------
126
+ class FileMemoryStore {
127
+ _path;
128
+ constructor(memoryFile) {
129
+ this._path = memoryFile ?? DEFAULT_MEMORY_FILE;
130
+ }
131
+ load() {
132
+ const data = jsonRead(this._path);
133
+ return Array.isArray(data) ? data : [];
134
+ }
135
+ save(items) {
136
+ jsonWrite(this._path, items);
137
+ }
138
+ }
139
+ exports.FileMemoryStore = FileMemoryStore;
140
+ // ---------------------------------------------------------------------------
141
+ // FileSkillStore
142
+ // ---------------------------------------------------------------------------
143
+ class FileSkillStore {
144
+ _dir;
145
+ _cache = {};
146
+ constructor(skillsDir) {
147
+ this._dir = skillsDir ?? DEFAULT_SKILLS_DIR;
148
+ }
149
+ _parseSkillMd(filePath) {
150
+ if (!fs.existsSync(filePath))
151
+ return null;
152
+ let content;
153
+ try {
154
+ content = fs.readFileSync(filePath, 'utf-8');
155
+ }
156
+ catch {
157
+ return null;
158
+ }
159
+ const match = content.match(/^---\s*\n([\s\S]*?)\n---\s*\n([\s\S]*)$/);
160
+ if (!match)
161
+ return null;
162
+ const [, frontmatter, body] = match;
163
+ const metadata = {};
164
+ for (const line of frontmatter.trim().split('\n')) {
165
+ const idx = line.indexOf(':');
166
+ if (idx >= 0) {
167
+ const key = line.slice(0, idx).trim();
168
+ const value = line
169
+ .slice(idx + 1)
170
+ .trim()
171
+ .replace(/^["']|["']$/g, '');
172
+ metadata[key] = value;
173
+ }
174
+ }
175
+ if (!metadata.name || !metadata.description)
176
+ return null;
177
+ return {
178
+ name: metadata.name,
179
+ description: metadata.description,
180
+ body: body.trim(),
181
+ path: filePath,
182
+ dir: path.dirname(filePath),
183
+ };
184
+ }
185
+ listSkills() {
186
+ this._cache = {};
187
+ if (!fs.existsSync(this._dir))
188
+ return [];
189
+ const out = [];
190
+ for (const entry of fs.readdirSync(this._dir, { withFileTypes: true })) {
191
+ if (!entry.isDirectory())
192
+ continue;
193
+ const skillMd = path.join(this._dir, entry.name, 'SKILL.md');
194
+ if (!fs.existsSync(skillMd))
195
+ continue;
196
+ const skill = this._parseSkillMd(skillMd);
197
+ if (skill) {
198
+ this._cache[skill.name] = skill;
199
+ out.push(skill.name);
200
+ }
201
+ }
202
+ return out;
203
+ }
204
+ getSkill(name) {
205
+ if (!Object.keys(this._cache).length && fs.existsSync(this._dir)) {
206
+ this.listSkills();
207
+ }
208
+ return this._cache[name] ?? null;
209
+ }
210
+ }
211
+ exports.FileSkillStore = FileSkillStore;
212
+ // ---------------------------------------------------------------------------
213
+ // FileContextStore
214
+ // ---------------------------------------------------------------------------
215
+ class FileContextStore {
216
+ _dir;
217
+ constructor(contextDir) {
218
+ this._dir = contextDir ?? DEFAULT_CONTEXT_DIR;
219
+ }
220
+ _path(sessionId) {
221
+ return path.join(this._dir, `${sessionId}.json`);
222
+ }
223
+ get(sessionId) {
224
+ const data = jsonRead(this._path(sessionId));
225
+ return data && typeof data === 'object' && !Array.isArray(data)
226
+ ? data
227
+ : null;
228
+ }
229
+ set(sessionId, data) {
230
+ jsonWrite(this._path(sessionId), data);
231
+ }
232
+ }
233
+ exports.FileContextStore = FileContextStore;
234
+ // ---------------------------------------------------------------------------
235
+ // Factory
236
+ // ---------------------------------------------------------------------------
237
+ function createFileBackend(options) {
238
+ return new protocols_1.StorageBackend(new FileSessionStore(options?.sessionDir), new FileMemoryStore(options?.memoryFile), new FileSkillStore(options?.skillsDir), new FileContextStore(options?.contextDir));
239
+ }
240
+ //# sourceMappingURL=fileBackend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fileBackend.js","sourceRoot":"","sources":["../../src/storage/fileBackend.ts"],"names":[],"mappings":"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"}