@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 @@
1
+ {"version":3,"file":"piPackageService.js","sourceRoot":"","sources":["../../src/server/piPackageService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,584 @@
1
+ import { createHash } from "node:crypto";
2
+ import { existsSync } from "node:fs";
3
+ import { open, opendir, readdir, readFile, realpath, stat } from "node:fs/promises";
4
+ import { dirname, isAbsolute, join, relative, resolve, sep, win32 } from "node:path";
5
+ import { fileURLToPath } from "node:url";
6
+ import { DefaultPackageManager, SettingsManager } from "@earendil-works/pi-coding-agent";
7
+ import { loadPiWebConfig, piWebDataDir } from "../config.js";
8
+ import { isPiWebPluginId, isReservedPiWebPluginId } from "../shared/pluginIds.js";
9
+ function defaultDirectoryEntryNamesProvider(directoryPath) {
10
+ return readdir(directoryPath);
11
+ }
12
+ export class DefaultPiPackageProvider {
13
+ constructor(cwd, agentDir) {
14
+ this.cwd = cwd;
15
+ this.agentDir = agentDir;
16
+ }
17
+ listPackages() {
18
+ return this.createPackageManager().listConfiguredPackages();
19
+ }
20
+ getInstalledPath(source, scope) {
21
+ return this.createPackageManager().getInstalledPath(source, scope);
22
+ }
23
+ createPackageManager() {
24
+ return new DefaultPackageManager({
25
+ cwd: this.cwd,
26
+ agentDir: this.agentDir,
27
+ settingsManager: SettingsManager.create(this.cwd, this.agentDir),
28
+ });
29
+ }
30
+ }
31
+ /**
32
+ * Process-neutral package discovery shared by browser serving and sessiond's
33
+ * startup activator. Catalog reads never import or execute plugin code.
34
+ */
35
+ export class PiWebPluginCatalog {
36
+ constructor(options = {}) {
37
+ const cwd = options.cwd ?? process.cwd();
38
+ this.roots = options.roots ?? defaultPluginRoots(cwd);
39
+ this.agentDir = options.agentDir;
40
+ this.agentDirProvider = options.agentDirProvider;
41
+ const packageProvider = options.packageProvider;
42
+ this.staticPackageProvider = packageProvider === false || packageProvider === undefined ? undefined : packageProvider;
43
+ this.packageProviderForAgentDir = packageProvider === false || packageProvider !== undefined
44
+ ? undefined
45
+ : (agentDir) => new DefaultPiPackageProvider(cwd, agentDir);
46
+ this.configProvider = options.configProvider ?? (() => loadPiWebConfig({ cwd }).config);
47
+ this.directoryEntryNamesProvider = options.directoryEntryNamesProvider ?? defaultDirectoryEntryNamesProvider;
48
+ this.warningSink = options.warningSink ?? ((message) => { console.warn(message); });
49
+ }
50
+ async snapshot(options = {}) {
51
+ const config = await this.configProvider();
52
+ const diagnostics = [];
53
+ const plugins = await this.discoverPlugins(this.reporter(diagnostics), options.scope);
54
+ return {
55
+ plugins: plugins.map((plugin) => applyDesiredState(plugin, config)),
56
+ diagnostics,
57
+ };
58
+ }
59
+ /**
60
+ * Resolve the catalog winner for browser asset serving. A known local winner
61
+ * remains readable even when active Pi-package discovery is unavailable.
62
+ */
63
+ async browserPlugin(pluginId) {
64
+ if (!isPiWebPluginId(pluginId) || isReservedPiWebPluginId(pluginId))
65
+ return undefined;
66
+ const report = this.reporter([]);
67
+ const localRecords = new Map();
68
+ for (const plugin of await this.discoverLocalPlugins(report))
69
+ addUnique(localRecords, plugin, report);
70
+ const local = localRecords.get(pluginId);
71
+ if (local !== undefined)
72
+ return local.browserModule === undefined ? undefined : local;
73
+ const packageProvider = await this.currentPackageProvider();
74
+ if (packageProvider === undefined)
75
+ return undefined;
76
+ const packageRecords = new Map();
77
+ for (const plugin of await this.discoverPiPackagePlugins(packageProvider, report))
78
+ addUnique(packageRecords, plugin, report);
79
+ const plugin = packageRecords.get(pluginId);
80
+ return plugin?.browserModule === undefined ? undefined : plugin;
81
+ }
82
+ reporter(diagnostics) {
83
+ return (source, error, details = {}) => {
84
+ const message = error instanceof Error ? error.message : String(error);
85
+ diagnostics.push({
86
+ code: details.code ?? "invalid-package",
87
+ source,
88
+ message,
89
+ ...(details.pluginId === undefined ? {} : { pluginId: details.pluginId }),
90
+ });
91
+ this.warningSink(`Skipping PI WEB plugin from ${source}: ${message}`);
92
+ };
93
+ }
94
+ async discoverPlugins(report, scope) {
95
+ const records = new Map();
96
+ for (const plugin of await this.discoverLocalPlugins(report, scope))
97
+ addUnique(records, plugin, report);
98
+ const packageProvider = scope === "bundled" ? undefined : await this.currentPackageProvider();
99
+ if (packageProvider !== undefined) {
100
+ for (const plugin of await this.discoverPiPackagePlugins(packageProvider, report)) {
101
+ if (scope === undefined || plugin.scope === scope)
102
+ addUnique(records, plugin, report);
103
+ }
104
+ }
105
+ return [...records.values()].sort((left, right) => left.id.localeCompare(right.id));
106
+ }
107
+ async currentPackageProvider() {
108
+ if (this.staticPackageProvider !== undefined)
109
+ return this.staticPackageProvider;
110
+ if (this.packageProviderForAgentDir === undefined)
111
+ return undefined;
112
+ return this.packageProviderForAgentDir(await this.currentAgentDir());
113
+ }
114
+ async currentAgentDir() {
115
+ if (this.agentDirProvider !== undefined)
116
+ return await this.agentDirProvider();
117
+ if (this.agentDir !== undefined)
118
+ return this.agentDir;
119
+ throw new Error("Pi package plugin discovery requires an explicit active agent directory");
120
+ }
121
+ async discoverLocalPlugins(report, scope) {
122
+ const plugins = [];
123
+ for (const root of this.roots) {
124
+ if (scope === undefined || root.scope === scope) {
125
+ plugins.push(...await discoverLocalRoot(root, report, this.directoryEntryNamesProvider));
126
+ }
127
+ }
128
+ return plugins;
129
+ }
130
+ async discoverPiPackagePlugins(packageProvider, report) {
131
+ const plugins = [];
132
+ for (const configuredPackage of packageProvider.listPackages()) {
133
+ const root = configuredPackage.installedPath ?? packageProvider.getInstalledPath(configuredPackage.source, configuredPackage.scope);
134
+ if (root === undefined)
135
+ continue;
136
+ try {
137
+ plugins.push(...await discoverPackageRoot(root, configuredPackage, this.directoryEntryNamesProvider));
138
+ }
139
+ catch (error) {
140
+ report(configuredPackage.source, error);
141
+ }
142
+ }
143
+ return plugins;
144
+ }
145
+ }
146
+ export function defaultPluginRoots(cwd) {
147
+ const moduleDir = dirname(fileURLToPath(import.meta.url));
148
+ const packageRoot = join(moduleDir, "..", "..");
149
+ return [
150
+ { path: bundledPluginRoot(packageRoot), source: "bundled", scope: "bundled" },
151
+ ...sourceCheckoutPluginRoots(cwd),
152
+ { path: join(piWebDataDir(), "plugins"), source: "local", scope: "local" },
153
+ ];
154
+ }
155
+ function bundledPluginRoot(packageRoot) {
156
+ return join(packageRoot, "dist", "pi-web-plugins");
157
+ }
158
+ function sourceCheckoutPluginRoots(cwd) {
159
+ const pluginsRoot = join(cwd, "plugins");
160
+ if (!existsSync(join(cwd, "src", "server", "index.ts")) || !existsSync(pluginsRoot))
161
+ return [];
162
+ return [{ path: pluginsRoot, source: "dev", scope: "local" }];
163
+ }
164
+ async function discoverLocalRoot(root, report, directoryEntryNamesProvider) {
165
+ if (!existsSync(root.path))
166
+ return [];
167
+ const entries = await readdir(root.path, { withFileTypes: true }).catch(() => []);
168
+ const plugins = [];
169
+ for (const entry of entries) {
170
+ if (!isPiWebPluginId(entry.name))
171
+ continue;
172
+ const pluginRoot = join(root.path, entry.name);
173
+ const pluginStat = entry.isDirectory() ? undefined : entry.isSymbolicLink() ? await stat(pluginRoot).catch(() => undefined) : undefined;
174
+ if (!entry.isDirectory() && pluginStat?.isDirectory() !== true)
175
+ continue;
176
+ try {
177
+ plugins.push(...await discoverLocalPlugin(pluginRoot, root, directoryEntryNamesProvider));
178
+ }
179
+ catch (error) {
180
+ report(pluginRoot, error);
181
+ }
182
+ }
183
+ return plugins;
184
+ }
185
+ async function discoverLocalPlugin(root, localRoot, directoryEntryNamesProvider) {
186
+ const config = await readPiWebPackageConfig(root);
187
+ if (config === undefined)
188
+ return [];
189
+ const plugins = await discoverPluginEntries(root, config, directoryEntryNamesProvider);
190
+ return plugins.map((plugin) => ({ ...plugin, source: localRoot.source, scope: localRoot.scope }));
191
+ }
192
+ async function discoverPackageRoot(root, configuredPackage, directoryEntryNamesProvider) {
193
+ const config = await readPiWebPackageConfig(root);
194
+ if (config === undefined)
195
+ return [];
196
+ const plugins = await discoverPluginEntries(root, config, directoryEntryNamesProvider);
197
+ return plugins.map((plugin) => ({ ...plugin, source: configuredPackage.source, scope: configuredPackage.scope }));
198
+ }
199
+ async function discoverPluginEntries(root, config, directoryEntryNamesProvider) {
200
+ const packageRoot = await realpath(root);
201
+ const revision = await computePiWebPluginPackageRevision(packageRoot);
202
+ const plugins = [];
203
+ for (const entry of config.plugins) {
204
+ const browserRoot = entry.browserRoot === undefined
205
+ ? undefined
206
+ : await discoverBrowserRoot(packageRoot, entry.id, entry.browserRoot, directoryEntryNamesProvider);
207
+ const browserModule = entry.module === undefined
208
+ ? undefined
209
+ : await discoverModule(packageRoot, entry.id, "browser", entry.module, revision, directoryEntryNamesProvider, browserRoot);
210
+ const serverModule = entry.serverModule === undefined
211
+ ? undefined
212
+ : await discoverModule(packageRoot, entry.id, "server", entry.serverModule, revision, directoryEntryNamesProvider);
213
+ plugins.push({
214
+ id: entry.id,
215
+ packageRoot,
216
+ ...(browserRoot === undefined ? {} : { browserRoot }),
217
+ ...(browserModule === undefined ? {} : { browserModule }),
218
+ ...(serverModule === undefined ? {} : { serverModule }),
219
+ machineSpecific: entry.machineSpecific,
220
+ });
221
+ }
222
+ return plugins;
223
+ }
224
+ async function discoverBrowserRoot(packageRoot, pluginId, path, directoryEntryNamesProvider) {
225
+ const candidate = resolve(packageRoot, path);
226
+ const [entryStat, directoryPath] = await Promise.all([
227
+ stat(candidate).catch(() => undefined),
228
+ realpath(candidate).catch(() => undefined),
229
+ ]);
230
+ if (entryStat?.isDirectory() !== true || directoryPath === undefined)
231
+ throw new Error(`PI WEB plugin browser root not found for ${pluginId}: ${path}`);
232
+ if (!isWithin(packageRoot, directoryPath))
233
+ throw new Error(`PI WEB plugin browser root escapes its package for ${pluginId}: ${path}`);
234
+ const excludedDirectory = excludedArtifactDirectory(packageRoot, directoryPath);
235
+ if (excludedDirectory !== undefined) {
236
+ throw new Error(`PI WEB plugin browser root resolves inside excluded ${excludedDirectory} directory for ${pluginId}: ${path}`);
237
+ }
238
+ const pathSegments = path === "." ? [] : path.split("/");
239
+ await validateBrowserDirectoryPrefixes(packageRoot, pluginId, "browser root", path, pathSegments);
240
+ await validateBrowserPathSpelling(packageRoot, pluginId, "browser root", path, pathSegments, directoryEntryNamesProvider);
241
+ return { path, directoryPath };
242
+ }
243
+ async function discoverModule(packageRoot, pluginId, kind, path, revision, directoryEntryNamesProvider, browserRoot) {
244
+ if (!isSafeRelativeModulePath(path))
245
+ throw new Error(`Unsafe PI WEB plugin ${kind} module path for ${pluginId}: ${path}`);
246
+ const candidate = resolve(packageRoot, path);
247
+ const [entryStat, filePath] = await Promise.all([
248
+ stat(candidate).catch(() => undefined),
249
+ realpath(candidate).catch(() => undefined),
250
+ ]);
251
+ if (entryStat?.isFile() !== true || filePath === undefined)
252
+ throw new Error(`PI WEB plugin ${kind} module not found for ${pluginId}: ${path}`);
253
+ if (!isWithin(packageRoot, filePath))
254
+ throw new Error(`PI WEB plugin ${kind} module escapes its package for ${pluginId}: ${path}`);
255
+ const excludedDirectory = excludedArtifactDirectory(packageRoot, dirname(filePath));
256
+ if (excludedDirectory !== undefined) {
257
+ throw new Error(`PI WEB plugin ${kind} module resolves inside excluded ${excludedDirectory} directory for ${pluginId}: ${path}`);
258
+ }
259
+ if (browserRoot !== undefined && (!isLogicalPathWithin(browserRoot.path, path) || !isWithin(browserRoot.directoryPath, filePath))) {
260
+ throw new Error(`PI WEB plugin browser module is outside browser root for ${pluginId}: ${path}`);
261
+ }
262
+ if (kind === "browser") {
263
+ const pathSegments = path.split("/");
264
+ await validateBrowserDirectoryPrefixes(packageRoot, pluginId, "browser module", path, pathSegments.slice(0, -1));
265
+ await validateBrowserPathSpelling(packageRoot, pluginId, "browser module", path, pathSegments, directoryEntryNamesProvider);
266
+ }
267
+ return { path, filePath, revision };
268
+ }
269
+ async function validateBrowserPathSpelling(packageRoot, pluginId, kind, entryPath, pathSegments, directoryEntryNamesProvider) {
270
+ let directoryPath = packageRoot;
271
+ for (const segment of pathSegments) {
272
+ const entryNames = await directoryEntryNamesProvider(directoryPath);
273
+ if (!entryNames.includes(segment)) {
274
+ throw new Error(`PI WEB plugin ${kind} path does not exactly match package directory entries for ${pluginId}: ${entryPath}`);
275
+ }
276
+ directoryPath = join(directoryPath, segment);
277
+ }
278
+ }
279
+ async function validateBrowserDirectoryPrefixes(packageRoot, pluginId, kind, entryPath, directorySegments) {
280
+ const canonicalAncestors = new Set([packageRoot]);
281
+ let candidate = packageRoot;
282
+ for (const segment of directorySegments) {
283
+ candidate = join(candidate, segment);
284
+ const [entryStat, directoryPath] = await Promise.all([
285
+ stat(candidate).catch(() => undefined),
286
+ realpath(candidate).catch(() => undefined),
287
+ ]);
288
+ if (entryStat?.isDirectory() !== true || directoryPath === undefined) {
289
+ throw new Error(`PI WEB plugin ${kind} path cannot be traversed for ${pluginId}: ${entryPath}`);
290
+ }
291
+ if (!isWithin(packageRoot, directoryPath)) {
292
+ throw new Error(`PI WEB plugin ${kind} path escapes its package for ${pluginId}: ${entryPath}`);
293
+ }
294
+ const excludedDirectory = excludedArtifactDirectory(packageRoot, directoryPath);
295
+ if (excludedDirectory !== undefined) {
296
+ throw new Error(`PI WEB plugin ${kind} path resolves inside excluded ${excludedDirectory} directory for ${pluginId}: ${entryPath}`);
297
+ }
298
+ // Keep discovery aligned with the artifact scanner, which skips a logical
299
+ // directory cycle instead of capturing entries hidden behind that path.
300
+ if ([...canonicalAncestors].some((ancestor) => isWithin(directoryPath, ancestor))) {
301
+ throw new Error(`PI WEB plugin ${kind} path revisits a canonical ancestor for ${pluginId}: ${entryPath}`);
302
+ }
303
+ canonicalAncestors.add(directoryPath);
304
+ }
305
+ }
306
+ export const PI_WEB_PLUGIN_ARTIFACT_MAX_ENTRIES = 4_096;
307
+ export const PI_WEB_PLUGIN_ARTIFACT_MAX_BYTES = 16 * 1024 * 1024;
308
+ const EXCLUDED_ARTIFACT_DIRECTORIES = new Set([".git", "node_modules"]);
309
+ export async function computePiWebPluginPackageRevision(packageRoot) {
310
+ return (await scanPiWebPluginPackage(packageRoot)).revision;
311
+ }
312
+ export async function readPiWebPluginPackageArtifact(packageRoot, browserRoot) {
313
+ const files = new Map();
314
+ const result = await scanPiWebPluginPackage(packageRoot, { browserRoot, files });
315
+ return { ...result, files };
316
+ }
317
+ async function scanPiWebPluginPackage(packageRoot, capture) {
318
+ const canonicalRoot = await realpath(packageRoot);
319
+ const hash = createHash("sha256");
320
+ const state = { entries: 0, byteLength: 0, ...(capture === undefined ? {} : { capture }) };
321
+ await hashPackageDirectory(hash, canonicalRoot, canonicalRoot, "", new Set(), state);
322
+ return { revision: `sha256:${hash.digest("hex")}`, byteLength: state.byteLength };
323
+ }
324
+ async function hashPackageDirectory(hash, packageRoot, directory, logicalDirectory, ancestors, state) {
325
+ const canonicalDirectory = await realpath(directory);
326
+ if (!isWithin(packageRoot, canonicalDirectory)
327
+ || excludedArtifactDirectory(packageRoot, canonicalDirectory) !== undefined
328
+ || ancestors.has(canonicalDirectory))
329
+ return;
330
+ const nextAncestors = new Set(ancestors).add(canonicalDirectory);
331
+ const entries = await boundedDirectoryEntries(directory, state);
332
+ for (const entry of entries) {
333
+ const logicalPath = logicalDirectory === "" ? entry.name : `${logicalDirectory}/${entry.name}`;
334
+ const candidate = join(directory, entry.name);
335
+ const canonicalPath = await realpath(candidate).catch(() => undefined);
336
+ if (canonicalPath === undefined || !isWithin(packageRoot, canonicalPath)) {
337
+ updatePackageHash(hash, "unavailable", logicalPath);
338
+ continue;
339
+ }
340
+ const candidateStat = await stat(candidate).catch(() => undefined);
341
+ if (candidateStat?.isDirectory() === true) {
342
+ if (EXCLUDED_ARTIFACT_DIRECTORIES.has(entry.name)
343
+ || excludedArtifactDirectory(packageRoot, canonicalPath) !== undefined) {
344
+ updatePackageHash(hash, "excluded-directory", logicalPath);
345
+ continue;
346
+ }
347
+ updatePackageHash(hash, "directory", logicalPath, relative(packageRoot, canonicalPath));
348
+ await hashPackageDirectory(hash, packageRoot, candidate, logicalPath, nextAncestors, state);
349
+ continue;
350
+ }
351
+ if (candidateStat?.isFile() === true) {
352
+ if (excludedArtifactDirectory(packageRoot, dirname(canonicalPath)) !== undefined) {
353
+ updatePackageHash(hash, "excluded-directory", logicalPath);
354
+ continue;
355
+ }
356
+ const remainingBytes = PI_WEB_PLUGIN_ARTIFACT_MAX_BYTES - state.byteLength;
357
+ const content = await readBoundedPackageFile(candidate, remainingBytes);
358
+ state.byteLength += content.byteLength;
359
+ if (state.capture !== undefined
360
+ && isLogicalPathWithin(state.capture.browserRoot.path, logicalPath)
361
+ && isWithin(state.capture.browserRoot.directoryPath, canonicalPath)) {
362
+ state.capture.files.set(logicalPath, content);
363
+ }
364
+ updatePackageHash(hash, "file", logicalPath, relative(packageRoot, canonicalPath), content);
365
+ continue;
366
+ }
367
+ updatePackageHash(hash, "other", logicalPath);
368
+ }
369
+ }
370
+ async function boundedDirectoryEntries(directory, state) {
371
+ const entries = [];
372
+ const handle = await opendir(directory);
373
+ for await (const entry of handle) {
374
+ state.entries += 1;
375
+ if (state.entries > PI_WEB_PLUGIN_ARTIFACT_MAX_ENTRIES) {
376
+ throw new Error(`PI WEB plugin package exceeds the ${String(PI_WEB_PLUGIN_ARTIFACT_MAX_ENTRIES)} artifact entry limit`);
377
+ }
378
+ entries.push(entry);
379
+ }
380
+ return entries.sort((left, right) => left.name < right.name ? -1 : left.name > right.name ? 1 : 0);
381
+ }
382
+ async function readBoundedPackageFile(filePath, remainingBytes) {
383
+ const handle = await open(filePath, "r");
384
+ const chunks = [];
385
+ let byteLength = 0;
386
+ try {
387
+ const buffer = Buffer.allocUnsafe(64 * 1024);
388
+ let bytesRead;
389
+ do {
390
+ ({ bytesRead } = await handle.read(buffer, 0, buffer.byteLength));
391
+ if (bytesRead > 0) {
392
+ byteLength += bytesRead;
393
+ if (byteLength > remainingBytes) {
394
+ throw new Error(`PI WEB plugin package exceeds the ${String(PI_WEB_PLUGIN_ARTIFACT_MAX_BYTES)} byte artifact limit`);
395
+ }
396
+ chunks.push(Buffer.from(buffer.subarray(0, bytesRead)));
397
+ }
398
+ } while (bytesRead > 0);
399
+ }
400
+ finally {
401
+ await handle.close();
402
+ }
403
+ return Buffer.concat(chunks, byteLength);
404
+ }
405
+ function updatePackageHash(hash, ...values) {
406
+ for (const value of values) {
407
+ const content = typeof value === "string" ? Buffer.from(value) : value;
408
+ hash.update(String(content.byteLength));
409
+ hash.update(":");
410
+ hash.update(content);
411
+ hash.update(";");
412
+ }
413
+ }
414
+ async function readPiWebPackageConfig(root) {
415
+ const packagePath = join(root, "package.json");
416
+ const canonicalPackagePath = await realpath(packagePath).catch(() => undefined);
417
+ if (canonicalPackagePath === undefined)
418
+ return undefined;
419
+ const packageRoot = await realpath(root);
420
+ if (!isWithin(packageRoot, canonicalPackagePath)) {
421
+ throw new Error(`PI WEB plugin package metadata escapes its package: ${packagePath}`);
422
+ }
423
+ const excludedDirectory = excludedArtifactDirectory(packageRoot, dirname(canonicalPackagePath));
424
+ if (excludedDirectory !== undefined) {
425
+ throw new Error(`PI WEB plugin package metadata resolves inside excluded ${excludedDirectory} directory: ${packagePath}`);
426
+ }
427
+ const content = await readFile(canonicalPackagePath, "utf8").catch(() => undefined);
428
+ if (content === undefined)
429
+ return undefined;
430
+ const parsed = JSON.parse(content);
431
+ if (!isRecord(parsed))
432
+ return undefined;
433
+ const piWeb = parsed["piWeb"];
434
+ if (!isRecord(piWeb))
435
+ return undefined;
436
+ const plugins = parsePluginEntries(piWeb, packagePath);
437
+ if (plugins.length === 0)
438
+ return undefined;
439
+ return { plugins };
440
+ }
441
+ function parsePluginEntries(piWeb, packagePath) {
442
+ if (piWeb["plugin"] !== undefined) {
443
+ throw new Error(`Unsupported PI WEB plugin metadata in ${packagePath}: use piWeb.plugins with { id, module?, browserRoot?, serverModule?, machineSpecific? } entries`);
444
+ }
445
+ const plugins = piWeb["plugins"];
446
+ if (plugins === undefined)
447
+ return [];
448
+ if (!Array.isArray(plugins))
449
+ throw new Error(`PI WEB plugins must be an array in ${packagePath}`);
450
+ return plugins.map((entry, index) => {
451
+ if (!isRecord(entry))
452
+ throw new Error(`PI WEB plugin entry ${String(index + 1)} must be an object in ${packagePath}`);
453
+ const id = entry["id"];
454
+ if (typeof id !== "string" || !isPiWebPluginId(id))
455
+ throw new Error(`Invalid PI WEB plugin id in ${packagePath}: ${String(id)}`);
456
+ if (isReservedPiWebPluginId(id))
457
+ throw new Error(`Reserved PI WEB plugin id in ${packagePath}: ${id}`);
458
+ const module = parseOptionalModule(entry["module"], "browser", packagePath, id);
459
+ const serverModule = parseOptionalModule(entry["serverModule"], "server", packagePath, id);
460
+ if (module === undefined && serverModule === undefined)
461
+ throw new Error(`PI WEB plugin ${id} must declare module or serverModule in ${packagePath}`);
462
+ const browserRoot = parseBrowserRoot(entry["browserRoot"], packagePath, id, module !== undefined);
463
+ const configuredMachineSpecific = parseMachineSpecific(entry["machineSpecific"], packagePath, id);
464
+ if (module !== undefined && serverModule !== undefined && configuredMachineSpecific === false) {
465
+ throw new Error(`PI WEB plugin ${id} has browser and server modules and must be machine-specific in ${packagePath}`);
466
+ }
467
+ const machineSpecific = configuredMachineSpecific ?? (module !== undefined && serverModule !== undefined);
468
+ return {
469
+ id,
470
+ ...(browserRoot === undefined ? {} : { browserRoot }),
471
+ ...(module === undefined ? {} : { module }),
472
+ ...(serverModule === undefined ? {} : { serverModule }),
473
+ machineSpecific,
474
+ };
475
+ });
476
+ }
477
+ function parseOptionalModule(value, kind, packagePath, pluginId) {
478
+ if (value === undefined)
479
+ return undefined;
480
+ if (typeof value !== "string" || value === "")
481
+ throw new Error(`Invalid PI WEB plugin ${kind} module for ${pluginId} in ${packagePath}`);
482
+ return value;
483
+ }
484
+ function parseBrowserRoot(value, packagePath, pluginId, hasBrowserModule) {
485
+ if (value === undefined) {
486
+ if (hasBrowserModule)
487
+ throw new Error(`PI WEB plugin ${pluginId} with a browser module must declare browserRoot in ${packagePath}`);
488
+ return undefined;
489
+ }
490
+ if (!hasBrowserModule)
491
+ throw new Error(`PI WEB plugin ${pluginId} must not declare browserRoot without a browser module in ${packagePath}`);
492
+ if (typeof value !== "string" || value === "")
493
+ throw new Error(`Invalid PI WEB plugin browserRoot for ${pluginId} in ${packagePath}`);
494
+ if (!isSafeRelativeBrowserRootPath(value))
495
+ throw new Error(`Unsafe PI WEB plugin browser root for ${pluginId}: ${value}`);
496
+ return value;
497
+ }
498
+ function parseMachineSpecific(value, packagePath, pluginId) {
499
+ if (value === undefined)
500
+ return undefined;
501
+ if (typeof value !== "boolean")
502
+ throw new Error(`Invalid PI WEB plugin machineSpecific value for ${pluginId} in ${packagePath}: ${formatUnknownValue(value)}`);
503
+ return value;
504
+ }
505
+ function applyDesiredState(plugin, config) {
506
+ const pluginConfig = config.plugins?.[plugin.id];
507
+ const settings = { ...(pluginConfig?.settings ?? {}) };
508
+ return {
509
+ ...plugin,
510
+ enabled: pluginConfig?.enabled !== false,
511
+ settings,
512
+ settingsRevision: pluginSettingsRevision(settings),
513
+ };
514
+ }
515
+ function pluginSettingsRevision(settings) {
516
+ const canonical = JSON.stringify(canonicalJson(settings));
517
+ return `sha256:${createHash("sha256").update(canonical).digest("hex")}`;
518
+ }
519
+ function canonicalJson(value) {
520
+ if (Array.isArray(value))
521
+ return value.map(canonicalJson);
522
+ if (!isRecord(value))
523
+ return value;
524
+ return Object.fromEntries(Object.keys(value)
525
+ .sort()
526
+ .map((key) => [key, canonicalJson(value[key])]));
527
+ }
528
+ function addUnique(records, plugin, report) {
529
+ if (records.has(plugin.id)) {
530
+ report(plugin.source, `Duplicate PI WEB plugin id: ${plugin.id}`, { code: "duplicate-id", pluginId: plugin.id });
531
+ return;
532
+ }
533
+ records.set(plugin.id, plugin);
534
+ }
535
+ const WINDOWS_DRIVE_QUALIFIER = /^[A-Za-z]:/u;
536
+ function isSafeRelativeModulePath(path) {
537
+ if (path === "" || path.includes("\\") || hasControlCharacter(path) || isAbsolute(path) || win32.isAbsolute(path) || WINDOWS_DRIVE_QUALIFIER.test(path))
538
+ return false;
539
+ return path.split("/").every((segment) => segment !== "" && segment !== "." && segment !== ".." && !EXCLUDED_ARTIFACT_DIRECTORIES.has(segment));
540
+ }
541
+ function isSafeRelativeBrowserRootPath(path) {
542
+ if (path === ".")
543
+ return true;
544
+ return isSafeRelativeModulePath(path) && path.split("/").every((segment) => segment !== "" && segment !== ".");
545
+ }
546
+ function isLogicalPathWithin(root, candidate) {
547
+ return root === "." || candidate.startsWith(`${root}/`);
548
+ }
549
+ function excludedArtifactDirectory(packageRoot, directoryPath) {
550
+ const relativeDirectory = relative(packageRoot, directoryPath);
551
+ if (relativeDirectory === "")
552
+ return undefined;
553
+ return relativeDirectory.split(sep).find((segment) => EXCLUDED_ARTIFACT_DIRECTORIES.has(segment));
554
+ }
555
+ function hasControlCharacter(value) {
556
+ for (const character of value) {
557
+ const code = character.charCodeAt(0);
558
+ if (code < 32 || code === 127)
559
+ return true;
560
+ }
561
+ return false;
562
+ }
563
+ function formatUnknownValue(value) {
564
+ if (typeof value === "string")
565
+ return value;
566
+ if (typeof value === "number" || typeof value === "boolean" || typeof value === "bigint" || typeof value === "symbol" || typeof value === "function" || value === null || value === undefined)
567
+ return String(value);
568
+ try {
569
+ return JSON.stringify(value);
570
+ }
571
+ catch {
572
+ return Object.prototype.toString.call(value);
573
+ }
574
+ }
575
+ const nativePathPlatform = { isAbsolute, relative, sep };
576
+ export function isWithin(root, candidate, pathPlatform = nativePathPlatform) {
577
+ const rel = pathPlatform.relative(root, candidate);
578
+ // Windows returns an absolute relative() result when the paths are on different volumes.
579
+ return rel === "" || (!pathPlatform.isAbsolute(rel) && !rel.startsWith("..") && !rel.startsWith(pathPlatform.sep));
580
+ }
581
+ function isRecord(value) {
582
+ return typeof value === "object" && value !== null && !Array.isArray(value);
583
+ }
584
+ //# sourceMappingURL=piWebPluginCatalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"piWebPluginCatalog.js","sourceRoot":"","sources":["../../src/server/piWebPluginCatalog.ts"],"names":[],"mappings":"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"}