centaurus-cli 2.5.3 → 2.6.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/cli-adapter.d.ts +6 -0
- package/dist/cli-adapter.d.ts.map +1 -1
- package/dist/cli-adapter.js +215 -29
- package/dist/cli-adapter.js.map +1 -1
- package/dist/commands/CommandParser.js +2 -2
- package/dist/commands/CommandParser.js.map +1 -1
- package/dist/config/defaultConfig.js +1 -1
- package/dist/config/defaultConfig.js.map +1 -1
- package/dist/config/models.d.ts +50 -5
- package/dist/config/models.d.ts.map +1 -1
- package/dist/config/models.js +144 -22
- package/dist/config/models.js.map +1 -1
- package/dist/config/types.d.ts +3 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +3 -1
- package/dist/config/types.js.map +1 -1
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -1
- package/dist/services/ai-service-client.d.ts +8 -2
- package/dist/services/ai-service-client.d.ts.map +1 -1
- package/dist/services/ai-service-client.js +2 -1
- package/dist/services/ai-service-client.js.map +1 -1
- package/dist/services/environment-context-injector.d.ts +69 -0
- package/dist/services/environment-context-injector.d.ts.map +1 -0
- package/dist/services/environment-context-injector.js +198 -0
- package/dist/services/environment-context-injector.js.map +1 -0
- package/dist/tools/ToolRegistry.d.ts.map +1 -1
- package/dist/tools/ToolRegistry.js +120 -26
- package/dist/tools/ToolRegistry.js.map +1 -1
- package/dist/tools/command.d.ts.map +1 -1
- package/dist/tools/command.js +30 -6
- package/dist/tools/command.js.map +1 -1
- package/dist/tools/file-ops.d.ts.map +1 -1
- package/dist/tools/file-ops.js +70 -23
- package/dist/tools/file-ops.js.map +1 -1
- package/dist/tools/find-files.d.ts +47 -0
- package/dist/tools/find-files.d.ts.map +1 -0
- package/dist/tools/find-files.js +190 -0
- package/dist/tools/find-files.js.map +1 -0
- package/dist/tools/get-diff.d.ts +45 -0
- package/dist/tools/get-diff.d.ts.map +1 -0
- package/dist/tools/get-diff.js +138 -0
- package/dist/tools/get-diff.js.map +1 -0
- package/dist/tools/grep-search.d.ts +85 -0
- package/dist/tools/grep-search.d.ts.map +1 -0
- package/dist/tools/grep-search.js +497 -0
- package/dist/tools/grep-search.js.map +1 -0
- package/dist/tools/inspect-symbol.d.ts +27 -0
- package/dist/tools/inspect-symbol.d.ts.map +1 -0
- package/dist/tools/inspect-symbol.js +259 -0
- package/dist/tools/inspect-symbol.js.map +1 -0
- package/dist/tools/validation.d.ts +49 -0
- package/dist/tools/validation.d.ts.map +1 -0
- package/dist/tools/validation.js +125 -0
- package/dist/tools/validation.js.map +1 -0
- package/dist/types/index.d.ts +13 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/ui/components/App.d.ts +3 -0
- package/dist/ui/components/App.d.ts.map +1 -1
- package/dist/ui/components/App.js +173 -15
- package/dist/ui/components/App.js.map +1 -1
- package/dist/ui/components/ContextWindowIndicator.d.ts +8 -0
- package/dist/ui/components/ContextWindowIndicator.d.ts.map +1 -0
- package/dist/ui/components/ContextWindowIndicator.js +34 -0
- package/dist/ui/components/ContextWindowIndicator.js.map +1 -0
- package/dist/ui/components/InputBox.d.ts +2 -0
- package/dist/ui/components/InputBox.d.ts.map +1 -1
- package/dist/ui/components/InputBox.js +6 -2
- package/dist/ui/components/InputBox.js.map +1 -1
- package/dist/ui/components/MessageDisplay.d.ts.map +1 -1
- package/dist/ui/components/MessageDisplay.js +7 -0
- package/dist/ui/components/MessageDisplay.js.map +1 -1
- package/dist/ui/components/StreamingMessageDisplay.d.ts.map +1 -1
- package/dist/ui/components/StreamingMessageDisplay.js +9 -1
- package/dist/ui/components/StreamingMessageDisplay.js.map +1 -1
- package/dist/ui/components/ThinkingDisplay.d.ts +2 -3
- package/dist/ui/components/ThinkingDisplay.d.ts.map +1 -1
- package/dist/ui/components/ThinkingDisplay.js +19 -19
- package/dist/ui/components/ThinkingDisplay.js.map +1 -1
- package/dist/utils/markdown-parser.d.ts +4 -0
- package/dist/utils/markdown-parser.d.ts.map +1 -1
- package/dist/utils/markdown-parser.js +15 -1
- package/dist/utils/markdown-parser.js.map +1 -1
- package/package.json +2 -1
- package/AUTH_FLOW.md +0 -138
- package/CONFIG_GUIDE.md +0 -249
- package/README.md +0 -501
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-diff.js","sourceRoot":"","sources":["../../src/tools/get-diff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAEjC,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAclC,MAAM,OAAO,WAAW;IACtB;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,MAAqB,EAAE,GAAW;QAC9C,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;QAE5C,IAAI,CAAC;YACH,4BAA4B;YAC5B,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAE/B,yCAAyC;YACzC,MAAM,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;YAEnC,4BAA4B;YAC5B,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;YAEvE,8BAA8B;YAC9B,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC9B,OAAO;oBACL,IAAI,EAAE,+CAA+C;oBACrD,YAAY,EAAE,EAAE;oBAChB,UAAU,EAAE,KAAK;oBACjB,SAAS,EAAE,KAAK;iBACjB,CAAC;YACJ,CAAC;YAED,sBAAsB;YACtB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;YAE7D,wBAAwB;YACxB,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YAEhE,OAAO;gBACL,IAAI,EAAE,aAAa;gBACnB,YAAY,EAAE,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC;gBACnD,UAAU,EAAE,IAAI;gBAChB,SAAS,EAAE,YAAY;aACxB,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,iBAAiB;QAC7B,IAAI,CAAC;YACH,MAAM,SAAS,CAAC,eAAe,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,yBAAyB;gBACzB,kFAAkF,CACnF,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,kBAAkB,CAAC,GAAW;QAC1C,IAAI,CAAC;YACH,MAAM,SAAS,CAAC,yBAAyB,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,wBAAwB;gBACxB,sHAAsH,CACvH,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,eAAe,CAC3B,GAAW,EACX,MAAe,EACf,QAAiB;QAEjB,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5C,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,OAAO,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACnD,MAAM,OAAO,GAAG,wBAAwB,UAAU,IAAI,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC;QAEvE,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;YACrD,OAAO,MAAM;iBACV,IAAI,EAAE;iBACN,KAAK,CAAC,IAAI,CAAC;iBACX,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACrC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,wDAAwD;YACxD,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,aAAa,CACzB,GAAW,EACX,MAAe,EACf,QAAiB;QAEjB,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5C,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,OAAO,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACnD,MAAM,OAAO,GAAG,YAAY,UAAU,IAAI,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC;QAE3D,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC,CAAC;YAClF,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,KAAK,CAAC,IAAI,KAAK,mCAAmC,EAAE,CAAC;gBACvD,MAAM,IAAI,KAAK,CAAC,gFAAgF,CAAC,CAAC;YACpG,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,IAAY;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/B,MAAM,QAAQ,GAAG,GAAG,CAAC;QAErB,IAAI,KAAK,CAAC,MAAM,IAAI,QAAQ,EAAE,CAAC;YAC7B,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;QACtD,CAAC;QAED,MAAM,cAAc,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QAChD,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC;QAE/C,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxB,cAAc,CAAC,IAAI,CAAC,oBAAoB,cAAc,wBAAwB,CAAC,CAAC;QAChF,cAAc,CAAC,IAAI,CAAC,gBAAgB,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QAEpD,OAAO;YACL,aAAa,EAAE,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;YACxC,YAAY,EAAE,IAAI;SACnB,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,kBAAkB,CAAC,KAAe;QACxC,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IACrD,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,KAAU;QAC5B,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,IAAI,KAAK,CACd,uBAAuB,KAAK,CAAC,QAAQ,EAAE,IAAI;YAC3C,sEAAsE,CACvE,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { Tool } from './types.js';
|
|
2
|
+
export interface GrepSearchParams {
|
|
3
|
+
pattern: string;
|
|
4
|
+
caseSensitive?: boolean;
|
|
5
|
+
filePattern?: string;
|
|
6
|
+
excludePattern?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface GrepMatch {
|
|
9
|
+
file: string;
|
|
10
|
+
line: number;
|
|
11
|
+
column: number;
|
|
12
|
+
match: string;
|
|
13
|
+
contextBefore: string[];
|
|
14
|
+
contextAfter: string[];
|
|
15
|
+
}
|
|
16
|
+
export interface GrepSearchResult {
|
|
17
|
+
matches: GrepMatch[];
|
|
18
|
+
totalMatches: number;
|
|
19
|
+
truncated: boolean;
|
|
20
|
+
searchPattern: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* GrepSearchTool - Search for text patterns across files in the codebase
|
|
24
|
+
*
|
|
25
|
+
* This tool wraps ripgrep (rg) or falls back to native grep/findstr
|
|
26
|
+
* to provide fast, efficient code search capabilities.
|
|
27
|
+
*/
|
|
28
|
+
export declare class GrepSearchTool {
|
|
29
|
+
private static readonly MAX_MATCHES;
|
|
30
|
+
private static readonly MAX_LINE_LENGTH;
|
|
31
|
+
private static readonly CONTEXT_LINES;
|
|
32
|
+
/**
|
|
33
|
+
* Check if ripgrep is available
|
|
34
|
+
*/
|
|
35
|
+
private hasRipgrep;
|
|
36
|
+
/**
|
|
37
|
+
* Check if native grep is available (Linux/Mac)
|
|
38
|
+
*/
|
|
39
|
+
private hasGrep;
|
|
40
|
+
/**
|
|
41
|
+
* Validate regex pattern
|
|
42
|
+
*/
|
|
43
|
+
private validatePattern;
|
|
44
|
+
/**
|
|
45
|
+
* Normalize file path to use forward slashes
|
|
46
|
+
*/
|
|
47
|
+
private normalizePath;
|
|
48
|
+
/**
|
|
49
|
+
* Truncate long lines
|
|
50
|
+
*/
|
|
51
|
+
private truncateLine;
|
|
52
|
+
/**
|
|
53
|
+
* Execute search using ripgrep
|
|
54
|
+
*/
|
|
55
|
+
private searchWithRipgrep;
|
|
56
|
+
/**
|
|
57
|
+
* Parse ripgrep JSON output
|
|
58
|
+
*/
|
|
59
|
+
private parseRipgrepOutput;
|
|
60
|
+
/**
|
|
61
|
+
* Execute search using native grep (Linux/Mac)
|
|
62
|
+
*/
|
|
63
|
+
private searchWithGrep;
|
|
64
|
+
/**
|
|
65
|
+
* Execute search using findstr (Windows)
|
|
66
|
+
*/
|
|
67
|
+
private searchWithFindstr;
|
|
68
|
+
/**
|
|
69
|
+
* Parse grep output
|
|
70
|
+
*/
|
|
71
|
+
private parseGrepOutput;
|
|
72
|
+
/**
|
|
73
|
+
* Parse findstr output
|
|
74
|
+
*/
|
|
75
|
+
private parseFindstrOutput;
|
|
76
|
+
/**
|
|
77
|
+
* Execute the grep search
|
|
78
|
+
*/
|
|
79
|
+
execute(params: GrepSearchParams, cwd: string): Promise<GrepSearchResult>;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Grep search tool for the tool registry
|
|
83
|
+
*/
|
|
84
|
+
export declare const grepSearchTool: Tool;
|
|
85
|
+
//# sourceMappingURL=grep-search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grep-search.d.ts","sourceRoot":"","sources":["../../src/tools/grep-search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAwB,MAAM,YAAY,CAAC;AAOxD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;;;;GAKG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAM;IACzC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAO;IAC9C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAK;IAE1C;;OAEG;YACW,UAAU;IASxB;;OAEG;YACW,OAAO;IASrB;;OAEG;IACH,OAAO,CAAC,eAAe;IAYvB;;OAEG;IACH,OAAO,CAAC,aAAa;IAIrB;;OAEG;IACH,OAAO,CAAC,YAAY;IAOpB;;OAEG;YACW,iBAAiB;IAyC/B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAiF1B;;OAEG;YACW,cAAc;IAuC5B;;OAEG;YACW,iBAAiB;IAyC/B;;OAEG;IACH,OAAO,CAAC,eAAe;IA2EvB;;OAEG;YACW,kBAAkB;IA+DhC;;OAEG;IACG,OAAO,CAAC,MAAM,EAAE,gBAAgB,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;CA0BhF;AA6CD;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,IAyD5B,CAAC"}
|
|
@@ -0,0 +1,497 @@
|
|
|
1
|
+
import { exec } from 'child_process';
|
|
2
|
+
import { promisify } from 'util';
|
|
3
|
+
import * as path from 'path';
|
|
4
|
+
const execAsync = promisify(exec);
|
|
5
|
+
/**
|
|
6
|
+
* GrepSearchTool - Search for text patterns across files in the codebase
|
|
7
|
+
*
|
|
8
|
+
* This tool wraps ripgrep (rg) or falls back to native grep/findstr
|
|
9
|
+
* to provide fast, efficient code search capabilities.
|
|
10
|
+
*/
|
|
11
|
+
export class GrepSearchTool {
|
|
12
|
+
static MAX_MATCHES = 50;
|
|
13
|
+
static MAX_LINE_LENGTH = 200;
|
|
14
|
+
static CONTEXT_LINES = 2;
|
|
15
|
+
/**
|
|
16
|
+
* Check if ripgrep is available
|
|
17
|
+
*/
|
|
18
|
+
async hasRipgrep() {
|
|
19
|
+
try {
|
|
20
|
+
await execAsync('rg --version');
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Check if native grep is available (Linux/Mac)
|
|
29
|
+
*/
|
|
30
|
+
async hasGrep() {
|
|
31
|
+
try {
|
|
32
|
+
await execAsync('grep --version');
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Validate regex pattern
|
|
41
|
+
*/
|
|
42
|
+
validatePattern(pattern) {
|
|
43
|
+
try {
|
|
44
|
+
new RegExp(pattern);
|
|
45
|
+
return { valid: true };
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
return {
|
|
49
|
+
valid: false,
|
|
50
|
+
error: `Invalid regex pattern: "${pattern}"\nSuggestion: Check your regex syntax. Common issues: unmatched parentheses, invalid escape sequences.`
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Normalize file path to use forward slashes
|
|
56
|
+
*/
|
|
57
|
+
normalizePath(filePath) {
|
|
58
|
+
return filePath.replace(/\\/g, '/');
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Truncate long lines
|
|
62
|
+
*/
|
|
63
|
+
truncateLine(line) {
|
|
64
|
+
if (line.length <= GrepSearchTool.MAX_LINE_LENGTH) {
|
|
65
|
+
return line;
|
|
66
|
+
}
|
|
67
|
+
return line.substring(0, GrepSearchTool.MAX_LINE_LENGTH) + ' [truncated]';
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Execute search using ripgrep
|
|
71
|
+
*/
|
|
72
|
+
async searchWithRipgrep(params, cwd) {
|
|
73
|
+
const args = [
|
|
74
|
+
'rg',
|
|
75
|
+
'--json',
|
|
76
|
+
`--context=${GrepSearchTool.CONTEXT_LINES}`,
|
|
77
|
+
`--max-count=${GrepSearchTool.MAX_MATCHES}`,
|
|
78
|
+
];
|
|
79
|
+
// Case sensitivity
|
|
80
|
+
if (!params.caseSensitive) {
|
|
81
|
+
args.push('--ignore-case');
|
|
82
|
+
}
|
|
83
|
+
// File pattern
|
|
84
|
+
if (params.filePattern) {
|
|
85
|
+
args.push('--glob', params.filePattern);
|
|
86
|
+
}
|
|
87
|
+
// Exclude pattern
|
|
88
|
+
if (params.excludePattern) {
|
|
89
|
+
args.push('--glob', `!${params.excludePattern}`);
|
|
90
|
+
}
|
|
91
|
+
// Pattern
|
|
92
|
+
args.push('--', params.pattern);
|
|
93
|
+
try {
|
|
94
|
+
const { stdout } = await execAsync(args.join(' '), { cwd, maxBuffer: 10 * 1024 * 1024 });
|
|
95
|
+
return this.parseRipgrepOutput(stdout, params.pattern);
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
// ripgrep returns exit code 1 when no matches found
|
|
99
|
+
if (error.code === 1 && error.stdout) {
|
|
100
|
+
return this.parseRipgrepOutput(error.stdout, params.pattern);
|
|
101
|
+
}
|
|
102
|
+
throw error;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Parse ripgrep JSON output
|
|
107
|
+
*/
|
|
108
|
+
parseRipgrepOutput(output, searchPattern) {
|
|
109
|
+
const lines = output.trim().split('\n').filter(line => line);
|
|
110
|
+
const matches = [];
|
|
111
|
+
let currentMatch = null;
|
|
112
|
+
let contextBefore = [];
|
|
113
|
+
let contextAfter = [];
|
|
114
|
+
let totalMatches = 0;
|
|
115
|
+
for (const line of lines) {
|
|
116
|
+
try {
|
|
117
|
+
const data = JSON.parse(line);
|
|
118
|
+
if (data.type === 'match') {
|
|
119
|
+
// Save previous match if exists
|
|
120
|
+
if (currentMatch && currentMatch.file && currentMatch.line !== undefined) {
|
|
121
|
+
matches.push({
|
|
122
|
+
file: this.normalizePath(currentMatch.file),
|
|
123
|
+
line: currentMatch.line,
|
|
124
|
+
column: currentMatch.column || 1,
|
|
125
|
+
match: this.truncateLine(currentMatch.match || ''),
|
|
126
|
+
contextBefore: contextBefore.map(l => this.truncateLine(l)),
|
|
127
|
+
contextAfter: contextAfter.map(l => this.truncateLine(l)),
|
|
128
|
+
});
|
|
129
|
+
contextBefore = [];
|
|
130
|
+
contextAfter = [];
|
|
131
|
+
}
|
|
132
|
+
totalMatches++;
|
|
133
|
+
if (matches.length < GrepSearchTool.MAX_MATCHES) {
|
|
134
|
+
const matchData = data.data;
|
|
135
|
+
currentMatch = {
|
|
136
|
+
file: matchData.path.text,
|
|
137
|
+
line: matchData.line_number,
|
|
138
|
+
column: matchData.submatches?.[0]?.start || 1,
|
|
139
|
+
match: matchData.lines.text.trimEnd(),
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
else if (data.type === 'context') {
|
|
144
|
+
const contextData = data.data;
|
|
145
|
+
const contextLine = contextData.lines.text.trimEnd();
|
|
146
|
+
if (currentMatch && currentMatch.line !== undefined) {
|
|
147
|
+
// Determine if this is before or after the match
|
|
148
|
+
if (contextData.line_number < currentMatch.line) {
|
|
149
|
+
contextBefore.push(contextLine);
|
|
150
|
+
// Keep only last N lines
|
|
151
|
+
if (contextBefore.length > GrepSearchTool.CONTEXT_LINES) {
|
|
152
|
+
contextBefore.shift();
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
contextAfter.push(contextLine);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
catch (parseError) {
|
|
162
|
+
// Skip invalid JSON lines
|
|
163
|
+
continue;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
// Save last match
|
|
167
|
+
if (currentMatch && currentMatch.file && currentMatch.line !== undefined) {
|
|
168
|
+
matches.push({
|
|
169
|
+
file: this.normalizePath(currentMatch.file),
|
|
170
|
+
line: currentMatch.line,
|
|
171
|
+
column: currentMatch.column || 1,
|
|
172
|
+
match: this.truncateLine(currentMatch.match || ''),
|
|
173
|
+
contextBefore: contextBefore.map(l => this.truncateLine(l)),
|
|
174
|
+
contextAfter: contextAfter.map(l => this.truncateLine(l)),
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
return {
|
|
178
|
+
matches,
|
|
179
|
+
totalMatches,
|
|
180
|
+
truncated: totalMatches > matches.length,
|
|
181
|
+
searchPattern,
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Execute search using native grep (Linux/Mac)
|
|
186
|
+
*/
|
|
187
|
+
async searchWithGrep(params, cwd) {
|
|
188
|
+
const args = ['grep', '-rn'];
|
|
189
|
+
// Case sensitivity
|
|
190
|
+
if (!params.caseSensitive) {
|
|
191
|
+
args.push('-i');
|
|
192
|
+
}
|
|
193
|
+
// Context lines
|
|
194
|
+
args.push(`--context=${GrepSearchTool.CONTEXT_LINES}`);
|
|
195
|
+
// File pattern
|
|
196
|
+
if (params.filePattern) {
|
|
197
|
+
args.push(`--include=${params.filePattern}`);
|
|
198
|
+
}
|
|
199
|
+
// Exclude pattern
|
|
200
|
+
if (params.excludePattern) {
|
|
201
|
+
args.push(`--exclude=${params.excludePattern}`);
|
|
202
|
+
}
|
|
203
|
+
// Pattern and directory
|
|
204
|
+
args.push(params.pattern, '.');
|
|
205
|
+
try {
|
|
206
|
+
const { stdout } = await execAsync(args.join(' '), { cwd, maxBuffer: 10 * 1024 * 1024 });
|
|
207
|
+
return this.parseGrepOutput(stdout, params.pattern);
|
|
208
|
+
}
|
|
209
|
+
catch (error) {
|
|
210
|
+
// grep returns exit code 1 when no matches found
|
|
211
|
+
if (error.code === 1 && error.stdout) {
|
|
212
|
+
return this.parseGrepOutput(error.stdout, params.pattern);
|
|
213
|
+
}
|
|
214
|
+
throw error;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Execute search using findstr (Windows)
|
|
219
|
+
*/
|
|
220
|
+
async searchWithFindstr(params, cwd) {
|
|
221
|
+
// findstr has limited capabilities, so we'll use a simpler approach
|
|
222
|
+
const pattern = params.pattern;
|
|
223
|
+
const filePattern = params.filePattern || '*.*';
|
|
224
|
+
// findstr doesn't support context lines, so we'll need to handle that separately
|
|
225
|
+
const args = [
|
|
226
|
+
'findstr',
|
|
227
|
+
'/S', // Search subdirectories
|
|
228
|
+
'/N', // Show line numbers
|
|
229
|
+
];
|
|
230
|
+
if (!params.caseSensitive) {
|
|
231
|
+
args.push('/I'); // Case-insensitive
|
|
232
|
+
}
|
|
233
|
+
args.push(`/C:"${pattern}"`, filePattern);
|
|
234
|
+
try {
|
|
235
|
+
const { stdout } = await execAsync(args.join(' '), { cwd, maxBuffer: 10 * 1024 * 1024 });
|
|
236
|
+
return this.parseFindstrOutput(stdout, params.pattern, cwd);
|
|
237
|
+
}
|
|
238
|
+
catch (error) {
|
|
239
|
+
// findstr returns exit code 1 when no matches found
|
|
240
|
+
if (error.code === 1 && (!error.stdout || error.stdout.trim() === '')) {
|
|
241
|
+
return {
|
|
242
|
+
matches: [],
|
|
243
|
+
totalMatches: 0,
|
|
244
|
+
truncated: false,
|
|
245
|
+
searchPattern: params.pattern,
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
if (error.stdout) {
|
|
249
|
+
return this.parseFindstrOutput(error.stdout, params.pattern, cwd);
|
|
250
|
+
}
|
|
251
|
+
throw error;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Parse grep output
|
|
256
|
+
*/
|
|
257
|
+
parseGrepOutput(output, searchPattern) {
|
|
258
|
+
const lines = output.trim().split('\n').filter(line => line);
|
|
259
|
+
const matches = [];
|
|
260
|
+
let i = 0;
|
|
261
|
+
while (i < lines.length && matches.length < GrepSearchTool.MAX_MATCHES) {
|
|
262
|
+
const line = lines[i];
|
|
263
|
+
// Skip separator lines
|
|
264
|
+
if (line === '--') {
|
|
265
|
+
i++;
|
|
266
|
+
continue;
|
|
267
|
+
}
|
|
268
|
+
// Parse match line: filename:linenum:content or filename:linenum-content (for context)
|
|
269
|
+
const matchRegex = /^([^:]+):(\d+):(.*)$/;
|
|
270
|
+
const contextRegex = /^([^:]+):(\d+)-(.*)$/;
|
|
271
|
+
const matchMatch = line.match(matchRegex);
|
|
272
|
+
if (matchMatch) {
|
|
273
|
+
const [, file, lineNum, content] = matchMatch;
|
|
274
|
+
const contextBefore = [];
|
|
275
|
+
const contextAfter = [];
|
|
276
|
+
// Look back for context
|
|
277
|
+
let j = i - 1;
|
|
278
|
+
while (j >= 0 && contextBefore.length < GrepSearchTool.CONTEXT_LINES) {
|
|
279
|
+
const prevLine = lines[j];
|
|
280
|
+
if (prevLine === '--')
|
|
281
|
+
break;
|
|
282
|
+
const contextMatch = prevLine.match(contextRegex);
|
|
283
|
+
if (contextMatch && contextMatch[1] === file) {
|
|
284
|
+
contextBefore.unshift(contextMatch[3]);
|
|
285
|
+
}
|
|
286
|
+
else {
|
|
287
|
+
break;
|
|
288
|
+
}
|
|
289
|
+
j--;
|
|
290
|
+
}
|
|
291
|
+
// Look ahead for context
|
|
292
|
+
let k = i + 1;
|
|
293
|
+
while (k < lines.length && contextAfter.length < GrepSearchTool.CONTEXT_LINES) {
|
|
294
|
+
const nextLine = lines[k];
|
|
295
|
+
if (nextLine === '--')
|
|
296
|
+
break;
|
|
297
|
+
const contextMatch = nextLine.match(contextRegex);
|
|
298
|
+
if (contextMatch && contextMatch[1] === file) {
|
|
299
|
+
contextAfter.push(contextMatch[3]);
|
|
300
|
+
}
|
|
301
|
+
else {
|
|
302
|
+
break;
|
|
303
|
+
}
|
|
304
|
+
k++;
|
|
305
|
+
}
|
|
306
|
+
matches.push({
|
|
307
|
+
file: this.normalizePath(file),
|
|
308
|
+
line: parseInt(lineNum, 10),
|
|
309
|
+
column: 1, // grep doesn't provide column info
|
|
310
|
+
match: this.truncateLine(content),
|
|
311
|
+
contextBefore: contextBefore.map(l => this.truncateLine(l)),
|
|
312
|
+
contextAfter: contextAfter.map(l => this.truncateLine(l)),
|
|
313
|
+
});
|
|
314
|
+
}
|
|
315
|
+
i++;
|
|
316
|
+
}
|
|
317
|
+
return {
|
|
318
|
+
matches,
|
|
319
|
+
totalMatches: lines.filter(l => l.match(/^[^:]+:\d+:/)).length,
|
|
320
|
+
truncated: matches.length >= GrepSearchTool.MAX_MATCHES,
|
|
321
|
+
searchPattern,
|
|
322
|
+
};
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* Parse findstr output
|
|
326
|
+
*/
|
|
327
|
+
async parseFindstrOutput(output, searchPattern, cwd) {
|
|
328
|
+
const lines = output.trim().split('\n').filter(line => line);
|
|
329
|
+
const matches = [];
|
|
330
|
+
const fs = await import('fs/promises');
|
|
331
|
+
for (const line of lines) {
|
|
332
|
+
if (matches.length >= GrepSearchTool.MAX_MATCHES)
|
|
333
|
+
break;
|
|
334
|
+
// Parse findstr output: filename:linenum:content
|
|
335
|
+
const match = line.match(/^([^:]+):(\d+):(.*)$/);
|
|
336
|
+
if (!match)
|
|
337
|
+
continue;
|
|
338
|
+
const [, file, lineNum, content] = match;
|
|
339
|
+
const lineNumber = parseInt(lineNum, 10);
|
|
340
|
+
// Read context lines from file
|
|
341
|
+
const contextBefore = [];
|
|
342
|
+
const contextAfter = [];
|
|
343
|
+
try {
|
|
344
|
+
const fullPath = path.resolve(cwd, file);
|
|
345
|
+
const fileContent = await fs.readFile(fullPath, 'utf-8');
|
|
346
|
+
const fileLines = fileContent.split('\n');
|
|
347
|
+
// Get context before
|
|
348
|
+
for (let i = Math.max(0, lineNumber - GrepSearchTool.CONTEXT_LINES - 1); i < lineNumber - 1; i++) {
|
|
349
|
+
if (fileLines[i] !== undefined) {
|
|
350
|
+
contextBefore.push(fileLines[i]);
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
// Get context after
|
|
354
|
+
for (let i = lineNumber; i < Math.min(fileLines.length, lineNumber + GrepSearchTool.CONTEXT_LINES); i++) {
|
|
355
|
+
if (fileLines[i] !== undefined) {
|
|
356
|
+
contextAfter.push(fileLines[i]);
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
catch (error) {
|
|
361
|
+
// If we can't read the file, just skip context
|
|
362
|
+
}
|
|
363
|
+
matches.push({
|
|
364
|
+
file: this.normalizePath(file),
|
|
365
|
+
line: lineNumber,
|
|
366
|
+
column: 1, // findstr doesn't provide column info
|
|
367
|
+
match: this.truncateLine(content),
|
|
368
|
+
contextBefore: contextBefore.map(l => this.truncateLine(l)),
|
|
369
|
+
contextAfter: contextAfter.map(l => this.truncateLine(l)),
|
|
370
|
+
});
|
|
371
|
+
}
|
|
372
|
+
return {
|
|
373
|
+
matches,
|
|
374
|
+
totalMatches: lines.length,
|
|
375
|
+
truncated: matches.length >= GrepSearchTool.MAX_MATCHES,
|
|
376
|
+
searchPattern,
|
|
377
|
+
};
|
|
378
|
+
}
|
|
379
|
+
/**
|
|
380
|
+
* Execute the grep search
|
|
381
|
+
*/
|
|
382
|
+
async execute(params, cwd) {
|
|
383
|
+
// Validate pattern
|
|
384
|
+
const validation = this.validatePattern(params.pattern);
|
|
385
|
+
if (!validation.valid) {
|
|
386
|
+
throw new Error(validation.error);
|
|
387
|
+
}
|
|
388
|
+
// Try ripgrep first
|
|
389
|
+
if (await this.hasRipgrep()) {
|
|
390
|
+
return await this.searchWithRipgrep(params, cwd);
|
|
391
|
+
}
|
|
392
|
+
// Try native grep (Linux/Mac)
|
|
393
|
+
if (await this.hasGrep()) {
|
|
394
|
+
return await this.searchWithGrep(params, cwd);
|
|
395
|
+
}
|
|
396
|
+
// Fall back to findstr (Windows)
|
|
397
|
+
if (process.platform === 'win32') {
|
|
398
|
+
return await this.searchWithFindstr(params, cwd);
|
|
399
|
+
}
|
|
400
|
+
throw new Error('No search tool available. Please install ripgrep for better performance: https://github.com/BurntSushi/ripgrep');
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
/**
|
|
404
|
+
* Format grep search results for display
|
|
405
|
+
*/
|
|
406
|
+
function formatGrepResults(result) {
|
|
407
|
+
if (result.matches.length === 0) {
|
|
408
|
+
return `No matches found for pattern "${result.searchPattern}"\nSuggestion: Try a broader search pattern or check spelling. Use case-insensitive search if needed.`;
|
|
409
|
+
}
|
|
410
|
+
const lines = [];
|
|
411
|
+
lines.push(`Found ${result.totalMatches} match${result.totalMatches === 1 ? '' : 'es'} for pattern "${result.searchPattern}"`);
|
|
412
|
+
if (result.truncated) {
|
|
413
|
+
lines.push(`(showing first ${result.matches.length} matches)`);
|
|
414
|
+
}
|
|
415
|
+
lines.push('');
|
|
416
|
+
for (const match of result.matches) {
|
|
417
|
+
lines.push(`${match.file}:${match.line}:${match.column}`);
|
|
418
|
+
// Context before
|
|
419
|
+
if (match.contextBefore.length > 0) {
|
|
420
|
+
for (const ctx of match.contextBefore) {
|
|
421
|
+
lines.push(` | ${ctx}`);
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
// The match itself
|
|
425
|
+
lines.push(` > ${match.match}`);
|
|
426
|
+
// Context after
|
|
427
|
+
if (match.contextAfter.length > 0) {
|
|
428
|
+
for (const ctx of match.contextAfter) {
|
|
429
|
+
lines.push(` | ${ctx}`);
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
lines.push('');
|
|
433
|
+
}
|
|
434
|
+
return lines.join('\n');
|
|
435
|
+
}
|
|
436
|
+
/**
|
|
437
|
+
* Grep search tool for the tool registry
|
|
438
|
+
*/
|
|
439
|
+
export const grepSearchTool = {
|
|
440
|
+
schema: {
|
|
441
|
+
name: 'grep_search',
|
|
442
|
+
description: `Search for text patterns across files in the codebase using regex.
|
|
443
|
+
|
|
444
|
+
USE THIS TOOL WHEN:
|
|
445
|
+
- User asks "where is X defined"
|
|
446
|
+
- You need to find all occurrences of a function, class, or variable
|
|
447
|
+
- You need to locate TODO comments or specific code patterns
|
|
448
|
+
- You want to understand how a feature is implemented across files
|
|
449
|
+
|
|
450
|
+
BEFORE using read_file on multiple files, use this to find relevant files first.
|
|
451
|
+
|
|
452
|
+
EXAMPLES:
|
|
453
|
+
- Find class definition: pattern="class User"
|
|
454
|
+
- Find function calls: pattern="connectDatabase\\\\("
|
|
455
|
+
- Find TODO comments: pattern="TODO.*auth"
|
|
456
|
+
- Find imports: pattern="import.*express"`,
|
|
457
|
+
parameters: {
|
|
458
|
+
type: 'object',
|
|
459
|
+
properties: {
|
|
460
|
+
pattern: {
|
|
461
|
+
type: 'string',
|
|
462
|
+
description: 'Regex pattern to search for. Use \\\\ to escape special characters.',
|
|
463
|
+
},
|
|
464
|
+
caseSensitive: {
|
|
465
|
+
type: 'boolean',
|
|
466
|
+
description: 'Whether search should be case-sensitive. Default: false',
|
|
467
|
+
},
|
|
468
|
+
filePattern: {
|
|
469
|
+
type: 'string',
|
|
470
|
+
description: 'Glob pattern to filter files (e.g., "*.ts", "src/**/*.py"). Optional.',
|
|
471
|
+
},
|
|
472
|
+
excludePattern: {
|
|
473
|
+
type: 'string',
|
|
474
|
+
description: 'Glob pattern to exclude files (e.g., "*.test.ts", "dist/**"). Optional.',
|
|
475
|
+
},
|
|
476
|
+
},
|
|
477
|
+
required: ['pattern'],
|
|
478
|
+
},
|
|
479
|
+
},
|
|
480
|
+
async execute(args, context) {
|
|
481
|
+
const tool = new GrepSearchTool();
|
|
482
|
+
const params = {
|
|
483
|
+
pattern: args.pattern,
|
|
484
|
+
caseSensitive: args.caseSensitive ?? false,
|
|
485
|
+
filePattern: args.filePattern,
|
|
486
|
+
excludePattern: args.excludePattern,
|
|
487
|
+
};
|
|
488
|
+
try {
|
|
489
|
+
const result = await tool.execute(params, context.cwd);
|
|
490
|
+
return formatGrepResults(result);
|
|
491
|
+
}
|
|
492
|
+
catch (error) {
|
|
493
|
+
throw new Error(`Grep search failed: ${error.message}`);
|
|
494
|
+
}
|
|
495
|
+
},
|
|
496
|
+
};
|
|
497
|
+
//# sourceMappingURL=grep-search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grep-search.js","sourceRoot":"","sources":["../../src/tools/grep-search.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export interface InspectSymbolParams {
|
|
2
|
+
filePath: string;
|
|
3
|
+
}
|
|
4
|
+
export interface Symbol {
|
|
5
|
+
name: string;
|
|
6
|
+
type: 'function' | 'class' | 'method' | 'export' | 'interface' | 'type';
|
|
7
|
+
signature?: string;
|
|
8
|
+
line: number;
|
|
9
|
+
parentClass?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface InspectSymbolResult {
|
|
12
|
+
symbols: Symbol[];
|
|
13
|
+
filePath: string;
|
|
14
|
+
language: string;
|
|
15
|
+
truncated: boolean;
|
|
16
|
+
}
|
|
17
|
+
export declare class InspectSymbolTool {
|
|
18
|
+
private readonly MAX_SYMBOLS;
|
|
19
|
+
private readonly languageParsers;
|
|
20
|
+
execute(params: InspectSymbolParams, cwd: string): Promise<InspectSymbolResult>;
|
|
21
|
+
private parseTypeScriptJavaScript;
|
|
22
|
+
private parsePython;
|
|
23
|
+
private parseJava;
|
|
24
|
+
private getIndentLevel;
|
|
25
|
+
private normalizePath;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=inspect-symbol.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inspect-symbol.d.ts","sourceRoot":"","sources":["../../src/tools/inspect-symbol.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,GAAG,MAAM,CAAC;IACxE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;CACpB;AAQD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAO;IAEnC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAgB9B;IAEI,OAAO,CAAC,MAAM,EAAE,mBAAmB,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA4CrF,OAAO,CAAC,yBAAyB;IA+GjC,OAAO,CAAC,WAAW;IAmDnB,OAAO,CAAC,SAAS;IA2DjB,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,aAAa;CAGtB"}
|