Commit graph

8555 commits

Author SHA1 Message Date
MODSetter
e4ce0c6b1e refactor(podcast): remove unused storage imports and update podcast artifact initialization
Deleted the model compatibility migration file as it is no longer needed. Updated podcast artifact initialization to replace storage-related imports with the new record module, streamlining the codebase. Cleaned up unnecessary imports in the podcast API routes and rendering tasks.
2026-08-15 00:21:16 +05:30
MODSetter
8ffcf86225 Merge branch 'dev_mod' of https://github.com/MODSetter/SurfSense into dev_mod 2026-08-14 18:59:17 +05:30
MODSetter
b7ad5ecfff feat(models): drop catalogue models that cannot serve a turn
Passing OpenRouter's metadata filters does not prove a model can complete a
turn through this harness, so dead-but-advertised models kept reaching users
and failing mid-stream. A new model_compatibility table holds one verdict per
model, a weekly Celery sweep re-probes stale entries, and catalogue
generation reads the blocked ids back so those models are never offered.
Also excludes :batch variants, which advertise full chat metadata and then
reject completions outright.

Auto-pin now falls through to Auto when an explicitly selected global config
is absent from the current worker's catalogue. Returning it handed
load_llm_bundle an id it could not resolve, ending the turn with SERVER_ERROR
on one of the four uvicorn workers while the identical request succeeded on
the others. Catalogue refresh also re-materializes GLOBAL_MODELS, which
previously kept its boot snapshot until restart.

On the web side a single dropped connection surfaced as one toast per
in-flight query and dozens of PostHog exceptions, with no retry button.
Network errors now share a toast id, are deduped per endpoint before capture,
carry host and online context, and count as retryable.

Consolidates the model filter helpers duplicated between the model list and
OpenRouter services into openrouter_model_normalizer, renames OoxmlDefect to
OoxmlError, and includes a ruff format and import-order pass.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-14 18:59:11 +05:30
MODSetter
2a29babe83 Merge commit 'd96e29d4d' into dev 2026-08-14 18:57:32 +05:30
Thierry CH.
b6b0672dd8
Merge pull request #1682 from CREDO23/feat/media-artifact-alignment
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 / 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 / finalize_release (push) Blocked by required conditions
[Feat] Authenticated artifact generation over the deliverables subagent
2026-08-14 10:46:44 +02:00
Anish Sarkar
2f0ac8f44e
Merge pull request #1681 from AnishSarkar22/fix/artifacts-sandbox-ui
feat(artifacts): unify persistence, deep linking, and sandbox UI
2026-08-14 14:14:50 +05:30
CREDO23
c522182d6d test(skills): drop report-writing from the starter-skill guard
report-writing was unregistered with the legacy report generators; the bundled
set is now four media/research skills.
2026-08-14 10:35:31 +02:00
CREDO23
c7f5f113d3 test(deliverables): stop asserting an exact prompt line-wrap
The save_artifact guard sentence reflowed onto one line; assert the phrase
rather than the old hard-coded newline+indent.
2026-08-14 10:35:31 +02:00
CREDO23
2d51134027 test(chat): register THREAD_AWAITING_APPROVAL in the error-contract guard
The HITL approval error code ships display copy; the guard's expected set just
had not been updated.
2026-08-14 10:35:31 +02:00
CREDO23
08af667470 test(video): give the billing fake the workspace_id and artifact_id columns
The media-alignment record path reads workspace_id and (nullable) artifact_id
off the VideoPresentation row; the SimpleNamespace fake omitted them. Add both
so the billing tests exercise the real record path.
2026-08-14 10:35:31 +02:00
CREDO23
e3d94c5df3 fix(artifacts): hide artifact-API threads from the sidebar
Threads minted by the authenticated artifact door are empty vessels for the
subagent's sandbox key and never streamed to. Tag them with a dedicated
ARTIFACT_API_SOURCE and exclude that source from the thread list and search
queries so they stay out of the sidebar.
2026-08-14 09:33:17 +02:00
Anish Sarkar
0aecab70c3 Merge remote-tracking branch 'upstream/dev' into fix/artifacts-sandbox-ui 2026-08-14 12:58:20 +05:30
CREDO23
133d110db7 fix(artifacts): release the door's sandbox when the run ends
Each door call mints a throwaway thread that grabs a per-workspace sandbox
session; nothing released it, so a couple of calls hit the cap and blocked
every other conversation (chat included) until the idle reaper ran.
run_deliverable_subagent now terminates the thread's session in a finally,
freeing the slot immediately.
2026-08-14 09:13:55 +02:00
Anish Sarkar
f3adc06954 refactor(artifacts): update artifact card layout and loading state styling 2026-08-14 12:32:20 +05:30
CREDO23
badb935f04 fix(artifacts): hydrate door artifacts from DB and commit the turn's KB copy
The door skipped two things a chat turn does. It parsed only the document
tool's receipt shape, so image artifacts (artifact_id, no files) came back
as an empty list; now every artifact_id in the run's tool messages is
collected and its files hydrated from the DB. It also never committed the
turn's working copy, so save_artifact's staged body was never recorded or
indexed and the document sat pending; run_deliverable_subagent now runs the
same end-of-turn commit chat uses, which enqueues indexing.
2026-08-14 08:58:32 +02:00
Anish Sarkar
35dcab3621 fix(artifacts): improve layout and overflow handling in artifact card and library components
- Updated `ArtifactCard` to ensure proper overflow handling and prevent layout issues with long text.
- Adjusted styles in `ArtifactsLibrary` for better responsiveness and to manage overflow in the grid layout.
2026-08-14 12:25:53 +05:30
Anish Sarkar
7734bc03ac feat(artifacts): integrate artifact panel opening in document preview 2026-08-14 12:19:16 +05:30
Anish Sarkar
ffd27e8373 feat(artifacts): enhance artifact panel state management and UI interactions
- Added `selectedCardToolCallId` to the artifact panel state for improved tracking of selected artifacts.
- Updated `openArtifactPanelAtom` to accept `selectedCardToolCallId` when opening the panel.
- Modified `ArtifactCard` component to pass `toolCallId` when opening the artifact panel, ensuring correct selection highlighting.
- Refactored `scroll-to-artifact` logic to utilize the new `selectedCardToolCallId` for better artifact navigation.
- Adjusted styles in the artifact card to visually indicate the selected state.
2026-08-14 12:06:34 +05:30
Anish Sarkar
576b4725d7 feat(chat-artifacts): enhance artifact handling with deep linking and loading states
- Introduced `useArtifactDeepLink` hook to manage deep linking for artifacts in chat.
- Updated `useSyncChatArtifacts` to return loading states and artifacts for better UI feedback.
- Added `ThreadMessagesSkeletonBody` component for improved loading experience in the thread view.
- Refactored `ArtifactCard` to support deep linking and streamlined artifact display logic.
- Removed unused media viewer dialog component to simplify the artifacts library UI.
2026-08-14 11:48:10 +05:30
CREDO23
84f01e1e3d feat(artifacts): authenticated artifact door via the deliverables subagent
Add app/artifacts/access with a single authenticated door
(POST /workspaces/{id}/artifacts/generate) that mints a blank thread, resolves
the workspace chat model, runs the chat-turn credit seam, and invokes the
shared run_deliverable_subagent. REST now produces artifacts through the exact
engine chat uses, images included. An anonymous door is deferred.
2026-08-14 01:31:10 +02:00
CREDO23
beb4244bd7 revert(artifacts): drop hand-built generation engine, restore self-contained image tool
The extracted generation engine (core registry/context/result, image
generator/executor/resolve/schemas) plus its agent/REST/public doors just
re-sliced the deliverables subagent's own image tool and introduced drift
between chat and REST paths. Restore generate_image.py to its self-contained
form and delete the engine, its doors, the anonymous quota/config scaffolding,
and the tests that only covered the removed code.
2026-08-14 01:31:03 +02:00
CREDO23
13e099abdf test(artifacts): cover the image seam and public door guards
Test URL normalization, base64 decoding, and anonymous model resolution for
the image generator, plus the public door's per-IP cap and Turnstile paths.
2026-08-13 23:27:35 +02:00
CREDO23
e6a04c0e2c feat(artifacts): agent, REST, and public doors over the generator registry
Each door iterates the same registry and runs the generic pipeline with its
own context: the agent tool returns a receipt Command, the authenticated REST
route returns a typed artifact response, and the public SEO funnel returns raw
bytes behind no-login mode with a per-IP cap and Turnstile. Reduce the
generate_image tool to a thin binding of the image generator's agent door.
2026-08-13 23:27:27 +02:00
CREDO23
054d95244f feat(artifacts): context-polymorphic generation seam
Add a generation core where one generic pipeline (resolve, meter, deliver)
runs against a request-scoped context: authenticated callers bill a workspace
wallet and persist an Artifact, anonymous callers skip both and get raw bytes.
Register the image kind as the first generator and share image-byte decoding
between the persistence path and the no-persist door.
2026-08-13 23:27:18 +02:00
Anish Sarkar
9197754c8f feat(documents): implement enhanced document type filtering with search and mobile support
- Introduced a new `DocumentTypeFilterList` component for improved filtering of document types.
- Added search functionality to filter document types based on user input.
- Implemented scroll position tracking to enhance user experience in the filter list.
- Updated `DocumentsFilters` to integrate the new filtering component and handle mobile responsiveness.
- Refactored existing state management for clarity and efficiency.
2026-08-14 01:46:12 +05:30
Anish Sarkar
0841c988f7 feat(documents): add artifact icon support in document type icon component
- Introduced support for displaying an `ArtifactFormatIcon` when the document type is "ARTIFACT".
- Updated the `FORMAT_META` to include a new presentation-only key for artifacts, enhancing the visual representation in the UI.
- Ensured consistent handling of document types across the application.
2026-08-14 01:39:10 +05:30
Anish Sarkar
54a0029a33 feat(artifacts): enhance artifact metadata handling and introduce format icons
- Added `document_id` to artifact listing for improved metadata association.
- Introduced `ArtifactFormatIcon` and `ArtifactFormatLabel` components for better visual representation of artifact formats.
- Updated various components to utilize new format handling, ensuring consistent display across the application.
- Refactored artifact-related schemas and hooks to accommodate new format data.
- Enhanced unit tests to cover new functionality and ensure robustness.
2026-08-14 01:34:50 +05:30
Anish Sarkar
1210e4fb41 refactor(artifacts): enhance artifact handling and update schemas
- Updated `ArtifactViewerContent` to conditionally display download filename based on workspace validity.
- Added `refetchOnWindowFocus` option to artifact query for improved data freshness.
- Replaced `documentStatus` with a Zod enum for `indexing_status` in artifact schemas.
- Refactored `collectArtifacts` to return `ArtifactCandidate` and adjusted related functions for better artifact management.
- Removed unused imports and streamlined the `ArtifactRow` component for clarity.
2026-08-14 00:50:10 +05:30
Thierry CH.
bb31f18943
Merge pull request #1680 from CREDO23/feat/media-artifact-alignment
Some checks are pending
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 / 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 / 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
[Feat] Media deliverables are Artifacts (video + podcast cutover, image contract)
2026-08-13 21:19:26 +02:00
CREDO23
189d0e6381 Merge remote-tracking branch 'upstream/dev' into feat/media-artifact-alignment 2026-08-13 21:11:39 +02:00
CREDO23
faf7274b04 chore(podcasts): backfill legacy podcasts into Artifacts
Convert READY rows missing artifact_id: push the stored audio into a
new Artifact, stamp artifact_id, and repoint chat messages and public
snapshots. Idempotent and guarded to no-op once podcasts is renamed.
2026-08-13 20:53:00 +02:00
CREDO23
0a2c856288 feat(podcasts): align delivery to the Artifact model
Rename podcasts -> podcast_runs and treat the run row as job state
only: delivered audio and its markdown live in the Artifact, so the
row drops storage_backend/storage_key/file_location and gains
artifact_id. mark_ready commits status and artifact_id atomically,
preserving the READY <-> artifact_id invariant that Zero publishes.

Public shares stream audio through the artifact content route and get
artifact_id + workspace_id injected at snapshot time; the authenticated
player and library read artifactId from Zero. Retire the legacy
authenticated stream route, the podcast storage helpers, and the REST
list endpoint.
2026-08-13 20:52:59 +02:00
MODSetter
4ae92d4be1 feat(models): drop catalogue models that cannot serve a turn
Some checks failed
Obsidian Plugin Lint / lint (push) Has been cancelled
Passing OpenRouter's metadata filters does not prove a model can complete a
turn through this harness, so dead-but-advertised models kept reaching users
and failing mid-stream. A new model_compatibility table holds one verdict per
model, a weekly Celery sweep re-probes stale entries, and catalogue
generation reads the blocked ids back so those models are never offered.
Also excludes :batch variants, which advertise full chat metadata and then
reject completions outright.

Auto-pin now falls through to Auto when an explicitly selected global config
is absent from the current worker's catalogue. Returning it handed
load_llm_bundle an id it could not resolve, ending the turn with SERVER_ERROR
on one of the four uvicorn workers while the identical request succeeded on
the others. Catalogue refresh also re-materializes GLOBAL_MODELS, which
previously kept its boot snapshot until restart.

On the web side a single dropped connection surfaced as one toast per
in-flight query and dozens of PostHog exceptions, with no retry button.
Network errors now share a toast id, are deduped per endpoint before capture,
carry host and online context, and count as retryable.

Consolidates the model filter helpers duplicated between the model list and
OpenRouter services into openrouter_model_normalizer, renames OoxmlDefect to
OoxmlError, and includes a ruff format and import-order pass.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-14 00:06:28 +05:30
Anish Sarkar
44da47a665 refactor(download-button): remove spinner and adjust layout in download button component 2026-08-13 23:57:18 +05:30
Anish Sarkar
53bcc19ed8 feat(artifacts): add thread scoping to artifact listing and enhance query handling
- Updated `list_artifacts` to accept an optional `thread_id` parameter for filtering artifacts by thread.
- Modified the query to conditionally include the `thread_id` in the selection criteria.
- Enhanced frontend components to support thread-specific artifact fetching and display.
- Added unit tests to verify the new functionality for scoping artifacts to a specific thread.
2026-08-13 23:49:38 +05:30
Anish Sarkar
536126a564 refactor(artifacts-panel): replace Boxes icon with Shapes and update heading style 2026-08-13 22:55:23 +05:30
CREDO23
15bf2ba20c feat(image): drop the legacy image_generations table
Images live in Artifacts now; the generate_image tool writes an Artifact
directly and no longer inserts here. This is image's contract step, mirroring
video's 180.

- guarded like 180: aborts while any convertible row (one still holding
  response_data) has no Artifact, so backfill_image_artifacts.py can't be
  skipped and images can't be lost. Error-only rows carry no image and don't
  block the drop
- drops only image_generations + its indexes and strips the
  image_generations RBAC permissions; the image config table and
  imagegenprovider enum stay, the tool still uses them
- downgrade recreates the table and restores the grants migration 93 gave
  the system roles
2026-08-13 19:22:08 +02:00
CREDO23
f89c60bdc3 feat(video): align video presentations to the Artifact model
Video now delivers into an Artifact like image and podcast. The run row
becomes a lifecycle record and the Remotion payload lives in the Artifact.

- run carries artifact_id; the tool returns artifact_id + workspace_id and
  the frontend renders from the Artifact
- public shares serve video and slide audio through artifact-scoped routes
  behind the snapshot allowlist, replacing the broken audio_file path
- purge_document_blobs collects slide audio storage keys so deleting a video
  Artifact no longer orphans them
- backfill_video_artifacts.py converts legacy rows and repoints chat and
  snapshot payloads (run before the slim migration)
- migrations: 179 adds artifact_id (expand); 180 renames the table to
  video_presentation_runs, drops slides/scene_codes, adds error, and
  publishes to Zero (contract). 180 aborts if any delivered run still lacks
  an Artifact, so the backfill can't be skipped
- publish video_presentation_runs to Zero so in-flight and failed runs reach
  the library by push; retire the legacy REST routes, schema, and poller
2026-08-13 18:59:07 +02:00
Anish Sarkar
e8556c1ae3 refactor(artifact-download-button): remove spinner during download state 2026-08-13 22:17:49 +05:30
Anish Sarkar
1de0aa384d feat(xlsx-viewer): implement spreadsheet grid for improved Excel file preview
- Added a new `SpreadsheetGrid` component to render Excel sheets using `react-data-grid`.
- Enhanced the viewer to display worksheets with dynamic column and row generation.
- Updated loading and error handling messages for better user experience.
- Refactored existing table structure to utilize the new grid component for better performance and styling.
2026-08-13 22:17:16 +05:30
Anish Sarkar
52b9089034 feat(dependencies): add react-data-grid version 7.0.0-beta.61 to package.json and update pnpm-lock.yaml 2026-08-13 22:14:15 +05:30
Anish Sarkar
5ba32740c4 fix(Dockerfile): set CI environment variable during development build 2026-08-13 22:10:09 +05:30
Thierry CH.
13feaff677
Merge pull request #1678 from CREDO23/feat/media-artifact-alignment
Some checks are pending
Build and Push Docker Images / create_manifest (web, surfsense-web, , cpu) (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 / 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 / finalize_release (push) Blocked by required conditions
[Feat] Media deliverables are Artifacts (image cutover)
2026-08-13 16:17:14 +02:00
CREDO23
e21d8fbe8b docs(config): point the image reserve at the generate_image tool
The POST /image-generations endpoint it named no longer exists; the
reservation is taken by the tool.
2026-08-13 15:59:03 +02:00
CREDO23
4e902ab9bd feat(artifacts): keep deliverables in an Artifacts folder
ADR 0003 places an artifact body at `documents/Artifacts/<title>.md`, but
the allocator was writing to the root of the tree. The row takes the
matching folder_id at creation: git projection derives it from the path,
yet only once the revision is indexed and never at all for a
Postgres-only workspace.
2026-08-13 15:54:21 +02:00
CREDO23
008c03c2bb fix(knowledge-store): read the commit subject out of content blocks
A reasoning model replies with a list of blocks rather than a string, so
stringifying it wrote the model's entire thinking into the revision's
commit message. Reuse the existing extractor, which keeps text and drops
reasoning.
2026-08-13 15:54:15 +02:00
CREDO23
29c9333d76 fix(podcast): import the shared query client in the player
The module exports a `queryClient` singleton from `query-client/client`;
the missing `getQueryClient` barrel broke the dev server build.
2026-08-13 15:54:10 +02:00
Anish Sarkar
d15cf094c9 Implement folder deletion confirmation dialog in DocumentRightPanel
- Added state management for pending folder deletion and deletion status.
- Refactored folder deletion logic to include a confirmation dialog before proceeding with the deletion.
- Integrated alert dialog to notify users of the deletion action and its consequences.
2026-08-13 18:57:20 +05:30
CREDO23
4239e4fd0f chore(artifacts): backfill image_generations rows into Artifacts
Run before the migration that drops the table: production holds rows whose
bytes live in the provider payload or the object store, and whose tool payloads
are still stored in chat messages and public snapshots. Converts each row to an
Artifact and repoints those payloads. Re-runnable — converted rows are skipped.
2026-08-13 14:58:12 +02:00
CREDO23
499aa4d14d feat(artifacts): deliver generated images straight to an Artifact
generate_image now bills, calls the provider once and persists through
save_artifact, with the generation parameters and revised prompt kept as
provenance. The ImageGeneration model, its routes, schemas, RBAC permissions
and per-image access tokens are gone, along with the frontend service and
types; viewers fetch the primary file through the artifact manifest.

Shared chats keep working: the snapshot stores the artifact ids its messages
reference and a public route serves only those, so a token grants the thread's
own artifacts rather than the workspace's.
2026-08-13 14:58:06 +02:00