factory-factory 0.2.2 → 0.2.4

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 (177) hide show
  1. package/README.md +2 -2
  2. package/dist/client/assets/{_basePickBy-CISdQ2gh.js → _basePickBy-CCB8XrLV.js} +1 -1
  3. package/dist/client/assets/{_baseUniq-DbasVTTn.js → _baseUniq-CnpEKy-E.js} +1 -1
  4. package/dist/client/assets/{arc-DLw2lHO3.js → arc-BVt3NpFL.js} +1 -1
  5. package/dist/client/assets/{architectureDiagram-VXUJARFQ-BMuH-Hnq.js → architectureDiagram-VXUJARFQ-DQXtRVG1.js} +1 -1
  6. package/dist/client/assets/{blockDiagram-VD42YOAC-DmK7wVT_.js → blockDiagram-VD42YOAC-C_GKWlYL.js} +1 -1
  7. package/dist/client/assets/{c4Diagram-YG6GDRKO-Dcjqp_Ah.js → c4Diagram-YG6GDRKO-njABqJg1.js} +1 -1
  8. package/dist/client/assets/channel-DXVcwOT7.js +1 -0
  9. package/dist/client/assets/{chunk-4BX2VUAB-Qs_UDhnI.js → chunk-4BX2VUAB-DNMCzzfR.js} +1 -1
  10. package/dist/client/assets/{chunk-55IACEB6-BO9yB0ki.js → chunk-55IACEB6-CajLRh0F.js} +1 -1
  11. package/dist/client/assets/{chunk-B4BG7PRW-BglcMNkh.js → chunk-B4BG7PRW-BLSFZNLe.js} +1 -1
  12. package/dist/client/assets/{chunk-DI55MBZ5-CXV9Cibn.js → chunk-DI55MBZ5-DtQPQERJ.js} +1 -1
  13. package/dist/client/assets/{chunk-FMBD7UC4-9BOiNUQ0.js → chunk-FMBD7UC4-BhtFvMT5.js} +1 -1
  14. package/dist/client/assets/{chunk-QN33PNHL-CC_W0vDr.js → chunk-QN33PNHL-DBHUU683.js} +1 -1
  15. package/dist/client/assets/{chunk-QZHKN3VN-Czfwg8a1.js → chunk-QZHKN3VN-B1rA-SBe.js} +1 -1
  16. package/dist/client/assets/{chunk-TZMSLE5B-BJV3Hq3o.js → chunk-TZMSLE5B-BJUlg6Pf.js} +1 -1
  17. package/dist/client/assets/classDiagram-2ON5EDUG-DSXhUv2N.js +1 -0
  18. package/dist/client/assets/classDiagram-v2-WZHVMYZB-DSXhUv2N.js +1 -0
  19. package/dist/client/assets/clone-Cel7XaEC.js +1 -0
  20. package/dist/client/assets/{cose-bilkent-S5V4N54A-B5cm6i8I.js → cose-bilkent-S5V4N54A-CyjRxz-A.js} +1 -1
  21. package/dist/client/assets/{dagre-6UL2VRFP-CVH3lZKU.js → dagre-6UL2VRFP-CURGwkx9.js} +1 -1
  22. package/dist/client/assets/{diagram-PSM6KHXK-_30scg7I.js → diagram-PSM6KHXK-CaOIVsbD.js} +1 -1
  23. package/dist/client/assets/{diagram-QEK2KX5R-9lrSo1mZ.js → diagram-QEK2KX5R-0zoz9z8_.js} +1 -1
  24. package/dist/client/assets/{diagram-S2PKOQOG-BXTnVDbA.js → diagram-S2PKOQOG-D6WyG3pJ.js} +1 -1
  25. package/dist/client/assets/{erDiagram-Q2GNP2WA-G8ND4OKG.js → erDiagram-Q2GNP2WA-BwfTai9D.js} +1 -1
  26. package/dist/client/assets/{flowDiagram-NV44I4VS-DuNdqXHj.js → flowDiagram-NV44I4VS-z6idjLXa.js} +1 -1
  27. package/dist/client/assets/{ganttDiagram-JELNMOA3-D8xrPWlF.js → ganttDiagram-JELNMOA3-BLAK0GDW.js} +1 -1
  28. package/dist/client/assets/{gitGraphDiagram-NY62KEGX-DInZobj6.js → gitGraphDiagram-NY62KEGX-DsC9TQow.js} +1 -1
  29. package/dist/client/assets/{graph-B4QY9Cck.js → graph-72LNxX96.js} +1 -1
  30. package/dist/client/assets/{index-V-FCWQQz.js → index-C0E1P_GL.js} +130 -130
  31. package/dist/client/assets/index-DI1BSYUN.css +1 -0
  32. package/dist/client/assets/{infoDiagram-WHAUD3N6-Dny0M-Oi.js → infoDiagram-WHAUD3N6-CInk5tUs.js} +1 -1
  33. package/dist/client/assets/{journeyDiagram-XKPGCS4Q-94HP68E8.js → journeyDiagram-XKPGCS4Q-nTrHP_HR.js} +1 -1
  34. package/dist/client/assets/{kanban-definition-3W4ZIXB7-CeWqcrPF.js → kanban-definition-3W4ZIXB7-xiF9MwcX.js} +1 -1
  35. package/dist/client/assets/{layout-3khFWUY7.js → layout-BxYnyUX2.js} +1 -1
  36. package/dist/client/assets/{linear-XI3Hp28C.js → linear-BOpSSl-n.js} +1 -1
  37. package/dist/client/assets/{mindmap-definition-VGOIOE7T-CDV8vhxz.js → mindmap-definition-VGOIOE7T-BxYEWuiO.js} +1 -1
  38. package/dist/client/assets/{pieDiagram-ADFJNKIX-C7pM-a3b.js → pieDiagram-ADFJNKIX-DHQkQuZp.js} +1 -1
  39. package/dist/client/assets/{quadrantDiagram-AYHSOK5B-BVupGY8e.js → quadrantDiagram-AYHSOK5B--dbc4LsQ.js} +1 -1
  40. package/dist/client/assets/{requirementDiagram-UZGBJVZJ-_W6CGno1.js → requirementDiagram-UZGBJVZJ-Dr-h39fn.js} +1 -1
  41. package/dist/client/assets/{sankeyDiagram-TZEHDZUN-DuDbqB0A.js → sankeyDiagram-TZEHDZUN-BwKHqT4R.js} +1 -1
  42. package/dist/client/assets/{sequenceDiagram-WL72ISMW-LER3Fq55.js → sequenceDiagram-WL72ISMW-DizdB6A9.js} +1 -1
  43. package/dist/client/assets/{stateDiagram-FKZM4ZOC-B0z2P05N.js → stateDiagram-FKZM4ZOC-C-J72Wtl.js} +1 -1
  44. package/dist/client/assets/stateDiagram-v2-4FDKWEC3-waz9l7Vx.js +1 -0
  45. package/dist/client/assets/{terminal-instance-CoJFcQup.js → terminal-instance-qIJHj7KS.js} +1 -1
  46. package/dist/client/assets/{timeline-definition-IT6M3QCI-DUb5ucGf.js → timeline-definition-IT6M3QCI-DAGw_FKd.js} +1 -1
  47. package/dist/client/assets/{treemap-KMMF4GRG-DaUbhciW.js → treemap-KMMF4GRG-Bo4f4Al3.js} +1 -1
  48. package/dist/client/assets/{xychartDiagram-PRI3JC2R-DvmloW_f.js → xychartDiagram-PRI3JC2R-CAJ9NVad.js} +1 -1
  49. package/dist/client/index.html +2 -2
  50. package/dist/prisma/generated/enums.d.ts +0 -1
  51. package/dist/prisma/generated/enums.d.ts.map +1 -1
  52. package/dist/prisma/generated/enums.js +0 -1
  53. package/dist/prisma/generated/enums.js.map +1 -1
  54. package/dist/prisma/generated/internal/class.js +2 -2
  55. package/dist/prisma/generated/internal/class.js.map +1 -1
  56. package/dist/prisma/generated/internal/prismaNamespace.d.ts +0 -1
  57. package/dist/prisma/generated/internal/prismaNamespace.d.ts.map +1 -1
  58. package/dist/prisma/generated/internal/prismaNamespace.js +0 -1
  59. package/dist/prisma/generated/internal/prismaNamespace.js.map +1 -1
  60. package/dist/prisma/generated/internal/prismaNamespaceBrowser.d.ts +0 -1
  61. package/dist/prisma/generated/internal/prismaNamespaceBrowser.d.ts.map +1 -1
  62. package/dist/prisma/generated/internal/prismaNamespaceBrowser.js +0 -1
  63. package/dist/prisma/generated/internal/prismaNamespaceBrowser.js.map +1 -1
  64. package/dist/prisma/generated/models/UserSettings.d.ts +1 -29
  65. package/dist/prisma/generated/models/UserSettings.d.ts.map +1 -1
  66. package/dist/prompts/workflows/ratchet.md +22 -36
  67. package/dist/src/backend/claude/protocol.d.ts +5 -2
  68. package/dist/src/backend/claude/protocol.d.ts.map +1 -1
  69. package/dist/src/backend/claude/protocol.js +51 -7
  70. package/dist/src/backend/claude/protocol.js.map +1 -1
  71. package/dist/src/backend/claude/protocol.test.js +170 -0
  72. package/dist/src/backend/claude/protocol.test.js.map +1 -1
  73. package/dist/src/backend/claude/registry.d.ts.map +1 -1
  74. package/dist/src/backend/claude/registry.js +12 -1
  75. package/dist/src/backend/claude/registry.js.map +1 -1
  76. package/dist/src/backend/claude/types.d.ts +25 -3
  77. package/dist/src/backend/claude/types.d.ts.map +1 -1
  78. package/dist/src/backend/claude/types.js +23 -0
  79. package/dist/src/backend/claude/types.js.map +1 -1
  80. package/dist/src/backend/interceptors/pr-detection.interceptor.d.ts.map +1 -1
  81. package/dist/src/backend/interceptors/pr-detection.interceptor.js +19 -23
  82. package/dist/src/backend/interceptors/pr-detection.interceptor.js.map +1 -1
  83. package/dist/src/backend/resource_accessors/user-settings.accessor.d.ts +0 -1
  84. package/dist/src/backend/resource_accessors/user-settings.accessor.d.ts.map +1 -1
  85. package/dist/src/backend/resource_accessors/user-settings.accessor.js.map +1 -1
  86. package/dist/src/backend/resource_accessors/workspace.accessor.d.ts +1 -0
  87. package/dist/src/backend/resource_accessors/workspace.accessor.d.ts.map +1 -1
  88. package/dist/src/backend/resource_accessors/workspace.accessor.js +6 -0
  89. package/dist/src/backend/resource_accessors/workspace.accessor.js.map +1 -1
  90. package/dist/src/backend/services/chat-event-forwarder.service.d.ts +2 -0
  91. package/dist/src/backend/services/chat-event-forwarder.service.d.ts.map +1 -1
  92. package/dist/src/backend/services/chat-event-forwarder.service.js +50 -24
  93. package/dist/src/backend/services/chat-event-forwarder.service.js.map +1 -1
  94. package/dist/src/backend/services/chat-message-handlers/attachment-processing.d.ts +14 -0
  95. package/dist/src/backend/services/chat-message-handlers/attachment-processing.d.ts.map +1 -0
  96. package/dist/src/backend/services/chat-message-handlers/attachment-processing.js +81 -0
  97. package/dist/src/backend/services/chat-message-handlers/attachment-processing.js.map +1 -0
  98. package/dist/src/backend/services/chat-message-handlers/attachment-processing.test.d.ts +2 -0
  99. package/dist/src/backend/services/chat-message-handlers/attachment-processing.test.d.ts.map +1 -0
  100. package/dist/src/backend/services/chat-message-handlers/attachment-processing.test.js +315 -0
  101. package/dist/src/backend/services/chat-message-handlers/attachment-processing.test.js.map +1 -0
  102. package/dist/src/backend/services/chat-message-handlers/handlers/handlers.test.js +34 -0
  103. package/dist/src/backend/services/chat-message-handlers/handlers/handlers.test.js.map +1 -1
  104. package/dist/src/backend/services/chat-message-handlers.service.d.ts +0 -2
  105. package/dist/src/backend/services/chat-message-handlers.service.d.ts.map +1 -1
  106. package/dist/src/backend/services/chat-message-handlers.service.js +2 -60
  107. package/dist/src/backend/services/chat-message-handlers.service.js.map +1 -1
  108. package/dist/src/backend/services/data-backup.service.d.ts +482 -3
  109. package/dist/src/backend/services/data-backup.service.d.ts.map +1 -1
  110. package/dist/src/backend/services/data-backup.service.js +164 -20
  111. package/dist/src/backend/services/data-backup.service.js.map +1 -1
  112. package/dist/src/backend/services/data-backup.service.test.d.ts +2 -0
  113. package/dist/src/backend/services/data-backup.service.test.d.ts.map +1 -0
  114. package/dist/src/backend/services/data-backup.service.test.js +602 -0
  115. package/dist/src/backend/services/data-backup.service.test.js.map +1 -0
  116. package/dist/src/backend/services/pr-snapshot.service.d.ts +9 -1
  117. package/dist/src/backend/services/pr-snapshot.service.d.ts.map +1 -1
  118. package/dist/src/backend/services/pr-snapshot.service.js +53 -3
  119. package/dist/src/backend/services/pr-snapshot.service.js.map +1 -1
  120. package/dist/src/backend/services/pr-snapshot.service.test.js +102 -47
  121. package/dist/src/backend/services/pr-snapshot.service.test.js.map +1 -1
  122. package/dist/src/backend/services/ratchet.service.d.ts +0 -2
  123. package/dist/src/backend/services/ratchet.service.d.ts.map +1 -1
  124. package/dist/src/backend/services/ratchet.service.js +30 -57
  125. package/dist/src/backend/services/ratchet.service.js.map +1 -1
  126. package/dist/src/backend/services/ratchet.service.test.js +83 -6
  127. package/dist/src/backend/services/ratchet.service.test.js.map +1 -1
  128. package/dist/src/backend/services/scheduler.service.d.ts.map +1 -1
  129. package/dist/src/backend/services/scheduler.service.js +16 -7
  130. package/dist/src/backend/services/scheduler.service.js.map +1 -1
  131. package/dist/src/backend/services/scheduler.service.test.js +41 -5
  132. package/dist/src/backend/services/scheduler.service.test.js.map +1 -1
  133. package/dist/src/backend/services/session.repository.d.ts +4 -0
  134. package/dist/src/backend/services/session.repository.d.ts.map +1 -1
  135. package/dist/src/backend/services/session.repository.js +6 -0
  136. package/dist/src/backend/services/session.repository.js.map +1 -1
  137. package/dist/src/backend/services/session.service.d.ts +0 -1
  138. package/dist/src/backend/services/session.service.d.ts.map +1 -1
  139. package/dist/src/backend/services/session.service.js +20 -24
  140. package/dist/src/backend/services/session.service.js.map +1 -1
  141. package/dist/src/backend/services/session.service.test.js +256 -9
  142. package/dist/src/backend/services/session.service.test.js.map +1 -1
  143. package/dist/src/backend/services/slash-command-cache.service.d.ts.map +1 -1
  144. package/dist/src/backend/services/slash-command-cache.service.js +8 -5
  145. package/dist/src/backend/services/slash-command-cache.service.js.map +1 -1
  146. package/dist/src/backend/services/workspace-creation.service.test.js +0 -2
  147. package/dist/src/backend/services/workspace-creation.service.test.js.map +1 -1
  148. package/dist/src/backend/services/workspace-flow-state.service.d.ts.map +1 -1
  149. package/dist/src/backend/services/workspace-flow-state.service.js +0 -1
  150. package/dist/src/backend/services/workspace-flow-state.service.js.map +1 -1
  151. package/dist/src/backend/trpc/admin.trpc.d.ts +124 -1
  152. package/dist/src/backend/trpc/admin.trpc.d.ts.map +1 -1
  153. package/dist/src/backend/trpc/github.trpc.d.ts +14 -0
  154. package/dist/src/backend/trpc/github.trpc.d.ts.map +1 -1
  155. package/dist/src/backend/trpc/github.trpc.js +28 -0
  156. package/dist/src/backend/trpc/github.trpc.js.map +1 -1
  157. package/dist/src/backend/trpc/index.d.ts +138 -4
  158. package/dist/src/backend/trpc/index.d.ts.map +1 -1
  159. package/dist/src/backend/trpc/user-settings.trpc.d.ts +0 -3
  160. package/dist/src/backend/trpc/user-settings.trpc.d.ts.map +1 -1
  161. package/dist/src/backend/trpc/user-settings.trpc.js +0 -1
  162. package/dist/src/backend/trpc/user-settings.trpc.js.map +1 -1
  163. package/dist/src/backend/trpc/workspace.trpc.d.ts.map +1 -1
  164. package/dist/src/backend/trpc/workspace.trpc.js +1 -0
  165. package/dist/src/backend/trpc/workspace.trpc.js.map +1 -1
  166. package/dist/tsconfig.backend.tsbuildinfo +1 -1
  167. package/package.json +1 -1
  168. package/prisma/migrations/20260206170000_remove_merge_conflict_state/migration.sql +7 -0
  169. package/prisma/migrations/20260206174726_remove_ratchet_auto_fix_conflicts/migration.sql +33 -0
  170. package/prisma/schema.prisma +0 -2
  171. package/prompts/workflows/ratchet.md +22 -36
  172. package/dist/client/assets/channel-t_S6k3cr.js +0 -1
  173. package/dist/client/assets/classDiagram-2ON5EDUG-2upzgQsa.js +0 -1
  174. package/dist/client/assets/classDiagram-v2-WZHVMYZB-2upzgQsa.js +0 -1
  175. package/dist/client/assets/clone-CWl2uYnl.js +0 -1
  176. package/dist/client/assets/index-eDDa27-u.css +0 -1
  177. package/dist/client/assets/stateDiagram-v2-4FDKWEC3-HoKsGlH4.js +0 -1
@@ -0,0 +1,602 @@
1
+ import { CIStatus, KanbanColumn, PRState, RatchetState, RunScriptStatus, WorkspaceCreationSource, WorkspaceStatus, } from '../../../prisma/generated/client.js';
2
+ import { beforeEach, describe, expect, it, vi } from 'vitest';
3
+ const mockTx = vi.hoisted(() => ({
4
+ project: {
5
+ findUnique: vi.fn(),
6
+ create: vi.fn(),
7
+ },
8
+ workspace: {
9
+ findUnique: vi.fn(),
10
+ create: vi.fn(),
11
+ },
12
+ claudeSession: {
13
+ findUnique: vi.fn(),
14
+ create: vi.fn(),
15
+ },
16
+ terminalSession: {
17
+ findUnique: vi.fn(),
18
+ create: vi.fn(),
19
+ },
20
+ userSettings: {
21
+ findFirst: vi.fn(),
22
+ create: vi.fn(),
23
+ },
24
+ }));
25
+ vi.mock('../db', () => ({
26
+ prisma: {
27
+ project: {
28
+ findMany: vi.fn(),
29
+ findUnique: vi.fn(),
30
+ create: vi.fn(),
31
+ },
32
+ workspace: {
33
+ findMany: vi.fn(),
34
+ findUnique: vi.fn(),
35
+ create: vi.fn(),
36
+ },
37
+ claudeSession: {
38
+ findMany: vi.fn(),
39
+ findUnique: vi.fn(),
40
+ create: vi.fn(),
41
+ },
42
+ terminalSession: {
43
+ findMany: vi.fn(),
44
+ findUnique: vi.fn(),
45
+ create: vi.fn(),
46
+ },
47
+ userSettings: {
48
+ findFirst: vi.fn(),
49
+ create: vi.fn(),
50
+ },
51
+ $transaction: vi.fn((callback) => callback(mockTx)),
52
+ },
53
+ }));
54
+ import { prisma } from '../db.js';
55
+ import { dataBackupService, exportDataSchema } from './data-backup.service.js';
56
+ describe('DataBackupService', () => {
57
+ const mockProject = {
58
+ id: 'proj-1',
59
+ name: 'Test Project',
60
+ slug: 'test-project',
61
+ repoPath: '/path/to/repo',
62
+ worktreeBasePath: '/path/to/worktrees',
63
+ defaultBranch: 'main',
64
+ githubOwner: 'test-owner',
65
+ githubRepo: 'test-repo',
66
+ isArchived: false,
67
+ startupScriptCommand: 'npm install',
68
+ startupScriptPath: null,
69
+ startupScriptTimeout: 300,
70
+ createdAt: new Date('2025-01-01T00:00:00.000Z'),
71
+ updatedAt: new Date('2025-01-01T00:00:00.000Z'),
72
+ };
73
+ const mockWorkspaceV2 = {
74
+ id: 'ws-1',
75
+ projectId: 'proj-1',
76
+ name: 'Test Workspace',
77
+ description: 'Test description',
78
+ status: WorkspaceStatus.READY,
79
+ worktreePath: '/path/to/worktree',
80
+ branchName: 'feature/test',
81
+ isAutoGeneratedBranch: true,
82
+ creationSource: WorkspaceCreationSource.GITHUB_ISSUE,
83
+ creationMetadata: { issueNumber: 123 },
84
+ initErrorMessage: null,
85
+ initOutput: 'Init output',
86
+ initStartedAt: new Date('2025-01-01T00:00:00.000Z'),
87
+ initCompletedAt: new Date('2025-01-01T00:05:00.000Z'),
88
+ initRetryCount: 0,
89
+ runScriptCommand: 'npm run dev',
90
+ runScriptCleanupCommand: 'npm run cleanup',
91
+ runScriptPid: 12_345,
92
+ runScriptPort: 3000,
93
+ runScriptStartedAt: new Date('2025-01-01T00:10:00.000Z'),
94
+ runScriptStatus: RunScriptStatus.RUNNING,
95
+ prUrl: 'https://github.com/test/repo/pull/1',
96
+ githubIssueNumber: 123,
97
+ githubIssueUrl: 'https://github.com/test/repo/issues/123',
98
+ prNumber: 1,
99
+ prState: PRState.OPEN,
100
+ prReviewState: 'APPROVED',
101
+ prCiStatus: CIStatus.SUCCESS,
102
+ prUpdatedAt: new Date('2025-01-01T00:15:00.000Z'),
103
+ prCiFailedAt: null,
104
+ prCiLastNotifiedAt: null,
105
+ prReviewLastCheckedAt: new Date('2025-01-01T00:20:00.000Z'),
106
+ prReviewLastCommentId: 'comment-123',
107
+ ratchetEnabled: true,
108
+ ratchetState: RatchetState.READY,
109
+ ratchetLastCheckedAt: new Date('2025-01-01T00:25:00.000Z'),
110
+ ratchetLastPushAt: new Date('2025-01-01T00:30:00.000Z'),
111
+ ratchetActiveSessionId: 'session-123',
112
+ ratchetLastCiRunId: 'run-123',
113
+ ratchetLastNotifiedState: RatchetState.CI_RUNNING,
114
+ hasHadSessions: true,
115
+ cachedKanbanColumn: KanbanColumn.WORKING,
116
+ stateComputedAt: new Date('2025-01-01T00:35:00.000Z'),
117
+ createdAt: new Date('2025-01-01T00:00:00.000Z'),
118
+ updatedAt: new Date('2025-01-01T00:35:00.000Z'),
119
+ };
120
+ const mockUserSettingsV2 = {
121
+ id: 'settings-1',
122
+ userId: 'default',
123
+ preferredIde: 'cursor',
124
+ customIdeCommand: null,
125
+ playSoundOnComplete: true,
126
+ notificationSoundPath: '/path/to/sound.mp3',
127
+ workspaceOrder: { 'proj-1': ['ws-1', 'ws-2'] },
128
+ cachedSlashCommands: { commands: [] },
129
+ ratchetEnabled: true,
130
+ ratchetAutoFixCi: true,
131
+ ratchetAutoFixReviews: false,
132
+ ratchetAutoMerge: false,
133
+ ratchetAllowedReviewers: ['user1', 'user2'],
134
+ createdAt: new Date('2025-01-01T00:00:00.000Z'),
135
+ updatedAt: new Date('2025-01-01T00:00:00.000Z'),
136
+ };
137
+ beforeEach(() => {
138
+ vi.clearAllMocks();
139
+ });
140
+ describe('exportData', () => {
141
+ it('should export data in v2 format with all fields', async () => {
142
+ vi.mocked(prisma.project.findMany).mockResolvedValue([mockProject]);
143
+ vi.mocked(prisma.workspace.findMany).mockResolvedValue([mockWorkspaceV2]);
144
+ vi.mocked(prisma.claudeSession.findMany).mockResolvedValue([]);
145
+ vi.mocked(prisma.terminalSession.findMany).mockResolvedValue([]);
146
+ vi.mocked(prisma.userSettings.findFirst).mockResolvedValue(mockUserSettingsV2);
147
+ const result = await dataBackupService.exportData('1.0.0');
148
+ expect(result.meta.schemaVersion).toBe(2);
149
+ expect(result.meta.version).toBe('1.0.0');
150
+ expect(result.data.projects).toHaveLength(1);
151
+ expect(result.data.workspaces).toHaveLength(1);
152
+ const exportedWorkspace = result.data.workspaces[0];
153
+ expect(exportedWorkspace).toBeDefined();
154
+ expect(exportedWorkspace?.ratchetEnabled).toBe(true);
155
+ expect(exportedWorkspace?.ratchetState).toBe(RatchetState.READY);
156
+ expect(exportedWorkspace?.ratchetLastCheckedAt).toBe('2025-01-01T00:25:00.000Z');
157
+ expect(exportedWorkspace?.ratchetActiveSessionId).toBe('session-123');
158
+ expect(exportedWorkspace?.ratchetLastCiRunId).toBe('run-123');
159
+ expect(exportedWorkspace?.prReviewLastCheckedAt).toBe('2025-01-01T00:20:00.000Z');
160
+ expect(exportedWorkspace?.prReviewLastCommentId).toBe('comment-123');
161
+ const exportedSettings = result.data.userSettings;
162
+ expect(exportedSettings).not.toBeNull();
163
+ expect(exportedSettings?.ratchetEnabled).toBe(true);
164
+ expect(exportedSettings?.ratchetAutoFixCi).toBe(true);
165
+ expect(exportedSettings?.ratchetAutoFixReviews).toBe(false);
166
+ expect(exportedSettings?.ratchetAutoMerge).toBe(false);
167
+ expect(exportedSettings?.ratchetAllowedReviewers).toEqual(['user1', 'user2']);
168
+ expect('workspaceOrder' in (exportedSettings ?? {})).toBe(false);
169
+ expect('cachedSlashCommands' in (exportedSettings ?? {})).toBe(false);
170
+ });
171
+ it('should handle null user settings', async () => {
172
+ vi.mocked(prisma.project.findMany).mockResolvedValue([]);
173
+ vi.mocked(prisma.workspace.findMany).mockResolvedValue([]);
174
+ vi.mocked(prisma.claudeSession.findMany).mockResolvedValue([]);
175
+ vi.mocked(prisma.terminalSession.findMany).mockResolvedValue([]);
176
+ vi.mocked(prisma.userSettings.findFirst).mockResolvedValue(null);
177
+ const result = await dataBackupService.exportData('1.0.0');
178
+ expect(result.data.userSettings).toBeNull();
179
+ });
180
+ it('should export valid v2 schema', async () => {
181
+ vi.mocked(prisma.project.findMany).mockResolvedValue([mockProject]);
182
+ vi.mocked(prisma.workspace.findMany).mockResolvedValue([mockWorkspaceV2]);
183
+ vi.mocked(prisma.claudeSession.findMany).mockResolvedValue([]);
184
+ vi.mocked(prisma.terminalSession.findMany).mockResolvedValue([]);
185
+ vi.mocked(prisma.userSettings.findFirst).mockResolvedValue(mockUserSettingsV2);
186
+ const result = await dataBackupService.exportData('1.0.0');
187
+ const parseResult = exportDataSchema.safeParse(result);
188
+ expect(parseResult.success).toBe(true);
189
+ });
190
+ });
191
+ describe('importData - v2 round-trip', () => {
192
+ it('should import v2 data without loss', async () => {
193
+ const exportedData = {
194
+ meta: {
195
+ exportedAt: '2025-01-01T00:00:00.000Z',
196
+ version: '1.0.0',
197
+ schemaVersion: 2,
198
+ },
199
+ data: {
200
+ projects: [
201
+ {
202
+ id: 'proj-1',
203
+ name: 'Test Project',
204
+ slug: 'test-project',
205
+ repoPath: '/path/to/repo',
206
+ worktreeBasePath: '/path/to/worktrees',
207
+ defaultBranch: 'main',
208
+ githubOwner: 'test-owner',
209
+ githubRepo: 'test-repo',
210
+ isArchived: false,
211
+ startupScriptCommand: 'npm install',
212
+ startupScriptPath: null,
213
+ startupScriptTimeout: 300,
214
+ createdAt: '2025-01-01T00:00:00.000Z',
215
+ updatedAt: '2025-01-01T00:00:00.000Z',
216
+ },
217
+ ],
218
+ workspaces: [
219
+ {
220
+ id: 'ws-1',
221
+ projectId: 'proj-1',
222
+ name: 'Test Workspace',
223
+ description: 'Test description',
224
+ status: WorkspaceStatus.READY,
225
+ worktreePath: '/path/to/worktree',
226
+ branchName: 'feature/test',
227
+ isAutoGeneratedBranch: true,
228
+ creationSource: WorkspaceCreationSource.GITHUB_ISSUE,
229
+ creationMetadata: { issueNumber: 123 },
230
+ initErrorMessage: null,
231
+ initOutput: 'Init output',
232
+ initStartedAt: '2025-01-01T00:00:00.000Z',
233
+ initCompletedAt: '2025-01-01T00:05:00.000Z',
234
+ initRetryCount: 0,
235
+ runScriptCommand: 'npm run dev',
236
+ runScriptCleanupCommand: 'npm run cleanup',
237
+ runScriptPid: 12_345,
238
+ runScriptPort: 3000,
239
+ runScriptStartedAt: '2025-01-01T00:10:00.000Z',
240
+ runScriptStatus: RunScriptStatus.RUNNING,
241
+ prUrl: 'https://github.com/test/repo/pull/1',
242
+ githubIssueNumber: 123,
243
+ githubIssueUrl: 'https://github.com/test/repo/issues/123',
244
+ prNumber: 1,
245
+ prState: PRState.OPEN,
246
+ prReviewState: 'APPROVED',
247
+ prCiStatus: CIStatus.SUCCESS,
248
+ prUpdatedAt: '2025-01-01T00:15:00.000Z',
249
+ prCiFailedAt: null,
250
+ prCiLastNotifiedAt: null,
251
+ prReviewLastCheckedAt: '2025-01-01T00:20:00.000Z',
252
+ prReviewLastCommentId: 'comment-123',
253
+ ratchetEnabled: true,
254
+ ratchetState: RatchetState.READY,
255
+ ratchetLastCheckedAt: '2025-01-01T00:25:00.000Z',
256
+ ratchetLastPushAt: '2025-01-01T00:30:00.000Z',
257
+ ratchetActiveSessionId: 'session-123',
258
+ ratchetLastCiRunId: 'run-123',
259
+ ratchetLastNotifiedState: RatchetState.CI_RUNNING,
260
+ hasHadSessions: true,
261
+ cachedKanbanColumn: KanbanColumn.WORKING,
262
+ stateComputedAt: '2025-01-01T00:35:00.000Z',
263
+ createdAt: '2025-01-01T00:00:00.000Z',
264
+ updatedAt: '2025-01-01T00:35:00.000Z',
265
+ },
266
+ ],
267
+ claudeSessions: [],
268
+ terminalSessions: [],
269
+ userSettings: {
270
+ preferredIde: 'cursor',
271
+ customIdeCommand: null,
272
+ playSoundOnComplete: true,
273
+ notificationSoundPath: '/path/to/sound.mp3',
274
+ ratchetEnabled: true,
275
+ ratchetAutoFixCi: true,
276
+ ratchetAutoFixReviews: false,
277
+ ratchetAutoMerge: false,
278
+ ratchetAllowedReviewers: ['user1', 'user2'],
279
+ },
280
+ },
281
+ };
282
+ vi.mocked(mockTx.project.findUnique)
283
+ .mockResolvedValueOnce(null)
284
+ .mockResolvedValueOnce(null)
285
+ .mockResolvedValue(mockProject);
286
+ vi.mocked(mockTx.project.create).mockResolvedValue(mockProject);
287
+ vi.mocked(mockTx.workspace.findUnique).mockResolvedValue(null);
288
+ vi.mocked(mockTx.workspace.create).mockResolvedValue(mockWorkspaceV2);
289
+ vi.mocked(mockTx.userSettings.findFirst).mockResolvedValue(null);
290
+ vi.mocked(mockTx.userSettings.create).mockResolvedValue(mockUserSettingsV2);
291
+ const result = await dataBackupService.importData(exportedData);
292
+ expect(result.projects.imported).toBe(1);
293
+ expect(result.workspaces.imported).toBe(1);
294
+ expect(result.userSettings.imported).toBe(true);
295
+ expect(mockTx.workspace.create).toHaveBeenCalledWith({
296
+ data: expect.objectContaining({
297
+ ratchetEnabled: true,
298
+ ratchetState: RatchetState.READY,
299
+ ratchetActiveSessionId: 'session-123',
300
+ ratchetLastCiRunId: 'run-123',
301
+ prReviewLastCommentId: 'comment-123',
302
+ }),
303
+ });
304
+ expect(mockTx.userSettings.create).toHaveBeenCalledWith({
305
+ data: expect.objectContaining({
306
+ ratchetEnabled: true,
307
+ ratchetAutoFixCi: true,
308
+ ratchetAutoFixReviews: false,
309
+ ratchetAutoMerge: false,
310
+ }),
311
+ });
312
+ });
313
+ });
314
+ describe('importData - v1 compatibility', () => {
315
+ it('should import v1 data with migration to v2 defaults', async () => {
316
+ const v1Data = {
317
+ meta: {
318
+ exportedAt: '2024-12-01T00:00:00.000Z',
319
+ version: '0.9.0',
320
+ schemaVersion: 1,
321
+ },
322
+ data: {
323
+ projects: [
324
+ {
325
+ id: 'proj-1',
326
+ name: 'Test Project',
327
+ slug: 'test-project',
328
+ repoPath: '/path/to/repo',
329
+ worktreeBasePath: '/path/to/worktrees',
330
+ defaultBranch: 'main',
331
+ githubOwner: null,
332
+ githubRepo: null,
333
+ isArchived: false,
334
+ startupScriptCommand: null,
335
+ startupScriptPath: null,
336
+ startupScriptTimeout: 300,
337
+ createdAt: '2024-12-01T00:00:00.000Z',
338
+ updatedAt: '2024-12-01T00:00:00.000Z',
339
+ },
340
+ ],
341
+ workspaces: [
342
+ {
343
+ id: 'ws-1',
344
+ projectId: 'proj-1',
345
+ name: 'Old Workspace',
346
+ description: null,
347
+ status: WorkspaceStatus.READY,
348
+ worktreePath: '/path/to/worktree',
349
+ branchName: 'main',
350
+ initErrorMessage: null,
351
+ initOutput: null,
352
+ initStartedAt: null,
353
+ initCompletedAt: null,
354
+ initRetryCount: 0,
355
+ runScriptCommand: null,
356
+ runScriptCleanupCommand: null,
357
+ runScriptPid: null,
358
+ runScriptPort: null,
359
+ runScriptStartedAt: null,
360
+ runScriptStatus: RunScriptStatus.IDLE,
361
+ prUrl: null,
362
+ githubIssueNumber: null,
363
+ githubIssueUrl: null,
364
+ prNumber: null,
365
+ prState: PRState.NONE,
366
+ prReviewState: null,
367
+ prCiStatus: CIStatus.UNKNOWN,
368
+ prUpdatedAt: null,
369
+ prCiFailedAt: null,
370
+ prCiLastNotifiedAt: null,
371
+ hasHadSessions: false,
372
+ cachedKanbanColumn: KanbanColumn.WAITING,
373
+ stateComputedAt: null,
374
+ createdAt: '2024-12-01T00:00:00.000Z',
375
+ updatedAt: '2024-12-01T00:00:00.000Z',
376
+ },
377
+ ],
378
+ claudeSessions: [],
379
+ terminalSessions: [],
380
+ userSettings: {
381
+ preferredIde: 'cursor',
382
+ customIdeCommand: null,
383
+ playSoundOnComplete: true,
384
+ notificationSoundPath: null,
385
+ },
386
+ },
387
+ };
388
+ vi.mocked(mockTx.project.findUnique)
389
+ .mockResolvedValueOnce(null)
390
+ .mockResolvedValueOnce(null)
391
+ .mockResolvedValue(mockProject);
392
+ vi.mocked(mockTx.project.create).mockResolvedValue(mockProject);
393
+ vi.mocked(mockTx.workspace.findUnique).mockResolvedValue(null);
394
+ vi.mocked(mockTx.workspace.create).mockResolvedValue(mockWorkspaceV2);
395
+ vi.mocked(mockTx.userSettings.findFirst).mockResolvedValue(null);
396
+ vi.mocked(mockTx.userSettings.create).mockResolvedValue(mockUserSettingsV2);
397
+ const result = await dataBackupService.importData(v1Data);
398
+ expect(result.projects.imported).toBe(1);
399
+ expect(result.workspaces.imported).toBe(1);
400
+ expect(result.userSettings.imported).toBe(true);
401
+ expect(mockTx.workspace.create).toHaveBeenCalledWith({
402
+ data: expect.objectContaining({
403
+ id: 'ws-1',
404
+ name: 'Old Workspace',
405
+ isAutoGeneratedBranch: false,
406
+ creationSource: WorkspaceCreationSource.MANUAL,
407
+ creationMetadata: undefined,
408
+ ratchetEnabled: true,
409
+ ratchetState: RatchetState.IDLE,
410
+ ratchetLastCheckedAt: null,
411
+ ratchetLastPushAt: null,
412
+ ratchetActiveSessionId: null,
413
+ ratchetLastCiRunId: null,
414
+ ratchetLastNotifiedState: null,
415
+ prReviewLastCheckedAt: null,
416
+ prReviewLastCommentId: null,
417
+ }),
418
+ });
419
+ expect(mockTx.userSettings.create).toHaveBeenCalledWith({
420
+ data: expect.objectContaining({
421
+ preferredIde: 'cursor',
422
+ ratchetEnabled: false,
423
+ ratchetAutoFixCi: true,
424
+ ratchetAutoFixReviews: true,
425
+ ratchetAutoMerge: false,
426
+ }),
427
+ });
428
+ });
429
+ it('should handle v1 PAUSED runScriptStatus migration', async () => {
430
+ const v1Data = {
431
+ meta: {
432
+ exportedAt: '2024-12-01T00:00:00.000Z',
433
+ version: '0.9.0',
434
+ schemaVersion: 1,
435
+ },
436
+ data: {
437
+ projects: [],
438
+ workspaces: [
439
+ {
440
+ id: 'ws-1',
441
+ projectId: 'proj-1',
442
+ name: 'Old Workspace',
443
+ description: null,
444
+ status: WorkspaceStatus.READY,
445
+ worktreePath: '/path',
446
+ branchName: 'main',
447
+ initErrorMessage: null,
448
+ initOutput: null,
449
+ initStartedAt: null,
450
+ initCompletedAt: null,
451
+ initRetryCount: 0,
452
+ runScriptCommand: null,
453
+ runScriptCleanupCommand: null,
454
+ runScriptPid: null,
455
+ runScriptPort: null,
456
+ runScriptStartedAt: null,
457
+ runScriptStatus: 'PAUSED',
458
+ prUrl: null,
459
+ githubIssueNumber: null,
460
+ githubIssueUrl: null,
461
+ prNumber: null,
462
+ prState: PRState.NONE,
463
+ prReviewState: null,
464
+ prCiStatus: CIStatus.UNKNOWN,
465
+ prUpdatedAt: null,
466
+ prCiFailedAt: null,
467
+ prCiLastNotifiedAt: null,
468
+ hasHadSessions: false,
469
+ cachedKanbanColumn: KanbanColumn.WAITING,
470
+ stateComputedAt: null,
471
+ createdAt: '2024-12-01T00:00:00.000Z',
472
+ updatedAt: '2024-12-01T00:00:00.000Z',
473
+ },
474
+ ],
475
+ claudeSessions: [],
476
+ terminalSessions: [],
477
+ userSettings: null,
478
+ },
479
+ };
480
+ vi.mocked(mockTx.project.findUnique).mockResolvedValue(mockProject);
481
+ vi.mocked(mockTx.workspace.findUnique).mockResolvedValue(null);
482
+ vi.mocked(mockTx.workspace.create).mockResolvedValue(mockWorkspaceV2);
483
+ await dataBackupService.importData(v1Data);
484
+ expect(mockTx.workspace.create).toHaveBeenCalledWith({
485
+ data: expect.objectContaining({
486
+ runScriptStatus: RunScriptStatus.IDLE,
487
+ }),
488
+ });
489
+ });
490
+ });
491
+ describe('importData - skip existing records', () => {
492
+ it('should skip projects that already exist', async () => {
493
+ const exportedData = {
494
+ meta: {
495
+ exportedAt: '2025-01-01T00:00:00.000Z',
496
+ version: '1.0.0',
497
+ schemaVersion: 2,
498
+ },
499
+ data: {
500
+ projects: [
501
+ {
502
+ id: 'proj-1',
503
+ name: 'Test Project',
504
+ slug: 'test-project',
505
+ repoPath: '/path',
506
+ worktreeBasePath: '/path',
507
+ defaultBranch: 'main',
508
+ githubOwner: null,
509
+ githubRepo: null,
510
+ isArchived: false,
511
+ startupScriptCommand: null,
512
+ startupScriptPath: null,
513
+ startupScriptTimeout: 300,
514
+ createdAt: '2025-01-01T00:00:00.000Z',
515
+ updatedAt: '2025-01-01T00:00:00.000Z',
516
+ },
517
+ ],
518
+ workspaces: [],
519
+ claudeSessions: [],
520
+ terminalSessions: [],
521
+ userSettings: null,
522
+ },
523
+ };
524
+ vi.mocked(mockTx.project.findUnique).mockResolvedValue(mockProject);
525
+ const result = await dataBackupService.importData(exportedData);
526
+ expect(result.projects.skipped).toBe(1);
527
+ expect(result.projects.imported).toBe(0);
528
+ expect(mockTx.project.create).not.toHaveBeenCalled();
529
+ });
530
+ it('should skip workspaces with missing projects', async () => {
531
+ const exportedData = {
532
+ meta: {
533
+ exportedAt: '2025-01-01T00:00:00.000Z',
534
+ version: '1.0.0',
535
+ schemaVersion: 2,
536
+ },
537
+ data: {
538
+ projects: [],
539
+ workspaces: [
540
+ {
541
+ id: 'ws-1',
542
+ projectId: 'missing-project',
543
+ name: 'Orphaned Workspace',
544
+ description: null,
545
+ status: WorkspaceStatus.NEW,
546
+ worktreePath: null,
547
+ branchName: null,
548
+ isAutoGeneratedBranch: false,
549
+ creationSource: WorkspaceCreationSource.MANUAL,
550
+ creationMetadata: null,
551
+ initErrorMessage: null,
552
+ initOutput: null,
553
+ initStartedAt: null,
554
+ initCompletedAt: null,
555
+ initRetryCount: 0,
556
+ runScriptCommand: null,
557
+ runScriptCleanupCommand: null,
558
+ runScriptPid: null,
559
+ runScriptPort: null,
560
+ runScriptStartedAt: null,
561
+ runScriptStatus: RunScriptStatus.IDLE,
562
+ prUrl: null,
563
+ githubIssueNumber: null,
564
+ githubIssueUrl: null,
565
+ prNumber: null,
566
+ prState: PRState.NONE,
567
+ prReviewState: null,
568
+ prCiStatus: CIStatus.UNKNOWN,
569
+ prUpdatedAt: null,
570
+ prCiFailedAt: null,
571
+ prCiLastNotifiedAt: null,
572
+ prReviewLastCheckedAt: null,
573
+ prReviewLastCommentId: null,
574
+ ratchetEnabled: true,
575
+ ratchetState: RatchetState.IDLE,
576
+ ratchetLastCheckedAt: null,
577
+ ratchetLastPushAt: null,
578
+ ratchetActiveSessionId: null,
579
+ ratchetLastCiRunId: null,
580
+ ratchetLastNotifiedState: null,
581
+ hasHadSessions: false,
582
+ cachedKanbanColumn: KanbanColumn.WAITING,
583
+ stateComputedAt: null,
584
+ createdAt: '2025-01-01T00:00:00.000Z',
585
+ updatedAt: '2025-01-01T00:00:00.000Z',
586
+ },
587
+ ],
588
+ claudeSessions: [],
589
+ terminalSessions: [],
590
+ userSettings: null,
591
+ },
592
+ };
593
+ vi.mocked(mockTx.workspace.findUnique).mockResolvedValue(null);
594
+ vi.mocked(mockTx.project.findUnique).mockResolvedValue(null);
595
+ const result = await dataBackupService.importData(exportedData);
596
+ expect(result.workspaces.skipped).toBe(1);
597
+ expect(result.workspaces.imported).toBe(0);
598
+ expect(mockTx.workspace.create).not.toHaveBeenCalled();
599
+ });
600
+ });
601
+ });
602
+ //# sourceMappingURL=data-backup.service.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-backup.service.test.js","sourceRoot":"","sources":["../../../../src/backend/services/data-backup.service.test.ts"],"names":[],"mappings":"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"}
@@ -16,9 +16,17 @@ export type PRSnapshotRefreshResult = {
16
16
  success: false;
17
17
  reason: 'workspace_not_found' | 'no_pr_url' | 'fetch_failed' | 'error';
18
18
  };
19
+ export type AttachAndRefreshResult = {
20
+ success: true;
21
+ snapshot: SnapshotData;
22
+ } | {
23
+ success: false;
24
+ reason: 'workspace_not_found' | 'fetch_failed' | 'error';
25
+ };
19
26
  declare class PRSnapshotService {
27
+ attachAndRefreshPR(workspaceId: string, prUrl: string): Promise<AttachAndRefreshResult>;
20
28
  refreshWorkspace(workspaceId: string, explicitPrUrl?: string | null): Promise<PRSnapshotRefreshResult>;
21
- applySnapshot(workspaceId: string, snapshot: SnapshotData): Promise<void>;
29
+ applySnapshot(workspaceId: string, snapshot: SnapshotData, prUrl?: string): Promise<void>;
22
30
  }
23
31
  export declare const prSnapshotService: PRSnapshotService;
24
32
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"pr-snapshot.service.d.ts","sourceRoot":"","sources":["../../../../src/backend/services/pr-snapshot.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAMxD,KAAK,YAAY,GAAG;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,gBAAgB,CAAC,sBAAsB,CAAC,CAAC,SAAS,MAAM,CAAC,GACxF,CAAC,SAAS;QAAE,OAAO,EAAE,MAAM,CAAC,CAAA;KAAE,GAC5B,CAAC,GACD,KAAK,GACP,KAAK,CAAC;IACV,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,gBAAgB,CAAC,sBAAsB,CAAC,CAAC,SAAS,MAAM,CAAC,GAC3F,CAAC,SAAS;QAAE,UAAU,EAAE,MAAM,CAAC,CAAA;KAAE,GAC/B,CAAC,GACD,KAAK,GACP,KAAK,CAAC;CACX,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAC/B;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,YAAY,CAAA;CAAE,GACzC;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,qBAAqB,GAAG,WAAW,GAAG,cAAc,GAAG,OAAO,CAAA;CAAE,CAAC;AAE/F,cAAM,iBAAiB;IACf,gBAAgB,CACpB,WAAW,EAAE,MAAM,EACnB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,GAC5B,OAAO,CAAC,uBAAuB,CAAC;IA4C7B,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;CAWhF;AAED,eAAO,MAAM,iBAAiB,mBAA0B,CAAC"}
1
+ {"version":3,"file":"pr-snapshot.service.d.ts","sourceRoot":"","sources":["../../../../src/backend/services/pr-snapshot.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAMxD,KAAK,YAAY,GAAG;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,gBAAgB,CAAC,sBAAsB,CAAC,CAAC,SAAS,MAAM,CAAC,GACxF,CAAC,SAAS;QAAE,OAAO,EAAE,MAAM,CAAC,CAAA;KAAE,GAC5B,CAAC,GACD,KAAK,GACP,KAAK,CAAC;IACV,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,gBAAgB,CAAC,sBAAsB,CAAC,CAAC,SAAS,MAAM,CAAC,GAC3F,CAAC,SAAS;QAAE,UAAU,EAAE,MAAM,CAAC,CAAA;KAAE,GAC/B,CAAC,GACD,KAAK,GACP,KAAK,CAAC;CACX,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAC/B;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,YAAY,CAAA;CAAE,GACzC;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,qBAAqB,GAAG,WAAW,GAAG,cAAc,GAAG,OAAO,CAAA;CAAE,CAAC;AAE/F,MAAM,MAAM,sBAAsB,GAC9B;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,YAAY,CAAA;CAAE,GACzC;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,qBAAqB,GAAG,cAAc,GAAG,OAAO,CAAA;CAAE,CAAC;AAEjF,cAAM,iBAAiB;IASf,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IA0DvF,gBAAgB,CACpB,WAAW,EAAE,MAAM,EACnB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,GAC5B,OAAO,CAAC,uBAAuB,CAAC;IA4C7B,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAkBhG;AAED,eAAO,MAAM,iBAAiB,mBAA0B,CAAC"}