@jingyi0605/codingns 0.5.1 → 0.6.0

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 (196) hide show
  1. package/dist/public/assets/{AdaptiveButlerPage-SffCV4Vb.js → AdaptiveButlerPage-uFwDdN-F.js} +3 -3
  2. package/dist/public/assets/App-BZvapsi8.js +30 -0
  3. package/dist/public/assets/App-CcDXqFl1.css +1 -0
  4. package/dist/public/assets/{BootstrapPage--zExdgfM.js → BootstrapPage-gHSoa4JN.js} +1 -1
  5. package/dist/public/assets/ConversationPage-z3sXtKZ7.js +4 -0
  6. package/dist/public/assets/{DesktopDetachPreviewPage-DvI9CIKi.js → DesktopDetachPreviewPage-4eMRxiBW.js} +1 -1
  7. package/dist/public/assets/DesktopWindowPage-CZcoGApB.js +2 -0
  8. package/dist/public/assets/FileContextPanel-C3qex8bb.js +1 -0
  9. package/dist/public/assets/GitSidebar-BK6H16XU.js +6 -0
  10. package/dist/public/assets/{MobileCreateSessionSheet-CXSKMnYn.js → MobileCreateSessionSheet-BYfbvK8o.js} +1 -1
  11. package/dist/public/assets/MobileSheet-Ckug8hTb.js +1 -0
  12. package/dist/public/assets/{MobileTopHeaderFrame-BWorAJ1C.js → MobileTopHeaderFrame-Bwv8Ovm_.js} +1 -1
  13. package/dist/public/assets/MobileWorkspaceSwitcherHeader-RqWrBdn2.js +1 -0
  14. package/dist/public/assets/RelayConnectEntryPage-D_4YL-YH.js +1 -0
  15. package/dist/public/assets/ServerSettingsModal-CMSm3BZU.js +1 -0
  16. package/dist/public/assets/SessionIndexPage-DuK10DL5.js +1 -0
  17. package/dist/public/assets/SettingsPage-fyD-xaHL.js +1 -0
  18. package/dist/public/assets/TerminalManagerPanel-CCLr1Ypk.js +1 -0
  19. package/dist/public/assets/{TerminalPage-CvnHXBhw.js → TerminalPage-DaooFaJ4.js} +19 -19
  20. package/dist/public/assets/{TerminalRuntimeFallbackModal-D7Aq186N.js → TerminalRuntimeFallbackModal-aUzjEBwP.js} +1 -1
  21. package/dist/public/assets/ToolFilesPage-CGxBvYG0.js +1 -0
  22. package/dist/public/assets/ToolGitPage-C264yjS9.js +1 -0
  23. package/dist/public/assets/ToolProcessesPage-BOP4A1cb.js +1 -0
  24. package/dist/public/assets/ToolsHomePage-CQxGiKQA.js +1 -0
  25. package/dist/public/assets/WorkbenchLandingPage-CvAY68ca.js +1 -0
  26. package/dist/public/assets/WorkbenchLayout-DGm8Tc5M.js +3 -0
  27. package/dist/public/assets/{WorkbenchModal-B09hC9b5.js → WorkbenchModal-0tPIIhca.js} +1 -1
  28. package/dist/public/assets/{WorkbenchShellRoute-DsW4mBTX.css → WorkbenchShellRoute-BF0nHWOk.css} +1 -1
  29. package/dist/public/assets/WorkbenchShellRoute-DBBOsJo9.js +1 -0
  30. package/dist/public/assets/WorkspaceDebugDetailPage-CDerFYd2.js +1 -0
  31. package/dist/public/assets/WorkspaceDetailPage-BlJc1CHE.js +1 -0
  32. package/dist/public/assets/WorkspaceHomePage-BUsKJ3lv.js +1 -0
  33. package/dist/public/assets/client-runtime-manager-BZpL17fc.js +1 -0
  34. package/dist/public/assets/{default-session-permission-mode-D0wZ9Jek.js → default-session-permission-mode-DT4SGiwp.js} +1 -1
  35. package/dist/public/assets/file-tree-icon-Db5LXC8h.js +31 -0
  36. package/dist/public/assets/index-BZLcEHW3.js +42 -0
  37. package/dist/public/assets/index-BbspQPC2.css +1 -0
  38. package/dist/public/assets/login-direct-candidate-resolver-1mxe_Oh8.js +1 -0
  39. package/dist/public/assets/{preferences-service-gOt2ZjKZ.js → preferences-service-DWnzl5a0.js} +1 -1
  40. package/dist/public/assets/relay-entry-C5_Iay0I.js +1 -0
  41. package/dist/public/assets/session-runtime-machine-DdLeDqQr.js +17 -0
  42. package/dist/public/assets/{styles-BWPBZvze.css → styles-CsEMfdaS.css} +1 -1
  43. package/dist/public/assets/{terminal-runtime-meta-BMT-rSEe.js → terminal-runtime-meta-cdtWVfCm.js} +1 -1
  44. package/dist/public/assets/{useRegisteredDebugTemplates-zMcEOGca.js → useRegisteredDebugTemplates-oFAQNIqh.js} +1 -1
  45. package/dist/public/assets/window-BVUB8gMK.js +1 -0
  46. package/dist/public/index.html +2 -2
  47. package/dist/server/config/env.d.ts +2 -0
  48. package/dist/server/config/env.js +39 -0
  49. package/dist/server/config/env.js.map +1 -1
  50. package/dist/server/modules/client/npm-global-package-service.d.ts +7 -1
  51. package/dist/server/modules/client/npm-global-package-service.js +149 -43
  52. package/dist/server/modules/client/npm-global-package-service.js.map +1 -1
  53. package/dist/server/modules/client/service-update-task-service.js +6 -2
  54. package/dist/server/modules/client/service-update-task-service.js.map +1 -1
  55. package/dist/server/modules/client/service-update-types.d.ts +2 -0
  56. package/dist/server/modules/git/git-controller.d.ts +3 -0
  57. package/dist/server/modules/git/git-controller.js +3 -0
  58. package/dist/server/modules/git/git-controller.js.map +1 -1
  59. package/dist/server/modules/git/git-read-service.js +47 -1
  60. package/dist/server/modules/git/git-read-service.js.map +1 -1
  61. package/dist/server/modules/git/git-write-service.d.ts +4 -0
  62. package/dist/server/modules/git/git-write-service.js +24 -0
  63. package/dist/server/modules/git/git-write-service.js.map +1 -1
  64. package/dist/server/modules/git/types.d.ts +1 -0
  65. package/dist/server/modules/git/workspace-repo-guard.d.ts +2 -0
  66. package/dist/server/modules/git/workspace-repo-guard.js +24 -10
  67. package/dist/server/modules/git/workspace-repo-guard.js.map +1 -1
  68. package/dist/server/modules/parallel-sessions/parallel-session-controller.d.ts +53 -0
  69. package/dist/server/modules/parallel-sessions/parallel-session-controller.js +70 -0
  70. package/dist/server/modules/parallel-sessions/parallel-session-controller.js.map +1 -0
  71. package/dist/server/modules/parallel-sessions/parallel-session-group-service.d.ts +83 -0
  72. package/dist/server/modules/parallel-sessions/parallel-session-group-service.js +591 -0
  73. package/dist/server/modules/parallel-sessions/parallel-session-group-service.js.map +1 -0
  74. package/dist/server/modules/parallel-sessions/session-isolated-workspace-service.d.ts +56 -0
  75. package/dist/server/modules/parallel-sessions/session-isolated-workspace-service.js +483 -0
  76. package/dist/server/modules/parallel-sessions/session-isolated-workspace-service.js.map +1 -0
  77. package/dist/server/modules/relay-tunnel/crypto/relay-tunnel-packets.d.ts +16 -1
  78. package/dist/server/modules/relay-tunnel/crypto/relay-tunnel-packets.js.map +1 -1
  79. package/dist/server/modules/relay-tunnel/crypto/relay-tunnel-protocol.d.ts +2 -1
  80. package/dist/server/modules/relay-tunnel/crypto/relay-tunnel-protocol.js +18 -0
  81. package/dist/server/modules/relay-tunnel/crypto/relay-tunnel-protocol.js.map +1 -1
  82. package/dist/server/modules/relay-tunnel/relay-tunnel-candidate-endpoints.d.ts +2 -0
  83. package/dist/server/modules/relay-tunnel/relay-tunnel-candidate-endpoints.js +129 -0
  84. package/dist/server/modules/relay-tunnel/relay-tunnel-candidate-endpoints.js.map +1 -0
  85. package/dist/server/modules/relay-tunnel/relay-tunnel-client-context.d.ts +13 -0
  86. package/dist/server/modules/relay-tunnel/relay-tunnel-client-context.js +2 -0
  87. package/dist/server/modules/relay-tunnel/relay-tunnel-client-context.js.map +1 -0
  88. package/dist/server/modules/relay-tunnel/relay-tunnel-gateway-service.d.ts +6 -0
  89. package/dist/server/modules/relay-tunnel/relay-tunnel-gateway-service.js +110 -10
  90. package/dist/server/modules/relay-tunnel/relay-tunnel-gateway-service.js.map +1 -1
  91. package/dist/server/modules/relay-tunnel/relay-tunnel-runtime-adapter.d.ts +16 -4
  92. package/dist/server/modules/relay-tunnel/relay-tunnel-runtime-adapter.js +220 -102
  93. package/dist/server/modules/relay-tunnel/relay-tunnel-runtime-adapter.js.map +1 -1
  94. package/dist/server/modules/relay-tunnel/relay-tunnel-service.d.ts +4 -1
  95. package/dist/server/modules/relay-tunnel/relay-tunnel-service.js +257 -162
  96. package/dist/server/modules/relay-tunnel/relay-tunnel-service.js.map +1 -1
  97. package/dist/server/modules/sessions/codex-app-server-helper-client.d.ts +3 -0
  98. package/dist/server/modules/sessions/codex-app-server-helper-client.js +56 -45
  99. package/dist/server/modules/sessions/codex-app-server-helper-client.js.map +1 -1
  100. package/dist/server/modules/sessions/codex-app-server-helper-process.js +21 -2
  101. package/dist/server/modules/sessions/codex-app-server-helper-process.js.map +1 -1
  102. package/dist/server/modules/sessions/session-activity-inspector.js +6 -8
  103. package/dist/server/modules/sessions/session-activity-inspector.js.map +1 -1
  104. package/dist/server/modules/sessions/session-history-service.d.ts +11 -1
  105. package/dist/server/modules/sessions/session-history-service.js +204 -21
  106. package/dist/server/modules/sessions/session-history-service.js.map +1 -1
  107. package/dist/server/modules/sessions/session-live-runtime-service.d.ts +8 -0
  108. package/dist/server/modules/sessions/session-live-runtime-service.js +208 -25
  109. package/dist/server/modules/sessions/session-live-runtime-service.js.map +1 -1
  110. package/dist/server/modules/workbench/codex-archive-watcher.d.ts +16 -0
  111. package/dist/server/modules/workbench/codex-archive-watcher.js +50 -0
  112. package/dist/server/modules/workbench/codex-archive-watcher.js.map +1 -0
  113. package/dist/server/modules/workbench/workbench-service.d.ts +43 -4
  114. package/dist/server/modules/workbench/workbench-service.js +72 -9
  115. package/dist/server/modules/workbench/workbench-service.js.map +1 -1
  116. package/dist/server/modules/workbench/workspace-panel-snapshot-service.d.ts +1 -1
  117. package/dist/server/modules/workbench/workspace-panel-snapshot-service.js +26 -3
  118. package/dist/server/modules/workbench/workspace-panel-snapshot-service.js.map +1 -1
  119. package/dist/server/modules/workspace/workspace-service.d.ts +3 -1
  120. package/dist/server/modules/workspace/workspace-service.js +10 -2
  121. package/dist/server/modules/workspace/workspace-service.js.map +1 -1
  122. package/dist/server/modules/worktree/worktree-base-ref-resolver.d.ts +20 -0
  123. package/dist/server/modules/worktree/worktree-base-ref-resolver.js +111 -0
  124. package/dist/server/modules/worktree/worktree-base-ref-resolver.js.map +1 -0
  125. package/dist/server/modules/worktree/worktree-cleanup-service.js +9 -3
  126. package/dist/server/modules/worktree/worktree-cleanup-service.js.map +1 -1
  127. package/dist/server/modules/worktree/worktree-manager.d.ts +0 -1
  128. package/dist/server/modules/worktree/worktree-manager.js +14 -20
  129. package/dist/server/modules/worktree/worktree-manager.js.map +1 -1
  130. package/dist/server/routes/git.js +1 -0
  131. package/dist/server/routes/git.js.map +1 -1
  132. package/dist/server/routes/parallel-groups.d.ts +3 -0
  133. package/dist/server/routes/parallel-groups.js +9 -0
  134. package/dist/server/routes/parallel-groups.js.map +1 -0
  135. package/dist/server/server/create-server.d.ts +8 -0
  136. package/dist/server/server/create-server.js +48 -9
  137. package/dist/server/server/create-server.js.map +1 -1
  138. package/dist/server/server/workbench-runtime-terminal-sync.d.ts +14 -0
  139. package/dist/server/server/workbench-runtime-terminal-sync.js +17 -0
  140. package/dist/server/server/workbench-runtime-terminal-sync.js.map +1 -0
  141. package/dist/server/storage/repositories/parallel-session-group-repository.d.ts +11 -0
  142. package/dist/server/storage/repositories/parallel-session-group-repository.js +131 -0
  143. package/dist/server/storage/repositories/parallel-session-group-repository.js.map +1 -0
  144. package/dist/server/storage/repositories/parallel-session-member-repository.d.ts +12 -0
  145. package/dist/server/storage/repositories/parallel-session-member-repository.js +150 -0
  146. package/dist/server/storage/repositories/parallel-session-member-repository.js.map +1 -0
  147. package/dist/server/storage/repositories/session-isolated-workspace-repository.d.ts +15 -0
  148. package/dist/server/storage/repositories/session-isolated-workspace-repository.js +230 -0
  149. package/dist/server/storage/repositories/session-isolated-workspace-repository.js.map +1 -0
  150. package/dist/server/storage/sqlite/schema.sql +73 -0
  151. package/dist/server/types/domain.d.ts +72 -0
  152. package/dist/server/ws/workbench-ws-hub.d.ts +3 -1
  153. package/dist/server/ws/workbench-ws-hub.js +189 -20
  154. package/dist/server/ws/workbench-ws-hub.js.map +1 -1
  155. package/dist/server/ws/ws-server.js +141 -8
  156. package/dist/server/ws/ws-server.js.map +1 -1
  157. package/node_modules/@codingns/session-sync-core/dist/providers/codex.d.ts +1 -0
  158. package/node_modules/@codingns/session-sync-core/dist/providers/codex.js +67 -6
  159. package/node_modules/@codingns/session-sync-core/dist/providers/codex.js.map +1 -1
  160. package/node_modules/@codingns/session-sync-core/dist/runtime/active-run-registry.d.ts +3 -0
  161. package/node_modules/@codingns/session-sync-core/dist/runtime/active-run-registry.js +46 -22
  162. package/node_modules/@codingns/session-sync-core/dist/runtime/active-run-registry.js.map +1 -1
  163. package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.js +558 -309
  164. package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.js.map +1 -1
  165. package/node_modules/@codingns/session-sync-core/dist/runtime/opencode-runtime.js +29 -5
  166. package/node_modules/@codingns/session-sync-core/dist/runtime/opencode-runtime.js.map +1 -1
  167. package/package.json +1 -1
  168. package/dist/public/assets/App-DUAg5urj.css +0 -1
  169. package/dist/public/assets/App-WOLwMld_.js +0 -30
  170. package/dist/public/assets/ConversationPage-D9pzRmOg.js +0 -2
  171. package/dist/public/assets/DesktopWindowPage-D8FpOSLE.js +0 -2
  172. package/dist/public/assets/FileContextPanel-C8T7oqRN.js +0 -1
  173. package/dist/public/assets/GitSidebar-Bze7DNnc.js +0 -6
  174. package/dist/public/assets/MobileSheet-Gzc14EpR.js +0 -1
  175. package/dist/public/assets/MobileWorkspaceSwitcherHeader-DOr4pTUq.js +0 -1
  176. package/dist/public/assets/ServerSettingsModal-BYB0GvTl.js +0 -1
  177. package/dist/public/assets/SessionIndexPage-CR3IARXX.js +0 -1
  178. package/dist/public/assets/SettingsPage-B_BQtnwE.js +0 -1
  179. package/dist/public/assets/TerminalManagerPanel-PQ-EM64j.js +0 -1
  180. package/dist/public/assets/ToolFilesPage-Qzkc6K2I.js +0 -1
  181. package/dist/public/assets/ToolGitPage-BdNDN-cV.js +0 -1
  182. package/dist/public/assets/ToolProcessesPage-EXJ9DHWI.js +0 -1
  183. package/dist/public/assets/ToolsHomePage-CjF3CWzR.js +0 -1
  184. package/dist/public/assets/WorkbenchLandingPage-DZPk4SmX.js +0 -1
  185. package/dist/public/assets/WorkbenchLayout-rwQib5In.js +0 -3
  186. package/dist/public/assets/WorkbenchShellRoute-Cerk5uK7.js +0 -1
  187. package/dist/public/assets/WorkspaceDebugDetailPage-Bcq8s-Ma.js +0 -1
  188. package/dist/public/assets/WorkspaceDetailPage-DNAa8pKr.js +0 -1
  189. package/dist/public/assets/WorkspaceHomePage-BoiLuACV.js +0 -1
  190. package/dist/public/assets/client-runtime-manager-CRQ-F5d2.js +0 -1
  191. package/dist/public/assets/file-tree-icon-Dp_xhVfD.js +0 -31
  192. package/dist/public/assets/index-C2G8Gmf1.js +0 -42
  193. package/dist/public/assets/index-CpPTUeA3.css +0 -1
  194. package/dist/public/assets/session-runtime-machine-Dq3pW-UF.js +0 -17
  195. package/dist/public/assets/window-BWqRixxq.js +0 -1
  196. /package/dist/public/assets/{styles-CSUx5LGe.js → styles-DRVvx_kv.js} +0 -0
@@ -0,0 +1,230 @@
1
+ export class SessionIsolatedWorkspaceRepository {
2
+ db;
3
+ constructor(db) {
4
+ this.db = db;
5
+ }
6
+ create(record) {
7
+ this.db
8
+ .prepare(`INSERT INTO session_isolated_workspaces (
9
+ id,
10
+ group_id,
11
+ owner_session_id,
12
+ workspace_id,
13
+ source_workspace_id,
14
+ branch_name,
15
+ base_ref,
16
+ base_commit,
17
+ head_commit,
18
+ lifecycle_status,
19
+ promoted_at,
20
+ removed_at,
21
+ created_at,
22
+ updated_at
23
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
24
+ .run(record.id, record.groupId, record.ownerSessionId, record.workspaceId, record.sourceWorkspaceId, record.branchName, record.baseRef, record.baseCommit, record.headCommit, record.lifecycleStatus, record.promotedAt, record.removedAt, record.createdAt, record.updatedAt);
25
+ return record;
26
+ }
27
+ update(record) {
28
+ this.db
29
+ .prepare(`UPDATE session_isolated_workspaces
30
+ SET group_id = ?,
31
+ owner_session_id = ?,
32
+ workspace_id = ?,
33
+ source_workspace_id = ?,
34
+ branch_name = ?,
35
+ base_ref = ?,
36
+ base_commit = ?,
37
+ head_commit = ?,
38
+ lifecycle_status = ?,
39
+ promoted_at = ?,
40
+ removed_at = ?,
41
+ created_at = ?,
42
+ updated_at = ?
43
+ WHERE id = ?`)
44
+ .run(record.groupId, record.ownerSessionId, record.workspaceId, record.sourceWorkspaceId, record.branchName, record.baseRef, record.baseCommit, record.headCommit, record.lifecycleStatus, record.promotedAt, record.removedAt, record.createdAt, record.updatedAt, record.id);
45
+ return this.findById(record.id);
46
+ }
47
+ findById(id) {
48
+ const row = this.db
49
+ .prepare(`SELECT
50
+ id,
51
+ group_id,
52
+ owner_session_id,
53
+ workspace_id,
54
+ source_workspace_id,
55
+ branch_name,
56
+ base_ref,
57
+ base_commit,
58
+ head_commit,
59
+ lifecycle_status,
60
+ promoted_at,
61
+ removed_at,
62
+ created_at,
63
+ updated_at
64
+ FROM session_isolated_workspaces
65
+ WHERE id = ?`)
66
+ .get(id);
67
+ return row ? mapSessionIsolatedWorkspaceRow(row) : null;
68
+ }
69
+ findByOwnerSessionId(ownerSessionId) {
70
+ const row = this.db
71
+ .prepare(`SELECT
72
+ id,
73
+ group_id,
74
+ owner_session_id,
75
+ workspace_id,
76
+ source_workspace_id,
77
+ branch_name,
78
+ base_ref,
79
+ base_commit,
80
+ head_commit,
81
+ lifecycle_status,
82
+ promoted_at,
83
+ removed_at,
84
+ created_at,
85
+ updated_at
86
+ FROM session_isolated_workspaces
87
+ WHERE owner_session_id = ?`)
88
+ .get(ownerSessionId);
89
+ return row ? mapSessionIsolatedWorkspaceRow(row) : null;
90
+ }
91
+ findByWorkspaceId(workspaceId) {
92
+ const row = this.db
93
+ .prepare(`SELECT
94
+ id,
95
+ group_id,
96
+ owner_session_id,
97
+ workspace_id,
98
+ source_workspace_id,
99
+ branch_name,
100
+ base_ref,
101
+ base_commit,
102
+ head_commit,
103
+ lifecycle_status,
104
+ promoted_at,
105
+ removed_at,
106
+ created_at,
107
+ updated_at
108
+ FROM session_isolated_workspaces
109
+ WHERE workspace_id = ?`)
110
+ .get(workspaceId);
111
+ return row ? mapSessionIsolatedWorkspaceRow(row) : null;
112
+ }
113
+ listByGroupId(groupId) {
114
+ return this.db
115
+ .prepare(`SELECT
116
+ id,
117
+ group_id,
118
+ owner_session_id,
119
+ workspace_id,
120
+ source_workspace_id,
121
+ branch_name,
122
+ base_ref,
123
+ base_commit,
124
+ head_commit,
125
+ lifecycle_status,
126
+ promoted_at,
127
+ removed_at,
128
+ created_at,
129
+ updated_at
130
+ FROM session_isolated_workspaces
131
+ WHERE group_id = ?
132
+ ORDER BY created_at ASC`)
133
+ .all(groupId)
134
+ .map((row) => mapSessionIsolatedWorkspaceRow(row));
135
+ }
136
+ listByOwnerSessionIds(ownerSessionIds) {
137
+ if (ownerSessionIds.length === 0) {
138
+ return [];
139
+ }
140
+ const placeholders = ownerSessionIds.map(() => "?").join(", ");
141
+ return this.db
142
+ .prepare(`SELECT
143
+ id,
144
+ group_id,
145
+ owner_session_id,
146
+ workspace_id,
147
+ source_workspace_id,
148
+ branch_name,
149
+ base_ref,
150
+ base_commit,
151
+ head_commit,
152
+ lifecycle_status,
153
+ promoted_at,
154
+ removed_at,
155
+ created_at,
156
+ updated_at
157
+ FROM session_isolated_workspaces
158
+ WHERE owner_session_id IN (${placeholders})`)
159
+ .all(...ownerSessionIds)
160
+ .map((row) => mapSessionIsolatedWorkspaceRow(row));
161
+ }
162
+ listByLifecycleStatuses(lifecycleStatuses) {
163
+ if (lifecycleStatuses.length === 0) {
164
+ return [];
165
+ }
166
+ const placeholders = lifecycleStatuses.map(() => "?").join(", ");
167
+ return this.db
168
+ .prepare(`SELECT
169
+ id,
170
+ group_id,
171
+ owner_session_id,
172
+ workspace_id,
173
+ source_workspace_id,
174
+ branch_name,
175
+ base_ref,
176
+ base_commit,
177
+ head_commit,
178
+ lifecycle_status,
179
+ promoted_at,
180
+ removed_at,
181
+ created_at,
182
+ updated_at
183
+ FROM session_isolated_workspaces
184
+ WHERE lifecycle_status IN (${placeholders})`)
185
+ .all(...lifecycleStatuses)
186
+ .map((row) => mapSessionIsolatedWorkspaceRow(row));
187
+ }
188
+ listBySourceWorkspaceId(sourceWorkspaceId) {
189
+ return this.db
190
+ .prepare(`SELECT
191
+ id,
192
+ group_id,
193
+ owner_session_id,
194
+ workspace_id,
195
+ source_workspace_id,
196
+ branch_name,
197
+ base_ref,
198
+ base_commit,
199
+ head_commit,
200
+ lifecycle_status,
201
+ promoted_at,
202
+ removed_at,
203
+ created_at,
204
+ updated_at
205
+ FROM session_isolated_workspaces
206
+ WHERE source_workspace_id = ?
207
+ ORDER BY created_at ASC`)
208
+ .all(sourceWorkspaceId)
209
+ .map((row) => mapSessionIsolatedWorkspaceRow(row));
210
+ }
211
+ }
212
+ function mapSessionIsolatedWorkspaceRow(row) {
213
+ return {
214
+ id: row.id,
215
+ groupId: row.group_id,
216
+ ownerSessionId: row.owner_session_id,
217
+ workspaceId: row.workspace_id,
218
+ sourceWorkspaceId: row.source_workspace_id,
219
+ branchName: row.branch_name,
220
+ baseRef: row.base_ref,
221
+ baseCommit: row.base_commit,
222
+ headCommit: row.head_commit,
223
+ lifecycleStatus: row.lifecycle_status,
224
+ promotedAt: row.promoted_at,
225
+ removedAt: row.removed_at,
226
+ createdAt: row.created_at,
227
+ updatedAt: row.updated_at
228
+ };
229
+ }
230
+ //# sourceMappingURL=session-isolated-workspace-repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-isolated-workspace-repository.js","sourceRoot":"","sources":["../../../../src/storage/repositories/session-isolated-workspace-repository.ts"],"names":[],"mappings":"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"}
@@ -236,6 +236,79 @@ CREATE INDEX IF NOT EXISTS idx_session_forks_parent_session_id
236
236
  CREATE INDEX IF NOT EXISTS idx_session_forks_source_message_id
237
237
  ON session_forks(fork_source_message_id);
238
238
 
239
+ CREATE TABLE IF NOT EXISTS parallel_session_groups (
240
+ id TEXT PRIMARY KEY,
241
+ workspace_id TEXT NOT NULL,
242
+ source_type TEXT NOT NULL CHECK (source_type IN ('fork', 'new')),
243
+ source_session_id TEXT,
244
+ source_message_id TEXT,
245
+ shared_prompt TEXT,
246
+ requested_count INTEGER NOT NULL CHECK (requested_count BETWEEN 2 AND 4),
247
+ anchor_session_id TEXT,
248
+ status TEXT NOT NULL CHECK (status IN ('active', 'deleting', 'deleted')),
249
+ created_by_user_id TEXT NOT NULL,
250
+ created_at TEXT NOT NULL,
251
+ updated_at TEXT NOT NULL,
252
+ deleted_at TEXT,
253
+ FOREIGN KEY (workspace_id) REFERENCES workspaces(id),
254
+ FOREIGN KEY (created_by_user_id) REFERENCES auth_users(id)
255
+ );
256
+
257
+ CREATE INDEX IF NOT EXISTS idx_parallel_session_groups_workspace_id
258
+ ON parallel_session_groups(workspace_id, status, updated_at DESC);
259
+ CREATE INDEX IF NOT EXISTS idx_parallel_session_groups_anchor_session_id
260
+ ON parallel_session_groups(anchor_session_id);
261
+
262
+ CREATE TABLE IF NOT EXISTS parallel_session_members (
263
+ group_id TEXT NOT NULL,
264
+ session_id TEXT NOT NULL PRIMARY KEY,
265
+ ordinal INTEGER NOT NULL CHECK (ordinal >= 0),
266
+ role TEXT NOT NULL CHECK (role IN ('anchor', 'member')),
267
+ provider TEXT NOT NULL,
268
+ model TEXT,
269
+ member_prompt TEXT,
270
+ workspace_isolation_mode TEXT NOT NULL CHECK (
271
+ workspace_isolation_mode IN ('none', 'temporary_worktree')
272
+ ),
273
+ temporary_workspace_id TEXT,
274
+ created_at TEXT NOT NULL,
275
+ updated_at TEXT NOT NULL,
276
+ deleted_at TEXT,
277
+ FOREIGN KEY (group_id) REFERENCES parallel_session_groups(id) ON DELETE CASCADE
278
+ );
279
+
280
+ CREATE UNIQUE INDEX IF NOT EXISTS idx_parallel_session_members_group_ordinal
281
+ ON parallel_session_members(group_id, ordinal);
282
+ CREATE INDEX IF NOT EXISTS idx_parallel_session_members_group_id
283
+ ON parallel_session_members(group_id, deleted_at, ordinal ASC);
284
+
285
+ CREATE TABLE IF NOT EXISTS session_isolated_workspaces (
286
+ id TEXT PRIMARY KEY,
287
+ group_id TEXT NOT NULL,
288
+ owner_session_id TEXT NOT NULL UNIQUE,
289
+ workspace_id TEXT NOT NULL,
290
+ source_workspace_id TEXT NOT NULL,
291
+ branch_name TEXT NOT NULL,
292
+ base_ref TEXT NOT NULL,
293
+ base_commit TEXT NOT NULL,
294
+ head_commit TEXT,
295
+ lifecycle_status TEXT NOT NULL CHECK (
296
+ lifecycle_status IN ('active', 'promoted', 'removing', 'removed')
297
+ ),
298
+ promoted_at TEXT,
299
+ removed_at TEXT,
300
+ created_at TEXT NOT NULL,
301
+ updated_at TEXT NOT NULL,
302
+ FOREIGN KEY (group_id) REFERENCES parallel_session_groups(id) ON DELETE CASCADE,
303
+ FOREIGN KEY (workspace_id) REFERENCES workspaces(id),
304
+ FOREIGN KEY (source_workspace_id) REFERENCES workspaces(id)
305
+ );
306
+
307
+ CREATE INDEX IF NOT EXISTS idx_session_isolated_workspaces_group_id
308
+ ON session_isolated_workspaces(group_id, lifecycle_status, updated_at DESC);
309
+ CREATE INDEX IF NOT EXISTS idx_session_isolated_workspaces_workspace_id
310
+ ON session_isolated_workspaces(workspace_id, lifecycle_status, updated_at DESC);
311
+
239
312
  CREATE TABLE IF NOT EXISTS session_changed_files (
240
313
  session_id TEXT NOT NULL,
241
314
  workspace_id TEXT NOT NULL,
@@ -86,6 +86,11 @@ export interface Workspace {
86
86
  removedAt?: string | null;
87
87
  }
88
88
  export type WorkspaceWorktreeLifecycleStatus = "active" | "merged" | "abandoned" | "removing" | "removed";
89
+ export type ParallelSessionGroupSourceType = "fork" | "new";
90
+ export type ParallelSessionGroupStatus = "active" | "deleting" | "deleted";
91
+ export type ParallelSessionMemberRole = "anchor" | "member";
92
+ export type ParallelSessionWorkspaceIsolationMode = "none" | "temporary_worktree";
93
+ export type SessionIsolatedWorkspaceLifecycleStatus = "active" | "promoted" | "removing" | "removed";
89
94
  export interface WorkspaceWorktreeRecord {
90
95
  workspaceId: string;
91
96
  rootWorkspaceId: string;
@@ -104,6 +109,70 @@ export interface WorkspaceWorktreeRecord {
104
109
  createdAt: string;
105
110
  updatedAt: string;
106
111
  }
112
+ export interface ParallelSessionGroupRecord {
113
+ id: string;
114
+ workspaceId: string;
115
+ sourceType: ParallelSessionGroupSourceType;
116
+ sourceSessionId: string | null;
117
+ sourceMessageId: string | null;
118
+ sharedPrompt: string | null;
119
+ requestedCount: number;
120
+ anchorSessionId: string | null;
121
+ status: ParallelSessionGroupStatus;
122
+ createdByUserId: string;
123
+ createdAt: string;
124
+ updatedAt: string;
125
+ deletedAt: string | null;
126
+ }
127
+ export interface ParallelSessionMemberRecord {
128
+ groupId: string;
129
+ sessionId: string;
130
+ ordinal: number;
131
+ role: ParallelSessionMemberRole;
132
+ provider: ProviderId;
133
+ model: string | null;
134
+ memberPrompt: string | null;
135
+ workspaceIsolationMode: ParallelSessionWorkspaceIsolationMode;
136
+ temporaryWorkspaceId: string | null;
137
+ createdAt: string;
138
+ updatedAt: string;
139
+ deletedAt: string | null;
140
+ }
141
+ export interface SessionIsolatedWorkspaceRecord {
142
+ id: string;
143
+ groupId: string;
144
+ ownerSessionId: string;
145
+ workspaceId: string;
146
+ sourceWorkspaceId: string;
147
+ branchName: string;
148
+ baseRef: string;
149
+ baseCommit: string;
150
+ headCommit: string | null;
151
+ lifecycleStatus: SessionIsolatedWorkspaceLifecycleStatus;
152
+ promotedAt: string | null;
153
+ removedAt: string | null;
154
+ createdAt: string;
155
+ updatedAt: string;
156
+ }
157
+ export interface ParallelSessionGroupSummary {
158
+ groupId: string;
159
+ role: ParallelSessionMemberRole;
160
+ memberCount: number;
161
+ sourceType: ParallelSessionGroupSourceType;
162
+ sourceSessionId: string | null;
163
+ anchorSessionId: string | null;
164
+ colorToken: string;
165
+ }
166
+ export interface SessionIsolatedWorkspaceSummary {
167
+ id: string;
168
+ workspaceId: string;
169
+ sourceWorkspaceId: string;
170
+ branchName: string;
171
+ lifecycleStatus: SessionIsolatedWorkspaceLifecycleStatus;
172
+ promotedAt: string | null;
173
+ createdAt: string;
174
+ updatedAt: string;
175
+ }
107
176
  export interface WorkspaceNavigationStateRecord {
108
177
  workspaceId: string;
109
178
  userId: string;
@@ -264,6 +333,9 @@ export interface SessionListItem {
264
333
  lastSeenAt: string | null;
265
334
  watchdogTriggeredAt?: string | null;
266
335
  activityState: SessionActivityState;
336
+ parallelGroup?: ParallelSessionGroupSummary | null;
337
+ displayParentSessionId?: string | null;
338
+ sessionIsolatedWorkspace?: SessionIsolatedWorkspaceSummary | null;
267
339
  }
268
340
  export interface FileNode {
269
341
  path: string;
@@ -3,6 +3,7 @@ import type { AuthContext } from "../modules/auth/auth-service.js";
3
3
  import type { TerminalService } from "../modules/terminal/terminal-service.js";
4
4
  import type { WorkbenchService } from "../modules/workbench/workbench-service.js";
5
5
  import type { WorkspacePanelSnapshotService } from "../modules/workbench/workspace-panel-snapshot-service.js";
6
+ import type { CodexArchiveWatcher } from "../modules/workbench/codex-archive-watcher.js";
6
7
  import type { WorkspaceFileWatcher } from "../modules/workbench/workspace-file-watcher.js";
7
8
  export declare class WorkbenchWsHub {
8
9
  private readonly workbenchService;
@@ -14,7 +15,7 @@ export declare class WorkbenchWsHub {
14
15
  private readonly clientGitSubscriptions;
15
16
  private readonly clientTerminalManagerSubscriptions;
16
17
  private readonly clientWorkspaceManagementSubscriptions;
17
- constructor(workbenchService: WorkbenchService, workspacePanelSnapshotService: WorkspacePanelSnapshotService, fileWatcher: WorkspaceFileWatcher, terminalService?: Pick<TerminalService, "on">);
18
+ constructor(workbenchService: WorkbenchService, workspacePanelSnapshotService: WorkspacePanelSnapshotService, fileWatcher: WorkspaceFileWatcher, terminalService?: Pick<TerminalService, "on">, codexArchiveWatcher?: Pick<CodexArchiveWatcher, "setOnChange">);
18
19
  handleMessage(client: WebSocket, payload: unknown, authContext: AuthContext): boolean;
19
20
  cleanupClient(client: WebSocket): void;
20
21
  broadcastSnapshot(userId: string): Promise<void>;
@@ -22,6 +23,7 @@ export declare class WorkbenchWsHub {
22
23
  private flushRealtimeBroadcast;
23
24
  private attachClient;
24
25
  private handleWorkspaceWatcherChange;
26
+ private handleCodexArchiveChange;
25
27
  private handleTerminalManagerChange;
26
28
  private getOrCreateChannel;
27
29
  private sendWorkbenchSnapshotToClient;