@chainingintention/pi-web-cn 1.202610.1 → 1.202610.3
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 +60 -106
- package/dist/.plugins-ready +1 -0
- package/dist/cli.js +161 -45
- package/dist/cli.js.map +1 -1
- package/dist/client/assets/index-CFhaGb5m.js +4357 -0
- package/dist/client/assets/vendor-editor-core-YWog6mAR.js +10 -0
- package/dist/client/assets/vendor-editor-languages-DOCw3vc9.js +28 -0
- package/dist/client/index.html +5 -5
- package/dist/config.js +30 -6
- package/dist/config.js.map +1 -1
- package/dist/docker/piWebDockerCommandPlan.js +13 -4
- package/dist/docker/piWebDockerCommandPlan.js.map +1 -1
- package/dist/nativeServices/installedServiceDefinitions.js +23 -10
- package/dist/nativeServices/installedServiceDefinitions.js.map +1 -1
- package/dist/nativeServices/serviceAction.js +78 -20
- package/dist/nativeServices/serviceAction.js.map +1 -1
- package/dist/nativeServices/serviceDoctor.js +339 -67
- 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 +146 -0
- package/dist/pi-packages/captains-log/dist/browser/markdown.js +67 -0
- package/dist/pi-packages/captains-log/dist/browser/panel.js +151 -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/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/pi-web-plugin.js +9 -9
- package/dist/pi-packages/relays/prompts/relay.md +1 -1
- package/dist/pi-packages/relays/relaysPanelElement.js +8 -8
- package/dist/pi-packages/relays/skills/relay-runner/SKILL.md +21 -13
- 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 +456 -0
- package/dist/pi-web-plugins/files/package.json +15 -0
- package/dist/pi-web-plugins/git/browser/git-panel.js +55 -32
- package/dist/pi-web-plugins/git/browser/pi-web-plugin.js +2 -2
- package/dist/pi-web-plugins/git/git-backend.js +19 -26
- package/dist/pi-web-plugins/git/gitStatusCache.js +48 -0
- package/dist/pi-web-plugins/git/package.json +1 -0
- package/dist/pi-web-plugins/git/server-plugin.js +11 -10
- package/dist/pi-web-plugins/info/infoInternals.js +4 -1
- package/dist/pi-web-plugins/info/package.json +1 -1
- package/dist/pi-web-plugins/info/pi-web-plugin.js +8 -8
- package/dist/pi-web-plugins/mermaid/browser/mermaid-engine.js +3590 -0
- package/dist/pi-web-plugins/mermaid/browser/pi-web-plugin.js +6 -0
- package/dist/pi-web-plugins/mermaid/package.json +13 -0
- package/dist/pi-web-plugins/terminal/browser/pi-web-plugin.js +210 -0
- package/dist/pi-web-plugins/terminal/package.json +16 -0
- package/dist/pi-web-plugins/terminal/server-plugin.js +365 -0
- package/dist/pi-web-plugins/terminal/terminalService.js +435 -0
- package/dist/pi-web-plugins/updates/package.json +1 -1
- package/dist/pi-web-plugins/updates/pi-web-plugin.js +69 -68
- package/dist/pi-web-plugins/workspace-tasks/package.json +1 -1
- package/dist/pi-web-plugins/workspace-tasks/pi-web-plugin.js +3 -3
- package/dist/piWebVersionReport.js +47 -24
- package/dist/piWebVersionReport.js.map +1 -1
- package/dist/plugin-api.d.ts +260 -25
- package/dist/plugin-api.js +1 -0
- package/dist/pluginRecoveryCli.js +3 -2
- package/dist/pluginRecoveryCli.js.map +1 -1
- package/dist/server/activity/workspaceActivityService.js +5 -5
- package/dist/server/activity/workspaceActivityService.js.map +1 -1
- package/dist/server/app.js +71 -44
- package/dist/server/app.js.map +1 -1
- package/dist/server/audit/managementAuditStore.js +1 -1
- package/dist/server/browserMessageProjection.js +0 -2
- package/dist/server/browserMessageProjection.js.map +1 -1
- package/dist/server/configRoutes.js +1 -2
- package/dist/server/configRoutes.js.map +1 -1
- package/dist/server/knownPiPackages.js +12 -0
- package/dist/server/knownPiPackages.js.map +1 -0
- package/dist/server/machines/machineClient.js +2 -2
- package/dist/server/machines/machineClient.js.map +1 -1
- package/dist/server/machines/machinePluginProxyRoutes.js +120 -21
- package/dist/server/machines/machinePluginProxyRoutes.js.map +1 -1
- package/dist/server/machines/machineProxyRoutes.js +80 -22
- package/dist/server/machines/machineProxyRoutes.js.map +1 -1
- package/dist/server/machines/machineService.js +22 -0
- package/dist/server/machines/machineService.js.map +1 -1
- package/dist/server/managementEmbed.js +1 -1
- package/dist/server/managementEmbed.js.map +1 -1
- package/dist/server/managementPrivileges.js +7 -1
- package/dist/server/managementPrivileges.js.map +1 -1
- package/dist/server/managementTerminalProxyRoutes.js +124 -0
- package/dist/server/managementTerminalProxyRoutes.js.map +1 -0
- package/dist/server/normalAuth.js +5 -1
- package/dist/server/normalAuth.js.map +1 -1
- package/dist/server/notices/serverNoticeStore.js +50 -6
- package/dist/server/notices/serverNoticeStore.js.map +1 -1
- package/dist/server/piPackageService.js +5 -5
- package/dist/server/piPackageService.js.map +1 -1
- package/dist/server/piWebPluginCatalog.js +211 -34
- 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 +176 -291
- package/dist/server/piWebPluginService.js.map +1 -1
- package/dist/server/piWebStatus.js +45 -55
- 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 +63 -0
- package/dist/server/plugins/pluginBackendChannelProxyRoutes.js.map +1 -0
- package/dist/server/plugins/pluginBackendProxyRoutes.js +7 -4
- package/dist/server/plugins/pluginBackendProxyRoutes.js.map +1 -1
- package/dist/server/plugins/pluginBackendRegistry.js +773 -0
- package/dist/server/plugins/pluginBackendRegistry.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 +1049 -107
- 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 +84 -0
- package/dist/server/projects/projectLifecycleService.js.map +1 -0
- package/dist/server/projects/projectService.js +2 -0
- package/dist/server/projects/projectService.js.map +1 -1
- package/dist/server/realtime/sessionEventHub.js +35 -41
- package/dist/server/realtime/sessionEventHub.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/pluginBackendChannelRoutes.js +397 -0
- package/dist/server/sessiond/pluginBackendChannelRoutes.js.map +1 -0
- package/dist/server/sessiond/pluginBackendRoutes.js +19 -9
- package/dist/server/sessiond/pluginBackendRoutes.js.map +1 -1
- package/dist/server/sessiond/projectMutationRoutes.js +38 -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 +47 -15
- package/dist/server/sessiond/sessionProxyRoutes.js.map +1 -1
- package/dist/server/sessiond/sessionServiceDependencies.js +4 -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/workspaceRemovalRoutes.js +1 -1
- package/dist/server/sessiond/workspaceRemovalRoutes.js.map +1 -1
- package/dist/server/sessiond.js +226 -56
- package/dist/server/sessiond.js.map +1 -1
- package/dist/server/sessions/askUserTool.js +0 -3
- package/dist/server/sessions/askUserTool.js.map +1 -1
- package/dist/server/sessions/attachmentService.js +0 -1
- package/dist/server/sessions/attachmentService.js.map +1 -1
- package/dist/server/sessions/authService.js +8 -1
- package/dist/server/sessions/authService.js.map +1 -1
- package/dist/server/sessions/builtinCommands.js +2 -2
- package/dist/server/sessions/builtinCommands.js.map +1 -1
- package/dist/server/sessions/clientSessionPreview.js +14 -0
- package/dist/server/sessions/clientSessionPreview.js.map +1 -0
- package/dist/server/sessions/dockerEnvironmentFacts.js +82 -9
- package/dist/server/sessions/dockerEnvironmentFacts.js.map +1 -1
- package/dist/server/sessions/managementAgentTools.js +11 -6
- package/dist/server/sessions/managementAgentTools.js.map +1 -1
- package/dist/server/sessions/managementPermissionSystem.js +16 -4
- package/dist/server/sessions/managementPermissionSystem.js.map +1 -1
- 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 +2 -5
- package/dist/server/sessions/oauthLoginFlowService.js.map +1 -1
- package/dist/server/sessions/pendingAskStore.js +0 -3
- package/dist/server/sessions/pendingAskStore.js.map +1 -1
- package/dist/server/sessions/piSessionEventConnections.js +65 -0
- package/dist/server/sessions/piSessionEventConnections.js.map +1 -0
- package/dist/server/sessions/piSessionManagerGateway.js +56 -3
- package/dist/server/sessions/piSessionManagerGateway.js.map +1 -1
- package/dist/server/sessions/piSessionService.js +774 -448
- package/dist/server/sessions/piSessionService.js.map +1 -1
- package/dist/server/sessions/projectAuthService.js +29 -2
- package/dist/server/sessions/projectAuthService.js.map +1 -1
- package/dist/server/sessions/projectSettingsScope.js +12 -4
- 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/sessionActivityMarker.js +105 -0
- package/dist/server/sessions/sessionActivityMarker.js.map +1 -0
- package/dist/server/sessions/sessionArchiveMapping.js +2 -8
- package/dist/server/sessions/sessionArchiveMapping.js.map +1 -1
- package/dist/server/sessions/sessionCommandService.js +12 -10
- 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/sessionModelScope.js +42 -5
- package/dist/server/sessions/sessionModelScope.js.map +1 -1
- package/dist/server/sessions/sessionNameGenerator.js +6 -6
- package/dist/server/sessions/sessionNameGenerator.js.map +1 -1
- package/dist/server/sessions/sessionRoutes.js +63 -15
- package/dist/server/sessions/sessionRoutes.js.map +1 -1
- package/dist/server/sessions/sessionTreeProjection.js +29 -29
- package/dist/server/sessions/sessionTreeProjection.js.map +1 -1
- package/dist/server/sessions/sessionUiEvents.js +6 -7
- package/dist/server/sessions/sessionUiEvents.js.map +1 -1
- package/dist/server/sessions/sessionUnreadStore.js +26 -1
- package/dist/server/sessions/sessionUnreadStore.js.map +1 -1
- package/dist/server/sessions/spawnSessionTool.js +3 -3
- package/dist/server/sessions/spawnSessionTool.js.map +1 -1
- package/dist/server/sessions/spawnSubsessionTool.js +5 -5
- package/dist/server/sessions/spawnSubsessionTool.js.map +1 -1
- package/dist/server/sessions/spawnTargetResolver.js +1 -1
- package/dist/server/sessions/transcriptMessages.js +54 -0
- package/dist/server/sessions/transcriptMessages.js.map +1 -0
- package/dist/server/status/machineStatusService.js +3 -1
- package/dist/server/status/machineStatusService.js.map +1 -1
- package/dist/server/terminals/{terminalService.js → managementCommandRunService.js} +79 -107
- 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 +339 -0
- package/dist/server/webSocketBridge.js.map +1 -1
- package/dist/server/workbench/gatewayIntegration.js +4 -1
- package/dist/server/workbench/gatewayIntegration.js.map +1 -1
- package/dist/server/workspaceExplorerRoutes.js +13 -12
- package/dist/server/workspaceExplorerRoutes.js.map +1 -1
- package/dist/server/workspaces/fileContentService.js +9 -7
- package/dist/server/workspaces/fileContentService.js.map +1 -1
- package/dist/server/workspaces/fileOperationService.js +4 -3
- package/dist/server/workspaces/fileOperationService.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 +36 -12
- 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/workspaceDeletionRoutes.js +5 -57
- package/dist/server/workspaces/workspaceDeletionRoutes.js.map +1 -1
- package/dist/server/workspaces/workspaceProviderRegistry.js +75 -24
- package/dist/server/workspaces/workspaceProviderRegistry.js.map +1 -1
- package/dist/server/workspaces/workspaceRemovalService.js +25 -3
- package/dist/server/workspaces/workspaceRemovalService.js.map +1 -1
- package/dist/server-plugin-api.d.ts +274 -44
- package/dist/server-plugin-api.js +319 -2
- package/dist/server-plugin-api.js.map +1 -1
- package/dist/serverPluginRecovery.js +4 -0
- 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 +29 -8
- package/dist/sessiond/sessionDaemonClient.js.map +1 -1
- 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 +7 -2
- package/dist/shared/apiTypes.js.map +1 -1
- package/dist/shared/capabilities.js +5 -0
- package/dist/shared/capabilities.js.map +1 -1
- package/dist/shared/federatedRoutes.js +49 -9
- package/dist/shared/federatedRoutes.js.map +1 -1
- package/dist/shared/machinePluginIds.js +30 -7
- package/dist/shared/machinePluginIds.js.map +1 -1
- package/dist/shared/machineStatus.js +35 -1
- package/dist/shared/machineStatus.js.map +1 -1
- package/dist/shared/piWebStatusParsing.js +29 -0
- package/dist/shared/piWebStatusParsing.js.map +1 -1
- package/dist/shared/pluginApiTypes.d.ts +24 -9
- package/dist/shared/pluginApiTypes.js +2 -0
- package/dist/shared/pluginApiTypes.js.map +1 -0
- package/dist/shared/pluginBackendProtocol.js +163 -2
- package/dist/shared/pluginBackendProtocol.js.map +1 -1
- 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 +41 -0
- package/dist/shared/sessionDefaults.js.map +1 -0
- package/dist/shared/workspaceFiles.js.map +1 -1
- package/docs/config.md +270 -323
- package/docs/plugins.md +171 -956
- 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/package.json +22 -13
- package/skills/README.md +27 -2
- package/skills/relay-runner/SKILL.md +21 -13
- package/dist/client/assets/CodeViewer-CZHnKRwQ.js +0 -4
- package/dist/client/assets/TerminalPanel-B_EaRPHY.js +0 -187
- package/dist/client/assets/index-Bv1v-Jz7.js +0 -4717
- 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/server/git/gitService.js +0 -316
- 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/terminalProxyRoutes.js +0 -181
- 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
|
@@ -1,2 +1,319 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/** Exact workspaces v1 capability supplied separately for each declaring server plugin. */
|
|
2
|
+
export const PI_WEB_HOST_WORKSPACES_CAPABILITY = Object.freeze({
|
|
3
|
+
pluginId: "pi-web.host",
|
|
4
|
+
id: "workspaces",
|
|
5
|
+
version: 1,
|
|
6
|
+
parse: snapshotPiWebHostWorkspacesV1,
|
|
7
|
+
});
|
|
8
|
+
/** Exact PI sessions v1 capability supplied separately for each declaring server plugin. */
|
|
9
|
+
export const PI_WEB_HOST_PI_SESSIONS_CAPABILITY = Object.freeze({
|
|
10
|
+
pluginId: "pi-web.host",
|
|
11
|
+
id: "pi-sessions",
|
|
12
|
+
version: 1,
|
|
13
|
+
parse: snapshotPiWebHostPiSessionsV1,
|
|
14
|
+
});
|
|
15
|
+
/** Session-local package messaging, not an agent-control or SDK capability. */
|
|
16
|
+
export const PI_WEB_HOST_PI_SESSION_EVENTS_CAPABILITY = Object.freeze({
|
|
17
|
+
pluginId: "pi-web.host",
|
|
18
|
+
id: "pi-session-events",
|
|
19
|
+
version: 1,
|
|
20
|
+
parse: snapshotPiWebHostPiSessionEventsV1,
|
|
21
|
+
});
|
|
22
|
+
function snapshotPiWebHostWorkspacesV1(value) {
|
|
23
|
+
if (typeof value !== "object" || value === null)
|
|
24
|
+
throw invalidPiWebHostWorkspaces();
|
|
25
|
+
const version = Reflect.get(value, "version");
|
|
26
|
+
const resolve = Reflect.get(value, "resolve");
|
|
27
|
+
if (version !== 1 || typeof resolve !== "function")
|
|
28
|
+
throw invalidPiWebHostWorkspaces();
|
|
29
|
+
return Object.freeze({
|
|
30
|
+
version: 1,
|
|
31
|
+
resolve: async (selection) => {
|
|
32
|
+
const requested = snapshotPiWebHostWorkspaceSelection(selection);
|
|
33
|
+
const authority = await Reflect.apply(resolve, value, [requested]);
|
|
34
|
+
return snapshotPiWebHostWorkspaceAuthority(authority, requested);
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
function snapshotPiWebHostPiSessionEventsV1(value) {
|
|
39
|
+
if (typeof value !== "object" || value === null)
|
|
40
|
+
throw new Error("Invalid PI session events capability");
|
|
41
|
+
const connect = Reflect.get(value, "connect");
|
|
42
|
+
if (Reflect.get(value, "version") !== 1 || typeof connect !== "function")
|
|
43
|
+
throw new Error("Invalid PI session events capability");
|
|
44
|
+
return Object.freeze({
|
|
45
|
+
version: 1,
|
|
46
|
+
connect: async (selection) => {
|
|
47
|
+
const workspace = snapshotPiWebHostWorkspaceSelection({ projectId: selection.projectId, workspaceId: selection.workspaceId });
|
|
48
|
+
const sessionId = selection.sessionId;
|
|
49
|
+
if (typeof sessionId !== "string" || sessionId.trim() === "" || sessionId.length > 512)
|
|
50
|
+
throw new Error("Invalid hosted session id");
|
|
51
|
+
const connection = await Reflect.apply(connect, value, [{ ...workspace, sessionId }]);
|
|
52
|
+
if (typeof connection !== "object" || connection === null)
|
|
53
|
+
throw new Error("Invalid PI session events connection");
|
|
54
|
+
const signal = Reflect.get(connection, "signal");
|
|
55
|
+
const on = Reflect.get(connection, "on");
|
|
56
|
+
const emit = Reflect.get(connection, "emit");
|
|
57
|
+
const close = Reflect.get(connection, "close");
|
|
58
|
+
if (!(signal instanceof AbortSignal) || typeof on !== "function" || typeof emit !== "function" || typeof close !== "function") {
|
|
59
|
+
throw new Error("Invalid PI session events connection");
|
|
60
|
+
}
|
|
61
|
+
return Object.freeze({
|
|
62
|
+
signal,
|
|
63
|
+
on: (channel, handler) => {
|
|
64
|
+
const unsubscribe = Reflect.apply(on, connection, [channel, handler]);
|
|
65
|
+
if (typeof unsubscribe !== "function")
|
|
66
|
+
throw new Error("Invalid PI event unsubscribe function");
|
|
67
|
+
return () => { Reflect.apply(unsubscribe, undefined, []); };
|
|
68
|
+
},
|
|
69
|
+
emit: (channel, data) => { Reflect.apply(emit, connection, [channel, data]); },
|
|
70
|
+
close: () => { Reflect.apply(close, connection, []); },
|
|
71
|
+
});
|
|
72
|
+
},
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
function snapshotPiWebHostPiSessionsV1(value) {
|
|
76
|
+
if (typeof value !== "object" || value === null)
|
|
77
|
+
throw invalidPiWebHostPiSessions();
|
|
78
|
+
const version = Reflect.get(value, "version");
|
|
79
|
+
const run = Reflect.get(value, "run");
|
|
80
|
+
const create = Reflect.get(value, "create");
|
|
81
|
+
if (version !== 1 || typeof run !== "function" || typeof create !== "function")
|
|
82
|
+
throw invalidPiWebHostPiSessions();
|
|
83
|
+
return Object.freeze({
|
|
84
|
+
version: 1,
|
|
85
|
+
create: async (input) => {
|
|
86
|
+
const requested = snapshotPiWebHostWorkspaceSelection(input);
|
|
87
|
+
const result = await Reflect.apply(create, value, [requested]);
|
|
88
|
+
if (!isPublicJsonObject(result))
|
|
89
|
+
throw new Error("PI WEB host PI sessions capability v1 must return a created session object");
|
|
90
|
+
const sessionId = requiredBoundedPiSessionString(Reflect.get(result, "sessionId"), "returned sessionId", 512);
|
|
91
|
+
return Object.freeze({ sessionId });
|
|
92
|
+
},
|
|
93
|
+
run: async (input) => {
|
|
94
|
+
const requested = snapshotPiWebHostPiSessionRunInput(input);
|
|
95
|
+
const result = await Reflect.apply(run, value, [requested]);
|
|
96
|
+
return snapshotPiWebHostPiSessionRun(result);
|
|
97
|
+
},
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
function snapshotPiWebHostPiSessionRunInput(value) {
|
|
101
|
+
if (!isPublicJsonObject(value))
|
|
102
|
+
throw new Error("PI WEB host PI sessions capability v1 run input must be an object");
|
|
103
|
+
const supportedKeys = new Set(["projectId", "workspaceId", "prompt"]);
|
|
104
|
+
for (const key of Reflect.ownKeys(value)) {
|
|
105
|
+
if (typeof key !== "string" || !supportedKeys.has(key)) {
|
|
106
|
+
throw new Error(`Unsupported PI WEB host PI sessions capability v1 run input field: ${String(key)}`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
if (!Object.hasOwn(value, "projectId") || !Object.hasOwn(value, "workspaceId") || !Object.hasOwn(value, "prompt")) {
|
|
110
|
+
throw new Error("PI WEB host PI sessions capability v1 run input must contain projectId, workspaceId, and prompt");
|
|
111
|
+
}
|
|
112
|
+
const projectId = requiredBoundedPiSessionString(Reflect.get(value, "projectId"), "projectId", 512);
|
|
113
|
+
const workspaceId = requiredBoundedPiSessionString(Reflect.get(value, "workspaceId"), "workspaceId", 512);
|
|
114
|
+
const prompt = requiredBoundedPiSessionUtf8String(Reflect.get(value, "prompt"), "prompt", 64 * 1024);
|
|
115
|
+
return Object.freeze({ projectId, workspaceId, prompt });
|
|
116
|
+
}
|
|
117
|
+
function snapshotPiWebHostPiSessionRun(value) {
|
|
118
|
+
if (!isPublicJsonObject(value))
|
|
119
|
+
throw new Error("PI WEB host PI sessions capability v1 must return a run object");
|
|
120
|
+
const sessionId = requiredBoundedPiSessionString(Reflect.get(value, "sessionId"), "returned sessionId", 512);
|
|
121
|
+
const completionValue = Reflect.get(value, "completion");
|
|
122
|
+
if (!isPromiseLike(completionValue)) {
|
|
123
|
+
throw new Error("PI WEB host PI sessions capability v1 run must expose completion");
|
|
124
|
+
}
|
|
125
|
+
const completion = Promise.resolve(completionValue).then(snapshotPiWebHostPiSessionRunCompletion);
|
|
126
|
+
return Object.freeze({ sessionId, completion });
|
|
127
|
+
}
|
|
128
|
+
function snapshotPiWebHostPiSessionRunCompletion(value) {
|
|
129
|
+
if (!isPublicJsonObject(value))
|
|
130
|
+
throw new Error("PI WEB host PI sessions capability v1 completion must be an object");
|
|
131
|
+
const status = Reflect.get(value, "status");
|
|
132
|
+
if (status === "completed" || status === "cancelled")
|
|
133
|
+
return Object.freeze({ status });
|
|
134
|
+
if (status !== "failed")
|
|
135
|
+
throw new Error("PI WEB host PI sessions capability v1 completion status is invalid");
|
|
136
|
+
const error = requiredBoundedPiSessionUtf8String(Reflect.get(value, "error"), "completion error", 4 * 1024);
|
|
137
|
+
return Object.freeze({ status, error });
|
|
138
|
+
}
|
|
139
|
+
function snapshotPiWebHostWorkspaceSelection(value) {
|
|
140
|
+
if (!isPublicJsonObject(value))
|
|
141
|
+
throw new Error("PI WEB host workspaces capability v1 selection must be an object");
|
|
142
|
+
const supportedKeys = new Set(["projectId", "workspaceId"]);
|
|
143
|
+
for (const key of Reflect.ownKeys(value)) {
|
|
144
|
+
if (typeof key !== "string" || !supportedKeys.has(key)) {
|
|
145
|
+
throw new Error(`Unsupported PI WEB host workspaces capability v1 selection field: ${String(key)}`);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
if (!Object.hasOwn(value, "projectId") || !Object.hasOwn(value, "workspaceId")) {
|
|
149
|
+
throw new Error("PI WEB host workspaces capability v1 selection must contain projectId and workspaceId");
|
|
150
|
+
}
|
|
151
|
+
const projectId = requiredPublicString(Reflect.get(value, "projectId"), "selection projectId");
|
|
152
|
+
const workspaceId = requiredPublicString(Reflect.get(value, "workspaceId"), "selection workspaceId");
|
|
153
|
+
return Object.freeze({ projectId, workspaceId });
|
|
154
|
+
}
|
|
155
|
+
function snapshotPiWebHostWorkspaceAuthority(value, requested) {
|
|
156
|
+
if (!isPublicJsonObject(value))
|
|
157
|
+
throw new Error("PI WEB host workspaces capability v1 must return an authority object");
|
|
158
|
+
const project = snapshotPiWebHostProject(Reflect.get(value, "project"));
|
|
159
|
+
const workspace = snapshotPiWebHostWorkspace(Reflect.get(value, "workspace"));
|
|
160
|
+
if (workspace.projectId !== project.id) {
|
|
161
|
+
throw new Error("PI WEB host workspaces capability v1 returned mismatched project and workspace scopes");
|
|
162
|
+
}
|
|
163
|
+
if (project.id !== requested.projectId || workspace.id !== requested.workspaceId) {
|
|
164
|
+
throw new Error("PI WEB host workspaces capability v1 returned authority outside the requested selection");
|
|
165
|
+
}
|
|
166
|
+
return Object.freeze({ project, workspace });
|
|
167
|
+
}
|
|
168
|
+
function snapshotPiWebHostProject(value) {
|
|
169
|
+
if (!isPublicJsonObject(value))
|
|
170
|
+
throw new Error("PI WEB host workspaces capability v1 project must be an object");
|
|
171
|
+
const id = requiredPublicString(Reflect.get(value, "id"), "project id");
|
|
172
|
+
const name = requiredPublicString(Reflect.get(value, "name"), "project name");
|
|
173
|
+
const path = requiredPublicString(Reflect.get(value, "path"), "project path");
|
|
174
|
+
return Object.freeze({ id, name, path });
|
|
175
|
+
}
|
|
176
|
+
function snapshotPiWebHostWorkspace(value) {
|
|
177
|
+
if (!isPublicJsonObject(value))
|
|
178
|
+
throw new Error("PI WEB host workspaces capability v1 workspace must be an object");
|
|
179
|
+
const id = requiredPublicString(Reflect.get(value, "id"), "workspace id");
|
|
180
|
+
const projectId = requiredPublicString(Reflect.get(value, "projectId"), "workspace projectId");
|
|
181
|
+
const path = requiredPublicString(Reflect.get(value, "path"), "workspace path");
|
|
182
|
+
const label = requiredPublicString(Reflect.get(value, "label"), "workspace label");
|
|
183
|
+
const isMain = Reflect.get(value, "isMain");
|
|
184
|
+
if (typeof isMain !== "boolean") {
|
|
185
|
+
throw new Error("PI WEB host workspaces capability v1 workspace isMain must be a boolean");
|
|
186
|
+
}
|
|
187
|
+
const providerValue = Reflect.get(value, "provider");
|
|
188
|
+
const provider = providerValue === undefined ? undefined : snapshotPiWebHostWorkspaceProvider(providerValue);
|
|
189
|
+
return Object.freeze({ id, projectId, path, label, isMain, ...(provider === undefined ? {} : { provider }) });
|
|
190
|
+
}
|
|
191
|
+
function snapshotPiWebHostWorkspaceProvider(value) {
|
|
192
|
+
if (!isPublicJsonObject(value))
|
|
193
|
+
throw new Error("PI WEB host workspaces capability v1 workspace provider must be an object");
|
|
194
|
+
const pluginId = requiredPublicString(Reflect.get(value, "pluginId"), "workspace provider pluginId");
|
|
195
|
+
const capabilitiesValue = Reflect.get(value, "capabilities");
|
|
196
|
+
if (!isPublicJsonObject(capabilitiesValue)) {
|
|
197
|
+
throw new Error("PI WEB host workspaces capability v1 workspace provider capabilities are invalid");
|
|
198
|
+
}
|
|
199
|
+
const remove = Reflect.get(capabilitiesValue, "remove");
|
|
200
|
+
if (typeof remove !== "boolean") {
|
|
201
|
+
throw new Error("PI WEB host workspaces capability v1 workspace provider capabilities are invalid");
|
|
202
|
+
}
|
|
203
|
+
const capabilities = Object.freeze({ remove });
|
|
204
|
+
const metadataValue = Reflect.get(value, "metadata");
|
|
205
|
+
const metadata = metadataValue === undefined
|
|
206
|
+
? undefined
|
|
207
|
+
: clonePublicJsonObject(metadataValue, "workspace provider metadata");
|
|
208
|
+
return Object.freeze({ pluginId, capabilities, ...(metadata === undefined ? {} : { metadata }) });
|
|
209
|
+
}
|
|
210
|
+
function clonePublicJsonObject(value, label) {
|
|
211
|
+
if (!isPublicJsonObject(value))
|
|
212
|
+
throw new Error(`PI WEB host workspaces capability v1 ${label} must be a JSON object`);
|
|
213
|
+
return clonePublicJsonRecord(value, new Set(), label);
|
|
214
|
+
}
|
|
215
|
+
function clonePublicJsonRecord(value, ancestors, label) {
|
|
216
|
+
if (ancestors.has(value))
|
|
217
|
+
throw new Error(`PI WEB host workspaces capability v1 ${label} must not contain cycles`);
|
|
218
|
+
ancestors.add(value);
|
|
219
|
+
try {
|
|
220
|
+
const output = {};
|
|
221
|
+
for (const key of Object.keys(value)) {
|
|
222
|
+
Object.defineProperty(output, key, {
|
|
223
|
+
value: clonePublicJsonValue(value[key], ancestors, label),
|
|
224
|
+
enumerable: true,
|
|
225
|
+
configurable: true,
|
|
226
|
+
writable: true,
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
return Object.freeze(output);
|
|
230
|
+
}
|
|
231
|
+
finally {
|
|
232
|
+
ancestors.delete(value);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
function clonePublicJsonValue(value, ancestors, label) {
|
|
236
|
+
if (value === null || typeof value === "string" || typeof value === "boolean")
|
|
237
|
+
return value;
|
|
238
|
+
if (typeof value === "number") {
|
|
239
|
+
if (!Number.isFinite(value))
|
|
240
|
+
throw new Error(`PI WEB host workspaces capability v1 ${label} must contain only finite JSON numbers`);
|
|
241
|
+
return value;
|
|
242
|
+
}
|
|
243
|
+
if (Array.isArray(value)) {
|
|
244
|
+
if (ancestors.has(value))
|
|
245
|
+
throw new Error(`PI WEB host workspaces capability v1 ${label} must not contain cycles`);
|
|
246
|
+
ancestors.add(value);
|
|
247
|
+
try {
|
|
248
|
+
const output = [];
|
|
249
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
250
|
+
if (!Object.hasOwn(value, index)) {
|
|
251
|
+
throw new Error(`PI WEB host workspaces capability v1 ${label} must not contain sparse arrays`);
|
|
252
|
+
}
|
|
253
|
+
output.push(clonePublicJsonValue(value[index], ancestors, label));
|
|
254
|
+
}
|
|
255
|
+
return Object.freeze(output);
|
|
256
|
+
}
|
|
257
|
+
finally {
|
|
258
|
+
ancestors.delete(value);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
if (isPublicJsonObject(value))
|
|
262
|
+
return clonePublicJsonRecord(value, ancestors, label);
|
|
263
|
+
throw new Error(`PI WEB host workspaces capability v1 ${label} must contain only JSON values`);
|
|
264
|
+
}
|
|
265
|
+
function requiredPublicString(value, label) {
|
|
266
|
+
if (typeof value !== "string" || value === "") {
|
|
267
|
+
throw new Error(`PI WEB host workspaces capability v1 ${label} must be a non-empty string`);
|
|
268
|
+
}
|
|
269
|
+
return value;
|
|
270
|
+
}
|
|
271
|
+
function requiredBoundedPiSessionString(value, label, maxLength) {
|
|
272
|
+
if (typeof value !== "string" || value === "") {
|
|
273
|
+
throw new Error(`PI WEB host PI sessions capability v1 ${label} must be a non-empty string`);
|
|
274
|
+
}
|
|
275
|
+
if (value.length > maxLength) {
|
|
276
|
+
throw new Error(`PI WEB host PI sessions capability v1 ${label} must be at most ${String(maxLength)} characters`);
|
|
277
|
+
}
|
|
278
|
+
return value;
|
|
279
|
+
}
|
|
280
|
+
function requiredBoundedPiSessionUtf8String(value, label, maxBytes) {
|
|
281
|
+
if (typeof value !== "string" || value === "") {
|
|
282
|
+
throw new Error(`PI WEB host PI sessions capability v1 ${label} must be a non-empty string`);
|
|
283
|
+
}
|
|
284
|
+
if (publicStringExceedsUtf8ByteLimit(value, maxBytes)) {
|
|
285
|
+
throw new Error(`PI WEB host PI sessions capability v1 ${label} must be at most ${String(maxBytes)} UTF-8 bytes`);
|
|
286
|
+
}
|
|
287
|
+
return value;
|
|
288
|
+
}
|
|
289
|
+
function publicStringExceedsUtf8ByteLimit(value, maxBytes) {
|
|
290
|
+
let bytes = 0;
|
|
291
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
292
|
+
const codePoint = value.codePointAt(index);
|
|
293
|
+
if (codePoint === undefined)
|
|
294
|
+
break;
|
|
295
|
+
if (codePoint > 0xffff)
|
|
296
|
+
index += 1;
|
|
297
|
+
bytes += codePoint <= 0x7f ? 1 : codePoint <= 0x7ff ? 2 : codePoint <= 0xffff ? 3 : 4;
|
|
298
|
+
if (bytes > maxBytes)
|
|
299
|
+
return true;
|
|
300
|
+
}
|
|
301
|
+
return false;
|
|
302
|
+
}
|
|
303
|
+
function isPromiseLike(value) {
|
|
304
|
+
return (typeof value === "object" && value !== null) || typeof value === "function"
|
|
305
|
+
? typeof Reflect.get(value, "then") === "function"
|
|
306
|
+
: false;
|
|
307
|
+
}
|
|
308
|
+
function isPublicJsonObject(value) {
|
|
309
|
+
if (typeof value !== "object" || value === null || Array.isArray(value))
|
|
310
|
+
return false;
|
|
311
|
+
const prototype = Object.getPrototypeOf(value);
|
|
312
|
+
return prototype === Object.prototype || prototype === null;
|
|
313
|
+
}
|
|
314
|
+
function invalidPiWebHostWorkspaces() {
|
|
315
|
+
return new Error("PI WEB host workspaces capability v1 must expose resolve");
|
|
316
|
+
}
|
|
317
|
+
function invalidPiWebHostPiSessions() {
|
|
318
|
+
return new Error("PI WEB host PI sessions capability v1 must expose create and run");
|
|
319
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-plugin-api.js","sourceRoot":"","sources":["../src/server-plugin-api.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"server-plugin-api.js","sourceRoot":"","sources":["../src/server-plugin-api.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ import { randomUUID } from "node:crypto";
|
|
|
3
3
|
import { basename, dirname, join, resolve } from "node:path";
|
|
4
4
|
import { piWebConfigPath } from "./config.js";
|
|
5
5
|
import { isPiWebPluginId } from "./shared/pluginIds.js";
|
|
6
|
+
import { REQUIRED_TERMINAL_PLUGIN_ID, REQUIRED_TERMINAL_RECOVERY_GUIDANCE, } from "./shared/requiredTerminalPlugin.js";
|
|
6
7
|
const SERVER_PLUGINS_CONFIG_KEY = "serverPlugins";
|
|
7
8
|
const SAFE_START_CONFIG_KEY = "safeStart";
|
|
8
9
|
/**
|
|
@@ -24,6 +25,9 @@ export function loadServerPluginRecoveryConfig(options = {}) {
|
|
|
24
25
|
export function disableServerPlugin(pluginId, options = {}) {
|
|
25
26
|
if (!isPiWebPluginId(pluginId))
|
|
26
27
|
throw new Error(`Invalid PI WEB plugin id: ${pluginId}`);
|
|
28
|
+
if (pluginId === REQUIRED_TERMINAL_PLUGIN_ID) {
|
|
29
|
+
throw new Error(`不能禁用必需的 Terminal 插件。${REQUIRED_TERMINAL_RECOVERY_GUIDANCE}`);
|
|
30
|
+
}
|
|
27
31
|
return mutateRecoveryConfig(options, (root, path) => {
|
|
28
32
|
const configuredPlugins = root["plugins"];
|
|
29
33
|
if (configuredPlugins !== undefined && !isRecord(configuredPlugins)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serverPluginRecovery.js","sourceRoot":"","sources":["../src/serverPluginRecovery.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,UAAU,EACV,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,MAAM,EACN,QAAQ,EACR,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"serverPluginRecovery.js","sourceRoot":"","sources":["../src/serverPluginRecovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,22 +10,47 @@ export function createActiveAgentProfileDescriptor(agent) {
|
|
|
10
10
|
}
|
|
11
11
|
const sessionDirEnvKeys = Object.freeze([...agent.sessionDirEnvKeys]);
|
|
12
12
|
const revisionInput = JSON.stringify({
|
|
13
|
-
schemaVersion:
|
|
13
|
+
schemaVersion: 1,
|
|
14
14
|
command: agent.command,
|
|
15
15
|
dir: agent.dir,
|
|
16
16
|
sessionDirEnvKeys,
|
|
17
17
|
});
|
|
18
18
|
return Object.freeze({
|
|
19
|
-
schemaVersion:
|
|
19
|
+
schemaVersion: 1,
|
|
20
20
|
revision: `sha256:${createHash("sha256").update(revisionInput).digest("hex")}`,
|
|
21
21
|
command: agent.command,
|
|
22
22
|
dir: agent.dir,
|
|
23
23
|
sessionDirEnvKeys,
|
|
24
24
|
});
|
|
25
25
|
}
|
|
26
|
+
export function publicActiveAgentProfileDescriptor(profile) {
|
|
27
|
+
return Object.freeze({ schemaVersion: ACTIVE_AGENT_PROFILE_SCHEMA_VERSION, dir: profile.dir });
|
|
28
|
+
}
|
|
29
|
+
export function parseLegacyActiveAgentProfileDescriptor(value) {
|
|
30
|
+
if (!isRecord(value))
|
|
31
|
+
return undefined;
|
|
32
|
+
const fields = ["schemaVersion", "dir", "command", "revision", "sessionDirEnvKeys"];
|
|
33
|
+
if (Object.keys(value).some((key) => !fields.includes(key)))
|
|
34
|
+
return undefined;
|
|
35
|
+
const profile = value;
|
|
36
|
+
const dir = profile["dir"];
|
|
37
|
+
const command = profile["command"];
|
|
38
|
+
const revision = profile["revision"];
|
|
39
|
+
const keys = profile["sessionDirEnvKeys"];
|
|
40
|
+
if (profile["schemaVersion"] !== 1 || typeof dir !== "string" || !isHostAbsoluteAgentDir(dir)
|
|
41
|
+
|| typeof command !== "string" || !isSafeAgentCommandForHost(command)
|
|
42
|
+
|| typeof revision !== "string" || !/^sha256:[0-9a-f]{64}$/u.test(revision)
|
|
43
|
+
|| !Array.isArray(keys) || !keys.every((key) => typeof key === "string")
|
|
44
|
+
|| !hasValidSessionDirEnvKeys(keys))
|
|
45
|
+
return undefined;
|
|
46
|
+
return Object.freeze({ schemaVersion: 1, dir, command, revision, sessionDirEnvKeys: Object.freeze([...keys]) });
|
|
47
|
+
}
|
|
26
48
|
function hasValidSessionDirEnvKeys(keys) {
|
|
27
49
|
return (keys.length === 1 || keys.length === 2)
|
|
28
50
|
&& keys[0] === PI_WEB_AGENT_SESSION_DIR_ENV
|
|
29
51
|
&& (keys.length === 1 || keys[1] === PI_CODING_AGENT_SESSION_DIR_ENV);
|
|
30
52
|
}
|
|
53
|
+
function isRecord(value) {
|
|
54
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
55
|
+
}
|
|
31
56
|
//# sourceMappingURL=activeAgentProfile.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"activeAgentProfile.js","sourceRoot":"","sources":["../../src/sessiond/activeAgentProfile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,sBAAsB,EAAE,yBAAyB,EAAE,+BAA+B,EAAE,4BAA4B,EAAkC,MAAM,cAAc,CAAC;AAEhL,OAAO,EAAE,mCAAmC,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"activeAgentProfile.js","sourceRoot":"","sources":["../../src/sessiond/activeAgentProfile.ts"],"names":[],"mappings":"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"}
|
package/dist/sessiond/config.js
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import { join } from "node:path";
|
|
2
2
|
import { piWebDataDir } from "../config.js";
|
|
3
|
-
export function sessiondSocketPath() {
|
|
4
|
-
return
|
|
3
|
+
export function sessiondSocketPath(env = process.env) {
|
|
4
|
+
return env["PI_WEB_SESSIOND_SOCKET"] ?? join(piWebDataDir(env), "sessiond.sock");
|
|
5
5
|
}
|
|
6
6
|
export function sessiondHttpUrl() {
|
|
7
7
|
return process.env["PI_WEB_SESSIOND_URL"];
|
|
8
8
|
}
|
|
9
|
+
/** Mirrors the socket or TCP listener selected at daemon startup. */
|
|
9
10
|
export function sessiondEndpointDescription(env = process.env) {
|
|
10
11
|
const port = env["PI_WEB_SESSIOND_PORT"];
|
|
11
12
|
if (port !== undefined && port !== "")
|
|
12
13
|
return `${env["PI_WEB_SESSIOND_HOST"] ?? "127.0.0.1"}:${port}`;
|
|
13
|
-
return
|
|
14
|
+
return sessiondSocketPath(env);
|
|
14
15
|
}
|
|
15
16
|
//# sourceMappingURL=config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/sessiond/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,UAAU,kBAAkB
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/sessiond/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,UAAU,kBAAkB,CAAC,MAAyB,OAAO,CAAC,GAAG;IACrE,OAAO,GAAG,CAAC,wBAAwB,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,eAAe,CAAC,CAAC;AACnF,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;AAC5C,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,2BAA2B,CAAC,MAAyB,OAAO,CAAC,GAAG;IAC9E,MAAM,IAAI,GAAG,GAAG,CAAC,sBAAsB,CAAC,CAAC;IACzC,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,EAAE;QAAE,OAAO,GAAG,GAAG,CAAC,sBAAsB,CAAC,IAAI,WAAW,IAAI,IAAI,EAAE,CAAC;IACtG,OAAO,kBAAkB,CAAC,GAAG,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import http from "node:http";
|
|
2
2
|
import { WebSocket } from "ws";
|
|
3
|
-
import { isHostAbsoluteAgentDir
|
|
3
|
+
import { isHostAbsoluteAgentDir } from "../config.js";
|
|
4
4
|
import { parsePiWebRuntimeComponent } from "../shared/piWebStatusParsing.js";
|
|
5
5
|
import { sessiondHttpUrl, sessiondSocketPath } from "./config.js";
|
|
6
6
|
import { normalizeSessionDaemonRequestError } from "./sessionDaemonErrors.js";
|
|
7
|
+
import { parseLegacyActiveAgentProfileDescriptor, publicActiveAgentProfileDescriptor } from "./activeAgentProfile.js";
|
|
7
8
|
const SESSIOND_SOCKET_AGENT = new http.Agent({ keepAlive: true, maxSockets: 256, maxFreeSockets: 32 });
|
|
8
9
|
/** Talks to the local session daemon. A dead socket fails immediately, so there is no default request deadline; a busy agent turn is not a hang. Callers may still pass an AbortSignal. */
|
|
9
10
|
export class SessionDaemonClient {
|
|
@@ -11,22 +12,26 @@ export class SessionDaemonClient {
|
|
|
11
12
|
this.baseUrl = sessiondHttpUrl();
|
|
12
13
|
this.socketPath = sessiondSocketPath();
|
|
13
14
|
}
|
|
14
|
-
async request(method, path, body,
|
|
15
|
+
async request(method, path, body, headersOrOptions = {}, signal) {
|
|
16
|
+
const options = requestOptions(headersOrOptions, signal);
|
|
15
17
|
const payload = body === undefined ? undefined : JSON.stringify(body);
|
|
16
18
|
if (this.baseUrl !== undefined && this.baseUrl !== "")
|
|
17
|
-
return this.requestUrl(method, path, payload, headers, signal);
|
|
18
|
-
return this.requestSocket(method, path, payload, headers, signal);
|
|
19
|
+
return this.requestUrl(method, path, payload, options.headers, options.signal);
|
|
20
|
+
return this.requestSocket(method, path, payload, options.headers, options.signal);
|
|
19
21
|
}
|
|
20
22
|
getActiveAgentProfile() {
|
|
21
23
|
return getSessionDaemonActiveAgentProfile(this);
|
|
22
24
|
}
|
|
23
|
-
connectWebSocket(path,
|
|
25
|
+
connectWebSocket(path, headersOrOptions = {}, maxPayload) {
|
|
26
|
+
const options = isHeaders(headersOrOptions)
|
|
27
|
+
? { headers: headersOrOptions, ...(maxPayload === undefined ? {} : { maxPayload }) }
|
|
28
|
+
: headersOrOptions;
|
|
24
29
|
if (this.baseUrl !== undefined && this.baseUrl !== "") {
|
|
25
30
|
const url = new URL(path, this.baseUrl);
|
|
26
31
|
url.protocol = url.protocol === "https:" ? "wss:" : "ws:";
|
|
27
|
-
return new WebSocket(url,
|
|
32
|
+
return new WebSocket(url, options);
|
|
28
33
|
}
|
|
29
|
-
return new WebSocket(`ws+unix:${this.socketPath}:${path}`,
|
|
34
|
+
return new WebSocket(`ws+unix:${this.socketPath}:${path}`, options);
|
|
30
35
|
}
|
|
31
36
|
async requestUrl(method, path, payload, headers = {}, signal) {
|
|
32
37
|
const init = { method, headers, ...(signal === undefined ? {} : { signal }) };
|
|
@@ -79,6 +84,17 @@ export class SessionDaemonClient {
|
|
|
79
84
|
});
|
|
80
85
|
}
|
|
81
86
|
}
|
|
87
|
+
function requestOptions(headersOrOptions, signal) {
|
|
88
|
+
return isHeaders(headersOrOptions)
|
|
89
|
+
? { headers: headersOrOptions, ...(signal === undefined ? {} : { signal }) }
|
|
90
|
+
: headersOrOptions;
|
|
91
|
+
}
|
|
92
|
+
function isHeaders(value) {
|
|
93
|
+
return isRecord(value) && Object.values(value).every((header) => typeof header === "string");
|
|
94
|
+
}
|
|
95
|
+
function isRecord(value) {
|
|
96
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
97
|
+
}
|
|
82
98
|
export async function getSessionDaemonActiveAgentProfile(client) {
|
|
83
99
|
let response;
|
|
84
100
|
try {
|
|
@@ -97,6 +113,11 @@ export async function getSessionDaemonActiveAgentProfile(client) {
|
|
|
97
113
|
catch {
|
|
98
114
|
return { status: "invalid", error: "session daemon runtime response was not valid JSON" };
|
|
99
115
|
}
|
|
116
|
+
if (isRecord(value)) {
|
|
117
|
+
const legacy = parseLegacyActiveAgentProfileDescriptor(value["activeAgentProfile"]);
|
|
118
|
+
if (legacy !== undefined)
|
|
119
|
+
value = { ...value, activeAgentProfile: publicActiveAgentProfileDescriptor(legacy) };
|
|
120
|
+
}
|
|
100
121
|
const runtime = parsePiWebRuntimeComponent(value);
|
|
101
122
|
if (runtime?.component !== "sessiond") {
|
|
102
123
|
return { status: "invalid", error: "session daemon runtime response was invalid" };
|
|
@@ -104,7 +125,7 @@ export async function getSessionDaemonActiveAgentProfile(client) {
|
|
|
104
125
|
if (runtime.activeAgentProfile === undefined) {
|
|
105
126
|
return { status: "invalid", error: "session daemon runtime response did not include an active agent profile" };
|
|
106
127
|
}
|
|
107
|
-
if (!
|
|
128
|
+
if (!isHostAbsoluteAgentDir(runtime.activeAgentProfile.dir)) {
|
|
108
129
|
return { status: "invalid", error: "session daemon active agent profile was not valid for this host" };
|
|
109
130
|
}
|
|
110
131
|
return { status: "available", profile: runtime.activeAgentProfile };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessionDaemonClient.js","sourceRoot":"","sources":["../../src/sessiond/sessionDaemonClient.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC/B,OAAO,EAAE,sBAAsB,EAAE,
|
|
1
|
+
{"version":3,"file":"sessionDaemonClient.js","sourceRoot":"","sources":["../../src/sessiond/sessionDaemonClient.ts"],"names":[],"mappings":"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"}
|