cmp-standards 2.0.1 → 2.4.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.
Files changed (110) hide show
  1. package/README.md +171 -101
  2. package/dist/cli/index.js +239 -7
  3. package/dist/cli/index.js.map +1 -1
  4. package/dist/dashboard/server.d.ts.map +1 -1
  5. package/dist/dashboard/server.js +203 -39
  6. package/dist/dashboard/server.js.map +1 -1
  7. package/dist/db/cloud.d.ts +174 -0
  8. package/dist/db/cloud.d.ts.map +1 -0
  9. package/dist/db/cloud.js +241 -0
  10. package/dist/db/cloud.js.map +1 -0
  11. package/dist/db/errors.d.ts +76 -0
  12. package/dist/db/errors.d.ts.map +1 -0
  13. package/dist/db/errors.js +135 -0
  14. package/dist/db/errors.js.map +1 -0
  15. package/dist/db/turso-client.d.ts +178 -0
  16. package/dist/db/turso-client.d.ts.map +1 -0
  17. package/dist/db/turso-client.js +455 -0
  18. package/dist/db/turso-client.js.map +1 -0
  19. package/dist/db/upstash-client.d.ts +161 -0
  20. package/dist/db/upstash-client.d.ts.map +1 -0
  21. package/dist/db/upstash-client.js +325 -0
  22. package/dist/db/upstash-client.js.map +1 -0
  23. package/dist/hooks/cloud-post-tool-use.d.ts +30 -0
  24. package/dist/hooks/cloud-post-tool-use.d.ts.map +1 -0
  25. package/dist/hooks/cloud-post-tool-use.js +116 -0
  26. package/dist/hooks/cloud-post-tool-use.js.map +1 -0
  27. package/dist/hooks/cloud-pre-tool-use.d.ts +19 -0
  28. package/dist/hooks/cloud-pre-tool-use.d.ts.map +1 -0
  29. package/dist/hooks/cloud-pre-tool-use.js +149 -0
  30. package/dist/hooks/cloud-pre-tool-use.js.map +1 -0
  31. package/dist/hooks/cloud-session-start.d.ts +20 -0
  32. package/dist/hooks/cloud-session-start.d.ts.map +1 -0
  33. package/dist/hooks/cloud-session-start.js +130 -0
  34. package/dist/hooks/cloud-session-start.js.map +1 -0
  35. package/dist/hooks/index.d.ts +3 -0
  36. package/dist/hooks/index.d.ts.map +1 -1
  37. package/dist/hooks/index.js +5 -0
  38. package/dist/hooks/index.js.map +1 -1
  39. package/dist/hooks/memory-checkpoint.d.ts.map +1 -1
  40. package/dist/hooks/memory-checkpoint.js +12 -20
  41. package/dist/hooks/memory-checkpoint.js.map +1 -1
  42. package/dist/hooks/pre-tool-use.d.ts +2 -8
  43. package/dist/hooks/pre-tool-use.d.ts.map +1 -1
  44. package/dist/hooks/pre-tool-use.js +7 -106
  45. package/dist/hooks/pre-tool-use.js.map +1 -1
  46. package/dist/hooks/session-start.d.ts.map +1 -1
  47. package/dist/hooks/session-start.js +15 -6
  48. package/dist/hooks/session-start.js.map +1 -1
  49. package/dist/index.d.ts +10 -0
  50. package/dist/index.d.ts.map +1 -1
  51. package/dist/index.js +14 -1
  52. package/dist/index.js.map +1 -1
  53. package/dist/mcp/server.d.ts.map +1 -1
  54. package/dist/mcp/server.js +223 -0
  55. package/dist/mcp/server.js.map +1 -1
  56. package/dist/schema/tracking.d.ts +644 -0
  57. package/dist/schema/tracking.d.ts.map +1 -0
  58. package/dist/schema/tracking.js +204 -0
  59. package/dist/schema/tracking.js.map +1 -0
  60. package/dist/services/ProjectScaffold.d.ts.map +1 -1
  61. package/dist/services/ProjectScaffold.js +33 -5
  62. package/dist/services/ProjectScaffold.js.map +1 -1
  63. package/dist/services/TaskTracker.d.ts +1 -1
  64. package/dist/services/TaskTracker.d.ts.map +1 -1
  65. package/dist/services/TaskTracker.js +4 -8
  66. package/dist/services/TaskTracker.js.map +1 -1
  67. package/dist/services/WorkPlanManager.d.ts +1 -1
  68. package/dist/services/WorkPlanManager.d.ts.map +1 -1
  69. package/dist/services/WorkPlanManager.js +8 -14
  70. package/dist/services/WorkPlanManager.js.map +1 -1
  71. package/dist/services/auto-inject.d.ts +1 -0
  72. package/dist/services/auto-inject.d.ts.map +1 -1
  73. package/dist/services/auto-inject.js +12 -17
  74. package/dist/services/auto-inject.js.map +1 -1
  75. package/dist/services/cross-project-sync.d.ts +2 -0
  76. package/dist/services/cross-project-sync.d.ts.map +1 -1
  77. package/dist/services/cross-project-sync.js +26 -21
  78. package/dist/services/cross-project-sync.js.map +1 -1
  79. package/dist/services/memory-consolidation.d.ts.map +1 -1
  80. package/dist/services/memory-consolidation.js +30 -27
  81. package/dist/services/memory-consolidation.js.map +1 -1
  82. package/dist/utils/env-loader.d.ts +41 -0
  83. package/dist/utils/env-loader.d.ts.map +1 -0
  84. package/dist/utils/env-loader.js +78 -0
  85. package/dist/utils/env-loader.js.map +1 -0
  86. package/dist/utils/git.d.ts +52 -0
  87. package/dist/utils/git.d.ts.map +1 -0
  88. package/dist/utils/git.js +267 -0
  89. package/dist/utils/git.js.map +1 -0
  90. package/dist/utils/paths.d.ts +39 -5
  91. package/dist/utils/paths.d.ts.map +1 -1
  92. package/dist/utils/paths.js +88 -7
  93. package/dist/utils/paths.js.map +1 -1
  94. package/package.json +8 -2
  95. package/standards/README.md +50 -0
  96. package/standards/experts/expert-routing.md +215 -0
  97. package/standards/general/code-quality.md +86 -0
  98. package/standards/general/memory-usage.md +205 -0
  99. package/standards/general/sync-workflow.md +235 -0
  100. package/standards/general/workflow.md +82 -0
  101. package/standards/hooks/mandatory-tracking.md +446 -0
  102. package/standards/infrastructure/cloud-database.md +287 -0
  103. package/standards/mcp/server-design.md +243 -0
  104. package/standards/mcp/tool-patterns.md +354 -0
  105. package/standards/skills/skill-structure.md +286 -0
  106. package/standards/skills/workflow-design.md +323 -0
  107. package/standards/tools/tool-design.md +297 -0
  108. package/templates/claude-settings.json +72 -0
  109. package/templates/memory-config.json +2 -28
  110. package/templates/skills/continue.md +205 -0
@@ -0,0 +1,455 @@
1
+ /**
2
+ * @file Cliente Turso (SQLite Edge)
3
+ * @description Cliente serverless para Turso - base de datos principal para tareas, mejoras y memorias
4
+ */
5
+ import { createClient } from '@libsql/client';
6
+ import { ulid } from 'ulid';
7
+ import { TursoError, NotFoundError, ConfigError, safeJsonParse } from './errors.js';
8
+ // Allowed orderBy columns (prevent SQL injection)
9
+ const ALLOWED_ORDER_COLUMNS = ['created_at', 'updated_at', 'id', 'type', 'status'];
10
+ const ALLOWED_ORDER_DIRS = ['ASC', 'DESC'];
11
+ // Safe JSON paths for ordering (whitelist to prevent injection)
12
+ const ALLOWED_JSON_PATHS = ['$.lastActivityAt', '$.priority', '$.createdAt', '$.detectedAt'];
13
+ // =============================================================================
14
+ // Client
15
+ // =============================================================================
16
+ let client = null;
17
+ /**
18
+ * Inicializar cliente Turso
19
+ * @throws {ConfigError} If credentials are not configured
20
+ * @throws {TursoError} If connection fails
21
+ */
22
+ export function initTurso(config) {
23
+ if (client)
24
+ return client;
25
+ const url = config?.url || process.env.TURSO_DATABASE_URL;
26
+ const authToken = config?.authToken || process.env.TURSO_AUTH_TOKEN;
27
+ if (!url || !authToken) {
28
+ const missing = [];
29
+ if (!url)
30
+ missing.push('TURSO_DATABASE_URL');
31
+ if (!authToken)
32
+ missing.push('TURSO_AUTH_TOKEN');
33
+ throw new ConfigError('Turso credentials not configured', missing);
34
+ }
35
+ try {
36
+ client = createClient({ url, authToken });
37
+ return client;
38
+ }
39
+ catch (error) {
40
+ throw new TursoError('Failed to initialize Turso client', error, 'init');
41
+ }
42
+ }
43
+ /**
44
+ * Obtener cliente (inicializa si es necesario)
45
+ */
46
+ export function getTurso() {
47
+ if (!client) {
48
+ return initTurso();
49
+ }
50
+ return client;
51
+ }
52
+ // =============================================================================
53
+ // Schema Setup
54
+ // =============================================================================
55
+ /**
56
+ * Crear tablas en Turso
57
+ * @throws {TursoError} If schema creation fails
58
+ */
59
+ export async function setupTursoSchema() {
60
+ try {
61
+ const db = getTurso();
62
+ // Tabla principal de items (similar a DEV_Items en MySQL)
63
+ await db.execute(`
64
+ CREATE TABLE IF NOT EXISTS items (
65
+ id TEXT PRIMARY KEY,
66
+ type TEXT NOT NULL,
67
+ status TEXT NOT NULL DEFAULT 'pending',
68
+ system TEXT NOT NULL,
69
+ content TEXT NOT NULL,
70
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
71
+ updated_at TEXT NOT NULL DEFAULT (datetime('now'))
72
+ )
73
+ `);
74
+ // Índices para queries comunes
75
+ await db.execute(`CREATE INDEX IF NOT EXISTS idx_items_type ON items(type)`);
76
+ await db.execute(`CREATE INDEX IF NOT EXISTS idx_items_status ON items(status)`);
77
+ await db.execute(`CREATE INDEX IF NOT EXISTS idx_items_system ON items(system)`);
78
+ await db.execute(`CREATE INDEX IF NOT EXISTS idx_items_type_status ON items(type, status)`);
79
+ console.log('✓ Turso schema initialized');
80
+ }
81
+ catch (error) {
82
+ throw new TursoError('Failed to setup Turso schema', error, 'init');
83
+ }
84
+ }
85
+ // =============================================================================
86
+ // CRUD Operations
87
+ // =============================================================================
88
+ /**
89
+ * Crear un nuevo item
90
+ * @throws {TursoError} If insert fails
91
+ */
92
+ export async function create(type, system, content, status = 'pending') {
93
+ try {
94
+ const db = getTurso();
95
+ const id = ulid();
96
+ const now = new Date().toISOString();
97
+ await db.execute({
98
+ sql: `INSERT INTO items (id, type, status, system, content, created_at, updated_at)
99
+ VALUES (?, ?, ?, ?, ?, ?, ?)`,
100
+ args: [id, type, status, system, JSON.stringify(content), now, now]
101
+ });
102
+ return id;
103
+ }
104
+ catch (error) {
105
+ throw new TursoError(`Failed to create ${type} in ${system}`, error, 'create');
106
+ }
107
+ }
108
+ /**
109
+ * Obtener item por ID
110
+ * @throws {TursoError} If query fails
111
+ */
112
+ export async function get(id) {
113
+ try {
114
+ const db = getTurso();
115
+ const result = await db.execute({
116
+ sql: `SELECT * FROM items WHERE id = ?`,
117
+ args: [id]
118
+ });
119
+ if (result.rows.length === 0)
120
+ return null;
121
+ const row = result.rows[0];
122
+ return {
123
+ id: row.id,
124
+ type: row.type,
125
+ status: row.status,
126
+ system: row.system,
127
+ content: safeJsonParse(row.content, `item ${id}`)
128
+ };
129
+ }
130
+ catch (error) {
131
+ if (error instanceof TursoError)
132
+ throw error;
133
+ throw new TursoError(`Failed to get item ${id}`, error, 'read');
134
+ }
135
+ }
136
+ /**
137
+ * Actualizar item
138
+ * @throws {NotFoundError} If item not found
139
+ * @throws {TursoError} If update fails
140
+ */
141
+ export async function update(id, updates) {
142
+ try {
143
+ const db = getTurso();
144
+ const now = new Date().toISOString();
145
+ const existing = await get(id);
146
+ if (!existing)
147
+ throw new NotFoundError('Item', id);
148
+ const existingContent = existing.content;
149
+ const updateContent = updates.content;
150
+ const newContent = updateContent
151
+ ? { ...existingContent, ...updateContent }
152
+ : existingContent;
153
+ await db.execute({
154
+ sql: `UPDATE items SET status = ?, content = ?, updated_at = ? WHERE id = ?`,
155
+ args: [
156
+ updates.status || existing.status,
157
+ JSON.stringify(newContent),
158
+ now,
159
+ id
160
+ ]
161
+ });
162
+ }
163
+ catch (error) {
164
+ if (error instanceof NotFoundError)
165
+ throw error;
166
+ if (error instanceof TursoError)
167
+ throw error;
168
+ throw new TursoError(`Failed to update item ${id}`, error, 'update');
169
+ }
170
+ }
171
+ /**
172
+ * Buscar items
173
+ * @throws {TursoError} If query fails
174
+ */
175
+ export async function query(options) {
176
+ try {
177
+ const db = getTurso();
178
+ let sql = 'SELECT * FROM items WHERE 1=1';
179
+ const args = [];
180
+ if (options.system) {
181
+ sql += ' AND system = ?';
182
+ args.push(options.system);
183
+ }
184
+ if (options.type) {
185
+ sql += ' AND type = ?';
186
+ args.push(options.type);
187
+ }
188
+ if (options.status) {
189
+ sql += ' AND status = ?';
190
+ args.push(options.status);
191
+ }
192
+ // Safe ORDER BY - only allow whitelisted columns/paths (prevents SQL injection)
193
+ const orderDir = ALLOWED_ORDER_DIRS.includes(options.orderDir)
194
+ ? options.orderDir
195
+ : 'DESC';
196
+ if (options.jsonOrderBy && ALLOWED_JSON_PATHS.includes(options.jsonOrderBy)) {
197
+ // Safe JSON extraction ordering
198
+ sql += ` ORDER BY json_extract(content, '${options.jsonOrderBy}') ${orderDir}`;
199
+ }
200
+ else {
201
+ // Regular column ordering
202
+ const orderCol = ALLOWED_ORDER_COLUMNS.includes(options.orderBy)
203
+ ? options.orderBy
204
+ : 'updated_at';
205
+ sql += ` ORDER BY ${orderCol} ${orderDir}`;
206
+ }
207
+ // Safe LIMIT - cap at 1000 to prevent excessive queries
208
+ const limit = Math.min(Math.max(1, options.limit || 50), 1000);
209
+ sql += ' LIMIT ?';
210
+ args.push(limit);
211
+ const result = await db.execute({ sql, args });
212
+ return result.rows.map(row => ({
213
+ id: row.id,
214
+ type: row.type,
215
+ status: row.status,
216
+ system: row.system,
217
+ content: safeJsonParse(row.content, 'query result')
218
+ }));
219
+ }
220
+ catch (error) {
221
+ if (error instanceof TursoError)
222
+ throw error;
223
+ throw new TursoError('Failed to query items', error, 'query');
224
+ }
225
+ }
226
+ /**
227
+ * Eliminar item
228
+ * @throws {TursoError} If delete fails
229
+ */
230
+ export async function remove(id) {
231
+ try {
232
+ const db = getTurso();
233
+ await db.execute({
234
+ sql: `DELETE FROM items WHERE id = ?`,
235
+ args: [id]
236
+ });
237
+ }
238
+ catch (error) {
239
+ throw new TursoError(`Failed to delete item ${id}`, error, 'delete');
240
+ }
241
+ }
242
+ // =============================================================================
243
+ // Task Operations
244
+ // =============================================================================
245
+ /**
246
+ * Crear nueva tarea
247
+ */
248
+ export async function createTask(system, sessionId, options) {
249
+ const now = new Date().toISOString();
250
+ const content = {
251
+ title: options.title,
252
+ description: options.description,
253
+ userRequest: options.userRequest,
254
+ plan: options.plan,
255
+ currentStep: 0,
256
+ domain: options.domain,
257
+ files: [],
258
+ sessionId,
259
+ agentId: options.agentId,
260
+ startedAt: now,
261
+ lastActivityAt: now,
262
+ improvements: [],
263
+ lessons: []
264
+ };
265
+ return create('task', system, content, 'in_progress');
266
+ }
267
+ /**
268
+ * Obtener tareas activas
269
+ */
270
+ export async function getActiveTasks(system) {
271
+ const results = await query({
272
+ system,
273
+ type: 'task',
274
+ status: 'in_progress',
275
+ jsonOrderBy: '$.lastActivityAt',
276
+ orderDir: 'DESC'
277
+ });
278
+ return results.map(r => ({ id: r.id, content: r.content }));
279
+ }
280
+ /**
281
+ * Actualizar progreso de tarea
282
+ * @throws {NotFoundError} If task not found
283
+ * @throws {TursoError} If update fails
284
+ */
285
+ export async function updateTaskProgress(taskId, updates) {
286
+ const existing = await get(taskId);
287
+ if (!existing)
288
+ throw new NotFoundError('Task', taskId);
289
+ await update(taskId, {
290
+ content: {
291
+ ...existing.content,
292
+ ...updates,
293
+ lastActivityAt: new Date().toISOString()
294
+ }
295
+ });
296
+ }
297
+ /**
298
+ * Completar tarea
299
+ * @throws {NotFoundError} If task not found
300
+ * @throws {TursoError} If update fails
301
+ */
302
+ export async function completeTask(taskId, result) {
303
+ const existing = await get(taskId);
304
+ if (!existing)
305
+ throw new NotFoundError('Task', taskId);
306
+ const now = new Date().toISOString();
307
+ // Crear mejoras como items separados
308
+ for (const imp of result.improvements) {
309
+ await create('improvement', existing.system, {
310
+ area: imp.area,
311
+ title: imp.title,
312
+ description: imp.description,
313
+ detectedInTask: taskId,
314
+ detectedBy: existing.content.agentId || 'unknown',
315
+ detectedAt: now,
316
+ priority: imp.priority,
317
+ effort: imp.effort
318
+ }, 'pending');
319
+ }
320
+ // Actualizar tarea
321
+ await update(taskId, {
322
+ status: 'completed',
323
+ content: {
324
+ ...existing.content,
325
+ result: result.result,
326
+ resultNotes: result.resultNotes,
327
+ completedAt: now,
328
+ improvements: result.improvements.map((imp, i) => ({
329
+ id: `imp_${i}`,
330
+ ...imp,
331
+ detectedAt: now
332
+ })),
333
+ lessons: result.lessons || []
334
+ }
335
+ });
336
+ }
337
+ // =============================================================================
338
+ // Improvement Operations
339
+ // =============================================================================
340
+ /**
341
+ * Obtener mejoras pendientes por área
342
+ */
343
+ export async function getPendingImprovements(system, area) {
344
+ const results = await query({
345
+ system,
346
+ type: 'improvement',
347
+ status: 'pending'
348
+ });
349
+ const filtered = area
350
+ ? results.filter(r => r.content.area === area)
351
+ : results;
352
+ return filtered.map(r => ({ id: r.id, content: r.content }));
353
+ }
354
+ /**
355
+ * Marcar mejora como implementada
356
+ */
357
+ export async function markImprovementDone(improvementId, implementedInTask) {
358
+ await update(improvementId, {
359
+ status: 'implemented',
360
+ content: {
361
+ implementedAt: new Date().toISOString(),
362
+ implementedInTask
363
+ }
364
+ });
365
+ }
366
+ /**
367
+ * Crear mejora standalone (fuera de una tarea)
368
+ */
369
+ export async function createImprovement(system, improvement) {
370
+ const now = new Date().toISOString();
371
+ const id = ulid();
372
+ const content = {
373
+ area: improvement.area,
374
+ title: improvement.title,
375
+ description: improvement.description,
376
+ priority: improvement.priority,
377
+ effort: improvement.effort,
378
+ detectedAt: now,
379
+ detectedBy: 'manual',
380
+ detectedInTask: improvement.taskId || 'standalone'
381
+ };
382
+ await create('improvement', system, content, 'pending');
383
+ return id;
384
+ }
385
+ // =============================================================================
386
+ // Session Operations
387
+ // =============================================================================
388
+ /**
389
+ * Crear nueva sesión
390
+ */
391
+ export async function createSession(system, options) {
392
+ const now = new Date().toISOString();
393
+ const sessionId = ulid();
394
+ const content = {
395
+ sessionId,
396
+ userId: options.userId,
397
+ system,
398
+ projectPath: options.projectPath,
399
+ ide: options.ide,
400
+ startedAt: now,
401
+ lastActivityAt: now,
402
+ toolCalls: 0,
403
+ tasksStarted: 0,
404
+ tasksCompleted: 0,
405
+ improvementsDetected: 0
406
+ };
407
+ await create('session', system, content, 'active');
408
+ return sessionId;
409
+ }
410
+ /**
411
+ * Actualizar actividad de sesión
412
+ */
413
+ export async function updateSessionActivity(sessionId) {
414
+ const results = await query({
415
+ type: 'session',
416
+ status: 'active'
417
+ });
418
+ const session = results.find(r => r.content.sessionId === sessionId);
419
+ if (!session)
420
+ return;
421
+ await update(session.id, {
422
+ content: {
423
+ ...session.content,
424
+ lastActivityAt: new Date().toISOString(),
425
+ toolCalls: session.content.toolCalls + 1
426
+ }
427
+ });
428
+ }
429
+ // =============================================================================
430
+ // Exports
431
+ // =============================================================================
432
+ export const turso = {
433
+ init: initTurso,
434
+ getClient: getTurso,
435
+ setup: setupTursoSchema,
436
+ create,
437
+ getItem: get,
438
+ update,
439
+ query,
440
+ remove,
441
+ // Tasks
442
+ createTask,
443
+ getActiveTasks,
444
+ updateTaskProgress,
445
+ completeTask,
446
+ // Improvements
447
+ createImprovement,
448
+ getPendingImprovements,
449
+ markImprovementDone,
450
+ // Sessions
451
+ createSession,
452
+ updateSessionActivity
453
+ };
454
+ export default turso;
455
+ //# sourceMappingURL=turso-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turso-client.js","sourceRoot":"","sources":["../../src/db/turso-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,161 @@
1
+ /**
2
+ * @file Cliente Upstash (Redis + Vector)
3
+ * @description Cliente serverless para cache y búsqueda semántica
4
+ */
5
+ import { Redis } from '@upstash/redis';
6
+ import { Index } from '@upstash/vector';
7
+ export interface UpstashConfig {
8
+ redis?: {
9
+ url: string;
10
+ token: string;
11
+ };
12
+ vector?: {
13
+ url: string;
14
+ token: string;
15
+ };
16
+ }
17
+ export interface CachedConfig {
18
+ system: string;
19
+ config: Record<string, unknown>;
20
+ cachedAt: string;
21
+ }
22
+ export interface ActiveSession {
23
+ sessionId: string;
24
+ system: string;
25
+ startedAt: string;
26
+ lastActivityAt: string;
27
+ activeTaskId?: string;
28
+ }
29
+ /**
30
+ * Inicializar cliente Redis
31
+ */
32
+ export declare function initRedis(config?: UpstashConfig['redis']): Redis;
33
+ /**
34
+ * Obtener cliente Redis
35
+ */
36
+ export declare function getRedis(): Redis;
37
+ /**
38
+ * Cachear configuración de proyecto
39
+ */
40
+ export declare function cacheConfig(system: string, config: Record<string, unknown>): Promise<void>;
41
+ /**
42
+ * Obtener configuración cacheada
43
+ */
44
+ export declare function getCachedConfig(system: string): Promise<CachedConfig | null>;
45
+ /**
46
+ * Invalidar cache de configuración
47
+ */
48
+ export declare function invalidateConfig(system: string): Promise<void>;
49
+ /**
50
+ * Registrar sesión activa
51
+ */
52
+ export declare function registerSession(session: ActiveSession): Promise<void>;
53
+ /**
54
+ * Obtener sesión activa
55
+ */
56
+ export declare function getActiveSession(sessionId: string): Promise<ActiveSession | null>;
57
+ /**
58
+ * Actualizar última actividad de sesión
59
+ */
60
+ export declare function updateSessionActivity(sessionId: string, updates?: Partial<ActiveSession>): Promise<void>;
61
+ /**
62
+ * Obtener todas las sesiones activas de un sistema
63
+ */
64
+ export declare function getSystemSessions(system: string): Promise<ActiveSession[]>;
65
+ /**
66
+ * Eliminar sesión
67
+ */
68
+ export declare function removeSession(sessionId: string): Promise<void>;
69
+ /**
70
+ * Check rate limit
71
+ */
72
+ export declare function checkRateLimit(key: string, limit: number, windowSeconds: number): Promise<{
73
+ allowed: boolean;
74
+ remaining: number;
75
+ }>;
76
+ /**
77
+ * Set value with TTL
78
+ */
79
+ export declare function setCache<T>(key: string, value: T, ttlSeconds?: number): Promise<void>;
80
+ /**
81
+ * Get cached value
82
+ */
83
+ export declare function getCache<T>(key: string): Promise<T | null>;
84
+ /**
85
+ * Delete cached value
86
+ */
87
+ export declare function deleteCache(key: string): Promise<void>;
88
+ /**
89
+ * Verificar conexión a Redis
90
+ */
91
+ export declare function healthCheck(): Promise<{
92
+ ok: boolean;
93
+ latency: number;
94
+ }>;
95
+ /**
96
+ * Inicializar cliente Vector
97
+ */
98
+ export declare function initVector(config?: UpstashConfig['vector']): Index;
99
+ /**
100
+ * Obtener cliente Vector
101
+ */
102
+ export declare function getVector(): Index;
103
+ /**
104
+ * Insertar/actualizar vector con embedding automático
105
+ */
106
+ export declare function upsertVector(id: string, data: string, metadata: Record<string, unknown>): Promise<void>;
107
+ /**
108
+ * Buscar por similitud semántica
109
+ */
110
+ export declare function searchVectors(query: string, options?: {
111
+ topK?: number;
112
+ filter?: string;
113
+ includeMetadata?: boolean;
114
+ includeData?: boolean;
115
+ }): Promise<Array<{
116
+ id: string;
117
+ score: number;
118
+ metadata?: Record<string, unknown>;
119
+ data?: string;
120
+ }>>;
121
+ /**
122
+ * Eliminar vector
123
+ */
124
+ export declare function deleteVector(id: string): Promise<void>;
125
+ /**
126
+ * Eliminar múltiples vectores
127
+ */
128
+ export declare function deleteVectors(ids: string[]): Promise<void>;
129
+ /**
130
+ * Health check para Vector
131
+ */
132
+ export declare function vectorHealthCheck(): Promise<{
133
+ ok: boolean;
134
+ message: string;
135
+ }>;
136
+ export declare const upstash: {
137
+ initRedis: typeof initRedis;
138
+ getRedis: typeof getRedis;
139
+ healthCheck: typeof healthCheck;
140
+ cacheConfig: typeof cacheConfig;
141
+ getCachedConfig: typeof getCachedConfig;
142
+ invalidateConfig: typeof invalidateConfig;
143
+ registerSession: typeof registerSession;
144
+ getActiveSession: typeof getActiveSession;
145
+ updateSessionActivity: typeof updateSessionActivity;
146
+ getSystemSessions: typeof getSystemSessions;
147
+ removeSession: typeof removeSession;
148
+ checkRateLimit: typeof checkRateLimit;
149
+ setCache: typeof setCache;
150
+ getCache: typeof getCache;
151
+ deleteCache: typeof deleteCache;
152
+ initVector: typeof initVector;
153
+ getVector: typeof getVector;
154
+ upsertVector: typeof upsertVector;
155
+ searchVectors: typeof searchVectors;
156
+ deleteVector: typeof deleteVector;
157
+ deleteVectors: typeof deleteVectors;
158
+ vectorHealthCheck: typeof vectorHealthCheck;
159
+ };
160
+ export default upstash;
161
+ //# sourceMappingURL=upstash-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upstash-client.d.ts","sourceRoot":"","sources":["../../src/db/upstash-client.ts"],"names":[],"mappings":"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"}