Commit Graph
84 Commits
Author SHA1 Message Date
Alexandre Teixeira db41d7e822 feat(runtime): bind process and job resources to authority 2026-10-02 18:54:09 +01:00
Alexandre Teixeira 571f685ad5 feat(runtime): bind remote and owned resources to authority 2026-10-02 03:00:46 +01:00
Alexandre Teixeira ba3e631d58 feat(runtime): bind native filesystem operations to resource identities 2026-10-02 01:19:32 +01:00
Alexandre Teixeira 293bd07fa9 Merge remote-tracking branch 'preview-upstream/lab' into feature/runtime-containment 2026-10-02 00:09:38 +01:00
Alexandre Teixeira 57143a14ba fix(runtime): verify namespace init death and record Wave 3-S validation 2026-10-01 23:17:01 +01:00
Alexandre Teixeira 255bff1f76 fix(browser): derive batch navigation outcome from command rows
A batch whose open succeeded but whose later command failed was recorded
as a failed navigation, so a following observation was wrongly labelled
stale. Use the per-command rows; when the outcome cannot be determined,
treat the page as unknown instead of claiming either result.
2026-10-01 21:03:00 +01:00
Alexandre Teixeira 576abb012d feat(browser): deterministic private_browser lifecycle (Wave 5A)
Own each agent-browser session as a browser tree: the daemon's POSIX
session, its runtime files and its Chrome profile. Timeouts, launch
failures, bootstrap recovery, cancellation and shutdown clean that tree
and verify nothing survives, instead of killing only the daemon and
orphaning Chrome. Per-call cleanup no longer sweeps every Chrome under
the runtime TMPDIR.

Sessionless calls get an ephemeral browser closed before returning.
Actions on one session are serialized. Recovery is bounded by one
deadline with at most one retry for local HTML open, and the retry flag
is no longer model-visible. Observations after a failed navigation are
marked stale. read URL navigates and extracts in one batch because
agent-browser has no read command. Results carry a browser_lifecycle
receipt with stages, timings, ownership and cleanup evidence.

Playwright MCP tool calls are bounded by
ODYSSEUS_BROWSER_MCP_CALL_TIMEOUT_S and are not retried. research_navigator
now passes timeout_ms.
2026-10-01 20:59:27 +01:00
Alexandre Teixeira 9d0257134f feat(runtime): enforce server request authority 2026-10-01 18:35:41 +01:00
Alexandre Teixeira f4793696f4 merge: reconcile Wave 1.1 with post-PR40 lab
Merge canonical lab 9557b8d5909eb4a885c3bf49e19a65dd904f8c1d exactly once.
Retain invocation journal ownership and lineage, provider terminal ordering,
teacher handoff, framed DONE handling, and canonical authority/Ajax routing.

Combine dynamic dispatch receipts with lab policy forwarding. Adapt native
shell/patch evidence, explicit TUI verifiers, and artifact recovery presentation.
Refresh generated configuration source links and strengthen adapter regressions.

Validation: focused 2118 passed; Wave 1.1 script 2291 passed; broad runtime
5649 passed; full pytest 11581 passed, 53 skipped, 2 xfailed, 6 subtests passed.
Compileall 1689 Python files; syntax 279 JS and 82 MJS files; diff and
conflict-marker checks passed.
2026-10-01 09:09:55 +01:00
Léo 10cb8fc669 chore(tools): add a read-only ref-to-ref parity audit
`lab` and the public `dev` line share only the repository's first commit as a
merge base, so `git log lab..dev` lists two thousand commits that are almost
all already present on both sides under different SHAs. Nothing in that output
says which public fixes never reached `lab`, which is the only question that
matters before `lab` becomes a release.

`scripts/ref_parity_audit.py` samples the most distinctive added lines from
each commit in the range and searches the other tree for them with
`git grep -F`, then reports the file-level presence diff. The two complement
each other: a commit whose probes are all found while one of the files it added
is missing from the target is a fix whose production change was reproduced
without its test, which the line sampling alone cannot see.

Probes are stripped of indentation and searched for anywhere in the tree, so a
port that moved or was re-indented still reads as present. Verdicts are
absent / partial / present / no-probe, and the report says outright that the
commit verdicts are a heuristic while the two file lists are exact.

Read-only by construction: `git log`, `show`, `diff`, `grep`, `ls-tree` and
`merge-base` only, no remote access, and it does not import the app package.
2026-09-30 11:53:31 +02:00
Alexandre Teixeira b241bb3a7b fix(runtime): close completion stream bypass and preserve explanations 2026-09-26 14:13:40 +01:00
pewdiepie-archdaemon 1eb1afc88b Verify research-before-streaming at interactive temperature 2026-09-17 22:48:03 +00:00
pewdiepie-archdaemon b693367e4f Record single-bubble and Markdown live verification 2026-09-17 22:27:03 +00:00
pewdiepie-archdaemon 1d8f73b9a0 Record live streaming and final reconciliation checks 2026-09-17 22:12:44 +00:00
pewdiepie-archdaemon 4de1a4b9bb Record wording robustness probes and source-loss replay evidence 2026-09-17 22:02:34 +00:00
pewdiepie-archdaemon 31f9e11c0f Record completion-order replay and constrained fallback checks 2026-09-17 21:52:39 +00:00
pewdiepie-archdaemon ec37ce3059 Record clean referent replay and completion-order verification 2026-09-17 21:50:30 +00:00
pewdiepie-archdaemon a312e918e7 Validate clarification and correct context-test setup; record rejected prompt experiment 2026-09-17 21:49:00 +00:00
pewdiepie-archdaemon cb305ca45e Record context-aware clarification scope and live validation 2026-09-17 21:46:33 +00:00
pewdiepie-archdaemon f8fc4ec4f7 Record controlled missing-referent and schema-omission diagnostics 2026-09-17 21:44:46 +00:00
pewdiepie-archdaemon e066b5d4dc Record extraction replay and casual citation contract fix 2026-09-17 21:42:06 +00:00
pewdiepie-archdaemon 40606802ec Record extraction verification and remaining research failures 2026-09-17 21:40:20 +00:00
pewdiepie-archdaemon d924ae3e26 Record live dispatch improvement and source-retrieval exhaustion defect 2026-09-17 21:37:34 +00:00
pewdiepie-archdaemon 819850b434 Record completed 23-case sweep and deploy pending search fixes 2026-09-17 21:35:12 +00:00
pewdiepie-archdaemon ddba5d3ce5 Record source-only shortcut failure from broad prompt sweep 2026-09-17 21:33:17 +00:00
pewdiepie-archdaemon 6be1db32de Record confirmed named-search failure and pending deployment 2026-09-17 21:31:09 +00:00
pewdiepie-archdaemon a23d709056 Record controlled tool-choice argument failures and broad replay 2026-09-17 21:28:52 +00:00
pewdiepie-archdaemon 5a855b5db3 Record controlled retrieval and recovery-history findings 2026-09-17 21:26:46 +00:00
pewdiepie-archdaemon 4d1abfb22b Record latency decomposition and saved-evidence synthesis control 2026-09-17 21:24:29 +00:00
pewdiepie-archdaemon 51feedea6b Record failed latency improvement and timed replay scope 2026-09-17 21:22:22 +00:00
pewdiepie-archdaemon bf137aa7aa Record query fabrication evidence and unsatisfactory browser replays 2026-09-17 21:20:17 +00:00
pewdiepie-archdaemon deb955f812 Record news synthesis replay and remaining latency failures 2026-09-17 21:18:23 +00:00
pewdiepie-archdaemon 4910e0e5f7 Record live recovery evidence and contradictory research controls 2026-09-17 21:15:26 +00:00
pewdiepie-archdaemon a88a1ae11b Record live informal search failures and targeted repairs 2026-09-17 21:13:21 +00:00
pewdiepie-archdaemon 5a5a2c5195 Record latency and documentation relevance audit results 2026-09-17 21:00:48 +00:00
pewdiepie-archdaemon f4e1afeebe Record successful official-link completion replay 2026-09-17 20:53:40 +00:00
pewdiepie-archdaemon 3a14d9f5cc Record publication-filter replay evidence and remaining completion gaps 2026-09-17 20:48:57 +00:00
pewdiepie-archdaemon edcd94a312 Record verified text routing fixes and remaining quality failures 2026-09-17 20:42:41 +00:00
pewdiepie-archdaemon 20361b3de8 Control sampling and canonical prompt in search diagnostics 2026-09-17 20:37:32 +00:00
pewdiepie-archdaemon 39a6a49664 Stop appending unverified search citations to synthesized answers 2026-09-17 20:32:46 +00:00
pewdiepie-archdaemon 87b6a37885 Record search quality failures and separate mechanics from review 2026-09-17 20:26:53 +00:00
pewdiepie-archdaemon 218d762427 Consolidate Odysseus agent harness and tool contracts 2026-09-17 10:07:40 +00:00
pewdiepie-archdaemon 84aa9a91de Squash Odysseus development history 2026-09-11 06:04:19 +00:00
RaresKeY c9dd68d890 refactor(docs): separate Pages site source (#6176)
* refactor(docs): separate Pages site source

* fix(docs): preserve published guide pages

* fix(ci): run asset ownership tests for site changes

* fix(docs): track future website media

* fix(ci): let Pages deployments finish

* build(deps): update Pages checkout action

* fix(ci): follow moved setup guide

* fix(docs): repair published setup guide

* fix(docs): retarget preview encoder
2026-08-27 10:20:36 +02:00
RaresKeY f562bfee01 fix(speech): define the Kokoro optional install contract (#5962) 2026-08-16 23:39:12 +01:00
LéoandAlexandre Teixeira b19d327f03 fix(auth): derive the session cookie Secure flag from the request scheme (#6048)
* fix(auth): derive the session cookie Secure flag from the request scheme

SECURE_COOKIES only marked the login cookie Secure when it was explicitly
set to true, so an HTTPS login on an install that never set it handed out a
session cookie the browser is happy to send back in cleartext.

Unset now derives the flag from the request: the connection scheme, which
uvicorn's proxy-headers middleware rewrites for the proxies it trusts, or
X-Forwarded-Proto for a terminator that is not on a trusted address. That
is the same test core/middleware.py already applies before sending HSTS, so
the two stop disagreeing about whether a request arrived over TLS. An
explicit true still forces the flag on and an explicit false turns it off
for an install still answering on both HTTP and HTTPS. Strictly more Secure
flags than before and never fewer.

Empty counts as unset, because docker-compose pinned SECURE_COOKIES=false
for every container; the compose files now pass the variable through
unset, the way FASTEMBED_CACHE_PATH already does.

The helper and its decision order come from #3799, which was closed for
being too large to review and whose six replacement PRs dropped this fix.

Part of #3803.

* docs(setup): flag the leftover SECURE_COOKIES=false on upgrades

The old default was false, so an install set up before scheme derivation
can still carry an explicit SECURE_COOKIES=false in its own .env. That
value stays authoritative, so HTTPS logins keep getting a non-Secure
session cookie even after the tracked compose defaults are updated by a
pull. Say so where people look: the security notes and the variable's
own comment in .env.example.

* docs(setup): align TLS guidance with scheme-derived cookies

---------

Co-authored-by: Alexandre Teixeira <alexandremagteixeira@gmail.com>
2026-08-16 22:56:36 +01:00
LéoandAlexandre Teixeira f9235ebbf1 docs(setup): document the HTTP/2 reverse-proxy setup (#6046)
* docs(setup): document the HTTP/2 reverse-proxy setup

The "private or proxied deployments" section named Caddy, nginx and Traefik
but gave no runnable config, and never mentioned the main reason to bother:
the frontend is unbundled ES modules, so a page load is a few hundred small
same-origin requests. Over HTTP/1.1 the 6-connection cap serialises those
into dozens of round trips, which is invisible on localhost and dominates
load time over a LAN or VPN.

Adds a five-step setup you can paste: a Caddyfile for each of the three ways
people reach these boxes (public domain, Tailscale, own certificate), how to
run the proxy in the foreground and then as a service, the .env keys that
have to follow the origin, and a curl one-liner to confirm HTTP/2 actually
negotiated.

Also covers what bites when moving an existing install behind TLS:
SECURE_COOKIES applying regardless of the scheme the request arrived on,
OAUTH_REDIRECT_BASE_URL still defaulting to localhost because the MCP
redirect is registered up front rather than derived per request, and HSTS
being host-wide and port-agnostic. Notes that a custom HTTPS port does not
stop Caddy binding port 80 for the redirect, which is the failure I hit
first.

Docs only — no code change is needed to run behind HTTP/2 today.

* docs(setup): clarify HTTP/2 and origin migration

---------

Co-authored-by: Alexandre Teixeira <alexandremagteixeira@gmail.com>
2026-08-14 18:44:42 +01:00
858c872832 docs(setup): document supports_tools opt-in for manual Ollama /v1 endpoints (#5835)
* docs(setup): document supports_tools opt-in for manual Ollama /v1 endpoints

Manually-added Ollama /v1 endpoints default to the conservative
fenced-block tool-calling path, and there's currently no UI control to
opt a specific endpoint into native tool calling (#5192). The
supports_tools PATCH flag already exists and works, it just wasn't
documented anywhere a user could find it without reading source.

Adds a short section next to the existing "Ollama with Docker" notes
explaining when to use it and the exact API call, framed as an
advanced/opt-in setting per the maintainer's stated preference against
a casual UI toggle (#3195/#3438).

* docs(setup): clarify supports_tools false semantics

---------

Co-authored-by: Alexandre Teixeira <111787685+alteixeira20@users.noreply.github.com>
Co-authored-by: Alexandre Teixeira <alexandremagteixeira@gmail.com>
2026-08-12 04:46:11 +01:00
nopozandRaresKeY b07c1e3b33 ci: add CodeQL advanced setup to scan pull requests before merge (#5250)
* ci: add CodeQL advanced setup to scan pull requests before merge

* ci(codeql): preserve scheduled scans

Add a weekly advanced-setup scan and update the security CI guide so default setup remains disabled.

---------

Co-authored-by: RaresKeY <158580472+RaresKeY@users.noreply.github.com>
2026-07-21 10:18:06 -07:00
Boody fe0748308e Merge pull request #5286 from tse-jeff/fix/snap-wsl2-gpu-passthrough
fix(docker): detect snap+WSL2 GPU passthrough incompatibility
2026-07-21 13:57:32 +03:00