@proletariat/cli 0.3.94 → 0.3.95

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (237) hide show
  1. package/dist/commands/agent/cleanup.d.ts +3 -4
  2. package/dist/commands/agent/cleanup.js +5 -4
  3. package/dist/commands/agent/cleanup.js.map +1 -1
  4. package/dist/commands/agent/gc.d.ts +3 -4
  5. package/dist/commands/agent/gc.js +5 -4
  6. package/dist/commands/agent/gc.js.map +1 -1
  7. package/dist/commands/agent/index.d.ts +3 -4
  8. package/dist/commands/agent/index.js +5 -4
  9. package/dist/commands/agent/index.js.map +1 -1
  10. package/dist/commands/agent/list.d.ts +3 -4
  11. package/dist/commands/agent/list.js +5 -4
  12. package/dist/commands/agent/list.js.map +1 -1
  13. package/dist/commands/agent/remove.d.ts +3 -4
  14. package/dist/commands/agent/remove.js +5 -4
  15. package/dist/commands/agent/remove.js.map +1 -1
  16. package/dist/commands/agent/staff/index.d.ts +3 -4
  17. package/dist/commands/agent/staff/index.js +5 -4
  18. package/dist/commands/agent/staff/index.js.map +1 -1
  19. package/dist/commands/agent/staff/remove.d.ts +3 -4
  20. package/dist/commands/agent/staff/remove.js +5 -4
  21. package/dist/commands/agent/staff/remove.js.map +1 -1
  22. package/dist/commands/agent/status.d.ts +3 -4
  23. package/dist/commands/agent/status.js +5 -4
  24. package/dist/commands/agent/status.js.map +1 -1
  25. package/dist/commands/agent/visit.d.ts +3 -4
  26. package/dist/commands/agent/visit.js +5 -4
  27. package/dist/commands/agent/visit.js.map +1 -1
  28. package/dist/commands/branch/create.js +1 -12
  29. package/dist/commands/branch/create.js.map +1 -1
  30. package/dist/commands/branch/list.d.ts +3 -4
  31. package/dist/commands/branch/list.js +5 -4
  32. package/dist/commands/branch/list.js.map +1 -1
  33. package/dist/commands/branch/validate.d.ts +3 -4
  34. package/dist/commands/branch/validate.js +6 -5
  35. package/dist/commands/branch/validate.js.map +1 -1
  36. package/dist/commands/branch/where.d.ts +3 -4
  37. package/dist/commands/branch/where.js +5 -4
  38. package/dist/commands/branch/where.js.map +1 -1
  39. package/dist/commands/commit.js +1 -1
  40. package/dist/commands/commit.js.map +1 -1
  41. package/dist/commands/db/backup.d.ts +16 -0
  42. package/dist/commands/db/backup.js +125 -0
  43. package/dist/commands/db/backup.js.map +1 -0
  44. package/dist/commands/db/repair.js +8 -11
  45. package/dist/commands/db/repair.js.map +1 -1
  46. package/dist/commands/execution/config.d.ts +3 -4
  47. package/dist/commands/execution/config.js +5 -4
  48. package/dist/commands/execution/config.js.map +1 -1
  49. package/dist/commands/execution/index.d.ts +3 -4
  50. package/dist/commands/execution/index.js +5 -4
  51. package/dist/commands/execution/index.js.map +1 -1
  52. package/dist/commands/execution/list.d.ts +3 -4
  53. package/dist/commands/execution/list.js +5 -4
  54. package/dist/commands/execution/list.js.map +1 -1
  55. package/dist/commands/execution/logs.d.ts +3 -4
  56. package/dist/commands/execution/logs.js +5 -4
  57. package/dist/commands/execution/logs.js.map +1 -1
  58. package/dist/commands/execution/stop.d.ts +3 -4
  59. package/dist/commands/execution/stop.js +5 -4
  60. package/dist/commands/execution/stop.js.map +1 -1
  61. package/dist/commands/execution/view.d.ts +3 -4
  62. package/dist/commands/execution/view.js +5 -4
  63. package/dist/commands/execution/view.js.map +1 -1
  64. package/dist/commands/hook/export.d.ts +3 -4
  65. package/dist/commands/hook/export.js +5 -4
  66. package/dist/commands/hook/export.js.map +1 -1
  67. package/dist/commands/hook/fire.d.ts +3 -4
  68. package/dist/commands/hook/fire.js +5 -4
  69. package/dist/commands/hook/fire.js.map +1 -1
  70. package/dist/commands/hook/list.d.ts +3 -4
  71. package/dist/commands/hook/list.js +5 -4
  72. package/dist/commands/hook/list.js.map +1 -1
  73. package/dist/commands/hook/preset.d.ts +3 -4
  74. package/dist/commands/hook/preset.js +5 -4
  75. package/dist/commands/hook/preset.js.map +1 -1
  76. package/dist/commands/orchestrate/index.d.ts +3 -4
  77. package/dist/commands/orchestrate/index.js +5 -4
  78. package/dist/commands/orchestrate/index.js.map +1 -1
  79. package/dist/commands/orchestrator/index.d.ts +3 -4
  80. package/dist/commands/orchestrator/index.js +5 -4
  81. package/dist/commands/orchestrator/index.js.map +1 -1
  82. package/dist/commands/pr/checks.d.ts +3 -4
  83. package/dist/commands/pr/checks.js +5 -4
  84. package/dist/commands/pr/checks.js.map +1 -1
  85. package/dist/commands/repo/add.d.ts +3 -4
  86. package/dist/commands/repo/add.js +5 -4
  87. package/dist/commands/repo/add.js.map +1 -1
  88. package/dist/commands/repo/create.d.ts +3 -4
  89. package/dist/commands/repo/create.js +5 -4
  90. package/dist/commands/repo/create.js.map +1 -1
  91. package/dist/commands/repo/fix-remotes.d.ts +3 -4
  92. package/dist/commands/repo/fix-remotes.js +5 -4
  93. package/dist/commands/repo/fix-remotes.js.map +1 -1
  94. package/dist/commands/repo/index.d.ts +3 -4
  95. package/dist/commands/repo/index.js +5 -4
  96. package/dist/commands/repo/index.js.map +1 -1
  97. package/dist/commands/repo/list.d.ts +3 -4
  98. package/dist/commands/repo/list.js +5 -4
  99. package/dist/commands/repo/list.js.map +1 -1
  100. package/dist/commands/session/cleanup.d.ts +3 -4
  101. package/dist/commands/session/cleanup.js +5 -4
  102. package/dist/commands/session/cleanup.js.map +1 -1
  103. package/dist/commands/session/create.d.ts +3 -4
  104. package/dist/commands/session/create.js +5 -4
  105. package/dist/commands/session/create.js.map +1 -1
  106. package/dist/commands/session/exec.d.ts +3 -4
  107. package/dist/commands/session/exec.js +5 -4
  108. package/dist/commands/session/exec.js.map +1 -1
  109. package/dist/commands/session/health.js +18 -0
  110. package/dist/commands/session/health.js.map +1 -1
  111. package/dist/commands/session/index.d.ts +3 -4
  112. package/dist/commands/session/index.js +9 -4
  113. package/dist/commands/session/index.js.map +1 -1
  114. package/dist/commands/session/inspect.d.ts +3 -4
  115. package/dist/commands/session/inspect.js +5 -4
  116. package/dist/commands/session/inspect.js.map +1 -1
  117. package/dist/commands/session/list.d.ts +3 -4
  118. package/dist/commands/session/list.js +19 -5
  119. package/dist/commands/session/list.js.map +1 -1
  120. package/dist/commands/session/prune.d.ts +3 -4
  121. package/dist/commands/session/prune.js +5 -4
  122. package/dist/commands/session/prune.js.map +1 -1
  123. package/dist/commands/session/report.d.ts +25 -5
  124. package/dist/commands/session/report.js +201 -5
  125. package/dist/commands/session/report.js.map +1 -1
  126. package/dist/commands/session/restart.d.ts +3 -4
  127. package/dist/commands/session/restart.js +5 -4
  128. package/dist/commands/session/restart.js.map +1 -1
  129. package/dist/commands/session/watch.d.ts +17 -0
  130. package/dist/commands/session/watch.js +139 -0
  131. package/dist/commands/session/watch.js.map +1 -0
  132. package/dist/commands/ticket/index.d.ts +3 -4
  133. package/dist/commands/ticket/index.js +5 -4
  134. package/dist/commands/ticket/index.js.map +1 -1
  135. package/dist/commands/web.d.ts +20 -0
  136. package/dist/commands/web.js +82 -0
  137. package/dist/commands/web.js.map +1 -0
  138. package/dist/commands/work/hooks/add.d.ts +3 -4
  139. package/dist/commands/work/hooks/add.js +5 -4
  140. package/dist/commands/work/hooks/add.js.map +1 -1
  141. package/dist/commands/work/hooks/list.d.ts +3 -4
  142. package/dist/commands/work/hooks/list.js +5 -4
  143. package/dist/commands/work/hooks/list.js.map +1 -1
  144. package/dist/commands/work/hooks/toggle.d.ts +3 -4
  145. package/dist/commands/work/hooks/toggle.js +5 -4
  146. package/dist/commands/work/hooks/toggle.js.map +1 -1
  147. package/dist/commands/work/peek.d.ts +3 -4
  148. package/dist/commands/work/peek.js +5 -4
  149. package/dist/commands/work/peek.js.map +1 -1
  150. package/dist/commands/work/propose.d.ts +23 -0
  151. package/dist/commands/work/propose.js +57 -0
  152. package/dist/commands/work/propose.js.map +1 -0
  153. package/dist/commands/work/ready.js +2 -2
  154. package/dist/commands/work/ready.js.map +1 -1
  155. package/dist/commands/work/rebase.d.ts +1 -1
  156. package/dist/commands/work/rebase.js +52 -49
  157. package/dist/commands/work/rebase.js.map +1 -1
  158. package/dist/commands/work/ship.d.ts +6 -0
  159. package/dist/commands/work/ship.js +217 -48
  160. package/dist/commands/work/ship.js.map +1 -1
  161. package/dist/commands/work/start.js +3 -6
  162. package/dist/commands/work/start.js.map +1 -1
  163. package/dist/commands/work/stop.d.ts +3 -4
  164. package/dist/commands/work/stop.js +5 -4
  165. package/dist/commands/work/stop.js.map +1 -1
  166. package/dist/hooks/init.js +11 -1
  167. package/dist/hooks/init.js.map +1 -1
  168. package/dist/lib/branch/index.d.ts +6 -5
  169. package/dist/lib/branch/index.js +8 -13
  170. package/dist/lib/branch/index.js.map +1 -1
  171. package/dist/lib/dashboard/html.d.ts +2 -1
  172. package/dist/lib/dashboard/html.js +150 -522
  173. package/dist/lib/dashboard/html.js.map +1 -1
  174. package/dist/lib/database/db-safety.d.ts +48 -9
  175. package/dist/lib/database/db-safety.js +308 -43
  176. package/dist/lib/database/db-safety.js.map +1 -1
  177. package/dist/lib/database/index.d.ts +1 -1
  178. package/dist/lib/database/index.js +1 -1
  179. package/dist/lib/database/index.js.map +1 -1
  180. package/dist/lib/database/workspace.js +3 -1
  181. package/dist/lib/database/workspace.js.map +1 -1
  182. package/dist/lib/execution/runners/docker.js +8 -0
  183. package/dist/lib/execution/runners/docker.js.map +1 -1
  184. package/dist/lib/execution/runners/prompt-builder.js +9 -6
  185. package/dist/lib/execution/runners/prompt-builder.js.map +1 -1
  186. package/dist/lib/execution/spawner.js +2 -4
  187. package/dist/lib/execution/spawner.js.map +1 -1
  188. package/dist/lib/execution/storage.d.ts +29 -1
  189. package/dist/lib/execution/storage.js +77 -0
  190. package/dist/lib/execution/storage.js.map +1 -1
  191. package/dist/lib/execution/types.d.ts +17 -6
  192. package/dist/lib/execution/types.js +10 -7
  193. package/dist/lib/execution/types.js.map +1 -1
  194. package/dist/lib/machine-config.d.ts +8 -0
  195. package/dist/lib/machine-config.js +37 -0
  196. package/dist/lib/machine-config.js.map +1 -1
  197. package/dist/lib/orchestrate/poller.d.ts +1 -1
  198. package/dist/lib/orchestrate/poller.js +1 -1
  199. package/dist/lib/pmo/storage/base.js +5 -3
  200. package/dist/lib/pmo/storage/base.js.map +1 -1
  201. package/dist/lib/providers/index.d.ts +1 -0
  202. package/dist/lib/providers/index.js +1 -0
  203. package/dist/lib/providers/index.js.map +1 -1
  204. package/dist/lib/providers/resolver.js +16 -0
  205. package/dist/lib/providers/resolver.js.map +1 -1
  206. package/dist/lib/providers/trello-provider.d.ts +28 -0
  207. package/dist/lib/providers/trello-provider.js +381 -0
  208. package/dist/lib/providers/trello-provider.js.map +1 -0
  209. package/dist/lib/session/heartbeat.d.ts +45 -0
  210. package/dist/lib/session/heartbeat.js +150 -0
  211. package/dist/lib/session/heartbeat.js.map +1 -0
  212. package/dist/lib/session/index.d.ts +7 -0
  213. package/dist/lib/session/index.js +8 -0
  214. package/dist/lib/session/index.js.map +1 -0
  215. package/dist/lib/session/watcher.d.ts +79 -0
  216. package/dist/lib/session/watcher.js +142 -0
  217. package/dist/lib/session/watcher.js.map +1 -0
  218. package/dist/lib/shipping/auto-merge.d.ts +57 -0
  219. package/dist/lib/shipping/auto-merge.js +311 -0
  220. package/dist/lib/shipping/auto-merge.js.map +1 -0
  221. package/dist/lib/shipping/github.d.ts +68 -0
  222. package/dist/lib/shipping/github.js +217 -0
  223. package/dist/lib/shipping/github.js.map +1 -0
  224. package/dist/lib/shipping/index.d.ts +13 -0
  225. package/dist/lib/shipping/index.js +11 -0
  226. package/dist/lib/shipping/index.js.map +1 -0
  227. package/dist/lib/shipping/rebase.d.ts +35 -0
  228. package/dist/lib/shipping/rebase.js +107 -0
  229. package/dist/lib/shipping/rebase.js.map +1 -0
  230. package/dist/lib/shipping/types.d.ts +181 -0
  231. package/dist/lib/shipping/types.js +9 -0
  232. package/dist/lib/shipping/types.js.map +1 -0
  233. package/dist/lib/trello/client.d.ts +1 -0
  234. package/dist/lib/trello/client.js +6 -0
  235. package/dist/lib/trello/client.js.map +1 -1
  236. package/oclif.manifest.json +908 -1009
  237. package/package.json +8 -8
@@ -1 +1 @@
1
- {"version":3,"file":"html.js","sourceRoot":"","sources":["../../../src/lib/dashboard/html.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,SAAS,UAAU,CAAC,GAAW;IAC7B,OAAO,GAAG;SACP,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;AAC5B,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAwpBD,CAAA;AACR,CAAC"}
1
+ {"version":3,"file":"html.js","sourceRoot":"","sources":["../../../src/lib/dashboard/html.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA2SD,CAAA;AACR,CAAC"}
@@ -3,11 +3,12 @@
3
3
  *
4
4
  * Provides:
5
5
  * - WAL journal mode configuration
6
- * - Rotating backup (keeps last 5 copies)
6
+ * - Timestamped backup in .proletariat/backups/ (keeps last 5)
7
7
  * - Integrity check on open with auto-recovery
8
8
  * - Manual repair via dump/reimport
9
+ * - Migration of legacy scattered backup files
9
10
  *
10
- * See: PRLT-1081
11
+ * See: PRLT-1081, PRLT-1154
11
12
  */
12
13
  import Database from 'better-sqlite3';
13
14
  /**
@@ -16,18 +17,56 @@ import Database from 'better-sqlite3';
16
17
  * more resistant to corruption than the default journal_mode=delete.
17
18
  */
18
19
  export declare function enableWALMode(db: Database.Database): void;
20
+ /**
21
+ * Get the backups directory for a given database path.
22
+ * The backups directory is always a sibling `backups/` directory
23
+ * relative to the database file (e.g., `.proletariat/backups/`).
24
+ */
25
+ export declare function getBackupsDir(dbPath: string): string;
19
26
  /**
20
27
  * Get the backup path for a given database path and backup number.
28
+ * Backups are stored in the backups/ directory with timestamps.
29
+ *
30
+ * For numbered access (used by backup restore), returns a path
31
+ * based on sorted backup files in the directory.
32
+ * Returns null if the backup doesn't exist.
21
33
  */
22
- export declare function getBackupPath(dbPath: string, n: number): string;
34
+ export declare function getBackupPath(dbPath: string, n: number): string | null;
23
35
  /**
24
- * Create a rotating backup of the database file.
25
- * Keeps the last MAX_BACKUPS copies, numbered 1 (newest) through MAX_BACKUPS (oldest).
26
- * Rotates existing backups before copying the current database.
36
+ * Create a timestamped backup of the database file in the backups/ directory.
37
+ * Keeps the last MAX_BACKUPS copies, deletes older ones.
27
38
  *
28
- * Returns true if backup was created, false if source didn't exist.
39
+ * Returns the backup path if created, null if source didn't exist.
40
+ */
41
+ export declare function createRotatingBackup(dbPath: string): string | null;
42
+ /**
43
+ * Create a manual backup with an optional label.
44
+ * Unlike auto-backups, manual backups include a "manual" prefix.
45
+ * Returns the backup path.
46
+ */
47
+ export declare function createManualBackup(dbPath: string, label?: string): string | null;
48
+ /**
49
+ * Migrate legacy backup files from the .proletariat/ top level into backups/.
50
+ *
51
+ * Handles:
52
+ * - workspace.db.backup (plain backup)
53
+ * - workspace.db.backup-YYYYMMDD-HHMMSS (timestamped backups)
54
+ * - workspace.db.backup.N (numbered backups with -wal/-shm companions)
55
+ * - workspace.db.corrupt (corrupt file preservations)
56
+ *
57
+ * Called on first run after upgrade. Safe to call multiple times.
58
+ */
59
+ export declare function migrateExistingBackups(dbPath: string): void;
60
+ /**
61
+ * List all backup entries with metadata, sorted newest-first.
62
+ * Used by the repair and backup commands to display backup info.
29
63
  */
30
- export declare function createRotatingBackup(dbPath: string): boolean;
64
+ export declare function listBackups(dbPath: string): Array<{
65
+ path: string;
66
+ filename: string;
67
+ size: number;
68
+ mtime: Date;
69
+ }>;
31
70
  export interface IntegrityCheckResult {
32
71
  ok: boolean;
33
72
  errors: string[];
@@ -54,6 +93,6 @@ export interface RepairResult {
54
93
  * 1. Try dump/reimport — opens the corrupt DB, dumps all SQL, creates a new DB
55
94
  * 2. If dump fails, fall back to the most recent backup
56
95
  *
57
- * The original corrupt file is preserved as dbPath.corrupt for forensics.
96
+ * The original corrupt file is preserved in backups/ for forensics.
58
97
  */
59
98
  export declare function repairDatabase(dbPath: string): RepairResult;
@@ -3,11 +3,12 @@
3
3
  *
4
4
  * Provides:
5
5
  * - WAL journal mode configuration
6
- * - Rotating backup (keeps last 5 copies)
6
+ * - Timestamped backup in .proletariat/backups/ (keeps last 5)
7
7
  * - Integrity check on open with auto-recovery
8
8
  * - Manual repair via dump/reimport
9
+ * - Migration of legacy scattered backup files
9
10
  *
10
- * See: PRLT-1081
11
+ * See: PRLT-1081, PRLT-1154
11
12
  */
12
13
  import Database from 'better-sqlite3';
13
14
  import * as fs from 'node:fs';
@@ -21,53 +22,314 @@ const MAX_BACKUPS = 5;
21
22
  export function enableWALMode(db) {
22
23
  db.pragma('journal_mode = WAL');
23
24
  }
25
+ /**
26
+ * Get the backups directory for a given database path.
27
+ * The backups directory is always a sibling `backups/` directory
28
+ * relative to the database file (e.g., `.proletariat/backups/`).
29
+ */
30
+ export function getBackupsDir(dbPath) {
31
+ return path.join(path.dirname(dbPath), 'backups');
32
+ }
24
33
  /**
25
34
  * Get the backup path for a given database path and backup number.
35
+ * Backups are stored in the backups/ directory with timestamps.
36
+ *
37
+ * For numbered access (used by backup restore), returns a path
38
+ * based on sorted backup files in the directory.
39
+ * Returns null if the backup doesn't exist.
26
40
  */
27
41
  export function getBackupPath(dbPath, n) {
28
- return `${dbPath}.backup.${n}`;
42
+ const backupsDir = getBackupsDir(dbPath);
43
+ if (!fs.existsSync(backupsDir)) {
44
+ return null;
45
+ }
46
+ const backups = listBackupFiles(backupsDir);
47
+ if (n < 1 || n > backups.length) {
48
+ return null;
49
+ }
50
+ // backups are sorted newest-first, so n=1 is the most recent
51
+ return backups[n - 1];
52
+ }
53
+ /**
54
+ * List backup files in the backups directory, sorted newest-first.
55
+ * Only returns .db files (excludes -wal, -shm, and .corrupt files).
56
+ */
57
+ function listBackupFiles(backupsDir) {
58
+ if (!fs.existsSync(backupsDir)) {
59
+ return [];
60
+ }
61
+ const files = fs.readdirSync(backupsDir)
62
+ .filter(f => f.endsWith('.db') && !f.endsWith('.corrupt.db'))
63
+ .map(f => path.join(backupsDir, f))
64
+ .sort((a, b) => {
65
+ // Sort by modification time, newest first
66
+ const statA = fs.statSync(a);
67
+ const statB = fs.statSync(b);
68
+ return statB.mtimeMs - statA.mtimeMs;
69
+ });
70
+ return files;
71
+ }
72
+ /**
73
+ * Generate a unique timestamped backup filename.
74
+ * Checks the backups directory to avoid filename collisions.
75
+ */
76
+ function generateUniqueBackupPath(backupsDir, prefix = 'workspace') {
77
+ const ts = formatTimestamp(new Date());
78
+ const baseName = `${prefix}-${ts}`;
79
+ const candidate = path.join(backupsDir, `${baseName}.db`);
80
+ if (!fs.existsSync(candidate)) {
81
+ return candidate;
82
+ }
83
+ // If collision, append a counter
84
+ for (let i = 1; i < 100; i++) {
85
+ const alt = path.join(backupsDir, `${baseName}-${i}.db`);
86
+ if (!fs.existsSync(alt)) {
87
+ return alt;
88
+ }
89
+ }
90
+ // Extremely unlikely fallback
91
+ return path.join(backupsDir, `${baseName}-${Date.now()}.db`);
29
92
  }
30
93
  /**
31
- * Create a rotating backup of the database file.
32
- * Keeps the last MAX_BACKUPS copies, numbered 1 (newest) through MAX_BACKUPS (oldest).
33
- * Rotates existing backups before copying the current database.
94
+ * Create a timestamped backup of the database file in the backups/ directory.
95
+ * Keeps the last MAX_BACKUPS copies, deletes older ones.
34
96
  *
35
- * Returns true if backup was created, false if source didn't exist.
97
+ * Returns the backup path if created, null if source didn't exist.
36
98
  */
37
99
  export function createRotatingBackup(dbPath) {
38
100
  if (!fs.existsSync(dbPath)) {
39
- return false;
101
+ return null;
102
+ }
103
+ const backupsDir = getBackupsDir(dbPath);
104
+ fs.mkdirSync(backupsDir, { recursive: true });
105
+ const backupPath = generateUniqueBackupPath(backupsDir);
106
+ // Copy current database as timestamped backup
107
+ try {
108
+ fs.copyFileSync(dbPath, backupPath);
109
+ // Also copy WAL and SHM files if they exist (for WAL-mode databases)
110
+ const walPath = `${dbPath}-wal`;
111
+ const shmPath = `${dbPath}-shm`;
112
+ if (fs.existsSync(walPath)) {
113
+ fs.copyFileSync(walPath, `${backupPath}-wal`);
114
+ }
115
+ if (fs.existsSync(shmPath)) {
116
+ fs.copyFileSync(shmPath, `${backupPath}-shm`);
117
+ }
40
118
  }
41
- // Rotate existing backups: delete oldest, shift others up
42
- const oldest = getBackupPath(dbPath, MAX_BACKUPS);
43
- if (fs.existsSync(oldest)) {
44
- fs.unlinkSync(oldest);
119
+ catch {
120
+ // Backup failure is not fatal — log and continue
121
+ return null;
45
122
  }
46
- for (let i = MAX_BACKUPS - 1; i >= 1; i--) {
47
- const src = getBackupPath(dbPath, i);
48
- const dst = getBackupPath(dbPath, i + 1);
49
- if (fs.existsSync(src)) {
50
- fs.renameSync(src, dst);
123
+ // Rotate: delete older backups beyond MAX_BACKUPS
124
+ rotateBackups(backupsDir);
125
+ return backupPath;
126
+ }
127
+ /**
128
+ * Delete older backups beyond MAX_BACKUPS.
129
+ * Keeps the newest MAX_BACKUPS .db files, deletes the rest
130
+ * (along with their -wal and -shm companions).
131
+ */
132
+ function rotateBackups(backupsDir) {
133
+ const backups = listBackupFiles(backupsDir);
134
+ // Keep the first MAX_BACKUPS, delete the rest
135
+ for (let i = MAX_BACKUPS; i < backups.length; i++) {
136
+ const bp = backups[i];
137
+ try {
138
+ fs.unlinkSync(bp);
139
+ // Also clean up WAL and SHM companions
140
+ for (const suffix of ['-wal', '-shm']) {
141
+ const companion = `${bp}${suffix}`;
142
+ if (fs.existsSync(companion)) {
143
+ fs.unlinkSync(companion);
144
+ }
145
+ }
146
+ }
147
+ catch {
148
+ // Best-effort cleanup
51
149
  }
52
150
  }
53
- // Copy current database as backup.1 (newest)
151
+ }
152
+ /**
153
+ * Create a manual backup with an optional label.
154
+ * Unlike auto-backups, manual backups include a "manual" prefix.
155
+ * Returns the backup path.
156
+ */
157
+ export function createManualBackup(dbPath, label) {
158
+ if (!fs.existsSync(dbPath)) {
159
+ return null;
160
+ }
161
+ const backupsDir = getBackupsDir(dbPath);
162
+ fs.mkdirSync(backupsDir, { recursive: true });
163
+ const suffix = label ? `-${label}` : '';
164
+ const backupPath = generateUniqueBackupPath(backupsDir, `workspace-manual${suffix}`);
54
165
  try {
55
- fs.copyFileSync(dbPath, getBackupPath(dbPath, 1));
56
- // Also copy WAL and SHM files if they exist (for WAL-mode databases)
166
+ fs.copyFileSync(dbPath, backupPath);
57
167
  const walPath = `${dbPath}-wal`;
58
168
  const shmPath = `${dbPath}-shm`;
59
169
  if (fs.existsSync(walPath)) {
60
- fs.copyFileSync(walPath, `${getBackupPath(dbPath, 1)}-wal`);
170
+ fs.copyFileSync(walPath, `${backupPath}-wal`);
61
171
  }
62
172
  if (fs.existsSync(shmPath)) {
63
- fs.copyFileSync(shmPath, `${getBackupPath(dbPath, 1)}-shm`);
173
+ fs.copyFileSync(shmPath, `${backupPath}-shm`);
64
174
  }
65
- return true;
175
+ return backupPath;
66
176
  }
67
177
  catch {
68
- // Backup failure is not fatal — log and continue
178
+ return null;
179
+ }
180
+ }
181
+ /**
182
+ * Migrate legacy backup files from the .proletariat/ top level into backups/.
183
+ *
184
+ * Handles:
185
+ * - workspace.db.backup (plain backup)
186
+ * - workspace.db.backup-YYYYMMDD-HHMMSS (timestamped backups)
187
+ * - workspace.db.backup.N (numbered backups with -wal/-shm companions)
188
+ * - workspace.db.corrupt (corrupt file preservations)
189
+ *
190
+ * Called on first run after upgrade. Safe to call multiple times.
191
+ */
192
+ export function migrateExistingBackups(dbPath) {
193
+ const proletariatDir = path.dirname(dbPath);
194
+ const backupsDir = getBackupsDir(dbPath);
195
+ const dbBasename = path.basename(dbPath); // workspace.db
196
+ let files;
197
+ try {
198
+ files = fs.readdirSync(proletariatDir);
199
+ }
200
+ catch {
201
+ return;
202
+ }
203
+ // Find legacy backup/corrupt files at the top level
204
+ const legacyFiles = files.filter(f => {
205
+ // Match workspace.db.backup*, workspace.db.corrupt*
206
+ if (f.startsWith(`${dbBasename}.backup`) || f.startsWith(`${dbBasename}.corrupt`)) {
207
+ return true;
208
+ }
209
+ // Match workspace.db.repair-temp (leftover from failed repairs)
210
+ if (f === `${dbBasename}.repair-temp`) {
211
+ return true;
212
+ }
69
213
  return false;
214
+ });
215
+ if (legacyFiles.length === 0) {
216
+ return;
217
+ }
218
+ // Ensure backups directory exists
219
+ fs.mkdirSync(backupsDir, { recursive: true });
220
+ for (const file of legacyFiles) {
221
+ const srcPath = path.join(proletariatDir, file);
222
+ let destName;
223
+ if (file.endsWith('.corrupt') || file.includes('.corrupt')) {
224
+ // Corrupt files → workspace-corrupt-TIMESTAMP.db or just move as-is
225
+ const stat = fs.statSync(srcPath);
226
+ const ts = formatTimestamp(stat.mtime);
227
+ destName = `workspace-corrupt-${ts}.db`;
228
+ }
229
+ else if (file === `${dbBasename}.backup`) {
230
+ // Plain backup → workspace-migrated-TIMESTAMP.db
231
+ const stat = fs.statSync(srcPath);
232
+ const ts = formatTimestamp(stat.mtime);
233
+ destName = `workspace-migrated-${ts}.db`;
234
+ }
235
+ else if (file.match(/\.backup-\d{8}-\d{6}$/)) {
236
+ // Timestamped backup (workspace.db.backup-20260106-112422)
237
+ const match = file.match(/\.backup-(\d{8}-\d{6})$/);
238
+ destName = `workspace-migrated-${match[1]}.db`;
239
+ }
240
+ else if (file.match(/\.backup\.\d+$/)) {
241
+ // Numbered backup (workspace.db.backup.1)
242
+ const stat = fs.statSync(srcPath);
243
+ const ts = formatTimestamp(stat.mtime);
244
+ destName = `workspace-migrated-${ts}.db`;
245
+ }
246
+ else if (file.match(/\.backup\.\d+-(wal|shm)$/)) {
247
+ // WAL/SHM companion for numbered backup — these follow their .db file
248
+ // Skip them here; they'll be handled when we move the main backup
249
+ continue;
250
+ }
251
+ else if (file === `${dbBasename}.repair-temp`) {
252
+ // Leftover repair temp file — just move it
253
+ destName = 'workspace-repair-temp.db';
254
+ }
255
+ else {
256
+ // Fallback: use file modification time
257
+ const stat = fs.statSync(srcPath);
258
+ const ts = formatTimestamp(stat.mtime);
259
+ destName = `workspace-legacy-${ts}.db`;
260
+ }
261
+ const destPath = path.join(backupsDir, destName);
262
+ // Don't overwrite existing files in backups/
263
+ if (fs.existsSync(destPath)) {
264
+ // Add a suffix to avoid collision
265
+ const ext = path.extname(destName);
266
+ const base = destName.slice(0, -ext.length);
267
+ const uniqueDest = path.join(backupsDir, `${base}-${Date.now()}${ext}`);
268
+ try {
269
+ fs.renameSync(srcPath, uniqueDest);
270
+ }
271
+ catch {
272
+ // Best-effort migration
273
+ }
274
+ }
275
+ else {
276
+ try {
277
+ fs.renameSync(srcPath, destPath);
278
+ }
279
+ catch {
280
+ // Best-effort migration
281
+ }
282
+ }
283
+ // Also move WAL/SHM companions if they exist
284
+ for (const suffix of ['-wal', '-shm']) {
285
+ const companionSrc = `${srcPath}${suffix}`;
286
+ if (fs.existsSync(companionSrc)) {
287
+ const companionDest = `${destPath}${suffix}`;
288
+ try {
289
+ fs.renameSync(companionSrc, companionDest);
290
+ }
291
+ catch {
292
+ // Best-effort
293
+ }
294
+ }
295
+ }
70
296
  }
297
+ // After migration, rotate to keep only MAX_BACKUPS
298
+ rotateBackups(backupsDir);
299
+ }
300
+ /**
301
+ * Format a Date as YYYYMMDD-HHMMSS-mmm for backup filenames.
302
+ * Includes milliseconds to avoid collisions when called multiple times per second.
303
+ */
304
+ function formatTimestamp(date) {
305
+ return [
306
+ date.getFullYear(),
307
+ String(date.getMonth() + 1).padStart(2, '0'),
308
+ String(date.getDate()).padStart(2, '0'),
309
+ '-',
310
+ String(date.getHours()).padStart(2, '0'),
311
+ String(date.getMinutes()).padStart(2, '0'),
312
+ String(date.getSeconds()).padStart(2, '0'),
313
+ '-',
314
+ String(date.getMilliseconds()).padStart(3, '0'),
315
+ ].join('');
316
+ }
317
+ /**
318
+ * List all backup entries with metadata, sorted newest-first.
319
+ * Used by the repair and backup commands to display backup info.
320
+ */
321
+ export function listBackups(dbPath) {
322
+ const backupsDir = getBackupsDir(dbPath);
323
+ const backups = listBackupFiles(backupsDir);
324
+ return backups.map(bp => {
325
+ const stat = fs.statSync(bp);
326
+ return {
327
+ path: bp,
328
+ filename: path.basename(bp),
329
+ size: stat.size,
330
+ mtime: stat.mtime,
331
+ };
332
+ });
71
333
  }
72
334
  /**
73
335
  * Run PRAGMA integrity_check on a database.
@@ -114,7 +376,7 @@ export function quickCheckIntegrity(db) {
114
376
  * 1. Try dump/reimport — opens the corrupt DB, dumps all SQL, creates a new DB
115
377
  * 2. If dump fails, fall back to the most recent backup
116
378
  *
117
- * The original corrupt file is preserved as dbPath.corrupt for forensics.
379
+ * The original corrupt file is preserved in backups/ for forensics.
118
380
  */
119
381
  export function repairDatabase(dbPath) {
120
382
  // Try dump/reimport first
@@ -133,6 +395,17 @@ export function repairDatabase(dbPath) {
133
395
  message: `Could not repair database. Dump failed: ${dumpResult.message}. No usable backups found.`,
134
396
  };
135
397
  }
398
+ /**
399
+ * Move a corrupt database file to the backups/ directory with a corrupt prefix.
400
+ * Returns the destination path.
401
+ */
402
+ function moveCorruptToBackups(dbPath) {
403
+ const backupsDir = getBackupsDir(dbPath);
404
+ fs.mkdirSync(backupsDir, { recursive: true });
405
+ const corruptPath = generateUniqueBackupPath(backupsDir, 'workspace-corrupt');
406
+ fs.renameSync(dbPath, corruptPath);
407
+ return corruptPath;
408
+ }
136
409
  /**
137
410
  * Attempt recovery via .dump and reimport.
138
411
  * Opens the corrupt database, extracts as much SQL as possible,
@@ -189,12 +462,9 @@ function attemptDumpReimport(dbPath) {
189
462
  corruptDb = null;
190
463
  newDb.close();
191
464
  newDb = null;
192
- // Swap files: corrupt .corrupt, repaired → original
193
- const corruptBackupPath = `${dbPath}.corrupt`;
194
- if (fs.existsSync(corruptBackupPath)) {
195
- fs.unlinkSync(corruptBackupPath);
196
- }
197
- fs.renameSync(dbPath, corruptBackupPath);
465
+ // Move corrupt file to backups/ directory
466
+ const corruptBackupPath = moveCorruptToBackups(dbPath);
467
+ // Move repaired database into place
198
468
  fs.renameSync(tempPath, dbPath);
199
469
  // Clean up old WAL/SHM files from the corrupt database
200
470
  for (const suffix of ['-wal', '-shm']) {
@@ -238,14 +508,13 @@ function attemptDumpReimport(dbPath) {
238
508
  }
239
509
  /**
240
510
  * Attempt recovery by restoring from the most recent valid backup.
241
- * Tries backups 1 through MAX_BACKUPS, validates each with integrity_check.
511
+ * Tries backups from newest to oldest, validates each with integrity_check.
242
512
  */
243
513
  function attemptBackupRestore(dbPath) {
244
- for (let i = 1; i <= MAX_BACKUPS; i++) {
245
- const backupPath = getBackupPath(dbPath, i);
246
- if (!fs.existsSync(backupPath)) {
247
- continue;
248
- }
514
+ const backupsDir = getBackupsDir(dbPath);
515
+ const backups = listBackupFiles(backupsDir);
516
+ for (let i = 0; i < backups.length; i++) {
517
+ const backupPath = backups[i];
249
518
  // Validate the backup
250
519
  let backupDb = null;
251
520
  try {
@@ -257,11 +526,7 @@ function attemptBackupRestore(dbPath) {
257
526
  continue;
258
527
  }
259
528
  // Backup is valid — swap it in
260
- const corruptBackupPath = `${dbPath}.corrupt`;
261
- if (fs.existsSync(corruptBackupPath)) {
262
- fs.unlinkSync(corruptBackupPath);
263
- }
264
- fs.renameSync(dbPath, corruptBackupPath);
529
+ const corruptBackupPath = moveCorruptToBackups(dbPath);
265
530
  fs.copyFileSync(backupPath, dbPath);
266
531
  // Clean up old WAL/SHM files
267
532
  for (const suffix of ['-wal', '-shm']) {
@@ -273,7 +538,7 @@ function attemptBackupRestore(dbPath) {
273
538
  return {
274
539
  success: true,
275
540
  method: 'backup-restore',
276
- message: `Restored from backup.${i}. Corrupt file saved as ${path.basename(corruptBackupPath)}.`,
541
+ message: `Restored from ${path.basename(backupPath)}. Corrupt file saved as ${path.basename(corruptBackupPath)}.`,
277
542
  };
278
543
  }
279
544
  catch {
@@ -1 +1 @@
1
- {"version":3,"file":"db-safety.js","sourceRoot":"","sources":["../../../src/lib/database/db-safety.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"db-safety.js","sourceRoot":"","sources":["../../../src/lib/database/db-safety.ts"],"names":[],"mappings":"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"}
@@ -26,4 +26,4 @@ export { checkPMOExists, getPMOSetting, dropPMOTables, upsertWorkspaceSetting, }
26
26
  export { type DatabaseDriver, type PreparedStatement, type RunResult, BetterSqlite3Driver, wrapDatabase, openDriver, getRawDatabase, } from './driver.js';
27
27
  export { SettingsStore, createSettingsStore, } from './settings-store.js';
28
28
  export { isCredentialKey, getCredentialDatabasePath, getCredential, setCredential, deleteCredential, hasCredential, closeAllCredentialStores, migrateCredentials, } from './credential-store.js';
29
- export { enableWALMode, createRotatingBackup, checkIntegrity, quickCheckIntegrity, repairDatabase, getBackupPath, type IntegrityCheckResult, type RepairResult, } from './db-safety.js';
29
+ export { enableWALMode, createRotatingBackup, createManualBackup, checkIntegrity, quickCheckIntegrity, repairDatabase, getBackupPath, getBackupsDir, listBackups, migrateExistingBackups, type IntegrityCheckResult, type RepairResult, } from './db-safety.js';
@@ -38,5 +38,5 @@ export { SettingsStore, createSettingsStore, } from './settings-store.js';
38
38
  // Credential store (PRLT-1114: agent secret isolation)
39
39
  export { isCredentialKey, getCredentialDatabasePath, getCredential, setCredential, deleteCredential, hasCredential, closeAllCredentialStores, migrateCredentials, } from './credential-store.js';
40
40
  // Database safety (WAL, backup, integrity, repair)
41
- export { enableWALMode, createRotatingBackup, checkIntegrity, quickCheckIntegrity, repairDatabase, getBackupPath, } from './db-safety.js';
41
+ export { enableWALMode, createRotatingBackup, createManualBackup, checkIntegrity, quickCheckIntegrity, repairDatabase, getBackupPath, getBackupsDir, listBackups, migrateExistingBackups, } from './db-safety.js';
42
42
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/database/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,0DAA0D;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAEzD,sBAAsB;AACtB,OAAO,EAEL,WAAW,EACX,eAAe,EACf,aAAa,EACb,qBAAqB,EACrB,mBAAmB,EACnB,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,gBAAgB,CAAA;AAEvB,mBAAmB;AACnB,OAAO,EAQL,mBAAmB,EACnB,eAAe,EACf,mBAAmB,EACnB,2BAA2B,EAC3B,8BAA8B,EAC9B,sBAAsB,EACtB,oBAAoB,EACpB,kBAAkB,EAClB,cAAc,EACd,QAAQ,EACR,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,aAAa,CAAA;AAEpB,wBAAwB;AACxB,OAAO,EAEL,yBAAyB,EACzB,wBAAwB,GACzB,MAAM,mBAAmB,CAAA;AAE1B,mBAAmB;AACnB,OAAO,EAGL,cAAc,EACd,cAAc,EACd,SAAS,EACT,QAAQ,EACR,WAAW,EACX,WAAW,EACX,aAAa,EACb,sBAAsB,EACtB,aAAa,GACd,MAAM,aAAa,CAAA;AAEpB,sBAAsB;AACtB,OAAO,EAEL,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,gBAAgB,CAAA;AAEvB,wBAAwB;AACxB,OAAO,EAEL,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACtB,YAAY,EACZ,2BAA2B,GAC5B,MAAM,YAAY,CAAA;AAEnB,2BAA2B;AAC3B,OAAO,EACL,cAAc,EACd,aAAa,EACb,aAAa,EACb,sBAAsB,GACvB,MAAM,oBAAoB,CAAA;AAE3B,8BAA8B;AAC9B,OAAO,EAIL,mBAAmB,EACnB,YAAY,EACZ,UAAU,EACV,cAAc,GACf,MAAM,aAAa,CAAA;AAEpB,iBAAiB;AACjB,OAAO,EACL,aAAa,EACb,mBAAmB,GACpB,MAAM,qBAAqB,CAAA;AAE5B,uDAAuD;AACvD,OAAO,EACL,eAAe,EACf,yBAAyB,EACzB,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,wBAAwB,EACxB,kBAAkB,GACnB,MAAM,uBAAuB,CAAA;AAE9B,mDAAmD;AACnD,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,aAAa,GAGd,MAAM,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/database/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,0DAA0D;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAEzD,sBAAsB;AACtB,OAAO,EAEL,WAAW,EACX,eAAe,EACf,aAAa,EACb,qBAAqB,EACrB,mBAAmB,EACnB,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,gBAAgB,CAAA;AAEvB,mBAAmB;AACnB,OAAO,EAQL,mBAAmB,EACnB,eAAe,EACf,mBAAmB,EACnB,2BAA2B,EAC3B,8BAA8B,EAC9B,sBAAsB,EACtB,oBAAoB,EACpB,kBAAkB,EAClB,cAAc,EACd,QAAQ,EACR,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,aAAa,CAAA;AAEpB,wBAAwB;AACxB,OAAO,EAEL,yBAAyB,EACzB,wBAAwB,GACzB,MAAM,mBAAmB,CAAA;AAE1B,mBAAmB;AACnB,OAAO,EAGL,cAAc,EACd,cAAc,EACd,SAAS,EACT,QAAQ,EACR,WAAW,EACX,WAAW,EACX,aAAa,EACb,sBAAsB,EACtB,aAAa,GACd,MAAM,aAAa,CAAA;AAEpB,sBAAsB;AACtB,OAAO,EAEL,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,gBAAgB,CAAA;AAEvB,wBAAwB;AACxB,OAAO,EAEL,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACtB,YAAY,EACZ,2BAA2B,GAC5B,MAAM,YAAY,CAAA;AAEnB,2BAA2B;AAC3B,OAAO,EACL,cAAc,EACd,aAAa,EACb,aAAa,EACb,sBAAsB,GACvB,MAAM,oBAAoB,CAAA;AAE3B,8BAA8B;AAC9B,OAAO,EAIL,mBAAmB,EACnB,YAAY,EACZ,UAAU,EACV,cAAc,GACf,MAAM,aAAa,CAAA;AAEpB,iBAAiB;AACjB,OAAO,EACL,aAAa,EACb,mBAAmB,GACpB,MAAM,qBAAqB,CAAA;AAE5B,uDAAuD;AACvD,OAAO,EACL,eAAe,EACf,yBAAyB,EACzB,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,wBAAwB,EACxB,kBAAkB,GACnB,MAAM,uBAAuB,CAAA;AAE9B,mDAAmD;AACnD,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,kBAAkB,EAClB,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,aAAa,EACb,aAAa,EACb,WAAW,EACX,sBAAsB,GAGvB,MAAM,gBAAgB,CAAA"}
@@ -15,7 +15,7 @@ import { migrateCredentials } from './credential-store.js';
15
15
  import { createDrizzleConnection } from './drizzle.js';
16
16
  import { workspace as workspaceTable, } from './drizzle-schema.js';
17
17
  import { BetterSqlite3Driver } from './driver.js';
18
- import { enableWALMode, createRotatingBackup, quickCheckIntegrity, repairDatabase, } from './db-safety.js';
18
+ import { enableWALMode, createRotatingBackup, quickCheckIntegrity, repairDatabase, migrateExistingBackups, } from './db-safety.js';
19
19
  /**
20
20
  * Open the workspace database, wrap it with Drizzle, run a function,
21
21
  * and close the connection. Handles the open/close lifecycle.
@@ -90,6 +90,8 @@ export function openWorkspaceDatabase(workspacePath, options) {
90
90
  // local/test databases as read-only.
91
91
  const readOnly = options?.readonly ?? isReadOnlyHQMount(workspacePath);
92
92
  if (!readOnly) {
93
+ // PRLT-1154: Migrate any legacy scattered backup files into backups/ directory
94
+ migrateExistingBackups(dbPath);
93
95
  // Auto-backup before opening (cheap insurance against corruption)
94
96
  createRotatingBackup(dbPath);
95
97
  }
@@ -1 +1 @@
1
- {"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../../src/lib/database/workspace.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../../src/lib/database/workspace.ts"],"names":[],"mappings":"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"}