@chainingintention/pi-web-cn 2.0.0 → 2.202610.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (584) hide show
  1. package/README.md +61 -106
  2. package/dist/.plugins-ready +1 -0
  3. package/dist/cli.js +331 -174
  4. package/dist/cli.js.map +1 -1
  5. package/dist/client/apple-touch-icon-dev.png +0 -0
  6. package/dist/client/assets/PiWebApp-BXSziMEg.js +4921 -0
  7. package/dist/client/assets/classic-CyM97Akm.css +54 -0
  8. package/dist/client/assets/external-B9K8duyP.js +2 -0
  9. package/dist/client/assets/graphite-DquaqFXU.css +54 -0
  10. package/dist/client/assets/index-cdtUOfOW.js +2 -0
  11. package/dist/client/assets/paper-CB1oLuRr.css +54 -0
  12. package/dist/client/assets/pi-web-dark-D_KtbM95.css +54 -0
  13. package/dist/client/assets/pi-web-light-DSNLMIBI.css +54 -0
  14. package/dist/client/assets/vendor-editor-core-BfnHL1Dg.js +10 -0
  15. package/dist/client/assets/vendor-editor-languages-bNquDJP0.js +28 -0
  16. package/dist/client/favicon-dev.svg +8 -0
  17. package/dist/client/index.html +7 -51
  18. package/dist/client/manifest.webmanifest +2 -1
  19. package/dist/client/pwa-icon-dev-192.png +0 -0
  20. package/dist/client/pwa-icon-dev-512.png +0 -0
  21. package/dist/config.js +55 -8
  22. package/dist/config.js.map +1 -1
  23. package/dist/docker/piWebDockerCommandPlan.js +13 -4
  24. package/dist/docker/piWebDockerCommandPlan.js.map +1 -1
  25. package/dist/environment.js +4 -0
  26. package/dist/environment.js.map +1 -0
  27. package/dist/localization.js +24 -0
  28. package/dist/localization.js.map +1 -0
  29. package/dist/nativeServices/installedServiceDefinitions.js +617 -0
  30. package/dist/nativeServices/installedServiceDefinitions.js.map +1 -0
  31. package/dist/nativeServices/serviceAction.js +78 -20
  32. package/dist/nativeServices/serviceAction.js.map +1 -1
  33. package/dist/nativeServices/serviceDoctor.js +418 -114
  34. package/dist/nativeServices/serviceDoctor.js.map +1 -1
  35. package/dist/nativeServices/servicePlan.js +2 -2
  36. package/dist/nativeServices/servicePlan.js.map +1 -1
  37. package/dist/pi-packages/captains-log/README.md +11 -0
  38. package/dist/pi-packages/captains-log/dist/browser/channelProtocol.js +29 -0
  39. package/dist/pi-packages/captains-log/dist/browser/index.js +143 -0
  40. package/dist/pi-packages/captains-log/dist/browser/markdown.js +68 -0
  41. package/dist/pi-packages/captains-log/dist/browser/panel.js +148 -0
  42. package/dist/pi-packages/captains-log/dist/browser/protocol.js +26 -0
  43. package/dist/pi-packages/captains-log/dist/companion.js +126 -0
  44. package/dist/pi-packages/captains-log/dist/roundtrip.js +62 -0
  45. package/dist/pi-packages/captains-log/dist/server.js +210 -0
  46. package/dist/pi-packages/captains-log/dist/store.js +75 -0
  47. package/dist/pi-packages/captains-log/docs/usage.md +29 -0
  48. package/dist/pi-packages/captains-log/i18n.js +7 -0
  49. package/dist/pi-packages/captains-log/package.json +35 -0
  50. package/dist/pi-packages/captains-log/tsconfig.json +21 -0
  51. package/dist/pi-packages/captains-log/vite.config.mjs +28 -0
  52. package/dist/pi-packages/relays/extensions/index.js +61 -0
  53. package/dist/pi-packages/relays/i18n.js +7 -0
  54. package/dist/{pi-web-plugins → pi-packages}/relays/markdownDocument.js +3 -2
  55. package/dist/pi-packages/relays/package.json +20 -0
  56. package/dist/pi-packages/relays/pi-web-plugin.js +96 -0
  57. package/dist/pi-packages/relays/prompts/relay-worktree.md +18 -0
  58. package/dist/pi-packages/relays/prompts/relay.md +18 -0
  59. package/dist/{pi-web-plugins → pi-packages}/relays/relayDiscovery.js +2 -2
  60. package/dist/pi-packages/relays/relayDispatch.js +67 -0
  61. package/dist/pi-packages/relays/relayIdentity.js +37 -0
  62. package/dist/{pi-web-plugins → pi-packages}/relays/relaysPanelElement.js +98 -59
  63. package/dist/pi-packages/relays/skills/relay/SKILL.md +50 -0
  64. package/dist/pi-packages/relays/skills/relay-runner/SKILL.md +74 -0
  65. package/dist/pi-packages/workflows/browser/pi-web-plugin.js +42 -0
  66. package/dist/pi-packages/workflows/browser/worktreeDialog.js +170 -0
  67. package/dist/pi-packages/workflows/package.json +23 -0
  68. package/dist/pi-packages/workflows/prompts/worktree.md +21 -0
  69. package/dist/pi-packages/workflows/server-plugin.js +586 -0
  70. package/dist/pi-packages/workflows/vite.config.mjs +17 -0
  71. package/dist/pi-web-plugins/code-highlight/browser/pi-web-plugin.js +22 -0
  72. package/dist/pi-web-plugins/code-highlight/package.json +13 -0
  73. package/dist/pi-web-plugins/files/browser/assets/files-icon-DZObYhxb.svg +3 -0
  74. package/dist/pi-web-plugins/files/browser/pi-web-plugin.js +466 -0
  75. package/dist/pi-web-plugins/files/package.json +15 -0
  76. package/dist/pi-web-plugins/git/browser/git-contract.js +22 -11
  77. package/dist/pi-web-plugins/git/browser/git-panel.js +228 -100
  78. package/dist/pi-web-plugins/git/browser/i18n.js +7 -0
  79. package/dist/pi-web-plugins/git/browser/pi-web-plugin.js +28 -4
  80. package/dist/pi-web-plugins/git/git-backend.js +61 -21
  81. package/dist/pi-web-plugins/git/gitStatusCache.js +48 -0
  82. package/dist/pi-web-plugins/git/i18n.js +7 -0
  83. package/dist/pi-web-plugins/git/package.json +1 -0
  84. package/dist/pi-web-plugins/git/server-plugin.js +45 -24
  85. package/dist/pi-web-plugins/git/workspace-discovery-notify.cjs +14 -0
  86. package/dist/pi-web-plugins/git/workspaceDiscoveryHooks.js +186 -0
  87. package/dist/pi-web-plugins/info/i18n.js +7 -0
  88. package/dist/pi-web-plugins/info/infoInternals.js +76 -65
  89. package/dist/pi-web-plugins/info/package.json +1 -1
  90. package/dist/pi-web-plugins/info/pi-web-plugin.js +40 -42
  91. package/dist/pi-web-plugins/mermaid/browser/mermaid-engine.js +4255 -0
  92. package/dist/pi-web-plugins/mermaid/browser/pi-web-plugin.js +11 -0
  93. package/dist/pi-web-plugins/mermaid/package.json +13 -0
  94. package/dist/pi-web-plugins/terminal/browser/pi-web-plugin.js +219 -0
  95. package/dist/pi-web-plugins/terminal/i18n.js +7 -0
  96. package/dist/pi-web-plugins/terminal/package.json +16 -0
  97. package/dist/pi-web-plugins/terminal/server-plugin.js +367 -0
  98. package/dist/pi-web-plugins/terminal/terminalService.js +436 -0
  99. package/dist/pi-web-plugins/updates/i18n.js +7 -0
  100. package/dist/pi-web-plugins/updates/package.json +1 -1
  101. package/dist/pi-web-plugins/updates/pi-web-plugin.js +143 -140
  102. package/dist/pi-web-plugins/updates/updatesLogic.js +24 -24
  103. package/dist/pi-web-plugins/workspace-tasks/config.js +12 -11
  104. package/dist/pi-web-plugins/workspace-tasks/i18n.js +7 -0
  105. package/dist/pi-web-plugins/workspace-tasks/package.json +1 -1
  106. package/dist/pi-web-plugins/workspace-tasks/pi-web-plugin.js +31 -9
  107. package/dist/pi-web-plugins/workspace-tasks/tasksPanelElement.js +54 -36
  108. package/dist/pi-web-plugins/workspace-tasks/workspaceTasksClient.js +12 -11
  109. package/dist/pi-web-plugins/zh-cn/auth.json +9 -0
  110. package/dist/pi-web-plugins/zh-cn/bundled.json +219 -0
  111. package/dist/pi-web-plugins/zh-cn/cli.json +230 -0
  112. package/dist/pi-web-plugins/zh-cn/client.json +225 -0
  113. package/dist/pi-web-plugins/zh-cn/components.json +1252 -0
  114. package/dist/pi-web-plugins/zh-cn/config-errors.json +188 -0
  115. package/dist/pi-web-plugins/zh-cn/files.json +50 -0
  116. package/dist/pi-web-plugins/zh-cn/machines.json +28 -0
  117. package/dist/pi-web-plugins/zh-cn/main.json +459 -0
  118. package/dist/pi-web-plugins/zh-cn/management-errors.json +23 -0
  119. package/dist/pi-web-plugins/zh-cn/manifest.webmanifest +25 -0
  120. package/dist/pi-web-plugins/zh-cn/metadata.json +3 -0
  121. package/dist/pi-web-plugins/zh-cn/package.json +10 -0
  122. package/dist/pi-web-plugins/zh-cn/pi-web-plugin.js +16 -0
  123. package/dist/pi-web-plugins/zh-cn/projects.json +6 -0
  124. package/dist/pi-web-plugins/zh-cn/provider-auth.json +18 -0
  125. package/dist/pi-web-plugins/zh-cn/routing.json +68 -0
  126. package/dist/pi-web-plugins/zh-cn/server-main.json +99 -0
  127. package/dist/pi-web-plugins/zh-cn/server.json +256 -0
  128. package/dist/piAi.js +4 -0
  129. package/dist/piAi.js.map +1 -0
  130. package/dist/piRuntime.js +150 -0
  131. package/dist/piRuntime.js.map +1 -0
  132. package/dist/piSdk.js +5 -0
  133. package/dist/piSdk.js.map +1 -0
  134. package/dist/piWebUpdate.js +508 -0
  135. package/dist/piWebUpdate.js.map +1 -0
  136. package/dist/piWebVersionReport.js +109 -41
  137. package/dist/piWebVersionReport.js.map +1 -1
  138. package/dist/plugin-api.d.ts +609 -29
  139. package/dist/plugin-api.js +1 -0
  140. package/dist/pluginRecoveryCli.js +27 -25
  141. package/dist/pluginRecoveryCli.js.map +1 -1
  142. package/dist/server/activity/workspaceActivityService.js +13 -6
  143. package/dist/server/activity/workspaceActivityService.js.map +1 -1
  144. package/dist/server/app.js +155 -77
  145. package/dist/server/app.js.map +1 -1
  146. package/dist/server/audit/managementAuditStore.js +6 -1
  147. package/dist/server/audit/managementAuditStore.js.map +1 -1
  148. package/dist/server/audit/normalToolAuditCli.js +45 -43
  149. package/dist/server/audit/normalToolAuditCli.js.map +1 -1
  150. package/dist/server/browserMessageProjection.js +39 -22
  151. package/dist/server/browserMessageProjection.js.map +1 -1
  152. package/dist/server/configRoutes.js +54 -33
  153. package/dist/server/configRoutes.js.map +1 -1
  154. package/dist/server/deploymentIdentity.js +67 -0
  155. package/dist/server/deploymentIdentity.js.map +1 -0
  156. package/dist/server/deploymentIdentityRoutes.js +22 -0
  157. package/dist/server/deploymentIdentityRoutes.js.map +1 -0
  158. package/dist/server/diagnostics/nodePtyNativeModule.js +7 -6
  159. package/dist/server/diagnostics/nodePtyNativeModule.js.map +1 -1
  160. package/dist/server/diagnostics/nodePtySpawnHelper.js +21 -20
  161. package/dist/server/diagnostics/nodePtySpawnHelper.js.map +1 -1
  162. package/dist/server/index.js +10 -1
  163. package/dist/server/index.js.map +1 -1
  164. package/dist/server/knownAutoInstallPiPackages.js +36 -0
  165. package/dist/server/knownAutoInstallPiPackages.js.map +1 -0
  166. package/dist/server/knownPiPackages.js +12 -0
  167. package/dist/server/knownPiPackages.js.map +1 -0
  168. package/dist/server/machines/machineClient.js +23 -19
  169. package/dist/server/machines/machineClient.js.map +1 -1
  170. package/dist/server/machines/machinePluginProxyRoutes.js +131 -31
  171. package/dist/server/machines/machinePluginProxyRoutes.js.map +1 -1
  172. package/dist/server/machines/machineProxyRoutes.js +138 -47
  173. package/dist/server/machines/machineProxyRoutes.js.map +1 -1
  174. package/dist/server/machines/machineRoutes.js +18 -13
  175. package/dist/server/machines/machineRoutes.js.map +1 -1
  176. package/dist/server/machines/machineService.js +40 -18
  177. package/dist/server/machines/machineService.js.map +1 -1
  178. package/dist/server/managementEmbed.js +149 -30
  179. package/dist/server/managementEmbed.js.map +1 -1
  180. package/dist/server/managementPrivileges.js +21 -0
  181. package/dist/server/managementPrivileges.js.map +1 -0
  182. package/dist/server/managementTerminalProxyRoutes.js +124 -0
  183. package/dist/server/managementTerminalProxyRoutes.js.map +1 -0
  184. package/dist/server/navigationPreferenceRoutes.js +59 -0
  185. package/dist/server/navigationPreferenceRoutes.js.map +1 -0
  186. package/dist/server/normalAuth.js +77 -53
  187. package/dist/server/normalAuth.js.map +1 -1
  188. package/dist/server/notices/serverNoticeRoutes.js +43 -0
  189. package/dist/server/notices/serverNoticeRoutes.js.map +1 -0
  190. package/dist/server/notices/serverNoticeService.js +26 -0
  191. package/dist/server/notices/serverNoticeService.js.map +1 -0
  192. package/dist/server/notices/serverNoticeStore.js +122 -0
  193. package/dist/server/notices/serverNoticeStore.js.map +1 -0
  194. package/dist/server/passwordVerifier.js +91 -0
  195. package/dist/server/passwordVerifier.js.map +1 -0
  196. package/dist/server/piPackageIdentity.js +25 -0
  197. package/dist/server/piPackageIdentity.js.map +1 -0
  198. package/dist/server/piPackageService.js +72 -9
  199. package/dist/server/piPackageService.js.map +1 -1
  200. package/dist/server/piWebPluginCatalog.js +212 -35
  201. package/dist/server/piWebPluginCatalog.js.map +1 -1
  202. package/dist/server/piWebPluginLifecycle.js +29 -3
  203. package/dist/server/piWebPluginLifecycle.js.map +1 -1
  204. package/dist/server/piWebPluginService.js +199 -292
  205. package/dist/server/piWebPluginService.js.map +1 -1
  206. package/dist/server/piWebStatus.js +57 -100
  207. package/dist/server/piWebStatus.js.map +1 -1
  208. package/dist/server/pluginCallbackDrain.js +35 -0
  209. package/dist/server/pluginCallbackDrain.js.map +1 -0
  210. package/dist/server/plugins/pluginBackendChannelProxyAdmission.js +84 -0
  211. package/dist/server/plugins/pluginBackendChannelProxyAdmission.js.map +1 -0
  212. package/dist/server/plugins/pluginBackendChannelProxyCoordinator.js +234 -0
  213. package/dist/server/plugins/pluginBackendChannelProxyCoordinator.js.map +1 -0
  214. package/dist/server/plugins/pluginBackendChannelProxyRoutes.js +61 -0
  215. package/dist/server/plugins/pluginBackendChannelProxyRoutes.js.map +1 -0
  216. package/dist/server/plugins/pluginBackendProxyRoutes.js +47 -57
  217. package/dist/server/plugins/pluginBackendProxyRoutes.js.map +1 -1
  218. package/dist/server/plugins/pluginBackendRegistry.js +804 -0
  219. package/dist/server/plugins/pluginBackendRegistry.js.map +1 -0
  220. package/dist/server/plugins/projectPluginSettings.js +95 -0
  221. package/dist/server/plugins/projectPluginSettings.js.map +1 -0
  222. package/dist/server/plugins/serverPluginCatalogCapability.js +106 -0
  223. package/dist/server/plugins/serverPluginCatalogCapability.js.map +1 -0
  224. package/dist/server/plugins/serverPluginPiSessionEventsCapability.js +34 -0
  225. package/dist/server/plugins/serverPluginPiSessionEventsCapability.js.map +1 -0
  226. package/dist/server/plugins/serverPluginPiSessionsCapability.js +185 -0
  227. package/dist/server/plugins/serverPluginPiSessionsCapability.js.map +1 -0
  228. package/dist/server/plugins/serverPluginRuntime.js +1088 -108
  229. package/dist/server/plugins/serverPluginRuntime.js.map +1 -1
  230. package/dist/server/plugins/serverPluginWorkspacesCapability.js +114 -0
  231. package/dist/server/plugins/serverPluginWorkspacesCapability.js.map +1 -0
  232. package/dist/server/projectTrustRoutes.js +86 -0
  233. package/dist/server/projectTrustRoutes.js.map +1 -0
  234. package/dist/server/projects/projectLifecycleService.js +94 -0
  235. package/dist/server/projects/projectLifecycleService.js.map +1 -0
  236. package/dist/server/projects/projectService.js +7 -4
  237. package/dist/server/projects/projectService.js.map +1 -1
  238. package/dist/server/realtime/sessionEventHub.js +58 -39
  239. package/dist/server/realtime/sessionEventHub.js.map +1 -1
  240. package/dist/server/realtime/sessionEventScope.js +4 -0
  241. package/dist/server/realtime/sessionEventScope.js.map +1 -1
  242. package/dist/server/requestCancellation.js +15 -1
  243. package/dist/server/requestCancellation.js.map +1 -1
  244. package/dist/server/sessiond/agentHttpDispatcher.js +108 -0
  245. package/dist/server/sessiond/agentHttpDispatcher.js.map +1 -0
  246. package/dist/server/sessiond/autoInstallPiPackages.js +63 -0
  247. package/dist/server/sessiond/autoInstallPiPackages.js.map +1 -0
  248. package/dist/server/sessiond/pluginBackendChannelRoutes.js +410 -0
  249. package/dist/server/sessiond/pluginBackendChannelRoutes.js.map +1 -0
  250. package/dist/server/sessiond/pluginBackendRoutes.js +64 -47
  251. package/dist/server/sessiond/pluginBackendRoutes.js.map +1 -1
  252. package/dist/server/sessiond/pluginCatalogRoutes.js +41 -0
  253. package/dist/server/sessiond/pluginCatalogRoutes.js.map +1 -0
  254. package/dist/server/sessiond/projectMutationRoutes.js +39 -0
  255. package/dist/server/sessiond/projectMutationRoutes.js.map +1 -0
  256. package/dist/server/sessiond/sessionDaemonShutdown.js +36 -0
  257. package/dist/server/sessiond/sessionDaemonShutdown.js.map +1 -0
  258. package/dist/server/sessiond/sessionDaemonStartup.js +30 -4
  259. package/dist/server/sessiond/sessionDaemonStartup.js.map +1 -1
  260. package/dist/server/sessiond/sessionProxyRoutes.js +263 -91
  261. package/dist/server/sessiond/sessionProxyRoutes.js.map +1 -1
  262. package/dist/server/sessiond/sessionServiceDependencies.js +5 -0
  263. package/dist/server/sessiond/sessionServiceDependencies.js.map +1 -1
  264. package/dist/server/sessiond/sessiondStateOwnership.js +174 -39
  265. package/dist/server/sessiond/sessiondStateOwnership.js.map +1 -1
  266. package/dist/server/sessiond/workspaceCatalogRoutes.js +11 -5
  267. package/dist/server/sessiond/workspaceCatalogRoutes.js.map +1 -1
  268. package/dist/server/sessiond/workspaceNotificationRoutes.js +55 -0
  269. package/dist/server/sessiond/workspaceNotificationRoutes.js.map +1 -0
  270. package/dist/server/sessiond/workspaceRemovalRoutes.js +1 -1
  271. package/dist/server/sessiond/workspaceRemovalRoutes.js.map +1 -1
  272. package/dist/server/sessiond.js +313 -69
  273. package/dist/server/sessiond.js.map +1 -1
  274. package/dist/server/sessions/askUserDomain.js +232 -0
  275. package/dist/server/sessions/askUserDomain.js.map +1 -0
  276. package/dist/server/sessions/askUserTool.js +18 -21
  277. package/dist/server/sessions/askUserTool.js.map +1 -1
  278. package/dist/server/sessions/attachmentService.js +2 -6
  279. package/dist/server/sessions/attachmentService.js.map +1 -1
  280. package/dist/server/sessions/authRoutes.js +32 -19
  281. package/dist/server/sessions/authRoutes.js.map +1 -1
  282. package/dist/server/sessions/authService.js +31 -11
  283. package/dist/server/sessions/authService.js.map +1 -1
  284. package/dist/server/sessions/builtinCommands.js +28 -21
  285. package/dist/server/sessions/builtinCommands.js.map +1 -1
  286. package/dist/server/sessions/builtinExtensionFactories.js +36 -0
  287. package/dist/server/sessions/builtinExtensionFactories.js.map +1 -0
  288. package/dist/server/sessions/clientSessionPreview.js +14 -0
  289. package/dist/server/sessions/clientSessionPreview.js.map +1 -0
  290. package/dist/server/sessions/companionBackend.js +286 -0
  291. package/dist/server/sessions/companionBackend.js.map +1 -0
  292. package/dist/server/sessions/dockerEnvironmentFacts.js +98 -10
  293. package/dist/server/sessions/dockerEnvironmentFacts.js.map +1 -1
  294. package/dist/server/sessions/extensionSessionDispatch.js +76 -0
  295. package/dist/server/sessions/extensionSessionDispatch.js.map +1 -0
  296. package/dist/server/sessions/globalProviderPolicy.js +88 -19
  297. package/dist/server/sessions/globalProviderPolicy.js.map +1 -1
  298. package/dist/server/sessions/managementAgentTools.js +116 -6
  299. package/dist/server/sessions/managementAgentTools.js.map +1 -1
  300. package/dist/server/sessions/managementPermissionSystem.js +36 -14
  301. package/dist/server/sessions/managementPermissionSystem.js.map +1 -1
  302. package/dist/server/sessions/managementSandbox.js +7 -18
  303. package/dist/server/sessions/managementSandbox.js.map +1 -1
  304. package/dist/server/sessions/mcpAuthFlowService.js +289 -0
  305. package/dist/server/sessions/mcpAuthFlowService.js.map +1 -0
  306. package/dist/server/sessions/mcpAuthRoutes.js +104 -0
  307. package/dist/server/sessions/mcpAuthRoutes.js.map +1 -0
  308. package/dist/server/sessions/mcpOAuthCredentialAdapter.js +92 -0
  309. package/dist/server/sessions/mcpOAuthCredentialAdapter.js.map +1 -0
  310. package/dist/server/sessions/messageHistoryTarget.js +79 -0
  311. package/dist/server/sessions/messageHistoryTarget.js.map +1 -0
  312. package/dist/server/sessions/messagePaging.js +2 -2
  313. package/dist/server/sessions/messagePaging.js.map +1 -1
  314. package/dist/server/sessions/modelCatalogRefresher.js +4 -3
  315. package/dist/server/sessions/modelCatalogRefresher.js.map +1 -1
  316. package/dist/server/sessions/oauthLoginFlowService.js +19 -20
  317. package/dist/server/sessions/oauthLoginFlowService.js.map +1 -1
  318. package/dist/server/sessions/piSessionEventConnections.js +68 -0
  319. package/dist/server/sessions/piSessionEventConnections.js.map +1 -0
  320. package/dist/server/sessions/piSessionManagerGateway.js +206 -27
  321. package/dist/server/sessions/piSessionManagerGateway.js.map +1 -1
  322. package/dist/server/sessions/piSessionService.js +2508 -991
  323. package/dist/server/sessions/piSessionService.js.map +1 -1
  324. package/dist/server/sessions/plainTextTheme.js +1 -1
  325. package/dist/server/sessions/plainTextTheme.js.map +1 -1
  326. package/dist/server/sessions/projectAuthService.js +35 -6
  327. package/dist/server/sessions/projectAuthService.js.map +1 -1
  328. package/dist/server/sessions/projectSettingsScope.js +88 -33
  329. package/dist/server/sessions/projectSettingsScope.js.map +1 -1
  330. package/dist/server/sessions/projectTrust.js +119 -0
  331. package/dist/server/sessions/projectTrust.js.map +1 -0
  332. package/dist/server/sessions/queuedMessageMutation.js +170 -0
  333. package/dist/server/sessions/queuedMessageMutation.js.map +1 -0
  334. package/dist/server/sessions/relaySkill.js +169 -0
  335. package/dist/server/sessions/relaySkill.js.map +1 -0
  336. package/dist/server/sessions/sessionActivityMarker.js +105 -0
  337. package/dist/server/sessions/sessionActivityMarker.js.map +1 -0
  338. package/dist/server/sessions/sessionArchiveMapping.js +16 -15
  339. package/dist/server/sessions/sessionArchiveMapping.js.map +1 -1
  340. package/dist/server/sessions/sessionArchiveStore.js +5 -1
  341. package/dist/server/sessions/sessionArchiveStore.js.map +1 -1
  342. package/dist/server/sessions/sessionArchiveTree.js +2 -2
  343. package/dist/server/sessions/sessionArchiveTree.js.map +1 -1
  344. package/dist/server/sessions/sessionCleanup.js +4 -3
  345. package/dist/server/sessions/sessionCleanup.js.map +1 -1
  346. package/dist/server/sessions/sessionCommandService.js +79 -87
  347. package/dist/server/sessions/sessionCommandService.js.map +1 -1
  348. package/dist/server/sessions/sessionEnvironmentFacts.js +5 -4
  349. package/dist/server/sessions/sessionEnvironmentFacts.js.map +1 -1
  350. package/dist/server/sessions/sessionFileHeader.js +41 -0
  351. package/dist/server/sessions/sessionFileHeader.js.map +1 -1
  352. package/dist/server/sessions/sessionImageDimensions.js +31 -0
  353. package/dist/server/sessions/sessionImageDimensions.js.map +1 -0
  354. package/dist/server/sessions/sessionMediaIndex.js +191 -0
  355. package/dist/server/sessions/sessionMediaIndex.js.map +1 -0
  356. package/dist/server/sessions/sessionMetadata.js +51 -0
  357. package/dist/server/sessions/sessionMetadata.js.map +1 -0
  358. package/dist/server/sessions/sessionModelScope.js +160 -0
  359. package/dist/server/sessions/sessionModelScope.js.map +1 -0
  360. package/dist/server/sessions/sessionNameGenerator.js +16 -35
  361. package/dist/server/sessions/sessionNameGenerator.js.map +1 -1
  362. package/dist/server/sessions/sessionNotificationStore.js +14 -11
  363. package/dist/server/sessions/sessionNotificationStore.js.map +1 -1
  364. package/dist/server/sessions/sessionReadAccess.js +41 -0
  365. package/dist/server/sessions/sessionReadAccess.js.map +1 -0
  366. package/dist/server/sessions/sessionRoutes.js +221 -78
  367. package/dist/server/sessions/sessionRoutes.js.map +1 -1
  368. package/dist/server/sessions/sessionSummaryScanner.js +62 -5
  369. package/dist/server/sessions/sessionSummaryScanner.js.map +1 -1
  370. package/dist/server/sessions/sessionTreeProjection.js +50 -49
  371. package/dist/server/sessions/sessionTreeProjection.js.map +1 -1
  372. package/dist/server/sessions/sessionUiEvents.js +22 -10
  373. package/dist/server/sessions/sessionUiEvents.js.map +1 -1
  374. package/dist/server/sessions/sessionUnreadStore.js +53 -3
  375. package/dist/server/sessions/sessionUnreadStore.js.map +1 -1
  376. package/dist/server/sessions/spawnSessionTool.js +14 -6
  377. package/dist/server/sessions/spawnSessionTool.js.map +1 -1
  378. package/dist/server/sessions/spawnSubsessionTool.js +40 -24
  379. package/dist/server/sessions/spawnSubsessionTool.js.map +1 -1
  380. package/dist/server/sessions/spawnTargetResolver.js +1 -1
  381. package/dist/server/sessions/subsessionCompletionDelivery.js +15 -0
  382. package/dist/server/sessions/subsessionCompletionDelivery.js.map +1 -0
  383. package/dist/server/sessions/subsessionCompletionInbox.js +134 -0
  384. package/dist/server/sessions/subsessionCompletionInbox.js.map +1 -0
  385. package/dist/server/sessions/subsessionProvenance.js +27 -0
  386. package/dist/server/sessions/subsessionProvenance.js.map +1 -0
  387. package/dist/server/sessions/transcriptBranchCache.js +81 -0
  388. package/dist/server/sessions/transcriptBranchCache.js.map +1 -0
  389. package/dist/server/sessions/transcriptMarkdown.js +48 -0
  390. package/dist/server/sessions/transcriptMarkdown.js.map +1 -0
  391. package/dist/server/sessions/transcriptMessages.js +57 -0
  392. package/dist/server/sessions/transcriptMessages.js.map +1 -0
  393. package/dist/server/startupLogger.js +13 -0
  394. package/dist/server/startupLogger.js.map +1 -0
  395. package/dist/server/startupUrls.js +27 -0
  396. package/dist/server/startupUrls.js.map +1 -0
  397. package/dist/server/status/machineStatusService.js +15 -7
  398. package/dist/server/status/machineStatusService.js.map +1 -1
  399. package/dist/server/storage/navigationPreferenceStore.js +138 -0
  400. package/dist/server/storage/navigationPreferenceStore.js.map +1 -0
  401. package/dist/server/storage/piPackageDismissalStore.js +78 -0
  402. package/dist/server/storage/piPackageDismissalStore.js.map +1 -0
  403. package/dist/server/terminals/{terminalService.js → managementCommandRunService.js} +98 -102
  404. package/dist/server/terminals/managementCommandRunService.js.map +1 -0
  405. package/dist/server/terminals/managementTerminalRoutes.js +91 -0
  406. package/dist/server/terminals/managementTerminalRoutes.js.map +1 -0
  407. package/dist/server/terminals/requiredTerminalService.js +103 -0
  408. package/dist/server/terminals/requiredTerminalService.js.map +1 -0
  409. package/dist/server/webSocketBridge.js +348 -0
  410. package/dist/server/webSocketBridge.js.map +1 -1
  411. package/dist/server/workbench/accessStateStore.js +33 -5
  412. package/dist/server/workbench/accessStateStore.js.map +1 -1
  413. package/dist/server/workbench/capabilitySearch.js +3 -2
  414. package/dist/server/workbench/capabilitySearch.js.map +1 -1
  415. package/dist/server/workbench/gatewayIntegration.js +40 -13
  416. package/dist/server/workbench/gatewayIntegration.js.map +1 -1
  417. package/dist/server/workbench/knowledgeSearch.js +100 -0
  418. package/dist/server/workbench/knowledgeSearch.js.map +1 -0
  419. package/dist/server/workbench/mcpClient.js +41 -8
  420. package/dist/server/workbench/mcpClient.js.map +1 -1
  421. package/dist/server/workbench/skillSync.js +11 -3
  422. package/dist/server/workbench/skillSync.js.map +1 -1
  423. package/dist/server/workbench/workbenchClient.js +130 -7
  424. package/dist/server/workbench/workbenchClient.js.map +1 -1
  425. package/dist/server/workbench/workbenchTools.js +196 -14
  426. package/dist/server/workbench/workbenchTools.js.map +1 -1
  427. package/dist/server/workingDirectory.js +3 -2
  428. package/dist/server/workingDirectory.js.map +1 -1
  429. package/dist/server/workspaceExplorerRoutes.js +53 -21
  430. package/dist/server/workspaceExplorerRoutes.js.map +1 -1
  431. package/dist/server/workspaces/fileContentService.js +31 -16
  432. package/dist/server/workspaces/fileContentService.js.map +1 -1
  433. package/dist/server/workspaces/fileOperationService.js +11 -9
  434. package/dist/server/workspaces/fileOperationService.js.map +1 -1
  435. package/dist/server/workspaces/filePreviewService.js +10 -6
  436. package/dist/server/workspaces/filePreviewService.js.map +1 -1
  437. package/dist/server/workspaces/fileSuggestions.js +77 -10
  438. package/dist/server/workspaces/fileSuggestions.js.map +1 -1
  439. package/dist/server/workspaces/fileTreeService.js +103 -15
  440. package/dist/server/workspaces/fileTreeService.js.map +1 -1
  441. package/dist/server/workspaces/normalProjectCwdResolver.js +35 -0
  442. package/dist/server/workspaces/normalProjectCwdResolver.js.map +1 -0
  443. package/dist/server/workspaces/pathAccessPolicy.js +24 -18
  444. package/dist/server/workspaces/pathAccessPolicy.js.map +1 -1
  445. package/dist/server/workspaces/pathSafety.js +6 -5
  446. package/dist/server/workspaces/pathSafety.js.map +1 -1
  447. package/dist/server/workspaces/projectPiWebConfig.js +95 -8
  448. package/dist/server/workspaces/projectPiWebConfig.js.map +1 -1
  449. package/dist/server/workspaces/projectWorkspaceCwds.js +0 -5
  450. package/dist/server/workspaces/projectWorkspaceCwds.js.map +1 -1
  451. package/dist/server/workspaces/sessionDaemonWorkspaceCatalog.js +37 -22
  452. package/dist/server/workspaces/sessionDaemonWorkspaceCatalog.js.map +1 -1
  453. package/dist/server/workspaces/workspaceCatalog.js +6 -4
  454. package/dist/server/workspaces/workspaceCatalog.js.map +1 -1
  455. package/dist/server/workspaces/workspaceChangeNotifier.js +12 -0
  456. package/dist/server/workspaces/workspaceChangeNotifier.js.map +1 -0
  457. package/dist/server/workspaces/workspaceDeletionRoutes.js +9 -70
  458. package/dist/server/workspaces/workspaceDeletionRoutes.js.map +1 -1
  459. package/dist/server/workspaces/workspaceNotificationCommand.js +64 -0
  460. package/dist/server/workspaces/workspaceNotificationCommand.js.map +1 -0
  461. package/dist/server/workspaces/workspaceProviderRegistry.js +128 -24
  462. package/dist/server/workspaces/workspaceProviderRegistry.js.map +1 -1
  463. package/dist/server/workspaces/workspaceRemovalService.js +41 -7
  464. package/dist/server/workspaces/workspaceRemovalService.js.map +1 -1
  465. package/dist/server/workspaces/workspaceRouteContext.js +1 -1
  466. package/dist/server/workspaces/workspaceRouteContext.js.map +1 -1
  467. package/dist/server/workspaces/workspaceRouteErrors.js +4 -2
  468. package/dist/server/workspaces/workspaceRouteErrors.js.map +1 -1
  469. package/dist/server/workspaces/workspaceUserError.js +18 -0
  470. package/dist/server/workspaces/workspaceUserError.js.map +1 -0
  471. package/dist/server-plugin-api.d.ts +349 -49
  472. package/dist/server-plugin-api.js +344 -2
  473. package/dist/server-plugin-api.js.map +1 -1
  474. package/dist/serverPluginRecovery.js +6 -1
  475. package/dist/serverPluginRecovery.js.map +1 -1
  476. package/dist/sessiond/activeAgentProfile.js +27 -2
  477. package/dist/sessiond/activeAgentProfile.js.map +1 -1
  478. package/dist/sessiond/config.js +4 -3
  479. package/dist/sessiond/config.js.map +1 -1
  480. package/dist/sessiond/sessionDaemonClient.js +75 -19
  481. package/dist/sessiond/sessionDaemonClient.js.map +1 -1
  482. package/dist/sessiond/sessionDaemonErrors.js +49 -0
  483. package/dist/sessiond/sessionDaemonErrors.js.map +1 -0
  484. package/dist/shared/activeAgentProfile.js +2 -34
  485. package/dist/shared/activeAgentProfile.js.map +1 -1
  486. package/dist/shared/activity.js +0 -3
  487. package/dist/shared/activity.js.map +1 -1
  488. package/dist/shared/apiTypes.js +10 -3
  489. package/dist/shared/apiTypes.js.map +1 -1
  490. package/dist/shared/capabilities.js +8 -0
  491. package/dist/shared/capabilities.js.map +1 -1
  492. package/dist/shared/federatedRoutes.js +77 -11
  493. package/dist/shared/federatedRoutes.js.map +1 -1
  494. package/dist/shared/i18n.js +41 -0
  495. package/dist/shared/i18n.js.map +1 -0
  496. package/dist/shared/machinePluginIds.js +30 -7
  497. package/dist/shared/machinePluginIds.js.map +1 -1
  498. package/dist/shared/machineStatus.js +46 -3
  499. package/dist/shared/machineStatus.js.map +1 -1
  500. package/dist/shared/navigationPreferences.js +6 -0
  501. package/dist/shared/navigationPreferences.js.map +1 -0
  502. package/dist/shared/piWebConfigParsing.js +118 -49
  503. package/dist/shared/piWebConfigParsing.js.map +1 -1
  504. package/dist/shared/piWebStatusParsing.js +33 -0
  505. package/dist/shared/piWebStatusParsing.js.map +1 -1
  506. package/dist/shared/pluginApiTypes.d.ts +87 -8
  507. package/dist/shared/pluginApiTypes.js +2 -0
  508. package/dist/shared/pluginApiTypes.js.map +1 -0
  509. package/dist/shared/pluginBackendProtocol.js +218 -2
  510. package/dist/shared/pluginBackendProtocol.js.map +1 -1
  511. package/dist/shared/pluginCatalogTypes.d.ts +49 -0
  512. package/dist/shared/pluginCatalogTypes.js +156 -0
  513. package/dist/shared/pluginCatalogTypes.js.map +1 -0
  514. package/dist/shared/pluginIds.js +10 -1
  515. package/dist/shared/pluginIds.js.map +1 -1
  516. package/dist/shared/requiredTerminalPlugin.js +6 -0
  517. package/dist/shared/requiredTerminalPlugin.js.map +1 -0
  518. package/dist/shared/serverNoticeContract.js +88 -0
  519. package/dist/shared/serverNoticeContract.js.map +1 -0
  520. package/dist/shared/sessionDefaults.js +42 -0
  521. package/dist/shared/sessionDefaults.js.map +1 -0
  522. package/dist/shared/sessionMedia.js +12 -0
  523. package/dist/shared/sessionMedia.js.map +1 -0
  524. package/dist/shared/streamingBehavior.js +8 -0
  525. package/dist/shared/streamingBehavior.js.map +1 -0
  526. package/dist/shared/themePreference.js +24 -0
  527. package/dist/shared/themePreference.js.map +1 -0
  528. package/dist/shared/thinkingLevels.js +17 -16
  529. package/dist/shared/thinkingLevels.js.map +1 -1
  530. package/dist/shared/workspaceFiles.js.map +1 -1
  531. package/dist/workspaceNotificationCli.js +95 -0
  532. package/dist/workspaceNotificationCli.js.map +1 -0
  533. package/docs/README.md +31 -0
  534. package/docs/config.md +344 -277
  535. package/docs/plugins.md +204 -930
  536. package/examples/session-bridge-plugin/README.md +20 -0
  537. package/examples/session-bridge-plugin/docs/usage.md +54 -0
  538. package/examples/session-bridge-plugin/package.json +26 -0
  539. package/examples/session-bridge-plugin/src/browser/index.ts +87 -0
  540. package/examples/session-bridge-plugin/src/browser/protocol.ts +24 -0
  541. package/examples/session-bridge-plugin/src/companion.ts +65 -0
  542. package/examples/session-bridge-plugin/src/reviewRun.ts +39 -0
  543. package/examples/session-bridge-plugin/src/server.ts +85 -0
  544. package/examples/session-bridge-plugin/src/store.ts +80 -0
  545. package/examples/session-bridge-plugin/tsconfig.json +21 -0
  546. package/examples/workspace-provider-plugin/README.md +39 -0
  547. package/examples/workspace-provider-plugin/package.json +25 -0
  548. package/examples/workspace-provider-plugin/src/browser/index.ts +69 -0
  549. package/examples/workspace-provider-plugin/src/server.ts +68 -0
  550. package/examples/workspace-provider-plugin/tsconfig.json +21 -0
  551. package/extensions/pi-web.ts +3 -1
  552. package/package.json +59 -36
  553. package/skills/README.md +28 -2
  554. package/skills/relay/SKILL.md +24 -89
  555. package/skills/relay-runner/SKILL.md +74 -0
  556. package/dist/client/assets/CodeViewer-DCl56K0Z.js +0 -4
  557. package/dist/client/assets/TerminalPanel-DCvoEjUF.js +0 -187
  558. package/dist/client/assets/index-CMvms5cF.js +0 -4325
  559. package/dist/client/assets/vendor-editor-core-vUi74DnD.js +0 -12
  560. package/dist/client/assets/vendor-editor-languages-DoaXUodB.js +0 -46
  561. package/dist/client/assets/vendor-editor-legacy-CYBnW6ZU.js +0 -1
  562. package/dist/client/assets/vendor-terminal-BrP-ENHg.css +0 -1
  563. package/dist/client/assets/vendor-terminal-D8k4UKM2.js +0 -35
  564. package/dist/pi-web-plugins/relays/package.json +0 -9
  565. package/dist/pi-web-plugins/relays/pi-web-plugin.js +0 -44
  566. package/dist/server/git/gitService.js +0 -290
  567. package/dist/server/git/gitService.js.map +0 -1
  568. package/dist/server/gitRoutes.js +0 -23
  569. package/dist/server/gitRoutes.js.map +0 -1
  570. package/dist/server/sessions/pendingAskStore.js +0 -278
  571. package/dist/server/sessions/pendingAskStore.js.map +0 -1
  572. package/dist/server/terminalProxyRoutes.js +0 -178
  573. package/dist/server/terminalProxyRoutes.js.map +0 -1
  574. package/dist/server/terminals/terminalRoutes.js +0 -164
  575. package/dist/server/terminals/terminalRoutes.js.map +0 -1
  576. package/dist/server/terminals/terminalService.js.map +0 -1
  577. package/dist/server/terminals/terminalSize.js +0 -17
  578. package/dist/server/terminals/terminalSize.js.map +0 -1
  579. package/dist/server/workspaces/gitWorktreeDiscovery.js +0 -43
  580. package/dist/server/workspaces/gitWorktreeDiscovery.js.map +0 -1
  581. package/dist/server/workspaces/workspaceService.js +0 -52
  582. package/dist/server/workspaces/workspaceService.js.map +0 -1
  583. /package/dist/{pi-web-plugins → pi-packages}/relays/vendor/README.md +0 -0
  584. /package/dist/{pi-web-plugins → pi-packages}/relays/vendor/marked.esm.js +0 -0
@@ -1,5 +1,9 @@
1
- import { machineScopedPluginId, parseMachineScopedPluginId } from "../../shared/machinePluginIds.js";
2
- import { isPiWebPluginId } from "../../shared/pluginIds.js";
1
+ import { createTranslator, UserFacingError, userFacingErrorMessage } from "../../shared/i18n.js";
2
+ import { machineScopedManifestPluginId, parseMachineScopedPluginId } from "../../shared/machinePluginIds.js";
3
+ import { PI_WEB_PLUGIN_LIFECYCLE_VERSION } from "../../shared/apiTypes.js";
4
+ import { isPiWebBundledPluginId, isPiWebPluginId, isReservedPiWebPluginId } from "../../shared/pluginIds.js";
5
+ import { requirePluginBackendRevision } from "../../shared/pluginBackendProtocol.js";
6
+ import { REQUIRED_TERMINAL_PLUGIN_ID } from "../../shared/requiredTerminalPlugin.js";
3
7
  import { RemoteMachineRequestError } from "./machineClient.js";
4
8
  import { MachineService } from "./machineService.js";
5
9
  const MACHINE_PLUGIN_MANIFEST_TIMEOUT_MS = 10_000;
@@ -12,38 +16,43 @@ const SAFE_RESPONSE_HEADERS = new Set([
12
16
  "content-security-policy",
13
17
  "x-content-type-options",
14
18
  ]);
15
- export function registerMachinePluginProxyRoutes(app, machines = new MachineService()) {
19
+ export function registerMachinePluginProxyRoutes(app, machines = new MachineService(), t = createTranslator("en", {})) {
16
20
  app.get("/api/machines/:machineId/pi-web-plugins/manifest.json", async (request, reply) => {
17
- if (request.params.machineId === "local")
18
- return { plugins: [] };
21
+ if (request.params.machineId === "local") {
22
+ return reply.code(400).send({ error: "Local plugin manifests must use the local manifest endpoint" });
23
+ }
19
24
  const client = await machines.remoteClient(request.params.machineId);
20
25
  if (client === undefined)
21
- return reply.code(404).send({ error: "Machine not found" });
26
+ return reply.code(404).send({ error: t("machineError.notFound", "Machine not found") });
22
27
  try {
23
28
  const response = await client.requestJson("GET", "/pi-web-plugins/manifest.json", undefined, { timeoutMs: MACHINE_PLUGIN_MANIFEST_TIMEOUT_MS });
24
- if (response.statusCode === 404)
25
- return { plugins: [] };
29
+ if (response.statusCode === 404) {
30
+ return await sendLifecycleCompatibilityError(reply, request.params.machineId, "The remote machine does not expose a versioned plugin manifest. Update and restart PI WEB on the remote machine.");
31
+ }
26
32
  if (response.statusCode < 200 || response.statusCode >= 300)
27
33
  return await reply.code(response.statusCode).send(response.body);
28
34
  return rewriteRemotePluginManifest(request.params.machineId, parseRemoteManifest(response.body));
29
35
  }
30
36
  catch (error) {
37
+ if (error instanceof RemotePluginLifecycleCompatibilityError) {
38
+ return sendLifecycleCompatibilityError(reply, request.params.machineId, error.message);
39
+ }
31
40
  return sendGatewayError(reply, request.params.machineId, error);
32
41
  }
33
42
  });
34
43
  }
35
- export async function proxyMachinePluginAsset(machines, scopedPluginId, assetPath, requestUrl, reply) {
44
+ export async function proxyMachinePluginAsset(machines, scopedPluginId, assetPath, requestUrl, reply, t = createTranslator("en", {})) {
36
45
  const remotePlugin = parseMachineScopedPluginId(scopedPluginId);
37
46
  if (remotePlugin === undefined)
38
47
  return false;
39
48
  const client = await machines.remoteClient(remotePlugin.machineId);
40
49
  if (client === undefined) {
41
- await reply.code(404).send({ error: "Machine not found" });
50
+ await reply.code(404).send({ error: t("machineError.notFound", "Machine not found") });
42
51
  return true;
43
52
  }
44
53
  const requestPath = remotePluginAssetRequestPath(remotePlugin, assetPath, requestUrl);
45
54
  if (requestPath === undefined) {
46
- await reply.code(400).send({ error: "Invalid remote PI WEB plugin asset path" });
55
+ await reply.code(400).send({ error: t("machineError.pluginAssetPathInvalid", "Invalid remote PI WEB plugin asset path") });
47
56
  return true;
48
57
  }
49
58
  try {
@@ -57,19 +66,21 @@ export async function proxyMachinePluginAsset(machines, scopedPluginId, assetPat
57
66
  return true;
58
67
  }
59
68
  catch (error) {
60
- sendGatewayError(reply, remotePlugin.machineId, error);
69
+ sendGatewayError(reply, remotePlugin.machineId, error, t);
61
70
  return true;
62
71
  }
63
72
  }
64
73
  function rewriteRemotePluginManifest(machineId, manifest) {
65
74
  return {
75
+ lifecycleVersion: manifest.lifecycleVersion,
76
+ terminalMode: manifest.terminalMode,
66
77
  plugins: manifest.plugins.flatMap((plugin) => {
67
78
  const modulePath = remotePluginModulePath(plugin.id, plugin.module);
68
79
  if (modulePath === undefined)
69
80
  return [];
70
81
  return [{
71
82
  ...plugin,
72
- module: `../../../../pi-web-plugins/${encodeURIComponent(machineScopedPluginId(machineId, plugin.id))}/${modulePath.path}${modulePath.query}`,
83
+ module: `../../../../pi-web-plugins/${encodeURIComponent(machineScopedManifestPluginId(machineId, plugin.id))}/${modulePath.path}${modulePath.query}`,
73
84
  }];
74
85
  }),
75
86
  };
@@ -143,26 +154,97 @@ function hasControlCharacter(value) {
143
154
  function parseRemoteManifest(value) {
144
155
  if (!isRecord(value) || !Array.isArray(value["plugins"]))
145
156
  throw new Error("Invalid remote PI WEB plugin manifest");
146
- return {
147
- plugins: value["plugins"].map((entry) => {
148
- if (!isRecord(entry) || typeof entry["id"] !== "string" || !isPiWebPluginId(entry["id"]) || typeof entry["module"] !== "string" || entry["module"] === "") {
149
- throw new Error("Invalid remote PI WEB plugin manifest entry");
150
- }
151
- return {
152
- id: entry["id"],
153
- module: entry["module"],
154
- ...(typeof entry["source"] === "string" ? { source: entry["source"] } : {}),
155
- ...(typeof entry["scope"] === "string" ? { scope: entry["scope"] } : {}),
156
- ...(parseRemoteMachineSpecific(entry["machineSpecific"])),
157
- };
158
- }),
159
- };
157
+ const lifecycleVersion = parseRemoteLifecycleVersion(value["lifecycleVersion"]);
158
+ const terminalMode = parseRemoteTerminalMode(value["terminalMode"]);
159
+ const plugins = value["plugins"].map((entry) => {
160
+ if (!isRecord(entry) || typeof entry["id"] !== "string" || !isPiWebPluginId(entry["id"]) || typeof entry["module"] !== "string" || entry["module"] === "") {
161
+ throw new Error("Invalid remote PI WEB plugin manifest entry");
162
+ }
163
+ const source = typeof entry["source"] === "string" ? entry["source"] : undefined;
164
+ const scope = typeof entry["scope"] === "string" ? entry["scope"] : undefined;
165
+ if (isReservedPiWebPluginId(entry["id"])
166
+ && !(isPiWebBundledPluginId(entry["id"]) && source === "bundled" && scope === "bundled")) {
167
+ throw new Error(`Reserved remote PI WEB plugin id: ${entry["id"]}`);
168
+ }
169
+ const backendRevision = parseRemoteBackendRevision(entry["backendRevision"]);
170
+ const pairedRequestVersion = parseRemotePairedCapabilityVersion(entry["pairedRequestVersion"]);
171
+ const pairedChannelVersion = parseRemotePairedCapabilityVersion(entry["pairedChannelVersion"]);
172
+ if ((pairedRequestVersion !== undefined || pairedChannelVersion !== undefined) && backendRevision === undefined) {
173
+ throw new Error("Invalid remote PI WEB plugin manifest entry");
174
+ }
175
+ return {
176
+ id: entry["id"],
177
+ module: entry["module"],
178
+ ...(backendRevision === undefined ? {} : { backendRevision }),
179
+ ...(pairedRequestVersion === undefined ? {} : { pairedRequestVersion }),
180
+ ...(pairedChannelVersion === undefined ? {} : { pairedChannelVersion }),
181
+ ...(source === undefined ? {} : { source }),
182
+ ...(scope === undefined ? {} : { scope }),
183
+ ...(parseRemoteMachineSpecific(entry["machineSpecific"])),
184
+ };
185
+ });
186
+ const ids = new Set();
187
+ for (const plugin of plugins) {
188
+ if (ids.has(plugin.id))
189
+ throw new Error(`Duplicate remote PI WEB plugin id: ${plugin.id}`);
190
+ ids.add(plugin.id);
191
+ }
192
+ const terminal = plugins.find(({ id }) => id === REQUIRED_TERMINAL_PLUGIN_ID);
193
+ if (terminalMode === "required") {
194
+ if (terminal === undefined || plugins[0] !== terminal || terminal.machineSpecific !== true) {
195
+ throw new RemotePluginLifecycleCompatibilityError("The remote required Terminal plugin is missing or out of order. Update and restart PI WEB on the remote machine.");
196
+ }
197
+ if (terminal.backendRevision === undefined || terminal.pairedRequestVersion !== 1 || terminal.pairedChannelVersion !== 1) {
198
+ throw new RemotePluginLifecycleCompatibilityError("The remote required Terminal plugin is incompatible. Update and restart PI WEB on the remote machine.");
199
+ }
200
+ }
201
+ else if (terminal !== undefined) {
202
+ throw new RemotePluginLifecycleCompatibilityError("The remote recovery manifest must not publish Terminal. Update and restart PI WEB on the remote machine.");
203
+ }
204
+ return { lifecycleVersion, terminalMode, plugins };
205
+ }
206
+ function parseRemoteTerminalMode(value) {
207
+ if (value === "required" || value === "recovery-disabled")
208
+ return value;
209
+ throw new RemotePluginLifecycleCompatibilityError("The remote plugin manifest has no compatible Terminal mode. Update and restart PI WEB on the remote machine.");
210
+ }
211
+ function parseRemoteLifecycleVersion(value) {
212
+ if (value === undefined) {
213
+ throw new RemotePluginLifecycleCompatibilityError("The remote plugin manifest has no lifecycle version. Update and restart PI WEB on the remote machine.");
214
+ }
215
+ if (value !== PI_WEB_PLUGIN_LIFECYCLE_VERSION) {
216
+ throw new RemotePluginLifecycleCompatibilityError(`Unsupported remote plugin lifecycle version: ${formatUnknownValue(value)}`);
217
+ }
218
+ return value;
219
+ }
220
+ class RemotePluginLifecycleCompatibilityError extends Error {
221
+ constructor() {
222
+ super(...arguments);
223
+ this.name = "RemotePluginLifecycleCompatibilityError";
224
+ }
225
+ }
226
+ function parseRemoteBackendRevision(value) {
227
+ if (value === undefined)
228
+ return undefined;
229
+ try {
230
+ return requirePluginBackendRevision(value);
231
+ }
232
+ catch {
233
+ throw new Error("Invalid remote PI WEB plugin manifest entry");
234
+ }
235
+ }
236
+ function parseRemotePairedCapabilityVersion(value) {
237
+ if (value === undefined)
238
+ return undefined;
239
+ if (value !== 1)
240
+ throw new Error("Invalid remote PI WEB plugin manifest entry");
241
+ return value;
160
242
  }
161
243
  function parseRemoteMachineSpecific(value) {
162
244
  if (value === undefined)
163
245
  return {};
164
246
  if (typeof value !== "boolean")
165
- throw new Error("Invalid remote PI WEB plugin manifest entry");
247
+ throw new UserFacingError("machineError.pluginManifestEntryInvalid", "Invalid remote PI WEB plugin manifest entry");
166
248
  return { machineSpecific: value };
167
249
  }
168
250
  function applySafeHeaders(reply, headers) {
@@ -174,16 +256,34 @@ function applySafeHeaders(reply, headers) {
174
256
  reply.header(name, value);
175
257
  }
176
258
  }
177
- function sendGatewayError(reply, machineId, error) {
259
+ function sendLifecycleCompatibilityError(reply, machineId, detail) {
260
+ return reply.code(409).send({
261
+ error: "Remote machine plugin lifecycle is incompatible",
262
+ code: "plugin-lifecycle-incompatible",
263
+ machineId,
264
+ detail,
265
+ });
266
+ }
267
+ function sendGatewayError(reply, machineId, error, t = createTranslator("en", {})) {
178
268
  const statusCode = error instanceof RemoteMachineRequestError ? error.statusCode : 502;
179
- const label = statusCode === 504 ? "Remote machine timeout" : "Remote machine unavailable";
269
+ const label = statusCode === 504 ? t("machineError.timeout", "Remote machine timeout") : t("machineError.unavailable", "Remote machine unavailable");
180
270
  return reply.code(statusCode).send({
181
271
  error: label,
182
272
  machineId,
183
273
  statusCode,
184
- detail: error instanceof Error ? error.message : String(error),
274
+ detail: userFacingErrorMessage(error, t),
185
275
  });
186
276
  }
277
+ function formatUnknownValue(value) {
278
+ if (typeof value === "string" || typeof value === "number" || typeof value === "boolean" || typeof value === "bigint" || typeof value === "symbol" || typeof value === "function" || value === null || value === undefined)
279
+ return String(value);
280
+ try {
281
+ return JSON.stringify(value);
282
+ }
283
+ catch {
284
+ return Object.prototype.toString.call(value);
285
+ }
286
+ }
187
287
  function isRecord(value) {
188
288
  return typeof value === "object" && value !== null && !Array.isArray(value);
189
289
  }
@@ -1 +1 @@
1
- {"version":3,"file":"machinePluginProxyRoutes.js","sourceRoot":"","sources":["../../../src/server/machines/machinePluginProxyRoutes.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,0BAA0B,EAAmC,MAAM,kCAAkC,CAAC;AACtI,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAsB,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAkBrD,MAAM,kCAAkC,GAAG,MAAM,CAAC;AAElD,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC;IACpC,cAAc;IACd,gBAAgB;IAChB,eAAe;IACf,eAAe;IACf,MAAM;IACN,yBAAyB;IACzB,wBAAwB;CACzB,CAAC,CAAC;AAEH,MAAM,UAAU,gCAAgC,CAAC,GAAoB,EAAE,WAAuC,IAAI,cAAc,EAAE;IAChI,GAAG,CAAC,GAAG,CAAoC,uDAAuD,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QAC3H,IAAI,OAAO,CAAC,MAAM,CAAC,SAAS,KAAK,OAAO;YAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;QAEjE,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACrE,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAC;QAEtF,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,+BAA+B,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,kCAAkC,EAAE,CAAC,CAAC;YAChJ,IAAI,QAAQ,CAAC,UAAU,KAAK,GAAG;gBAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;YACxD,IAAI,QAAQ,CAAC,UAAU,GAAG,GAAG,IAAI,QAAQ,CAAC,UAAU,IAAI,GAAG;gBAAE,OAAO,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC9H,OAAO,2BAA2B,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QACnG,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAClE,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,QAAoC,EAAE,cAAsB,EAAE,SAAiB,EAAE,UAAkB,EAAE,KAAmB;IACpK,MAAM,YAAY,GAAG,0BAA0B,CAAC,cAAc,CAAC,CAAC;IAChE,IAAI,YAAY,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAE7C,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,YAAY,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IACnE,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAC;QAC3D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,WAAW,GAAG,4BAA4B,CAAC,YAAY,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IACtF,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,yCAAyC,EAAE,CAAC,CAAC;QACjF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAC1D,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAChC,gBAAgB,CAAC,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS;YAAE,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;;YAC/C,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,gBAAgB,CAAC,KAAK,EAAE,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACvD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,2BAA2B,CAAC,SAAiB,EAAE,QAA8B;IACpF,OAAO;QACL,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YAC3C,MAAM,UAAU,GAAG,sBAAsB,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YACpE,IAAI,UAAU,KAAK,SAAS;gBAAE,OAAO,EAAE,CAAC;YACxC,OAAO,CAAC;oBACN,GAAG,MAAM;oBACT,MAAM,EAAE,8BAA8B,kBAAkB,CAAC,qBAAqB,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,GAAG,UAAU,CAAC,KAAK,EAAE;iBAC9I,CAAC,CAAC;QACL,CAAC,CAAC;KACH,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAAC,QAAgB,EAAE,MAAc;IAC9D,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;QAAE,OAAO,SAAS,CAAC;IACjD,MAAM,MAAM,GAAG,mBAAmB,kBAAkB,CAAC,QAAQ,CAAC,GAAG,CAAC;IAClE,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;IAC7D,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,+BAA+B,EAAE,aAAa,CAAC,CAAC;IAC5E,IAAI,CAAC;QACH,sHAAsH;QACtH,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC;QACtE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACrC,IAAI,GAAG,CAAC,MAAM,KAAK,aAAa,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC;YAAE,OAAO,SAAS,CAAC;QAC9F,MAAM,IAAI,GAAG,yBAAyB,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1E,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;IACtE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,4BAA4B,CAAC,YAAwC,EAAE,SAAiB,EAAE,UAAkB;IACnH,MAAM,IAAI,GAAG,yBAAyB,CAAC,SAAS,CAAC,CAAC;IAClD,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACzC,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACxF,OAAO,mBAAmB,kBAAkB,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,IAAI,GAAG,KAAK,EAAE,CAAC;AACxF,CAAC;AAED,SAAS,yBAAyB,CAAC,IAAY;IAC7C,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,gCAAgC,CAAC,UAAU,CAAC,CAAC;QAC7D,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QAC5C,IAAI,OAAO,KAAK,EAAE;YAAE,SAAS;QAC7B,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5C,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1E,CAAC;AAED,SAAS,gCAAgC,CAAC,UAAkB;IAC1D,IAAI,UAAU,KAAK,EAAE,IAAI,UAAU,KAAK,GAAG;QAAE,OAAO,EAAE,CAAC;IACvD,IAAI,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC;QAAE,OAAO,SAAS,CAAC;IACtD,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC;QACH,OAAO,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,OAAO,KAAK,EAAE,IAAI,OAAO,KAAK,GAAG;QAAE,OAAO,EAAE,CAAC;IACjD,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,mBAAmB,CAAC,OAAO,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1H,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAa;IACxC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACrD,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;IACjD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAc;IACzC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IACnH,OAAO;QACL,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACtC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,OAAO,KAAK,CAAC,QAAQ,CAAC,KAAK,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC;gBAC1J,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;YACjE,CAAC;YACD,OAAO;gBACL,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC;gBACf,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC;gBACvB,GAAG,CAAC,OAAO,KAAK,CAAC,QAAQ,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3E,GAAG,CAAC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxE,GAAG,CAAC,0BAA0B,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;aAC1D,CAAC;QACJ,CAAC,CAAC;KACH,CAAC;AACJ,CAAC;AAED,SAAS,0BAA0B,CAAC,KAAc;IAChD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACnC,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAC/F,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC;AACpC,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAmB,EAAE,OAAsD;IACnG,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACpD,IAAI,KAAK,KAAK,SAAS;YAAE,SAAS;QAClC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YAAE,SAAS;QAC7D,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAmB,EAAE,SAAiB,EAAE,KAAc;IAC9E,MAAM,UAAU,GAAG,KAAK,YAAY,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC;IACvF,MAAM,KAAK,GAAG,UAAU,KAAK,GAAG,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,4BAA4B,CAAC;IAC3F,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC;QACjC,KAAK,EAAE,KAAK;QACZ,SAAS;QACT,UAAU;QACV,MAAM,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;KAC/D,CAAC,CAAC;AACL,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"}
1
+ {"version":3,"file":"machinePluginProxyRoutes.js","sourceRoot":"","sources":["../../../src/server/machines/machinePluginProxyRoutes.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,12 @@
1
+ import { createTranslator, userFacingErrorMessage } from "../../shared/i18n.js";
1
2
  import { FEDERATED_HTTP_ROUTES, FEDERATED_WEBSOCKET_ROUTES, WORKSPACE_FILE_PREVIEW_ROUTE_PATH } from "../../shared/federatedRoutes.js";
3
+ import { PAIRED_PLUGIN_BACKEND_CHANNEL_ROUTE_PATHS, pluginBackendScopeFromRoute, PLUGIN_BACKEND_CHANNEL_DATA_FRAME_MAX_BYTES, } from "../../shared/pluginBackendProtocol.js";
2
4
  import { mergeSelectedMachineConfig, parsePiWebConfigResponseBody, parseSelectedMachineConfigRequest, selectedMachineConfigResponse } from "../configRoutes.js";
5
+ import { pluginBackendChannelProxyAdmissionPool, } from "../plugins/pluginBackendChannelProxyAdmission.js";
6
+ import { coordinatePluginBackendChannelProxy, PluginBackendChannelProxyConnectionError, } from "../plugins/pluginBackendChannelProxyCoordinator.js";
3
7
  import { requestCancellation } from "../requestCancellation.js";
4
- import { bridgeSockets } from "../webSocketBridge.js";
8
+ import { isSessionImageMimeType } from "../sessions/sessionMediaIndex.js";
9
+ import { bridgeSockets, markPluginBackendChannelUpgradeRequest } from "../webSocketBridge.js";
5
10
  import { applyWorkspaceFilePreviewErrorResponsePolicy, applyWorkspaceFilePreviewResponsePolicy } from "../workspaces/filePreviewResponseHeaders.js";
6
11
  import { workspaceFilePreviewErrorResponsePolicy, workspaceFilePreviewResponsePolicy } from "../workspaces/filePreviewResponsePolicy.js";
7
12
  import { DEFAULT_REMOTE_REQUEST_TIMEOUT_MS, RemoteMachineRequestError } from "./machineClient.js";
@@ -18,18 +23,18 @@ const SAFE_RESPONSE_HEADERS = new Set([
18
23
  "content-security-policy",
19
24
  "x-content-type-options",
20
25
  ]);
21
- export function registerMachineProxyRoutes(app, machines = new MachineService()) {
26
+ export function registerMachineProxyRoutes(app, machines = new MachineService(), pluginChannelAdmissions = pluginBackendChannelProxyAdmissionPool(app), t = createTranslator("en", {})) {
22
27
  for (const spec of REMOTE_HTTP_ROUTES) {
23
28
  app.route({
24
29
  method: spec.method,
25
30
  url: `/api/machines/:machineId${spec.path}`,
26
- ...(("bodyLimit" in spec) ? { bodyLimit: spec.bodyLimit } : {}),
31
+ ...("bodyLimit" in spec ? { bodyLimit: spec.bodyLimit } : {}),
27
32
  handler: async (request, reply) => {
28
33
  const cancellation = "propagateCancellation" in spec
29
34
  ? requestCancellation(request, reply)
30
35
  : undefined;
31
36
  try {
32
- return await proxyHttpRequest(machines, spec, request.params.machineId, request.method, request.url, request.body, request.headers["content-type"], reply, cancellation?.signal);
37
+ return await proxyHttpRequest(machines, spec, request.params.machineId, request.method, request.url, request.body, request.headers["content-type"], reply, cancellation?.signal, t);
33
38
  }
34
39
  finally {
35
40
  cancellation?.dispose();
@@ -38,30 +43,58 @@ export function registerMachineProxyRoutes(app, machines = new MachineService())
38
43
  });
39
44
  }
40
45
  for (const path of REMOTE_WEBSOCKET_ROUTES) {
41
- app.get(`/api/machines/:machineId${path}`, { websocket: true }, async (socket, request) => {
42
- await proxyWebSocket(machines, request.params.machineId, request.url, socket);
46
+ const isPluginBackendChannel = PAIRED_PLUGIN_BACKEND_CHANNEL_ROUTE_PATHS.includes(path);
47
+ app.get(`/api/machines/:machineId${path}`, {
48
+ websocket: true,
49
+ ...(isPluginBackendChannel
50
+ ? {
51
+ onRequest(request, _reply, done) {
52
+ markPluginBackendChannelUpgradeRequest(request.raw);
53
+ done();
54
+ },
55
+ }
56
+ : {}),
57
+ }, async (socket, request) => {
58
+ await proxyWebSocket(machines, request.params.machineId, request.url, socket, isPluginBackendChannel
59
+ ? {
60
+ admissions: pluginChannelAdmissions,
61
+ scope: {
62
+ authorityId: request.params.machineId,
63
+ pluginId: request.params.pluginId,
64
+ scope: pluginBackendScopeFromRoute(request.params),
65
+ projectId: request.params.projectId,
66
+ workspaceId: request.params.workspaceId,
67
+ },
68
+ }
69
+ : undefined);
43
70
  });
44
71
  }
45
72
  }
46
- async function proxyHttpRequest(machines, spec, machineId, method, requestUrl, body, contentType, reply, signal) {
73
+ async function proxyHttpRequest(machines, spec, machineId, method, requestUrl, body, contentType, reply, signal, t = createTranslator("en", {})) {
74
+ const sessionMedia = spec.path === "/sessions/:sessionId/media/:mediaId";
75
+ const mcpAuth = spec.path.startsWith("/auth/mcp/") || spec.path.startsWith("/sessions/:sessionId/mcp/auth");
76
+ if (mcpAuth)
77
+ reply.header("cache-control", "no-store");
78
+ if (sessionMedia)
79
+ applySessionMediaResponsePolicy(reply);
47
80
  if (machineId === "local") {
48
- return reply.code(501).send({ error: "Local machine route is not registered for this endpoint" });
81
+ return reply.code(501).send({ error: t("machineError.localRouteMissing", "Local machine route is not registered for this endpoint") });
49
82
  }
50
83
  const client = await machines.remoteClient(machineId);
51
84
  if (client === undefined) {
52
- return reply.code(404).send({ error: "Machine not found" });
85
+ return reply.code(404).send({ error: t("machineError.notFound", "Machine not found") });
53
86
  }
54
87
  try {
55
88
  const remotePath = remoteApiPath(machineId, requestUrl);
56
89
  if (spec.path === "/config")
57
- return await proxySelectedMachineConfigRequest(client, machineId, method, remotePath, body, reply);
90
+ return await proxySelectedMachineConfigRequest(client, machineId, method, remotePath, body, reply, t);
58
91
  let preview;
59
92
  try {
60
93
  preview = remoteFilePreviewRequest(spec, remotePath);
61
94
  }
62
95
  catch (error) {
63
96
  applyWorkspaceFilePreviewErrorResponsePolicy(reply);
64
- return await reply.code(400).send({ error: errorMessage(error) });
97
+ return await reply.code(400).send({ error: userFacingErrorMessage(error, t) });
65
98
  }
66
99
  const previewPolicy = preview?.policy;
67
100
  const responseBodyLimit = preview === undefined ? spec.responseBodyLimit : preview.responseBodyLimit;
@@ -70,6 +103,8 @@ async function proxyHttpRequest(machines, spec, machineId, method, requestUrl, b
70
103
  const upstream = requestOptions === undefined
71
104
  ? await client.request(method, remotePath, body)
72
105
  : await client.request(method, remotePath, body, requestOptions);
106
+ if (sessionMedia)
107
+ return await proxySessionMediaResponse(reply, upstream);
73
108
  const responseBody = upstream.body === undefined || responseBodyLimit === undefined
74
109
  ? upstream.body
75
110
  : await readBoundedRemoteBody(upstream.body, responseBodyLimit, remainingResponseTimeout(startedAt, spec.timeoutMs), signal);
@@ -78,16 +113,20 @@ async function proxyHttpRequest(machines, spec, machineId, method, requestUrl, b
78
113
  error: "Remote machine plugin lifecycle is incompatible",
79
114
  code: "plugin-lifecycle-incompatible",
80
115
  machineId,
81
- detail: "The remote machine does not support workspace provider backend requests. Update and restart PI WEB on the remote machine.",
116
+ detail: "The remote machine does not support this plugin backend route. Update and restart PI WEB on the remote machine.",
82
117
  });
83
118
  }
84
119
  reply.code(upstream.statusCode);
85
120
  applySafeHeaders(reply, upstream.headers);
121
+ if (mcpAuth)
122
+ reply.header("cache-control", "no-store");
86
123
  if (previewPolicy !== undefined) {
87
- applyWorkspaceFilePreviewResponsePolicy(reply, isSuccessfulStatus(upstream.statusCode) ? previewPolicy : workspaceFilePreviewErrorResponsePolicy());
124
+ const enforcedPolicy = isSuccessfulStatus(upstream.statusCode) ? previewPolicy : workspaceFilePreviewErrorResponsePolicy();
125
+ applyWorkspaceFilePreviewResponsePolicy(reply, enforcedPolicy);
88
126
  }
89
127
  if (responseBody === undefined)
90
128
  return await reply.send();
129
+ // A bounded body is authoritative over whatever length the remote claimed.
91
130
  if (Buffer.isBuffer(responseBody))
92
131
  reply.header("Content-Length", String(responseBody.byteLength));
93
132
  else if (preview !== undefined)
@@ -96,74 +135,123 @@ async function proxyHttpRequest(machines, spec, machineId, method, requestUrl, b
96
135
  }
97
136
  catch (error) {
98
137
  if (isSelectedMachineConfigRequestError(error))
99
- return reply.code(400).send({ error: errorMessage(error) });
138
+ return reply.code(400).send({ error: userFacingErrorMessage(error, t) });
100
139
  if (spec.path === WORKSPACE_FILE_PREVIEW_ROUTE_PATH)
101
140
  applyWorkspaceFilePreviewErrorResponsePolicy(reply);
102
- return sendGatewayError(reply, machineId, error);
141
+ return sendGatewayError(reply, machineId, error, t);
142
+ }
143
+ }
144
+ function applySessionMediaResponsePolicy(reply) {
145
+ reply
146
+ .header("Content-Security-Policy", "sandbox; default-src 'none'; img-src 'self'; base-uri 'none'; form-action 'none'; frame-ancestors 'self'")
147
+ .header("X-Content-Type-Options", "nosniff")
148
+ .header("Content-Disposition", "inline");
149
+ }
150
+ function proxySessionMediaResponse(reply, upstream) {
151
+ const successful = isSuccessfulStatus(upstream.statusCode);
152
+ const contentType = firstHeaderValue(upstream.headers["content-type"])?.split(";", 1)[0]?.trim().toLowerCase();
153
+ if ((successful && isSessionImageMimeType(contentType))
154
+ || (!successful && contentType === "application/json" && upstream.body !== undefined)) {
155
+ applySafeHeaders(reply, upstream.headers);
156
+ // Remote headers cannot weaken the gateway's media response policy.
157
+ applySessionMediaResponsePolicy(reply);
158
+ reply.type(successful ? contentType : "application/json; charset=utf-8");
159
+ return reply.code(upstream.statusCode).send(upstream.body);
103
160
  }
161
+ if (upstream.body !== undefined)
162
+ destroyReadable(upstream.body);
163
+ if (successful)
164
+ throw new RemoteMachineRequestError("Remote machine returned an unsupported session image MIME type", 502);
165
+ return reply.code(upstream.statusCode).send({ error: "Remote session media request failed", statusCode: upstream.statusCode });
104
166
  }
105
- async function proxySelectedMachineConfigRequest(client, machineId, method, remotePath, body, reply) {
167
+ async function proxySelectedMachineConfigRequest(client, machineId, method, remotePath, body, reply, t) {
106
168
  if (method === "GET") {
107
- return sendSelectedMachineConfigResponse(reply, await client.requestJson("GET", remotePath), machineId);
169
+ return sendSelectedMachineConfigResponse(reply, await client.requestJson("GET", remotePath), machineId, t);
108
170
  }
109
171
  if (method === "PUT") {
110
172
  const patch = parseSelectedMachineConfigRequest(configPayload(body), "portable");
111
173
  const currentResponse = await client.requestJson("GET", remotePath);
112
174
  if (!isSuccessfulStatus(currentResponse.statusCode))
113
- return sendUpstreamJsonResponse(reply, currentResponse, machineId);
175
+ return sendUpstreamJsonResponse(reply, currentResponse, machineId, t);
114
176
  const current = parsePiWebConfigResponseBody(currentResponse.body, "Remote machine config response");
115
177
  const merged = mergeSelectedMachineConfig(current.config, patch);
116
- const updateResponse = await client.requestJson("PUT", remotePath, { config: merged });
117
- return sendSelectedMachineConfigResponse(reply, updateResponse, machineId, patch.agent);
178
+ return sendSelectedMachineConfigResponse(reply, await client.requestJson("PUT", remotePath, { config: merged }), machineId, t);
118
179
  }
119
- return reply.code(405).send({ error: "Method not allowed" });
180
+ return reply.code(405).send({ error: t("machineError.methodNotAllowed", "Method not allowed") });
120
181
  }
121
182
  function configPayload(body) {
122
183
  return isRecord(body) ? body["config"] : undefined;
123
184
  }
124
- function sendSelectedMachineConfigResponse(reply, upstream, machineId, expectedAgentProfile) {
185
+ function sendSelectedMachineConfigResponse(reply, upstream, machineId, t) {
125
186
  if (!isSuccessfulStatus(upstream.statusCode))
126
- return sendUpstreamJsonResponse(reply, upstream, machineId);
187
+ return sendUpstreamJsonResponse(reply, upstream, machineId, t);
127
188
  const response = parsePiWebConfigResponseBody(upstream.body, "Remote machine config response");
128
- if (expectedAgentProfile !== undefined && !sameAgentProfile(response.config.agent, expectedAgentProfile)) {
129
- return reply.code(409).send({
130
- error: "Remote machine did not persist the requested agent profile",
131
- machineId,
132
- detail: "Update and restart PI WEB on the remote machine before changing its agent profile.",
133
- });
134
- }
135
189
  reply.code(upstream.statusCode);
136
190
  applySafeHeaders(reply, upstream.headers);
137
191
  return reply.send(selectedMachineConfigResponse(response));
138
192
  }
139
- function sameAgentProfile(actual, expected) {
140
- return actual !== undefined && actual.command === expected.command && actual.dir === expected.dir;
141
- }
142
- function sendUpstreamJsonResponse(reply, upstream, machineId) {
193
+ function sendUpstreamJsonResponse(reply, upstream, machineId, t) {
143
194
  reply.code(upstream.statusCode);
144
195
  applySafeHeaders(reply, upstream.headers);
145
- return reply.send(upstream.body ?? { error: "Remote machine config request failed", machineId, statusCode: upstream.statusCode });
196
+ return reply.send(upstream.body ?? { error: t("machineError.configRequestFailed", "Remote machine config request failed"), machineId, statusCode: upstream.statusCode });
146
197
  }
147
198
  function isSuccessfulStatus(statusCode) {
148
199
  return statusCode >= 200 && statusCode < 300;
149
200
  }
150
- async function proxyWebSocket(machines, machineId, requestUrl, socket) {
201
+ async function proxyWebSocket(machines, machineId, requestUrl, socket, boundedPluginChannel, t = createTranslator("en", {})) {
202
+ if (boundedPluginChannel !== undefined) {
203
+ proxyBoundedPluginChannel(machines, machineId, requestUrl, socket, boundedPluginChannel);
204
+ return;
205
+ }
151
206
  if (machineId === "local") {
152
- socket.close(1011, "Local machine route is not registered for this endpoint");
207
+ socket.close(1011, t("machineError.localRouteMissing", "Local machine route is not registered for this endpoint"));
153
208
  return;
154
209
  }
155
210
  const client = await machines.remoteClient(machineId);
156
211
  if (client === undefined) {
157
- socket.close(1008, "Machine not found");
212
+ socket.close(1008, t("machineError.notFound", "Machine not found"));
158
213
  return;
159
214
  }
160
215
  try {
161
216
  bridgeSockets(socket, client.connectWebSocket(remoteApiPath(machineId, requestUrl)));
162
217
  }
163
218
  catch {
164
- socket.close(1011, "Remote machine unavailable");
219
+ socket.close(1011, t("machineError.unavailable", "Remote machine unavailable"));
165
220
  }
166
221
  }
222
+ function proxyBoundedPluginChannel(machines, machineId, requestUrl, socket, context) {
223
+ void coordinatePluginBackendChannelProxy({
224
+ downstream: socket,
225
+ admissions: context.admissions,
226
+ scope: context.scope,
227
+ async connectUpstream(signal) {
228
+ if (machineId === "local") {
229
+ throw new PluginBackendChannelProxyConnectionError(1011, "Local machine route is not registered for this endpoint");
230
+ }
231
+ let client;
232
+ try {
233
+ client = await machines.remoteClient(machineId);
234
+ }
235
+ catch (error) {
236
+ if (signal.aborted)
237
+ throw error;
238
+ throw new PluginBackendChannelProxyConnectionError(1011, "Remote machine unavailable", { cause: error });
239
+ }
240
+ signal.throwIfAborted();
241
+ if (client === undefined) {
242
+ throw new PluginBackendChannelProxyConnectionError(1008, "Machine not found");
243
+ }
244
+ try {
245
+ return client.connectWebSocket(remoteApiPath(machineId, requestUrl), {
246
+ maxPayload: PLUGIN_BACKEND_CHANNEL_DATA_FRAME_MAX_BYTES,
247
+ });
248
+ }
249
+ catch (error) {
250
+ throw new PluginBackendChannelProxyConnectionError(1011, "Remote machine unavailable", { cause: error });
251
+ }
252
+ },
253
+ });
254
+ }
167
255
  function remoteApiPath(machineId, requestUrl) {
168
256
  const machinePrefix = `/api/machines/${encodeURIComponent(machineId)}`;
169
257
  const stripped = requestUrl.startsWith(machinePrefix) ? requestUrl.slice(machinePrefix.length) : requestUrl;
@@ -181,6 +269,8 @@ function remoteFilePreviewRequest(spec, remotePath) {
181
269
  const download = downloadValue === "1" || downloadValue === "true";
182
270
  return {
183
271
  policy: workspaceFilePreviewResponsePolicy(path, { download }),
272
+ // Inline previews keep the local inline contract even when the remote is
273
+ // hostile or racy; attachment downloads stay deliberately uncapped.
184
274
  responseBodyLimit: download ? undefined : spec.responseBodyLimit,
185
275
  };
186
276
  }
@@ -198,7 +288,9 @@ function proxyRequestOptions(spec, body, contentType, signal) {
198
288
  return Object.keys(options).length === 0 ? undefined : options;
199
289
  }
200
290
  function isUnknownRemotePluginBackendRoute(spec, method, remotePath, statusCode, body) {
201
- if (!spec.path.startsWith("/plugin-backends/") || statusCode !== 404 || !(body instanceof Buffer))
291
+ if (!spec.path.startsWith("/paired-plugin-backends/")
292
+ || statusCode !== 404
293
+ || !(body instanceof Buffer))
202
294
  return false;
203
295
  try {
204
296
  const value = JSON.parse(body.toString("utf8"));
@@ -243,6 +335,8 @@ function readBoundedRemoteBody(body, maxBytes, timeoutMs, signal) {
243
335
  fail(new RemoteMachineRequestError("Remote machine response body timed out", 504));
244
336
  }, timeoutMs);
245
337
  timeout.unref();
338
+ // An inbound disconnect must release the upstream connection instead of
339
+ // draining a remote body nobody is waiting for any more.
246
340
  const onAbort = () => {
247
341
  fail(new RemoteMachineRequestError("Remote machine request cancelled", 502));
248
342
  };
@@ -289,7 +383,7 @@ function readBoundedRemoteBody(body, maxBytes, timeoutMs, signal) {
289
383
  resolve(Buffer.concat(chunks));
290
384
  };
291
385
  const onError = (error) => {
292
- fail(new RemoteMachineRequestError(errorMessage(error), 502));
386
+ fail(new RemoteMachineRequestError(userFacingErrorMessage(error, createTranslator("en", {})), 502));
293
387
  };
294
388
  body.on("data", onData);
295
389
  body.once("end", onEnd);
@@ -308,20 +402,17 @@ function destroyReadable(body) {
308
402
  function isSelectedMachineConfigRequestError(error) {
309
403
  return error instanceof Error && error.message.startsWith("PI WEB selected-machine config");
310
404
  }
311
- function errorMessage(error) {
312
- return error instanceof Error ? error.message : String(error);
313
- }
314
405
  function isRecord(value) {
315
406
  return typeof value === "object" && value !== null && !Array.isArray(value);
316
407
  }
317
- function sendGatewayError(reply, machineId, error) {
408
+ function sendGatewayError(reply, machineId, error, t) {
318
409
  const statusCode = error instanceof RemoteMachineRequestError ? error.statusCode : 502;
319
- const label = statusCode === 504 ? "Remote machine timeout" : "Remote machine unavailable";
410
+ const label = statusCode === 504 ? t("machineError.timeout", "Remote machine timeout") : t("machineError.unavailable", "Remote machine unavailable");
320
411
  return reply.code(statusCode).send({
321
412
  error: label,
322
413
  machineId,
323
414
  statusCode,
324
- detail: errorMessage(error),
415
+ detail: userFacingErrorMessage(error, t),
325
416
  });
326
417
  }
327
418
  //# sourceMappingURL=machineProxyRoutes.js.map