This persists work that had been living only in the cookbook docker
container's writable layer — never committed to the host source. Brought
back to git intact, app.py registration re-applied surgically on top of
current main (not the older container copy, which would have regressed
the Windows MIME fix, asynccontextmanager lifespan, and webhook auth
exempts).
routes/codex_routes.py (new):
- GET /api/codex/capabilities — what this Odysseus exposes.
- GET /api/codex/plugin.zip — downloads integrations/codex as a zip.
- GET /api/codex/todos — scope-gated todos:read|write.
- POST /api/codex/todos — scope-gated todos:write.
- GET /api/codex/emails — scope-gated email:read|draft|send.
- GET /api/codex/emails/{uid} — single-message fetch.
- _scope_owner() enforces api_token scopes before touching user data.
routes/api_token_routes.py (+103 lines):
- Adds Codex-token-specific issuance + revocation paths.
integrations/codex/ (new bundle, shipped via /api/codex/plugin.zip):
- README.md — install instructions.
- .codex-plugin/plugin.json — Codex plugin manifest.
- scripts/odysseus_api.py — Python client used by the skill.
- skills/odysseus/SKILL.md — Codex skill definition.
static/js/settings.js (+253 lines):
- New "Codex Agent" option in the Integrations dropdown.
- Add / edit panel with plugin-bundle download link + curl-with-token
install instructions per agent.
app.py:
- 7-line surgical change: capture email_router = setup_email_routes()
and register setup_codex_routes(email_router=email_router) after the
email module so the Codex routes can borrow its helpers.
23 lines
764 B
JSON
23 lines
764 B
JSON
{
|
|
"name": "odysseus",
|
|
"version": "0.1.1",
|
|
"description": "Connect Codex to a scoped Odysseus instance.",
|
|
"author": {
|
|
"name": "Odysseus"
|
|
},
|
|
"skills": "./skills/",
|
|
"interface": {
|
|
"displayName": "Odysseus",
|
|
"shortDescription": "Use scoped Odysseus tools from Codex.",
|
|
"longDescription": "Connects Codex terminal sessions to Odysseus through user-controlled scoped API tokens. Codex must use /api/codex/* endpoints so Odysseus Settings can enforce tool access.",
|
|
"developerName": "Odysseus",
|
|
"category": "Productivity",
|
|
"capabilities": [
|
|
"todos",
|
|
"email",
|
|
"scoped-api"
|
|
],
|
|
"defaultPrompt": "Use Odysseus only through configured scoped access. Check capabilities before reading or writing data."
|
|
}
|
|
}
|