exovault-mcp-server 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.
- package/dist/auth.d.ts +41 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +236 -0
- package/dist/auth.js.map +1 -0
- package/dist/auto-session.d.ts +39 -0
- package/dist/auto-session.d.ts.map +1 -0
- package/dist/auto-session.js +128 -0
- package/dist/auto-session.js.map +1 -0
- package/dist/buffer-persistence.d.ts +35 -0
- package/dist/buffer-persistence.d.ts.map +1 -0
- package/dist/buffer-persistence.js +110 -0
- package/dist/buffer-persistence.js.map +1 -0
- package/dist/coerce-params.d.ts +36 -0
- package/dist/coerce-params.d.ts.map +1 -0
- package/dist/coerce-params.js +120 -0
- package/dist/coerce-params.js.map +1 -0
- package/dist/crypto.d.ts +39 -0
- package/dist/crypto.d.ts.map +1 -0
- package/dist/crypto.js +119 -0
- package/dist/crypto.js.map +1 -0
- package/dist/db.d.ts +350 -0
- package/dist/db.d.ts.map +1 -0
- package/dist/db.js +866 -0
- package/dist/db.js.map +1 -0
- package/dist/embedding-config.d.ts +11 -0
- package/dist/embedding-config.d.ts.map +1 -0
- package/dist/embedding-config.js +24 -0
- package/dist/embedding-config.js.map +1 -0
- package/dist/entity-extraction.d.ts +22 -0
- package/dist/entity-extraction.d.ts.map +1 -0
- package/dist/entity-extraction.js +140 -0
- package/dist/entity-extraction.js.map +1 -0
- package/dist/episodic-headline.d.ts +6 -0
- package/dist/episodic-headline.d.ts.map +1 -0
- package/dist/episodic-headline.js +62 -0
- package/dist/episodic-headline.js.map +1 -0
- package/dist/error-sanitizer.d.ts +20 -0
- package/dist/error-sanitizer.d.ts.map +1 -0
- package/dist/error-sanitizer.js +54 -0
- package/dist/error-sanitizer.js.map +1 -0
- package/dist/extraction-budget.d.ts +39 -0
- package/dist/extraction-budget.d.ts.map +1 -0
- package/dist/extraction-budget.js +122 -0
- package/dist/extraction-budget.js.map +1 -0
- package/dist/extraction-llm.d.ts +22 -0
- package/dist/extraction-llm.d.ts.map +1 -0
- package/dist/extraction-llm.js +32 -0
- package/dist/extraction-llm.js.map +1 -0
- package/dist/extraction-prompt.d.ts +40 -0
- package/dist/extraction-prompt.d.ts.map +1 -0
- package/dist/extraction-prompt.js +176 -0
- package/dist/extraction-prompt.js.map +1 -0
- package/dist/gateway-client.d.ts +303 -0
- package/dist/gateway-client.d.ts.map +1 -0
- package/dist/gateway-client.js +285 -0
- package/dist/gateway-client.js.map +1 -0
- package/dist/gateway-init.d.ts +32 -0
- package/dist/gateway-init.d.ts.map +1 -0
- package/dist/gateway-init.js +71 -0
- package/dist/gateway-init.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1242 -0
- package/dist/index.js.map +1 -0
- package/dist/infer-task-status.d.ts +7 -0
- package/dist/infer-task-status.d.ts.map +1 -0
- package/dist/infer-task-status.js +23 -0
- package/dist/infer-task-status.js.map +1 -0
- package/dist/normalize-agent-id.d.ts +21 -0
- package/dist/normalize-agent-id.d.ts.map +1 -0
- package/dist/normalize-agent-id.js +54 -0
- package/dist/normalize-agent-id.js.map +1 -0
- package/dist/openai.d.ts +14 -0
- package/dist/openai.d.ts.map +1 -0
- package/dist/openai.js +43 -0
- package/dist/openai.js.map +1 -0
- package/dist/rlm/actions.d.ts +31 -0
- package/dist/rlm/actions.d.ts.map +1 -0
- package/dist/rlm/actions.js +241 -0
- package/dist/rlm/actions.js.map +1 -0
- package/dist/rlm/benchmark.d.ts +2 -0
- package/dist/rlm/benchmark.d.ts.map +1 -0
- package/dist/rlm/benchmark.js +215 -0
- package/dist/rlm/benchmark.js.map +1 -0
- package/dist/rlm/execute.d.ts +13 -0
- package/dist/rlm/execute.d.ts.map +1 -0
- package/dist/rlm/execute.js +366 -0
- package/dist/rlm/execute.js.map +1 -0
- package/dist/rlm/index.d.ts +6 -0
- package/dist/rlm/index.d.ts.map +1 -0
- package/dist/rlm/index.js +147 -0
- package/dist/rlm/index.js.map +1 -0
- package/dist/rlm/profiles.d.ts +9 -0
- package/dist/rlm/profiles.d.ts.map +1 -0
- package/dist/rlm/profiles.js +46 -0
- package/dist/rlm/profiles.js.map +1 -0
- package/dist/rlm/types.d.ts +98 -0
- package/dist/rlm/types.d.ts.map +1 -0
- package/dist/rlm/types.js +6 -0
- package/dist/rlm/types.js.map +1 -0
- package/dist/rlm/verify.d.ts +13 -0
- package/dist/rlm/verify.d.ts.map +1 -0
- package/dist/rlm/verify.js +58 -0
- package/dist/rlm/verify.js.map +1 -0
- package/dist/rlm/writeback.d.ts +7 -0
- package/dist/rlm/writeback.d.ts.map +1 -0
- package/dist/rlm/writeback.js +77 -0
- package/dist/rlm/writeback.js.map +1 -0
- package/dist/scripts/backfill-memory-embeddings.d.ts +2 -0
- package/dist/scripts/backfill-memory-embeddings.d.ts.map +1 -0
- package/dist/scripts/backfill-memory-embeddings.js +153 -0
- package/dist/scripts/backfill-memory-embeddings.js.map +1 -0
- package/dist/session-buffer.d.ts +104 -0
- package/dist/session-buffer.d.ts.map +1 -0
- package/dist/session-buffer.js +466 -0
- package/dist/session-buffer.js.map +1 -0
- package/dist/session-dedup.d.ts +30 -0
- package/dist/session-dedup.d.ts.map +1 -0
- package/dist/session-dedup.js +67 -0
- package/dist/session-dedup.js.map +1 -0
- package/dist/session-flush.d.ts +81 -0
- package/dist/session-flush.d.ts.map +1 -0
- package/dist/session-flush.js +169 -0
- package/dist/session-flush.js.map +1 -0
- package/dist/session-lifecycle.d.ts +72 -0
- package/dist/session-lifecycle.d.ts.map +1 -0
- package/dist/session-lifecycle.js +247 -0
- package/dist/session-lifecycle.js.map +1 -0
- package/dist/setup.d.ts +2 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +260 -0
- package/dist/setup.js.map +1 -0
- package/dist/stopwords.d.ts +2 -0
- package/dist/stopwords.d.ts.map +1 -0
- package/dist/stopwords.js +20 -0
- package/dist/stopwords.js.map +1 -0
- package/dist/strip-html.d.ts +5 -0
- package/dist/strip-html.d.ts.map +1 -0
- package/dist/strip-html.js +35 -0
- package/dist/strip-html.js.map +1 -0
- package/dist/task-completion-flush.d.ts +36 -0
- package/dist/task-completion-flush.d.ts.map +1 -0
- package/dist/task-completion-flush.js +97 -0
- package/dist/task-completion-flush.js.map +1 -0
- package/dist/task-lifecycle-types.d.ts +13 -0
- package/dist/task-lifecycle-types.d.ts.map +1 -0
- package/dist/task-lifecycle-types.js +12 -0
- package/dist/task-lifecycle-types.js.map +1 -0
- package/dist/task-lifecycle.d.ts +78 -0
- package/dist/task-lifecycle.d.ts.map +1 -0
- package/dist/task-lifecycle.js +256 -0
- package/dist/task-lifecycle.js.map +1 -0
- package/dist/tools/agent-messages.d.ts +26 -0
- package/dist/tools/agent-messages.d.ts.map +1 -0
- package/dist/tools/agent-messages.js +123 -0
- package/dist/tools/agent-messages.js.map +1 -0
- package/dist/tools/agent-tasks.d.ts +24 -0
- package/dist/tools/agent-tasks.d.ts.map +1 -0
- package/dist/tools/agent-tasks.js +162 -0
- package/dist/tools/agent-tasks.js.map +1 -0
- package/dist/tools/archive-memory.d.ts +2 -0
- package/dist/tools/archive-memory.d.ts.map +1 -0
- package/dist/tools/archive-memory.js +19 -0
- package/dist/tools/archive-memory.js.map +1 -0
- package/dist/tools/blind-index.d.ts +29 -0
- package/dist/tools/blind-index.d.ts.map +1 -0
- package/dist/tools/blind-index.js +53 -0
- package/dist/tools/blind-index.js.map +1 -0
- package/dist/tools/cleanup-memories.d.ts +44 -0
- package/dist/tools/cleanup-memories.d.ts.map +1 -0
- package/dist/tools/cleanup-memories.js +126 -0
- package/dist/tools/cleanup-memories.js.map +1 -0
- package/dist/tools/context-checkpoint.d.ts +28 -0
- package/dist/tools/context-checkpoint.d.ts.map +1 -0
- package/dist/tools/context-checkpoint.js +140 -0
- package/dist/tools/context-checkpoint.js.map +1 -0
- package/dist/tools/context-profiles.d.ts +67 -0
- package/dist/tools/context-profiles.d.ts.map +1 -0
- package/dist/tools/context-profiles.js +30 -0
- package/dist/tools/context-profiles.js.map +1 -0
- package/dist/tools/create-note.d.ts +2 -0
- package/dist/tools/create-note.d.ts.map +1 -0
- package/dist/tools/create-note.js +60 -0
- package/dist/tools/create-note.js.map +1 -0
- package/dist/tools/create-vault.d.ts +5 -0
- package/dist/tools/create-vault.d.ts.map +1 -0
- package/dist/tools/create-vault.js +121 -0
- package/dist/tools/create-vault.js.map +1 -0
- package/dist/tools/decrypt-helpers.d.ts +31 -0
- package/dist/tools/decrypt-helpers.d.ts.map +1 -0
- package/dist/tools/decrypt-helpers.js +33 -0
- package/dist/tools/decrypt-helpers.js.map +1 -0
- package/dist/tools/delete-note.d.ts +2 -0
- package/dist/tools/delete-note.d.ts.map +1 -0
- package/dist/tools/delete-note.js +21 -0
- package/dist/tools/delete-note.js.map +1 -0
- package/dist/tools/explore-graph.d.ts +11 -0
- package/dist/tools/explore-graph.d.ts.map +1 -0
- package/dist/tools/explore-graph.js +169 -0
- package/dist/tools/explore-graph.js.map +1 -0
- package/dist/tools/get-related-memories.d.ts +2 -0
- package/dist/tools/get-related-memories.d.ts.map +1 -0
- package/dist/tools/get-related-memories.js +59 -0
- package/dist/tools/get-related-memories.js.map +1 -0
- package/dist/tools/knowledge-links.d.ts +17 -0
- package/dist/tools/knowledge-links.d.ts.map +1 -0
- package/dist/tools/knowledge-links.js +102 -0
- package/dist/tools/knowledge-links.js.map +1 -0
- package/dist/tools/list-active-agents.d.ts +5 -0
- package/dist/tools/list-active-agents.d.ts.map +1 -0
- package/dist/tools/list-active-agents.js +15 -0
- package/dist/tools/list-active-agents.js.map +1 -0
- package/dist/tools/list-notes.d.ts +2 -0
- package/dist/tools/list-notes.d.ts.map +1 -0
- package/dist/tools/list-notes.js +19 -0
- package/dist/tools/list-notes.js.map +1 -0
- package/dist/tools/list-vaults.d.ts +2 -0
- package/dist/tools/list-vaults.d.ts.map +1 -0
- package/dist/tools/list-vaults.js +19 -0
- package/dist/tools/list-vaults.js.map +1 -0
- package/dist/tools/mmr.d.ts +18 -0
- package/dist/tools/mmr.d.ts.map +1 -0
- package/dist/tools/mmr.js +67 -0
- package/dist/tools/mmr.js.map +1 -0
- package/dist/tools/read-memories.d.ts +2 -0
- package/dist/tools/read-memories.d.ts.map +1 -0
- package/dist/tools/read-memories.js +46 -0
- package/dist/tools/read-memories.js.map +1 -0
- package/dist/tools/read-note.d.ts +2 -0
- package/dist/tools/read-note.d.ts.map +1 -0
- package/dist/tools/read-note.js +35 -0
- package/dist/tools/read-note.js.map +1 -0
- package/dist/tools/read-notes.d.ts +6 -0
- package/dist/tools/read-notes.d.ts.map +1 -0
- package/dist/tools/read-notes.js +45 -0
- package/dist/tools/read-notes.js.map +1 -0
- package/dist/tools/resolve-vault-id.d.ts +6 -0
- package/dist/tools/resolve-vault-id.d.ts.map +1 -0
- package/dist/tools/resolve-vault-id.js +7 -0
- package/dist/tools/resolve-vault-id.js.map +1 -0
- package/dist/tools/rrf.d.ts +28 -0
- package/dist/tools/rrf.d.ts.map +1 -0
- package/dist/tools/rrf.js +19 -0
- package/dist/tools/rrf.js.map +1 -0
- package/dist/tools/search-and-read.d.ts +11 -0
- package/dist/tools/search-and-read.d.ts.map +1 -0
- package/dist/tools/search-and-read.js +208 -0
- package/dist/tools/search-and-read.js.map +1 -0
- package/dist/tools/search-memories.d.ts +13 -0
- package/dist/tools/search-memories.d.ts.map +1 -0
- package/dist/tools/search-memories.js +272 -0
- package/dist/tools/search-memories.js.map +1 -0
- package/dist/tools/search-notes.d.ts +2 -0
- package/dist/tools/search-notes.d.ts.map +1 -0
- package/dist/tools/search-notes.js +94 -0
- package/dist/tools/search-notes.js.map +1 -0
- package/dist/tools/semantic-search.d.ts +7 -0
- package/dist/tools/semantic-search.d.ts.map +1 -0
- package/dist/tools/semantic-search.js +85 -0
- package/dist/tools/semantic-search.js.map +1 -0
- package/dist/tools/session-start.d.ts +24 -0
- package/dist/tools/session-start.d.ts.map +1 -0
- package/dist/tools/session-start.js +256 -0
- package/dist/tools/session-start.js.map +1 -0
- package/dist/tools/stale-tasks.d.ts +22 -0
- package/dist/tools/stale-tasks.d.ts.map +1 -0
- package/dist/tools/stale-tasks.js +39 -0
- package/dist/tools/stale-tasks.js.map +1 -0
- package/dist/tools/temporal-decay.d.ts +21 -0
- package/dist/tools/temporal-decay.d.ts.map +1 -0
- package/dist/tools/temporal-decay.js +32 -0
- package/dist/tools/temporal-decay.js.map +1 -0
- package/dist/tools/update-memory.d.ts +19 -0
- package/dist/tools/update-memory.d.ts.map +1 -0
- package/dist/tools/update-memory.js +230 -0
- package/dist/tools/update-memory.js.map +1 -0
- package/dist/tools/update-note.d.ts +2 -0
- package/dist/tools/update-note.d.ts.map +1 -0
- package/dist/tools/update-note.js +79 -0
- package/dist/tools/update-note.js.map +1 -0
- package/dist/tools/vault-instruction-template.d.ts +17 -0
- package/dist/tools/vault-instruction-template.d.ts.map +1 -0
- package/dist/tools/vault-instruction-template.js +77 -0
- package/dist/tools/vault-instruction-template.js.map +1 -0
- package/dist/tools/wiki-link-sync.d.ts +34 -0
- package/dist/tools/wiki-link-sync.d.ts.map +1 -0
- package/dist/tools/wiki-link-sync.js +132 -0
- package/dist/tools/wiki-link-sync.js.map +1 -0
- package/dist/tools/wrap-tool-handler.d.ts +8 -0
- package/dist/tools/wrap-tool-handler.d.ts.map +1 -0
- package/dist/tools/wrap-tool-handler.js +32 -0
- package/dist/tools/wrap-tool-handler.js.map +1 -0
- package/dist/tools/write-memory.d.ts +34 -0
- package/dist/tools/write-memory.d.ts.map +1 -0
- package/dist/tools/write-memory.js +359 -0
- package/dist/tools/write-memory.js.map +1 -0
- package/dist/usage.d.ts +11 -0
- package/dist/usage.d.ts.map +1 -0
- package/dist/usage.js +38 -0
- package/dist/usage.js.map +1 -0
- package/dist/wiki-link-parser.d.ts +27 -0
- package/dist/wiki-link-parser.d.ts.map +1 -0
- package/dist/wiki-link-parser.js +93 -0
- package/dist/wiki-link-parser.js.map +1 -0
- package/package.json +38 -0
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session flush — handles optional LLM extraction when a session ends.
|
|
3
|
+
* Episodic summaries are NOT auto-generated here — agents provide them
|
|
4
|
+
* via `context_checkpoint({ sessionSummary: "..." })`.
|
|
5
|
+
*
|
|
6
|
+
* Uses a "smart skip" approach for LLM extraction:
|
|
7
|
+
* 1. Agent already called context_checkpoint → skip entirely
|
|
8
|
+
* 2. Short session (< minToolCalls) → skip
|
|
9
|
+
* 3. Read-only session (0 writes/searches) → skip
|
|
10
|
+
* 4. Agent already wrote enough memories → skip
|
|
11
|
+
* 5. Otherwise → LLM extraction (if configured + budget allows)
|
|
12
|
+
*/
|
|
13
|
+
import { type SessionBufferData } from "./session-buffer.js";
|
|
14
|
+
import { type ExtractionBudget } from "./extraction-budget.js";
|
|
15
|
+
import type { ExtractionClient } from "./extraction-llm.js";
|
|
16
|
+
import { type TaskCompletionFlushResult } from "./task-completion-flush.js";
|
|
17
|
+
import type { TaskLifecycleSettings } from "./task-lifecycle-types.js";
|
|
18
|
+
import type { OpenTask } from "./task-lifecycle.js";
|
|
19
|
+
export interface FlushConfig {
|
|
20
|
+
checkpointed: boolean;
|
|
21
|
+
minToolCalls: number;
|
|
22
|
+
skipIfMemoriesWritten: number;
|
|
23
|
+
checkpointFn: (params: {
|
|
24
|
+
memories: Array<{
|
|
25
|
+
content: string;
|
|
26
|
+
memoryType: string;
|
|
27
|
+
importance: number;
|
|
28
|
+
confidence: number;
|
|
29
|
+
}>;
|
|
30
|
+
sessionSummary: string;
|
|
31
|
+
agentId: string;
|
|
32
|
+
agentRunId: string;
|
|
33
|
+
vaultId?: string;
|
|
34
|
+
dedup?: boolean;
|
|
35
|
+
}) => Promise<string>;
|
|
36
|
+
agentRunId: string;
|
|
37
|
+
agentId: string;
|
|
38
|
+
vaultId?: string;
|
|
39
|
+
extractionClient?: ExtractionClient;
|
|
40
|
+
readBudget?: () => Promise<ExtractionBudget>;
|
|
41
|
+
writeBudget?: (budget: ExtractionBudget) => Promise<void>;
|
|
42
|
+
taskCompletion?: {
|
|
43
|
+
openTasks: OpenTask[];
|
|
44
|
+
settings: TaskLifecycleSettings;
|
|
45
|
+
updateTaskFn: (taskId: string, updates: {
|
|
46
|
+
status: string;
|
|
47
|
+
completionSource: string;
|
|
48
|
+
completionEvidence: string;
|
|
49
|
+
}) => Promise<void>;
|
|
50
|
+
writeMemoryFn?: (content: string) => Promise<void>;
|
|
51
|
+
createCompletedTaskFn?: (task: {
|
|
52
|
+
title: string;
|
|
53
|
+
doneWhen?: string;
|
|
54
|
+
evidence: string;
|
|
55
|
+
}) => Promise<string | null>;
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
export interface SessionFlushResult {
|
|
59
|
+
action: "skipped" | "llm_extracted" | "transcript_episodic" | "error";
|
|
60
|
+
reason?: string;
|
|
61
|
+
error?: string;
|
|
62
|
+
taskCompletions?: TaskCompletionFlushResult;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Determine whether LLM extraction should run for this session.
|
|
66
|
+
* Returns { extract: false, reason } for skip, { extract: true } for extract.
|
|
67
|
+
*/
|
|
68
|
+
export declare function shouldExtract(data: SessionBufferData, config: {
|
|
69
|
+
checkpointed: boolean;
|
|
70
|
+
minToolCalls: number;
|
|
71
|
+
skipIfMemoriesWritten: number;
|
|
72
|
+
}): {
|
|
73
|
+
extract: boolean;
|
|
74
|
+
reason?: string;
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* Flush the session buffer. Attempts LLM extraction if configured and budget
|
|
78
|
+
* allows. No longer auto-generates episodic summaries — agents provide those
|
|
79
|
+
* via context_checkpoint({ sessionSummary }).
|
|
80
|
+
*/
|
|
81
|
+
export declare function flushSession(data: SessionBufferData, config: FlushConfig): Promise<SessionFlushResult>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-flush.d.ts","sourceRoot":"","sources":["../src/session-flush.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session flush — handles optional LLM extraction when a session ends.
|
|
3
|
+
* Episodic summaries are NOT auto-generated here — agents provide them
|
|
4
|
+
* via `context_checkpoint({ sessionSummary: "..." })`.
|
|
5
|
+
*
|
|
6
|
+
* Uses a "smart skip" approach for LLM extraction:
|
|
7
|
+
* 1. Agent already called context_checkpoint → skip entirely
|
|
8
|
+
* 2. Short session (< minToolCalls) → skip
|
|
9
|
+
* 3. Read-only session (0 writes/searches) → skip
|
|
10
|
+
* 4. Agent already wrote enough memories → skip
|
|
11
|
+
* 5. Otherwise → LLM extraction (if configured + budget allows)
|
|
12
|
+
*/
|
|
13
|
+
import { buildTranscriptEpisodic } from "./session-buffer.js";
|
|
14
|
+
import { buildCompressedPrompt, parseExtractionResult } from "./extraction-prompt.js";
|
|
15
|
+
import { isBudgetExhausted, isCircuitBroken, recordSuccess, recordEmpty, recordError } from "./extraction-budget.js";
|
|
16
|
+
import { flushTaskCompletions } from "./task-completion-flush.js";
|
|
17
|
+
/** Max output tokens for extraction LLM call. */
|
|
18
|
+
const EXTRACTION_MAX_OUTPUT_TOKENS = 300;
|
|
19
|
+
/**
|
|
20
|
+
* Determine whether LLM extraction should run for this session.
|
|
21
|
+
* Returns { extract: false, reason } for skip, { extract: true } for extract.
|
|
22
|
+
*/
|
|
23
|
+
export function shouldExtract(data, config) {
|
|
24
|
+
// 1. Agent already checkpointed
|
|
25
|
+
if (config.checkpointed) {
|
|
26
|
+
return { extract: false, reason: "Agent already called context_checkpoint" };
|
|
27
|
+
}
|
|
28
|
+
// 2. Short session
|
|
29
|
+
if (data.activities.length < config.minToolCalls) {
|
|
30
|
+
return { extract: false, reason: `Session had ${data.activities.length} tool calls (min: ${config.minToolCalls})` };
|
|
31
|
+
}
|
|
32
|
+
// 3. Read-only session (no writes AND no searches)
|
|
33
|
+
const hasWritesOrSearches = data.activities.some((a) => a.category === "write" || a.category === "search");
|
|
34
|
+
if (!hasWritesOrSearches) {
|
|
35
|
+
return { extract: false, reason: "Session was read-only (no writes or searches)" };
|
|
36
|
+
}
|
|
37
|
+
// 4. Agent already wrote enough memories
|
|
38
|
+
if (data.memoriesWritten.length >= config.skipIfMemoriesWritten) {
|
|
39
|
+
return {
|
|
40
|
+
extract: false,
|
|
41
|
+
reason: `Agent wrote ${data.memoriesWritten.length} memories (threshold: ${config.skipIfMemoriesWritten})`,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
return { extract: true };
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Flush the session buffer. Attempts LLM extraction if configured and budget
|
|
48
|
+
* allows. No longer auto-generates episodic summaries — agents provide those
|
|
49
|
+
* via context_checkpoint({ sessionSummary }).
|
|
50
|
+
*/
|
|
51
|
+
export async function flushSession(data, config) {
|
|
52
|
+
const skipCheck = shouldExtract(data, {
|
|
53
|
+
checkpointed: config.checkpointed,
|
|
54
|
+
minToolCalls: config.minToolCalls,
|
|
55
|
+
skipIfMemoriesWritten: config.skipIfMemoriesWritten,
|
|
56
|
+
});
|
|
57
|
+
// If agent already checkpointed or session doesn't qualify, skip
|
|
58
|
+
if (!skipCheck.extract) {
|
|
59
|
+
return { action: "skipped", reason: skipCheck.reason };
|
|
60
|
+
}
|
|
61
|
+
// Attempt LLM extraction if client configured + budget allows
|
|
62
|
+
if (config.extractionClient && config.readBudget && config.writeBudget) {
|
|
63
|
+
const extracted = await attemptLlmExtraction(data, config, config.extractionClient, config.readBudget, config.writeBudget);
|
|
64
|
+
if (extracted) {
|
|
65
|
+
// Also run task completion on LLM extraction path
|
|
66
|
+
if (config.taskCompletion && config.extractionClient) {
|
|
67
|
+
extracted.taskCompletions = await runTaskCompletion(data, config);
|
|
68
|
+
}
|
|
69
|
+
return extracted;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
// No extraction configured or extraction returned empty.
|
|
73
|
+
// Try auto-generating episodic from transcript entries (zero LLM cost).
|
|
74
|
+
let taskCompletions;
|
|
75
|
+
if (config.taskCompletion && config.extractionClient) {
|
|
76
|
+
taskCompletions = await runTaskCompletion(data, config);
|
|
77
|
+
}
|
|
78
|
+
const transcriptEpisodic = buildTranscriptEpisodic(data);
|
|
79
|
+
if (transcriptEpisodic) {
|
|
80
|
+
try {
|
|
81
|
+
await config.checkpointFn({
|
|
82
|
+
memories: [],
|
|
83
|
+
sessionSummary: transcriptEpisodic,
|
|
84
|
+
agentId: config.agentId,
|
|
85
|
+
agentRunId: config.agentRunId,
|
|
86
|
+
vaultId: config.vaultId,
|
|
87
|
+
dedup: true,
|
|
88
|
+
});
|
|
89
|
+
return { action: "transcript_episodic", taskCompletions };
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
// Best-effort — fall through to skip
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return {
|
|
96
|
+
action: "skipped",
|
|
97
|
+
reason: "No episodic auto-generation — agent provides summary via context_checkpoint",
|
|
98
|
+
taskCompletions,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Attempt LLM extraction. Returns SessionFlushResult on success, null to fall through.
|
|
103
|
+
*/
|
|
104
|
+
async function attemptLlmExtraction(data, config, client, getBudget, saveBudget) {
|
|
105
|
+
let budget;
|
|
106
|
+
try {
|
|
107
|
+
budget = await getBudget();
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
return null; // Can't read budget → skip
|
|
111
|
+
}
|
|
112
|
+
// Check budget + circuit breaker
|
|
113
|
+
if (isBudgetExhausted(budget).exhausted || isCircuitBroken(budget).broken) {
|
|
114
|
+
return null; // Budget/circuit blocked → skip
|
|
115
|
+
}
|
|
116
|
+
try {
|
|
117
|
+
const { prompt } = buildCompressedPrompt(data);
|
|
118
|
+
const llmResult = await client.extract(prompt, EXTRACTION_MAX_OUTPUT_TOKENS);
|
|
119
|
+
const memories = parseExtractionResult(llmResult.text);
|
|
120
|
+
if (memories && memories.length > 0) {
|
|
121
|
+
// Checkpoint with extracted memories (no sessionSummary — agent provides it)
|
|
122
|
+
await config.checkpointFn({
|
|
123
|
+
memories: memories.map((m) => ({
|
|
124
|
+
content: m.content,
|
|
125
|
+
memoryType: m.memoryType,
|
|
126
|
+
importance: m.importance,
|
|
127
|
+
confidence: 3,
|
|
128
|
+
})),
|
|
129
|
+
sessionSummary: "", // Required by type but not used for episodic here
|
|
130
|
+
agentId: config.agentId,
|
|
131
|
+
agentRunId: config.agentRunId,
|
|
132
|
+
vaultId: config.vaultId,
|
|
133
|
+
dedup: true,
|
|
134
|
+
});
|
|
135
|
+
// Record success (swallow budget write errors)
|
|
136
|
+
await saveBudget(recordSuccess(budget, llmResult.inputTokens, llmResult.outputTokens, memories.length)).catch(() => { });
|
|
137
|
+
return { action: "llm_extracted" };
|
|
138
|
+
}
|
|
139
|
+
// Empty extraction → record and fall through
|
|
140
|
+
await saveBudget(recordEmpty(budget)).catch(() => { });
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
// LLM failure → record error and fall through
|
|
145
|
+
await saveBudget(recordError(budget)).catch(() => { });
|
|
146
|
+
return null;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Run task completion detection using the extraction LLM.
|
|
151
|
+
* Returns null-safe result, never throws.
|
|
152
|
+
*/
|
|
153
|
+
async function runTaskCompletion(data, config) {
|
|
154
|
+
const tc = config.taskCompletion;
|
|
155
|
+
try {
|
|
156
|
+
return await flushTaskCompletions({
|
|
157
|
+
openTasks: tc.openTasks,
|
|
158
|
+
sessionData: data,
|
|
159
|
+
extractionClient: config.extractionClient,
|
|
160
|
+
updateTaskFn: tc.updateTaskFn,
|
|
161
|
+
writeMemoryFn: tc.writeMemoryFn,
|
|
162
|
+
createCompletedTaskFn: tc.createCompletedTaskFn,
|
|
163
|
+
settings: tc.settings,
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
catch {
|
|
167
|
+
return { completed: [], suggested: [], newTasksCreated: [], skipped: 0, error: "task completion failed" };
|
|
168
|
+
}
|
|
169
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-flush.js","sourceRoot":"","sources":["../src/session-flush.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session lifecycle manager — coordinates idle detection, session buffer,
|
|
3
|
+
* and auto-flush for local stdio MCP sessions.
|
|
4
|
+
*
|
|
5
|
+
* Created once per MCP server process. Tracks all tool calls via `onToolCall()`,
|
|
6
|
+
* resets an idle timer on each call, and flushes (context_checkpoint) when:
|
|
7
|
+
* - Idle timer fires (agent stopped calling tools)
|
|
8
|
+
* - stdin EOF detected (client disconnected)
|
|
9
|
+
* - SIGTERM/SIGINT received (process being killed)
|
|
10
|
+
*
|
|
11
|
+
* The flush is idempotent — only runs once per session.
|
|
12
|
+
*/
|
|
13
|
+
import { type SessionBufferData } from "./session-buffer.js";
|
|
14
|
+
import { type SessionFlushResult } from "./session-flush.js";
|
|
15
|
+
import type { ExtractionClient } from "./extraction-llm.js";
|
|
16
|
+
import type { ExtractionBudget } from "./extraction-budget.js";
|
|
17
|
+
import type { TaskLifecycleSettings } from "./task-lifecycle-types.js";
|
|
18
|
+
import { type OpenTask } from "./task-lifecycle.js";
|
|
19
|
+
export interface SessionLifecycleConfig {
|
|
20
|
+
agentRunId: string;
|
|
21
|
+
agentId: string;
|
|
22
|
+
vaultId: string;
|
|
23
|
+
idleTimeoutMs: number;
|
|
24
|
+
minToolCalls: number;
|
|
25
|
+
skipIfMemoriesWritten: number;
|
|
26
|
+
checkpointFn: (params: {
|
|
27
|
+
memories: Array<{
|
|
28
|
+
content: string;
|
|
29
|
+
memoryType: string;
|
|
30
|
+
importance: number;
|
|
31
|
+
confidence: number;
|
|
32
|
+
}>;
|
|
33
|
+
sessionSummary: string;
|
|
34
|
+
agentId: string;
|
|
35
|
+
agentRunId: string;
|
|
36
|
+
vaultId?: string;
|
|
37
|
+
dedup?: boolean;
|
|
38
|
+
}) => Promise<string>;
|
|
39
|
+
log: (msg: string) => void;
|
|
40
|
+
onIdle?: () => void;
|
|
41
|
+
extractionClient?: ExtractionClient;
|
|
42
|
+
readBudget?: () => Promise<ExtractionBudget>;
|
|
43
|
+
writeBudget?: (budget: ExtractionBudget) => Promise<void>;
|
|
44
|
+
fetchOpenTasks?: () => Promise<OpenTask[]>;
|
|
45
|
+
taskLifecycleSettings?: TaskLifecycleSettings;
|
|
46
|
+
updateTaskFn?: (taskId: string, updates: {
|
|
47
|
+
status: string;
|
|
48
|
+
completionSource: string;
|
|
49
|
+
completionEvidence: string;
|
|
50
|
+
}) => Promise<void>;
|
|
51
|
+
writeTaskSuggestionFn?: (content: string) => Promise<void>;
|
|
52
|
+
createCompletedTaskFn?: (task: {
|
|
53
|
+
title: string;
|
|
54
|
+
doneWhen?: string;
|
|
55
|
+
evidence: string;
|
|
56
|
+
}) => Promise<string | null>;
|
|
57
|
+
ingestTurnFn?: (content: string) => Promise<void>;
|
|
58
|
+
/** Interval (ms) for periodic ingestion of accumulated activity. Default: 5 minutes. */
|
|
59
|
+
ingestIntervalMs?: number;
|
|
60
|
+
}
|
|
61
|
+
export interface SessionLifecycle {
|
|
62
|
+
onToolCall(tool: string, inputSummary?: string, outputSummary?: string): void;
|
|
63
|
+
/** Record a rich transcript entry for auto-episodic generation. */
|
|
64
|
+
onTranscript(tool: string, context: string): void;
|
|
65
|
+
onMemoryWritten(memoryId: string): void;
|
|
66
|
+
flush(trigger: "idle" | "stdin_eof" | "sigterm" | "sigint" | "manual" | string): Promise<SessionFlushResult>;
|
|
67
|
+
getBufferData(): SessionBufferData;
|
|
68
|
+
getToolCallCount(): number;
|
|
69
|
+
wasCheckpointed(): boolean;
|
|
70
|
+
dispose(): void;
|
|
71
|
+
}
|
|
72
|
+
export declare function createSessionLifecycle(config: SessionLifecycleConfig): SessionLifecycle;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-lifecycle.d.ts","sourceRoot":"","sources":["../src/session-lifecycle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session lifecycle manager — coordinates idle detection, session buffer,
|
|
3
|
+
* and auto-flush for local stdio MCP sessions.
|
|
4
|
+
*
|
|
5
|
+
* Created once per MCP server process. Tracks all tool calls via `onToolCall()`,
|
|
6
|
+
* resets an idle timer on each call, and flushes (context_checkpoint) when:
|
|
7
|
+
* - Idle timer fires (agent stopped calling tools)
|
|
8
|
+
* - stdin EOF detected (client disconnected)
|
|
9
|
+
* - SIGTERM/SIGINT received (process being killed)
|
|
10
|
+
*
|
|
11
|
+
* The flush is idempotent — only runs once per session.
|
|
12
|
+
*/
|
|
13
|
+
import { createSessionBuffer, buildTurnContent } from "./session-buffer.js";
|
|
14
|
+
import { flushSession } from "./session-flush.js";
|
|
15
|
+
import { writeBufferToDisk, deleteBuffer } from "./buffer-persistence.js";
|
|
16
|
+
import { matchTaskActivity } from "./task-lifecycle.js";
|
|
17
|
+
/** Write buffer to disk every N tool calls for crash recovery. */
|
|
18
|
+
const DISK_WRITE_INTERVAL = 5;
|
|
19
|
+
export function createSessionLifecycle(config) {
|
|
20
|
+
const buffer = createSessionBuffer({
|
|
21
|
+
agentRunId: config.agentRunId,
|
|
22
|
+
agentId: config.agentId,
|
|
23
|
+
vaultId: config.vaultId,
|
|
24
|
+
});
|
|
25
|
+
let idleTimer = null;
|
|
26
|
+
let ingestTimer = null;
|
|
27
|
+
let flushed = false;
|
|
28
|
+
let toolCallCount = 0;
|
|
29
|
+
let writeCallCount = 0;
|
|
30
|
+
let autoTransitioned = false; // Only one auto-transition per session
|
|
31
|
+
let cachedTodoTasks = null;
|
|
32
|
+
/** Index into activities array — tracks what's been ingested already */
|
|
33
|
+
let lastIngestedActivityIndex = 0;
|
|
34
|
+
function resetIdleTimer() {
|
|
35
|
+
if (idleTimer !== null) {
|
|
36
|
+
clearTimeout(idleTimer);
|
|
37
|
+
idleTimer = null;
|
|
38
|
+
}
|
|
39
|
+
if (flushed)
|
|
40
|
+
return;
|
|
41
|
+
idleTimer = setTimeout(() => {
|
|
42
|
+
idleTimer = null;
|
|
43
|
+
config.log("[exovault-mcp] Idle timeout reached — flushing session");
|
|
44
|
+
config.onIdle?.();
|
|
45
|
+
}, config.idleTimeoutMs);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Start the periodic ingest timer (once, on first tool call).
|
|
49
|
+
* Fires every `ingestIntervalMs` to send accumulated activity to the
|
|
50
|
+
* extraction pipeline without waiting for session flush.
|
|
51
|
+
*/
|
|
52
|
+
function startPeriodicIngestTimer() {
|
|
53
|
+
if (ingestTimer !== null)
|
|
54
|
+
return; // already started
|
|
55
|
+
if (!config.ingestTurnFn || !config.ingestIntervalMs)
|
|
56
|
+
return;
|
|
57
|
+
ingestTimer = setInterval(() => {
|
|
58
|
+
if (flushed) {
|
|
59
|
+
if (ingestTimer !== null) {
|
|
60
|
+
clearInterval(ingestTimer);
|
|
61
|
+
ingestTimer = null;
|
|
62
|
+
}
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
void periodicIngest();
|
|
66
|
+
}, config.ingestIntervalMs);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Ingest only NEW activity since the last periodic ingest.
|
|
70
|
+
* Builds turn content from the slice of activities not yet sent.
|
|
71
|
+
*/
|
|
72
|
+
async function periodicIngest() {
|
|
73
|
+
if (!config.ingestTurnFn)
|
|
74
|
+
return;
|
|
75
|
+
const data = buffer.getData();
|
|
76
|
+
const newActivities = data.activities.slice(lastIngestedActivityIndex);
|
|
77
|
+
if (newActivities.length === 0)
|
|
78
|
+
return;
|
|
79
|
+
// Build turn content from the new slice only
|
|
80
|
+
const turnContent = buildTurnContent({
|
|
81
|
+
...data,
|
|
82
|
+
activities: newActivities,
|
|
83
|
+
});
|
|
84
|
+
if (!turnContent)
|
|
85
|
+
return;
|
|
86
|
+
try {
|
|
87
|
+
await config.ingestTurnFn(turnContent);
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
// Fire-and-forget — never crash because of ingestion
|
|
91
|
+
}
|
|
92
|
+
lastIngestedActivityIndex = data.activities.length;
|
|
93
|
+
}
|
|
94
|
+
function onToolCall(tool, inputSummary, outputSummary) {
|
|
95
|
+
buffer.recordActivity(tool, inputSummary, outputSummary);
|
|
96
|
+
resetIdleTimer();
|
|
97
|
+
startPeriodicIngestTimer();
|
|
98
|
+
// Periodic disk write for crash recovery (fire-and-forget)
|
|
99
|
+
toolCallCount++;
|
|
100
|
+
if (toolCallCount % DISK_WRITE_INTERVAL === 0) {
|
|
101
|
+
writeBufferToDisk(buffer.getData()).catch(() => { });
|
|
102
|
+
}
|
|
103
|
+
// Auto-status transitions: detect todo → in_progress from activity
|
|
104
|
+
// Only on write-category tools, debounced to every 3rd write, max once per session
|
|
105
|
+
const category = buffer.getData().activities.at(-1)?.category;
|
|
106
|
+
if (category === "write") {
|
|
107
|
+
writeCallCount++;
|
|
108
|
+
if (!autoTransitioned &&
|
|
109
|
+
writeCallCount % 3 === 0 &&
|
|
110
|
+
config.taskLifecycleSettings?.autoStatusTransitions &&
|
|
111
|
+
config.fetchOpenTasks &&
|
|
112
|
+
config.updateTaskFn) {
|
|
113
|
+
void checkAutoStatusTransition();
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/** Zero-cost keyword matching to auto-transition a todo task to in_progress. */
|
|
118
|
+
async function checkAutoStatusTransition() {
|
|
119
|
+
try {
|
|
120
|
+
// Lazy-load todo tasks (once per session)
|
|
121
|
+
if (!cachedTodoTasks) {
|
|
122
|
+
const allTasks = await config.fetchOpenTasks();
|
|
123
|
+
cachedTodoTasks = allTasks.filter((t) => t.status === "todo");
|
|
124
|
+
}
|
|
125
|
+
if (cachedTodoTasks.length === 0)
|
|
126
|
+
return;
|
|
127
|
+
const data = buffer.getData();
|
|
128
|
+
for (const task of cachedTodoTasks) {
|
|
129
|
+
const result = matchTaskActivity({ title: task.title, entities: [] }, data.activities);
|
|
130
|
+
if (result.match && result.confidence > 0.6) {
|
|
131
|
+
await config.updateTaskFn(task.id, {
|
|
132
|
+
status: "in_progress",
|
|
133
|
+
completionSource: "auto",
|
|
134
|
+
completionEvidence: `Activity match (confidence: ${result.confidence.toFixed(2)})`,
|
|
135
|
+
});
|
|
136
|
+
autoTransitioned = true;
|
|
137
|
+
config.log(`[exovault-mcp] Auto-transitioned task "${task.title}" to in_progress`);
|
|
138
|
+
// Remove from cached list so we don't re-match
|
|
139
|
+
cachedTodoTasks = cachedTodoTasks.filter((t) => t.id !== task.id);
|
|
140
|
+
break; // Only one transition per session
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
catch (e) {
|
|
145
|
+
config.log(`[exovault-mcp] Auto-status check failed: ${e.message}`);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
function onTranscript(tool, context) {
|
|
149
|
+
buffer.recordTranscript(tool, context);
|
|
150
|
+
}
|
|
151
|
+
function onMemoryWritten(memoryId) {
|
|
152
|
+
buffer.recordMemoryWrite(memoryId);
|
|
153
|
+
}
|
|
154
|
+
async function flush(trigger) {
|
|
155
|
+
if (flushed) {
|
|
156
|
+
return { action: "skipped", reason: "Session already flushed" };
|
|
157
|
+
}
|
|
158
|
+
flushed = true;
|
|
159
|
+
// Clear timers since we're flushing now
|
|
160
|
+
if (idleTimer !== null) {
|
|
161
|
+
clearTimeout(idleTimer);
|
|
162
|
+
idleTimer = null;
|
|
163
|
+
}
|
|
164
|
+
if (ingestTimer !== null) {
|
|
165
|
+
clearInterval(ingestTimer);
|
|
166
|
+
ingestTimer = null;
|
|
167
|
+
}
|
|
168
|
+
config.log(`[exovault-mcp] Flushing session (trigger: ${trigger})`);
|
|
169
|
+
const data = buffer.getData();
|
|
170
|
+
// Fetch open tasks for task completion detection (optional, fire-and-forget on failure)
|
|
171
|
+
let taskCompletion;
|
|
172
|
+
if (config.fetchOpenTasks && config.taskLifecycleSettings && config.updateTaskFn) {
|
|
173
|
+
try {
|
|
174
|
+
const openTasks = await config.fetchOpenTasks();
|
|
175
|
+
if (openTasks.length > 0) {
|
|
176
|
+
taskCompletion = {
|
|
177
|
+
openTasks,
|
|
178
|
+
settings: config.taskLifecycleSettings,
|
|
179
|
+
updateTaskFn: config.updateTaskFn,
|
|
180
|
+
writeMemoryFn: config.writeTaskSuggestionFn,
|
|
181
|
+
createCompletedTaskFn: config.createCompletedTaskFn,
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
catch (e) {
|
|
186
|
+
config.log(`[exovault-mcp] Failed to fetch open tasks: ${e.message}`);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
const result = await flushSession(data, {
|
|
190
|
+
checkpointed: buffer.wasCheckpointed(),
|
|
191
|
+
minToolCalls: config.minToolCalls,
|
|
192
|
+
skipIfMemoriesWritten: config.skipIfMemoriesWritten,
|
|
193
|
+
checkpointFn: config.checkpointFn,
|
|
194
|
+
agentRunId: config.agentRunId,
|
|
195
|
+
agentId: config.agentId,
|
|
196
|
+
vaultId: config.vaultId,
|
|
197
|
+
extractionClient: config.extractionClient,
|
|
198
|
+
readBudget: config.readBudget,
|
|
199
|
+
writeBudget: config.writeBudget,
|
|
200
|
+
taskCompletion,
|
|
201
|
+
});
|
|
202
|
+
// Auto-ingest only NEW activity not yet sent by the periodic timer
|
|
203
|
+
if (config.ingestTurnFn) {
|
|
204
|
+
const newActivities = data.activities.slice(lastIngestedActivityIndex);
|
|
205
|
+
if (newActivities.length > 0) {
|
|
206
|
+
const turnContent = buildTurnContent({
|
|
207
|
+
...data,
|
|
208
|
+
activities: newActivities,
|
|
209
|
+
});
|
|
210
|
+
if (turnContent) {
|
|
211
|
+
try {
|
|
212
|
+
await config.ingestTurnFn(turnContent);
|
|
213
|
+
}
|
|
214
|
+
catch {
|
|
215
|
+
// Fire-and-forget — never fail the flush because of ingestion
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
buffer.markFlushed();
|
|
221
|
+
// Clean up disk buffer after flush (fire-and-forget)
|
|
222
|
+
await deleteBuffer(config.agentRunId).catch(() => { });
|
|
223
|
+
config.log(`[exovault-mcp] Session flush complete: ${result.action}${result.reason ? ` (${result.reason})` : ""}${result.error ? ` error: ${result.error}` : ""}`);
|
|
224
|
+
return result;
|
|
225
|
+
}
|
|
226
|
+
function dispose() {
|
|
227
|
+
if (idleTimer !== null) {
|
|
228
|
+
clearTimeout(idleTimer);
|
|
229
|
+
idleTimer = null;
|
|
230
|
+
}
|
|
231
|
+
if (ingestTimer !== null) {
|
|
232
|
+
clearInterval(ingestTimer);
|
|
233
|
+
ingestTimer = null;
|
|
234
|
+
}
|
|
235
|
+
flushed = true;
|
|
236
|
+
}
|
|
237
|
+
return {
|
|
238
|
+
onToolCall,
|
|
239
|
+
onTranscript,
|
|
240
|
+
onMemoryWritten,
|
|
241
|
+
flush,
|
|
242
|
+
getBufferData: () => buffer.getData(),
|
|
243
|
+
getToolCallCount: () => toolCallCount,
|
|
244
|
+
wasCheckpointed: () => buffer.wasCheckpointed(),
|
|
245
|
+
dispose,
|
|
246
|
+
};
|
|
247
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-lifecycle.js","sourceRoot":"","sources":["../src/session-lifecycle.ts"],"names":[],"mappings":"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"}
|
package/dist/setup.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":""}
|