main
html 104 lines 5.3 KB
Raw
1 <html>
2
3 <head>
4 <title>Time Travel</title>
5 </head>
6
7 <body>
8 <div x-data>
9 <template x-if="config">
10 <div>
11 <div class="section-title">Time Travel retention</div>
12 <div class="section-description">
13 Time Travel keeps a hidden history of every workspace it snapshots. Retention
14 keeps that storage bounded by cleaning up histories nothing can reach anymore
15 (deleted chats and projects) and, optionally, aging out old history.
16 </div>
17
18 <div class="field">
19 <div class="field-label">
20 <div class="field-title">Enable retention</div>
21 <div class="field-description">
22 Periodically clean up orphaned workspace histories, stale snapshot
23 locks, and corrupt-repository backups. Turning this off means Time
24 Travel storage grows without bound.
25 </div>
26 </div>
27 <div class="field-control">
28 <label class="toggle">
29 <input type="checkbox" x-model="config.retention_enabled"
30 x-init="if (config.retention_enabled === undefined || config.retention_enabled === null) config.retention_enabled = true" />
31 <span class="toggler"></span>
32 </label>
33 </div>
34 </div>
35
36 <div class="field">
37 <div class="field-label">
38 <div class="field-title">Sweep interval (hours)</div>
39 <div class="field-description">
40 How often the cleanup runs.
41 </div>
42 </div>
43 <div class="field-control">
44 <input type="number" min="1" step="1"
45 x-init="if (config.retention_sweep_interval_hours === undefined || config.retention_sweep_interval_hours === null) config.retention_sweep_interval_hours = 6"
46 x-model.number="config.retention_sweep_interval_hours" />
47 </div>
48 </div>
49
50 <div class="field">
51 <div class="field-label">
52 <div class="field-title">Delete history older than (days)</div>
53 <div class="field-description">
54 Leave at 0 (the default) and workspace history is kept forever. Set a
55 number — say 30 — and a workspace with no snapshot in that many days
56 has its history deleted. Time Travel simply starts a fresh history on
57 the workspace's next change.
58 </div>
59 </div>
60 <div class="field-control">
61 <input type="number" min="0" step="1"
62 x-init="if (config.retention_max_age_days === undefined || config.retention_max_age_days === null) config.retention_max_age_days = 0"
63 x-model.number="config.retention_max_age_days" />
64 </div>
65 </div>
66
67 <div class="field">
68 <div class="field-label">
69 <div class="field-title">Orphan grace period (hours)</div>
70 <div class="field-description">
71 History belonging to a deleted chat or project is unreachable from the
72 UI and gets cleaned up — but only after it has been inactive this long,
73 so recent work is never raced.
74 </div>
75 </div>
76 <div class="field-control">
77 <input type="number" min="1" step="1"
78 x-init="if (config.retention_orphan_grace_hours === undefined || config.retention_orphan_grace_hours === null) config.retention_orphan_grace_hours = 24"
79 x-model.number="config.retention_orphan_grace_hours" />
80 </div>
81 </div>
82
83 <div class="field">
84 <div class="field-label">
85 <div class="field-title">Stale snapshot lock age (minutes)</div>
86 <div class="field-description">
87 A leftover git index.lock older than this is removed so snapshots stop
88 failing with "index.lock: File exists". Time Travel's own git
89 operations are killed after 20 seconds, so no legitimate lock lives
90 this long.
91 </div>
92 </div>
93 <div class="field-control">
94 <input type="number" min="5" step="1"
95 x-init="if (config.retention_stale_lock_minutes === undefined || config.retention_stale_lock_minutes === null) config.retention_stale_lock_minutes = 30"
96 x-model.number="config.retention_stale_lock_minutes" />
97 </div>
98 </div>
99 </div>
100 </template>
101 </div>
102 </body>
103
104 </html>