Commit graph

8720 commits

Author SHA1 Message Date
Thierry CH.
b4d57e9b47
Merge pull request #1703 from MODSetter/dev
Some checks are pending
Build and Push Docker Images / create_manifest (backend, surfsense-backend, -cuda126, cuda126) (push) Blocked by required conditions
Build and Push Docker Images / create_manifest (sandbox, surfsense-sandbox, , cpu) (push) Blocked by required conditions
Build and Push Docker Images / create_manifest (web, surfsense-web, , cpu) (push) Blocked by required conditions
Build and Push Docker Images / finalize_release (push) Blocked by required conditions
Build and Push Docker Images / compute_version (push) Waiting to run
Build and Push Docker Images / build (./docker/sandbox, cpu, ./docker/sandbox/Dockerfile, sandbox, surfsense-sandbox, ubuntu-24.04-arm, linux/arm64, arm64, , false, cpu) (push) Blocked by required conditions
Build and Push Docker Images / build (./docker/sandbox, cpu, ./docker/sandbox/Dockerfile, sandbox, surfsense-sandbox, ubuntu-latest, linux/amd64, amd64, , false, cpu) (push) Blocked by required conditions
Build and Push Docker Images / build (./surfsense_backend, cpu, ./surfsense_backend/Dockerfile, backend, surfsense-backend, ubuntu-24.04-arm, linux/arm64, arm64, , production, false, cpu) (push) Blocked by required conditions
Build and Push Docker Images / build (./surfsense_backend, cpu, ./surfsense_backend/Dockerfile, backend, surfsense-backend, ubuntu-latest, linux/amd64, amd64, , production, false, cpu) (push) Blocked by required conditions
Build and Push Docker Images / build (./surfsense_backend, cu126, ./surfsense_backend/Dockerfile, backend, surfsense-backend, ubuntu-24.04-arm, linux/arm64, arm64, -cuda126, production, true, cuda126) (push) Blocked by required conditions
Build and Push Docker Images / build (./surfsense_backend, cu126, ./surfsense_backend/Dockerfile, backend, surfsense-backend, ubuntu-latest, linux/amd64, amd64, -cuda126, production, true, cuda126) (push) Blocked by required conditions
Build and Push Docker Images / build (./surfsense_backend, cu128, ./surfsense_backend/Dockerfile, backend, surfsense-backend, ubuntu-24.04-arm, linux/arm64, arm64, -cuda, production, true, cuda) (push) Blocked by required conditions
Build and Push Docker Images / build (./surfsense_backend, cu128, ./surfsense_backend/Dockerfile, backend, surfsense-backend, ubuntu-latest, linux/amd64, amd64, -cuda, production, true, cuda) (push) Blocked by required conditions
Build and Push Docker Images / build (./surfsense_web, cpu, ./surfsense_web/Dockerfile, web, surfsense-web, ubuntu-24.04-arm, linux/arm64, arm64, , runner, false, cpu) (push) Blocked by required conditions
Build and Push Docker Images / build (./surfsense_web, cpu, ./surfsense_web/Dockerfile, web, surfsense-web, ubuntu-latest, linux/amd64, amd64, , runner, false, cpu) (push) Blocked by required conditions
Build and Push Docker Images / verify_digests (push) Blocked by required conditions
Build and Push Docker Images / create_manifest (backend, surfsense-backend, , cpu) (push) Blocked by required conditions
Build and Push Docker Images / create_manifest (backend, surfsense-backend, -cuda, cuda) (push) Blocked by required conditions
[Feat] Self-serve account deletion + one-time signup credit
2026-08-21 14:35:45 +02:00
CREDO23
f7b975c648 Merge main into dev
Both sides bumped the version off the same base -- main to 0.0.37 (#1695),
dev to 0.0.38. Kept 0.0.38 across all six files.
2026-08-21 14:31:27 +02:00
Thierry CH.
723692da4b
Merge pull request #1702 from CREDO23/feat/account-deletion
[Feat] Self-serve account deletion + one-time welcome credit
2026-08-21 14:24:34 +02:00
CREDO23
a78d613def feat: bumped version to 0.0.38 2026-08-21 14:23:53 +02:00
CREDO23
769d3d0127 docs(account-deletion): reconcile the plan with what shipped
The plan described ownership transfer as shipping alongside deletion. It did
not, so the rejected-options table now records why -- a gap invites someone to
rebuild it, a decision does not.
2026-08-21 13:44:00 +02:00
CREDO23
505edfdec2 docs(account-deletion): self-serve deletion and the retained fingerprint
Section 7 said deletion was something you request, which is now false in two
directions: it is a button, and it does not erase quite everything.

The keyed hash we keep to stop a second welcome credit is pseudonymised, not
anonymous, so it is disclosed with the basis we rely on rather than left for a
reader to discover. Same for the invoices our processor keeps for tax. Being
vague about either reads worse than being precise.

The right-to-erasure bullet now points at the control instead of the contact
form.
2026-08-21 13:44:00 +02:00
CREDO23
10f6725a5d test(i18n): fail when a locale drops a key English has
Six files have to move together on every copy change, and the one that gets
missed shows the user a dotted key path instead of a sentence. Nothing caught
that until it reached a screen; zh had been short a key.
2026-08-21 13:43:52 +02:00
CREDO23
63b2cd071b feat(account-deletion): copy for the delete dialog in every locale
The consequences line names the workspaces and the colleagues, not just "your
data": a warning that undersells what the button does is worse than none.

zh also gains documents.delete_success, which it has been missing -- an absent
key renders as its own dotted path to the user.
2026-08-21 13:43:52 +02:00
CREDO23
bbad3bc0ea feat(account-deletion): delete the account from user settings
The privacy policy has always promised deletion on request, with emailing a
person as the only route. This is that promise, self-serve.

The dialog spells out what is lost before it asks, because the consequences
reach past the person clicking: every workspace they own goes, and anyone
sharing one loses that work. Confirmation is typing DELETE, the same bar the
destructive actions elsewhere use.

On success it reloads the page rather than routing, so no cached query
outlives the account it belonged to.
2026-08-21 13:43:44 +02:00
CREDO23
4349de6d29 fix(signup-credit): make the claim ledger migration idempotent
The startup bootstrap builds the current model shape with create_all, and the
claims table is part of that shape now. On any database where the backend
booted before this migration ran, the table already exists and the bare DDL
aborts the upgrade on "relation already exists".
2026-08-21 13:43:44 +02:00
CREDO23
1652e0777b feat(account-deletion): take every owned workspace with the account
With no transfer to offer, refusing the deletion would strand the user: the
409 told them to hand a workspace over using a feature that no longer exists.
So the preflight, the refusal, and the re-check in the task all go, and the
erase now deletes every workspace the account owns, shared or not.

Members of a shared workspace lose it. That is a real consequence for people
who did not click the button, so the dialog states it before the account is
erased rather than leaving them to discover it. A workspace the user merely
belongs to is untouched -- only their membership goes with them.

The tests move with the behaviour: the shared workspace is destroyed and its
colleague's own account survives, and owning one no longer holds the route
back.
2026-08-21 13:43:32 +02:00
CREDO23
f561919a00 revert(workspaces): drop ownership transfer before it ships
It was built to keep a shared workspace alive past its owner, so that
deletion could hand it over instead of destroying it. Nobody has asked for
that. It costs a transfer endpoint, a preflight, and a per-workspace
resolution step in the delete dialog, all to serve a case we have never seen.

Deleting what you own is what every other resource here already does. The
transfer comes back the day a user needs their team's workspace to outlive
them.
2026-08-21 13:43:23 +02:00
CREDO23
b5fec3b2d8 test(account-deletion): cover the blockers, the refusal, and the erase
The three that would be silent disasters: a shared workspace refuses the
delete, the erase leaves workspaces owned by other people alone, and a
workspace that gained a member stops the erase instead of cascading away.
2026-08-21 12:06:28 +02:00
CREDO23
54391487b6 feat(account-deletion): self-serve DELETE /users/me and its preflight
Deactivating is the whole lockout: get_auth_context already turns away
inactive users on both the session and the token path, so no new column and
no auth changes. Refresh tokens are revoked and the cookie cleared, then the
erase is queued.

The blocker check runs server-side here as well as in the client, because
only the server's answer is a guarantee that nobody else's workspace
disappears. A failed enqueue puts the account back, rather than locking
someone out of a deletion that never runs.

Session-only: a leaked personal access token must not be able to destroy the
account it was issued from.
2026-08-21 12:06:28 +02:00
CREDO23
cb057b4b30 feat(account-deletion): erase the account off the request
Owned workspaces go through the existing workspace deletion rather than the
FK cascade: the cascade drops the rows but leaves their blobs and knowledge
stores on disk forever.

The blocker check runs again here. A workspace that gained a member since the
request aborts the erase rather than being skipped -- "user" cascades to
workspaces, so deleting the row anyway would take a colleague's workspace with
it. The account stays locked out with its data intact, which is recoverable.

Stripe keeps its charges and invoices, which GDPR 17(3)(b) exempts as a tax
record; only the customer, with its saved card and contact details, goes.
2026-08-21 12:06:20 +02:00
CREDO23
fc1eaf4715 feat(account-deletion): report the workspaces that block deletion
Owned workspaces with other members in them would take that work down with
the account. Each carries its other members so the client can offer a
handover without a call per workspace.
2026-08-21 12:06:20 +02:00
CREDO23
d5eacbff29 test(workspaces): share the extra-member fixtures across integration tests
Every multi-member case needs a second account joined to a workspace, and the
deletion suite is about to need the same two helpers the transfer suite grew.
2026-08-21 12:06:20 +02:00
CREDO23
807629a079 feat(workspaces): expose transfer-ownership over HTTP
Session-only: giving a workspace away should not be reachable with a leaked
personal access token.
2026-08-21 11:52:12 +02:00
CREDO23
300ae98bb2 test(workspaces): cover the ownership handover and its two guards
All three ownership fields move together, a non-owner member cannot give the
workspace away, and it cannot be handed to a stranger -- that would need an
invite, which is its own flow.
2026-08-21 11:52:12 +02:00
CREDO23
ef26d86f74 feat(workspaces): transfer ownership to another member
Deleting an account must not take a shared workspace's other members down
with it, so the owner needs a way out that is not "delete everything".

Ownership is recorded in three places -- workspaces.user_id, the membership's
is_owner flag, and its role -- and any one left behind leaves the workspace
with two owners or none. The transaction stays open so the deletion flow can
hand over several workspaces and erase the account as one unit.

The former owner steps down to Editor rather than being removed: they may
still have work in there, and demotion is reversible by the new owner.
2026-08-21 11:52:12 +02:00
CREDO23
5f326c9250 test(signup-credit): cover the first grant and the re-registration
The behaviour the whole feature exists for: a fresh identity is credited, and
the same Google subject arriving on a brand-new user row is credited nothing.
2026-08-21 11:43:01 +02:00
CREDO23
b7effb5bc6 feat(signup-credit): grant the credit at registration instead of by default
A column default mints $5 for every row, which is precisely what makes
delete-and-re-register profitable. The grant moves into on_after_register,
inside the workspace transaction, so a rollback cannot leave an identity
marked as having taken a credit it never received.

The registration response reads the in-memory user, so the balance is
refreshed there too.
2026-08-21 11:42:56 +02:00
CREDO23
b04dd21117 feat(signup-credit): award the credit once per identity
Claiming is a single INSERT ... ON CONFLICT DO NOTHING over every identity the
user presents, so two concurrent signups on one identity cannot both win. An
account whose identities are all already spent is awarded nothing.

A user no source recognises is ungated and says so in the log: that is
AUTH_TYPE=LOCAL, where the operator funds their own inference and there is
nothing to farm.
2026-08-21 11:39:53 +02:00
CREDO23
404faf4cc4 feat(signup-credit): claim the identities of every existing Google account
An empty ledger would hand every current user a free second grant the moment
the delete button ships. Backfill folds `people/<sub>` onto the bare subject
so a pre-169 row cannot claim twice, and skips deployments with no
oauth_account table at all.

Claim dates are the migration's own timestamp: "user" has no created_at to
copy from, and one shared value marks exactly which claims were inferred
rather than observed.
2026-08-21 11:39:48 +02:00
CREDO23
5140cf8a09 feat(signup-credit): add the claim ledger that outlives the account
signup_credit_claims deliberately carries no foreign key to "user": the row
whose whole purpose is to remember a spent credit must survive the erasure of
the account that spent it. Unique on (kind, fingerprint) so the grant is a
single insert that either wins or loses.
2026-08-21 11:39:37 +02:00
CREDO23
a6ee253115 test(signup-credit): fold people/<sub> onto the bare subject id
The two spellings of one Google account must fingerprint identically, or a
user who registered before migration 169 collects the credit twice.
2026-08-21 11:39:29 +02:00
CREDO23
704a236320 feat(signup-credit): name a Google account by its subject id
`sub` is stable per Google account and survives the user renaming their
mailbox, so it identifies the person without any per-provider email
normalization. Rows predating the `sub` switch stored `people/<sub>`, which
migration 169 deliberately left in place, so the prefix is stripped before
fingerprinting.
2026-08-21 11:39:23 +02:00
CREDO23
d4e23ac6b8 feat(signup-credit): register identity sources behind a decorator
Production is Google-only today, but password and other providers each need
their own way of naming the person. A decorator keeps adding one to a single
new file, with no edit to the granting path.
2026-08-21 11:39:23 +02:00
CREDO23
8639ade964 feat(signup-credit): digest an identity into a keyed fingerprint
The ledger has to outlive the account that wrote it, so it cannot store a
subject id or an email. HMAC under SECRET_KEY rather than a bare hash: the
space of Google subject ids and email addresses is small enough to exhaust
offline against a plain SHA-256.
2026-08-21 11:38:59 +02:00
CREDO23
f0da52c766 docs(account-deletion): plan deletion, transfer, and the one-time credit
Three requirements that pull against each other: users must be able to erase
themselves, erasing must not re-mint the $5 welcome credit, and it must not
take a shared workspace's other members down with it. Records the identity
ledger, the Google `sub`-only v1 scope, and the rejected alternatives.
2026-08-21 11:38:42 +02:00
Anish Sarkar
54e1fa95d1
Merge pull request #1701 from AnishSarkar22/fix/tool-output-status-type-guard
Some checks failed
Build and Push Docker Images / compute_version (push) Has been cancelled
Build and Push Docker Images / build (./docker/sandbox, cpu, ./docker/sandbox/Dockerfile, sandbox, surfsense-sandbox, ubuntu-24.04-arm, linux/arm64, arm64, , false, cpu) (push) Has been cancelled
Build and Push Docker Images / build (./docker/sandbox, cpu, ./docker/sandbox/Dockerfile, sandbox, surfsense-sandbox, ubuntu-latest, linux/amd64, amd64, , false, cpu) (push) Has been cancelled
Build and Push Docker Images / build (./surfsense_backend, cpu, ./surfsense_backend/Dockerfile, backend, surfsense-backend, ubuntu-24.04-arm, linux/arm64, arm64, , production, false, cpu) (push) Has been cancelled
Build and Push Docker Images / build (./surfsense_backend, cpu, ./surfsense_backend/Dockerfile, backend, surfsense-backend, ubuntu-latest, linux/amd64, amd64, , production, false, cpu) (push) Has been cancelled
Build and Push Docker Images / build (./surfsense_backend, cu126, ./surfsense_backend/Dockerfile, backend, surfsense-backend, ubuntu-24.04-arm, linux/arm64, arm64, -cuda126, production, true, cuda126) (push) Has been cancelled
Build and Push Docker Images / build (./surfsense_backend, cu126, ./surfsense_backend/Dockerfile, backend, surfsense-backend, ubuntu-latest, linux/amd64, amd64, -cuda126, production, true, cuda126) (push) Has been cancelled
Build and Push Docker Images / build (./surfsense_backend, cu128, ./surfsense_backend/Dockerfile, backend, surfsense-backend, ubuntu-24.04-arm, linux/arm64, arm64, -cuda, production, true, cuda) (push) Has been cancelled
Build and Push Docker Images / build (./surfsense_backend, cu128, ./surfsense_backend/Dockerfile, backend, surfsense-backend, ubuntu-latest, linux/amd64, amd64, -cuda, production, true, cuda) (push) Has been cancelled
Build and Push Docker Images / build (./surfsense_web, cpu, ./surfsense_web/Dockerfile, web, surfsense-web, ubuntu-24.04-arm, linux/arm64, arm64, , runner, false, cpu) (push) Has been cancelled
Build and Push Docker Images / build (./surfsense_web, cpu, ./surfsense_web/Dockerfile, web, surfsense-web, ubuntu-latest, linux/amd64, amd64, , runner, false, cpu) (push) Has been cancelled
Build and Push Docker Images / verify_digests (push) Has been cancelled
Build and Push Docker Images / create_manifest (backend, surfsense-backend, , cpu) (push) Has been cancelled
Build and Push Docker Images / create_manifest (backend, surfsense-backend, -cuda, cuda) (push) Has been cancelled
Build and Push Docker Images / create_manifest (backend, surfsense-backend, -cuda126, cuda126) (push) Has been cancelled
Build and Push Docker Images / create_manifest (sandbox, surfsense-sandbox, , cpu) (push) Has been cancelled
Build and Push Docker Images / create_manifest (web, surfsense-web, , cpu) (push) Has been cancelled
Build and Push Docker Images / finalize_release (push) Has been cancelled
fix(chat-streaming): handle non-object tool outputs safely & reasoning steps UI change
2026-08-20 00:35:01 +05:30
Anish Sarkar
621c99397e refactor(chat): enhance ReasoningEpisode with scroll edge indicators 2026-08-20 00:24:04 +05:30
Anish Sarkar
e630fc2e76 feat(chat): implement auto-scrolling for reasoning episodes
Added a new hook, useReasoningAutoScroll, to manage scroll behavior in the ReasoningEpisode component. This allows for automatic scrolling when new content is added, enhancing user experience during reasoning sessions. Updated the ReasoningEpisode component to utilize this hook, improving accessibility and interaction with the nested scroll area.
2026-08-20 00:19:07 +05:30
Anish Sarkar
f3a26a200f fix(tool_end): handle non-dict tool_output in iter_tool_end_frames and add tests for JSON content shapes 2026-08-19 23:57:07 +05:30
Thierry CH.
2b50e7a402
Merge pull request #1699 from MODSetter/dev
Some checks failed
Build and Push Docker Images / compute_version (push) Has been cancelled
Build and Push Docker Images / build (./docker/sandbox, cpu, ./docker/sandbox/Dockerfile, sandbox, surfsense-sandbox, ubuntu-24.04-arm, linux/arm64, arm64, , false, cpu) (push) Has been cancelled
Build and Push Docker Images / build (./docker/sandbox, cpu, ./docker/sandbox/Dockerfile, sandbox, surfsense-sandbox, ubuntu-latest, linux/amd64, amd64, , false, cpu) (push) Has been cancelled
Build and Push Docker Images / build (./surfsense_backend, cpu, ./surfsense_backend/Dockerfile, backend, surfsense-backend, ubuntu-24.04-arm, linux/arm64, arm64, , production, false, cpu) (push) Has been cancelled
Build and Push Docker Images / build (./surfsense_backend, cpu, ./surfsense_backend/Dockerfile, backend, surfsense-backend, ubuntu-latest, linux/amd64, amd64, , production, false, cpu) (push) Has been cancelled
Build and Push Docker Images / build (./surfsense_backend, cu126, ./surfsense_backend/Dockerfile, backend, surfsense-backend, ubuntu-24.04-arm, linux/arm64, arm64, -cuda126, production, true, cuda126) (push) Has been cancelled
Build and Push Docker Images / build (./surfsense_backend, cu126, ./surfsense_backend/Dockerfile, backend, surfsense-backend, ubuntu-latest, linux/amd64, amd64, -cuda126, production, true, cuda126) (push) Has been cancelled
Build and Push Docker Images / build (./surfsense_backend, cu128, ./surfsense_backend/Dockerfile, backend, surfsense-backend, ubuntu-24.04-arm, linux/arm64, arm64, -cuda, production, true, cuda) (push) Has been cancelled
Build and Push Docker Images / build (./surfsense_backend, cu128, ./surfsense_backend/Dockerfile, backend, surfsense-backend, ubuntu-latest, linux/amd64, amd64, -cuda, production, true, cuda) (push) Has been cancelled
Build and Push Docker Images / build (./surfsense_web, cpu, ./surfsense_web/Dockerfile, web, surfsense-web, ubuntu-24.04-arm, linux/arm64, arm64, , runner, false, cpu) (push) Has been cancelled
Build and Push Docker Images / create_manifest (backend, surfsense-backend, -cuda126, cuda126) (push) Has been cancelled
Build and Push Docker Images / build (./surfsense_web, cpu, ./surfsense_web/Dockerfile, web, surfsense-web, ubuntu-latest, linux/amd64, amd64, , runner, false, cpu) (push) Has been cancelled
Build and Push Docker Images / verify_digests (push) Has been cancelled
Build and Push Docker Images / create_manifest (backend, surfsense-backend, , cpu) (push) Has been cancelled
Build and Push Docker Images / create_manifest (backend, surfsense-backend, -cuda, cuda) (push) Has been cancelled
Build and Push Docker Images / create_manifest (sandbox, surfsense-sandbox, , cpu) (push) Has been cancelled
Build and Push Docker Images / create_manifest (web, surfsense-web, , cpu) (push) Has been cancelled
Build and Push Docker Images / finalize_release (push) Has been cancelled
fix(sandbox): activate image interpreter for Daytona office artifacts
2026-08-19 04:25:44 +02:00
Thierry CH.
0821e729d8
Merge pull request #1698 from CREDO23/fix/daytona-prod-interpreter
Some checks are pending
Build and Push Docker Images / compute_version (push) Waiting to run
Build and Push Docker Images / build (./docker/sandbox, cpu, ./docker/sandbox/Dockerfile, sandbox, surfsense-sandbox, ubuntu-24.04-arm, linux/arm64, arm64, , false, cpu) (push) Blocked by required conditions
Build and Push Docker Images / build (./docker/sandbox, cpu, ./docker/sandbox/Dockerfile, sandbox, surfsense-sandbox, ubuntu-latest, linux/amd64, amd64, , false, cpu) (push) Blocked by required conditions
Build and Push Docker Images / build (./surfsense_backend, cpu, ./surfsense_backend/Dockerfile, backend, surfsense-backend, ubuntu-24.04-arm, linux/arm64, arm64, , production, false, cpu) (push) Blocked by required conditions
Build and Push Docker Images / build (./surfsense_backend, cpu, ./surfsense_backend/Dockerfile, backend, surfsense-backend, ubuntu-latest, linux/amd64, amd64, , production, false, cpu) (push) Blocked by required conditions
Build and Push Docker Images / build (./surfsense_backend, cu126, ./surfsense_backend/Dockerfile, backend, surfsense-backend, ubuntu-24.04-arm, linux/arm64, arm64, -cuda126, production, true, cuda126) (push) Blocked by required conditions
Build and Push Docker Images / build (./surfsense_backend, cu126, ./surfsense_backend/Dockerfile, backend, surfsense-backend, ubuntu-latest, linux/amd64, amd64, -cuda126, production, true, cuda126) (push) Blocked by required conditions
Build and Push Docker Images / build (./surfsense_backend, cu128, ./surfsense_backend/Dockerfile, backend, surfsense-backend, ubuntu-24.04-arm, linux/arm64, arm64, -cuda, production, true, cuda) (push) Blocked by required conditions
Build and Push Docker Images / build (./surfsense_backend, cu128, ./surfsense_backend/Dockerfile, backend, surfsense-backend, ubuntu-latest, linux/amd64, amd64, -cuda, production, true, cuda) (push) Blocked by required conditions
Build and Push Docker Images / build (./surfsense_web, cpu, ./surfsense_web/Dockerfile, web, surfsense-web, ubuntu-24.04-arm, linux/arm64, arm64, , runner, false, cpu) (push) Blocked by required conditions
Build and Push Docker Images / build (./surfsense_web, cpu, ./surfsense_web/Dockerfile, web, surfsense-web, ubuntu-latest, linux/amd64, amd64, , runner, false, cpu) (push) Blocked by required conditions
Build and Push Docker Images / verify_digests (push) Blocked by required conditions
Build and Push Docker Images / create_manifest (backend, surfsense-backend, , cpu) (push) Blocked by required conditions
Build and Push Docker Images / create_manifest (backend, surfsense-backend, -cuda, cuda) (push) Blocked by required conditions
Build and Push Docker Images / create_manifest (backend, surfsense-backend, -cuda126, cuda126) (push) Blocked by required conditions
Build and Push Docker Images / create_manifest (sandbox, surfsense-sandbox, , cpu) (push) Blocked by required conditions
Build and Push Docker Images / create_manifest (web, surfsense-web, , cpu) (push) Blocked by required conditions
Build and Push Docker Images / finalize_release (push) Blocked by required conditions
fix(sandbox): activate image interpreter for Daytona office artifacts
2026-08-19 04:24:15 +02:00
CREDO23
e5530e318f chore(docker): pass Daytona settings through to the backend service
Uncomment the DAYTONA_* env passthrough on the backend service and add
DAYTONA_SNAPSHOT_ID, so a deployment that sets SANDBOX_PROVIDER=daytona
actually forwards the key, URL, target, and snapshot into the container.
Document the snapshot name in the compose .env.example.
2026-08-19 04:22:18 +02:00
CREDO23
91bf90b0fc fix(sandbox): activate image interpreter before Daytona python runs
The Daytona snapshot boots with `sleep infinity`, so bare `python3` is the
Ubuntu system interpreter, which lacks the office wheels (weasyprint,
reportlab, xlsxwriter, python-pptx, python-docx). OpenSandbox instead keeps
the image's code-interpreter entrypoint, which activates the 3.12 venv, so
its `python3` already imports them.

Result: office generation on Daytona silently failed for every format that
has no system-binary fallback — xlsx and pptx never wrote a file, surfacing
downstream as a FileNotFoundError during verification. Only pdf slipped
through, via LibreOffice conversion rather than the intended Python path.

Source code-interpreter-env.sh before invoking python in both sandbox entry
points (the deliverables `execute` tool and the Daytona `execute` heredoc).
On OpenSandbox this re-activates the same interpreter, so it is a harmless
no-op there.
2026-08-19 04:22:11 +02:00
Thierry CH.
354997c871
Merge pull request #1697 from MODSetter/dev
[Fix] Don't SSR the /free/[slug] chat shell
2026-08-19 02:56:11 +02:00
Thierry CH.
b8089c77c5
Merge pull request #1696 from CREDO23/fix/free-ssr-document
[Fix] Don't SSR the /free/[slug] chat shell
2026-08-19 02:54:33 +02:00
CREDO23
92b6bee98d fix(web): skip SSR for the /free/[slug] chat shell 2026-08-19 02:52:46 +02:00
Thierry CH.
ac04677a2c
Merge pull request #1695 from CREDO23/chore/bump-version-0.0.37
Some checks are pending
Build and Push Docker Images / verify_digests (push) Blocked by required conditions
Build and Push Docker Images / compute_version (push) Waiting to run
Build and Push Docker Images / build (./docker/sandbox, cpu, ./docker/sandbox/Dockerfile, sandbox, surfsense-sandbox, ubuntu-24.04-arm, linux/arm64, arm64, , false, cpu) (push) Blocked by required conditions
Build and Push Docker Images / build (./docker/sandbox, cpu, ./docker/sandbox/Dockerfile, sandbox, surfsense-sandbox, ubuntu-latest, linux/amd64, amd64, , false, cpu) (push) Blocked by required conditions
Build and Push Docker Images / build (./surfsense_backend, cpu, ./surfsense_backend/Dockerfile, backend, surfsense-backend, ubuntu-24.04-arm, linux/arm64, arm64, , production, false, cpu) (push) Blocked by required conditions
Build and Push Docker Images / build (./surfsense_backend, cpu, ./surfsense_backend/Dockerfile, backend, surfsense-backend, ubuntu-latest, linux/amd64, amd64, , production, false, cpu) (push) Blocked by required conditions
Build and Push Docker Images / build (./surfsense_backend, cu126, ./surfsense_backend/Dockerfile, backend, surfsense-backend, ubuntu-24.04-arm, linux/arm64, arm64, -cuda126, production, true, cuda126) (push) Blocked by required conditions
Build and Push Docker Images / build (./surfsense_backend, cu126, ./surfsense_backend/Dockerfile, backend, surfsense-backend, ubuntu-latest, linux/amd64, amd64, -cuda126, production, true, cuda126) (push) Blocked by required conditions
Build and Push Docker Images / build (./surfsense_backend, cu128, ./surfsense_backend/Dockerfile, backend, surfsense-backend, ubuntu-24.04-arm, linux/arm64, arm64, -cuda, production, true, cuda) (push) Blocked by required conditions
Build and Push Docker Images / build (./surfsense_backend, cu128, ./surfsense_backend/Dockerfile, backend, surfsense-backend, ubuntu-latest, linux/amd64, amd64, -cuda, production, true, cuda) (push) Blocked by required conditions
Build and Push Docker Images / build (./surfsense_web, cpu, ./surfsense_web/Dockerfile, web, surfsense-web, ubuntu-24.04-arm, linux/arm64, arm64, , runner, false, cpu) (push) Blocked by required conditions
Build and Push Docker Images / build (./surfsense_web, cpu, ./surfsense_web/Dockerfile, web, surfsense-web, ubuntu-latest, linux/amd64, amd64, , runner, false, cpu) (push) Blocked by required conditions
Build and Push Docker Images / create_manifest (backend, surfsense-backend, , cpu) (push) Blocked by required conditions
Build and Push Docker Images / create_manifest (backend, surfsense-backend, -cuda, cuda) (push) Blocked by required conditions
Build and Push Docker Images / create_manifest (backend, surfsense-backend, -cuda126, cuda126) (push) Blocked by required conditions
Build and Push Docker Images / create_manifest (sandbox, surfsense-sandbox, , cpu) (push) Blocked by required conditions
Build and Push Docker Images / create_manifest (web, surfsense-web, , cpu) (push) Blocked by required conditions
Build and Push Docker Images / finalize_release (push) Blocked by required conditions
feat: bumped version to 0.0.37
2026-08-18 19:13:40 +02:00
CREDO23
84cb4181cc feat: bumped version to 0.0.37 2026-08-18 19:12:13 +02:00
Thierry CH.
b8bd837610
Merge pull request #1694 from MODSetter/dev
[Feat] Media artifact alignment + office deliverables
2026-08-18 19:07:10 +02:00
Thierry CH.
02e6a33a0a
Merge pull request #1693 from CREDO23/fix/daytona-read-file-not-found
Some checks are pending
Build and Push Docker Images / compute_version (push) Waiting to run
Build and Push Docker Images / build (./docker/sandbox, cpu, ./docker/sandbox/Dockerfile, sandbox, surfsense-sandbox, ubuntu-24.04-arm, linux/arm64, arm64, , false, cpu) (push) Blocked by required conditions
Build and Push Docker Images / build (./docker/sandbox, cpu, ./docker/sandbox/Dockerfile, sandbox, surfsense-sandbox, ubuntu-latest, linux/amd64, amd64, , false, cpu) (push) Blocked by required conditions
Build and Push Docker Images / build (./surfsense_backend, cpu, ./surfsense_backend/Dockerfile, backend, surfsense-backend, ubuntu-24.04-arm, linux/arm64, arm64, , production, false, cpu) (push) Blocked by required conditions
Build and Push Docker Images / build (./surfsense_backend, cpu, ./surfsense_backend/Dockerfile, backend, surfsense-backend, ubuntu-latest, linux/amd64, amd64, , production, false, cpu) (push) Blocked by required conditions
Build and Push Docker Images / build (./surfsense_backend, cu126, ./surfsense_backend/Dockerfile, backend, surfsense-backend, ubuntu-24.04-arm, linux/arm64, arm64, -cuda126, production, true, cuda126) (push) Blocked by required conditions
Build and Push Docker Images / build (./surfsense_backend, cu126, ./surfsense_backend/Dockerfile, backend, surfsense-backend, ubuntu-latest, linux/amd64, amd64, -cuda126, production, true, cuda126) (push) Blocked by required conditions
Build and Push Docker Images / build (./surfsense_backend, cu128, ./surfsense_backend/Dockerfile, backend, surfsense-backend, ubuntu-24.04-arm, linux/arm64, arm64, -cuda, production, true, cuda) (push) Blocked by required conditions
Build and Push Docker Images / build (./surfsense_backend, cu128, ./surfsense_backend/Dockerfile, backend, surfsense-backend, ubuntu-latest, linux/amd64, amd64, -cuda, production, true, cuda) (push) Blocked by required conditions
Build and Push Docker Images / build (./surfsense_web, cpu, ./surfsense_web/Dockerfile, web, surfsense-web, ubuntu-24.04-arm, linux/arm64, arm64, , runner, false, cpu) (push) Blocked by required conditions
Build and Push Docker Images / build (./surfsense_web, cpu, ./surfsense_web/Dockerfile, web, surfsense-web, ubuntu-latest, linux/amd64, amd64, , runner, false, cpu) (push) Blocked by required conditions
Build and Push Docker Images / verify_digests (push) Blocked by required conditions
Build and Push Docker Images / create_manifest (backend, surfsense-backend, , cpu) (push) Blocked by required conditions
Build and Push Docker Images / create_manifest (backend, surfsense-backend, -cuda, cuda) (push) Blocked by required conditions
Build and Push Docker Images / create_manifest (backend, surfsense-backend, -cuda126, cuda126) (push) Blocked by required conditions
Build and Push Docker Images / create_manifest (sandbox, surfsense-sandbox, , cpu) (push) Blocked by required conditions
Build and Push Docker Images / create_manifest (web, surfsense-web, , cpu) (push) Blocked by required conditions
Build and Push Docker Images / finalize_release (push) Blocked by required conditions
[Fix] Daytona read_file returns FileNotFoundError for missing files
2026-08-18 18:38:49 +02:00
CREDO23
08a3b1f8e4 test(sandbox): cover Daytona read_file not-found mapping
Assert read_file surfaces a FILE_NOT_FOUND body as FileNotFoundError and still
propagates unrelated DaytonaErrors.
2026-08-18 18:33:20 +02:00
CREDO23
9715b27918 fix(sandbox): map Daytona FILE_NOT_FOUND to FileNotFoundError in read_file
Daytona's daemon returns a FILE_NOT_FOUND body as a plain DaytonaError
(sometimes typed DaytonaNotFoundError) instead of raising FileNotFoundError.
read_receipt only catches FileNotFoundError, so a missing receipt on the first
verification crashed the stream. Translate not-found failures to
FileNotFoundError to match the SandboxSession contract OpenSandbox already
fulfills; re-raise all other DaytonaErrors unchanged.
2026-08-18 18:33:15 +02:00
Anish Sarkar
69e62be665
Merge pull request #1692 from AnishSarkar22/fix/cannonical-timeline
feat(timeline): add canonical progress titles and animated activity indicator
2026-08-18 19:43:27 +05:30
Anish Sarkar
c494469e44 fix(load_source_document): update import path for virtual_path_to_doc
- Changed the import statement for `virtual_path_to_doc` to streamline the module structure and improve code clarity.
2026-08-18 19:21:42 +05:30
Anish Sarkar
1e0e4138a4 Merge remote-tracking branch 'upstream/dev' into fix/cannonical-timeline 2026-08-18 19:19:35 +05:30