mirror of
https://gitee.com/kekingcn/file-online-preview.git
synced 2026-04-17 13:53:44 +00:00
Merge pull request #739 from kekingcn/paseo/ai-docs
Add AI-friendly repository guide
This commit is contained in:
230
AGENTS.md
Normal file
230
AGENTS.md
Normal file
@@ -0,0 +1,230 @@
|
|||||||
|
# AGENTS.md
|
||||||
|
|
||||||
|
This document is for coding agents and automation tools working in this repository.
|
||||||
|
|
||||||
|
## Project Overview
|
||||||
|
|
||||||
|
- Project: `kkFileView`
|
||||||
|
- Stack: Spring Boot + Freemarker + Redis/Redisson (optional) + JODConverter + front-end preview pages
|
||||||
|
- Main module: `server`
|
||||||
|
- Default local URL: `http://127.0.0.1:8012/`
|
||||||
|
- Production demo: `https://file.kkview.cn/`
|
||||||
|
|
||||||
|
This repository is a document preview service. Most user-facing work falls into one of these areas:
|
||||||
|
|
||||||
|
1. preview routing and file-type dispatch
|
||||||
|
2. conversion pipelines for Office / PDF / CAD / archives / images
|
||||||
|
3. Freemarker preview templates under `server/src/main/resources/web`
|
||||||
|
4. CI, E2E fixtures, and production deployment automation
|
||||||
|
|
||||||
|
## Repository Layout
|
||||||
|
|
||||||
|
- `server/`
|
||||||
|
Main application code, templates, config, packaged artifacts
|
||||||
|
- `server/src/main/java/cn/keking/`
|
||||||
|
Core Java application code
|
||||||
|
- `server/src/main/resources/web/`
|
||||||
|
Freemarker preview templates
|
||||||
|
- `server/src/main/resources/static/`
|
||||||
|
Front-end static assets used by preview pages
|
||||||
|
- `server/src/main/config/`
|
||||||
|
Main runtime config files
|
||||||
|
- `server/src/main/bin/`
|
||||||
|
Local startup/dev scripts
|
||||||
|
- `tests/e2e/`
|
||||||
|
Playwright-based end-to-end tests and fixtures
|
||||||
|
- `.github/workflows/`
|
||||||
|
CI and deployment workflows
|
||||||
|
- `.github/scripts/`
|
||||||
|
Windows production deployment scripts over WinRM
|
||||||
|
|
||||||
|
## Key Entry Points
|
||||||
|
|
||||||
|
- App entry:
|
||||||
|
- `server/src/main/java/cn/keking/ServerMain.java`
|
||||||
|
- Preview controller:
|
||||||
|
- `server/src/main/java/cn/keking/web/controller/OnlinePreviewController.java`
|
||||||
|
- File attribute parsing / request handling:
|
||||||
|
- `server/src/main/java/cn/keking/service/FileHandlerService.java`
|
||||||
|
- Office preview flow:
|
||||||
|
- `server/src/main/java/cn/keking/service/impl/OfficeFilePreviewImpl.java`
|
||||||
|
- PDF preview flow:
|
||||||
|
- `server/src/main/java/cn/keking/service/impl/PdfFilePreviewImpl.java`
|
||||||
|
- Archive extraction:
|
||||||
|
- `server/src/main/java/cn/keking/service/CompressFileReader.java`
|
||||||
|
|
||||||
|
## Important Templates
|
||||||
|
|
||||||
|
- `server/src/main/resources/web/compress.ftl`
|
||||||
|
Archive directory/tree preview page
|
||||||
|
- `server/src/main/resources/web/pdf.ftl`
|
||||||
|
PDF preview container page
|
||||||
|
- `server/src/main/resources/web/picture.ftl`
|
||||||
|
Single image preview page
|
||||||
|
- `server/src/main/resources/web/officePicture.ftl`
|
||||||
|
Office/PDF image-mode preview page
|
||||||
|
- `server/src/main/resources/web/officeweb.ftl`
|
||||||
|
Front-end xlsx/html preview page
|
||||||
|
|
||||||
|
When debugging UX issues, inspect the exact template selected by the preview flow first. Do not assume two similar preview pages share the same CSS or behavior.
|
||||||
|
|
||||||
|
## Local Development
|
||||||
|
|
||||||
|
### Recommended dev mode
|
||||||
|
|
||||||
|
Use:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./server/src/main/bin/dev.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
This runs Spring Boot with resource hot reload using:
|
||||||
|
|
||||||
|
- `spring-boot:run`
|
||||||
|
- `-Dspring-boot.run.addResources=true`
|
||||||
|
- `server/src/main/config/application.properties`
|
||||||
|
|
||||||
|
For front-end template or CSS/JS edits, prefer `dev.sh` over rebuilding jars repeatedly.
|
||||||
|
|
||||||
|
### Jar build
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mvn -q -pl server -DskipTests package
|
||||||
|
```
|
||||||
|
|
||||||
|
### Main test command used in CI
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mvn -B package -Dmaven.test.skip=true --file pom.xml
|
||||||
|
```
|
||||||
|
|
||||||
|
## Configuration Notes
|
||||||
|
|
||||||
|
Primary runtime config used by the scripts and defaults committed in this repository:
|
||||||
|
|
||||||
|
- `server/src/main/config/application.properties`
|
||||||
|
|
||||||
|
Optional environment-specific config:
|
||||||
|
|
||||||
|
- `server/src/main/config/test.properties`
|
||||||
|
|
||||||
|
Be careful: the repository defaults point at `application.properties`. If a deployment environment explicitly starts the app with `test.properties`, treat that as an environment-specific override rather than the repository default. Always verify the actual startup command before assuming which config file is active.
|
||||||
|
|
||||||
|
Examples of config that commonly affects behavior:
|
||||||
|
|
||||||
|
- `office.preview.type`
|
||||||
|
- `office.preview.switch.disabled`
|
||||||
|
- `trust.host`
|
||||||
|
- `not.trust.host`
|
||||||
|
- `file.upload.disable`
|
||||||
|
|
||||||
|
## Preview Behavior Notes
|
||||||
|
|
||||||
|
- Office files can render in `pdf` mode or `image` mode.
|
||||||
|
- PDF preview uses `pdf.ftl`.
|
||||||
|
- Single images use `picture.ftl`.
|
||||||
|
- Office image-mode previews use `officePicture.ftl`.
|
||||||
|
- Archive previews are not simple file lists; they can load nested previews via the archive UI in `compress.ftl`.
|
||||||
|
|
||||||
|
When changing preview defaults, verify both:
|
||||||
|
|
||||||
|
1. server-side default config
|
||||||
|
2. front-end mode-switch links/buttons
|
||||||
|
|
||||||
|
## Archive Preview Notes
|
||||||
|
|
||||||
|
Archive preview is a sensitive area because it combines:
|
||||||
|
|
||||||
|
- directory tree generation
|
||||||
|
- extraction to disk
|
||||||
|
- nested preview URL construction
|
||||||
|
- inline iframe loading
|
||||||
|
|
||||||
|
If an archive-contained Office file gets stuck on loading:
|
||||||
|
|
||||||
|
1. verify the extracted file on disk is not corrupted
|
||||||
|
2. verify conversion output exists
|
||||||
|
3. verify the preview template points to the correct generated artifact
|
||||||
|
4. verify the running Office manager / LibreOffice process is healthy
|
||||||
|
|
||||||
|
Do not assume “loading forever” is a front-end issue.
|
||||||
|
|
||||||
|
## Testing
|
||||||
|
|
||||||
|
### Targeted Java tests
|
||||||
|
|
||||||
|
Example targeted test:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mvn -q -pl server -Dtest=PdfViewerCompatibilityTests test
|
||||||
|
```
|
||||||
|
|
||||||
|
### E2E tests
|
||||||
|
|
||||||
|
See:
|
||||||
|
|
||||||
|
- `tests/e2e/README.md`
|
||||||
|
|
||||||
|
PR E2E currently covers:
|
||||||
|
|
||||||
|
- common preview smoke tests
|
||||||
|
- Office smoke tests
|
||||||
|
- archive smoke tests
|
||||||
|
- basic security and performance checks
|
||||||
|
|
||||||
|
## CI / Deployment
|
||||||
|
|
||||||
|
### CI
|
||||||
|
|
||||||
|
- `maven.yml`
|
||||||
|
- builds on `push` to `master`
|
||||||
|
- builds on PRs targeting `master`
|
||||||
|
- `pr-e2e-mvp.yml`
|
||||||
|
- runs E2E on PRs to `master`
|
||||||
|
|
||||||
|
### Production deployment
|
||||||
|
|
||||||
|
- `master-auto-deploy.yml`
|
||||||
|
- triggers on push to `master`
|
||||||
|
- deploys to Windows over WinRM
|
||||||
|
|
||||||
|
Deployment script:
|
||||||
|
|
||||||
|
- `.github/scripts/remote_windows_deploy.ps1`
|
||||||
|
|
||||||
|
Important operational detail:
|
||||||
|
|
||||||
|
- the committed `bin/startup.bat` in this repo points at `..\config\application.properties`
|
||||||
|
- if production uses a different config file, treat that as an out-of-repo server override rather than a repository default
|
||||||
|
|
||||||
|
If a production config change “does not take effect”, inspect the actual startup command or deployed `startup.bat` on the server first and verify which config file path it is using.
|
||||||
|
|
||||||
|
## Working Conventions For Agents
|
||||||
|
|
||||||
|
- Prefer minimal, targeted changes over wide refactors.
|
||||||
|
- Inspect the active preview template before editing CSS.
|
||||||
|
- Verify whether behavior is controlled by config, back-end routing, or front-end template logic before changing code.
|
||||||
|
- For production/debug tasks, distinguish clearly between:
|
||||||
|
- repository source defaults
|
||||||
|
- deployed server config
|
||||||
|
- runtime process arguments
|
||||||
|
- When changing defaults, mention whether the change affects:
|
||||||
|
- local dev only
|
||||||
|
- repository default config
|
||||||
|
- deployed server config
|
||||||
|
- existing query-param overrides
|
||||||
|
|
||||||
|
## Suggested Validation Checklist
|
||||||
|
|
||||||
|
For preview-related changes, validate as many of these as apply:
|
||||||
|
|
||||||
|
1. target URL returns `200`
|
||||||
|
2. selected template is the expected one
|
||||||
|
3. generated intermediate artifacts exist when required
|
||||||
|
4. target UI element or style change is actually present in rendered HTML
|
||||||
|
5. targeted Java test passes
|
||||||
|
6. relevant E2E path is still compatible
|
||||||
|
|
||||||
|
## Non-Goals
|
||||||
|
|
||||||
|
This file is not a replacement for user-facing product documentation. Keep it focused on helping coding agents navigate the codebase and make correct changes faster.
|
||||||
Reference in New Issue
Block a user