(options: ContextTreeOptions)
| 105 | } |
| 106 | |
| 107 | export async function getContextTree(options: ContextTreeOptions): Promise<string> { |
| 108 | const entries = await walkDirectory({ |
| 109 | rootDir: options.rootDir, |
| 110 | targetPath: options.targetPath, |
| 111 | depthLimit: options.depthLimit, |
| 112 | }); |
| 113 | |
| 114 | const includeSymbols = options.includeSymbols !== false; |
| 115 | const tree = await buildTree(entries, options.rootDir, includeSymbols); |
| 116 | const maxTokens = options.maxTokens ?? 20000; |
| 117 | |
| 118 | let rendered = renderTree(tree); |
| 119 | if (estimateTokens(rendered) <= maxTokens) return rendered; |
| 120 | |
| 121 | pruneSymbols(tree); |
| 122 | rendered = renderTree(tree); |
| 123 | if (estimateTokens(rendered) <= maxTokens) return `[Level 1: Headers only, symbols pruned to fit ${maxTokens} tokens]\n\n${rendered}`; |
| 124 | |
| 125 | pruneHeaders(tree); |
| 126 | rendered = renderTree(tree); |
| 127 | return `[Level 0: File names only, project too large for ${maxTokens} tokens]\n\n${rendered}`; |
| 128 | } |
no test coverage detected