@chainingintention/pi-web-cn 1.202607.11 → 1.202608.3

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 (104) hide show
  1. package/README.md +9 -9
  2. package/dist/cli.js +27 -12
  3. package/dist/cli.js.map +1 -1
  4. package/dist/client/assets/{CodeViewer-WeDkBH1U.js → CodeViewer-4gPJstDS.js} +1 -1
  5. package/dist/client/assets/{TerminalPanel-DgiIksV-.js → TerminalPanel-BOafuuU6.js} +5 -5
  6. package/dist/client/assets/{UnifiedDiffViewer-FKeWfK-h.js → UnifiedDiffViewer-BZewUESj.js} +1 -1
  7. package/dist/client/assets/index-DHGDF1O1.js +4101 -0
  8. package/dist/client/index.html +1 -1
  9. package/dist/config.js +36 -0
  10. package/dist/config.js.map +1 -1
  11. package/dist/nativeServices/servicePlan.js +3 -2
  12. package/dist/nativeServices/servicePlan.js.map +1 -1
  13. package/dist/nativeServices/serviceProbe.js +7 -5
  14. package/dist/nativeServices/serviceProbe.js.map +1 -1
  15. package/dist/pi-web-plugins/info/infoInternals.js +223 -0
  16. package/dist/pi-web-plugins/info/pi-web-plugin.js +19 -22
  17. package/dist/pi-web-plugins/relays/markdownDocument.js +81 -0
  18. package/dist/pi-web-plugins/relays/package.json +9 -0
  19. package/dist/pi-web-plugins/relays/pi-web-plugin.js +44 -0
  20. package/dist/pi-web-plugins/relays/relayDiscovery.js +96 -0
  21. package/dist/pi-web-plugins/relays/relaysPanelElement.js +327 -0
  22. package/dist/pi-web-plugins/relays/vendor/README.md +24 -0
  23. package/dist/pi-web-plugins/relays/vendor/marked.esm.js +76 -0
  24. package/dist/pi-web-plugins/updates/pi-web-plugin.js +100 -100
  25. package/dist/pi-web-plugins/updates/updatesLogic.js +8 -5
  26. package/dist/plugin-api.d.ts +5 -1
  27. package/dist/server/configRoutes.js +11 -0
  28. package/dist/server/configRoutes.js.map +1 -1
  29. package/dist/server/diagnostics/nodePtyNativeModule.js +36 -0
  30. package/dist/server/diagnostics/nodePtyNativeModule.js.map +1 -0
  31. package/dist/server/git/gitService.js +176 -5
  32. package/dist/server/git/gitService.js.map +1 -1
  33. package/dist/server/piWebStatus.js +7 -4
  34. package/dist/server/piWebStatus.js.map +1 -1
  35. package/dist/server/realtime/sessionEventHub.js +16 -2
  36. package/dist/server/realtime/sessionEventHub.js.map +1 -1
  37. package/dist/server/sessiond/sessionDaemonStartup.js +0 -42
  38. package/dist/server/sessiond/sessionDaemonStartup.js.map +1 -1
  39. package/dist/server/sessiond/sessionServiceDependencies.js +31 -0
  40. package/dist/server/sessiond/sessionServiceDependencies.js.map +1 -0
  41. package/dist/server/sessions/askUserTool.js +105 -0
  42. package/dist/server/sessions/askUserTool.js.map +1 -0
  43. package/dist/server/sessions/authProviderOptions.js +26 -29
  44. package/dist/server/sessions/authProviderOptions.js.map +1 -1
  45. package/dist/server/sessions/authRoutes.js +9 -1
  46. package/dist/server/sessions/authRoutes.js.map +1 -1
  47. package/dist/server/sessions/authService.js +143 -33
  48. package/dist/server/sessions/authService.js.map +1 -1
  49. package/dist/server/sessions/globalProviderPolicy.js +167 -0
  50. package/dist/server/sessions/globalProviderPolicy.js.map +1 -0
  51. package/dist/server/sessions/modelCatalogRefresher.js +192 -0
  52. package/dist/server/sessions/modelCatalogRefresher.js.map +1 -0
  53. package/dist/server/sessions/oauthLoginFlowService.js +181 -56
  54. package/dist/server/sessions/oauthLoginFlowService.js.map +1 -1
  55. package/dist/server/sessions/parentSessionLocator.js +75 -0
  56. package/dist/server/sessions/parentSessionLocator.js.map +1 -0
  57. package/dist/server/sessions/pendingAskStore.js +278 -0
  58. package/dist/server/sessions/pendingAskStore.js.map +1 -0
  59. package/dist/server/sessions/piSessionService.js +1264 -199
  60. package/dist/server/sessions/piSessionService.js.map +1 -1
  61. package/dist/server/sessions/plainTextTheme.js +112 -0
  62. package/dist/server/sessions/plainTextTheme.js.map +1 -0
  63. package/dist/server/sessions/projectAuthService.js +3 -3
  64. package/dist/server/sessions/projectAuthService.js.map +1 -1
  65. package/dist/server/sessions/sessionCommandService.js +60 -5
  66. package/dist/server/sessions/sessionCommandService.js.map +1 -1
  67. package/dist/server/sessions/sessionFileHeader.js +45 -0
  68. package/dist/server/sessions/sessionFileHeader.js.map +1 -0
  69. package/dist/server/sessions/sessionNotificationStore.js +484 -0
  70. package/dist/server/sessions/sessionNotificationStore.js.map +1 -0
  71. package/dist/server/sessions/sessionRoutes.js +245 -1
  72. package/dist/server/sessions/sessionRoutes.js.map +1 -1
  73. package/dist/server/sessions/sessionTreeProjection.js +250 -0
  74. package/dist/server/sessions/sessionTreeProjection.js.map +1 -0
  75. package/dist/server/sessions/sessionUnreadStore.js +520 -0
  76. package/dist/server/sessions/sessionUnreadStore.js.map +1 -0
  77. package/dist/server/sessions/spawnSubsessionTool.js +10 -12
  78. package/dist/server/sessions/spawnSubsessionTool.js.map +1 -1
  79. package/dist/server/sessions/spawnTargetResolver.js +3 -16
  80. package/dist/server/sessions/spawnTargetResolver.js.map +1 -1
  81. package/dist/server/terminals/terminalService.js +8 -2
  82. package/dist/server/terminals/terminalService.js.map +1 -1
  83. package/dist/server/workspaces/gitWorktreeDiscovery.js +9 -0
  84. package/dist/server/workspaces/gitWorktreeDiscovery.js.map +1 -1
  85. package/dist/server/workspaces/projectWorkspaceCwds.js +22 -0
  86. package/dist/server/workspaces/projectWorkspaceCwds.js.map +1 -0
  87. package/dist/server/workspaces/workspaceService.js +15 -2
  88. package/dist/server/workspaces/workspaceService.js.map +1 -1
  89. package/dist/shared/activity.js +9 -1
  90. package/dist/shared/activity.js.map +1 -1
  91. package/dist/shared/apiTypes.d.ts +403 -8
  92. package/dist/shared/apiTypes.js +26 -0
  93. package/dist/shared/apiTypes.js.map +1 -1
  94. package/dist/shared/capabilities.js +9 -0
  95. package/dist/shared/capabilities.js.map +1 -1
  96. package/dist/shared/federatedRoutes.js +12 -0
  97. package/dist/shared/federatedRoutes.js.map +1 -1
  98. package/docs/config.md +76 -9
  99. package/docs/plugins.md +72 -16
  100. package/install.sh +1 -1
  101. package/package.json +4 -2
  102. package/dist/client/assets/index-kgpXTDyy.js +0 -3247
  103. package/dist/server/sessions/sessionArchiveMigration.js +0 -590
  104. package/dist/server/sessions/sessionArchiveMigration.js.map +0 -1
@@ -1,12 +1,18 @@
1
1
  import crypto from "node:crypto";
2
2
  const DEFAULT_TERMINAL_TTL_MS = 5 * 60 * 1000;
3
3
  const DEFAULT_RUNNING_TTL_MS = 30 * 60 * 1000;
4
+ const noopLogger = { error() { } };
5
+ /**
6
+ * AuthInteraction transport shared by OAuth and provider-driven API-key login.
7
+ * The historical class and wire names remain for rolling browser/sessiond compatibility.
8
+ */
4
9
  export class OAuthLoginFlowService {
5
10
  constructor(options = {}) {
6
11
  this.flows = new Map();
7
12
  this.terminalTtlMs = options.terminalTtlMs ?? DEFAULT_TERMINAL_TTL_MS;
8
13
  this.runningTtlMs = options.runningTtlMs ?? DEFAULT_RUNNING_TTL_MS;
9
14
  this.now = options.now ?? (() => Date.now());
15
+ this.logger = options.logger ?? noopLogger;
10
16
  }
11
17
  start(options) {
12
18
  const flowId = crypto.randomUUID();
@@ -25,40 +31,18 @@ export class OAuthLoginFlowService {
25
31
  };
26
32
  this.flows.set(flowId, record);
27
33
  this.scheduleRunningExpiry(record);
34
+ // Adapt the pi-ai AuthInteraction contract onto the web-UI flow state:
35
+ // `prompt()` returns the entered/selected string; `notify()` surfaces
36
+ // out-of-band login events (auth URL, device code, progress).
28
37
  const interaction = {
29
38
  signal: abort.signal,
30
- prompt: (prompt) => {
31
- if (prompt.type === "select")
32
- return this.waitForSelect(record, prompt);
33
- return this.waitForPrompt(record, prompt, prompt.type === "manual_code" ? "manual" : "prompt");
34
- },
35
- notify: (event) => {
36
- if (!this.isCurrentRunning(record))
37
- return;
38
- if (event.type === "auth_url") {
39
- this.updateState(record, { ...record.state, auth: { url: event.url, ...(event.instructions === undefined ? {} : { instructions: event.instructions }) } });
40
- return;
41
- }
42
- if (event.type === "device_code") {
43
- this.updateState(record, { ...record.state, auth: { url: event.verificationUri, instructions: `输入代码:${event.userCode}` } });
44
- return;
45
- }
46
- const message = event.message;
47
- this.updateState(record, { ...record.state, progress: [...record.state.progress, message] });
48
- },
39
+ prompt: (prompt) => this.handlePrompt(record, prompt),
40
+ notify: (event) => { this.handleEvent(record, event); },
49
41
  };
50
- void options.modelRuntime.login(options.providerId, "oauth", interaction)
51
- .then(() => {
52
- if (!this.isCurrentRunning(record))
42
+ void options.runtime.login(options.providerId, options.authType ?? "oauth", interaction).then(() => this.reconcileCommittedLogin(record, options.onComplete), (error) => {
43
+ if (!this.isCurrent(record))
53
44
  return;
54
- record.pending = undefined;
55
- this.markTerminal(record, { ...withoutInteraction(record.state), status: "complete", progress: [...record.state.progress, "登录完成"] });
56
- options.onComplete?.();
57
- })
58
- .catch((error) => {
59
- if (this.flows.get(record.flowId) !== record)
60
- return;
61
- record.pending = undefined;
45
+ this.clearPending(record);
62
46
  if (record.state.status !== "running")
63
47
  return;
64
48
  this.markTerminal(record, { ...withoutInteraction(record.state), status: "error", error: error instanceof Error ? error.message : String(error) });
@@ -68,21 +52,23 @@ export class OAuthLoginFlowService {
68
52
  get(flowId) {
69
53
  const record = this.flows.get(flowId);
70
54
  if (record === undefined)
71
- throw new Error("未找到 OAuth 登录流程");
55
+ throw new Error("Login flow not found");
72
56
  return cloneState(record.state);
73
57
  }
74
58
  respond(flowId, requestId, value) {
75
59
  const record = this.flows.get(flowId);
76
60
  if (record === undefined)
77
- throw new Error("未找到 OAuth 登录流程");
61
+ throw new Error("Login flow not found");
78
62
  if (record.state.status !== "running")
79
63
  return cloneState(record.state);
80
64
  const pending = record.pending;
81
65
  if (pending?.requestId !== requestId)
82
- throw new Error("OAuth 登录请求已过期");
66
+ throw new Error("Login request expired");
83
67
  if (!pending.allowEmpty && value.trim() === "")
84
- throw new Error("必须填写一个值");
85
- record.pending = undefined;
68
+ throw new Error("A value is required");
69
+ if (pending.allowedValues !== undefined && !pending.allowedValues.has(value))
70
+ throw new Error("Invalid login selection");
71
+ this.clearPending(record);
86
72
  this.updateState(record, withoutInteraction(record.state));
87
73
  pending.resolve(value);
88
74
  return cloneState(record.state);
@@ -90,13 +76,12 @@ export class OAuthLoginFlowService {
90
76
  cancel(flowId) {
91
77
  const record = this.flows.get(flowId);
92
78
  if (record === undefined)
93
- throw new Error("未找到 OAuth 登录流程");
79
+ throw new Error("Login flow not found");
94
80
  if (record.state.status === "running") {
95
81
  record.abort.abort();
96
- const pending = record.pending;
97
- record.pending = undefined;
98
- this.markTerminal(record, { ...withoutInteraction(record.state), status: "cancelled", error: "登录已取消" });
99
- pending?.reject(new Error("登录已取消"));
82
+ const pending = this.clearPending(record);
83
+ this.markTerminal(record, { ...withoutInteraction(record.state), status: "cancelled", error: "Login cancelled" });
84
+ pending?.reject(new Error("Login cancelled"));
100
85
  }
101
86
  return cloneState(record.state);
102
87
  }
@@ -104,27 +89,87 @@ export class OAuthLoginFlowService {
104
89
  for (const record of this.flows.values()) {
105
90
  this.clearTimer(record);
106
91
  record.abort.abort();
107
- const pending = record.pending;
108
- record.pending = undefined;
109
- pending?.reject(new Error("登录已取消"));
92
+ const pending = this.clearPending(record);
93
+ pending?.reject(new Error("Login cancelled"));
110
94
  }
111
95
  this.flows.clear();
112
96
  }
113
- waitForPrompt(record, prompt, kind) {
97
+ handlePrompt(record, prompt) {
98
+ if (prompt.type === "select")
99
+ return this.waitForSelect(record, prompt);
100
+ return this.waitForPrompt(record, prompt);
101
+ }
102
+ handleEvent(record, event) {
103
+ if (!this.isCurrentRunning(record))
104
+ return;
105
+ switch (event.type) {
106
+ case "auth_url":
107
+ this.updateState(record, { ...record.state, auth: { url: event.url, ...(event.instructions === undefined ? {} : { instructions: event.instructions }) } });
108
+ return;
109
+ // Keep the legacy auth URL/instructions while adding structured metadata
110
+ // that newer browsers can use during rolling sessiond upgrades.
111
+ case "device_code":
112
+ this.updateState(record, {
113
+ ...record.state,
114
+ auth: {
115
+ url: event.verificationUri,
116
+ instructions: `Enter code: ${event.userCode}`,
117
+ deviceCode: {
118
+ userCode: event.userCode,
119
+ ...(event.intervalSeconds === undefined ? {} : { intervalSeconds: event.intervalSeconds }),
120
+ ...(event.expiresInSeconds === undefined ? {} : { expiresInSeconds: event.expiresInSeconds }),
121
+ },
122
+ },
123
+ });
124
+ return;
125
+ case "info":
126
+ this.updateState(record, {
127
+ ...record.state,
128
+ progress: [...record.state.progress, event.message],
129
+ info: [
130
+ ...(record.state.info ?? []),
131
+ {
132
+ message: event.message,
133
+ ...(event.links === undefined ? {} : {
134
+ links: event.links.map((link) => ({
135
+ url: link.url,
136
+ ...(link.label === undefined ? {} : { label: link.label }),
137
+ })),
138
+ }),
139
+ },
140
+ ],
141
+ });
142
+ return;
143
+ case "progress":
144
+ this.updateState(record, { ...record.state, progress: [...record.state.progress, event.message] });
145
+ return;
146
+ }
147
+ }
148
+ waitForPrompt(record, prompt) {
114
149
  return new Promise((resolve, reject) => {
115
150
  if (!this.isCurrentRunning(record)) {
116
- reject(new Error("登录已取消"));
151
+ reject(new Error("Login cancelled"));
117
152
  return;
118
153
  }
119
154
  const requestId = crypto.randomUUID();
120
- record.pending = { requestId, allowEmpty: false, resolve: (value) => { resolve(value ?? ""); }, reject };
155
+ const pending = {
156
+ requestId,
157
+ allowEmpty: prompt.type === "text",
158
+ resolve,
159
+ reject,
160
+ };
161
+ record.pending = pending;
162
+ if (!this.bindPromptSignal(record, pending, prompt.signal))
163
+ return;
121
164
  const base = withoutInteraction(record.state);
122
165
  this.updateState(record, {
123
166
  ...base,
124
167
  prompt: {
125
168
  requestId,
126
169
  message: prompt.message,
127
- kind,
170
+ kind: prompt.type === "manual_code" ? "manual" : "prompt",
171
+ promptType: prompt.type,
172
+ ...(prompt.type === "text" ? { allowEmpty: true } : {}),
128
173
  ...(prompt.placeholder === undefined ? {} : { placeholder: prompt.placeholder }),
129
174
  },
130
175
  });
@@ -133,18 +178,88 @@ export class OAuthLoginFlowService {
133
178
  waitForSelect(record, prompt) {
134
179
  return new Promise((resolve, reject) => {
135
180
  if (!this.isCurrentRunning(record)) {
136
- reject(new Error("登录已取消"));
181
+ reject(new Error("Login cancelled"));
137
182
  return;
138
183
  }
139
184
  const requestId = crypto.randomUUID();
140
- const options = prompt.options.map((option) => ({ value: option.id, label: option.label }));
141
- record.pending = { requestId, allowEmpty: false, resolve: (value) => { resolve(value ?? ""); }, reject };
185
+ const options = prompt.options.map((option) => ({
186
+ value: option.id,
187
+ label: option.label,
188
+ ...(option.description === undefined ? {} : { description: option.description }),
189
+ }));
190
+ const pending = {
191
+ requestId,
192
+ allowEmpty: false,
193
+ resolve,
194
+ reject,
195
+ allowedValues: new Set(options.map((option) => option.value)),
196
+ };
197
+ record.pending = pending;
198
+ if (!this.bindPromptSignal(record, pending, prompt.signal))
199
+ return;
142
200
  const base = withoutInteraction(record.state);
143
201
  this.updateState(record, { ...base, select: { requestId, message: prompt.message, options } });
144
202
  });
145
203
  }
204
+ // A prompt may carry its own AbortSignal (e.g. a manual_code prompt raced
205
+ // against a callback server). When it fires, drop just that pending request
206
+ // and clear the interaction from state — the overall login keeps running.
207
+ bindPromptSignal(record, pending, signal) {
208
+ if (signal === undefined)
209
+ return true;
210
+ const onAbort = () => {
211
+ if (record.pending !== pending)
212
+ return;
213
+ this.clearPending(record);
214
+ if (this.isCurrentRunning(record))
215
+ this.updateState(record, withoutInteraction(record.state));
216
+ pending.reject(new Error("Prompt cancelled"));
217
+ };
218
+ pending.cleanup = () => { signal.removeEventListener("abort", onAbort); };
219
+ signal.addEventListener("abort", onAbort, { once: true });
220
+ if (signal.aborted) {
221
+ onAbort();
222
+ return false;
223
+ }
224
+ return true;
225
+ }
226
+ clearPending(record) {
227
+ const pending = record.pending;
228
+ record.pending = undefined;
229
+ pending?.cleanup?.();
230
+ return pending;
231
+ }
232
+ // ModelRuntime persists the credential before its post-login refresh. If a
233
+ // cancellation lands during that refresh, the resolved login is committed
234
+ // truth and must supersede the transient cancelled state.
235
+ async reconcileCommittedLogin(record, onComplete) {
236
+ if (this.isCurrent(record))
237
+ this.clearPending(record);
238
+ try {
239
+ await onComplete?.();
240
+ }
241
+ catch (error) {
242
+ this.logErrorNoThrow({ err: error, flowId: record.flowId, providerId: record.state.providerId }, "login completion callback failed");
243
+ }
244
+ if (!this.isCurrent(record))
245
+ return;
246
+ const completed = withoutInteraction(record.state);
247
+ delete completed.error;
248
+ this.markTerminal(record, { ...completed, status: "complete", progress: [...record.state.progress, "Login complete"] });
249
+ }
250
+ isCurrent(record) {
251
+ return this.flows.get(record.flowId) === record;
252
+ }
146
253
  isCurrentRunning(record) {
147
- return this.flows.get(record.flowId) === record && record.state.status === "running";
254
+ return this.isCurrent(record) && record.state.status === "running";
255
+ }
256
+ logErrorNoThrow(details, message) {
257
+ try {
258
+ this.logger.error(details, message);
259
+ }
260
+ catch {
261
+ // Logging is post-commit diagnostics and must never change auth truth.
262
+ }
148
263
  }
149
264
  updateState(record, state) {
150
265
  record.state = state;
@@ -184,10 +299,9 @@ export class OAuthLoginFlowService {
184
299
  if (!this.isCurrentRunning(record))
185
300
  return;
186
301
  record.abort.abort();
187
- const pending = record.pending;
188
- record.pending = undefined;
189
- this.markTerminal(record, { ...withoutInteraction(record.state), status: "error", error: "OAuth 登录流程已过期" });
190
- pending?.reject(new Error("OAuth 登录流程已过期"));
302
+ const pending = this.clearPending(record);
303
+ this.markTerminal(record, { ...withoutInteraction(record.state), status: "error", error: "Login flow expired" });
304
+ pending?.reject(new Error("Login flow expired"));
191
305
  }
192
306
  setTimer(record, delayMs, callback) {
193
307
  this.clearTimer(record);
@@ -211,9 +325,20 @@ function cloneState(state) {
211
325
  return {
212
326
  ...state,
213
327
  progress: [...state.progress],
214
- ...(state.auth === undefined ? {} : { auth: { ...state.auth } }),
328
+ ...(state.auth === undefined ? {} : {
329
+ auth: {
330
+ ...state.auth,
331
+ ...(state.auth.deviceCode === undefined ? {} : { deviceCode: { ...state.auth.deviceCode } }),
332
+ },
333
+ }),
215
334
  ...(state.prompt === undefined ? {} : { prompt: { ...state.prompt } }),
216
335
  ...(state.select === undefined ? {} : { select: { ...state.select, options: state.select.options.map((option) => ({ ...option })) } }),
336
+ ...(state.info === undefined ? {} : {
337
+ info: state.info.map((item) => ({
338
+ ...item,
339
+ ...(item.links === undefined ? {} : { links: item.links.map((link) => ({ ...link })) }),
340
+ })),
341
+ }),
217
342
  };
218
343
  }
219
344
  function unrefTimer(timer) {
@@ -1 +1 @@
1
- {"version":3,"file":"oauthLoginFlowService.js","sourceRoot":"","sources":["../../../src/server/sessions/oauthLoginFlowService.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AA+BjC,MAAM,uBAAuB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAC9C,MAAM,sBAAsB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAE9C,MAAM,OAAO,qBAAqB;IAMhC,YAAY,UAAwC,EAAE;QALrC,UAAK,GAAG,IAAI,GAAG,EAA2B,CAAC;QAM1D,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,uBAAuB,CAAC;QACtE,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,sBAAsB,CAAC;QACnE,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,OAKL;QACC,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,IAAI,eAAe,EAAE,CAAC;QACpC,MAAM,MAAM,GAAoB;YAC9B,MAAM;YACN,KAAK;YACL,OAAO,EAAE,SAAS;YAClB,KAAK,EAAE;gBACL,MAAM;gBACN,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,YAAY,EAAE,OAAO,CAAC,YAAY;gBAClC,MAAM,EAAE,SAAS;gBACjB,QAAQ,EAAE,EAAE;aACb;SACF,CAAC;QACF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/B,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAEnC,MAAM,WAAW,GAAoB;YACnC,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;gBACjB,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ;oBAAE,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBACxE,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YACjG,CAAC;YACD,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;gBAChB,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;oBAAE,OAAO;gBAC3C,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;oBAC9B,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC3J,OAAO;gBACT,CAAC;gBACD,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;oBACjC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,eAAe,EAAE,YAAY,EAAE,QAAQ,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;oBAC5H,OAAO;gBACT,CAAC;gBACD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;gBAC9B,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,GAAG,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;YAC/F,CAAC;SACF,CAAC;QAEF,KAAK,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,EAAE,WAAW,CAAC;aACtE,IAAI,CAAC,GAAG,EAAE;YACT,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;gBAAE,OAAO;YAC3C,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;YAC3B,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,GAAG,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;YACrI,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;QACzB,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;YACxB,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,MAAM;gBAAE,OAAO;YACrD,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;YAC3B,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS;gBAAE,OAAO;YAC9C,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,GAAG,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACrJ,CAAC,CAAC,CAAC;QAEL,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IAED,GAAG,CAAC,MAAc;QAChB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACtC,IAAI,MAAM,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAC5D,OAAO,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAED,OAAO,CAAC,MAAc,EAAE,SAAiB,EAAE,KAAa;QACtD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACtC,IAAI,MAAM,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAC5D,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC/B,IAAI,OAAO,EAAE,SAAS,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;QACvE,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;QAC3E,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC3D,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACvB,OAAO,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAED,MAAM,CAAC,MAAc;QACnB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACtC,IAAI,MAAM,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAC5D,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACtC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACrB,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;YAC/B,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;YAC3B,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,GAAG,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;YACxG,OAAO,EAAE,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAED,OAAO;QACL,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YACzC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YACxB,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACrB,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;YAC/B,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;YAC3B,OAAO,EAAE,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QACtC,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAEO,aAAa,CAAC,MAAuB,EAAE,MAA+C,EAAE,IAAyB;QACvH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;gBACnC,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;gBAC3B,OAAO;YACT,CAAC;YACD,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;YACtC,MAAM,CAAC,OAAO,GAAG,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;YACzG,MAAM,IAAI,GAAG,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC9C,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;gBACvB,GAAG,IAAI;gBACP,MAAM,EAAE;oBACN,SAAS;oBACT,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,IAAI;oBACJ,GAAG,CAAC,MAAM,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC;iBACjF;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,aAAa,CAAC,MAAuB,EAAE,MAA+C;QAC5F,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;gBACnC,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;gBAC3B,OAAO;YACT,CAAC;YACD,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;YACtC,MAAM,OAAO,GAAoB,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAC7G,MAAM,CAAC,OAAO,GAAG,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;YACzG,MAAM,IAAI,GAAG,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC9C,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;QACjG,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,gBAAgB,CAAC,MAAuB;QAC9C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC;IACvF,CAAC;IAEO,WAAW,CAAC,MAAuB,EAAE,KAAqB;QAChE,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;IAEO,YAAY,CAAC,MAAuB,EAAE,KAAqB;QACjE,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAChC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC/B,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC;IAEO,qBAAqB,CAAC,MAAuB;QACnD,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;YAC/B,OAAO;QACT,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtF,CAAC;IAEO,wBAAwB,CAAC,MAAuB;QACtD,IAAI,IAAI,CAAC,aAAa,IAAI,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACjC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YACxB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,GAAG,EAAE;YAC7C,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,MAAM;gBAAE,OAAO;YACrD,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS;gBAAE,OAAO;YAC5C,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;gBACxD,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC;gBACtC,OAAO;YACT,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACjC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,iBAAiB,CAAC,MAAuB;QAC/C,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;YAAE,OAAO;QAC3C,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACrB,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC/B,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,GAAG,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAAC;QAC5G,OAAO,EAAE,MAAM,CAAC,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;IAC9C,CAAC;IAEO,QAAQ,CAAC,MAAuB,EAAE,OAAe,EAAE,QAAoB;QAC7E,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACxB,MAAM,CAAC,YAAY,GAAG,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACpD,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAClC,CAAC;IAEO,UAAU,CAAC,MAAuB;QACxC,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS;YAAE,OAAO;QAC9C,YAAY,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAClC,OAAO,MAAM,CAAC,YAAY,CAAC;IAC7B,CAAC;CACF;AAED,SAAS,kBAAkB,CAAC,KAAqB;IAC/C,MAAM,IAAI,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;IAC1B,OAAO,IAAI,CAAC,MAAM,CAAC;IACnB,OAAO,IAAI,CAAC,MAAM,CAAC;IACnB,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,UAAU,CAAC,KAAqB;IACvC,OAAO;QACL,GAAG,KAAK;QACR,QAAQ,EAAE,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC;QAC7B,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QAChE,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;QACtE,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;KACvI,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,KAAkB;IACpC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,UAAU;QAAE,OAAO;IAClG,KAAK,CAAC,KAAK,EAAE,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"oauthLoginFlowService.js","sourceRoot":"","sources":["../../../src/server/sessions/oauthLoginFlowService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,75 @@
1
+ import { canonicalizeStoredCwd, cwdPathsEqual } from "../workingDirectory.js";
2
+ /**
3
+ * Locate the parents of `sessions` that live in a different working directory,
4
+ * keyed by the `parentSessionPath` the child recorded.
5
+ *
6
+ * Sessions are listed per working directory, so a child spawned into another
7
+ * worktree of the same project has a `parentSessionPath` that resolves to
8
+ * nothing in its own list. The parent's cwd and id are recorded in the parent
9
+ * session file's header, so one small header read per distinct missing parent is
10
+ * enough to point at it — no cross-workspace listing required.
11
+ *
12
+ * Parents already present in `sessions` are skipped without a read: they are
13
+ * linkable by path already, so the IO would buy nothing. Headers for a given
14
+ * path are immutable in practice, so `readHeader` is free to cache; this
15
+ * function stays stateless.
16
+ */
17
+ export async function locateOutOfListingParents(sessions, listingCwd, readHeader) {
18
+ const located = new Map();
19
+ for (const parentSessionPath of missingParentPaths(sessions)) {
20
+ const location = await parentLocation(parentSessionPath, readHeader);
21
+ // A parent sharing the listing's cwd is not "elsewhere": it is absent for
22
+ // some other reason (archived and moved, or simply not listed), and offering
23
+ // a jump to this same workspace would not help.
24
+ if (location === undefined || cwdPathsEqual(location.parentSessionCwd, listingCwd))
25
+ continue;
26
+ located.set(parentSessionPath, location);
27
+ }
28
+ return located;
29
+ }
30
+ /** Distinct recorded parent paths that no session in the listing occupies. */
31
+ function missingParentPaths(sessions) {
32
+ const listedPaths = new Set(sessions.map((session) => canonicalizeStoredCwd(session.path)));
33
+ const missing = new Set();
34
+ for (const session of sessions) {
35
+ const parentSessionPath = session.parentSessionPath;
36
+ if (parentSessionPath === undefined || parentSessionPath === "")
37
+ continue;
38
+ if (listedPaths.has(canonicalizeStoredCwd(parentSessionPath)))
39
+ continue;
40
+ missing.add(parentSessionPath);
41
+ }
42
+ return missing;
43
+ }
44
+ /**
45
+ * A parent whose header is unreadable or carries no cwd (very old session files)
46
+ * has no reportable location, so the browser keeps saying only that the parent is
47
+ * unavailable.
48
+ */
49
+ async function parentLocation(parentSessionPath, readHeader) {
50
+ const header = await readHeader(parentSessionPath);
51
+ if (header?.cwd === undefined)
52
+ return undefined;
53
+ return { parentSessionId: header.id, parentSessionCwd: canonicalizeStoredCwd(header.cwd) };
54
+ }
55
+ /**
56
+ * Count, per listed session path, how many sessions outside this listing record
57
+ * it as their parent, so a parent row can show that it has children that are not
58
+ * visible beneath it.
59
+ *
60
+ * Children are identified only by the parent session *file* path they recorded,
61
+ * which is exactly the link Pi writes into the child header; neither a header
62
+ * read of the parent nor the child's own location is required.
63
+ */
64
+ export function countOutOfListingChildren(sessions, childParentSessionPaths) {
65
+ const listedPaths = new Map(sessions.map((session) => [canonicalizeStoredCwd(session.path), session.path]));
66
+ const counts = new Map();
67
+ for (const parentSessionPath of childParentSessionPaths) {
68
+ const listedPath = listedPaths.get(canonicalizeStoredCwd(parentSessionPath));
69
+ if (listedPath === undefined)
70
+ continue;
71
+ counts.set(listedPath, (counts.get(listedPath) ?? 0) + 1);
72
+ }
73
+ return counts;
74
+ }
75
+ //# sourceMappingURL=parentSessionLocator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parentSessionLocator.js","sourceRoot":"","sources":["../../../src/server/sessions/parentSessionLocator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAkB9E;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,QAA2C,EAC3C,UAAkB,EAClB,UAA+B;IAE/B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAiC,CAAC;IACzD,KAAK,MAAM,iBAAiB,IAAI,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7D,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC;QACrE,0EAA0E;QAC1E,6EAA6E;QAC7E,gDAAgD;QAChD,IAAI,QAAQ,KAAK,SAAS,IAAI,aAAa,CAAC,QAAQ,CAAC,gBAAgB,EAAE,UAAU,CAAC;YAAE,SAAS;QAC7F,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,8EAA8E;AAC9E,SAAS,kBAAkB,CAAC,QAA2C;IACrE,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5F,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;QACpD,IAAI,iBAAiB,KAAK,SAAS,IAAI,iBAAiB,KAAK,EAAE;YAAE,SAAS;QAC1E,IAAI,WAAW,CAAC,GAAG,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,CAAC;YAAE,SAAS;QACxE,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,cAAc,CAAC,iBAAyB,EAAE,UAA+B;IACtF,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,iBAAiB,CAAC,CAAC;IACnD,IAAI,MAAM,EAAE,GAAG,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAChD,OAAO,EAAE,eAAe,EAAE,MAAM,CAAC,EAAE,EAAE,gBAAgB,EAAE,qBAAqB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;AAC7F,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,yBAAyB,CACvC,QAA2C,EAC3C,uBAA0C;IAE1C,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5G,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,KAAK,MAAM,iBAAiB,IAAI,uBAAuB,EAAE,CAAC;QACxD,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAC7E,IAAI,UAAU,KAAK,SAAS;YAAE,SAAS;QACvC,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}