@steno-ai/mcp 0.1.12 → 0.1.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/dist/init.js +14 -0
- package/dist/init.js.map +1 -1
- package/dist/local-server.d.ts +1 -0
- package/dist/local-server.d.ts.map +1 -1
- package/dist/local-server.js +185 -91
- package/dist/local-server.js.map +1 -1
- package/dist/local.js +3 -0
- package/dist/local.js.map +1 -1
- package/package.json +1 -1
- package/src/init.ts +14 -0
- package/src/local-server.ts +210 -95
- package/src/local.ts +3 -0
package/README.md
CHANGED
|
@@ -45,6 +45,7 @@ That's it. Your data stays in YOUR Supabase project. Nothing is shared.
|
|
|
45
45
|
| `steno_update_status` | Updates priority/roadmap item status (not_started, in_progress, done, blocked) |
|
|
46
46
|
| `steno_feedback` | Rates whether a recalled memory was useful |
|
|
47
47
|
| `steno_stats` | Shows memory statistics |
|
|
48
|
+
| `steno_end_session` | Ends current session, generates summary, starts fresh next time |
|
|
48
49
|
|
|
49
50
|
## How it works
|
|
50
51
|
|
|
@@ -101,6 +102,7 @@ Then run the migrations manually — see [migrations folder](https://github.com/
|
|
|
101
102
|
| `OPENAI_API_KEY` | Yes | For LLM extraction and embeddings |
|
|
102
103
|
| `PERPLEXITY_API_KEY` | No | Cheaper embeddings ($0.03/1M tokens vs $0.13) |
|
|
103
104
|
| `STENO_SCOPE_ID` | No | Scope identifier (default: "default") |
|
|
105
|
+
| `STENO_SESSION_TIMEOUT_MS` | No | Session auto-end timeout in ms (default: 1800000 = 30 min) |
|
|
104
106
|
|
|
105
107
|
## For Developers
|
|
106
108
|
|
package/dist/init.js
CHANGED
|
@@ -403,6 +403,20 @@ const MIGRATIONS = [
|
|
|
403
403
|
`CREATE OR REPLACE FUNCTION increment_trigger_fired(p_tenant_id UUID, p_trigger_id UUID)
|
|
404
404
|
RETURNS VOID LANGUAGE plpgsql AS $$ BEGIN UPDATE triggers SET times_fired = times_fired + 1,
|
|
405
405
|
last_fired_at = NOW(), updated_at = NOW() WHERE tenant_id = p_tenant_id AND id = p_trigger_id; END; $$;`,
|
|
406
|
+
// Session Messages
|
|
407
|
+
`CREATE TABLE IF NOT EXISTS session_messages (
|
|
408
|
+
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
|
409
|
+
session_id UUID NOT NULL REFERENCES sessions(id) ON DELETE CASCADE,
|
|
410
|
+
tenant_id UUID NOT NULL REFERENCES tenants(id) ON DELETE CASCADE,
|
|
411
|
+
role TEXT NOT NULL DEFAULT 'user',
|
|
412
|
+
content TEXT NOT NULL,
|
|
413
|
+
turn_number INTEGER NOT NULL,
|
|
414
|
+
extraction_id UUID,
|
|
415
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
416
|
+
);`,
|
|
417
|
+
`CREATE INDEX IF NOT EXISTS idx_session_messages_session ON session_messages(session_id, turn_number);`,
|
|
418
|
+
`CREATE INDEX IF NOT EXISTS idx_session_messages_unextracted ON session_messages(session_id) WHERE extraction_id IS NULL;`,
|
|
419
|
+
`CREATE INDEX IF NOT EXISTS idx_session_messages_tenant ON session_messages(tenant_id);`,
|
|
406
420
|
// Default tenant
|
|
407
421
|
`INSERT INTO tenants (id, name, slug, plan) VALUES ('00000000-0000-0000-0000-000000000001', 'Default', 'default', 'enterprise') ON CONFLICT DO NOTHING;`,
|
|
408
422
|
];
|
package/dist/init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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"}
|
package/dist/local-server.d.ts
CHANGED
|
@@ -14,6 +14,7 @@ export interface LocalServerConfig {
|
|
|
14
14
|
embeddingModel: string;
|
|
15
15
|
embeddingDim: number;
|
|
16
16
|
domainEntityTypes?: import('@steno-ai/engine').DomainEntityType[];
|
|
17
|
+
sessionTimeoutMs?: number;
|
|
17
18
|
}
|
|
18
19
|
export declare function createLocalServer(config: LocalServerConfig): McpServer;
|
|
19
20
|
//# sourceMappingURL=local-server.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-server.d.ts","sourceRoot":"","sources":["../src/local-server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAErF,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,cAAc,CAAC;IACxB,SAAS,EAAE,gBAAgB,CAAC;IAC5B,QAAQ,EAAE,UAAU,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,OAAO,kBAAkB,EAAE,gBAAgB,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"local-server.d.ts","sourceRoot":"","sources":["../src/local-server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAErF,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,cAAc,CAAC;IACxB,SAAS,EAAE,gBAAgB,CAAC;IAC5B,QAAQ,EAAE,UAAU,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,OAAO,kBAAkB,EAAE,gBAAgB,EAAE,CAAC;IAClE,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAkDD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,SAAS,CAwnBtE"}
|
package/dist/local-server.js
CHANGED
|
@@ -6,6 +6,7 @@ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
|
6
6
|
import { z } from 'zod';
|
|
7
7
|
const FLUSH_DELAY_MS = 30_000; // 30 seconds of inactivity triggers flush
|
|
8
8
|
const MAX_BUFFER_SIZE = 5; // flush after 5 messages
|
|
9
|
+
const DEFAULT_SESSION_TIMEOUT_MS = 30 * 60 * 1000; // 30 minutes
|
|
9
10
|
// In-memory embedding cache — survives across tool calls within the same MCP session
|
|
10
11
|
let _embeddingCache = null;
|
|
11
12
|
function getEmbeddingCache() {
|
|
@@ -81,30 +82,43 @@ CRITICAL RULES:
|
|
|
81
82
|
}
|
|
82
83
|
return _getOrCreateActiveSession;
|
|
83
84
|
}
|
|
85
|
+
let _endSession = null;
|
|
86
|
+
async function getEndSession() {
|
|
87
|
+
if (!_endSession) {
|
|
88
|
+
const mod = await import('@steno-ai/engine');
|
|
89
|
+
_endSession = mod.endSession;
|
|
90
|
+
}
|
|
91
|
+
return _endSession;
|
|
92
|
+
}
|
|
84
93
|
// ---------------------------------------------------------------------------
|
|
85
|
-
//
|
|
94
|
+
// Active sessions — track pending message counts, flush periodically
|
|
86
95
|
// ---------------------------------------------------------------------------
|
|
87
|
-
const
|
|
96
|
+
const activeSessions = new Map();
|
|
88
97
|
/** Build a buffer key from scope parameters */
|
|
89
98
|
function bufferKey() {
|
|
90
99
|
return `${config.tenantId}:${config.scope}:${config.scopeId}`;
|
|
91
100
|
}
|
|
92
|
-
/** Flush the session
|
|
93
|
-
async function
|
|
94
|
-
const
|
|
95
|
-
if (!
|
|
101
|
+
/** Flush the session: read unextracted messages from DB, run extraction pipeline */
|
|
102
|
+
async function flushSession(key) {
|
|
103
|
+
const active = activeSessions.get(key);
|
|
104
|
+
if (!active)
|
|
96
105
|
return;
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
buf.messages = [];
|
|
101
|
-
if (buf.flushTimer) {
|
|
102
|
-
clearTimeout(buf.flushTimer);
|
|
103
|
-
buf.flushTimer = null;
|
|
106
|
+
if (active.flushTimer) {
|
|
107
|
+
clearTimeout(active.flushTimer);
|
|
108
|
+
active.flushTimer = null;
|
|
104
109
|
}
|
|
105
|
-
const fullText = messages.join('\n---\n');
|
|
106
|
-
console.error(`[steno] Flushing session buffer: ${messages.length} messages, sessionId=${sessionId}`);
|
|
107
110
|
try {
|
|
111
|
+
const messages = await config.storage.getSessionMessages(config.tenantId, active.sessionId, { unextractedOnly: true });
|
|
112
|
+
if (messages.length === 0) {
|
|
113
|
+
active.pendingCount = 0;
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
const conversationLines = messages.map(m => {
|
|
117
|
+
const time = m.createdAt.toISOString().replace('T', ' ').slice(0, 19);
|
|
118
|
+
return `[${m.role} @ ${time}]: ${m.content}`;
|
|
119
|
+
});
|
|
120
|
+
const formattedText = conversationLines.join('\n\n');
|
|
121
|
+
console.error(`[steno] Flushing session: ${messages.length} messages, sessionId=${active.sessionId}`);
|
|
108
122
|
const runPipeline = await getPipeline();
|
|
109
123
|
const result = await runPipeline({
|
|
110
124
|
storage: config.storage,
|
|
@@ -118,34 +132,35 @@ CRITICAL RULES:
|
|
|
118
132
|
tenantId: config.tenantId,
|
|
119
133
|
scope: config.scope,
|
|
120
134
|
scopeId: config.scopeId,
|
|
121
|
-
sessionId,
|
|
122
|
-
inputType: '
|
|
123
|
-
data:
|
|
135
|
+
sessionId: active.sessionId,
|
|
136
|
+
inputType: 'conversation',
|
|
137
|
+
data: formattedText,
|
|
124
138
|
});
|
|
139
|
+
await config.storage.markMessagesExtracted(messages.map(m => m.id), result.extractionId);
|
|
140
|
+
active.pendingCount = 0;
|
|
125
141
|
console.error(`[steno] Session flush done: ${result.factsCreated} facts, ${result.entitiesCreated} entities, ${result.edgesCreated} edges`);
|
|
126
142
|
}
|
|
127
143
|
catch (err) {
|
|
128
|
-
|
|
144
|
+
// pendingCount intentionally NOT reset on error — next scheduleFlush will retry
|
|
145
|
+
// markMessagesExtracted was not called, so messages remain unextracted in DB
|
|
146
|
+
console.error('[steno] Session flush error:', err?.message ?? err);
|
|
129
147
|
}
|
|
130
148
|
}
|
|
131
149
|
/** Schedule a flush after the inactivity delay, or flush immediately if buffer is full */
|
|
132
150
|
function scheduleFlush(key) {
|
|
133
|
-
const
|
|
134
|
-
if (!
|
|
151
|
+
const active = activeSessions.get(key);
|
|
152
|
+
if (!active)
|
|
135
153
|
return;
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
buf.flushTimer = null;
|
|
154
|
+
if (active.flushTimer) {
|
|
155
|
+
clearTimeout(active.flushTimer);
|
|
156
|
+
active.flushTimer = null;
|
|
140
157
|
}
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
void flushBuffer(key);
|
|
158
|
+
if (active.pendingCount >= MAX_BUFFER_SIZE) {
|
|
159
|
+
void flushSession(key);
|
|
144
160
|
return;
|
|
145
161
|
}
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
void flushBuffer(key);
|
|
162
|
+
active.flushTimer = setTimeout(() => {
|
|
163
|
+
void flushSession(key);
|
|
149
164
|
}, FLUSH_DELAY_MS);
|
|
150
165
|
}
|
|
151
166
|
// ─── REMEMBER ───
|
|
@@ -157,18 +172,36 @@ CRITICAL RULES:
|
|
|
157
172
|
if (!memoryText) {
|
|
158
173
|
return { content: [{ type: 'text', text: 'Error: provide content or text' }] };
|
|
159
174
|
}
|
|
160
|
-
// ── Session-based buffering ──
|
|
161
|
-
// Accumulate messages within a session. Extraction runs when the buffer
|
|
162
|
-
// is full (MAX_BUFFER_SIZE) or after an inactivity timeout (FLUSH_DELAY_MS).
|
|
163
175
|
const key = bufferKey();
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
176
|
+
const sessionTimeout = config.sessionTimeoutMs ?? DEFAULT_SESSION_TIMEOUT_MS;
|
|
177
|
+
let active = activeSessions.get(key);
|
|
178
|
+
// Check if existing session is stale
|
|
179
|
+
if (active) {
|
|
180
|
+
try {
|
|
181
|
+
const messages = await config.storage.getSessionMessages(config.tenantId, active.sessionId, {});
|
|
182
|
+
if (messages.length > 0) {
|
|
183
|
+
const lastMsg = messages[messages.length - 1];
|
|
184
|
+
if (Date.now() - lastMsg.createdAt.getTime() > sessionTimeout) {
|
|
185
|
+
console.error(`[steno] Session ${active.sessionId.slice(0, 8)} stale (${Math.round((Date.now() - lastMsg.createdAt.getTime()) / 60000)}min), ending`);
|
|
186
|
+
try {
|
|
187
|
+
const endSessionFn = await getEndSession();
|
|
188
|
+
await endSessionFn(config.storage, config.cheapLLM, config.tenantId, active.sessionId);
|
|
189
|
+
}
|
|
190
|
+
catch (endErr) {
|
|
191
|
+
console.error('[steno] Failed to end stale session:', endErr?.message ?? endErr);
|
|
192
|
+
}
|
|
193
|
+
activeSessions.delete(key);
|
|
194
|
+
active = undefined;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
catch { /* continue with existing session */ }
|
|
199
|
+
}
|
|
200
|
+
// Get or create session
|
|
201
|
+
if (!active) {
|
|
167
202
|
let sessionId;
|
|
168
203
|
try {
|
|
169
204
|
const getOrCreate = await getSessionManager();
|
|
170
|
-
// SessionScope excludes 'session', but config.scope might be 'session'.
|
|
171
|
-
// Treat 'session' scope as 'user' for session tracking purposes.
|
|
172
205
|
const sessionScope = config.scope === 'session' ? 'user' : config.scope;
|
|
173
206
|
const session = await getOrCreate(config.storage, config.tenantId, sessionScope, config.scopeId);
|
|
174
207
|
sessionId = session.id;
|
|
@@ -177,40 +210,75 @@ CRITICAL RULES:
|
|
|
177
210
|
console.error('[steno] Failed to create session, using ephemeral ID:', err?.message ?? err);
|
|
178
211
|
sessionId = crypto.randomUUID();
|
|
179
212
|
}
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
};
|
|
186
|
-
|
|
213
|
+
active = { sessionId, pendingCount: 0, flushTimer: null };
|
|
214
|
+
activeSessions.set(key, active);
|
|
215
|
+
}
|
|
216
|
+
// Store message in DB (durable)
|
|
217
|
+
try {
|
|
218
|
+
const messages = await config.storage.getSessionMessages(config.tenantId, active.sessionId, {});
|
|
219
|
+
const turnNumber = messages.length;
|
|
220
|
+
await config.storage.addSessionMessage({
|
|
221
|
+
id: crypto.randomUUID(),
|
|
222
|
+
sessionId: active.sessionId,
|
|
223
|
+
tenantId: config.tenantId,
|
|
224
|
+
role: 'user',
|
|
225
|
+
content: memoryText,
|
|
226
|
+
turnNumber,
|
|
227
|
+
});
|
|
228
|
+
active.pendingCount++;
|
|
229
|
+
}
|
|
230
|
+
catch (err) {
|
|
231
|
+
console.error('[steno] Failed to store session message:', err?.message ?? err);
|
|
232
|
+
return { content: [{ type: 'text', text: `Error storing message: ${err?.message}` }] };
|
|
187
233
|
}
|
|
188
|
-
// Buffer the message
|
|
189
|
-
buf.messages.push(memoryText);
|
|
190
|
-
buf.lastActivity = new Date();
|
|
191
|
-
// ALL messages go through the full pipeline via session buffer (no fast path).
|
|
192
|
-
// Full pipeline gives us: LLM extraction, entity/edge creation,
|
|
193
|
-
// contextual embeddings, temporal grounding, dedup — everything.
|
|
194
|
-
// Returns immediately — extraction happens in the background when flushed.
|
|
195
234
|
scheduleFlush(key);
|
|
196
|
-
const pending = buf.messages.length;
|
|
197
235
|
return {
|
|
198
|
-
content: [{
|
|
236
|
+
content: [{
|
|
237
|
+
type: 'text',
|
|
238
|
+
text: `Stored in session ${active.sessionId.slice(0, 8)} (${active.pendingCount}/${MAX_BUFFER_SIZE} pending). Extraction runs on flush.`,
|
|
239
|
+
}],
|
|
199
240
|
};
|
|
200
241
|
});
|
|
201
242
|
// ─── FLUSH ───
|
|
202
243
|
server.tool('steno_flush', 'Force extraction of all buffered session messages. Use before searching if you just stored information and need it immediately available.', {}, async () => {
|
|
203
244
|
const key = bufferKey();
|
|
204
|
-
const
|
|
205
|
-
if (!
|
|
245
|
+
const active = activeSessions.get(key);
|
|
246
|
+
if (!active || active.pendingCount === 0) {
|
|
206
247
|
return { content: [{ type: 'text', text: 'No buffered messages to flush.' }] };
|
|
207
248
|
}
|
|
208
|
-
const count =
|
|
209
|
-
await
|
|
249
|
+
const count = active.pendingCount;
|
|
250
|
+
await flushSession(key);
|
|
210
251
|
return {
|
|
211
252
|
content: [{ type: 'text', text: `Flushed ${count} buffered messages. Extraction complete.` }],
|
|
212
253
|
};
|
|
213
254
|
});
|
|
255
|
+
// ─── END SESSION ───
|
|
256
|
+
server.tool('steno_end_session', 'Explicitly end the current session. Flushes pending messages, generates a session summary, and starts a fresh session on next remember. Use before long breaks or when switching topics.', {}, async () => {
|
|
257
|
+
const key = bufferKey();
|
|
258
|
+
const active = activeSessions.get(key);
|
|
259
|
+
if (!active) {
|
|
260
|
+
return { content: [{ type: 'text', text: 'No active session.' }] };
|
|
261
|
+
}
|
|
262
|
+
if (active.pendingCount > 0) {
|
|
263
|
+
await flushSession(key);
|
|
264
|
+
}
|
|
265
|
+
try {
|
|
266
|
+
const endSessionFn = await getEndSession();
|
|
267
|
+
const ended = await endSessionFn(config.storage, config.cheapLLM, config.tenantId, active.sessionId);
|
|
268
|
+
activeSessions.delete(key);
|
|
269
|
+
const summary = ended.summary || 'No summary generated.';
|
|
270
|
+
const topics = ended.topics?.join(', ') || 'none';
|
|
271
|
+
return {
|
|
272
|
+
content: [{
|
|
273
|
+
type: 'text',
|
|
274
|
+
text: `Session ended.\nSummary: ${summary}\nTopics: ${topics}`,
|
|
275
|
+
}],
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
catch (err) {
|
|
279
|
+
return { content: [{ type: 'text', text: `Error ending session: ${err?.message ?? err}` }] };
|
|
280
|
+
}
|
|
281
|
+
});
|
|
214
282
|
// ─── RECALL ───
|
|
215
283
|
server.tool('steno_recall', 'ALWAYS search this memory before answering questions about the user, their life, work, projects, preferences, people they know, companies, events, or anything personal. This contains the user\'s persistent memory across all conversations. Search here FIRST before using web search or saying you don\'t know.', {
|
|
216
284
|
query: z.string().describe('What to search for in memory'),
|
|
@@ -218,9 +286,9 @@ CRITICAL RULES:
|
|
|
218
286
|
}, async ({ query, limit }) => {
|
|
219
287
|
// Auto-flush any pending buffered messages before searching
|
|
220
288
|
const key = bufferKey();
|
|
221
|
-
const
|
|
222
|
-
if (
|
|
223
|
-
await
|
|
289
|
+
const active = activeSessions.get(key);
|
|
290
|
+
if (active && active.pendingCount > 0) {
|
|
291
|
+
await flushSession(key);
|
|
224
292
|
}
|
|
225
293
|
const searchFn = await getSearch();
|
|
226
294
|
const results = await searchFn({ storage: config.storage, embedding: config.embedding, cache: embeddingCacheAdapter }, {
|
|
@@ -266,62 +334,88 @@ CRITICAL RULES:
|
|
|
266
334
|
}
|
|
267
335
|
}
|
|
268
336
|
// Build dependency map — ONE batch query for ALL dependency edges in this tenant
|
|
269
|
-
|
|
337
|
+
// Include ALL priority fact IDs so edges for injected priorities aren't skipped
|
|
338
|
+
const factIdSet = new Set(results.results.map(r => r.fact.id));
|
|
339
|
+
for (const [factId] of priorityLabels)
|
|
340
|
+
factIdSet.add(factId);
|
|
270
341
|
const depMap = new Map();
|
|
342
|
+
function ensureDepEntry(id) {
|
|
343
|
+
if (!depMap.has(id))
|
|
344
|
+
depMap.set(id, { blocks: [], blockedBy: [], deadlines: [] });
|
|
345
|
+
return depMap.get(id);
|
|
346
|
+
}
|
|
271
347
|
try {
|
|
272
|
-
// Query ALL precedes/depends_on/deadline edges — not just for these fact_ids
|
|
273
|
-
// because edges reference sourceFactId/targetFactId in metadata, not in fact_id column
|
|
274
348
|
const { data: depEdges } = await config.storage.client
|
|
275
349
|
.from('edges')
|
|
276
350
|
.select('relation, fact_id, metadata')
|
|
277
351
|
.eq('tenant_id', config.tenantId)
|
|
278
352
|
.in('relation', ['precedes', 'depends_on', 'deadline']);
|
|
279
353
|
if (depEdges) {
|
|
354
|
+
// Build a reverse lookup: factId → Set of factIds it blocks (from precedes edges)
|
|
355
|
+
const blocksLookup = new Map();
|
|
280
356
|
for (const edge of depEdges) {
|
|
281
357
|
const edgeMeta = edge.metadata;
|
|
282
358
|
const sourceFactId = edgeMeta?.sourceFactId || edge.fact_id;
|
|
283
359
|
const targetFactId = edgeMeta?.targetFactId;
|
|
284
|
-
// Only process edges involving facts in our result set
|
|
285
|
-
|
|
286
|
-
const targetInResults = targetFactId ? factIds.includes(targetFactId) : false;
|
|
287
|
-
if (!sourceInResults && !targetInResults)
|
|
360
|
+
// Only process edges involving facts in our result set OR priority facts
|
|
361
|
+
if (!factIdSet.has(sourceFactId) && !(targetFactId && factIdSet.has(targetFactId)))
|
|
288
362
|
continue;
|
|
289
|
-
if (!depMap.has(sourceFactId))
|
|
290
|
-
depMap.set(sourceFactId, { blocks: [], blockedBy: [], deadlines: [] });
|
|
291
363
|
if (edge.relation === 'precedes' && targetFactId) {
|
|
292
|
-
|
|
293
|
-
|
|
364
|
+
// Source blocks target — index BOTH directions
|
|
365
|
+
const sourceLabel = priorityLabels.get(targetFactId) || 'another priority';
|
|
366
|
+
ensureDepEntry(sourceFactId).blocks.push(sourceLabel);
|
|
367
|
+
const targetLabel = priorityLabels.get(sourceFactId) || 'another priority';
|
|
368
|
+
ensureDepEntry(targetFactId).blockedBy.push(targetLabel);
|
|
369
|
+
// Track for deadline cascade
|
|
370
|
+
if (!blocksLookup.has(sourceFactId))
|
|
371
|
+
blocksLookup.set(sourceFactId, new Set());
|
|
372
|
+
blocksLookup.get(sourceFactId).add(targetFactId);
|
|
294
373
|
}
|
|
295
374
|
if (edge.relation === 'depends_on' && targetFactId) {
|
|
296
375
|
const label = priorityLabels.get(targetFactId) || 'another priority';
|
|
297
|
-
|
|
376
|
+
ensureDepEntry(sourceFactId).blockedBy.push(label);
|
|
377
|
+
// Reverse: target blocks source
|
|
378
|
+
const reverseLabel = priorityLabels.get(sourceFactId) || 'another priority';
|
|
379
|
+
ensureDepEntry(targetFactId).blocks.push(reverseLabel);
|
|
298
380
|
}
|
|
299
381
|
if (edge.relation === 'deadline') {
|
|
300
382
|
const deadline = edgeMeta?.deadline;
|
|
301
383
|
if (deadline) {
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
384
|
+
ensureDepEntry(sourceFactId).deadlines.push(deadline);
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
// Deduplicate blocks/blockedBy (precedes + depends_on can create duplicates)
|
|
389
|
+
for (const [, deps] of depMap) {
|
|
390
|
+
deps.blocks = [...new Set(deps.blocks)];
|
|
391
|
+
deps.blockedBy = [...new Set(deps.blockedBy)];
|
|
392
|
+
}
|
|
393
|
+
// Cascade deadlines: if A blocks B and B has a deadline, A gets it too
|
|
394
|
+
for (const [factId, targets] of blocksLookup) {
|
|
395
|
+
const sourceDeps = depMap.get(factId);
|
|
396
|
+
if (!sourceDeps || sourceDeps.deadlines.length > 0)
|
|
397
|
+
continue;
|
|
398
|
+
for (const targetId of targets) {
|
|
399
|
+
const targetDeps = depMap.get(targetId);
|
|
400
|
+
if (targetDeps) {
|
|
401
|
+
for (const dl of targetDeps.deadlines) {
|
|
402
|
+
if (!dl.includes('cascaded') && !sourceDeps.deadlines.includes(dl)) {
|
|
403
|
+
sourceDeps.deadlines.push(dl + ' (cascaded)');
|
|
308
404
|
}
|
|
309
405
|
}
|
|
310
406
|
}
|
|
311
407
|
}
|
|
312
408
|
}
|
|
313
|
-
// Second pass: cascade
|
|
314
|
-
// If A depends_on B, and B has a deadline, A implicitly has that deadline
|
|
409
|
+
// Second pass: cascade through depends_on — if A depends_on B and A has deadline, B inherits
|
|
315
410
|
for (const [factId, deps] of depMap) {
|
|
316
|
-
if (deps.deadlines.length
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
}
|
|
411
|
+
if (deps.deadlines.length > 0)
|
|
412
|
+
continue;
|
|
413
|
+
for (const blockLabel of deps.blocks) {
|
|
414
|
+
for (const [otherId, otherDeps] of depMap) {
|
|
415
|
+
if (priorityLabels.get(otherId) === blockLabel && otherDeps.deadlines.length > 0) {
|
|
416
|
+
for (const dl of otherDeps.deadlines) {
|
|
417
|
+
if (!dl.includes('cascaded') && !dl.includes('implicit') && !deps.deadlines.includes(dl)) {
|
|
418
|
+
deps.deadlines.push(dl + ' (implicit — blocks deadline item)');
|
|
325
419
|
}
|
|
326
420
|
}
|
|
327
421
|
}
|
package/dist/local-server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-server.js","sourceRoot":"","sources":["../src/local-server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"local-server.js","sourceRoot":"","sources":["../src/local-server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAyBxB,MAAM,cAAc,GAAG,MAAM,CAAC,CAAC,0CAA0C;AACzE,MAAM,eAAe,GAAG,CAAC,CAAC,CAAK,yBAAyB;AACxD,MAAM,0BAA0B,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,aAAa;AAEhE,qFAAqF;AACrF,IAAI,eAAe,GAA4D,IAAI,CAAC;AACpF,SAAS,iBAAiB;IACxB,IAAI,CAAC,eAAe;QAAE,eAAe,GAAG,IAAI,GAAG,EAAE,CAAC;IAClD,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,kEAAkE;AAClE,MAAM,qBAAqB,GAAG;IAC5B,KAAK,CAAC,GAAG,CAAI,GAAW;QACtB,MAAM,KAAK,GAAG,iBAAiB,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QACxB,kBAAkB;QAClB,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC;YACpC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAClB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,KAAK,CAAC,SAAyB,CAAC;IACzC,CAAC;IACD,KAAK,CAAC,GAAG,CAAI,GAAW,EAAE,KAAQ;QAChC,MAAM,KAAK,GAAG,iBAAiB,EAAE,CAAC;QAClC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,KAA4B,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC5E,4DAA4D;QAC5D,IAAI,KAAK,CAAC,IAAI,GAAG,GAAG,EAAE,CAAC;YACrB,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YACpF,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM;gBAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IACD,KAAK,CAAC,GAAG,CAAC,GAAW,IAAmB,iBAAiB,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC1E,KAAK,CAAC,IAAI,KAAsB,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3C,KAAK,CAAC,MAAM,KAAmB,CAAC;IAChC,KAAK,CAAC,IAAI,KAAuB,OAAO,IAAI,CAAC,CAAC,CAAC;CAChD,CAAC;AAEF,MAAM,UAAU,iBAAiB,CAAC,MAAyB;IACzD,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,OAAO;QAChB,GAAI,EAAE,YAAY,EAAE;;;;;;;;8HAQsG,EAAU;KACrI,CAAC,CAAC;IAEH,wDAAwD;IACxD,IAAI,OAAO,GAAoD,IAAI,CAAC;IACpE,IAAI,SAAS,GAAmE,IAAI,CAAC;IACrF,IAAI,yBAAyB,GAAsE,IAAI,CAAC;IAExG,KAAK,UAAU,SAAS;QACtB,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;YAC7C,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC;QACvB,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,UAAU,WAAW;QACxB,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;YAC7C,SAAS,GAAG,GAAG,CAAC,qBAAqB,CAAC;QACxC,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,KAAK,UAAU,iBAAiB;QAC9B,IAAI,CAAC,yBAAyB,EAAE,CAAC;YAC/B,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;YAC7C,yBAAyB,GAAG,GAAG,CAAC,wBAAwB,CAAC;QAC3D,CAAC;QACD,OAAO,yBAAyB,CAAC;IACnC,CAAC;IAED,IAAI,WAAW,GAAwD,IAAI,CAAC;IAE5E,KAAK,UAAU,aAAa;QAC1B,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;YAC7C,WAAW,GAAG,GAAG,CAAC,UAAU,CAAC;QAC/B,CAAC;QACD,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,8EAA8E;IAC9E,qEAAqE;IACrE,8EAA8E;IAC9E,MAAM,cAAc,GAAG,IAAI,GAAG,EAAyB,CAAC;IAExD,+CAA+C;IAC/C,SAAS,SAAS;QAChB,OAAO,GAAG,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;IAChE,CAAC;IAED,oFAAoF;IACpF,KAAK,UAAU,YAAY,CAAC,GAAW;QACrC,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,CAAC,MAAM;YAAE,OAAO;QAEpB,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YACtB,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAChC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;QAC3B,CAAC;QAED,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,kBAAkB,CACtD,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,SAAS,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,CAC7D,CAAC;YACF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC;gBACxB,OAAO;YACT,CAAC;YAED,MAAM,iBAAiB,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;gBACzC,MAAM,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACtE,OAAO,IAAI,CAAC,CAAC,IAAI,MAAM,IAAI,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC;YAC/C,CAAC,CAAC,CAAC;YACH,MAAM,aAAa,GAAG,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAErD,OAAO,CAAC,KAAK,CAAC,6BAA6B,QAAQ,CAAC,MAAM,wBAAwB,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;YAEtG,MAAM,WAAW,GAAG,MAAM,WAAW,EAAE,CAAC;YACxC,MAAM,MAAM,GAAG,MAAM,WAAW,CAC9B;gBACE,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,cAAc,EAAE,MAAM,CAAC,cAAc;gBACrC,YAAY,EAAE,MAAM,CAAC,YAAY;gBACjC,cAAc,EAAE,MAAM;gBACtB,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;aAC5C,EACD;gBACE,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,SAAS,EAAE,cAAc;gBACzB,IAAI,EAAE,aAAa;aACpB,CACF,CAAC;YAEF,MAAM,MAAM,CAAC,OAAO,CAAC,qBAAqB,CACxC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EACvB,MAAM,CAAC,YAAY,CACpB,CAAC;YACF,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC;YAExB,OAAO,CAAC,KAAK,CAAC,+BAA+B,MAAM,CAAC,YAAY,WAAW,MAAM,CAAC,eAAe,cAAc,MAAM,CAAC,YAAY,QAAQ,CAAC,CAAC;QAC9I,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,gFAAgF;YAChF,6EAA6E;YAC7E,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,GAAG,EAAE,OAAO,IAAI,GAAG,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IAED,0FAA0F;IAC1F,SAAS,aAAa,CAAC,GAAW;QAChC,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,CAAC,MAAM;YAAE,OAAO;QAEpB,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YACtB,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAChC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;QAC3B,CAAC;QAED,IAAI,MAAM,CAAC,YAAY,IAAI,eAAe,EAAE,CAAC;YAC3C,KAAK,YAAY,CAAC,GAAG,CAAC,CAAC;YACvB,OAAO;QACT,CAAC;QAED,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC,GAAG,EAAE;YAClC,KAAK,YAAY,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC,EAAE,cAAc,CAAC,CAAC;IACrB,CAAC;IAED,mBAAmB;IACnB,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,oSAAoS,EACpS;QACE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QAC3D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;KAC7E,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC;QAC7C,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,gCAAgC,EAAE,CAAC,EAAE,CAAC;QAC1F,CAAC;QAED,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;QACxB,MAAM,cAAc,GAAG,MAAM,CAAC,gBAAgB,IAAI,0BAA0B,CAAC;QAC7E,IAAI,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAErC,qCAAqC;QACrC,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,kBAAkB,CACtD,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,SAAS,EAAE,EAAE,CACtC,CAAC;gBACF,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACxB,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC;oBAC/C,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,cAAc,EAAE,CAAC;wBAC9D,OAAO,CAAC,KAAK,CAAC,mBAAmB,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC;wBACtJ,IAAI,CAAC;4BACH,MAAM,YAAY,GAAG,MAAM,aAAa,EAAE,CAAC;4BAC3C,MAAM,YAAY,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;wBACzF,CAAC;wBAAC,OAAO,MAAW,EAAE,CAAC;4BACrB,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,MAAM,EAAE,OAAO,IAAI,MAAM,CAAC,CAAC;wBACnF,CAAC;wBACD,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;wBAC3B,MAAM,GAAG,SAAS,CAAC;oBACrB,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,MAAM,CAAC,CAAC,oCAAoC,CAAC,CAAC;QAClD,CAAC;QAED,wBAAwB;QACxB,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,SAAiB,CAAC;YACtB,IAAI,CAAC;gBACH,MAAM,WAAW,GAAG,MAAM,iBAAiB,EAAE,CAAC;gBAC9C,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;gBACxE,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,EAAE,YAAmB,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;gBACxG,SAAS,GAAG,OAAO,CAAC,EAAE,CAAC;YACzB,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,OAAO,CAAC,KAAK,CAAC,uDAAuD,EAAE,GAAG,EAAE,OAAO,IAAI,GAAG,CAAC,CAAC;gBAC5F,SAAS,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;YAClC,CAAC;YAED,MAAM,GAAG,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;YAC1D,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAClC,CAAC;QAED,gCAAgC;QAChC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,kBAAkB,CACtD,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,SAAS,EAAE,EAAE,CACtC,CAAC;YACF,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC;YAEnC,MAAM,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC;gBACrC,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;gBACvB,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,UAAU;gBACnB,UAAU;aACX,CAAC,CAAC;YACH,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,0CAA0C,EAAE,GAAG,EAAE,OAAO,IAAI,GAAG,CAAC,CAAC;YAC/E,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,0BAA0B,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;QAClG,CAAC;QAED,aAAa,CAAC,GAAG,CAAC,CAAC;QAEnB,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,qBAAqB,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,YAAY,IAAI,eAAe,sCAAsC;iBACzI,CAAC;SACH,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,gBAAgB;IAChB,MAAM,CAAC,IAAI,CACT,aAAa,EACb,2IAA2I,EAC3I,EAAE,EACF,KAAK,IAAI,EAAE;QACT,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,YAAY,KAAK,CAAC,EAAE,CAAC;YACzC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,gCAAgC,EAAE,CAAC,EAAE,CAAC;QAC1F,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC;QAClC,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;QACxB,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,WAAW,KAAK,0CAA0C,EAAE,CAAC;SACvG,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,sBAAsB;IACtB,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,0LAA0L,EAC1L,EAAE,EACF,KAAK,IAAI,EAAE;QACT,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC,EAAE,CAAC;QAC9E,CAAC;QAED,IAAI,MAAM,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;QAED,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,MAAM,aAAa,EAAE,CAAC;YAC3C,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;YACrG,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAE3B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,uBAAuB,CAAC;YACzD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC;YAClD,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,4BAA4B,OAAO,aAAa,MAAM,EAAE;qBAC/D,CAAC;aACH,CAAC;QACJ,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,yBAAyB,GAAG,EAAE,OAAO,IAAI,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;QACxG,CAAC;IACH,CAAC,CACF,CAAC;IAEF,iBAAiB;IACjB,MAAM,CAAC,IAAI,CACT,cAAc,EACd,qTAAqT,EACrT;QACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;QAC1D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;KAClE,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;QACzB,4DAA4D;QAC5D,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,MAAM,IAAI,MAAM,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;YACtC,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,SAAS,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAC5B,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,qBAA4B,EAAE,EAC7F;YACE,KAAK;YACL,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,KAAK,EAAE,KAAK,IAAI,EAAE;SACnB,CACF,CAAC;QAEF,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC,EAAE,CAAC;QAC9E,CAAC;QAED,gEAAgE;QAChE,8EAA8E;QAC9E,mFAAmF;QACnF,MAAM,cAAc,GAAG,IAAI,GAAG,EAAkB,CAAC;QACjD,IAAI,CAAC;YACH,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,GAAG,MAAO,MAAM,CAAC,OAAe,CAAC,MAAM;iBACpE,IAAI,CAAC,OAAO,CAAC;iBACb,MAAM,CAAC,uBAAuB,CAAC;iBAC/B,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC;iBAChC,GAAG,CAAC,0BAA0B,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAC/C,IAAI,gBAAgB,EAAE,CAAC;gBACrB,KAAK,MAAM,CAAC,IAAI,gBAAgB,EAAE,CAAC;oBACjC,MAAM,KAAK,GAAG,CAAC,CAAC,QAAQ,EAAE,cAAc,CAAC;oBACzC,IAAI,KAAK,EAAE,CAAC;wBACV,MAAM,SAAS,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,iEAAiE,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;wBAC/I,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,aAAa,KAAK,KAAK,SAAS,GAAG,CAAC,CAAC;oBAChE,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAC,qCAAqC,CAAC,CAAC;QACjD,mEAAmE;QACnE,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YAChC,IAAI,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;gBAAE,SAAS;YAC5C,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,QAA+C,CAAC;YACpE,MAAM,KAAK,GAAG,IAAI,EAAE,cAAoC,CAAC;YACzD,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,2DAA2D,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;gBAC9I,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,aAAa,KAAK,KAAK,SAAS,GAAG,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;QAED,iFAAiF;QACjF,gFAAgF;QAChF,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/D,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,cAAc;YAAE,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAE7D,MAAM,MAAM,GAAG,IAAI,GAAG,EAA0E,CAAC;QACjG,SAAS,cAAc,CAAC,EAAU;YAChC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;gBAAE,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;YAClF,OAAO,MAAM,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC;QACzB,CAAC;QAED,IAAI,CAAC;YACH,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,MAAO,MAAM,CAAC,OAAe,CAAC,MAAM;iBAC5D,IAAI,CAAC,OAAO,CAAC;iBACb,MAAM,CAAC,6BAA6B,CAAC;iBACrC,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC;iBAChC,EAAE,CAAC,UAAU,EAAE,CAAC,UAAU,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC;YAE1D,IAAI,QAAQ,EAAE,CAAC;gBACb,kFAAkF;gBAClF,MAAM,YAAY,GAAG,IAAI,GAAG,EAAuB,CAAC;gBAEpD,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;oBAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAA+C,CAAC;oBACtE,MAAM,YAAY,GAAI,QAAQ,EAAE,YAAuB,IAAI,IAAI,CAAC,OAAO,CAAC;oBACxE,MAAM,YAAY,GAAG,QAAQ,EAAE,YAAkC,CAAC;oBAElE,yEAAyE;oBACzE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,YAAY,IAAI,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;wBAAE,SAAS;oBAE7F,IAAI,IAAI,CAAC,QAAQ,KAAK,UAAU,IAAI,YAAY,EAAE,CAAC;wBACjD,+CAA+C;wBAC/C,MAAM,WAAW,GAAG,cAAc,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,kBAAkB,CAAC;wBAC3E,cAAc,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;wBACtD,MAAM,WAAW,GAAG,cAAc,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,kBAAkB,CAAC;wBAC3E,cAAc,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;wBACzD,6BAA6B;wBAC7B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC;4BAAE,YAAY,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;wBAC/E,YAAY,CAAC,GAAG,CAAC,YAAY,CAAE,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;oBACpD,CAAC;oBACD,IAAI,IAAI,CAAC,QAAQ,KAAK,YAAY,IAAI,YAAY,EAAE,CAAC;wBACnD,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,kBAAkB,CAAC;wBACrE,cAAc,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBACnD,gCAAgC;wBAChC,MAAM,YAAY,GAAG,cAAc,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,kBAAkB,CAAC;wBAC5E,cAAc,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;oBACzD,CAAC;oBACD,IAAI,IAAI,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;wBACjC,MAAM,QAAQ,GAAG,QAAQ,EAAE,QAA8B,CAAC;wBAC1D,IAAI,QAAQ,EAAE,CAAC;4BACb,cAAc,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;wBACxD,CAAC;oBACH,CAAC;gBACH,CAAC;gBAED,6EAA6E;gBAC7E,KAAK,MAAM,CAAC,EAAE,IAAI,CAAC,IAAI,MAAM,EAAE,CAAC;oBAC9B,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;oBACxC,IAAI,CAAC,SAAS,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;gBAChD,CAAC;gBAED,uEAAuE;gBACvE,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,YAAY,EAAE,CAAC;oBAC7C,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;oBACtC,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;wBAAE,SAAS;oBAC7D,KAAK,MAAM,QAAQ,IAAI,OAAO,EAAE,CAAC;wBAC/B,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;wBACxC,IAAI,UAAU,EAAE,CAAC;4BACf,KAAK,MAAM,EAAE,IAAI,UAAU,CAAC,SAAS,EAAE,CAAC;gCACtC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;oCACnE,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,aAAa,CAAC,CAAC;gCAChD,CAAC;4BACH,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;gBAED,6FAA6F;gBAC7F,KAAK,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,MAAM,EAAE,CAAC;oBACpC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;wBAAE,SAAS;oBACxC,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;wBACrC,KAAK,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,MAAM,EAAE,CAAC;4BAC1C,IAAI,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,UAAU,IAAI,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gCACjF,KAAK,MAAM,EAAE,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;oCACrC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;wCACzF,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,oCAAoC,CAAC,CAAC;oCACjE,CAAC;gCACH,CAAC;4BACH,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAC,8BAA8B,CAAC,CAAC;QAE1C,uFAAuF;QACvF,sFAAsF;QACtF,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACnE,IAAI,CAAC;YACH,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,MAAO,MAAM,CAAC,OAAe,CAAC,MAAM;iBACjE,IAAI,CAAC,OAAO,CAAC;iBACb,MAAM,CAAC,GAAG,CAAC;iBACX,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC;iBAChC,GAAG,CAAC,0BAA0B,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAC/C,IAAI,aAAa,EAAE,CAAC;gBAClB,KAAK,MAAM,EAAE,IAAI,aAAa,EAAE,CAAC;oBAC/B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;wBAClF,6DAA6D;wBAC7D,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAClC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CACnG,CAAC;wBACF,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;4BACnB,IAAI,EAAE,SAAgB;4BACtB,KAAK,EAAE,GAAG,EAAE,6CAA6C;4BACzD,OAAO,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE;yBACnH,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC;QAElC,4EAA4E;QAC5E,MAAM,aAAa,GAAG,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACvD,MAAM,MAAM,GAAI,CAAC,CAAC,IAAI,CAAC,QAAgB,EAAE,cAAoC,CAAC;YAC9E,MAAM,MAAM,GAAI,CAAC,CAAC,IAAI,CAAC,QAAgB,EAAE,cAAoC,CAAC;YAC9E,IAAI,MAAM,IAAI,MAAM;gBAAE,OAAO,MAAM,GAAG,MAAM,CAAC;YAC7C,IAAI,MAAM;gBAAE,OAAO,CAAC,CAAC,CAAC;YACtB,IAAI,MAAM;gBAAE,OAAO,CAAC,CAAC;YACrB,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH,MAAM,aAAa,GAAa,EAAE,CAAC;QACnC,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,QAA+C,CAAC;YACpE,MAAM,MAAM,GAAG,IAAI,EAAE,MAA4B,CAAC;YAClD,MAAM,aAAa,GAAG,IAAI,EAAE,cAAoC,CAAC;YACjE,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAEnC,MAAM,SAAS,GAAa,EAAE,CAAC;YAC/B,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS;gBAAE,SAAS,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;YACxG,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY;gBAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;YAC5G,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;iBACtC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;iBACxB,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,IAAK,CAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;iBACxE,IAAI,CAAC,IAAI,CAAC,CAAC;YAEd,MAAM,UAAU,GAAG,MAAM,IAAI,aAAa,CAAC;YAC3C,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM,IAAI,EAAE,CAAC;YAClC,MAAM,SAAS,GAAG,IAAI,EAAE,SAAS,IAAI,EAAE,CAAC;YACxC,MAAM,SAAS,GAAG,IAAI,EAAE,SAAS,IAAI,EAAE,CAAC;YACxC,IAAI,IAAY,CAAC;YACjB,IAAI,UAAU,EAAE,CAAC;gBACf,IAAI,GAAG,YAAY,aAAa,CAAC,CAAC,CAAC,KAAK,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBAClF,IAAI,IAAI,eAAe,MAAM,IAAI,SAAS,EAAE,CAAC;gBAC7C,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;oBAAE,IAAI,IAAI,iBAAiB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpE,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;oBAAE,IAAI,IAAI,qBAAqB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;qBACzE,IAAI,MAAM,KAAK,aAAa;oBAAE,IAAI,IAAI,sBAAsB,CAAC;gBAClE,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;oBAAE,IAAI,IAAI,iBAAiB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC1E,IAAI,IAAI,eAAe,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC;YACzD,CAAC;iBAAM,CAAC;gBACN,IAAI,GAAG,YAAY,CAAC,CAAC,IAAI,CAAC,OAAO,YAAY,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;YAC/G,CAAC;YACD,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,UAAU,EAAE,CAAC;gBACtC,IAAI,IAAI,sBAAsB,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACrD,CAAC;YACD,IAAI,IAAI,OAAO,CAAC;YAChB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;QAED,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEtC,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,SAAS,OAAO,CAAC,OAAO,CAAC,MAAM,cAAc,OAAO,CAAC,UAAU,WAAW,IAAI,EAAE;iBACvF;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,mBAAmB;IACnB,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,iFAAiF,EACjF;QACE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;QACtD,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;KACxD,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE;QAC5B,MAAM,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC;YACtC,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,MAAM,EAAE,OAAO;YACf,KAAK,EAAE,EAAE;YACT,eAAe,EAAE,UAAU;YAC3B,YAAY,EAAE,CAAC;YACf,cAAc,EAAE,CAAC;SACX,CAAC,CAAC;QACV,OAAO;YACL,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,sBAAsB,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,EAAE,EAAE;aAC1F;SACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,wBAAwB;IACxB,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,gJAAgJ,EAChJ;QACE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QACtD,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC;KACzF,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE;QAC7B,IAAI,CAAC;YACH,yCAAyC;YACzC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,MAAO,MAAM,CAAC,OAAe,CAAC,MAAM;iBAC3E,IAAI,CAAC,OAAO,CAAC;iBACb,MAAM,CAAC,uBAAuB,CAAC;iBAC/B,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC;iBAChC,GAAG,CAAC,0BAA0B,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAE/C,IAAI,SAAS;gBAAE,MAAM,SAAS,CAAC;YAE/B,MAAM,IAAI,GAAG,KAAK,EAAE,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,cAAc,KAAK,QAAQ,CAAC,CAAC;YAC9E,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,gBAAgB,QAAQ,SAAS,EAAE,CAAC,EAAE,CAAC;YAC3F,CAAC;YAED,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,IAAI,SAAS,CAAC;YACrD,MAAM,WAAW,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;YAEjD,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,MAAO,MAAM,CAAC,OAAe,CAAC,MAAM;iBAChE,IAAI,CAAC,OAAO,CAAC;iBACb,MAAM,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;iBACjC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;iBACjB,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;YAEpC,IAAI,WAAW;gBAAE,MAAM,WAAW,CAAC;YAEnC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,iEAAiE,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3H,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,aAAa,QAAQ,KAAK,SAAS,MAAM,SAAS,MAAM,MAAM,EAAE;qBACvE,CAAC;aACH,CAAC;QACJ,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,0BAA0B,GAAG,EAAE,OAAO,IAAI,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;QACzG,CAAC;IACH,CAAC,CACF,CAAC;IAEF,gBAAgB;IAChB,MAAM,CAAC,IAAI,CACT,aAAa,EACb,yEAAyE,EACzE,EAAE,EACF,KAAK,IAAI,EAAE;QACT,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,eAAe,CAChD,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAC5D,CAAC;QACF,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QAE1F,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,2BAA2B,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,iBAAiB,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE;iBAC/I;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/dist/local.js
CHANGED
package/dist/local.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local.js","sourceRoot":"","sources":["../src/local.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"local.js","sourceRoot":"","sources":["../src/local.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,KAAK,UAAU,IAAI;IACjB,6BAA6B;IAC7B,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IAC7C,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC;IAC1D,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAE7C,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,EAAE,CAAC;QACjC,OAAO,CAAC,KAAK,CAAC,mEAAmE,CAAC,CAAC;QACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,8DAA8D;IAC9D,MAAM,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,GAAG,MAAM,MAAM,CACnE,4BAA4B,CAC7B,CAAC;IACF,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;IAEtE,kBAAkB;IAClB,MAAM,QAAQ,GAAG,oBAAoB,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;IACzF,MAAM,OAAO,GAAG,IAAI,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IACrD,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;IAEpF,4EAA4E;IAC5E,IAAI,SAAc,CAAC;IACnB,IAAI,cAAsB,CAAC;IAC3B,IAAI,YAAoB,CAAC;IAEzB,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC;QACnC,MAAM,EAAE,0BAA0B,EAAE,GAAG,MAAM,MAAM,CACjD,kBAAkB,CACnB,CAAC;QACF,SAAS,GAAG,IAAI,0BAA0B,CAAC;YACzC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB;YACtC,KAAK,EAAE,kBAAkB;YACzB,UAAU,EAAE,IAAI;SACjB,CAAC,CAAC;QACH,cAAc,GAAG,kBAAkB,CAAC;QACpC,YAAY,GAAG,IAAI,CAAC;IACtB,CAAC;SAAM,CAAC;QACN,MAAM,EAAE,sBAAsB,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;QAC5E,SAAS,GAAG,IAAI,sBAAsB,CAAC;YACrC,MAAM,EAAE,SAAS;YACjB,KAAK,EAAE,wBAAwB;YAC/B,UAAU,EAAE,IAAI;SACjB,CAAC,CAAC;QACH,cAAc,GAAG,wBAAwB,CAAC;QAC1C,YAAY,GAAG,IAAI,CAAC;IACtB,CAAC;IAED,eAAe;IACf,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,sCAAsC,CAAC;IACvF,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,SAAS,CAAC;IAExD,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,YAAY,CAAC;YACzB,EAAE,EAAE,QAAQ;YACZ,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,aAAa,IAAI,CAAC,GAAG,EAAE,EAAE;YAC/B,IAAI,EAAE,YAAY;YAClB,MAAM,EAAE,EAAE;SACJ,CAAC,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,wBAAwB;IAC1B,CAAC;IAED,8BAA8B;IAC9B,MAAM,MAAM,GAAG,iBAAiB,CAAC;QAC/B,OAAO;QACP,SAAS;QACT,QAAQ;QACR,QAAQ;QACR,KAAK,EAAE,MAAM;QACb,OAAO;QACP,cAAc;QACd,YAAY;QACZ,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,wBAAwB;YACpD,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,EAAE,CAAC;YACpD,CAAC,CAAC,SAAS;QACb,iBAAiB,EAAE;YACjB;gBACE,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,oFAAoF;gBACjG,MAAM,EAAE;oBACN,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAiB,EAAE,WAAW,EAAE,4CAA4C,EAAE,QAAQ,EAAE,KAAK,EAAE;oBACrH,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAiB,EAAE,WAAW,EAAE,oCAAoC,EAAE,QAAQ,EAAE,KAAK,EAAE;oBAC9G,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAiB,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE;oBACrF,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,QAAiB,EAAE,WAAW,EAAE,8CAA8C,EAAE,QAAQ,EAAE,KAAK,EAAE;iBAC7H;aACF;YACD;gBACE,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,2FAA2F;gBACxG,MAAM,EAAE;oBACN,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAiB,EAAE,WAAW,EAAE,oDAAoD,EAAE,QAAQ,EAAE,KAAK,EAAE;oBAC9H,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,QAAiB,EAAE,WAAW,EAAE,mDAAmD,EAAE,QAAQ,EAAE,KAAK,EAAE;oBACpI,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,QAAiB,EAAE,WAAW,EAAE,gCAAgC,EAAE,QAAQ,EAAE,KAAK,EAAE;iBAC7G;aACF;YACD;gBACE,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,gFAAgF;gBAC7F,MAAM,EAAE;oBACN,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAiB,EAAE,WAAW,EAAE,sCAAsC,EAAE,QAAQ,EAAE,KAAK,EAAE;oBACjH,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,QAAiB,EAAE,WAAW,EAAE,2BAA2B,EAAE,QAAQ,EAAE,KAAK,EAAE;oBAC1G,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,QAAiB,EAAE,WAAW,EAAE,kCAAkC,EAAE,QAAQ,EAAE,KAAK,EAAE;iBACjH;aACF;SACF;KACF,CAAC,CAAC;IAEH,uEAAuE;IACvE,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAA0B,EAAE,EAAE;QACxD,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO;YAAE,OAAO,CAAC,8BAA8B;QAChE,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAA0B,EAAE,EAAE;QACvD,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO;YAAE,OAAO;QACjC,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,GAAG,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;IACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/package.json
CHANGED
package/src/init.ts
CHANGED
|
@@ -405,6 +405,20 @@ const MIGRATIONS = [
|
|
|
405
405
|
`CREATE OR REPLACE FUNCTION increment_trigger_fired(p_tenant_id UUID, p_trigger_id UUID)
|
|
406
406
|
RETURNS VOID LANGUAGE plpgsql AS $$ BEGIN UPDATE triggers SET times_fired = times_fired + 1,
|
|
407
407
|
last_fired_at = NOW(), updated_at = NOW() WHERE tenant_id = p_tenant_id AND id = p_trigger_id; END; $$;`,
|
|
408
|
+
// Session Messages
|
|
409
|
+
`CREATE TABLE IF NOT EXISTS session_messages (
|
|
410
|
+
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
|
411
|
+
session_id UUID NOT NULL REFERENCES sessions(id) ON DELETE CASCADE,
|
|
412
|
+
tenant_id UUID NOT NULL REFERENCES tenants(id) ON DELETE CASCADE,
|
|
413
|
+
role TEXT NOT NULL DEFAULT 'user',
|
|
414
|
+
content TEXT NOT NULL,
|
|
415
|
+
turn_number INTEGER NOT NULL,
|
|
416
|
+
extraction_id UUID,
|
|
417
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
418
|
+
);`,
|
|
419
|
+
`CREATE INDEX IF NOT EXISTS idx_session_messages_session ON session_messages(session_id, turn_number);`,
|
|
420
|
+
`CREATE INDEX IF NOT EXISTS idx_session_messages_unextracted ON session_messages(session_id) WHERE extraction_id IS NULL;`,
|
|
421
|
+
`CREATE INDEX IF NOT EXISTS idx_session_messages_tenant ON session_messages(tenant_id);`,
|
|
408
422
|
// Default tenant
|
|
409
423
|
`INSERT INTO tenants (id, name, slug, plan) VALUES ('00000000-0000-0000-0000-000000000001', 'Default', 'default', 'enterprise') ON CONFLICT DO NOTHING;`,
|
|
410
424
|
];
|
package/src/local-server.ts
CHANGED
|
@@ -16,20 +16,21 @@ export interface LocalServerConfig {
|
|
|
16
16
|
embeddingModel: string;
|
|
17
17
|
embeddingDim: number;
|
|
18
18
|
domainEntityTypes?: import('@steno-ai/engine').DomainEntityType[];
|
|
19
|
+
sessionTimeoutMs?: number;
|
|
19
20
|
}
|
|
20
21
|
|
|
21
22
|
// ---------------------------------------------------------------------------
|
|
22
23
|
// Session buffer types
|
|
23
24
|
// ---------------------------------------------------------------------------
|
|
24
|
-
interface
|
|
25
|
+
interface ActiveSession {
|
|
25
26
|
sessionId: string;
|
|
26
|
-
|
|
27
|
-
lastActivity: Date;
|
|
27
|
+
pendingCount: number;
|
|
28
28
|
flushTimer: ReturnType<typeof setTimeout> | null;
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
const FLUSH_DELAY_MS = 30_000; // 30 seconds of inactivity triggers flush
|
|
32
32
|
const MAX_BUFFER_SIZE = 5; // flush after 5 messages
|
|
33
|
+
const DEFAULT_SESSION_TIMEOUT_MS = 30 * 60 * 1000; // 30 minutes
|
|
33
34
|
|
|
34
35
|
// In-memory embedding cache — survives across tool calls within the same MCP session
|
|
35
36
|
let _embeddingCache: Map<string, { embedding: number[]; ts: number }> | null = null;
|
|
@@ -110,35 +111,53 @@ CRITICAL RULES:
|
|
|
110
111
|
return _getOrCreateActiveSession;
|
|
111
112
|
}
|
|
112
113
|
|
|
114
|
+
let _endSession: typeof import('@steno-ai/engine').endSession | null = null;
|
|
115
|
+
|
|
116
|
+
async function getEndSession() {
|
|
117
|
+
if (!_endSession) {
|
|
118
|
+
const mod = await import('@steno-ai/engine');
|
|
119
|
+
_endSession = mod.endSession;
|
|
120
|
+
}
|
|
121
|
+
return _endSession;
|
|
122
|
+
}
|
|
123
|
+
|
|
113
124
|
// ---------------------------------------------------------------------------
|
|
114
|
-
//
|
|
125
|
+
// Active sessions — track pending message counts, flush periodically
|
|
115
126
|
// ---------------------------------------------------------------------------
|
|
116
|
-
const
|
|
127
|
+
const activeSessions = new Map<string, ActiveSession>();
|
|
117
128
|
|
|
118
129
|
/** Build a buffer key from scope parameters */
|
|
119
130
|
function bufferKey(): string {
|
|
120
131
|
return `${config.tenantId}:${config.scope}:${config.scopeId}`;
|
|
121
132
|
}
|
|
122
133
|
|
|
123
|
-
/** Flush the session
|
|
124
|
-
async function
|
|
125
|
-
const
|
|
126
|
-
if (!
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
buf.messages = [];
|
|
132
|
-
if (buf.flushTimer) {
|
|
133
|
-
clearTimeout(buf.flushTimer);
|
|
134
|
-
buf.flushTimer = null;
|
|
134
|
+
/** Flush the session: read unextracted messages from DB, run extraction pipeline */
|
|
135
|
+
async function flushSession(key: string): Promise<void> {
|
|
136
|
+
const active = activeSessions.get(key);
|
|
137
|
+
if (!active) return;
|
|
138
|
+
|
|
139
|
+
if (active.flushTimer) {
|
|
140
|
+
clearTimeout(active.flushTimer);
|
|
141
|
+
active.flushTimer = null;
|
|
135
142
|
}
|
|
136
143
|
|
|
137
|
-
|
|
144
|
+
try {
|
|
145
|
+
const messages = await config.storage.getSessionMessages(
|
|
146
|
+
config.tenantId, active.sessionId, { unextractedOnly: true },
|
|
147
|
+
);
|
|
148
|
+
if (messages.length === 0) {
|
|
149
|
+
active.pendingCount = 0;
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
const conversationLines = messages.map(m => {
|
|
154
|
+
const time = m.createdAt.toISOString().replace('T', ' ').slice(0, 19);
|
|
155
|
+
return `[${m.role} @ ${time}]: ${m.content}`;
|
|
156
|
+
});
|
|
157
|
+
const formattedText = conversationLines.join('\n\n');
|
|
138
158
|
|
|
139
|
-
|
|
159
|
+
console.error(`[steno] Flushing session: ${messages.length} messages, sessionId=${active.sessionId}`);
|
|
140
160
|
|
|
141
|
-
try {
|
|
142
161
|
const runPipeline = await getPipeline();
|
|
143
162
|
const result = await runPipeline(
|
|
144
163
|
{
|
|
@@ -154,37 +173,43 @@ CRITICAL RULES:
|
|
|
154
173
|
tenantId: config.tenantId,
|
|
155
174
|
scope: config.scope,
|
|
156
175
|
scopeId: config.scopeId,
|
|
157
|
-
sessionId,
|
|
158
|
-
inputType: '
|
|
159
|
-
data:
|
|
176
|
+
sessionId: active.sessionId,
|
|
177
|
+
inputType: 'conversation',
|
|
178
|
+
data: formattedText,
|
|
160
179
|
},
|
|
161
180
|
);
|
|
181
|
+
|
|
182
|
+
await config.storage.markMessagesExtracted(
|
|
183
|
+
messages.map(m => m.id),
|
|
184
|
+
result.extractionId,
|
|
185
|
+
);
|
|
186
|
+
active.pendingCount = 0;
|
|
187
|
+
|
|
162
188
|
console.error(`[steno] Session flush done: ${result.factsCreated} facts, ${result.entitiesCreated} entities, ${result.edgesCreated} edges`);
|
|
163
189
|
} catch (err: any) {
|
|
164
|
-
|
|
190
|
+
// pendingCount intentionally NOT reset on error — next scheduleFlush will retry
|
|
191
|
+
// markMessagesExtracted was not called, so messages remain unextracted in DB
|
|
192
|
+
console.error('[steno] Session flush error:', err?.message ?? err);
|
|
165
193
|
}
|
|
166
194
|
}
|
|
167
195
|
|
|
168
196
|
/** Schedule a flush after the inactivity delay, or flush immediately if buffer is full */
|
|
169
197
|
function scheduleFlush(key: string): void {
|
|
170
|
-
const
|
|
171
|
-
if (!
|
|
198
|
+
const active = activeSessions.get(key);
|
|
199
|
+
if (!active) return;
|
|
172
200
|
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
buf.flushTimer = null;
|
|
201
|
+
if (active.flushTimer) {
|
|
202
|
+
clearTimeout(active.flushTimer);
|
|
203
|
+
active.flushTimer = null;
|
|
177
204
|
}
|
|
178
205
|
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
void flushBuffer(key);
|
|
206
|
+
if (active.pendingCount >= MAX_BUFFER_SIZE) {
|
|
207
|
+
void flushSession(key);
|
|
182
208
|
return;
|
|
183
209
|
}
|
|
184
210
|
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
void flushBuffer(key);
|
|
211
|
+
active.flushTimer = setTimeout(() => {
|
|
212
|
+
void flushSession(key);
|
|
188
213
|
}, FLUSH_DELAY_MS);
|
|
189
214
|
}
|
|
190
215
|
|
|
@@ -202,19 +227,38 @@ CRITICAL RULES:
|
|
|
202
227
|
return { content: [{ type: 'text' as const, text: 'Error: provide content or text' }] };
|
|
203
228
|
}
|
|
204
229
|
|
|
205
|
-
// ── Session-based buffering ──
|
|
206
|
-
// Accumulate messages within a session. Extraction runs when the buffer
|
|
207
|
-
// is full (MAX_BUFFER_SIZE) or after an inactivity timeout (FLUSH_DELAY_MS).
|
|
208
230
|
const key = bufferKey();
|
|
209
|
-
|
|
231
|
+
const sessionTimeout = config.sessionTimeoutMs ?? DEFAULT_SESSION_TIMEOUT_MS;
|
|
232
|
+
let active = activeSessions.get(key);
|
|
210
233
|
|
|
211
|
-
if
|
|
212
|
-
|
|
234
|
+
// Check if existing session is stale
|
|
235
|
+
if (active) {
|
|
236
|
+
try {
|
|
237
|
+
const messages = await config.storage.getSessionMessages(
|
|
238
|
+
config.tenantId, active.sessionId, {},
|
|
239
|
+
);
|
|
240
|
+
if (messages.length > 0) {
|
|
241
|
+
const lastMsg = messages[messages.length - 1]!;
|
|
242
|
+
if (Date.now() - lastMsg.createdAt.getTime() > sessionTimeout) {
|
|
243
|
+
console.error(`[steno] Session ${active.sessionId.slice(0, 8)} stale (${Math.round((Date.now() - lastMsg.createdAt.getTime()) / 60000)}min), ending`);
|
|
244
|
+
try {
|
|
245
|
+
const endSessionFn = await getEndSession();
|
|
246
|
+
await endSessionFn(config.storage, config.cheapLLM, config.tenantId, active.sessionId);
|
|
247
|
+
} catch (endErr: any) {
|
|
248
|
+
console.error('[steno] Failed to end stale session:', endErr?.message ?? endErr);
|
|
249
|
+
}
|
|
250
|
+
activeSessions.delete(key);
|
|
251
|
+
active = undefined;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
} catch { /* continue with existing session */ }
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
// Get or create session
|
|
258
|
+
if (!active) {
|
|
213
259
|
let sessionId: string;
|
|
214
260
|
try {
|
|
215
261
|
const getOrCreate = await getSessionManager();
|
|
216
|
-
// SessionScope excludes 'session', but config.scope might be 'session'.
|
|
217
|
-
// Treat 'session' scope as 'user' for session tracking purposes.
|
|
218
262
|
const sessionScope = config.scope === 'session' ? 'user' : config.scope;
|
|
219
263
|
const session = await getOrCreate(config.storage, config.tenantId, sessionScope as any, config.scopeId);
|
|
220
264
|
sessionId = session.id;
|
|
@@ -223,28 +267,38 @@ CRITICAL RULES:
|
|
|
223
267
|
sessionId = crypto.randomUUID();
|
|
224
268
|
}
|
|
225
269
|
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
messages: [],
|
|
229
|
-
lastActivity: new Date(),
|
|
230
|
-
flushTimer: null,
|
|
231
|
-
};
|
|
232
|
-
sessionBuffers.set(key, buf);
|
|
270
|
+
active = { sessionId, pendingCount: 0, flushTimer: null };
|
|
271
|
+
activeSessions.set(key, active);
|
|
233
272
|
}
|
|
234
273
|
|
|
235
|
-
//
|
|
236
|
-
|
|
237
|
-
|
|
274
|
+
// Store message in DB (durable)
|
|
275
|
+
try {
|
|
276
|
+
const messages = await config.storage.getSessionMessages(
|
|
277
|
+
config.tenantId, active.sessionId, {},
|
|
278
|
+
);
|
|
279
|
+
const turnNumber = messages.length;
|
|
280
|
+
|
|
281
|
+
await config.storage.addSessionMessage({
|
|
282
|
+
id: crypto.randomUUID(),
|
|
283
|
+
sessionId: active.sessionId,
|
|
284
|
+
tenantId: config.tenantId,
|
|
285
|
+
role: 'user',
|
|
286
|
+
content: memoryText,
|
|
287
|
+
turnNumber,
|
|
288
|
+
});
|
|
289
|
+
active.pendingCount++;
|
|
290
|
+
} catch (err: any) {
|
|
291
|
+
console.error('[steno] Failed to store session message:', err?.message ?? err);
|
|
292
|
+
return { content: [{ type: 'text' as const, text: `Error storing message: ${err?.message}` }] };
|
|
293
|
+
}
|
|
238
294
|
|
|
239
|
-
// ALL messages go through the full pipeline via session buffer (no fast path).
|
|
240
|
-
// Full pipeline gives us: LLM extraction, entity/edge creation,
|
|
241
|
-
// contextual embeddings, temporal grounding, dedup — everything.
|
|
242
|
-
// Returns immediately — extraction happens in the background when flushed.
|
|
243
295
|
scheduleFlush(key);
|
|
244
296
|
|
|
245
|
-
const pending = buf.messages.length;
|
|
246
297
|
return {
|
|
247
|
-
content: [{
|
|
298
|
+
content: [{
|
|
299
|
+
type: 'text' as const,
|
|
300
|
+
text: `Stored in session ${active.sessionId.slice(0, 8)} (${active.pendingCount}/${MAX_BUFFER_SIZE} pending). Extraction runs on flush.`,
|
|
301
|
+
}],
|
|
248
302
|
};
|
|
249
303
|
},
|
|
250
304
|
);
|
|
@@ -256,18 +310,53 @@ CRITICAL RULES:
|
|
|
256
310
|
{},
|
|
257
311
|
async () => {
|
|
258
312
|
const key = bufferKey();
|
|
259
|
-
const
|
|
260
|
-
if (!
|
|
313
|
+
const active = activeSessions.get(key);
|
|
314
|
+
if (!active || active.pendingCount === 0) {
|
|
261
315
|
return { content: [{ type: 'text' as const, text: 'No buffered messages to flush.' }] };
|
|
262
316
|
}
|
|
263
|
-
const count =
|
|
264
|
-
await
|
|
317
|
+
const count = active.pendingCount;
|
|
318
|
+
await flushSession(key);
|
|
265
319
|
return {
|
|
266
320
|
content: [{ type: 'text' as const, text: `Flushed ${count} buffered messages. Extraction complete.` }],
|
|
267
321
|
};
|
|
268
322
|
},
|
|
269
323
|
);
|
|
270
324
|
|
|
325
|
+
// ─── END SESSION ───
|
|
326
|
+
server.tool(
|
|
327
|
+
'steno_end_session',
|
|
328
|
+
'Explicitly end the current session. Flushes pending messages, generates a session summary, and starts a fresh session on next remember. Use before long breaks or when switching topics.',
|
|
329
|
+
{},
|
|
330
|
+
async () => {
|
|
331
|
+
const key = bufferKey();
|
|
332
|
+
const active = activeSessions.get(key);
|
|
333
|
+
if (!active) {
|
|
334
|
+
return { content: [{ type: 'text' as const, text: 'No active session.' }] };
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
if (active.pendingCount > 0) {
|
|
338
|
+
await flushSession(key);
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
try {
|
|
342
|
+
const endSessionFn = await getEndSession();
|
|
343
|
+
const ended = await endSessionFn(config.storage, config.cheapLLM, config.tenantId, active.sessionId);
|
|
344
|
+
activeSessions.delete(key);
|
|
345
|
+
|
|
346
|
+
const summary = ended.summary || 'No summary generated.';
|
|
347
|
+
const topics = ended.topics?.join(', ') || 'none';
|
|
348
|
+
return {
|
|
349
|
+
content: [{
|
|
350
|
+
type: 'text' as const,
|
|
351
|
+
text: `Session ended.\nSummary: ${summary}\nTopics: ${topics}`,
|
|
352
|
+
}],
|
|
353
|
+
};
|
|
354
|
+
} catch (err: any) {
|
|
355
|
+
return { content: [{ type: 'text' as const, text: `Error ending session: ${err?.message ?? err}` }] };
|
|
356
|
+
}
|
|
357
|
+
},
|
|
358
|
+
);
|
|
359
|
+
|
|
271
360
|
// ─── RECALL ───
|
|
272
361
|
server.tool(
|
|
273
362
|
'steno_recall',
|
|
@@ -279,9 +368,9 @@ CRITICAL RULES:
|
|
|
279
368
|
async ({ query, limit }) => {
|
|
280
369
|
// Auto-flush any pending buffered messages before searching
|
|
281
370
|
const key = bufferKey();
|
|
282
|
-
const
|
|
283
|
-
if (
|
|
284
|
-
await
|
|
371
|
+
const active = activeSessions.get(key);
|
|
372
|
+
if (active && active.pendingCount > 0) {
|
|
373
|
+
await flushSession(key);
|
|
285
374
|
}
|
|
286
375
|
|
|
287
376
|
const searchFn = await getSearch();
|
|
@@ -332,12 +421,17 @@ CRITICAL RULES:
|
|
|
332
421
|
}
|
|
333
422
|
|
|
334
423
|
// Build dependency map — ONE batch query for ALL dependency edges in this tenant
|
|
335
|
-
|
|
424
|
+
// Include ALL priority fact IDs so edges for injected priorities aren't skipped
|
|
425
|
+
const factIdSet = new Set(results.results.map(r => r.fact.id));
|
|
426
|
+
for (const [factId] of priorityLabels) factIdSet.add(factId);
|
|
427
|
+
|
|
336
428
|
const depMap = new Map<string, { blocks: string[]; blockedBy: string[]; deadlines: string[] }>();
|
|
429
|
+
function ensureDepEntry(id: string) {
|
|
430
|
+
if (!depMap.has(id)) depMap.set(id, { blocks: [], blockedBy: [], deadlines: [] });
|
|
431
|
+
return depMap.get(id)!;
|
|
432
|
+
}
|
|
337
433
|
|
|
338
434
|
try {
|
|
339
|
-
// Query ALL precedes/depends_on/deadline edges — not just for these fact_ids
|
|
340
|
-
// because edges reference sourceFactId/targetFactId in metadata, not in fact_id column
|
|
341
435
|
const { data: depEdges } = await (config.storage as any).client
|
|
342
436
|
.from('edges')
|
|
343
437
|
.select('relation, fact_id, metadata')
|
|
@@ -345,52 +439,73 @@ CRITICAL RULES:
|
|
|
345
439
|
.in('relation', ['precedes', 'depends_on', 'deadline']);
|
|
346
440
|
|
|
347
441
|
if (depEdges) {
|
|
442
|
+
// Build a reverse lookup: factId → Set of factIds it blocks (from precedes edges)
|
|
443
|
+
const blocksLookup = new Map<string, Set<string>>();
|
|
444
|
+
|
|
348
445
|
for (const edge of depEdges) {
|
|
349
446
|
const edgeMeta = edge.metadata as Record<string, unknown> | undefined;
|
|
350
447
|
const sourceFactId = (edgeMeta?.sourceFactId as string) || edge.fact_id;
|
|
351
448
|
const targetFactId = edgeMeta?.targetFactId as string | undefined;
|
|
352
449
|
|
|
353
|
-
// Only process edges involving facts in our result set
|
|
354
|
-
|
|
355
|
-
const targetInResults = targetFactId ? factIds.includes(targetFactId) : false;
|
|
356
|
-
if (!sourceInResults && !targetInResults) continue;
|
|
357
|
-
|
|
358
|
-
if (!depMap.has(sourceFactId)) depMap.set(sourceFactId, { blocks: [], blockedBy: [], deadlines: [] });
|
|
450
|
+
// Only process edges involving facts in our result set OR priority facts
|
|
451
|
+
if (!factIdSet.has(sourceFactId) && !(targetFactId && factIdSet.has(targetFactId))) continue;
|
|
359
452
|
|
|
360
453
|
if (edge.relation === 'precedes' && targetFactId) {
|
|
361
|
-
|
|
362
|
-
|
|
454
|
+
// Source blocks target — index BOTH directions
|
|
455
|
+
const sourceLabel = priorityLabels.get(targetFactId) || 'another priority';
|
|
456
|
+
ensureDepEntry(sourceFactId).blocks.push(sourceLabel);
|
|
457
|
+
const targetLabel = priorityLabels.get(sourceFactId) || 'another priority';
|
|
458
|
+
ensureDepEntry(targetFactId).blockedBy.push(targetLabel);
|
|
459
|
+
// Track for deadline cascade
|
|
460
|
+
if (!blocksLookup.has(sourceFactId)) blocksLookup.set(sourceFactId, new Set());
|
|
461
|
+
blocksLookup.get(sourceFactId)!.add(targetFactId);
|
|
363
462
|
}
|
|
364
463
|
if (edge.relation === 'depends_on' && targetFactId) {
|
|
365
464
|
const label = priorityLabels.get(targetFactId) || 'another priority';
|
|
366
|
-
|
|
465
|
+
ensureDepEntry(sourceFactId).blockedBy.push(label);
|
|
466
|
+
// Reverse: target blocks source
|
|
467
|
+
const reverseLabel = priorityLabels.get(sourceFactId) || 'another priority';
|
|
468
|
+
ensureDepEntry(targetFactId).blocks.push(reverseLabel);
|
|
367
469
|
}
|
|
368
470
|
if (edge.relation === 'deadline') {
|
|
369
471
|
const deadline = edgeMeta?.deadline as string | undefined;
|
|
370
472
|
if (deadline) {
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
473
|
+
ensureDepEntry(sourceFactId).deadlines.push(deadline);
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
// Deduplicate blocks/blockedBy (precedes + depends_on can create duplicates)
|
|
479
|
+
for (const [, deps] of depMap) {
|
|
480
|
+
deps.blocks = [...new Set(deps.blocks)];
|
|
481
|
+
deps.blockedBy = [...new Set(deps.blockedBy)];
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
// Cascade deadlines: if A blocks B and B has a deadline, A gets it too
|
|
485
|
+
for (const [factId, targets] of blocksLookup) {
|
|
486
|
+
const sourceDeps = depMap.get(factId);
|
|
487
|
+
if (!sourceDeps || sourceDeps.deadlines.length > 0) continue;
|
|
488
|
+
for (const targetId of targets) {
|
|
489
|
+
const targetDeps = depMap.get(targetId);
|
|
490
|
+
if (targetDeps) {
|
|
491
|
+
for (const dl of targetDeps.deadlines) {
|
|
492
|
+
if (!dl.includes('cascaded') && !sourceDeps.deadlines.includes(dl)) {
|
|
493
|
+
sourceDeps.deadlines.push(dl + ' (cascaded)');
|
|
376
494
|
}
|
|
377
495
|
}
|
|
378
496
|
}
|
|
379
497
|
}
|
|
380
498
|
}
|
|
381
499
|
|
|
382
|
-
// Second pass: cascade
|
|
383
|
-
// If A depends_on B, and B has a deadline, A implicitly has that deadline
|
|
500
|
+
// Second pass: cascade through depends_on — if A depends_on B and A has deadline, B inherits
|
|
384
501
|
for (const [factId, deps] of depMap) {
|
|
385
|
-
if (deps.deadlines.length
|
|
386
|
-
|
|
387
|
-
for (const
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
deps.deadlines.push(dl + ' (implicit — blocks deadline item)');
|
|
393
|
-
}
|
|
502
|
+
if (deps.deadlines.length > 0) continue;
|
|
503
|
+
for (const blockLabel of deps.blocks) {
|
|
504
|
+
for (const [otherId, otherDeps] of depMap) {
|
|
505
|
+
if (priorityLabels.get(otherId) === blockLabel && otherDeps.deadlines.length > 0) {
|
|
506
|
+
for (const dl of otherDeps.deadlines) {
|
|
507
|
+
if (!dl.includes('cascaded') && !dl.includes('implicit') && !deps.deadlines.includes(dl)) {
|
|
508
|
+
deps.deadlines.push(dl + ' (implicit — blocks deadline item)');
|
|
394
509
|
}
|
|
395
510
|
}
|
|
396
511
|
}
|
package/src/local.ts
CHANGED
|
@@ -95,6 +95,9 @@ async function main(): Promise<void> {
|
|
|
95
95
|
scopeId,
|
|
96
96
|
embeddingModel,
|
|
97
97
|
embeddingDim,
|
|
98
|
+
sessionTimeoutMs: process.env.STENO_SESSION_TIMEOUT_MS
|
|
99
|
+
? parseInt(process.env.STENO_SESSION_TIMEOUT_MS, 10)
|
|
100
|
+
: undefined,
|
|
98
101
|
domainEntityTypes: [
|
|
99
102
|
{
|
|
100
103
|
name: 'vehicle',
|