Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
3898b54
feat(plugins): add user plugin system database schema and core infras…
AshDevFr Feb 6, 2026
fdec445
feat(plugins): add OAuth authentication flow and user plugin API endp…
AshDevFr Feb 6, 2026
313c2dd
feat(plugins): add plugin storage system with bidirectional RPC and S…
AshDevFr Feb 6, 2026
7b6d449
feat(plugins): add user plugin settings UI, management API, and OpenA…
AshDevFr Feb 7, 2026
e0274cb
feat(plugins): add sync provider protocol, background task, and AniLi…
AshDevFr Feb 7, 2026
05f1e1c
feat(plugins): add recommendation engine protocol, API, UI, and AniLi…
AshDevFr Feb 7, 2026
3c57877
chore(plugins): auto-discover plugins in Makefile, add new plugins to CI
AshDevFr Feb 7, 2026
1e80b2f
refactor(plugins): consolidate SDK types and deduplicate server boile…
AshDevFr Feb 7, 2026
5b9c9a2
feat(plugins): add cross-reference external IDs to metadata protocol
AshDevFr Feb 7, 2026
eee836f
fix(mangabaka): prioritize exact title matches in auto-match scoring
AshDevFr Feb 7, 2026
efc084e
feat(plugins): match sync-pulled entries to series via externalIdSource
AshDevFr Feb 7, 2026
ab3299a
refactor(plugins): remove deprecated syncProvider in favor of userSyn…
AshDevFr Feb 7, 2026
1b70373
fix(plugins): use consistent "integration" terminology in user-facing…
AshDevFr Feb 7, 2026
9a258ea
fix(docker): add missing recommendations-anilist and sync-anilist plu…
AshDevFr Feb 7, 2026
4ce5bae
fix(plugins): only show Metadata Provider badge when capability is no…
AshDevFr Feb 7, 2026
d0a3fed
refactor(web): replace manual type definitions with generated OpenAPI…
AshDevFr Feb 7, 2026
af4a2e0
fix(web): improve plugin form placeholders
AshDevFr Feb 7, 2026
f0a42c7
refactor(web): move plugin permissions to capability-aware configure …
AshDevFr Feb 7, 2026
d11b004
refactor(plugins): rename userSyncProvider to userReadSync across cod…
AshDevFr Feb 8, 2026
52d54ab
fix(plugins): infer plugin_type from manifest capabilities on manifes…
AshDevFr Feb 8, 2026
2016ec9
refactor(plugins): rename recommendationProvider to userRecommendatio…
AshDevFr Feb 8, 2026
ec71362
feat(plugins): add bidirectional sync, personal access tokens, and us…
AshDevFr Feb 8, 2026
49b8cd0
feat(plugins): add configurable push with volumes/chapters and fix cr…
AshDevFr Feb 8, 2026
4fd2b53
feat(plugins): add sync error reporting, improve AniList docs, and si…
AshDevFr Feb 8, 2026
511484a
feat(plugins): add rating and notes sync to AniList plugin
AshDevFr Feb 8, 2026
a40f5e4
feat(plugins): add auto-pause and auto-drop for stale AniList series
AshDevFr Feb 8, 2026
5497db5
feat(plugins): add recommendation plugin UI, task handler, and librar…
AshDevFr Feb 9, 2026
6bdeab0
fix(plugins): fix IntegrationsSettings test and apply formatting
AshDevFr Feb 9, 2026
4d6ff05
feat(plugins): split InitializeParams config and enrich sync protocol
AshDevFr Feb 9, 2026
e894da0
feat(plugins): replace PushConfig with CodexSyncSettings and separate…
AshDevFr Feb 9, 2026
df4cb46
feat(plugins): make reference plugins showcase-quality with tests and…
AshDevFr Feb 9, 2026
629b242
feat(plugins): add batch query methods and eliminate N+1 patterns in …
AshDevFr Feb 9, 2026
adc36f4
feat(plugins): wire OAuth token refresh into plugin manager
AshDevFr Feb 9, 2026
0602237
feat(plugins): structural cleanup — split large files, wire PluginSto…
AshDevFr Feb 9, 2026
95912a4
feat(plugins): add security hardening — OAuth cleanup scheduling, sto…
AshDevFr Feb 10, 2026
8d4f54f
feat(plugins): deduplicate sync and recommendation tasks per user+plugin
AshDevFr Feb 10, 2026
f9dc58e
test(plugins): add recommendation API data transformation and error p…
AshDevFr Feb 10, 2026
fe4ceda
feat(plugins): add fetch timeouts, rate-limit retry, pagination, and …
AshDevFr Feb 10, 2026
bbc55cb
refactor(plugins): split PluginConfigModal into sub-components and ge…
AshDevFr Feb 10, 2026
2a844d9
docs(plugins): add security model, privacy, and OAuth troubleshooting…
AshDevFr Feb 10, 2026
9e8f40b
refactor(plugins): remove deprecated SDK exports and replace magic st…
AshDevFr Feb 10, 2026
e2ba4e1
test(plugins): add recommendation scoring, ID resolution, and merge l…
AshDevFr Feb 10, 2026
541868e
fix(plugins): replace string matching with structured OAuth error cla…
AshDevFr Feb 10, 2026
c5232c5
perf(plugins): use database-level JSON filtering for task deduplication
AshDevFr Feb 10, 2026
2354f0f
refactor(plugins): replace blanket dead_code suppressions with target…
AshDevFr Feb 10, 2026
fefd602
docs(plugins): rewrite developer documentation to reflect current plu…
AshDevFr Feb 10, 2026
6255525
docs(plugins): document encryption key setup and rotation procedure
AshDevFr Feb 10, 2026
54aa6bf
refactor(plugins): remove ~540 lines of dead code and fix unsafe ApiE…
AshDevFr Feb 10, 2026
2e5c95f
feat(plugins): add searchFallback user config toggle to recommendatio…
AshDevFr Feb 10, 2026
c769531
feat(plugins): add search fallback support to sync-anilist plugin
AshDevFr Feb 10, 2026
ef9f8e9
test(plugins): add searchFallback toggle and title-based search tests
AshDevFr Feb 10, 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
4 changes: 4 additions & 0 deletions .gitea/workflows/build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,8 @@ jobs:
- metadata-echo
- metadata-mangabaka
- metadata-openlibrary
- recommendations-anilist
- sync-anilist
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
Expand Down Expand Up @@ -779,6 +781,8 @@ jobs:
- metadata-echo
- metadata-mangabaka
- metadata-openlibrary
- recommendations-anilist
- sync-anilist
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
Expand Down
2 changes: 2 additions & 0 deletions .gitea/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,8 @@ jobs:
- metadata-echo
- metadata-mangabaka
- metadata-openlibrary
- recommendations-anilist
- sync-anilist
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
Expand Down
4 changes: 4 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -231,6 +231,8 @@ jobs:
- metadata-echo
- metadata-mangabaka
- metadata-openlibrary
- recommendations-anilist
- sync-anilist
steps:
- name: Install base dependencies
run: |
Expand Down Expand Up @@ -832,6 +834,8 @@ jobs:
- metadata-echo
- metadata-mangabaka
- metadata-openlibrary
- recommendations-anilist
- sync-anilist
steps:
- name: Install base dependencies
run: |
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,8 @@ jobs:
- metadata-echo
- metadata-mangabaka
- metadata-openlibrary
- recommendations-anilist
- sync-anilist
steps:
- name: Install base dependencies
run: |
Expand Down
3 changes: 2 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -126,9 +126,10 @@ lettre = { version = "0.11", default-features = false, features = [
"builder",
] }

# HTTP Client (for plugin cover downloads)
# HTTP Client (for plugin cover downloads and OAuth token exchange)
reqwest = { version = "0.12", default-features = false, features = [
"rustls-tls",
"json",
] }

# API Documentation
Expand Down
16 changes: 15 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,9 @@ test-fast-postgres-run: ## Run PostgreSQL tests with nextest (assumes DB running
docs-install: ## Install documentation dependencies
cd docs && npm install

docs-outdated: ## Check for outdated documentation dependencies
cd docs && npm outdated

docs-start: ## Start documentation dev server
cd docs && npm start

Expand Down Expand Up @@ -215,6 +218,9 @@ frontend-mock-fresh: openapi-all ## Regenerate API types, then start frontend wi
frontend-install: ## Install frontend dependencies
cd web && npm install

frontend-outdated: ## Check for outdated frontend dependencies
cd web && npm outdated

openapi: ## Generate OpenAPI spec from backend
cargo run -- openapi --output web/openapi.json
@echo "$(GREEN)OpenAPI spec generated!$(NC)"
Expand All @@ -241,7 +247,7 @@ frontend-lint-fix: ## Run frontend lint with auto-fix
# Plugin Development
# =============================================================================

PLUGIN_DIRS := sdk-typescript metadata-echo metadata-mangabaka metadata-openlibrary
PLUGIN_DIRS := $(notdir $(patsubst %/package.json,%,$(wildcard plugins/*/package.json)))

plugins-install: ## Install dependencies for all plugins
@echo "$(BLUE)Installing plugin dependencies...$(NC)"
Expand All @@ -251,6 +257,14 @@ plugins-install: ## Install dependencies for all plugins
done
@echo "$(GREEN)All plugin dependencies installed!$(NC)"

plugins-outdated: ## Check for outdated plugin dependencies
@echo "$(BLUE)Checking for outdated plugin dependencies...$(NC)"
@for dir in $(PLUGIN_DIRS); do \
echo "$(YELLOW)Checking $$dir...$(NC)"; \
(cd plugins/$$dir && npm outdated); \
done
@echo "$(GREEN)All plugin dependencies up to date!$(NC)"

plugins-build: ## Build all plugins
@echo "$(BLUE)Building plugins...$(NC)"
@for dir in $(PLUGIN_DIRS); do \
Expand Down
17 changes: 15 additions & 2 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,8 @@ services:
- ./plugins/metadata-mangabaka/dist:/opt/codex/plugins/metadata-mangabaka/dist:ro
- ./plugins/metadata-echo/dist:/opt/codex/plugins/metadata-echo/dist:ro
- ./plugins/metadata-openlibrary/dist:/opt/codex/plugins/metadata-openlibrary/dist:ro
- ./plugins/recommendations-anilist/dist:/opt/codex/plugins/recommendations-anilist/dist:ro
- ./plugins/sync-anilist/dist:/opt/codex/plugins/sync-anilist/dist:ro
environment:
RUST_BACKTRACE: 1
# Email configuration for Mailhog
Expand All @@ -102,6 +104,9 @@ services:
CODEX_ENCRYPTION_KEY: "pjImnrzPzSmuvBKkzWAlTzrfyZ9O3pU/9IKuRT94Y/w="
# Disable workers in web container (workers run in separate container)
CODEX_DISABLE_WORKERS: "true"
# OAuth redirect URI base (must match the externally-facing URL users see in their browser)
# In dev, the Vite frontend on :5173 proxies API calls to the backend
CODEX_AUTH_OIDC_REDIRECT_URI_BASE: "http://localhost:5173"
# Configuration overrides (optional - uses CODEX_ prefix)
# Uncomment and modify as needed to override config.docker.yaml values
# Database connection
Expand Down Expand Up @@ -148,6 +153,8 @@ services:
- ./plugins/metadata-mangabaka/dist:/opt/codex/plugins/metadata-mangabaka/dist:ro
- ./plugins/metadata-echo/dist:/opt/codex/plugins/metadata-echo/dist:ro
- ./plugins/metadata-openlibrary/dist:/opt/codex/plugins/metadata-openlibrary/dist:ro
- ./plugins/recommendations-anilist/dist:/opt/codex/plugins/recommendations-anilist/dist:ro
- ./plugins/sync-anilist/dist:/opt/codex/plugins/sync-anilist/dist:ro
command:
[
"cargo",
Expand Down Expand Up @@ -207,6 +214,8 @@ services:
- /plugins/metadata-echo/node_modules
- /plugins/metadata-mangabaka/node_modules
- /plugins/metadata-openlibrary/node_modules
- /plugins/recommendations-anilist/node_modules
- /plugins/sync-anilist/node_modules
command:
- sh
- -c
Expand All @@ -216,13 +225,17 @@ services:
cd /plugins/metadata-echo && npm install && npm run build &&
cd /plugins/metadata-mangabaka && npm install && npm run build &&
cd /plugins/metadata-openlibrary && npm install && npm run build &&
cd /plugins/recommendations-anilist && npm install && npm run build &&
cd /plugins/sync-anilist && npm install && npm run build &&
echo 'Initial build complete. Watching for changes...' &&
npm install -g concurrently &&
concurrently --names 'sdk,metadata-echo,metadata-mangabaka' --prefix-colors 'blue,green,yellow' \
concurrently --names 'sdk,echo,mangabaka,openlibrary,rec-anilist,sync-anilist' --prefix-colors 'blue,green,yellow,magenta,cyan,red' \
"cd /plugins/sdk-typescript && npm run dev" \
"cd /plugins/metadata-echo && npm run dev" \
"cd /plugins/metadata-mangabaka && npm run dev" \
"cd /plugins/metadata-openlibrary && npm run dev"
"cd /plugins/metadata-openlibrary && npm run dev" \
"cd /plugins/recommendations-anilist && npm run dev" \
"cd /plugins/sync-anilist && npm run dev"
networks:
- codex-network
profiles:
Expand Down
Loading
Loading