@yuihub/server 1.0.0-beta.4
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/dist/api/text-process.d.ts +2 -0
- package/dist/api/text-process.d.ts.map +1 -0
- package/dist/api/text-process.js +48 -0
- package/dist/api/text-process.js.map +1 -0
- package/dist/auth.d.ts +30 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +71 -0
- package/dist/auth.js.map +1 -0
- package/dist/cli/setup.d.ts +2 -0
- package/dist/cli/setup.d.ts.map +1 -0
- package/dist/cli/setup.js +120 -0
- package/dist/cli/setup.js.map +1 -0
- package/dist/config/schema.d.ts +334 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +45 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/config/service.d.ts +12 -0
- package/dist/config/service.d.ts.map +1 -0
- package/dist/config/service.js +81 -0
- package/dist/config/service.js.map +1 -0
- package/dist/engine/agent/context.d.ts +35 -0
- package/dist/engine/agent/context.d.ts.map +1 -0
- package/dist/engine/agent/context.js +72 -0
- package/dist/engine/agent/context.js.map +1 -0
- package/dist/engine/agent/core.d.ts +19 -0
- package/dist/engine/agent/core.d.ts.map +1 -0
- package/dist/engine/agent/core.js +67 -0
- package/dist/engine/agent/core.js.map +1 -0
- package/dist/engine/agent/live-context.d.ts +8 -0
- package/dist/engine/agent/live-context.d.ts.map +1 -0
- package/dist/engine/agent/live-context.js +19 -0
- package/dist/engine/agent/live-context.js.map +1 -0
- package/dist/engine/agent/tools/fs.d.ts +16 -0
- package/dist/engine/agent/tools/fs.d.ts.map +1 -0
- package/dist/engine/agent/tools/fs.js +78 -0
- package/dist/engine/agent/tools/fs.js.map +1 -0
- package/dist/engine/agent/tools/memory.d.ts +18 -0
- package/dist/engine/agent/tools/memory.d.ts.map +1 -0
- package/dist/engine/agent/tools/memory.js +51 -0
- package/dist/engine/agent/tools/memory.js.map +1 -0
- package/dist/engine/ai/local-genai-service.d.ts +22 -0
- package/dist/engine/ai/local-genai-service.d.ts.map +1 -0
- package/dist/engine/ai/local-genai-service.js +158 -0
- package/dist/engine/ai/local-genai-service.js.map +1 -0
- package/dist/engine/ai/registry.d.ts +16 -0
- package/dist/engine/ai/registry.d.ts.map +1 -0
- package/dist/engine/ai/registry.js +78 -0
- package/dist/engine/ai/registry.js.map +1 -0
- package/dist/engine/ai/tools.d.ts +7 -0
- package/dist/engine/ai/tools.d.ts.map +1 -0
- package/dist/engine/ai/tools.js +2 -0
- package/dist/engine/ai/tools.js.map +1 -0
- package/dist/engine/ai/types.d.ts +21 -0
- package/dist/engine/ai/types.d.ts.map +1 -0
- package/dist/engine/ai/types.js +2 -0
- package/dist/engine/ai/types.js.map +1 -0
- package/dist/engine/ai/vertex-genai-service.d.ts +13 -0
- package/dist/engine/ai/vertex-genai-service.d.ts.map +1 -0
- package/dist/engine/ai/vertex-genai-service.js +93 -0
- package/dist/engine/ai/vertex-genai-service.js.map +1 -0
- package/dist/engine/chunker.d.ts +19 -0
- package/dist/engine/chunker.d.ts.map +1 -0
- package/dist/engine/chunker.js +79 -0
- package/dist/engine/chunker.js.map +1 -0
- package/dist/engine/composite-vector-store.d.ts +21 -0
- package/dist/engine/composite-vector-store.d.ts.map +1 -0
- package/dist/engine/composite-vector-store.js +69 -0
- package/dist/engine/composite-vector-store.js.map +1 -0
- package/dist/engine/embeddings/local-service.d.ts +10 -0
- package/dist/engine/embeddings/local-service.d.ts.map +1 -0
- package/dist/engine/embeddings/local-service.js +37 -0
- package/dist/engine/embeddings/local-service.js.map +1 -0
- package/dist/engine/embeddings/types.d.ts +10 -0
- package/dist/engine/embeddings/types.d.ts.map +1 -0
- package/dist/engine/embeddings/types.js +2 -0
- package/dist/engine/embeddings/types.js.map +1 -0
- package/dist/engine/embeddings/vertex-service.d.ts +11 -0
- package/dist/engine/embeddings/vertex-service.d.ts.map +1 -0
- package/dist/engine/embeddings/vertex-service.js +45 -0
- package/dist/engine/embeddings/vertex-service.js.map +1 -0
- package/dist/engine/indexer.d.ts +12 -0
- package/dist/engine/indexer.d.ts.map +1 -0
- package/dist/engine/indexer.js +74 -0
- package/dist/engine/indexer.js.map +1 -0
- package/dist/engine/lock.d.ts +24 -0
- package/dist/engine/lock.d.ts.map +1 -0
- package/dist/engine/lock.js +58 -0
- package/dist/engine/lock.js.map +1 -0
- package/dist/engine/schema.d.ts +19 -0
- package/dist/engine/schema.d.ts.map +1 -0
- package/dist/engine/schema.js +18 -0
- package/dist/engine/schema.js.map +1 -0
- package/dist/engine/vector-store-types.d.ts +24 -0
- package/dist/engine/vector-store-types.d.ts.map +1 -0
- package/dist/engine/vector-store-types.js +2 -0
- package/dist/engine/vector-store-types.js.map +1 -0
- package/dist/engine/vector-store.d.ts +21 -0
- package/dist/engine/vector-store.d.ts.map +1 -0
- package/dist/engine/vector-store.js +105 -0
- package/dist/engine/vector-store.js.map +1 -0
- package/dist/engine/watcher.d.ts +16 -0
- package/dist/engine/watcher.d.ts.map +1 -0
- package/dist/engine/watcher.js +94 -0
- package/dist/engine/watcher.js.map +1 -0
- package/dist/server.d.ts +2 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +360 -0
- package/dist/server.js.map +1 -0
- package/dist/sync/github-provider.d.ts +20 -0
- package/dist/sync/github-provider.d.ts.map +1 -0
- package/dist/sync/github-provider.js +80 -0
- package/dist/sync/github-provider.js.map +1 -0
- package/dist/sync/scheduler.d.ts +18 -0
- package/dist/sync/scheduler.d.ts.map +1 -0
- package/dist/sync/scheduler.js +67 -0
- package/dist/sync/scheduler.js.map +1 -0
- package/package.json +78 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vector-store.js","sourceRoot":"","sources":["../../src/engine/vector-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Indexer } from './indexer.js';
|
|
2
|
+
export declare class SafeWatcher {
|
|
3
|
+
private watcher;
|
|
4
|
+
private indexer;
|
|
5
|
+
private debouncedHandlers;
|
|
6
|
+
constructor(indexer: Indexer);
|
|
7
|
+
start(paths: string | string[]): void;
|
|
8
|
+
private callbacks;
|
|
9
|
+
onActivity(cb: (path: string, type: 'change' | 'add' | 'unlink') => void): void;
|
|
10
|
+
private handleFileDelete;
|
|
11
|
+
private handleFileChange;
|
|
12
|
+
scan(dir: string): Promise<void>;
|
|
13
|
+
private getFiles;
|
|
14
|
+
close(): Promise<void>;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=watcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../../src/engine/watcher.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,iBAAiB,CAA4D;gBAEzE,OAAO,EAAE,OAAO;IAK5B,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAgB9B,OAAO,CAAC,SAAS,CAAqE;IAEtF,UAAU,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,KAAK,GAAG,QAAQ,KAAK,IAAI;IAIxE,OAAO,CAAC,gBAAgB;IAexB,OAAO,CAAC,gBAAgB;IAqBlB,IAAI,CAAC,GAAG,EAAE,MAAM;YAqBR,QAAQ;IAShB,KAAK;CAKZ"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { watch } from 'chokidar';
|
|
2
|
+
import lodash from 'lodash';
|
|
3
|
+
export class SafeWatcher {
|
|
4
|
+
watcher = null;
|
|
5
|
+
indexer;
|
|
6
|
+
debouncedHandlers;
|
|
7
|
+
constructor(indexer) {
|
|
8
|
+
this.indexer = indexer;
|
|
9
|
+
this.debouncedHandlers = new Map();
|
|
10
|
+
}
|
|
11
|
+
start(paths) {
|
|
12
|
+
this.watcher = watch(paths, {
|
|
13
|
+
ignored: /(^|[\/\\])\../, // ignore dotfiles
|
|
14
|
+
persistent: true,
|
|
15
|
+
ignoreInitial: true // Don't queue initial scan to avoid storm? Or maybe allow it?
|
|
16
|
+
// For V1, maybe allow initial scan to build index. But let's keep it safe.
|
|
17
|
+
});
|
|
18
|
+
this.watcher
|
|
19
|
+
.on('add', this.handleFileChange.bind(this))
|
|
20
|
+
.on('change', this.handleFileChange.bind(this))
|
|
21
|
+
.on('unlink', this.handleFileDelete.bind(this));
|
|
22
|
+
console.log(`[Watcher] Started watching: ${paths}`);
|
|
23
|
+
}
|
|
24
|
+
callbacks = [];
|
|
25
|
+
onActivity(cb) {
|
|
26
|
+
this.callbacks.push(cb);
|
|
27
|
+
}
|
|
28
|
+
handleFileDelete(filePath) {
|
|
29
|
+
console.log(`[Watcher] File deleted: ${filePath}`);
|
|
30
|
+
this.callbacks.forEach(cb => cb(filePath, 'unlink'));
|
|
31
|
+
// Cancel any pending debounced handler for this file
|
|
32
|
+
const handler = this.debouncedHandlers.get(filePath);
|
|
33
|
+
if (handler) {
|
|
34
|
+
handler.cancel();
|
|
35
|
+
this.debouncedHandlers.delete(filePath);
|
|
36
|
+
}
|
|
37
|
+
// Enqueue delete job
|
|
38
|
+
this.indexer.enqueueDelete(filePath);
|
|
39
|
+
}
|
|
40
|
+
handleFileChange(filePath) {
|
|
41
|
+
// Notify listeners immediately (or debounced?)
|
|
42
|
+
// Live Context prefers immediate or distinct?
|
|
43
|
+
// Let's use debounced for indexing, but maybe immediate for "activity log"?
|
|
44
|
+
// The current logic debounces indexing.
|
|
45
|
+
// Let's notify listeners here (immediate activity).
|
|
46
|
+
this.callbacks.forEach(cb => cb(filePath, 'change'));
|
|
47
|
+
if (!this.debouncedHandlers.has(filePath)) {
|
|
48
|
+
// Create debounced handler per file
|
|
49
|
+
const handler = lodash.debounce((path) => {
|
|
50
|
+
console.log(`[Watcher] Change detected (stable): ${path}`);
|
|
51
|
+
this.indexer.enqueue(path);
|
|
52
|
+
}, 2000); // 2000ms debounce
|
|
53
|
+
this.debouncedHandlers.set(filePath, handler);
|
|
54
|
+
}
|
|
55
|
+
const handler = this.debouncedHandlers.get(filePath);
|
|
56
|
+
if (handler)
|
|
57
|
+
handler(filePath);
|
|
58
|
+
}
|
|
59
|
+
async scan(dir) {
|
|
60
|
+
console.log(`[Watcher] Scanning directory: ${dir}`);
|
|
61
|
+
try {
|
|
62
|
+
// Node 20+ supports recursive readdir. Assume Node 18+ or use manual walk?
|
|
63
|
+
// Let's use fs-extra readdir or custom walk if needed.
|
|
64
|
+
// fs.readdir(dir, { recursive: true }) is Node 20.
|
|
65
|
+
// Safe fallback: use chokidar instance if ready? No.
|
|
66
|
+
// Simple recursive walk:
|
|
67
|
+
const files = await this.getFiles(dir);
|
|
68
|
+
console.log(`[Watcher] Found ${files.length} files. Enqueuing...`);
|
|
69
|
+
for (const file of files) {
|
|
70
|
+
if (file.endsWith('.md')) {
|
|
71
|
+
this.indexer.enqueue(file);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
catch (e) {
|
|
76
|
+
console.error('[Watcher] Scan failed:', e);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
async getFiles(dir) {
|
|
80
|
+
const dirents = await import('fs').then(r => r.promises.readdir(dir, { withFileTypes: true }));
|
|
81
|
+
const files = await Promise.all(dirents.map((dirent) => {
|
|
82
|
+
const res = import('path').then(p => p.join(dir, dirent.name));
|
|
83
|
+
return dirent.isDirectory() ? res.then(p => this.getFiles(p)) : res;
|
|
84
|
+
}));
|
|
85
|
+
return Array.prototype.concat(...files);
|
|
86
|
+
}
|
|
87
|
+
async close() {
|
|
88
|
+
if (this.watcher)
|
|
89
|
+
await this.watcher.close();
|
|
90
|
+
this.debouncedHandlers.forEach(h => h.cancel());
|
|
91
|
+
this.debouncedHandlers.clear();
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=watcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../src/engine/watcher.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":""}
|
package/dist/server.js
ADDED
|
@@ -0,0 +1,360 @@
|
|
|
1
|
+
import Fastify from 'fastify';
|
|
2
|
+
import { serializerCompiler, validatorCompiler } from 'fastify-type-provider-zod';
|
|
3
|
+
import rateLimit from '@fastify/rate-limit';
|
|
4
|
+
import bearerAuth from '@fastify/bearer-auth';
|
|
5
|
+
import z from 'zod';
|
|
6
|
+
import { LanceVectorStore } from './engine/vector-store.js';
|
|
7
|
+
import { CompositeVectorStore } from './engine/composite-vector-store.js';
|
|
8
|
+
import { Indexer } from './engine/indexer.js';
|
|
9
|
+
import { SafeWatcher } from './engine/watcher.js';
|
|
10
|
+
import { withWriteLock, withReadLock, withRetry } from './engine/lock.js';
|
|
11
|
+
import { extractTerms } from './api/text-process.js';
|
|
12
|
+
import { GitHubSyncProvider } from './sync/github-provider.js';
|
|
13
|
+
import { SyncScheduler } from './sync/scheduler.js';
|
|
14
|
+
import { ConfigService } from './config/service.js';
|
|
15
|
+
import { AppConfigUpdateSchema } from './config/schema.js';
|
|
16
|
+
import { AIProviderRegistry } from './engine/ai/registry.js';
|
|
17
|
+
import path from 'path';
|
|
18
|
+
import fs from 'fs-extra';
|
|
19
|
+
import { randomUUID } from 'crypto';
|
|
20
|
+
import os from 'os';
|
|
21
|
+
import { ulid } from 'ulid';
|
|
22
|
+
import { initAuth } from './auth.js';
|
|
23
|
+
const server = Fastify({
|
|
24
|
+
logger: true
|
|
25
|
+
}).withTypeProvider();
|
|
26
|
+
// Zod Type Provider Setup
|
|
27
|
+
server.setValidatorCompiler(validatorCompiler);
|
|
28
|
+
server.setSerializerCompiler(serializerCompiler);
|
|
29
|
+
// --- Config & Engine Setup ---
|
|
30
|
+
const workspaceRoot = path.resolve(process.cwd(), '../../../');
|
|
31
|
+
const DEFAULT_DATA_DIR = path.join(os.homedir(), '.yuihub');
|
|
32
|
+
const DATA_DIR = process.env.DATA_DIR || DEFAULT_DATA_DIR;
|
|
33
|
+
const STORAGE_VERSION = '1.0.0-rc1';
|
|
34
|
+
// 1. Initialize Config Service
|
|
35
|
+
const configService = new ConfigService(DATA_DIR);
|
|
36
|
+
let config = configService.get();
|
|
37
|
+
// 2. Initialize AI Registry & Services
|
|
38
|
+
const aiRegistry = new AIProviderRegistry(config.ai);
|
|
39
|
+
// Initialize Composite Vector Store (Dual Embedding)
|
|
40
|
+
const embeddingServices = await aiRegistry.getAllEmbeddingServices();
|
|
41
|
+
if (embeddingServices.length === 0) {
|
|
42
|
+
throw new Error('No embedding services configured or initialized.');
|
|
43
|
+
}
|
|
44
|
+
const stores = embeddingServices.map(({ id, service }) => {
|
|
45
|
+
// Store name = provider id (e.g. 'local', 'vertex')
|
|
46
|
+
// Table name defaults to `entries_${id}` inside LanceVectorStore
|
|
47
|
+
return new LanceVectorStore(DATA_DIR, service, id);
|
|
48
|
+
});
|
|
49
|
+
console.log(`[AI] Initialized ${stores.length} Vector Stores: ${stores.map(s => s.name).join(', ')}`);
|
|
50
|
+
const vectorStore = new CompositeVectorStore(stores);
|
|
51
|
+
await vectorStore.init(); // Init all underlying stores
|
|
52
|
+
const indexer = new Indexer(vectorStore);
|
|
53
|
+
const watcher = new SafeWatcher(indexer);
|
|
54
|
+
// 3. Sync Setup
|
|
55
|
+
const syncProvider = new GitHubSyncProvider(DATA_DIR);
|
|
56
|
+
const syncScheduler = new SyncScheduler(syncProvider, config.sync.interval);
|
|
57
|
+
// --- Security (File-based Handshake) ---
|
|
58
|
+
const authData = await initAuth(DATA_DIR);
|
|
59
|
+
const AUTH_TOKEN = process.env.YUIHUB_TOKEN || authData.token;
|
|
60
|
+
console.log(`[Auth] Token initialized (file-based handshake)`);
|
|
61
|
+
server.register(rateLimit, {
|
|
62
|
+
max: 100,
|
|
63
|
+
timeWindow: '1 minute'
|
|
64
|
+
});
|
|
65
|
+
server.register(bearerAuth, {
|
|
66
|
+
keys: new Set([AUTH_TOKEN]),
|
|
67
|
+
errorResponse: (err) => {
|
|
68
|
+
return { error: 'Unauthorized', message: err.message };
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
// --- API Schema ---
|
|
72
|
+
const SaveBodySchema = z.object({
|
|
73
|
+
entries: z.array(z.object({
|
|
74
|
+
id: z.string().optional(),
|
|
75
|
+
text: z.string(),
|
|
76
|
+
mode: z.enum(['private', 'public']),
|
|
77
|
+
tags: z.array(z.string()).optional(),
|
|
78
|
+
session_id: z.string().optional(),
|
|
79
|
+
source: z.string().optional()
|
|
80
|
+
}))
|
|
81
|
+
});
|
|
82
|
+
const SearchQuerySchema = z.object({
|
|
83
|
+
q: z.string(),
|
|
84
|
+
limit: z.coerce.number().optional().default(10),
|
|
85
|
+
tag: z.string().optional(),
|
|
86
|
+
session: z.string().optional()
|
|
87
|
+
});
|
|
88
|
+
const ExportQuerySchema = z.object({
|
|
89
|
+
q: z.string().optional(), // Intent
|
|
90
|
+
session: z.string().optional()
|
|
91
|
+
});
|
|
92
|
+
const ConfigUpdateSchema = AppConfigUpdateSchema;
|
|
93
|
+
// --- Lifecycle ---
|
|
94
|
+
server.addHook('onReady', async () => {
|
|
95
|
+
server.log.info({ config: configService.get() }, 'Initializing Engine with Config...');
|
|
96
|
+
// Storage Version Check
|
|
97
|
+
const versionPath = path.join(DATA_DIR, 'VERSION');
|
|
98
|
+
if (config.sync.enabled || await fs.pathExists(versionPath)) {
|
|
99
|
+
// If sync enabled or version file exists, check it.
|
|
100
|
+
if (await fs.pathExists(versionPath)) {
|
|
101
|
+
const version = (await fs.readFile(versionPath, 'utf-8')).trim();
|
|
102
|
+
if (version !== STORAGE_VERSION) {
|
|
103
|
+
server.log.warn(`⚠️ Storage Version Mismatch! Expected ${STORAGE_VERSION}, found ${version}. Compatibility issues may occur.`);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
// If no version file but data exists... write it? or warn?
|
|
108
|
+
// Write it for now to migrate.
|
|
109
|
+
await fs.writeFile(versionPath, STORAGE_VERSION);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
await vectorStore.init();
|
|
113
|
+
server.log.info('Engine initialized.');
|
|
114
|
+
// Start Watcher
|
|
115
|
+
const notesDir = path.join(DATA_DIR, 'notes');
|
|
116
|
+
await fs.ensureDir(notesDir);
|
|
117
|
+
watcher.start(notesDir);
|
|
118
|
+
// Initialize & Start Sync if Enabled
|
|
119
|
+
if (config.sync.enabled) {
|
|
120
|
+
server.log.info('Initializing Sync...');
|
|
121
|
+
await syncProvider.init(config.sync.remoteUrl);
|
|
122
|
+
syncScheduler.start();
|
|
123
|
+
}
|
|
124
|
+
// Bootstrap Indexing: If DB empty but files exist, scan!
|
|
125
|
+
if (await vectorStore.isEmpty()) {
|
|
126
|
+
const hasFiles = await fs.pathExists(notesDir) && (await fs.readdir(notesDir)).length > 0;
|
|
127
|
+
if (hasFiles) {
|
|
128
|
+
server.log.info('🚀 Empty Index detected with existing notes. Starting Initial Scan...');
|
|
129
|
+
// Don't await scan fully to allow server start? Or await?
|
|
130
|
+
// Await is safer to ensure index is ready.
|
|
131
|
+
await watcher.scan(notesDir);
|
|
132
|
+
server.log.info('✅ Initial Scan queued.');
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
server.addHook('onClose', async () => {
|
|
137
|
+
server.log.info('Shutting down...');
|
|
138
|
+
await watcher.close();
|
|
139
|
+
syncScheduler.stop();
|
|
140
|
+
});
|
|
141
|
+
// --- Endpoints ---
|
|
142
|
+
server.get('/health', async () => {
|
|
143
|
+
return { status: 'ok', version: 'v1' };
|
|
144
|
+
});
|
|
145
|
+
// System API: Get Config
|
|
146
|
+
server.get('/system/config', async () => {
|
|
147
|
+
return { ok: true, config: configService.get() };
|
|
148
|
+
});
|
|
149
|
+
// System API: Update Config (Hot Reload-ish)
|
|
150
|
+
server.patch('/system/config', {
|
|
151
|
+
schema: {
|
|
152
|
+
body: ConfigUpdateSchema
|
|
153
|
+
}
|
|
154
|
+
}, async (req, reply) => {
|
|
155
|
+
try {
|
|
156
|
+
const body = req.body;
|
|
157
|
+
const newConfig = await configService.update(body);
|
|
158
|
+
config = newConfig; // Update local ref
|
|
159
|
+
// Apply specific changes dynamically
|
|
160
|
+
if (body.sync) {
|
|
161
|
+
if (newConfig.sync.enabled && !syncScheduler['isSchedulerActive']) {
|
|
162
|
+
// If enabled and not running, start
|
|
163
|
+
// Re-init provider if remote url changed?
|
|
164
|
+
if (body.sync.remoteUrl)
|
|
165
|
+
await syncProvider.init(newConfig.sync.remoteUrl);
|
|
166
|
+
syncScheduler.start();
|
|
167
|
+
}
|
|
168
|
+
else if (!newConfig.sync.enabled) {
|
|
169
|
+
syncScheduler.stop();
|
|
170
|
+
}
|
|
171
|
+
// Update interval if changed
|
|
172
|
+
if (body.sync.interval) {
|
|
173
|
+
syncScheduler.updateInterval(newConfig.sync.interval);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
// Note: Deep reconfiguration (e.g. port change, model change) might require restart.
|
|
177
|
+
// For now we just return the new config.
|
|
178
|
+
return { ok: true, config: newConfig, message: 'Config updated. Some changes may require restart.' };
|
|
179
|
+
}
|
|
180
|
+
catch (err) {
|
|
181
|
+
server.log.error(err);
|
|
182
|
+
reply.code(500);
|
|
183
|
+
return { ok: false, error: err.message };
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
// 1. SAVE Endpoint
|
|
187
|
+
server.post('/save', {
|
|
188
|
+
schema: {
|
|
189
|
+
body: SaveBodySchema
|
|
190
|
+
}
|
|
191
|
+
}, async (req, reply) => {
|
|
192
|
+
const { entries } = req.body;
|
|
193
|
+
// Write Lock with Retry for LanceDB safety
|
|
194
|
+
try {
|
|
195
|
+
await withWriteLock(() => withRetry(async () => {
|
|
196
|
+
// Process each entry
|
|
197
|
+
for (const entry of entries) {
|
|
198
|
+
// Enhanced Logic: Japanese Terms Extraction
|
|
199
|
+
const extractedTerms = extractTerms(entry.text);
|
|
200
|
+
const tags = new Set([...(entry.tags || []), ...extractedTerms]);
|
|
201
|
+
const finalEntry = {
|
|
202
|
+
...entry,
|
|
203
|
+
id: entry.id || randomUUID(), // Generate ID if atomic entry
|
|
204
|
+
tags: Array.from(tags),
|
|
205
|
+
date: new Date().toISOString()
|
|
206
|
+
};
|
|
207
|
+
// Physical Save (Markdown)
|
|
208
|
+
const filename = finalEntry.session_id ? `${finalEntry.session_id}.md` : `entry-${finalEntry.id}.md`;
|
|
209
|
+
const filePath = path.join(DATA_DIR, 'notes', filename);
|
|
210
|
+
const fileContent = `\n\n---\nid: ${finalEntry.id}\ndate: ${finalEntry.date}\ntags: [${finalEntry.tags.join(', ')}]\n---\n\n${finalEntry.text}`;
|
|
211
|
+
await fs.appendFile(filePath, fileContent);
|
|
212
|
+
}
|
|
213
|
+
}));
|
|
214
|
+
// Lock released, Watcher picks up changes.
|
|
215
|
+
return { ok: true, count: entries.length };
|
|
216
|
+
}
|
|
217
|
+
catch (err) {
|
|
218
|
+
server.log.error(err);
|
|
219
|
+
reply.code(500);
|
|
220
|
+
return { ok: false, error: 'Save failed' };
|
|
221
|
+
}
|
|
222
|
+
});
|
|
223
|
+
// 2. SEARCH Endpoint (Read Lock)
|
|
224
|
+
server.get('/search', {
|
|
225
|
+
schema: {
|
|
226
|
+
querystring: SearchQuerySchema
|
|
227
|
+
}
|
|
228
|
+
}, async (req, reply) => {
|
|
229
|
+
const { q, limit, tag, session } = req.query;
|
|
230
|
+
const results = await withReadLock(() => vectorStore.search(q, limit, { tag, session }));
|
|
231
|
+
return { ok: true, results };
|
|
232
|
+
});
|
|
233
|
+
// 3. TRIGGER Endpoint (Mock / Private Mode)
|
|
234
|
+
server.post('/trigger', async (req, reply) => {
|
|
235
|
+
// Logic: In Private Mode, we don't send to external agent actually.
|
|
236
|
+
// We just return OK.
|
|
237
|
+
return { ok: true, ref: 'mock-private-ref', status: 'ignored_in_private_mode' };
|
|
238
|
+
});
|
|
239
|
+
// --- MCP Support Endpoints ---
|
|
240
|
+
// 3.1 THREADS/NEW - Create new session
|
|
241
|
+
const ThreadsNewSchema = z.object({
|
|
242
|
+
title: z.string().optional()
|
|
243
|
+
});
|
|
244
|
+
server.post('/threads/new', {
|
|
245
|
+
schema: { body: ThreadsNewSchema }
|
|
246
|
+
}, async (req, reply) => {
|
|
247
|
+
const { title } = req.body;
|
|
248
|
+
const session = {
|
|
249
|
+
id: `th-${ulid()}`,
|
|
250
|
+
title: title || `Session ${new Date().toLocaleDateString()}`,
|
|
251
|
+
created_at: new Date().toISOString()
|
|
252
|
+
};
|
|
253
|
+
return { ok: true, session };
|
|
254
|
+
});
|
|
255
|
+
// 3.2 CHECKPOINTS - Create decision checkpoint
|
|
256
|
+
const CheckpointSchema = z.object({
|
|
257
|
+
session_id: z.string(),
|
|
258
|
+
summary: z.string(),
|
|
259
|
+
intent: z.string(),
|
|
260
|
+
working_memory: z.record(z.unknown()).optional(),
|
|
261
|
+
entry_ids: z.array(z.string()).optional()
|
|
262
|
+
});
|
|
263
|
+
server.post('/checkpoints', {
|
|
264
|
+
schema: { body: CheckpointSchema }
|
|
265
|
+
}, async (req, reply) => {
|
|
266
|
+
const { session_id, summary, intent, working_memory, entry_ids } = req.body;
|
|
267
|
+
const checkpoint = {
|
|
268
|
+
id: `cp-${ulid()}`,
|
|
269
|
+
session_id,
|
|
270
|
+
snapshot: {
|
|
271
|
+
working_memory: JSON.stringify(working_memory || {}),
|
|
272
|
+
decision_rationale: summary
|
|
273
|
+
},
|
|
274
|
+
intent,
|
|
275
|
+
entry_ids: entry_ids || [],
|
|
276
|
+
created_at: new Date().toISOString()
|
|
277
|
+
};
|
|
278
|
+
// Write Lock with Retry for file safety
|
|
279
|
+
await withWriteLock(() => withRetry(async () => {
|
|
280
|
+
const checkpointDir = path.join(DATA_DIR, 'checkpoints');
|
|
281
|
+
await fs.ensureDir(checkpointDir);
|
|
282
|
+
await fs.writeJson(path.join(checkpointDir, `${checkpoint.id}.json`), checkpoint, { spaces: 2 });
|
|
283
|
+
}));
|
|
284
|
+
return { ok: true, checkpoint };
|
|
285
|
+
});
|
|
286
|
+
server.get('/export/context', {
|
|
287
|
+
schema: {
|
|
288
|
+
querystring: ExportQuerySchema
|
|
289
|
+
}
|
|
290
|
+
}, async (req, reply) => {
|
|
291
|
+
const { q, session } = req.query;
|
|
292
|
+
// 1. Retrieve Recent Context
|
|
293
|
+
const longTermResults = q ? await vectorStore.search(q, 5) : [];
|
|
294
|
+
// Construct Context Packet
|
|
295
|
+
const packet = {
|
|
296
|
+
intent: q || 'No specific intent',
|
|
297
|
+
session_id: session,
|
|
298
|
+
working_memory: {
|
|
299
|
+
recent_summary: '...'
|
|
300
|
+
},
|
|
301
|
+
long_term_memory: longTermResults.map(r => ({
|
|
302
|
+
text: r.text,
|
|
303
|
+
relevance: r.score, // Use normalized score from Composite Store
|
|
304
|
+
source_store: r._source_store
|
|
305
|
+
})),
|
|
306
|
+
meta: {
|
|
307
|
+
mode: 'private'
|
|
308
|
+
}
|
|
309
|
+
};
|
|
310
|
+
return { ok: true, packet };
|
|
311
|
+
});
|
|
312
|
+
// 5. AGENT Endpoint
|
|
313
|
+
import { Agent } from './engine/agent/core.js';
|
|
314
|
+
import { LiveContextService } from './engine/agent/live-context.js';
|
|
315
|
+
const liveContextService = new LiveContextService();
|
|
316
|
+
watcher.onActivity((path, type) => liveContextService.addEvent(type, path));
|
|
317
|
+
const AgentPromptSchema = z.object({
|
|
318
|
+
prompt: z.string(),
|
|
319
|
+
context: z.string().optional()
|
|
320
|
+
});
|
|
321
|
+
server.post('/agent', {
|
|
322
|
+
schema: {
|
|
323
|
+
body: AgentPromptSchema
|
|
324
|
+
}
|
|
325
|
+
}, async (req, reply) => {
|
|
326
|
+
const { prompt, context } = req.body;
|
|
327
|
+
try {
|
|
328
|
+
const providerId = config.ai.defaults.agent;
|
|
329
|
+
const genAIService = await aiRegistry.getGenAIService(providerId);
|
|
330
|
+
const agent = new Agent({
|
|
331
|
+
genAI: genAIService,
|
|
332
|
+
rootDir: workspaceRoot,
|
|
333
|
+
dataDir: DATA_DIR
|
|
334
|
+
});
|
|
335
|
+
const fullContext = (context || '') + '\n\n' + liveContextService.getSnapshot();
|
|
336
|
+
const answer = await agent.run(prompt, fullContext);
|
|
337
|
+
return { ok: true, answer };
|
|
338
|
+
}
|
|
339
|
+
catch (err) {
|
|
340
|
+
server.log.error(err);
|
|
341
|
+
reply.code(500);
|
|
342
|
+
return { ok: false, error: err.message };
|
|
343
|
+
}
|
|
344
|
+
});
|
|
345
|
+
const start = async () => {
|
|
346
|
+
try {
|
|
347
|
+
const port = config.server.port;
|
|
348
|
+
const host = config.server.host;
|
|
349
|
+
await server.listen({ port, host });
|
|
350
|
+
console.log(`Server listening on ${host}:${port}`);
|
|
351
|
+
}
|
|
352
|
+
catch (err) {
|
|
353
|
+
server.log.error(err);
|
|
354
|
+
process.exit(1);
|
|
355
|
+
}
|
|
356
|
+
};
|
|
357
|
+
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
358
|
+
start();
|
|
359
|
+
}
|
|
360
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { ISyncProvider } from '@yuihub/core';
|
|
2
|
+
export declare class GitHubSyncProvider implements ISyncProvider {
|
|
3
|
+
readonly name: "github";
|
|
4
|
+
private git;
|
|
5
|
+
private repoPath;
|
|
6
|
+
constructor(repoPath: string);
|
|
7
|
+
init(remoteUrl?: string): Promise<void>;
|
|
8
|
+
/**
|
|
9
|
+
* Exponential Backoff Retry Wrapper for Git Operations
|
|
10
|
+
*/
|
|
11
|
+
private withRetry;
|
|
12
|
+
push(message?: string): Promise<void>;
|
|
13
|
+
pull(): Promise<void>;
|
|
14
|
+
status(): Promise<{
|
|
15
|
+
dirty: boolean;
|
|
16
|
+
ahead: number;
|
|
17
|
+
behind: number;
|
|
18
|
+
}>;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=github-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-provider.d.ts","sourceRoot":"","sources":["../../src/sync/github-provider.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG7C,qBAAa,kBAAmB,YAAW,aAAa;IACtD,QAAQ,CAAC,IAAI,EAAG,QAAQ,CAAU;IAClC,OAAO,CAAC,GAAG,CAAY;IACvB,OAAO,CAAC,QAAQ,CAAS;gBAEb,QAAQ,EAAE,MAAM;IAKtB,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM;IAS7B;;OAEG;YACW,SAAS;IAsBjB,IAAI,CAAC,OAAO,GAAE,MAAkC,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBhE,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IASrB,MAAM;;;;;CAUb"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { simpleGit } from 'simple-git';
|
|
2
|
+
import fs from 'fs-extra';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
export class GitHubSyncProvider {
|
|
5
|
+
name = 'github';
|
|
6
|
+
git;
|
|
7
|
+
repoPath;
|
|
8
|
+
constructor(repoPath) {
|
|
9
|
+
this.repoPath = repoPath;
|
|
10
|
+
this.git = simpleGit(repoPath);
|
|
11
|
+
}
|
|
12
|
+
async init(remoteUrl) {
|
|
13
|
+
if (!await fs.pathExists(path.join(this.repoPath, '.git'))) {
|
|
14
|
+
await this.git.init();
|
|
15
|
+
if (remoteUrl) {
|
|
16
|
+
await this.git.addRemote('origin', remoteUrl);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Exponential Backoff Retry Wrapper for Git Operations
|
|
22
|
+
*/
|
|
23
|
+
async withRetry(operation, retries = 5, baseDelay = 1000) {
|
|
24
|
+
for (let i = 0; i < retries; i++) {
|
|
25
|
+
try {
|
|
26
|
+
return await operation();
|
|
27
|
+
}
|
|
28
|
+
catch (e) {
|
|
29
|
+
const isLockError = e.message?.includes('index.lock') || e.message?.includes('Unable to create');
|
|
30
|
+
if (isLockError && i < retries - 1) {
|
|
31
|
+
const delay = baseDelay * Math.pow(2, i); // 1s, 2s, 4s, 8s, 16s
|
|
32
|
+
console.warn(`[Sync] Git lock detected. Retrying in ${delay}ms... (Attempt ${i + 1}/${retries})`);
|
|
33
|
+
await new Promise(r => setTimeout(r, delay));
|
|
34
|
+
// Attempt to clean stale lock?
|
|
35
|
+
// CAUTION: Removing lock blindly is dangerous, but common in automated environments strictly controlled by one process.
|
|
36
|
+
// Here we are potentially competing with user. Better to just wait.
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
throw e;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
throw new Error('Unreachable');
|
|
43
|
+
}
|
|
44
|
+
async push(message = 'chore: sync from yuihub') {
|
|
45
|
+
await this.withRetry(async () => {
|
|
46
|
+
// Check status first
|
|
47
|
+
const status = await this.git.status();
|
|
48
|
+
if (status.isClean())
|
|
49
|
+
return;
|
|
50
|
+
await this.git.add('.');
|
|
51
|
+
await this.git.commit(message);
|
|
52
|
+
// Check if remote exists before pushing
|
|
53
|
+
const remotes = await this.git.getRemotes();
|
|
54
|
+
if (remotes.some(r => r.name === 'origin')) {
|
|
55
|
+
// Pull with rebase first to avoid non-fast-forward?
|
|
56
|
+
// await this.git.pull('origin', 'main', { '--rebase': 'true' });
|
|
57
|
+
await this.git.push('origin', 'main');
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
async pull() {
|
|
62
|
+
await this.withRetry(async () => {
|
|
63
|
+
const remotes = await this.git.getRemotes();
|
|
64
|
+
if (remotes.some(r => r.name === 'origin')) {
|
|
65
|
+
await this.git.pull('origin', 'main');
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
async status() {
|
|
70
|
+
return this.withRetry(async () => {
|
|
71
|
+
const s = await this.git.status();
|
|
72
|
+
return {
|
|
73
|
+
dirty: !s.isClean(),
|
|
74
|
+
ahead: s.ahead,
|
|
75
|
+
behind: s.behind
|
|
76
|
+
};
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=github-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-provider.js","sourceRoot":"","sources":["../../src/sync/github-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAa,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,MAAM,UAAU,CAAC;AAE1B,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,OAAO,kBAAkB;IACpB,IAAI,GAAG,QAAiB,CAAC;IAC1B,GAAG,CAAY;IACf,QAAQ,CAAS;IAEzB,YAAY,QAAgB;QAC1B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,SAAkB;QAC3B,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;YAC3D,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YACtB,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,SAAS,CAAI,SAA2B,EAAE,OAAO,GAAG,CAAC,EAAE,SAAS,GAAG,IAAI;QACnF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;YACjC,IAAI,CAAC;gBACH,OAAO,MAAM,SAAS,EAAE,CAAC;YAC3B,CAAC;YAAC,OAAO,CAAM,EAAE,CAAC;gBAChB,MAAM,WAAW,GAAG,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,kBAAkB,CAAC,CAAC;gBACjG,IAAI,WAAW,IAAI,CAAC,GAAG,OAAO,GAAG,CAAC,EAAE,CAAC;oBACnC,MAAM,KAAK,GAAG,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,sBAAsB;oBAChE,OAAO,CAAC,IAAI,CAAC,yCAAyC,KAAK,kBAAkB,CAAC,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC;oBAClG,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;oBAE7C,+BAA+B;oBAC/B,wHAAwH;oBACxH,oEAAoE;oBACpE,SAAS;gBACX,CAAC;gBACD,MAAM,CAAC,CAAC;YACV,CAAC;QACH,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,UAAkB,yBAAyB;QACpD,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE;YAC9B,qBAAqB;YACrB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;YACvC,IAAI,MAAM,CAAC,OAAO,EAAE;gBAAE,OAAO;YAE7B,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACxB,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAE/B,wCAAwC;YACxC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;YAC5C,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,EAAE,CAAC;gBACzC,oDAAoD;gBACpD,iEAAiE;gBACjE,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE;YAC9B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;YAC5C,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,EAAE,CAAC;gBAC3C,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YACxC,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,MAAM;QACV,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE;YAC/B,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;YAClC,OAAO;gBACL,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE;gBACnB,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,MAAM,EAAE,CAAC,CAAC,MAAM;aACjB,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ISyncProvider } from '@yuihub/core';
|
|
2
|
+
export declare class SyncScheduler {
|
|
3
|
+
private job;
|
|
4
|
+
private provider;
|
|
5
|
+
private isRunning;
|
|
6
|
+
private isSchedulerActive;
|
|
7
|
+
private cronExpression;
|
|
8
|
+
constructor(provider: ISyncProvider, cronExpression?: string);
|
|
9
|
+
private createJob;
|
|
10
|
+
start(): void;
|
|
11
|
+
stop(): void;
|
|
12
|
+
/**
|
|
13
|
+
* Update the sync interval dynamically (hot reload)
|
|
14
|
+
*/
|
|
15
|
+
updateInterval(newCronExpression: string): void;
|
|
16
|
+
runSync(): Promise<void>;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=scheduler.d.ts.map
|