@windagency/valora 2.2.1 → 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.
- package/README.md +45 -19
- package/data/agents/secops-engineer.md +74 -7
- package/data/commands/_meta/schema.json +3 -1
- package/data/commands/assert.md +1 -1
- package/data/commands/generate-all-documentation.md +1 -1
- package/data/commands/generate-docs.md +1 -1
- package/data/commands/plan-architecture.md +1 -1
- package/data/commands/plan-implementation.md +1 -1
- package/data/commands/plan.md +1 -1
- package/data/commands/refine-task.md +1 -1
- package/data/commands/registry.json +11 -11
- package/data/commands/review-code.md +1 -1
- package/data/commands/review-functional.md +1 -1
- package/data/prompts/01_onboard/analyze-patterns.md +1 -0
- package/data/prompts/01_onboard/collect-clarifications.md +1 -0
- package/data/prompts/01_onboard/map-dependencies.md +1 -0
- package/data/prompts/02_context/analyze-change-scope.md +1 -0
- package/data/prompts/02_context/analyze-changes-for-review.md +1 -0
- package/data/prompts/02_context/analyze-codebase-changes.md +1 -0
- package/data/prompts/02_context/analyze-command-execution.md +1 -0
- package/data/prompts/02_context/analyze-commits-for-pr.md +1 -0
- package/data/prompts/02_context/analyze-functional-scope.md +1 -0
- package/data/prompts/02_context/analyze-git-branch.md +1 -0
- package/data/prompts/02_context/analyze-git-status.md +1 -0
- package/data/prompts/02_context/analyze-task-context.md +1 -0
- package/data/prompts/02_context/extract-ticket-info.md +1 -0
- package/data/prompts/02_context/extract-ticket-references.md +1 -0
- package/data/prompts/02_context/gather-git-metrics.md +1 -0
- package/data/prompts/02_context/identify-completed-workflow.md +1 -0
- package/data/prompts/02_context/load-and-analyze-parallel.md +1 -0
- package/data/prompts/02_context/load-commit-template.md +1 -0
- package/data/prompts/02_context/load-implementation-context.md +1 -0
- package/data/prompts/02_context/load-plan-context.md +1 -0
- package/data/prompts/02_context/load-pr-template.md +1 -0
- package/data/prompts/02_context/scan-codebase.md +1 -0
- package/data/prompts/02_context/use-modern-cli-tools.md +1 -0
- package/data/prompts/03_plan/assess-complexity.md +1 -0
- package/data/prompts/03_plan/assess-risks.md +1 -0
- package/data/prompts/03_plan/breakdown-implementation.md +1 -0
- package/data/prompts/03_plan/define-architecture.md +1 -0
- package/data/prompts/03_plan/identify-dependencies.md +1 -0
- package/data/prompts/04_code/calculate-version-bump.md +1 -0
- package/data/prompts/04_code/create-version-tag.md +1 -0
- package/data/prompts/04_code/determine-commit-strategy.md +1 -0
- package/data/prompts/04_code/determine-labels.md +1 -0
- package/data/prompts/04_code/determine-reviewers.md +1 -0
- package/data/prompts/04_code/generate-commit-messages.md +1 -0
- package/data/prompts/04_code/generate-pr-description.md +1 -0
- package/data/prompts/04_code/generate-pr-title.md +1 -0
- package/data/prompts/04_code/implement-changes.md +1 -0
- package/data/prompts/04_code/implement-tests.md +1 -0
- package/data/prompts/04_code/interactive-review.md +1 -0
- package/data/prompts/04_code/push-and-create-pr.md +1 -0
- package/data/prompts/04_code/stage-and-commit.md +1 -0
- package/data/prompts/04_code/validate-prerequisites.md +1 -0
- package/data/prompts/04_code/verify-implementation.md +1 -0
- package/data/prompts/05_review/assess-code-quality.md +1 -0
- package/data/prompts/05_review/assess-constraints.md +1 -0
- package/data/prompts/05_review/evaluate-quality-outcomes.md +1 -0
- package/data/prompts/05_review/generate-commit-insights.md +1 -0
- package/data/prompts/05_review/identify-improvement-areas.md +1 -0
- package/data/prompts/05_review/synthesize-plan-assessment.md +1 -0
- package/data/prompts/05_review/synthesize-validation-report.md +1 -0
- package/data/prompts/05_review/validate-functional-requirements.md +1 -0
- package/data/prompts/05_review/validate-maintainability.md +1 -0
- package/data/prompts/05_review/validate-performance.md +1 -0
- package/data/prompts/05_review/validate-pr-creation.md +1 -0
- package/data/prompts/05_review/validate-pr-readiness.md +1 -0
- package/data/prompts/05_review/validate-risk-coverage.md +1 -0
- package/data/prompts/05_review/validate-step-quality.md +1 -0
- package/data/prompts/05_review/validate-technical-feasibility.md +1 -0
- package/data/prompts/05_review/validate-test-strategy.md +1 -0
- package/data/prompts/05_review/verify-commits.md +1 -0
- package/data/prompts/06_test/analyze-results.md +1 -0
- package/data/prompts/06_test/analyze-test-infrastructure.md +1 -0
- package/data/prompts/06_test/execute-tests.md +1 -0
- package/data/prompts/07_documentation/generate-all-domains-parallel.md +1 -0
- package/data/prompts/07_documentation/generate-code-review-report.md +1 -0
- package/data/prompts/07_documentation/generate-feedback-report.md +1 -0
- package/data/prompts/07_documentation/generate-feedback-summary.md +1 -0
- package/data/prompts/07_documentation/generate-functional-review-report.md +1 -0
- package/data/prompts/07_documentation/generate-prd.md +1 -0
- package/data/prompts/07_documentation/review-and-persist-parallel.md +1 -0
- package/data/prompts/07_documentation/update-changelog.md +1 -0
- package/data/prompts/07_documentation/update-inline-docs.md +1 -0
- package/data/prompts/07_documentation/update-knowledge-base.md +1 -0
- package/data/prompts/_meta/schema.json +4 -0
- package/data/prompts/registry.json +72 -72
- package/dist/ast/ast-context.service.d.ts +32 -0
- package/dist/ast/ast-context.service.d.ts.map +1 -0
- package/dist/ast/ast-context.service.js +220 -0
- package/dist/ast/ast-context.service.js.map +1 -0
- package/dist/ast/ast-index-watcher.service.d.ts +40 -0
- package/dist/ast/ast-index-watcher.service.d.ts.map +1 -0
- package/dist/ast/ast-index-watcher.service.js +124 -0
- package/dist/ast/ast-index-watcher.service.js.map +1 -0
- package/dist/ast/ast-index.service.d.ts +111 -0
- package/dist/ast/ast-index.service.d.ts.map +1 -0
- package/dist/ast/ast-index.service.js +437 -0
- package/dist/ast/ast-index.service.js.map +1 -0
- package/dist/ast/ast-parser.service.d.ts +31 -0
- package/dist/ast/ast-parser.service.d.ts.map +1 -0
- package/dist/ast/ast-parser.service.js +524 -0
- package/dist/ast/ast-parser.service.js.map +1 -0
- package/dist/ast/ast-query.service.d.ts +34 -0
- package/dist/ast/ast-query.service.d.ts.map +1 -0
- package/dist/ast/ast-query.service.js +203 -0
- package/dist/ast/ast-query.service.js.map +1 -0
- package/dist/ast/ast-tools.service.d.ts +39 -0
- package/dist/ast/ast-tools.service.d.ts.map +1 -0
- package/dist/ast/ast-tools.service.js +187 -0
- package/dist/ast/ast-tools.service.js.map +1 -0
- package/dist/ast/ast.types.d.ts +195 -0
- package/dist/ast/ast.types.d.ts.map +1 -0
- package/dist/ast/ast.types.js +8 -0
- package/dist/ast/ast.types.js.map +1 -0
- package/dist/ast/grammars/grammar-loader.d.ts +23 -0
- package/dist/ast/grammars/grammar-loader.d.ts.map +1 -0
- package/dist/ast/grammars/grammar-loader.js +28 -0
- package/dist/ast/grammars/grammar-loader.js.map +1 -0
- package/dist/ast/grammars/language-map.d.ts +28 -0
- package/dist/ast/grammars/language-map.d.ts.map +1 -0
- package/dist/ast/grammars/language-map.js +65 -0
- package/dist/ast/grammars/language-map.js.map +1 -0
- package/dist/ast/grammars/tree-sitter-adapter.d.ts +39 -0
- package/dist/ast/grammars/tree-sitter-adapter.d.ts.map +1 -0
- package/dist/ast/grammars/tree-sitter-adapter.interface.d.ts +84 -0
- package/dist/ast/grammars/tree-sitter-adapter.interface.d.ts.map +1 -0
- package/dist/ast/grammars/tree-sitter-adapter.interface.js +48 -0
- package/dist/ast/grammars/tree-sitter-adapter.interface.js.map +1 -0
- package/dist/ast/grammars/tree-sitter-adapter.js +91 -0
- package/dist/ast/grammars/tree-sitter-adapter.js.map +1 -0
- package/dist/cli/autocomplete.d.ts.map +1 -1
- package/dist/cli/autocomplete.js +6 -6
- package/dist/cli/autocomplete.js.map +1 -1
- package/dist/cli/command-executor.d.ts +10 -0
- package/dist/cli/command-executor.d.ts.map +1 -1
- package/dist/cli/command-executor.js +85 -11
- package/dist/cli/command-executor.js.map +1 -1
- package/dist/cli/command-wizard.d.ts.map +1 -1
- package/dist/cli/command-wizard.js +8 -2
- package/dist/cli/command-wizard.js.map +1 -1
- package/dist/cli/commands/config.d.ts.map +1 -1
- package/dist/cli/commands/config.js +5 -2
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/first-run-setup.d.ts.map +1 -1
- package/dist/cli/first-run-setup.js +3 -1
- package/dist/cli/first-run-setup.js.map +1 -1
- package/dist/cli/provider-resolver.d.ts.map +1 -1
- package/dist/cli/provider-resolver.js +11 -0
- package/dist/cli/provider-resolver.js.map +1 -1
- package/dist/config/constants.d.ts +18 -0
- package/dist/config/constants.d.ts.map +1 -1
- package/dist/config/constants.js +18 -0
- package/dist/config/constants.js.map +1 -1
- package/dist/config/interactive-wizard.d.ts +7 -0
- package/dist/config/interactive-wizard.d.ts.map +1 -1
- package/dist/config/interactive-wizard.js +24 -19
- package/dist/config/interactive-wizard.js.map +1 -1
- package/dist/config/loader.d.ts +5 -0
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +24 -0
- package/dist/config/loader.js.map +1 -1
- package/dist/config/providers.config.d.ts.map +1 -1
- package/dist/config/providers.config.js +17 -1
- package/dist/config/providers.config.js.map +1 -1
- package/dist/config/schema.d.ts +194 -6
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +1 -0
- package/dist/config/schema.js.map +1 -1
- package/dist/config/validation-helpers.d.ts.map +1 -1
- package/dist/config/validation-helpers.js +84 -41
- package/dist/config/validation-helpers.js.map +1 -1
- package/dist/di/container.d.ts +5 -0
- package/dist/di/container.d.ts.map +1 -1
- package/dist/di/container.js +17 -0
- package/dist/di/container.js.map +1 -1
- package/dist/executor/message-builder.service.d.ts +2 -0
- package/dist/executor/message-builder.service.d.ts.map +1 -1
- package/dist/executor/message-builder.service.js +6 -1
- package/dist/executor/message-builder.service.js.map +1 -1
- package/dist/executor/stage-executor.d.ts.map +1 -1
- package/dist/executor/stage-executor.js +35 -8
- package/dist/executor/stage-executor.js.map +1 -1
- package/dist/executor/stage-output-cache.d.ts +3 -3
- package/dist/executor/stage-output-cache.d.ts.map +1 -1
- package/dist/executor/stage-output-cache.js +6 -6
- package/dist/executor/stage-output-cache.js.map +1 -1
- package/dist/executor/tool-execution.service.d.ts +2 -0
- package/dist/executor/tool-execution.service.d.ts.map +1 -1
- package/dist/executor/tool-execution.service.js +230 -2
- package/dist/executor/tool-execution.service.js.map +1 -1
- package/dist/executor/tools/search-tools.service.d.ts +1 -1
- package/dist/executor/tools/search-tools.service.d.ts.map +1 -1
- package/dist/executor/tools/search-tools.service.js +25 -3
- package/dist/executor/tools/search-tools.service.js.map +1 -1
- package/dist/executor/variables.d.ts.map +1 -1
- package/dist/executor/variables.js +5 -0
- package/dist/executor/variables.js.map +1 -1
- package/dist/llm/model-mapping-registry.d.ts.map +1 -1
- package/dist/llm/model-mapping-registry.js +11 -3
- package/dist/llm/model-mapping-registry.js.map +1 -1
- package/dist/llm/providers/anthropic.provider.d.ts.map +1 -1
- package/dist/llm/providers/anthropic.provider.js +5 -1
- package/dist/llm/providers/anthropic.provider.js.map +1 -1
- package/dist/llm/providers/index.d.ts +2 -0
- package/dist/llm/providers/index.d.ts.map +1 -1
- package/dist/llm/providers/index.js +2 -0
- package/dist/llm/providers/index.js.map +1 -1
- package/dist/llm/providers/local.provider.d.ts +27 -0
- package/dist/llm/providers/local.provider.d.ts.map +1 -0
- package/dist/llm/providers/local.provider.js +179 -0
- package/dist/llm/providers/local.provider.js.map +1 -0
- package/dist/llm/providers/openai.provider.d.ts.map +1 -1
- package/dist/llm/providers/openai.provider.js +1 -0
- package/dist/llm/providers/openai.provider.js.map +1 -1
- package/dist/lsp/lsp-client-manager.service.d.ts +47 -0
- package/dist/lsp/lsp-client-manager.service.d.ts.map +1 -0
- package/dist/lsp/lsp-client-manager.service.js +117 -0
- package/dist/lsp/lsp-client-manager.service.js.map +1 -0
- package/dist/lsp/lsp-client.d.ts +45 -0
- package/dist/lsp/lsp-client.d.ts.map +1 -0
- package/dist/lsp/lsp-client.js +147 -0
- package/dist/lsp/lsp-client.js.map +1 -0
- package/dist/lsp/lsp-context-enricher.d.ts +15 -0
- package/dist/lsp/lsp-context-enricher.d.ts.map +1 -0
- package/dist/lsp/lsp-context-enricher.js +72 -0
- package/dist/lsp/lsp-context-enricher.js.map +1 -0
- package/dist/lsp/lsp-language-registry.d.ts +24 -0
- package/dist/lsp/lsp-language-registry.d.ts.map +1 -0
- package/dist/lsp/lsp-language-registry.js +108 -0
- package/dist/lsp/lsp-language-registry.js.map +1 -0
- package/dist/lsp/lsp-lifecycle.service.d.ts +34 -0
- package/dist/lsp/lsp-lifecycle.service.d.ts.map +1 -0
- package/dist/lsp/lsp-lifecycle.service.js +57 -0
- package/dist/lsp/lsp-lifecycle.service.js.map +1 -0
- package/dist/lsp/lsp-protocol-adapter.d.ts +32 -0
- package/dist/lsp/lsp-protocol-adapter.d.ts.map +1 -0
- package/dist/lsp/lsp-protocol-adapter.interface.d.ts +93 -0
- package/dist/lsp/lsp-protocol-adapter.interface.d.ts.map +1 -0
- package/dist/lsp/lsp-protocol-adapter.interface.js +50 -0
- package/dist/lsp/lsp-protocol-adapter.interface.js.map +1 -0
- package/dist/lsp/lsp-protocol-adapter.js +69 -0
- package/dist/lsp/lsp-protocol-adapter.js.map +1 -0
- package/dist/lsp/lsp-result-cache.d.ts +43 -0
- package/dist/lsp/lsp-result-cache.d.ts.map +1 -0
- package/dist/lsp/lsp-result-cache.js +87 -0
- package/dist/lsp/lsp-result-cache.js.map +1 -0
- package/dist/lsp/lsp-tools.service.d.ts +68 -0
- package/dist/lsp/lsp-tools.service.d.ts.map +1 -0
- package/dist/lsp/lsp-tools.service.js +310 -0
- package/dist/lsp/lsp-tools.service.js.map +1 -0
- package/dist/lsp/lsp.types.d.ts +122 -0
- package/dist/lsp/lsp.types.d.ts.map +1 -0
- package/dist/lsp/lsp.types.js +7 -0
- package/dist/lsp/lsp.types.js.map +1 -0
- package/dist/mcp/mcp-client-manager.service.d.ts.map +1 -1
- package/dist/mcp/mcp-client-manager.service.js +32 -6
- package/dist/mcp/mcp-client-manager.service.js.map +1 -1
- package/dist/mcp/mcp-tool-handler.d.ts.map +1 -1
- package/dist/mcp/mcp-tool-handler.js +17 -1
- package/dist/mcp/mcp-tool-handler.js.map +1 -1
- package/dist/package.json +4 -1
- package/dist/security/command-guard.d.ts +58 -0
- package/dist/security/command-guard.d.ts.map +1 -0
- package/dist/security/command-guard.js +249 -0
- package/dist/security/command-guard.js.map +1 -0
- package/dist/security/credential-guard.d.ts +42 -0
- package/dist/security/credential-guard.d.ts.map +1 -0
- package/dist/security/credential-guard.js +181 -0
- package/dist/security/credential-guard.js.map +1 -0
- package/dist/security/index.d.ts +22 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +17 -0
- package/dist/security/index.js.map +1 -0
- package/dist/security/prompt-injection-detector.d.ts +55 -0
- package/dist/security/prompt-injection-detector.d.ts.map +1 -0
- package/dist/security/prompt-injection-detector.js +233 -0
- package/dist/security/prompt-injection-detector.js.map +1 -0
- package/dist/security/security-event.types.d.ts +19 -0
- package/dist/security/security-event.types.d.ts.map +1 -0
- package/dist/security/security-event.types.js +13 -0
- package/dist/security/security-event.types.js.map +1 -0
- package/dist/security/tool-definition-validator.d.ts +55 -0
- package/dist/security/tool-definition-validator.d.ts.map +1 -0
- package/dist/security/tool-definition-validator.js +221 -0
- package/dist/security/tool-definition-validator.js.map +1 -0
- package/dist/security/tool-integrity-monitor.d.ts +67 -0
- package/dist/security/tool-integrity-monitor.d.ts.map +1 -0
- package/dist/security/tool-integrity-monitor.js +155 -0
- package/dist/security/tool-integrity-monitor.js.map +1 -0
- package/dist/tsconfig.json +3 -0
- package/dist/types/command.types.d.ts +3 -1
- package/dist/types/command.types.d.ts.map +1 -1
- package/dist/types/command.types.js.map +1 -1
- package/dist/types/llm.types.d.ts +2 -0
- package/dist/types/llm.types.d.ts.map +1 -1
- package/dist/types/provider-names.types.d.ts +3 -0
- package/dist/types/provider-names.types.d.ts.map +1 -1
- package/dist/types/provider-names.types.js +3 -0
- package/dist/types/provider-names.types.js.map +1 -1
- package/dist/ui/dashboard/detail-panels/spending-panel.d.ts.map +1 -1
- package/dist/ui/dashboard/detail-panels/spending-panel.js +8 -3
- package/dist/ui/dashboard/detail-panels/spending-panel.js.map +1 -1
- package/dist/ui/dashboard/detail-panels/token-usage-panel.d.ts.map +1 -1
- package/dist/ui/dashboard/detail-panels/token-usage-panel.js +37 -13
- package/dist/ui/dashboard/detail-panels/token-usage-panel.js.map +1 -1
- package/dist/ui/dashboard/views/agent-analytics-view.js +1 -1
- package/dist/ui/dashboard/views/agent-analytics-view.js.map +1 -1
- package/dist/ui/dashboard/views/cache-stats-view.js +1 -1
- package/dist/ui/dashboard/views/cache-stats-view.js.map +1 -1
- package/dist/ui/dashboard/views/performance-view.js +1 -1
- package/dist/ui/dashboard/views/performance-view.js.map +1 -1
- package/dist/utils/spending-tracker.d.ts +22 -0
- package/dist/utils/spending-tracker.d.ts.map +1 -1
- package/dist/utils/spending-tracker.js +33 -1
- package/dist/utils/spending-tracker.js.map +1 -1
- package/dist/utils/token-estimator.d.ts +21 -5
- package/dist/utils/token-estimator.d.ts.map +1 -1
- package/dist/utils/token-estimator.js +74 -28
- package/dist/utils/token-estimator.js.map +1 -1
- 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 @@
|
|
|
1
|
+
{"version":3,"file":"ast.types.js","sourceRoot":"","sources":["../../src/ast/ast.types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|