Commit Graph

595 Commits

Author SHA1 Message Date
Nico
a58fe82d48 refactor: move backup path resolution into agent contract (#872) 2026-05-10 21:46:03 +02:00
Nico
aa7da321ba refactor: dedpulicate volume schemas across packages (#864) 2026-05-09 15:36:25 +02:00
Nico
2ada5acd5a refactor(agent): harden local agent volume lifecycle (#863)
* refactor(agent): harden local agent volume lifecycle

* chore(test): remove un-used variable

* refactor(agent): create dedicated jobs for recurring tasks

* chore: pr feedbacks

* test: add missing fake agent controller
2026-05-09 12:13:04 +02:00
Nico
2062beac68 refactor(server): route volume operations through agents (#862)
* refactor(server): route volume operations through agents

* chore: pr feedbacks
2026-05-07 20:51:25 +02:00
Nico
df4b668560 feat(agent): add volume operation RPC (#861) 2026-05-07 18:11:57 +02:00
renovate[bot]
5e4742488f fix(deps): update bun minor and patch dependencies (#865)
* fix(deps): update bun minor and patch dependencies

* fix: ci

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Nicolas Meienberger <github@thisprops.com>
2026-05-07 17:11:53 +02:00
Nicolas Meienberger
1ca1598c58 fix: change dev panel shortcut to D+E+V 2026-05-07 08:17:44 +02:00
Nico
700fa1cd4a feat: route backups through volume agents (#860) 2026-05-06 22:13:51 +02:00
Nico
e65a135676 feat(agents): create agent registry and service (#849)
* feat(agents): create agent registry and service

* fix: mark agent offline only if the session was removed properly

* refactor: centralize agent backup lifecycle state

* refactor: simplify session management

* refactor: move effect / async boundary in one place

* chore: regen migration

* refactor: improve error handling

* chore: pr feedback
2026-05-05 19:34:10 +02:00
Nicolas Meienberger
e981211a2d fix(notifications): validate webhook headers and show delivery health 2026-05-05 10:24:20 +02:00
Nicolas Meienberger
cd69eea27f fix: avoid unnecessary webhook allowlist checks on notification edits 2026-05-05 10:24:20 +02:00
Nicolas Meienberger
b1ae85e2c1 fix(notifications): preserve existing destinations with target allowlist 2026-05-05 10:24:20 +02:00
Nico
147f266929 fix(notifications): enforce allowlist for custom Shoutrrr targets (#853)
* fix(notifications): enforce allowlist for custom Shoutrrr targets

* fix(notifications): enforce allowlist for email notification targets
2026-05-04 17:47:44 +02:00
Nico
0351d5e0b9 refactor(auth): translate better-auth errors allowedHosts (#854)
Closes #852
2026-05-04 17:47:25 +02:00
Nicolas Meienberger
f0ac9fe35c chore: update new issue link to show templates 2026-05-04 17:09:46 +02:00
Nicolas Meienberger
8772d4796e feat(backups): configure backup webhook timeout 2026-05-04 07:52:21 +02:00
Nicolas Meienberger
38f5a669ae fix(core): preserve significant path whitespace 2026-05-04 07:19:57 +02:00
Nicolas Meienberger
7be7c9edae test(e2e): fix waiting on transitive state 2026-05-03 20:51:43 +02:00
Nico
f83b765d04 fix(notifications): persist delivery health status (#850)
* fix(notifications): persist delivery health status

* fix: pr feedback double update
2026-05-02 11:51:16 +02:00
Antoine Jeanselme
3d5a0a9b75 feat: add repositories & volumes column sorting (#808)
* Add repository column sorting

* Make status title correctly centered o nsmaller screens

* Add volumes column sorting

* refactor: use tanstack table for filtering and sorting

* feat: make notifications sortable

* chore: pr feedbacks

---------

Co-authored-by: Antoine Jeanselme <67123340+ajeanselme@users.noreply.github.com>
Co-authored-by: Nicolas Meienberger <github@thisprops.com>
2026-05-02 10:21:42 +02:00
Nicolas Meienberger
d19d827496 fix(backups): default ignore-inode for fuse volumes 2026-05-02 08:54:14 +02:00
Nicolas Meienberger
94d7fdc9a8 fix(notifications): validate notification webhook origins 2026-05-01 18:22:53 +02:00
Nico
220e2d2801 feat: make webhook calls trusted only (#848)
* feat: make webhook calls trusted only

* fix: pr feedbacks
2026-04-30 22:14:22 +02:00
Nico
1cf96c5292 refactor(agents): split local agent bootstrap from controller startup (#847) 2026-04-30 21:39:55 +02:00
Nico
11e9fbcc44 feat: pre/post backup webhooks (#835)
* feat: pre/post backup webhooks

* fix(hooks): run post when cancelled

* refactor(webhooks): headers as array

* refactor: pr feedback

* refactor: simplify hooks ceremonies

* chore: pr feedbacks

* chore: re-gen migration
2026-04-29 23:48:58 +02:00
Nico
a5d47eac5a fix(system): ensure version check is not cached by browser (#833)
#798
2026-04-25 09:41:29 +02:00
Nico
e506047415 test: add property-based tests with fast-check (#832) 2026-04-25 09:35:28 +02:00
Nicolas Meienberger
7b3b7583c0 chore: improve sanitize function to catch escaped characters 2026-04-25 09:30:16 +02:00
Nico
f078e006c1 fix(notifications): encode SMTP credentials in Shoutrrr URLs (#831)
Closes #829
2026-04-25 09:24:05 +02:00
Nicolas Meienberger
c64862f604 refactor: extract shared test fixtures and secret helpers 2026-04-22 22:33:18 +02:00
Nico
26203cca59 chore: remove unused deps (#828) 2026-04-22 22:17:51 +02:00
Nico
6ae5a33acd chore: remove dead files (#827) 2026-04-22 22:13:24 +02:00
Nico
e2c9ef0518 chore: fixed unused types (#824) 2026-04-22 22:04:46 +02:00
Nico
a0c34ee48d chore: cleanup un-used exports (#823) 2026-04-22 21:14:37 +02:00
Nicolas Meienberger
c22af17fa6 fix(volumes): avoid ENOENT during test connection cleanup 2026-04-20 23:06:26 +02:00
Nicolas Meienberger
f967450eea fix(volumes): unmount existing mounts before remounting 2026-04-20 22:34:58 +02:00
Nicolas Meienberger
694f1c212f fix(volumes): isolate test-connection mounts in temp directories 2026-04-20 22:28:42 +02:00
Nico
63b08a4b71 feat(backups): ensure volume readiness before backup (#815)
* feat(backups): ensure volume readiness before backup

Backup preflight checks were relying on a db cached status. Now a real
volume healthcheck is performed before backing up. Closes #811 #695

* chore: fix ci
2026-04-20 21:18:29 +02:00
renovate[bot]
6f0617492b fix(deps): update bun minor and patch dependencies (#795)
* fix(deps): update bun minor and patch dependencies

* chore: update api-client

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Nicolas Meienberger <github@thisprops.com>
2026-04-16 21:46:05 +02:00
Eric Hess
d2f65716fe feat(mirrors): add selective snapshot sync to mirror repositories (#755)
* feat(mirrors): add selective snapshot sync to mirror repositories

Allow users to sync missing snapshots from the source repository to a
mirror. A new sync button per mirror opens a dialog showing which
snapshots are missing, with checkboxes to select which ones to copy.

- Add GET /:shortId/mirrors/:mirrorShortId/status endpoint to compare
  snapshots between source and mirror repositories
- Add POST /:shortId/mirrors/:mirrorShortId/sync endpoint accepting
  selected snapshotIds in the request body
- Extend restic copy command to accept multiple snapshotIds
- Add sync preview dialog with snapshot selection to the frontend

* refactor: stylistic changes

---------

Co-authored-by: Nicolas Meienberger <github@thisprops.com>
2026-04-16 21:28:48 +02:00
Nicolas Meienberger
95006a7471 chore(core package): re-organize files 2026-04-16 19:07:11 +02:00
Nico
d10a3d2d65 docs: init project (#792)
* docs: init project

docs: design

content

header sticky

docs: content

docs: update starting guide

docs: corrections

docs: oidc, sso & more

feat: landing page

style: card design

style: colors

style: zerobyte logo

style: corner content

style: docs cards

ci(docs): auto deploy to cloudflare

docs: 3-2-1 strategy

* fix: anchor links

* style: refactor landing hero

* feat: og

* chore: fix ci

* ci: build docs before publishing
2026-04-15 23:13:10 +02:00
Nico
33601dde24 feat(agent): add standalone agent runtime (#776)
* feat(agent): add standalone agent runtime

* fix(agent): add Bun and DOM types to agent tsconfig

* refactor: wrap backup error in a tagged effect error

* feat(controller): add agent manager and session handling

* feat(backups): execute backups through the agent

* fix(agent): harden disconnect and send-failure handling

* fix: rebase conflicts

* test: simplify mocks

* refactor: split agent runtime state

* fix(backup): keep old path when agent is disabled

* fix: pr feedbacks
2026-04-13 23:29:10 +02:00
Nicolas Meienberger
76ac78c40c chore: fix ts issues in test files 2026-04-12 11:39:06 +02:00
Nicolas Meienberger
832425025f refactor(backup): move retry delay minutes conversion at the contract level 2026-04-12 11:28:39 +02:00
Nicolas Meienberger
ed046f284d fix(backup): reset failure count on cancel 2026-04-12 10:39:14 +02:00
Nicolas Meienberger
cb22e34215 refactor(backup): default to 2 retries & 15 minutes delay 2026-04-12 10:16:26 +02:00
DerPenz
8765c5e705 feature(backup): do not trigger retry on manual backup 2026-04-12 09:49:35 +02:00
DerPenz
11bb95db92 fix(backup): retry wont be scheduled if it is after the next scheduled backup 2026-04-12 09:49:35 +02:00
DerPenz
5d8c2925d8 fix(backup): resetting failureRetryCount if backup is not retried 2026-04-12 09:49:35 +02:00