@chainingintention/pi-web-cn 1.202608.9 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (187) hide show
  1. package/README.md +2 -0
  2. package/dist/cli.js +123 -72
  3. package/dist/cli.js.map +1 -1
  4. package/dist/client/assets/{CodeViewer-B9BLGnQ2.js → CodeViewer-DCl56K0Z.js} +2 -2
  5. package/dist/client/assets/{TerminalPanel-C1BWg5W2.js → TerminalPanel-DCvoEjUF.js} +6 -6
  6. package/dist/client/assets/{index-x7EWN9ro.js → index-CMvms5cF.js} +534 -512
  7. package/dist/client/index.html +1 -1
  8. package/dist/config.js +39 -18
  9. package/dist/config.js.map +1 -1
  10. package/dist/nativeServices/serviceAction.js +128 -0
  11. package/dist/nativeServices/serviceAction.js.map +1 -0
  12. package/dist/pi-web-plugins/git/browser/git-contract.js +108 -0
  13. package/dist/pi-web-plugins/git/browser/git-panel.js +609 -0
  14. package/dist/pi-web-plugins/git/browser/gitFileList.js +43 -0
  15. package/dist/pi-web-plugins/git/browser/gitFileShared.js +16 -0
  16. package/dist/pi-web-plugins/git/browser/gitFileTree.js +81 -0
  17. package/dist/pi-web-plugins/git/browser/gitFileViewPreference.js +35 -0
  18. package/dist/pi-web-plugins/git/browser/gitRoute.js +42 -0
  19. package/dist/pi-web-plugins/git/browser/pi-web-plugin.js +10 -0
  20. package/dist/pi-web-plugins/git/browser/unifiedDiff.js +301 -0
  21. package/dist/pi-web-plugins/git/git-backend.js +433 -0
  22. package/dist/pi-web-plugins/git/package.json +15 -0
  23. package/dist/pi-web-plugins/git/server-plugin.js +176 -0
  24. package/dist/pi-web-plugins/info/infoInternals.js +1 -1
  25. package/dist/pi-web-plugins/info/pi-web-plugin.js +2 -2
  26. package/dist/pi-web-plugins/relays/pi-web-plugin.js +1 -1
  27. package/dist/pi-web-plugins/relays/relayDiscovery.js +128 -23
  28. package/dist/pi-web-plugins/relays/relaysPanelElement.js +138 -16
  29. package/dist/pi-web-plugins/updates/pi-web-plugin.js +1 -1
  30. package/dist/pi-web-plugins/workspace-tasks/pi-web-plugin.js +1 -1
  31. package/dist/piWebVersionReport.js +63 -4
  32. package/dist/piWebVersionReport.js.map +1 -1
  33. package/dist/plugin-api.d.ts +40 -18
  34. package/dist/pluginRecoveryCli.js +172 -0
  35. package/dist/pluginRecoveryCli.js.map +1 -0
  36. package/dist/server/activity/workspaceActivityService.js +7 -1
  37. package/dist/server/activity/workspaceActivityService.js.map +1 -1
  38. package/dist/server/app.js +49 -23
  39. package/dist/server/app.js.map +1 -1
  40. package/dist/server/configRoutes.js +4 -5
  41. package/dist/server/configRoutes.js.map +1 -1
  42. package/dist/server/machines/machineClient.js +23 -4
  43. package/dist/server/machines/machineClient.js.map +1 -1
  44. package/dist/server/machines/machineProxyRoutes.js +162 -8
  45. package/dist/server/machines/machineProxyRoutes.js.map +1 -1
  46. package/dist/server/piWebPluginCatalog.js +441 -0
  47. package/dist/server/piWebPluginCatalog.js.map +1 -0
  48. package/dist/server/piWebPluginLifecycle.js +162 -0
  49. package/dist/server/piWebPluginLifecycle.js.map +1 -0
  50. package/dist/server/piWebPluginService.js +55 -7
  51. package/dist/server/piWebPluginService.js.map +1 -1
  52. package/dist/server/plugins/pluginBackendProxyRoutes.js +80 -0
  53. package/dist/server/plugins/pluginBackendProxyRoutes.js.map +1 -0
  54. package/dist/server/plugins/serverPluginExec.js +184 -0
  55. package/dist/server/plugins/serverPluginExec.js.map +1 -0
  56. package/dist/server/plugins/serverPluginRuntime.js +480 -0
  57. package/dist/server/plugins/serverPluginRuntime.js.map +1 -0
  58. package/dist/server/realtime/sessionEventHub.js +13 -0
  59. package/dist/server/realtime/sessionEventHub.js.map +1 -1
  60. package/dist/server/realtime/sessionEventScope.js +8 -1
  61. package/dist/server/realtime/sessionEventScope.js.map +1 -1
  62. package/dist/server/requestCancellation.js +28 -0
  63. package/dist/server/requestCancellation.js.map +1 -0
  64. package/dist/server/sessiond/agentProcessEnvironment.js +61 -0
  65. package/dist/server/sessiond/agentProcessEnvironment.js.map +1 -0
  66. package/dist/server/sessiond/managementProjectResolver.js +16 -0
  67. package/dist/server/sessiond/managementProjectResolver.js.map +1 -0
  68. package/dist/server/sessiond/pluginBackendRoutes.js +78 -0
  69. package/dist/server/sessiond/pluginBackendRoutes.js.map +1 -0
  70. package/dist/server/sessiond/sessionProxyRoutes.js +1 -0
  71. package/dist/server/sessiond/sessionProxyRoutes.js.map +1 -1
  72. package/dist/server/sessiond/sessionServiceDependencies.js +0 -1
  73. package/dist/server/sessiond/sessionServiceDependencies.js.map +1 -1
  74. package/dist/server/sessiond/sessiondStateOwnership.js +139 -0
  75. package/dist/server/sessiond/sessiondStateOwnership.js.map +1 -0
  76. package/dist/server/sessiond/workspaceCatalogRoutes.js +38 -0
  77. package/dist/server/sessiond/workspaceCatalogRoutes.js.map +1 -0
  78. package/dist/server/sessiond/workspaceRemovalRoutes.js +56 -0
  79. package/dist/server/sessiond/workspaceRemovalRoutes.js.map +1 -0
  80. package/dist/server/sessiond.js +98 -11
  81. package/dist/server/sessiond.js.map +1 -1
  82. package/dist/server/sessions/authService.js +15 -51
  83. package/dist/server/sessions/authService.js.map +1 -1
  84. package/dist/server/sessions/dockerEnvironmentFacts.js +181 -0
  85. package/dist/server/sessions/dockerEnvironmentFacts.js.map +1 -0
  86. package/dist/server/sessions/piSessionManagerGateway.js +129 -2
  87. package/dist/server/sessions/piSessionManagerGateway.js.map +1 -1
  88. package/dist/server/sessions/piSessionService.js +131 -97
  89. package/dist/server/sessions/piSessionService.js.map +1 -1
  90. package/dist/server/sessions/sessionCommandService.js +15 -1
  91. package/dist/server/sessions/sessionCommandService.js.map +1 -1
  92. package/dist/server/sessions/sessionEnvironmentFacts.js +48 -0
  93. package/dist/server/sessions/sessionEnvironmentFacts.js.map +1 -0
  94. package/dist/server/sessions/sessionFileFormat.js +27 -0
  95. package/dist/server/sessions/sessionFileFormat.js.map +1 -0
  96. package/dist/server/sessions/sessionFileHeader.js +82 -23
  97. package/dist/server/sessions/sessionFileHeader.js.map +1 -1
  98. package/dist/server/sessions/sessionRoutes.js +16 -2
  99. package/dist/server/sessions/sessionRoutes.js.map +1 -1
  100. package/dist/server/sessions/sessionSummaryScanner.js +491 -0
  101. package/dist/server/sessions/sessionSummaryScanner.js.map +1 -0
  102. package/dist/server/sessions/spawnSubsessionTool.js +4 -8
  103. package/dist/server/sessions/spawnSubsessionTool.js.map +1 -1
  104. package/dist/server/sessions/spawnTargetResolver.js +2 -2
  105. package/dist/server/sessions/spawnTargetResolver.js.map +1 -1
  106. package/dist/server/status/machineStatusRoutes.js +10 -0
  107. package/dist/server/status/machineStatusRoutes.js.map +1 -0
  108. package/dist/server/status/machineStatusService.js +115 -0
  109. package/dist/server/status/machineStatusService.js.map +1 -0
  110. package/dist/server/status/workspaceAttribution.js +71 -0
  111. package/dist/server/status/workspaceAttribution.js.map +1 -0
  112. package/dist/server/terminalProxyRoutes.js.map +1 -1
  113. package/dist/server/workspaceExplorerRoutes.js +12 -25
  114. package/dist/server/workspaceExplorerRoutes.js.map +1 -1
  115. package/dist/server/workspaces/effectivePathAccess.js +3 -2
  116. package/dist/server/workspaces/effectivePathAccess.js.map +1 -1
  117. package/dist/server/workspaces/fileContentService.js +17 -9
  118. package/dist/server/workspaces/fileContentService.js.map +1 -1
  119. package/dist/server/workspaces/fileOperationService.js +4 -17
  120. package/dist/server/workspaces/fileOperationService.js.map +1 -1
  121. package/dist/server/workspaces/filePreviewResponseHeaders.js +18 -0
  122. package/dist/server/workspaces/filePreviewResponseHeaders.js.map +1 -0
  123. package/dist/server/workspaces/filePreviewResponsePolicy.js +55 -0
  124. package/dist/server/workspaces/filePreviewResponsePolicy.js.map +1 -0
  125. package/dist/server/workspaces/filePreviewService.js +81 -0
  126. package/dist/server/workspaces/filePreviewService.js.map +1 -0
  127. package/dist/server/workspaces/projectWorkspaceCwds.js +2 -2
  128. package/dist/server/workspaces/projectWorkspaceCwds.js.map +1 -1
  129. package/dist/server/workspaces/sessionDaemonWorkspaceCatalog.js +416 -0
  130. package/dist/server/workspaces/sessionDaemonWorkspaceCatalog.js.map +1 -0
  131. package/dist/server/workspaces/workspaceCatalog.js +87 -0
  132. package/dist/server/workspaces/workspaceCatalog.js.map +1 -0
  133. package/dist/server/workspaces/workspaceContext.js +5 -5
  134. package/dist/server/workspaces/workspaceContext.js.map +1 -1
  135. package/dist/server/workspaces/workspaceDeletionRoutes.js +114 -99
  136. package/dist/server/workspaces/workspaceDeletionRoutes.js.map +1 -1
  137. package/dist/server/workspaces/workspaceProviderRegistry.js +650 -0
  138. package/dist/server/workspaces/workspaceProviderRegistry.js.map +1 -0
  139. package/dist/server/workspaces/workspaceRemovalService.js +258 -0
  140. package/dist/server/workspaces/workspaceRemovalService.js.map +1 -0
  141. package/dist/server/workspaces/workspaceRouteContext.js +2 -1
  142. package/dist/server/workspaces/workspaceRouteContext.js.map +1 -1
  143. package/dist/server/workspaces/workspaceRouteErrors.js +7 -0
  144. package/dist/server/workspaces/workspaceRouteErrors.js.map +1 -0
  145. package/dist/server/workspaces/worktreePreRemoveHook.js +39 -0
  146. package/dist/server/workspaces/worktreePreRemoveHook.js.map +1 -0
  147. package/dist/server-plugin-api.d.ts +115 -0
  148. package/dist/server-plugin-api.js +2 -0
  149. package/dist/server-plugin-api.js.map +1 -0
  150. package/dist/serverPluginRecovery.js +138 -0
  151. package/dist/serverPluginRecovery.js.map +1 -0
  152. package/dist/sessiond/config.js +6 -0
  153. package/dist/sessiond/config.js.map +1 -1
  154. package/dist/sessiond/sessionDaemonClient.js +7 -6
  155. package/dist/sessiond/sessionDaemonClient.js.map +1 -1
  156. package/dist/shared/apiTypes.js +2 -0
  157. package/dist/shared/apiTypes.js.map +1 -1
  158. package/dist/shared/capabilities.js +2 -0
  159. package/dist/shared/capabilities.js.map +1 -1
  160. package/dist/shared/federatedRoutes.js +28 -2
  161. package/dist/shared/federatedRoutes.js.map +1 -1
  162. package/dist/shared/machineStatus.js +60 -0
  163. package/dist/shared/machineStatus.js.map +1 -0
  164. package/dist/shared/pluginApiTypes.d.ts +155 -0
  165. package/dist/shared/pluginBackendProtocol.js +110 -0
  166. package/dist/shared/pluginBackendProtocol.js.map +1 -0
  167. package/dist/shared/pluginIds.js +3 -0
  168. package/dist/shared/pluginIds.js.map +1 -1
  169. package/dist/shared/pluginRecoveryCommands.js +14 -0
  170. package/dist/shared/pluginRecoveryCommands.js.map +1 -0
  171. package/dist/shared/workspaceFiles.js +41 -2
  172. package/dist/shared/workspaceFiles.js.map +1 -1
  173. package/dist/shared/workspaceRemovalProtocol.js +24 -0
  174. package/dist/shared/workspaceRemovalProtocol.js.map +1 -0
  175. package/docs/config.md +12 -5
  176. package/docs/plugins.md +15 -21
  177. package/package.json +26 -8
  178. package/server-plugin-api.d.ts +1 -0
  179. package/dist/client/assets/UnifiedDiffViewer-ClTQ6Ok0.js +0 -39
  180. package/dist/plugin-api/unstable.d.ts +0 -22
  181. package/dist/server/sessions/parentSessionLocator.js +0 -75
  182. package/dist/server/sessions/parentSessionLocator.js.map +0 -1
  183. package/dist/server/workspaces/imagePreviewService.js +0 -40
  184. package/dist/server/workspaces/imagePreviewService.js.map +0 -1
  185. package/dist/shared/apiTypes.d.ts +0 -1323
  186. package/dist/shared/thinkingLevels.d.ts +0 -29
  187. package/plugin-api/unstable.d.ts +0 -1
@@ -1,75 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,40 +0,0 @@
1
- import { createReadStream } from "node:fs";
2
- import { stat } from "node:fs/promises";
3
- import { extname } from "node:path";
4
- import { MAX_IMAGE_PREVIEW_BYTES, MAX_IMAGE_PREVIEW_LABEL } from "../../shared/workspaceFiles.js";
5
- import { resolveWorkspacePathAccessTarget } from "./pathAccessPolicy.js";
6
- const IMAGE_MIME_TYPES = {
7
- ".avif": "image/avif",
8
- ".bmp": "image/bmp",
9
- ".gif": "image/gif",
10
- ".ico": "image/x-icon",
11
- ".jpeg": "image/jpeg",
12
- ".jpg": "image/jpeg",
13
- ".png": "image/png",
14
- ".svg": "image/svg+xml",
15
- ".webp": "image/webp",
16
- };
17
- export function imageMimeTypeForPath(path) {
18
- return IMAGE_MIME_TYPES[extname(path).toLowerCase()];
19
- }
20
- export async function readWorkspaceImagePreview(rootPath, path, pathAccess) {
21
- if (path === undefined || path === "")
22
- throw new Error("path query parameter is required");
23
- const { target, displayPath } = await resolveWorkspacePathAccessTarget(rootPath, path, pathAccess);
24
- const s = await stat(target);
25
- if (!s.isFile())
26
- throw new Error("Path is not a file");
27
- const mimeType = imageMimeTypeForPath(displayPath);
28
- if (mimeType === undefined)
29
- throw new Error("Image preview is not supported for this file type");
30
- if (s.size > MAX_IMAGE_PREVIEW_BYTES)
31
- throw new Error(`Image is too large to preview (limit ${MAX_IMAGE_PREVIEW_LABEL})`);
32
- return {
33
- path: displayPath,
34
- mimeType,
35
- size: s.size,
36
- modifiedAt: s.mtime.toISOString(),
37
- stream: createReadStream(target),
38
- };
39
- }
40
- //# sourceMappingURL=imagePreviewService.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"imagePreviewService.js","sourceRoot":"","sources":["../../../src/server/workspaces/imagePreviewService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAmB,MAAM,SAAS,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAClG,OAAO,EAAE,gCAAgC,EAAE,MAAM,uBAAuB,CAAC;AAEzE,MAAM,gBAAgB,GAAuC;IAC3D,OAAO,EAAE,YAAY;IACrB,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,cAAc;IACtB,OAAO,EAAE,YAAY;IACrB,MAAM,EAAE,YAAY;IACpB,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,eAAe;IACvB,OAAO,EAAE,YAAY;CACtB,CAAC;AAUF,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,OAAO,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,QAAgB,EAAE,IAAwB,EAAE,UAAkC;IAC5H,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IAC3F,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,gCAAgC,CAAC,QAAQ,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;IACnG,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC;IAC7B,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;IACvD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;IACnD,IAAI,QAAQ,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACjG,IAAI,CAAC,CAAC,IAAI,GAAG,uBAAuB;QAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,uBAAuB,GAAG,CAAC,CAAC;IAC1H,OAAO;QACL,IAAI,EAAE,WAAW;QACjB,QAAQ;QACR,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE;QACjC,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC;KACjC,CAAC;AACJ,CAAC"}