mirror of
https://github.com/pewdiepie-archdaemon/odysseus.git
synced 2026-08-01 19:18:35 -04:00
Compare commits
4 Commits
8670aed9ad
...
discovery
| Author | SHA1 | Date | |
|---|---|---|---|
| 53ce95049d | |||
| 7b4c83089b | |||
| 6bc6ee9c7e | |||
| d190980f47 |
@@ -1,3 +1,5 @@
|
||||
# Odysseus
|
||||
|
||||
<p align="center">
|
||||
<img src="docs/odysseus-wordmark.png" alt="Odysseus" width="238">
|
||||
</p>
|
||||
@@ -9,6 +11,8 @@
|
||||
<p align="center">
|
||||
<a href="#quick-start">Quick Start</a> ·
|
||||
<a href="docs/setup.md">Setup Guide</a> ·
|
||||
<a href="docs/ARCHITECTURE.md">Architecture</a> ·
|
||||
<a href="SECURITY.md">Security</a> ·
|
||||
<a href="CONTRIBUTING.md">Contributing</a> ·
|
||||
<a href="ROADMAP.md">Roadmap</a>
|
||||
</p>
|
||||
@@ -51,15 +55,15 @@ Native installs, GPU notes, Windows/macOS instructions, HTTPS, and configuration
|
||||
|
||||
## Demo
|
||||
|
||||
A full hover-to-play tour lives on the landing page: [`docs/index.html`](docs/index.html).
|
||||
Explore the interface through the [interactive product tour](docs/index.html).
|
||||
|
||||
## Contributing
|
||||
|
||||
Help is welcome. The best entry points are fresh-install testing, provider setup bugs, mobile/editor polish, documentation, and small focused refactors. See [CONTRIBUTING.md](CONTRIBUTING.md), the [public roadmap](ROADMAP.md), and the open [GitHub issues](https://github.com/odysseus-dev/odysseus/issues).
|
||||
Help is welcome. The best entry points are fresh-install testing, provider setup bugs, mobile/editor polish, documentation, and small focused refactors. Read the [contributing guide](CONTRIBUTING.md), review the [public roadmap](ROADMAP.md), and browse the open [GitHub issues](https://github.com/odysseus-dev/odysseus/issues).
|
||||
|
||||
## 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](docs/setup.md#security-notes).
|
||||
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 or service ports publicly. Read the [security policy](SECURITY.md) and the [deployment security guidance](docs/setup.md#security-notes).
|
||||
|
||||
## Star History
|
||||
|
||||
@@ -73,4 +77,4 @@ Odysseus is a self-hosted workspace with powerful local tools. Keep auth enabled
|
||||
|
||||
## License
|
||||
|
||||
AGPL-3.0-or-later -- see [LICENSE](LICENSE) and [ACKNOWLEDGMENTS.md](ACKNOWLEDGMENTS.md).
|
||||
Licensed under AGPL-3.0-or-later. See the [license](LICENSE) and [acknowledgments](ACKNOWLEDGMENTS.md).
|
||||
|
||||
+3
-1
@@ -37,4 +37,6 @@ Only `.env.example`, docs, source, tests, and static assets should be committed.
|
||||
|
||||
## Reporting
|
||||
|
||||
Please report vulnerabilities privately via GitHub security advisories if available, or by opening a minimal issue that does not disclose exploit details.
|
||||
Report security vulnerabilities privately through [GitHub Security Advisories](https://github.com/odysseus-dev/odysseus/security/advisories/new).
|
||||
|
||||
Do not open a public issue or discussion, and do not disclose exploit details publicly.
|
||||
|
||||
+34
-2
@@ -1,7 +1,13 @@
|
||||
# Attachment References and Upload Storage
|
||||
|
||||
Odysseus stores uploaded bytes once under the configured upload directory and
|
||||
passes stable references through chat history, tools, and future artifact work.
|
||||
> [!NOTE]
|
||||
> This document records the current attachment-reference and upload-lifecycle
|
||||
> contract proposed for maintainer acceptance. Source code, tests, and
|
||||
> configuration remain authoritative for implementation-sensitive behaviour.
|
||||
|
||||
Odysseus stores chat and document attachment bytes under the configured upload
|
||||
directory and passes stable references through chat history, document flows, and
|
||||
tool context.
|
||||
The goal is to avoid duplicating large inline media payloads in
|
||||
`chat_messages.content` or the SQLite FTS index.
|
||||
|
||||
@@ -54,6 +60,32 @@ External MCP/custom tools should treat the URI and attachment ID as the stable
|
||||
contract and request bytes through an owner-checked server path, not by assuming
|
||||
host filesystem layout.
|
||||
|
||||
## Implementation evidence
|
||||
|
||||
The current contract is implemented primarily through:
|
||||
|
||||
- `src/upload_handler.py` for upload metadata, owner-aware resolution,
|
||||
reservations, cleanup, and deletion;
|
||||
- `src/attachment_refs.py` for compact persisted references and search-index
|
||||
sanitization;
|
||||
- `src/document_processor.py` for resolving attachments into chat/model context;
|
||||
- `src/tool_execution.py` for attachment manifests exposed to tools;
|
||||
- `routes/upload_routes.py` and `routes/document_helpers.py` for upload and
|
||||
retrieval paths.
|
||||
|
||||
Focused regression coverage includes:
|
||||
|
||||
- `tests/test_attachment_refs.py`;
|
||||
- `tests/test_upload_handler_cleanup.py`;
|
||||
- `tests/test_replace_messages_upload_reservations.py`;
|
||||
- `tests/test_resolve_upload_path_nondict.py`;
|
||||
- `tests/test_chat_preprocess_tool_policy.py`;
|
||||
- the upload, attachment, and PDF-marker cases in
|
||||
`tests/test_security_regressions.py`.
|
||||
|
||||
These tests cover compact persistence, owner isolation, path containment,
|
||||
cleanup safety, reservation-before-write behaviour, and traversal resistance.
|
||||
|
||||
## Retention and Deletion
|
||||
|
||||
Current retention behavior is conservative:
|
||||
|
||||
+35
-16
@@ -1,6 +1,28 @@
|
||||
# Odysseus Setup Guide
|
||||
|
||||
This page keeps the detailed install, deployment, troubleshooting, and configuration notes out of the front README.
|
||||
This guide covers installation, deployment, troubleshooting, and configuration.
|
||||
For a minimal Docker installation, start with the
|
||||
[repository README](../README.md#quick-start).
|
||||
|
||||
## On this page
|
||||
|
||||
- [Quick Start](#quick-start)
|
||||
- [Docker](#docker-recommended)
|
||||
- [Native Linux and macOS](#native-linux--macos)
|
||||
- [Apple Silicon](#apple-silicon)
|
||||
- [Native Windows](#native-windows)
|
||||
- [Troubleshooting and advanced setup](#troubleshooting--advanced-setup)
|
||||
- [Security notes](#security-notes)
|
||||
- [Configuration](#configuration)
|
||||
- [Architecture](#architecture)
|
||||
- [Data and backups](#data)
|
||||
|
||||
Related guidance:
|
||||
|
||||
- [Security policy](../SECURITY.md)
|
||||
- [Architecture overview](ARCHITECTURE.md)
|
||||
- [Backup and restore guide](backup-restore.md)
|
||||
- [Contributing guide](../CONTRIBUTING.md)
|
||||
|
||||
## Quick Start
|
||||
|
||||
@@ -15,8 +37,8 @@ On first setup, Odysseus creates an admin account (`admin` unless
|
||||
For Docker installs, the same line is in `docker compose logs odysseus`.
|
||||
Use that for the first login, then change it in **Settings**.
|
||||
|
||||
Contributing? See [CONTRIBUTING.md](../CONTRIBUTING.md) for setup, testing, and
|
||||
pull request guidelines.
|
||||
Contributing? See the [contributing guide](../CONTRIBUTING.md) for development
|
||||
setup, testing, and pull request guidelines.
|
||||
|
||||
### Docker (recommended)
|
||||
```bash
|
||||
@@ -441,8 +463,8 @@ uv pip sync requirements.lock # reproduce it exactly la
|
||||
### Outlook / Office 365 email
|
||||
Odysseus email accounts currently use IMAP/SMTP username-password auth. Outlook
|
||||
and Microsoft 365 generally require OAuth instead, so normal Microsoft mailbox
|
||||
passwords will fail. See [email-outlook.md](email-outlook.md) for the
|
||||
current limitation and the planned integration direction.
|
||||
passwords will fail. See the [Outlook and Microsoft 365 email guide](email-outlook.md)
|
||||
for the current limitation and planned integration direction.
|
||||
|
||||
## Security Notes
|
||||
Odysseus is a self-hosted workspace with powerful local tools: shell access, file uploads, model downloads, web research, email/calendar integrations, and API tokens. Treat it like an admin console.
|
||||
@@ -530,19 +552,16 @@ npx -y @playwright/mcp@latest --version
|
||||
That installs `@playwright/mcp` plus Playwright (~300MB total). Restart Odysseus and the server will register at startup.
|
||||
|
||||
## Architecture
|
||||
```
|
||||
app.py # FastAPI entry point
|
||||
core/ auth, database, middleware, constants
|
||||
src/ llm_core, agent_loop, agent_tools, chat_processor, search/
|
||||
routes/ chat, session, document, memory, model … endpoints
|
||||
services/ docs, memory, search, hwfit (Cookbook) …
|
||||
static/ index.html + app.js + style.css + js/ (modular front-end)
|
||||
docs/ landing page (index.html) + preview clips
|
||||
```
|
||||
|
||||
For stable high-level runtime structure, subsystem boundaries, and documentation
|
||||
authority, see the [architecture overview](ARCHITECTURE.md).
|
||||
|
||||
Source code, tests, and configuration remain authoritative for
|
||||
implementation-sensitive behaviour.
|
||||
|
||||
## Data
|
||||
All user data lives in `data/` (gitignored): `app.db` (sessions, messages, documents),
|
||||
`memory.json`, `presets.json`, `uploads/`, `personal_docs/`, `chroma/`, `settings.json`.
|
||||
|
||||
To back up or restore everything in `data/`, see the
|
||||
[Backup & Restore guide](backup-restore.md).
|
||||
To protect or recover this data, follow the
|
||||
[backup and restore guide](backup-restore.md).
|
||||
|
||||
@@ -10,6 +10,23 @@
|
||||
- **Implemented by:** #3842
|
||||
- **Status:** completed historical snapshot
|
||||
|
||||
- **Durable testing policy:** [`TESTING_STANDARD.md`](./TESTING_STANDARD.md)
|
||||
- **Current testing mechanics:** [`README.md`](./README.md)
|
||||
|
||||
## Disposition
|
||||
|
||||
This document is retained as a non-canonical historical record of the completed
|
||||
CLI test relocation.
|
||||
|
||||
Reusable testing rules are maintained in `TESTING_STANDARD.md`; current helper,
|
||||
taxonomy-runner, and execution mechanics are maintained in `README.md`, the test
|
||||
suite, and its supporting code.
|
||||
|
||||
Counts, residual-file observations, and path listings in this document are
|
||||
snapshot evidence only. They must not be maintained as durable repository truth.
|
||||
|
||||
Any additional test relocation requires a separately approved issue or work item.
|
||||
|
||||
## Purpose
|
||||
|
||||
This document preserves the reasoning, scope, and validation contract for the
|
||||
|
||||
@@ -2,6 +2,10 @@
|
||||
|
||||
> [!NOTE]
|
||||
> This is generated planning material based on the current test tree.
|
||||
>
|
||||
> It is non-canonical and disposable. Durable testing policy belongs in
|
||||
> `tests/TESTING_STANDARD.md`; active split selection and prioritization
|
||||
> belong in approved issues or the project tracker.
|
||||
> It does not define runtime behaviour or approve any test-file split.
|
||||
|
||||
## Purpose
|
||||
|
||||
@@ -443,6 +443,10 @@ def write_report(metrics: list[FileMetric], node_count_total: int) -> None:
|
||||
"",
|
||||
"> [!NOTE]",
|
||||
"> This is generated planning material based on the current test tree.",
|
||||
">",
|
||||
"> It is non-canonical and disposable. Durable testing policy belongs in",
|
||||
"> `tests/TESTING_STANDARD.md`; active split selection and prioritization",
|
||||
"> belong in approved issues or the project tracker.",
|
||||
"> It does not define runtime behaviour or approve any test-file split.",
|
||||
"",
|
||||
"## Purpose",
|
||||
|
||||
Reference in New Issue
Block a user