@vincenthanxiaodu/pi-web 1.202608.1

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 (376) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +185 -0
  3. package/dist/cli.js +1149 -0
  4. package/dist/cli.js.map +1 -0
  5. package/dist/client/apple-touch-icon.png +0 -0
  6. package/dist/client/assets/CodeViewer-D_Q6ljLV.js +4 -0
  7. package/dist/client/assets/TerminalPanel-CTGixJIz.js +187 -0
  8. package/dist/client/assets/index-C2phil_t.js +5637 -0
  9. package/dist/client/assets/vendor-editor-core-CXO8gGab.js +12 -0
  10. package/dist/client/assets/vendor-editor-languages-CpW4sJsX.js +46 -0
  11. package/dist/client/assets/vendor-editor-legacy-CYBnW6ZU.js +1 -0
  12. package/dist/client/assets/vendor-terminal-BrP-ENHg.css +1 -0
  13. package/dist/client/assets/vendor-terminal-D8k4UKM2.js +35 -0
  14. package/dist/client/favicon.svg +11 -0
  15. package/dist/client/index.html +124 -0
  16. package/dist/client/manifest.webmanifest +24 -0
  17. package/dist/client/pwa-icon-192.png +0 -0
  18. package/dist/client/pwa-icon-512.png +0 -0
  19. package/dist/config.js +505 -0
  20. package/dist/config.js.map +1 -0
  21. package/dist/docker/piWebDockerCommandPlan.js +212 -0
  22. package/dist/docker/piWebDockerCommandPlan.js.map +1 -0
  23. package/dist/environment.js +4 -0
  24. package/dist/environment.js.map +1 -0
  25. package/dist/nativeServices/installedServiceDefinitions.js +602 -0
  26. package/dist/nativeServices/installedServiceDefinitions.js.map +1 -0
  27. package/dist/nativeServices/serviceAction.js +174 -0
  28. package/dist/nativeServices/serviceAction.js.map +1 -0
  29. package/dist/nativeServices/serviceDoctor.js +783 -0
  30. package/dist/nativeServices/serviceDoctor.js.map +1 -0
  31. package/dist/nativeServices/serviceInstall.js +35 -0
  32. package/dist/nativeServices/serviceInstall.js.map +1 -0
  33. package/dist/nativeServices/servicePlan.js +358 -0
  34. package/dist/nativeServices/servicePlan.js.map +1 -0
  35. package/dist/nativeServices/serviceProbe.js +447 -0
  36. package/dist/nativeServices/serviceProbe.js.map +1 -0
  37. package/dist/nativeServices/serviceRendering.js +132 -0
  38. package/dist/nativeServices/serviceRendering.js.map +1 -0
  39. package/dist/pi-web-plugins/git/browser/git-contract.js +108 -0
  40. package/dist/pi-web-plugins/git/browser/git-panel.js +609 -0
  41. package/dist/pi-web-plugins/git/browser/gitFileList.js +43 -0
  42. package/dist/pi-web-plugins/git/browser/gitFileShared.js +16 -0
  43. package/dist/pi-web-plugins/git/browser/gitFileTree.js +81 -0
  44. package/dist/pi-web-plugins/git/browser/gitFileViewPreference.js +35 -0
  45. package/dist/pi-web-plugins/git/browser/gitRoute.js +42 -0
  46. package/dist/pi-web-plugins/git/browser/pi-web-plugin.js +10 -0
  47. package/dist/pi-web-plugins/git/browser/unifiedDiff.js +301 -0
  48. package/dist/pi-web-plugins/git/git-backend.js +439 -0
  49. package/dist/pi-web-plugins/git/package.json +16 -0
  50. package/dist/pi-web-plugins/git/server-plugin.js +176 -0
  51. package/dist/pi-web-plugins/info/infoInternals.js +222 -0
  52. package/dist/pi-web-plugins/info/package.json +9 -0
  53. package/dist/pi-web-plugins/info/pi-web-plugin.js +48 -0
  54. package/dist/pi-web-plugins/relays/markdownDocument.js +81 -0
  55. package/dist/pi-web-plugins/relays/package.json +9 -0
  56. package/dist/pi-web-plugins/relays/pi-web-plugin.js +44 -0
  57. package/dist/pi-web-plugins/relays/relayDiscovery.js +228 -0
  58. package/dist/pi-web-plugins/relays/relaysPanelElement.js +550 -0
  59. package/dist/pi-web-plugins/relays/vendor/README.md +24 -0
  60. package/dist/pi-web-plugins/relays/vendor/marked.esm.js +76 -0
  61. package/dist/pi-web-plugins/updates/package.json +9 -0
  62. package/dist/pi-web-plugins/updates/pi-web-plugin.js +185 -0
  63. package/dist/pi-web-plugins/updates/updatesLogic.js +97 -0
  64. package/dist/pi-web-plugins/workspace-tasks/config.js +91 -0
  65. package/dist/pi-web-plugins/workspace-tasks/package.json +9 -0
  66. package/dist/pi-web-plugins/workspace-tasks/pi-web-plugin.js +48 -0
  67. package/dist/pi-web-plugins/workspace-tasks/taskRunner.js +12 -0
  68. package/dist/pi-web-plugins/workspace-tasks/tasksPanelElement.js +288 -0
  69. package/dist/pi-web-plugins/workspace-tasks/workspaceTasksClient.js +47 -0
  70. package/dist/piWebVersionReport.js +278 -0
  71. package/dist/piWebVersionReport.js.map +1 -0
  72. package/dist/plugin-api.d.ts +222 -0
  73. package/dist/pluginRecoveryCli.js +172 -0
  74. package/dist/pluginRecoveryCli.js.map +1 -0
  75. package/dist/server/activeAgentProfileProvider.js +25 -0
  76. package/dist/server/activeAgentProfileProvider.js.map +1 -0
  77. package/dist/server/activity/workspaceActivityService.js +106 -0
  78. package/dist/server/activity/workspaceActivityService.js.map +1 -0
  79. package/dist/server/app.js +218 -0
  80. package/dist/server/app.js.map +1 -0
  81. package/dist/server/browserMessageProjection.js +54 -0
  82. package/dist/server/browserMessageProjection.js.map +1 -0
  83. package/dist/server/configRoutes.js +293 -0
  84. package/dist/server/configRoutes.js.map +1 -0
  85. package/dist/server/diagnostics/nodePtyNativeModule.js +36 -0
  86. package/dist/server/diagnostics/nodePtyNativeModule.js.map +1 -0
  87. package/dist/server/diagnostics/nodePtySpawnHelper.js +135 -0
  88. package/dist/server/diagnostics/nodePtySpawnHelper.js.map +1 -0
  89. package/dist/server/git/gitEnv.js +15 -0
  90. package/dist/server/git/gitEnv.js.map +1 -0
  91. package/dist/server/goals/goalArchive.js +184 -0
  92. package/dist/server/goals/goalArchive.js.map +1 -0
  93. package/dist/server/goals/goalFile.js +200 -0
  94. package/dist/server/goals/goalFile.js.map +1 -0
  95. package/dist/server/goals/goalStore.js +65 -0
  96. package/dist/server/goals/goalStore.js.map +1 -0
  97. package/dist/server/index.js +7 -0
  98. package/dist/server/index.js.map +1 -0
  99. package/dist/server/machines/machineClient.js +191 -0
  100. package/dist/server/machines/machineClient.js.map +1 -0
  101. package/dist/server/machines/machinePluginProxyRoutes.js +247 -0
  102. package/dist/server/machines/machinePluginProxyRoutes.js.map +1 -0
  103. package/dist/server/machines/machineProxyRoutes.js +318 -0
  104. package/dist/server/machines/machineProxyRoutes.js.map +1 -0
  105. package/dist/server/machines/machineRoutes.js +56 -0
  106. package/dist/server/machines/machineRoutes.js.map +1 -0
  107. package/dist/server/machines/machineService.js +274 -0
  108. package/dist/server/machines/machineService.js.map +1 -0
  109. package/dist/server/machines/machineStore.js +143 -0
  110. package/dist/server/machines/machineStore.js.map +1 -0
  111. package/dist/server/piPackageRoutes.js +91 -0
  112. package/dist/server/piPackageRoutes.js.map +1 -0
  113. package/dist/server/piPackageService.js +101 -0
  114. package/dist/server/piPackageService.js.map +1 -0
  115. package/dist/server/piWebPluginCatalog.js +584 -0
  116. package/dist/server/piWebPluginCatalog.js.map +1 -0
  117. package/dist/server/piWebPluginLifecycle.js +162 -0
  118. package/dist/server/piWebPluginLifecycle.js.map +1 -0
  119. package/dist/server/piWebPluginService.js +224 -0
  120. package/dist/server/piWebPluginService.js.map +1 -0
  121. package/dist/server/piWebReleaseLookupCache.js +37 -0
  122. package/dist/server/piWebReleaseLookupCache.js.map +1 -0
  123. package/dist/server/piWebStatus.js +624 -0
  124. package/dist/server/piWebStatus.js.map +1 -0
  125. package/dist/server/piWebStatusCache.js +45 -0
  126. package/dist/server/piWebStatusCache.js.map +1 -0
  127. package/dist/server/plugins/pluginBackendProxyRoutes.js +69 -0
  128. package/dist/server/plugins/pluginBackendProxyRoutes.js.map +1 -0
  129. package/dist/server/plugins/serverPluginExec.js +184 -0
  130. package/dist/server/plugins/serverPluginExec.js.map +1 -0
  131. package/dist/server/plugins/serverPluginRuntime.js +480 -0
  132. package/dist/server/plugins/serverPluginRuntime.js.map +1 -0
  133. package/dist/server/projectTrustRoutes.js +80 -0
  134. package/dist/server/projectTrustRoutes.js.map +1 -0
  135. package/dist/server/projects/directorySuggestions.js +207 -0
  136. package/dist/server/projects/directorySuggestions.js.map +1 -0
  137. package/dist/server/projects/projectService.js +33 -0
  138. package/dist/server/projects/projectService.js.map +1 -0
  139. package/dist/server/realtime/sessionEventHub.js +93 -0
  140. package/dist/server/realtime/sessionEventHub.js.map +1 -0
  141. package/dist/server/requestCancellation.js +32 -0
  142. package/dist/server/requestCancellation.js.map +1 -0
  143. package/dist/server/sessiond/agentHttpDispatcher.js +108 -0
  144. package/dist/server/sessiond/agentHttpDispatcher.js.map +1 -0
  145. package/dist/server/sessiond/agentProcessEnvironment.js +61 -0
  146. package/dist/server/sessiond/agentProcessEnvironment.js.map +1 -0
  147. package/dist/server/sessiond/pluginBackendRoutes.js +64 -0
  148. package/dist/server/sessiond/pluginBackendRoutes.js.map +1 -0
  149. package/dist/server/sessiond/sessionDaemonShutdown.js +31 -0
  150. package/dist/server/sessiond/sessionDaemonShutdown.js.map +1 -0
  151. package/dist/server/sessiond/sessionProxyRoutes.js +61 -0
  152. package/dist/server/sessiond/sessionProxyRoutes.js.map +1 -0
  153. package/dist/server/sessiond/sessionServiceDependencies.js +34 -0
  154. package/dist/server/sessiond/sessionServiceDependencies.js.map +1 -0
  155. package/dist/server/sessiond/sessiondStateOwnership.js +235 -0
  156. package/dist/server/sessiond/sessiondStateOwnership.js.map +1 -0
  157. package/dist/server/sessiond/workspaceCatalogRoutes.js +31 -0
  158. package/dist/server/sessiond/workspaceCatalogRoutes.js.map +1 -0
  159. package/dist/server/sessiond/workspaceRemovalRoutes.js +41 -0
  160. package/dist/server/sessiond/workspaceRemovalRoutes.js.map +1 -0
  161. package/dist/server/sessiond.js +387 -0
  162. package/dist/server/sessiond.js.map +1 -0
  163. package/dist/server/sessions/askUserTool.js +102 -0
  164. package/dist/server/sessions/askUserTool.js.map +1 -0
  165. package/dist/server/sessions/attachmentService.js +119 -0
  166. package/dist/server/sessions/attachmentService.js.map +1 -0
  167. package/dist/server/sessions/authProviderOptions.js +50 -0
  168. package/dist/server/sessions/authProviderOptions.js.map +1 -0
  169. package/dist/server/sessions/authRoutes.js +59 -0
  170. package/dist/server/sessions/authRoutes.js.map +1 -0
  171. package/dist/server/sessions/authService.js +122 -0
  172. package/dist/server/sessions/authService.js.map +1 -0
  173. package/dist/server/sessions/builtinCommands.js +27 -0
  174. package/dist/server/sessions/builtinCommands.js.map +1 -0
  175. package/dist/server/sessions/dockerEnvironmentFacts.js +254 -0
  176. package/dist/server/sessions/dockerEnvironmentFacts.js.map +1 -0
  177. package/dist/server/sessions/editPreview.js +196 -0
  178. package/dist/server/sessions/editPreview.js.map +1 -0
  179. package/dist/server/sessions/extensionDialogWaiters.js +76 -0
  180. package/dist/server/sessions/extensionDialogWaiters.js.map +1 -0
  181. package/dist/server/sessions/globalProviderPolicy.js +167 -0
  182. package/dist/server/sessions/globalProviderPolicy.js.map +1 -0
  183. package/dist/server/sessions/interruptedRunStore.js +147 -0
  184. package/dist/server/sessions/interruptedRunStore.js.map +1 -0
  185. package/dist/server/sessions/messagePaging.js +43 -0
  186. package/dist/server/sessions/messagePaging.js.map +1 -0
  187. package/dist/server/sessions/modelCatalogRefresher.js +193 -0
  188. package/dist/server/sessions/modelCatalogRefresher.js.map +1 -0
  189. package/dist/server/sessions/oauthLoginFlowService.js +346 -0
  190. package/dist/server/sessions/oauthLoginFlowService.js.map +1 -0
  191. package/dist/server/sessions/pendingAskStore.js +275 -0
  192. package/dist/server/sessions/pendingAskStore.js.map +1 -0
  193. package/dist/server/sessions/pendingExtensionDialogStore.js +196 -0
  194. package/dist/server/sessions/pendingExtensionDialogStore.js.map +1 -0
  195. package/dist/server/sessions/piSessionManagerGateway.js +246 -0
  196. package/dist/server/sessions/piSessionManagerGateway.js.map +1 -0
  197. package/dist/server/sessions/piSessionService.js +4059 -0
  198. package/dist/server/sessions/piSessionService.js.map +1 -0
  199. package/dist/server/sessions/plainTextTheme.js +112 -0
  200. package/dist/server/sessions/plainTextTheme.js.map +1 -0
  201. package/dist/server/sessions/sessionArchiveStore.js +273 -0
  202. package/dist/server/sessions/sessionArchiveStore.js.map +1 -0
  203. package/dist/server/sessions/sessionArchiveTree.js +35 -0
  204. package/dist/server/sessions/sessionArchiveTree.js.map +1 -0
  205. package/dist/server/sessions/sessionCleanup.js +157 -0
  206. package/dist/server/sessions/sessionCleanup.js.map +1 -0
  207. package/dist/server/sessions/sessionCommandService.js +336 -0
  208. package/dist/server/sessions/sessionCommandService.js.map +1 -0
  209. package/dist/server/sessions/sessionEnvironmentFacts.js +48 -0
  210. package/dist/server/sessions/sessionEnvironmentFacts.js.map +1 -0
  211. package/dist/server/sessions/sessionFileFormat.js +27 -0
  212. package/dist/server/sessions/sessionFileFormat.js.map +1 -0
  213. package/dist/server/sessions/sessionFileHeader.js +104 -0
  214. package/dist/server/sessions/sessionFileHeader.js.map +1 -0
  215. package/dist/server/sessions/sessionModelScope.js +141 -0
  216. package/dist/server/sessions/sessionModelScope.js.map +1 -0
  217. package/dist/server/sessions/sessionNameGenerator.js +90 -0
  218. package/dist/server/sessions/sessionNameGenerator.js.map +1 -0
  219. package/dist/server/sessions/sessionNotificationStore.js +484 -0
  220. package/dist/server/sessions/sessionNotificationStore.js.map +1 -0
  221. package/dist/server/sessions/sessionRoutes.js +744 -0
  222. package/dist/server/sessions/sessionRoutes.js.map +1 -0
  223. package/dist/server/sessions/sessionRuntimeStore.js +2 -0
  224. package/dist/server/sessions/sessionRuntimeStore.js.map +1 -0
  225. package/dist/server/sessions/sessionService.js +2 -0
  226. package/dist/server/sessions/sessionService.js.map +1 -0
  227. package/dist/server/sessions/sessionSummaryScanner.js +491 -0
  228. package/dist/server/sessions/sessionSummaryScanner.js.map +1 -0
  229. package/dist/server/sessions/sessionTreeProjection.js +250 -0
  230. package/dist/server/sessions/sessionTreeProjection.js.map +1 -0
  231. package/dist/server/sessions/sessionUnreadStore.js +520 -0
  232. package/dist/server/sessions/sessionUnreadStore.js.map +1 -0
  233. package/dist/server/sessions/shutdownDrain.js +73 -0
  234. package/dist/server/sessions/shutdownDrain.js.map +1 -0
  235. package/dist/server/sessions/spawnSessionTool.js +48 -0
  236. package/dist/server/sessions/spawnSessionTool.js.map +1 -0
  237. package/dist/server/sessions/spawnSubsessionTool.js +216 -0
  238. package/dist/server/sessions/spawnSubsessionTool.js.map +1 -0
  239. package/dist/server/sessions/spawnTargetResolver.js +23 -0
  240. package/dist/server/sessions/spawnTargetResolver.js.map +1 -0
  241. package/dist/server/sessions/subsessionTranscript.js +235 -0
  242. package/dist/server/sessions/subsessionTranscript.js.map +1 -0
  243. package/dist/server/status/machineStatusRoutes.js +8 -0
  244. package/dist/server/status/machineStatusRoutes.js.map +1 -0
  245. package/dist/server/status/machineStatusService.js +181 -0
  246. package/dist/server/status/machineStatusService.js.map +1 -0
  247. package/dist/server/status/workspaceAttribution.js +87 -0
  248. package/dist/server/status/workspaceAttribution.js.map +1 -0
  249. package/dist/server/storage/projectStore.js +88 -0
  250. package/dist/server/storage/projectStore.js.map +1 -0
  251. package/dist/server/terminalProxyRoutes.js +141 -0
  252. package/dist/server/terminalProxyRoutes.js.map +1 -0
  253. package/dist/server/terminals/terminalRoutes.js +155 -0
  254. package/dist/server/terminals/terminalRoutes.js.map +1 -0
  255. package/dist/server/terminals/terminalService.js +305 -0
  256. package/dist/server/terminals/terminalService.js.map +1 -0
  257. package/dist/server/terminals/terminalSize.js +17 -0
  258. package/dist/server/terminals/terminalSize.js.map +1 -0
  259. package/dist/server/types.js +2 -0
  260. package/dist/server/types.js.map +1 -0
  261. package/dist/server/updates/fleetRoutes.js +111 -0
  262. package/dist/server/updates/fleetRoutes.js.map +1 -0
  263. package/dist/server/updates/restartRoutes.js +48 -0
  264. package/dist/server/updates/restartRoutes.js.map +1 -0
  265. package/dist/server/updates/selfUpdateRoutes.js +145 -0
  266. package/dist/server/updates/selfUpdateRoutes.js.map +1 -0
  267. package/dist/server/webSocketBridge.js +32 -0
  268. package/dist/server/webSocketBridge.js.map +1 -0
  269. package/dist/server/workingDirectory.js +44 -0
  270. package/dist/server/workingDirectory.js.map +1 -0
  271. package/dist/server/workspaceExplorerRoutes.js +147 -0
  272. package/dist/server/workspaceExplorerRoutes.js.map +1 -0
  273. package/dist/server/workspaces/effectivePathAccess.js +8 -0
  274. package/dist/server/workspaces/effectivePathAccess.js.map +1 -0
  275. package/dist/server/workspaces/fileContentService.js +190 -0
  276. package/dist/server/workspaces/fileContentService.js.map +1 -0
  277. package/dist/server/workspaces/filePreviewResponseHeaders.js +18 -0
  278. package/dist/server/workspaces/filePreviewResponseHeaders.js.map +1 -0
  279. package/dist/server/workspaces/filePreviewResponsePolicy.js +55 -0
  280. package/dist/server/workspaces/filePreviewResponsePolicy.js.map +1 -0
  281. package/dist/server/workspaces/filePreviewService.js +81 -0
  282. package/dist/server/workspaces/filePreviewService.js.map +1 -0
  283. package/dist/server/workspaces/fileSuggestions.js +520 -0
  284. package/dist/server/workspaces/fileSuggestions.js.map +1 -0
  285. package/dist/server/workspaces/fileTreeService.js +35 -0
  286. package/dist/server/workspaces/fileTreeService.js.map +1 -0
  287. package/dist/server/workspaces/pathAccessPolicy.js +90 -0
  288. package/dist/server/workspaces/pathAccessPolicy.js.map +1 -0
  289. package/dist/server/workspaces/pathSafety.js +45 -0
  290. package/dist/server/workspaces/pathSafety.js.map +1 -0
  291. package/dist/server/workspaces/projectPiWebConfig.js +61 -0
  292. package/dist/server/workspaces/projectPiWebConfig.js.map +1 -0
  293. package/dist/server/workspaces/projectWorkspaceCwds.js +17 -0
  294. package/dist/server/workspaces/projectWorkspaceCwds.js.map +1 -0
  295. package/dist/server/workspaces/sessionDaemonWorkspaceCatalog.js +402 -0
  296. package/dist/server/workspaces/sessionDaemonWorkspaceCatalog.js.map +1 -0
  297. package/dist/server/workspaces/workspaceCatalog.js +47 -0
  298. package/dist/server/workspaces/workspaceCatalog.js.map +1 -0
  299. package/dist/server/workspaces/workspaceContext.js +6 -0
  300. package/dist/server/workspaces/workspaceContext.js.map +1 -0
  301. package/dist/server/workspaces/workspaceDeletionRoutes.js +49 -0
  302. package/dist/server/workspaces/workspaceDeletionRoutes.js.map +1 -0
  303. package/dist/server/workspaces/workspaceProviderRegistry.js +651 -0
  304. package/dist/server/workspaces/workspaceProviderRegistry.js.map +1 -0
  305. package/dist/server/workspaces/workspaceRemovalService.js +256 -0
  306. package/dist/server/workspaces/workspaceRemovalService.js.map +1 -0
  307. package/dist/server/workspaces/workspaceRouteErrors.js +7 -0
  308. package/dist/server/workspaces/workspaceRouteErrors.js.map +1 -0
  309. package/dist/server/workspaces/worktreePreRemoveHook.js +39 -0
  310. package/dist/server/workspaces/worktreePreRemoveHook.js.map +1 -0
  311. package/dist/server-plugin-api.d.ts +140 -0
  312. package/dist/server-plugin-api.js +2 -0
  313. package/dist/server-plugin-api.js.map +1 -0
  314. package/dist/serverPluginRecovery.js +138 -0
  315. package/dist/serverPluginRecovery.js.map +1 -0
  316. package/dist/sessiond/activeAgentProfile.js +12 -0
  317. package/dist/sessiond/activeAgentProfile.js.map +1 -0
  318. package/dist/sessiond/config.js +20 -0
  319. package/dist/sessiond/config.js.map +1 -0
  320. package/dist/sessiond/sessionDaemonClient.js +105 -0
  321. package/dist/sessiond/sessionDaemonClient.js.map +1 -0
  322. package/dist/shared/activeAgentProfile.js +37 -0
  323. package/dist/shared/activeAgentProfile.js.map +1 -0
  324. package/dist/shared/activity.js +16 -0
  325. package/dist/shared/activity.js.map +1 -0
  326. package/dist/shared/apiTypes.js +41 -0
  327. package/dist/shared/apiTypes.js.map +1 -0
  328. package/dist/shared/capabilities.js +37 -0
  329. package/dist/shared/capabilities.js.map +1 -0
  330. package/dist/shared/federatedRoutes.js +127 -0
  331. package/dist/shared/federatedRoutes.js.map +1 -0
  332. package/dist/shared/machinePluginIds.js +43 -0
  333. package/dist/shared/machinePluginIds.js.map +1 -0
  334. package/dist/shared/machineStatus.js +94 -0
  335. package/dist/shared/machineStatus.js.map +1 -0
  336. package/dist/shared/piWebStatusParsing.js +141 -0
  337. package/dist/shared/piWebStatusParsing.js.map +1 -0
  338. package/dist/shared/pluginApiTypes.d.ts +150 -0
  339. package/dist/shared/pluginApiTypes.js +3 -0
  340. package/dist/shared/pluginApiTypes.js.map +1 -0
  341. package/dist/shared/pluginBackendProtocol.js +110 -0
  342. package/dist/shared/pluginBackendProtocol.js.map +1 -0
  343. package/dist/shared/pluginIds.js +10 -0
  344. package/dist/shared/pluginIds.js.map +1 -0
  345. package/dist/shared/pluginRecoveryCommands.js +14 -0
  346. package/dist/shared/pluginRecoveryCommands.js.map +1 -0
  347. package/dist/shared/promptAttachments.js +92 -0
  348. package/dist/shared/promptAttachments.js.map +1 -0
  349. package/dist/shared/selfUpdate.js +3 -0
  350. package/dist/shared/selfUpdate.js.map +1 -0
  351. package/dist/shared/thinkingLevels.js +31 -0
  352. package/dist/shared/thinkingLevels.js.map +1 -0
  353. package/dist/shared/workspaceDeletion.js +12 -0
  354. package/dist/shared/workspaceDeletion.js.map +1 -0
  355. package/dist/shared/workspaceFiles.js +42 -0
  356. package/dist/shared/workspaceFiles.js.map +1 -0
  357. package/dist/shared/workspaceRemovalProtocol.js +24 -0
  358. package/dist/shared/workspaceRemovalProtocol.js.map +1 -0
  359. package/docs/assets/favicon.svg +11 -0
  360. package/docs/assets/pi-web-banner.png +0 -0
  361. package/docs/assets/pi-web-desktop.png +0 -0
  362. package/docs/assets/pi-web-mobile.png +0 -0
  363. package/docs/assets/pi-web-tablet.png +0 -0
  364. package/docs/config.md +444 -0
  365. package/docs/plugins.md +1305 -0
  366. package/examples/workspace-provider-plugin/README.md +52 -0
  367. package/examples/workspace-provider-plugin/package.json +25 -0
  368. package/examples/workspace-provider-plugin/src/browser/index.ts +69 -0
  369. package/examples/workspace-provider-plugin/src/server.ts +64 -0
  370. package/examples/workspace-provider-plugin/tsconfig.json +21 -0
  371. package/extensions/README-pi-web-restart-migration.md +45 -0
  372. package/extensions/pi-web.ts +324 -0
  373. package/install.sh +5 -0
  374. package/package.json +173 -0
  375. package/plugin-api.d.ts +1 -0
  376. package/server-plugin-api.d.ts +1 -0
@@ -0,0 +1,480 @@
1
+ import { pathToFileURL } from "node:url";
2
+ import { createServerPluginExecFile } from "./serverPluginExec.js";
3
+ const DEFAULT_LIFECYCLE_TIMEOUT_MS = 10_000;
4
+ /**
5
+ * Resolves exactly one desired catalog snapshot and activates its server
6
+ * entries. The resulting runtime is immutable except for explicit shutdown;
7
+ * v1 intentionally has no hot reload or unload path.
8
+ */
9
+ export async function createServerPluginRuntime(options) {
10
+ if (options.safeStart === "none") {
11
+ return await ServerPluginRuntime.activate({ plugins: [], diagnostics: [] }, options);
12
+ }
13
+ const snapshot = await options.catalog.snapshot(options.safeStart === "bundled-only" ? { scope: "bundled" } : undefined);
14
+ return await ServerPluginRuntime.activate(snapshot, options);
15
+ }
16
+ export class ServerPluginRuntime {
17
+ constructor(safeStart, diagnostics, logger, importer, execFile, lifecycleTimeoutMs) {
18
+ this.safeStart = safeStart;
19
+ this.diagnostics = diagnostics;
20
+ this.logger = logger;
21
+ this.importer = importer;
22
+ this.execFile = execFile;
23
+ this.lifecycleTimeoutMs = lifecycleTimeoutMs;
24
+ this.recordsById = new Map();
25
+ this.activePlugins = [];
26
+ this.stopped = false;
27
+ }
28
+ static async activate(snapshot, options) {
29
+ const runtime = new ServerPluginRuntime(options.safeStart, Object.freeze(snapshot.diagnostics.map((diagnostic) => Object.freeze({ ...diagnostic }))), options.logger, options.importer ?? importServerPluginModule, options.execFile ?? createServerPluginExecFile(), positiveInteger(options.lifecycleTimeoutMs, DEFAULT_LIFECYCLE_TIMEOUT_MS, "lifecycleTimeoutMs"));
30
+ try {
31
+ await runtime.start(snapshot.plugins);
32
+ return runtime;
33
+ }
34
+ catch (error) {
35
+ await runtime.stop();
36
+ throw error;
37
+ }
38
+ }
39
+ safeStartLevel() {
40
+ return this.safeStart;
41
+ }
42
+ catalogDiagnostics() {
43
+ return this.diagnostics;
44
+ }
45
+ healthRecords() {
46
+ return Object.freeze([...this.recordsById.values()]
47
+ .sort((left, right) => left.pluginId.localeCompare(right.pluginId))
48
+ .map((record) => Object.freeze({ ...record })));
49
+ }
50
+ providerContributions() {
51
+ return Object.freeze(this.activePlugins.flatMap((active) => active.contribution === undefined ? [] : [active.contribution]));
52
+ }
53
+ async inspectHealth() {
54
+ const inspections = [];
55
+ for (const active of this.activePlugins) {
56
+ const callback = active.activation.health?.bind(active.activation);
57
+ if (callback === undefined) {
58
+ inspections.push(Object.freeze({ pluginId: active.entry.id, health: Object.freeze({ status: "healthy" }) }));
59
+ continue;
60
+ }
61
+ try {
62
+ const result = await runBounded(active.entry.id, "health", this.lifecycleTimeoutMs, (signal) => callback(signal));
63
+ inspections.push(Object.freeze({ pluginId: active.entry.id, health: parseHealth(result) }));
64
+ }
65
+ catch (error) {
66
+ const message = errorMessage(error);
67
+ inspections.push(Object.freeze({
68
+ pluginId: active.entry.id,
69
+ health: Object.freeze({ status: "unhealthy", message }),
70
+ phase: "health",
71
+ error: message,
72
+ }));
73
+ this.logger.warn({ err: error, pluginId: active.entry.id, phase: "health" }, "server plugin health check failed");
74
+ }
75
+ }
76
+ return Object.freeze(inspections);
77
+ }
78
+ /** Stops every successfully published plugin in reverse activation order. */
79
+ async stop() {
80
+ if (this.stopped)
81
+ return;
82
+ this.stopped = true;
83
+ const activePlugins = [...this.activePlugins].reverse();
84
+ this.activePlugins = [];
85
+ for (const active of activePlugins) {
86
+ const stop = active.activation.stop?.bind(active.activation);
87
+ if (stop === undefined)
88
+ continue;
89
+ try {
90
+ await runBounded(active.entry.id, "stop", this.lifecycleTimeoutMs, (signal) => stop(signal));
91
+ }
92
+ catch (error) {
93
+ this.recordsById.set(active.entry.id, recordFor(active.entry, {
94
+ state: "failed",
95
+ name: active.plugin.name,
96
+ phase: "stop",
97
+ message: errorMessage(error),
98
+ }));
99
+ this.logger.error({ err: error, pluginId: active.entry.id, phase: "stop" }, "server plugin stop failed");
100
+ }
101
+ }
102
+ }
103
+ async start(entries) {
104
+ const serverEntries = entries
105
+ .filter((entry) => entry.serverModule !== undefined)
106
+ .sort((left, right) => left.id.localeCompare(right.id));
107
+ for (const entry of serverEntries)
108
+ await this.activateEntry(entry);
109
+ }
110
+ async activateEntry(entry) {
111
+ const disabledMessage = disabledReason(entry, this.safeStart);
112
+ if (disabledMessage !== undefined) {
113
+ this.recordsById.set(entry.id, recordFor(entry, { state: "disabled", message: disabledMessage }));
114
+ this.logger.info({ pluginId: entry.id, reason: disabledMessage }, "server plugin skipped");
115
+ return;
116
+ }
117
+ let phase = "validate";
118
+ let plugin;
119
+ let activation;
120
+ try {
121
+ const settings = cloneJsonObject(entry.settings, `settings for server plugin ${entry.id}`);
122
+ phase = "import";
123
+ const moduleUrl = serverModuleUrl(entry);
124
+ const imported = await runBounded(entry.id, phase, this.lifecycleTimeoutMs, (signal) => this.importer(moduleUrl, signal));
125
+ phase = "validate";
126
+ const loadedPlugin = parsePluginExport(imported);
127
+ plugin = loadedPlugin;
128
+ phase = "activate";
129
+ const scopedLogger = createScopedLogger(entry.id, this.logger);
130
+ const activationValue = await runBounded(entry.id, phase, this.lifecycleTimeoutMs, (signal) => loadedPlugin.activate(Object.freeze({
131
+ apiVersion: 1,
132
+ pluginId: entry.id,
133
+ packageRoot: entry.packageRoot,
134
+ logger: scopedLogger,
135
+ settings,
136
+ execFile: this.execFile,
137
+ signal,
138
+ })));
139
+ phase = "validate";
140
+ const loadedActivation = parseActivation(activationValue);
141
+ activation = loadedActivation;
142
+ phase = "start";
143
+ const start = loadedActivation.start?.bind(loadedActivation);
144
+ if (start !== undefined) {
145
+ await runBounded(entry.id, phase, this.lifecycleTimeoutMs, (signal) => start(signal));
146
+ }
147
+ const contribution = loadedActivation.workspaceProvider === undefined
148
+ ? undefined
149
+ : Object.freeze({
150
+ pluginId: entry.id,
151
+ pluginName: loadedPlugin.name,
152
+ packageRoot: entry.packageRoot,
153
+ source: entry.source,
154
+ scope: entry.scope,
155
+ moduleRevision: requireServerModule(entry).revision,
156
+ provider: loadedActivation.workspaceProvider,
157
+ });
158
+ this.activePlugins.push(Object.freeze({
159
+ entry,
160
+ plugin: loadedPlugin,
161
+ activation: loadedActivation,
162
+ ...(contribution === undefined ? {} : { contribution }),
163
+ }));
164
+ this.recordsById.set(entry.id, recordFor(entry, { state: "active", name: loadedPlugin.name }));
165
+ this.logger.info({ pluginId: entry.id, pluginName: loadedPlugin.name }, "server plugin activated");
166
+ }
167
+ catch (error) {
168
+ const rollbackError = phase === "start" && activation?.stop !== undefined
169
+ ? await this.rollbackStart(entry.id, activation)
170
+ : undefined;
171
+ const message = rollbackError === undefined
172
+ ? errorMessage(error)
173
+ : `${errorMessage(error)}; startup rollback failed: ${errorMessage(rollbackError)}`;
174
+ const state = error instanceof IncompatibleServerPluginError ? "incompatible" : "failed";
175
+ this.recordsById.set(entry.id, recordFor(entry, {
176
+ state,
177
+ ...(plugin === undefined ? {} : { name: plugin.name }),
178
+ phase,
179
+ message,
180
+ }));
181
+ const details = { err: error, pluginId: entry.id, phase, ...(rollbackError === undefined ? {} : { rollbackError }) };
182
+ if (state === "incompatible") {
183
+ this.logger.warn(details, "server plugin is incompatible");
184
+ }
185
+ else {
186
+ this.logger.error(details, "server plugin activation failed");
187
+ }
188
+ }
189
+ }
190
+ async rollbackStart(pluginId, activation) {
191
+ const stop = activation.stop?.bind(activation);
192
+ if (stop === undefined)
193
+ return undefined;
194
+ try {
195
+ await runBounded(pluginId, "stop", this.lifecycleTimeoutMs, (signal) => stop(signal));
196
+ return undefined;
197
+ }
198
+ catch (error) {
199
+ return error;
200
+ }
201
+ }
202
+ }
203
+ function disabledReason(entry, safeStart) {
204
+ if (!entry.enabled)
205
+ return "disabled in PI WEB config";
206
+ if (safeStart === "none")
207
+ return "disabled by no-server-plugin safe start";
208
+ if (safeStart === "bundled-only" && entry.scope !== "bundled")
209
+ return "disabled by bundled-only safe start";
210
+ return undefined;
211
+ }
212
+ function recordFor(entry, status) {
213
+ return Object.freeze({
214
+ pluginId: entry.id,
215
+ source: entry.source,
216
+ scope: entry.scope,
217
+ moduleRevision: requireServerModule(entry).revision,
218
+ ...(entry.browserModule === undefined ? {} : { browserRevision: entry.browserModule.revision }),
219
+ settingsRevision: entry.settingsRevision,
220
+ machineSpecific: entry.machineSpecific,
221
+ state: status.state,
222
+ ...(status.name === undefined ? {} : { name: status.name }),
223
+ ...(status.phase === undefined ? {} : { phase: status.phase }),
224
+ ...(status.message === undefined ? {} : { message: status.message }),
225
+ });
226
+ }
227
+ function requireServerModule(entry) {
228
+ const serverModule = entry.serverModule;
229
+ if (serverModule === undefined)
230
+ throw new Error(`PI WEB plugin has no server module: ${entry.id}`);
231
+ return serverModule;
232
+ }
233
+ function serverModuleUrl(entry) {
234
+ const serverModule = requireServerModule(entry);
235
+ const url = pathToFileURL(serverModule.filePath);
236
+ url.searchParams.set("piWebRevision", serverModule.revision);
237
+ return url.href;
238
+ }
239
+ async function importServerPluginModule(moduleUrl) {
240
+ const imported = await import(moduleUrl);
241
+ return imported;
242
+ }
243
+ function parsePluginExport(imported) {
244
+ if (!isRecord(imported))
245
+ throw new IncompatibleServerPluginError("Server plugin module must export a default plugin object");
246
+ const plugin = imported["default"];
247
+ if (!isRecord(plugin))
248
+ throw new IncompatibleServerPluginError("Server plugin module must export a default plugin object");
249
+ const candidate = {
250
+ apiVersion: plugin["apiVersion"],
251
+ name: plugin["name"],
252
+ activate: plugin["activate"],
253
+ };
254
+ if (candidate.apiVersion !== 1) {
255
+ throw new IncompatibleServerPluginError(`Unsupported server plugin API version: ${formatUnknown(candidate.apiVersion)}`);
256
+ }
257
+ if (typeof candidate.name !== "string" || candidate.name === "") {
258
+ throw new IncompatibleServerPluginError("Server plugin name must be a non-empty string");
259
+ }
260
+ if (typeof candidate.activate !== "function" || !isPiWebServerPlugin(candidate)) {
261
+ throw new IncompatibleServerPluginError("Server plugin activate must be a function");
262
+ }
263
+ const activate = candidate.activate.bind(plugin);
264
+ return Object.freeze({ apiVersion: 1, name: candidate.name, activate: (context) => activate(context) });
265
+ }
266
+ function isPiWebServerPlugin(value) {
267
+ return isRecord(value)
268
+ && value["apiVersion"] === 1
269
+ && typeof value["name"] === "string"
270
+ && value["name"] !== ""
271
+ && typeof value["activate"] === "function";
272
+ }
273
+ function parseActivation(value) {
274
+ if (!isRecord(value))
275
+ throw new IncompatibleServerPluginError("Server plugin activation must be an object");
276
+ if (value["workspaceProviders"] !== undefined) {
277
+ throw new IncompatibleServerPluginError("Server plugins may contribute only one workspaceProvider");
278
+ }
279
+ const workspaceProviderValue = value["workspaceProvider"];
280
+ const candidate = {
281
+ workspaceProvider: workspaceProviderValue === undefined ? undefined : snapshotWorkspaceProvider(workspaceProviderValue),
282
+ start: value["start"],
283
+ stop: value["stop"],
284
+ health: value["health"],
285
+ };
286
+ for (const callback of ["start", "stop", "health"]) {
287
+ const callbackValue = candidate[callback];
288
+ if (callbackValue !== undefined && typeof callbackValue !== "function") {
289
+ throw new IncompatibleServerPluginError(`Server plugin ${callback} must be a function`);
290
+ }
291
+ }
292
+ if (!isServerPluginActivation(candidate))
293
+ throw new IncompatibleServerPluginError("Server plugin activation is invalid");
294
+ const start = candidate.start?.bind(value);
295
+ const stop = candidate.stop?.bind(value);
296
+ const health = candidate.health?.bind(value);
297
+ return Object.freeze({
298
+ ...(candidate.workspaceProvider === undefined ? {} : { workspaceProvider: candidate.workspaceProvider }),
299
+ ...(start === undefined ? {} : { start: (signal) => start(signal) }),
300
+ ...(stop === undefined ? {} : { stop: (signal) => stop(signal) }),
301
+ ...(health === undefined ? {} : { health: (signal) => health(signal) }),
302
+ });
303
+ }
304
+ function isServerPluginActivation(value) {
305
+ if (!isRecord(value))
306
+ return false;
307
+ const workspaceProvider = value["workspaceProvider"];
308
+ const start = value["start"];
309
+ const stop = value["stop"];
310
+ const health = value["health"];
311
+ return (workspaceProvider === undefined || isWorkspaceProvider(workspaceProvider))
312
+ && (start === undefined || typeof start === "function")
313
+ && (stop === undefined || typeof stop === "function")
314
+ && (health === undefined || typeof health === "function");
315
+ }
316
+ function snapshotWorkspaceProvider(value) {
317
+ if (!isRecord(value))
318
+ throw new IncompatibleServerPluginError("Server plugin workspaceProvider is invalid");
319
+ const candidate = {
320
+ fallback: value["fallback"],
321
+ probe: value["probe"],
322
+ list: value["list"],
323
+ request: value["request"],
324
+ prepareRemove: value["prepareRemove"],
325
+ };
326
+ if (!isWorkspaceProvider(candidate))
327
+ throw new IncompatibleServerPluginError("Server plugin workspaceProvider is invalid");
328
+ const probe = candidate.probe.bind(value);
329
+ const list = candidate.list.bind(value);
330
+ const request = candidate.request?.bind(value);
331
+ const prepareRemove = candidate.prepareRemove?.bind(value);
332
+ return Object.freeze({
333
+ ...(candidate.fallback === undefined ? {} : { fallback: candidate.fallback }),
334
+ probe: (project, signal) => probe(project, signal),
335
+ list: (project, signal) => list(project, signal),
336
+ ...(request === undefined ? {} : { request: (context) => request(context) }),
337
+ ...(prepareRemove === undefined ? {} : { prepareRemove: (context) => prepareRemove(context) }),
338
+ });
339
+ }
340
+ function isWorkspaceProvider(value) {
341
+ if (!isRecord(value))
342
+ return false;
343
+ const fallback = value["fallback"];
344
+ const probe = value["probe"];
345
+ const list = value["list"];
346
+ const request = value["request"];
347
+ const prepareRemove = value["prepareRemove"];
348
+ return (fallback === undefined || typeof fallback === "boolean")
349
+ && typeof probe === "function"
350
+ && typeof list === "function"
351
+ && (request === undefined || typeof request === "function")
352
+ && (prepareRemove === undefined || typeof prepareRemove === "function");
353
+ }
354
+ function parseHealth(value) {
355
+ if (!isRecord(value))
356
+ throw new IncompatibleServerPluginError("Server plugin health must be an object");
357
+ const status = value["status"];
358
+ const message = value["message"];
359
+ const details = value["details"];
360
+ if (status !== "healthy" && status !== "degraded" && status !== "unhealthy") {
361
+ throw new IncompatibleServerPluginError("Server plugin health status is invalid");
362
+ }
363
+ if (message !== undefined && typeof message !== "string") {
364
+ throw new IncompatibleServerPluginError("Server plugin health message must be a string");
365
+ }
366
+ const clonedDetails = details === undefined ? undefined : cloneJsonObject(details, "server plugin health details");
367
+ return Object.freeze({
368
+ status,
369
+ ...(message === undefined ? {} : { message }),
370
+ ...(clonedDetails === undefined ? {} : { details: clonedDetails }),
371
+ });
372
+ }
373
+ function createScopedLogger(pluginId, logger) {
374
+ return Object.freeze({
375
+ debug(message, details) {
376
+ logger.debug({ pluginId, ...(details ?? {}) }, message);
377
+ },
378
+ info(message, details) {
379
+ logger.info({ pluginId, ...(details ?? {}) }, message);
380
+ },
381
+ warn(message, details) {
382
+ logger.warn({ pluginId, ...(details ?? {}) }, message);
383
+ },
384
+ error(message, details) {
385
+ logger.error({ pluginId, ...(details ?? {}) }, message);
386
+ },
387
+ });
388
+ }
389
+ async function runBounded(pluginId, phase, timeoutMs, operation) {
390
+ const controller = new AbortController();
391
+ const timeoutError = new ServerPluginTimeoutError(`Server plugin ${pluginId} ${phase} timed out after ${String(timeoutMs)}ms`);
392
+ const timeout = setTimeout(() => { controller.abort(timeoutError); }, timeoutMs);
393
+ timeout.unref();
394
+ const deadline = new Promise((_resolve, reject) => {
395
+ controller.signal.addEventListener("abort", () => { reject(abortError(controller.signal)); }, { once: true });
396
+ });
397
+ const result = Promise.resolve().then(() => operation(controller.signal));
398
+ try {
399
+ return await Promise.race([result, deadline]);
400
+ }
401
+ finally {
402
+ clearTimeout(timeout);
403
+ if (!controller.signal.aborted)
404
+ controller.abort(new DOMException("Server plugin operation completed", "AbortError"));
405
+ }
406
+ }
407
+ function cloneJsonObject(value, label) {
408
+ if (!isRecord(value))
409
+ throw new IncompatibleServerPluginError(`${label} must be a JSON object`);
410
+ return cloneJsonRecord(value, new Set(), label);
411
+ }
412
+ function cloneJsonRecord(value, ancestors, label) {
413
+ if (ancestors.has(value))
414
+ throw new IncompatibleServerPluginError(`${label} must not contain cycles`);
415
+ ancestors.add(value);
416
+ const output = {};
417
+ for (const [key, child] of Object.entries(value))
418
+ output[key] = cloneJsonValue(child, ancestors, label);
419
+ ancestors.delete(value);
420
+ return Object.freeze(output);
421
+ }
422
+ function cloneJsonValue(value, ancestors, label) {
423
+ if (value === null || typeof value === "string" || typeof value === "boolean")
424
+ return value;
425
+ if (typeof value === "number") {
426
+ if (!Number.isFinite(value))
427
+ throw new IncompatibleServerPluginError(`${label} must contain only finite JSON numbers`);
428
+ return value;
429
+ }
430
+ if (Array.isArray(value)) {
431
+ if (ancestors.has(value))
432
+ throw new IncompatibleServerPluginError(`${label} must not contain cycles`);
433
+ ancestors.add(value);
434
+ const output = value.map((child) => cloneJsonValue(child, ancestors, label));
435
+ ancestors.delete(value);
436
+ return Object.freeze(output);
437
+ }
438
+ if (isRecord(value))
439
+ return cloneJsonRecord(value, ancestors, label);
440
+ throw new IncompatibleServerPluginError(`${label} must contain only JSON values`);
441
+ }
442
+ function abortError(signal) {
443
+ const reason = signal.reason;
444
+ return reason instanceof Error ? reason : new Error("Server plugin operation aborted", { cause: reason });
445
+ }
446
+ class IncompatibleServerPluginError extends Error {
447
+ constructor() {
448
+ super(...arguments);
449
+ this.name = "IncompatibleServerPluginError";
450
+ }
451
+ }
452
+ class ServerPluginTimeoutError extends Error {
453
+ constructor() {
454
+ super(...arguments);
455
+ this.name = "TimeoutError";
456
+ }
457
+ }
458
+ function positiveInteger(value, fallback, key) {
459
+ const resolved = value ?? fallback;
460
+ if (!Number.isInteger(resolved) || resolved <= 0)
461
+ throw new Error(`${key} must be a positive integer`);
462
+ return resolved;
463
+ }
464
+ function errorMessage(error) {
465
+ return error instanceof Error ? error.message : String(error);
466
+ }
467
+ function formatUnknown(value) {
468
+ if (typeof value === "string" || typeof value === "number" || typeof value === "boolean" || value === null || value === undefined)
469
+ return String(value);
470
+ try {
471
+ return JSON.stringify(value);
472
+ }
473
+ catch {
474
+ return Object.prototype.toString.call(value);
475
+ }
476
+ }
477
+ function isRecord(value) {
478
+ return typeof value === "object" && value !== null && !Array.isArray(value);
479
+ }
480
+ //# sourceMappingURL=serverPluginRuntime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serverPluginRuntime.js","sourceRoot":"","sources":["../../../src/server/plugins/serverPluginRuntime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAwBzC,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AA8DnE,MAAM,4BAA4B,GAAG,MAAM,CAAC;AAE5C;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,OAAyC;IAEzC,IAAI,OAAO,CAAC,SAAS,KAAK,MAAM,EAAE,CAAC;QACjC,OAAO,MAAM,mBAAmB,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;IACvF,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,KAAK,cAAc,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACzH,OAAO,MAAM,mBAAmB,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,OAAO,mBAAmB;IAK9B,YACmB,SAA4C,EAC5C,WAAoD,EACpD,MAAiC,EACjC,QAAoC,EACpC,QAA8B,EAC9B,kBAA0B;QAL1B,cAAS,GAAT,SAAS,CAAmC;QAC5C,gBAAW,GAAX,WAAW,CAAyC;QACpD,WAAM,GAAN,MAAM,CAA2B;QACjC,aAAQ,GAAR,QAAQ,CAA4B;QACpC,aAAQ,GAAR,QAAQ,CAAsB;QAC9B,uBAAkB,GAAlB,kBAAkB,CAAQ;QAV5B,gBAAW,GAAG,IAAI,GAAG,EAAqC,CAAC;QACpE,kBAAa,GAAyB,EAAE,CAAC;QACzC,YAAO,GAAG,KAAK,CAAC;IASrB,CAAC;IAEJ,MAAM,CAAC,KAAK,CAAC,QAAQ,CACnB,QAAoC,EACpC,OAA0D;QAE1D,MAAM,OAAO,GAAG,IAAI,mBAAmB,CACrC,OAAO,CAAC,SAAS,EACjB,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,UAAU,EAAE,CAAC,CAAC,CAAC,EACzF,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,QAAQ,IAAI,wBAAwB,EAC5C,OAAO,CAAC,QAAQ,IAAI,0BAA0B,EAAE,EAChD,eAAe,CAAC,OAAO,CAAC,kBAAkB,EAAE,4BAA4B,EAAE,oBAAoB,CAAC,CAChG,CAAC;QACF,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YACtC,OAAO,OAAO,CAAC;QACjB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;YACrB,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,kBAAkB;QAChB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,aAAa;QACX,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;aAChD,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;aAClE,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,qBAAqB;QACnB,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAC/H,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,MAAM,WAAW,GAAmC,EAAE,CAAC;QACvD,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACxC,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACnE,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC7G,SAAS;YACX,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAC7B,MAAM,CAAC,KAAK,CAAC,EAAE,EACf,QAAQ,EACR,IAAI,CAAC,kBAAkB,EACvB,CAAC,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAC7B,CAAC;gBACF,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YAC9F,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;oBAC7B,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE;oBACzB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;oBACvD,KAAK,EAAE,QAAQ;oBACf,KAAK,EAAE,OAAO;iBACf,CAAC,CAAC,CAAC;gBACJ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,mCAAmC,CAAC,CAAC;YACpH,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACpC,CAAC;IAED,6EAA6E;IAC7E,KAAK,CAAC,IAAI;QACR,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;QACzB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,MAAM,aAAa,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,EAAE,CAAC;QACxD,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QACxB,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAC7D,IAAI,IAAI,KAAK,SAAS;gBAAE,SAAS;YACjC,IAAI,CAAC;gBACH,MAAM,UAAU,CACd,MAAM,CAAC,KAAK,CAAC,EAAE,EACf,MAAM,EACN,IAAI,CAAC,kBAAkB,EACvB,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CACzB,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE;oBAC5D,KAAK,EAAE,QAAQ;oBACf,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI;oBACxB,KAAK,EAAE,MAAM;oBACb,OAAO,EAAE,YAAY,CAAC,KAAK,CAAC;iBAC7B,CAAC,CAAC,CAAC;gBACJ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,2BAA2B,CAAC,CAAC;YAC3G,CAAC;QACH,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,KAAK,CAAC,OAA2C;QAC7D,MAAM,aAAa,GAAG,OAAO;aAC1B,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,YAAY,KAAK,SAAS,CAAC;aACnD,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1D,KAAK,MAAM,KAAK,IAAI,aAAa;YAAE,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACrE,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,KAA8B;QACxD,MAAM,eAAe,GAAG,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC9D,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;YAClC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,SAAS,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC;YAClG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE,EAAE,uBAAuB,CAAC,CAAC;YAC3F,OAAO;QACT,CAAC;QAED,IAAI,KAAK,GAA+B,UAAU,CAAC;QACnD,IAAI,MAAqC,CAAC;QAC1C,IAAI,UAA8C,CAAC;QACnD,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,QAAQ,EAAE,8BAA8B,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3F,KAAK,GAAG,QAAQ,CAAC;YACjB,MAAM,SAAS,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;YACzC,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;YAC1H,KAAK,GAAG,UAAU,CAAC;YACnB,MAAM,YAAY,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;YACjD,MAAM,GAAG,YAAY,CAAC;YACtB,KAAK,GAAG,UAAU,CAAC;YACnB,MAAM,YAAY,GAAG,kBAAkB,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAC/D,MAAM,eAAe,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;gBACjI,UAAU,EAAE,CAAC;gBACb,QAAQ,EAAE,KAAK,CAAC,EAAE;gBAClB,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,MAAM,EAAE,YAAY;gBACpB,QAAQ;gBACR,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,MAAM;aACP,CAAC,CAAC,CAAC,CAAC;YACL,KAAK,GAAG,UAAU,CAAC;YACnB,MAAM,gBAAgB,GAAG,eAAe,CAAC,eAAe,CAAC,CAAC;YAC1D,UAAU,GAAG,gBAAgB,CAAC;YAC9B,KAAK,GAAG,OAAO,CAAC;YAChB,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAC7D,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,MAAM,UAAU,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;YACxF,CAAC;YAED,MAAM,YAAY,GAAG,gBAAgB,CAAC,iBAAiB,KAAK,SAAS;gBACnE,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;oBACZ,QAAQ,EAAE,KAAK,CAAC,EAAE;oBAClB,UAAU,EAAE,YAAY,CAAC,IAAI;oBAC7B,WAAW,EAAE,KAAK,CAAC,WAAW;oBAC9B,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,cAAc,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC,QAAQ;oBACnD,QAAQ,EAAE,gBAAgB,CAAC,iBAAiB;iBAC7C,CAAC,CAAC;YACP,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;gBACpC,KAAK;gBACL,MAAM,EAAE,YAAY;gBACpB,UAAU,EAAE,gBAAgB;gBAC5B,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC;aACxD,CAAC,CAAC,CAAC;YACJ,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,SAAS,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YAC/F,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,UAAU,EAAE,YAAY,CAAC,IAAI,EAAE,EAAE,yBAAyB,CAAC,CAAC;QACrG,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,aAAa,GAAG,KAAK,KAAK,OAAO,IAAI,UAAU,EAAE,IAAI,KAAK,SAAS;gBACvE,CAAC,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,EAAE,UAAU,CAAC;gBAChD,CAAC,CAAC,SAAS,CAAC;YACd,MAAM,OAAO,GAAG,aAAa,KAAK,SAAS;gBACzC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC;gBACrB,CAAC,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,8BAA8B,YAAY,CAAC,aAAa,CAAC,EAAE,CAAC;YACtF,MAAM,KAAK,GAA6B,KAAK,YAAY,6BAA6B,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC;YACnH,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,SAAS,CAAC,KAAK,EAAE;gBAC9C,KAAK;gBACL,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;gBACtD,KAAK;gBACL,OAAO;aACR,CAAC,CAAC,CAAC;YACJ,MAAM,OAAO,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC;YACrH,IAAI,KAAK,KAAK,cAAc,EAAE,CAAC;gBAC7B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,+BAA+B,CAAC,CAAC;YAC7D,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,iCAAiC,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,QAAgB,EAAE,UAAkC;QAC9E,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAC/C,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QACzC,IAAI,CAAC;YACH,MAAM,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YACtF,OAAO,SAAS,CAAC;QACnB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;CACF;AAED,SAAS,cAAc,CAAC,KAA8B,EAAE,SAA4C;IAClG,IAAI,CAAC,KAAK,CAAC,OAAO;QAAE,OAAO,2BAA2B,CAAC;IACvD,IAAI,SAAS,KAAK,MAAM;QAAE,OAAO,yCAAyC,CAAC;IAC3E,IAAI,SAAS,KAAK,cAAc,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;QAAE,OAAO,qCAAqC,CAAC;IAC5G,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,SAAS,CAChB,KAA8B,EAC9B,MAAyH;IAEzH,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,QAAQ,EAAE,KAAK,CAAC,EAAE;QAClB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,cAAc,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC,QAAQ;QACnD,GAAG,CAAC,KAAK,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,KAAK,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;QAC/F,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;QACxC,eAAe,EAAE,KAAK,CAAC,eAAe;QACtC,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;QAC3D,GAAG,CAAC,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;QAC9D,GAAG,CAAC,MAAM,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;KACrE,CAAC,CAAC;AACL,CAAC;AAED,SAAS,mBAAmB,CAAC,KAA8B;IACzD,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;IACxC,IAAI,YAAY,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;IACnG,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,SAAS,eAAe,CAAC,KAA8B;IACrD,MAAM,YAAY,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,aAAa,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IACjD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,eAAe,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC7D,OAAO,GAAG,CAAC,IAAI,CAAC;AAClB,CAAC;AAED,KAAK,UAAU,wBAAwB,CAAC,SAAiB;IACvD,MAAM,QAAQ,GAAY,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;IAClD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAiB;IAC1C,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,MAAM,IAAI,6BAA6B,CAAC,0DAA0D,CAAC,CAAC;IAC7H,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;IACnC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,MAAM,IAAI,6BAA6B,CAAC,0DAA0D,CAAC,CAAC;IAC3H,MAAM,SAAS,GAAG;QAChB,UAAU,EAAE,MAAM,CAAC,YAAY,CAAC;QAChC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC;KAC7B,CAAC;IACF,IAAI,SAAS,CAAC,UAAU,KAAK,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,6BAA6B,CAAC,0CAA0C,aAAa,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IAC3H,CAAC;IACD,IAAI,OAAO,SAAS,CAAC,IAAI,KAAK,QAAQ,IAAI,SAAS,CAAC,IAAI,KAAK,EAAE,EAAE,CAAC;QAChE,MAAM,IAAI,6BAA6B,CAAC,+CAA+C,CAAC,CAAC;IAC3F,CAAC;IACD,IAAI,OAAO,SAAS,CAAC,QAAQ,KAAK,UAAU,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,EAAE,CAAC;QAChF,MAAM,IAAI,6BAA6B,CAAC,2CAA2C,CAAC,CAAC;IACvF,CAAC;IACD,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACjD,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,OAAsC,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AACzI,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAc;IACzC,OAAO,QAAQ,CAAC,KAAK,CAAC;WACjB,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC;WACzB,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,QAAQ;WACjC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE;WACpB,OAAO,KAAK,CAAC,UAAU,CAAC,KAAK,UAAU,CAAC;AAC/C,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACrC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,6BAA6B,CAAC,4CAA4C,CAAC,CAAC;IAC5G,IAAI,KAAK,CAAC,oBAAoB,CAAC,KAAK,SAAS,EAAE,CAAC;QAC9C,MAAM,IAAI,6BAA6B,CAAC,0DAA0D,CAAC,CAAC;IACtG,CAAC;IACD,MAAM,sBAAsB,GAAG,KAAK,CAAC,mBAAmB,CAAC,CAAC;IAC1D,MAAM,SAAS,GAAG;QAChB,iBAAiB,EAAE,sBAAsB,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,yBAAyB,CAAC,sBAAsB,CAAC;QACvH,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC;QACrB,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC;QACnB,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC;KACxB,CAAC;IACF,KAAK,MAAM,QAAQ,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAU,EAAE,CAAC;QAC5D,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC1C,IAAI,aAAa,KAAK,SAAS,IAAI,OAAO,aAAa,KAAK,UAAU,EAAE,CAAC;YACvE,MAAM,IAAI,6BAA6B,CAAC,iBAAiB,QAAQ,qBAAqB,CAAC,CAAC;QAC1F,CAAC;IACH,CAAC;IACD,IAAI,CAAC,wBAAwB,CAAC,SAAS,CAAC;QAAE,MAAM,IAAI,6BAA6B,CAAC,qCAAqC,CAAC,CAAC;IACzH,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7C,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,GAAG,CAAC,SAAS,CAAC,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,SAAS,CAAC,iBAAiB,EAAE,CAAC;QACxG,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,MAAmB,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QACjF,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,MAAmB,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9E,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,MAAmB,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;KACrF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,wBAAwB,CAAC,KAAc;IAC9C,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,MAAM,iBAAiB,GAAG,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACrD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IAC3B,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC/B,OAAO,CAAC,iBAAiB,KAAK,SAAS,IAAI,mBAAmB,CAAC,iBAAiB,CAAC,CAAC;WAC7E,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,UAAU,CAAC;WACpD,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,IAAI,KAAK,UAAU,CAAC;WAClD,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,MAAM,KAAK,UAAU,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,yBAAyB,CAAC,KAAc;IAC/C,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,6BAA6B,CAAC,4CAA4C,CAAC,CAAC;IAC5G,MAAM,SAAS,GAAG;QAChB,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC;QAC3B,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC;QACrB,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC;QACnB,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;QACzB,aAAa,EAAE,KAAK,CAAC,eAAe,CAAC;KACtC,CAAC;IACF,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC;QAAE,MAAM,IAAI,6BAA6B,CAAC,4CAA4C,CAAC,CAAC;IAC3H,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/C,MAAM,aAAa,GAAG,SAAS,CAAC,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3D,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,GAAG,CAAC,SAAS,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC;QAC7E,KAAK,EAAE,CAAC,OAAqB,EAAE,MAAmB,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC;QAC7E,IAAI,EAAE,CAAC,OAAqB,EAAE,MAAmB,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;QAC3E,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,OAA+B,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACpG,GAAG,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,OAA8B,EAAE,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;KACtH,CAAC,CAAC;AACL,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAc;IACzC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC;IACnC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;IACjC,MAAM,aAAa,GAAG,KAAK,CAAC,eAAe,CAAC,CAAC;IAC7C,OAAO,CAAC,QAAQ,KAAK,SAAS,IAAI,OAAO,QAAQ,KAAK,SAAS,CAAC;WAC3D,OAAO,KAAK,KAAK,UAAU;WAC3B,OAAO,IAAI,KAAK,UAAU;WAC1B,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,OAAO,KAAK,UAAU,CAAC;WACxD,CAAC,aAAa,KAAK,SAAS,IAAI,OAAO,aAAa,KAAK,UAAU,CAAC,CAAC;AAC5E,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,6BAA6B,CAAC,wCAAwC,CAAC,CAAC;IACxG,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC/B,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;IACjC,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;IACjC,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,UAAU,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;QAC5E,MAAM,IAAI,6BAA6B,CAAC,wCAAwC,CAAC,CAAC;IACpF,CAAC;IACD,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzD,MAAM,IAAI,6BAA6B,CAAC,+CAA+C,CAAC,CAAC;IAC3F,CAAC;IACD,MAAM,aAAa,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,OAAO,EAAE,8BAA8B,CAAC,CAAC;IACnH,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,MAAM;QACN,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC;QAC7C,GAAG,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;KACnE,CAAC,CAAC;AACL,CAAC;AAED,SAAS,kBAAkB,CAAC,QAAgB,EAAE,MAAiC;IAC7E,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,KAAK,CAAC,OAAe,EAAE,OAAoB;YACzC,MAAM,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAC1D,CAAC;QACD,IAAI,CAAC,OAAe,EAAE,OAAoB;YACxC,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QACzD,CAAC;QACD,IAAI,CAAC,OAAe,EAAE,OAAoB;YACxC,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QACzD,CAAC;QACD,KAAK,CAAC,OAAe,EAAE,OAAoB;YACzC,MAAM,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAC1D,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,UAAU,CACvB,QAAgB,EAChB,KAAiC,EACjC,SAAiB,EACjB,SAAkD;IAElD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,YAAY,GAAG,IAAI,wBAAwB,CAAC,iBAAiB,QAAQ,IAAI,KAAK,oBAAoB,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC/H,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IACjF,OAAO,CAAC,KAAK,EAAE,CAAC;IAChB,MAAM,QAAQ,GAAG,IAAI,OAAO,CAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE;QACvD,UAAU,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAChH,CAAC,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1E,IAAI,CAAC;QACH,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAChD,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,OAAO,CAAC,CAAC;QACtB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO;YAAE,UAAU,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC,mCAAmC,EAAE,YAAY,CAAC,CAAC,CAAC;IACxH,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,KAAc,EAAE,KAAa;IACpD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,6BAA6B,CAAC,GAAG,KAAK,wBAAwB,CAAC,CAAC;IAChG,OAAO,eAAe,CAAC,KAAK,EAAE,IAAI,GAAG,EAAU,EAAE,KAAK,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,eAAe,CAAC,KAA8B,EAAE,SAAsB,EAAE,KAAa;IAC5F,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,6BAA6B,CAAC,GAAG,KAAK,0BAA0B,CAAC,CAAC;IACtG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACrB,MAAM,MAAM,GAA8B,EAAE,CAAC;IAC7C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,MAAM,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IACxG,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACxB,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,cAAc,CAAC,KAAc,EAAE,SAAsB,EAAE,KAAa;IAC3E,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAC5F,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,MAAM,IAAI,6BAA6B,CAAC,GAAG,KAAK,wCAAwC,CAAC,CAAC;QACvH,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,MAAM,IAAI,6BAA6B,CAAC,GAAG,KAAK,0BAA0B,CAAC,CAAC;QACtG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACrB,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;QAC7E,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACxB,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IACD,IAAI,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,eAAe,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IACrE,MAAM,IAAI,6BAA6B,CAAC,GAAG,KAAK,gCAAgC,CAAC,CAAC;AACpF,CAAC;AAED,SAAS,UAAU,CAAC,MAAmB;IACrC,MAAM,MAAM,GAAY,MAAM,CAAC,MAAM,CAAC;IACtC,OAAO,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,iCAAiC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;AAC5G,CAAC;AAED,MAAM,6BAA8B,SAAQ,KAAK;IAAjD;;QACW,SAAI,GAAG,+BAA+B,CAAC;IAClD,CAAC;CAAA;AAED,MAAM,wBAAyB,SAAQ,KAAK;IAA5C;;QACW,SAAI,GAAG,cAAc,CAAC;IACjC,CAAC;CAAA;AAED,SAAS,eAAe,CAAC,KAAyB,EAAE,QAAgB,EAAE,GAAW;IAC/E,MAAM,QAAQ,GAAG,KAAK,IAAI,QAAQ,CAAC;IACnC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,QAAQ,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,GAAG,6BAA6B,CAAC,CAAC;IACvG,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACxJ,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC"}
@@ -0,0 +1,80 @@
1
+ import { realpathSync } from "node:fs";
2
+ import { ProjectTrustStore, SettingsManager } from "@earendil-works/pi-coding-agent";
3
+ import { expandUserPath } from "./projects/directorySuggestions.js";
4
+ import { resolveWorkspaceContext } from "./workspaces/workspaceContext.js";
5
+ /**
6
+ * Read/write per-project Pi trust for a workspace. The workspace path is
7
+ * resolved server-side from the project/workspace ids, so a client can only
8
+ * set trust for a path PI WEB already manages — never an arbitrary path.
9
+ */
10
+ export function registerProjectTrustRoutes(app, projects, workspaces, deps, prefix = "/api") {
11
+ const route = `${prefix}/projects/:projectId/workspaces/:workspaceId/trust`;
12
+ async function describe(path) {
13
+ const agentDir = await deps.agentDir();
14
+ const decision = new ProjectTrustStore(agentDir).get(path);
15
+ const trusted = decision ?? SettingsManager.create(path, agentDir).getDefaultProjectTrust() === "always";
16
+ return { path, decision, trusted };
17
+ }
18
+ /**
19
+ * Resolve a raw path to the canonical directory a trust decision keys on:
20
+ * `~`/relative expansion plus symlink resolution, falling back to the
21
+ * expanded path when the directory does not exist yet. Uses the same
22
+ * tolerant sync resolution as the SDK's `ProjectTrustStore` when keying
23
+ * `trust.json`, so reads always hit decisions written by the store. (Async
24
+ * `realpath` uses the native Windows resolution, which expands 8.3 short
25
+ * names such as `RUNNER~1` to their long form and would miss keys stored
26
+ * under the short form.)
27
+ */
28
+ function resolveDecidedPath(raw) {
29
+ const expanded = expandUserPath(raw.trim());
30
+ try {
31
+ return realpathSync(expanded);
32
+ }
33
+ catch {
34
+ return expanded;
35
+ }
36
+ }
37
+ // Read-only existing-decision lookup for a path the client is about to add:
38
+ // server-resolved (never trusted verbatim) and read exclusively through the
39
+ // shared ProjectTrustStore, so no arbitrary client path reaches the store's
40
+ // key space or any filesystem read.
41
+ app.get(`${prefix}/projects/trust`, async (request, reply) => {
42
+ const raw = request.query.path ?? "";
43
+ if (raw.trim() === "") {
44
+ return reply.code(400).send({ error: "path is required" });
45
+ }
46
+ try {
47
+ return await describe(resolveDecidedPath(raw));
48
+ }
49
+ catch (error) {
50
+ return reply.code(400).send({ error: error instanceof Error ? error.message : String(error) });
51
+ }
52
+ });
53
+ app.get(route, async (request, reply) => {
54
+ try {
55
+ const context = await resolveWorkspaceContext(projects, workspaces, request.params.projectId, request.params.workspaceId);
56
+ return await describe(context.root);
57
+ }
58
+ catch (error) {
59
+ return reply.code(400).send({ error: error instanceof Error ? error.message : String(error) });
60
+ }
61
+ });
62
+ app.put(route, async (request, reply) => {
63
+ if (typeof request.body.trusted !== "boolean") {
64
+ return reply.code(400).send({ error: "trusted must be a boolean" });
65
+ }
66
+ try {
67
+ const context = await resolveWorkspaceContext(projects, workspaces, request.params.projectId, request.params.workspaceId);
68
+ const agentDir = await deps.agentDir();
69
+ // Writes go through the SDK store's file lock; an EACCES here (e.g. a
70
+ // read-only, admin-controlled trust.json) surfaces to the client rather
71
+ // than being swallowed.
72
+ new ProjectTrustStore(agentDir).set(context.root, request.body.trusted);
73
+ return await describe(context.root);
74
+ }
75
+ catch (error) {
76
+ return reply.code(400).send({ error: error instanceof Error ? error.message : String(error) });
77
+ }
78
+ });
79
+ }
80
+ //# sourceMappingURL=projectTrustRoutes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projectTrustRoutes.js","sourceRoot":"","sources":["../../src/server/projectTrustRoutes.ts"],"names":[],"mappings":"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"}