s3db.js 19.4.13 → 19.4.14
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/dist/s3db-lite.cjs +2 -2
- package/dist/s3db-lite.es.js +2 -2
- package/dist/s3db.cjs +2 -2
- package/dist/s3db.es.js +2 -2
- package/mcp/tools/docs-search.ts +74 -3
- package/package.json +1 -1
package/dist/s3db-lite.cjs
CHANGED
|
@@ -70660,8 +70660,8 @@ class Database extends SafeEventEmitter {
|
|
|
70660
70660
|
})();
|
|
70661
70661
|
this.version = '1';
|
|
70662
70662
|
this.s3dbVersion = (() => {
|
|
70663
|
-
const [ok, , version] = tryFnSync(() => (typeof globalThis['19.4.
|
|
70664
|
-
? globalThis['19.4.
|
|
70663
|
+
const [ok, , version] = tryFnSync(() => (typeof globalThis['19.4.14'] !== 'undefined' && globalThis['19.4.14'] !== '19.4.14'
|
|
70664
|
+
? globalThis['19.4.14']
|
|
70665
70665
|
: 'latest'));
|
|
70666
70666
|
return ok ? version : 'latest';
|
|
70667
70667
|
})();
|
package/dist/s3db-lite.es.js
CHANGED
|
@@ -70637,8 +70637,8 @@ class Database extends SafeEventEmitter {
|
|
|
70637
70637
|
})();
|
|
70638
70638
|
this.version = '1';
|
|
70639
70639
|
this.s3dbVersion = (() => {
|
|
70640
|
-
const [ok, , version] = tryFnSync(() => (typeof globalThis['19.4.
|
|
70641
|
-
? globalThis['19.4.
|
|
70640
|
+
const [ok, , version] = tryFnSync(() => (typeof globalThis['19.4.14'] !== 'undefined' && globalThis['19.4.14'] !== '19.4.14'
|
|
70641
|
+
? globalThis['19.4.14']
|
|
70642
70642
|
: 'latest'));
|
|
70643
70643
|
return ok ? version : 'latest';
|
|
70644
70644
|
})();
|
package/dist/s3db.cjs
CHANGED
|
@@ -20149,8 +20149,8 @@ class Database extends SafeEventEmitter {
|
|
|
20149
20149
|
})();
|
|
20150
20150
|
this.version = '1';
|
|
20151
20151
|
this.s3dbVersion = (() => {
|
|
20152
|
-
const [ok, , version] = tryFnSync(() => (typeof globalThis['19.4.
|
|
20153
|
-
? globalThis['19.4.
|
|
20152
|
+
const [ok, , version] = tryFnSync(() => (typeof globalThis['19.4.14'] !== 'undefined' && globalThis['19.4.14'] !== '19.4.14'
|
|
20153
|
+
? globalThis['19.4.14']
|
|
20154
20154
|
: 'latest'));
|
|
20155
20155
|
return ok ? version : 'latest';
|
|
20156
20156
|
})();
|
package/dist/s3db.es.js
CHANGED
|
@@ -20124,8 +20124,8 @@ class Database extends SafeEventEmitter {
|
|
|
20124
20124
|
})();
|
|
20125
20125
|
this.version = '1';
|
|
20126
20126
|
this.s3dbVersion = (() => {
|
|
20127
|
-
const [ok, , version] = tryFnSync(() => (typeof globalThis['19.4.
|
|
20128
|
-
? globalThis['19.4.
|
|
20127
|
+
const [ok, , version] = tryFnSync(() => (typeof globalThis['19.4.14'] !== 'undefined' && globalThis['19.4.14'] !== '19.4.14'
|
|
20128
|
+
? globalThis['19.4.14']
|
|
20129
20129
|
: 'latest'));
|
|
20130
20130
|
return ok ? version : 'latest';
|
|
20131
20131
|
})();
|
package/mcp/tools/docs-search.ts
CHANGED
|
@@ -3,9 +3,11 @@
|
|
|
3
3
|
* Provides search tools for core docs and plugin docs using Fuse.js.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import { readFileSync, readdirSync, statSync, existsSync } from 'fs';
|
|
7
|
-
import { join, dirname, basename
|
|
6
|
+
import { readFileSync, readdirSync, statSync, existsSync, mkdirSync, rmSync } from 'fs';
|
|
7
|
+
import { join, dirname, basename } from 'path';
|
|
8
8
|
import { fileURLToPath } from 'url';
|
|
9
|
+
import { homedir } from 'os';
|
|
10
|
+
import { execSync } from 'child_process';
|
|
9
11
|
import Fuse from 'fuse.js';
|
|
10
12
|
|
|
11
13
|
import type { S3dbMCPServer } from '../entrypoint.js';
|
|
@@ -14,7 +16,20 @@ import type { S3dbSearchDocsArgs, S3dbListTopicsArgs } from '../types/index.js';
|
|
|
14
16
|
const __filename = fileURLToPath(import.meta.url);
|
|
15
17
|
const __dirname = dirname(__filename);
|
|
16
18
|
const PROJECT_ROOT = join(__dirname, '../../');
|
|
17
|
-
const
|
|
19
|
+
const LOCAL_DOCS_ROOT = join(PROJECT_ROOT, 'docs');
|
|
20
|
+
|
|
21
|
+
const CACHE_DIR = join(homedir(), '.cache', 's3db-mcp');
|
|
22
|
+
const CACHED_DOCS_ROOT = join(CACHE_DIR, 'docs');
|
|
23
|
+
const REPO_URL = 'https://github.com/forattini-dev/s3db.js.git';
|
|
24
|
+
|
|
25
|
+
function getDocsRoot(): string {
|
|
26
|
+
if (existsSync(LOCAL_DOCS_ROOT)) {
|
|
27
|
+
return LOCAL_DOCS_ROOT;
|
|
28
|
+
}
|
|
29
|
+
return CACHED_DOCS_ROOT;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
let DOCS_ROOT = LOCAL_DOCS_ROOT;
|
|
18
33
|
|
|
19
34
|
interface DocEntry {
|
|
20
35
|
id: string;
|
|
@@ -354,7 +369,63 @@ export function createDocsSearchHandlers(server: S3dbMCPServer) {
|
|
|
354
369
|
};
|
|
355
370
|
}
|
|
356
371
|
|
|
372
|
+
async function ensureDocsAvailable(): Promise<boolean> {
|
|
373
|
+
if (existsSync(LOCAL_DOCS_ROOT)) {
|
|
374
|
+
DOCS_ROOT = LOCAL_DOCS_ROOT;
|
|
375
|
+
return true;
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
if (existsSync(CACHED_DOCS_ROOT)) {
|
|
379
|
+
DOCS_ROOT = CACHED_DOCS_ROOT;
|
|
380
|
+
return true;
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
console.error('📚 Docs not found locally. Cloning from GitHub...');
|
|
384
|
+
|
|
385
|
+
try {
|
|
386
|
+
mkdirSync(CACHE_DIR, { recursive: true });
|
|
387
|
+
|
|
388
|
+
const tempDir = join(CACHE_DIR, 'repo-temp');
|
|
389
|
+
|
|
390
|
+
if (existsSync(tempDir)) {
|
|
391
|
+
rmSync(tempDir, { recursive: true, force: true });
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
execSync(
|
|
395
|
+
`git clone --depth 1 --filter=blob:none --sparse "${REPO_URL}" "${tempDir}"`,
|
|
396
|
+
{ stdio: 'pipe' }
|
|
397
|
+
);
|
|
398
|
+
|
|
399
|
+
execSync(
|
|
400
|
+
'git sparse-checkout set docs',
|
|
401
|
+
{ cwd: tempDir, stdio: 'pipe' }
|
|
402
|
+
);
|
|
403
|
+
|
|
404
|
+
const clonedDocs = join(tempDir, 'docs');
|
|
405
|
+
if (existsSync(clonedDocs)) {
|
|
406
|
+
if (existsSync(CACHED_DOCS_ROOT)) {
|
|
407
|
+
rmSync(CACHED_DOCS_ROOT, { recursive: true, force: true });
|
|
408
|
+
}
|
|
409
|
+
execSync(`mv "${clonedDocs}" "${CACHED_DOCS_ROOT}"`, { stdio: 'pipe' });
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
rmSync(tempDir, { recursive: true, force: true });
|
|
413
|
+
|
|
414
|
+
DOCS_ROOT = CACHED_DOCS_ROOT;
|
|
415
|
+
console.error('✅ Docs cloned successfully to', CACHED_DOCS_ROOT);
|
|
416
|
+
return true;
|
|
417
|
+
} catch (err) {
|
|
418
|
+
console.error('⚠️ Failed to clone docs:', (err as Error).message);
|
|
419
|
+
console.error(' Documentation search will be unavailable.');
|
|
420
|
+
return false;
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
|
|
357
424
|
export async function preloadSearch(): Promise<void> {
|
|
425
|
+
const docsAvailable = await ensureDocsAvailable();
|
|
426
|
+
if (!docsAvailable) {
|
|
427
|
+
return;
|
|
428
|
+
}
|
|
358
429
|
loadCoreDocs();
|
|
359
430
|
loadPluginDocs();
|
|
360
431
|
}
|