sensorium-mcp 2.16.140 → 2.16.141
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/data/memory/index.d.ts +1 -0
- package/dist/data/memory/index.d.ts.map +1 -1
- package/dist/data/memory/index.js +1 -0
- package/dist/data/memory/index.js.map +1 -1
- package/dist/data/memory/topic-shift.d.ts +24 -0
- package/dist/data/memory/topic-shift.d.ts.map +1 -0
- package/dist/data/memory/topic-shift.js +94 -0
- package/dist/data/memory/topic-shift.js.map +1 -0
- package/dist/tools/wait/message-processing.d.ts.map +1 -1
- package/dist/tools/wait/message-processing.js +11 -2
- package/dist/tools/wait/message-processing.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/data/memory/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/data/memory/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/data/memory/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/data/memory/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Topic-Shift Detector
|
|
3
|
+
*
|
|
4
|
+
* Detects when conversation drifts to a new topic by comparing
|
|
5
|
+
* the semantic embedding of the latest message against the
|
|
6
|
+
* centroid of recent conversation context.
|
|
7
|
+
*
|
|
8
|
+
* When a significant shift is detected, suggests creating a
|
|
9
|
+
* scoped ghost thread so the main thread stays focused.
|
|
10
|
+
*/
|
|
11
|
+
import type { Database } from "./schema.js";
|
|
12
|
+
export interface TopicShiftResult {
|
|
13
|
+
shifted: boolean;
|
|
14
|
+
similarity: number;
|
|
15
|
+
suggestedTopic: string;
|
|
16
|
+
recentTopicSummary: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Detect if a new message represents a topic shift from recent conversation.
|
|
20
|
+
*
|
|
21
|
+
* Returns null if detection can't run (too few messages, no API key, etc.)
|
|
22
|
+
*/
|
|
23
|
+
export declare function detectTopicShift(db: Database, threadId: number, newMessage: string): Promise<TopicShiftResult | null>;
|
|
24
|
+
//# sourceMappingURL=topic-shift.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"topic-shift.d.ts","sourceRoot":"","sources":["../../../src/data/memory/topic-shift.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAI5C,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAgDD;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,EAAE,EAAE,QAAQ,EACZ,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CA0ClC"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Topic-Shift Detector
|
|
3
|
+
*
|
|
4
|
+
* Detects when conversation drifts to a new topic by comparing
|
|
5
|
+
* the semantic embedding of the latest message against the
|
|
6
|
+
* centroid of recent conversation context.
|
|
7
|
+
*
|
|
8
|
+
* When a significant shift is detected, suggests creating a
|
|
9
|
+
* scoped ghost thread so the main thread stays focused.
|
|
10
|
+
*/
|
|
11
|
+
import { generateEmbedding, cosineSimilarity } from "../../integrations/openai/chat.js";
|
|
12
|
+
import { getRecentEpisodes } from "./episodes.js";
|
|
13
|
+
// ─── Constants ───────────────────────────────────────────────────────────────
|
|
14
|
+
/** Below this similarity, we consider it a topic shift */
|
|
15
|
+
const SHIFT_THRESHOLD = 0.55;
|
|
16
|
+
/** Number of recent messages to form the context centroid */
|
|
17
|
+
const CONTEXT_WINDOW = 8;
|
|
18
|
+
/** Minimum message length to consider for shift detection */
|
|
19
|
+
const MIN_MESSAGE_LENGTH = 30;
|
|
20
|
+
/** Embedding dimension (text-embedding-3-small) */
|
|
21
|
+
const EMBED_DIM = 1536;
|
|
22
|
+
// ─── Centroid Calculation ────────────────────────────────────────────────────
|
|
23
|
+
function meanEmbedding(embeddings) {
|
|
24
|
+
if (embeddings.length === 0)
|
|
25
|
+
return new Float32Array(EMBED_DIM);
|
|
26
|
+
if (embeddings.length === 1)
|
|
27
|
+
return embeddings[0];
|
|
28
|
+
const mean = new Float32Array(EMBED_DIM);
|
|
29
|
+
for (const emb of embeddings) {
|
|
30
|
+
for (let i = 0; i < EMBED_DIM; i++) {
|
|
31
|
+
mean[i] += emb[i];
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
for (let i = 0; i < EMBED_DIM; i++) {
|
|
35
|
+
mean[i] /= embeddings.length;
|
|
36
|
+
}
|
|
37
|
+
return mean;
|
|
38
|
+
}
|
|
39
|
+
// ─── Episode Text Extraction ─────────────────────────────────────────────────
|
|
40
|
+
function extractText(content) {
|
|
41
|
+
return (content.text || content.caption || content.message || "").trim();
|
|
42
|
+
}
|
|
43
|
+
function extractTopicHint(text) {
|
|
44
|
+
// Take first sentence or first 100 chars as a topic hint
|
|
45
|
+
const firstSentence = text.match(/^[^.!?\n]+[.!?]?/)?.[0] || text.slice(0, 100);
|
|
46
|
+
return firstSentence.trim();
|
|
47
|
+
}
|
|
48
|
+
// ─── Public API ──────────────────────────────────────────────────────────────
|
|
49
|
+
/**
|
|
50
|
+
* Detect if a new message represents a topic shift from recent conversation.
|
|
51
|
+
*
|
|
52
|
+
* Returns null if detection can't run (too few messages, no API key, etc.)
|
|
53
|
+
*/
|
|
54
|
+
export async function detectTopicShift(db, threadId, newMessage) {
|
|
55
|
+
const apiKey = process.env.OPENAI_API_KEY;
|
|
56
|
+
if (!apiKey)
|
|
57
|
+
return null;
|
|
58
|
+
if (newMessage.length < MIN_MESSAGE_LENGTH)
|
|
59
|
+
return null;
|
|
60
|
+
// Get recent operator messages for context
|
|
61
|
+
const recentEpisodes = getRecentEpisodes(db, threadId, CONTEXT_WINDOW * 2);
|
|
62
|
+
const operatorMessages = recentEpisodes
|
|
63
|
+
.filter((ep) => ep.type === "operator_message")
|
|
64
|
+
.slice(0, CONTEXT_WINDOW);
|
|
65
|
+
if (operatorMessages.length < 3)
|
|
66
|
+
return null; // need enough context
|
|
67
|
+
// Extract text from recent messages
|
|
68
|
+
const recentTexts = operatorMessages
|
|
69
|
+
.map((ep) => extractText(ep.content))
|
|
70
|
+
.filter((t) => t.length >= MIN_MESSAGE_LENGTH);
|
|
71
|
+
if (recentTexts.length < 2)
|
|
72
|
+
return null;
|
|
73
|
+
// Generate embeddings — new message + recent context
|
|
74
|
+
try {
|
|
75
|
+
const [newEmb, ...contextEmbs] = await Promise.all([
|
|
76
|
+
generateEmbedding(newMessage, apiKey),
|
|
77
|
+
...recentTexts.slice(0, 5).map((t) => generateEmbedding(t, apiKey)),
|
|
78
|
+
]);
|
|
79
|
+
// Compute centroid of recent context
|
|
80
|
+
const centroid = meanEmbedding(contextEmbs);
|
|
81
|
+
// Compare new message to centroid
|
|
82
|
+
const similarity = cosineSimilarity(newEmb, centroid);
|
|
83
|
+
return {
|
|
84
|
+
shifted: similarity < SHIFT_THRESHOLD,
|
|
85
|
+
similarity,
|
|
86
|
+
suggestedTopic: extractTopicHint(newMessage),
|
|
87
|
+
recentTopicSummary: extractTopicHint(recentTexts[0]),
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
return null; // embedding generation failed — skip silently
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=topic-shift.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"topic-shift.js","sourceRoot":"","sources":["../../../src/data/memory/topic-shift.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-processing.d.ts","sourceRoot":"","sources":["../../../src/tools/wait/message-processing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAoBH,OAAO,KAAK,EAAE,UAAU,EAAyB,MAAM,gBAAgB,CAAC;AACxE,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAMrE;;;;;;;;;;GAUG;AACH,wBAAsB,uBAAuB,CAC3C,iBAAiB,EAAE,MAAM,EACzB,WAAW,EAAE,MAAM,EACnB,GAAG,EAAE,eAAe,EACpB,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC,UAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"message-processing.d.ts","sourceRoot":"","sources":["../../../src/tools/wait/message-processing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAoBH,OAAO,KAAK,EAAE,UAAU,EAAyB,MAAM,gBAAgB,CAAC;AACxE,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAMrE;;;;;;;;;;GAUG;AACH,wBAAsB,uBAAuB,CAC3C,iBAAiB,EAAE,MAAM,EACzB,WAAW,EAAE,MAAM,EACnB,GAAG,EAAE,eAAe,EACpB,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC,UAAU,CAAC,CA4IrB;AAMD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,iBAAiB,EAAE,MAAM,GAAG,SAAS,EACrC,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,eAAe,GACnB,UAAU,CA4DZ"}
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* checks, auto-consolidation, memory refresh, and drive activation.
|
|
10
10
|
*/
|
|
11
11
|
import { readThreadMessages } from "../../dispatcher.js";
|
|
12
|
-
import { assembleCompactRefresh } from "../../memory.js";
|
|
12
|
+
import { assembleCompactRefresh, detectTopicShift } from "../../memory.js";
|
|
13
13
|
import { log } from "../../logger.js";
|
|
14
14
|
import { getReminders } from "../../response-builders.js";
|
|
15
15
|
import { listSchedules } from "../../scheduler.js";
|
|
@@ -130,7 +130,16 @@ export async function processIncomingMessages(effectiveThreadId, peekedCount, ct
|
|
|
130
130
|
.join(" ")
|
|
131
131
|
.slice(0, 500);
|
|
132
132
|
// Smart context injection (skills are now loaded on-demand via MCP tools)
|
|
133
|
-
|
|
133
|
+
let autoMemoryContext = await buildSmartContext(operatorText, { getMemoryDb, effectiveThreadId });
|
|
134
|
+
// Topic-shift detection
|
|
135
|
+
try {
|
|
136
|
+
const db = getMemoryDb();
|
|
137
|
+
const shift = await detectTopicShift(db, effectiveThreadId, operatorText);
|
|
138
|
+
if (shift?.shifted) {
|
|
139
|
+
autoMemoryContext += `\n\n## ⚡ Topic Shift Detected\nSimilarity to recent context: ${shift.similarity.toFixed(2)}\nRecent topic: "${shift.recentTopicSummary}"\nNew topic: "${shift.suggestedTopic}"\n\nConsider suggesting a focused ghost thread (via start_thread) for this new topic to keep the main thread focused.`;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
catch { /* non-fatal */ }
|
|
134
143
|
// Voice messages have no .text — extract transcriptions from content blocks
|
|
135
144
|
// so the intent classifier sees spoken words rather than empty string.
|
|
136
145
|
let intentText = operatorText;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-processing.js","sourceRoot":"","sources":["../../../src/tools/wait/message-processing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"message-processing.js","sourceRoot":"","sources":["../../../src/tools/wait/message-processing.ts"],"names":[],"mappings":"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"}
|