@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.
- 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-BXSziMEg.js +4921 -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-cdtUOfOW.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 +155 -77
- 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,15 +1,41 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Container environment facts appended to
|
|
3
|
-
* PI WEB Docker deployment.
|
|
4
|
-
*
|
|
5
|
-
*
|
|
2
|
+
* Container environment facts appended to the system prompt of sessions running
|
|
3
|
+
* in a PI WEB Docker deployment.
|
|
4
|
+
*
|
|
5
|
+
* A Docker deployment changes what is true about the machine an agent works on:
|
|
6
|
+
* commands run in a container instead of on the Docker host, most of the
|
|
7
|
+
* filesystem is discarded on the next image build, and several host paths are
|
|
8
|
+
* mounted in ways nothing in the working directory reveals. Agents otherwise
|
|
9
|
+
* discover this by installing tools that vanish or by editing paths whose host
|
|
10
|
+
* meaning they guessed wrong.
|
|
11
|
+
*
|
|
12
|
+
* The block states facts only: what the container is, which paths persist, and
|
|
13
|
+
* where the durable extension points live. It deliberately gives no workflow
|
|
14
|
+
* advice, so it does not compete with the operator's own `AGENTS.md`,
|
|
15
|
+
* `SYSTEM.md`, or `APPEND_SYSTEM.md` content.
|
|
16
|
+
*
|
|
17
|
+
* Facts are derived from what the running container can observe — the mount
|
|
18
|
+
* table plus the deployment descriptors Docker Compose already sets — rather
|
|
19
|
+
* than from new environment variables. Agent processes inherit `PI_WEB_DOCKER_*`
|
|
20
|
+
* and `HOSTEXEC_*` keys, and `pi-web-docker` resolves dev settings from its
|
|
21
|
+
* ambient environment, so adding descriptor variables purely to describe the
|
|
22
|
+
* deployment would risk changing what those tools do.
|
|
6
23
|
*/
|
|
7
24
|
import { readFileSync } from "node:fs";
|
|
8
25
|
const MOUNT_INFO_PATH = "/proc/self/mountinfo";
|
|
26
|
+
/** Persistent PI WEB/Pi state mount, created by the Docker data bind mount. */
|
|
9
27
|
const DATA_MOUNT = "/data";
|
|
28
|
+
/** Read-only view of the Docker host root filesystem. */
|
|
10
29
|
const HOST_ROOT_MOUNT = "/host";
|
|
30
|
+
/** Development mode's bind mount of the PI WEB checkout. */
|
|
11
31
|
const DEV_WORKSPACE_MOUNT = "/workspace";
|
|
12
32
|
const DOCKER_SOCKET_MOUNTS = ["/run/docker.sock", "/var/run/docker.sock"];
|
|
33
|
+
/**
|
|
34
|
+
* Filesystem types that describe kernel or container-internal state rather than
|
|
35
|
+
* a mounted host path. Host bind mounts report the underlying host filesystem
|
|
36
|
+
* (`ext4`, `btrfs`, `xfs`, `zfs`, `nfs`, `virtiofs`, …), so excluding these
|
|
37
|
+
* leaves the mounts an agent can meaningfully reason about.
|
|
38
|
+
*/
|
|
13
39
|
const CONTAINER_INTERNAL_FS_TYPES = new Set([
|
|
14
40
|
"autofs",
|
|
15
41
|
"binfmt_misc",
|
|
@@ -35,10 +61,30 @@ const CONTAINER_INTERNAL_FS_TYPES = new Set([
|
|
|
35
61
|
"tmpfs",
|
|
36
62
|
"tracefs",
|
|
37
63
|
]);
|
|
64
|
+
/**
|
|
65
|
+
* Mount targets that belong to the container runtime rather than to the
|
|
66
|
+
* workspace surface: kernel filesystems plus the per-container files Docker
|
|
67
|
+
* injects (`/etc/hosts`, `/etc/resolv.conf`, `/etc/hostname`) and the socket
|
|
68
|
+
* paths reported separately below.
|
|
69
|
+
*/
|
|
38
70
|
const CONTAINER_INTERNAL_TARGET_ROOTS = ["/proc", "/sys", "/dev", "/etc", "/run", "/var/run", "/tmp"];
|
|
71
|
+
/**
|
|
72
|
+
* Read the container's mount table.
|
|
73
|
+
*
|
|
74
|
+
* Throws when the table cannot be read; the caller decides whether missing
|
|
75
|
+
* facts should be reported or fatal.
|
|
76
|
+
*/
|
|
39
77
|
export function readContainerMounts(path = MOUNT_INFO_PATH) {
|
|
40
78
|
return parseContainerMounts(readFileSync(path, "utf8"));
|
|
41
79
|
}
|
|
80
|
+
/**
|
|
81
|
+
* Parse `/proc/self/mountinfo` content.
|
|
82
|
+
*
|
|
83
|
+
* Fields before the ` - ` separator are `id parent major:minor root mountPoint
|
|
84
|
+
* options [optional fields]`; the separator is followed by `fsType source
|
|
85
|
+
* superOptions`. Unparsable lines are skipped: a mount PI WEB cannot describe
|
|
86
|
+
* simply produces no fact.
|
|
87
|
+
*/
|
|
42
88
|
export function parseContainerMounts(mountInfo) {
|
|
43
89
|
const mounts = [];
|
|
44
90
|
for (const line of mountInfo.split("\n")) {
|
|
@@ -48,17 +94,26 @@ export function parseContainerMounts(mountInfo) {
|
|
|
48
94
|
const head = line.slice(0, separator).split(" ");
|
|
49
95
|
const target = head[4];
|
|
50
96
|
const options = head[5];
|
|
51
|
-
const fsType = line.slice(separator + 3).split(" ")
|
|
97
|
+
const [fsType, source] = line.slice(separator + 3).split(" ");
|
|
98
|
+
const device = head[2];
|
|
99
|
+
const root = head[3];
|
|
52
100
|
if (target === undefined || options === undefined || fsType === undefined || fsType === "")
|
|
53
101
|
continue;
|
|
54
102
|
mounts.push({
|
|
55
103
|
target: unescapeMountField(target),
|
|
56
104
|
fsType,
|
|
57
105
|
readOnly: options.split(",").includes("ro"),
|
|
106
|
+
...(device === undefined ? {} : { device }),
|
|
107
|
+
...(root === undefined ? {} : { root: unescapeMountField(root) }),
|
|
108
|
+
...(source === undefined ? {} : { source: unescapeMountField(source) }),
|
|
58
109
|
});
|
|
59
110
|
}
|
|
60
111
|
return mounts;
|
|
61
112
|
}
|
|
113
|
+
/**
|
|
114
|
+
* Build the environment facts block, or `undefined` when the process is not
|
|
115
|
+
* running in a PI WEB Docker deployment.
|
|
116
|
+
*/
|
|
62
117
|
export function dockerEnvironmentFacts({ env, mounts }) {
|
|
63
118
|
if (!isDockerDeployment(env))
|
|
64
119
|
return undefined;
|
|
@@ -86,6 +141,14 @@ export function dockerEnvironmentFacts({ env, mounts }) {
|
|
|
86
141
|
"</pi_web_docker_environment>",
|
|
87
142
|
].join("\n");
|
|
88
143
|
}
|
|
144
|
+
/**
|
|
145
|
+
* Resolve the system-prompt sections for this deployment.
|
|
146
|
+
*
|
|
147
|
+
* Returns an empty list outside Docker, when the operator switched the facts
|
|
148
|
+
* off, or when the mount table cannot be read. A missing mount table is
|
|
149
|
+
* reported through the logger rather than failing daemon startup: the facts
|
|
150
|
+
* improve a prompt, and no session depends on them.
|
|
151
|
+
*/
|
|
89
152
|
export function dockerEnvironmentPromptSections(options) {
|
|
90
153
|
const { env, enabled, logger, readMountInfo } = options;
|
|
91
154
|
if (!enabled || !isDockerDeployment(env))
|
|
@@ -123,8 +186,15 @@ function hostPathFacts(mounts) {
|
|
|
123
186
|
const paths = hostSharedMountTargets(mounts);
|
|
124
187
|
if (paths.length === 0)
|
|
125
188
|
return [];
|
|
126
|
-
return [
|
|
189
|
+
return [
|
|
190
|
+
`Docker host paths mounted read/write at the same absolute path inside and outside the container: ${paths.map((path) => `\`${path}\``).join(", ")}.`,
|
|
191
|
+
];
|
|
127
192
|
}
|
|
193
|
+
/**
|
|
194
|
+
* Host paths an agent can edit directly, deduplicated to their outermost mount
|
|
195
|
+
* so a nested bind of an already-listed directory does not read as a second
|
|
196
|
+
* location.
|
|
197
|
+
*/
|
|
128
198
|
function hostSharedMountTargets(mounts) {
|
|
129
199
|
const candidates = mounts
|
|
130
200
|
.filter((mount) => !mount.readOnly && isHostPathMount(mount))
|
|
@@ -137,16 +207,21 @@ function hostRootFact(mounts) {
|
|
|
137
207
|
const hostRoot = mounts.find((mount) => mount.target === HOST_ROOT_MOUNT);
|
|
138
208
|
if (hostRoot === undefined)
|
|
139
209
|
return [];
|
|
140
|
-
return [
|
|
210
|
+
return [
|
|
211
|
+
`The Docker host root filesystem is mounted at \`${HOST_ROOT_MOUNT}\`${hostRoot.readOnly ? " read-only" : ""}.`,
|
|
212
|
+
];
|
|
141
213
|
}
|
|
142
214
|
function dockerSocketFact(mounts) {
|
|
143
215
|
const socket = DOCKER_SOCKET_MOUNTS.find((path) => mounts.some((mount) => mount.target === path));
|
|
144
|
-
|
|
216
|
+
if (socket === undefined)
|
|
217
|
+
return [];
|
|
218
|
+
return ["The Docker socket is mounted, so `docker` commands act on the Docker host's daemon and containers."];
|
|
145
219
|
}
|
|
146
220
|
function hostExecFact(env) {
|
|
147
221
|
const mode = nonEmptyEnv(env, "HOSTEXEC_MODE");
|
|
148
|
-
if (mode === undefined || mode === "disabled")
|
|
222
|
+
if (mode === undefined || mode === "disabled") {
|
|
149
223
|
return ["`hostexec` is disabled in this deployment, so no command from this container runs on the Docker host."];
|
|
224
|
+
}
|
|
150
225
|
return ["`hostexec [--root] <command...>` runs a command on the Docker host, outside this container."];
|
|
151
226
|
}
|
|
152
227
|
function devWorkspaceFacts(mounts, devRepoRoot) {
|
|
@@ -156,9 +231,21 @@ function devWorkspaceFacts(mounts, devRepoRoot) {
|
|
|
156
231
|
const nested = mounts
|
|
157
232
|
.filter((mount) => mount.target !== DEV_WORKSPACE_MOUNT && isWithin(mount.target, DEV_WORKSPACE_MOUNT))
|
|
158
233
|
.map((mount) => `\`${mount.target}\``);
|
|
234
|
+
const hostDependencies = devRepoRoot === undefined ? undefined : `${devRepoRoot}/node_modules`;
|
|
235
|
+
const dependencies = mounts.find((mount) => mount.target === `${DEV_WORKSPACE_MOUNT}/node_modules`);
|
|
236
|
+
const alias = mounts.find((mount) => mount.target === hostDependencies);
|
|
237
|
+
const sharedDependencies = dependencies !== undefined && alias !== undefined && alias !== dependencies
|
|
238
|
+
&& dependencies.device !== undefined && dependencies.root !== undefined && dependencies.source !== undefined
|
|
239
|
+
&& dependencies.device === alias.device && dependencies.root === alias.root
|
|
240
|
+
&& dependencies.source === alias.source && dependencies.fsType === alias.fsType;
|
|
159
241
|
return [
|
|
160
242
|
`The PI WEB checkout this deployment runs is bind-mounted at \`${DEV_WORKSPACE_MOUNT}\`.${hostPath}`,
|
|
161
|
-
...(nested.length === 0
|
|
243
|
+
...(nested.length === 0
|
|
244
|
+
? []
|
|
245
|
+
: [`Inside it, ${nested.join(", ")} ${nested.length === 1 ? "is a separate container-managed mount" : "are separate container-managed mounts"}, not the host directory of the same path.`]),
|
|
246
|
+
...(sharedDependencies && hostDependencies !== undefined
|
|
247
|
+
? [`Inside this container, \`${hostDependencies}\` resolves to the same dependency mount as \`${DEV_WORKSPACE_MOUNT}/node_modules\`. Changes under either container path are visible at the other.`]
|
|
248
|
+
: []),
|
|
162
249
|
];
|
|
163
250
|
}
|
|
164
251
|
function isHostPathMount(mount) {
|
|
@@ -171,6 +258,7 @@ function isHostPathMount(mount) {
|
|
|
171
258
|
function isWithin(target, root) {
|
|
172
259
|
return target.startsWith(root.endsWith("/") ? root : `${root}/`);
|
|
173
260
|
}
|
|
261
|
+
/** Mount fields escape space, tab, newline, and backslash as octal sequences. */
|
|
174
262
|
function unescapeMountField(value) {
|
|
175
263
|
return value.replace(/\\(040|011|012|134)/g, (_match, code) => String.fromCharCode(Number.parseInt(code, 8)));
|
|
176
264
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dockerEnvironmentFacts.js","sourceRoot":"","sources":["../../../src/server/sessions/dockerEnvironmentFacts.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"dockerEnvironmentFacts.js","sourceRoot":"","sources":["../../../src/server/sessions/dockerEnvironmentFacts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { isKnownThinkingLevel } from "../../shared/thinkingLevels.js";
|
|
2
|
+
import { requireSessionUiMetadata } from "./sessionMetadata.js";
|
|
3
|
+
import { requireInitialSessionName } from "./sessionNameGenerator.js";
|
|
4
|
+
/** In-process extension protocol. The synchronous receipt avoids timeout/retry ambiguity. */
|
|
5
|
+
export const SESSION_DISPATCH_CHANNEL = "pi-web:session-dispatch:v1";
|
|
6
|
+
/** Pi owns these registrations and replaces them on reload; no global bus or resources. */
|
|
7
|
+
export function createExtensionSessionDispatch(cwd, deps) {
|
|
8
|
+
return (pi) => {
|
|
9
|
+
let context;
|
|
10
|
+
pi.on("session_start", (_event, ctx) => { context = ctx; });
|
|
11
|
+
pi.on("session_shutdown", () => { context = undefined; });
|
|
12
|
+
pi.events.on(SESSION_DISPATCH_CHANNEL, (request) => {
|
|
13
|
+
if (!isRecord(request))
|
|
14
|
+
return;
|
|
15
|
+
const accept = request["accept"];
|
|
16
|
+
if (typeof accept !== "function")
|
|
17
|
+
return;
|
|
18
|
+
// Receipt is synchronous, while validation/spawn failures travel in the
|
|
19
|
+
// accepted promise rather than disappearing into Pi's fire-and-forget bus.
|
|
20
|
+
const result = (async () => {
|
|
21
|
+
if (context === undefined)
|
|
22
|
+
throw new Error("Session dispatch requires an active Pi session");
|
|
23
|
+
if (!deps.isEnabled() || deps.spawn === undefined)
|
|
24
|
+
throw new Error("Session dispatch is disabled for this session");
|
|
25
|
+
const invocation = parseInvocation(request["input"], cwd, context);
|
|
26
|
+
return deps.spawn(invocation);
|
|
27
|
+
})();
|
|
28
|
+
Reflect.apply(accept, undefined, [result]);
|
|
29
|
+
});
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
function parseInvocation(value, cwd, ctx) {
|
|
33
|
+
if (!isRecord(value))
|
|
34
|
+
throw new Error("Session dispatch input must be an object");
|
|
35
|
+
const allowed = new Set(["prompt", "cwd", "name", "metadata", "model", "thinkingLevel"]);
|
|
36
|
+
for (const key of Reflect.ownKeys(value)) {
|
|
37
|
+
if (typeof key !== "string" || !allowed.has(key))
|
|
38
|
+
throw new Error(`Unsupported session dispatch field: ${String(key)}`);
|
|
39
|
+
}
|
|
40
|
+
const prompt = requiredString(value["prompt"], "prompt", 64 * 1024);
|
|
41
|
+
if (Buffer.byteLength(prompt, "utf8") > 64 * 1024)
|
|
42
|
+
throw new Error("Session dispatch prompt exceeds 65536 UTF-8 bytes");
|
|
43
|
+
const targetCwd = optionalString(value["cwd"], "cwd", 4096);
|
|
44
|
+
const name = value["name"] === undefined ? undefined : requireInitialSessionName(value["name"]);
|
|
45
|
+
const modelSpec = optionalString(value["model"], "model", 512);
|
|
46
|
+
const thinkingLevel = value["thinkingLevel"];
|
|
47
|
+
if (thinkingLevel !== undefined && (typeof thinkingLevel !== "string" || !isKnownThinkingLevel(thinkingLevel))) {
|
|
48
|
+
throw new Error("Unknown session dispatch thinking level");
|
|
49
|
+
}
|
|
50
|
+
const metadata = value["metadata"] === undefined ? undefined : requireSessionUiMetadata(value["metadata"]);
|
|
51
|
+
const thinking = thinkingLevel ?? ctx.thinkingLevel;
|
|
52
|
+
return {
|
|
53
|
+
spawningCwd: cwd,
|
|
54
|
+
spawningSessionId: ctx.sessionManager.getSessionId(),
|
|
55
|
+
prompt,
|
|
56
|
+
cwd: targetCwd,
|
|
57
|
+
...(name === undefined ? {} : { name }),
|
|
58
|
+
...(metadata === undefined ? {} : { metadata }),
|
|
59
|
+
...(ctx.model === undefined ? {} : { model: ctx.model }),
|
|
60
|
+
...(modelSpec === undefined ? {} : { modelSpec }),
|
|
61
|
+
...(thinking === undefined ? {} : { thinkingLevel: thinking }),
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
function requiredString(value, label, maxLength) {
|
|
65
|
+
if (typeof value !== "string" || value.trim() === "" || value.length > maxLength) {
|
|
66
|
+
throw new Error(`Session dispatch ${label} must be non-empty and at most ${String(maxLength)} characters`);
|
|
67
|
+
}
|
|
68
|
+
return value;
|
|
69
|
+
}
|
|
70
|
+
function optionalString(value, label, maxLength) {
|
|
71
|
+
return value === undefined ? undefined : requiredString(value, label, maxLength);
|
|
72
|
+
}
|
|
73
|
+
function isRecord(value) {
|
|
74
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=extensionSessionDispatch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extensionSessionDispatch.js","sourceRoot":"","sources":["../../../src/server/sessions/extensionSessionDispatch.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAGtE,6FAA6F;AAC7F,MAAM,CAAC,MAAM,wBAAwB,GAAG,4BAA4B,CAAC;AAOrE,2FAA2F;AAC3F,MAAM,UAAU,8BAA8B,CAAC,GAAW,EAAE,IAA0B;IACpF,OAAO,CAAC,EAAE,EAAE,EAAE;QACZ,IAAI,OAAqC,CAAC;QAC1C,EAAE,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,GAAG,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,EAAE,CAAC,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1D,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,wBAAwB,EAAE,CAAC,OAAO,EAAE,EAAE;YACjD,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAAE,OAAO;YAC/B,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;YACjC,IAAI,OAAO,MAAM,KAAK,UAAU;gBAAE,OAAO;YACzC,wEAAwE;YACxE,2EAA2E;YAC3E,MAAM,MAAM,GAAG,CAAC,KAAK,IAAI,EAAE;gBACzB,IAAI,OAAO,KAAK,SAAS;oBAAE,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;gBAC7F,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;oBAAE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;gBACpH,MAAM,UAAU,GAAG,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;gBACnE,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAChC,CAAC,CAAC,EAAE,CAAC;YACL,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,KAAc,EAAE,GAAW,EAAE,GAAqB;IACzE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAClF,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC;IACzF,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC1H,CAAC;IACD,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;IACpE,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACxH,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAC5D,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,yBAAyB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAChG,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IAC/D,MAAM,aAAa,GAAG,KAAK,CAAC,eAAe,CAAC,CAAC;IAC7C,IAAI,aAAa,KAAK,SAAS,IAAI,CAAC,OAAO,aAAa,KAAK,QAAQ,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC;QAC/G,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;IACD,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,wBAAwB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;IAC3G,MAAM,QAAQ,GAAG,aAAa,IAAI,GAAG,CAAC,aAAa,CAAC;IACpD,OAAO;QACL,WAAW,EAAE,GAAG;QAChB,iBAAiB,EAAE,GAAG,CAAC,cAAc,CAAC,YAAY,EAAE;QACpD,MAAM;QACN,GAAG,EAAE,SAAS;QACd,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;QACvC,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC;QAC/C,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC;QACxD,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC;QACjD,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC;KAC/D,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,KAAc,EAAE,KAAa,EAAE,SAAiB;IACtE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC;QACjF,MAAM,IAAI,KAAK,CAAC,oBAAoB,KAAK,kCAAkC,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IAC7G,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,cAAc,CAAC,KAAc,EAAE,KAAa,EAAE,SAAiB;IACtE,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;AACnF,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"}
|
|
@@ -2,7 +2,7 @@ import { mkdtemp, rm } from "node:fs/promises";
|
|
|
2
2
|
import { tmpdir } from "node:os";
|
|
3
3
|
import { join } from "node:path";
|
|
4
4
|
import { isDeepStrictEqual } from "node:util";
|
|
5
|
-
import { createAgentSessionServices, } from "
|
|
5
|
+
import { createAgentSessionServices, } from "../../piSdk.js";
|
|
6
6
|
const LOG_CONTEXT = "global-provider-bootstrap";
|
|
7
7
|
const MODELS_FIELD = "models";
|
|
8
8
|
/**
|
|
@@ -44,6 +44,46 @@ function isModelsOnlyProviderUpdate(baseline, incoming) {
|
|
|
44
44
|
return false;
|
|
45
45
|
return incoming.models !== undefined && !isDeepStrictEqual(incoming.models, baseline.models);
|
|
46
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* Diagnostic comparison only: fresh closures are not evidence of changed code.
|
|
49
|
+
* The acceptance gate above still uses strict equality and remains unchanged.
|
|
50
|
+
* Compare plain config objects recursively so a real OAuth setting change is
|
|
51
|
+
* not hidden just because that object also contains callbacks.
|
|
52
|
+
*/
|
|
53
|
+
function matchesIgnoringFunctionReferences(baseline, incoming, compared = new WeakMap()) {
|
|
54
|
+
if (isDeepStrictEqual(baseline, incoming))
|
|
55
|
+
return true;
|
|
56
|
+
if (typeof baseline === "function" && typeof incoming === "function")
|
|
57
|
+
return true;
|
|
58
|
+
if (typeof baseline !== "object" || baseline === null || typeof incoming !== "object" || incoming === null)
|
|
59
|
+
return false;
|
|
60
|
+
const prototype = Object.getPrototypeOf(baseline);
|
|
61
|
+
if (prototype !== Object.getPrototypeOf(incoming) || (prototype !== Object.prototype && prototype !== null))
|
|
62
|
+
return false;
|
|
63
|
+
const paired = compared.get(baseline) ?? new WeakSet();
|
|
64
|
+
if (paired.has(incoming))
|
|
65
|
+
return true;
|
|
66
|
+
paired.add(incoming);
|
|
67
|
+
compared.set(baseline, paired);
|
|
68
|
+
const baselineFields = new Map(Object.entries(baseline));
|
|
69
|
+
const incomingFields = Object.entries(incoming);
|
|
70
|
+
return baselineFields.size === incomingFields.length && incomingFields.every(([field, value]) => baselineFields.has(field) && matchesIgnoringFunctionReferences(baselineFields.get(field), value, compared));
|
|
71
|
+
}
|
|
72
|
+
function ignoredConfigReason(baseline, incoming) {
|
|
73
|
+
const baselineFields = new Map(Object.entries(baseline));
|
|
74
|
+
const changedFields = Object.entries(incoming).filter(([field, value]) => field !== MODELS_FIELD && value !== undefined && !isDeepStrictEqual(value, baselineFields.get(field)));
|
|
75
|
+
if (changedFields.length === 0)
|
|
76
|
+
return undefined; // Unchanged replay: no diagnostic needed.
|
|
77
|
+
return changedFields.every(([field, value]) => matchesIgnoringFunctionReferences(baselineFields.get(field), value))
|
|
78
|
+
? "implementation-unverified"
|
|
79
|
+
: "configuration-change";
|
|
80
|
+
}
|
|
81
|
+
const PROVIDER_RECOVERY_GUIDANCE = "The startup provider, if any, remains in use. "
|
|
82
|
+
+ "Provider registrations are shared across sessions and fixed at daemon startup. "
|
|
83
|
+
+ "For a global extension, register providers in its factory in the active agent directory, then manually restart "
|
|
84
|
+
+ "the session daemon when safe; this interrupts active sessions and terminals. Project-only or session_start-only "
|
|
85
|
+
+ "registrations are not enabled by a restart. /reload and web/API restarts do not rebuild the provider baseline. "
|
|
86
|
+
+ "See https://pi-web.dev/faq#provider-extension-no-effect.";
|
|
47
87
|
async function loadGlobalExtensionServices(runtime, agentDir) {
|
|
48
88
|
const scratchCwd = await mkdtemp(join(tmpdir(), "pi-web-global-ext-"));
|
|
49
89
|
try {
|
|
@@ -69,38 +109,60 @@ function logBootstrapDiagnostic(logger, diagnostic) {
|
|
|
69
109
|
logger.info(details, "global extension provider bootstrap diagnostic");
|
|
70
110
|
}
|
|
71
111
|
}
|
|
112
|
+
function rejectVirtualModelMutations(runtime) {
|
|
113
|
+
const reject = (operation) => {
|
|
114
|
+
throw new Error(`PI WEB does not support ${operation}(): virtual-model routers capture session-bound context, `
|
|
115
|
+
+ "but the model runtime is shared across sessions. Disable this extension's virtual-model feature "
|
|
116
|
+
+ "and select a physical model instead.");
|
|
117
|
+
};
|
|
118
|
+
const rejectedMethods = {
|
|
119
|
+
registerVirtualModel: () => reject("registerVirtualModel"),
|
|
120
|
+
unregisterVirtualModel: () => reject("unregisterVirtualModel"),
|
|
121
|
+
};
|
|
122
|
+
Object.assign(runtime, rejectedMethods);
|
|
123
|
+
}
|
|
72
124
|
function freezeProviderMutations(runtime, logger, configBaseline) {
|
|
73
125
|
const originalMethods = {
|
|
74
126
|
registerNativeProvider: runtime.registerNativeProvider.bind(runtime),
|
|
75
127
|
registerProvider: runtime.registerProvider.bind(runtime),
|
|
76
128
|
unregisterProvider: runtime.unregisterProvider.bind(runtime),
|
|
77
129
|
};
|
|
78
|
-
const
|
|
79
|
-
|
|
80
|
-
registerProvider: new Set(),
|
|
81
|
-
unregisterProvider: new Set(),
|
|
82
|
-
};
|
|
130
|
+
const startupProviderIds = new Set(runtime.getRegisteredProviderIds());
|
|
131
|
+
const loggedMutations = new Set();
|
|
83
132
|
// Logging must never turn a provider mutation into an extension failure.
|
|
84
|
-
const logQuietly = (details, message) => {
|
|
133
|
+
const logQuietly = (details, message, level = "info") => {
|
|
85
134
|
try {
|
|
86
|
-
logger
|
|
135
|
+
logger[level](details, message);
|
|
87
136
|
}
|
|
88
137
|
catch {
|
|
89
138
|
// Intentionally ignored; the mutation decision already stands.
|
|
90
139
|
}
|
|
91
140
|
};
|
|
92
|
-
const logIgnoredMutation = (operation, providerId) => {
|
|
93
|
-
|
|
94
|
-
|
|
141
|
+
const logIgnoredMutation = (operation, providerId, reason) => {
|
|
142
|
+
// An ordinary callback replay must not suppress a later actionable warning.
|
|
143
|
+
const key = JSON.stringify([operation, providerId, reason]);
|
|
144
|
+
if (loggedMutations.has(key))
|
|
95
145
|
return;
|
|
96
|
-
|
|
97
|
-
|
|
146
|
+
loggedMutations.add(key);
|
|
147
|
+
const level = reason === "not-in-startup-baseline" || reason === "configuration-change" ? "warn" : "info";
|
|
148
|
+
logQuietly({
|
|
149
|
+
context: LOG_CONTEXT,
|
|
150
|
+
code: "PROVIDER_MUTATION_IGNORED",
|
|
151
|
+
operation,
|
|
152
|
+
providerId,
|
|
153
|
+
reason,
|
|
154
|
+
guidance: PROVIDER_RECOVERY_GUIDANCE,
|
|
155
|
+
}, "ignored provider mutation after global bootstrap", level);
|
|
98
156
|
};
|
|
99
157
|
const frozenMethods = {
|
|
100
158
|
registerProvider(providerId, config) {
|
|
101
159
|
const baseline = configBaseline.get(providerId);
|
|
102
160
|
if (!baseline || !isModelsOnlyProviderUpdate(baseline, config)) {
|
|
103
|
-
|
|
161
|
+
const reason = baseline === undefined
|
|
162
|
+
? (startupProviderIds.has(providerId) ? "configuration-change" : "not-in-startup-baseline")
|
|
163
|
+
: ignoredConfigReason(baseline, config);
|
|
164
|
+
if (reason !== undefined)
|
|
165
|
+
logIgnoredMutation("registerProvider", providerId, reason);
|
|
104
166
|
return;
|
|
105
167
|
}
|
|
106
168
|
// Pi validates the registration and ends in a fire-and-forget local
|
|
@@ -118,10 +180,13 @@ function freezeProviderMutations(runtime, logger, configBaseline) {
|
|
|
118
180
|
}, "applied models-only provider update after global bootstrap");
|
|
119
181
|
},
|
|
120
182
|
registerNativeProvider(provider) {
|
|
121
|
-
|
|
183
|
+
const reason = configBaseline.has(provider.id)
|
|
184
|
+
? "configuration-change"
|
|
185
|
+
: startupProviderIds.has(provider.id) ? "native-registration-frozen" : "not-in-startup-baseline";
|
|
186
|
+
logIgnoredMutation("registerNativeProvider", provider.id, reason);
|
|
122
187
|
},
|
|
123
188
|
unregisterProvider(providerId) {
|
|
124
|
-
logIgnoredMutation("unregisterProvider", providerId);
|
|
189
|
+
logIgnoredMutation("unregisterProvider", providerId, "unregistration-frozen");
|
|
125
190
|
},
|
|
126
191
|
};
|
|
127
192
|
try {
|
|
@@ -140,11 +205,14 @@ function freezeProviderMutations(runtime, logger, configBaseline) {
|
|
|
140
205
|
* contamination guard, not a sandbox for otherwise trusted extensions.
|
|
141
206
|
*
|
|
142
207
|
* The temporary cwd is guaranteed to be empty, so Pi discovers agent-dir
|
|
143
|
-
* extensions without loading project resources.
|
|
144
|
-
*
|
|
208
|
+
* extensions without loading project resources. Virtual-model mutations are
|
|
209
|
+
* rejected before even that load: their session-bound routers cannot be shared.
|
|
210
|
+
* Documented initialization-time config and native registrations reach Pi's
|
|
145
211
|
* public service factory. Pi exposes no provider-freeze hook, so the daemon
|
|
146
212
|
* deliberately shadows the three public instance mutation methods afterward;
|
|
147
|
-
* every
|
|
213
|
+
* every later mutation is then a no-op, with daemon-log-only diagnostics.
|
|
214
|
+
* Unchanged config replays are silent; fresh closures and native replays are
|
|
215
|
+
* informational because their implementation cannot be compared reliably.
|
|
148
216
|
*
|
|
149
217
|
* The one exception is a known config provider refreshing its own model
|
|
150
218
|
* catalog: a `registerProvider` call whose config matches the recorded
|
|
@@ -154,6 +222,7 @@ function freezeProviderMutations(runtime, logger, configBaseline) {
|
|
|
154
222
|
* config — as does unregistration.
|
|
155
223
|
*/
|
|
156
224
|
export async function bootstrapAndFreezeGlobalExtensionProviders(runtime, agentDir, logger) {
|
|
225
|
+
rejectVirtualModelMutations(runtime);
|
|
157
226
|
const services = await loadGlobalExtensionServices(runtime, agentDir);
|
|
158
227
|
const providerIds = Object.freeze([...runtime.getRegisteredProviderIds()].sort());
|
|
159
228
|
freezeProviderMutations(runtime, logger, captureProviderConfigBaseline(runtime));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"globalProviderPolicy.js","sourceRoot":"","sources":["../../../src/server/sessions/globalProviderPolicy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EACL,0BAA0B,GAI3B,MAAM,
|
|
1
|
+
{"version":3,"file":"globalProviderPolicy.js","sourceRoot":"","sources":["../../../src/server/sessions/globalProviderPolicy.ts"],"names":[],"mappings":"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"}
|