LinkSyncServer: - Fix app.py imports, add CORS middleware, lifespan events - Create api/routes.py router aggregator - Create config/settings.py for centralized configuration - Rewrite models/base.py with proper relationships and serialization - Rewrite all API endpoints with real DB integration (auth, links, collections, sync, queries, tags) - Add admin endpoints (user management, stats, audit log) - Complete query parser with recursive descent and proper precedence - Complete query executor with set operations and field filters - Set up Alembic migrations with initial schema - Create web interface (templates, CSS, JS) - Add 42 passing tests (auth, links, collections, queries) - Add deploy.ps1 and deploy.sh scripts - Update README with deployment workflow LinkSyncExtension: - Create utils/api.js (REST client with retries, auth, error handling) - Create utils/sync.js (3 sync modes + conflict detection) - Create utils/collection.js (collection management) - Create utils/query-engine.js (client-side query parser) - Rewrite background.js (sync loop, bookmark events, message routing) - Rewrite popup.js (tabs, settings modal, notifications, CRUD) - Update popup.html (tabbed interface, query builder, modal) - Update popup.css (full redesign) - Create content/content.js (page metadata extraction) - Create options.html/js (dedicated settings page) - Generate icons (48x48, 96x96) - Update manifest.json (host permissions, content scripts, options) - Create AGENTS.md
54 lines
1.1 KiB
TOML
54 lines
1.1 KiB
TOML
# LinkSyncServer Project Configuration
|
|
[build-system]
|
|
requires = ["setuptools>=61.0"]
|
|
build-backend = "setuptools.build_meta"
|
|
|
|
[project]
|
|
name = "linksync-server"
|
|
version = "1.0.0"
|
|
description = "Self-hosted bookmark server with advanced collection capabilities"
|
|
requires-python = ">=3.12"
|
|
dependencies = [
|
|
"fastapi==0.109.0",
|
|
"uvicorn[standard]==0.27.0",
|
|
"sqlalchemy==2.0.25",
|
|
"psycopg2-binary==2.9.9",
|
|
"alembic==1.13.1",
|
|
"python-jose[cryptography]==3.3.0",
|
|
"bcrypt==4.1.2",
|
|
"jinja2==3.1.3",
|
|
"pydantic==2.6.1",
|
|
"bcrypt==4.1.2",
|
|
]
|
|
|
|
[project.optional-dependencies]
|
|
dev = [
|
|
"pytest==8.0.0",
|
|
"pytest-cov==4.1.0",
|
|
"ruff==0.1.0",
|
|
"mypy==1.8.0",
|
|
]
|
|
|
|
[tool.setuptools.packages.find]
|
|
where = ["."]
|
|
include = ["linksync_server*"]
|
|
|
|
[tool.pytest.ini_options]
|
|
testpaths = ["tests"]
|
|
python_files = ["test_*.py"]
|
|
python_functions = ["test_*"]
|
|
addopts = "-v --tb=short"
|
|
filterwarnings = ["ignore::DeprecationWarning"]
|
|
|
|
[tool.ruff]
|
|
line-length = 88
|
|
target-version = "py312"
|
|
|
|
[tool.ruff.lint]
|
|
select = ["E", "F", "I", "N"]
|
|
ignore = ["E501", "E741"]
|
|
|
|
[tool.mypy]
|
|
python_version = "3.12"
|
|
warn_return_any = true
|
|
warn_unused_configs = true |