skilld 0.6.2 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +40 -13
- package/dist/_chunks/chunk.mjs +13 -0
- package/dist/_chunks/detect-imports.mjs +2 -12
- package/dist/_chunks/detect-imports.mjs.map +1 -1
- package/dist/_chunks/embedding-cache.mjs +50 -0
- package/dist/_chunks/embedding-cache.mjs.map +1 -0
- package/dist/_chunks/npm.mjs +0 -7
- package/dist/_chunks/npm.mjs.map +1 -1
- package/dist/_chunks/pool2.mjs +1 -1
- package/dist/_chunks/storage.mjs +0 -21
- package/dist/_chunks/storage.mjs.map +1 -1
- package/dist/_chunks/utils.d.mts.map +1 -1
- package/dist/_chunks/version.d.mts +1 -1
- package/dist/_chunks/version.d.mts.map +1 -1
- package/dist/agent/index.mjs +2 -1
- package/dist/cli.mjs +3296 -3138
- package/dist/cli.mjs.map +1 -1
- package/dist/index.mjs +2 -0
- package/dist/retriv/index.d.mts.map +1 -1
- package/dist/retriv/index.mjs +5 -1
- package/dist/retriv/index.mjs.map +1 -1
- package/dist/retriv/worker.d.mts.map +1 -1
- package/dist/retriv/worker.mjs +5 -1
- package/dist/retriv/worker.mjs.map +1 -1
- package/package.json +2 -2
package/dist/index.mjs
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
import "./_chunks/chunk.mjs";
|
|
1
2
|
import { a as getCacheKey, i as getCacheDir, n as REFERENCES_DIR, o as getVersionKey, t as CACHE_DIR } from "./_chunks/config.mjs";
|
|
2
3
|
import { f as listCached, m as readCachedDocs, n as clearCache, r as ensureCacheDir, s as isCached, t as clearAllCache, v as writeToCache } from "./_chunks/storage.mjs";
|
|
3
4
|
import "./cache/index.mjs";
|
|
5
|
+
import "./_chunks/embedding-cache.mjs";
|
|
4
6
|
import { createIndex, search, searchSnippets } from "./retriv/index.mjs";
|
|
5
7
|
import "./_chunks/yaml.mjs";
|
|
6
8
|
import { d as resolvePackageDocs, g as fetchLlmsTxt, m as downloadLlmsDocs, n as fetchNpmPackage, s as readLocalDependencies, v as normalizeLlmsLinks, w as fetchReadmeContent, y as parseMarkdownLinks } from "./_chunks/npm.mjs";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/retriv/index.ts"],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/retriv/index.ts"],"mappings":";;;;KASK,cAAA,GAAiB,OAAA,CAAQ,UAAA,QAAkB,YAAA;AAFuF;;;;AAAA,iBAkBjH,iBAAA,CACpB,SAAA,EAAW,QAAA,IACX,MAAA,EAAQ,WAAA,GACP,OAAA;;;;;iBAUmB,WAAA,CACpB,SAAA,EAAW,QAAA,IACX,MAAA,EAAQ,WAAA,GACP,OAAA;AAAA,iBAMmB,MAAA,CACpB,KAAA,UACA,MAAA,EAAQ,WAAA,EACR,OAAA,GAAS,aAAA,GACR,OAAA,CAAQ,YAAA;;;AA1BX;iBAuDsB,cAAA,CACpB,KAAA,UACA,MAAA,EAAQ,WAAA,EACR,OAAA,GAAS,aAAA,GACR,OAAA,CAAQ,aAAA;AAAA,iBA2BW,QAAA,CAAS,OAAA,aAAoB,OAAA,CAAQ,GAAA,SAAY,cAAA;AAAA,iBASjD,YAAA,CACpB,KAAA,UACA,IAAA,EAAM,GAAA,SAAY,cAAA,GAClB,OAAA,GAAS,aAAA,GACR,OAAA,CAAQ,aAAA;AAAA,iBAqBW,SAAA,CAAU,IAAA,EAAM,GAAA,SAAY,cAAA,IAAkB,OAAA"}
|
package/dist/retriv/index.mjs
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import "../_chunks/chunk.mjs";
|
|
2
|
+
import "../_chunks/config.mjs";
|
|
3
|
+
import "../_chunks/storage.mjs";
|
|
4
|
+
import { t as cachedEmbeddings } from "../_chunks/embedding-cache.mjs";
|
|
1
5
|
import { createRetriv } from "retriv";
|
|
2
6
|
import { autoChunker } from "retriv/chunkers/auto";
|
|
3
7
|
import sqlite from "retriv/db/sqlite";
|
|
@@ -6,7 +10,7 @@ function getDb(config) {
|
|
|
6
10
|
return createRetriv({
|
|
7
11
|
driver: sqlite({
|
|
8
12
|
path: config.dbPath,
|
|
9
|
-
embeddings: transformersJs()
|
|
13
|
+
embeddings: cachedEmbeddings(transformersJs())
|
|
10
14
|
}),
|
|
11
15
|
chunking: autoChunker()
|
|
12
16
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../../src/retriv/index.ts"],"sourcesContent":["import type { ChunkEntity, Document, IndexConfig, IndexPhase, IndexProgress, SearchFilter, SearchOptions, SearchResult, SearchSnippet } from './types'\nimport { createRetriv } from 'retriv'\nimport { autoChunker } from 'retriv/chunkers/auto'\nimport sqlite from 'retriv/db/sqlite'\nimport { transformersJs } from 'retriv/embeddings/transformers-js'\n\nexport type { ChunkEntity, Document, IndexConfig, IndexPhase, IndexProgress, SearchFilter, SearchOptions, SearchResult, SearchSnippet }\n\ntype RetrivInstance = Awaited<ReturnType<typeof createRetriv>>\n\nfunction getDb(config: IndexConfig) {\n return createRetriv({\n driver: sqlite({\n path: config.dbPath,\n embeddings: transformersJs(),\n }),\n chunking: autoChunker(),\n })\n}\n\n/**\n * Index documents in-process (no worker thread).\n * Preferred for tests and environments where worker_threads is unreliable.\n */\nexport async function createIndexDirect(\n documents: Document[],\n config: IndexConfig,\n): Promise<void> {\n const db = await getDb(config)\n await db.index(documents, { onProgress: config.onProgress })\n await db.close?.()\n}\n\n/**\n * Index documents in a background worker thread.\n * Falls back to direct indexing if worker fails to spawn.\n */\nexport async function createIndex(\n documents: Document[],\n config: IndexConfig,\n): Promise<void> {\n // Dynamic import justified: search/searchSnippets shouldn't pull in worker_threads\n const { createIndexInWorker } = await import('./pool')\n return createIndexInWorker(documents, config)\n}\n\nexport async function search(\n query: string,\n config: IndexConfig,\n options: SearchOptions = {},\n): Promise<SearchResult[]> {\n const { limit = 10, filter } = options\n const db = await getDb(config)\n const results = await db.search(query, { limit, filter, returnContent: true, returnMetadata: true, returnMeta: true })\n await db.close?.()\n\n return results.map(r => ({\n id: r.id,\n content: r.content ?? '',\n score: r.score,\n metadata: r.metadata ?? {},\n highlights: r._meta?.highlights ?? [],\n lineRange: r._chunk?.lineRange,\n entities: r._chunk?.entities,\n scope: r._chunk?.scope,\n }))\n}\n\n/**\n * Strip YAML frontmatter from markdown content\n */\nfunction stripFrontmatter(content: string): string {\n const match = content.match(/^---\\r?\\n[\\s\\S]*?\\r?\\n---\\r?\\n/)\n return match ? content.slice(match[0].length).trim() : content\n}\n\n/**\n * Search and return formatted snippets\n */\nexport async function searchSnippets(\n query: string,\n config: IndexConfig,\n options: SearchOptions = {},\n): Promise<SearchSnippet[]> {\n const results = await search(query, config, options)\n return toSnippets(results)\n}\n\nfunction toSnippets(results: SearchResult[]): SearchSnippet[] {\n return results.map((r) => {\n const content = stripFrontmatter(r.content)\n const source = r.metadata.source || r.id\n const lines = content.split('\\n').length\n\n return {\n package: r.metadata.package || 'unknown',\n source,\n lineStart: r.lineRange?.[0] ?? 1,\n lineEnd: r.lineRange?.[1] ?? lines,\n content,\n score: r.score,\n highlights: r.highlights,\n entities: r.entities,\n scope: r.scope,\n }\n })\n}\n\n// ── Pooled DB access for interactive search ──\n\nexport async function openPool(dbPaths: string[]): Promise<Map<string, RetrivInstance>> {\n const pool = new Map<string, RetrivInstance>()\n await Promise.all(dbPaths.map(async (dbPath) => {\n const db = await getDb({ dbPath })\n pool.set(dbPath, db)\n }))\n return pool\n}\n\nexport async function searchPooled(\n query: string,\n pool: Map<string, RetrivInstance>,\n options: SearchOptions = {},\n): Promise<SearchSnippet[]> {\n const { limit = 10, filter } = options\n const allResults = await Promise.all(\n [...pool.values()].map(async (db) => {\n const results = await db.search(query, { limit, filter, returnContent: true, returnMetadata: true, returnMeta: true })\n return results.map(r => ({\n id: r.id,\n content: r.content ?? '',\n score: r.score,\n metadata: r.metadata ?? {},\n highlights: r._meta?.highlights ?? [],\n lineRange: r._chunk?.lineRange as [number, number] | undefined,\n entities: r._chunk?.entities,\n scope: r._chunk?.scope,\n }))\n }),\n )\n const merged = allResults.flat().sort((a, b) => b.score - a.score).slice(0, limit)\n return toSnippets(merged)\n}\n\nexport async function closePool(pool: Map<string, RetrivInstance>): Promise<void> {\n await Promise.all([...pool.values()].map(db => db.close?.()))\n pool.clear()\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../src/retriv/index.ts"],"sourcesContent":["import type { ChunkEntity, Document, IndexConfig, IndexPhase, IndexProgress, SearchFilter, SearchOptions, SearchResult, SearchSnippet } from './types'\nimport { createRetriv } from 'retriv'\nimport { autoChunker } from 'retriv/chunkers/auto'\nimport sqlite from 'retriv/db/sqlite'\nimport { transformersJs } from 'retriv/embeddings/transformers-js'\nimport { cachedEmbeddings } from './embedding-cache'\n\nexport type { ChunkEntity, Document, IndexConfig, IndexPhase, IndexProgress, SearchFilter, SearchOptions, SearchResult, SearchSnippet }\n\ntype RetrivInstance = Awaited<ReturnType<typeof createRetriv>>\n\nfunction getDb(config: IndexConfig) {\n return createRetriv({\n driver: sqlite({\n path: config.dbPath,\n embeddings: cachedEmbeddings(transformersJs()),\n }),\n chunking: autoChunker(),\n })\n}\n\n/**\n * Index documents in-process (no worker thread).\n * Preferred for tests and environments where worker_threads is unreliable.\n */\nexport async function createIndexDirect(\n documents: Document[],\n config: IndexConfig,\n): Promise<void> {\n const db = await getDb(config)\n await db.index(documents, { onProgress: config.onProgress })\n await db.close?.()\n}\n\n/**\n * Index documents in a background worker thread.\n * Falls back to direct indexing if worker fails to spawn.\n */\nexport async function createIndex(\n documents: Document[],\n config: IndexConfig,\n): Promise<void> {\n // Dynamic import justified: search/searchSnippets shouldn't pull in worker_threads\n const { createIndexInWorker } = await import('./pool')\n return createIndexInWorker(documents, config)\n}\n\nexport async function search(\n query: string,\n config: IndexConfig,\n options: SearchOptions = {},\n): Promise<SearchResult[]> {\n const { limit = 10, filter } = options\n const db = await getDb(config)\n const results = await db.search(query, { limit, filter, returnContent: true, returnMetadata: true, returnMeta: true })\n await db.close?.()\n\n return results.map(r => ({\n id: r.id,\n content: r.content ?? '',\n score: r.score,\n metadata: r.metadata ?? {},\n highlights: r._meta?.highlights ?? [],\n lineRange: r._chunk?.lineRange,\n entities: r._chunk?.entities,\n scope: r._chunk?.scope,\n }))\n}\n\n/**\n * Strip YAML frontmatter from markdown content\n */\nfunction stripFrontmatter(content: string): string {\n const match = content.match(/^---\\r?\\n[\\s\\S]*?\\r?\\n---\\r?\\n/)\n return match ? content.slice(match[0].length).trim() : content\n}\n\n/**\n * Search and return formatted snippets\n */\nexport async function searchSnippets(\n query: string,\n config: IndexConfig,\n options: SearchOptions = {},\n): Promise<SearchSnippet[]> {\n const results = await search(query, config, options)\n return toSnippets(results)\n}\n\nfunction toSnippets(results: SearchResult[]): SearchSnippet[] {\n return results.map((r) => {\n const content = stripFrontmatter(r.content)\n const source = r.metadata.source || r.id\n const lines = content.split('\\n').length\n\n return {\n package: r.metadata.package || 'unknown',\n source,\n lineStart: r.lineRange?.[0] ?? 1,\n lineEnd: r.lineRange?.[1] ?? lines,\n content,\n score: r.score,\n highlights: r.highlights,\n entities: r.entities,\n scope: r.scope,\n }\n })\n}\n\n// ── Pooled DB access for interactive search ──\n\nexport async function openPool(dbPaths: string[]): Promise<Map<string, RetrivInstance>> {\n const pool = new Map<string, RetrivInstance>()\n await Promise.all(dbPaths.map(async (dbPath) => {\n const db = await getDb({ dbPath })\n pool.set(dbPath, db)\n }))\n return pool\n}\n\nexport async function searchPooled(\n query: string,\n pool: Map<string, RetrivInstance>,\n options: SearchOptions = {},\n): Promise<SearchSnippet[]> {\n const { limit = 10, filter } = options\n const allResults = await Promise.all(\n [...pool.values()].map(async (db) => {\n const results = await db.search(query, { limit, filter, returnContent: true, returnMetadata: true, returnMeta: true })\n return results.map(r => ({\n id: r.id,\n content: r.content ?? '',\n score: r.score,\n metadata: r.metadata ?? {},\n highlights: r._meta?.highlights ?? [],\n lineRange: r._chunk?.lineRange as [number, number] | undefined,\n entities: r._chunk?.entities,\n scope: r._chunk?.scope,\n }))\n }),\n )\n const merged = allResults.flat().sort((a, b) => b.score - a.score).slice(0, limit)\n return toSnippets(merged)\n}\n\nexport async function closePool(pool: Map<string, RetrivInstance>): Promise<void> {\n await Promise.all([...pool.values()].map(db => db.close?.()))\n pool.clear()\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.d.mts","names":[],"sources":["../../src/retriv/worker.ts"],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"worker.d.mts","names":[],"sources":["../../src/retriv/worker.ts"],"mappings":";;;UAQiB,kBAAA;EACf,IAAA;EACA,EAAA;EACA,SAAA,EAAW,QAAA;EACX,MAAA;AAAA;AAAA,UAGe,qBAAA;EACf,IAAA;AAAA;AAAA,KAGU,aAAA,GAAgB,kBAAA,GAAqB,qBAAA;AAAA,UAEhC,sBAAA;EACf,IAAA;EACA,EAAA;EACA,KAAA;EACA,OAAA;EACA,KAAA;AAAA;AAAA,UAGe,kBAAA;EACf,IAAA;EACA,EAAA;AAAA;AAAA,UAGe,mBAAA;EACf,IAAA;EACA,EAAA;EACA,OAAA;AAAA;AAAA,KAGU,cAAA,GAAiB,sBAAA,GAAyB,kBAAA,GAAqB,mBAAA"}
|
package/dist/retriv/worker.mjs
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import "../_chunks/chunk.mjs";
|
|
2
|
+
import "../_chunks/config.mjs";
|
|
3
|
+
import "../_chunks/storage.mjs";
|
|
4
|
+
import { t as cachedEmbeddings } from "../_chunks/embedding-cache.mjs";
|
|
1
5
|
import { createRetriv } from "retriv";
|
|
2
6
|
import { autoChunker } from "retriv/chunkers/auto";
|
|
3
7
|
import sqlite from "retriv/db/sqlite";
|
|
@@ -23,7 +27,7 @@ if (parentPort) parentPort.on("message", async (msg) => {
|
|
|
23
27
|
const db = await createRetriv({
|
|
24
28
|
driver: sqlite({
|
|
25
29
|
path: config.dbPath,
|
|
26
|
-
embeddings: transformersJs()
|
|
30
|
+
embeddings: cachedEmbeddings(transformersJs())
|
|
27
31
|
}),
|
|
28
32
|
chunking: autoChunker()
|
|
29
33
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.mjs","names":[],"sources":["../../src/retriv/worker.ts"],"sourcesContent":["import type { IndexConfig, Document as RetrivDocument } from './types'\nimport { parentPort } from 'node:worker_threads'\nimport { createRetriv } from 'retriv'\nimport { autoChunker } from 'retriv/chunkers/auto'\nimport sqlite from 'retriv/db/sqlite'\nimport { transformersJs } from 'retriv/embeddings/transformers-js'\n\nexport interface WorkerIndexMessage {\n type: 'index'\n id: number\n documents: RetrivDocument[]\n dbPath: string\n}\n\nexport interface WorkerShutdownMessage {\n type: 'shutdown'\n}\n\nexport type WorkerMessage = WorkerIndexMessage | WorkerShutdownMessage\n\nexport interface WorkerProgressResponse {\n type: 'progress'\n id: number\n phase: string\n current: number\n total: number\n}\n\nexport interface WorkerDoneResponse {\n type: 'done'\n id: number\n}\n\nexport interface WorkerErrorResponse {\n type: 'error'\n id: number\n message: string\n}\n\nexport type WorkerResponse = WorkerProgressResponse | WorkerDoneResponse | WorkerErrorResponse\n\nif (parentPort) {\n parentPort.on('message', async (msg: WorkerMessage) => {\n if (msg.type === 'shutdown') {\n process.exit(0)\n }\n\n if (msg.type === 'index') {\n const { id, documents, dbPath } = msg\n\n try {\n const config: IndexConfig = {\n dbPath,\n onProgress: ({ phase, current, total }) => {\n parentPort!.postMessage({ type: 'progress', id, phase, current, total } satisfies WorkerProgressResponse)\n },\n }\n\n const db = await createRetriv({\n driver: sqlite({\n path: config.dbPath,\n embeddings: transformersJs(),\n }),\n chunking: autoChunker(),\n })\n\n await db.index(documents, { onProgress: config.onProgress })\n await db.close?.()\n\n parentPort!.postMessage({ type: 'done', id } satisfies WorkerDoneResponse)\n }\n catch (err) {\n parentPort!.postMessage({\n type: 'error',\n id,\n message: err instanceof Error ? err.message : String(err),\n } satisfies WorkerErrorResponse)\n }\n }\n })\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"worker.mjs","names":[],"sources":["../../src/retriv/worker.ts"],"sourcesContent":["import type { IndexConfig, Document as RetrivDocument } from './types'\nimport { parentPort } from 'node:worker_threads'\nimport { createRetriv } from 'retriv'\nimport { autoChunker } from 'retriv/chunkers/auto'\nimport sqlite from 'retriv/db/sqlite'\nimport { transformersJs } from 'retriv/embeddings/transformers-js'\nimport { cachedEmbeddings } from './embedding-cache'\n\nexport interface WorkerIndexMessage {\n type: 'index'\n id: number\n documents: RetrivDocument[]\n dbPath: string\n}\n\nexport interface WorkerShutdownMessage {\n type: 'shutdown'\n}\n\nexport type WorkerMessage = WorkerIndexMessage | WorkerShutdownMessage\n\nexport interface WorkerProgressResponse {\n type: 'progress'\n id: number\n phase: string\n current: number\n total: number\n}\n\nexport interface WorkerDoneResponse {\n type: 'done'\n id: number\n}\n\nexport interface WorkerErrorResponse {\n type: 'error'\n id: number\n message: string\n}\n\nexport type WorkerResponse = WorkerProgressResponse | WorkerDoneResponse | WorkerErrorResponse\n\nif (parentPort) {\n parentPort.on('message', async (msg: WorkerMessage) => {\n if (msg.type === 'shutdown') {\n process.exit(0)\n }\n\n if (msg.type === 'index') {\n const { id, documents, dbPath } = msg\n\n try {\n const config: IndexConfig = {\n dbPath,\n onProgress: ({ phase, current, total }) => {\n parentPort!.postMessage({ type: 'progress', id, phase, current, total } satisfies WorkerProgressResponse)\n },\n }\n\n const db = await createRetriv({\n driver: sqlite({\n path: config.dbPath,\n embeddings: cachedEmbeddings(transformersJs()),\n }),\n chunking: autoChunker(),\n })\n\n await db.index(documents, { onProgress: config.onProgress })\n await db.close?.()\n\n parentPort!.postMessage({ type: 'done', id } satisfies WorkerDoneResponse)\n }\n catch (err) {\n parentPort!.postMessage({\n type: 'error',\n id,\n message: err instanceof Error ? err.message : String(err),\n } satisfies WorkerErrorResponse)\n }\n }\n })\n}\n"],"mappings":";;;;;;;;;AA0CA,IAAI,WACF,YAAW,GAAG,WAAW,OAAO,QAAuB;AACrD,KAAI,IAAI,SAAS,WACf,SAAQ,KAAK,EAAE;AAGjB,KAAI,IAAI,SAAS,SAAS;EACxB,MAAM,EAAE,IAAI,WAAW,WAAW;AAElC,MAAI;GACF,MAAM,SAAsB;IAC1B;IACA,aAAa,EAAE,OAAO,SAAS,YAAY;AACzC,gBAAY,YAAY;MAAE,MAAM;MAAY;MAAI;MAAO;MAAS;MAAO,CAAkC;;IAE5G;GAED,MAAM,KAAK,MAAM,aAAa;IAC5B,QAAQ,OAAO;KACb,MAAM,OAAO;KACb,YAAY,iBAAiB,gBAAgB,CAAA;KAC9C,CAAC;IACF,UAAU,aAAA;IACX,CAAC;AAEF,SAAM,GAAG,MAAM,WAAW,EAAE,YAAY,OAAO,YAAY,CAAC;AAC5D,SAAM,GAAG,SAAS;AAElB,cAAY,YAAY;IAAE,MAAM;IAAQ;IAAI,CAA8B;WAErE,KAAK;AACV,cAAY,YAAY;IACtB,MAAM;IACN;IACA,SAAS,eAAe,QAAQ,IAAI,UAAU,OAAO,IAAA;IACtD,CAA+B;;;EAGpC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "skilld",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.7.0",
|
|
5
5
|
"description": "Generate AI agent skills from npm package documentation",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "Harlan Wilton",
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
"oxc-parser": "^0.112.0",
|
|
56
56
|
"p-limit": "^7.3.0",
|
|
57
57
|
"pathe": "^2.0.3",
|
|
58
|
-
"retriv": "^0.
|
|
58
|
+
"retriv": "^0.10.0",
|
|
59
59
|
"sqlite-vec": "^0.1.6",
|
|
60
60
|
"typescript": "^5.9.3",
|
|
61
61
|
"unagent": "^0.0.7"
|