ctx-pilot 0.9.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.
Files changed (136) hide show
  1. package/LICENSE +21 -0
  2. package/LICENSE-COMMERCIAL +32 -0
  3. package/README.md +314 -0
  4. package/dist/cli.d.ts +3 -0
  5. package/dist/cli.d.ts.map +1 -0
  6. package/dist/cli.js +577 -0
  7. package/dist/cli.js.map +1 -0
  8. package/dist/config/index.d.ts +9 -0
  9. package/dist/config/index.d.ts.map +1 -0
  10. package/dist/config/index.js +67 -0
  11. package/dist/config/index.js.map +1 -0
  12. package/dist/config/schema.d.ts +22 -0
  13. package/dist/config/schema.d.ts.map +1 -0
  14. package/dist/config/schema.js +9 -0
  15. package/dist/config/schema.js.map +1 -0
  16. package/dist/indexer/file-scanner.d.ts +6 -0
  17. package/dist/indexer/file-scanner.d.ts.map +1 -0
  18. package/dist/indexer/file-scanner.js +37 -0
  19. package/dist/indexer/file-scanner.js.map +1 -0
  20. package/dist/indexer/index.d.ts +10 -0
  21. package/dist/indexer/index.d.ts.map +1 -0
  22. package/dist/indexer/index.js +123 -0
  23. package/dist/indexer/index.js.map +1 -0
  24. package/dist/indexer/parsers/asciidoc.d.ts +3 -0
  25. package/dist/indexer/parsers/asciidoc.d.ts.map +1 -0
  26. package/dist/indexer/parsers/asciidoc.js +55 -0
  27. package/dist/indexer/parsers/asciidoc.js.map +1 -0
  28. package/dist/indexer/parsers/c.d.ts +3 -0
  29. package/dist/indexer/parsers/c.d.ts.map +1 -0
  30. package/dist/indexer/parsers/c.js +93 -0
  31. package/dist/indexer/parsers/c.js.map +1 -0
  32. package/dist/indexer/parsers/csharp.d.ts +3 -0
  33. package/dist/indexer/parsers/csharp.d.ts.map +1 -0
  34. package/dist/indexer/parsers/csharp.js +79 -0
  35. package/dist/indexer/parsers/csharp.js.map +1 -0
  36. package/dist/indexer/parsers/dart.d.ts +3 -0
  37. package/dist/indexer/parsers/dart.d.ts.map +1 -0
  38. package/dist/indexer/parsers/dart.js +81 -0
  39. package/dist/indexer/parsers/dart.js.map +1 -0
  40. package/dist/indexer/parsers/go.d.ts +3 -0
  41. package/dist/indexer/parsers/go.d.ts.map +1 -0
  42. package/dist/indexer/parsers/go.js +64 -0
  43. package/dist/indexer/parsers/go.js.map +1 -0
  44. package/dist/indexer/parsers/index.d.ts +4 -0
  45. package/dist/indexer/parsers/index.d.ts.map +1 -0
  46. package/dist/indexer/parsers/index.js +109 -0
  47. package/dist/indexer/parsers/index.js.map +1 -0
  48. package/dist/indexer/parsers/java.d.ts +3 -0
  49. package/dist/indexer/parsers/java.d.ts.map +1 -0
  50. package/dist/indexer/parsers/java.js +84 -0
  51. package/dist/indexer/parsers/java.js.map +1 -0
  52. package/dist/indexer/parsers/javascript.d.ts +3 -0
  53. package/dist/indexer/parsers/javascript.d.ts.map +1 -0
  54. package/dist/indexer/parsers/javascript.js +78 -0
  55. package/dist/indexer/parsers/javascript.js.map +1 -0
  56. package/dist/indexer/parsers/markdown.d.ts +3 -0
  57. package/dist/indexer/parsers/markdown.d.ts.map +1 -0
  58. package/dist/indexer/parsers/markdown.js +67 -0
  59. package/dist/indexer/parsers/markdown.js.map +1 -0
  60. package/dist/indexer/parsers/php.d.ts +3 -0
  61. package/dist/indexer/parsers/php.d.ts.map +1 -0
  62. package/dist/indexer/parsers/php.js +78 -0
  63. package/dist/indexer/parsers/php.js.map +1 -0
  64. package/dist/indexer/parsers/plain.d.ts +3 -0
  65. package/dist/indexer/parsers/plain.d.ts.map +1 -0
  66. package/dist/indexer/parsers/plain.js +18 -0
  67. package/dist/indexer/parsers/plain.js.map +1 -0
  68. package/dist/indexer/parsers/python.d.ts +3 -0
  69. package/dist/indexer/parsers/python.d.ts.map +1 -0
  70. package/dist/indexer/parsers/python.js +64 -0
  71. package/dist/indexer/parsers/python.js.map +1 -0
  72. package/dist/indexer/parsers/rst.d.ts +3 -0
  73. package/dist/indexer/parsers/rst.d.ts.map +1 -0
  74. package/dist/indexer/parsers/rst.js +67 -0
  75. package/dist/indexer/parsers/rst.js.map +1 -0
  76. package/dist/indexer/parsers/ruby.d.ts +3 -0
  77. package/dist/indexer/parsers/ruby.d.ts.map +1 -0
  78. package/dist/indexer/parsers/ruby.js +77 -0
  79. package/dist/indexer/parsers/ruby.js.map +1 -0
  80. package/dist/indexer/parsers/rust.d.ts +3 -0
  81. package/dist/indexer/parsers/rust.d.ts.map +1 -0
  82. package/dist/indexer/parsers/rust.js +83 -0
  83. package/dist/indexer/parsers/rust.js.map +1 -0
  84. package/dist/indexer/parsers/shader.d.ts +3 -0
  85. package/dist/indexer/parsers/shader.d.ts.map +1 -0
  86. package/dist/indexer/parsers/shader.js +81 -0
  87. package/dist/indexer/parsers/shader.js.map +1 -0
  88. package/dist/indexer/parsers/shell.d.ts +3 -0
  89. package/dist/indexer/parsers/shell.d.ts.map +1 -0
  90. package/dist/indexer/parsers/shell.js +77 -0
  91. package/dist/indexer/parsers/shell.js.map +1 -0
  92. package/dist/indexer/parsers/structured.d.ts +3 -0
  93. package/dist/indexer/parsers/structured.d.ts.map +1 -0
  94. package/dist/indexer/parsers/structured.js +104 -0
  95. package/dist/indexer/parsers/structured.js.map +1 -0
  96. package/dist/indexer/parsers/swift.d.ts +3 -0
  97. package/dist/indexer/parsers/swift.d.ts.map +1 -0
  98. package/dist/indexer/parsers/swift.js +89 -0
  99. package/dist/indexer/parsers/swift.js.map +1 -0
  100. package/dist/indexer/parsers/toml.d.ts +3 -0
  101. package/dist/indexer/parsers/toml.d.ts.map +1 -0
  102. package/dist/indexer/parsers/toml.js +58 -0
  103. package/dist/indexer/parsers/toml.js.map +1 -0
  104. package/dist/indexer/parsers/xml.d.ts +3 -0
  105. package/dist/indexer/parsers/xml.d.ts.map +1 -0
  106. package/dist/indexer/parsers/xml.js +73 -0
  107. package/dist/indexer/parsers/xml.js.map +1 -0
  108. package/dist/search/index.d.ts +5 -0
  109. package/dist/search/index.d.ts.map +1 -0
  110. package/dist/search/index.js +84 -0
  111. package/dist/search/index.js.map +1 -0
  112. package/dist/search/keywords.d.ts +9 -0
  113. package/dist/search/keywords.d.ts.map +1 -0
  114. package/dist/search/keywords.js +79 -0
  115. package/dist/search/keywords.js.map +1 -0
  116. package/dist/types.d.ts +44 -0
  117. package/dist/types.d.ts.map +1 -0
  118. package/dist/types.js +2 -0
  119. package/dist/types.js.map +1 -0
  120. package/dist/utils/gitignore.d.ts +5 -0
  121. package/dist/utils/gitignore.d.ts.map +1 -0
  122. package/dist/utils/gitignore.js +31 -0
  123. package/dist/utils/gitignore.js.map +1 -0
  124. package/dist/utils/index.d.ts +3 -0
  125. package/dist/utils/index.d.ts.map +1 -0
  126. package/dist/utils/index.js +3 -0
  127. package/dist/utils/index.js.map +1 -0
  128. package/dist/utils/paths.d.ts +8 -0
  129. package/dist/utils/paths.d.ts.map +1 -0
  130. package/dist/utils/paths.js +23 -0
  131. package/dist/utils/paths.js.map +1 -0
  132. package/dist/utils/tokens.d.ts +3 -0
  133. package/dist/utils/tokens.d.ts.map +1 -0
  134. package/dist/utils/tokens.js +22 -0
  135. package/dist/utils/tokens.js.map +1 -0
  136. package/package.json +77 -0
@@ -0,0 +1,78 @@
1
+ import { estimateTokens } from '../../utils/tokens.js';
2
+ import { extractKeywords } from '../../search/keywords.js';
3
+ // Patterns to detect PHP declarations
4
+ const PATTERNS = [
5
+ /^(?:abstract\s+)?(?:final\s+)?class\s+(\w+)/,
6
+ /^interface\s+(\w+)/,
7
+ /^trait\s+(\w+)/,
8
+ /^enum\s+(\w+)/,
9
+ /^(?:public|private|protected)?\s*(?:static)?\s*function\s+(\w+)/,
10
+ /^function\s+(\w+)/,
11
+ ];
12
+ function getDeclarationType(line) {
13
+ if (/\bclass\b/.test(line))
14
+ return 'class';
15
+ if (/\binterface\b/.test(line))
16
+ return 'interface';
17
+ if (/\btrait\b/.test(line))
18
+ return 'trait';
19
+ if (/\benum\b/.test(line))
20
+ return 'enum';
21
+ return 'function';
22
+ }
23
+ export function parsePHP(content, _filePath) {
24
+ const lines = content.split('\n');
25
+ const declarations = [];
26
+ for (let i = 0; i < lines.length; i++) {
27
+ const trimmedLine = lines[i].trim();
28
+ // Skip comments
29
+ if (trimmedLine.startsWith('//') || trimmedLine.startsWith('#') ||
30
+ trimmedLine.startsWith('*') || trimmedLine.startsWith('/*')) {
31
+ continue;
32
+ }
33
+ for (const pattern of PATTERNS) {
34
+ const match = trimmedLine.match(pattern);
35
+ if (match) {
36
+ declarations.push({
37
+ name: match[1],
38
+ lineIndex: i,
39
+ type: getDeclarationType(trimmedLine),
40
+ });
41
+ break;
42
+ }
43
+ }
44
+ }
45
+ if (declarations.length === 0) {
46
+ const fullContent = content.trim();
47
+ if (!fullContent)
48
+ return [];
49
+ return [{
50
+ title: 'Module',
51
+ lineStart: 1,
52
+ lineEnd: lines.length,
53
+ preview: fullContent.slice(0, 100),
54
+ tokens: estimateTokens(fullContent),
55
+ keywords: extractKeywords(fullContent),
56
+ }];
57
+ }
58
+ const sections = [];
59
+ for (let i = 0; i < declarations.length; i++) {
60
+ const decl = declarations[i];
61
+ const nextDecl = declarations[i + 1];
62
+ const endLine = nextDecl ? nextDecl.lineIndex : lines.length;
63
+ const sectionLines = lines.slice(decl.lineIndex, endLine);
64
+ const sectionContent = sectionLines.join('\n').trim();
65
+ if (sectionContent) {
66
+ sections.push({
67
+ title: `${decl.type} ${decl.name}`,
68
+ lineStart: decl.lineIndex + 1,
69
+ lineEnd: endLine,
70
+ preview: sectionContent.slice(0, 100),
71
+ tokens: estimateTokens(sectionContent),
72
+ keywords: extractKeywords(sectionContent),
73
+ });
74
+ }
75
+ }
76
+ return sections;
77
+ }
78
+ //# sourceMappingURL=php.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"php.js","sourceRoot":"","sources":["../../../src/indexer/parsers/php.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Section } from '../../types.js';
2
+ export declare function parsePlain(content: string, _filePath: string): Section[];
3
+ //# sourceMappingURL=plain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plain.d.ts","sourceRoot":"","sources":["../../../src/indexer/parsers/plain.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAM9C,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,EAAE,CAcxE"}
@@ -0,0 +1,18 @@
1
+ import { estimateTokens } from '../../utils/tokens.js';
2
+ import { extractKeywords } from '../../search/keywords.js';
3
+ // Plain text files are treated as a single section
4
+ export function parsePlain(content, _filePath) {
5
+ const trimmed = content.trim();
6
+ if (!trimmed)
7
+ return [];
8
+ const lines = content.split('\n');
9
+ return [{
10
+ title: 'Document',
11
+ lineStart: 1,
12
+ lineEnd: lines.length,
13
+ preview: trimmed.slice(0, 100),
14
+ tokens: estimateTokens(trimmed),
15
+ keywords: extractKeywords(trimmed),
16
+ }];
17
+ }
18
+ //# sourceMappingURL=plain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plain.js","sourceRoot":"","sources":["../../../src/indexer/parsers/plain.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE3D,mDAAmD;AAEnD,MAAM,UAAU,UAAU,CAAC,OAAe,EAAE,SAAiB;IAC3D,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAC/B,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IAExB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,OAAO,CAAC;YACN,KAAK,EAAE,UAAU;YACjB,SAAS,EAAE,CAAC;YACZ,OAAO,EAAE,KAAK,CAAC,MAAM;YACrB,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;YAC9B,MAAM,EAAE,cAAc,CAAC,OAAO,CAAC;YAC/B,QAAQ,EAAE,eAAe,CAAC,OAAO,CAAC;SACnC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Section } from '../../types.js';
2
+ export declare function parsePython(content: string, _filePath: string): Section[];
3
+ //# sourceMappingURL=python.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"python.d.ts","sourceRoot":"","sources":["../../../src/indexer/parsers/python.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAiB9C,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,EAAE,CA+DzE"}
@@ -0,0 +1,64 @@
1
+ import { estimateTokens } from '../../utils/tokens.js';
2
+ import { extractKeywords } from '../../search/keywords.js';
3
+ // Patterns to detect Python declarations (only top-level, no leading whitespace)
4
+ const PATTERNS = [
5
+ /^def\s+(\w+)\s*\(/,
6
+ /^async\s+def\s+(\w+)\s*\(/,
7
+ /^class\s+(\w+)/,
8
+ ];
9
+ export function parsePython(content, _filePath) {
10
+ const lines = content.split('\n');
11
+ const declarations = [];
12
+ for (let i = 0; i < lines.length; i++) {
13
+ const line = lines[i];
14
+ // Only match top-level declarations (no leading whitespace)
15
+ if (line.startsWith(' ') || line.startsWith('\t')) {
16
+ continue;
17
+ }
18
+ for (const pattern of PATTERNS) {
19
+ const match = line.match(pattern);
20
+ if (match) {
21
+ const type = line.startsWith('class') ? 'class' : 'def';
22
+ declarations.push({
23
+ name: match[1],
24
+ lineIndex: i,
25
+ type,
26
+ });
27
+ break;
28
+ }
29
+ }
30
+ }
31
+ if (declarations.length === 0) {
32
+ const fullContent = content.trim();
33
+ if (!fullContent)
34
+ return [];
35
+ return [{
36
+ title: 'Module',
37
+ lineStart: 1,
38
+ lineEnd: lines.length,
39
+ preview: fullContent.slice(0, 100),
40
+ tokens: estimateTokens(fullContent),
41
+ keywords: extractKeywords(fullContent),
42
+ }];
43
+ }
44
+ const sections = [];
45
+ for (let i = 0; i < declarations.length; i++) {
46
+ const decl = declarations[i];
47
+ const nextDecl = declarations[i + 1];
48
+ const endLine = nextDecl ? nextDecl.lineIndex : lines.length;
49
+ const sectionLines = lines.slice(decl.lineIndex, endLine);
50
+ const sectionContent = sectionLines.join('\n').trim();
51
+ if (sectionContent) {
52
+ sections.push({
53
+ title: `${decl.type} ${decl.name}`,
54
+ lineStart: decl.lineIndex + 1,
55
+ lineEnd: endLine,
56
+ preview: sectionContent.slice(0, 100),
57
+ tokens: estimateTokens(sectionContent),
58
+ keywords: extractKeywords(sectionContent),
59
+ });
60
+ }
61
+ }
62
+ return sections;
63
+ }
64
+ //# sourceMappingURL=python.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"python.js","sourceRoot":"","sources":["../../../src/indexer/parsers/python.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Section } from '../../types.js';
2
+ export declare function parseRST(content: string, _filePath: string): Section[];
3
+ //# sourceMappingURL=rst.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rst.d.ts","sourceRoot":"","sources":["../../../src/indexer/parsers/rst.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAc9C,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,EAAE,CAqEtE"}
@@ -0,0 +1,67 @@
1
+ import { estimateTokens } from '../../utils/tokens.js';
2
+ import { extractKeywords } from '../../search/keywords.js';
3
+ // reStructuredText uses underlines/overlines for headers
4
+ // Common patterns: ===, ---, ~~~, ^^^, etc.
5
+ const UNDERLINE_CHARS = /^[=\-~^"'`#*+_]+$/;
6
+ export function parseRST(content, _filePath) {
7
+ const lines = content.split('\n');
8
+ const headers = [];
9
+ const seenChars = []; // Track char order to determine level
10
+ for (let i = 0; i < lines.length; i++) {
11
+ const line = lines[i];
12
+ const nextLine = lines[i + 1] || '';
13
+ const prevLine = lines[i - 1] || '';
14
+ // Check for underlined header (title on current line, underline on next)
15
+ if (line.trim() && UNDERLINE_CHARS.test(nextLine.trim()) && nextLine.trim().length >= line.trim().length) {
16
+ const underlineChar = nextLine.trim()[0];
17
+ let level = seenChars.indexOf(underlineChar);
18
+ if (level === -1) {
19
+ level = seenChars.length;
20
+ seenChars.push(underlineChar);
21
+ }
22
+ headers.push({
23
+ title: line.trim(),
24
+ lineIndex: i,
25
+ level: level + 1,
26
+ });
27
+ }
28
+ // Check for overlined + underlined header
29
+ if (UNDERLINE_CHARS.test(prevLine.trim()) && UNDERLINE_CHARS.test(nextLine.trim()) &&
30
+ line.trim() && prevLine.trim()[0] === nextLine.trim()[0]) {
31
+ // Skip - already handled by the underline case on previous iteration
32
+ }
33
+ }
34
+ if (headers.length === 0) {
35
+ const fullContent = content.trim();
36
+ if (!fullContent)
37
+ return [];
38
+ return [{
39
+ title: 'Document',
40
+ lineStart: 1,
41
+ lineEnd: lines.length,
42
+ preview: fullContent.slice(0, 100),
43
+ tokens: estimateTokens(fullContent),
44
+ keywords: extractKeywords(fullContent),
45
+ }];
46
+ }
47
+ const sections = [];
48
+ for (let i = 0; i < headers.length; i++) {
49
+ const header = headers[i];
50
+ const nextHeader = headers[i + 1];
51
+ const endLine = nextHeader ? nextHeader.lineIndex : lines.length;
52
+ const sectionLines = lines.slice(header.lineIndex, endLine);
53
+ const sectionContent = sectionLines.join('\n').trim();
54
+ if (sectionContent) {
55
+ sections.push({
56
+ title: header.title,
57
+ lineStart: header.lineIndex + 1,
58
+ lineEnd: endLine,
59
+ preview: sectionContent.slice(0, 100),
60
+ tokens: estimateTokens(sectionContent),
61
+ keywords: extractKeywords(sectionContent),
62
+ });
63
+ }
64
+ }
65
+ return sections;
66
+ }
67
+ //# sourceMappingURL=rst.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rst.js","sourceRoot":"","sources":["../../../src/indexer/parsers/rst.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Section } from '../../types.js';
2
+ export declare function parseRuby(content: string, _filePath: string): Section[];
3
+ //# sourceMappingURL=ruby.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ruby.d.ts","sourceRoot":"","sources":["../../../src/indexer/parsers/ruby.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AA2B9C,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,EAAE,CA6DvE"}
@@ -0,0 +1,77 @@
1
+ import { estimateTokens } from '../../utils/tokens.js';
2
+ import { extractKeywords } from '../../search/keywords.js';
3
+ // Patterns to detect Ruby declarations
4
+ const PATTERNS = [
5
+ /^class\s+(\w+)/,
6
+ /^module\s+(\w+)/,
7
+ /^def\s+(?:self\.)?(\w+[?!]?)/,
8
+ /^(?:attr_reader|attr_writer|attr_accessor)\s+:(\w+)/,
9
+ ];
10
+ function getDeclarationType(line) {
11
+ if (/^class\b/.test(line))
12
+ return 'class';
13
+ if (/^module\b/.test(line))
14
+ return 'module';
15
+ if (/^def\s+self\./.test(line))
16
+ return 'class method';
17
+ if (/^def\b/.test(line))
18
+ return 'method';
19
+ if (/^attr_/.test(line))
20
+ return 'attribute';
21
+ return 'method';
22
+ }
23
+ export function parseRuby(content, _filePath) {
24
+ const lines = content.split('\n');
25
+ const declarations = [];
26
+ for (let i = 0; i < lines.length; i++) {
27
+ const trimmedLine = lines[i].trim();
28
+ // Skip comments
29
+ if (trimmedLine.startsWith('#')) {
30
+ continue;
31
+ }
32
+ for (const pattern of PATTERNS) {
33
+ const match = trimmedLine.match(pattern);
34
+ if (match) {
35
+ declarations.push({
36
+ name: match[1],
37
+ lineIndex: i,
38
+ type: getDeclarationType(trimmedLine),
39
+ });
40
+ break;
41
+ }
42
+ }
43
+ }
44
+ if (declarations.length === 0) {
45
+ const fullContent = content.trim();
46
+ if (!fullContent)
47
+ return [];
48
+ return [{
49
+ title: 'Module',
50
+ lineStart: 1,
51
+ lineEnd: lines.length,
52
+ preview: fullContent.slice(0, 100),
53
+ tokens: estimateTokens(fullContent),
54
+ keywords: extractKeywords(fullContent),
55
+ }];
56
+ }
57
+ const sections = [];
58
+ for (let i = 0; i < declarations.length; i++) {
59
+ const decl = declarations[i];
60
+ const nextDecl = declarations[i + 1];
61
+ const endLine = nextDecl ? nextDecl.lineIndex : lines.length;
62
+ const sectionLines = lines.slice(decl.lineIndex, endLine);
63
+ const sectionContent = sectionLines.join('\n').trim();
64
+ if (sectionContent) {
65
+ sections.push({
66
+ title: `${decl.type} ${decl.name}`,
67
+ lineStart: decl.lineIndex + 1,
68
+ lineEnd: endLine,
69
+ preview: sectionContent.slice(0, 100),
70
+ tokens: estimateTokens(sectionContent),
71
+ keywords: extractKeywords(sectionContent),
72
+ });
73
+ }
74
+ }
75
+ return sections;
76
+ }
77
+ //# sourceMappingURL=ruby.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ruby.js","sourceRoot":"","sources":["../../../src/indexer/parsers/ruby.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Section } from '../../types.js';
2
+ export declare function parseRust(content: string, _filePath: string): Section[];
3
+ //# sourceMappingURL=rust.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rust.d.ts","sourceRoot":"","sources":["../../../src/indexer/parsers/rust.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AA8B9C,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,EAAE,CAgEvE"}
@@ -0,0 +1,83 @@
1
+ import { estimateTokens } from '../../utils/tokens.js';
2
+ import { extractKeywords } from '../../search/keywords.js';
3
+ // Patterns to detect Rust declarations
4
+ const PATTERNS = [
5
+ /^(?:pub\s+)?(?:async\s+)?fn\s+(\w+)/,
6
+ /^(?:pub\s+)?struct\s+(\w+)/,
7
+ /^(?:pub\s+)?enum\s+(\w+)/,
8
+ /^(?:pub\s+)?trait\s+(\w+)/,
9
+ /^(?:pub\s+)?impl(?:<[^>]+>)?\s+(?:(\w+)|(\w+)\s+for\s+(\w+))/,
10
+ /^(?:pub\s+)?mod\s+(\w+)/,
11
+ ];
12
+ function getDeclarationType(line) {
13
+ if (/\bfn\b/.test(line))
14
+ return 'fn';
15
+ if (/\bstruct\b/.test(line))
16
+ return 'struct';
17
+ if (/\benum\b/.test(line))
18
+ return 'enum';
19
+ if (/\btrait\b/.test(line))
20
+ return 'trait';
21
+ if (/\bimpl\b/.test(line))
22
+ return 'impl';
23
+ if (/\bmod\b/.test(line))
24
+ return 'mod';
25
+ return 'item';
26
+ }
27
+ export function parseRust(content, _filePath) {
28
+ const lines = content.split('\n');
29
+ const declarations = [];
30
+ for (let i = 0; i < lines.length; i++) {
31
+ const line = lines[i];
32
+ // Only match top-level declarations (no leading whitespace)
33
+ if (line.startsWith(' ') || line.startsWith('\t')) {
34
+ continue;
35
+ }
36
+ for (const pattern of PATTERNS) {
37
+ const match = line.match(pattern);
38
+ if (match) {
39
+ // Get the first captured group that's not undefined
40
+ const name = match.slice(1).find(g => g !== undefined) || 'anonymous';
41
+ declarations.push({
42
+ name,
43
+ lineIndex: i,
44
+ type: getDeclarationType(line),
45
+ });
46
+ break;
47
+ }
48
+ }
49
+ }
50
+ if (declarations.length === 0) {
51
+ const fullContent = content.trim();
52
+ if (!fullContent)
53
+ return [];
54
+ return [{
55
+ title: 'Module',
56
+ lineStart: 1,
57
+ lineEnd: lines.length,
58
+ preview: fullContent.slice(0, 100),
59
+ tokens: estimateTokens(fullContent),
60
+ keywords: extractKeywords(fullContent),
61
+ }];
62
+ }
63
+ const sections = [];
64
+ for (let i = 0; i < declarations.length; i++) {
65
+ const decl = declarations[i];
66
+ const nextDecl = declarations[i + 1];
67
+ const endLine = nextDecl ? nextDecl.lineIndex : lines.length;
68
+ const sectionLines = lines.slice(decl.lineIndex, endLine);
69
+ const sectionContent = sectionLines.join('\n').trim();
70
+ if (sectionContent) {
71
+ sections.push({
72
+ title: `${decl.type} ${decl.name}`,
73
+ lineStart: decl.lineIndex + 1,
74
+ lineEnd: endLine,
75
+ preview: sectionContent.slice(0, 100),
76
+ tokens: estimateTokens(sectionContent),
77
+ keywords: extractKeywords(sectionContent),
78
+ });
79
+ }
80
+ }
81
+ return sections;
82
+ }
83
+ //# sourceMappingURL=rust.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rust.js","sourceRoot":"","sources":["../../../src/indexer/parsers/rust.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Section } from '../../types.js';
2
+ export declare function parseShader(content: string, _filePath: string): Section[];
3
+ //# sourceMappingURL=shader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shader.d.ts","sourceRoot":"","sources":["../../../src/indexer/parsers/shader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAkC9C,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,EAAE,CAyDzE"}
@@ -0,0 +1,81 @@
1
+ import { estimateTokens } from '../../utils/tokens.js';
2
+ import { extractKeywords } from '../../search/keywords.js';
3
+ // Patterns for HLSL/GLSL/WGSL
4
+ const PATTERNS = [
5
+ // HLSL/GLSL functions
6
+ /^(?:void|float|int|vec\d|mat\d|bool|\w+)\s+(\w+)\s*\(/,
7
+ // HLSL cbuffer/struct
8
+ /^cbuffer\s+(\w+)/,
9
+ /^struct\s+(\w+)/,
10
+ // WGSL functions and entry points
11
+ /^fn\s+(\w+)/,
12
+ /^@(?:vertex|fragment|compute)[^]*fn\s+(\w+)/,
13
+ // GLSL uniforms
14
+ /^uniform\s+\w+\s+(\w+)/,
15
+ ];
16
+ function getDeclarationType(line) {
17
+ if (/^cbuffer/.test(line))
18
+ return 'cbuffer';
19
+ if (/^struct/.test(line))
20
+ return 'struct';
21
+ if (/^uniform/.test(line))
22
+ return 'uniform';
23
+ if (/@vertex/.test(line))
24
+ return 'vertex';
25
+ if (/@fragment/.test(line))
26
+ return 'fragment';
27
+ if (/@compute/.test(line))
28
+ return 'compute';
29
+ return 'function';
30
+ }
31
+ export function parseShader(content, _filePath) {
32
+ const lines = content.split('\n');
33
+ const declarations = [];
34
+ for (let i = 0; i < lines.length; i++) {
35
+ const line = lines[i].trim();
36
+ for (const pattern of PATTERNS) {
37
+ const match = line.match(pattern);
38
+ if (match) {
39
+ declarations.push({
40
+ name: match[1],
41
+ lineIndex: i,
42
+ type: getDeclarationType(line),
43
+ });
44
+ break;
45
+ }
46
+ }
47
+ }
48
+ if (declarations.length === 0) {
49
+ const fullContent = content.trim();
50
+ if (!fullContent)
51
+ return [];
52
+ return [{
53
+ title: 'Shader',
54
+ lineStart: 1,
55
+ lineEnd: lines.length,
56
+ preview: fullContent.slice(0, 100),
57
+ tokens: estimateTokens(fullContent),
58
+ keywords: extractKeywords(fullContent),
59
+ }];
60
+ }
61
+ const sections = [];
62
+ for (let i = 0; i < declarations.length; i++) {
63
+ const decl = declarations[i];
64
+ const nextDecl = declarations[i + 1];
65
+ const endLine = nextDecl ? nextDecl.lineIndex : lines.length;
66
+ const sectionLines = lines.slice(decl.lineIndex, endLine);
67
+ const sectionContent = sectionLines.join('\n').trim();
68
+ if (sectionContent) {
69
+ sections.push({
70
+ title: `${decl.type} ${decl.name}`,
71
+ lineStart: decl.lineIndex + 1,
72
+ lineEnd: endLine,
73
+ preview: sectionContent.slice(0, 100),
74
+ tokens: estimateTokens(sectionContent),
75
+ keywords: extractKeywords(sectionContent),
76
+ });
77
+ }
78
+ }
79
+ return sections;
80
+ }
81
+ //# sourceMappingURL=shader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shader.js","sourceRoot":"","sources":["../../../src/indexer/parsers/shader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Section } from '../../types.js';
2
+ export declare function parseShell(content: string, _filePath: string): Section[];
3
+ //# sourceMappingURL=shell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../../src/indexer/parsers/shell.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AA4B9C,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,EAAE,CA6DxE"}