@devxiyang/agent-memo 0.0.1 → 0.0.2
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 +238 -4
- package/dist/core/memo/file-fs.d.ts +4 -3
- package/dist/core/memo/file-fs.d.ts.map +1 -1
- package/dist/core/memo/file-fs.js +20 -3
- package/dist/core/memo/file-fs.js.map +1 -1
- package/dist/core/memo/mime.d.ts +4 -3
- package/dist/core/memo/mime.d.ts.map +1 -1
- package/dist/core/memo/mime.js +64 -4
- package/dist/core/memo/mime.js.map +1 -1
- package/dist/core/memo/types.d.ts +19 -5
- package/dist/core/memo/types.d.ts.map +1 -1
- package/dist/plugins/memory/index.d.ts +39 -0
- package/dist/plugins/memory/index.d.ts.map +1 -0
- package/dist/plugins/memory/index.js +101 -0
- package/dist/plugins/memory/index.js.map +1 -0
- package/dist/plugins/memory/types.d.ts +29 -0
- package/dist/plugins/memory/types.d.ts.map +1 -0
- package/dist/plugins/memory/types.js +2 -0
- package/dist/plugins/memory/types.js.map +1 -0
- package/dist/plugins/resource/fetchers/local.d.ts +11 -0
- package/dist/plugins/resource/fetchers/local.d.ts.map +1 -0
- package/dist/plugins/resource/fetchers/local.js +33 -0
- package/dist/plugins/resource/fetchers/local.js.map +1 -0
- package/dist/plugins/resource/fetchers/url.d.ts +10 -0
- package/dist/plugins/resource/fetchers/url.d.ts.map +1 -0
- package/dist/plugins/resource/fetchers/url.js +41 -0
- package/dist/plugins/resource/fetchers/url.js.map +1 -0
- package/dist/plugins/resource/index.d.ts +50 -0
- package/dist/plugins/resource/index.d.ts.map +1 -0
- package/dist/plugins/resource/index.js +123 -0
- package/dist/plugins/resource/index.js.map +1 -0
- package/dist/plugins/resource/types.d.ts +39 -0
- package/dist/plugins/resource/types.d.ts.map +1 -0
- package/dist/plugins/resource/types.js +2 -0
- package/dist/plugins/resource/types.js.map +1 -0
- package/dist/plugins/utils.d.ts +5 -0
- package/dist/plugins/utils.d.ts.map +1 -0
- package/dist/plugins/utils.js +20 -0
- package/dist/plugins/utils.js.map +1 -0
- package/package.json +11 -2
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 devxiyang
|
|
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
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
# agent.memo
|
|
2
2
|
|
|
3
|
+
[](https://www.npmjs.com/package/@devxiyang/agent-memo)
|
|
4
|
+
[](https://www.npmjs.com/package/@devxiyang/agent-memo)
|
|
5
|
+
[](./LICENSE)
|
|
6
|
+
|
|
3
7
|
Agent memory SDK based on a filesystem paradigm. Organizes memories, resources and skills as a hierarchical virtual filesystem with `memo://` URIs — inspired by [OpenViking](https://github.com/volcengine/OpenViking).
|
|
4
8
|
|
|
5
9
|
## Concepts
|
|
@@ -28,7 +32,14 @@ Every directory carries up to four meta files managed by the **caller** (typical
|
|
|
28
32
|
## Installation
|
|
29
33
|
|
|
30
34
|
```bash
|
|
35
|
+
# npm
|
|
31
36
|
npm install @devxiyang/agent-memo
|
|
37
|
+
|
|
38
|
+
# pnpm
|
|
39
|
+
pnpm add @devxiyang/agent-memo
|
|
40
|
+
|
|
41
|
+
# yarn
|
|
42
|
+
yarn add @devxiyang/agent-memo
|
|
32
43
|
```
|
|
33
44
|
|
|
34
45
|
> `RipgrepSearchBackend` (default) uses a bundled `rg` binary via `@vscode/ripgrep` — no manual installation needed.
|
|
@@ -72,14 +83,23 @@ const detail = await memo.context(['memo://user/memories/preferences/codin
|
|
|
72
83
|
|
|
73
84
|
## Binary Files
|
|
74
85
|
|
|
75
|
-
|
|
86
|
+
`FileMemo` implements the `BinaryMemo` interface for direct binary I/O:
|
|
76
87
|
|
|
77
88
|
```typescript
|
|
78
|
-
|
|
89
|
+
// Write binary content
|
|
90
|
+
await memo.writeBinary('memo://media/avatar.jpg', imageBytes)
|
|
91
|
+
|
|
92
|
+
// Read binary content
|
|
93
|
+
const bytes = await memo.readBinary('memo://media/avatar.jpg')
|
|
94
|
+
|
|
95
|
+
// Or get the physical path to pass to external tools
|
|
96
|
+
const path = memo.toPath('memo://media/avatar.jpg')
|
|
79
97
|
await sharp(imageBuffer).toFile(path)
|
|
80
|
-
//
|
|
98
|
+
// onWritten hook fires automatically
|
|
81
99
|
```
|
|
82
100
|
|
|
101
|
+
For cached remote binary resources, use `AgentResource.readBinary()` — see the Plugins section.
|
|
102
|
+
|
|
83
103
|
## API
|
|
84
104
|
|
|
85
105
|
### `new FileMemo(options: FileMemoOptions)`
|
|
@@ -121,10 +141,19 @@ search(query, options?): Promise<SearchResult[]>
|
|
|
121
141
|
context(uris, tier: 0 | 1 | 2): Promise<string>
|
|
122
142
|
```
|
|
123
143
|
|
|
144
|
+
### `FilesystemAccess` interface
|
|
145
|
+
|
|
146
|
+
Implemented by local filesystem backends. Consumed by plugins that need direct path access.
|
|
147
|
+
|
|
148
|
+
```typescript
|
|
149
|
+
toPath(uri): string // convert memo URI to absolute filesystem path
|
|
150
|
+
```
|
|
151
|
+
|
|
124
152
|
### `MemoLifecycle` interface
|
|
125
153
|
|
|
154
|
+
Manages the lifecycle of the filesystem watcher. Consumed by application code.
|
|
155
|
+
|
|
126
156
|
```typescript
|
|
127
|
-
toPath(uri): string // get physical path for binary access
|
|
128
157
|
watch(): void // start watcher
|
|
129
158
|
unwatch(): Promise<void> // stop watcher
|
|
130
159
|
[Symbol.asyncDispose]() // used by `await using`
|
|
@@ -166,6 +195,211 @@ class MyDetector implements MimeDetector {
|
|
|
166
195
|
}
|
|
167
196
|
```
|
|
168
197
|
|
|
198
|
+
## Plugins
|
|
199
|
+
|
|
200
|
+
### `AgentMemory` — semantic memory for agents
|
|
201
|
+
|
|
202
|
+
#### File format
|
|
203
|
+
|
|
204
|
+
Every memory is stored as a Markdown file with YAML frontmatter. The SDK manages three standard fields automatically; any extra fields you pass are persisted as custom frontmatter alongside the content.
|
|
205
|
+
|
|
206
|
+
```
|
|
207
|
+
---
|
|
208
|
+
createdAt: "2024-01-15T10:30:00.000Z" # set on first write, preserved on updates
|
|
209
|
+
source: "conversation-42" # optional: where this memory came from
|
|
210
|
+
forgottenAt: "2024-02-01T09:00:00.000Z" # set by forget(), absent until then
|
|
211
|
+
confidence: 0.9 # any custom fields you add
|
|
212
|
+
---
|
|
213
|
+
|
|
214
|
+
Prefers TypeScript strict mode with explicit return types.
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
#### Directory layout
|
|
218
|
+
|
|
219
|
+
Memories are plain files — you choose the structure that makes sense for your agent:
|
|
220
|
+
|
|
221
|
+
```
|
|
222
|
+
{workspace}/
|
|
223
|
+
├── agent/
|
|
224
|
+
│ ├── .abstract.md # L0 summary maintained by caller
|
|
225
|
+
│ ├── preferences/
|
|
226
|
+
│ │ ├── coding.md # memo://agent/preferences/coding.md
|
|
227
|
+
│ │ └── communication.md
|
|
228
|
+
│ ├── facts/
|
|
229
|
+
│ │ ├── user-name.md
|
|
230
|
+
│ │ └── timezone.md
|
|
231
|
+
│ └── episodes/
|
|
232
|
+
│ ├── 2024-01-15.md
|
|
233
|
+
│ └── 2024-01-16.md
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
#### API
|
|
237
|
+
|
|
238
|
+
```typescript
|
|
239
|
+
import { AgentMemory } from '@devxiyang/agent-memo/memory'
|
|
240
|
+
|
|
241
|
+
const memory = new AgentMemory(memo)
|
|
242
|
+
|
|
243
|
+
// Store a memory
|
|
244
|
+
// - createdAt is set automatically on first write, preserved on subsequent updates
|
|
245
|
+
// - extra fields in options are stored as custom frontmatter
|
|
246
|
+
await memory.remember('memo://agent/preferences/coding.md', 'Prefers TypeScript strict mode', {
|
|
247
|
+
source: 'conversation-42',
|
|
248
|
+
confidence: 0.9,
|
|
249
|
+
})
|
|
250
|
+
|
|
251
|
+
// Read a single memory
|
|
252
|
+
// Returns null if the file doesn't exist or forgottenAt is set
|
|
253
|
+
const entry = await memory.recall('memo://agent/preferences/coding.md')
|
|
254
|
+
// {
|
|
255
|
+
// uri: 'memo://agent/preferences/coding.md',
|
|
256
|
+
// content: 'Prefers TypeScript strict mode',
|
|
257
|
+
// frontmatter: { createdAt, source, confidence }
|
|
258
|
+
// }
|
|
259
|
+
|
|
260
|
+
// Full-text search across memories
|
|
261
|
+
const hits = await memory.search('TypeScript', {
|
|
262
|
+
scope: ['memo://agent/preferences/'], // restrict to subtree (optional)
|
|
263
|
+
limit: 10,
|
|
264
|
+
excludeForgotten: true, // default: true
|
|
265
|
+
source: 'conversation-42', // filter by source field (optional)
|
|
266
|
+
})
|
|
267
|
+
// hits: MemoryEntry[]
|
|
268
|
+
|
|
269
|
+
// Soft-delete: sets forgottenAt in frontmatter, file stays on disk
|
|
270
|
+
// recall() and search() exclude it by default; can be recovered manually
|
|
271
|
+
await memory.forget('memo://agent/preferences/coding.md')
|
|
272
|
+
|
|
273
|
+
// Hard-delete: removes the file entirely, no recovery possible
|
|
274
|
+
await memory.purge('memo://agent/preferences/coding.md')
|
|
275
|
+
|
|
276
|
+
// Get the physical filesystem path (e.g. to pass to an indexing tool)
|
|
277
|
+
const path = memory.toPath('memo://agent/preferences/coding.md')
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
---
|
|
281
|
+
|
|
282
|
+
### `AgentResource` — external resource caching
|
|
283
|
+
|
|
284
|
+
#### File layout
|
|
285
|
+
|
|
286
|
+
Each resource is stored as a file at the URI path. Metadata (source URL, fetch time, TTL, content type) is stored in the parent directory's `.meta.json` under the `_resource` key — no separate sidecar files.
|
|
287
|
+
|
|
288
|
+
```
|
|
289
|
+
{workspace}/
|
|
290
|
+
└── resources/
|
|
291
|
+
├── .meta.json # stores metadata for all files in this dir
|
|
292
|
+
├── api-docs.md # memo://resources/api-docs.md (text)
|
|
293
|
+
├── report.pdf # memo://resources/report.pdf (binary)
|
|
294
|
+
└── avatars/
|
|
295
|
+
├── .meta.json
|
|
296
|
+
└── user.png # memo://resources/avatars/user.png
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
The `.meta.json` for the `resources/` directory looks like:
|
|
300
|
+
|
|
301
|
+
```json
|
|
302
|
+
{
|
|
303
|
+
"_resource": {
|
|
304
|
+
"api-docs.md": {
|
|
305
|
+
"source": "https://example.com/api.md",
|
|
306
|
+
"fetchedAt": "2024-01-15T10:00:00.000Z",
|
|
307
|
+
"expiresAt": "2024-01-16T10:00:00.000Z",
|
|
308
|
+
"contentType": "text/markdown"
|
|
309
|
+
},
|
|
310
|
+
"report.pdf": {
|
|
311
|
+
"source": "/local/reports/q4.pdf",
|
|
312
|
+
"fetchedAt": "2024-01-15T11:00:00.000Z",
|
|
313
|
+
"contentType": "application/pdf"
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
#### Built-in fetchers
|
|
320
|
+
|
|
321
|
+
| Fetcher | Handles | Notes |
|
|
322
|
+
|---------|---------|-------|
|
|
323
|
+
| `UrlFetcher` | `http://`, `https://` | Auto text/binary via Content-Type |
|
|
324
|
+
| `LocalFetcher` | `/abs`, `./rel`, `../rel`, `C:\win`, `C:/win` | Copies file, MIME from extension |
|
|
325
|
+
|
|
326
|
+
`UrlFetcher` treats `text/*` and common `application/*` subtypes (json, yaml, xml, toml, graphql, javascript, typescript…) as text (UTF-8). Everything else is stored as binary.
|
|
327
|
+
|
|
328
|
+
#### API
|
|
329
|
+
|
|
330
|
+
```typescript
|
|
331
|
+
import { AgentResource, UrlFetcher, LocalFetcher } from '@devxiyang/agent-memo/resource'
|
|
332
|
+
|
|
333
|
+
// Default: [new UrlFetcher()]. Pass custom list to extend or replace.
|
|
334
|
+
const resource = new AgentResource(memo, [new UrlFetcher(), new LocalFetcher()])
|
|
335
|
+
|
|
336
|
+
// Fetch and cache from any source the fetchers can handle
|
|
337
|
+
await resource.fetch('https://example.com/api.md', 'memo://resources/api-docs.md', { ttl: '1d' })
|
|
338
|
+
await resource.fetch('/local/reports/q4.pdf', 'memo://resources/report.pdf')
|
|
339
|
+
await resource.fetch('https://example.com/img.png', 'memo://resources/img.png', { ttl: '7d' })
|
|
340
|
+
|
|
341
|
+
// Read cached text content
|
|
342
|
+
// Returns null if the resource was never fetched, or the TTL has expired
|
|
343
|
+
const entry = await resource.read('memo://resources/api-docs.md')
|
|
344
|
+
// {
|
|
345
|
+
// uri: 'memo://resources/api-docs.md',
|
|
346
|
+
// content: '# API Docs ...',
|
|
347
|
+
// meta: { source, fetchedAt, expiresAt?, contentType? }
|
|
348
|
+
// }
|
|
349
|
+
|
|
350
|
+
// Read cached binary content (images, PDFs, audio, etc.)
|
|
351
|
+
const bin = await resource.readBinary('memo://resources/report.pdf')
|
|
352
|
+
// {
|
|
353
|
+
// uri: 'memo://resources/report.pdf',
|
|
354
|
+
// content: Uint8Array,
|
|
355
|
+
// meta: { source, fetchedAt, expiresAt?, contentType? }
|
|
356
|
+
// }
|
|
357
|
+
|
|
358
|
+
// Get the physical filesystem path — for external tools (PDF parsers, image processors…)
|
|
359
|
+
const path = resource.toPath('memo://resources/report.pdf')
|
|
360
|
+
|
|
361
|
+
// Re-fetch from the originally stored source (respects new options if provided)
|
|
362
|
+
await resource.refresh('memo://resources/api-docs.md')
|
|
363
|
+
await resource.refresh('memo://resources/api-docs.md', { ttl: '7d' }) // extend TTL
|
|
364
|
+
|
|
365
|
+
// Check if a resource is missing or its TTL has expired
|
|
366
|
+
const stale = await resource.isStale('memo://resources/api-docs.md')
|
|
367
|
+
|
|
368
|
+
// Read metadata without fetching the file content
|
|
369
|
+
const meta = await resource.getMeta('memo://resources/api-docs.md')
|
|
370
|
+
// { source, fetchedAt, expiresAt?, contentType? } or null
|
|
371
|
+
|
|
372
|
+
// Remove the file and its metadata entry
|
|
373
|
+
await resource.delete('memo://resources/api-docs.md')
|
|
374
|
+
```
|
|
375
|
+
|
|
376
|
+
TTL format: `30s` · `5m` · `1h` · `7d` · `1y`
|
|
377
|
+
|
|
378
|
+
#### Custom fetchers
|
|
379
|
+
|
|
380
|
+
Implement `ResourceFetcher` to support any source — S3, databases, internal APIs, etc. Fetchers are tried in order; the first one whose `canHandle()` returns `true` is used.
|
|
381
|
+
|
|
382
|
+
```typescript
|
|
383
|
+
import type { ResourceFetcher, FetchMeta } from '@devxiyang/agent-memo/resource'
|
|
384
|
+
import { writeFile } from 'node:fs/promises'
|
|
385
|
+
|
|
386
|
+
class S3Fetcher implements ResourceFetcher {
|
|
387
|
+
canHandle(source: string): boolean {
|
|
388
|
+
return source.startsWith('s3://')
|
|
389
|
+
}
|
|
390
|
+
async fetch(source: string, destPath: string): Promise<FetchMeta> {
|
|
391
|
+
const data = await downloadFromS3(source) // your S3 logic
|
|
392
|
+
await writeFile(destPath, data)
|
|
393
|
+
return { contentType: 'application/octet-stream' }
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
const resource = new AgentResource(memo, [new S3Fetcher(), new UrlFetcher()])
|
|
398
|
+
await resource.fetch('s3://my-bucket/model.bin', 'memo://models/model.bin')
|
|
399
|
+
```
|
|
400
|
+
|
|
401
|
+
Each plugin accepts any `FileMemo` instance — works with `FileMemo` today, `CloudMemo` tomorrow.
|
|
402
|
+
|
|
169
403
|
## Filesystem Structure
|
|
170
404
|
|
|
171
405
|
```
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { Memo, MemoLifecycle, MemoUri, MemoNode, DirMeta, Relation, SearchOptions, SearchResult, FileMemoOptions } from './types.js';
|
|
2
|
-
export declare class FileMemo implements Memo, MemoLifecycle {
|
|
1
|
+
import type { Memo, BinaryMemo, FilesystemAccess, MemoLifecycle, MemoUri, MemoNode, DirMeta, Relation, SearchOptions, SearchResult, FileMemoOptions } from './types.js';
|
|
2
|
+
export declare class FileMemo implements Memo, BinaryMemo, FilesystemAccess, MemoLifecycle {
|
|
3
3
|
private readonly options;
|
|
4
4
|
private readonly hooks;
|
|
5
5
|
private readonly backend;
|
|
@@ -11,7 +11,6 @@ export declare class FileMemo implements Memo, MemoLifecycle {
|
|
|
11
11
|
private absToUri;
|
|
12
12
|
private fire;
|
|
13
13
|
private _indexFile;
|
|
14
|
-
/** Convert a memo URI to an absolute filesystem path (for binary file access). */
|
|
15
14
|
toPath(uri: MemoUri): string;
|
|
16
15
|
/**
|
|
17
16
|
* Start watching the workspace with chokidar.
|
|
@@ -25,6 +24,8 @@ export declare class FileMemo implements Memo, MemoLifecycle {
|
|
|
25
24
|
read(uri: MemoUri): Promise<string | null>;
|
|
26
25
|
write(uri: MemoUri, content: string): Promise<void>;
|
|
27
26
|
delete(uri: MemoUri): Promise<void>;
|
|
27
|
+
readBinary(uri: MemoUri): Promise<Uint8Array | null>;
|
|
28
|
+
writeBinary(uri: MemoUri, content: Uint8Array): Promise<void>;
|
|
28
29
|
ls(uri: MemoUri): Promise<MemoNode[]>;
|
|
29
30
|
mkdir(uri: MemoUri): Promise<void>;
|
|
30
31
|
rmdir(uri: MemoUri, recursive?: boolean): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-fs.d.ts","sourceRoot":"","sources":["../../../src/core/memo/file-fs.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,IAAI,EACJ,aAAa,EACb,OAAO,EACP,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,aAAa,EACb,YAAY,EAKZ,eAAe,EAChB,MAAM,YAAY,CAAA;AA+BnB,qBAAa,QAAS,YAAW,IAAI,EAAE,aAAa;
|
|
1
|
+
{"version":3,"file":"file-fs.d.ts","sourceRoot":"","sources":["../../../src/core/memo/file-fs.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,IAAI,EACJ,UAAU,EACV,gBAAgB,EAChB,aAAa,EACb,OAAO,EACP,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,aAAa,EACb,YAAY,EAKZ,eAAe,EAChB,MAAM,YAAY,CAAA;AA+BnB,qBAAa,QAAS,YAAW,IAAI,EAAE,UAAU,EAAE,gBAAgB,EAAE,aAAa;IAOpE,OAAO,CAAC,QAAQ,CAAC,OAAO;IANpC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAa;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAiB;IACtC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAuC;IAC7D,OAAO,CAAC,OAAO,CAAkC;gBAEpB,OAAO,EAAE,eAAe;IAWrD,OAAO,KAAK,SAAS,GAAoC;IAEzD,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,IAAI;YAME,UAAU;IAUxB,MAAM,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM;IAI5B;;;;;OAKG;IACH,KAAK,IAAI,IAAI;IAiDP,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAMxB,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC;IAMtC,IAAI,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAQ1C,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASnD,MAAM,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAOnC,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAQpD,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAW7D,EAAE,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAiCrC,KAAK,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlC,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAMrD,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAcxC,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB9D,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAS5C,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBtE,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAepD,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAMvE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;CAqBjE"}
|
|
@@ -54,8 +54,7 @@ export class FileMemo {
|
|
|
54
54
|
]);
|
|
55
55
|
return { mimeType, size: s?.size ?? 0, modTime: s?.mtimeMs ?? 0 };
|
|
56
56
|
}
|
|
57
|
-
// ──
|
|
58
|
-
/** Convert a memo URI to an absolute filesystem path (for binary file access). */
|
|
57
|
+
// ── FilesystemAccess ─────────────────────────────────────────────────────
|
|
59
58
|
toPath(uri) {
|
|
60
59
|
return join(this.workspace, uriToRel(uri));
|
|
61
60
|
}
|
|
@@ -139,6 +138,22 @@ export class FileMemo {
|
|
|
139
138
|
this.fire(this.hooks.onDeleted?.(uri, parentDirs(uri)), 'delete');
|
|
140
139
|
}
|
|
141
140
|
}
|
|
141
|
+
async readBinary(uri) {
|
|
142
|
+
try {
|
|
143
|
+
return await readFile(this.toPath(uri));
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
return null;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
async writeBinary(uri, content) {
|
|
150
|
+
const p = this.toPath(uri);
|
|
151
|
+
await mkdir(dirname(p), { recursive: true });
|
|
152
|
+
await writeFile(p, content);
|
|
153
|
+
if (!this.watcher) {
|
|
154
|
+
this.fire(this.hooks.onWritten?.(uri, parentDirs(uri)), 'write');
|
|
155
|
+
}
|
|
156
|
+
}
|
|
142
157
|
// ── Directory ──────────────────────────────────────────────────────────────
|
|
143
158
|
async ls(uri) {
|
|
144
159
|
const p = this.toPath(uri);
|
|
@@ -230,7 +245,9 @@ export class FileMemo {
|
|
|
230
245
|
const existing = await this.relations(uri);
|
|
231
246
|
const filtered = existing.filter(r => !r.uris.includes(target));
|
|
232
247
|
await writeFile(join(this.toPath(uri), META_RELATIONS), JSON.stringify(filtered, null, 2), 'utf-8');
|
|
233
|
-
|
|
248
|
+
if (!this.watcher) {
|
|
249
|
+
this.fire(this.hooks.onUnlinked?.(uri, target), 'unlink');
|
|
250
|
+
}
|
|
234
251
|
}
|
|
235
252
|
// ── Search ─────────────────────────────────────────────────────────────────
|
|
236
253
|
async search(query, options) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-fs.js","sourceRoot":"","sources":["../../../src/core/memo/file-fs.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"file-fs.js","sourceRoot":"","sources":["../../../src/core/memo/file-fs.ts"],"names":[],"mappings":"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"}
|
package/dist/core/memo/mime.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import type { MimeDetector } from './types.js';
|
|
2
|
+
export declare const EXTENSION_MIME: Record<string, string>;
|
|
2
3
|
/**
|
|
3
|
-
* MIME type detector
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* MIME type detector using two-stage detection:
|
|
5
|
+
* 1. Magic bytes via file-type (accurate for binary formats)
|
|
6
|
+
* 2. Extension-based fallback (for text formats with no magic bytes)
|
|
6
7
|
*/
|
|
7
8
|
export declare class MagicMimeDetector implements MimeDetector {
|
|
8
9
|
detect(path: string): Promise<string | undefined>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mime.d.ts","sourceRoot":"","sources":["../../../src/core/memo/mime.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mime.d.ts","sourceRoot":"","sources":["../../../src/core/memo/mime.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAI9C,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAwDjD,CAAA;AAED;;;;GAIG;AACH,qBAAa,iBAAkB,YAAW,YAAY;IAC9C,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;CAOxD"}
|
package/dist/core/memo/mime.js
CHANGED
|
@@ -1,13 +1,73 @@
|
|
|
1
1
|
import { fileTypeFromFile } from 'file-type';
|
|
2
|
+
import { extname } from 'node:path';
|
|
3
|
+
// Fallback MIME types by file extension for text-based formats
|
|
4
|
+
// that have no magic bytes and cannot be detected by file-type.
|
|
5
|
+
export const EXTENSION_MIME = {
|
|
6
|
+
// Markup & docs
|
|
7
|
+
'.md': 'text/markdown',
|
|
8
|
+
'.mdx': 'text/markdown',
|
|
9
|
+
'.txt': 'text/plain',
|
|
10
|
+
'.rst': 'text/x-rst',
|
|
11
|
+
'.tex': 'text/x-tex',
|
|
12
|
+
'.html': 'text/html',
|
|
13
|
+
'.htm': 'text/html',
|
|
14
|
+
'.xml': 'application/xml',
|
|
15
|
+
'.svg': 'image/svg+xml',
|
|
16
|
+
// Data formats
|
|
17
|
+
'.json': 'application/json',
|
|
18
|
+
'.jsonl': 'application/x-ndjson',
|
|
19
|
+
'.ndjson': 'application/x-ndjson',
|
|
20
|
+
'.yaml': 'application/yaml',
|
|
21
|
+
'.yml': 'application/yaml',
|
|
22
|
+
'.toml': 'application/toml',
|
|
23
|
+
'.csv': 'text/csv',
|
|
24
|
+
'.tsv': 'text/tab-separated-values',
|
|
25
|
+
'.ini': 'text/plain',
|
|
26
|
+
'.env': 'text/plain',
|
|
27
|
+
// Code
|
|
28
|
+
'.ts': 'text/typescript',
|
|
29
|
+
'.tsx': 'text/typescript',
|
|
30
|
+
'.js': 'text/javascript',
|
|
31
|
+
'.jsx': 'text/javascript',
|
|
32
|
+
'.mjs': 'text/javascript',
|
|
33
|
+
'.cjs': 'text/javascript',
|
|
34
|
+
'.css': 'text/css',
|
|
35
|
+
'.scss': 'text/x-scss',
|
|
36
|
+
'.less': 'text/x-less',
|
|
37
|
+
'.py': 'text/x-python',
|
|
38
|
+
'.rb': 'text/x-ruby',
|
|
39
|
+
'.rs': 'text/x-rust',
|
|
40
|
+
'.go': 'text/x-go',
|
|
41
|
+
'.java': 'text/x-java',
|
|
42
|
+
'.c': 'text/x-c',
|
|
43
|
+
'.cpp': 'text/x-c++',
|
|
44
|
+
'.h': 'text/x-c',
|
|
45
|
+
'.cs': 'text/x-csharp',
|
|
46
|
+
'.php': 'text/x-php',
|
|
47
|
+
'.sh': 'text/x-sh',
|
|
48
|
+
'.bash': 'text/x-sh',
|
|
49
|
+
'.zsh': 'text/x-sh',
|
|
50
|
+
'.sql': 'text/x-sql',
|
|
51
|
+
'.r': 'text/x-r',
|
|
52
|
+
// Config & misc
|
|
53
|
+
'.graphql': 'application/graphql',
|
|
54
|
+
'.gql': 'application/graphql',
|
|
55
|
+
'.proto': 'text/plain',
|
|
56
|
+
'.tf': 'text/plain',
|
|
57
|
+
'.lock': 'text/plain',
|
|
58
|
+
};
|
|
2
59
|
/**
|
|
3
|
-
* MIME type detector
|
|
4
|
-
*
|
|
5
|
-
*
|
|
60
|
+
* MIME type detector using two-stage detection:
|
|
61
|
+
* 1. Magic bytes via file-type (accurate for binary formats)
|
|
62
|
+
* 2. Extension-based fallback (for text formats with no magic bytes)
|
|
6
63
|
*/
|
|
7
64
|
export class MagicMimeDetector {
|
|
8
65
|
async detect(path) {
|
|
9
66
|
const result = await fileTypeFromFile(path);
|
|
10
|
-
|
|
67
|
+
if (result)
|
|
68
|
+
return result.mime;
|
|
69
|
+
const ext = extname(path).toLowerCase();
|
|
70
|
+
return EXTENSION_MIME[ext];
|
|
11
71
|
}
|
|
12
72
|
}
|
|
13
73
|
//# sourceMappingURL=mime.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mime.js","sourceRoot":"","sources":["../../../src/core/memo/mime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"mime.js","sourceRoot":"","sources":["../../../src/core/memo/mime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGnC,+DAA+D;AAC/D,gEAAgE;AAChE,MAAM,CAAC,MAAM,cAAc,GAA2B;IACpD,gBAAgB;IAChB,KAAK,EAAK,eAAe;IACzB,MAAM,EAAI,eAAe;IACzB,MAAM,EAAI,YAAY;IACtB,MAAM,EAAI,YAAY;IACtB,MAAM,EAAI,YAAY;IACtB,OAAO,EAAG,WAAW;IACrB,MAAM,EAAI,WAAW;IACrB,MAAM,EAAI,iBAAiB;IAC3B,MAAM,EAAI,eAAe;IAEzB,eAAe;IACf,OAAO,EAAG,kBAAkB;IAC5B,QAAQ,EAAE,sBAAsB;IAChC,SAAS,EAAC,sBAAsB;IAChC,OAAO,EAAG,kBAAkB;IAC5B,MAAM,EAAI,kBAAkB;IAC5B,OAAO,EAAG,kBAAkB;IAC5B,MAAM,EAAI,UAAU;IACpB,MAAM,EAAI,2BAA2B;IACrC,MAAM,EAAI,YAAY;IACtB,MAAM,EAAI,YAAY;IAEtB,OAAO;IACP,KAAK,EAAI,iBAAiB;IAC1B,MAAM,EAAG,iBAAiB;IAC1B,KAAK,EAAI,iBAAiB;IAC1B,MAAM,EAAG,iBAAiB;IAC1B,MAAM,EAAG,iBAAiB;IAC1B,MAAM,EAAG,iBAAiB;IAC1B,MAAM,EAAG,UAAU;IACnB,OAAO,EAAE,aAAa;IACtB,OAAO,EAAE,aAAa;IACtB,KAAK,EAAI,eAAe;IACxB,KAAK,EAAI,aAAa;IACtB,KAAK,EAAI,aAAa;IACtB,KAAK,EAAI,WAAW;IACpB,OAAO,EAAE,aAAa;IACtB,IAAI,EAAK,UAAU;IACnB,MAAM,EAAG,YAAY;IACrB,IAAI,EAAK,UAAU;IACnB,KAAK,EAAI,eAAe;IACxB,MAAM,EAAG,YAAY;IACrB,KAAK,EAAI,WAAW;IACpB,OAAO,EAAE,WAAW;IACpB,MAAM,EAAG,WAAW;IACpB,MAAM,EAAG,YAAY;IACrB,IAAI,EAAK,UAAU;IAEnB,gBAAgB;IAChB,UAAU,EAAE,qBAAqB;IACjC,MAAM,EAAM,qBAAqB;IACjC,QAAQ,EAAI,YAAY;IACxB,KAAK,EAAO,YAAY;IACxB,OAAO,EAAK,YAAY;CACzB,CAAA;AAED;;;;GAIG;AACH,MAAM,OAAO,iBAAiB;IAC5B,KAAK,CAAC,MAAM,CAAC,IAAY;QACvB,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAA;QAC3C,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC,IAAI,CAAA;QAE9B,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAA;QACvC,OAAO,cAAc,CAAC,GAAG,CAAC,CAAA;IAC5B,CAAC;CACF"}
|
|
@@ -77,13 +77,27 @@ export interface FileMemoOptions {
|
|
|
77
77
|
watch?: boolean;
|
|
78
78
|
}
|
|
79
79
|
/**
|
|
80
|
-
* Optional
|
|
81
|
-
*
|
|
82
|
-
* can depend only on the storage primitives they need.
|
|
80
|
+
* Optional extension for implementations that support binary file I/O.
|
|
81
|
+
* Separate from Memo so text-only consumers are unaffected.
|
|
83
82
|
*/
|
|
84
|
-
export interface
|
|
85
|
-
|
|
83
|
+
export interface BinaryMemo {
|
|
84
|
+
readBinary(uri: MemoUri): Promise<Uint8Array | null>;
|
|
85
|
+
writeBinary(uri: MemoUri, content: Uint8Array): Promise<void>;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Implemented by backends that run on a local filesystem.
|
|
89
|
+
* Gives consumers direct access to the physical path for a URI —
|
|
90
|
+
* used by plugins (AgentMemory, AgentResource) and external tools.
|
|
91
|
+
*/
|
|
92
|
+
export interface FilesystemAccess {
|
|
93
|
+
/** Convert a memo URI to an absolute filesystem path. */
|
|
86
94
|
toPath(uri: MemoUri): string;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Manages the lifecycle of the filesystem watcher.
|
|
98
|
+
* Consumed by application code, not by plugins.
|
|
99
|
+
*/
|
|
100
|
+
export interface MemoLifecycle extends AsyncDisposable {
|
|
87
101
|
/** Start watching the workspace; hooks fire for all filesystem changes. */
|
|
88
102
|
watch(): void;
|
|
89
103
|
/** Stop watching and release resources. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/memo/types.ts"],"names":[],"mappings":"AAEA,8CAA8C;AAC9C,MAAM,MAAM,OAAO,GAAG,MAAM,CAAA;AAI5B,MAAM,MAAM,QAAQ,GAAG;IACrB,GAAG,EAAQ,OAAO,CAAA;IAClB,IAAI,EAAO,MAAM,CAAA;IACjB,KAAK,EAAM,OAAO,CAAA;IAClB,IAAI,EAAO,MAAM,CAAA;IACjB,OAAO,EAAI,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAID;;;;;;;GAOG;AACH,MAAM,MAAM,OAAO,GAAG;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACnC,CAAA;AAID,MAAM,MAAM,QAAQ,GAAG;IACrB,EAAE,EAAU,MAAM,CAAA;IAClB,IAAI,EAAQ,OAAO,EAAE,CAAA;IACrB,MAAM,CAAC,EAAK,MAAM,CAAA;IAClB,SAAS,EAAG,MAAM,CAAA;CACnB,CAAA;AAID,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;CAClD;AAID,MAAM,MAAM,aAAa,GAAG;IAC1B,0EAA0E;IAC1E,KAAK,CAAC,EAAE,OAAO,EAAE,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,GAAG,EAAM,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,WAAW,aAAa;IAC5B,2EAA2E;IAC3E,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAA;CACxE;AAID,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAA;AAE9D;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,yGAAyG;IACzG,SAAS,CAAC,EAAG,CAAC,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1E,2DAA2D;IAC3D,SAAS,CAAC,EAAG,CAAC,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1E,0CAA0C;IAC1C,QAAQ,CAAC,EAAI,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAQ,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1E,0CAA0C;IAC1C,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,KAAW,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1E,6CAA6C;IAC7C,OAAO,CAAC,EAAK,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,KAAU,IAAI,CAAA;CAC3D;AAID,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAK,SAAS,CAAA;IACpB,wDAAwD;IACxD,MAAM,CAAC,EAAI,aAAa,CAAA;IACxB,uEAAuE;IACvE,IAAI,CAAC,EAAM,YAAY,CAAA;IACvB;;;;OAIG;IACH,KAAK,CAAC,EAAK,OAAO,CAAA;CACnB;AAID
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/memo/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { Memo, FilesystemAccess, MemoUri } from '../../core/memo/types.js';
|
|
2
|
+
import type { RememberOptions, MemorySearchOptions, MemoryFrontmatter, MemoryEntry } from './types.js';
|
|
3
|
+
export type { RememberOptions, MemorySearchOptions, MemoryFrontmatter, MemoryEntry };
|
|
4
|
+
export declare class AgentMemory {
|
|
5
|
+
private readonly memo;
|
|
6
|
+
constructor(memo: Memo & FilesystemAccess);
|
|
7
|
+
/**
|
|
8
|
+
* Get the physical filesystem path for a memory URI.
|
|
9
|
+
*/
|
|
10
|
+
toPath(uri: MemoUri): string;
|
|
11
|
+
/**
|
|
12
|
+
* Write a memory with frontmatter.
|
|
13
|
+
* If the file already exists, createdAt is preserved and frontmatter is merged.
|
|
14
|
+
* Standard fields: createdAt, source, forgottenAt.
|
|
15
|
+
* Any extra fields in options are stored as custom extensions.
|
|
16
|
+
*/
|
|
17
|
+
remember(uri: MemoUri, content: string, options?: RememberOptions): Promise<void>;
|
|
18
|
+
/**
|
|
19
|
+
* Read a single memory.
|
|
20
|
+
* Returns null if not found or if forgottenAt is set.
|
|
21
|
+
*/
|
|
22
|
+
recall(uri: MemoUri): Promise<MemoryEntry | null>;
|
|
23
|
+
/**
|
|
24
|
+
* Soft-delete: set forgottenAt in frontmatter.
|
|
25
|
+
* File stays on disk but recall/search will exclude it by default.
|
|
26
|
+
*/
|
|
27
|
+
forget(uri: MemoUri): Promise<void>;
|
|
28
|
+
/**
|
|
29
|
+
* Hard-delete: remove the file entirely.
|
|
30
|
+
* No metadata cleanup needed — everything is in the file.
|
|
31
|
+
*/
|
|
32
|
+
purge(uri: MemoUri): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Full-text search with frontmatter filtering.
|
|
35
|
+
* Excludes forgotten memories by default.
|
|
36
|
+
*/
|
|
37
|
+
search(query: string, options?: MemorySearchOptions): Promise<MemoryEntry[]>;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/plugins/memory/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAA;AAC/E,OAAO,KAAK,EACV,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,WAAW,EACZ,MAAM,YAAY,CAAA;AAEnB,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,WAAW,EAAE,CAAA;AAepF,qBAAa,WAAW;IACV,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,IAAI,GAAG,gBAAgB;IAE1D;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM;IAI5B;;;;;OAKG;IACG,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAqB3F;;;OAGG;IACG,MAAM,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAUvD;;;OAGG;IACG,MAAM,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAWzC;;;OAGG;IACG,KAAK,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxC;;;OAGG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;CAyBvF"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import matter from 'gray-matter';
|
|
2
|
+
// ─── Helpers ─────────────────────────────────────────────────────────────────
|
|
3
|
+
function serialize(content, frontmatter) {
|
|
4
|
+
return matter.stringify(content, frontmatter);
|
|
5
|
+
}
|
|
6
|
+
function parse(raw) {
|
|
7
|
+
const { content, data } = matter(raw);
|
|
8
|
+
return { content: content.trim(), frontmatter: data };
|
|
9
|
+
}
|
|
10
|
+
// ─── AgentMemory ─────────────────────────────────────────────────────────────
|
|
11
|
+
export class AgentMemory {
|
|
12
|
+
memo;
|
|
13
|
+
constructor(memo) {
|
|
14
|
+
this.memo = memo;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Get the physical filesystem path for a memory URI.
|
|
18
|
+
*/
|
|
19
|
+
toPath(uri) {
|
|
20
|
+
return this.memo.toPath(uri);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Write a memory with frontmatter.
|
|
24
|
+
* If the file already exists, createdAt is preserved and frontmatter is merged.
|
|
25
|
+
* Standard fields: createdAt, source, forgottenAt.
|
|
26
|
+
* Any extra fields in options are stored as custom extensions.
|
|
27
|
+
*/
|
|
28
|
+
async remember(uri, content, options = {}) {
|
|
29
|
+
const { source, ...extensions } = options;
|
|
30
|
+
let createdAt = new Date().toISOString();
|
|
31
|
+
// Preserve createdAt if file already exists
|
|
32
|
+
const existing = await this.memo.read(uri);
|
|
33
|
+
if (existing !== null) {
|
|
34
|
+
const { frontmatter } = parse(existing);
|
|
35
|
+
if (frontmatter.createdAt)
|
|
36
|
+
createdAt = frontmatter.createdAt;
|
|
37
|
+
}
|
|
38
|
+
const frontmatter = {
|
|
39
|
+
createdAt,
|
|
40
|
+
...(source !== undefined && { source }),
|
|
41
|
+
...extensions,
|
|
42
|
+
};
|
|
43
|
+
await this.memo.write(uri, serialize(content, frontmatter));
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Read a single memory.
|
|
47
|
+
* Returns null if not found or if forgottenAt is set.
|
|
48
|
+
*/
|
|
49
|
+
async recall(uri) {
|
|
50
|
+
const raw = await this.memo.read(uri);
|
|
51
|
+
if (raw === null)
|
|
52
|
+
return null;
|
|
53
|
+
const { content, frontmatter } = parse(raw);
|
|
54
|
+
if (frontmatter.forgottenAt)
|
|
55
|
+
return null;
|
|
56
|
+
return { uri, content, frontmatter };
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Soft-delete: set forgottenAt in frontmatter.
|
|
60
|
+
* File stays on disk but recall/search will exclude it by default.
|
|
61
|
+
*/
|
|
62
|
+
async forget(uri) {
|
|
63
|
+
const raw = await this.memo.read(uri);
|
|
64
|
+
if (raw === null)
|
|
65
|
+
return;
|
|
66
|
+
const { content, frontmatter } = parse(raw);
|
|
67
|
+
await this.memo.write(uri, serialize(content, {
|
|
68
|
+
...frontmatter,
|
|
69
|
+
forgottenAt: new Date().toISOString(),
|
|
70
|
+
}));
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Hard-delete: remove the file entirely.
|
|
74
|
+
* No metadata cleanup needed — everything is in the file.
|
|
75
|
+
*/
|
|
76
|
+
async purge(uri) {
|
|
77
|
+
await this.memo.delete(uri);
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Full-text search with frontmatter filtering.
|
|
81
|
+
* Excludes forgotten memories by default.
|
|
82
|
+
*/
|
|
83
|
+
async search(query, options = {}) {
|
|
84
|
+
const { scope, limit, excludeForgotten = true, source, } = options;
|
|
85
|
+
const raw = await this.memo.search(query, { scope, limit });
|
|
86
|
+
const results = [];
|
|
87
|
+
for (const result of raw) {
|
|
88
|
+
const file = await this.memo.read(result.uri);
|
|
89
|
+
if (file === null)
|
|
90
|
+
continue;
|
|
91
|
+
const { content, frontmatter } = parse(file);
|
|
92
|
+
if (excludeForgotten && frontmatter.forgottenAt)
|
|
93
|
+
continue;
|
|
94
|
+
if (source !== undefined && frontmatter.source !== source)
|
|
95
|
+
continue;
|
|
96
|
+
results.push({ uri: result.uri, content, frontmatter });
|
|
97
|
+
}
|
|
98
|
+
return results;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/memory/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { MemoUri } from '../../core/memo/types.js';
|
|
2
|
+
/** Standard fields managed by AgentMemory. */
|
|
3
|
+
export type MemoryStandardFields = {
|
|
4
|
+
createdAt: string;
|
|
5
|
+
source?: string;
|
|
6
|
+
forgottenAt?: string;
|
|
7
|
+
};
|
|
8
|
+
/** Full frontmatter = standard fields + caller-defined extensions. */
|
|
9
|
+
export type MemoryFrontmatter = MemoryStandardFields & Record<string, unknown>;
|
|
10
|
+
export type MemoryEntry = {
|
|
11
|
+
uri: MemoUri;
|
|
12
|
+
/** Body content without frontmatter. */
|
|
13
|
+
content: string;
|
|
14
|
+
frontmatter: MemoryFrontmatter;
|
|
15
|
+
};
|
|
16
|
+
export type RememberOptions = {
|
|
17
|
+
source?: string;
|
|
18
|
+
/** Any custom frontmatter fields. */
|
|
19
|
+
[key: string]: unknown;
|
|
20
|
+
};
|
|
21
|
+
export type MemorySearchOptions = {
|
|
22
|
+
scope?: MemoUri[];
|
|
23
|
+
limit?: number;
|
|
24
|
+
/** Exclude memories where forgottenAt is set. Default: true. */
|
|
25
|
+
excludeForgotten?: boolean;
|
|
26
|
+
/** Filter by frontmatter source field. */
|
|
27
|
+
source?: string;
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/plugins/memory/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAA;AAIvD,8CAA8C;AAC9C,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,EAAK,MAAM,CAAA;IACpB,MAAM,CAAC,EAAO,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,CAAA;AAED,sEAAsE;AACtE,MAAM,MAAM,iBAAiB,GAAG,oBAAoB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAI9E,MAAM,MAAM,WAAW,GAAG;IACxB,GAAG,EAAU,OAAO,CAAA;IACpB,wCAAwC;IACxC,OAAO,EAAM,MAAM,CAAA;IACnB,WAAW,EAAE,iBAAiB,CAAA;CAC/B,CAAA;AAID,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,qCAAqC;IACrC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,CAAC,EAAa,OAAO,EAAE,CAAA;IAC5B,KAAK,CAAC,EAAa,MAAM,CAAA;IACzB,gEAAgE;IAChE,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,0CAA0C;IAC1C,MAAM,CAAC,EAAY,MAAM,CAAA;CAC1B,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/plugins/memory/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ResourceFetcher, FetchMeta } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Built-in fetcher for local filesystem paths.
|
|
4
|
+
* Copies the file into the memo workspace.
|
|
5
|
+
* Supports Unix and Windows paths (absolute and relative).
|
|
6
|
+
*/
|
|
7
|
+
export declare class LocalFetcher implements ResourceFetcher {
|
|
8
|
+
canHandle(source: string): boolean;
|
|
9
|
+
fetch(source: string, destPath: string): Promise<FetchMeta>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=local.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../../../src/plugins/resource/fetchers/local.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAK7D;;;;GAIG;AACH,qBAAa,YAAa,YAAW,eAAe;IAClD,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAY5B,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;CAKlE"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { copyFile } from 'node:fs/promises';
|
|
2
|
+
import { extname } from 'node:path';
|
|
3
|
+
import { EXTENSION_MIME } from '../../../core/memo/mime.js';
|
|
4
|
+
// Matches Windows absolute paths: C:\... or C:/...
|
|
5
|
+
const WINDOWS_ABS_RE = /^[a-zA-Z]:[/\\]/;
|
|
6
|
+
/**
|
|
7
|
+
* Built-in fetcher for local filesystem paths.
|
|
8
|
+
* Copies the file into the memo workspace.
|
|
9
|
+
* Supports Unix and Windows paths (absolute and relative).
|
|
10
|
+
*/
|
|
11
|
+
export class LocalFetcher {
|
|
12
|
+
canHandle(source) {
|
|
13
|
+
// Unix absolute
|
|
14
|
+
if (source.startsWith('/'))
|
|
15
|
+
return true;
|
|
16
|
+
// Unix relative
|
|
17
|
+
if (source.startsWith('./') || source.startsWith('../'))
|
|
18
|
+
return true;
|
|
19
|
+
// Windows absolute: C:\ or C:/
|
|
20
|
+
if (WINDOWS_ABS_RE.test(source))
|
|
21
|
+
return true;
|
|
22
|
+
// Windows relative: .\ or ..\
|
|
23
|
+
if (source.startsWith('.\\') || source.startsWith('..\\'))
|
|
24
|
+
return true;
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
async fetch(source, destPath) {
|
|
28
|
+
await copyFile(source, destPath);
|
|
29
|
+
const ext = extname(source).toLowerCase();
|
|
30
|
+
return { contentType: EXTENSION_MIME[ext] };
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=local.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local.js","sourceRoot":"","sources":["../../../../src/plugins/resource/fetchers/local.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAG3D,mDAAmD;AACnD,MAAM,cAAc,GAAG,iBAAiB,CAAA;AAExC;;;;GAIG;AACH,MAAM,OAAO,YAAY;IACvB,SAAS,CAAC,MAAc;QACtB,gBAAgB;QAChB,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAA;QACvC,gBAAgB;QAChB,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAA;QACpE,+BAA+B;QAC/B,IAAI,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC;YAAE,OAAO,IAAI,CAAA;QAC5C,8BAA8B;QAC9B,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC;YAAE,OAAO,IAAI,CAAA;QACtE,OAAO,KAAK,CAAA;IACd,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,MAAc,EAAE,QAAgB;QAC1C,MAAM,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;QAChC,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAA;QACzC,OAAO,EAAE,WAAW,EAAE,cAAc,CAAC,GAAG,CAAC,EAAE,CAAA;IAC7C,CAAC;CACF"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ResourceFetcher, FetchMeta, FetchOptions } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Built-in fetcher for HTTP/HTTPS URLs.
|
|
4
|
+
* Automatically handles binary vs text content based on Content-Type.
|
|
5
|
+
*/
|
|
6
|
+
export declare class UrlFetcher implements ResourceFetcher {
|
|
7
|
+
canHandle(source: string): boolean;
|
|
8
|
+
fetch(source: string, destPath: string, options?: FetchOptions): Promise<FetchMeta>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=url.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../../../src/plugins/resource/fetchers/url.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAgB3E;;;GAGG;AACH,qBAAa,UAAW,YAAW,eAAe;IAChD,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAI5B,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC;CAkB1F"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { writeFile } from 'node:fs/promises';
|
|
2
|
+
// Text-based application/* subtypes that should be saved as UTF-8 strings
|
|
3
|
+
const TEXT_APP_SUBTYPES = new Set([
|
|
4
|
+
'json', 'yaml', 'xml', 'toml', 'graphql', 'x-ndjson',
|
|
5
|
+
'x-www-form-urlencoded', 'javascript', 'typescript',
|
|
6
|
+
]);
|
|
7
|
+
function isTextContentType(contentType) {
|
|
8
|
+
const [type] = contentType.split(';').map(s => s.trim());
|
|
9
|
+
const [main, sub] = type.split('/');
|
|
10
|
+
if (main === 'text')
|
|
11
|
+
return true;
|
|
12
|
+
if (main === 'application' && sub && TEXT_APP_SUBTYPES.has(sub))
|
|
13
|
+
return true;
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Built-in fetcher for HTTP/HTTPS URLs.
|
|
18
|
+
* Automatically handles binary vs text content based on Content-Type.
|
|
19
|
+
*/
|
|
20
|
+
export class UrlFetcher {
|
|
21
|
+
canHandle(source) {
|
|
22
|
+
return source.startsWith('http://') || source.startsWith('https://');
|
|
23
|
+
}
|
|
24
|
+
async fetch(source, destPath, options) {
|
|
25
|
+
const response = await globalThis.fetch(source, { headers: options?.headers });
|
|
26
|
+
if (!response.ok) {
|
|
27
|
+
throw new Error(`Failed to fetch "${source}": ${response.status} ${response.statusText}`);
|
|
28
|
+
}
|
|
29
|
+
const contentType = response.headers.get('content-type') ?? '';
|
|
30
|
+
if (isTextContentType(contentType)) {
|
|
31
|
+
const text = await response.text();
|
|
32
|
+
await writeFile(destPath, text, 'utf-8');
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
const buffer = await response.arrayBuffer();
|
|
36
|
+
await writeFile(destPath, new Uint8Array(buffer));
|
|
37
|
+
}
|
|
38
|
+
return { contentType: contentType || undefined };
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=url.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url.js","sourceRoot":"","sources":["../../../../src/plugins/resource/fetchers/url.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAG5C,0EAA0E;AAC1E,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC;IAChC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU;IACpD,uBAAuB,EAAE,YAAY,EAAE,YAAY;CACpD,CAAC,CAAA;AAEF,SAAS,iBAAiB,CAAC,WAAmB;IAC5C,MAAM,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;IACxD,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACnC,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,IAAI,CAAA;IAChC,IAAI,IAAI,KAAK,aAAa,IAAI,GAAG,IAAI,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAA;IAC5E,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,OAAO,UAAU;IACrB,SAAS,CAAC,MAAc;QACtB,OAAO,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAA;IACtE,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,MAAc,EAAE,QAAgB,EAAE,OAAsB;QAClE,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAA;QAC9E,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,oBAAoB,MAAM,MAAM,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAA;QAC3F,CAAC;QAED,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAA;QAE9D,IAAI,iBAAiB,CAAC,WAAW,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;YAClC,MAAM,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;QAC1C,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAA;YAC3C,MAAM,SAAS,CAAC,QAAQ,EAAE,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,CAAA;QACnD,CAAC;QAED,OAAO,EAAE,WAAW,EAAE,WAAW,IAAI,SAAS,EAAE,CAAA;IAClD,CAAC;CACF"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { Memo, BinaryMemo, FilesystemAccess, MemoUri } from '../../core/memo/types.js';
|
|
2
|
+
import type { FetchOptions, ResourceMeta, ResourceEntry, BinaryResourceEntry, ResourceFetcher } from './types.js';
|
|
3
|
+
export type { FetchOptions, ResourceMeta, ResourceEntry, BinaryResourceEntry, ResourceFetcher };
|
|
4
|
+
export { UrlFetcher } from './fetchers/url.js';
|
|
5
|
+
export { LocalFetcher } from './fetchers/local.js';
|
|
6
|
+
type FullMemo = Memo & BinaryMemo & FilesystemAccess;
|
|
7
|
+
export declare class AgentResource {
|
|
8
|
+
private readonly memo;
|
|
9
|
+
private readonly fetchers;
|
|
10
|
+
constructor(memo: FullMemo, fetchers?: ResourceFetcher[]);
|
|
11
|
+
/**
|
|
12
|
+
* Fetch content from any source (URL, local path, or custom) and store at uri.
|
|
13
|
+
* The appropriate fetcher is selected via canHandle().
|
|
14
|
+
*/
|
|
15
|
+
fetch(source: string, uri: MemoUri, options?: FetchOptions): Promise<void>;
|
|
16
|
+
/**
|
|
17
|
+
* Re-fetch a resource from its stored source.
|
|
18
|
+
* Throws if no metadata exists for the URI.
|
|
19
|
+
*/
|
|
20
|
+
refresh(uri: MemoUri, options?: FetchOptions): Promise<void>;
|
|
21
|
+
/**
|
|
22
|
+
* Read cached text content. Returns null if not found or expired.
|
|
23
|
+
* For binary files, use toPath() to get the physical path instead.
|
|
24
|
+
*/
|
|
25
|
+
read(uri: MemoUri): Promise<ResourceEntry | null>;
|
|
26
|
+
/**
|
|
27
|
+
* Read cached binary content. Returns null if not found or expired.
|
|
28
|
+
* Use this for images, PDFs, audio, and other binary formats.
|
|
29
|
+
*/
|
|
30
|
+
readBinary(uri: MemoUri): Promise<BinaryResourceEntry | null>;
|
|
31
|
+
/**
|
|
32
|
+
* Get the physical filesystem path for direct binary file access.
|
|
33
|
+
* Useful for passing to external tools (PDF parsers, image processors, etc.).
|
|
34
|
+
*/
|
|
35
|
+
toPath(uri: MemoUri): string;
|
|
36
|
+
/**
|
|
37
|
+
* Remove the resource file and its metadata entry.
|
|
38
|
+
*/
|
|
39
|
+
delete(uri: MemoUri): Promise<void>;
|
|
40
|
+
/**
|
|
41
|
+
* Check whether a cached resource is missing or expired.
|
|
42
|
+
*/
|
|
43
|
+
isStale(uri: MemoUri): Promise<boolean>;
|
|
44
|
+
/**
|
|
45
|
+
* Get metadata for a resource without reading its content.
|
|
46
|
+
*/
|
|
47
|
+
getMeta(uri: MemoUri): Promise<ResourceMeta | null>;
|
|
48
|
+
private _writeMeta;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/plugins/resource/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAA;AAC3F,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAIjH,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,mBAAmB,EAAE,eAAe,EAAE,CAAA;AAC/F,OAAO,EAAE,UAAU,EAAE,MAAQ,mBAAmB,CAAA;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAIlD,KAAK,QAAQ,GAAG,IAAI,GAAG,UAAU,GAAG,gBAAgB,CAAA;AAQpD,qBAAa,aAAa;IAItB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAHvB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;gBAGzB,IAAI,EAAE,QAAQ,EAC/B,QAAQ,CAAC,EAAE,eAAe,EAAE;IAK9B;;;OAGG;IACG,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBpF;;;OAGG;IACG,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAMtE;;;OAGG;IACG,IAAI,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAUvD;;;OAGG;IACG,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAUnE;;;OAGG;IACH,MAAM,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM;IAI5B;;OAEG;IACG,MAAM,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAWzC;;OAEG;IACG,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAM7C;;OAEG;IACG,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;YAU3C,UAAU;CAQzB"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { mkdir } from 'node:fs/promises';
|
|
2
|
+
import { dirname } from 'node:path';
|
|
3
|
+
import { parseTtl, uriBasename, uriDirname } from '../utils.js';
|
|
4
|
+
import { UrlFetcher } from './fetchers/url.js';
|
|
5
|
+
export { UrlFetcher } from './fetchers/url.js';
|
|
6
|
+
export { LocalFetcher } from './fetchers/local.js';
|
|
7
|
+
function isExpired(meta) {
|
|
8
|
+
return !!meta.expiresAt && new Date(meta.expiresAt) < new Date();
|
|
9
|
+
}
|
|
10
|
+
// ─── AgentResource ───────────────────────────────────────────────────────────
|
|
11
|
+
export class AgentResource {
|
|
12
|
+
memo;
|
|
13
|
+
fetchers;
|
|
14
|
+
constructor(memo, fetchers) {
|
|
15
|
+
this.memo = memo;
|
|
16
|
+
this.fetchers = fetchers ?? [new UrlFetcher()];
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Fetch content from any source (URL, local path, or custom) and store at uri.
|
|
20
|
+
* The appropriate fetcher is selected via canHandle().
|
|
21
|
+
*/
|
|
22
|
+
async fetch(source, uri, options = {}) {
|
|
23
|
+
const fetcher = this.fetchers.find(f => f.canHandle(source));
|
|
24
|
+
if (!fetcher)
|
|
25
|
+
throw new Error(`No fetcher found for source: "${source}"`);
|
|
26
|
+
const destPath = this.memo.toPath(uri);
|
|
27
|
+
await mkdir(dirname(destPath), { recursive: true });
|
|
28
|
+
const { contentType } = await fetcher.fetch(source, destPath, options);
|
|
29
|
+
const now = new Date();
|
|
30
|
+
await this._writeMeta(uri, {
|
|
31
|
+
source,
|
|
32
|
+
fetchedAt: now.toISOString(),
|
|
33
|
+
contentType,
|
|
34
|
+
expiresAt: options.ttl
|
|
35
|
+
? new Date(now.getTime() + parseTtl(options.ttl)).toISOString()
|
|
36
|
+
: undefined,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Re-fetch a resource from its stored source.
|
|
41
|
+
* Throws if no metadata exists for the URI.
|
|
42
|
+
*/
|
|
43
|
+
async refresh(uri, options = {}) {
|
|
44
|
+
const meta = await this.getMeta(uri);
|
|
45
|
+
if (!meta)
|
|
46
|
+
throw new Error(`No resource metadata found for "${uri}". Fetch it first.`);
|
|
47
|
+
await this.fetch(meta.source, uri, options);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Read cached text content. Returns null if not found or expired.
|
|
51
|
+
* For binary files, use toPath() to get the physical path instead.
|
|
52
|
+
*/
|
|
53
|
+
async read(uri) {
|
|
54
|
+
const meta = await this.getMeta(uri);
|
|
55
|
+
if (!meta || isExpired(meta))
|
|
56
|
+
return null;
|
|
57
|
+
const content = await this.memo.read(uri);
|
|
58
|
+
if (content === null)
|
|
59
|
+
return null;
|
|
60
|
+
return { uri, content, meta };
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Read cached binary content. Returns null if not found or expired.
|
|
64
|
+
* Use this for images, PDFs, audio, and other binary formats.
|
|
65
|
+
*/
|
|
66
|
+
async readBinary(uri) {
|
|
67
|
+
const meta = await this.getMeta(uri);
|
|
68
|
+
if (!meta || isExpired(meta))
|
|
69
|
+
return null;
|
|
70
|
+
const content = await this.memo.readBinary(uri);
|
|
71
|
+
if (content === null)
|
|
72
|
+
return null;
|
|
73
|
+
return { uri, content, meta };
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Get the physical filesystem path for direct binary file access.
|
|
77
|
+
* Useful for passing to external tools (PDF parsers, image processors, etc.).
|
|
78
|
+
*/
|
|
79
|
+
toPath(uri) {
|
|
80
|
+
return this.memo.toPath(uri);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Remove the resource file and its metadata entry.
|
|
84
|
+
*/
|
|
85
|
+
async delete(uri) {
|
|
86
|
+
await this.memo.delete(uri);
|
|
87
|
+
const dirUri = uriDirname(uri);
|
|
88
|
+
const name = uriBasename(uri);
|
|
89
|
+
const existing = await this.memo.readMeta(dirUri);
|
|
90
|
+
const files = existing.meta?._resource ?? {};
|
|
91
|
+
delete files[name];
|
|
92
|
+
await this.memo.writeMeta(dirUri, { meta: { ...existing.meta, _resource: files } });
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Check whether a cached resource is missing or expired.
|
|
96
|
+
*/
|
|
97
|
+
async isStale(uri) {
|
|
98
|
+
const meta = await this.getMeta(uri);
|
|
99
|
+
if (!meta)
|
|
100
|
+
return true;
|
|
101
|
+
return isExpired(meta);
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Get metadata for a resource without reading its content.
|
|
105
|
+
*/
|
|
106
|
+
async getMeta(uri) {
|
|
107
|
+
const dirUri = uriDirname(uri);
|
|
108
|
+
const name = uriBasename(uri);
|
|
109
|
+
const meta = await this.memo.readMeta(dirUri);
|
|
110
|
+
const files = meta.meta?._resource ?? {};
|
|
111
|
+
return files[name] ?? null;
|
|
112
|
+
}
|
|
113
|
+
// ── Private ────────────────────────────────────────────────────────────────
|
|
114
|
+
async _writeMeta(uri, resMeta) {
|
|
115
|
+
const dirUri = uriDirname(uri);
|
|
116
|
+
const name = uriBasename(uri);
|
|
117
|
+
const existing = await this.memo.readMeta(dirUri);
|
|
118
|
+
const files = existing.meta?._resource ?? {};
|
|
119
|
+
files[name] = resMeta;
|
|
120
|
+
await this.memo.writeMeta(dirUri, { meta: { ...existing.meta, _resource: files } });
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/resource/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { MemoUri } from '../../core/memo/types.js';
|
|
2
|
+
export type FetchMeta = {
|
|
3
|
+
contentType?: string;
|
|
4
|
+
};
|
|
5
|
+
/**
|
|
6
|
+
* Pluggable fetcher interface. Implement this to support custom sources
|
|
7
|
+
* (S3, database, internal APIs, etc.).
|
|
8
|
+
*/
|
|
9
|
+
export interface ResourceFetcher {
|
|
10
|
+
/** Return true if this fetcher can handle the given source string. */
|
|
11
|
+
canHandle(source: string): boolean;
|
|
12
|
+
/** Fetch content from source and write it to destPath (physical path). */
|
|
13
|
+
fetch(source: string, destPath: string, options?: FetchOptions): Promise<FetchMeta>;
|
|
14
|
+
}
|
|
15
|
+
export type FetchOptions = {
|
|
16
|
+
/** Time-to-live for cached content, e.g. '1d', '7d'. Omit to cache indefinitely. */
|
|
17
|
+
ttl?: string;
|
|
18
|
+
/** Additional HTTP request headers (used by UrlFetcher). */
|
|
19
|
+
headers?: Record<string, string>;
|
|
20
|
+
};
|
|
21
|
+
export type ResourceMeta = {
|
|
22
|
+
source: string;
|
|
23
|
+
fetchedAt: string;
|
|
24
|
+
expiresAt?: string;
|
|
25
|
+
contentType?: string;
|
|
26
|
+
};
|
|
27
|
+
/** Text resource entry — returned by read(). */
|
|
28
|
+
export type ResourceEntry = {
|
|
29
|
+
uri: MemoUri;
|
|
30
|
+
content: string;
|
|
31
|
+
meta: ResourceMeta;
|
|
32
|
+
};
|
|
33
|
+
/** Binary resource entry — returned by readBinary(). */
|
|
34
|
+
export type BinaryResourceEntry = {
|
|
35
|
+
uri: MemoUri;
|
|
36
|
+
content: Uint8Array;
|
|
37
|
+
meta: ResourceMeta;
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/plugins/resource/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAA;AAIvD,MAAM,MAAM,SAAS,GAAG;IACtB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,CAAA;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,sEAAsE;IACtE,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAA;IAClC,0EAA0E;IAC1E,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,CAAA;CACpF;AAID,MAAM,MAAM,YAAY,GAAG;IACzB,oFAAoF;IACpF,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,4DAA4D;IAC5D,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACjC,CAAA;AAID,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,EAAQ,MAAM,CAAA;IACpB,SAAS,EAAK,MAAM,CAAA;IACpB,SAAS,CAAC,EAAI,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,CAAA;AAID,gDAAgD;AAChD,MAAM,MAAM,aAAa,GAAG;IAC1B,GAAG,EAAM,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAK,YAAY,CAAA;CACtB,CAAA;AAED,wDAAwD;AACxD,MAAM,MAAM,mBAAmB,GAAG;IAChC,GAAG,EAAM,OAAO,CAAA;IAChB,OAAO,EAAE,UAAU,CAAA;IACnB,IAAI,EAAK,YAAY,CAAA;CACtB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/plugins/resource/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/plugins/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAEpD,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAS5C;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAEhD;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAI/C"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export function parseTtl(ttl) {
|
|
2
|
+
const match = ttl.match(/^(\d+)([smhdwy])$/);
|
|
3
|
+
if (!match)
|
|
4
|
+
throw new Error(`Invalid TTL: "${ttl}". Expected format: 30d, 1h, 7d, etc.`);
|
|
5
|
+
const n = parseInt(match[1], 10);
|
|
6
|
+
const units = {
|
|
7
|
+
s: 1_000, m: 60_000, h: 3_600_000,
|
|
8
|
+
d: 86_400_000, w: 604_800_000, y: 31_536_000_000,
|
|
9
|
+
};
|
|
10
|
+
return n * units[match[2]];
|
|
11
|
+
}
|
|
12
|
+
export function uriBasename(uri) {
|
|
13
|
+
return uri.split('/').filter(Boolean).at(-1) ?? '';
|
|
14
|
+
}
|
|
15
|
+
export function uriDirname(uri) {
|
|
16
|
+
const parts = uri.replace('memo://', '').split('/').filter(Boolean);
|
|
17
|
+
parts.pop();
|
|
18
|
+
return parts.length ? `memo://${parts.join('/')}` : 'memo://';
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/plugins/utils.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,QAAQ,CAAC,GAAW;IAClC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAA;IAC5C,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,GAAG,uCAAuC,CAAC,CAAA;IACxF,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAChC,MAAM,KAAK,GAA2B;QACpC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS;QACjC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,cAAc;KACjD,CAAA;IACD,OAAO,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;AAC5B,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,GAAY;IACtC,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;AACpD,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAY;IACrC,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IACnE,KAAK,CAAC,GAAG,EAAE,CAAA;IACX,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;AAC/D,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@devxiyang/agent-memo",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.2",
|
|
4
4
|
"description": "Agent memory and memo SDK",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -25,6 +25,14 @@
|
|
|
25
25
|
"./memo": {
|
|
26
26
|
"types": "./dist/core/memo/index.d.ts",
|
|
27
27
|
"import": "./dist/core/memo/index.js"
|
|
28
|
+
},
|
|
29
|
+
"./memory": {
|
|
30
|
+
"types": "./dist/plugins/memory/index.d.ts",
|
|
31
|
+
"import": "./dist/plugins/memory/index.js"
|
|
32
|
+
},
|
|
33
|
+
"./resource": {
|
|
34
|
+
"types": "./dist/plugins/resource/index.d.ts",
|
|
35
|
+
"import": "./dist/plugins/resource/index.js"
|
|
28
36
|
}
|
|
29
37
|
},
|
|
30
38
|
"files": [
|
|
@@ -45,6 +53,7 @@
|
|
|
45
53
|
"dependencies": {
|
|
46
54
|
"@vscode/ripgrep": ">=1.17.0",
|
|
47
55
|
"chokidar": ">=5.0.0",
|
|
48
|
-
"file-type": ">=21.0.0"
|
|
56
|
+
"file-type": ">=21.0.0",
|
|
57
|
+
"gray-matter": "^4.0.3"
|
|
49
58
|
}
|
|
50
59
|
}
|