Nico
3a2704b03c
feat(mirror): show sync progress ( #1078 )
2026-07-30 09:22:11 +08:00
renovate[bot]
a96aed8eb2
chore(deps): update dependency @types/node to v26 ( #1000 )
...
* chore(deps): update dependency @types/node to v26
* fix(core): normalize exec output to strings for Node 26
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Nicolas Meienberger <github@thisprops.com >
2026-07-22 08:03:47 +02:00
Nico
3b9803862d
refactor(restic): support cancellable maintenance commands ( #1059 )
...
* refactor(restic): support cancellable maintenance commands
* fix(restic): also cancel stale locks with the same abort controller
2026-07-14 18:05:45 +02:00
renovate[bot]
b1db4b8c78
fix(deps): update bun minor and patch dependencies ( #1041 )
...
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-14 16:37:02 +02:00
renovate[bot]
99cbd94841
chore(deps): update dependency typescript to v7 ( #1055 )
...
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-14 13:57:52 +02:00
Nico
de150b8cc4
feat(sftp): add option for absolute & parent symlink backups ( #1040 )
...
* feat(sftp): add option for absolute & parent symlink backups
Related issue: #1007
Recent SSHFS now contains absolute/parent-directory symlinks by default,
which is safer for browsing but prevents Restic from archiving the
original symlink metadata. This adds an opt-in `no_contain_symlinks`
switch for trusted SFTP sources that need exact symlink backup
* refactor(sftp): block unsafe symlink with skip host check combination
2026-07-06 14:11:42 +02:00
Nico
46c21c8529
feat(webhooks): allow insecure tls for self-signed certs ( #1034 )
2026-07-06 10:26:21 +02:00
Nico
f26ed7b5fd
feat(desktop): add app foundation ( #1001 )
...
* feat(desktop): add app foundation
refactor(desktop): slim app foundation
* refactor: pr feedbacks
2026-06-22 14:05:02 +02:00
Nico
3c37360bca
fix(restore): files with brackets in name ( #981 )
2026-06-14 15:22:51 +02:00
Nico
2361a00e53
feat(restic): support configurable restic command ( #979 )
2026-06-14 14:15:51 +02:00
Nico
15c367eeb8
feat(copy): pass custom restic params ( #976 )
...
Restic copy (mirror) should inherit the compatible custom flags from the
parent backup setup
Related issue #960
2026-06-13 10:29:36 +02:00
Nicolas Meienberger
d70ec84baa
fix: adapt for new restic 0.19.0 behavior
2026-06-11 20:01:27 +02:00
Nico
fd48ff9ce9
fix(backups): reduce low-cpu backup UI contention ( #963 )
...
* fix(backups): reduce low-cpu backup UI contention
* chore: remove un-used import
* refactor: start polling for backup updates on start event
* fix: skip ionice automatically if it fails to schedule
2026-06-10 19:36:56 +02:00
Nico
d0b6844435
fix(backups): skip warning messages on exit code 0 ( #965 )
2026-06-10 18:33:52 +02:00
Nico
5dabe9dec5
refactor: buffer backup / restore progress ( #956 )
2026-06-08 17:36:20 +02:00
Nico
ef6b68490b
docs: performance tuning ( #952 )
...
* docs: performance tuning
* chore: pr feedback
2026-06-07 10:28:55 +02:00
Nicolas Meienberger
4bba2c2493
refactor: remove repository lock diagnostics logs
2026-06-04 19:58:02 +02:00
Nicolas Meienberger
edab1b231b
fix(restic): validate lock diagnostics object IDs
2026-06-03 18:47:04 +02:00
Nico
333c11986d
feat: enforce protocol version between agent and controller ( #938 )
...
* feat: enforce protocol version between agent and controller
* chore: add logging for protocol rejected message
2026-06-03 18:29:36 +02:00
Nicolas Meienberger
62cdf5dcca
fix(backup-config): throw if include patterns have un-supported characters
2026-06-01 20:14:12 +02:00
Nico
00d1dac515
fix(backup-config): throw if include patterns have un-supported chars ( #931 )
2026-06-01 20:02:07 +02:00
Nico
8fedeef4d1
feat: add restore agent RPC foundation ( #929 )
...
* feat: add restore agent RPC foundation
* chore: temp event handlers
* refactor: export restore progress from dto file
2026-05-31 19:39:20 +02:00
Nico
0a2c6bca0c
refactor(restic): auto try to unlock and remove stale locks ( #926 )
2026-05-30 13:21:22 +02:00
Nico
d4436b0cdc
refactor(restic): all commands return effects ( #924 )
...
* refactor(restic): all commands are effects
* fix(restic): preserve effect failure errors
* chore: pr feedbacks
2026-05-30 10:10:54 +02:00
Nicolas Meienberger
d502b96509
test: fix webhook mocks
2026-05-29 20:45:16 +02:00
Nico
7b5c53bb7d
fix(sftp): allow legacy ssh rsa to add support for older servers ( #921 )
...
* refactor(e2e): use more stable assertion
* feat(sftp): add legacy ssh-rsa option
2026-05-27 21:19:23 +02:00
Nico
20d202c20e
fix(core): enforce webhook timeout ( #920 )
2026-05-27 20:35:01 +02:00
Nico
11dacd7c71
refactor(agent): store SFTP volume keys in tmp ( #888 )
...
* refactor(agent): store SFTP volume keys in tmp
* refactor: store temp keys in /run/zerobyte subfolders
* fix(restic): clean temp secrets dir on env setup failure
* fix: one secrets temp dir per env building
2026-05-17 18:19:09 +02:00
Nico
19a0781667
test: backend integration ( #889 )
...
* test: backend integration
* docs: mounted shares acls
* feat: smb expose real ACLs when available
* fix: re-init repo on setup
* chore: add missing @hono/standard-validator package
* chore: add happy-dom dev dep
2026-05-17 15:18:56 +02:00
renovate[bot]
0dccd00539
fix(deps): update bun minor and patch dependencies ( #867 )
...
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-17 13:54:02 +02:00
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
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
3c7eb65c7c
chore(package-core): remove lock
2026-05-07 09:17:46 +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
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
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
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
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
e2c9ef0518
chore: fixed unused types ( #824 )
2026-04-22 22:04:46 +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
4520335ebc
fix(rclone): pass explicitly the RCLONE_CONF env var ( #779 )
2026-04-12 09:25:57 +02:00
Nico
863fbfc5cc
fix(snapshots): use streamed response to avoid 1 MiB buffer limit on large repos ( #771 )
2026-04-09 23:47:36 +02:00
Nico
8a4a06f888
chore: migrate toolchain to vite-plus ( #762 )
...
* chore: migrate toolchain to vite-plus
* chore: run lint with bunx
* chore: add vp config postinstall
2026-04-09 17:57:19 +02:00