Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
72 commits
Select commit Hold shift + click to select a range
c86f0cf
:boom: rewrite all project almost by vibe-coding
RF-Tar-Railt Mar 2, 2026
a90780e
chore: pin dependencies and tooling (ruff/pyright/pytest)
RF-Tar-Railt Jun 30, 2026
94d8974
feat(config): add plugin Config model
RF-Tar-Railt Jun 30, 2026
7c6e5fc
feat(api): add /api/health endpoint
RF-Tar-Railt Jun 30, 2026
c385078
feat: bootstrap plugin entry, app wiring, SPA fallback
RF-Tar-Railt Jun 30, 2026
5a0a255
test: health endpoint integration test
RF-Tar-Railt Jun 30, 2026
a5351bf
chore: placeholder packages and gitignore
RF-Tar-Railt Jun 30, 2026
391e70a
refactor: full Entari lifecycle in conftest, module-level wiring, upd…
RF-Tar-Railt Jun 30, 2026
f6c7232
feat(auth): session/cookie auth, CSRF guard, login throttle, audit
RF-Tar-Railt Jun 30, 2026
83ed5ed
feat(plugins): plugin management service, /api/plugins & /api/menus r…
RF-Tar-Railt Jun 30, 2026
51329e9
feat(config): config service, /api/config sections with schema & CRUD
RF-Tar-Railt Jun 30, 2026
7e57c27
feat(stats): MessageStat table, stats_service queries, SendResponse l…
RF-Tar-Railt Jul 1, 2026
438660c
feat(market): plugin marketplace with multi-package-manager detection
RF-Tar-Railt Jul 1, 2026
7976bc3
feat(logs): real-time log streaming via WebSocket
RF-Tar-Railt Jul 1, 2026
e0c72cc
feat(extension): WebUIExtension registry + i18n/permissions
RF-Tar-Railt Jul 1, 2026
8b77377
chore(frontend): scaffold vite + vue + element plus
RF-Tar-Railt Jul 1, 2026
29e0251
feat(frontend): zh-CN i18n
RF-Tar-Railt Jul 1, 2026
fd811fd
feat(frontend): auth/theme/menu stores
RF-Tar-Railt Jul 1, 2026
c41ca7f
feat(frontend): axios client with 401 interceptor
RF-Tar-Railt Jul 1, 2026
9511ba9
feat(frontend): backend health heartbeat + offline overlay
RF-Tar-Railt Jul 1, 2026
92965e9
feat(frontend): router and auth guard
RF-Tar-Railt Jul 1, 2026
0a28bb1
feat(frontend): layouts, login, dashboard placeholder
RF-Tar-Railt Jul 1, 2026
dca19b3
feat(frontend): apply layout based on route meta
RF-Tar-Railt Jul 1, 2026
84d2bab
test(health): expect frontend_built to be true after phase-9 build
RF-Tar-Railt Jul 1, 2026
4482d40
feat(frontend): iconify + websocket composable
RF-Tar-Railt Jul 1, 2026
972ed13
feat(frontend): JSON-schema dynamic form tree
RF-Tar-Railt Jul 1, 2026
e2f899c
feat(frontend): DualConfigEditor form<->code
RF-Tar-Railt Jul 1, 2026
2634be3
feat(frontend): plugins page
RF-Tar-Railt Jul 1, 2026
3054b08
feat(frontend): dashboard/market/config/logs/extension pages
RF-Tar-Railt Jul 1, 2026
a6dc9f6
refactor(frontend): improve SchemaForm tree (collapsible, primitive a…
RF-Tar-Railt Jul 1, 2026
4be6ff7
fix(frontend): oneOf inline layout, dashboard mode tag, schema form i…
RF-Tar-Railt Jul 1, 2026
77b1f95
experiment(frontend): move field description below title as gray hint
RF-Tar-Railt Jul 1, 2026
ce5e7a3
fix(frontend): render plugin urls object as named links
RF-Tar-Railt Jul 1, 2026
e18e07d
feat(frontend): case-sensitive toggle for plugin search
RF-Tar-Railt Jul 1, 2026
277aa3c
feat(frontend): inline Aa case-sensitive toggle in plugin search
RF-Tar-Railt Jul 1, 2026
fb07fa0
feat(frontend): render plugin readme markdown in detail modal
RF-Tar-Railt Jul 1, 2026
004f19e
fix(chat): reconnect cleanup, ws proxy, stale connection replace
RF-Tar-Railt Jul 1, 2026
d5de273
feat(frontend): chat room page via /api/chat websocket
RF-Tar-Railt Jul 1, 2026
3a4d944
refactor(chat): extract ChatMessage, textarea input, keep-alive
RF-Tar-Railt Jul 1, 2026
7feb546
feat(chat): random user_id per connection, peer_id/peer_type handling
RF-Tar-Railt Jul 2, 2026
41086aa
docs(spec): settings page merge design
RF-Tar-Railt Jul 2, 2026
bfd9d8f
docs(spec): address review feedback on settings merge
RF-Tar-Railt Jul 2, 2026
7335638
docs(spec): clarify non-plugin meta, DualConfigEditor binding, isDirt…
RF-Tar-Railt Jul 2, 2026
5c3ddcc
docs(plan): settings page merge implementation plan
RF-Tar-Railt Jul 2, 2026
68f1a6d
feat(settings): add /settings route and unified menu
RF-Tar-Railt Jul 2, 2026
c7e1c3c
feat(settings): add settings store with schema/data split
RF-Tar-Railt Jul 2, 2026
d586968
feat(settings): add sidebar, plugin header, meta settings, and settin…
RF-Tar-Railt Jul 2, 2026
0f77ca3
refactor(settings): remove old Config and Plugins views
RF-Tar-Railt Jul 2, 2026
87f5322
test(settings): update menu test for new settings route
RF-Tar-Railt Jul 2, 2026
0ad51b0
chore: cleanup unused import in Settings.vue
RF-Tar-Railt Jul 2, 2026
86ef7ed
fix(settings): save btn top, description wrap, full plugin detail, me…
RF-Tar-Railt Jul 2, 2026
9bf969e
feat(market): add two dummy plugin entries
RF-Tar-Railt Jul 2, 2026
045d30a
fix(market): tag placement, card style, homepage link, error persiste…
RF-Tar-Railt Jul 2, 2026
daffabd
fix(plugin): correct plugin service
RF-Tar-Railt Jul 2, 2026
c5d876d
feat(settings): save icon, resolve network array oneOf refs
RF-Tar-Railt Jul 2, 2026
78f440f
style: add sidebar transition animation
RF-Tar-Railt Jul 2, 2026
7eb47cf
perf(settings): cache section schemas to avoid repeated fetches
RF-Tar-Railt Jul 2, 2026
2e00f59
feat: add logo image, show only logo when collapsed
RF-Tar-Railt Jul 2, 2026
e668b62
style: use github-markdown-css and shiki for markdown rendering
RF-Tar-Railt Jul 2, 2026
ff7bb02
feat: make settings form cards collapsible
RF-Tar-Railt Jul 2, 2026
b6193bf
refactor(api): unified AppError middleware
RF-Tar-Railt Jul 3, 2026
df3d13b
test: ws logs e2e
RF-Tar-Railt Jul 3, 2026
83f2616
ci: lint + build + test matrix
RF-Tar-Railt Jul 3, 2026
805a7be
fix: extension plugin's menu i18n
RF-Tar-Railt Jul 3, 2026
fb613eb
chore: clean
RF-Tar-Railt Jul 3, 2026
eff9513
chore: format test
RF-Tar-Railt Jul 3, 2026
045a611
fix: CI
RF-Tar-Railt Jul 3, 2026
aadb1f0
chore: eslint
RF-Tar-Railt Jul 3, 2026
e7669b5
fix: types in frontend
RF-Tar-Railt Jul 3, 2026
686e10f
fix: test_health
RF-Tar-Railt Jul 3, 2026
d8c9a33
chore: update marketplace
RF-Tar-Railt Jul 3, 2026
c0b575c
feat: add favicon
RF-Tar-Railt Jul 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
84 changes: 84 additions & 0 deletions .github/workflows/CI.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
name: CI

on:
workflow_dispatch:
push:
branches:
- main
paths:
- "frontend/**"
- "src/**"
- "tests/**"
- ".github/workflows/build.yml"
- "pyproject.toml"
pull_request:
types:
- opened
- synchronize
- reopened
paths:
- "frontend/**"
- "src/**"
- "tests/**"
- ".github/workflows/build.yml"
- "pyproject.toml"

jobs:
lint-frontend:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: actions/setup-node@v4
with: { node-version: '20' }
- run: |
cd frontend && npm ci
npm run lint

lint-backend:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: pdm-project/setup-pdm@v4
with: { python-version: '3.11' }
- run: pdm sync -G:all
- run: pdm run format && pdm run lint && pdm run typecheck

test:
needs: [lint-frontend, lint-backend]
runs-on: ubuntu-latest
strategy:
matrix:
py_ver: ['3.10', '3.11', '3.12', '3.13', '3.14']
steps:
- uses: actions/checkout@v7
- uses: pdm-project/setup-pdm@v4
with:
python-version: ${{ matrix.py_ver }}
- name: Install Dependencies
run: |
pdm sync -G:all
- name: Run Tests
env:
WEBUI_CI_TEST: 1
run: |
pdm run test

build:
name: Build and Upload Artifacts
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: pdm-project/setup-pdm@v4
with: { python-version: '3.11' }
- uses: actions/setup-node@v4
with: { node-version: '20' }
- name: Install Dependencies
run: |
cd frontend && npm ci
pdm sync -G:all
- run: pdm run build-all
- uses: actions/upload-artifact@v7
name: build-artifacts
with:
name: plugin-webui-build
path: dist/
75 changes: 31 additions & 44 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -1,55 +1,42 @@
name: Build
name: Release

on:
workflow_dispatch:
push:
tags:
- "v*"

permissions:
contents: write
pull-requests: read

env:
FRONTEND_ROOT: frontend
BACKEND_ROOT: entari_plugin_webui
PACKAGE_NAME: entari_plugin_webui
- v*

jobs:
build-and-deploy:
release:
runs-on: ubuntu-latest
permissions:
id-token: write
contents: write
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
- uses: actions/checkout@v7
- uses: pdm-project/setup-pdm@v4
with: { python-version: '3.11' }
- uses: dawidd6/action-download-artifact@v9
name: Download Build Artifacts
with:
node-version: 20
cache: npm
cache-dependency-path: ${{ env.FRONTEND_ROOT }}/package-lock.json
github_token: ${{ secrets.GITHUB_TOKEN }}
workflow: build.yml
name: plugin-webui-build
path: dist/

- name: Build frontend
working-directory: ${{ env.FRONTEND_ROOT }}
- name: Get Version
id: version
run: |
npm install -no-fund
npm run build -no-fund

- name: Setup PDM
uses: pdm-project/setup-pdm@v4
with:
python-version: "3.11"
cache: true
cache-dependency-path: pdm.lock

- name: Build wheel
working-directory: ${{ env.BACKEND_ROOT }}
run: pdm build

- name: Upload build artifacts
uses: actions/upload-artifact@v4
with:
name: python-dist
path: |
${{ env.BACKEND_ROOT }}/dist/*.whl
${{ env.BACKEND_ROOT }}/dist/*.tar.gz
echo "VERSION=$(pdm show --version)" >> $GITHUB_OUTPUT
echo "TAG_VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT
echo "TAG_NAME=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT

- name: Check Version
if: steps.version.outputs.VERSION != steps.version.outputs.TAG_VERSION
run: exit 1

- name: Publish Package
run: |
pdm publish --no-build
gh release upload --clobber ${{ steps.version.outputs.TAG_NAME }} dist/*.tar.gz dist/*.whl
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
226 changes: 226 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,226 @@
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[codz]
*$py.class

# C extensions
*.so

# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST

# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py.cover
.hypothesis/
.pytest_cache/
cover/

# Translations
*.mo
*.pot

# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal

# Flask stuff:
instance/
.webassets-cache

# Scrapy stuff:
.scrapy

# Sphinx documentation
docs/_build/

# PyBuilder
.pybuilder/
target/

# Jupyter Notebook
.ipynb_checkpoints

# IPython
profile_default/
ipython_config.py

# pyenv
# For a library or package, you might want to ignore these files since the code is
# intended to run in multiple environments; otherwise, check them in:
# .python-version

# pipenv
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
# However, in case of collaboration, if having platform-specific dependencies or dependencies
# having no cross-platform support, pipenv may install dependencies that don't work, or not
# install all needed dependencies.
# Pipfile.lock

# UV
# Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
# This is especially recommended for binary packages to ensure reproducibility, and is more
# commonly ignored for libraries.
# uv.lock

# poetry
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
# This is especially recommended for binary packages to ensure reproducibility, and is more
# commonly ignored for libraries.
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
# poetry.lock
# poetry.toml

# pdm
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
# pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python.
# https://pdm-project.org/en/latest/usage/project/#working-with-version-control
# pdm.lock
# pdm.toml
.pdm-python
.pdm-build/

# pixi
# Similar to Pipfile.lock, it is generally recommended to include pixi.lock in version control.
# pixi.lock
# Pixi creates a virtual environment in the .pixi directory, just like venv module creates one
# in the .venv directory. It is recommended not to include this directory in version control.
.pixi

# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
__pypackages__/

# Celery stuff
celerybeat-schedule
celerybeat.pid

# Redis
*.rdb
*.aof
*.pid

# RabbitMQ
mnesia/
rabbitmq/
rabbitmq-data/

# ActiveMQ
activemq-data/

# SageMath parsed files
*.sage.py

# Environments
.env
.envrc
.venv
env/
venv/
ENV/
env.bak/
venv.bak/

# Spyder project settings
.spyderproject
.spyproject

# Rope project settings
.ropeproject

# mkdocs documentation
/site

# mypy
.mypy_cache/
.dmypy.json
dmypy.json

# Pyre type checker
.pyre/

# pytype static type analyzer
.pytype/

# Cython debug symbols
cython_debug/

# PyCharm
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
# and can be added to the global gitignore or merged into this file. For a more nuclear
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
.idea/

# Abstra
# Abstra is an AI-powered process automation framework.
# Ignore directories containing user credentials, local state, and settings.
# Learn more at https://abstra.io/docs
.abstra/

# Visual Studio Code
# Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore
# that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore
# and can be added to the global gitignore or merged into this file. However, if you prefer,
# you could uncomment the following to ignore the entire vscode folder
.vscode/

# Ruff stuff:
.ruff_cache/

# Project-specific
src/entari_plugin_webui/static/frontend/
.pdm-build/
frontend/node_modules/
frontend/dist/

# PyPI configuration file
.pypirc

# Marimo
marimo/_static/
marimo/_lsp/
__marimo__/

# Streamlit
.streamlit/secrets.toml

.entari/

docs/superpowers/
Loading
Loading