@crypto512/jicon-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/CLAUDE.md +252 -27
- package/README.md +229 -18
- package/TOOL_LIST.md +201 -5
- package/dist/config/types.d.ts +6 -6
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +3 -2
- package/dist/config/types.js.map +1 -1
- package/dist/confluence/client.d.ts +8 -16
- package/dist/confluence/client.d.ts.map +1 -1
- package/dist/confluence/client.js +75 -43
- package/dist/confluence/client.js.map +1 -1
- package/dist/confluence/formatters.d.ts +4 -0
- package/dist/confluence/formatters.d.ts.map +1 -1
- package/dist/confluence/formatters.js +19 -0
- package/dist/confluence/formatters.js.map +1 -1
- package/dist/confluence/tools.d.ts +9 -36
- package/dist/confluence/tools.d.ts.map +1 -1
- package/dist/confluence/tools.js +90 -158
- package/dist/confluence/tools.js.map +1 -1
- package/dist/index.js +9 -1
- package/dist/index.js.map +1 -1
- package/dist/jira/client.d.ts +9 -9
- package/dist/jira/client.d.ts.map +1 -1
- package/dist/jira/client.js +252 -30
- package/dist/jira/client.js.map +1 -1
- package/dist/jira/formatters.d.ts +4 -0
- package/dist/jira/formatters.d.ts.map +1 -1
- package/dist/jira/formatters.js +24 -0
- package/dist/jira/formatters.js.map +1 -1
- package/dist/jira/tools.d.ts +36 -36
- package/dist/jira/tools.d.ts.map +1 -1
- package/dist/jira/tools.js +161 -139
- package/dist/jira/tools.js.map +1 -1
- package/dist/jira/types.d.ts +50 -0
- package/dist/jira/types.d.ts.map +1 -1
- package/dist/permissions/filter.d.ts.map +1 -1
- package/dist/permissions/filter.js +42 -13
- package/dist/permissions/filter.js.map +1 -1
- package/dist/permissions/tool-registry.d.ts +33 -14
- package/dist/permissions/tool-registry.d.ts.map +1 -1
- package/dist/permissions/tool-registry.js +80 -5
- package/dist/permissions/tool-registry.js.map +1 -1
- package/dist/tempo/client.d.ts +1 -0
- package/dist/tempo/client.d.ts.map +1 -1
- package/dist/tempo/client.js +43 -0
- package/dist/tempo/client.js.map +1 -1
- package/dist/tempo/formatters.d.ts +4 -0
- package/dist/tempo/formatters.d.ts.map +1 -1
- package/dist/tempo/formatters.js +24 -0
- package/dist/tempo/formatters.js.map +1 -1
- package/dist/tempo/tools.d.ts +21 -0
- package/dist/tempo/tools.d.ts.map +1 -1
- package/dist/tempo/tools.js +74 -134
- package/dist/tempo/tools.js.map +1 -1
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/buffer-tools.d.ts +128 -0
- package/dist/utils/buffer-tools.d.ts.map +1 -0
- package/dist/utils/buffer-tools.js +312 -0
- package/dist/utils/buffer-tools.js.map +1 -0
- package/dist/utils/content-buffer.d.ts +132 -0
- package/dist/utils/content-buffer.d.ts.map +1 -0
- package/dist/utils/content-buffer.js +313 -0
- package/dist/utils/content-buffer.js.map +1 -0
- package/dist/utils/response-formatter.d.ts +5 -1
- package/dist/utils/response-formatter.d.ts.map +1 -1
- package/dist/utils/response-formatter.js +52 -2
- package/dist/utils/response-formatter.js.map +1 -1
- package/dist/utils/workload-tools.d.ts +68 -0
- package/dist/utils/workload-tools.d.ts.map +1 -0
- package/dist/utils/workload-tools.js +134 -0
- package/dist/utils/workload-tools.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Buffer management tools for MCP Server
|
|
3
|
+
*
|
|
4
|
+
* Provides tools to retrieve chunks from buffered content,
|
|
5
|
+
* list active buffers, clear buffers, search content, and edit content.
|
|
6
|
+
*/
|
|
7
|
+
import { z } from "zod";
|
|
8
|
+
import { contentBuffer } from "./content-buffer.js";
|
|
9
|
+
import { formatSuccess, formatError, getMaxOutputSize } from "./response-formatter.js";
|
|
10
|
+
/**
|
|
11
|
+
* Format grep results as text output similar to grep CLI
|
|
12
|
+
*/
|
|
13
|
+
function formatGrepOutput(result, showLineNumbers) {
|
|
14
|
+
const lines = [];
|
|
15
|
+
for (let i = 0; i < result.matches.length; i++) {
|
|
16
|
+
const match = result.matches[i];
|
|
17
|
+
// Add separator between matches (except for first)
|
|
18
|
+
if (i > 0) {
|
|
19
|
+
lines.push("--");
|
|
20
|
+
}
|
|
21
|
+
// Before context
|
|
22
|
+
for (let j = 0; j < match.before.length; j++) {
|
|
23
|
+
const lineNum = match.lineNumber - match.before.length + j;
|
|
24
|
+
if (showLineNumbers) {
|
|
25
|
+
lines.push(`${lineNum}-${match.before[j]}`);
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
lines.push(match.before[j]);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
// Matched line
|
|
32
|
+
if (showLineNumbers) {
|
|
33
|
+
lines.push(`${match.lineNumber}:${match.line}`);
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
lines.push(match.line);
|
|
37
|
+
}
|
|
38
|
+
// After context
|
|
39
|
+
for (let j = 0; j < match.after.length; j++) {
|
|
40
|
+
const lineNum = match.lineNumber + 1 + j;
|
|
41
|
+
if (showLineNumbers) {
|
|
42
|
+
lines.push(`${lineNum}-${match.after[j]}`);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
lines.push(match.after[j]);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return lines.join("\n");
|
|
50
|
+
}
|
|
51
|
+
export function createBufferTools() {
|
|
52
|
+
return {
|
|
53
|
+
buffer_get_chunk: {
|
|
54
|
+
description: `Retrieve a chunk of buffered content by buffer ID. Use after receiving a bufferId from tools. Returns content, offset, totalSize, and hasMore flag.`,
|
|
55
|
+
inputSchema: z.object({
|
|
56
|
+
bufferId: z.string().describe("Buffer ID from previous tool response"),
|
|
57
|
+
offset: z
|
|
58
|
+
.number()
|
|
59
|
+
.optional()
|
|
60
|
+
.default(0)
|
|
61
|
+
.describe("Character offset to start from (default: 0)"),
|
|
62
|
+
limit: z
|
|
63
|
+
.number()
|
|
64
|
+
.optional()
|
|
65
|
+
.default(5000)
|
|
66
|
+
.describe("Maximum characters to return (default: 5000)"),
|
|
67
|
+
}),
|
|
68
|
+
handler: async (args) => {
|
|
69
|
+
try {
|
|
70
|
+
const chunk = contentBuffer.getChunk(args.bufferId, args.offset ?? 0, args.limit ?? 5000);
|
|
71
|
+
if (!chunk) {
|
|
72
|
+
return formatError({
|
|
73
|
+
error: true,
|
|
74
|
+
message: `Buffer not found or expired: ${args.bufferId}`,
|
|
75
|
+
statusCode: 404,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
return formatSuccess({
|
|
79
|
+
bufferId: chunk.bufferId,
|
|
80
|
+
content: chunk.chunk,
|
|
81
|
+
offset: chunk.offset,
|
|
82
|
+
limit: chunk.limit,
|
|
83
|
+
totalSize: chunk.totalSize,
|
|
84
|
+
hasMore: chunk.hasMore,
|
|
85
|
+
metadata: chunk.metadata,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
return formatError(error instanceof Error ? error : new Error(String(error)));
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
buffer_list: {
|
|
94
|
+
description: `List all active buffers with metadata. Buffers expire after 10 minutes.`,
|
|
95
|
+
inputSchema: z.object({}),
|
|
96
|
+
handler: async () => {
|
|
97
|
+
try {
|
|
98
|
+
const buffers = contentBuffer.list();
|
|
99
|
+
return formatSuccess({
|
|
100
|
+
count: buffers.length,
|
|
101
|
+
buffers: buffers.map((b) => ({
|
|
102
|
+
...b,
|
|
103
|
+
createdAt: new Date(b.createdAt).toISOString(),
|
|
104
|
+
expiresAt: new Date(b.expiresAt).toISOString(),
|
|
105
|
+
})),
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
return formatError(error instanceof Error ? error : new Error(String(error)));
|
|
110
|
+
}
|
|
111
|
+
},
|
|
112
|
+
},
|
|
113
|
+
buffer_clear: {
|
|
114
|
+
description: `Clear a specific buffer or all buffers. Omit bufferId to clear all.`,
|
|
115
|
+
inputSchema: z.object({
|
|
116
|
+
bufferId: z
|
|
117
|
+
.string()
|
|
118
|
+
.optional()
|
|
119
|
+
.describe("Buffer ID to clear, or omit to clear all buffers"),
|
|
120
|
+
}),
|
|
121
|
+
handler: async (args) => {
|
|
122
|
+
try {
|
|
123
|
+
if (args.bufferId) {
|
|
124
|
+
const deleted = contentBuffer.clear(args.bufferId);
|
|
125
|
+
if (!deleted) {
|
|
126
|
+
return formatError({
|
|
127
|
+
error: true,
|
|
128
|
+
message: `Buffer not found: ${args.bufferId}`,
|
|
129
|
+
statusCode: 404,
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
return formatSuccess({
|
|
133
|
+
message: `Buffer ${args.bufferId} cleared`,
|
|
134
|
+
cleared: 1,
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
const count = contentBuffer.size();
|
|
138
|
+
contentBuffer.clear();
|
|
139
|
+
return formatSuccess({
|
|
140
|
+
message: "All buffers cleared",
|
|
141
|
+
cleared: count,
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
catch (error) {
|
|
145
|
+
return formatError(error instanceof Error ? error : new Error(String(error)));
|
|
146
|
+
}
|
|
147
|
+
},
|
|
148
|
+
},
|
|
149
|
+
buffer_grep: {
|
|
150
|
+
description: `Search buffered content for patterns. Supports regex, context lines (-A/-B/-C), and case-insensitive (-i). Large results are buffered.`,
|
|
151
|
+
inputSchema: z.object({
|
|
152
|
+
bufferId: z.string().describe("Buffer ID from previous tool response"),
|
|
153
|
+
pattern: z.string().describe("Regex pattern to search for"),
|
|
154
|
+
"-A": z
|
|
155
|
+
.number()
|
|
156
|
+
.optional()
|
|
157
|
+
.describe("Number of lines to show after each match"),
|
|
158
|
+
"-B": z
|
|
159
|
+
.number()
|
|
160
|
+
.optional()
|
|
161
|
+
.describe("Number of lines to show before each match"),
|
|
162
|
+
"-C": z
|
|
163
|
+
.number()
|
|
164
|
+
.optional()
|
|
165
|
+
.describe("Number of lines to show before AND after each match (overrides -A/-B)"),
|
|
166
|
+
"-i": z
|
|
167
|
+
.boolean()
|
|
168
|
+
.optional()
|
|
169
|
+
.describe("Case insensitive search"),
|
|
170
|
+
"-n": z
|
|
171
|
+
.boolean()
|
|
172
|
+
.optional()
|
|
173
|
+
.default(true)
|
|
174
|
+
.describe("Show line numbers in output (default: true)"),
|
|
175
|
+
output_mode: z
|
|
176
|
+
.enum(["content", "count"])
|
|
177
|
+
.optional()
|
|
178
|
+
.default("content")
|
|
179
|
+
.describe("Output mode: 'content' shows matching lines, 'count' shows match count"),
|
|
180
|
+
multiline: z
|
|
181
|
+
.boolean()
|
|
182
|
+
.optional()
|
|
183
|
+
.default(false)
|
|
184
|
+
.describe("Enable multiline mode where . matches newlines"),
|
|
185
|
+
head_limit: z
|
|
186
|
+
.number()
|
|
187
|
+
.optional()
|
|
188
|
+
.describe("Limit to first N matches"),
|
|
189
|
+
offset: z
|
|
190
|
+
.number()
|
|
191
|
+
.optional()
|
|
192
|
+
.default(0)
|
|
193
|
+
.describe("Skip first N matches"),
|
|
194
|
+
}),
|
|
195
|
+
handler: async (args) => {
|
|
196
|
+
try {
|
|
197
|
+
// Handle -C overriding -A/-B
|
|
198
|
+
const before = args["-C"] ?? args["-B"] ?? 0;
|
|
199
|
+
const after = args["-C"] ?? args["-A"] ?? 0;
|
|
200
|
+
const result = contentBuffer.grep(args.bufferId, args.pattern, {
|
|
201
|
+
caseInsensitive: args["-i"] ?? false,
|
|
202
|
+
before,
|
|
203
|
+
after,
|
|
204
|
+
multiline: args.multiline ?? false,
|
|
205
|
+
countOnly: args.output_mode === "count",
|
|
206
|
+
headLimit: args.head_limit,
|
|
207
|
+
offset: args.offset ?? 0,
|
|
208
|
+
});
|
|
209
|
+
if (!result) {
|
|
210
|
+
return formatError({
|
|
211
|
+
error: true,
|
|
212
|
+
message: `Buffer not found or expired: ${args.bufferId}`,
|
|
213
|
+
statusCode: 404,
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
// Count mode returns structured JSON
|
|
217
|
+
if ("count" in result) {
|
|
218
|
+
return formatSuccess(result);
|
|
219
|
+
}
|
|
220
|
+
// Content mode - format as text if -n, else JSON
|
|
221
|
+
const showLineNumbers = args["-n"] ?? true;
|
|
222
|
+
const maxSize = getMaxOutputSize();
|
|
223
|
+
if (showLineNumbers) {
|
|
224
|
+
const textOutput = formatGrepOutput(result, true);
|
|
225
|
+
const fullText = `# Search Results: ${result.totalMatches} matches found${result.truncated ? " (truncated)" : ""}\n\n${textOutput || "No matches found."}`;
|
|
226
|
+
// Check if exceeds max size - if so, buffer it
|
|
227
|
+
if (fullText.length > maxSize) {
|
|
228
|
+
const newBufferId = contentBuffer.store(fullText, {
|
|
229
|
+
type: "grep_result",
|
|
230
|
+
sourceBufferId: args.bufferId,
|
|
231
|
+
pattern: args.pattern,
|
|
232
|
+
totalMatches: result.totalMatches,
|
|
233
|
+
});
|
|
234
|
+
return {
|
|
235
|
+
content: [
|
|
236
|
+
{
|
|
237
|
+
type: "text",
|
|
238
|
+
text: JSON.stringify({
|
|
239
|
+
_pagination: true,
|
|
240
|
+
status: "SUCCESS - Search results buffered",
|
|
241
|
+
bufferId: newBufferId,
|
|
242
|
+
totalSize: fullText.length,
|
|
243
|
+
totalMatches: result.totalMatches,
|
|
244
|
+
hasMore: true,
|
|
245
|
+
next_action: {
|
|
246
|
+
tool: "buffer_get_chunk",
|
|
247
|
+
args: { bufferId: newBufferId, offset: 0, limit: 5000 },
|
|
248
|
+
},
|
|
249
|
+
}, null, 2),
|
|
250
|
+
},
|
|
251
|
+
],
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
// Within limit - return directly
|
|
255
|
+
return {
|
|
256
|
+
content: [
|
|
257
|
+
{
|
|
258
|
+
type: "text",
|
|
259
|
+
text: fullText,
|
|
260
|
+
},
|
|
261
|
+
],
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
// JSON mode - use formatSuccess which handles buffering automatically
|
|
265
|
+
return formatSuccess(result);
|
|
266
|
+
}
|
|
267
|
+
catch (error) {
|
|
268
|
+
return formatError(error instanceof Error ? error : new Error(String(error)));
|
|
269
|
+
}
|
|
270
|
+
},
|
|
271
|
+
},
|
|
272
|
+
buffer_edit: {
|
|
273
|
+
description: `Exact string replacement in buffered content. Fails if old_string is not unique (use replace_all=true for all occurrences). Changes are in-memory only - call update API to persist.`,
|
|
274
|
+
inputSchema: z.object({
|
|
275
|
+
bufferId: z.string().describe("Buffer ID to modify"),
|
|
276
|
+
old_string: z.string().describe("Exact text to replace"),
|
|
277
|
+
new_string: z.string().describe("Replacement text"),
|
|
278
|
+
replace_all: z
|
|
279
|
+
.boolean()
|
|
280
|
+
.optional()
|
|
281
|
+
.default(false)
|
|
282
|
+
.describe("Replace all occurrences (default: false, fails if not unique)"),
|
|
283
|
+
}),
|
|
284
|
+
handler: async (args) => {
|
|
285
|
+
try {
|
|
286
|
+
const result = contentBuffer.edit(args.bufferId, args.old_string, args.new_string, args.replace_all ?? false);
|
|
287
|
+
if (!result) {
|
|
288
|
+
return formatError({
|
|
289
|
+
error: true,
|
|
290
|
+
message: `Buffer not found or expired: ${args.bufferId}`,
|
|
291
|
+
statusCode: 404,
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
// Check if it's an error result
|
|
295
|
+
if ("error" in result && result.error) {
|
|
296
|
+
return formatError({
|
|
297
|
+
error: true,
|
|
298
|
+
message: result.message,
|
|
299
|
+
statusCode: 400,
|
|
300
|
+
details: { occurrences: result.occurrences },
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
return formatSuccess(result);
|
|
304
|
+
}
|
|
305
|
+
catch (error) {
|
|
306
|
+
return formatError(error instanceof Error ? error : new Error(String(error)));
|
|
307
|
+
}
|
|
308
|
+
},
|
|
309
|
+
},
|
|
310
|
+
};
|
|
311
|
+
}
|
|
312
|
+
//# sourceMappingURL=buffer-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buffer-tools.js","sourceRoot":"","sources":["../../src/utils/buffer-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Content Buffer for MCP Server
|
|
3
|
+
*
|
|
4
|
+
* Provides in-memory buffering with pagination support for large content
|
|
5
|
+
* that needs to be returned in chunks to MCP clients.
|
|
6
|
+
*/
|
|
7
|
+
export interface BufferEntry {
|
|
8
|
+
content: string;
|
|
9
|
+
totalSize: number;
|
|
10
|
+
createdAt: number;
|
|
11
|
+
ttl: number;
|
|
12
|
+
metadata?: Record<string, unknown>;
|
|
13
|
+
}
|
|
14
|
+
export interface ChunkResult {
|
|
15
|
+
bufferId: string;
|
|
16
|
+
chunk: string;
|
|
17
|
+
offset: number;
|
|
18
|
+
limit: number;
|
|
19
|
+
totalSize: number;
|
|
20
|
+
hasMore: boolean;
|
|
21
|
+
metadata?: Record<string, unknown>;
|
|
22
|
+
}
|
|
23
|
+
export interface BufferInfo {
|
|
24
|
+
bufferId: string;
|
|
25
|
+
totalSize: number;
|
|
26
|
+
createdAt: number;
|
|
27
|
+
expiresAt: number;
|
|
28
|
+
metadata?: Record<string, unknown>;
|
|
29
|
+
}
|
|
30
|
+
export interface GrepMatch {
|
|
31
|
+
lineNumber: number;
|
|
32
|
+
line: string;
|
|
33
|
+
before: string[];
|
|
34
|
+
after: string[];
|
|
35
|
+
}
|
|
36
|
+
export interface GrepResult {
|
|
37
|
+
bufferId: string;
|
|
38
|
+
pattern: string;
|
|
39
|
+
totalMatches: number;
|
|
40
|
+
matches: GrepMatch[];
|
|
41
|
+
truncated: boolean;
|
|
42
|
+
metadata?: Record<string, unknown>;
|
|
43
|
+
}
|
|
44
|
+
export interface GrepCountResult {
|
|
45
|
+
bufferId: string;
|
|
46
|
+
pattern: string;
|
|
47
|
+
count: number;
|
|
48
|
+
metadata?: Record<string, unknown>;
|
|
49
|
+
}
|
|
50
|
+
export interface GrepOptions {
|
|
51
|
+
caseInsensitive?: boolean;
|
|
52
|
+
before?: number;
|
|
53
|
+
after?: number;
|
|
54
|
+
multiline?: boolean;
|
|
55
|
+
countOnly?: boolean;
|
|
56
|
+
headLimit?: number;
|
|
57
|
+
offset?: number;
|
|
58
|
+
}
|
|
59
|
+
export interface EditResult {
|
|
60
|
+
bufferId: string;
|
|
61
|
+
success: boolean;
|
|
62
|
+
replacements: number;
|
|
63
|
+
oldSize: number;
|
|
64
|
+
newSize: number;
|
|
65
|
+
metadata?: Record<string, unknown>;
|
|
66
|
+
}
|
|
67
|
+
export interface EditError {
|
|
68
|
+
error: true;
|
|
69
|
+
message: string;
|
|
70
|
+
occurrences: number;
|
|
71
|
+
}
|
|
72
|
+
export declare class ContentBuffer {
|
|
73
|
+
private buffers;
|
|
74
|
+
private defaultTTL;
|
|
75
|
+
private cleanupInterval;
|
|
76
|
+
private defaultChunkSize;
|
|
77
|
+
constructor(options?: {
|
|
78
|
+
defaultTTL?: number;
|
|
79
|
+
defaultChunkSize?: number;
|
|
80
|
+
cleanupIntervalMs?: number;
|
|
81
|
+
});
|
|
82
|
+
/**
|
|
83
|
+
* Store content in the buffer and return a unique buffer ID
|
|
84
|
+
*/
|
|
85
|
+
store(content: string, metadata?: Record<string, unknown>, ttl?: number): string;
|
|
86
|
+
/**
|
|
87
|
+
* Get a chunk of content from the buffer
|
|
88
|
+
*/
|
|
89
|
+
getChunk(bufferId: string, offset?: number, limit?: number): ChunkResult | null;
|
|
90
|
+
/**
|
|
91
|
+
* Check if a buffer exists and is valid
|
|
92
|
+
*/
|
|
93
|
+
has(bufferId: string): boolean;
|
|
94
|
+
/**
|
|
95
|
+
* Get buffer info without content
|
|
96
|
+
*/
|
|
97
|
+
getInfo(bufferId: string): BufferInfo | null;
|
|
98
|
+
/**
|
|
99
|
+
* List all active buffers
|
|
100
|
+
*/
|
|
101
|
+
list(): BufferInfo[];
|
|
102
|
+
/**
|
|
103
|
+
* Clear a specific buffer or all buffers
|
|
104
|
+
*/
|
|
105
|
+
clear(bufferId?: string): boolean;
|
|
106
|
+
/**
|
|
107
|
+
* Get the number of active buffers
|
|
108
|
+
*/
|
|
109
|
+
size(): number;
|
|
110
|
+
/**
|
|
111
|
+
* Search buffer content for a pattern with context lines
|
|
112
|
+
*/
|
|
113
|
+
grep(bufferId: string, pattern: string, options?: GrepOptions): GrepResult | GrepCountResult | null;
|
|
114
|
+
/**
|
|
115
|
+
* Edit buffer content by replacing old_string with new_string
|
|
116
|
+
*/
|
|
117
|
+
edit(bufferId: string, oldString: string, newString: string, replaceAll?: boolean): EditResult | EditError | null;
|
|
118
|
+
/**
|
|
119
|
+
* Clean up expired buffers
|
|
120
|
+
*/
|
|
121
|
+
private cleanup;
|
|
122
|
+
/**
|
|
123
|
+
* Generate a unique buffer ID
|
|
124
|
+
*/
|
|
125
|
+
private generateId;
|
|
126
|
+
/**
|
|
127
|
+
* Stop the cleanup interval (for graceful shutdown)
|
|
128
|
+
*/
|
|
129
|
+
destroy(): void;
|
|
130
|
+
}
|
|
131
|
+
export declare const contentBuffer: ContentBuffer;
|
|
132
|
+
//# sourceMappingURL=content-buffer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content-buffer.d.ts","sourceRoot":"","sources":["../../src/utils/content-buffer.ts"],"names":[],"mappings":"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"}
|