@aitytech/agentkits-memory 1.0.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 (116) hide show
  1. package/README.md +250 -0
  2. package/dist/cache-manager.d.ts +134 -0
  3. package/dist/cache-manager.d.ts.map +1 -0
  4. package/dist/cache-manager.js +407 -0
  5. package/dist/cache-manager.js.map +1 -0
  6. package/dist/cli/save.d.ts +20 -0
  7. package/dist/cli/save.d.ts.map +1 -0
  8. package/dist/cli/save.js +94 -0
  9. package/dist/cli/save.js.map +1 -0
  10. package/dist/cli/setup.d.ts +18 -0
  11. package/dist/cli/setup.d.ts.map +1 -0
  12. package/dist/cli/setup.js +163 -0
  13. package/dist/cli/setup.js.map +1 -0
  14. package/dist/cli/viewer.d.ts +21 -0
  15. package/dist/cli/viewer.d.ts.map +1 -0
  16. package/dist/cli/viewer.js +182 -0
  17. package/dist/cli/viewer.js.map +1 -0
  18. package/dist/hnsw-index.d.ts +111 -0
  19. package/dist/hnsw-index.d.ts.map +1 -0
  20. package/dist/hnsw-index.js +781 -0
  21. package/dist/hnsw-index.js.map +1 -0
  22. package/dist/hooks/cli.d.ts +20 -0
  23. package/dist/hooks/cli.d.ts.map +1 -0
  24. package/dist/hooks/cli.js +102 -0
  25. package/dist/hooks/cli.js.map +1 -0
  26. package/dist/hooks/context.d.ts +31 -0
  27. package/dist/hooks/context.d.ts.map +1 -0
  28. package/dist/hooks/context.js +64 -0
  29. package/dist/hooks/context.js.map +1 -0
  30. package/dist/hooks/index.d.ts +16 -0
  31. package/dist/hooks/index.d.ts.map +1 -0
  32. package/dist/hooks/index.js +20 -0
  33. package/dist/hooks/index.js.map +1 -0
  34. package/dist/hooks/observation.d.ts +30 -0
  35. package/dist/hooks/observation.d.ts.map +1 -0
  36. package/dist/hooks/observation.js +79 -0
  37. package/dist/hooks/observation.js.map +1 -0
  38. package/dist/hooks/service.d.ts +102 -0
  39. package/dist/hooks/service.d.ts.map +1 -0
  40. package/dist/hooks/service.js +454 -0
  41. package/dist/hooks/service.js.map +1 -0
  42. package/dist/hooks/session-init.d.ts +30 -0
  43. package/dist/hooks/session-init.d.ts.map +1 -0
  44. package/dist/hooks/session-init.js +54 -0
  45. package/dist/hooks/session-init.js.map +1 -0
  46. package/dist/hooks/summarize.d.ts +30 -0
  47. package/dist/hooks/summarize.d.ts.map +1 -0
  48. package/dist/hooks/summarize.js +74 -0
  49. package/dist/hooks/summarize.js.map +1 -0
  50. package/dist/hooks/types.d.ts +193 -0
  51. package/dist/hooks/types.d.ts.map +1 -0
  52. package/dist/hooks/types.js +137 -0
  53. package/dist/hooks/types.js.map +1 -0
  54. package/dist/index.d.ts +173 -0
  55. package/dist/index.d.ts.map +1 -0
  56. package/dist/index.js +564 -0
  57. package/dist/index.js.map +1 -0
  58. package/dist/mcp/index.d.ts +9 -0
  59. package/dist/mcp/index.d.ts.map +1 -0
  60. package/dist/mcp/index.js +9 -0
  61. package/dist/mcp/index.js.map +1 -0
  62. package/dist/mcp/server.d.ts +22 -0
  63. package/dist/mcp/server.d.ts.map +1 -0
  64. package/dist/mcp/server.js +368 -0
  65. package/dist/mcp/server.js.map +1 -0
  66. package/dist/mcp/tools.d.ts +14 -0
  67. package/dist/mcp/tools.d.ts.map +1 -0
  68. package/dist/mcp/tools.js +110 -0
  69. package/dist/mcp/tools.js.map +1 -0
  70. package/dist/mcp/types.d.ts +100 -0
  71. package/dist/mcp/types.d.ts.map +1 -0
  72. package/dist/mcp/types.js +9 -0
  73. package/dist/mcp/types.js.map +1 -0
  74. package/dist/migration.d.ts +77 -0
  75. package/dist/migration.d.ts.map +1 -0
  76. package/dist/migration.js +457 -0
  77. package/dist/migration.js.map +1 -0
  78. package/dist/sqljs-backend.d.ts +128 -0
  79. package/dist/sqljs-backend.d.ts.map +1 -0
  80. package/dist/sqljs-backend.js +623 -0
  81. package/dist/sqljs-backend.js.map +1 -0
  82. package/dist/types.d.ts +481 -0
  83. package/dist/types.d.ts.map +1 -0
  84. package/dist/types.js +73 -0
  85. package/dist/types.js.map +1 -0
  86. package/hooks.json +46 -0
  87. package/package.json +67 -0
  88. package/src/__tests__/index.test.ts +407 -0
  89. package/src/__tests__/sqljs-backend.test.ts +410 -0
  90. package/src/cache-manager.ts +515 -0
  91. package/src/cli/save.ts +109 -0
  92. package/src/cli/setup.ts +203 -0
  93. package/src/cli/viewer.ts +218 -0
  94. package/src/hnsw-index.ts +1013 -0
  95. package/src/hooks/__tests__/handlers.test.ts +298 -0
  96. package/src/hooks/__tests__/integration.test.ts +431 -0
  97. package/src/hooks/__tests__/service.test.ts +487 -0
  98. package/src/hooks/__tests__/types.test.ts +341 -0
  99. package/src/hooks/cli.ts +121 -0
  100. package/src/hooks/context.ts +77 -0
  101. package/src/hooks/index.ts +23 -0
  102. package/src/hooks/observation.ts +102 -0
  103. package/src/hooks/service.ts +582 -0
  104. package/src/hooks/session-init.ts +70 -0
  105. package/src/hooks/summarize.ts +89 -0
  106. package/src/hooks/types.ts +365 -0
  107. package/src/index.ts +755 -0
  108. package/src/mcp/__tests__/server.test.ts +181 -0
  109. package/src/mcp/index.ts +9 -0
  110. package/src/mcp/server.ts +441 -0
  111. package/src/mcp/tools.ts +113 -0
  112. package/src/mcp/types.ts +109 -0
  113. package/src/migration.ts +574 -0
  114. package/src/sql.js.d.ts +70 -0
  115. package/src/sqljs-backend.ts +789 -0
  116. package/src/types.ts +715 -0
@@ -0,0 +1,454 @@
1
+ /**
2
+ * Memory Hook Service
3
+ *
4
+ * Lightweight service for hooks to store/retrieve memory.
5
+ * Direct SQLite access without HTTP worker (simpler than claude-mem).
6
+ *
7
+ * @module @agentkits/memory/hooks/service
8
+ */
9
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
10
+ import * as path from 'node:path';
11
+ import { createRequire } from 'node:module';
12
+ import initSqlJs from 'sql.js';
13
+ // ESM-compatible require for resolving sql.js WASM path
14
+ const require = createRequire(import.meta.url);
15
+ import { generateObservationId, getObservationType, generateObservationTitle, truncate, } from './types.js';
16
+ const DEFAULT_CONFIG = {
17
+ baseDir: '.claude/memory',
18
+ dbFilename: 'hooks.db',
19
+ maxContextObservations: 20,
20
+ maxContextSessions: 5,
21
+ maxResponseSize: 5000,
22
+ };
23
+ /**
24
+ * Memory Hook Service
25
+ *
26
+ * Provides direct SQLite access for hooks without HTTP overhead.
27
+ * Stores observations and sessions for context injection.
28
+ */
29
+ export class MemoryHookService {
30
+ config;
31
+ db = null;
32
+ SQL = null;
33
+ initialized = false;
34
+ dbPath;
35
+ constructor(cwd, config = {}) {
36
+ this.config = { ...DEFAULT_CONFIG, ...config };
37
+ this.dbPath = path.join(cwd, this.config.baseDir, this.config.dbFilename);
38
+ }
39
+ /**
40
+ * Initialize the service
41
+ */
42
+ async initialize() {
43
+ if (this.initialized)
44
+ return;
45
+ // Ensure directory exists
46
+ const dir = path.dirname(this.dbPath);
47
+ if (!existsSync(dir)) {
48
+ mkdirSync(dir, { recursive: true });
49
+ }
50
+ // Load sql.js - use local wasm file from node_modules
51
+ this.SQL = await initSqlJs({
52
+ locateFile: (file) => {
53
+ // Try to find the wasm file in node_modules
54
+ const localPath = path.join(path.dirname(require.resolve('sql.js')), file);
55
+ return localPath;
56
+ },
57
+ });
58
+ // Load or create database
59
+ if (existsSync(this.dbPath)) {
60
+ const buffer = readFileSync(this.dbPath);
61
+ this.db = new this.SQL.Database(new Uint8Array(buffer));
62
+ }
63
+ else {
64
+ this.db = new this.SQL.Database();
65
+ }
66
+ // Create schema
67
+ this.createSchema();
68
+ this.initialized = true;
69
+ }
70
+ /**
71
+ * Persist database to disk
72
+ */
73
+ async persist() {
74
+ if (!this.db)
75
+ return;
76
+ const data = this.db.export();
77
+ const buffer = Buffer.from(data);
78
+ writeFileSync(this.dbPath, buffer);
79
+ }
80
+ /**
81
+ * Shutdown the service
82
+ */
83
+ async shutdown() {
84
+ if (!this.initialized || !this.db)
85
+ return;
86
+ await this.persist();
87
+ this.db.close();
88
+ this.db = null;
89
+ this.initialized = false;
90
+ }
91
+ // ===== Session Management =====
92
+ /**
93
+ * Initialize or get session
94
+ */
95
+ async initSession(sessionId, project, prompt) {
96
+ await this.ensureInitialized();
97
+ // Check if session exists
98
+ const existing = this.getSession(sessionId);
99
+ if (existing) {
100
+ return existing;
101
+ }
102
+ // Create new session
103
+ const now = Date.now();
104
+ this.db.run(`
105
+ INSERT INTO sessions (session_id, project, prompt, started_at, observation_count, status)
106
+ VALUES (?, ?, ?, ?, 0, 'active')
107
+ `, [sessionId, project, prompt || '', now]);
108
+ await this.persist();
109
+ return {
110
+ id: this.db.exec('SELECT last_insert_rowid()')[0]?.values[0]?.[0] || 0,
111
+ sessionId,
112
+ project,
113
+ prompt: prompt || '',
114
+ startedAt: now,
115
+ observationCount: 0,
116
+ status: 'active',
117
+ };
118
+ }
119
+ /**
120
+ * Get session by ID
121
+ */
122
+ getSession(sessionId) {
123
+ if (!this.db)
124
+ return null;
125
+ const stmt = this.db.prepare('SELECT * FROM sessions WHERE session_id = ?');
126
+ stmt.bind([sessionId]);
127
+ if (stmt.step()) {
128
+ const row = stmt.getAsObject();
129
+ stmt.free();
130
+ return this.rowToSession(row);
131
+ }
132
+ stmt.free();
133
+ return null;
134
+ }
135
+ /**
136
+ * Complete a session with summary
137
+ */
138
+ async completeSession(sessionId, summary) {
139
+ await this.ensureInitialized();
140
+ const now = Date.now();
141
+ this.db.run(`
142
+ UPDATE sessions
143
+ SET ended_at = ?, summary = ?, status = 'completed'
144
+ WHERE session_id = ?
145
+ `, [now, summary || '', sessionId]);
146
+ await this.persist();
147
+ }
148
+ /**
149
+ * Get recent sessions
150
+ */
151
+ async getRecentSessions(project, limit = 5) {
152
+ await this.ensureInitialized();
153
+ const stmt = this.db.prepare(`
154
+ SELECT * FROM sessions
155
+ WHERE project = ?
156
+ ORDER BY started_at DESC
157
+ LIMIT ?
158
+ `);
159
+ stmt.bind([project, limit]);
160
+ const sessions = [];
161
+ while (stmt.step()) {
162
+ sessions.push(this.rowToSession(stmt.getAsObject()));
163
+ }
164
+ stmt.free();
165
+ return sessions;
166
+ }
167
+ // ===== Observation Management =====
168
+ /**
169
+ * Store an observation
170
+ */
171
+ async storeObservation(sessionId, project, toolName, toolInput, toolResponse, cwd) {
172
+ await this.ensureInitialized();
173
+ const id = generateObservationId();
174
+ const now = Date.now();
175
+ const type = getObservationType(toolName);
176
+ const title = generateObservationTitle(toolName, toolInput);
177
+ // Truncate large responses
178
+ const inputStr = JSON.stringify(toolInput || {});
179
+ const responseStr = truncate(JSON.stringify(toolResponse || {}), this.config.maxResponseSize);
180
+ this.db.run(`
181
+ INSERT INTO observations (id, session_id, project, tool_name, tool_input, tool_response, cwd, timestamp, type, title)
182
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
183
+ `, [id, sessionId, project, toolName, inputStr, responseStr, cwd, now, type, title]);
184
+ // Update session observation count
185
+ this.db.run(`
186
+ UPDATE sessions
187
+ SET observation_count = observation_count + 1
188
+ WHERE session_id = ?
189
+ `, [sessionId]);
190
+ await this.persist();
191
+ return {
192
+ id,
193
+ sessionId,
194
+ project,
195
+ toolName,
196
+ toolInput: inputStr,
197
+ toolResponse: responseStr,
198
+ cwd,
199
+ timestamp: now,
200
+ type,
201
+ title,
202
+ };
203
+ }
204
+ /**
205
+ * Get observations for a session
206
+ */
207
+ async getSessionObservations(sessionId, limit = 50) {
208
+ await this.ensureInitialized();
209
+ const stmt = this.db.prepare(`
210
+ SELECT * FROM observations
211
+ WHERE session_id = ?
212
+ ORDER BY timestamp DESC
213
+ LIMIT ?
214
+ `);
215
+ stmt.bind([sessionId, limit]);
216
+ const observations = [];
217
+ while (stmt.step()) {
218
+ observations.push(this.rowToObservation(stmt.getAsObject()));
219
+ }
220
+ stmt.free();
221
+ return observations;
222
+ }
223
+ /**
224
+ * Get recent observations for a project
225
+ */
226
+ async getRecentObservations(project, limit = 20) {
227
+ await this.ensureInitialized();
228
+ const stmt = this.db.prepare(`
229
+ SELECT * FROM observations
230
+ WHERE project = ?
231
+ ORDER BY timestamp DESC
232
+ LIMIT ?
233
+ `);
234
+ stmt.bind([project, limit]);
235
+ const observations = [];
236
+ while (stmt.step()) {
237
+ observations.push(this.rowToObservation(stmt.getAsObject()));
238
+ }
239
+ stmt.free();
240
+ return observations;
241
+ }
242
+ // ===== Context Generation =====
243
+ /**
244
+ * Get memory context for session start
245
+ */
246
+ async getContext(project) {
247
+ await this.ensureInitialized();
248
+ const recentObservations = await this.getRecentObservations(project, this.config.maxContextObservations);
249
+ const previousSessions = await this.getRecentSessions(project, this.config.maxContextSessions);
250
+ // Generate markdown
251
+ const markdown = this.formatContextMarkdown(recentObservations, previousSessions, project);
252
+ return {
253
+ recentObservations,
254
+ previousSessions,
255
+ markdown,
256
+ };
257
+ }
258
+ /**
259
+ * Format context as markdown
260
+ */
261
+ formatContextMarkdown(observations, sessions, project) {
262
+ const lines = [];
263
+ lines.push(`# Memory Context - ${project}`);
264
+ lines.push('');
265
+ lines.push('*AgentKits CPS™ - Auto-captured session memory*');
266
+ lines.push('');
267
+ // Recent observations
268
+ if (observations.length > 0) {
269
+ lines.push('## Recent Activity');
270
+ lines.push('');
271
+ lines.push('| Time | Action | Details |');
272
+ lines.push('|------|--------|---------|');
273
+ for (const obs of observations.slice(0, 10)) {
274
+ const time = this.formatRelativeTime(obs.timestamp);
275
+ const icon = this.getObservationIcon(obs.type);
276
+ lines.push(`| ${time} | ${icon} ${obs.toolName} | ${obs.title || ''} |`);
277
+ }
278
+ lines.push('');
279
+ }
280
+ // Previous sessions
281
+ if (sessions.length > 0) {
282
+ lines.push('## Previous Sessions');
283
+ lines.push('');
284
+ for (const session of sessions.slice(0, 3)) {
285
+ const time = this.formatRelativeTime(session.startedAt);
286
+ const status = session.status === 'completed' ? '✓' : '→';
287
+ lines.push(`### ${status} Session (${time})`);
288
+ if (session.prompt) {
289
+ lines.push(`**Task:** ${session.prompt.substring(0, 100)}${session.prompt.length > 100 ? '...' : ''}`);
290
+ }
291
+ if (session.summary) {
292
+ lines.push(`**Summary:** ${session.summary}`);
293
+ }
294
+ lines.push(`*Observations: ${session.observationCount}*`);
295
+ lines.push('');
296
+ }
297
+ }
298
+ // No context available
299
+ if (observations.length === 0 && sessions.length === 0) {
300
+ lines.push('*No previous session context available.*');
301
+ lines.push('');
302
+ }
303
+ return lines.join('\n');
304
+ }
305
+ /**
306
+ * Generate session summary from observations
307
+ */
308
+ async generateSummary(sessionId) {
309
+ const observations = await this.getSessionObservations(sessionId);
310
+ if (observations.length === 0) {
311
+ return 'No activity recorded in this session.';
312
+ }
313
+ // Group by type
314
+ const byType = {};
315
+ const files = new Set();
316
+ for (const obs of observations) {
317
+ byType[obs.type] = (byType[obs.type] || 0) + 1;
318
+ // Extract file paths
319
+ try {
320
+ const input = JSON.parse(obs.toolInput);
321
+ if (input.file_path || input.path) {
322
+ files.add(input.file_path || input.path);
323
+ }
324
+ }
325
+ catch {
326
+ // Ignore parse errors
327
+ }
328
+ }
329
+ // Build summary
330
+ const parts = [];
331
+ if (byType.write) {
332
+ parts.push(`${byType.write} file(s) modified`);
333
+ }
334
+ if (byType.read) {
335
+ parts.push(`${byType.read} file(s) read`);
336
+ }
337
+ if (byType.execute) {
338
+ parts.push(`${byType.execute} command(s) executed`);
339
+ }
340
+ if (byType.search) {
341
+ parts.push(`${byType.search} search(es)`);
342
+ }
343
+ let summary = parts.join(', ') || 'Various operations performed';
344
+ if (files.size > 0 && files.size <= 5) {
345
+ summary += `. Files: ${Array.from(files).join(', ')}`;
346
+ }
347
+ else if (files.size > 5) {
348
+ summary += `. ${files.size} files touched.`;
349
+ }
350
+ return summary;
351
+ }
352
+ // ===== Private Methods =====
353
+ async ensureInitialized() {
354
+ if (!this.initialized) {
355
+ await this.initialize();
356
+ }
357
+ }
358
+ createSchema() {
359
+ if (!this.db)
360
+ return;
361
+ this.db.run(`
362
+ CREATE TABLE IF NOT EXISTS sessions (
363
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
364
+ session_id TEXT UNIQUE NOT NULL,
365
+ project TEXT NOT NULL,
366
+ prompt TEXT,
367
+ started_at INTEGER NOT NULL,
368
+ ended_at INTEGER,
369
+ observation_count INTEGER DEFAULT 0,
370
+ summary TEXT,
371
+ status TEXT DEFAULT 'active'
372
+ )
373
+ `);
374
+ this.db.run(`
375
+ CREATE TABLE IF NOT EXISTS observations (
376
+ id TEXT PRIMARY KEY,
377
+ session_id TEXT NOT NULL,
378
+ project TEXT NOT NULL,
379
+ tool_name TEXT NOT NULL,
380
+ tool_input TEXT,
381
+ tool_response TEXT,
382
+ cwd TEXT,
383
+ timestamp INTEGER NOT NULL,
384
+ type TEXT,
385
+ title TEXT,
386
+ FOREIGN KEY (session_id) REFERENCES sessions(session_id)
387
+ )
388
+ `);
389
+ this.db.run('CREATE INDEX IF NOT EXISTS idx_obs_session ON observations(session_id)');
390
+ this.db.run('CREATE INDEX IF NOT EXISTS idx_obs_project ON observations(project)');
391
+ this.db.run('CREATE INDEX IF NOT EXISTS idx_obs_timestamp ON observations(timestamp)');
392
+ this.db.run('CREATE INDEX IF NOT EXISTS idx_sessions_project ON sessions(project)');
393
+ }
394
+ rowToSession(row) {
395
+ return {
396
+ id: row.id,
397
+ sessionId: row.session_id,
398
+ project: row.project,
399
+ prompt: row.prompt,
400
+ startedAt: row.started_at,
401
+ endedAt: row.ended_at,
402
+ observationCount: row.observation_count,
403
+ summary: row.summary,
404
+ status: row.status,
405
+ };
406
+ }
407
+ rowToObservation(row) {
408
+ return {
409
+ id: row.id,
410
+ sessionId: row.session_id,
411
+ project: row.project,
412
+ toolName: row.tool_name,
413
+ toolInput: row.tool_input,
414
+ toolResponse: row.tool_response,
415
+ cwd: row.cwd,
416
+ timestamp: row.timestamp,
417
+ type: row.type,
418
+ title: row.title,
419
+ };
420
+ }
421
+ formatRelativeTime(timestamp) {
422
+ const now = Date.now();
423
+ const diff = now - timestamp;
424
+ const minutes = Math.floor(diff / 60000);
425
+ const hours = Math.floor(diff / 3600000);
426
+ const days = Math.floor(diff / 86400000);
427
+ if (minutes < 1)
428
+ return 'just now';
429
+ if (minutes < 60)
430
+ return `${minutes}m ago`;
431
+ if (hours < 24)
432
+ return `${hours}h ago`;
433
+ if (days < 7)
434
+ return `${days}d ago`;
435
+ return new Date(timestamp).toLocaleDateString();
436
+ }
437
+ getObservationIcon(type) {
438
+ switch (type) {
439
+ case 'read': return '📖';
440
+ case 'write': return '✏️';
441
+ case 'execute': return '⚡';
442
+ case 'search': return '🔍';
443
+ default: return '•';
444
+ }
445
+ }
446
+ }
447
+ /**
448
+ * Create a hook service for the given project directory
449
+ */
450
+ export function createHookService(cwd) {
451
+ return new MemoryHookService(cwd);
452
+ }
453
+ export default MemoryHookService;
454
+ //# sourceMappingURL=service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/hooks/service.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,SAAwC,MAAM,QAAQ,CAAC;AAE9D,wDAAwD;AACxD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,OAAO,EAIL,qBAAqB,EACrB,kBAAkB,EAClB,wBAAwB,EACxB,QAAQ,GACT,MAAM,YAAY,CAAC;AAsBpB,MAAM,cAAc,GAA4B;IAC9C,OAAO,EAAE,gBAAgB;IACzB,UAAU,EAAE,UAAU;IACtB,sBAAsB,EAAE,EAAE;IAC1B,kBAAkB,EAAE,CAAC;IACrB,eAAe,EAAE,IAAI;CACtB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,OAAO,iBAAiB;IACpB,MAAM,CAA0B;IAChC,EAAE,GAAyB,IAAI,CAAC;IAChC,GAAG,GAAQ,IAAI,CAAC;IAChB,WAAW,GAAY,KAAK,CAAC;IAC7B,MAAM,CAAS;IAEvB,YAAY,GAAW,EAAE,SAA2C,EAAE;QACpE,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,MAAM,EAAE,CAAC;QAC/C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC5E,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO;QAE7B,0BAA0B;QAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,CAAC;QAED,sDAAsD;QACtD,IAAI,CAAC,GAAG,GAAG,MAAM,SAAS,CAAC;YACzB,UAAU,EAAE,CAAC,IAAY,EAAE,EAAE;gBAC3B,4CAA4C;gBAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CACzB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EACvC,IAAI,CACL,CAAC;gBACF,OAAO,SAAS,CAAC;YACnB,CAAC;SACF,CAAC,CAAC;QAEH,0BAA0B;QAC1B,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5B,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACzC,IAAI,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1D,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QACpC,CAAC;QAED,gBAAgB;QAChB,IAAI,CAAC,YAAY,EAAE,CAAC;QAEpB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,OAAO;QAErB,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ;QACZ,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,OAAO;QAE1C,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACrB,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;QAChB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;QACf,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC3B,CAAC;IAED,iCAAiC;IAEjC;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,SAAiB,EAAE,OAAe,EAAE,MAAe;QACnE,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAE/B,0BAA0B;QAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC5C,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,qBAAqB;QACrB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,EAAG,CAAC,GAAG,CAAC;;;KAGZ,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;QAE5C,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QAErB,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,EAAG,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAW,IAAI,CAAC;YACjF,SAAS;YACT,OAAO;YACP,MAAM,EAAE,MAAM,IAAI,EAAE;YACpB,SAAS,EAAE,GAAG;YACd,gBAAgB,EAAE,CAAC;YACnB,MAAM,EAAE,QAAQ;SACjB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,SAAiB;QAC1B,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QAE1B,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,6CAA6C,CAAC,CAAC;QAC5E,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;QAEvB,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YAChB,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YAC/B,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QAChC,CAAC;QAED,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CAAC,SAAiB,EAAE,OAAgB;QACvD,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAE/B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,EAAG,CAAC,GAAG,CAAC;;;;KAIZ,EAAE,CAAC,GAAG,EAAE,OAAO,IAAI,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC;QAEpC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB,CAAC,OAAe,EAAE,QAAgB,CAAC;QACxD,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAE/B,MAAM,IAAI,GAAG,IAAI,CAAC,EAAG,CAAC,OAAO,CAAC;;;;;KAK7B,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;QAE5B,MAAM,QAAQ,GAAoB,EAAE,CAAC;QACrC,OAAO,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACnB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QACvD,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;QAEZ,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,qCAAqC;IAErC;;OAEG;IACH,KAAK,CAAC,gBAAgB,CACpB,SAAiB,EACjB,OAAe,EACf,QAAgB,EAChB,SAAkB,EAClB,YAAqB,EACrB,GAAW;QAEX,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAE/B,MAAM,EAAE,GAAG,qBAAqB,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAG,wBAAwB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAE5D,2BAA2B;QAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;QACjD,MAAM,WAAW,GAAG,QAAQ,CAC1B,IAAI,CAAC,SAAS,CAAC,YAAY,IAAI,EAAE,CAAC,EAClC,IAAI,CAAC,MAAM,CAAC,eAAe,CAC5B,CAAC;QAEF,IAAI,CAAC,EAAG,CAAC,GAAG,CAAC;;;KAGZ,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;QAErF,mCAAmC;QACnC,IAAI,CAAC,EAAG,CAAC,GAAG,CAAC;;;;KAIZ,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;QAEhB,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QAErB,OAAO;YACL,EAAE;YACF,SAAS;YACT,OAAO;YACP,QAAQ;YACR,SAAS,EAAE,QAAQ;YACnB,YAAY,EAAE,WAAW;YACzB,GAAG;YACH,SAAS,EAAE,GAAG;YACd,IAAI;YACJ,KAAK;SACN,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,sBAAsB,CAAC,SAAiB,EAAE,QAAgB,EAAE;QAChE,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAE/B,MAAM,IAAI,GAAG,IAAI,CAAC,EAAG,CAAC,OAAO,CAAC;;;;;KAK7B,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;QAE9B,MAAM,YAAY,GAAkB,EAAE,CAAC;QACvC,OAAO,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACnB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QAC/D,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;QAEZ,OAAO,YAAY,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,qBAAqB,CAAC,OAAe,EAAE,QAAgB,EAAE;QAC7D,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAE/B,MAAM,IAAI,GAAG,IAAI,CAAC,EAAG,CAAC,OAAO,CAAC;;;;;KAK7B,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;QAE5B,MAAM,YAAY,GAAkB,EAAE,CAAC;QACvC,OAAO,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACnB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QAC/D,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;QAEZ,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,iCAAiC;IAEjC;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,OAAe;QAC9B,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAE/B,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC,qBAAqB,CACzD,OAAO,EACP,IAAI,CAAC,MAAM,CAAC,sBAAsB,CACnC,CAAC;QAEF,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,iBAAiB,CACnD,OAAO,EACP,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAC/B,CAAC;QAEF,oBAAoB;QACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAC,kBAAkB,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAC;QAE3F,OAAO;YACL,kBAAkB;YAClB,gBAAgB;YAChB,QAAQ;SACT,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,qBAAqB,CAC3B,YAA2B,EAC3B,QAAyB,EACzB,OAAe;QAEf,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,KAAK,CAAC,IAAI,CAAC,sBAAsB,OAAO,EAAE,CAAC,CAAC;QAC5C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;QAC9D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,sBAAsB;QACtB,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;YACjC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;YAC1C,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;YAE1C,KAAK,MAAM,GAAG,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;gBAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBACpD,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAC/C,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,MAAM,IAAI,IAAI,GAAG,CAAC,QAAQ,MAAM,GAAG,CAAC,KAAK,IAAI,EAAE,IAAI,CAAC,CAAC;YAC3E,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QAED,oBAAoB;QACpB,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAEf,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gBACxD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;gBAC1D,KAAK,CAAC,IAAI,CAAC,OAAO,MAAM,aAAa,IAAI,GAAG,CAAC,CAAC;gBAE9C,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;oBACnB,KAAK,CAAC,IAAI,CAAC,aAAa,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACzG,CAAC;gBAED,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;oBACpB,KAAK,CAAC,IAAI,CAAC,gBAAgB,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;gBAChD,CAAC;gBAED,KAAK,CAAC,IAAI,CAAC,kBAAkB,OAAO,CAAC,gBAAgB,GAAG,CAAC,CAAC;gBAC1D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjB,CAAC;QACH,CAAC;QAED,uBAAuB;QACvB,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvD,KAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;YACvD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CAAC,SAAiB;QACrC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;QAElE,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,uCAAuC,CAAC;QACjD,CAAC;QAED,gBAAgB;QAChB,MAAM,MAAM,GAA2B,EAAE,CAAC;QAC1C,MAAM,KAAK,GAAgB,IAAI,GAAG,EAAE,CAAC;QAErC,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;YAC/B,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAE/C,qBAAqB;YACrB,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBACxC,IAAI,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;oBAClC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC3C,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,sBAAsB;YACxB,CAAC;QACH,CAAC;QAED,gBAAgB;QAChB,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,mBAAmB,CAAC,CAAC;QACjD,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAChB,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,eAAe,CAAC,CAAC;QAC5C,CAAC;QACD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,sBAAsB,CAAC,CAAC;QACtD,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,aAAa,CAAC,CAAC;QAC5C,CAAC;QAED,IAAI,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,8BAA8B,CAAC;QAEjE,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC;YACtC,OAAO,IAAI,YAAY,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACxD,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAC1B,OAAO,IAAI,KAAK,KAAK,CAAC,IAAI,iBAAiB,CAAC;QAC9C,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,8BAA8B;IAEtB,KAAK,CAAC,iBAAiB;QAC7B,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC;IAEO,YAAY;QAClB,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,OAAO;QAErB,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC;;;;;;;;;;;;KAYX,CAAC,CAAC;QAEH,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC;;;;;;;;;;;;;;KAcX,CAAC,CAAC;QAEH,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,wEAAwE,CAAC,CAAC;QACtF,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC;QACnF,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,yEAAyE,CAAC,CAAC;QACvF,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,sEAAsE,CAAC,CAAC;IACtF,CAAC;IAEO,YAAY,CAAC,GAAQ;QAC3B,OAAO;YACL,EAAE,EAAE,GAAG,CAAC,EAAY;YACpB,SAAS,EAAE,GAAG,CAAC,UAAoB;YACnC,OAAO,EAAE,GAAG,CAAC,OAAiB;YAC9B,MAAM,EAAE,GAAG,CAAC,MAAgB;YAC5B,SAAS,EAAE,GAAG,CAAC,UAAoB;YACnC,OAAO,EAAE,GAAG,CAAC,QAA8B;YAC3C,gBAAgB,EAAE,GAAG,CAAC,iBAA2B;YACjD,OAAO,EAAE,GAAG,CAAC,OAA6B;YAC1C,MAAM,EAAE,GAAG,CAAC,MAA8C;SAC3D,CAAC;IACJ,CAAC;IAEO,gBAAgB,CAAC,GAAQ;QAC/B,OAAO;YACL,EAAE,EAAE,GAAG,CAAC,EAAY;YACpB,SAAS,EAAE,GAAG,CAAC,UAAoB;YACnC,OAAO,EAAE,GAAG,CAAC,OAAiB;YAC9B,QAAQ,EAAE,GAAG,CAAC,SAAmB;YACjC,SAAS,EAAE,GAAG,CAAC,UAAoB;YACnC,YAAY,EAAE,GAAG,CAAC,aAAuB;YACzC,GAAG,EAAE,GAAG,CAAC,GAAa;YACtB,SAAS,EAAE,GAAG,CAAC,SAAmB;YAClC,IAAI,EAAE,GAAG,CAAC,IAAW;YACrB,KAAK,EAAE,GAAG,CAAC,KAA2B;SACvC,CAAC;IACJ,CAAC;IAEO,kBAAkB,CAAC,SAAiB;QAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,GAAG,GAAG,SAAS,CAAC;QAE7B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC;QAEzC,IAAI,OAAO,GAAG,CAAC;YAAE,OAAO,UAAU,CAAC;QACnC,IAAI,OAAO,GAAG,EAAE;YAAE,OAAO,GAAG,OAAO,OAAO,CAAC;QAC3C,IAAI,KAAK,GAAG,EAAE;YAAE,OAAO,GAAG,KAAK,OAAO,CAAC;QACvC,IAAI,IAAI,GAAG,CAAC;YAAE,OAAO,GAAG,IAAI,OAAO,CAAC;QAEpC,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,kBAAkB,EAAE,CAAC;IAClD,CAAC;IAEO,kBAAkB,CAAC,IAAY;QACrC,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,MAAM,CAAC,CAAC,OAAO,IAAI,CAAC;YACzB,KAAK,OAAO,CAAC,CAAC,OAAO,IAAI,CAAC;YAC1B,KAAK,SAAS,CAAC,CAAC,OAAO,GAAG,CAAC;YAC3B,KAAK,QAAQ,CAAC,CAAC,OAAO,IAAI,CAAC;YAC3B,OAAO,CAAC,CAAC,OAAO,GAAG,CAAC;QACtB,CAAC;IACH,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,OAAO,IAAI,iBAAiB,CAAC,GAAG,CAAC,CAAC;AACpC,CAAC;AAED,eAAe,iBAAiB,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Session Init Hook Handler (UserPromptSubmit)
3
+ *
4
+ * Initializes a session record when the user submits their first prompt.
5
+ * Captures the initial prompt for context.
6
+ *
7
+ * @module @agentkits/memory/hooks/session-init
8
+ */
9
+ import { NormalizedHookInput, HookResult, EventHandler } from './types.js';
10
+ import { MemoryHookService } from './service.js';
11
+ /**
12
+ * Session Init Hook - UserPromptSubmit Event
13
+ *
14
+ * Called when the user submits a prompt.
15
+ * Creates or updates the session record with the prompt.
16
+ */
17
+ export declare class SessionInitHook implements EventHandler {
18
+ private service;
19
+ constructor(service: MemoryHookService);
20
+ /**
21
+ * Execute the session init hook
22
+ */
23
+ execute(input: NormalizedHookInput): Promise<HookResult>;
24
+ }
25
+ /**
26
+ * Create session init hook handler
27
+ */
28
+ export declare function createSessionInitHook(cwd: string): SessionInitHook;
29
+ export default SessionInitHook;
30
+ //# sourceMappingURL=session-init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-init.d.ts","sourceRoot":"","sources":["../../src/hooks/session-init.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,mBAAmB,EACnB,UAAU,EACV,YAAY,EACb,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD;;;;;GAKG;AACH,qBAAa,eAAgB,YAAW,YAAY;IAClD,OAAO,CAAC,OAAO,CAAoB;gBAEvB,OAAO,EAAE,iBAAiB;IAItC;;OAEG;IACG,OAAO,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC;CA2B/D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAGlE;AAED,eAAe,eAAe,CAAC"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Session Init Hook Handler (UserPromptSubmit)
3
+ *
4
+ * Initializes a session record when the user submits their first prompt.
5
+ * Captures the initial prompt for context.
6
+ *
7
+ * @module @agentkits/memory/hooks/session-init
8
+ */
9
+ import { MemoryHookService } from './service.js';
10
+ /**
11
+ * Session Init Hook - UserPromptSubmit Event
12
+ *
13
+ * Called when the user submits a prompt.
14
+ * Creates or updates the session record with the prompt.
15
+ */
16
+ export class SessionInitHook {
17
+ service;
18
+ constructor(service) {
19
+ this.service = service;
20
+ }
21
+ /**
22
+ * Execute the session init hook
23
+ */
24
+ async execute(input) {
25
+ try {
26
+ // Initialize service
27
+ await this.service.initialize();
28
+ // Initialize or get existing session
29
+ await this.service.initSession(input.sessionId, input.project, input.prompt);
30
+ return {
31
+ continue: true,
32
+ suppressOutput: true,
33
+ };
34
+ }
35
+ catch (error) {
36
+ // Log error but don't block prompt
37
+ console.error('[AgentKits Memory] Session init hook error:', error);
38
+ return {
39
+ continue: true,
40
+ suppressOutput: true,
41
+ error: error instanceof Error ? error.message : 'Unknown error',
42
+ };
43
+ }
44
+ }
45
+ }
46
+ /**
47
+ * Create session init hook handler
48
+ */
49
+ export function createSessionInitHook(cwd) {
50
+ const service = new MemoryHookService(cwd);
51
+ return new SessionInitHook(service);
52
+ }
53
+ export default SessionInitHook;
54
+ //# sourceMappingURL=session-init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-init.js","sourceRoot":"","sources":["../../src/hooks/session-init.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD;;;;;GAKG;AACH,MAAM,OAAO,eAAe;IAClB,OAAO,CAAoB;IAEnC,YAAY,OAA0B;QACpC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,KAA0B;QACtC,IAAI,CAAC;YACH,qBAAqB;YACrB,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YAEhC,qCAAqC;YACrC,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAC5B,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,MAAM,CACb,CAAC;YAEF,OAAO;gBACL,QAAQ,EAAE,IAAI;gBACd,cAAc,EAAE,IAAI;aACrB,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,mCAAmC;YACnC,OAAO,CAAC,KAAK,CAAC,6CAA6C,EAAE,KAAK,CAAC,CAAC;YAEpE,OAAO;gBACL,QAAQ,EAAE,IAAI;gBACd,cAAc,EAAE,IAAI;gBACpB,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;aAChE,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAW;IAC/C,MAAM,OAAO,GAAG,IAAI,iBAAiB,CAAC,GAAG,CAAC,CAAC;IAC3C,OAAO,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC;AACtC,CAAC;AAED,eAAe,eAAe,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Summarize Hook Handler (Stop)
3
+ *
4
+ * Generates a session summary when Claude Code session ends.
5
+ * Uses template-based summarization (no LLM required).
6
+ *
7
+ * @module @agentkits/memory/hooks/summarize
8
+ */
9
+ import { NormalizedHookInput, HookResult, EventHandler } from './types.js';
10
+ import { MemoryHookService } from './service.js';
11
+ /**
12
+ * Summarize Hook - Stop Event
13
+ *
14
+ * Called when a Claude Code session ends.
15
+ * Generates a summary and marks the session as completed.
16
+ */
17
+ export declare class SummarizeHook implements EventHandler {
18
+ private service;
19
+ constructor(service: MemoryHookService);
20
+ /**
21
+ * Execute the summarize hook
22
+ */
23
+ execute(input: NormalizedHookInput): Promise<HookResult>;
24
+ }
25
+ /**
26
+ * Create summarize hook handler
27
+ */
28
+ export declare function createSummarizeHook(cwd: string): SummarizeHook;
29
+ export default SummarizeHook;
30
+ //# sourceMappingURL=summarize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summarize.d.ts","sourceRoot":"","sources":["../../src/hooks/summarize.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,mBAAmB,EACnB,UAAU,EACV,YAAY,EACb,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD;;;;;GAKG;AACH,qBAAa,aAAc,YAAW,YAAY;IAChD,OAAO,CAAC,OAAO,CAAoB;gBAEvB,OAAO,EAAE,iBAAiB;IAItC;;OAEG;IACG,OAAO,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC;CA8C/D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAG9D;AAED,eAAe,aAAa,CAAC"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Summarize Hook Handler (Stop)
3
+ *
4
+ * Generates a session summary when Claude Code session ends.
5
+ * Uses template-based summarization (no LLM required).
6
+ *
7
+ * @module @agentkits/memory/hooks/summarize
8
+ */
9
+ import { MemoryHookService } from './service.js';
10
+ /**
11
+ * Summarize Hook - Stop Event
12
+ *
13
+ * Called when a Claude Code session ends.
14
+ * Generates a summary and marks the session as completed.
15
+ */
16
+ export class SummarizeHook {
17
+ service;
18
+ constructor(service) {
19
+ this.service = service;
20
+ }
21
+ /**
22
+ * Execute the summarize hook
23
+ */
24
+ async execute(input) {
25
+ try {
26
+ // Initialize service
27
+ await this.service.initialize();
28
+ // Check if session exists
29
+ const session = this.service.getSession(input.sessionId);
30
+ if (!session) {
31
+ // No session to summarize
32
+ return {
33
+ continue: true,
34
+ suppressOutput: true,
35
+ };
36
+ }
37
+ // Generate summary from observations
38
+ const summary = await this.service.generateSummary(input.sessionId);
39
+ // Complete the session with summary
40
+ await this.service.completeSession(input.sessionId, summary);
41
+ // Shutdown service
42
+ await this.service.shutdown();
43
+ return {
44
+ continue: true,
45
+ suppressOutput: true,
46
+ };
47
+ }
48
+ catch (error) {
49
+ // Log error but don't block session end
50
+ console.error('[AgentKits Memory] Summarize hook error:', error);
51
+ // Try to shutdown anyway
52
+ try {
53
+ await this.service.shutdown();
54
+ }
55
+ catch {
56
+ // Ignore shutdown errors
57
+ }
58
+ return {
59
+ continue: true,
60
+ suppressOutput: true,
61
+ error: error instanceof Error ? error.message : 'Unknown error',
62
+ };
63
+ }
64
+ }
65
+ }
66
+ /**
67
+ * Create summarize hook handler
68
+ */
69
+ export function createSummarizeHook(cwd) {
70
+ const service = new MemoryHookService(cwd);
71
+ return new SummarizeHook(service);
72
+ }
73
+ export default SummarizeHook;
74
+ //# sourceMappingURL=summarize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summarize.js","sourceRoot":"","sources":["../../src/hooks/summarize.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD;;;;;GAKG;AACH,MAAM,OAAO,aAAa;IAChB,OAAO,CAAoB;IAEnC,YAAY,OAA0B;QACpC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,KAA0B;QACtC,IAAI,CAAC;YACH,qBAAqB;YACrB,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YAEhC,0BAA0B;YAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACzD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,0BAA0B;gBAC1B,OAAO;oBACL,QAAQ,EAAE,IAAI;oBACd,cAAc,EAAE,IAAI;iBACrB,CAAC;YACJ,CAAC;YAED,qCAAqC;YACrC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAEpE,oCAAoC;YACpC,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAE7D,mBAAmB;YACnB,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YAE9B,OAAO;gBACL,QAAQ,EAAE,IAAI;gBACd,cAAc,EAAE,IAAI;aACrB,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,wCAAwC;YACxC,OAAO,CAAC,KAAK,CAAC,0CAA0C,EAAE,KAAK,CAAC,CAAC;YAEjE,yBAAyB;YACzB,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YAChC,CAAC;YAAC,MAAM,CAAC;gBACP,yBAAyB;YAC3B,CAAC;YAED,OAAO;gBACL,QAAQ,EAAE,IAAI;gBACd,cAAc,EAAE,IAAI;gBACpB,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;aAChE,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAW;IAC7C,MAAM,OAAO,GAAG,IAAI,iBAAiB,CAAC,GAAG,CAAC,CAAC;IAC3C,OAAO,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;AACpC,CAAC;AAED,eAAe,aAAa,CAAC"}