@chainingintention/pi-web-cn 2.0.0 → 2.202610.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.
- package/README.md +61 -106
- package/dist/.plugins-ready +1 -0
- package/dist/cli.js +331 -174
- package/dist/cli.js.map +1 -1
- package/dist/client/apple-touch-icon-dev.png +0 -0
- package/dist/client/assets/PiWebApp-vueV4eKR.js +4938 -0
- package/dist/client/assets/classic-CyM97Akm.css +54 -0
- package/dist/client/assets/external-B9K8duyP.js +2 -0
- package/dist/client/assets/graphite-DquaqFXU.css +54 -0
- package/dist/client/assets/index-C8f0d0CR.js +2 -0
- package/dist/client/assets/paper-CB1oLuRr.css +54 -0
- package/dist/client/assets/pi-web-dark-D_KtbM95.css +54 -0
- package/dist/client/assets/pi-web-light-DSNLMIBI.css +54 -0
- package/dist/client/assets/vendor-editor-core-BfnHL1Dg.js +10 -0
- package/dist/client/assets/vendor-editor-languages-bNquDJP0.js +28 -0
- package/dist/client/favicon-dev.svg +8 -0
- package/dist/client/index.html +7 -51
- package/dist/client/manifest.webmanifest +2 -1
- package/dist/client/pwa-icon-dev-192.png +0 -0
- package/dist/client/pwa-icon-dev-512.png +0 -0
- package/dist/config.js +55 -8
- package/dist/config.js.map +1 -1
- package/dist/docker/piWebDockerCommandPlan.js +13 -4
- package/dist/docker/piWebDockerCommandPlan.js.map +1 -1
- package/dist/environment.js +4 -0
- package/dist/environment.js.map +1 -0
- package/dist/localization.js +24 -0
- package/dist/localization.js.map +1 -0
- package/dist/nativeServices/installedServiceDefinitions.js +617 -0
- package/dist/nativeServices/installedServiceDefinitions.js.map +1 -0
- package/dist/nativeServices/serviceAction.js +78 -20
- package/dist/nativeServices/serviceAction.js.map +1 -1
- package/dist/nativeServices/serviceDoctor.js +418 -114
- package/dist/nativeServices/serviceDoctor.js.map +1 -1
- package/dist/nativeServices/servicePlan.js +2 -2
- package/dist/nativeServices/servicePlan.js.map +1 -1
- package/dist/pi-packages/captains-log/README.md +11 -0
- package/dist/pi-packages/captains-log/dist/browser/channelProtocol.js +29 -0
- package/dist/pi-packages/captains-log/dist/browser/index.js +143 -0
- package/dist/pi-packages/captains-log/dist/browser/markdown.js +68 -0
- package/dist/pi-packages/captains-log/dist/browser/panel.js +148 -0
- package/dist/pi-packages/captains-log/dist/browser/protocol.js +26 -0
- package/dist/pi-packages/captains-log/dist/companion.js +126 -0
- package/dist/pi-packages/captains-log/dist/roundtrip.js +62 -0
- package/dist/pi-packages/captains-log/dist/server.js +210 -0
- package/dist/pi-packages/captains-log/dist/store.js +75 -0
- package/dist/pi-packages/captains-log/docs/usage.md +29 -0
- package/dist/pi-packages/captains-log/i18n.js +7 -0
- package/dist/pi-packages/captains-log/package.json +35 -0
- package/dist/pi-packages/captains-log/tsconfig.json +21 -0
- package/dist/pi-packages/captains-log/vite.config.mjs +28 -0
- package/dist/pi-packages/relays/extensions/index.js +61 -0
- package/dist/pi-packages/relays/i18n.js +7 -0
- package/dist/{pi-web-plugins → pi-packages}/relays/markdownDocument.js +3 -2
- package/dist/pi-packages/relays/package.json +20 -0
- package/dist/pi-packages/relays/pi-web-plugin.js +96 -0
- package/dist/pi-packages/relays/prompts/relay-worktree.md +18 -0
- package/dist/pi-packages/relays/prompts/relay.md +18 -0
- package/dist/{pi-web-plugins → pi-packages}/relays/relayDiscovery.js +2 -2
- package/dist/pi-packages/relays/relayDispatch.js +67 -0
- package/dist/pi-packages/relays/relayIdentity.js +37 -0
- package/dist/{pi-web-plugins → pi-packages}/relays/relaysPanelElement.js +98 -59
- package/dist/pi-packages/relays/skills/relay/SKILL.md +50 -0
- package/dist/pi-packages/relays/skills/relay-runner/SKILL.md +74 -0
- package/dist/pi-packages/workflows/browser/pi-web-plugin.js +42 -0
- package/dist/pi-packages/workflows/browser/worktreeDialog.js +170 -0
- package/dist/pi-packages/workflows/package.json +23 -0
- package/dist/pi-packages/workflows/prompts/worktree.md +21 -0
- package/dist/pi-packages/workflows/server-plugin.js +586 -0
- package/dist/pi-packages/workflows/vite.config.mjs +17 -0
- package/dist/pi-web-plugins/code-highlight/browser/pi-web-plugin.js +22 -0
- package/dist/pi-web-plugins/code-highlight/package.json +13 -0
- package/dist/pi-web-plugins/files/browser/assets/files-icon-DZObYhxb.svg +3 -0
- package/dist/pi-web-plugins/files/browser/pi-web-plugin.js +466 -0
- package/dist/pi-web-plugins/files/package.json +15 -0
- package/dist/pi-web-plugins/git/browser/git-contract.js +22 -11
- package/dist/pi-web-plugins/git/browser/git-panel.js +228 -100
- package/dist/pi-web-plugins/git/browser/i18n.js +7 -0
- package/dist/pi-web-plugins/git/browser/pi-web-plugin.js +28 -4
- package/dist/pi-web-plugins/git/git-backend.js +61 -21
- package/dist/pi-web-plugins/git/gitStatusCache.js +48 -0
- package/dist/pi-web-plugins/git/i18n.js +7 -0
- package/dist/pi-web-plugins/git/package.json +1 -0
- package/dist/pi-web-plugins/git/server-plugin.js +45 -24
- package/dist/pi-web-plugins/git/workspace-discovery-notify.cjs +14 -0
- package/dist/pi-web-plugins/git/workspaceDiscoveryHooks.js +186 -0
- package/dist/pi-web-plugins/info/i18n.js +7 -0
- package/dist/pi-web-plugins/info/infoInternals.js +76 -65
- package/dist/pi-web-plugins/info/package.json +1 -1
- package/dist/pi-web-plugins/info/pi-web-plugin.js +40 -42
- package/dist/pi-web-plugins/mermaid/browser/mermaid-engine.js +4255 -0
- package/dist/pi-web-plugins/mermaid/browser/pi-web-plugin.js +11 -0
- package/dist/pi-web-plugins/mermaid/package.json +13 -0
- package/dist/pi-web-plugins/terminal/browser/pi-web-plugin.js +219 -0
- package/dist/pi-web-plugins/terminal/i18n.js +7 -0
- package/dist/pi-web-plugins/terminal/package.json +16 -0
- package/dist/pi-web-plugins/terminal/server-plugin.js +367 -0
- package/dist/pi-web-plugins/terminal/terminalService.js +436 -0
- package/dist/pi-web-plugins/updates/i18n.js +7 -0
- package/dist/pi-web-plugins/updates/package.json +1 -1
- package/dist/pi-web-plugins/updates/pi-web-plugin.js +143 -140
- package/dist/pi-web-plugins/updates/updatesLogic.js +24 -24
- package/dist/pi-web-plugins/workspace-tasks/config.js +12 -11
- package/dist/pi-web-plugins/workspace-tasks/i18n.js +7 -0
- package/dist/pi-web-plugins/workspace-tasks/package.json +1 -1
- package/dist/pi-web-plugins/workspace-tasks/pi-web-plugin.js +31 -9
- package/dist/pi-web-plugins/workspace-tasks/tasksPanelElement.js +54 -36
- package/dist/pi-web-plugins/workspace-tasks/workspaceTasksClient.js +12 -11
- package/dist/pi-web-plugins/zh-cn/auth.json +9 -0
- package/dist/pi-web-plugins/zh-cn/bundled.json +219 -0
- package/dist/pi-web-plugins/zh-cn/cli.json +230 -0
- package/dist/pi-web-plugins/zh-cn/client.json +225 -0
- package/dist/pi-web-plugins/zh-cn/components.json +1252 -0
- package/dist/pi-web-plugins/zh-cn/config-errors.json +188 -0
- package/dist/pi-web-plugins/zh-cn/files.json +50 -0
- package/dist/pi-web-plugins/zh-cn/machines.json +28 -0
- package/dist/pi-web-plugins/zh-cn/main.json +459 -0
- package/dist/pi-web-plugins/zh-cn/management-errors.json +23 -0
- package/dist/pi-web-plugins/zh-cn/manifest.webmanifest +25 -0
- package/dist/pi-web-plugins/zh-cn/metadata.json +3 -0
- package/dist/pi-web-plugins/zh-cn/package.json +10 -0
- package/dist/pi-web-plugins/zh-cn/pi-web-plugin.js +16 -0
- package/dist/pi-web-plugins/zh-cn/projects.json +6 -0
- package/dist/pi-web-plugins/zh-cn/provider-auth.json +18 -0
- package/dist/pi-web-plugins/zh-cn/routing.json +68 -0
- package/dist/pi-web-plugins/zh-cn/server-main.json +99 -0
- package/dist/pi-web-plugins/zh-cn/server.json +256 -0
- package/dist/piAi.js +4 -0
- package/dist/piAi.js.map +1 -0
- package/dist/piRuntime.js +150 -0
- package/dist/piRuntime.js.map +1 -0
- package/dist/piSdk.js +5 -0
- package/dist/piSdk.js.map +1 -0
- package/dist/piWebUpdate.js +508 -0
- package/dist/piWebUpdate.js.map +1 -0
- package/dist/piWebVersionReport.js +109 -41
- package/dist/piWebVersionReport.js.map +1 -1
- package/dist/plugin-api.d.ts +609 -29
- package/dist/plugin-api.js +1 -0
- package/dist/pluginRecoveryCli.js +27 -25
- package/dist/pluginRecoveryCli.js.map +1 -1
- package/dist/server/activity/workspaceActivityService.js +13 -6
- package/dist/server/activity/workspaceActivityService.js.map +1 -1
- package/dist/server/app.js +158 -89
- package/dist/server/app.js.map +1 -1
- package/dist/server/audit/managementAuditStore.js +6 -1
- package/dist/server/audit/managementAuditStore.js.map +1 -1
- package/dist/server/audit/normalToolAuditCli.js +45 -43
- package/dist/server/audit/normalToolAuditCli.js.map +1 -1
- package/dist/server/browserMessageProjection.js +39 -22
- package/dist/server/browserMessageProjection.js.map +1 -1
- package/dist/server/configRoutes.js +54 -33
- package/dist/server/configRoutes.js.map +1 -1
- package/dist/server/deploymentIdentity.js +67 -0
- package/dist/server/deploymentIdentity.js.map +1 -0
- package/dist/server/deploymentIdentityRoutes.js +22 -0
- package/dist/server/deploymentIdentityRoutes.js.map +1 -0
- package/dist/server/diagnostics/nodePtyNativeModule.js +7 -6
- package/dist/server/diagnostics/nodePtyNativeModule.js.map +1 -1
- package/dist/server/diagnostics/nodePtySpawnHelper.js +21 -20
- package/dist/server/diagnostics/nodePtySpawnHelper.js.map +1 -1
- package/dist/server/index.js +10 -1
- package/dist/server/index.js.map +1 -1
- package/dist/server/knownAutoInstallPiPackages.js +36 -0
- package/dist/server/knownAutoInstallPiPackages.js.map +1 -0
- package/dist/server/knownPiPackages.js +12 -0
- package/dist/server/knownPiPackages.js.map +1 -0
- package/dist/server/machines/machineClient.js +23 -19
- package/dist/server/machines/machineClient.js.map +1 -1
- package/dist/server/machines/machinePluginProxyRoutes.js +131 -31
- package/dist/server/machines/machinePluginProxyRoutes.js.map +1 -1
- package/dist/server/machines/machineProxyRoutes.js +138 -47
- package/dist/server/machines/machineProxyRoutes.js.map +1 -1
- package/dist/server/machines/machineRoutes.js +18 -13
- package/dist/server/machines/machineRoutes.js.map +1 -1
- package/dist/server/machines/machineService.js +40 -18
- package/dist/server/machines/machineService.js.map +1 -1
- package/dist/server/managementEmbed.js +149 -30
- package/dist/server/managementEmbed.js.map +1 -1
- package/dist/server/managementPrivileges.js +21 -0
- package/dist/server/managementPrivileges.js.map +1 -0
- package/dist/server/managementTerminalProxyRoutes.js +124 -0
- package/dist/server/managementTerminalProxyRoutes.js.map +1 -0
- package/dist/server/navigationPreferenceRoutes.js +59 -0
- package/dist/server/navigationPreferenceRoutes.js.map +1 -0
- package/dist/server/normalAuth.js +77 -53
- package/dist/server/normalAuth.js.map +1 -1
- package/dist/server/notices/serverNoticeRoutes.js +43 -0
- package/dist/server/notices/serverNoticeRoutes.js.map +1 -0
- package/dist/server/notices/serverNoticeService.js +26 -0
- package/dist/server/notices/serverNoticeService.js.map +1 -0
- package/dist/server/notices/serverNoticeStore.js +122 -0
- package/dist/server/notices/serverNoticeStore.js.map +1 -0
- package/dist/server/passwordVerifier.js +91 -0
- package/dist/server/passwordVerifier.js.map +1 -0
- package/dist/server/piPackageIdentity.js +25 -0
- package/dist/server/piPackageIdentity.js.map +1 -0
- package/dist/server/piPackageService.js +72 -9
- package/dist/server/piPackageService.js.map +1 -1
- package/dist/server/piWebPluginCatalog.js +212 -35
- package/dist/server/piWebPluginCatalog.js.map +1 -1
- package/dist/server/piWebPluginLifecycle.js +29 -3
- package/dist/server/piWebPluginLifecycle.js.map +1 -1
- package/dist/server/piWebPluginService.js +199 -292
- package/dist/server/piWebPluginService.js.map +1 -1
- package/dist/server/piWebStatus.js +57 -100
- package/dist/server/piWebStatus.js.map +1 -1
- package/dist/server/pluginCallbackDrain.js +35 -0
- package/dist/server/pluginCallbackDrain.js.map +1 -0
- package/dist/server/plugins/pluginBackendChannelProxyAdmission.js +84 -0
- package/dist/server/plugins/pluginBackendChannelProxyAdmission.js.map +1 -0
- package/dist/server/plugins/pluginBackendChannelProxyCoordinator.js +234 -0
- package/dist/server/plugins/pluginBackendChannelProxyCoordinator.js.map +1 -0
- package/dist/server/plugins/pluginBackendChannelProxyRoutes.js +61 -0
- package/dist/server/plugins/pluginBackendChannelProxyRoutes.js.map +1 -0
- package/dist/server/plugins/pluginBackendProxyRoutes.js +47 -57
- package/dist/server/plugins/pluginBackendProxyRoutes.js.map +1 -1
- package/dist/server/plugins/pluginBackendRegistry.js +804 -0
- package/dist/server/plugins/pluginBackendRegistry.js.map +1 -0
- package/dist/server/plugins/projectPluginSettings.js +95 -0
- package/dist/server/plugins/projectPluginSettings.js.map +1 -0
- package/dist/server/plugins/serverPluginCatalogCapability.js +106 -0
- package/dist/server/plugins/serverPluginCatalogCapability.js.map +1 -0
- package/dist/server/plugins/serverPluginPiSessionEventsCapability.js +34 -0
- package/dist/server/plugins/serverPluginPiSessionEventsCapability.js.map +1 -0
- package/dist/server/plugins/serverPluginPiSessionsCapability.js +185 -0
- package/dist/server/plugins/serverPluginPiSessionsCapability.js.map +1 -0
- package/dist/server/plugins/serverPluginRuntime.js +1088 -108
- package/dist/server/plugins/serverPluginRuntime.js.map +1 -1
- package/dist/server/plugins/serverPluginWorkspacesCapability.js +114 -0
- package/dist/server/plugins/serverPluginWorkspacesCapability.js.map +1 -0
- package/dist/server/projectTrustRoutes.js +86 -0
- package/dist/server/projectTrustRoutes.js.map +1 -0
- package/dist/server/projects/projectLifecycleService.js +94 -0
- package/dist/server/projects/projectLifecycleService.js.map +1 -0
- package/dist/server/projects/projectService.js +7 -4
- package/dist/server/projects/projectService.js.map +1 -1
- package/dist/server/realtime/sessionEventHub.js +58 -39
- package/dist/server/realtime/sessionEventHub.js.map +1 -1
- package/dist/server/realtime/sessionEventScope.js +4 -0
- package/dist/server/realtime/sessionEventScope.js.map +1 -1
- package/dist/server/requestCancellation.js +15 -1
- package/dist/server/requestCancellation.js.map +1 -1
- package/dist/server/sessiond/agentHttpDispatcher.js +108 -0
- package/dist/server/sessiond/agentHttpDispatcher.js.map +1 -0
- package/dist/server/sessiond/autoInstallPiPackages.js +63 -0
- package/dist/server/sessiond/autoInstallPiPackages.js.map +1 -0
- package/dist/server/sessiond/pluginBackendChannelRoutes.js +410 -0
- package/dist/server/sessiond/pluginBackendChannelRoutes.js.map +1 -0
- package/dist/server/sessiond/pluginBackendRoutes.js +64 -47
- package/dist/server/sessiond/pluginBackendRoutes.js.map +1 -1
- package/dist/server/sessiond/pluginCatalogRoutes.js +41 -0
- package/dist/server/sessiond/pluginCatalogRoutes.js.map +1 -0
- package/dist/server/sessiond/projectMutationRoutes.js +39 -0
- package/dist/server/sessiond/projectMutationRoutes.js.map +1 -0
- package/dist/server/sessiond/sessionDaemonShutdown.js +36 -0
- package/dist/server/sessiond/sessionDaemonShutdown.js.map +1 -0
- package/dist/server/sessiond/sessionDaemonStartup.js +30 -4
- package/dist/server/sessiond/sessionDaemonStartup.js.map +1 -1
- package/dist/server/sessiond/sessionProxyRoutes.js +263 -91
- package/dist/server/sessiond/sessionProxyRoutes.js.map +1 -1
- package/dist/server/sessiond/sessionServiceDependencies.js +5 -0
- package/dist/server/sessiond/sessionServiceDependencies.js.map +1 -1
- package/dist/server/sessiond/sessiondStateOwnership.js +174 -39
- package/dist/server/sessiond/sessiondStateOwnership.js.map +1 -1
- package/dist/server/sessiond/workspaceCatalogRoutes.js +11 -5
- package/dist/server/sessiond/workspaceCatalogRoutes.js.map +1 -1
- package/dist/server/sessiond/workspaceNotificationRoutes.js +55 -0
- package/dist/server/sessiond/workspaceNotificationRoutes.js.map +1 -0
- package/dist/server/sessiond/workspaceRemovalRoutes.js +1 -1
- package/dist/server/sessiond/workspaceRemovalRoutes.js.map +1 -1
- package/dist/server/sessiond.js +313 -69
- package/dist/server/sessiond.js.map +1 -1
- package/dist/server/sessions/askUserDomain.js +232 -0
- package/dist/server/sessions/askUserDomain.js.map +1 -0
- package/dist/server/sessions/askUserTool.js +18 -21
- package/dist/server/sessions/askUserTool.js.map +1 -1
- package/dist/server/sessions/attachmentService.js +2 -6
- package/dist/server/sessions/attachmentService.js.map +1 -1
- package/dist/server/sessions/authRoutes.js +32 -19
- package/dist/server/sessions/authRoutes.js.map +1 -1
- package/dist/server/sessions/authService.js +31 -11
- package/dist/server/sessions/authService.js.map +1 -1
- package/dist/server/sessions/builtinCommands.js +28 -21
- package/dist/server/sessions/builtinCommands.js.map +1 -1
- package/dist/server/sessions/builtinExtensionFactories.js +36 -0
- package/dist/server/sessions/builtinExtensionFactories.js.map +1 -0
- package/dist/server/sessions/clientSessionPreview.js +14 -0
- package/dist/server/sessions/clientSessionPreview.js.map +1 -0
- package/dist/server/sessions/companionBackend.js +286 -0
- package/dist/server/sessions/companionBackend.js.map +1 -0
- package/dist/server/sessions/dockerEnvironmentFacts.js +98 -10
- package/dist/server/sessions/dockerEnvironmentFacts.js.map +1 -1
- package/dist/server/sessions/extensionSessionDispatch.js +76 -0
- package/dist/server/sessions/extensionSessionDispatch.js.map +1 -0
- package/dist/server/sessions/globalProviderPolicy.js +88 -19
- package/dist/server/sessions/globalProviderPolicy.js.map +1 -1
- package/dist/server/sessions/managementAgentTools.js +116 -6
- package/dist/server/sessions/managementAgentTools.js.map +1 -1
- package/dist/server/sessions/managementPermissionSystem.js +36 -14
- package/dist/server/sessions/managementPermissionSystem.js.map +1 -1
- package/dist/server/sessions/managementSandbox.js +7 -18
- package/dist/server/sessions/managementSandbox.js.map +1 -1
- package/dist/server/sessions/mcpAuthFlowService.js +289 -0
- package/dist/server/sessions/mcpAuthFlowService.js.map +1 -0
- package/dist/server/sessions/mcpAuthRoutes.js +104 -0
- package/dist/server/sessions/mcpAuthRoutes.js.map +1 -0
- package/dist/server/sessions/mcpOAuthCredentialAdapter.js +92 -0
- package/dist/server/sessions/mcpOAuthCredentialAdapter.js.map +1 -0
- package/dist/server/sessions/messageHistoryTarget.js +79 -0
- package/dist/server/sessions/messageHistoryTarget.js.map +1 -0
- package/dist/server/sessions/messagePaging.js +2 -2
- package/dist/server/sessions/messagePaging.js.map +1 -1
- package/dist/server/sessions/modelCatalogRefresher.js +4 -3
- package/dist/server/sessions/modelCatalogRefresher.js.map +1 -1
- package/dist/server/sessions/oauthLoginFlowService.js +19 -20
- package/dist/server/sessions/oauthLoginFlowService.js.map +1 -1
- package/dist/server/sessions/piSessionEventConnections.js +68 -0
- package/dist/server/sessions/piSessionEventConnections.js.map +1 -0
- package/dist/server/sessions/piSessionManagerGateway.js +206 -27
- package/dist/server/sessions/piSessionManagerGateway.js.map +1 -1
- package/dist/server/sessions/piSessionService.js +2508 -991
- package/dist/server/sessions/piSessionService.js.map +1 -1
- package/dist/server/sessions/plainTextTheme.js +1 -1
- package/dist/server/sessions/plainTextTheme.js.map +1 -1
- package/dist/server/sessions/projectAuthService.js +35 -6
- package/dist/server/sessions/projectAuthService.js.map +1 -1
- package/dist/server/sessions/projectSettingsScope.js +88 -33
- package/dist/server/sessions/projectSettingsScope.js.map +1 -1
- package/dist/server/sessions/projectTrust.js +119 -0
- package/dist/server/sessions/projectTrust.js.map +1 -0
- package/dist/server/sessions/queuedMessageMutation.js +170 -0
- package/dist/server/sessions/queuedMessageMutation.js.map +1 -0
- package/dist/server/sessions/relaySkill.js +169 -0
- package/dist/server/sessions/relaySkill.js.map +1 -0
- package/dist/server/sessions/sessionActivityMarker.js +105 -0
- package/dist/server/sessions/sessionActivityMarker.js.map +1 -0
- package/dist/server/sessions/sessionArchiveMapping.js +16 -15
- package/dist/server/sessions/sessionArchiveMapping.js.map +1 -1
- package/dist/server/sessions/sessionArchiveStore.js +5 -1
- package/dist/server/sessions/sessionArchiveStore.js.map +1 -1
- package/dist/server/sessions/sessionArchiveTree.js +2 -2
- package/dist/server/sessions/sessionArchiveTree.js.map +1 -1
- package/dist/server/sessions/sessionCleanup.js +4 -3
- package/dist/server/sessions/sessionCleanup.js.map +1 -1
- package/dist/server/sessions/sessionCommandService.js +79 -87
- package/dist/server/sessions/sessionCommandService.js.map +1 -1
- package/dist/server/sessions/sessionEnvironmentFacts.js +5 -4
- package/dist/server/sessions/sessionEnvironmentFacts.js.map +1 -1
- package/dist/server/sessions/sessionFileHeader.js +41 -0
- package/dist/server/sessions/sessionFileHeader.js.map +1 -1
- package/dist/server/sessions/sessionImageDimensions.js +31 -0
- package/dist/server/sessions/sessionImageDimensions.js.map +1 -0
- package/dist/server/sessions/sessionMediaIndex.js +191 -0
- package/dist/server/sessions/sessionMediaIndex.js.map +1 -0
- package/dist/server/sessions/sessionMetadata.js +51 -0
- package/dist/server/sessions/sessionMetadata.js.map +1 -0
- package/dist/server/sessions/sessionModelScope.js +160 -0
- package/dist/server/sessions/sessionModelScope.js.map +1 -0
- package/dist/server/sessions/sessionNameGenerator.js +16 -35
- package/dist/server/sessions/sessionNameGenerator.js.map +1 -1
- package/dist/server/sessions/sessionNotificationStore.js +14 -11
- package/dist/server/sessions/sessionNotificationStore.js.map +1 -1
- package/dist/server/sessions/sessionReadAccess.js +41 -0
- package/dist/server/sessions/sessionReadAccess.js.map +1 -0
- package/dist/server/sessions/sessionRoutes.js +221 -78
- package/dist/server/sessions/sessionRoutes.js.map +1 -1
- package/dist/server/sessions/sessionSummaryScanner.js +62 -5
- package/dist/server/sessions/sessionSummaryScanner.js.map +1 -1
- package/dist/server/sessions/sessionTreeProjection.js +50 -49
- package/dist/server/sessions/sessionTreeProjection.js.map +1 -1
- package/dist/server/sessions/sessionUiEvents.js +22 -10
- package/dist/server/sessions/sessionUiEvents.js.map +1 -1
- package/dist/server/sessions/sessionUnreadStore.js +53 -3
- package/dist/server/sessions/sessionUnreadStore.js.map +1 -1
- package/dist/server/sessions/spawnSessionTool.js +14 -6
- package/dist/server/sessions/spawnSessionTool.js.map +1 -1
- package/dist/server/sessions/spawnSubsessionTool.js +40 -24
- package/dist/server/sessions/spawnSubsessionTool.js.map +1 -1
- package/dist/server/sessions/spawnTargetResolver.js +1 -1
- package/dist/server/sessions/subsessionCompletionDelivery.js +15 -0
- package/dist/server/sessions/subsessionCompletionDelivery.js.map +1 -0
- package/dist/server/sessions/subsessionCompletionInbox.js +134 -0
- package/dist/server/sessions/subsessionCompletionInbox.js.map +1 -0
- package/dist/server/sessions/subsessionProvenance.js +27 -0
- package/dist/server/sessions/subsessionProvenance.js.map +1 -0
- package/dist/server/sessions/transcriptBranchCache.js +81 -0
- package/dist/server/sessions/transcriptBranchCache.js.map +1 -0
- package/dist/server/sessions/transcriptMarkdown.js +48 -0
- package/dist/server/sessions/transcriptMarkdown.js.map +1 -0
- package/dist/server/sessions/transcriptMessages.js +57 -0
- package/dist/server/sessions/transcriptMessages.js.map +1 -0
- package/dist/server/startupLogger.js +13 -0
- package/dist/server/startupLogger.js.map +1 -0
- package/dist/server/startupUrls.js +27 -0
- package/dist/server/startupUrls.js.map +1 -0
- package/dist/server/status/machineStatusService.js +15 -7
- package/dist/server/status/machineStatusService.js.map +1 -1
- package/dist/server/storage/navigationPreferenceStore.js +138 -0
- package/dist/server/storage/navigationPreferenceStore.js.map +1 -0
- package/dist/server/storage/piPackageDismissalStore.js +78 -0
- package/dist/server/storage/piPackageDismissalStore.js.map +1 -0
- package/dist/server/terminals/{terminalService.js → managementCommandRunService.js} +98 -102
- package/dist/server/terminals/managementCommandRunService.js.map +1 -0
- package/dist/server/terminals/managementTerminalRoutes.js +91 -0
- package/dist/server/terminals/managementTerminalRoutes.js.map +1 -0
- package/dist/server/terminals/requiredTerminalService.js +103 -0
- package/dist/server/terminals/requiredTerminalService.js.map +1 -0
- package/dist/server/webSocketBridge.js +348 -0
- package/dist/server/webSocketBridge.js.map +1 -1
- package/dist/server/workbench/accessStateStore.js +33 -5
- package/dist/server/workbench/accessStateStore.js.map +1 -1
- package/dist/server/workbench/capabilitySearch.js +3 -2
- package/dist/server/workbench/capabilitySearch.js.map +1 -1
- package/dist/server/workbench/gatewayIntegration.js +40 -13
- package/dist/server/workbench/gatewayIntegration.js.map +1 -1
- package/dist/server/workbench/knowledgeSearch.js +100 -0
- package/dist/server/workbench/knowledgeSearch.js.map +1 -0
- package/dist/server/workbench/mcpClient.js +41 -8
- package/dist/server/workbench/mcpClient.js.map +1 -1
- package/dist/server/workbench/skillSync.js +11 -3
- package/dist/server/workbench/skillSync.js.map +1 -1
- package/dist/server/workbench/workbenchClient.js +130 -7
- package/dist/server/workbench/workbenchClient.js.map +1 -1
- package/dist/server/workbench/workbenchTools.js +196 -14
- package/dist/server/workbench/workbenchTools.js.map +1 -1
- package/dist/server/workingDirectory.js +3 -2
- package/dist/server/workingDirectory.js.map +1 -1
- package/dist/server/workspaceExplorerRoutes.js +53 -21
- package/dist/server/workspaceExplorerRoutes.js.map +1 -1
- package/dist/server/workspaces/fileContentService.js +31 -16
- package/dist/server/workspaces/fileContentService.js.map +1 -1
- package/dist/server/workspaces/fileOperationService.js +11 -9
- package/dist/server/workspaces/fileOperationService.js.map +1 -1
- package/dist/server/workspaces/filePreviewService.js +10 -6
- package/dist/server/workspaces/filePreviewService.js.map +1 -1
- package/dist/server/workspaces/fileSuggestions.js +77 -10
- package/dist/server/workspaces/fileSuggestions.js.map +1 -1
- package/dist/server/workspaces/fileTreeService.js +103 -15
- package/dist/server/workspaces/fileTreeService.js.map +1 -1
- package/dist/server/workspaces/normalProjectCwdResolver.js +35 -0
- package/dist/server/workspaces/normalProjectCwdResolver.js.map +1 -0
- package/dist/server/workspaces/pathAccessPolicy.js +24 -18
- package/dist/server/workspaces/pathAccessPolicy.js.map +1 -1
- package/dist/server/workspaces/pathSafety.js +6 -5
- package/dist/server/workspaces/pathSafety.js.map +1 -1
- package/dist/server/workspaces/projectPiWebConfig.js +95 -8
- package/dist/server/workspaces/projectPiWebConfig.js.map +1 -1
- package/dist/server/workspaces/projectWorkspaceCwds.js +0 -5
- package/dist/server/workspaces/projectWorkspaceCwds.js.map +1 -1
- package/dist/server/workspaces/sessionDaemonWorkspaceCatalog.js +37 -22
- package/dist/server/workspaces/sessionDaemonWorkspaceCatalog.js.map +1 -1
- package/dist/server/workspaces/workspaceCatalog.js +6 -4
- package/dist/server/workspaces/workspaceCatalog.js.map +1 -1
- package/dist/server/workspaces/workspaceChangeNotifier.js +12 -0
- package/dist/server/workspaces/workspaceChangeNotifier.js.map +1 -0
- package/dist/server/workspaces/workspaceDeletionRoutes.js +9 -70
- package/dist/server/workspaces/workspaceDeletionRoutes.js.map +1 -1
- package/dist/server/workspaces/workspaceNotificationCommand.js +64 -0
- package/dist/server/workspaces/workspaceNotificationCommand.js.map +1 -0
- package/dist/server/workspaces/workspaceProviderRegistry.js +128 -24
- package/dist/server/workspaces/workspaceProviderRegistry.js.map +1 -1
- package/dist/server/workspaces/workspaceRemovalService.js +41 -7
- package/dist/server/workspaces/workspaceRemovalService.js.map +1 -1
- package/dist/server/workspaces/workspaceRouteContext.js +1 -1
- package/dist/server/workspaces/workspaceRouteContext.js.map +1 -1
- package/dist/server/workspaces/workspaceRouteErrors.js +4 -2
- package/dist/server/workspaces/workspaceRouteErrors.js.map +1 -1
- package/dist/server/workspaces/workspaceUserError.js +18 -0
- package/dist/server/workspaces/workspaceUserError.js.map +1 -0
- package/dist/server-plugin-api.d.ts +349 -49
- package/dist/server-plugin-api.js +344 -2
- package/dist/server-plugin-api.js.map +1 -1
- package/dist/serverPluginRecovery.js +6 -1
- package/dist/serverPluginRecovery.js.map +1 -1
- package/dist/sessiond/activeAgentProfile.js +27 -2
- package/dist/sessiond/activeAgentProfile.js.map +1 -1
- package/dist/sessiond/config.js +4 -3
- package/dist/sessiond/config.js.map +1 -1
- package/dist/sessiond/sessionDaemonClient.js +75 -19
- package/dist/sessiond/sessionDaemonClient.js.map +1 -1
- package/dist/sessiond/sessionDaemonErrors.js +49 -0
- package/dist/sessiond/sessionDaemonErrors.js.map +1 -0
- package/dist/shared/activeAgentProfile.js +2 -34
- package/dist/shared/activeAgentProfile.js.map +1 -1
- package/dist/shared/activity.js +0 -3
- package/dist/shared/activity.js.map +1 -1
- package/dist/shared/apiTypes.js +10 -3
- package/dist/shared/apiTypes.js.map +1 -1
- package/dist/shared/capabilities.js +8 -0
- package/dist/shared/capabilities.js.map +1 -1
- package/dist/shared/federatedRoutes.js +77 -11
- package/dist/shared/federatedRoutes.js.map +1 -1
- package/dist/shared/i18n.js +41 -0
- package/dist/shared/i18n.js.map +1 -0
- package/dist/shared/machinePluginIds.js +30 -7
- package/dist/shared/machinePluginIds.js.map +1 -1
- package/dist/shared/machineStatus.js +46 -3
- package/dist/shared/machineStatus.js.map +1 -1
- package/dist/shared/navigationPreferences.js +6 -0
- package/dist/shared/navigationPreferences.js.map +1 -0
- package/dist/shared/piWebConfigParsing.js +118 -49
- package/dist/shared/piWebConfigParsing.js.map +1 -1
- package/dist/shared/piWebStatusParsing.js +33 -0
- package/dist/shared/piWebStatusParsing.js.map +1 -1
- package/dist/shared/pluginApiTypes.d.ts +87 -8
- package/dist/shared/pluginApiTypes.js +2 -0
- package/dist/shared/pluginApiTypes.js.map +1 -0
- package/dist/shared/pluginBackendProtocol.js +218 -2
- package/dist/shared/pluginBackendProtocol.js.map +1 -1
- package/dist/shared/pluginCatalogTypes.d.ts +49 -0
- package/dist/shared/pluginCatalogTypes.js +156 -0
- package/dist/shared/pluginCatalogTypes.js.map +1 -0
- package/dist/shared/pluginIds.js +10 -1
- package/dist/shared/pluginIds.js.map +1 -1
- package/dist/shared/requiredTerminalPlugin.js +6 -0
- package/dist/shared/requiredTerminalPlugin.js.map +1 -0
- package/dist/shared/serverNoticeContract.js +88 -0
- package/dist/shared/serverNoticeContract.js.map +1 -0
- package/dist/shared/sessionDefaults.js +42 -0
- package/dist/shared/sessionDefaults.js.map +1 -0
- package/dist/shared/sessionMedia.js +12 -0
- package/dist/shared/sessionMedia.js.map +1 -0
- package/dist/shared/streamingBehavior.js +8 -0
- package/dist/shared/streamingBehavior.js.map +1 -0
- package/dist/shared/themePreference.js +24 -0
- package/dist/shared/themePreference.js.map +1 -0
- package/dist/shared/thinkingLevels.js +17 -16
- package/dist/shared/thinkingLevels.js.map +1 -1
- package/dist/shared/workspaceFiles.js.map +1 -1
- package/dist/workspaceNotificationCli.js +95 -0
- package/dist/workspaceNotificationCli.js.map +1 -0
- package/docs/README.md +31 -0
- package/docs/config.md +344 -277
- package/docs/plugins.md +204 -930
- package/examples/session-bridge-plugin/README.md +20 -0
- package/examples/session-bridge-plugin/docs/usage.md +54 -0
- package/examples/session-bridge-plugin/package.json +26 -0
- package/examples/session-bridge-plugin/src/browser/index.ts +87 -0
- package/examples/session-bridge-plugin/src/browser/protocol.ts +24 -0
- package/examples/session-bridge-plugin/src/companion.ts +65 -0
- package/examples/session-bridge-plugin/src/reviewRun.ts +39 -0
- package/examples/session-bridge-plugin/src/server.ts +85 -0
- package/examples/session-bridge-plugin/src/store.ts +80 -0
- package/examples/session-bridge-plugin/tsconfig.json +21 -0
- package/examples/workspace-provider-plugin/README.md +39 -0
- package/examples/workspace-provider-plugin/package.json +25 -0
- package/examples/workspace-provider-plugin/src/browser/index.ts +69 -0
- package/examples/workspace-provider-plugin/src/server.ts +68 -0
- package/examples/workspace-provider-plugin/tsconfig.json +21 -0
- package/extensions/pi-web.ts +3 -1
- package/package.json +59 -36
- package/skills/README.md +28 -2
- package/skills/relay/SKILL.md +24 -89
- package/skills/relay-runner/SKILL.md +74 -0
- package/dist/client/assets/CodeViewer-DCl56K0Z.js +0 -4
- package/dist/client/assets/TerminalPanel-DCvoEjUF.js +0 -187
- package/dist/client/assets/index-CMvms5cF.js +0 -4325
- package/dist/client/assets/vendor-editor-core-vUi74DnD.js +0 -12
- package/dist/client/assets/vendor-editor-languages-DoaXUodB.js +0 -46
- package/dist/client/assets/vendor-editor-legacy-CYBnW6ZU.js +0 -1
- package/dist/client/assets/vendor-terminal-BrP-ENHg.css +0 -1
- package/dist/client/assets/vendor-terminal-D8k4UKM2.js +0 -35
- package/dist/pi-web-plugins/relays/package.json +0 -9
- package/dist/pi-web-plugins/relays/pi-web-plugin.js +0 -44
- package/dist/server/git/gitService.js +0 -290
- package/dist/server/git/gitService.js.map +0 -1
- package/dist/server/gitRoutes.js +0 -23
- package/dist/server/gitRoutes.js.map +0 -1
- package/dist/server/sessions/pendingAskStore.js +0 -278
- package/dist/server/sessions/pendingAskStore.js.map +0 -1
- package/dist/server/terminalProxyRoutes.js +0 -178
- package/dist/server/terminalProxyRoutes.js.map +0 -1
- package/dist/server/terminals/terminalRoutes.js +0 -164
- package/dist/server/terminals/terminalRoutes.js.map +0 -1
- package/dist/server/terminals/terminalService.js.map +0 -1
- package/dist/server/terminals/terminalSize.js +0 -17
- package/dist/server/terminals/terminalSize.js.map +0 -1
- package/dist/server/workspaces/gitWorktreeDiscovery.js +0 -43
- package/dist/server/workspaces/gitWorktreeDiscovery.js.map +0 -1
- package/dist/server/workspaces/workspaceService.js +0 -52
- package/dist/server/workspaces/workspaceService.js.map +0 -1
- /package/dist/{pi-web-plugins → pi-packages}/relays/vendor/README.md +0 -0
- /package/dist/{pi-web-plugins → pi-packages}/relays/vendor/marked.esm.js +0 -0
|
@@ -1,5 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
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 {
|
|
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
|
|
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(
|
|
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
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
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
|
|
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
|
|
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
|
|
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":"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"}
|
|
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 {
|
|
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
|
-
...(
|
|
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
|
-
|
|
42
|
-
|
|
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:
|
|
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
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
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,
|
|
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
|
|
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/")
|
|
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(
|
|
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:
|
|
415
|
+
detail: userFacingErrorMessage(error, t),
|
|
325
416
|
});
|
|
326
417
|
}
|
|
327
418
|
//# sourceMappingURL=machineProxyRoutes.js.map
|