@windagency/valora 2.2.0 → 2.3.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 (324) hide show
  1. package/README.md +45 -19
  2. package/data/agents/secops-engineer.md +74 -7
  3. package/data/commands/_meta/schema.json +8 -1
  4. package/data/commands/assert.md +1 -1
  5. package/data/commands/generate-all-documentation.md +1 -1
  6. package/data/commands/generate-docs.md +1 -1
  7. package/data/commands/implement.md +2 -0
  8. package/data/commands/plan-architecture.md +1 -1
  9. package/data/commands/plan-implementation.md +1 -1
  10. package/data/commands/plan.md +1 -1
  11. package/data/commands/refine-task.md +1 -1
  12. package/data/commands/registry.json +11 -11
  13. package/data/commands/review-code.md +1 -1
  14. package/data/commands/review-functional.md +1 -1
  15. package/data/prompts/01_onboard/analyze-patterns.md +1 -0
  16. package/data/prompts/01_onboard/collect-clarifications.md +1 -0
  17. package/data/prompts/01_onboard/map-dependencies.md +1 -0
  18. package/data/prompts/02_context/analyze-change-scope.md +1 -0
  19. package/data/prompts/02_context/analyze-changes-for-review.md +1 -0
  20. package/data/prompts/02_context/analyze-codebase-changes.md +1 -0
  21. package/data/prompts/02_context/analyze-command-execution.md +1 -0
  22. package/data/prompts/02_context/analyze-commits-for-pr.md +1 -0
  23. package/data/prompts/02_context/analyze-functional-scope.md +1 -0
  24. package/data/prompts/02_context/analyze-git-branch.md +1 -0
  25. package/data/prompts/02_context/analyze-git-status.md +1 -0
  26. package/data/prompts/02_context/analyze-task-context.md +1 -0
  27. package/data/prompts/02_context/extract-ticket-info.md +1 -0
  28. package/data/prompts/02_context/extract-ticket-references.md +1 -0
  29. package/data/prompts/02_context/gather-git-metrics.md +1 -0
  30. package/data/prompts/02_context/identify-completed-workflow.md +1 -0
  31. package/data/prompts/02_context/load-and-analyze-parallel.md +1 -0
  32. package/data/prompts/02_context/load-commit-template.md +1 -0
  33. package/data/prompts/02_context/load-implementation-context.md +1 -0
  34. package/data/prompts/02_context/load-plan-context.md +1 -0
  35. package/data/prompts/02_context/load-pr-template.md +1 -0
  36. package/data/prompts/02_context/scan-codebase.md +1 -0
  37. package/data/prompts/02_context/use-modern-cli-tools.md +1 -0
  38. package/data/prompts/03_plan/assess-complexity.md +1 -0
  39. package/data/prompts/03_plan/assess-risks.md +1 -0
  40. package/data/prompts/03_plan/breakdown-implementation.md +1 -0
  41. package/data/prompts/03_plan/define-architecture.md +1 -0
  42. package/data/prompts/03_plan/identify-dependencies.md +1 -0
  43. package/data/prompts/04_code/calculate-version-bump.md +1 -0
  44. package/data/prompts/04_code/create-version-tag.md +1 -0
  45. package/data/prompts/04_code/determine-commit-strategy.md +1 -0
  46. package/data/prompts/04_code/determine-labels.md +1 -0
  47. package/data/prompts/04_code/determine-reviewers.md +1 -0
  48. package/data/prompts/04_code/generate-commit-messages.md +1 -0
  49. package/data/prompts/04_code/generate-pr-description.md +1 -0
  50. package/data/prompts/04_code/generate-pr-title.md +1 -0
  51. package/data/prompts/04_code/implement-changes.md +1 -0
  52. package/data/prompts/04_code/implement-tests.md +1 -0
  53. package/data/prompts/04_code/interactive-review.md +1 -0
  54. package/data/prompts/04_code/push-and-create-pr.md +1 -0
  55. package/data/prompts/04_code/stage-and-commit.md +1 -0
  56. package/data/prompts/04_code/validate-prerequisites.md +1 -0
  57. package/data/prompts/04_code/verify-implementation.md +1 -0
  58. package/data/prompts/05_review/assess-code-quality.md +1 -0
  59. package/data/prompts/05_review/assess-constraints.md +1 -0
  60. package/data/prompts/05_review/evaluate-quality-outcomes.md +1 -0
  61. package/data/prompts/05_review/generate-commit-insights.md +1 -0
  62. package/data/prompts/05_review/identify-improvement-areas.md +1 -0
  63. package/data/prompts/05_review/synthesize-plan-assessment.md +1 -0
  64. package/data/prompts/05_review/synthesize-validation-report.md +1 -0
  65. package/data/prompts/05_review/validate-functional-requirements.md +1 -0
  66. package/data/prompts/05_review/validate-maintainability.md +1 -0
  67. package/data/prompts/05_review/validate-performance.md +1 -0
  68. package/data/prompts/05_review/validate-pr-creation.md +1 -0
  69. package/data/prompts/05_review/validate-pr-readiness.md +1 -0
  70. package/data/prompts/05_review/validate-risk-coverage.md +1 -0
  71. package/data/prompts/05_review/validate-step-quality.md +1 -0
  72. package/data/prompts/05_review/validate-technical-feasibility.md +1 -0
  73. package/data/prompts/05_review/validate-test-strategy.md +1 -0
  74. package/data/prompts/05_review/verify-commits.md +1 -0
  75. package/data/prompts/06_test/analyze-results.md +1 -0
  76. package/data/prompts/06_test/analyze-test-infrastructure.md +1 -0
  77. package/data/prompts/06_test/execute-tests.md +1 -0
  78. package/data/prompts/07_documentation/generate-all-domains-parallel.md +1 -0
  79. package/data/prompts/07_documentation/generate-code-review-report.md +1 -0
  80. package/data/prompts/07_documentation/generate-feedback-report.md +1 -0
  81. package/data/prompts/07_documentation/generate-feedback-summary.md +1 -0
  82. package/data/prompts/07_documentation/generate-functional-review-report.md +1 -0
  83. package/data/prompts/07_documentation/generate-prd.md +1 -0
  84. package/data/prompts/07_documentation/review-and-persist-parallel.md +1 -0
  85. package/data/prompts/07_documentation/update-changelog.md +1 -0
  86. package/data/prompts/07_documentation/update-inline-docs.md +1 -0
  87. package/data/prompts/07_documentation/update-knowledge-base.md +1 -0
  88. package/data/prompts/_meta/schema.json +4 -0
  89. package/data/prompts/registry.json +72 -72
  90. package/dist/ast/ast-context.service.d.ts +32 -0
  91. package/dist/ast/ast-context.service.d.ts.map +1 -0
  92. package/dist/ast/ast-context.service.js +220 -0
  93. package/dist/ast/ast-context.service.js.map +1 -0
  94. package/dist/ast/ast-index-watcher.service.d.ts +40 -0
  95. package/dist/ast/ast-index-watcher.service.d.ts.map +1 -0
  96. package/dist/ast/ast-index-watcher.service.js +124 -0
  97. package/dist/ast/ast-index-watcher.service.js.map +1 -0
  98. package/dist/ast/ast-index.service.d.ts +111 -0
  99. package/dist/ast/ast-index.service.d.ts.map +1 -0
  100. package/dist/ast/ast-index.service.js +437 -0
  101. package/dist/ast/ast-index.service.js.map +1 -0
  102. package/dist/ast/ast-parser.service.d.ts +31 -0
  103. package/dist/ast/ast-parser.service.d.ts.map +1 -0
  104. package/dist/ast/ast-parser.service.js +524 -0
  105. package/dist/ast/ast-parser.service.js.map +1 -0
  106. package/dist/ast/ast-query.service.d.ts +34 -0
  107. package/dist/ast/ast-query.service.d.ts.map +1 -0
  108. package/dist/ast/ast-query.service.js +203 -0
  109. package/dist/ast/ast-query.service.js.map +1 -0
  110. package/dist/ast/ast-tools.service.d.ts +39 -0
  111. package/dist/ast/ast-tools.service.d.ts.map +1 -0
  112. package/dist/ast/ast-tools.service.js +187 -0
  113. package/dist/ast/ast-tools.service.js.map +1 -0
  114. package/dist/ast/ast.types.d.ts +195 -0
  115. package/dist/ast/ast.types.d.ts.map +1 -0
  116. package/dist/ast/ast.types.js +8 -0
  117. package/dist/ast/ast.types.js.map +1 -0
  118. package/dist/ast/grammars/grammar-loader.d.ts +23 -0
  119. package/dist/ast/grammars/grammar-loader.d.ts.map +1 -0
  120. package/dist/ast/grammars/grammar-loader.js +28 -0
  121. package/dist/ast/grammars/grammar-loader.js.map +1 -0
  122. package/dist/ast/grammars/language-map.d.ts +28 -0
  123. package/dist/ast/grammars/language-map.d.ts.map +1 -0
  124. package/dist/ast/grammars/language-map.js +65 -0
  125. package/dist/ast/grammars/language-map.js.map +1 -0
  126. package/dist/ast/grammars/tree-sitter-adapter.d.ts +39 -0
  127. package/dist/ast/grammars/tree-sitter-adapter.d.ts.map +1 -0
  128. package/dist/ast/grammars/tree-sitter-adapter.interface.d.ts +84 -0
  129. package/dist/ast/grammars/tree-sitter-adapter.interface.d.ts.map +1 -0
  130. package/dist/ast/grammars/tree-sitter-adapter.interface.js +48 -0
  131. package/dist/ast/grammars/tree-sitter-adapter.interface.js.map +1 -0
  132. package/dist/ast/grammars/tree-sitter-adapter.js +91 -0
  133. package/dist/ast/grammars/tree-sitter-adapter.js.map +1 -0
  134. package/dist/cli/autocomplete.d.ts.map +1 -1
  135. package/dist/cli/autocomplete.js +6 -6
  136. package/dist/cli/autocomplete.js.map +1 -1
  137. package/dist/cli/command-executor.d.ts +10 -0
  138. package/dist/cli/command-executor.d.ts.map +1 -1
  139. package/dist/cli/command-executor.js +85 -11
  140. package/dist/cli/command-executor.js.map +1 -1
  141. package/dist/cli/command-wizard.d.ts.map +1 -1
  142. package/dist/cli/command-wizard.js +8 -2
  143. package/dist/cli/command-wizard.js.map +1 -1
  144. package/dist/cli/commands/config.d.ts.map +1 -1
  145. package/dist/cli/commands/config.js +5 -2
  146. package/dist/cli/commands/config.js.map +1 -1
  147. package/dist/cli/first-run-setup.d.ts.map +1 -1
  148. package/dist/cli/first-run-setup.js +3 -1
  149. package/dist/cli/first-run-setup.js.map +1 -1
  150. package/dist/cli/provider-resolver.d.ts.map +1 -1
  151. package/dist/cli/provider-resolver.js +11 -0
  152. package/dist/cli/provider-resolver.js.map +1 -1
  153. package/dist/config/constants.d.ts +18 -0
  154. package/dist/config/constants.d.ts.map +1 -1
  155. package/dist/config/constants.js +18 -0
  156. package/dist/config/constants.js.map +1 -1
  157. package/dist/config/interactive-wizard.d.ts +7 -0
  158. package/dist/config/interactive-wizard.d.ts.map +1 -1
  159. package/dist/config/interactive-wizard.js +24 -19
  160. package/dist/config/interactive-wizard.js.map +1 -1
  161. package/dist/config/loader.d.ts +5 -0
  162. package/dist/config/loader.d.ts.map +1 -1
  163. package/dist/config/loader.js +24 -0
  164. package/dist/config/loader.js.map +1 -1
  165. package/dist/config/providers.config.d.ts.map +1 -1
  166. package/dist/config/providers.config.js +17 -1
  167. package/dist/config/providers.config.js.map +1 -1
  168. package/dist/config/schema.d.ts +194 -6
  169. package/dist/config/schema.d.ts.map +1 -1
  170. package/dist/config/schema.js +1 -0
  171. package/dist/config/schema.js.map +1 -1
  172. package/dist/config/validation-helpers.d.ts.map +1 -1
  173. package/dist/config/validation-helpers.js +84 -41
  174. package/dist/config/validation-helpers.js.map +1 -1
  175. package/dist/di/container.d.ts +5 -0
  176. package/dist/di/container.d.ts.map +1 -1
  177. package/dist/di/container.js +17 -0
  178. package/dist/di/container.js.map +1 -1
  179. package/dist/executor/message-builder.service.d.ts +2 -0
  180. package/dist/executor/message-builder.service.d.ts.map +1 -1
  181. package/dist/executor/message-builder.service.js +6 -1
  182. package/dist/executor/message-builder.service.js.map +1 -1
  183. package/dist/executor/stage-executor.d.ts +15 -5
  184. package/dist/executor/stage-executor.d.ts.map +1 -1
  185. package/dist/executor/stage-executor.js +126 -22
  186. package/dist/executor/stage-executor.js.map +1 -1
  187. package/dist/executor/stage-output-cache.d.ts +3 -3
  188. package/dist/executor/stage-output-cache.d.ts.map +1 -1
  189. package/dist/executor/stage-output-cache.js +6 -6
  190. package/dist/executor/stage-output-cache.js.map +1 -1
  191. package/dist/executor/tool-execution.service.d.ts +12 -0
  192. package/dist/executor/tool-execution.service.d.ts.map +1 -1
  193. package/dist/executor/tool-execution.service.js +270 -8
  194. package/dist/executor/tool-execution.service.js.map +1 -1
  195. package/dist/executor/tools/search-tools.service.d.ts +1 -1
  196. package/dist/executor/tools/search-tools.service.d.ts.map +1 -1
  197. package/dist/executor/tools/search-tools.service.js +25 -3
  198. package/dist/executor/tools/search-tools.service.js.map +1 -1
  199. package/dist/executor/variables.d.ts.map +1 -1
  200. package/dist/executor/variables.js +5 -0
  201. package/dist/executor/variables.js.map +1 -1
  202. package/dist/llm/model-mapping-registry.d.ts.map +1 -1
  203. package/dist/llm/model-mapping-registry.js +11 -3
  204. package/dist/llm/model-mapping-registry.js.map +1 -1
  205. package/dist/llm/providers/anthropic.provider.d.ts.map +1 -1
  206. package/dist/llm/providers/anthropic.provider.js +5 -1
  207. package/dist/llm/providers/anthropic.provider.js.map +1 -1
  208. package/dist/llm/providers/index.d.ts +2 -0
  209. package/dist/llm/providers/index.d.ts.map +1 -1
  210. package/dist/llm/providers/index.js +2 -0
  211. package/dist/llm/providers/index.js.map +1 -1
  212. package/dist/llm/providers/local.provider.d.ts +27 -0
  213. package/dist/llm/providers/local.provider.d.ts.map +1 -0
  214. package/dist/llm/providers/local.provider.js +179 -0
  215. package/dist/llm/providers/local.provider.js.map +1 -0
  216. package/dist/llm/providers/openai.provider.d.ts.map +1 -1
  217. package/dist/llm/providers/openai.provider.js +1 -0
  218. package/dist/llm/providers/openai.provider.js.map +1 -1
  219. package/dist/lsp/lsp-client-manager.service.d.ts +47 -0
  220. package/dist/lsp/lsp-client-manager.service.d.ts.map +1 -0
  221. package/dist/lsp/lsp-client-manager.service.js +117 -0
  222. package/dist/lsp/lsp-client-manager.service.js.map +1 -0
  223. package/dist/lsp/lsp-client.d.ts +45 -0
  224. package/dist/lsp/lsp-client.d.ts.map +1 -0
  225. package/dist/lsp/lsp-client.js +147 -0
  226. package/dist/lsp/lsp-client.js.map +1 -0
  227. package/dist/lsp/lsp-context-enricher.d.ts +15 -0
  228. package/dist/lsp/lsp-context-enricher.d.ts.map +1 -0
  229. package/dist/lsp/lsp-context-enricher.js +72 -0
  230. package/dist/lsp/lsp-context-enricher.js.map +1 -0
  231. package/dist/lsp/lsp-language-registry.d.ts +24 -0
  232. package/dist/lsp/lsp-language-registry.d.ts.map +1 -0
  233. package/dist/lsp/lsp-language-registry.js +108 -0
  234. package/dist/lsp/lsp-language-registry.js.map +1 -0
  235. package/dist/lsp/lsp-lifecycle.service.d.ts +34 -0
  236. package/dist/lsp/lsp-lifecycle.service.d.ts.map +1 -0
  237. package/dist/lsp/lsp-lifecycle.service.js +57 -0
  238. package/dist/lsp/lsp-lifecycle.service.js.map +1 -0
  239. package/dist/lsp/lsp-protocol-adapter.d.ts +32 -0
  240. package/dist/lsp/lsp-protocol-adapter.d.ts.map +1 -0
  241. package/dist/lsp/lsp-protocol-adapter.interface.d.ts +93 -0
  242. package/dist/lsp/lsp-protocol-adapter.interface.d.ts.map +1 -0
  243. package/dist/lsp/lsp-protocol-adapter.interface.js +50 -0
  244. package/dist/lsp/lsp-protocol-adapter.interface.js.map +1 -0
  245. package/dist/lsp/lsp-protocol-adapter.js +69 -0
  246. package/dist/lsp/lsp-protocol-adapter.js.map +1 -0
  247. package/dist/lsp/lsp-result-cache.d.ts +43 -0
  248. package/dist/lsp/lsp-result-cache.d.ts.map +1 -0
  249. package/dist/lsp/lsp-result-cache.js +87 -0
  250. package/dist/lsp/lsp-result-cache.js.map +1 -0
  251. package/dist/lsp/lsp-tools.service.d.ts +68 -0
  252. package/dist/lsp/lsp-tools.service.d.ts.map +1 -0
  253. package/dist/lsp/lsp-tools.service.js +310 -0
  254. package/dist/lsp/lsp-tools.service.js.map +1 -0
  255. package/dist/lsp/lsp.types.d.ts +122 -0
  256. package/dist/lsp/lsp.types.d.ts.map +1 -0
  257. package/dist/lsp/lsp.types.js +7 -0
  258. package/dist/lsp/lsp.types.js.map +1 -0
  259. package/dist/mcp/mcp-client-manager.service.d.ts.map +1 -1
  260. package/dist/mcp/mcp-client-manager.service.js +32 -6
  261. package/dist/mcp/mcp-client-manager.service.js.map +1 -1
  262. package/dist/mcp/mcp-tool-handler.d.ts.map +1 -1
  263. package/dist/mcp/mcp-tool-handler.js +17 -1
  264. package/dist/mcp/mcp-tool-handler.js.map +1 -1
  265. package/dist/package.json +4 -1
  266. package/dist/security/command-guard.d.ts +58 -0
  267. package/dist/security/command-guard.d.ts.map +1 -0
  268. package/dist/security/command-guard.js +249 -0
  269. package/dist/security/command-guard.js.map +1 -0
  270. package/dist/security/credential-guard.d.ts +42 -0
  271. package/dist/security/credential-guard.d.ts.map +1 -0
  272. package/dist/security/credential-guard.js +181 -0
  273. package/dist/security/credential-guard.js.map +1 -0
  274. package/dist/security/index.d.ts +22 -0
  275. package/dist/security/index.d.ts.map +1 -0
  276. package/dist/security/index.js +17 -0
  277. package/dist/security/index.js.map +1 -0
  278. package/dist/security/prompt-injection-detector.d.ts +55 -0
  279. package/dist/security/prompt-injection-detector.d.ts.map +1 -0
  280. package/dist/security/prompt-injection-detector.js +233 -0
  281. package/dist/security/prompt-injection-detector.js.map +1 -0
  282. package/dist/security/security-event.types.d.ts +19 -0
  283. package/dist/security/security-event.types.d.ts.map +1 -0
  284. package/dist/security/security-event.types.js +13 -0
  285. package/dist/security/security-event.types.js.map +1 -0
  286. package/dist/security/tool-definition-validator.d.ts +55 -0
  287. package/dist/security/tool-definition-validator.d.ts.map +1 -0
  288. package/dist/security/tool-definition-validator.js +221 -0
  289. package/dist/security/tool-definition-validator.js.map +1 -0
  290. package/dist/security/tool-integrity-monitor.d.ts +67 -0
  291. package/dist/security/tool-integrity-monitor.d.ts.map +1 -0
  292. package/dist/security/tool-integrity-monitor.js +155 -0
  293. package/dist/security/tool-integrity-monitor.js.map +1 -0
  294. package/dist/tsconfig.json +3 -0
  295. package/dist/types/command.types.d.ts +15 -1
  296. package/dist/types/command.types.d.ts.map +1 -1
  297. package/dist/types/command.types.js.map +1 -1
  298. package/dist/types/llm.types.d.ts +2 -0
  299. package/dist/types/llm.types.d.ts.map +1 -1
  300. package/dist/types/provider-names.types.d.ts +3 -0
  301. package/dist/types/provider-names.types.d.ts.map +1 -1
  302. package/dist/types/provider-names.types.js +3 -0
  303. package/dist/types/provider-names.types.js.map +1 -1
  304. package/dist/ui/dashboard/detail-panels/spending-panel.d.ts.map +1 -1
  305. package/dist/ui/dashboard/detail-panels/spending-panel.js +8 -3
  306. package/dist/ui/dashboard/detail-panels/spending-panel.js.map +1 -1
  307. package/dist/ui/dashboard/detail-panels/token-usage-panel.d.ts.map +1 -1
  308. package/dist/ui/dashboard/detail-panels/token-usage-panel.js +37 -13
  309. package/dist/ui/dashboard/detail-panels/token-usage-panel.js.map +1 -1
  310. package/dist/ui/dashboard/views/agent-analytics-view.js +1 -1
  311. package/dist/ui/dashboard/views/agent-analytics-view.js.map +1 -1
  312. package/dist/ui/dashboard/views/cache-stats-view.js +1 -1
  313. package/dist/ui/dashboard/views/cache-stats-view.js.map +1 -1
  314. package/dist/ui/dashboard/views/performance-view.js +1 -1
  315. package/dist/ui/dashboard/views/performance-view.js.map +1 -1
  316. package/dist/utils/spending-tracker.d.ts +22 -0
  317. package/dist/utils/spending-tracker.d.ts.map +1 -1
  318. package/dist/utils/spending-tracker.js +33 -1
  319. package/dist/utils/spending-tracker.js.map +1 -1
  320. package/dist/utils/token-estimator.d.ts +21 -5
  321. package/dist/utils/token-estimator.d.ts.map +1 -1
  322. package/dist/utils/token-estimator.js +74 -28
  323. package/dist/utils/token-estimator.js.map +1 -1
  324. package/package.json +4 -1
@@ -0,0 +1,203 @@
1
+ /**
2
+ * AST Query Service
3
+ *
4
+ * High-level query operations on the codebase index:
5
+ * symbol search, file outline, reference finding.
6
+ */
7
+ import { getASTIndexService } from './ast-index.service.js';
8
+ import { CHARS_PER_TOKEN } from './ast-parser.service.js';
9
+ export const DEFAULT_SEARCH_LIMIT = 20;
10
+ const SCORE_EXACT = 100;
11
+ const SCORE_PREFIX = 80;
12
+ const SCORE_CONTAINS = 60;
13
+ const SCORE_FUZZY = 40;
14
+ const EXPORT_BONUS = 5;
15
+ const INITIAL_TOKEN_ESTIMATE = 10;
16
+ /**
17
+ * Search for symbols by name with fuzzy matching
18
+ */
19
+ export function searchSymbols(query, options) {
20
+ const indexService = getASTIndexService();
21
+ const index = indexService.getIndex();
22
+ const results = [];
23
+ const queryLower = query.toLowerCase();
24
+ const limit = options?.limit ?? DEFAULT_SEARCH_LIMIT;
25
+ for (const [name, ids] of Object.entries(index.nameIndex)) {
26
+ if (!ids || ids.length === 0)
27
+ continue;
28
+ const match = scoreSymbolMatch(name.toLowerCase(), queryLower);
29
+ if (!match)
30
+ continue;
31
+ collectMatchingSymbols(ids, index, options, match, results);
32
+ }
33
+ results.sort((a, b) => b.score - a.score || a.symbol.name.localeCompare(b.symbol.name));
34
+ return results.slice(0, limit);
35
+ }
36
+ /**
37
+ * Score a symbol name match against a query
38
+ */
39
+ function scoreSymbolMatch(nameLower, queryLower) {
40
+ if (nameLower === queryLower)
41
+ return { matchType: 'exact', score: SCORE_EXACT };
42
+ if (nameLower.startsWith(queryLower))
43
+ return { matchType: 'prefix', score: SCORE_PREFIX };
44
+ if (nameLower.includes(queryLower))
45
+ return { matchType: 'contains', score: SCORE_CONTAINS };
46
+ if (fuzzyMatch(queryLower, nameLower))
47
+ return { matchType: 'fuzzy', score: SCORE_FUZZY };
48
+ return null;
49
+ }
50
+ /**
51
+ * Collect matching symbols from IDs, applying filters
52
+ */
53
+ function collectMatchingSymbols(ids, index, options, match, results) {
54
+ for (const id of ids) {
55
+ const sym = index.symbols[id];
56
+ if (!sym)
57
+ continue;
58
+ if (isSymbolFilteredOut(sym, index, options))
59
+ continue;
60
+ const exportBonus = sym.exported ? EXPORT_BONUS : 0;
61
+ results.push({
62
+ matchType: match.matchType,
63
+ score: match.score + exportBonus,
64
+ symbol: sym
65
+ });
66
+ }
67
+ }
68
+ function isSymbolFilteredOut(sym, index, options) {
69
+ if (options?.kind && sym.kind !== options.kind)
70
+ return true;
71
+ if (options?.language) {
72
+ const file = index.files[sym.filePath];
73
+ if (file && file.language !== options.language)
74
+ return true;
75
+ }
76
+ return false;
77
+ }
78
+ /**
79
+ * Get a structured outline of a file
80
+ */
81
+ export function getFileOutline(filePath) {
82
+ const indexService = getASTIndexService();
83
+ const symbols = indexService.lookupByFile(filePath);
84
+ if (symbols.length === 0)
85
+ return [];
86
+ const topLevel = [];
87
+ const childrenMap = new Map();
88
+ for (const sym of symbols) {
89
+ if (sym.parentId) {
90
+ if (!childrenMap.has(sym.parentId))
91
+ childrenMap.set(sym.parentId, []);
92
+ childrenMap.get(sym.parentId).push(sym);
93
+ }
94
+ else {
95
+ topLevel.push(sym);
96
+ }
97
+ }
98
+ topLevel.sort((a, b) => a.startLine - b.startLine);
99
+ return topLevel.map((sym) => symbolToOutlineEntry(sym, childrenMap));
100
+ }
101
+ /**
102
+ * Find all references to a symbol across the index
103
+ */
104
+ export function findReferences(symbolName, scopePath) {
105
+ const indexService = getASTIndexService();
106
+ const index = indexService.getIndex();
107
+ const results = [];
108
+ for (const [id, sym] of Object.entries(index.symbols)) {
109
+ if (sym.references.includes(symbolName)) {
110
+ if (scopePath && !sym.filePath.startsWith(scopePath))
111
+ continue;
112
+ results.push({ filePath: sym.filePath, line: sym.startLine, symbolId: id, symbolName: sym.name });
113
+ }
114
+ }
115
+ for (const [filePath, fileEntry] of Object.entries(index.files)) {
116
+ if (scopePath && !filePath.startsWith(scopePath))
117
+ continue;
118
+ for (const imp of fileEntry.imports) {
119
+ if (imp.names.includes(symbolName)) {
120
+ results.push({
121
+ filePath,
122
+ line: 1,
123
+ symbolId: `${filePath}#import#${symbolName}`,
124
+ symbolName: `import ${symbolName}`
125
+ });
126
+ }
127
+ }
128
+ }
129
+ return results;
130
+ }
131
+ /**
132
+ * Generate a compact codebase map
133
+ */
134
+ export function generateCodebaseMap(maxTokens) {
135
+ const indexService = getASTIndexService();
136
+ const index = indexService.getIndex();
137
+ const budget = maxTokens ?? 2000;
138
+ const dirMap = buildDirectoryMap(index);
139
+ return renderCodebaseMap(dirMap, budget);
140
+ }
141
+ // --- Helpers ---
142
+ function buildDirectoryMap(index) {
143
+ const dirMap = new Map();
144
+ for (const [filePath, fileEntry] of Object.entries(index.files)) {
145
+ const parts = filePath.split('/');
146
+ const dir = parts.slice(0, -1).join('/') || '.';
147
+ const name = parts[parts.length - 1] ?? filePath;
148
+ if (!dirMap.has(dir))
149
+ dirMap.set(dir, []);
150
+ const symbols = fileEntry.symbolIds
151
+ .map((id) => index.symbols[id])
152
+ .filter((s) => !!s && s.exported);
153
+ dirMap.get(dir).push({ name, symbols });
154
+ }
155
+ return dirMap;
156
+ }
157
+ function fuzzyMatch(query, target) {
158
+ let qi = 0;
159
+ for (let ti = 0; ti < target.length && qi < query.length; ti++) {
160
+ if (target[ti] === query[qi])
161
+ qi++;
162
+ }
163
+ return qi === query.length;
164
+ }
165
+ function renderCodebaseMap(dirMap, budget) {
166
+ const lines = ['## Codebase Map\n'];
167
+ let tokenEstimate = INITIAL_TOKEN_ESTIMATE;
168
+ const sortedDirs = Array.from(dirMap.entries()).sort(([a], [b]) => a.localeCompare(b));
169
+ for (const [dir, files] of sortedDirs) {
170
+ const dirLine = `${dir}/`;
171
+ const dirTokens = Math.ceil(dirLine.length / CHARS_PER_TOKEN);
172
+ if (tokenEstimate + dirTokens > budget)
173
+ break;
174
+ lines.push(dirLine);
175
+ tokenEstimate += dirTokens;
176
+ for (const file of files.sort((a, b) => a.name.localeCompare(b.name))) {
177
+ const symbolNames = file.symbols.map((s) => s.name).join(', ');
178
+ const fileLine = ` ${file.name} — ${symbolNames || '(no exports)'}`;
179
+ const fileTokens = Math.ceil(fileLine.length / CHARS_PER_TOKEN);
180
+ if (tokenEstimate + fileTokens > budget)
181
+ break;
182
+ lines.push(fileLine);
183
+ tokenEstimate += fileTokens;
184
+ }
185
+ }
186
+ return lines.join('\n');
187
+ }
188
+ function symbolToOutlineEntry(sym, childrenMap) {
189
+ const children = childrenMap.get(sym.id);
190
+ const childEntries = children
191
+ ?.sort((a, b) => a.startLine - b.startLine)
192
+ .map((c) => symbolToOutlineEntry(c, childrenMap));
193
+ return {
194
+ children: childEntries && childEntries.length > 0 ? childEntries : undefined,
195
+ endLine: sym.endLine,
196
+ exported: sym.exported,
197
+ kind: sym.kind,
198
+ name: sym.name,
199
+ signature: sym.signature,
200
+ startLine: sym.startLine
201
+ };
202
+ }
203
+ //# sourceMappingURL=ast-query.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ast-query.service.js","sourceRoot":"","sources":["../../src/ast/ast-query.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * AST Tools Service
3
+ *
4
+ * LLM tool handlers for AST-based code intelligence:
5
+ * symbol_search, file_outline, find_references, smart_context, request_context
6
+ */
7
+ import type { getLogger } from '../output/logger.js';
8
+ type Logger = ReturnType<typeof getLogger>;
9
+ /**
10
+ * AST Tools Service — handles LLM tool calls for AST operations
11
+ */
12
+ export declare class ASTToolsService {
13
+ private readonly projectRoot;
14
+ constructor(projectRoot?: string, _logger?: Logger);
15
+ /**
16
+ * Execute the symbol_search tool
17
+ */
18
+ executeSymbolSearch(args: Record<string, unknown>): string;
19
+ /**
20
+ * Execute the file_outline tool
21
+ */
22
+ executeFileOutline(args: Record<string, unknown>): string;
23
+ /**
24
+ * Execute the find_references tool
25
+ */
26
+ executeFindReferences(args: Record<string, unknown>): string;
27
+ /**
28
+ * Execute the smart_context tool
29
+ */
30
+ executeSmartContext(args: Record<string, unknown>): string;
31
+ /**
32
+ * Execute the request_context tool (progressive disclosure)
33
+ */
34
+ executeRequestContext(args: Record<string, unknown>): Promise<string>;
35
+ }
36
+ export declare function getASTToolsService(projectRoot?: string): ASTToolsService;
37
+ export declare function resetASTToolsService(): void;
38
+ export {};
39
+ //# sourceMappingURL=ast-tools.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ast-tools.service.d.ts","sourceRoot":"","sources":["../../src/ast/ast-tools.service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAM/C,KAAK,MAAM,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC;AAE3C;;GAEG;AACH,qBAAa,eAAe;IAC3B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;gBAEzB,WAAW,GAAE,MAAsB,EAAE,OAAO,CAAC,EAAE,MAAM;IAIjE;;OAEG;IACH,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM;IAoC1D;;OAEG;IACH,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM;IAqBzD;;OAEG;IACH,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM;IAwB5D;;OAEG;IACH,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM;IAyB1D;;OAEG;IACG,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;CAiD3E;AAuBD,wBAAgB,kBAAkB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,eAAe,CAGxE;AAED,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C"}
@@ -0,0 +1,187 @@
1
+ /**
2
+ * AST Tools Service
3
+ *
4
+ * LLM tool handlers for AST-based code intelligence:
5
+ * symbol_search, file_outline, find_references, smart_context, request_context
6
+ */
7
+ import { readFile } from 'fs/promises';
8
+ import { join } from 'path';
9
+ import { extractSmartContext } from './ast-context.service.js';
10
+ import { getASTIndexService } from './ast-index.service.js';
11
+ import { DEFAULT_SEARCH_LIMIT, findReferences, getFileOutline, searchSymbols } from './ast-query.service.js';
12
+ /**
13
+ * AST Tools Service — handles LLM tool calls for AST operations
14
+ */
15
+ export class ASTToolsService {
16
+ projectRoot;
17
+ constructor(projectRoot = process.cwd(), _logger) {
18
+ this.projectRoot = projectRoot;
19
+ }
20
+ /**
21
+ * Execute the symbol_search tool
22
+ */
23
+ executeSymbolSearch(args) {
24
+ const query = args['query'];
25
+ if (!query)
26
+ return 'symbol_search requires a query argument';
27
+ const indexService = getASTIndexService(this.projectRoot);
28
+ // Ensure index is available
29
+ if (!indexService.isBuilt()) {
30
+ if (!indexService.loadIndex()) {
31
+ return 'Codebase index not yet built. Run `valora index build` or wait for automatic indexing. Falling back to grep.';
32
+ }
33
+ }
34
+ const kind = args['kind'];
35
+ const language = args['language'];
36
+ const results = searchSymbols(query, {
37
+ kind: kind,
38
+ language,
39
+ limit: DEFAULT_SEARCH_LIMIT
40
+ });
41
+ if (results.length === 0) {
42
+ return `No symbols found matching "${query}"`;
43
+ }
44
+ const formatted = results.map((r) => {
45
+ const sym = r.symbol;
46
+ const exportLabel = sym.exported ? 'exported ' : '';
47
+ const doc = sym.docComment ? ` — ${sym.docComment.split('\n')[0]}` : '';
48
+ return `${sym.filePath}:${sym.startLine} ${exportLabel}${sym.kind} ${sym.name}${doc} (score: ${r.score})`;
49
+ });
50
+ return formatted.join('\n');
51
+ }
52
+ /**
53
+ * Execute the file_outline tool
54
+ */
55
+ executeFileOutline(args) {
56
+ const path = args['path'];
57
+ if (!path)
58
+ return 'file_outline requires a path argument';
59
+ const indexService = getASTIndexService(this.projectRoot);
60
+ if (!indexService.isBuilt()) {
61
+ if (!indexService.loadIndex()) {
62
+ return 'Codebase index not yet built. Falling back to basic file reading.';
63
+ }
64
+ }
65
+ const outline = getFileOutline(path);
66
+ if (outline.length === 0) {
67
+ return `No symbols found in ${path}. The file may not be indexed yet.`;
68
+ }
69
+ const formatted = outline.map((entry) => formatOutlineEntry(entry, 0));
70
+ return formatted.join('\n');
71
+ }
72
+ /**
73
+ * Execute the find_references tool
74
+ */
75
+ executeFindReferences(args) {
76
+ const symbol = args['symbol'];
77
+ if (!symbol)
78
+ return 'find_references requires a symbol argument';
79
+ const indexService = getASTIndexService(this.projectRoot);
80
+ if (!indexService.isBuilt()) {
81
+ if (!indexService.loadIndex()) {
82
+ return 'Codebase index not yet built. Falling back to grep.';
83
+ }
84
+ }
85
+ const scopePath = args['path'];
86
+ const refs = findReferences(symbol, scopePath);
87
+ if (refs.length === 0) {
88
+ return `No references found for "${symbol}"`;
89
+ }
90
+ const formatted = refs.map((r) => `${r.filePath}:${r.line} — ${r.symbolName}`);
91
+ return `Found ${refs.length} reference(s) to "${symbol}":\n${formatted.join('\n')}`;
92
+ }
93
+ /**
94
+ * Execute the smart_context tool
95
+ */
96
+ executeSmartContext(args) {
97
+ const task = args['task'];
98
+ if (!task)
99
+ return 'smart_context requires a task argument';
100
+ const indexService = getASTIndexService(this.projectRoot);
101
+ if (!indexService.isBuilt()) {
102
+ if (!indexService.loadIndex()) {
103
+ return 'Codebase index not yet built. Cannot extract smart context.';
104
+ }
105
+ }
106
+ const files = args['files'];
107
+ const budget = args['budget'];
108
+ const mode = args['mode'];
109
+ const result = extractSmartContext({ budget, files, mode, task });
110
+ const header = `Smart context: ${result.includedFiles.length} files, ~${result.tokenEstimate} tokens\n` +
111
+ `Focal symbols: ${result.focalSymbols.join(', ') || 'none'}\n---\n`;
112
+ return header + result.content;
113
+ }
114
+ /**
115
+ * Execute the request_context tool (progressive disclosure)
116
+ */
117
+ async executeRequestContext(args) {
118
+ const target = args['target'];
119
+ if (!target)
120
+ return 'request_context requires a target argument';
121
+ const level = args['level'] ?? 'full';
122
+ const indexService = getASTIndexService(this.projectRoot);
123
+ // Try to find the target as a file
124
+ const fileEntry = indexService.getFile(target);
125
+ if (fileEntry) {
126
+ if (level === 'signatures') {
127
+ const symbols = indexService.lookupByFile(target);
128
+ const exported = symbols.filter((s) => s.exported);
129
+ return exported.map((s) => s.signature).join('\n');
130
+ }
131
+ // Full file content
132
+ try {
133
+ const absPath = join(this.projectRoot, target);
134
+ const content = await readFile(absPath, 'utf-8');
135
+ return `--- File: ${target} ---\n${content}\n--- End of File ---`;
136
+ }
137
+ catch {
138
+ return `Could not read file: ${target}`;
139
+ }
140
+ }
141
+ // Try to find the target as a symbol
142
+ const results = searchSymbols(target, { limit: 1 });
143
+ if (results.length > 0) {
144
+ const sym = results[0].symbol;
145
+ if (level === 'signatures') {
146
+ return sym.signature;
147
+ }
148
+ // Full symbol body
149
+ try {
150
+ const absPath = join(this.projectRoot, sym.filePath);
151
+ const content = await readFile(absPath, 'utf-8');
152
+ const lines = content.split('\n');
153
+ const body = lines.slice(sym.startLine - 1, sym.endLine).join('\n');
154
+ return `// ${sym.filePath}:${sym.startLine}-${sym.endLine}\n${body}`;
155
+ }
156
+ catch {
157
+ return `Could not read symbol body for: ${target}`;
158
+ }
159
+ }
160
+ return `Target not found in index: "${target}". Try using read_file or grep.`;
161
+ }
162
+ }
163
+ /**
164
+ * Format an outline entry with indentation
165
+ */
166
+ function formatOutlineEntry(entry, depth) {
167
+ const indent = ' '.repeat(depth);
168
+ const exportLabel = entry.exported ? 'exported ' : '';
169
+ let line = `${indent}${entry.startLine}-${entry.endLine} ${exportLabel}${entry.kind} ${entry.name}: ${entry.signature}`;
170
+ if (entry.children) {
171
+ const childLines = entry.children.map((c) => formatOutlineEntry(c, depth + 1));
172
+ line += '\n' + childLines.join('\n');
173
+ }
174
+ return line;
175
+ }
176
+ /**
177
+ * Singleton management
178
+ */
179
+ let astToolsServiceInstance = null;
180
+ export function getASTToolsService(projectRoot) {
181
+ astToolsServiceInstance ??= new ASTToolsService(projectRoot);
182
+ return astToolsServiceInstance;
183
+ }
184
+ export function resetASTToolsService() {
185
+ astToolsServiceInstance = null;
186
+ }
187
+ //# sourceMappingURL=ast-tools.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ast-tools.service.js","sourceRoot":"","sources":["../../src/ast/ast-tools.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,195 @@
1
+ /**
2
+ * AST Code Intelligence Type Definitions
3
+ *
4
+ * Core types for the AST-based codebase index, symbol extraction,
5
+ * and smart context system.
6
+ */
7
+ /**
8
+ * Supported languages for AST parsing
9
+ */
10
+ export type ASTLanguage = 'go' | 'java' | 'javascript' | 'python' | 'rust' | 'typescript';
11
+ /**
12
+ * Symbol kinds extracted from AST
13
+ */
14
+ export type SymbolKind = 'class' | 'constant' | 'enum' | 'function' | 'interface' | 'method' | 'type' | 'variable';
15
+ /**
16
+ * Context extraction levels for token reduction
17
+ */
18
+ export type ContextLevel = 0 | 1 | 2 | 3;
19
+ /**
20
+ * Import information extracted from a file
21
+ */
22
+ export interface ImportInfo {
23
+ names: string[];
24
+ source: string;
25
+ typeOnly: boolean;
26
+ }
27
+ /**
28
+ * A symbol extracted from AST parsing
29
+ */
30
+ export interface IndexedSymbol {
31
+ /** Unique ID: filePath#name#kind#line */
32
+ id: string;
33
+ /** Symbol name */
34
+ name: string;
35
+ /** Symbol kind (function, class, etc.) */
36
+ kind: SymbolKind;
37
+ /** File path relative to project root */
38
+ filePath: string;
39
+ /** Start line (1-based) */
40
+ startLine: number;
41
+ /** End line (1-based) */
42
+ endLine: number;
43
+ /** Declaration signature (not body) */
44
+ signature: string;
45
+ /** Whether the symbol is exported */
46
+ exported: boolean;
47
+ /** JSDoc or doc comment content */
48
+ docComment?: string;
49
+ /** Parent symbol ID (for methods inside classes) */
50
+ parentId?: string;
51
+ /** Symbol names referenced in body */
52
+ references: string[];
53
+ /** Estimated token count for the symbol body */
54
+ tokenEstimate: number;
55
+ }
56
+ /**
57
+ * A file's index entry
58
+ */
59
+ export interface IndexedFile {
60
+ /** File path relative to project root */
61
+ filePath: string;
62
+ /** Detected language */
63
+ language: ASTLanguage;
64
+ /** SHA-256 content hash for incremental updates */
65
+ contentHash: string;
66
+ /** Timestamp of last indexing */
67
+ indexedAt: number;
68
+ /** Extracted imports */
69
+ imports: ImportInfo[];
70
+ /** IDs of symbols defined in this file */
71
+ symbolIds: string[];
72
+ }
73
+ /**
74
+ * The complete codebase index
75
+ */
76
+ export interface CodebaseIndex {
77
+ /** Schema version for migration */
78
+ version: number;
79
+ /** Absolute path to project root */
80
+ projectRoot: string;
81
+ /** ISO 8601 timestamp of last update */
82
+ updatedAt: string;
83
+ /** Files indexed, keyed by relative path */
84
+ files: Record<string, IndexedFile>;
85
+ /** All symbols, keyed by symbol ID */
86
+ symbols: Record<string, IndexedSymbol>;
87
+ /** Symbol name -> symbol IDs (for name-based lookup) */
88
+ nameIndex: Record<string, string[]>;
89
+ /** File path -> symbol IDs (for file-based lookup) */
90
+ fileIndex: Record<string, string[]>;
91
+ }
92
+ /**
93
+ * Result of a symbol search query
94
+ */
95
+ export interface SymbolSearchResult {
96
+ matchType: 'contains' | 'exact' | 'fuzzy' | 'prefix';
97
+ score: number;
98
+ symbol: IndexedSymbol;
99
+ }
100
+ /**
101
+ * File outline entry (structured view of a file)
102
+ */
103
+ export interface FileOutlineEntry {
104
+ children?: FileOutlineEntry[];
105
+ endLine: number;
106
+ exported: boolean;
107
+ kind: SymbolKind;
108
+ name: string;
109
+ signature: string;
110
+ startLine: number;
111
+ }
112
+ /**
113
+ * Smart context request options
114
+ */
115
+ export interface SmartContextOptions {
116
+ /** Task description for relevance scoring */
117
+ task: string;
118
+ /** Specific files to focus on */
119
+ files?: string[];
120
+ /** Token budget (default: model context - system - output reserve) */
121
+ budget?: number;
122
+ /** Context mode */
123
+ mode?: 'broad' | 'focused';
124
+ }
125
+ /**
126
+ * Smart context result
127
+ */
128
+ export interface SmartContextResult {
129
+ /** The assembled context string */
130
+ content: string;
131
+ /** Total estimated tokens */
132
+ tokenEstimate: number;
133
+ /** Files included and their extraction levels */
134
+ includedFiles: Array<{
135
+ filePath: string;
136
+ level: ContextLevel;
137
+ tokenEstimate: number;
138
+ }>;
139
+ /** Symbols included at full body level */
140
+ focalSymbols: string[];
141
+ }
142
+ /**
143
+ * Codebase map entry for compact overview
144
+ */
145
+ export interface CodebaseMapEntry {
146
+ /** Directory path */
147
+ directory: string;
148
+ /** Files in this directory */
149
+ files: Array<{
150
+ description: string;
151
+ lineCount: number;
152
+ name: string;
153
+ symbols: Array<{
154
+ exported: boolean;
155
+ kind: SymbolKind;
156
+ name: string;
157
+ }>;
158
+ }>;
159
+ }
160
+ /**
161
+ * Index manifest for persistence
162
+ */
163
+ export interface IndexManifest {
164
+ fileCount: number;
165
+ projectRoot: string;
166
+ shards: string[];
167
+ symbolCount: number;
168
+ updatedAt: string;
169
+ version: number;
170
+ }
171
+ /**
172
+ * Context deduplication tracking
173
+ */
174
+ export interface ContextDeduplicationState {
175
+ /** Symbols sent at full level, keyed by symbol ID */
176
+ sentSymbols: Map<string, {
177
+ level: ContextLevel;
178
+ stage: string;
179
+ }>;
180
+ /** Files sent, keyed by file path */
181
+ sentFiles: Map<string, {
182
+ level: ContextLevel;
183
+ stage: string;
184
+ }>;
185
+ }
186
+ /**
187
+ * Context savings metrics
188
+ */
189
+ export interface ContextSavingsMetrics {
190
+ contextSavingsPercent: number;
191
+ contextTokensAfter: number;
192
+ contextTokensBefore: number;
193
+ progressiveDisclosureCalls: number;
194
+ }
195
+ //# sourceMappingURL=ast.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ast.types.d.ts","sourceRoot":"","sources":["../../src/ast/ast.types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * AST Code Intelligence Type Definitions
3
+ *
4
+ * Core types for the AST-based codebase index, symbol extraction,
5
+ * and smart context system.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=ast.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ast.types.js","sourceRoot":"","sources":["../../src/ast/ast.types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}