@cerbur/clutch-dsh-worktree 0.1.21 → 0.1.23

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/README.md +49 -38
  2. package/README.zh.md +42 -28
  3. package/cordis.patch.yml +0 -8
  4. package/lib/client/WorktreeSurface.d.ts.map +1 -1
  5. package/lib/client/WorktreeSurface.js +5 -8
  6. package/lib/client/WorktreeSurface.js.map +1 -1
  7. package/lib/client/dashboard/dashboard-sessions.d.ts +1 -1
  8. package/lib/client/dashboard/dashboard-sessions.d.ts.map +1 -1
  9. package/lib/client/dashboard/dashboard-sessions.js +3 -2
  10. package/lib/client/dashboard/dashboard-sessions.js.map +1 -1
  11. package/lib/client/entry.d.ts.map +1 -1
  12. package/lib/client/entry.js +33 -40
  13. package/lib/client/entry.js.map +1 -1
  14. package/lib/client/index.d.ts +0 -3
  15. package/lib/client/index.d.ts.map +1 -1
  16. package/lib/client/index.js +0 -2
  17. package/lib/client/index.js.map +1 -1
  18. package/lib/client/locales.d.ts +2 -26
  19. package/lib/client/locales.d.ts.map +1 -1
  20. package/lib/client/locales.js +2 -26
  21. package/lib/client/locales.js.map +1 -1
  22. package/lib/client/restart-notice.d.ts +1 -4
  23. package/lib/client/restart-notice.d.ts.map +1 -1
  24. package/lib/client/restart-notice.js +0 -20
  25. package/lib/client/restart-notice.js.map +1 -1
  26. package/lib/client/session/local-session.d.ts +27 -0
  27. package/lib/client/session/local-session.d.ts.map +1 -0
  28. package/lib/client/session/local-session.js +61 -0
  29. package/lib/client/session/local-session.js.map +1 -0
  30. package/lib/client/session/session-rename.d.ts.map +1 -1
  31. package/lib/client/session/session-rename.js.map +1 -1
  32. package/lib/client/session/virtual-workspace-membership.d.ts +1 -0
  33. package/lib/client/session/virtual-workspace-membership.d.ts.map +1 -1
  34. package/lib/client/session/virtual-workspace-membership.js +4 -0
  35. package/lib/client/session/virtual-workspace-membership.js.map +1 -1
  36. package/lib/client/session/worktree-session.d.ts +15 -36
  37. package/lib/client/session/worktree-session.d.ts.map +1 -1
  38. package/lib/client/session/worktree-session.js +124 -152
  39. package/lib/client/session/worktree-session.js.map +1 -1
  40. package/lib/client/steer/steer-activity.d.ts.map +1 -1
  41. package/lib/client/steer/steer-activity.js +2 -1
  42. package/lib/client/steer/steer-activity.js.map +1 -1
  43. package/lib/client/surface/actions/lifecycle-commands.d.ts.map +1 -1
  44. package/lib/client/surface/actions/lifecycle-commands.js +1 -28
  45. package/lib/client/surface/actions/lifecycle-commands.js.map +1 -1
  46. package/lib/client/surface/actions/useDashboardBatchManage.d.ts.map +1 -1
  47. package/lib/client/surface/actions/useDashboardBatchManage.js +0 -13
  48. package/lib/client/surface/actions/useDashboardBatchManage.js.map +1 -1
  49. package/lib/client/surface/actions/useLifecycleActions.d.ts +4 -6
  50. package/lib/client/surface/actions/useLifecycleActions.d.ts.map +1 -1
  51. package/lib/client/surface/actions/useLifecycleActions.js +4 -47
  52. package/lib/client/surface/actions/useLifecycleActions.js.map +1 -1
  53. package/lib/client/surface/actions/useSessionActions.d.ts +1 -1
  54. package/lib/client/surface/actions/useSessionActions.d.ts.map +1 -1
  55. package/lib/client/surface/actions/useSessionActions.js +11 -20
  56. package/lib/client/surface/actions/useSessionActions.js.map +1 -1
  57. package/lib/client/surface/actions/useWorktreeRegistration.d.ts.map +1 -1
  58. package/lib/client/surface/actions/useWorktreeRegistration.js +7 -14
  59. package/lib/client/surface/actions/useWorktreeRegistration.js.map +1 -1
  60. package/lib/client/surface/actions/worktree-cleanup-flow.d.ts +1 -2
  61. package/lib/client/surface/actions/worktree-cleanup-flow.d.ts.map +1 -1
  62. package/lib/client/surface/actions/worktree-cleanup-flow.js +1 -1
  63. package/lib/client/surface/actions/worktree-cleanup-flow.js.map +1 -1
  64. package/lib/client/surface/components/LifecycleDialogs.d.ts +1 -1
  65. package/lib/client/surface/components/LifecycleDialogs.d.ts.map +1 -1
  66. package/lib/client/surface/components/RestartToast.d.ts.map +1 -1
  67. package/lib/client/surface/components/RestartToast.js +1 -2
  68. package/lib/client/surface/components/RestartToast.js.map +1 -1
  69. package/lib/client/surface/components/SurfaceContent.d.ts +2 -2
  70. package/lib/client/surface/components/SurfaceContent.d.ts.map +1 -1
  71. package/lib/client/surface/components/SurfaceContent.js +15 -28
  72. package/lib/client/surface/components/SurfaceContent.js.map +1 -1
  73. package/lib/client/surface/components/WorkspaceTree.d.ts +1 -1
  74. package/lib/client/surface/components/WorkspaceTree.d.ts.map +1 -1
  75. package/lib/client/surface/components/WorkspaceTree.js +3 -2
  76. package/lib/client/surface/components/WorkspaceTree.js.map +1 -1
  77. package/lib/client/surface/selectors.d.ts +3 -1
  78. package/lib/client/surface/selectors.d.ts.map +1 -1
  79. package/lib/client/surface/selectors.js +15 -0
  80. package/lib/client/surface/selectors.js.map +1 -1
  81. package/lib/client/surface/shared.d.ts +1 -7
  82. package/lib/client/surface/shared.d.ts.map +1 -1
  83. package/lib/client/surface/shared.js +0 -5
  84. package/lib/client/surface/shared.js.map +1 -1
  85. package/lib/client/surface/state/useLifecycleState.d.ts +0 -1
  86. package/lib/client/surface/state/useLifecycleState.d.ts.map +1 -1
  87. package/lib/client/surface/state/useLifecycleState.js +0 -3
  88. package/lib/client/surface/state/useLifecycleState.js.map +1 -1
  89. package/lib/client/surface/state/useSessionOrdering.d.ts.map +1 -1
  90. package/lib/client/surface/state/useSessionOrdering.js +1 -1
  91. package/lib/client/surface/state/useSessionOrdering.js.map +1 -1
  92. package/lib/client/surface/state/useSurfaceRefresh.d.ts +4 -3
  93. package/lib/client/surface/state/useSurfaceRefresh.d.ts.map +1 -1
  94. package/lib/client/surface/state/useSurfaceRefresh.js +178 -98
  95. package/lib/client/surface/state/useSurfaceRefresh.js.map +1 -1
  96. package/lib/client/surface/state/useSurfaceSources.d.ts +1 -6
  97. package/lib/client/surface/state/useSurfaceSources.d.ts.map +1 -1
  98. package/lib/client/surface/state/useSurfaceSources.js +11 -23
  99. package/lib/client/surface/state/useSurfaceSources.js.map +1 -1
  100. package/lib/client/surface/types.d.ts +15 -36
  101. package/lib/client/surface/types.d.ts.map +1 -1
  102. package/lib/client/view/worktree-error-copy.d.ts +0 -2
  103. package/lib/client/view/worktree-error-copy.d.ts.map +1 -1
  104. package/lib/client/view/worktree-error-copy.js +0 -17
  105. package/lib/client/view/worktree-error-copy.js.map +1 -1
  106. package/lib/client/view/worktree-view-errors.d.ts +0 -10
  107. package/lib/client/view/worktree-view-errors.d.ts.map +1 -1
  108. package/lib/client/view/worktree-view-errors.js +1 -22
  109. package/lib/client/view/worktree-view-errors.js.map +1 -1
  110. package/lib/client/view/worktree-view-read.d.ts +12 -3
  111. package/lib/client/view/worktree-view-read.d.ts.map +1 -1
  112. package/lib/client/view/worktree-view-read.js +137 -6
  113. package/lib/client/view/worktree-view-read.js.map +1 -1
  114. package/lib/client/worktree-connection.d.ts +6 -4
  115. package/lib/client/worktree-connection.d.ts.map +1 -1
  116. package/lib/client/worktree-connection.js +24 -4
  117. package/lib/client/worktree-connection.js.map +1 -1
  118. package/lib/client.js +3752 -3822
  119. package/lib/client.js.map +1 -1
  120. package/lib/contract/index.contract.js +4 -2
  121. package/lib/contract/index.contract.js.map +1 -1
  122. package/lib/contract/index.d.ts +27 -6
  123. package/lib/contract/index.d.ts.map +1 -1
  124. package/lib/contract/index.js +5 -4
  125. package/lib/contract/index.js.map +1 -1
  126. package/lib/contract/session-flow.d.ts +29 -0
  127. package/lib/contract/session-flow.d.ts.map +1 -0
  128. package/lib/contract/session-flow.js +2 -0
  129. package/lib/contract/session-flow.js.map +1 -0
  130. package/lib/host/dsh-read-adapter.d.ts +14 -0
  131. package/lib/host/dsh-read-adapter.d.ts.map +1 -1
  132. package/lib/host/dsh-read-adapter.js +30 -3
  133. package/lib/host/dsh-read-adapter.js.map +1 -1
  134. package/lib/host/index.d.ts +0 -4
  135. package/lib/host/index.d.ts.map +1 -1
  136. package/lib/host/index.js +0 -2
  137. package/lib/host/index.js.map +1 -1
  138. package/lib/host/remote.d.ts +2 -2
  139. package/lib/host/remote.d.ts.map +1 -1
  140. package/lib/host/remote.js +11 -7
  141. package/lib/host/remote.js.map +1 -1
  142. package/lib/host/service.d.ts +15 -3
  143. package/lib/host/service.d.ts.map +1 -1
  144. package/lib/host/service.js +69 -37
  145. package/lib/host/service.js.map +1 -1
  146. package/lib/host/session-creation.d.ts +12 -0
  147. package/lib/host/session-creation.d.ts.map +1 -0
  148. package/lib/host/session-creation.js +56 -0
  149. package/lib/host/session-creation.js.map +1 -0
  150. package/lib/index.d.ts +4 -4
  151. package/lib/index.d.ts.map +1 -1
  152. package/lib/index.js +2 -2
  153. package/lib/index.js.map +1 -1
  154. package/lib/manage/manager-navigation.d.ts +11 -0
  155. package/lib/manage/manager-navigation.d.ts.map +1 -0
  156. package/lib/manage/manager-navigation.js +88 -0
  157. package/lib/manage/manager-navigation.js.map +1 -0
  158. package/lib/manage/manager-sessions.d.ts +2 -2
  159. package/lib/manage/manager-sessions.d.ts.map +1 -1
  160. package/lib/manage/manager-sessions.js +30 -16
  161. package/lib/manage/manager-sessions.js.map +1 -1
  162. package/lib/manage/manager-support.d.ts +2 -1
  163. package/lib/manage/manager-support.d.ts.map +1 -1
  164. package/lib/manage/manager-support.js +21 -37
  165. package/lib/manage/manager-support.js.map +1 -1
  166. package/lib/manage/manager-worktrees.d.ts +3 -1
  167. package/lib/manage/manager-worktrees.d.ts.map +1 -1
  168. package/lib/manage/manager-worktrees.js +41 -19
  169. package/lib/manage/manager-worktrees.js.map +1 -1
  170. package/lib/manage/manager.d.ts +8 -1
  171. package/lib/manage/manager.d.ts.map +1 -1
  172. package/lib/manage/manager.js +35 -37
  173. package/lib/manage/manager.js.map +1 -1
  174. package/lib/provider/generated-path.d.ts +7 -0
  175. package/lib/provider/generated-path.d.ts.map +1 -0
  176. package/lib/provider/generated-path.js +57 -0
  177. package/lib/provider/generated-path.js.map +1 -0
  178. package/lib/provider/sidecar/sidecar-schema.d.ts.map +1 -1
  179. package/lib/provider/sidecar/sidecar-schema.js +7 -1
  180. package/lib/provider/sidecar/sidecar-schema.js.map +1 -1
  181. package/lib/provider/transaction/operations/create.d.ts.map +1 -1
  182. package/lib/provider/transaction/operations/create.js +2 -0
  183. package/lib/provider/transaction/operations/create.js.map +1 -1
  184. package/lib/provider/transaction/support/path-safety.d.ts.map +1 -1
  185. package/lib/provider/transaction/support/path-safety.js +5 -43
  186. package/lib/provider/transaction/support/path-safety.js.map +1 -1
  187. package/lib/provider/types.d.ts +2 -0
  188. package/lib/provider/types.d.ts.map +1 -1
  189. package/lib/provider/types.js.map +1 -1
  190. package/lib/tool/create-session.d.ts +11 -0
  191. package/lib/tool/create-session.d.ts.map +1 -0
  192. package/lib/tool/create-session.js +19 -0
  193. package/lib/tool/create-session.js.map +1 -0
  194. package/lib/tool/dispatch-session.d.ts.map +1 -1
  195. package/lib/tool/dispatch-session.js +9 -5
  196. package/lib/tool/dispatch-session.js.map +1 -1
  197. package/lib/tool/native-session.d.ts +9 -0
  198. package/lib/tool/native-session.d.ts.map +1 -1
  199. package/lib/tool/native-session.js +47 -1
  200. package/lib/tool/native-session.js.map +1 -1
  201. package/lib/typert.host.js +338 -120
  202. package/lib/typert.remote-client.d.ts +9 -5
  203. package/lib/typert.remote-client.d.ts.map +1 -1
  204. package/lib/typert.remote-client.js +338 -120
  205. package/package.json +1 -5
  206. package/lib/client/permission/worktree-permission-icon.d.ts +0 -7
  207. package/lib/client/permission/worktree-permission-icon.d.ts.map +0 -1
  208. package/lib/client/permission/worktree-permission-icon.js +0 -119
  209. package/lib/client/permission/worktree-permission-icon.js.map +0 -1
  210. package/lib/client/permission/worktree-permission.d.ts +0 -21
  211. package/lib/client/permission/worktree-permission.d.ts.map +0 -1
  212. package/lib/client/permission/worktree-permission.js +0 -78
  213. package/lib/client/permission/worktree-permission.js.map +0 -1
  214. package/lib/client/surface/components/AccessConfirmation.d.ts +0 -9
  215. package/lib/client/surface/components/AccessConfirmation.d.ts.map +0 -1
  216. package/lib/client/surface/components/AccessConfirmation.js +0 -18
  217. package/lib/client/surface/components/AccessConfirmation.js.map +0 -1
  218. package/lib/contract/worktree-permission.d.ts +0 -75
  219. package/lib/contract/worktree-permission.d.ts.map +0 -1
  220. package/lib/contract/worktree-permission.js +0 -32
  221. package/lib/contract/worktree-permission.js.map +0 -1
  222. package/lib/host/permission-preset-append.d.ts +0 -15
  223. package/lib/host/permission-preset-append.d.ts.map +0 -1
  224. package/lib/host/permission-preset-append.js +0 -63
  225. package/lib/host/permission-preset-append.js.map +0 -1
  226. package/lib/host/worktree-permission-manager.d.ts +0 -14
  227. package/lib/host/worktree-permission-manager.d.ts.map +0 -1
  228. package/lib/host/worktree-permission-manager.js +0 -115
  229. package/lib/host/worktree-permission-manager.js.map +0 -1
  230. package/lib/host/worktree-permission.d.ts +0 -51
  231. package/lib/host/worktree-permission.d.ts.map +0 -1
  232. package/lib/host/worktree-permission.js +0 -251
  233. package/lib/host/worktree-permission.js.map +0 -1
  234. package/lib/manage/worktree-permission.d.ts +0 -3
  235. package/lib/manage/worktree-permission.d.ts.map +0 -1
  236. package/lib/manage/worktree-permission.js +0 -3
  237. package/lib/manage/worktree-permission.js.map +0 -1
@@ -1,16 +1,32 @@
1
1
  import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
2
+ import { flushSync } from 'react-dom';
3
+ import { WorktreeSessionActionError } from '../../session/worktree-session.js';
2
4
  import { createWorktreeRefreshGuard, mergeWorktreeView, mergeWorktreeViews, toWorktreeViewError, } from '../../view/worktree-view.js';
3
- import { worktreeActivityRefreshWorkspaceIds } from '../selectors.js';
5
+ import { worktreeActivityRefreshWorkspaceIds, isCompleteWorktreeWorkspaceSnapshot, isPendingListPhase } from '../selectors.js';
4
6
  import { EMPTY_READ_STATE } from '../shared.js';
5
7
  export function useSurfaceRefresh({ source, props, registrationState }) {
6
- const { forkRecoverySnapshot, workspaceIdsRef, mode, workspaceIds, sessionPresentations } = source;
8
+ const { forkRecoverySnapshot, mode, workspaceIds, sessionPresentations } = source;
9
+ const workspaceIdsRef = useRef(workspaceIds);
10
+ workspaceIdsRef.current = isPendingListPhase(source.workspaces.phase)
11
+ ? [...new Set([...workspaceIdsRef.current, ...workspaceIds])] : workspaceIds;
12
+ const workspacesRef = useRef(source.workspaces);
13
+ workspacesRef.current = source.workspaces;
7
14
  const { manager, viewReader, invalidateWorktreeContext, syncSessionWorkspaces } = props;
15
+ const syncedMembershipViews = useRef(new Map());
8
16
  const { modalReadViewRef, setModalReadError, setModalReadLoading, modalReadLoader, setWorktreeModalWorkspaceId, } = registrationState;
9
17
  const [readState, setReadState] = useState(EMPTY_READ_STATE);
10
18
  const readStateRef = useRef(readState);
11
19
  readStateRef.current = readState;
20
+ const priorityIdsRef = useRef(workspaceIds);
21
+ const currentWorkspaceId = source.workspaces.items.find((workspace) => workspace.sessionIds.includes(source.currentSessionId ?? ''))?.workspaceId;
22
+ priorityIdsRef.current = [...workspaceIds].sort((a, b) => {
23
+ const priority = (id) => id === currentWorkspaceId ? 0
24
+ : source.expandSnapshot.collapsedWorkspaceIds[id] ? 2 : 1;
25
+ return priority(a) - priority(b);
26
+ });
12
27
  const refreshGuard = useRef(createWorktreeRefreshGuard());
13
28
  const targetRefreshGuards = useRef(new Map());
29
+ const targetReads = useRef(new Map());
14
30
  const forkRecoveryRevisionRef = useRef(forkRecoverySnapshot.revision);
15
31
  const guardFor = (workspaceId) => {
16
32
  const current = targetRefreshGuards.current.get(workspaceId);
@@ -22,121 +38,129 @@ export function useSurfaceRefresh({ source, props, registrationState }) {
22
38
  };
23
39
  const refresh = useCallback(async (options = {}) => {
24
40
  if (manager === undefined) {
41
+ if (options.openingSession)
42
+ throw new WorktreeSessionActionError('WORKTREE_SESSION_REPAIR_REQUIRED', 'manager unavailable', true);
25
43
  refreshGuard.current.invalidate();
26
44
  for (const guard of targetRefreshGuards.current.values())
27
45
  guard.invalidate();
46
+ targetReads.current.clear();
28
47
  setReadState(EMPTY_READ_STATE);
29
48
  return;
30
49
  }
31
50
  const scope = options.scope ?? { kind: 'global' };
32
- const preserveCurrent = options.preserveCurrent === true;
33
51
  const currentWorkspaceIds = workspaceIdsRef.current;
34
- if (scope.kind === 'global') {
35
- if (!preserveCurrent) {
36
- setReadState({ status: 'loading', views: [] });
37
- }
38
- const selectedWorkspaceIds = [...currentWorkspaceIds];
39
- for (const workspaceId of selectedWorkspaceIds) {
40
- viewReader.invalidate(workspaceId);
41
- }
42
- const contextRefresh = options.invalidateContext === false ? undefined
43
- : invalidateWorktreeContext?.(undefined, { alreadyInvalidated: true });
44
- await refreshGuard.current.run(async () => {
45
- const [views] = await Promise.all([
46
- viewReader.readMany(selectedWorkspaceIds),
47
- contextRefresh ?? Promise.resolve(),
48
- ]);
49
- return views;
50
- }, (views) => {
51
- setReadState((current) => {
52
- const merged = mergeWorktreeViews(current.views, workspaceIdsRef.current, views);
53
- return {
54
- status: 'ready',
55
- views: modalReadViewRef.current === undefined
56
- ? merged
57
- : mergeWorktreeView(merged, modalReadViewRef.current),
58
- };
59
- });
60
- }, (error) => {
61
- if (preserveCurrent)
62
- throw error;
63
- setReadState({
64
- status: 'error',
65
- views: modalReadViewRef.current === undefined ? [] : [modalReadViewRef.current],
66
- error: toWorktreeViewError(error),
67
- });
68
- });
69
- return;
70
- }
71
- const requestedWorkspaceIds = scope.kind === 'workspace' ? [scope.workspaceId] : scope.workspaceIds;
52
+ // Publish each completed Workspace; the shared reader bounds RPC fan-out.
53
+ if (scope.kind === 'global')
54
+ setReadState((current) => ({ ...current, status: 'ready' }));
55
+ const requestedWorkspaceIds = scope.kind === 'global' ? priorityIdsRef.current
56
+ : scope.kind === 'workspace' ? [scope.workspaceId] : scope.workspaceIds;
72
57
  const selectedWorkspaceIds = [...new Set(requestedWorkspaceIds)].filter((workspaceId) => currentWorkspaceIds.includes(workspaceId));
73
- if (selectedWorkspaceIds.length === 0)
58
+ if (selectedWorkspaceIds.length === 0) {
59
+ if (options.openingSession)
60
+ throw new WorktreeSessionActionError('WORKTREE_SESSION_REPAIR_REQUIRED', 'workspace projection unavailable', true);
74
61
  return;
75
- await Promise.allSettled(selectedWorkspaceIds.map(async (workspaceId) => {
62
+ }
63
+ const results = await Promise.allSettled(selectedWorkspaceIds.map(async (workspaceId) => {
76
64
  const guard = guardFor(workspaceId);
77
- if (!options.alreadyInvalidated) {
65
+ if (!options.alreadyInvalidated && !options.ensureLoaded) {
78
66
  viewReader.invalidate(workspaceId, {
79
67
  reuseInFlight: options.reuseInFlight, changeId: options.changeId,
80
68
  });
81
69
  }
82
70
  const contextRefresh = options.invalidateContext === false
83
71
  ? undefined
84
- : invalidateWorktreeContext?.(workspaceId, { alreadyInvalidated: true });
85
- const generation = guard.begin();
72
+ : invalidateWorktreeContext?.(workspaceId, { alreadyInvalidated: true })
73
+ ?.catch(() => undefined);
74
+ let request = { generation: guard.begin(), promise: viewReader.read(workspaceId, { current: true }),
75
+ pending: true,
76
+ sessionIds: workspacesRef.current.items.find((item) => item.workspaceId === workspaceId)?.sessionIds ?? [] };
77
+ targetReads.current.set(workspaceId, request);
86
78
  try {
87
- const view = await viewReader.read(workspaceId);
88
- if (!guard.isCurrent(generation))
79
+ let view;
80
+ const opening = options.openingSession;
81
+ for (;;) {
82
+ try {
83
+ view = await request.promise;
84
+ }
85
+ catch (error) {
86
+ if (!opening || guard.isCurrent(request.generation))
87
+ throw error;
88
+ }
89
+ if (!opening || guard.isCurrent(request.generation))
90
+ break;
91
+ // Creation completion and the Host notification can overlap. Follow
92
+ // the newer authoritative read instead of reporting a broken binding.
93
+ const latest = targetReads.current.get(workspaceId);
94
+ if (!latest || latest === request) {
95
+ throw new WorktreeSessionActionError('WORKTREE_VIEW_FAILED', 'opening refresh cancelled', true);
96
+ }
97
+ request = latest;
98
+ }
99
+ if (!view)
100
+ throw new WorktreeSessionActionError('WORKTREE_VIEW_FAILED', 'workspace projection unavailable', true);
101
+ view = view.knownSessionIds === undefined ? { ...view, knownSessionIds: request.sessionIds } : view;
102
+ if (opening && (!workspaceIdsRef.current.includes(workspaceId) ||
103
+ !view.worktrees.some((record) => record.worktreeId === opening.worktreeId) ||
104
+ !view.bindings.some((binding) => binding.sessionId === opening.sessionId &&
105
+ binding.worktreeId === opening.worktreeId && binding.status === 'active'))) {
106
+ throw new WorktreeSessionActionError('WORKTREE_SESSION_REPAIR_REQUIRED', 'binding projection not ready', true);
107
+ }
108
+ if (!guard.isCurrent(request.generation))
109
+ return;
110
+ if (targetRefreshGuards.current.get(workspaceId) !== guard)
89
111
  return;
90
112
  if (!workspaceIdsRef.current.includes(workspaceId))
91
113
  return;
92
- setReadState((current) => {
93
- const remainingTargetError = current.targetError?.workspaceIds.filter((candidate) => candidate !== workspaceId) ?? [];
94
- const next = {
95
- ...current,
96
- status: 'ready',
114
+ // flushSync may run membership effects before this request's finally.
115
+ // The authoritative result is settled before publishing its ready view.
116
+ request.pending = false;
117
+ const publish = () => setReadState((current) => {
118
+ const targetErrors = { ...current.targetErrors };
119
+ delete targetErrors[workspaceId];
120
+ return { ...current, status: 'ready',
97
121
  views: mergeWorktreeViews(current.views, workspaceIdsRef.current, [view]),
98
- error: undefined,
99
- };
100
- if (remainingTargetError.length === 0) {
101
- const withoutTargetError = { ...next };
102
- delete withoutTargetError.targetError;
103
- return withoutTargetError;
104
- }
105
- return {
106
- ...next,
107
- targetError: {
108
- workspaceIds: remainingTargetError,
109
- error: current.targetError.error,
110
- },
111
- };
122
+ error: undefined, targetErrors };
112
123
  });
124
+ // Native navigation updates an external store synchronously. Commit its
125
+ // destination first so that the newly current blank row cannot enter Local.
126
+ if (options.openingSession)
127
+ flushSync(publish);
128
+ else
129
+ publish();
113
130
  }
114
131
  catch (error) {
115
- if (!guard.isCurrent(generation))
132
+ if (options.openingSession)
133
+ throw error;
134
+ if (!guard.isCurrent(request.generation))
135
+ return;
136
+ if (targetRefreshGuards.current.get(workspaceId) !== guard)
116
137
  return;
117
138
  if (!workspaceIdsRef.current.includes(workspaceId))
118
139
  return;
119
140
  setReadState((current) => {
120
- const previousIds = current.targetError?.workspaceIds ?? [];
121
141
  return {
122
142
  ...current,
123
143
  status: 'ready',
124
144
  views: mergeWorktreeViews(current.views, workspaceIdsRef.current, []),
125
145
  error: undefined,
126
- targetError: {
127
- workspaceIds: [...new Set([...previousIds, workspaceId])],
128
- error: {
129
- ...toWorktreeViewError(error),
130
- retryable: true,
131
- },
146
+ targetErrors: { ...current.targetErrors,
147
+ [workspaceId]: { ...toWorktreeViewError(error), retryable: true },
132
148
  },
133
149
  };
134
150
  });
135
151
  }
136
152
  finally {
137
- await contextRefresh?.catch(() => undefined);
153
+ request.pending = false;
154
+ // Context follows its own identity and generation. Never hold a ready
155
+ // Workspace behind the current Session's independent projection.
156
+ void contextRefresh;
138
157
  }
139
158
  }));
159
+ if (options.openingSession) {
160
+ const failed = results.find((result) => result.status === 'rejected');
161
+ if (failed?.status === 'rejected')
162
+ throw failed.reason;
163
+ }
140
164
  }, [invalidateWorktreeContext, manager, viewReader]);
141
165
  useEffect(() => props.subscribeToolChanges?.(({ workspaceId }) => {
142
166
  if (mode !== 'worktree')
@@ -160,7 +184,9 @@ export function useSurfaceRefresh({ source, props, registrationState }) {
160
184
  });
161
185
  return;
162
186
  }
163
- void modalReadLoader.current.load(workspaceId, (view) => {
187
+ const sessionIds = workspacesRef.current.items.find((item) => item.workspaceId === workspaceId)?.sessionIds ?? [];
188
+ void modalReadLoader.current.load(workspaceId, (data) => {
189
+ const view = data.knownSessionIds === undefined ? { ...data, knownSessionIds: sessionIds } : data;
164
190
  modalReadViewRef.current = view;
165
191
  setModalReadLoading(false);
166
192
  setReadState((current) => ({
@@ -172,59 +198,98 @@ export function useSurfaceRefresh({ source, props, registrationState }) {
172
198
  setModalReadError(toWorktreeViewError(error));
173
199
  });
174
200
  }, [manager, viewReader]);
201
+ const previousNativeSessions = useRef(new Map(source.workspaces.items.map((item) => [item.workspaceId, item.sessionIds])));
202
+ useEffect(() => {
203
+ if (isPendingListPhase(source.workspaces.phase))
204
+ return;
205
+ const previous = previousNativeSessions.current;
206
+ previousNativeSessions.current = new Map(source.workspaces.items.map((item) => [item.workspaceId, item.sessionIds]));
207
+ for (const workspace of source.workspaces.items) {
208
+ const ids = previous.get(workspace.workspaceId);
209
+ if (!ids)
210
+ continue; // Workspace entry/addition owns its initial read.
211
+ const view = readStateRef.current.views.find((item) => item.workspaceId === workspace.workspaceId);
212
+ if (!workspace.sessionIds.some((id) => !ids.includes(id) &&
213
+ !view?.bindings.some((binding) => binding.sessionId === id)))
214
+ continue;
215
+ // A new native member is not evidence of an absent binding. Retire reads
216
+ // that started before its arrival, even while native mode is active.
217
+ viewReader.invalidate(workspace.workspaceId);
218
+ guardFor(workspace.workspaceId).invalidate();
219
+ if (mode === 'worktree')
220
+ void refresh({
221
+ scope: { kind: 'workspace', workspaceId: workspace.workspaceId }, alreadyInvalidated: true,
222
+ });
223
+ }
224
+ }, [source.workspaces.items, source.workspaces.phase, mode, refresh, viewReader]);
225
+ useEffect(() => {
226
+ if (mode !== 'worktree' || isPendingListPhase(source.workspaces.phase))
227
+ return;
228
+ for (const view of readState.views) {
229
+ if (view.knownSessionIds === undefined || readState.targetErrors?.[view.workspaceId])
230
+ continue;
231
+ const ids = source.workspaces.items.find((item) => item.workspaceId === view.workspaceId)?.sessionIds ?? [];
232
+ const unknown = ids.filter((id) => !view.knownSessionIds.includes(id) &&
233
+ !view.bindings.some((binding) => binding.sessionId === id));
234
+ const pending = targetReads.current.get(view.workspaceId);
235
+ if (!unknown.length || (pending?.pending && unknown.every((id) => pending.sessionIds.includes(id))))
236
+ continue;
237
+ // A shared Context read may predate the Surface's first native snapshot.
238
+ // Keep unknown members hidden and validate them with a new generation.
239
+ void refresh({ scope: { kind: 'workspace', workspaceId: view.workspaceId } });
240
+ }
241
+ }, [readState.views, readState.targetErrors, source.workspaces.items, source.workspaces.phase, mode, refresh]);
175
242
  useEffect(() => {
176
243
  if (mode === 'worktree') {
177
- void refresh({ preserveCurrent: readStateRef.current.status === 'ready' });
244
+ void refresh({ preserveCurrent: true, reuseInFlight: true });
178
245
  }
179
246
  else {
180
247
  refreshGuard.current.invalidate();
181
248
  for (const guard of targetRefreshGuards.current.values())
182
249
  guard.invalidate();
250
+ targetReads.current.clear();
183
251
  modalReadLoader.current.invalidate();
184
252
  modalReadViewRef.current = undefined;
185
253
  setWorktreeModalWorkspaceId(undefined);
186
254
  setModalReadError(undefined);
187
255
  setModalReadLoading(false);
188
- setReadState(EMPTY_READ_STATE);
256
+ // Keep ready content for immediate reuse on re-entry.
189
257
  }
190
258
  }, [mode, refresh]);
191
259
  const previousWorkspaceIdsRef = useRef(workspaceIds);
192
260
  useEffect(() => {
261
+ if (isPendingListPhase(source.workspaces.phase))
262
+ return;
193
263
  const previousWorkspaceIds = previousWorkspaceIdsRef.current;
194
264
  previousWorkspaceIdsRef.current = workspaceIds;
195
- if (mode !== 'worktree')
196
- return;
197
265
  const addedWorkspaceIds = workspaceIds.filter((workspaceId) => !previousWorkspaceIds.includes(workspaceId));
198
266
  const removedWorkspaceIds = previousWorkspaceIds.filter((workspaceId) => !workspaceIds.includes(workspaceId));
199
267
  for (const workspaceId of removedWorkspaceIds) {
268
+ targetRefreshGuards.current.get(workspaceId)?.invalidate();
200
269
  targetRefreshGuards.current.delete(workspaceId);
270
+ targetReads.current.delete(workspaceId);
271
+ viewReader.invalidate(workspaceId);
272
+ syncedMembershipViews.current.delete(workspaceId);
273
+ props.syncWorkspaceSessions?.(workspaceId, []);
201
274
  }
202
275
  setReadState((current) => {
203
276
  const views = mergeWorktreeViews(current.views, workspaceIds, []);
204
- const remainingTargetError = current.targetError?.workspaceIds.filter((workspaceId) => workspaceIds.includes(workspaceId)) ?? [];
205
- const next = { ...current, views };
206
- if (remainingTargetError.length === 0) {
207
- const withoutTargetError = { ...next };
208
- delete withoutTargetError.targetError;
209
- return withoutTargetError;
210
- }
211
- return {
212
- ...next,
213
- targetError: {
214
- workspaceIds: remainingTargetError,
215
- error: current.targetError.error,
216
- },
217
- };
277
+ const targetErrors = Object.fromEntries(Object.entries(current.targetErrors ?? {})
278
+ .filter(([workspaceId]) => workspaceIds.includes(workspaceId)));
279
+ return { ...current, views, targetErrors };
218
280
  });
281
+ if (mode !== 'worktree')
282
+ return;
219
283
  for (const workspaceId of addedWorkspaceIds) {
220
284
  void refresh({
221
285
  scope: { kind: 'workspace', workspaceId },
222
286
  preserveCurrent: true,
287
+ ensureLoaded: true,
223
288
  }).catch(() => {
224
289
  // The target error remains visible and can be retried explicitly.
225
290
  });
226
291
  }
227
- }, [mode, refresh, workspaceIds]);
292
+ }, [mode, refresh, workspaceIds, source.workspaces.phase, viewReader]);
228
293
  useEffect(() => {
229
294
  if (forkRecoveryRevisionRef.current === forkRecoverySnapshot.revision)
230
295
  return;
@@ -250,13 +315,28 @@ export function useSurfaceRefresh({ source, props, registrationState }) {
250
315
  refresh,
251
316
  ]);
252
317
  useEffect(() => {
253
- if (readState.status !== 'ready' || syncSessionWorkspaces === undefined)
318
+ if (readState.status !== 'ready' || isPendingListPhase(source.workspaces.phase))
319
+ return;
320
+ if (props.syncWorkspaceSessions) {
321
+ for (const view of readState.views) {
322
+ if (syncedMembershipViews.current.get(view.workspaceId) === view ||
323
+ targetReads.current.get(view.workspaceId)?.pending)
324
+ continue;
325
+ syncedMembershipViews.current.set(view.workspaceId, view);
326
+ props.syncWorkspaceSessions(view.workspaceId, view.bindings);
327
+ }
328
+ return;
329
+ }
330
+ // Legacy injected surfaces have only a full-snapshot synchronization port.
331
+ if (syncSessionWorkspaces === undefined ||
332
+ [...targetReads.current.values()].some((request) => request.pending) ||
333
+ !isCompleteWorktreeWorkspaceSnapshot(workspaceIds, readState.views))
254
334
  return;
255
335
  syncSessionWorkspaces(readState.views.flatMap((view) => view.bindings.map((binding) => ({
256
336
  workspaceId: binding.workspaceId,
257
337
  sessionId: binding.sessionId,
258
338
  }))));
259
- }, [readState.status, readState.views, syncSessionWorkspaces]);
339
+ }, [readState.status, readState.views, syncSessionWorkspaces, props.syncWorkspaceSessions, workspaceIds, source.workspaces.phase]);
260
340
  const viewByWorkspace = useMemo(() => new Map(readState.views.map((view) => [view.workspaceId, view])), [readState.views]);
261
341
  const previousActivityRef = useRef(sessionPresentations);
262
342
  useEffect(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"useSurfaceRefresh.js","sourceRoot":"","sources":["../../../../src/client/surface/state/useSurfaceRefresh.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC1E,OAAO,EACL,0BAA0B,EAC1B,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,mCAAmC,EAAE,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAwBhD,MAAM,UAAU,iBAAiB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,EAAS;IAC3E,MAAM,EAAE,oBAAoB,EAAE,eAAe,EAAE,IAAI,EAAE,YAAY,EAAE,oBAAoB,EAAE,GACvF,MAAM,CAAC;IACT,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,yBAAyB,EAAE,qBAAqB,EAAE,GAAG,KAAK,CAAC;IACxF,MAAM,EACJ,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,2BAA2B,GAC5B,GAAG,iBAAiB,CAAC;IACtB,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAY,gBAAgB,CAAC,CAAC;IACxE,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;IACvC,YAAY,CAAC,OAAO,GAAG,SAAS,CAAC;IACjC,MAAM,YAAY,GAAG,MAAM,CAAC,0BAA0B,EAAE,CAAC,CAAC;IAC1D,MAAM,mBAAmB,GAAG,MAAM,CAChC,IAAI,GAAG,EAAyD,CACjE,CAAC;IACF,MAAM,uBAAuB,GAAG,MAAM,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IACtE,MAAM,QAAQ,GAAG,CAAC,WAAmB,EAAE,EAAE;QACvC,MAAM,OAAO,GAAG,mBAAmB,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC7D,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO,OAAO,CAAC;QAC1C,MAAM,OAAO,GAAG,0BAA0B,EAAE,CAAC;QAC7C,mBAAmB,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACtD,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC;IACF,MAAM,OAAO,GAAG,WAAW,CACzB,KAAK,EAAE,UAA0B,EAAE,EAAiB,EAAE;QACpD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YAClC,KAAK,MAAM,KAAK,IAAI,mBAAmB,CAAC,OAAO,CAAC,MAAM,EAAE;gBAAE,KAAK,CAAC,UAAU,EAAE,CAAC;YAC7E,YAAY,CAAC,gBAAgB,CAAC,CAAC;YAC/B,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,IAAI,EAAE,QAAiB,EAAE,CAAC;QAC3D,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,KAAK,IAAI,CAAC;QACzD,MAAM,mBAAmB,GAAG,eAAe,CAAC,OAAO,CAAC;QAEpD,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC5B,IAAI,CAAC,eAAe,EAAE,CAAC;gBACrB,YAAY,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;YACjD,CAAC;YACD,MAAM,oBAAoB,GAAG,CAAC,GAAG,mBAAmB,CAAC,CAAC;YACtD,KAAK,MAAM,WAAW,IAAI,oBAAoB,EAAE,CAAC;gBAC/C,UAAU,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YACrC,CAAC;YACD,MAAM,cAAc,GAClB,OAAO,CAAC,iBAAiB,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS;gBAC7C,CAAC,CAAC,yBAAyB,EAAE,CAAC,SAAS,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3E,MAAM,YAAY,CAAC,OAAO,CAAC,GAAG,CAC5B,KAAK,IAAI,EAAE;gBACT,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;oBAChC,UAAU,CAAC,QAAQ,CAAC,oBAAoB,CAAC;oBACzC,cAAc,IAAI,OAAO,CAAC,OAAO,EAAE;iBACpC,CAAC,CAAC;gBACH,OAAO,KAAK,CAAC;YACf,CAAC,EACD,CAAC,KAAK,EAAE,EAAE;gBACR,YAAY,CAAC,CAAC,OAAO,EAAE,EAAE;oBACvB,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,KAAK,EAAE,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;oBACjF,OAAO;wBACL,MAAM,EAAE,OAAO;wBACf,KAAK,EACH,gBAAgB,CAAC,OAAO,KAAK,SAAS;4BACpC,CAAC,CAAC,MAAM;4BACR,CAAC,CAAC,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,CAAC;qBAC1D,CAAC;gBACJ,CAAC,CAAC,CAAC;YACL,CAAC,EACD,CAAC,KAAK,EAAE,EAAE;gBACR,IAAI,eAAe;oBAAE,MAAM,KAAK,CAAC;gBACjC,YAAY,CAAC;oBACX,MAAM,EAAE,OAAO;oBACf,KAAK,EAAE,gBAAgB,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC;oBAC/E,KAAK,EAAE,mBAAmB,CAAC,KAAK,CAAC;iBAClC,CAAC,CAAC;YACL,CAAC,CACF,CAAC;YACF,OAAO;QACT,CAAC;QAED,MAAM,qBAAqB,GACzB,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC;QACxE,MAAM,oBAAoB,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,EAAE,CACtF,mBAAmB,CAAC,QAAQ,CAAC,WAAW,CAAC,CAC1C,CAAC;QACF,IAAI,oBAAoB,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAE9C,MAAM,OAAO,CAAC,UAAU,CACtB,oBAAoB,CAAC,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE;YAC7C,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;YACpC,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC;gBAChC,UAAU,CAAC,UAAU,CAAC,WAAW,EAAE;oBACjC,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ;iBACjE,CAAC,CAAC;YACL,CAAC;YACD,MAAM,cAAc,GAClB,OAAO,CAAC,iBAAiB,KAAK,KAAK;gBACjC,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,yBAAyB,EAAE,CAAC,WAAW,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7E,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;YACjC,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAChD,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC;oBAAE,OAAO;gBACzC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;oBAAE,OAAO;gBAC3D,YAAY,CAAC,CAAC,OAAO,EAAE,EAAE;oBACvB,MAAM,oBAAoB,GACxB,OAAO,CAAC,WAAW,EAAE,YAAY,CAAC,MAAM,CACtC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,KAAK,WAAW,CACzC,IAAI,EAAE,CAAC;oBACV,MAAM,IAAI,GAAG;wBACX,GAAG,OAAO;wBACV,MAAM,EAAE,OAAgB;wBACxB,KAAK,EAAE,kBAAkB,CAAC,OAAO,CAAC,KAAK,EAAE,eAAe,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;wBACzE,KAAK,EAAE,SAAS;qBACjB,CAAC;oBACF,IAAI,oBAAoB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBACtC,MAAM,kBAAkB,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;wBACvC,OAAO,kBAAkB,CAAC,WAAW,CAAC;wBACtC,OAAO,kBAAkB,CAAC;oBAC5B,CAAC;oBACD,OAAO;wBACL,GAAG,IAAI;wBACP,WAAW,EAAE;4BACX,YAAY,EAAE,oBAAoB;4BAClC,KAAK,EAAE,OAAO,CAAC,WAAY,CAAC,KAAK;yBAClC;qBACF,CAAC;gBACJ,CAAC,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC;oBAAE,OAAO;gBACzC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;oBAAE,OAAO;gBAC3D,YAAY,CAAC,CAAC,OAAO,EAAE,EAAE;oBACvB,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,EAAE,YAAY,IAAI,EAAE,CAAC;oBAC5D,OAAO;wBACL,GAAG,OAAO;wBACV,MAAM,EAAE,OAAO;wBACf,KAAK,EAAE,kBAAkB,CAAC,OAAO,CAAC,KAAK,EAAE,eAAe,CAAC,OAAO,EAAE,EAAE,CAAC;wBACrE,KAAK,EAAE,SAAS;wBAChB,WAAW,EAAE;4BACX,YAAY,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;4BACzD,KAAK,EAAE;gCACL,GAAG,mBAAmB,CAAC,KAAK,CAAC;gCAC7B,SAAS,EAAE,IAAI;6BAChB;yBACF;qBACF,CAAC;gBACJ,CAAC,CAAC,CAAC;YACL,CAAC;oBAAS,CAAC;gBACT,MAAM,cAAc,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC,CAAC,CACH,CAAC;IACJ,CAAC,EACD,CAAC,yBAAyB,EAAE,OAAO,EAAE,UAAU,CAAC,CACjD,CAAC;IACF,SAAS,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,oBAAoB,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE;QAC/D,IAAI,IAAI,KAAK,UAAU;YAAE,OAAO;QAChC,KAAK,OAAO,CAAC;YACX,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE;YACzC,eAAe,EAAE,IAAI;YACrB,kBAAkB,EAAE,IAAI;YACxB,iBAAiB,EAAE,KAAK;SACzB,CAAC,CAAC;IACL,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,oBAAoB,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IACjD,MAAM,qBAAqB,GAAG,WAAW,CACvC,CAAC,WAAmB,EAAQ,EAAE;QAC5B,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAC7B,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAC3B,iBAAiB,CAAC;gBAChB,IAAI,EAAE,2BAA2B;gBACjC,OAAO,EAAE,EAAE;gBACX,SAAS,EAAE,IAAI;aAChB,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QACD,KAAK,eAAe,CAAC,OAAO,CAAC,IAAI,CAC/B,WAAW,EACX,CAAC,IAAI,EAAE,EAAE;YACP,gBAAgB,CAAC,OAAO,GAAG,IAAI,CAAC;YAChC,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAC3B,YAAY,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBACzB,GAAG,OAAO;gBACV,KAAK,EAAE,iBAAiB,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;aAC9C,CAAC,CAAC,CAAC;QACN,CAAC,EACD,CAAC,KAAK,EAAE,EAAE;YACR,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAC3B,iBAAiB,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;QAChD,CAAC,CACF,CAAC;IACJ,CAAC,EACD,CAAC,OAAO,EAAE,UAAU,CAAC,CACtB,CAAC;IACF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;YACxB,KAAK,OAAO,CAAC,EAAE,eAAe,EAAE,YAAY,CAAC,OAAO,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC,CAAC;QAC7E,CAAC;aAAM,CAAC;YACN,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YAClC,KAAK,MAAM,KAAK,IAAI,mBAAmB,CAAC,OAAO,CAAC,MAAM,EAAE;gBAAE,KAAK,CAAC,UAAU,EAAE,CAAC;YAC7E,eAAe,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YACrC,gBAAgB,CAAC,OAAO,GAAG,SAAS,CAAC;YACrC,2BAA2B,CAAC,SAAS,CAAC,CAAC;YACvC,iBAAiB,CAAC,SAAS,CAAC,CAAC;YAC7B,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAC3B,YAAY,CAAC,gBAAgB,CAAC,CAAC;QACjC,CAAC;IACH,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IACpB,MAAM,uBAAuB,GAAG,MAAM,CAAoB,YAAY,CAAC,CAAC;IACxE,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,oBAAoB,GAAG,uBAAuB,CAAC,OAAO,CAAC;QAC7D,uBAAuB,CAAC,OAAO,GAAG,YAAY,CAAC;QAC/C,IAAI,IAAI,KAAK,UAAU;YAAE,OAAO;QAEhC,MAAM,iBAAiB,GAAG,YAAY,CAAC,MAAM,CAC3C,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,oBAAoB,CAAC,QAAQ,CAAC,WAAW,CAAC,CAC7D,CAAC;QACF,MAAM,mBAAmB,GAAG,oBAAoB,CAAC,MAAM,CACrD,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,CACrD,CAAC;QACF,KAAK,MAAM,WAAW,IAAI,mBAAmB,EAAE,CAAC;YAC9C,mBAAmB,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAClD,CAAC;QACD,YAAY,CAAC,CAAC,OAAO,EAAE,EAAE;YACvB,MAAM,KAAK,GAAG,kBAAkB,CAAC,OAAO,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC;YAClE,MAAM,oBAAoB,GACxB,OAAO,CAAC,WAAW,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,EAAE,CACvD,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,CACnC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,GAAG,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,CAAC;YACnC,IAAI,oBAAoB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtC,MAAM,kBAAkB,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;gBACvC,OAAO,kBAAkB,CAAC,WAAW,CAAC;gBACtC,OAAO,kBAAkB,CAAC;YAC5B,CAAC;YACD,OAAO;gBACL,GAAG,IAAI;gBACP,WAAW,EAAE;oBACX,YAAY,EAAE,oBAAoB;oBAClC,KAAK,EAAE,OAAO,CAAC,WAAY,CAAC,KAAK;iBAClC;aACF,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,KAAK,MAAM,WAAW,IAAI,iBAAiB,EAAE,CAAC;YAC5C,KAAK,OAAO,CAAC;gBACX,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE;gBACzC,eAAe,EAAE,IAAI;aACtB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;gBACZ,kEAAkE;YACpE,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;IAClC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,uBAAuB,CAAC,OAAO,KAAK,oBAAoB,CAAC,QAAQ;YAAE,OAAO;QAC9E,uBAAuB,CAAC,OAAO,GAAG,oBAAoB,CAAC,QAAQ,CAAC;QAChE,IAAI,IAAI,KAAK,UAAU,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO;QACzD,IAAI,oBAAoB,CAAC,oBAAoB,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QACnE,KAAK,OAAO,CAAC;YACX,KAAK,EAAE;gBACL,IAAI,EAAE,YAAY;gBAClB,YAAY,EAAE,oBAAoB,CAAC,oBAAoB;aACxD;YACD,eAAe,EAAE,YAAY,CAAC,OAAO,CAAC,MAAM,KAAK,OAAO;SACzD,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YACZ,gFAAgF;QAClF,CAAC,CAAC,CAAC;IACL,CAAC,EAAE;QACD,oBAAoB,CAAC,oBAAoB;QACzC,oBAAoB,CAAC,QAAQ;QAC7B,OAAO;QACP,IAAI;QACJ,OAAO;KACR,CAAC,CAAC;IACH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,SAAS,CAAC,MAAM,KAAK,OAAO,IAAI,qBAAqB,KAAK,SAAS;YAAE,OAAO;QAChF,qBAAqB,CACnB,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAC/B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAC9B,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,SAAS,EAAE,OAAO,CAAC,SAAS;SAC7B,CAAC,CAAC,CACJ,CACF,CAAC;IACJ,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC,CAAC;IAC/D,MAAM,eAAe,GAAG,OAAO,CAC7B,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,EACtE,CAAC,SAAS,CAAC,KAAK,CAAC,CAClB,CAAC;IACF,MAAM,mBAAmB,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC;IACzD,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,QAAQ,GAAG,mBAAmB,CAAC,OAAO,CAAC;QAC7C,mBAAmB,CAAC,OAAO,GAAG,oBAAoB,CAAC;QACnD,IAAI,IAAI,KAAK,UAAU;YAAE,OAAO;QAChC,MAAM,QAAQ,GAAG,mCAAmC,CAClD,YAAY,CAAC,OAAO,CAAC,KAAK,EAC1B,QAAQ,EACR,oBAAoB,CACrB,CAAC;QACF,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;YACrB,KAAK,OAAO,CAAC;gBACX,KAAK,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE;gBACrD,eAAe,EAAE,IAAI;aACtB,CAAC,CAAC;IACP,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,oBAAoB,CAAC,CAAC,CAAC;IAC1C,OAAO;QACL,SAAS;QACT,YAAY;QACZ,YAAY;QACZ,YAAY;QACZ,mBAAmB;QACnB,uBAAuB;QACvB,QAAQ;QACR,OAAO;QACP,qBAAqB;QACrB,uBAAuB;QACvB,eAAe;QACf,mBAAmB;KACpB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"useSurfaceRefresh.js","sourceRoot":"","sources":["../../../../src/client/surface/state/useSurfaceRefresh.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AAC/E,OAAO,EACL,0BAA0B,EAC1B,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,GAEpB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,mCAAmC,EAAE,mCAAmC,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC/H,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAyBhD,MAAM,UAAU,iBAAiB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,EAAS;IAC3E,MAAM,EAAE,oBAAoB,EAAE,IAAI,EAAE,YAAY,EAAE,oBAAoB,EAAE,GACtE,MAAM,CAAC;IACT,MAAM,eAAe,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;IAC7C,eAAe,CAAC,OAAO,GAAG,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC;QACnE,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,eAAe,CAAC,OAAO,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;IAC/E,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAChD,aAAa,CAAC,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC;IAC1C,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,yBAAyB,EAAE,qBAAqB,EAAE,GAAG,KAAK,CAAC;IACxF,MAAM,qBAAqB,GAAG,MAAM,CAAC,IAAI,GAAG,EAAiC,CAAC,CAAC;IAC/E,MAAM,EACJ,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,2BAA2B,GAC5B,GAAG,iBAAiB,CAAC;IACtB,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAY,gBAAgB,CAAC,CAAC;IACxE,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;IACvC,YAAY,CAAC,OAAO,GAAG,SAAS,CAAC;IACjC,MAAM,cAAc,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;IAC5C,MAAM,kBAAkB,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CACpE,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC,EAAE,WAAW,CAAC;IAC7E,cAAc,CAAC,OAAO,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACvD,MAAM,QAAQ,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,EAAE,KAAK,kBAAkB,CAAC,CAAC,CAAC,CAAC;YAC5D,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,OAAO,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IACH,MAAM,YAAY,GAAG,MAAM,CAAC,0BAA0B,EAAE,CAAC,CAAC;IAC1D,MAAM,mBAAmB,GAAG,MAAM,CAChC,IAAI,GAAG,EAAyD,CACjE,CAAC;IACF,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,GAAG,EAK9B,CAAC,CAAC;IACN,MAAM,uBAAuB,GAAG,MAAM,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IACtE,MAAM,QAAQ,GAAG,CAAC,WAAmB,EAAE,EAAE;QACvC,MAAM,OAAO,GAAG,mBAAmB,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC7D,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO,OAAO,CAAC;QAC1C,MAAM,OAAO,GAAG,0BAA0B,EAAE,CAAC;QAC7C,mBAAmB,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACtD,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC;IACF,MAAM,OAAO,GAAG,WAAW,CACzB,KAAK,EAAE,UAA0B,EAAE,EAAiB,EAAE;QACpD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,IAAI,OAAO,CAAC,cAAc;gBAAE,MAAM,IAAI,0BAA0B,CAAC,kCAAkC,EAAE,qBAAqB,EAAE,IAAI,CAAC,CAAC;YAClI,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YAClC,KAAK,MAAM,KAAK,IAAI,mBAAmB,CAAC,OAAO,CAAC,MAAM,EAAE;gBAAE,KAAK,CAAC,UAAU,EAAE,CAAC;YAC7E,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YAC5B,YAAY,CAAC,gBAAgB,CAAC,CAAC;YAC/B,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,IAAI,EAAE,QAAiB,EAAE,CAAC;QAC3D,MAAM,mBAAmB,GAAG,eAAe,CAAC,OAAO,CAAC;QACpD,0EAA0E;QAC1E,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;YAAE,YAAY,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;QAC1F,MAAM,qBAAqB,GAAG,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO;YAC5E,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC;QAC1E,MAAM,oBAAoB,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,EAAE,CACtF,mBAAmB,CAAC,QAAQ,CAAC,WAAW,CAAC,CAC1C,CAAC;QACF,IAAI,oBAAoB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtC,IAAI,OAAO,CAAC,cAAc;gBAAE,MAAM,IAAI,0BAA0B,CAAC,kCAAkC,EAAE,kCAAkC,EAAE,IAAI,CAAC,CAAC;YAC/I,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CACtC,oBAAoB,CAAC,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE;YAC7C,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;YACpC,IAAI,CAAC,OAAO,CAAC,kBAAkB,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;gBACzD,UAAU,CAAC,UAAU,CAAC,WAAW,EAAE;oBACjC,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ;iBACjE,CAAC,CAAC;YACL,CAAC;YACD,MAAM,cAAc,GAClB,OAAO,CAAC,iBAAiB,KAAK,KAAK;gBACjC,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,yBAAyB,EAAE,CAAC,WAAW,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC;oBACtE,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YAC/B,IAAI,OAAO,GAAG,EAAE,UAAU,EAAE,KAAK,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;gBACjG,OAAO,EAAE,IAAI;gBACb,UAAU,EAAE,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,KAAK,WAAW,CAAC,EAAE,UAAU,IAAI,EAAE,EAAE,CAAC;YAC/G,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YAC9C,IAAI,CAAC;gBACH,IAAI,IAAuC,CAAC;gBAC5C,MAAM,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC;gBACvC,SAAS,CAAC;oBACR,IAAI,CAAC;wBACH,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC;oBAC/B,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC;4BAAE,MAAM,KAAK,CAAC;oBACnE,CAAC;oBACD,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC;wBAAE,MAAM;oBAC3D,oEAAoE;oBACpE,sEAAsE;oBACtE,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;oBACpD,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;wBAClC,MAAM,IAAI,0BAA0B,CAAC,sBAAsB,EAAE,2BAA2B,EAAE,IAAI,CAAC,CAAC;oBAClG,CAAC;oBACD,OAAO,GAAG,MAAM,CAAC;gBACnB,CAAC;gBACD,IAAI,CAAC,IAAI;oBAAE,MAAM,IAAI,0BAA0B,CAAC,sBAAsB,EAAE,kCAAkC,EAAE,IAAI,CAAC,CAAC;gBAClH,IAAI,GAAG,IAAI,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,eAAe,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;gBACpG,IAAI,OAAO,IAAI,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;oBAC5D,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,KAAK,OAAO,CAAC,UAAU,CAAC;oBAC1E,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,KAAK,OAAO,CAAC,SAAS;wBACtE,OAAO,CAAC,UAAU,KAAK,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,EAAE,CAAC;oBAC/E,MAAM,IAAI,0BAA0B,CAAC,kCAAkC,EAAE,8BAA8B,EAAE,IAAI,CAAC,CAAC;gBACjH,CAAC;gBACD,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC;oBAAE,OAAO;gBACjD,IAAI,mBAAmB,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,KAAK;oBAAE,OAAO;gBACnE,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;oBAAE,OAAO;gBAC3D,sEAAsE;gBACtE,wEAAwE;gBACxE,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC;gBACxB,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE,EAAE;oBAC7C,MAAM,YAAY,GAAG,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;oBACjD,OAAO,YAAY,CAAC,WAAW,CAAC,CAAC;oBACjC,OAAO,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,OAAgB;wBAC3C,KAAK,EAAE,kBAAkB,CAAC,OAAO,CAAC,KAAK,EAAE,eAAe,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;wBACzE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC;gBACrC,CAAC,CAAC,CAAC;gBACH,wEAAwE;gBACxE,4EAA4E;gBAC5E,IAAI,OAAO,CAAC,cAAc;oBAAE,SAAS,CAAC,OAAO,CAAC,CAAC;;oBAC1C,OAAO,EAAE,CAAC;YACjB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,OAAO,CAAC,cAAc;oBAAE,MAAM,KAAK,CAAC;gBACxC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC;oBAAE,OAAO;gBACjD,IAAI,mBAAmB,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,KAAK;oBAAE,OAAO;gBACnE,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;oBAAE,OAAO;gBAC3D,YAAY,CAAC,CAAC,OAAO,EAAE,EAAE;oBACvB,OAAO;wBACL,GAAG,OAAO;wBACV,MAAM,EAAE,OAAO;wBACf,KAAK,EAAE,kBAAkB,CAAC,OAAO,CAAC,KAAK,EAAE,eAAe,CAAC,OAAO,EAAE,EAAE,CAAC;wBACrE,KAAK,EAAE,SAAS;wBAChB,YAAY,EAAE,EAAE,GAAG,OAAO,CAAC,YAAY;4BACrC,CAAC,WAAW,CAAC,EAAE,EAAE,GAAG,mBAAmB,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE;yBAClE;qBACF,CAAC;gBACJ,CAAC,CAAC,CAAC;YACL,CAAC;oBAAS,CAAC;gBACT,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC;gBACxB,sEAAsE;gBACtE,iEAAiE;gBACjE,KAAK,cAAc,CAAC;YACtB,CAAC;QACH,CAAC,CAAC,CACH,CAAC;QACF,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC;YACtE,IAAI,MAAM,EAAE,MAAM,KAAK,UAAU;gBAAE,MAAM,MAAM,CAAC,MAAM,CAAC;QACzD,CAAC;IACH,CAAC,EACD,CAAC,yBAAyB,EAAE,OAAO,EAAE,UAAU,CAAC,CACjD,CAAC;IACF,SAAS,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,oBAAoB,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE;QAC/D,IAAI,IAAI,KAAK,UAAU;YAAE,OAAO;QAChC,KAAK,OAAO,CAAC;YACX,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE;YACzC,eAAe,EAAE,IAAI;YACrB,kBAAkB,EAAE,IAAI;YACxB,iBAAiB,EAAE,KAAK;SACzB,CAAC,CAAC;IACL,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,oBAAoB,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IACjD,MAAM,qBAAqB,GAAG,WAAW,CACvC,CAAC,WAAmB,EAAQ,EAAE;QAC5B,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAC7B,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAC3B,iBAAiB,CAAC;gBAChB,IAAI,EAAE,2BAA2B;gBACjC,OAAO,EAAE,EAAE;gBACX,SAAS,EAAE,IAAI;aAChB,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QACD,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,KAAK,WAAW,CAAC,EAAE,UAAU,IAAI,EAAE,CAAC;QAClH,KAAK,eAAe,CAAC,OAAO,CAAC,IAAI,CAC/B,WAAW,EACX,CAAC,IAAI,EAAE,EAAE;YACP,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YAClG,gBAAgB,CAAC,OAAO,GAAG,IAAI,CAAC;YAChC,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAC3B,YAAY,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBACzB,GAAG,OAAO;gBACV,KAAK,EAAE,iBAAiB,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;aAC9C,CAAC,CAAC,CAAC;QACN,CAAC,EACD,CAAC,KAAK,EAAE,EAAE;YACR,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAC3B,iBAAiB,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;QAChD,CAAC,CACF,CAAC;IACJ,CAAC,EACD,CAAC,OAAO,EAAE,UAAU,CAAC,CACtB,CAAC;IACF,MAAM,sBAAsB,GAAG,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACjF,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IACzC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC;YAAE,OAAO;QACxD,MAAM,QAAQ,GAAG,sBAAsB,CAAC,OAAO,CAAC;QAChD,sBAAsB,CAAC,OAAO,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAC5E,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACxC,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YAChD,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;YAChD,IAAI,CAAC,GAAG;gBAAE,SAAS,CAAC,kDAAkD;YACtE,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC,WAAW,CAAC,CAAC;YACnG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACpD,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,KAAK,EAAE,CAAC,CAAC;gBAAE,SAAS;YAC3E,yEAAyE;YACzE,qEAAqE;YACrE,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;YAC7C,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,UAAU,EAAE,CAAC;YAC7C,IAAI,IAAI,KAAK,UAAU;gBAAE,KAAK,OAAO,CAAC;oBACpC,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,CAAC,WAAW,EAAE,EAAE,kBAAkB,EAAE,IAAI;iBAC3F,CAAC,CAAC;QACL,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;IAClF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,IAAI,KAAK,UAAU,IAAI,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC;YAAE,OAAO;QAC/E,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;YACnC,IAAI,IAAI,CAAC,eAAe,KAAK,SAAS,IAAI,SAAS,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC;gBAAE,SAAS;YAC/F,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,WAAW,CAAC,EAAE,UAAU,IAAI,EAAE,CAAC;YAC5G,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,eAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACpE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,KAAK,EAAE,CAAC,CAAC,CAAC;YAC9D,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC1D,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;gBAAE,SAAS;YAC9G,yEAAyE;YACzE,uEAAuE;YACvE,KAAK,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAChF,CAAC;IACH,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IAC/G,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;YACxB,KAAK,OAAO,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/D,CAAC;aAAM,CAAC;YACN,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YAClC,KAAK,MAAM,KAAK,IAAI,mBAAmB,CAAC,OAAO,CAAC,MAAM,EAAE;gBAAE,KAAK,CAAC,UAAU,EAAE,CAAC;YAC7E,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YAC5B,eAAe,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YACrC,gBAAgB,CAAC,OAAO,GAAG,SAAS,CAAC;YACrC,2BAA2B,CAAC,SAAS,CAAC,CAAC;YACvC,iBAAiB,CAAC,SAAS,CAAC,CAAC;YAC7B,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAC3B,sDAAsD;QACxD,CAAC;IACH,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IACpB,MAAM,uBAAuB,GAAG,MAAM,CAAoB,YAAY,CAAC,CAAC;IACxE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC;YAAE,OAAO;QACxD,MAAM,oBAAoB,GAAG,uBAAuB,CAAC,OAAO,CAAC;QAC7D,uBAAuB,CAAC,OAAO,GAAG,YAAY,CAAC;QAE/C,MAAM,iBAAiB,GAAG,YAAY,CAAC,MAAM,CAC3C,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,oBAAoB,CAAC,QAAQ,CAAC,WAAW,CAAC,CAC7D,CAAC;QACF,MAAM,mBAAmB,GAAG,oBAAoB,CAAC,MAAM,CACrD,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,CACrD,CAAC;QACF,KAAK,MAAM,WAAW,IAAI,mBAAmB,EAAE,CAAC;YAC9C,mBAAmB,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;YAC3D,mBAAmB,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YAChD,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YACxC,UAAU,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YACnC,qBAAqB,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YAClD,KAAK,CAAC,qBAAqB,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QACjD,CAAC;QACD,YAAY,CAAC,CAAC,OAAO,EAAE,EAAE;YACvB,MAAM,KAAK,GAAG,kBAAkB,CAAC,OAAO,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC;YAClE,MAAM,YAAY,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC;iBAC/E,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YAClE,OAAO,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;QAC7C,CAAC,CAAC,CAAC;QACH,IAAI,IAAI,KAAK,UAAU;YAAE,OAAO;QAChC,KAAK,MAAM,WAAW,IAAI,iBAAiB,EAAE,CAAC;YAC5C,KAAK,OAAO,CAAC;gBACX,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE;gBACzC,eAAe,EAAE,IAAI;gBACrB,YAAY,EAAE,IAAI;aACnB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;gBACZ,kEAAkE;YACpE,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;IACvE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,uBAAuB,CAAC,OAAO,KAAK,oBAAoB,CAAC,QAAQ;YAAE,OAAO;QAC9E,uBAAuB,CAAC,OAAO,GAAG,oBAAoB,CAAC,QAAQ,CAAC;QAChE,IAAI,IAAI,KAAK,UAAU,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO;QACzD,IAAI,oBAAoB,CAAC,oBAAoB,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QACnE,KAAK,OAAO,CAAC;YACX,KAAK,EAAE;gBACL,IAAI,EAAE,YAAY;gBAClB,YAAY,EAAE,oBAAoB,CAAC,oBAAoB;aACxD;YACD,eAAe,EAAE,YAAY,CAAC,OAAO,CAAC,MAAM,KAAK,OAAO;SACzD,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YACZ,gFAAgF;QAClF,CAAC,CAAC,CAAC;IACL,CAAC,EAAE;QACD,oBAAoB,CAAC,oBAAoB;QACzC,oBAAoB,CAAC,QAAQ;QAC7B,OAAO;QACP,IAAI;QACJ,OAAO;KACR,CAAC,CAAC;IACH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,SAAS,CAAC,MAAM,KAAK,OAAO,IAAI,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC;YAAE,OAAO;QACxF,IAAI,KAAK,CAAC,qBAAqB,EAAE,CAAC;YAChC,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;gBACnC,IAAI,qBAAqB,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,IAAI;oBAC5D,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,OAAO;oBAAE,SAAS;gBACjE,qBAAqB,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;gBAC1D,KAAK,CAAC,qBAAqB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC/D,CAAC;YACD,OAAO;QACT,CAAC;QACD,2EAA2E;QAC3E,IAAI,qBAAqB,KAAK,SAAS;YACnC,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC;YACpE,CAAC,mCAAmC,CAAC,YAAY,EAAE,SAAS,CAAC,KAAK,CAAC;YAAE,OAAO;QAChF,qBAAqB,CACnB,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAC/B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAC9B,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,SAAS,EAAE,OAAO,CAAC,SAAS;SAC7B,CAAC,CAAC,CACJ,CACF,CAAC;IACJ,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,EAAE,qBAAqB,EAAE,KAAK,CAAC,qBAAqB,EAAE,YAAY,EAAE,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;IACnI,MAAM,eAAe,GAAG,OAAO,CAC7B,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,EACtE,CAAC,SAAS,CAAC,KAAK,CAAC,CAClB,CAAC;IACF,MAAM,mBAAmB,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC;IACzD,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,QAAQ,GAAG,mBAAmB,CAAC,OAAO,CAAC;QAC7C,mBAAmB,CAAC,OAAO,GAAG,oBAAoB,CAAC;QACnD,IAAI,IAAI,KAAK,UAAU;YAAE,OAAO;QAChC,MAAM,QAAQ,GAAG,mCAAmC,CAClD,YAAY,CAAC,OAAO,CAAC,KAAK,EAC1B,QAAQ,EACR,oBAAoB,CACrB,CAAC;QACF,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;YACrB,KAAK,OAAO,CAAC;gBACX,KAAK,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE;gBACrD,eAAe,EAAE,IAAI;aACtB,CAAC,CAAC;IACP,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,oBAAoB,CAAC,CAAC,CAAC;IAC1C,OAAO;QACL,SAAS;QACT,YAAY;QACZ,YAAY;QACZ,YAAY;QACZ,mBAAmB;QACnB,uBAAuB;QACvB,QAAQ;QACR,OAAO;QACP,qBAAqB;QACrB,uBAAuB;QACvB,eAAe;QACf,mBAAmB;KACpB,CAAC;AACJ,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { type SessionListLike } from '../../session/session-view.js';
2
2
  import type { WorkspaceListLike, WorktreeSurfaceProps } from '../types.js';
3
3
  type Input = {
4
- props: Pick<WorktreeSurfaceProps, 'useStore' | 'available' | 'manager' | 'useSessions' | 'useSessionStatus' | 'useWorkspaces' | 'forkRecovery' | 'expandState' | 'permissionNotice' | 'fullAccessConfirmation' | 'sessionOrder'>;
4
+ props: Pick<WorktreeSurfaceProps, 'useStore' | 'available' | 'manager' | 'useSessions' | 'useSessionStatus' | 'useWorkspaces' | 'forkRecovery' | 'expandState' | 'sessionOrder'>;
5
5
  };
6
6
  export declare function useSurfaceSources({ props }: Input): {
7
7
  preferredMode: import("../../view/view-mode.js").WorktreeViewMode;
@@ -14,11 +14,6 @@ export declare function useSurfaceSources({ props }: Input): {
14
14
  workspaceIds: readonly string[];
15
15
  workspaceIdsRef: import("react").MutableRefObject<readonly string[]>;
16
16
  expandSnapshot: import("../../view/worktree-expand-state.js").WorktreeExpandState;
17
- permissionNoticeSnapshot: readonly import("../types.js").WorktreePermissionNotice[];
18
- fullAccessConfirmationSnapshot: import("../../index.js").WorktreeFullAccessConfirmationInput | undefined;
19
- fullAccessConfirmationKey: string;
20
- fullAccessAcknowledged: boolean;
21
- setFullAccessAcknowledged: import("react").Dispatch<import("react").SetStateAction<boolean>>;
22
17
  sessionOrderSnapshot: import("../../session/worktree-session-order.js").WorktreeSessionOrderState;
23
18
  sessionPresentations: Readonly<Record<string, import("../../session/session-view.js").SessionPresentation>>;
24
19
  ref: import("react").RefObject<HTMLDivElement>;
@@ -1 +1 @@
1
- {"version":3,"file":"useSurfaceSources.d.ts","sourceRoot":"","sources":["../../../../src/client/surface/state/useSurfaceSources.tsx"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,eAAe,EACrB,MAAM,+BAA+B,CAAC;AAYvC,OAAO,KAAK,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAE3E,KAAK,KAAK,GAAG;IACX,KAAK,EAAE,IAAI,CACT,oBAAoB,EAClB,UAAU,GACV,WAAW,GACX,SAAS,GACT,aAAa,GACb,kBAAkB,GAClB,eAAe,GACf,cAAc,GACd,aAAa,GACb,kBAAkB,GAClB,wBAAwB,GACxB,cAAc,CACjB,CAAC;CACH,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,EAAE,KAAK,EAAE,EAAE,KAAK;;;;;;;;;;;;;;;;;;;;;;;;EAgGjD"}
1
+ {"version":3,"file":"useSurfaceSources.d.ts","sourceRoot":"","sources":["../../../../src/client/surface/state/useSurfaceSources.tsx"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,eAAe,EACrB,MAAM,+BAA+B,CAAC;AAQvC,OAAO,KAAK,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAG3E,KAAK,KAAK,GAAG;IACX,KAAK,EAAE,IAAI,CACT,oBAAoB,EAClB,UAAU,GACV,WAAW,GACX,SAAS,GACT,aAAa,GACb,kBAAkB,GAClB,eAAe,GACf,cAAc,GACd,aAAa,GACb,cAAc,CACjB,CAAC;CACH,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,EAAE,KAAK,EAAE,EAAE,KAAK;;;;;;;;;;;;;;;;;;;EAwEjD"}
@@ -1,17 +1,24 @@
1
- import { useEffect, useMemo, useRef, useState, useSyncExternalStore } from 'react';
1
+ import { useMemo, useRef, useSyncExternalStore } from 'react';
2
2
  import { deriveSessionPresentationIndex, } from '../../session/session-view.js';
3
3
  import { useSidebarOverlayGeometry } from '../../overlay/sidebar-overlay-geometry.js';
4
4
  import { effectiveViewMode } from '../../view/view-mode.js';
5
5
  import { currentSessionIdFromList } from '../../session/session-selection.js';
6
- import { EMPTY_FORK_RECOVERY_STORE, EMPTY_FULL_ACCESS_CONFIRMATION_SNAPSHOT, EMPTY_FULL_ACCESS_CONFIRMATION_SUBSCRIBE, EMPTY_PERMISSION_NOTICE_SNAPSHOT, EMPTY_PERMISSION_NOTICE_SUBSCRIBE, useStableWorkspaceIds, } from '../shared.js';
6
+ import { EMPTY_FORK_RECOVERY_STORE, useStableWorkspaceIds, } from '../shared.js';
7
+ import { retainPendingWorkspaces } from '../selectors.js';
7
8
  export function useSurfaceSources({ props }) {
8
- const { useStore, available, manager, useSessions, useSessionStatus, useWorkspaces, forkRecovery, expandState, permissionNotice, fullAccessConfirmation, sessionOrder, } = props;
9
+ const { useStore, available, manager, useSessions, useSessionStatus, useWorkspaces, forkRecovery, expandState, sessionOrder, } = props;
9
10
  const preferredMode = useStore((state) => state.viewMode);
10
11
  const mode = effectiveViewMode(preferredMode, available && manager !== undefined);
11
12
  const sessions = useSessions((state) => state);
12
13
  // Root hook is absent on legacy clients; do not create a second unread owner.
13
14
  const sessionStatuses = useSessionStatus?.((state) => state);
14
- const workspaces = useWorkspaces((state) => state);
15
+ const nativeWorkspaces = useWorkspaces((state) => state);
16
+ const retainedWorkspaces = useRef();
17
+ const workspaces = useMemo(() => {
18
+ const next = retainPendingWorkspaces(retainedWorkspaces.current, nativeWorkspaces);
19
+ retainedWorkspaces.current = next;
20
+ return next;
21
+ }, [nativeWorkspaces]);
15
22
  const forkRecoveryStore = forkRecovery ?? EMPTY_FORK_RECOVERY_STORE;
16
23
  const forkRecoverySnapshot = useSyncExternalStore(forkRecoveryStore.subscribe, forkRecoveryStore.getSnapshot, forkRecoveryStore.getSnapshot);
17
24
  const currentSessionId = currentSessionIdFromList(sessions);
@@ -19,20 +26,6 @@ export function useSurfaceSources({ props }) {
19
26
  const workspaceIdsRef = useRef(workspaceIds);
20
27
  workspaceIdsRef.current = workspaceIds;
21
28
  const expandSnapshot = useSyncExternalStore(expandState.subscribe, expandState.getSnapshot, expandState.getSnapshot);
22
- const permissionNoticeSnapshot = useSyncExternalStore(permissionNotice?.subscribe ?? EMPTY_PERMISSION_NOTICE_SUBSCRIBE, permissionNotice?.getSnapshot ?? EMPTY_PERMISSION_NOTICE_SNAPSHOT, permissionNotice?.getSnapshot ?? EMPTY_PERMISSION_NOTICE_SNAPSHOT);
23
- const fullAccessConfirmationSnapshot = useSyncExternalStore(fullAccessConfirmation?.subscribe ?? EMPTY_FULL_ACCESS_CONFIRMATION_SUBSCRIBE, fullAccessConfirmation?.getSnapshot ?? EMPTY_FULL_ACCESS_CONFIRMATION_SNAPSHOT, fullAccessConfirmation?.getSnapshot ?? EMPTY_FULL_ACCESS_CONFIRMATION_SNAPSHOT);
24
- const fullAccessConfirmationKey = fullAccessConfirmationSnapshot === undefined
25
- ? ''
26
- : [
27
- fullAccessConfirmationSnapshot.workspaceId,
28
- fullAccessConfirmationSnapshot.worktreeId,
29
- fullAccessConfirmationSnapshot.sessionId,
30
- fullAccessConfirmationSnapshot.cwd,
31
- ].join('\u0000');
32
- const [fullAccessAcknowledged, setFullAccessAcknowledged] = useState(false);
33
- useEffect(() => {
34
- setFullAccessAcknowledged(false);
35
- }, [fullAccessConfirmationKey]);
36
29
  const sessionOrderSnapshot = useSyncExternalStore(sessionOrder.subscribe, sessionOrder.getSnapshot, sessionOrder.getSnapshot);
37
30
  const sessionPresentations = useMemo(() => deriveSessionPresentationIndex(sessions, sessionStatuses), [sessions.byId, sessionStatuses]);
38
31
  const { ref, width, bounds, collapsed, nativeCovered } = useSidebarOverlayGeometry(mode === 'worktree');
@@ -48,11 +41,6 @@ export function useSurfaceSources({ props }) {
48
41
  workspaceIds,
49
42
  workspaceIdsRef,
50
43
  expandSnapshot,
51
- permissionNoticeSnapshot,
52
- fullAccessConfirmationSnapshot,
53
- fullAccessConfirmationKey,
54
- fullAccessAcknowledged,
55
- setFullAccessAcknowledged,
56
44
  sessionOrderSnapshot,
57
45
  sessionPresentations,
58
46
  ref,
@@ -1 +1 @@
1
- {"version":3,"file":"useSurfaceSources.js","sourceRoot":"","sources":["../../../../src/client/surface/state/useSurfaceSources.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useSurfaceSources.js","sourceRoot":"","sources":["../../../../src/client/surface/state/useSurfaceSources.tsx"],"names":[],"mappings":"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"}