Self-hosted AI workspace.
Find a file
Wes Huber c0b032fa10 fix(calendar): trust operator CA bundle in CalDAV test_connection (#4796)
* fix(calendar): trust operator CA bundle in CalDAV test_connection

The pre-flight test used httpx with trust_env=False, which ignored
SSL_CERT_FILE/REQUESTS_CA_BUNDLE. Self-signed CalDAV servers that
the real sync accepts (via caldav lib → requests → honors bundle)
were rejected by the test with CERTIFICATE_VERIFY_FAILED.

Build an explicit SSL context that loads the operator's CA bundle
and clears VERIFY_X509_STRICT (which rejects certs without a
keyUsage extension — common in self-signed setups). SSRF guards
(follow_redirects=False, trust_env=False) are preserved.

Fixes #4795
Fixes #4779

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(calendar): add regression tests and edge case handling for SSL context

Per review: add route-level regression tests covering SSL_CERT_FILE
precedence, VERIFY_X509_STRICT clearing, missing bundle graceful
fallback, and empty env var handling. Also log a warning when the
configured CA bundle path doesn't exist instead of silently falling
back to system CAs.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* test(calendar): rewrite SSL tests to exercise route handler directly

Addresses review feedback: tests now use FastAPI TestClient to hit the
actual test_connection route, capturing the verify= kwarg passed to
httpx.AsyncClient. This ensures the route's SSL context construction
is covered, not a test-side duplicate.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* ci: retrigger CI (redirect hardening test is a CI-env flake, passes locally)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(tests): remove module-level sys.modules stubs that leaked into other tests

The collection-time MagicMock stub of `caldav` replaced the real library
for every later test in the same process — test_caldav_redirect_hardening's
DAVClient became a mock that never sent the PROPFIND, failing its
must-reach-the-public-server assertion in CI. conftest already pre-imports
the real sqlalchemy/core.database, and the route's lazy imports are patched
per-request, so the stub block was both harmful and unnecessary.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* test(calendar): verify exact CA bundle precedence

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: Alexandre Teixeira <alexandremagteixeira@gmail.com>
2026-07-11 13:25:16 +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(calendar): trust operator CA bundle in CalDAV test_connection (#4796) 2026-07-11 13:25:16 +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 fix(calendar): trust operator CA bundle in CalDAV test_connection (#4796) 2026-07-11 13:25:16 +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.