6.6 KiB
Code Analysis Core Source Selection Design
Background
The current code-analysis flow collects preview source from backend, frontend, admin_frontend, and sql, reads every allowed source-like file, and then truncates the assembled prompt context at 120KB. This works for small projects, but it can send too much low-value code to the AI and leave less room for the files that explain the real architecture and business flow.
The requested change is to send fewer files while keeping the most useful Java, Vue, SQL, and mapper/config context. The AI should receive a curated source snapshot, not a broad dump of every allowed file.
Goal
Make ProjectCodeAnalysisService intelligently select a compact set of core files for AI code interpretation. The default expanded source budget is 60KB, with clear metadata and warnings for files that were skipped, summarized, or truncated.
Non-Goals
- Do not add a second AI call to ask the model which files to choose.
- Do not require the user to manually pick files.
- Do not scan arbitrary server directories or uploaded ZIP files.
- Do not remove existing ownership checks or preview-read safeguards.
- Do not change the report page layout in this feature.
Selection Strategy
The backend keeps using the existing preview source tree as input:
frontProjectPreviewService.getStructure(userId, projectId, "backend")frontProjectPreviewService.getStructure(userId, projectId, "frontend")frontProjectPreviewService.getStructure(userId, projectId, "admin_frontend")frontProjectPreviewService.getStructure(userId, projectId, "sql")
Instead of sending every allowed file until the prompt is full, the service will score each candidate file and assemble the prompt from highest-value files first.
High-priority files:
- Java controllers, especially paths or class names containing
Controller - Java services and service implementations
- Java mappers and mapper XML files
- Java entity/domain/model/DTO classes
- SQL files containing table definitions
- Vue route files, API wrappers, and core page components
- Project dependency/config files such as
pom.xml,package.json,application.yml, and router files
Low-priority or skipped files:
- Build artifacts and dependency folders:
target,dist,node_modules,.git,.idea - Static assets, generated bundles, minified files, maps, images, fonts, archives, binaries
- Tests, screenshots, audit artifacts, demo-only files, mockups, and style-only files unless no better frontend files exist
- Very large files after their useful header and structural content have been captured
Budget Rules
The default expanded prompt source budget is 60KB. This is the total size of actual source content sent to the AI, not counting a small file manifest.
Recommended limits:
- Total expanded source budget:
60 * 1024characters - Per-file expanded budget for Java/Vue/XML/SQL/config: about
20 * 1024characters - Keep a compact manifest of selected and skipped files outside the expanded source body
- If the budget is exhausted, include remaining important file names in metadata, but do not expand their contents
The AI prompt should explicitly say that the source snapshot is curated and compact. It must not infer details from files that were not expanded.
Data Shape
Reuse CodeAnalysisSourceSummary and its existing file/skipped-file lists where possible.
Expected summary behavior:
includedFilescontains only selected core files with content or compact extracted contentskippedFilesincludes non-core files and budget-excluded files with a reasonwarningsdescribes budget limits and any important omitted areaspromptContextcontains the curated file manifest and expanded core source blocksanalyzedFileCountreflects selected files, whilefileCountstill reflects all scanned candidate files
Example prompt context shape:
Selected core source files:
- backend / src/main/java/.../UserController.java (controller, expanded)
- backend / src/main/java/.../UserServiceImpl.java (service, expanded)
- backend / src/main/resources/mapper/.../UserMapper.xml (mapper, expanded)
- sql / user.sql (table schema, expanded)
- frontend / src/views/user/index.vue (vue page, expanded)
Skipped or summarized files:
- frontend / src/styles/index.scss (style-only)
- frontend / src/utils/request.js (lower priority after budget)
## backend / src/main/java/.../UserController.java
...
Scoring Details
The score should be deterministic and testable. A simple weighted rule set is enough for this feature.
Suggested scoring:
- SQL schema files: very high
*Controller.java: very high*Service.javaand*ServiceImpl.java: high*Mapper.javaand*Mapper.xml: highdomain,entity,model,dto: medium-high- Vue views/pages and router/API files: medium-high
application.yml,pom.xml,package.json: medium- Utility, style, test, demo, and docs files: low or skipped
Tie-breakers:
- Prefer files with shorter, clearer business paths over generic utility paths
- Keep a balanced mix of backend, frontend, and SQL rather than letting one layer consume all 60KB
- Preserve current stable ordering where scores are equal to avoid noisy test changes
Prompt Requirements
Update the code-analysis prompt wording to make the source selection explicit:
- "The following source snapshot is a curated subset of core files."
- "Use only the expanded source and listed metadata as evidence."
- "If a detail is not present in the selected source, say it cannot be confirmed."
- "When explaining architecture, cite real class, method, component, table, or field names from the selected files."
Testing Plan
Backend tests should cover:
- Core files are selected before low-value files when budget is limited
- Controller, Service, Mapper/XML, Vue page/API/router, and SQL files appear in the prompt when present
- Style-only, test, demo, dependency, and build artifact files are skipped or deprioritized
- Total expanded source context stays near the 60KB budget
- A large high-priority file is truncated per-file instead of consuming the whole prompt
- Budget-excluded but relevant files are recorded in skipped files or warnings
Acceptance Criteria
- Code analysis sends a compact curated source snapshot by default.
- The expanded source content sent to AI is about 60KB, not the previous 120KB broad dump.
- Java, Vue, SQL, and mapper/config files receive priority based on their architectural value.
- The prompt includes enough metadata for the AI to know which important files were selected or omitted.
- Existing code-analysis generation, streaming, history, and continuation flows keep working.