screenpipe-mcp 0.13.0 → 0.14.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/index.js +21 -5
- package/package.json +1 -1
- package/src/index.ts +35 -7
package/dist/index.js
CHANGED
|
@@ -136,9 +136,10 @@ const TOOLS = [
|
|
|
136
136
|
},
|
|
137
137
|
{
|
|
138
138
|
name: "activity-summary",
|
|
139
|
-
description: "
|
|
139
|
+
description: "Rich activity overview: app usage, window/tab titles with URLs and time spent, key text per context, audio transcriptions. " +
|
|
140
140
|
"USE THIS FIRST for broad questions: 'what was I doing?', 'how long on X?', 'which apps?'. " +
|
|
141
|
-
"
|
|
141
|
+
"The 'windows' field shows exactly what the user worked on (e.g. 'Debug crash issue — 20 min', 'Stripe pricing page — 5 min'). " +
|
|
142
|
+
"Usually sufficient without further searches.",
|
|
142
143
|
annotations: { title: "Activity Summary", readOnlyHint: true, openWorldHint: false, idempotentHint: true },
|
|
143
144
|
inputSchema: {
|
|
144
145
|
type: "object",
|
|
@@ -661,8 +662,19 @@ server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
|
|
|
661
662
|
: "";
|
|
662
663
|
return ` ${a.name}: ${a.minutes} min (${a.frame_count} frames${timeSpan})`;
|
|
663
664
|
});
|
|
665
|
+
// Window/tab activity — what pages/documents were open
|
|
666
|
+
const windowLines = (data.windows || []).map((w) => {
|
|
667
|
+
const url = w.browser_url ? ` (${w.browser_url})` : "";
|
|
668
|
+
return ` [${w.app_name}] ${w.window_name}${url} — ${w.minutes} min`;
|
|
669
|
+
});
|
|
664
670
|
const speakerLines = (data.audio_summary?.speakers || []).map((s) => ` ${s.name}: ${s.segment_count} segments`);
|
|
665
|
-
|
|
671
|
+
// Actual audio transcriptions (not just counts)
|
|
672
|
+
const transcriptLines = (data.audio_summary?.top_transcriptions || []).map((t) => ` [${t.speaker}, ${t.timestamp.slice(11, 19)}] ${t.transcription}`);
|
|
673
|
+
// Key text content sampled across the time range
|
|
674
|
+
const textLines = (data.key_texts || data.recent_texts || []).map((t) => {
|
|
675
|
+
const win = t.window_name ? ` | ${t.window_name}` : "";
|
|
676
|
+
return ` [${t.app_name}${win}, ${t.timestamp.slice(11, 19)}] ${t.text}`;
|
|
677
|
+
});
|
|
666
678
|
const summary = [
|
|
667
679
|
`Activity Summary (${data.time_range?.start} → ${data.time_range?.end})`,
|
|
668
680
|
`Total frames: ${data.total_frames}`,
|
|
@@ -670,11 +682,15 @@ server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
|
|
|
670
682
|
"Apps:",
|
|
671
683
|
...(appsLines.length ? appsLines : [" (none)"]),
|
|
672
684
|
"",
|
|
685
|
+
"Windows & Tabs:",
|
|
686
|
+
...(windowLines.length ? windowLines.slice(0, 20) : [" (none)"]),
|
|
687
|
+
"",
|
|
673
688
|
`Audio: ${data.audio_summary?.segment_count || 0} segments`,
|
|
674
689
|
...(speakerLines.length ? speakerLines : []),
|
|
690
|
+
...(transcriptLines.length ? ["", "Audio transcriptions:", ...transcriptLines.slice(0, 15)] : []),
|
|
675
691
|
"",
|
|
676
|
-
"
|
|
677
|
-
...(textLines.length ? textLines.slice(0,
|
|
692
|
+
"Key content (sampled across time range):",
|
|
693
|
+
...(textLines.length ? textLines.slice(0, 20) : [" (none)"]),
|
|
678
694
|
].join("\n");
|
|
679
695
|
return { content: [{ type: "text", text: summary }] };
|
|
680
696
|
}
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -119,9 +119,10 @@ const TOOLS: Tool[] = [
|
|
|
119
119
|
{
|
|
120
120
|
name: "activity-summary",
|
|
121
121
|
description:
|
|
122
|
-
"
|
|
122
|
+
"Rich activity overview: app usage, window/tab titles with URLs and time spent, key text per context, audio transcriptions. " +
|
|
123
123
|
"USE THIS FIRST for broad questions: 'what was I doing?', 'how long on X?', 'which apps?'. " +
|
|
124
|
-
"
|
|
124
|
+
"The 'windows' field shows exactly what the user worked on (e.g. 'Debug crash issue — 20 min', 'Stripe pricing page — 5 min'). " +
|
|
125
|
+
"Usually sufficient without further searches.",
|
|
125
126
|
annotations: { title: "Activity Summary", readOnlyHint: true, openWorldHint: false, idempotentHint: true },
|
|
126
127
|
inputSchema: {
|
|
127
128
|
type: "object",
|
|
@@ -709,14 +710,37 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
709
710
|
}
|
|
710
711
|
);
|
|
711
712
|
|
|
713
|
+
// Window/tab activity — what pages/documents were open
|
|
714
|
+
const windowLines = (data.windows || []).map(
|
|
715
|
+
(w: {
|
|
716
|
+
app_name: string;
|
|
717
|
+
window_name: string;
|
|
718
|
+
browser_url: string;
|
|
719
|
+
minutes: number;
|
|
720
|
+
frame_count: number;
|
|
721
|
+
}) => {
|
|
722
|
+
const url = w.browser_url ? ` (${w.browser_url})` : "";
|
|
723
|
+
return ` [${w.app_name}] ${w.window_name}${url} — ${w.minutes} min`;
|
|
724
|
+
}
|
|
725
|
+
);
|
|
726
|
+
|
|
712
727
|
const speakerLines = (data.audio_summary?.speakers || []).map(
|
|
713
728
|
(s: { name: string; segment_count: number }) =>
|
|
714
729
|
` ${s.name}: ${s.segment_count} segments`
|
|
715
730
|
);
|
|
716
731
|
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
732
|
+
// Actual audio transcriptions (not just counts)
|
|
733
|
+
const transcriptLines = (data.audio_summary?.top_transcriptions || []).map(
|
|
734
|
+
(t: { transcription: string; speaker: string; device: string; timestamp: string }) =>
|
|
735
|
+
` [${t.speaker}, ${t.timestamp.slice(11, 19)}] ${t.transcription}`
|
|
736
|
+
);
|
|
737
|
+
|
|
738
|
+
// Key text content sampled across the time range
|
|
739
|
+
const textLines = (data.key_texts || data.recent_texts || []).map(
|
|
740
|
+
(t: { text: string; app_name: string; window_name?: string; timestamp: string }) => {
|
|
741
|
+
const win = t.window_name ? ` | ${t.window_name}` : "";
|
|
742
|
+
return ` [${t.app_name}${win}, ${t.timestamp.slice(11, 19)}] ${t.text}`;
|
|
743
|
+
}
|
|
720
744
|
);
|
|
721
745
|
|
|
722
746
|
const summary = [
|
|
@@ -726,11 +750,15 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
726
750
|
"Apps:",
|
|
727
751
|
...(appsLines.length ? appsLines : [" (none)"]),
|
|
728
752
|
"",
|
|
753
|
+
"Windows & Tabs:",
|
|
754
|
+
...(windowLines.length ? windowLines.slice(0, 20) : [" (none)"]),
|
|
755
|
+
"",
|
|
729
756
|
`Audio: ${data.audio_summary?.segment_count || 0} segments`,
|
|
730
757
|
...(speakerLines.length ? speakerLines : []),
|
|
758
|
+
...(transcriptLines.length ? ["", "Audio transcriptions:", ...transcriptLines.slice(0, 15)] : []),
|
|
731
759
|
"",
|
|
732
|
-
"
|
|
733
|
-
...(textLines.length ? textLines.slice(0,
|
|
760
|
+
"Key content (sampled across time range):",
|
|
761
|
+
...(textLines.length ? textLines.slice(0, 20) : [" (none)"]),
|
|
734
762
|
].join("\n");
|
|
735
763
|
|
|
736
764
|
return { content: [{ type: "text", text: summary }] };
|