Self-hosted AI workspace.
Find a file
tanmayraut45 c161866199 CalDAV: close the DAVClient on sync and write-back paths (#4793)
_sync_blocking (src/caldav_sync.py) and _writeback_blocking
(src/caldav_writeback.py) each open their own caldav.DAVClient via
_build_dav_client, but never close it. The client owns an HTTP session
with a pooled connection; without a close() that connection is held until
process exit.

Previously the fix added explicit client.close() calls before each early
return and at the end of the DB finally block. This still leaked the
client when SessionLocal() raised before the DB try/finally was entered.

Now _sync_blocking wraps the entire post-construction path in an outer
try/finally that calls client.close() unconditionally, covering:
  - AuthorizationError / NotFoundError early return
  - URL-fallback failure early return
  - no-calendars early return
  - normal return after sync
  - SessionLocal() construction failure (new regression coverage)

_writeback_blocking already used a try/finally (unchanged).

- src/caldav_sync.py: replace scattered client.close() calls with a
  single outer try/finally block around the discovery + DB sync path
- tests/test_caldav_client_cleanup.py: add CalendarDeletedEvent to the
  database stub; add regression test for SessionLocal() failure path

Closes #4593
2026-07-11 13:03:24 +01:00
.github ci: add focused test guidance signal (#4982) 2026-07-03 21:17:28 +02:00
companion fix(companion): require chat scope for model inventory (#4319) 2026-06-16 01:15:05 +02:00
config/searxng Generate SearXNG secret on first boot 2026-06-01 11:03:02 +09:00
core Merge remote-tracking branch 'origin/dev' 2026-06-30 10:26:46 +00:00
docker fix(docker): make host Docker socket opt-in (#4902) 2026-06-30 19:54:51 +02:00
docs Merge pull request #4983 from michaelxer/fix-setup-link-4926-20260628 2026-07-06 03:18:54 +03:00
integrations Add Codex and Claude document draft integration 2026-06-09 14:27:53 +09:00
licenses feat(a11y): add a Text size control and an OpenDyslexic font option (#4210) 2026-06-22 13:53:46 +02:00
mcp_servers fix(email): enforce MCP account owner scope (#5234) 2026-07-05 13:13:56 +01:00
routes fix(email): atomically claim scheduled emails before sending (#5110) 2026-07-11 04:23:36 +01:00
scripts Skip vanished backup list entries (#2006) 2026-07-11 05:26:42 +01:00
services fix: TTS available crashes on non-string tts_provider (#2034) 2026-07-11 03:19:51 +01:00
specs docs(architecture): add Phase 0 runtime inventory document (#4148) 2026-06-16 04:57:24 +01:00
src CalDAV: close the DAVClient on sync and write-back paths (#4793) 2026-07-11 13:03:24 +01:00
static fix: _matchesCombo crashes on non-string keybind from server (#2049) 2026-07-11 03:15:19 +01:00
tests CalDAV: close the DAVClient on sync and write-back paths (#4793) 2026-07-11 13:03:24 +01:00
.dockerignore fix(devops): harden docker config defaults (#4349) 2026-06-16 04:03:43 +01:00
.env.example fix(docker): make host Docker socket opt-in (#4902) 2026-06-30 19:54:51 +02:00
.gitattributes Add native Windows compatibility layer 2026-06-01 15:09:47 +09:00
.gitignore pwa missing icons added (#428) 2026-06-15 16:00:13 +09:00
ACKNOWLEDGMENTS.md feat(a11y): add a Text size control and an OpenDyslexic font option (#4210) 2026-06-22 13:53:46 +02:00
app.py Merge remote-tracking branch 'origin/dev' 2026-07-07 00:51:34 +00:00
build-macos-app.sh macOS app: force native arm64 uvicorn on Apple Silicon 2026-06-02 20:56:53 +09:00
build-windows-portable.ps1 feat(launcher): add portable windows launcher (#976) 2026-06-16 04:58:16 +01:00
CONTRIBUTING.md Change host from 0.0.0.0 to 127.0.0.1 in CONTRIBUTING.md (#4422) 2026-06-16 13:40:47 +00:00
docker-compose.gpu-amd.yml fix(docker): make host Docker socket opt-in (#4902) 2026-06-30 19:54:51 +02:00
docker-compose.gpu-nvidia.yml fix(docker): make host Docker socket opt-in (#4902) 2026-06-30 19:54:51 +02:00
docker-compose.yml fix(docker): make host Docker socket opt-in (#4902) 2026-06-30 19:54:51 +02:00
Dockerfile fix(docker): install python-magic and libmagic for upload MIME sniffing 2026-06-27 17:31:46 +01:00
install-service.sh Odysseus v1.0 2026-05-31 23:58:26 +09:00
launch-windows.ps1 feat(launcher): add portable windows launcher (#976) 2026-06-16 04:58:16 +01:00
launcher.py feat(launcher): add portable windows launcher (#976) 2026-06-16 04:58:16 +01:00
LICENSE chore: backport main-only changes to dev AGPL relicense + Cookbook serve fix (#3704) 2026-06-09 23:20:34 +02:00
odysseus-ui.service fix: systemd service should serve on port 7000 to match Docker/setup/README (#1297) 2026-06-03 02:04:37 +09:00
Odysseus.spec feat(launcher): add portable windows launcher (#976) 2026-06-16 04:58:16 +01:00
package-lock.json chore(deps): remove unused @anthropic-ai/sdk dependency (#4566) 2026-06-19 09:40:35 +02:00
package.json chore(deps): remove unused @anthropic-ai/sdk dependency (#4566) 2026-06-19 09:40:35 +02:00
pyproject.toml test: add fast lane and duration visibility (#3659) 2026-06-09 20:11:47 +02:00
README.md Refresh README screenshot 2026-06-22 04:54:15 +00:00
requirements-optional.txt chore(deps): bump the python group with 3 updates (#3991) 2026-06-15 19:25:15 +09:00
requirements.txt fix(search): pin httpx connection to resolved IP to block DNS rebinding (#704) 2026-07-02 13:08:06 +01:00
ROADMAP.md docs: remove completed troubleshooting cookbook task from ROADMAP (#4906) 2026-07-10 22:29:20 +02:00
SECURITY.md Clarify private deployment hardening docs 2026-06-02 13:01:12 +09:00
setup.py fix(setup): load .env so a pre-seeded admin password is honored on native installs (#4787) 2026-06-23 20:08:05 +02:00
start-macos.sh fix(macos): rebuild incomplete venv instead of failing on re-run (#3106) 2026-06-15 16:12:19 +09:00
THREAT_MODEL.md docs: add THREAT_MODEL.md (#1111) 2026-06-02 22:40:37 +09:00
update_windows.bat Windows: add Docker update script 2026-06-02 20:45:32 +09:00

Odysseus

A self-hosted AI workspace for chat, agents, research, documents, email, notes, calendar, and local model workflows.

Quick Start · Setup Guide · Contributing · Roadmap

Packaging status

Odysseus interface


Quick Start

dev is the default branch and gets the newest changes first. Use main if you want the more curated branch.

git clone https://github.com/pewdiepie-archdaemon/odysseus.git
cd odysseus
cp .env.example .env
docker compose up -d --build

Open http://localhost:7000 when the containers are healthy. The first admin password is printed in docker compose logs odysseus.

Native installs, GPU notes, Windows/macOS instructions, HTTPS, and configuration live in the setup guide.

Features

  • Chat + Agents — local/API models, tools, MCP, files, shell, skills, and memory.
  • Cookbook — hardware-aware model recommendations, downloads, and serving.
  • Deep Research — multi-step web research with source reading and report generation.
  • Compare — blind side-by-side model testing and synthesis.
  • Documents — writing-first editor with AI edits, suggestions, Markdown, HTML, CSV, and syntax highlighting.
  • Email — IMAP/SMTP inbox with triage, tags, summaries, reminders, and reply drafts.
  • Notes, Tasks + Calendar — reminders, todos, scheduled agent tasks, and CalDAV sync.
  • Extras — gallery/image editor, themes, uploads, web search, presets, sessions, and 2FA.

Demo

A full hover-to-play tour lives on the landing page: docs/index.html.

Contributing

Help is welcome. The best entry points are fresh-install testing, provider setup bugs, mobile/editor polish, docs, and small focused refactors. See CONTRIBUTING.md and ROADMAP.md.

Security

Odysseus is a self-hosted workspace with powerful local tools. Keep auth enabled, keep private data out of Git, and do not expose raw model/service ports publicly. Deployment details are in the setup guide.

Star History

Star History Chart

License

AGPL-3.0-or-later -- see LICENSE and ACKNOWLEDGMENTS.md.