noverload-mcp 0.8.4 → 0.9.1
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 +15 -15
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +21 -9
- package/dist/client.js.map +1 -1
- package/dist/index.js +39 -19
- package/dist/index.js.map +1 -1
- package/dist/tools/implementations/_archived/estimate-tokens.d.ts +3 -0
- package/dist/tools/implementations/_archived/estimate-tokens.d.ts.map +1 -0
- package/dist/tools/implementations/_archived/estimate-tokens.js +54 -0
- package/dist/tools/implementations/_archived/estimate-tokens.js.map +1 -0
- package/dist/tools/implementations/_archived/expand-search.d.ts +3 -0
- package/dist/tools/implementations/_archived/expand-search.d.ts.map +1 -0
- package/dist/tools/implementations/_archived/expand-search.js +400 -0
- package/dist/tools/implementations/_archived/expand-search.js.map +1 -0
- package/dist/tools/implementations/_archived/extract-insights.d.ts +3 -0
- package/dist/tools/implementations/_archived/extract-insights.d.ts.map +1 -0
- package/dist/tools/implementations/_archived/extract-insights.js +130 -0
- package/dist/tools/implementations/_archived/extract-insights.js.map +1 -0
- package/dist/tools/implementations/_archived/find-connections.d.ts +3 -0
- package/dist/tools/implementations/_archived/find-connections.d.ts.map +1 -0
- package/dist/tools/implementations/_archived/find-connections.js +106 -0
- package/dist/tools/implementations/_archived/find-connections.js.map +1 -0
- package/dist/tools/implementations/_archived/instructions.d.ts +3 -0
- package/dist/tools/implementations/_archived/instructions.d.ts.map +1 -0
- package/dist/tools/implementations/_archived/instructions.js +88 -0
- package/dist/tools/implementations/_archived/instructions.js.map +1 -0
- package/dist/tools/implementations/_archived/knowledge-graph.d.ts +3 -0
- package/dist/tools/implementations/_archived/knowledge-graph.d.ts.map +1 -0
- package/dist/tools/implementations/_archived/knowledge-graph.js +278 -0
- package/dist/tools/implementations/_archived/knowledge-graph.js.map +1 -0
- package/dist/tools/implementations/_archived/plan-query.d.ts +3 -0
- package/dist/tools/implementations/_archived/plan-query.d.ts.map +1 -0
- package/dist/tools/implementations/_archived/plan-query.js +63 -0
- package/dist/tools/implementations/_archived/plan-query.js.map +1 -0
- package/dist/tools/implementations/_archived/raw-content.d.ts +3 -0
- package/dist/tools/implementations/_archived/raw-content.d.ts.map +1 -0
- package/dist/tools/implementations/_archived/raw-content.js +210 -0
- package/dist/tools/implementations/_archived/raw-content.js.map +1 -0
- package/dist/tools/implementations/_archived/similar-content.d.ts +3 -0
- package/dist/tools/implementations/_archived/similar-content.d.ts.map +1 -0
- package/dist/tools/implementations/_archived/similar-content.js +64 -0
- package/dist/tools/implementations/_archived/similar-content.js.map +1 -0
- package/dist/tools/implementations/_archived/smart-sections.d.ts +3 -0
- package/dist/tools/implementations/_archived/smart-sections.d.ts.map +1 -0
- package/dist/tools/implementations/_archived/smart-sections.js +471 -0
- package/dist/tools/implementations/_archived/smart-sections.js.map +1 -0
- package/dist/tools/implementations/_archived/synthesize.d.ts +3 -0
- package/dist/tools/implementations/_archived/synthesize.d.ts.map +1 -0
- package/dist/tools/implementations/_archived/synthesize.js +193 -0
- package/dist/tools/implementations/_archived/synthesize.js.map +1 -0
- package/dist/tools/implementations/_archived/timeline.d.ts +3 -0
- package/dist/tools/implementations/_archived/timeline.d.ts.map +1 -0
- package/dist/tools/implementations/_archived/timeline.js +191 -0
- package/dist/tools/implementations/_archived/timeline.js.map +1 -0
- package/dist/tools/index.d.ts +3 -15
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +31 -57
- package/dist/tools/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,210 @@
|
|
|
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\n`;
|
|
143
|
+
// Actually include the content in the response
|
|
144
|
+
responseText += content.rawText || "";
|
|
145
|
+
responseText += `\n`;
|
|
146
|
+
resultData.text = content.rawText;
|
|
147
|
+
resultData.metadata = params.includeMetadata ? {
|
|
148
|
+
wordCount,
|
|
149
|
+
estimatedTokens,
|
|
150
|
+
contentType: content.contentType,
|
|
151
|
+
extractedAt: content.createdAt,
|
|
152
|
+
} : undefined;
|
|
153
|
+
}
|
|
154
|
+
else if (params.format === "chunks") {
|
|
155
|
+
// Smart chunking based on token size
|
|
156
|
+
const chunks = chunkContent(content.rawText || "", params.chunkSize, params.maxTokens);
|
|
157
|
+
responseText += `\n## Content Chunks\n`;
|
|
158
|
+
responseText += `**Total Chunks:** ${chunks.length}\n`;
|
|
159
|
+
responseText += `**Chunk Size:** ~${params.chunkSize} tokens each\n`;
|
|
160
|
+
if (chunks.length * params.chunkSize > params.maxTokens) {
|
|
161
|
+
responseText += `**Note:** Showing first ${chunks.length} chunks (limited by maxTokens: ${params.maxTokens})\n`;
|
|
162
|
+
}
|
|
163
|
+
responseText += `\n`;
|
|
164
|
+
// Show chunk previews
|
|
165
|
+
chunks.slice(0, 3).forEach((chunk, idx) => {
|
|
166
|
+
responseText += `### Chunk ${idx + 1}/${chunks.length}\n`;
|
|
167
|
+
responseText += `**Tokens:** ~${chunk.tokenCount}\n`;
|
|
168
|
+
responseText += `**Preview:** ${chunk.text.slice(0, 200)}...\n\n`;
|
|
169
|
+
});
|
|
170
|
+
if (chunks.length > 3) {
|
|
171
|
+
responseText += `*... and ${chunks.length - 3} more chunks*\n\n`;
|
|
172
|
+
}
|
|
173
|
+
responseText += `💡 **Tip:** To get a specific chunk, note the chunk index and request it directly.\n`;
|
|
174
|
+
resultData.chunks = chunks;
|
|
175
|
+
resultData.totalChunks = chunks.length;
|
|
176
|
+
}
|
|
177
|
+
else if (params.format === "sections") {
|
|
178
|
+
// Logical section detection (headers, paragraphs, etc.)
|
|
179
|
+
const sections = detectSections(content.rawText || "", content.contentType);
|
|
180
|
+
responseText += `\n## Content Sections\n`;
|
|
181
|
+
responseText += `**Total Sections:** ${sections.length}\n\n`;
|
|
182
|
+
// Show section outline
|
|
183
|
+
let totalSectionTokens = 0;
|
|
184
|
+
sections.forEach((section, idx) => {
|
|
185
|
+
responseText += `${idx + 1}. **${section.title || `Section ${idx + 1}`}**`;
|
|
186
|
+
if (section.type) {
|
|
187
|
+
responseText += ` (${section.type})`;
|
|
188
|
+
}
|
|
189
|
+
responseText += ` - ~${section.tokenCount} tokens\n`;
|
|
190
|
+
totalSectionTokens += section.tokenCount;
|
|
191
|
+
if (totalSectionTokens > params.maxTokens) {
|
|
192
|
+
responseText += ` *[Exceeds maxTokens limit]*\n`;
|
|
193
|
+
}
|
|
194
|
+
});
|
|
195
|
+
responseText += `\n*Full section content available in data field*\n`;
|
|
196
|
+
resultData.sections = sections;
|
|
197
|
+
resultData.totalSections = sections.length;
|
|
198
|
+
}
|
|
199
|
+
return {
|
|
200
|
+
content: [
|
|
201
|
+
{
|
|
202
|
+
type: "text",
|
|
203
|
+
text: responseText,
|
|
204
|
+
},
|
|
205
|
+
],
|
|
206
|
+
data: resultData,
|
|
207
|
+
};
|
|
208
|
+
},
|
|
209
|
+
};
|
|
210
|
+
//# sourceMappingURL=raw-content.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"raw-content.js","sourceRoot":"","sources":["../../../../src/tools/implementations/_archived/raw-content.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"similar-content.d.ts","sourceRoot":"","sources":["../../../../src/tools/implementations/_archived/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/_archived/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/_archived/smart-sections.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAgUnC,eAAO,MAAM,iBAAiB,EAAE,IAoO/B,CAAC"}
|