noverload-mcp 0.6.0 → 0.7.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/client.d.ts +8 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +77 -0
- package/dist/client.js.map +1 -1
- package/dist/llm-instructions.d.ts +87 -0
- package/dist/llm-instructions.d.ts.map +1 -0
- package/dist/llm-instructions.js +257 -0
- package/dist/llm-instructions.js.map +1 -0
- package/dist/tools/helpers/connections.d.ts +7 -0
- package/dist/tools/helpers/connections.d.ts.map +1 -0
- package/dist/tools/helpers/connections.js +85 -0
- package/dist/tools/helpers/connections.js.map +1 -0
- package/dist/tools/helpers/content-processing.d.ts +7 -0
- package/dist/tools/helpers/content-processing.d.ts.map +1 -0
- package/dist/tools/helpers/content-processing.js +136 -0
- package/dist/tools/helpers/content-processing.js.map +1 -0
- package/dist/tools/helpers/insights.d.ts +2 -0
- package/dist/tools/helpers/insights.d.ts.map +1 -0
- package/dist/tools/helpers/insights.js +62 -0
- package/dist/tools/helpers/insights.js.map +1 -0
- package/dist/tools/implementations/actions.d.ts +4 -0
- package/dist/tools/implementations/actions.d.ts.map +1 -0
- package/dist/tools/implementations/actions.js +73 -0
- package/dist/tools/implementations/actions.js.map +1 -0
- package/dist/tools/implementations/batch-get.d.ts +3 -0
- package/dist/tools/implementations/batch-get.d.ts.map +1 -0
- package/dist/tools/implementations/batch-get.js +102 -0
- package/dist/tools/implementations/batch-get.js.map +1 -0
- package/dist/tools/implementations/build-narrative.d.ts +3 -0
- package/dist/tools/implementations/build-narrative.d.ts.map +1 -0
- package/dist/tools/implementations/build-narrative.js +352 -0
- package/dist/tools/implementations/build-narrative.js.map +1 -0
- package/dist/tools/implementations/estimate-tokens.d.ts +3 -0
- package/dist/tools/implementations/estimate-tokens.d.ts.map +1 -0
- package/dist/tools/implementations/estimate-tokens.js +54 -0
- package/dist/tools/implementations/estimate-tokens.js.map +1 -0
- package/dist/tools/implementations/expand-search.d.ts +3 -0
- package/dist/tools/implementations/expand-search.d.ts.map +1 -0
- package/dist/tools/implementations/expand-search.js +223 -0
- package/dist/tools/implementations/expand-search.js.map +1 -0
- package/dist/tools/implementations/explore-topic.d.ts +3 -0
- package/dist/tools/implementations/explore-topic.d.ts.map +1 -0
- package/dist/tools/implementations/explore-topic.js +137 -0
- package/dist/tools/implementations/explore-topic.js.map +1 -0
- package/dist/tools/implementations/extract-frameworks.d.ts +3 -0
- package/dist/tools/implementations/extract-frameworks.d.ts.map +1 -0
- package/dist/tools/implementations/extract-frameworks.js +192 -0
- package/dist/tools/implementations/extract-frameworks.js.map +1 -0
- package/dist/tools/implementations/extract-insights.d.ts +3 -0
- package/dist/tools/implementations/extract-insights.d.ts.map +1 -0
- package/dist/tools/implementations/extract-insights.js +130 -0
- package/dist/tools/implementations/extract-insights.js.map +1 -0
- package/dist/tools/implementations/find-connections.d.ts +3 -0
- package/dist/tools/implementations/find-connections.d.ts.map +1 -0
- package/dist/tools/implementations/find-connections.js +106 -0
- package/dist/tools/implementations/find-connections.js.map +1 -0
- package/dist/tools/implementations/find-examples.d.ts +3 -0
- package/dist/tools/implementations/find-examples.d.ts.map +1 -0
- package/dist/tools/implementations/find-examples.js +242 -0
- package/dist/tools/implementations/find-examples.js.map +1 -0
- package/dist/tools/implementations/get-content.d.ts +3 -0
- package/dist/tools/implementations/get-content.d.ts.map +1 -0
- package/dist/tools/implementations/get-content.js +96 -0
- package/dist/tools/implementations/get-content.js.map +1 -0
- package/dist/tools/implementations/goals.d.ts +3 -0
- package/dist/tools/implementations/goals.d.ts.map +1 -0
- package/dist/tools/implementations/goals.js +22 -0
- package/dist/tools/implementations/goals.js.map +1 -0
- package/dist/tools/implementations/instructions.d.ts +3 -0
- package/dist/tools/implementations/instructions.d.ts.map +1 -0
- package/dist/tools/implementations/instructions.js +88 -0
- package/dist/tools/implementations/instructions.js.map +1 -0
- package/dist/tools/implementations/knowledge-graph.d.ts +3 -0
- package/dist/tools/implementations/knowledge-graph.d.ts.map +1 -0
- package/dist/tools/implementations/knowledge-graph.js +278 -0
- package/dist/tools/implementations/knowledge-graph.js.map +1 -0
- package/dist/tools/implementations/list-content.d.ts +3 -0
- package/dist/tools/implementations/list-content.d.ts.map +1 -0
- package/dist/tools/implementations/list-content.js +87 -0
- package/dist/tools/implementations/list-content.js.map +1 -0
- package/dist/tools/implementations/plan-query.d.ts +3 -0
- package/dist/tools/implementations/plan-query.d.ts.map +1 -0
- package/dist/tools/implementations/plan-query.js +63 -0
- package/dist/tools/implementations/plan-query.js.map +1 -0
- package/dist/tools/implementations/raw-content.d.ts +3 -0
- package/dist/tools/implementations/raw-content.d.ts.map +1 -0
- package/dist/tools/implementations/raw-content.js +208 -0
- package/dist/tools/implementations/raw-content.js.map +1 -0
- package/dist/tools/implementations/save-content.d.ts +3 -0
- package/dist/tools/implementations/save-content.d.ts.map +1 -0
- package/dist/tools/implementations/save-content.js +33 -0
- package/dist/tools/implementations/save-content.js.map +1 -0
- package/dist/tools/implementations/search.d.ts +3 -0
- package/dist/tools/implementations/search.d.ts.map +1 -0
- package/dist/tools/implementations/search.js +245 -0
- package/dist/tools/implementations/search.js.map +1 -0
- package/dist/tools/implementations/similar-content.d.ts +3 -0
- package/dist/tools/implementations/similar-content.d.ts.map +1 -0
- package/dist/tools/implementations/similar-content.js +64 -0
- package/dist/tools/implementations/similar-content.js.map +1 -0
- package/dist/tools/implementations/smart-sections.d.ts +3 -0
- package/dist/tools/implementations/smart-sections.d.ts.map +1 -0
- package/dist/tools/implementations/smart-sections.js +347 -0
- package/dist/tools/implementations/smart-sections.js.map +1 -0
- package/dist/tools/implementations/synthesize.d.ts +3 -0
- package/dist/tools/implementations/synthesize.d.ts.map +1 -0
- package/dist/tools/implementations/synthesize.js +148 -0
- package/dist/tools/implementations/synthesize.js.map +1 -0
- package/dist/tools/implementations/timeline.d.ts +3 -0
- package/dist/tools/implementations/timeline.d.ts.map +1 -0
- package/dist/tools/implementations/timeline.js +191 -0
- package/dist/tools/implementations/timeline.js.map +1 -0
- package/dist/tools/index-old.d.ts +16 -0
- package/dist/tools/index-old.d.ts.map +1 -0
- package/dist/tools/index-old.js +2176 -0
- package/dist/tools/index-old.js.map +1 -0
- package/dist/tools/index.d.ts +25 -14
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +57 -1079
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/types.d.ts +22 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +2 -0
- package/dist/tools/types.js.map +1 -0
- package/package.json +5 -5
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { chunkContent, detectSections } from "../helpers/content-processing.js";
|
|
3
|
+
export const getRawContentTool = {
|
|
4
|
+
name: "get_raw_content",
|
|
5
|
+
description: "Access full raw text of saved content with smart chunking for large documents. Requires confirmation for content >10k tokens. Returns complete unprocessed text or intelligently chunked sections.",
|
|
6
|
+
inputSchema: {
|
|
7
|
+
type: "object",
|
|
8
|
+
properties: {
|
|
9
|
+
contentId: {
|
|
10
|
+
type: "string",
|
|
11
|
+
description: "The ID of the content to retrieve raw text for",
|
|
12
|
+
},
|
|
13
|
+
format: {
|
|
14
|
+
type: "string",
|
|
15
|
+
enum: ["full", "chunks", "sections"],
|
|
16
|
+
description: "Format: 'full' (complete text), 'chunks' (semantic chunks), 'sections' (logical sections)",
|
|
17
|
+
default: "chunks",
|
|
18
|
+
},
|
|
19
|
+
maxTokens: {
|
|
20
|
+
type: "number",
|
|
21
|
+
description: "Maximum tokens to return (only for chunks/sections format)",
|
|
22
|
+
default: 50000,
|
|
23
|
+
},
|
|
24
|
+
chunkSize: {
|
|
25
|
+
type: "number",
|
|
26
|
+
description: "Target size for each chunk in tokens (for chunks format)",
|
|
27
|
+
default: 4000,
|
|
28
|
+
},
|
|
29
|
+
includeMetadata: {
|
|
30
|
+
type: "boolean",
|
|
31
|
+
description: "Include metadata about sections/chunks",
|
|
32
|
+
default: true,
|
|
33
|
+
},
|
|
34
|
+
confirmLargeContent: {
|
|
35
|
+
type: "boolean",
|
|
36
|
+
description: "Confirm retrieval of large content (>10k tokens)",
|
|
37
|
+
default: false,
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
required: ["contentId"],
|
|
41
|
+
},
|
|
42
|
+
modifies: false,
|
|
43
|
+
handler: async (client, args) => {
|
|
44
|
+
const schema = z.object({
|
|
45
|
+
contentId: z.string(),
|
|
46
|
+
format: z.enum(["full", "chunks", "sections"]).optional().default("chunks"),
|
|
47
|
+
maxTokens: z.number().optional().default(50000),
|
|
48
|
+
chunkSize: z.number().optional().default(4000),
|
|
49
|
+
includeMetadata: z.boolean().optional().default(true),
|
|
50
|
+
confirmLargeContent: z.boolean().optional().default(false),
|
|
51
|
+
});
|
|
52
|
+
const params = schema.parse(args);
|
|
53
|
+
// First get content metadata to check size
|
|
54
|
+
const content = await client.getContent(params.contentId);
|
|
55
|
+
if (!content.rawText) {
|
|
56
|
+
// Try to get raw content through v2 API with enrichment
|
|
57
|
+
const enrichedResult = await client.getEnrichedContent([params.contentId], true);
|
|
58
|
+
if (!enrichedResult || enrichedResult.length === 0 || !enrichedResult[0].rawText) {
|
|
59
|
+
return {
|
|
60
|
+
content: [
|
|
61
|
+
{
|
|
62
|
+
type: "text",
|
|
63
|
+
text: `No raw text available for content ID: ${params.contentId}. Content may still be processing or does not contain extractable text.`,
|
|
64
|
+
},
|
|
65
|
+
],
|
|
66
|
+
data: null,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
// Use the enriched content
|
|
70
|
+
content.rawText = enrichedResult[0].rawText;
|
|
71
|
+
content.tokenCount = enrichedResult[0].tokenCount;
|
|
72
|
+
}
|
|
73
|
+
const wordCount = content.rawText ? content.rawText.split(/\s+/).length : 0;
|
|
74
|
+
const estimatedTokens = content.tokenCount || Math.ceil(wordCount * 1.3);
|
|
75
|
+
// Check if confirmation is needed for large content
|
|
76
|
+
if (params.format === "full" && estimatedTokens > 10000 && !params.confirmLargeContent) {
|
|
77
|
+
let warningText = `# ⚠️ Large Content Warning\n\n`;
|
|
78
|
+
warningText += `**Content:** ${content.title || 'Untitled'}\n`;
|
|
79
|
+
warningText += `**Size:** ${wordCount.toLocaleString()} words (~${estimatedTokens.toLocaleString()} tokens)\n\n`;
|
|
80
|
+
if (estimatedTokens > 100000) {
|
|
81
|
+
warningText += `## 🚨 CRITICAL: Extremely Large Content\n`;
|
|
82
|
+
warningText += `This content contains ${estimatedTokens.toLocaleString()} tokens and will **exceed most LLM context windows**.\n\n`;
|
|
83
|
+
warningText += `**Recommendations:**\n`;
|
|
84
|
+
warningText += `1. Use format='chunks' to process in smaller pieces\n`;
|
|
85
|
+
warningText += `2. Use format='sections' to get logical divisions\n`;
|
|
86
|
+
warningText += `3. Use search_content to find specific information\n`;
|
|
87
|
+
warningText += `4. Use synthesize_content to get key insights without full text\n\n`;
|
|
88
|
+
}
|
|
89
|
+
else if (estimatedTokens > 50000) {
|
|
90
|
+
warningText += `## ⚠️ Very Large Content\n`;
|
|
91
|
+
warningText += `This content contains ${estimatedTokens.toLocaleString()} tokens and will use **most of your context window**.\n\n`;
|
|
92
|
+
warningText += `**Consider:**\n`;
|
|
93
|
+
warningText += `- Using format='chunks' for manageable pieces\n`;
|
|
94
|
+
warningText += `- Using search or synthesis tools instead\n\n`;
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
warningText += `## Large Content Notice\n`;
|
|
98
|
+
warningText += `This content will use ${estimatedTokens.toLocaleString()} tokens of your context.\n\n`;
|
|
99
|
+
}
|
|
100
|
+
warningText += `**To proceed with full text retrieval:**\n`;
|
|
101
|
+
warningText += `Call get_raw_content again with:\n`;
|
|
102
|
+
warningText += `- contentId: "${params.contentId}"\n`;
|
|
103
|
+
warningText += `- format: "full"\n`;
|
|
104
|
+
warningText += `- confirmLargeContent: true\n\n`;
|
|
105
|
+
warningText += `**Alternative approaches:**\n`;
|
|
106
|
+
warningText += `- format: "chunks" - Get content in ${Math.ceil(estimatedTokens / params.chunkSize)} chunks of ~${params.chunkSize} tokens\n`;
|
|
107
|
+
warningText += `- format: "sections" - Get logical sections with headers\n`;
|
|
108
|
+
return {
|
|
109
|
+
content: [
|
|
110
|
+
{
|
|
111
|
+
type: "text",
|
|
112
|
+
text: warningText,
|
|
113
|
+
},
|
|
114
|
+
],
|
|
115
|
+
data: {
|
|
116
|
+
requiresConfirmation: true,
|
|
117
|
+
contentId: params.contentId,
|
|
118
|
+
title: content.title,
|
|
119
|
+
estimatedTokens,
|
|
120
|
+
suggestedFormat: estimatedTokens > 50000 ? "chunks" : "sections",
|
|
121
|
+
chunkCount: Math.ceil(estimatedTokens / params.chunkSize),
|
|
122
|
+
},
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
let responseText = `# Raw Content: ${content.title || 'Untitled'}\n\n`;
|
|
126
|
+
responseText += `**Content Type:** ${content.contentType}\n`;
|
|
127
|
+
responseText += `**URL:** ${content.url}\n`;
|
|
128
|
+
responseText += `**Size:** ${wordCount.toLocaleString()} words (~${estimatedTokens.toLocaleString()} tokens)\n`;
|
|
129
|
+
// Add appropriate warning based on size
|
|
130
|
+
if (estimatedTokens > 50000 && params.format === "full") {
|
|
131
|
+
responseText += `\n⚠️ **Large content confirmed** - Returning ${estimatedTokens.toLocaleString()} tokens\n\n`;
|
|
132
|
+
}
|
|
133
|
+
let resultData = {
|
|
134
|
+
id: content.id,
|
|
135
|
+
title: content.title,
|
|
136
|
+
contentType: content.contentType,
|
|
137
|
+
totalTokens: estimatedTokens,
|
|
138
|
+
format: params.format,
|
|
139
|
+
};
|
|
140
|
+
if (params.format === "full") {
|
|
141
|
+
// Return full text (with confirmation)
|
|
142
|
+
responseText += `\n## Full Text Content\n`;
|
|
143
|
+
responseText += `*Complete raw text (${estimatedTokens.toLocaleString()} tokens) is available in the data field.*\n`;
|
|
144
|
+
resultData.text = content.rawText;
|
|
145
|
+
resultData.metadata = params.includeMetadata ? {
|
|
146
|
+
wordCount,
|
|
147
|
+
estimatedTokens,
|
|
148
|
+
contentType: content.contentType,
|
|
149
|
+
extractedAt: content.createdAt,
|
|
150
|
+
} : undefined;
|
|
151
|
+
}
|
|
152
|
+
else if (params.format === "chunks") {
|
|
153
|
+
// Smart chunking based on token size
|
|
154
|
+
const chunks = chunkContent(content.rawText || "", params.chunkSize, params.maxTokens);
|
|
155
|
+
responseText += `\n## Content Chunks\n`;
|
|
156
|
+
responseText += `**Total Chunks:** ${chunks.length}\n`;
|
|
157
|
+
responseText += `**Chunk Size:** ~${params.chunkSize} tokens each\n`;
|
|
158
|
+
if (chunks.length * params.chunkSize > params.maxTokens) {
|
|
159
|
+
responseText += `**Note:** Showing first ${chunks.length} chunks (limited by maxTokens: ${params.maxTokens})\n`;
|
|
160
|
+
}
|
|
161
|
+
responseText += `\n`;
|
|
162
|
+
// Show chunk previews
|
|
163
|
+
chunks.slice(0, 3).forEach((chunk, idx) => {
|
|
164
|
+
responseText += `### Chunk ${idx + 1}/${chunks.length}\n`;
|
|
165
|
+
responseText += `**Tokens:** ~${chunk.tokenCount}\n`;
|
|
166
|
+
responseText += `**Preview:** ${chunk.text.slice(0, 200)}...\n\n`;
|
|
167
|
+
});
|
|
168
|
+
if (chunks.length > 3) {
|
|
169
|
+
responseText += `*... and ${chunks.length - 3} more chunks*\n\n`;
|
|
170
|
+
}
|
|
171
|
+
responseText += `💡 **Tip:** To get a specific chunk, note the chunk index and request it directly.\n`;
|
|
172
|
+
resultData.chunks = chunks;
|
|
173
|
+
resultData.totalChunks = chunks.length;
|
|
174
|
+
}
|
|
175
|
+
else if (params.format === "sections") {
|
|
176
|
+
// Logical section detection (headers, paragraphs, etc.)
|
|
177
|
+
const sections = detectSections(content.rawText || "", content.contentType);
|
|
178
|
+
responseText += `\n## Content Sections\n`;
|
|
179
|
+
responseText += `**Total Sections:** ${sections.length}\n\n`;
|
|
180
|
+
// Show section outline
|
|
181
|
+
let totalSectionTokens = 0;
|
|
182
|
+
sections.forEach((section, idx) => {
|
|
183
|
+
responseText += `${idx + 1}. **${section.title || `Section ${idx + 1}`}**`;
|
|
184
|
+
if (section.type) {
|
|
185
|
+
responseText += ` (${section.type})`;
|
|
186
|
+
}
|
|
187
|
+
responseText += ` - ~${section.tokenCount} tokens\n`;
|
|
188
|
+
totalSectionTokens += section.tokenCount;
|
|
189
|
+
if (totalSectionTokens > params.maxTokens) {
|
|
190
|
+
responseText += ` *[Exceeds maxTokens limit]*\n`;
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
responseText += `\n*Full section content available in data field*\n`;
|
|
194
|
+
resultData.sections = sections;
|
|
195
|
+
resultData.totalSections = sections.length;
|
|
196
|
+
}
|
|
197
|
+
return {
|
|
198
|
+
content: [
|
|
199
|
+
{
|
|
200
|
+
type: "text",
|
|
201
|
+
text: responseText,
|
|
202
|
+
},
|
|
203
|
+
],
|
|
204
|
+
data: resultData,
|
|
205
|
+
};
|
|
206
|
+
},
|
|
207
|
+
};
|
|
208
|
+
//# sourceMappingURL=raw-content.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"raw-content.js","sourceRoot":"","sources":["../../../src/tools/implementations/raw-content.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"save-content.d.ts","sourceRoot":"","sources":["../../../src/tools/implementations/save-content.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAEnC,eAAO,MAAM,eAAe,EAAE,IA8B7B,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export const saveContentTool = {
|
|
3
|
+
name: "save_content",
|
|
4
|
+
description: "Save a new URL to Noverload for processing",
|
|
5
|
+
inputSchema: {
|
|
6
|
+
type: "object",
|
|
7
|
+
properties: {
|
|
8
|
+
url: {
|
|
9
|
+
type: "string",
|
|
10
|
+
description: "URL to save (YouTube, X/Twitter, Reddit, article, or PDF)",
|
|
11
|
+
},
|
|
12
|
+
},
|
|
13
|
+
required: ["url"],
|
|
14
|
+
},
|
|
15
|
+
modifies: true,
|
|
16
|
+
handler: async (client, args) => {
|
|
17
|
+
const schema = z.object({
|
|
18
|
+
url: z.string().url(),
|
|
19
|
+
});
|
|
20
|
+
const { url } = schema.parse(args);
|
|
21
|
+
const content = await client.saveContent(url);
|
|
22
|
+
return {
|
|
23
|
+
content: [
|
|
24
|
+
{
|
|
25
|
+
type: "text",
|
|
26
|
+
text: content.title ? `Saved: ${content.title}` : `Saved content from: ${new URL(url).hostname}`,
|
|
27
|
+
},
|
|
28
|
+
],
|
|
29
|
+
data: content,
|
|
30
|
+
};
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=save-content.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"save-content.js","sourceRoot":"","sources":["../../../src/tools/implementations/save-content.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,CAAC,MAAM,eAAe,GAAS;IACnC,IAAI,EAAE,cAAc;IACpB,WAAW,EAAE,4CAA4C;IACzD,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,GAAG,EAAE;gBACH,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,2DAA2D;aACzE;SACF;QACD,QAAQ,EAAE,CAAC,KAAK,CAAC;KAClB;IACD,QAAQ,EAAE,IAAI;IACd,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;QAC9B,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;YACtB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;SACtB,CAAC,CAAC;QACH,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAC9C,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,uBAAuB,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;iBACjG;aACF;YACD,IAAI,EAAE,OAAO;SACd,CAAC;IACJ,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/tools/implementations/search.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAEnC,eAAO,MAAM,iBAAiB,EAAE,IAiQ/B,CAAC"}
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export const searchContentTool = {
|
|
3
|
+
name: "search_content",
|
|
4
|
+
description: "Advanced search with OR/ANY logic, fuzzy matching, and smart filters. Supports multiple search modes, content type filtering, date ranges, and relevance explanations.",
|
|
5
|
+
inputSchema: {
|
|
6
|
+
type: "object",
|
|
7
|
+
properties: {
|
|
8
|
+
query: {
|
|
9
|
+
type: "string",
|
|
10
|
+
description: "Search query (supports 'term1 OR term2' for any match, quotes for exact phrases)",
|
|
11
|
+
},
|
|
12
|
+
searchMode: {
|
|
13
|
+
type: "string",
|
|
14
|
+
enum: ["any", "all", "phrase"],
|
|
15
|
+
description: "Search logic: 'any' (OR logic), 'all' (AND logic), 'phrase' (exact phrase)",
|
|
16
|
+
default: "any",
|
|
17
|
+
},
|
|
18
|
+
fuzzyMatch: {
|
|
19
|
+
type: "boolean",
|
|
20
|
+
description: "Enable fuzzy/typo-tolerant matching",
|
|
21
|
+
default: true,
|
|
22
|
+
},
|
|
23
|
+
tags: {
|
|
24
|
+
type: "array",
|
|
25
|
+
items: {
|
|
26
|
+
type: "string",
|
|
27
|
+
},
|
|
28
|
+
description: "Filter by tags",
|
|
29
|
+
},
|
|
30
|
+
limit: {
|
|
31
|
+
type: "number",
|
|
32
|
+
description: "Maximum results (default: 10)",
|
|
33
|
+
default: 10,
|
|
34
|
+
},
|
|
35
|
+
includeFullContent: {
|
|
36
|
+
type: "boolean",
|
|
37
|
+
description: "Include full text (WARNING: 10k-100k+ tokens)",
|
|
38
|
+
default: false,
|
|
39
|
+
},
|
|
40
|
+
contentTypes: {
|
|
41
|
+
type: "array",
|
|
42
|
+
items: {
|
|
43
|
+
type: "string",
|
|
44
|
+
enum: ["youtube", "x_twitter", "reddit", "article", "pdf"],
|
|
45
|
+
},
|
|
46
|
+
description: "Filter by content types",
|
|
47
|
+
},
|
|
48
|
+
dateFrom: {
|
|
49
|
+
type: "string",
|
|
50
|
+
description: "Content saved after this date (ISO 8601)",
|
|
51
|
+
},
|
|
52
|
+
dateTo: {
|
|
53
|
+
type: "string",
|
|
54
|
+
description: "Content saved before this date (ISO 8601)",
|
|
55
|
+
},
|
|
56
|
+
excludeDomains: {
|
|
57
|
+
type: "array",
|
|
58
|
+
items: {
|
|
59
|
+
type: "string",
|
|
60
|
+
},
|
|
61
|
+
description: "Domains to exclude",
|
|
62
|
+
},
|
|
63
|
+
showRelevanceExplanation: {
|
|
64
|
+
type: "boolean",
|
|
65
|
+
description: "Show why each result matched",
|
|
66
|
+
default: true,
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
required: ["query"],
|
|
70
|
+
},
|
|
71
|
+
modifies: false,
|
|
72
|
+
handler: async (client, args) => {
|
|
73
|
+
const schema = z.object({
|
|
74
|
+
query: z.string(),
|
|
75
|
+
searchMode: z.enum(["any", "all", "phrase"]).optional().default("any"),
|
|
76
|
+
fuzzyMatch: z.boolean().optional().default(true),
|
|
77
|
+
tags: z.array(z.string()).optional(),
|
|
78
|
+
limit: z.number().optional().default(10),
|
|
79
|
+
includeFullContent: z.boolean().optional().default(false),
|
|
80
|
+
contentTypes: z.array(z.enum(["youtube", "x_twitter", "reddit", "article", "pdf"])).optional(),
|
|
81
|
+
dateFrom: z.string().optional(),
|
|
82
|
+
dateTo: z.string().optional(),
|
|
83
|
+
excludeDomains: z.array(z.string()).optional(),
|
|
84
|
+
showRelevanceExplanation: z.boolean().optional().default(true),
|
|
85
|
+
});
|
|
86
|
+
const params = schema.parse(args);
|
|
87
|
+
// Enhance search query based on mode
|
|
88
|
+
let enhancedQuery = params.query;
|
|
89
|
+
if (params.searchMode === "any" && !params.query.includes("OR")) {
|
|
90
|
+
// Convert space-separated terms to OR query for broader matching
|
|
91
|
+
const terms = params.query.split(/\s+/).filter(t => t.length > 2);
|
|
92
|
+
if (terms.length > 1) {
|
|
93
|
+
enhancedQuery = terms.join(" OR ");
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
const results = await client.searchContent(enhancedQuery, {
|
|
97
|
+
...params,
|
|
98
|
+
enableConceptExpansion: params.fuzzyMatch, // Use fuzzy matching as concept expansion
|
|
99
|
+
});
|
|
100
|
+
// Format response with visual indicators
|
|
101
|
+
let responseText = `# 🔍 Search Results: "${params.query}"\n`;
|
|
102
|
+
responseText += `**Mode:** ${params.searchMode.toUpperCase()}${params.fuzzyMatch ? " with fuzzy matching" : ""}\n`;
|
|
103
|
+
responseText += `**Found:** ${results.length} results`;
|
|
104
|
+
// Show active filters
|
|
105
|
+
const filters = [];
|
|
106
|
+
if (params.tags?.length)
|
|
107
|
+
filters.push(`📌 tags: ${params.tags.join(", ")}`);
|
|
108
|
+
if (params.contentTypes?.length)
|
|
109
|
+
filters.push(`📁 types: ${params.contentTypes.join(", ")}`);
|
|
110
|
+
if (params.dateFrom || params.dateTo)
|
|
111
|
+
filters.push(`📅 date range`);
|
|
112
|
+
if (params.excludeDomains?.length)
|
|
113
|
+
filters.push(`🚫 excluded: ${params.excludeDomains.join(", ")}`);
|
|
114
|
+
if (filters.length > 0) {
|
|
115
|
+
responseText += `\n**Filters:** ${filters.join(" | ")}`;
|
|
116
|
+
}
|
|
117
|
+
if (params.includeFullContent) {
|
|
118
|
+
responseText += `\n⚠️ **Full content included** - consuming significant tokens`;
|
|
119
|
+
}
|
|
120
|
+
responseText += `\n\n`;
|
|
121
|
+
if (results.length > 0) {
|
|
122
|
+
// Add search suggestions if no perfect matches
|
|
123
|
+
if (results.length < 3) {
|
|
124
|
+
responseText += `💡 **Tip:** Try broader search with 'any' mode or disable filters for more results\n\n`;
|
|
125
|
+
}
|
|
126
|
+
results.forEach((result, idx) => {
|
|
127
|
+
// Visual indicators for content type
|
|
128
|
+
const typeIcons = {
|
|
129
|
+
youtube: "📺",
|
|
130
|
+
x_twitter: "𝕏",
|
|
131
|
+
reddit: "🔗",
|
|
132
|
+
article: "📄",
|
|
133
|
+
pdf: "📑"
|
|
134
|
+
};
|
|
135
|
+
const typeIcon = typeIcons[result.contentType] || "📄";
|
|
136
|
+
// Relevance indicator
|
|
137
|
+
let relevanceIcon = "";
|
|
138
|
+
if (result.relevanceScore) {
|
|
139
|
+
if (result.relevanceScore > 0.8)
|
|
140
|
+
relevanceIcon = "🎯";
|
|
141
|
+
else if (result.relevanceScore > 0.6)
|
|
142
|
+
relevanceIcon = "✅";
|
|
143
|
+
else if (result.relevanceScore > 0.4)
|
|
144
|
+
relevanceIcon = "➡️";
|
|
145
|
+
}
|
|
146
|
+
responseText += `## ${idx + 1}. ${typeIcon} ${result.title || 'Untitled'} ${relevanceIcon}\n`;
|
|
147
|
+
responseText += `**ID:** \`${result.id}\`\n`;
|
|
148
|
+
responseText += `**URL:** ${result.url}\n`;
|
|
149
|
+
// Show relevance explanation if available
|
|
150
|
+
if (params.showRelevanceExplanation) {
|
|
151
|
+
if (result.matchReason && Array.isArray(result.matchReason)) {
|
|
152
|
+
responseText += `**Why matched:** Matched in ${result.matchReason.join(", ")}\n`;
|
|
153
|
+
}
|
|
154
|
+
else if (result.relevanceScore) {
|
|
155
|
+
const percentage = (result.relevanceScore * 100).toFixed(0);
|
|
156
|
+
responseText += `**Relevance:** ${percentage}% match\n`;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
// Content size indicator with better formatting
|
|
160
|
+
if (result.tokenCount) {
|
|
161
|
+
const sizeIcon = result.tokenCount > 50000 ? "🚨" :
|
|
162
|
+
result.tokenCount > 10000 ? "⚠️" :
|
|
163
|
+
result.tokenCount > 5000 ? "📊" : "📝";
|
|
164
|
+
responseText += `**Size:** ${sizeIcon} ~${result.tokenCount.toLocaleString()} tokens`;
|
|
165
|
+
if (params.includeFullContent) {
|
|
166
|
+
responseText += ` (full content included)`;
|
|
167
|
+
}
|
|
168
|
+
responseText += `\n`;
|
|
169
|
+
}
|
|
170
|
+
// Tags with better formatting
|
|
171
|
+
if (result.tags && result.tags.length > 0) {
|
|
172
|
+
responseText += `**Tags:** ${result.tags.map((t) => `\`${t}\``).join(' ')}\n`;
|
|
173
|
+
}
|
|
174
|
+
// Summary section with structure
|
|
175
|
+
if (result.summary) {
|
|
176
|
+
const summaryObj = typeof result.summary === 'string'
|
|
177
|
+
? { text: result.summary }
|
|
178
|
+
: result.summary;
|
|
179
|
+
if (summaryObj.one_sentence) {
|
|
180
|
+
responseText += `\n📝 **Summary:** ${summaryObj.one_sentence}\n`;
|
|
181
|
+
}
|
|
182
|
+
// Key insights with bullets
|
|
183
|
+
if (summaryObj.key_insights && Array.isArray(summaryObj.key_insights) && summaryObj.key_insights.length > 0) {
|
|
184
|
+
responseText += `\n💡 **Key Insights:**\n`;
|
|
185
|
+
summaryObj.key_insights.slice(0, 3).forEach((insight) => {
|
|
186
|
+
responseText += ` • ${insight}\n`;
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
// Actionable takeaways
|
|
190
|
+
if (summaryObj.actionable_takeaways && Array.isArray(summaryObj.actionable_takeaways) && summaryObj.actionable_takeaways.length > 0) {
|
|
191
|
+
responseText += `\n🎯 **Actions:**\n`;
|
|
192
|
+
summaryObj.actionable_takeaways.slice(0, 2).forEach((action) => {
|
|
193
|
+
responseText += ` → ${action}\n`;
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
responseText += '\n---\n\n';
|
|
198
|
+
});
|
|
199
|
+
// Smart token usage summary
|
|
200
|
+
if (!params.includeFullContent) {
|
|
201
|
+
let totalAvailable = 0;
|
|
202
|
+
results.forEach((r) => {
|
|
203
|
+
if (r.tokenCount)
|
|
204
|
+
totalAvailable += r.tokenCount;
|
|
205
|
+
});
|
|
206
|
+
if (totalAvailable > 0) {
|
|
207
|
+
responseText += `\n📊 **Content Overview:**\n`;
|
|
208
|
+
responseText += `- Showing: Summaries and metadata (minimal tokens)\n`;
|
|
209
|
+
responseText += `- Available: ~${totalAvailable.toLocaleString()} tokens of full content\n`;
|
|
210
|
+
responseText += `- To access: Use \`get_content_details\` for specific items\n`;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
// Search quality feedback
|
|
214
|
+
if (results.length === params.limit) {
|
|
215
|
+
responseText += `\n💡 **Note:** Showing top ${params.limit} results. More may be available.\n`;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
// No results - provide helpful suggestions
|
|
220
|
+
responseText += "## No Results Found 😔\n\n";
|
|
221
|
+
responseText += "**Try these approaches:**\n";
|
|
222
|
+
responseText += "1. 🔄 Switch to `searchMode: 'any'` for broader matching\n";
|
|
223
|
+
responseText += "2. ✏️ Check spelling or use simpler terms\n";
|
|
224
|
+
responseText += "3. 🎯 Remove filters (dates, types, domains)\n";
|
|
225
|
+
responseText += "4. 🔍 Use more general keywords\n";
|
|
226
|
+
// Suggest alternative queries
|
|
227
|
+
const terms = params.query.split(/\s+/);
|
|
228
|
+
if (terms.length > 1) {
|
|
229
|
+
responseText += `\n**Alternative queries:**\n`;
|
|
230
|
+
responseText += `- "${terms[0]}" (single term)\n`;
|
|
231
|
+
responseText += `- "${terms.slice(0, 2).join(' ')}" (first two terms)\n`;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
return {
|
|
235
|
+
content: [
|
|
236
|
+
{
|
|
237
|
+
type: "text",
|
|
238
|
+
text: responseText,
|
|
239
|
+
},
|
|
240
|
+
],
|
|
241
|
+
data: results,
|
|
242
|
+
};
|
|
243
|
+
},
|
|
244
|
+
};
|
|
245
|
+
//# sourceMappingURL=search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/tools/implementations/search.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"similar-content.d.ts","sourceRoot":"","sources":["../../../src/tools/implementations/similar-content.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAEnC,eAAO,MAAM,sBAAsB,EAAE,IA+DpC,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export const findSimilarContentTool = {
|
|
3
|
+
name: "find_similar_content",
|
|
4
|
+
description: "Find content similar to a specific saved item using semantic similarity.",
|
|
5
|
+
inputSchema: {
|
|
6
|
+
type: "object",
|
|
7
|
+
properties: {
|
|
8
|
+
contentId: {
|
|
9
|
+
type: "string",
|
|
10
|
+
description: "ID of the content to find similar items for",
|
|
11
|
+
},
|
|
12
|
+
limit: {
|
|
13
|
+
type: "number",
|
|
14
|
+
description: "Maximum number of similar items to return",
|
|
15
|
+
default: 5,
|
|
16
|
+
},
|
|
17
|
+
minSimilarity: {
|
|
18
|
+
type: "number",
|
|
19
|
+
description: "Minimum similarity score (0-1)",
|
|
20
|
+
default: 0.7,
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
required: ["contentId"],
|
|
24
|
+
},
|
|
25
|
+
modifies: false,
|
|
26
|
+
handler: async (client, args) => {
|
|
27
|
+
const schema = z.object({
|
|
28
|
+
contentId: z.string(),
|
|
29
|
+
limit: z.number().optional().default(5),
|
|
30
|
+
minSimilarity: z.number().optional().default(0.7),
|
|
31
|
+
});
|
|
32
|
+
const params = schema.parse(args);
|
|
33
|
+
const result = await client.findSimilarContent(params.contentId, {
|
|
34
|
+
limit: params.limit,
|
|
35
|
+
minSimilarity: params.minSimilarity,
|
|
36
|
+
});
|
|
37
|
+
let responseText = `# Similar Content to: ${result.source?.title || "Unknown"}\n\n`;
|
|
38
|
+
if (result.similarContent && result.similarContent.length > 0) {
|
|
39
|
+
responseText += `Found ${result.similarContent.length} similar items:\n\n`;
|
|
40
|
+
result.similarContent.forEach((item, idx) => {
|
|
41
|
+
responseText += `## ${idx + 1}. ${item.title || "Untitled"}\n`;
|
|
42
|
+
responseText += `**Similarity:** ${(item.similarity * 100).toFixed(1)}%\n`;
|
|
43
|
+
responseText += `**Type:** ${item.type || item.contentType || "unknown"} | **URL:** ${item.url}\n`;
|
|
44
|
+
if (item.summary) {
|
|
45
|
+
responseText += `**Summary:** ${item.summary}\n`;
|
|
46
|
+
}
|
|
47
|
+
responseText += `\n`;
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
responseText += `No similar content found with similarity >= ${params.minSimilarity}`;
|
|
52
|
+
}
|
|
53
|
+
return {
|
|
54
|
+
content: [
|
|
55
|
+
{
|
|
56
|
+
type: "text",
|
|
57
|
+
text: responseText,
|
|
58
|
+
},
|
|
59
|
+
],
|
|
60
|
+
data: result,
|
|
61
|
+
};
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
//# sourceMappingURL=similar-content.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"similar-content.js","sourceRoot":"","sources":["../../../src/tools/implementations/similar-content.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,CAAC,MAAM,sBAAsB,GAAS;IAC1C,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EAAE,0EAA0E;IACvF,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,6CAA6C;aAC3D;YACD,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,2CAA2C;gBACxD,OAAO,EAAE,CAAC;aACX;YACD,aAAa,EAAE;gBACb,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,gCAAgC;gBAC7C,OAAO,EAAE,GAAG;aACb;SACF;QACD,QAAQ,EAAE,CAAC,WAAW,CAAC;KACxB;IACD,QAAQ,EAAE,KAAK;IACf,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;QAC9B,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;YACtB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;YACrB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;YACvC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;SAClD,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,SAAS,EAAE;YAC/D,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,aAAa,EAAE,MAAM,CAAC,aAAa;SACpC,CAAC,CAAC;QAEH,IAAI,YAAY,GAAG,yBAAyB,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,SAAS,MAAM,CAAC;QAEpF,IAAI,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9D,YAAY,IAAI,SAAS,MAAM,CAAC,cAAc,CAAC,MAAM,qBAAqB,CAAC;YAC3E,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,IAAS,EAAE,GAAW,EAAE,EAAE;gBACvD,YAAY,IAAI,MAAM,GAAG,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK,IAAI,UAAU,IAAI,CAAC;gBAC/D,YAAY,IAAI,mBAAmB,CAAC,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;gBAC3E,YAAY,IAAI,aAAa,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,IAAI,SAAS,eAAe,IAAI,CAAC,GAAG,IAAI,CAAC;gBACnG,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBACjB,YAAY,IAAI,gBAAgB,IAAI,CAAC,OAAO,IAAI,CAAC;gBACnD,CAAC;gBACD,YAAY,IAAI,IAAI,CAAC;YACvB,CAAC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,YAAY,IAAI,+CAA+C,MAAM,CAAC,aAAa,EAAE,CAAC;QACxF,CAAC;QAED,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,YAAY;iBACnB;aACF;YACD,IAAI,EAAE,MAAM;SACb,CAAC;IACJ,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"smart-sections.d.ts","sourceRoot":"","sources":["../../../src/tools/implementations/smart-sections.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAsPnC,eAAO,MAAM,iBAAiB,EAAE,IAoK/B,CAAC"}
|