Skip to content

Commit 41bd547

Browse files
committed
chore: initial public release
0 parents  commit 41bd547

559 files changed

Lines changed: 60549 additions & 0 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.dockerignore

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
.git
2+
.github
3+
.gitignore
4+
.gitattributes
5+
.idea
6+
.vscode
7+
.trae
8+
.venv
9+
__pycache__
10+
*.pyc
11+
*.pyo
12+
.run-logs
13+
.cache
14+
**/.pytest_cache
15+
*.log
16+
*.sqlite3
17+
*.db
18+
*.key
19+
*.pem
20+
*.pfx
21+
**/password.txt
22+
.env
23+
.env.*
24+
!.env.docker.example
25+
!backend/.env.template
26+
frontend/node_modules
27+
frontend/dist
28+
frontend/dist-ssr
29+
var
30+
backend/static/*
31+
!backend/static/default
32+
!backend/static/default/**

.env.docker.example

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
ENVIRONMENT=dev
2+
TZ=Asia/Shanghai
3+
4+
MYSQL_USER=root
5+
MYSQL_PASSWORD=replace-with-a-strong-mysql-password
6+
MYSQL_DATABASE=onlineunigraph
7+
MYSQL_EXPOSE_PORT=3306
8+
MYSQL_POOL_SIZE=10
9+
MYSQL_MAX_OVERFLOW=20
10+
MYSQL_POOL_TIMEOUT=30
11+
12+
REDIS_PASSWORD=replace-with-a-strong-redis-password
13+
REDIS_DATABASE=0
14+
REDIS_EXPOSE_PORT=6379
15+
16+
BACKEND_PORT=8000
17+
FRONTEND_PORT=8080
18+
19+
TOKEN_SECRET_KEY=replace-with-a-random-token-secret
20+
# Valid development-only Base64 key; production validation rejects the embedded "changeme" marker.
21+
AUTH_AES_SECRET_KEY=changemeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
22+
LLM_API_KEY_ENCRYPTION_KEY=replace-with-a-long-random-secret
23+
OPERA_LOG_ENCRYPT_SECRET_KEY=replace-with-a-random-opera-log-secret
24+
JXNU_AES_SECRET_KEY=
25+
JXNU_USER_INFO_URL=https://ai.jxselab.com/tsp/v1/sys/users/me
26+
27+
OAUTH2_GITHUB_CLIENT_ID=test
28+
OAUTH2_GITHUB_CLIENT_SECRET=test
29+
OAUTH2_LINUX_DO_CLIENT_ID=test
30+
OAUTH2_LINUX_DO_CLIENT_SECRET=test
31+
32+
CELERY_BROKER_REDIS_DATABASE=1
33+
CELERY_BACKEND_REDIS_DATABASE=2
34+
CELERY_DEFAULT_CONCURRENCY=4
35+
CELERY_QA_CONCURRENCY=8
36+
CELERY_INDEXING_CONCURRENCY=2
37+
CELERY_MIGRATION_CONCURRENCY=2
38+
39+
EMBEDDING_MODEL=text-embedding-3-small
40+
OPENAI_API_KEY=replace-with-your-embedding-api-key
41+
42+
INDEX_EXPORT_URL_ROOT=http://backend:8000/knowg/v1/knowledge/ask
43+
CORS_ALLOWED_ORIGINS=["http://localhost:8080"]
44+
45+
CHAT_CONTEXT_RECENT_TURNS=8
46+
CHAT_CONTEXT_COMPRESSION_THRESHOLD_TOKENS=6000
47+
CHAT_CONTEXT_TRIGGER_RATIO=0.7
48+
CHAT_CONTEXT_SUMMARY_MAX_TOKENS=1500
49+
CHAT_CONTEXT_DEFAULT_MODEL_LIMIT=128000
50+
CHAT_CONTEXT_MODEL_LIMITS={"gpt-5":400000,"gpt-4.1":1000000,"gpt-4o":128000,"o1":200000,"o3":200000,"claude":200000,"deepseek":128000,"gemini":1000000}
51+
LLM_MAX_CONCURRENCY=8
52+
LLM_HTTP_MAX_CLIENTS=32
53+
LLM_HTTP_MAX_CONNECTIONS=100
54+
LLM_HTTP_MAX_KEEPALIVE_CONNECTIONS=20
55+
LLM_HTTP_CONNECT_TIMEOUT=10
56+
LLM_HTTP_READ_TIMEOUT=600
57+
EMBEDDING_BATCH_SIZE=32
58+
EMBEDDING_BATCH_CONCURRENCY=4
59+
ALLOW_PRIVATE_LLM_ENDPOINTS=false
60+
ENABLE_PUBLIC_PASSWORD_RESET=false
61+
COOKIE_SECURE=false
62+
63+
FRONTEND_VITE_HOST_URL=
64+
FRONTEND_VITE_API_BASE_URL=/knowg
65+
FRONTEND_VITE_SHOW_IMAGE_API=/knowg/v1/image/
66+
FRONTEND_VITE_USER_INFO_SSO_URL=/knowg/v1/sys/users/me

.gitattributes

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
* text=auto
2+
3+
*.py text eol=lf
4+
*.js text eol=lf
5+
*.ts text eol=lf
6+
*.vue text eol=lf
7+
*.css text eol=lf
8+
*.html text eol=lf
9+
*.json text eol=lf
10+
*.md text eol=lf
11+
*.txt text eol=lf
12+
*.toml text eol=lf
13+
*.conf text eol=lf
14+
*.sql text eol=lf
15+
*.sh text eol=lf
16+
*.yml text eol=lf
17+
*.yaml text eol=lf
18+
Dockerfile* text eol=lf
19+
.dockerignore text eol=lf
20+
.gitattributes text eol=lf
21+
.gitignore text eol=lf
22+
23+
*.cmd text eol=crlf
24+
*.ps1 text eol=crlf
25+
26+
*.ico binary
27+
*.jpg binary
28+
*.jpeg binary
29+
*.png binary
30+
*.svg text eol=lf
31+
*.ttf binary
32+
*.woff binary
33+
*.woff2 binary

.github/dependabot.yml

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
version: 2
2+
updates:
3+
- package-ecosystem: pip
4+
directory: /backend
5+
schedule:
6+
interval: weekly
7+
open-pull-requests-limit: 5
8+
9+
- package-ecosystem: npm
10+
directory: /frontend
11+
schedule:
12+
interval: weekly
13+
open-pull-requests-limit: 5
14+
15+
- package-ecosystem: github-actions
16+
directory: /
17+
schedule:
18+
interval: weekly
19+
open-pull-requests-limit: 5

.github/workflows/ci.yml

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
name: CI
2+
3+
on:
4+
push:
5+
branches: [main]
6+
pull_request:
7+
8+
permissions:
9+
contents: read
10+
11+
jobs:
12+
backend:
13+
runs-on: ubuntu-latest
14+
steps:
15+
- uses: actions/checkout@v4
16+
- uses: actions/setup-python@v5
17+
with:
18+
python-version: "3.11"
19+
- name: Install backend quality tools
20+
run: python -m pip install ruff==0.15.20 -r backend/requirements-dev.txt
21+
- name: Check Python formatting and lint
22+
working-directory: backend
23+
run: |
24+
ruff format --check .
25+
ruff check .
26+
- name: Run security regression tests
27+
run: |
28+
python -m pytest backend/tests -q
29+
python backend/tests/smoke_import.py
30+
python -m alembic -c backend/alembic.ini heads
31+
- name: Audit locked backend dependencies
32+
run: |
33+
python -m pip install pip-audit
34+
pip-audit --requirement backend/requirements.txt --no-deps --disable-pip
35+
36+
frontend:
37+
runs-on: ubuntu-latest
38+
defaults:
39+
run:
40+
working-directory: frontend
41+
steps:
42+
- uses: actions/checkout@v4
43+
- uses: actions/setup-node@v4
44+
with:
45+
node-version: "22"
46+
cache: npm
47+
cache-dependency-path: frontend/package-lock.json
48+
- run: npm ci
49+
- run: npm run lint
50+
- run: npm run typecheck
51+
- run: npm test
52+
- run: npm run build
53+
- run: npx playwright install --with-deps chromium
54+
- run: npm run test:e2e
55+
- run: npm audit --audit-level=high
56+
57+
compose:
58+
runs-on: ubuntu-latest
59+
steps:
60+
- uses: actions/checkout@v4
61+
- name: Validate Compose configuration
62+
run: |
63+
docker compose --env-file .env.docker.example config --quiet
64+
docker compose --env-file .env.docker.example -f compose.yaml -f deploy/compose.prod.yaml config --quiet
65+
66+
docker-smoke:
67+
runs-on: ubuntu-latest
68+
timeout-minutes: 25
69+
steps:
70+
- uses: actions/checkout@v4
71+
- name: Start a clean Docker stack
72+
run: docker compose --env-file .env.docker.example up -d --build
73+
- name: Wait for frontend and backend health
74+
run: |
75+
for attempt in $(seq 1 60); do
76+
if curl --fail --silent http://127.0.0.1:8080/ >/dev/null \
77+
&& curl --fail --silent http://127.0.0.1:8000/knowg/v1/health >/dev/null; then
78+
exit 0
79+
fi
80+
sleep 5
81+
done
82+
docker compose --env-file .env.docker.example ps
83+
docker compose --env-file .env.docker.example logs --tail=200
84+
exit 1
85+
- name: Stop Docker stack
86+
if: always()
87+
run: docker compose --env-file .env.docker.example down --volumes --remove-orphans

.gitignore

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
.DS_Store
2+
Thumbs.db
3+
4+
.idea/
5+
.vscode/
6+
.trae/
7+
.codex-release-git/
8+
9+
.venv/
10+
venv/
11+
__pycache__/
12+
*.py[cod]
13+
*.pyo
14+
15+
.run-logs/
16+
.cache/
17+
.pytest_cache/
18+
.ruff_cache/
19+
.mypy_cache/
20+
.coverage
21+
htmlcov/
22+
*.log
23+
24+
frontend/node_modules/
25+
frontend/dist/
26+
frontend/dist-ssr/
27+
frontend/.vite/
28+
.npm-cache/
29+
.pip-cache/
30+
frontend/playwright-report/
31+
frontend/test-results/
32+
33+
var/*
34+
!var/.gitkeep
35+
backend/static/*
36+
!backend/static/.gitkeep
37+
!backend/static/default/
38+
!backend/static/default/**
39+
backend/ip2region.xdb
40+
*.sqlite3
41+
*.db
42+
43+
# Never commit private keys or bundled certificate archives.
44+
*.key
45+
*.pem
46+
*.pfx
47+
**/password.txt
48+
49+
.env.docker
50+
.env
51+
.env.*
52+
!.env.template
53+
!.env.docker.example
54+
backend/.env
55+
backend/.env.*
56+
!backend/.env.template
57+
*.local

0 commit comments

Comments
 (0)