@vincenthanxiaodu/pi-web 1.202608.76 → 1.202609.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +2 -2
- package/dist/cli.js.map +1 -1
- package/dist/client/assets/{CodeViewer-DyfKGKrr.js → CodeViewer-BDNVRbqY.js} +1 -1
- package/dist/client/assets/{TerminalPanel-BBN-7SPs.js → TerminalPanel-haos8c1O.js} +1 -1
- package/dist/client/assets/{index-lagKqPPU.js → index-POhML0QZ.js} +323 -311
- package/dist/client/index.html +7 -2
- package/dist/piWebVersionReport.js +1 -1
- package/dist/piWebVersionReport.js.map +1 -1
- package/dist/{sessiond → server/daemon}/activeAgentProfile.js +2 -2
- package/dist/server/daemon/activeAgentProfile.js.map +1 -0
- package/dist/server/{activity → daemon/activity}/workspaceActivityService.js +41 -42
- package/dist/server/daemon/activity/workspaceActivityService.js.map +1 -0
- package/dist/server/daemon/agentHttpDispatcher.js.map +1 -0
- package/dist/server/daemon/agentProcessEnvironment.js.map +1 -0
- package/dist/server/daemon/browserMessageProjection.js.map +1 -0
- package/dist/server/{realtime → daemon/realtime}/sessionEventHub.js +50 -5
- package/dist/server/daemon/realtime/sessionEventHub.js.map +1 -0
- package/dist/server/daemon/sessionDaemonShutdown.js.map +1 -0
- package/dist/server/daemon/sessionServiceDependencies.js.map +1 -0
- package/dist/server/{sessiond → daemon}/sessiondStateOwnership.js +1 -1
- package/dist/server/daemon/sessiondStateOwnership.js.map +1 -0
- package/dist/server/{sessions → daemon/sessions}/askUserTool.js +1 -1
- package/dist/server/daemon/sessions/askUserTool.js.map +1 -0
- package/dist/server/{sessions → daemon/sessions}/attachmentService.js +2 -2
- package/dist/server/daemon/sessions/attachmentService.js.map +1 -0
- package/dist/server/daemon/sessions/authProviderOptions.js.map +1 -0
- package/dist/server/daemon/sessions/authRoutes.js.map +1 -0
- package/dist/server/daemon/sessions/authService.js.map +1 -0
- package/dist/server/{sessions → daemon/sessions}/backgroundRunCount.js +26 -1
- package/dist/server/daemon/sessions/backgroundRunCount.js.map +1 -0
- package/dist/server/daemon/sessions/backgroundTasks.js.map +1 -0
- package/dist/server/daemon/sessions/backgroundWorkWatcher.js +109 -0
- package/dist/server/daemon/sessions/backgroundWorkWatcher.js.map +1 -0
- package/dist/server/daemon/sessions/builtinCommands.js.map +1 -0
- package/dist/server/daemon/sessions/dockerEnvironmentFacts.js.map +1 -0
- package/dist/server/daemon/sessions/editPreview.js.map +1 -0
- package/dist/server/daemon/sessions/extensionDialogWaiters.js.map +1 -0
- package/dist/server/daemon/sessions/globalProviderPolicy.js.map +1 -0
- package/dist/server/daemon/sessions/hostContributions.js.map +1 -0
- package/dist/server/daemon/sessions/injectedTurnKinds.js.map +1 -0
- package/dist/server/{sessions → daemon/sessions}/interruptedRunStore.js +1 -1
- package/dist/server/daemon/sessions/interruptedRunStore.js.map +1 -0
- package/dist/server/daemon/sessions/messagePaging.js.map +1 -0
- package/dist/server/daemon/sessions/modelCatalogRefresher.js.map +1 -0
- package/dist/server/daemon/sessions/oauthLoginFlowService.js.map +1 -0
- package/dist/server/{sessions → daemon/sessions}/pendingAskStore.js +1 -1
- package/dist/server/daemon/sessions/pendingAskStore.js.map +1 -0
- package/dist/server/{sessions → daemon/sessions}/pendingExtensionDialogStore.js +1 -1
- package/dist/server/daemon/sessions/pendingExtensionDialogStore.js.map +1 -0
- package/dist/server/{sessions → daemon/sessions}/piSessionManagerGateway.js +1 -1
- package/dist/server/daemon/sessions/piSessionManagerGateway.js.map +1 -0
- package/dist/server/{sessions → daemon/sessions}/piSessionService.js +37 -8
- package/dist/server/daemon/sessions/piSessionService.js.map +1 -0
- package/dist/server/daemon/sessions/plainTextTheme.js.map +1 -0
- package/dist/server/{sessions → daemon/sessions}/readableMessageCount.js +1 -1
- package/dist/server/daemon/sessions/readableMessageCount.js.map +1 -0
- package/dist/server/daemon/sessions/sessionActivityLabel.js.map +1 -0
- package/dist/server/{sessions → daemon/sessions}/sessionArchiveStore.js +1 -1
- package/dist/server/daemon/sessions/sessionArchiveStore.js.map +1 -0
- package/dist/server/daemon/sessions/sessionArchiveTree.js.map +1 -0
- package/dist/server/daemon/sessions/sessionCleanup.js.map +1 -0
- package/dist/server/daemon/sessions/sessionCommandService.js.map +1 -0
- package/dist/server/{sessions → daemon/sessions}/sessionEnvironmentFacts.js +2 -2
- package/dist/server/daemon/sessions/sessionEnvironmentFacts.js.map +1 -0
- package/dist/server/daemon/sessions/sessionFileFormat.js.map +1 -0
- package/dist/server/daemon/sessions/sessionFileHeader.js.map +1 -0
- package/dist/server/daemon/sessions/sessionModelScope.js.map +1 -0
- package/dist/server/daemon/sessions/sessionNameGenerator.js.map +1 -0
- package/dist/server/{sessions → daemon/sessions}/sessionNotificationStore.js +2 -2
- package/dist/server/daemon/sessions/sessionNotificationStore.js.map +1 -0
- package/dist/server/{sessions → daemon/sessions}/sessionRoutes.js +1 -1
- package/dist/server/daemon/sessions/sessionRoutes.js.map +1 -0
- package/dist/server/daemon/sessions/sessionRuntimeStore.js.map +1 -0
- package/dist/server/daemon/sessions/sessionService.js.map +1 -0
- package/dist/server/daemon/sessions/sessionSummaryScanner.js.map +1 -0
- package/dist/server/daemon/sessions/sessionTreeProjection.js.map +1 -0
- package/dist/server/{sessions → daemon/sessions}/sessionUnreadStore.js +2 -2
- package/dist/server/daemon/sessions/sessionUnreadStore.js.map +1 -0
- package/dist/server/daemon/sessions/shutdownDrain.js.map +1 -0
- package/dist/server/daemon/sessions/spawnSessionTool.js.map +1 -0
- package/dist/server/daemon/sessions/spawnSubsessionTool.js.map +1 -0
- package/dist/server/daemon/sessions/spawnTargetResolver.js.map +1 -0
- package/dist/server/{sessions → daemon/sessions}/subagentRuns.js +49 -19
- package/dist/server/daemon/sessions/subagentRuns.js.map +1 -0
- package/dist/server/daemon/sessions/subsessionTranscript.js.map +1 -0
- package/dist/server/daemon/sessions/unsupportedSurface.js.map +1 -0
- package/dist/server/daemon/sessions/warningFiling.js.map +1 -0
- package/dist/server/daemon/status/machineStatusRoutes.js.map +1 -0
- package/dist/server/{status → daemon/status}/machineStatusService.js +1 -1
- package/dist/server/daemon/status/machineStatusService.js.map +1 -0
- package/dist/server/daemon/status/workspaceAttribution.js.map +1 -0
- package/dist/server/daemon/terminals/nodePtySpawnHelper.js.map +1 -0
- package/dist/server/{terminals → daemon/terminals}/terminalRoutes.js +1 -1
- package/dist/server/daemon/terminals/terminalRoutes.js.map +1 -0
- package/dist/server/daemon/terminals/terminalService.js.map +1 -0
- package/dist/server/daemon/workingDirectory.js.map +1 -0
- package/dist/server/{sessiond → daemon/workspaces}/pluginBackendRoutes.js +3 -3
- package/dist/server/daemon/workspaces/pluginBackendRoutes.js.map +1 -0
- package/dist/server/daemon/workspaces/projectWorkspaceCwds.js.map +1 -0
- package/dist/server/daemon/workspaces/workspaceCatalogRoutes.js.map +1 -0
- package/dist/server/{workspaces → daemon/workspaces}/workspaceProviderRegistry.js +2 -2
- package/dist/server/daemon/workspaces/workspaceProviderRegistry.js.map +1 -0
- package/dist/server/{sessiond → daemon/workspaces}/workspaceRemovalRoutes.js +3 -3
- package/dist/server/daemon/workspaces/workspaceRemovalRoutes.js.map +1 -0
- package/dist/server/{workspaces → daemon/workspaces}/workspaceRemovalService.js +2 -2
- package/dist/server/daemon/workspaces/workspaceRemovalService.js.map +1 -0
- package/dist/server/{workspaces → daemon/workspaces}/worktreePreRemoveHook.js +1 -1
- package/dist/server/daemon/workspaces/worktreePreRemoveHook.js.map +1 -0
- package/dist/server/index.js +1 -1
- package/dist/server/index.js.map +1 -1
- package/dist/server/sessiond.js +41 -41
- package/dist/server/sessiond.js.map +1 -1
- package/dist/server/shared/diagnostics/nodePtyNativeModule.js.map +1 -0
- package/dist/server/shared/diagnostics/nodePtySpawnHelper.js.map +1 -0
- package/dist/server/{piWebPluginCatalog.js → shared/piWebPluginCatalog.js} +3 -3
- package/dist/server/shared/piWebPluginCatalog.js.map +1 -0
- package/dist/server/shared/piWebReleaseLookupCache.js.map +1 -0
- package/dist/server/{piWebStatus.js → shared/piWebStatus.js} +6 -6
- package/dist/server/shared/piWebStatus.js.map +1 -0
- package/dist/server/shared/plugins/serverPluginExec.js.map +1 -0
- package/dist/server/shared/plugins/serverPluginRuntime.js.map +1 -0
- package/dist/server/shared/projects/directorySuggestions.js.map +1 -0
- package/dist/server/shared/projects/projectService.js.map +1 -0
- package/dist/server/shared/requestCancellation.js.map +1 -0
- package/dist/{sessiond → server/shared/sessiondClient}/config.js +1 -1
- package/dist/server/shared/sessiondClient/config.js.map +1 -0
- package/dist/{sessiond → server/shared/sessiondClient}/sessionDaemonClient.js +2 -2
- package/dist/server/shared/sessiondClient/sessionDaemonClient.js.map +1 -0
- package/dist/server/{storage → shared/storage}/projectStore.js +1 -1
- package/dist/server/shared/storage/projectStore.js.map +1 -0
- package/dist/server/shared/terminals/terminalSize.js.map +1 -0
- package/dist/server/{types.js.map → shared/types.js.map} +1 -1
- package/dist/server/shared/workspaces/pathSafety.js.map +1 -0
- package/dist/server/shared/workspaces/workspaceCatalog.js.map +1 -0
- package/dist/server/{activeAgentProfileProvider.js → web/activeAgentProfileProvider.js} +1 -1
- package/dist/server/web/activeAgentProfileProvider.js.map +1 -0
- package/dist/server/{app.js → web/app.js} +10 -10
- package/dist/server/web/app.js.map +1 -0
- package/dist/server/{configRoutes.js → web/configRoutes.js} +2 -2
- package/dist/server/web/configRoutes.js.map +1 -0
- package/dist/server/web/git/gitEnv.js.map +1 -0
- package/dist/server/web/goals/goalArchive.js.map +1 -0
- package/dist/server/web/goals/goalFile.js.map +1 -0
- package/dist/server/web/goals/goalStore.js.map +1 -0
- package/dist/server/web/machines/machineClient.js.map +1 -0
- package/dist/server/{machines → web/machines}/machinePluginProxyRoutes.js +4 -4
- package/dist/server/web/machines/machinePluginProxyRoutes.js.map +1 -0
- package/dist/server/{machines → web/machines}/machineProxyRoutes.js +2 -2
- package/dist/server/web/machines/machineProxyRoutes.js.map +1 -0
- package/dist/server/web/machines/machineRoutes.js.map +1 -0
- package/dist/server/{machines → web/machines}/machineService.js +2 -2
- package/dist/server/web/machines/machineService.js.map +1 -0
- package/dist/server/{machines → web/machines}/machineStore.js +1 -1
- package/dist/server/web/machines/machineStore.js.map +1 -0
- package/dist/server/web/piPackageRoutes.js.map +1 -0
- package/dist/server/web/piPackageService.js.map +1 -0
- package/dist/server/{piWebPluginLifecycle.js → web/piWebPluginLifecycle.js} +2 -2
- package/dist/server/web/piWebPluginLifecycle.js.map +1 -0
- package/dist/server/{piWebPluginService.js → web/piWebPluginService.js} +5 -5
- package/dist/server/web/piWebPluginService.js.map +1 -0
- package/dist/server/web/piWebStatusCache.js.map +1 -0
- package/dist/server/{plugins → web/plugins}/pluginBackendProxyRoutes.js +1 -1
- package/dist/server/web/plugins/pluginBackendProxyRoutes.js.map +1 -0
- package/dist/server/{projectTrustRoutes.js → web/projectTrustRoutes.js} +1 -1
- package/dist/server/web/projectTrustRoutes.js.map +1 -0
- package/dist/server/{sessiond → web}/sessionProxyRoutes.js +1 -1
- package/dist/server/web/sessionProxyRoutes.js.map +1 -0
- package/dist/server/web/speechRoutes.js.map +1 -0
- package/dist/server/{terminalProxyRoutes.js → web/terminalProxyRoutes.js} +2 -2
- package/dist/server/web/terminalProxyRoutes.js.map +1 -0
- package/dist/server/web/updates/fleetRoutes.js.map +1 -0
- package/dist/server/web/updates/restartRoutes.js.map +1 -0
- package/dist/server/{updates → web/updates}/selfUpdateRoutes.js +2 -2
- package/dist/server/web/updates/selfUpdateRoutes.js.map +1 -0
- package/dist/server/web/webSocketBridge.js.map +1 -0
- package/dist/server/web/workspaceExplorerRoutes.js.map +1 -0
- package/dist/server/web/workspaces/effectivePathAccess.js.map +1 -0
- package/dist/server/{workspaces → web/workspaces}/fileContentService.js +2 -2
- package/dist/server/web/workspaces/fileContentService.js.map +1 -0
- package/dist/server/web/workspaces/filePreviewResponseHeaders.js.map +1 -0
- package/dist/server/{workspaces → web/workspaces}/filePreviewResponsePolicy.js +1 -1
- package/dist/server/web/workspaces/filePreviewResponsePolicy.js.map +1 -0
- package/dist/server/{workspaces → web/workspaces}/filePreviewService.js +1 -1
- package/dist/server/web/workspaces/filePreviewService.js.map +1 -0
- package/dist/server/web/workspaces/fileSuggestions.js.map +1 -0
- package/dist/server/web/workspaces/fileTreeService.js.map +1 -0
- package/dist/server/{workspaces → web/workspaces}/pathAccessPolicy.js +1 -1
- package/dist/server/web/workspaces/pathAccessPolicy.js.map +1 -0
- package/dist/server/{workspaces → web/workspaces}/projectPiWebConfig.js +1 -1
- package/dist/server/web/workspaces/projectPiWebConfig.js.map +1 -0
- package/dist/server/{workspaces → web/workspaces}/sessionDaemonWorkspaceCatalog.js +2 -2
- package/dist/server/web/workspaces/sessionDaemonWorkspaceCatalog.js.map +1 -0
- package/dist/server/web/workspaces/workspaceContext.js.map +1 -0
- package/dist/server/{workspaces → web/workspaces}/workspaceDeletionRoutes.js +3 -3
- package/dist/server/web/workspaces/workspaceDeletionRoutes.js.map +1 -0
- package/dist/server/{workspaces → web/workspaces}/workspaceRouteErrors.js +1 -1
- package/dist/server/web/workspaces/workspaceRouteErrors.js.map +1 -0
- package/dist/shared/branchMessages.js.map +1 -0
- package/dist/shared/subagentRunTranscript.js.map +1 -0
- package/package.json +6 -6
- package/dist/server/activeAgentProfileProvider.js.map +0 -1
- package/dist/server/activity/workspaceActivityService.js.map +0 -1
- package/dist/server/app.js.map +0 -1
- package/dist/server/browserMessageProjection.js.map +0 -1
- package/dist/server/configRoutes.js.map +0 -1
- package/dist/server/diagnostics/nodePtyNativeModule.js.map +0 -1
- package/dist/server/diagnostics/nodePtySpawnHelper.js.map +0 -1
- package/dist/server/git/gitEnv.js.map +0 -1
- package/dist/server/goals/goalArchive.js.map +0 -1
- package/dist/server/goals/goalFile.js.map +0 -1
- package/dist/server/goals/goalStore.js.map +0 -1
- package/dist/server/machines/machineClient.js.map +0 -1
- package/dist/server/machines/machinePluginProxyRoutes.js.map +0 -1
- package/dist/server/machines/machineProxyRoutes.js.map +0 -1
- package/dist/server/machines/machineRoutes.js.map +0 -1
- package/dist/server/machines/machineService.js.map +0 -1
- package/dist/server/machines/machineStore.js.map +0 -1
- package/dist/server/piPackageRoutes.js.map +0 -1
- package/dist/server/piPackageService.js.map +0 -1
- package/dist/server/piWebPluginCatalog.js.map +0 -1
- package/dist/server/piWebPluginLifecycle.js.map +0 -1
- package/dist/server/piWebPluginService.js.map +0 -1
- package/dist/server/piWebReleaseLookupCache.js.map +0 -1
- package/dist/server/piWebStatus.js.map +0 -1
- package/dist/server/piWebStatusCache.js.map +0 -1
- package/dist/server/plugins/pluginBackendProxyRoutes.js.map +0 -1
- package/dist/server/plugins/serverPluginExec.js.map +0 -1
- package/dist/server/plugins/serverPluginRuntime.js.map +0 -1
- package/dist/server/projectTrustRoutes.js.map +0 -1
- package/dist/server/projects/directorySuggestions.js.map +0 -1
- package/dist/server/projects/projectService.js.map +0 -1
- package/dist/server/realtime/sessionEventHub.js.map +0 -1
- package/dist/server/requestCancellation.js.map +0 -1
- package/dist/server/sessiond/agentHttpDispatcher.js.map +0 -1
- package/dist/server/sessiond/agentProcessEnvironment.js.map +0 -1
- package/dist/server/sessiond/pluginBackendRoutes.js.map +0 -1
- package/dist/server/sessiond/sessionDaemonShutdown.js.map +0 -1
- package/dist/server/sessiond/sessionProxyRoutes.js.map +0 -1
- package/dist/server/sessiond/sessionServiceDependencies.js.map +0 -1
- package/dist/server/sessiond/sessiondStateOwnership.js.map +0 -1
- package/dist/server/sessiond/workspaceCatalogRoutes.js.map +0 -1
- package/dist/server/sessiond/workspaceRemovalRoutes.js.map +0 -1
- package/dist/server/sessions/askUserTool.js.map +0 -1
- package/dist/server/sessions/attachmentService.js.map +0 -1
- package/dist/server/sessions/authProviderOptions.js.map +0 -1
- package/dist/server/sessions/authRoutes.js.map +0 -1
- package/dist/server/sessions/authService.js.map +0 -1
- package/dist/server/sessions/backgroundRunCount.js.map +0 -1
- package/dist/server/sessions/backgroundTasks.js.map +0 -1
- package/dist/server/sessions/branchMessages.js.map +0 -1
- package/dist/server/sessions/builtinCommands.js.map +0 -1
- package/dist/server/sessions/dockerEnvironmentFacts.js.map +0 -1
- package/dist/server/sessions/editPreview.js.map +0 -1
- package/dist/server/sessions/extensionDialogWaiters.js.map +0 -1
- package/dist/server/sessions/globalProviderPolicy.js.map +0 -1
- package/dist/server/sessions/hostContributions.js.map +0 -1
- package/dist/server/sessions/injectedTurnKinds.js.map +0 -1
- package/dist/server/sessions/interruptedRunStore.js.map +0 -1
- package/dist/server/sessions/messagePaging.js.map +0 -1
- package/dist/server/sessions/modelCatalogRefresher.js.map +0 -1
- package/dist/server/sessions/oauthLoginFlowService.js.map +0 -1
- package/dist/server/sessions/pendingAskStore.js.map +0 -1
- package/dist/server/sessions/pendingExtensionDialogStore.js.map +0 -1
- package/dist/server/sessions/piSessionManagerGateway.js.map +0 -1
- package/dist/server/sessions/piSessionService.js.map +0 -1
- package/dist/server/sessions/plainTextTheme.js.map +0 -1
- package/dist/server/sessions/readableMessageCount.js.map +0 -1
- package/dist/server/sessions/sessionActivityLabel.js.map +0 -1
- package/dist/server/sessions/sessionArchiveStore.js.map +0 -1
- package/dist/server/sessions/sessionArchiveTree.js.map +0 -1
- package/dist/server/sessions/sessionCleanup.js.map +0 -1
- package/dist/server/sessions/sessionCommandService.js.map +0 -1
- package/dist/server/sessions/sessionEnvironmentFacts.js.map +0 -1
- package/dist/server/sessions/sessionFileFormat.js.map +0 -1
- package/dist/server/sessions/sessionFileHeader.js.map +0 -1
- package/dist/server/sessions/sessionModelScope.js.map +0 -1
- package/dist/server/sessions/sessionNameGenerator.js.map +0 -1
- package/dist/server/sessions/sessionNotificationStore.js.map +0 -1
- package/dist/server/sessions/sessionRoutes.js.map +0 -1
- package/dist/server/sessions/sessionRuntimeStore.js.map +0 -1
- package/dist/server/sessions/sessionService.js.map +0 -1
- package/dist/server/sessions/sessionSummaryScanner.js.map +0 -1
- package/dist/server/sessions/sessionTreeProjection.js.map +0 -1
- package/dist/server/sessions/sessionUnreadStore.js.map +0 -1
- package/dist/server/sessions/shutdownDrain.js.map +0 -1
- package/dist/server/sessions/spawnSessionTool.js.map +0 -1
- package/dist/server/sessions/spawnSubsessionTool.js.map +0 -1
- package/dist/server/sessions/spawnTargetResolver.js.map +0 -1
- package/dist/server/sessions/subagentRunTranscript.js.map +0 -1
- package/dist/server/sessions/subagentRuns.js.map +0 -1
- package/dist/server/sessions/subsessionTranscript.js.map +0 -1
- package/dist/server/sessions/unsupportedSurface.js.map +0 -1
- package/dist/server/sessions/warningFiling.js.map +0 -1
- package/dist/server/speechRoutes.js.map +0 -1
- package/dist/server/status/machineStatusRoutes.js.map +0 -1
- package/dist/server/status/machineStatusService.js.map +0 -1
- package/dist/server/status/workspaceAttribution.js.map +0 -1
- package/dist/server/storage/projectStore.js.map +0 -1
- package/dist/server/terminalProxyRoutes.js.map +0 -1
- package/dist/server/terminals/nodePtySpawnHelper.js.map +0 -1
- package/dist/server/terminals/terminalRoutes.js.map +0 -1
- package/dist/server/terminals/terminalService.js.map +0 -1
- package/dist/server/terminals/terminalSize.js.map +0 -1
- package/dist/server/updates/fleetRoutes.js.map +0 -1
- package/dist/server/updates/restartRoutes.js.map +0 -1
- package/dist/server/updates/selfUpdateRoutes.js.map +0 -1
- package/dist/server/webSocketBridge.js.map +0 -1
- package/dist/server/workingDirectory.js.map +0 -1
- package/dist/server/workspaceExplorerRoutes.js.map +0 -1
- package/dist/server/workspaces/effectivePathAccess.js.map +0 -1
- package/dist/server/workspaces/fileContentService.js.map +0 -1
- package/dist/server/workspaces/filePreviewResponseHeaders.js.map +0 -1
- package/dist/server/workspaces/filePreviewResponsePolicy.js.map +0 -1
- package/dist/server/workspaces/filePreviewService.js.map +0 -1
- package/dist/server/workspaces/fileSuggestions.js.map +0 -1
- package/dist/server/workspaces/fileTreeService.js.map +0 -1
- package/dist/server/workspaces/pathAccessPolicy.js.map +0 -1
- package/dist/server/workspaces/pathSafety.js.map +0 -1
- package/dist/server/workspaces/projectPiWebConfig.js.map +0 -1
- package/dist/server/workspaces/projectWorkspaceCwds.js.map +0 -1
- package/dist/server/workspaces/sessionDaemonWorkspaceCatalog.js.map +0 -1
- package/dist/server/workspaces/workspaceCatalog.js.map +0 -1
- package/dist/server/workspaces/workspaceContext.js.map +0 -1
- package/dist/server/workspaces/workspaceDeletionRoutes.js.map +0 -1
- package/dist/server/workspaces/workspaceProviderRegistry.js.map +0 -1
- package/dist/server/workspaces/workspaceRemovalService.js.map +0 -1
- package/dist/server/workspaces/workspaceRouteErrors.js.map +0 -1
- package/dist/server/workspaces/worktreePreRemoveHook.js.map +0 -1
- package/dist/sessiond/activeAgentProfile.js.map +0 -1
- package/dist/sessiond/config.js.map +0 -1
- package/dist/sessiond/sessionDaemonClient.js.map +0 -1
- /package/dist/server/{sessiond → daemon}/agentHttpDispatcher.js +0 -0
- /package/dist/server/{sessiond → daemon}/agentProcessEnvironment.js +0 -0
- /package/dist/server/{browserMessageProjection.js → daemon/browserMessageProjection.js} +0 -0
- /package/dist/server/{sessiond → daemon}/sessionDaemonShutdown.js +0 -0
- /package/dist/server/{sessiond → daemon}/sessionServiceDependencies.js +0 -0
- /package/dist/server/{sessions → daemon/sessions}/authProviderOptions.js +0 -0
- /package/dist/server/{sessions → daemon/sessions}/authRoutes.js +0 -0
- /package/dist/server/{sessions → daemon/sessions}/authService.js +0 -0
- /package/dist/server/{sessions → daemon/sessions}/backgroundTasks.js +0 -0
- /package/dist/server/{sessions → daemon/sessions}/builtinCommands.js +0 -0
- /package/dist/server/{sessions → daemon/sessions}/dockerEnvironmentFacts.js +0 -0
- /package/dist/server/{sessions → daemon/sessions}/editPreview.js +0 -0
- /package/dist/server/{sessions → daemon/sessions}/extensionDialogWaiters.js +0 -0
- /package/dist/server/{sessions → daemon/sessions}/globalProviderPolicy.js +0 -0
- /package/dist/server/{sessions → daemon/sessions}/hostContributions.js +0 -0
- /package/dist/server/{sessions → daemon/sessions}/injectedTurnKinds.js +0 -0
- /package/dist/server/{sessions → daemon/sessions}/messagePaging.js +0 -0
- /package/dist/server/{sessions → daemon/sessions}/modelCatalogRefresher.js +0 -0
- /package/dist/server/{sessions → daemon/sessions}/oauthLoginFlowService.js +0 -0
- /package/dist/server/{sessions → daemon/sessions}/plainTextTheme.js +0 -0
- /package/dist/server/{sessions → daemon/sessions}/sessionActivityLabel.js +0 -0
- /package/dist/server/{sessions → daemon/sessions}/sessionArchiveTree.js +0 -0
- /package/dist/server/{sessions → daemon/sessions}/sessionCleanup.js +0 -0
- /package/dist/server/{sessions → daemon/sessions}/sessionCommandService.js +0 -0
- /package/dist/server/{sessions → daemon/sessions}/sessionFileFormat.js +0 -0
- /package/dist/server/{sessions → daemon/sessions}/sessionFileHeader.js +0 -0
- /package/dist/server/{sessions → daemon/sessions}/sessionModelScope.js +0 -0
- /package/dist/server/{sessions → daemon/sessions}/sessionNameGenerator.js +0 -0
- /package/dist/server/{sessions → daemon/sessions}/sessionRuntimeStore.js +0 -0
- /package/dist/server/{sessions → daemon/sessions}/sessionService.js +0 -0
- /package/dist/server/{sessions → daemon/sessions}/sessionSummaryScanner.js +0 -0
- /package/dist/server/{sessions → daemon/sessions}/sessionTreeProjection.js +0 -0
- /package/dist/server/{sessions → daemon/sessions}/shutdownDrain.js +0 -0
- /package/dist/server/{sessions → daemon/sessions}/spawnSessionTool.js +0 -0
- /package/dist/server/{sessions → daemon/sessions}/spawnSubsessionTool.js +0 -0
- /package/dist/server/{sessions → daemon/sessions}/spawnTargetResolver.js +0 -0
- /package/dist/server/{sessions → daemon/sessions}/subsessionTranscript.js +0 -0
- /package/dist/server/{sessions → daemon/sessions}/unsupportedSurface.js +0 -0
- /package/dist/server/{sessions → daemon/sessions}/warningFiling.js +0 -0
- /package/dist/server/{status → daemon/status}/machineStatusRoutes.js +0 -0
- /package/dist/server/{status → daemon/status}/workspaceAttribution.js +0 -0
- /package/dist/server/{terminals → daemon/terminals}/nodePtySpawnHelper.js +0 -0
- /package/dist/server/{terminals → daemon/terminals}/terminalService.js +0 -0
- /package/dist/server/{workingDirectory.js → daemon/workingDirectory.js} +0 -0
- /package/dist/server/{workspaces → daemon/workspaces}/projectWorkspaceCwds.js +0 -0
- /package/dist/server/{sessiond → daemon/workspaces}/workspaceCatalogRoutes.js +0 -0
- /package/dist/server/{diagnostics → shared/diagnostics}/nodePtyNativeModule.js +0 -0
- /package/dist/server/{diagnostics → shared/diagnostics}/nodePtySpawnHelper.js +0 -0
- /package/dist/server/{piWebReleaseLookupCache.js → shared/piWebReleaseLookupCache.js} +0 -0
- /package/dist/server/{plugins → shared/plugins}/serverPluginExec.js +0 -0
- /package/dist/server/{plugins → shared/plugins}/serverPluginRuntime.js +0 -0
- /package/dist/server/{projects → shared/projects}/directorySuggestions.js +0 -0
- /package/dist/server/{projects → shared/projects}/projectService.js +0 -0
- /package/dist/server/{requestCancellation.js → shared/requestCancellation.js} +0 -0
- /package/dist/server/{terminals → shared/terminals}/terminalSize.js +0 -0
- /package/dist/server/{types.js → shared/types.js} +0 -0
- /package/dist/server/{workspaces → shared/workspaces}/pathSafety.js +0 -0
- /package/dist/server/{workspaces → shared/workspaces}/workspaceCatalog.js +0 -0
- /package/dist/server/{git → web/git}/gitEnv.js +0 -0
- /package/dist/server/{goals → web/goals}/goalArchive.js +0 -0
- /package/dist/server/{goals → web/goals}/goalFile.js +0 -0
- /package/dist/server/{goals → web/goals}/goalStore.js +0 -0
- /package/dist/server/{machines → web/machines}/machineClient.js +0 -0
- /package/dist/server/{machines → web/machines}/machineRoutes.js +0 -0
- /package/dist/server/{piPackageRoutes.js → web/piPackageRoutes.js} +0 -0
- /package/dist/server/{piPackageService.js → web/piPackageService.js} +0 -0
- /package/dist/server/{piWebStatusCache.js → web/piWebStatusCache.js} +0 -0
- /package/dist/server/{speechRoutes.js → web/speechRoutes.js} +0 -0
- /package/dist/server/{updates → web/updates}/fleetRoutes.js +0 -0
- /package/dist/server/{updates → web/updates}/restartRoutes.js +0 -0
- /package/dist/server/{webSocketBridge.js → web/webSocketBridge.js} +0 -0
- /package/dist/server/{workspaceExplorerRoutes.js → web/workspaceExplorerRoutes.js} +0 -0
- /package/dist/server/{workspaces → web/workspaces}/effectivePathAccess.js +0 -0
- /package/dist/server/{workspaces → web/workspaces}/filePreviewResponseHeaders.js +0 -0
- /package/dist/server/{workspaces → web/workspaces}/fileSuggestions.js +0 -0
- /package/dist/server/{workspaces → web/workspaces}/fileTreeService.js +0 -0
- /package/dist/server/{workspaces → web/workspaces}/workspaceContext.js +0 -0
- /package/dist/{server/sessions → shared}/branchMessages.js +0 -0
- /package/dist/{server/sessions → shared}/subagentRunTranscript.js +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./CodeViewer-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./CodeViewer-BDNVRbqY.js","./vendor-editor-core-DVD9qHFI.js","./vendor-editor-languages-CgbLQX3u.js","./vendor-editor-legacy-CYBnW6ZU.js","./TerminalPanel-haos8c1O.js","./vendor-terminal-D8k4UKM2.js","./vendor-terminal-BrP-ENHg.css","./composerEditorSetup-DcmFM6jm.js"])))=>i.map(i=>d[i]);
|
|
2
2
|
(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var e=globalThis,t=e.ShadowRoot&&(e.ShadyCSS===void 0||e.ShadyCSS.nativeShadow)&&`adoptedStyleSheets`in Document.prototype&&`replace`in CSSStyleSheet.prototype,n=Symbol(),r=new WeakMap,i=class{constructor(e,t,r){if(this._$cssResult$=!0,r!==n)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=e,this.t=t}get styleSheet(){let e=this.o,n=this.t;if(t&&e===void 0){let t=n!==void 0&&n.length===1;t&&(e=r.get(n)),e===void 0&&((this.o=e=new CSSStyleSheet).replaceSync(this.cssText),t&&r.set(n,e))}return e}toString(){return this.cssText}},a=e=>new i(typeof e==`string`?e:e+``,void 0,n),o=(e,...t)=>new i(e.length===1?e[0]:t.reduce((t,n,r)=>t+(e=>{if(!0===e._$cssResult$)return e.cssText;if(typeof e==`number`)return e;throw Error(`Value passed to 'css' function must be a 'css' function result: `+e+`. Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.`)})(n)+e[r+1],e[0]),e,n),s=(n,r)=>{if(t)n.adoptedStyleSheets=r.map(e=>e instanceof CSSStyleSheet?e:e.styleSheet);else for(let t of r){let r=document.createElement(`style`),i=e.litNonce;i!==void 0&&r.setAttribute(`nonce`,i),r.textContent=t.cssText,n.appendChild(r)}},c=t?e=>e:e=>e instanceof CSSStyleSheet?(e=>{let t=``;for(let n of e.cssRules)t+=n.cssText;return a(t)})(e):e,{is:l,defineProperty:u,getOwnPropertyDescriptor:d,getOwnPropertyNames:f,getOwnPropertySymbols:p,getPrototypeOf:m}=Object,ee=globalThis,te=ee.trustedTypes,ne=te?te.emptyScript:``,re=ee.reactiveElementPolyfillSupport,ie=(e,t)=>e,ae={toAttribute(e,t){switch(t){case Boolean:e=e?ne:null;break;case Object:case Array:e=e==null?e:JSON.stringify(e)}return e},fromAttribute(e,t){let n=e;switch(t){case Boolean:n=e!==null;break;case Number:n=e===null?null:Number(e);break;case Object:case Array:try{n=JSON.parse(e)}catch{n=null}}return n}},oe=(e,t)=>!l(e,t),se={attribute:!0,type:String,converter:ae,reflect:!1,useDefault:!1,hasChanged:oe};Symbol.metadata??=Symbol(`metadata`),ee.litPropertyMetadata??=new WeakMap;var ce=class extends HTMLElement{static addInitializer(e){this._$Ei(),(this.l??=[]).push(e)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(e,t=se){if(t.state&&(t.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(e)&&((t=Object.create(t)).wrapped=!0),this.elementProperties.set(e,t),!t.noAccessor){let n=Symbol(),r=this.getPropertyDescriptor(e,n,t);r!==void 0&&u(this.prototype,e,r)}}static getPropertyDescriptor(e,t,n){let{get:r,set:i}=d(this.prototype,e)??{get(){return this[t]},set(e){this[t]=e}};return{get:r,set(t){let a=r?.call(this);i?.call(this,t),this.requestUpdate(e,a,n)},configurable:!0,enumerable:!0}}static getPropertyOptions(e){return this.elementProperties.get(e)??se}static _$Ei(){if(this.hasOwnProperty(ie(`elementProperties`)))return;let e=m(this);e.finalize(),e.l!==void 0&&(this.l=[...e.l]),this.elementProperties=new Map(e.elementProperties)}static finalize(){if(this.hasOwnProperty(ie(`finalized`)))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(ie(`properties`))){let e=this.properties,t=[...f(e),...p(e)];for(let n of t)this.createProperty(n,e[n])}let e=this[Symbol.metadata];if(e!==null){let t=litPropertyMetadata.get(e);if(t!==void 0)for(let[e,n]of t)this.elementProperties.set(e,n)}this._$Eh=new Map;for(let[e,t]of this.elementProperties){let n=this._$Eu(e,t);n!==void 0&&this._$Eh.set(n,e)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(e){let t=[];if(Array.isArray(e)){let n=new Set(e.flat(1/0).reverse());for(let e of n)t.unshift(c(e))}else e!==void 0&&t.push(c(e));return t}static _$Eu(e,t){let n=t.attribute;return!1===n?void 0:typeof n==`string`?n:typeof e==`string`?e.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise(e=>this.enableUpdating=e),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(e=>e(this))}addController(e){(this._$EO??=new Set).add(e),this.renderRoot!==void 0&&this.isConnected&&e.hostConnected?.()}removeController(e){this._$EO?.delete(e)}_$E_(){let e=new Map,t=this.constructor.elementProperties;for(let n of t.keys())this.hasOwnProperty(n)&&(e.set(n,this[n]),delete this[n]);e.size>0&&(this._$Ep=e)}createRenderRoot(){let e=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return s(e,this.constructor.elementStyles),e}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach(e=>e.hostConnected?.())}enableUpdating(e){}disconnectedCallback(){this._$EO?.forEach(e=>e.hostDisconnected?.())}attributeChangedCallback(e,t,n){this._$AK(e,n)}_$ET(e,t){let n=this.constructor.elementProperties.get(e),r=this.constructor._$Eu(e,n);if(r!==void 0&&!0===n.reflect){let i=(n.converter?.toAttribute===void 0?ae:n.converter).toAttribute(t,n.type);this._$Em=e,i==null?this.removeAttribute(r):this.setAttribute(r,i),this._$Em=null}}_$AK(e,t){let n=this.constructor,r=n._$Eh.get(e);if(r!==void 0&&this._$Em!==r){let e=n.getPropertyOptions(r),i=typeof e.converter==`function`?{fromAttribute:e.converter}:e.converter?.fromAttribute===void 0?ae:e.converter;this._$Em=r;let a=i.fromAttribute(t,e.type);this[r]=a??this._$Ej?.get(r)??a,this._$Em=null}}requestUpdate(e,t,n,r=!1,i){if(e!==void 0){let a=this.constructor;if(!1===r&&(i=this[e]),n??=a.getPropertyOptions(e),!((n.hasChanged??oe)(i,t)||n.useDefault&&n.reflect&&i===this._$Ej?.get(e)&&!this.hasAttribute(a._$Eu(e,n))))return;this.C(e,t,n)}!1===this.isUpdatePending&&(this._$ES=this._$EP())}C(e,t,{useDefault:n,reflect:r,wrapped:i},a){n&&!(this._$Ej??=new Map).has(e)&&(this._$Ej.set(e,a??t??this[e]),!0!==i||a!==void 0)||(this._$AL.has(e)||(this.hasUpdated||n||(t=void 0),this._$AL.set(e,t)),!0===r&&this._$Em!==e&&(this._$Eq??=new Set).add(e))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(e){Promise.reject(e)}let e=this.scheduleUpdate();return e!=null&&await e,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(let[e,t]of this._$Ep)this[e]=t;this._$Ep=void 0}let e=this.constructor.elementProperties;if(e.size>0)for(let[t,n]of e){let{wrapped:e}=n,r=this[t];!0!==e||this._$AL.has(t)||r===void 0||this.C(t,void 0,n,r)}}let e=!1,t=this._$AL;try{e=this.shouldUpdate(t),e?(this.willUpdate(t),this._$EO?.forEach(e=>e.hostUpdate?.()),this.update(t)):this._$EM()}catch(t){throw e=!1,this._$EM(),t}e&&this._$AE(t)}willUpdate(e){}_$AE(e){this._$EO?.forEach(e=>e.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(e)),this.updated(e)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(e){return!0}update(e){this._$Eq&&=this._$Eq.forEach(e=>this._$ET(e,this[e])),this._$EM()}updated(e){}firstUpdated(e){}};ce.elementStyles=[],ce.shadowRootOptions={mode:`open`},ce[ie(`elementProperties`)]=new Map,ce[ie(`finalized`)]=new Map,re?.({ReactiveElement:ce}),(ee.reactiveElementVersions??=[]).push(`2.1.2`);var le=globalThis,ue=e=>e,de=le.trustedTypes,fe=de?de.createPolicy(`lit-html`,{createHTML:e=>e}):void 0,pe=`$lit$`,me=`lit$${Math.random().toFixed(9).slice(2)}$`,he=`?`+me,ge=`<${he}>`,_e=document,ve=()=>_e.createComment(``),ye=e=>e===null||typeof e!=`object`&&typeof e!=`function`,be=Array.isArray,xe=e=>be(e)||typeof e?.[Symbol.iterator]==`function`,Se=`[
|
|
3
3
|
\f\r]`,Ce=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,we=/-->/g,Te=/>/g,Ee=RegExp(`>|${Se}(?:([^\\s"'>=/]+)(${Se}*=${Se}*(?:[^ \t\n\f\r"'\`<>=]|("|')|))|$)`,`g`),De=/'/g,Oe=/"/g,ke=/^(?:script|style|textarea|title)$/i,Ae=e=>(t,...n)=>({_$litType$:e,strings:t,values:n}),h=Ae(1),je=Ae(2),Me=Symbol.for(`lit-noChange`),g=Symbol.for(`lit-nothing`),Ne=new WeakMap,Pe=_e.createTreeWalker(_e,129);function Fe(e,t){if(!be(e)||!e.hasOwnProperty(`raw`))throw Error(`invalid template strings array`);return fe===void 0?t:fe.createHTML(t)}var Ie=(e,t)=>{let n=e.length-1,r=[],i,a=t===2?`<svg>`:t===3?`<math>`:``,o=Ce;for(let t=0;t<n;t++){let n=e[t],s,c,l=-1,u=0;for(;u<n.length&&(o.lastIndex=u,c=o.exec(n),c!==null);)u=o.lastIndex,o===Ce?c[1]===`!--`?o=we:c[1]===void 0?c[2]===void 0?c[3]!==void 0&&(o=Ee):(ke.test(c[2])&&(i=RegExp(`</`+c[2],`g`)),o=Ee):o=Te:o===Ee?c[0]===`>`?(o=i??Ce,l=-1):c[1]===void 0?l=-2:(l=o.lastIndex-c[2].length,s=c[1],o=c[3]===void 0?Ee:c[3]===`"`?Oe:De):o===Oe||o===De?o=Ee:o===we||o===Te?o=Ce:(o=Ee,i=void 0);let d=o===Ee&&e[t+1].startsWith(`/>`)?` `:``;a+=o===Ce?n+ge:l>=0?(r.push(s),n.slice(0,l)+pe+n.slice(l)+me+d):n+me+(l===-2?t:d)}return[Fe(e,a+(e[n]||`<?>`)+(t===2?`</svg>`:t===3?`</math>`:``)),r]},Le=class e{constructor({strings:t,_$litType$:n},r){let i;this.parts=[];let a=0,o=0,s=t.length-1,c=this.parts,[l,u]=Ie(t,n);if(this.el=e.createElement(l,r),Pe.currentNode=this.el.content,n===2||n===3){let e=this.el.content.firstChild;e.replaceWith(...e.childNodes)}for(;(i=Pe.nextNode())!==null&&c.length<s;){if(i.nodeType===1){if(i.hasAttributes())for(let e of i.getAttributeNames())if(e.endsWith(pe)){let t=u[o++],n=i.getAttribute(e).split(me),r=/([.?@])?(.*)/.exec(t);c.push({type:1,index:a,name:r[2],strings:n,ctor:r[1]===`.`?He:r[1]===`?`?Ue:r[1]===`@`?We:Ve}),i.removeAttribute(e)}else e.startsWith(me)&&(c.push({type:6,index:a}),i.removeAttribute(e));if(ke.test(i.tagName)){let e=i.textContent.split(me),t=e.length-1;if(t>0){i.textContent=de?de.emptyScript:``;for(let n=0;n<t;n++)i.append(e[n],ve()),Pe.nextNode(),c.push({type:2,index:++a});i.append(e[t],ve())}}}else if(i.nodeType===8)if(i.data===he)c.push({type:2,index:a});else{let e=-1;for(;(e=i.data.indexOf(me,e+1))!==-1;)c.push({type:7,index:a}),e+=me.length-1}a++}}static createElement(e,t){let n=_e.createElement(`template`);return n.innerHTML=e,n}};function Re(e,t,n=e,r){if(t===Me)return t;let i=r===void 0?n._$Cl:n._$Co?.[r],a=ye(t)?void 0:t._$litDirective$;return i?.constructor!==a&&(i?._$AO?.(!1),a===void 0?i=void 0:(i=new a(e),i._$AT(e,n,r)),r===void 0?n._$Cl=i:(n._$Co??=[])[r]=i),i!==void 0&&(t=Re(e,i._$AS(e,t.values),i,r)),t}var ze=class{constructor(e,t){this._$AV=[],this._$AN=void 0,this._$AD=e,this._$AM=t}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(e){let{el:{content:t},parts:n}=this._$AD,r=(e?.creationScope??_e).importNode(t,!0);Pe.currentNode=r;let i=Pe.nextNode(),a=0,o=0,s=n[0];for(;s!==void 0;){if(a===s.index){let t;s.type===2?t=new Be(i,i.nextSibling,this,e):s.type===1?t=new s.ctor(i,s.name,s.strings,this,e):s.type===6&&(t=new Ge(i,this,e)),this._$AV.push(t),s=n[++o]}a!==s?.index&&(i=Pe.nextNode(),a++)}return Pe.currentNode=_e,r}p(e){let t=0;for(let n of this._$AV)n!==void 0&&(n.strings===void 0?n._$AI(e[t]):(n._$AI(e,n,t),t+=n.strings.length-2)),t++}},Be=class e{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(e,t,n,r){this.type=2,this._$AH=g,this._$AN=void 0,this._$AA=e,this._$AB=t,this._$AM=n,this.options=r,this._$Cv=r?.isConnected??!0}get parentNode(){let e=this._$AA.parentNode,t=this._$AM;return t!==void 0&&e?.nodeType===11&&(e=t.parentNode),e}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(e,t=this){e=Re(this,e,t),ye(e)?e===g||e==null||e===``?(this._$AH!==g&&this._$AR(),this._$AH=g):e!==this._$AH&&e!==Me&&this._(e):e._$litType$===void 0?e.nodeType===void 0?xe(e)?this.k(e):this._(e):this.T(e):this.$(e)}O(e){return this._$AA.parentNode.insertBefore(e,this._$AB)}T(e){this._$AH!==e&&(this._$AR(),this._$AH=this.O(e))}_(e){this._$AH!==g&&ye(this._$AH)?this._$AA.nextSibling.data=e:this.T(_e.createTextNode(e)),this._$AH=e}$(e){let{values:t,_$litType$:n}=e,r=typeof n==`number`?this._$AC(e):(n.el===void 0&&(n.el=Le.createElement(Fe(n.h,n.h[0]),this.options)),n);if(this._$AH?._$AD===r)this._$AH.p(t);else{let e=new ze(r,this),n=e.u(this.options);e.p(t),this.T(n),this._$AH=e}}_$AC(e){let t=Ne.get(e.strings);return t===void 0&&Ne.set(e.strings,t=new Le(e)),t}k(t){be(this._$AH)||(this._$AH=[],this._$AR());let n=this._$AH,r,i=0;for(let a of t)i===n.length?n.push(r=new e(this.O(ve()),this.O(ve()),this,this.options)):r=n[i],r._$AI(a),i++;i<n.length&&(this._$AR(r&&r._$AB.nextSibling,i),n.length=i)}_$AR(e=this._$AA.nextSibling,t){for(this._$AP?.(!1,!0,t);e!==this._$AB;){let t=ue(e).nextSibling;ue(e).remove(),e=t}}setConnected(e){this._$AM===void 0&&(this._$Cv=e,this._$AP?.(e))}},Ve=class{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(e,t,n,r,i){this.type=1,this._$AH=g,this._$AN=void 0,this.element=e,this.name=t,this._$AM=r,this.options=i,n.length>2||n[0]!==``||n[1]!==``?(this._$AH=Array(n.length-1).fill(new String),this.strings=n):this._$AH=g}_$AI(e,t=this,n,r){let i=this.strings,a=!1;if(i===void 0)e=Re(this,e,t,0),a=!ye(e)||e!==this._$AH&&e!==Me,a&&(this._$AH=e);else{let r=e,o,s;for(e=i[0],o=0;o<i.length-1;o++)s=Re(this,r[n+o],t,o),s===Me&&(s=this._$AH[o]),a||=!ye(s)||s!==this._$AH[o],s===g?e=g:e!==g&&(e+=(s??``)+i[o+1]),this._$AH[o]=s}a&&!r&&this.j(e)}j(e){e===g?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,e??``)}},He=class extends Ve{constructor(){super(...arguments),this.type=3}j(e){this.element[this.name]=e===g?void 0:e}},Ue=class extends Ve{constructor(){super(...arguments),this.type=4}j(e){this.element.toggleAttribute(this.name,!!e&&e!==g)}},We=class extends Ve{constructor(e,t,n,r,i){super(e,t,n,r,i),this.type=5}_$AI(e,t=this){if((e=Re(this,e,t,0)??g)===Me)return;let n=this._$AH,r=e===g&&n!==g||e.capture!==n.capture||e.once!==n.once||e.passive!==n.passive,i=e!==g&&(n===g||r);r&&this.element.removeEventListener(this.name,this,n),i&&this.element.addEventListener(this.name,this,e),this._$AH=e}handleEvent(e){typeof this._$AH==`function`?this._$AH.call(this.options?.host??this.element,e):this._$AH.handleEvent(e)}},Ge=class{constructor(e,t,n){this.element=e,this.type=6,this._$AN=void 0,this._$AM=t,this.options=n}get _$AU(){return this._$AM._$AU}_$AI(e){Re(this,e)}},Ke={M:pe,P:me,A:he,C:1,L:Ie,R:ze,D:xe,V:Re,I:Be,H:Ve,N:Ue,U:We,B:He,F:Ge},qe=le.litHtmlPolyfillSupport;qe?.(Le,Be),(le.litHtmlVersions??=[]).push(`3.3.3`);var Je=(e,t,n)=>{let r=n?.renderBefore??t,i=r._$litPart$;if(i===void 0){let e=n?.renderBefore??null;r._$litPart$=i=new Be(t.insertBefore(ve(),e),e,void 0,n??{})}return i._$AI(e),i},Ye=globalThis,_=class extends ce{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){let e=super.createRenderRoot();return this.renderOptions.renderBefore??=e.firstChild,e}update(e){let t=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(e),this._$Do=Je(t,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return Me}};_._$litElement$=!0,_.finalized=!0,Ye.litElementHydrateSupport?.({LitElement:_});var Xe=Ye.litElementPolyfillSupport;Xe?.({LitElement:_}),(Ye.litElementVersions??=[]).push(`4.2.2`);function Ze(e,t=$e()){let n=new URL(t.viteBaseUrl,t.documentBaseUrl);return new URL(et(e),n).toString()}function Qe(e,t=$e()){let n=new URL(Ze(e,t));if(n.protocol===`http:`)n.protocol=`ws:`;else if(n.protocol===`https:`)n.protocol=`wss:`;else throw Error(`Cannot create a WebSocket URL from ${n.protocol}`);return n.toString()}function $e(){return{viteBaseUrl:`./`,documentBaseUrl:document.baseURI}}function et(e){return e.startsWith(`/`)?`.${e}`:e}var tt;function nt(e){tt=e}function rt(){let e=tt;if(e!==void 0)try{e()}catch{}}var it=class extends Error{constructor(e,t){super(e),this.status=t,this.name=`HttpError`}};function at(e){return e instanceof it&&e.status===404}async function v(e,t,n){let r=new Headers(n?.headers);n?.body!==void 0&&!r.has(`content-type`)&&r.set(`content-type`,`application/json`);let i=await fetch(Ze(e),{...n,headers:r});if(!i.ok)throw new it(ot(await i.json().catch(()=>({})))??i.statusText,i.status);let a=await i.json();return rt(),t(a)}function ot(e){if(st(e))return typeof e.error==`string`?e.error:void 0}function st(e){return typeof e==`object`&&!!e}var ct={reply:`reply`,reader:`reader`};ct.reader;function lt(e){return{text:e,retiredBy:ct.reply}}function ut(e){return{text:e,retiredBy:ct.reader}}var dt=`The request failed`;function y(e){if(e instanceof it)return e.message===``?`${dt} (${String(e.status)})`:e.message;if(e instanceof Error)return e.message===``?dt:e.message;let t=String(e);return t===``||t.startsWith(`[object`)?dt:t}function ft(e){let t=y(e);return e instanceof it?lt(t):ut(t)}function b(e){let t=ft(e);return{error:t.text,errorRetiredBy:t.retiredBy}}function pt(e){return e.placeholderOutstanding===!0?`replace`:e.lastWriteAt===void 0?`push`:e.now-e.lastWriteAt<400?`replace`:`push`}var mt,ht=!1;function gt(){ht=!0}function _t(){ht=!1}function vt(e,t,n=Date.now()){let r=t?`replace`:pt({lastWriteAt:mt,now:n,placeholderOutstanding:ht});mt=n,ht=!1,r===`replace`?window.history.replaceState({},``,e):window.history.pushState({},``,e)}var yt=1500;function bt(e){if(e.next!==``)return{kind:`show`,text:e.next};if(e.shownAt===void 0)return{kind:`hide`};let t=e.now-e.shownAt;return t>=1500?{kind:`hide`}:{kind:`hold`,retryInMs:yt-t}}function xt(e,t,n){return e.machine===t.machine&&e.project===t.project&&e.workspace===t.workspace&&e.session===t.session&&(e.view??n)===(t.view??n)}var St=[`(display-mode: standalone)`,`(display-mode: fullscreen)`,`(display-mode: minimal-ui)`];function Ct(){return typeof window>`u`||!(`matchMedia`in window)?[]:St.map(e=>window.matchMedia(e))}function wt(e,t=Tt()){return e.some(e=>e.matches)||Et(t)}function Tt(){return typeof navigator>`u`?void 0:navigator}function Et(e){return e!==void 0&&`standalone`in e&&e.standalone===!0}var Dt=class{constructor(e=Ot()){this.scheduler=e}repair(e){if(!e){this.clear();return}this.resetViewportScroll(),this.repairFrame!==void 0&&this.scheduler.cancelAnimationFrame(this.repairFrame),this.repairFrame=this.scheduler.requestAnimationFrame(()=>{this.repairFrame=void 0,this.resetViewportScroll(),this.repairFrame=this.scheduler.requestAnimationFrame(()=>{this.repairFrame=void 0,this.resetViewportScroll()})}),this.repairTimer!==void 0&&this.scheduler.clearTimeout(this.repairTimer),this.repairTimer=this.scheduler.setTimeout(()=>{this.repairTimer=void 0,this.resetViewportScroll()},250)}clear(){this.repairFrame!==void 0&&(this.scheduler.cancelAnimationFrame(this.repairFrame),this.repairFrame=void 0),this.repairTimer!==void 0&&(this.scheduler.clearTimeout(this.repairTimer),this.repairTimer=void 0)}resetViewportScroll(){this.scheduler.scrollTo(0,0);let e=this.scheduler.documentElement;e!==void 0&&(e.scrollTop=0);let t=this.scheduler.body;t!==void 0&&(t.scrollTop=0)}};function Ot(){return{requestAnimationFrame(e){return window.requestAnimationFrame(e)},cancelAnimationFrame(e){window.cancelAnimationFrame(e)},setTimeout(e,t){return window.setTimeout(e,t)},clearTimeout(e){window.clearTimeout(e)},scrollTo(e,t){window.scrollTo(e,t)},get documentElement(){return typeof document>`u`?void 0:document.documentElement},get body(){return typeof document>`u`?void 0:document.body}}}var kt=`(max-width: 760px)`,At=class{constructor(e,t={}){this.host=e,this.onMobileNavigationMediaChange=e=>{this.isMobileNavigationLayout!==e.matches&&(this.isMobileNavigationLayout=e.matches,this.host.requestUpdate())},this.onPwaDisplayModeChange=()=>{let e=wt(this.pwaDisplayModeMedia);this.isPwaDisplayMode!==e&&(this.isPwaDisplayMode=e,this.host.requestUpdate())},e.addController(this),this.mobileNavigationMedia=t.mobileNavigationMedia??jt(),this.pwaDisplayModeMedia=t.pwaDisplayModeMedia??Ct(),this.viewportPositionRepairer=t.viewportPositionRepairer??new Dt,this.isMobileNavigationLayout=this.mobileNavigationMedia?.matches??!1,this.isPwaDisplayMode=wt(this.pwaDisplayModeMedia)}hostConnected(){this.mobileNavigationMedia?.addEventListener(`change`,this.onMobileNavigationMediaChange);for(let e of this.pwaDisplayModeMedia)e.addEventListener(`change`,this.onPwaDisplayModeChange)}hostDisconnected(){this.mobileNavigationMedia?.removeEventListener(`change`,this.onMobileNavigationMediaChange);for(let e of this.pwaDisplayModeMedia)e.removeEventListener(`change`,this.onPwaDisplayModeChange);this.viewportPositionRepairer.clear()}shouldAutoFocusPrompt(){return!this.isMobileNavigationLayout&&!this.isPwaDisplayMode}shouldShowAppRefreshInHeader(){return this.isPwaDisplayMode&&!this.isMobileNavigationLayout}shouldShowAppRefreshInContextBar(){return this.isPwaDisplayMode&&this.isMobileNavigationLayout}defaultRouteView(e={}){return Mt(this.isMobileNavigationLayout,e)}repairViewportPosition(){this.viewportPositionRepairer.repair(this.shouldRepairViewportPosition())}shouldRepairViewportPosition(){return this.isMobileNavigationLayout||this.isPwaDisplayMode}};function jt(){if(!(typeof window>`u`||!(`matchMedia`in window)))return window.matchMedia(kt)}function Mt(e,t){return e&&(t.sessionId??``)===``?`navigation`:`chat`}function Nt(e){return!e.touchPrimary&&!e.modalOpen}var Pt=new Set([`text`,`search`,`email`,`url`,`tel`,`password`,`number`,void 0]);function Ft(e){if(e===void 0)return!1;if(e.isContentEditable===!0)return!0;let t=e.tagName.toUpperCase();return t===`TEXTAREA`||t===`INPUT`&&Pt.has(e.type)}function It(e=document){let t=e.activeElement;t!==null&&Ft({tagName:t.tagName,...t instanceof HTMLInputElement?{type:t.type}:{},...t instanceof HTMLElement?{isContentEditable:t.isContentEditable}:{}})&&t instanceof HTMLElement&&t.blur()}function Lt(e){return e.touchPrimary?void 0:`input`}function Rt(e=window){return typeof e.matchMedia==`function`&&e.matchMedia(`(pointer: coarse)`).matches}var x=e=>(t,n)=>{n===void 0?customElements.define(e,t):n.addInitializer(()=>{customElements.define(e,t)})},zt={attribute:!0,type:String,converter:ae,reflect:!1,hasChanged:oe},Bt=(e=zt,t,n)=>{let{kind:r,metadata:i}=n,a=globalThis.litPropertyMetadata.get(i);if(a===void 0&&globalThis.litPropertyMetadata.set(i,a=new Map),r===`setter`&&((e=Object.create(e)).wrapped=!0),a.set(n.name,e),r===`accessor`){let{name:r}=n;return{set(n){let i=t.get.call(this);t.set.call(this,n),this.requestUpdate(r,i,e,!0,n)},init(t){return t!==void 0&&this.C(r,void 0,e,t),t}}}if(r===`setter`){let{name:r}=n;return function(n){let i=this[r];t.call(this,n),this.requestUpdate(r,i,e,!0,n)}}throw Error(`Unsupported decorator location: `+r)};function S(e){return(t,n)=>typeof n==`object`?Bt(e,t,n):((e,t,n)=>{let r=t.hasOwnProperty(n);return t.constructor.createProperty(n,e),r?Object.getOwnPropertyDescriptor(t,n):void 0})(e,t,n)}function C(e){return S({...e,state:!0,attribute:!1})}var Vt=(e,t,n)=>(n.configurable=!0,n.enumerable=!0,Reflect.decorate&&typeof t!=`object`&&Object.defineProperty(e,t,n),n);function w(e,t){return(n,r,i)=>{let a=t=>t.renderRoot?.querySelector(e)??null;if(t){let{get:e,set:t}=typeof r==`object`?n:i??(()=>{let e=Symbol();return{get(){return this[e]},set(t){this[e]=t}}})();return Vt(n,r,{get(){let n=e.call(this);return n===void 0&&(n=a(this),(n!==null||this.hasUpdated)&&t.call(this,n)),n}})}return Vt(n,r,{get(){return a(this)}})}}var Ht={pluginLifecycle:`plugins.lifecycle`},Ut=1e3,Wt=32*1024,Gt=8*1024,Kt=1e3,qt=4e3,Jt=1e3,Yt=8e3,Xt=4e3,Zt=1e4,Qt={working:`core:working`,terminal:`core:terminal`,unread:`core:unread`};function $t(e){if(!nn(e))return;let t=e.epochId,n=e.revision,r=e.generatedAt,i=en(e.machine),a=en(e.unattributed),o=tn(e.projects),s=tn(e.workspaces);if(!(typeof t!=`string`||t===``)&&!(typeof n!=`number`||!Number.isFinite(n))&&!(typeof r!=`string`||r===``)&&!(i===void 0||a===void 0)&&!(o===void 0||s===void 0))return{epochId:t,revision:n,machine:i,projects:o,workspaces:s,unattributed:a,generatedAt:r}}function en(e){if(!nn(e))return;let t=new Map;for(let[n,r]of Object.entries(e))typeof r==`boolean`&&t.set(n,r);return Object.fromEntries(t)}function tn(e){if(!nn(e))return;let t=new Map;for(let[n,r]of Object.entries(e)){let e=en(r);e!==void 0&&t.set(n,e)}return Object.fromEntries(t)}function nn(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}var rn=Object.values(Ht),an=new Set(rn);Ht.pluginLifecycle,Ht.pluginLifecycle;function on(e){return typeof e==`string`&&an.has(e)}function sn(e,t){return e?.capabilities?.includes(t)===!0}function cn(e){if(!(!Array.isArray(e)||!e.every(e=>typeof e==`string`)))return e.filter(on)}function ln(e){if(!Array.isArray(e))return;let t=[];for(let n of e){if(!un(n))continue;let e=n.source,r=n.name,i=n.replacement;e!==`environment`&&e!==`config`||typeof r!=`string`||r===``||i!==void 0&&(typeof i!=`string`||i===``)||t.push({source:e,name:r,...i===void 0?{}:{replacement:i}})}return t}function un(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}var dn=/^[a-z][a-z0-9.-]*$/u,fn=new Set([`core`,`themes`]),pn=`machine.`;function mn(e){return dn.test(e)}function hn(e){return fn.has(e)||e.startsWith(pn)}var gn=Object.freeze({showSafeStart:`pi-web plugins safe-start show`,bundledOnly:`pi-web plugins safe-start set bundled-only --restart`,noServerPlugins:`pi-web plugins safe-start set none --restart`,clearSafeStart:`pi-web plugins safe-start clear --restart`});function _n(e){if(!mn(e))throw Error(`Invalid PI WEB plugin id: ${e}`);return`pi-web plugins disable ${e} --restart`}function T(e){return typeof e==`object`&&!!e}function E(e){if(!T(e))throw Error(`Expected object response`);return e}function D(e,t){let n=e[t];if(typeof n!=`string`)throw Error(`Expected string field: ${t}`);return n}function O(e,t){let n=e[t];if(n!==void 0){if(typeof n!=`string`)throw Error(`Expected optional string field: ${t}`);return n}}function k(e,t){let n=e[t];if(typeof n!=`number`)throw Error(`Expected number field: ${t}`);return n}function A(e,t){let n=e[t];if(typeof n!=`boolean`)throw Error(`Expected boolean field: ${t}`);return n}function j(e){return t=>{if(!Array.isArray(t))throw Error(`Expected array response`);return t.map(e)}}function vn(e){if(!Array.isArray(e))throw Error(`Expected array response`);return e}function yn(e,t){if(!Array.isArray(e)||!e.every(e=>typeof e==`string`))throw Error(`Expected string array field: ${t}`);return e}function bn(e){let t=E(e);return{messages:vn(t.messages),start:k(t,`start`),total:k(t,`total`)}}function xn(e){let t=E(e);return j(Sn)(t.machines)}function Sn(e){let t=E(e),n=En(t,`kind`),r=O(t,`baseUrl`),i=Dn(t,`status`),a=O(t,`statusMessage`);return{id:D(t,`id`),name:D(t,`name`),kind:n,...r===void 0?{}:{baseUrl:r},createdAt:D(t,`createdAt`),updatedAt:D(t,`updatedAt`),...i===void 0?{}:{status:i},...a===void 0?{}:{statusMessage:a}}}function Cn(e){let t=E(e),n=Dn(t,`status`),r=O(t,`error`);return{machineId:D(t,`machineId`),ok:A(t,`ok`),checkedAt:D(t,`checkedAt`),...n===void 0?{}:{status:n},...t.web===void 0?{}:{web:Ra(t.web)},...t.sessiond===void 0?{}:{sessiond:Ra(t.sessiond)},...r===void 0?{}:{error:r}}}function wn(e){let t=E(e),n=O(t,`error`);return{machineId:D(t,`machineId`),ok:A(t,`ok`),checkedAt:D(t,`checkedAt`),...N(`packageName`,O(t,`packageName`)),...N(`generatedAt`,O(t,`generatedAt`)),...t.components===void 0?{}:{components:Ia(t.components)},...t.capabilities===void 0?{}:{capabilities:Wa(t.capabilities)},...t.deprecatedAgentInputs===void 0?{}:{deprecatedAgentInputs:Tn(t.deprecatedAgentInputs)},...n===void 0?{}:{error:n}}}function Tn(e){let t=ln(e);if(t===void 0)throw Error(`Invalid PI WEB deprecated agent inputs`);return t}function En(e,t){let n=D(e,t);if(n!==`local`&&n!==`remote`)throw Error(`Expected machine kind field: ${t}`);return n}function Dn(e,t){let n=O(e,t);if(n!==void 0){if(n!==`unknown`&&n!==`online`&&n!==`offline`&&n!==`error`)throw Error(`Expected machine status field: ${t}`);return n}}function On(e){let t=E(e);return{id:D(t,`id`),name:D(t,`name`),path:D(t,`path`),createdAt:D(t,`createdAt`)}}function kn(e){let t=E(e);return Object.freeze({id:D(t,`id`),projectId:D(t,`projectId`),path:D(t,`path`),label:D(t,`label`),isMain:A(t,`isMain`),...N(`provider`,Fn(t.provider)),...N(`removal`,In(t.removal)),effectiveConfig:zn(t.effectiveConfig)})}function An(e){let t=E(e),n=jn(t.status),r=D(t,`projectId`),i=O(t,`ownerPluginId`);if(n===`provider`&&i===void 0)throw Error(`Provider workspace resolution is missing ownerPluginId`);if(n===`folder`&&i!==void 0)throw Error(`Folder workspace resolution must not include ownerPluginId`);let a=j(kn)(t.workspaces);if(a.length===0||a.some(e=>e.projectId!==r))throw Error(`Workspace resolution contains invalid project workspaces`);let o=j(Mn)(t.diagnostics);return Object.freeze({status:n,projectId:r,...i===void 0?{}:{ownerPluginId:i},workspaces:Object.freeze(a),diagnostics:Object.freeze(o)})}function jn(e){if(e===`provider`||e===`folder`||e===`degraded`)return e;throw Error(`Invalid workspace provider resolution status`)}function Mn(e){let t=E(e),n=O(t,`pluginId`),r=t.pluginIds===void 0?void 0:yn(t.pluginIds,`pluginIds`);return Object.freeze({code:Nn(t.code),message:D(t,`message`),tier:Pn(t.tier),...n===void 0?{}:{pluginId:n},...r===void 0?{}:{pluginIds:Object.freeze(r)}})}function Nn(e){if(e===`probe-failed`||e===`claim-conflict`||e===`list-failed`)return e;throw Error(`Invalid workspace provider diagnostic code`)}function Pn(e){if(e===`primary`||e===`fallback`)return e;throw Error(`Invalid workspace provider diagnostic tier`)}function Fn(e){if(e===void 0)return;if(!T(e)||Array.isArray(e))throw Error(`Invalid workspace provider field`);let t=e.capabilities;if(!T(t)||Array.isArray(t))throw Error(`Invalid workspace provider capabilities field`);let n=e.metadata;return Object.freeze({pluginId:D(e,`pluginId`),capabilities:Object.freeze({request:A(t,`request`),remove:A(t,`remove`)}),...N(`metadata`,n===void 0?void 0:Ln(n,`workspace provider metadata`))})}function In(e){if(e!==void 0){if(!T(e)||Array.isArray(e))throw Error(`Invalid workspace removal field`);return Object.freeze({actionLabel:M(e,`actionLabel`),confirmation:M(e,`confirmation`),precondition:M(e,`precondition`)})}}function Ln(e,t){if(!T(e)||Array.isArray(e))throw Error(`Invalid ${t} field`);return Object.freeze(Object.fromEntries(Object.entries(e).map(([e,n])=>[e,Rn(n,t)])))}function Rn(e,t){if(e===null||typeof e==`string`||typeof e==`boolean`||typeof e==`number`&&Number.isFinite(e))return e;if(Array.isArray(e))return Object.freeze(e.map(e=>Rn(e,t)));if(T(e))return Ln(e,t);throw Error(`Invalid ${t} field`)}function zn(e){if(!T(e)||Array.isArray(e))throw Error(`Expected workspace effectiveConfig field`);let t=fa(e.uploads);return Object.freeze({...N(`uploads`,t===void 0?void 0:Object.freeze({...t}))})}function Bn(e){let t=E(e),n=O(t,`name`),r=Ma(t.persisted,`persisted`),i=O(t,`parentSessionPath`),a=O(t,`archivedAt`);return{id:D(t,`id`),path:D(t,`path`),cwd:D(t,`cwd`),...r===void 0?{}:{persisted:r},...n===void 0?{}:{name:n},created:D(t,`created`),modified:D(t,`modified`),messageCount:k(t,`messageCount`),firstMessage:D(t,`firstMessage`),...i===void 0?{}:{parentSessionPath:i},...t.archived===!0?{archived:!0}:{},...a===void 0?{}:{archivedAt:a}}}function Vn(e){if(e!==`info`&&e!==`warning`&&e!==`error`)throw Error(`Invalid session warning severity`);return e}function Hn(e){if(e!==void 0)return{id:D(E(e),`id`)}}function Un(e){let t=E(e),n=Hn(t.dismiss);return{severity:Vn(t.severity),message:D(t,`message`),...N(`source`,O(t,`source`)),...N(`path`,O(t,`path`)),...n===void 0?{}:{dismiss:n}}}function Wn(e){return e===void 0?{}:{warnings:j(Un)(e)}}function Gn(e){let t=E(e);return{value:Lr(t,`value`,128),label:Lr(t,`label`,Kt),...N(`detail`,Rr(t,`detail`,Kt))}}function Kn(e){let t=E(e),n=Xr(t.options,Gn,12,`options`);rr(n.map(e=>e.value),`ask option value`);let r=Ma(t.multiple,`multiple`);return{id:Lr(t,`id`,128),question:Lr(t,`question`,Kt),...N(`detail`,Rr(t,`detail`,Kt)),options:n,...r===void 0?{}:{multiple:r}}}function qn(e){let t=E(e),n=Xr(t.questions,Kn,20,`questions`);if(n.length===0)throw Error(`Pending ask has no questions`);return rr(n.map(e=>e.id),`ask question id`),{askId:Lr(t,`askId`,128),askedAt:M(t,`askedAt`),questions:n}}function Jn(e){return e===void 0?{}:{pendingAsk:qn(e)}}function Yn(e){let t=E(e);if(t.type!==`ask.opened`)throw Error(`Invalid ask opened event type`);return{type:`ask.opened`,ask:qn(t.ask),...Zn(t)}}function Xn(e){let t=E(e);if(t.type!==`ask.closed`)throw Error(`Invalid ask closed event type`);return{type:`ask.closed`,askId:Lr(t,`askId`,128),reason:Qn(t.reason),...Zn(t)}}function Zn(e){let t=e.revision,n=e.daemonInstanceId;return{...typeof t==`number`&&Number.isFinite(t)?{revision:t}:{},...typeof n==`string`&&n!==``?{daemonInstanceId:n}:{}}}function Qn(e){if(e!==`submitted`&&e!==`superseded`&&e!==`cancelled`)throw Error(`Invalid ask close reason`);return e}function $n(e){let t=E(e),n=Kn(t.question),r=Xr(t.values,Zr,12,`values`),i=new Set(n.options.map(e=>e.value));if(r.some(e=>!i.has(e)))throw Error(`Ask answer selected an option the question never offered`);let a=Rr(t,`otherText`,qt),o=A(t,`answered`);if(o!==(r.length>0||a!==void 0))throw Error(`Ask answer contradicts its answered flag`);return{question:n,answered:o,values:r,...a===void 0?{}:{otherText:a}}}function er(e){let t=E(e),n=Xr(t.questions,$n,20,`questions`),r=Qr(t,`answeredCount`),i=yn(t.unansweredIds,`unansweredIds`),a=n.filter(e=>!e.answered).map(e=>e.question.id);if(r!==n.length-a.length)throw Error(`Ask outcome answered count mismatch`);if(i.length!==a.length||i.some((e,t)=>e!==a[t]))throw Error(`Ask outcome unanswered ids mismatch`);let o=t.cause===`user-message`?`user-message`:void 0;return{askId:Lr(t,`askId`,128),reason:Qn(t.reason),...o===void 0?{}:{cause:o},askedAt:M(t,`askedAt`),closedAt:M(t,`closedAt`),questions:n,answeredCount:r,unansweredIds:i,summary:M(t,`summary`)}}function tr(e){let t=E(e),n=t.result;if(n!==`closed`&&n!==`stale`)throw Error(`Invalid ask close result`);let r=t.outcome===void 0?void 0:er(t.outcome);if(n===`closed`!=(r!==void 0))throw Error(`Ask close response outcome mismatch`);return{result:n,...r===void 0?{}:{outcome:r},sessionStatus:mr(t.sessionStatus)}}function nr(e){let t=E(e),n=t.result;if(n!==`closed`&&n!==`stale`)throw Error(`Invalid dialog close result`);let r=t.outcome===void 0?void 0:fr(t.outcome);if(n===`closed`!=(r!==void 0))throw Error(`Dialog close response outcome mismatch`);return{result:n,...r===void 0?{}:{outcome:r},sessionStatus:mr(t.sessionStatus)}}function rr(e,t){if(new Set(e).size!==e.length)throw Error(`Duplicate ${t}`)}function ir(e){if(e!==`confirm`&&e!==`select`&&e!==`input`)throw Error(`Invalid extension dialog kind`);return e}function ar(e){if(e!==`answered`&&e!==`cancelled`&&e!==`timeout`&&e!==`aborted`&&e!==`session-ended`)throw Error(`Invalid extension dialog close reason`);return e}function or(e){if(typeof e==`boolean`||typeof e==`string`&&e.length<=4e3)return e;throw Error(`Invalid extension dialog answer`)}function sr(e){let t=Zr(e);if(t.length>1e3)throw Error(`String field exceeds limit: option`);return t}function cr(e){let t=E(e),n=ir(t.kind),r=t.options===void 0?void 0:Xr(t.options,sr,24,`options`);if(r!==void 0&&rr(r,`dialog option`),n===`select`&&(r===void 0||r.length===0))throw Error(`Select dialog has no options`);return{dialogId:Lr(t,`dialogId`,128),kind:n,title:Lr(t,`title`,Yt),...N(`message`,Rr(t,`message`,Yt)),...r===void 0?{}:{options:r},...N(`placeholder`,Rr(t,`placeholder`,Jt)),askedAt:M(t,`askedAt`),...N(`timeoutAt`,pr(t,`timeoutAt`)),runScoped:A(t,`runScoped`)}}function lr(e){if(e===void 0)return{};let t=j(cr)(e);return rr(t.map(e=>e.dialogId),`dialog id`),{pendingDialogs:t}}function ur(e){let t=E(e);if(t.type!==`dialog.opened`)throw Error(`Invalid dialog opened event type`);return{type:`dialog.opened`,dialog:cr(t.dialog),...Zn(t)}}function dr(e){let t=E(e);if(t.type!==`dialog.closed`)throw Error(`Invalid dialog closed event type`);let n=ar(t.reason),r=t.answer===void 0?void 0:or(t.answer);if(n===`answered`!=(r!==void 0))throw Error(`Dialog closed event answer mismatch`);return{type:`dialog.closed`,dialogId:Lr(t,`dialogId`,128),reason:n,...r===void 0?{}:{answer:r},...Zn(t)}}function fr(e){let t=E(e),n=ar(t.reason),r=t.answer===void 0?void 0:or(t.answer);if(n===`answered`!=(r!==void 0))throw Error(`Dialog outcome answer mismatch`);return{dialogId:Lr(t,`dialogId`,128),reason:n,...r===void 0?{}:{answer:r},askedAt:M(t,`askedAt`),closedAt:M(t,`closedAt`)}}function pr(e,t){let n=O(e,t);if(n!==void 0){if(n===``)throw Error(`Expected non-empty string field: ${t}`);return n}}function mr(e){let t=E(e);return{sessionId:D(t,`sessionId`),...N(`persisted`,Ma(t.persisted,`persisted`)),isStreaming:A(t,`isStreaming`),isCompacting:A(t,`isCompacting`),isBashRunning:A(t,`isBashRunning`),pendingMessageCount:k(t,`pendingMessageCount`),...N(`backgroundRunCount`,go(t,`backgroundRunCount`)),queuedMessages:t.queuedMessages===void 0?[]:j(di)(t.queuedMessages),...N(`messageCount`,go(t,`messageCount`)),tokens:fi(t.tokens),cost:k(t,`cost`),...mi(t.model),...Pi(t.contextUsage),...N(`thinkingLevel`,O(t,`thinkingLevel`)),...Wn(t.warnings),...Jn(t.pendingAsk),...lr(t.pendingDialogs)}}function hr(e){let t=E(e);return{seq:k(t,`seq`),partial:t.partial??null}}function gr(e){let t=E(e),n=t.kind;if(n===`replay`){let e=t.frames;if(!Array.isArray(e)||e.some(e=>typeof e!=`string`))throw Error(`Invalid stream sync frames`);return{kind:n,sinceSeq:k(t,`sinceSeq`),frames:e.map(e=>String(e))}}if(n===`resync`)return{kind:n,sinceSeq:k(t,`sinceSeq`)};if(n===`snapshot`)return{kind:n,seq:k(t,`seq`),partial:t.partial??null};throw Error(`Invalid stream sync kind`)}function _r(e){let t=E(e),n=t.subtasks===void 0?[]:j(_r)(t.subtasks);return{id:D(t,`id`),title:D(t,`title`),status:D(t,`status`),...N(`verificationContract`,O(t,`verificationContract`)),...n.length===0?{}:{subtasks:n}}}function vr(e){let t=E(e);return{id:D(t,`id`),objective:D(t,`objective`),status:D(t,`status`),path:D(t,`path`),sisyphus:A(t,`sisyphus`),autoContinue:A(t,`autoContinue`),...N(`createdAt`,O(t,`createdAt`)),...N(`updatedAt`,O(t,`updatedAt`)),...N(`currentTaskId`,O(t,`currentTaskId`)),...N(`stopReason`,O(t,`stopReason`)),...N(`pauseReason`,O(t,`pauseReason`)),...N(`verificationContract`,O(t,`verificationContract`)),...N(`tokensUsed`,go(t,`tokensUsed`)),...N(`activeSeconds`,go(t,`activeSeconds`)),tasks:j(_r)(t.tasks),completedTaskCount:k(t,`completedTaskCount`),totalTaskCount:k(t,`totalTaskCount`),...N(`sourceRoot`,O(t,`sourceRoot`))}}function yr(e){let t=E(e);return{goals:j(vr)(t.goals),directory:D(t,`directory`),generatedAt:D(t,`generatedAt`)}}function br(e){let t=E(e),n=j(mr)(t.statuses),r=new Set;for(let e of n){if(r.has(e.sessionId))throw Error(`Duplicate session status in catalog`);r.add(e.sessionId)}let i=pr(t,`daemonInstanceId`);return{statuses:n,generatedAt:D(t,`generatedAt`),...i===void 0?{}:{daemonInstanceId:i}}}function xr(e){let t=E(e),n=Qr(t,`catalogRevision`),r=Xr(t.sessions,Pr,Ut,`sessions`);if(Fr(r),Ir(r),r.some(e=>e.completionOrder>n))throw Error(`Session unread completion order exceeds catalog revision`);return{catalogId:Lr(t,`catalogId`,512),catalogRevision:n,sessions:r}}function Sr(e){let t=xr(e),n=E(e).outcome;if(n===void 0)return t;if(n!==`acknowledged`&&n!==`superseded`&&n!==`stale-epoch`)throw Error(`Invalid session unread acknowledge outcome`);return{...t,outcome:n}}function Cr(e){let t=E(e);if(t.type!==`sessions.unread`)throw Error(`Invalid session unread event type`);let n=Lr(t,`sessionId`,512),r=Lr(t,`cwd`,Wt),i=zr(t,`catalogRevision`),a=t.unread===null?null:Pr(t.unread);if(a!==null&&(a.sessionId!==n||a.cwd!==r))throw Error(`Session unread event identity mismatch`);if(a!==null&&a.completionOrder>i)throw Error(`Session unread completion order exceeds catalog revision`);return{type:`sessions.unread`,catalogId:Lr(t,`catalogId`,512),catalogRevision:i,sessionId:n,cwd:r,unread:a}}function wr(e){let t=E(e);if(t.type!==`session.startup`)throw Error(`Invalid session startup event type`);let n=O(t,`startupToken`);if(n===``)throw Error(`Expected non-empty string field: startupToken`);return{type:`session.startup`,...N(`startupToken`,n),activity:Tr(t.activity)}}function Tr(e){let t=E(e);return{sessionId:M(t,`sessionId`),phase:Dr(t,`phase`),label:M(t,`label`),...N(`detail`,O(t,`detail`)),at:M(t,`at`),...N(`startup`,Er(t))}}function Er(e){let t=e.startup;if(t!==void 0){if(typeof t!=`boolean`)throw Error(`Expected optional boolean field: startup`);return t}}function Dr(e,t){let n=D(e,t);if(n!==`active`&&n!==`idle`&&n!==`error`)throw Error(`Expected session activity phase field: ${t}`);return n}function Or(e){let t=E(e);switch(t.type){case`message.append`:return{type:`message.append`,message:Ar(t,`message`),...N(`clientMessageId`,O(t,`clientMessageId`)),...t.echo===!0?{echo:!0}:{}};case`assistant.delta`:return{type:`assistant.delta`,text:D(t,`text`)};case`assistant.thinking.delta`:return{type:`assistant.thinking.delta`,text:D(t,`text`)};case`tool.start`:return{type:`tool.start`,toolName:D(t,`toolName`),toolCallId:D(t,`toolCallId`),summary:D(t,`summary`),...N(`args`,t.args)};case`tool.update`:return{type:`tool.update`,toolName:D(t,`toolName`),toolCallId:D(t,`toolCallId`),text:D(t,`text`),...N(`content`,t.content),...N(`details`,t.details)};case`tool.end`:return{type:`tool.end`,toolName:D(t,`toolName`),toolCallId:D(t,`toolCallId`),text:D(t,`text`),isError:A(t,`isError`),...N(`content`,t.content),...N(`details`,t.details)};case`shell.start`:return{type:`shell.start`,command:D(t,`command`),...N(`excludeFromContext`,Ma(t.excludeFromContext,`excludeFromContext`))};case`shell.chunk`:return{type:`shell.chunk`,chunk:D(t,`chunk`)};case`shell.end`:return{type:`shell.end`,...N(`output`,O(t,`output`)),...N(`exitCode`,jr(t,`exitCode`)),...N(`cancelled`,Ma(t.cancelled,`cancelled`)),...N(`truncated`,Ma(t.truncated,`truncated`)),...N(`fullOutputPath`,O(t,`fullOutputPath`)),...N(`isError`,Ma(t.isError,`isError`))};case`agent.start`:return{type:`agent.start`};case`agent.end`:return{type:`agent.end`};case`message.end`:return{type:`message.end`,...N(`message`,t.message)};case`status.update`:return{type:`status.update`,status:mr(t.status)};case`activity.update`:return{type:`activity.update`,activity:Tr(t.activity)};case`command.output`:return Mr(t);case`session.error`:return{type:`session.error`,message:D(t,`message`)};case`session.name`:return Nr(t);case`session.created`:return{type:`session.created`,session:Bn(t.session)};case`pi.event`:return{type:`pi.event`,eventType:D(t,`eventType`)};case`prompt.accepted`:return{type:`prompt.accepted`,clientMessageId:D(t,`clientMessageId`)};default:throw Error(`Unsupported session stream event type`)}}function kr(e){let t=E(e);switch(t.type){case`status.update`:return{type:`status.update`,status:mr(t.status)};case`activity.update`:return{type:`activity.update`,activity:Tr(t.activity)};case`session.name`:return Nr(t);case`session.created`:return{type:`session.created`,session:Bn(t.session)};case`terminal.created`:return{type:`terminal.created`,terminal:Gi(t.terminal)};case`terminal.exited`:return{type:`terminal.exited`,terminal:Gi(t.terminal)};case`terminal.closed`:return{type:`terminal.closed`,terminalId:M(t,`terminalId`),cwd:M(t,`cwd`)};case`machine.status`:return{type:`machine.status`,status:Yi(t.status)};default:throw Error(`Unsupported realtime stream event type`)}}function Ar(e,t){let n=e[t];if(n===void 0)throw Error(`Expected field: ${t}`);return n}function jr(e,t){let n=e[t];if(n!==void 0){if(n===null)return null;if(typeof n!=`number`)throw Error(`Expected optional number|null field: ${t}`);return n}}function Mr(e){let t=D(e,`level`);if(t!==`info`&&t!==`success`&&t!==`error`)throw Error(`Invalid command output level`);return{type:`command.output`,level:t,message:D(e,`message`)}}function Nr(e){return{type:`session.name`,sessionId:M(e,`sessionId`),...N(`name`,O(e,`name`))}}function Pr(e){let t=E(e),n=Lr(t,`completedAt`,64),r=new Date(n);if(!Number.isFinite(r.getTime())||r.toISOString()!==n)throw Error(`Invalid canonical session unread completion time`);return{sessionId:Lr(t,`sessionId`,512),cwd:Lr(t,`cwd`,Wt),completionOrder:zr(t,`completionOrder`),completedAt:n}}function Fr(e){let t=e.map(e=>JSON.stringify([e.sessionId,e.cwd]));if(new Set(t).size!==t.length)throw Error(`Duplicate session unread identity`);let n=e.map(e=>e.completionOrder);if(new Set(n).size!==n.length)throw Error(`Duplicate session unread completion order`)}function Ir(e){for(let t=1;t<e.length;t+=1){let n=e[t-1],r=e[t];if(n===void 0||r===void 0||n.completionOrder<=r.completionOrder)throw Error(`Session unread summaries are not newest-first`)}}function Lr(e,t,n){let r=M(e,t);if(r.length>n)throw Error(`String field exceeds limit: ${t}`);return r}function Rr(e,t,n){let r=O(e,t);if(r!==void 0){if(r===``)throw Error(`Expected non-empty string field: ${t}`);if(r.length>n)throw Error(`String field exceeds limit: ${t}`);return r}}function zr(e,t){let n=Qr(e,t);if(n===0)throw Error(`Expected positive safe integer field: ${t}`);return n}function Br(e){let t=E(e),n=Ur(t.summary),r=Xr(t.notifications,Wr,100,`notifications`);if($r(r),ei(r),n.retainedCount!==r.length)throw Error(`Notification snapshot retained count mismatch`);if(n.highestSeverity!==ni(r))throw Error(`Notification snapshot severity mismatch`);let i=Gr(t.dismissThrough),a=r[0]?.order??0;if(i.order!==a)throw Error(`Notification snapshot dismiss cutoff mismatch`);if(i.overflowWatermark<n.discardedCount)throw Error(`Notification snapshot overflow cutoff mismatch`);return{daemonInstanceId:M(t,`daemonInstanceId`),catalogRevision:Qr(t,`catalogRevision`),summary:n,notifications:r,dismissThrough:i}}function Vr(e){let t=Br(e),n=E(e).outcome;if(n===void 0)return t;if(n!==`dismissed`&&n!==`stale-instance`)throw Error(`Invalid session notification dismiss outcome`);return{...t,outcome:n}}function Hr(e){let t=E(e);if(t.type!==`notifications.inbox`)throw Error(`Invalid notification inbox event type`);let n=Ur(t.summary),r=Gr(t.dismissThrough);if(r.overflowWatermark<n.discardedCount)throw Error(`Notification event overflow cutoff mismatch`);let i=Kr(t.delta);if(i.kind===`cleared`&&!ti(n))throw Error(`Notification clear event summary mismatch`);if(i.kind===`added`&&n.retainedCount===0)throw Error(`Notification add event summary mismatch`);return{type:`notifications.inbox`,daemonInstanceId:M(t,`daemonInstanceId`),catalogRevision:Qr(t,`catalogRevision`),summary:n,dismissThrough:r,delta:i}}function Ur(e){let t=E(e),n=Qr(t,`retainedCount`);if(n>100)throw Error(`Notification retained count exceeds limit`);let r=Qr(t,`discardedCount`),i=Jr(t.highestSeverity);if(n===0!=(i===void 0))throw Error(`Notification summary severity mismatch`);return{sessionId:M(t,`sessionId`),cwd:M(t,`cwd`),inboxRevision:Qr(t,`inboxRevision`),retainedCount:n,discardedCount:r,...i===void 0?{}:{highestSeverity:i}}}function Wr(e){let t=E(e),n=D(t,`message`);if(new TextEncoder().encode(n).byteLength>8192)throw Error(`Notification message exceeds byte limit`);let r=D(t,`receivedAt`);if(!Number.isFinite(Date.parse(r)))throw Error(`Invalid notification receive time`);let i=Qr(t,`order`);if(i===0)throw Error(`Invalid notification order`);let a=t.warningDismiss,o=T(a)?a.id:void 0;return{id:M(t,`id`),message:n,truncated:A(t,`truncated`),severity:qr(t.severity),receivedAt:r,order:i,...typeof o==`string`&&o!==``?{warningDismiss:{id:o}}:{}}}function Gr(e){let t=E(e);return{order:Qr(t,`order`),overflowWatermark:Qr(t,`overflowWatermark`)}}function Kr(e){let t=E(e);switch(t.kind){case`added`:{let e=O(t,`evictedNotificationId`);return{kind:`added`,notification:Wr(t.notification),...e===void 0?{}:{evictedNotificationId:e}}}case`dismissed`:{let e=Xr(t.notificationIds,Zr,100,`notificationIds`);if(new Set(e).size!==e.length)throw Error(`Duplicate dismissed notification id`);return{kind:`dismissed`,notificationIds:e}}case`cleared`:return{kind:`cleared`,reason:Yr(t.reason)};case`resync`:return{kind:`resync`};default:throw Error(`Invalid notification inbox delta`)}}function qr(e){if(e!==`info`&&e!==`warning`&&e!==`error`)throw Error(`Invalid notification severity`);return e}function Jr(e){return e===void 0?void 0:qr(e)}function Yr(e){switch(e){case`runtime-close`:case`archive`:case`delete`:case`restore`:case`archive-reconcile`:case`replacement`:case`initialization-failed`:case`service-dispose`:return e;default:throw Error(`Invalid notification clear reason`)}}function Xr(e,t,n,r){if(!Array.isArray(e))throw Error(`Expected array field: ${r}`);if(e.length>n)throw Error(`Array field exceeds limit: ${r}`);return e.map(t)}function Zr(e){if(typeof e!=`string`||e===``)throw Error(`Expected non-empty string`);return e}function M(e,t){let n=D(e,t);if(n===``)throw Error(`Expected non-empty string field: ${t}`);return n}function Qr(e,t){let n=e[t];if(typeof n!=`number`||!Number.isSafeInteger(n)||n<0)throw Error(`Expected non-negative safe integer field: ${t}`);return n}function $r(e){if(new Set(e.map(e=>e.id)).size!==e.length)throw Error(`Duplicate notification id`);if(new Set(e.map(e=>e.order)).size!==e.length)throw Error(`Duplicate notification order`)}function ei(e){for(let t=1;t<e.length;t+=1){let n=e[t-1],r=e[t];if(n===void 0||r===void 0||n.order<=r.order)throw Error(`Notifications are not newest-first`)}}function ti(e){return e.retainedCount===0&&e.discardedCount===0}function ni(e){let t;for(let n of e){if(n.severity===`error`)return`error`;n.severity===`warning`?t=`warning`:t??=`info`}return t}function ri(e){let t=E(e),n=t.skippedBusySessionIds===void 0?void 0:yn(t.skippedBusySessionIds,`skippedBusySessionIds`);return{generatedAt:D(t,`generatedAt`),thresholds:ci(t.thresholds),projects:j(li)(t.projects),totals:ui(t.totals),...n===void 0?{}:{skippedBusySessionIds:n}}}function ii(e){let t=E(e);return{...ri(t),archivedSessionIds:yn(t.archivedSessionIds,`archivedSessionIds`),deletedSessionIds:yn(t.deletedSessionIds,`deletedSessionIds`)}}function ai(e){let t=E(e);if(t.archived!==!0)throw Error(`Expected bulk archived response`);return{archived:!0,archivedSessionIds:yn(t.archivedSessionIds,`archivedSessionIds`),failures:j(si)(t.failures),generatedAt:D(t,`generatedAt`)}}function oi(e){let t=E(e);if(t.deleted!==!0)throw Error(`Expected bulk deleted response`);return{deleted:!0,deletedSessionIds:yn(t.deletedSessionIds,`deletedSessionIds`),failures:j(si)(t.failures),generatedAt:D(t,`generatedAt`)}}function si(e){let t=E(e);return{sessionId:D(t,`sessionId`),error:D(t,`error`)}}function ci(e){let t=E(e);return{...N(`archiveIdleDays`,go(t,`archiveIdleDays`)),...N(`deleteArchivedDays`,go(t,`deleteArchivedDays`))}}function li(e){let t=E(e);return{cwd:D(t,`cwd`),archiveCount:k(t,`archiveCount`),deleteCount:k(t,`deleteCount`)}}function ui(e){let t=E(e);return{archiveCount:k(t,`archiveCount`),deleteCount:k(t,`deleteCount`)}}function di(e){let t=E(e),n=D(t,`kind`);if(n!==`steer`&&n!==`followUp`)throw Error(`Invalid queued message kind`);return{kind:n,text:D(t,`text`),...N(`clientMessageId`,O(t,`clientMessageId`))}}function fi(e){let t=E(e);return{input:k(t,`input`),output:k(t,`output`),cacheRead:k(t,`cacheRead`),cacheWrite:k(t,`cacheWrite`),total:k(t,`total`)}}function pi(e){let t=E(e);return{...N(`provider`,O(t,`provider`)),...N(`id`,O(t,`id`)),...N(`name`,O(t,`name`)),...N(`contextWindow`,go(t,`contextWindow`)),...N(`reasoning`,t.reasoning)}}function mi(e){return e===void 0?{}:{model:pi(e)}}function hi(e){let t=E(e);return{models:j(pi)(t.models)}}function gi(e){let t=E(e);return{provider:D(t,`provider`),id:D(t,`id`),...N(`name`,O(t,`name`)),...N(`contextWindow`,go(t,`contextWindow`)),...N(`reasoning`,t.reasoning),enabled:A(t,`enabled`)}}function _i(e){let t=E(e);return{models:j(gi)(t.models)}}function vi(e){if(typeof e!=`string`)throw Error(`Invalid thinking level`);return e}function yi(e){let t=E(e);return{levels:j(vi)(t.levels)}}function bi(e){if(e!==`oauth`&&e!==`api_key`)throw Error(`Invalid auth type`);return e}function xi(e){if(e!==`stored`&&e!==`runtime`&&e!==`environment`&&e!==`fallback`&&e!==`models_json_key`&&e!==`models_json_command`)throw Error(`Invalid auth status source`);return e}function Si(e){let t=E(e),n=t.source===void 0?void 0:xi(t.source);return{configured:A(t,`configured`),...N(`source`,n),...N(`label`,O(t,`label`))}}function Ci(e){let t=E(e),n=t.loginFlow;if(n!==void 0&&n!==`interactive`)throw Error(`Invalid auth provider login flow`);return{id:D(t,`id`),name:D(t,`name`),authType:bi(t.authType),status:Si(t.status),...n===void 0?{}:{loginFlow:n}}}function wi(e){let t=E(e);return{providers:j(Ci)(t.providers)}}function Ti(e){let t=E(e);return{flowId:D(t,`flowId`),providerId:D(t,`providerId`),providerName:D(t,`providerName`),status:Ei(t.status),progress:j(e=>{if(typeof e!=`string`)throw Error(`Expected progress item string`);return e})(t.progress),...N(`error`,O(t,`error`)),...N(`auth`,Di(t.auth)),...N(`prompt`,ki(t.prompt)),...N(`select`,ji(t.select)),...N(`info`,Mi(t.info))}}function Ei(e){if(e!==`running`&&e!==`complete`&&e!==`error`&&e!==`cancelled`)throw Error(`Invalid OAuth flow status`);return e}function Di(e){if(e===void 0)return;let t=E(e);return{url:D(t,`url`),...N(`instructions`,O(t,`instructions`)),...N(`deviceCode`,Oi(t.deviceCode))}}function Oi(e){if(e===void 0)return;let t=E(e);return{userCode:D(t,`userCode`),...N(`intervalSeconds`,go(t,`intervalSeconds`)),...N(`expiresInSeconds`,go(t,`expiresInSeconds`))}}function ki(e){if(e===void 0)return;let t=E(e);return{requestId:D(t,`requestId`),message:D(t,`message`),promptType:Ai(t.promptType),...N(`placeholder`,O(t,`placeholder`)),...N(`allowEmpty`,ho(t,`allowEmpty`))}}function Ai(e){if(e!==`text`&&e!==`secret`&&e!==`manual_code`)throw Error(`Invalid OAuth prompt type`);return e}function ji(e){if(e===void 0)return;let t=E(e);return{requestId:D(t,`requestId`),message:D(t,`message`),options:j(no)(t.options)}}function Mi(e){if(e!==void 0)return j(e=>{let t=E(e);return{message:D(t,`message`),...N(`links`,t.links===void 0?void 0:j(Ni)(t.links))}})(e)}function Ni(e){let t=E(e);return{url:D(t,`url`),...N(`label`,O(t,`label`))}}function Pi(e){if(e===void 0)return{};let t=E(e);return{contextUsage:{tokens:_o(t,`tokens`),contextWindow:k(t,`contextWindow`),percent:_o(t,`percent`)}}}function Fi(e){let t=E(e),n=D(t,`source`);if(n!==`extension`&&n!==`prompt`&&n!==`skill`&&n!==`builtin`)throw Error(`Invalid command source`);return{name:D(t,`name`),source:n,...N(`description`,O(t,`description`))}}function Ii(e){let t=E(e),n=D(t,`kind`);if(n!==`tracked`&&n!==`untracked`&&n!==`other`)throw Error(`Invalid file kind`);return{path:D(t,`path`),kind:n}}function Li(e){let t=E(e);return{path:D(t,`path`),entries:j(Ri)(t.entries),scannedAt:D(t,`scannedAt`),truncated:A(t,`truncated`)}}function Ri(e){let t=E(e),n=D(t,`type`);if(n!==`file`&&n!==`directory`&&n!==`symlink`)throw Error(`Invalid file tree entry type`);return{name:D(t,`name`),path:D(t,`path`),type:n,...N(`size`,go(t,`size`)),...N(`modifiedAt`,O(t,`modifiedAt`))}}function zi(e){let t=E(e),n=D(t,`encoding`);if(n!==`utf8`)throw Error(`Invalid file encoding`);return{path:D(t,`path`),...N(`language`,O(t,`language`)),...N(`mediaType`,Ui(t.mediaType)),...N(`mimeType`,O(t,`mimeType`)),encoding:n,size:k(t,`size`),modifiedAt:D(t,`modifiedAt`),content:D(t,`content`),truncated:A(t,`truncated`),binary:A(t,`binary`)}}function Bi(e){let t=E(e);return{path:D(t,`path`),size:k(t,`size`),modifiedAt:D(t,`modifiedAt`),created:A(t,`created`)}}function Vi(e){let t=E(e);return{path:D(t,`path`),existed:A(t,`existed`)}}function Hi(e){let t=E(e);return{fromPath:D(t,`fromPath`),toPath:D(t,`toPath`),size:k(t,`size`),modifiedAt:D(t,`modifiedAt`)}}function Ui(e){if(e!==void 0){if(e!==`image`&&e!==`html`&&e!==`pdf`&&e!==`markdown`)throw Error(`Invalid file media type`);return e}}function Wi(e){let t=E(e),n=t.decision;if(n!==!0&&n!==!1&&n!==null)throw Error(`Invalid workspace trust decision`);return{path:D(t,`path`),decision:n,trusted:A(t,`trusted`)}}function Gi(e){let t=E(e);return{id:D(t,`id`),cwd:D(t,`cwd`),name:D(t,`name`),createdAt:D(t,`createdAt`),exited:A(t,`exited`),...N(`exitCode`,go(t,`exitCode`)),...N(`commandRunId`,O(t,`commandRunId`))}}function Ki(e){let t=E(e);return{id:D(t,`id`),origin:D(t,`origin`),projectId:D(t,`projectId`),workspaceId:D(t,`workspaceId`),terminalId:D(t,`terminalId`),title:D(t,`title`),command:D(t,`command`),status:qi(t.status),...N(`exitCode`,go(t,`exitCode`)),createdAt:D(t,`createdAt`),...N(`startedAt`,O(t,`startedAt`)),...N(`completedAt`,O(t,`completedAt`)),metadata:Ji(t.metadata,`metadata`)}}function qi(e){if(e!==`queued`&&e!==`running`&&e!==`succeeded`&&e!==`failed`)throw Error(`Invalid terminal command run status`);return e}function Ji(e,t){let n=E(e);return Object.fromEntries(Object.entries(n).map(([e,n])=>{if(typeof n!=`string`)throw Error(`Expected string record field: ${t}.${e}`);return[e,n]}))}function Yi(e){let t=$t(e);if(t===void 0)throw Error(`Expected machine status snapshot`);return t}function Xi(e){let t=E(e),n=t.enabled===!0,r=typeof t.disabledReason==`string`?t.disabledReason:void 0,i=typeof t.latest==`string`?t.latest:void 0,a=typeof t.branch==`string`?t.branch:void 0;return n?{enabled:!0,current:D(t,`current`),latest:i,available:t.available===!0,branch:a,checkedAt:D(t,`checkedAt`)}:{enabled:!1,current:``,latest:i,available:!1,branch:a,checkedAt:D(t,`checkedAt`),...r===void 0?{}:{disabledReason:r}}}function Zi(e){let t=E(e);return{goalId:D(t,`goalId`),archivedPath:typeof t.archivedPath==`string`?t.archivedPath:``,alreadyArchived:t.alreadyArchived===!0,agentMayRecreate:t.agentMayRecreate===!0}}function Qi(e){let t=E(e);return{hub:ea(t.hub),machines:j(ta)(t.machines)}}function $i(e){let t=E(e),n=D(t,`operation`);if(n!==`restart`&&n!==`update`)throw Error(`Invalid fleet operation`);return{operation:n,hub:ea(t.hub),outcomes:j(na)(t.outcomes)}}function ea(e){let t=E(e);return{machineId:D(t,`machineId`),name:D(t,`name`)}}function ta(e){let t=E(e),n=D(t,`kind`);if(n!==`local`&&n!==`remote`)throw Error(`Invalid machine kind`);return{...ea(e),kind:n,online:t.online===!0,...N(`version`,O(t,`version`)),...N(`piVersion`,O(t,`piVersion`)),...N(`error`,O(t,`error`))}}function na(e){let t=E(e);return{...ea(e),started:t.started===!0,...N(`error`,O(t,`error`))}}function ra(e){let t=E(e);return{path:D(t,`path`),exists:A(t,`exists`),config:ia(t.config),effectiveConfig:ia(t.effectiveConfig),envOverrides:_a(t.envOverrides)}}function ia(e){let t=E(e);return{...N(`host`,O(t,`host`)),...N(`port`,go(t,`port`)),...N(`allowedHosts`,la(t.allowedHosts)),...N(`shortcuts`,ha(t.shortcuts)),...N(`plugins`,ga(t.plugins)),...N(`pathAccess`,ua(t.pathAccess)),...N(`uploads`,fa(t.uploads)),...N(`maxUploadBytes`,go(t,`maxUploadBytes`)),...N(`agent`,ca(t.agent)),...N(`spawnSessions`,ho(t,`spawnSessions`)),...N(`subsessions`,ho(t,`subsessions`)),...N(`askUser`,ho(t,`askUser`)),...N(`speechToText`,oa(t.speechToText)),...N(`environmentFacts`,ho(t,`environmentFacts`)),...N(`extensionDialogsTimeoutMs`,go(t,`extensionDialogsTimeoutMs`))}}var aa=[`browser`,`openai-realtime`,`deepgram`,`azure-speech`];function oa(e){if(e===void 0)return;if(!T(e)||Array.isArray(e))throw Error(`Invalid PI WEB speechToText field`);let t=e.endpoint;if(typeof t!=`string`||t.trim()===``)throw Error(`Invalid PI WEB speechToText field`);return{endpoint:t,...N(`model`,O(e,`model`)),...N(`language`,O(e,`language`)),...N(`streaming`,sa(e.streaming))}}function sa(e){if(e===void 0)return;if(!T(e)||Array.isArray(e))throw Error(`Invalid PI WEB speechToText.streaming field`);let t=aa.find(t=>t===e.protocol);if(t===void 0)throw Error(`Invalid PI WEB speechToText.streaming field`);return{protocol:t,...N(`url`,O(e,`url`)),...N(`model`,O(e,`model`)),...N(`tokenEndpoint`,O(e,`tokenEndpoint`))}}function ca(e){if(e!==void 0){if(!T(e)||Array.isArray(e))throw Error(`Invalid PI WEB agent field`);return{...N(`command`,O(e,`command`)),...N(`dir`,O(e,`dir`))}}}function la(e){if(e!==void 0){if(e===!0)return!0;if(pa(e))return e;throw Error(`Invalid PI WEB allowedHosts field`)}}function ua(e){if(e===void 0)return;if(!T(e))throw Error(`Invalid PI WEB pathAccess field`);let t=e.allowedPaths;return{...N(`allowedPaths`,da(t,`pathAccess.allowedPaths`))}}function da(e,t){if(e!==void 0){if(ma(e))return e;throw Error(`Invalid PI WEB ${t} field`)}}function fa(e){if(e!==void 0){if(!T(e)||Array.isArray(e))throw Error(`Invalid PI WEB uploads field`);return{...N(`defaultFolder`,O(e,`defaultFolder`))}}}function pa(e){return Array.isArray(e)&&e.every(e=>typeof e==`string`)}function ma(e){return Array.isArray(e)&&e.every(e=>typeof e==`string`&&e!==``)}function ha(e){if(e!==void 0){if(!T(e)||Array.isArray(e))throw Error(`Invalid PI WEB shortcuts field`);return Object.fromEntries(Object.entries(e).map(([e,t])=>{if(t!==null&&(typeof t!=`string`||t===``))throw Error(`Invalid PI WEB shortcut field`);return[e,t]}))}}function ga(e){if(e!==void 0){if(!T(e)||Array.isArray(e))throw Error(`Invalid PI WEB plugins field`);return Object.fromEntries(Object.entries(e).map(([e,t])=>{if(!T(t)||Array.isArray(t))throw Error(`Invalid PI WEB plugin config field`);let n=t.enabled;if(n!==void 0&&typeof n!=`boolean`)throw Error(`Invalid PI WEB plugin enabled field`);let r=t.settings;if(r!==void 0&&(!T(r)||Array.isArray(r)))throw Error(`Invalid PI WEB plugin settings field`);return[e,t]}))}}function _a(e){let t=E(e);return{host:A(t,`host`),port:A(t,`port`),allowedHosts:A(t,`allowedHosts`),spawnSessions:A(t,`spawnSessions`),subsessions:A(t,`subsessions`),askUser:A(t,`askUser`)}}function va(e){let t=E(e);return{packages:j(ba)(t.packages)}}function ya(e){let t=E(e),n=O(t,`source`),r=t.scope===void 0?void 0:xa(t.scope),i=Ma(t.removed,`removed`);return{action:Sa(t.action),...N(`source`,n),...N(`scope`,r),...N(`removed`,i),packages:j(ba)(t.packages)}}function ba(e){let t=E(e);return{source:D(t,`source`),scope:xa(t.scope),filtered:A(t,`filtered`),...N(`installedPath`,O(t,`installedPath`))}}function xa(e){if(e!==`user`&&e!==`project`)throw Error(`Invalid Pi package scope`);return e}function Sa(e){if(e!==`install`&&e!==`remove`&&e!==`update`)throw Error(`Invalid Pi package mutation action`);return e}function Ca(e){let t=E(e),n=j(wa)(t.plugins);if(t.lifecycleVersion===void 0)return{lifecycleVersion:1,plugins:n,diagnostics:[],serverRuntime:{status:`incompatible`,restartRequired:!1,message:`PI WEB does not support plugin lifecycle diagnostics. Update and restart PI WEB, then try again.`,recovery:Aa()}};if(t.lifecycleVersion!==1)throw Error(`Unsupported PI WEB plugin lifecycle version`);return{lifecycleVersion:1,plugins:n,diagnostics:j(Da)(t.diagnostics),serverRuntime:Oa(t.serverRuntime)}}function wa(e){let t=E(e),n=D(t,`id`),r=t.server===void 0?void 0:Ta(t.server,n);return{id:n,...N(`module`,O(t,`module`)),source:D(t,`source`),scope:ja(t.scope),machineSpecific:Ma(t.machineSpecific,`machineSpecific`)??!1,enabled:A(t,`enabled`),discovered:Ma(t.discovered,`discovered`)??!0,conflict:Ma(t.conflict,`conflict`)??!1,...r===void 0?{}:{server:r}}}function Ta(e,t){let n=E(e),r=n.state,i=n.phase;if(r!==`active`&&r!==`failed`&&r!==`incompatible`&&r!==`disabled`&&r!==`missing`&&r!==`unknown`)throw Error(`Invalid PI WEB server plugin state`);if(i!==void 0&&i!==`import`&&i!==`activate`&&i!==`validate`&&i!==`start`&&i!==`health`&&i!==`stop`)throw Error(`Invalid PI WEB server plugin phase`);let a=n.health===void 0?void 0:Ea(n.health),o=D(n,`disableCommand`);if(o!==_n(t))throw Error(`Invalid PI WEB server plugin recovery command`);return{state:r,...N(`desiredRevision`,O(n,`desiredRevision`)),...N(`activeRevision`,O(n,`activeRevision`)),...i===void 0?{}:{phase:i},...N(`message`,O(n,`message`)),...a===void 0?{}:{health:a},staleRevision:A(n,`staleRevision`),restartRequired:A(n,`restartRequired`),disableCommand:o}}function Ea(e){let t=E(e),n=t.status;if(n!==`healthy`&&n!==`degraded`&&n!==`unhealthy`)throw Error(`Invalid PI WEB server plugin health status`);return{status:n,...N(`message`,O(t,`message`))}}function Da(e){let t=E(e),n=t.kind,r=t.snapshot;if(n!==`conflict`&&n!==`discovery`)throw Error(`Invalid PI WEB plugin diagnostic kind`);if(r!==`desired`&&r!==`active`)throw Error(`Invalid PI WEB plugin diagnostic snapshot`);return{kind:n,snapshot:r,source:D(t,`source`),message:D(t,`message`),...N(`pluginId`,O(t,`pluginId`))}}function Oa(e){let t=E(e),n=t.status,r=t.safeStart,i=t.desiredSafeStart;if(n!==`available`&&n!==`unavailable`&&n!==`incompatible`)throw Error(`Invalid PI WEB server-plugin runtime status`);if(r!==void 0&&r!==`bundled-only`&&r!==`none`)throw Error(`Invalid PI WEB server-plugin safe-start state`);if(i!==void 0&&i!==`off`&&i!==`bundled-only`&&i!==`none`)throw Error(`Invalid desired PI WEB server-plugin safe-start state`);return{status:n,...r===void 0?{}:{safeStart:r},...i===void 0?{}:{desiredSafeStart:i},restartRequired:A(t,`restartRequired`),...N(`message`,O(t,`message`)),recovery:ka(t.recovery)}}function ka(e){let t=E(e),n={showSafeStart:D(t,`showSafeStart`),bundledOnly:D(t,`bundledOnly`),noServerPlugins:D(t,`noServerPlugins`),clearSafeStart:D(t,`clearSafeStart`)};if(n.showSafeStart!==gn.showSafeStart||n.bundledOnly!==gn.bundledOnly||n.noServerPlugins!==gn.noServerPlugins||n.clearSafeStart!==gn.clearSafeStart)throw Error(`Invalid PI WEB server plugin recovery commands`);return n}function Aa(){return{...gn}}function ja(e){if(e!==`bundled`&&e!==`local`&&e!==`user`&&e!==`project`)throw Error(`Invalid PI WEB plugin scope`);return e}function Ma(e,t){if(e!==void 0){if(typeof e!=`boolean`)throw Error(`Expected optional boolean field: ${t}`);return e}}function Na(e){let t=E(e);return{packageName:D(t,`packageName`),generatedAt:D(t,`generatedAt`),components:Fa(t.components),release:Ba(t.release),commands:Va(t.commands),messages:j(Ha)(t.messages)}}function Pa(e){let t=E(e);return{packageName:D(t,`packageName`),generatedAt:D(t,`generatedAt`),components:Ia(t.components),capabilities:Wa(t.capabilities)}}function Fa(e){let t=E(e);return{web:Ra(t.web),sessiond:Ra(t.sessiond)}}function Ia(e){let t=E(e);return{web:La(t.web),sessiond:La(t.sessiond)}}function La(e){let t=E(e);return{component:Ua(t.component),label:D(t,`label`),...N(`runtimeVersion`,O(t,`runtimeVersion`)),...N(`piVersion`,O(t,`piVersion`)),available:A(t,`available`),capabilities:Wa(t.capabilities),...N(`error`,O(t,`error`))}}function Ra(e){let t=E(e);return{component:Ua(t.component),label:D(t,`label`),...N(`runtimeVersion`,O(t,`runtimeVersion`)),...N(`installedVersion`,O(t,`installedVersion`)),...N(`piVersion`,O(t,`piVersion`)),stale:A(t,`stale`),available:A(t,`available`),...N(`installation`,za(t.installation)),...N(`error`,O(t,`error`))}}function za(e){if(e===void 0)return;let t=E(e),n=D(t,`kind`);if(n!==`pi-package`&&n!==`npm-global`&&n!==`local`&&n!==`docker`&&n!==`unknown`)throw Error(`Invalid PI WEB installation kind`);let r=t.scope;if(r!==void 0&&r!==`user`&&r!==`project`)throw Error(`Invalid PI WEB installation scope`);let i=t.dockerMode;if(i!==void 0&&i!==`runtime`&&i!==`dev`)throw Error(`Invalid PI WEB Docker mode`);return{kind:n,...N(`path`,O(t,`path`)),...N(`source`,O(t,`source`)),...r===void 0?{}:{scope:r},...N(`npmRoot`,O(t,`npmRoot`)),...i===void 0?{}:{dockerMode:i}}}function Ba(e){let t=E(e);return{packageName:D(t,`packageName`),...N(`latestVersion`,O(t,`latestVersion`)),updateAvailable:A(t,`updateAvailable`),...N(`checkedAt`,O(t,`checkedAt`)),...t.skipped===!0?{skipped:!0}:{},...N(`error`,O(t,`error`))}}function Va(e){let t=E(e);return{...N(`update`,O(t,`update`)),...N(`restart`,O(t,`restart`)),...N(`restartWeb`,O(t,`restartWeb`)),...N(`restartSessiond`,O(t,`restartSessiond`)),...N(`status`,O(t,`status`))}}function Ha(e){let t=E(e);return{id:D(t,`id`),severity:Ga(t.severity),title:D(t,`title`),body:D(t,`body`),...N(`command`,O(t,`command`))}}function Ua(e){if(e!==`web`&&e!==`sessiond`)throw Error(`Invalid PI WEB service component`);return e}function Wa(e){let t=cn(e);if(t===void 0)throw Error(`Invalid PI WEB capabilities`);return t}function Ga(e){if(e!==`info`&&e!==`warning`&&e!==`error`)throw Error(`Invalid PI WEB status severity`);return e}function Ka(e){let t=E(e),n=D(t,`type`);if(n===`unsupported`)return{type:n,message:D(t,`message`)};if(n===`select`)return{type:n,requestId:D(t,`requestId`),title:D(t,`title`),options:j(no)(t.options)};if(n===`tree`)return{type:n,tree:qa(t.tree)};if(n===`done`)return{type:n,...N(`message`,O(t,`message`)),...ro(t.session),...N(`promptDraft`,O(t,`promptDraft`))};throw Error(`Invalid command result type`)}function qa(e){let t=E(e),n=j(Ja)(t.nodes),r=new Set(n.map(e=>e.id));if(r.size!==n.length)throw Error(`Duplicate session tree node id`);let i=$a(t,`activeLeafId`);if(i!==null&&!r.has(i))throw Error(`Invalid session tree activeLeafId`);return{nodes:n,activeLeafId:i,activePathIds:to(t.activePathIds,`activePathIds`)}}function Ja(e){let t=E(e);return{id:eo(t,`id`),parentId:$a(t,`parentId`),kind:Ya(t.kind),summary:D(t,`summary`),...N(`timestamp`,O(t,`timestamp`)),...N(`label`,O(t,`label`))}}function Ya(e){switch(e){case`user`:case`assistant`:case`tool-result`:case`bash`:case`custom-message`:case`compaction`:case`branch-summary`:case`model-change`:case`thinking-level-change`:case`session-info`:case`label`:case`custom`:case`other`:return e;default:throw Error(`Invalid session tree node kind`)}}function Xa(e){let t=E(e),n=A(t,`cancelled`);if(Object.hasOwn(t,`summaryEntry`))throw Error(`Invalid session tree navigation result field: summaryEntry`);if(n){Qa(t,`editorText`,`session tree cancellation result`);let e=t.aborted;if(e!==void 0&&typeof e!=`boolean`)throw Error(`Expected optional boolean field: aborted`);return{cancelled:n,...e===void 0?{}:{aborted:e}}}return Qa(t,`aborted`,`session tree navigation result`),{cancelled:n,...N(`editorText`,O(t,`editorText`))}}function Za(e){let t=E(e),n=A(t,`cancelled`);return n?(Qa(t,`session`,`session tree fork cancellation result`),Qa(t,`promptDraft`,`session tree fork cancellation result`),{cancelled:n}):{cancelled:n,session:Bn(t.session),...N(`promptDraft`,O(t,`promptDraft`))}}function Qa(e,t,n){if(Object.hasOwn(e,t))throw Error(`Invalid ${n} field: ${t}`)}function $a(e,t){let n=e[t];if(n!==null&&typeof n!=`string`)throw Error(`Expected string or null field: ${t}`);if(typeof n==`string`&&n.trim()===``)throw Error(`Expected non-blank string or null field: ${t}`);return n}function eo(e,t){let n=D(e,t);if(n.trim()===``)throw Error(`Expected non-blank string field: ${t}`);return n}function to(e,t){let n=yn(e,t);if(n.some(e=>e.trim()===``))throw Error(`Expected non-blank string array field: ${t}`);return n}function no(e){let t=E(e);return{value:D(t,`value`),label:D(t,`label`),...N(`description`,O(t,`description`))}}function ro(e){return e===void 0?{}:{session:Bn(e)}}function io(e){if(E(e).accepted!==!0)throw Error(`Expected accepted response`);return{accepted:!0}}function ao(e){let t=E(e);return j(oo)(t.attachments)}function oo(e){let t=E(e);return{path:D(t,`path`),mimeType:D(t,`mimeType`),size:k(t,`size`)}}function so(e){if(E(e).closed!==!0)throw Error(`Expected closed response`);return{closed:!0}}function co(e){let t=E(e);if(t.aborted!==!0)throw Error(`Expected aborted response`);let n=t.discarded;return{aborted:!0,discarded:Array.isArray(n)?j(di)(n):[]}}function lo(e){if(E(e).stopped!==!0)throw Error(`Expected stopped response`);return{stopped:!0}}function uo(e){let t=E(e);if(t.archived!==!0)throw Error(`Expected archived response`);let n=t.sessionIds===void 0?void 0:yn(t.sessionIds,`sessionIds`),r=go(t,`archivedCount`),i=go(t,`skippedAlreadyArchivedCount`);return{archived:!0,...n===void 0?{}:{sessionIds:n},...r===void 0?{}:{archivedCount:r},...i===void 0?{}:{skippedAlreadyArchivedCount:i}}}function fo(e){if(E(e).restored!==!0)throw Error(`Expected restored response`);return{restored:!0}}function po(e){if(E(e).detached!==!0)throw Error(`Expected detached response`);return{detached:!0}}function mo(e){if(E(e).reloaded!==!0)throw Error(`Expected reloaded response`);return{reloaded:!0}}function ho(e,t){let n=e[t];if(n!==void 0){if(typeof n!=`boolean`)throw Error(`Invalid PI WEB ${t} field`);return n}}function go(e,t){let n=e[t];if(n!==void 0){if(typeof n!=`number`)throw Error(`Expected optional number field: ${t}`);return n}}function _o(e,t){let n=e[t];if(n===null)return null;if(typeof n!=`number`)throw Error(`Expected number|null field: ${t}`);return n}function N(e,t){return t===void 0?{}:{[e]:t}}function vo(e){if(!T(e))return{runs:[]};let t=e.runs;if(!Array.isArray(t))return{runs:[]};let n=[];for(let e of t){if(!T(e))continue;let t=e.sessionId,r=e.cwd,i=e.interruptedAt;typeof t!=`string`||t===``||typeof r!=`string`||typeof i!=`string`||n.push({sessionId:t,cwd:r,interruptedAt:i})}return{runs:n}}function yo(e){if(!T(e))return{subsessions:[],toolRuns:[]};let t=[],n=e.subsessions;if(Array.isArray(n))for(let e of n){if(!T(e))continue;let n=e.sessionId,r=e.cwd,i=e.status;typeof n!=`string`||n===``||typeof r==`string`&&(i!==`working`&&i!==`idle`&&i!==`error`&&i!==`unknown`||t.push({sessionId:n,cwd:r,status:i}))}return{subsessions:t,toolRuns:wo(e.toolRuns)}}function bo(e){let t=mr(e);return{recalled:T(e)&&e.recalled===!0,status:t}}function xo(e){if(!T(e)||!Array.isArray(e.tasks))return[];let t=[];for(let n of e.tasks){if(!T(n))continue;let e=n.id,r=n.name,i=n.status;typeof e!=`string`||e===``||t.push({id:e,name:typeof r==`string`&&r!==``?r:e,command:typeof n.command==`string`?n.command:``,status:typeof i==`string`?i:`unknown`,...typeof n.startedAt==`string`?{startedAt:n.startedAt}:{},...typeof n.endedAt==`string`?{endedAt:n.endedAt}:{},...typeof n.durationMs==`number`?{durationMs:n.durationMs}:{},...typeof n.exitCode==`number`?{exitCode:n.exitCode}:{},bytesWritten:typeof n.bytesWritten==`number`?n.bytesWritten:0,hasOutput:n.hasOutput===!0})}return t}function So(e){if(!T(e))return``;let t=e.output;return typeof t==`string`?t:``}function Co(e){if(!T(e))return``;let t=e.output;return typeof t==`string`?t:``}function wo(e){if(!Array.isArray(e))return[];let t=[];for(let n of e){if(!T(n))continue;let e=n.runId,r=n.agent,i=n.status,a=n.elapsedMs,o=n.startedAt;if(typeof e!=`string`||e===``||typeof r!=`string`||r===``||i!==`running`&&i!==`done`&&i!==`failed`&&i!==`lost`&&i!==`unknown`||typeof a!=`number`||typeof o!=`string`)continue;let s=n.lastActivity,c=n.task,l=n.model,u=n.toolCount;t.push({runId:e,agent:r,status:i,elapsedMs:a,startedAt:o,...typeof s==`string`&&s!==``?{lastActivity:s}:{},...typeof c==`string`&&c!==``?{task:c}:{},...typeof l==`string`&&l!==``?{model:l}:{},...typeof u==`number`?{toolCount:u}:{},hasOutput:n.hasOutput===!0})}return t}function To(e){return typeof e==`string`?e:e.id}function Eo(e){return typeof e==`string`?void 0:e.cwd}function Do(e,t,n=`local`){let r=new URLSearchParams,i=Eo(e);i!==void 0&&i!==``&&r.set(`cwd`,i),t?.limit!==void 0&&r.set(`limit`,String(t.limit)),t?.before!==void 0&&r.set(`before`,String(t.before));let a=r.toString();return`api/machines/${encodeURIComponent(n)}/sessions/${encodeURIComponent(To(e))}/messages${a===``?``:`?${a}`}`}function Oo(e,t,n,r=`local`){let i=new URLSearchParams,a=Eo(e);a!==void 0&&a!==``&&i.set(`cwd`,a),n?.limit!==void 0&&i.set(`limit`,String(n.limit)),n?.before!==void 0&&i.set(`before`,String(n.before));let o=i.toString();return`api/machines/${encodeURIComponent(r)}/sessions/${encodeURIComponent(To(e))}/subagent-runs/${encodeURIComponent(t)}/messages${o===``?``:`?${o}`}`}function ko(e,t,n,r){let i=new URLSearchParams({path:n});return r?.createDirs===!1&&i.set(`createDirs`,`false`),r?.overwrite===!1&&i.set(`overwrite`,`false`),Ze(`${`api/machines/${encodeURIComponent(r?.machineId??`local`)}`}/projects/${encodeURIComponent(e)}/workspaces/${encodeURIComponent(t)}/file?${i.toString()}`)}function Ao(e,t,n,r){let i=new URLSearchParams;return i.set(`path`,n),r?.modifiedAt!==void 0&&i.set(`v`,r.modifiedAt),r?.download===!0&&i.set(`download`,`1`),`${`api/machines/${encodeURIComponent(r?.machineId??`local`)}`}/projects/${encodeURIComponent(e)}/workspaces/${encodeURIComponent(t)}/file/preview?${i.toString()}`}function jo(e,t,n,r){return Ze(Ao(e,t,n,r))}var P=(e=`local`)=>`api/machines/${encodeURIComponent(e)}`;function Mo(e,t=`local`){return`${P(t)}/sessions/${encodeURIComponent(e.id)}`}function F(e,t,n=`local`){return`${Mo(e,n)}/${t}`}function No(e,t,n=`local`){return`${F(e,t,n)}${Po(e)}`}function Po(e){return`?${new URLSearchParams({cwd:e.cwd}).toString()}`}function I(e,t={}){return JSON.stringify({cwd:e.cwd,...t})}function Fo(e){return JSON.stringify({sessions:e.map(Io)})}function Io(e){return{id:e.id,cwd:e.cwd}}function Lo(e){return e===`local`?`api/pi-web/status`:`${P(e)}/pi-web/status`}var Ro={piWebStatus:(e=`local`)=>v(Lo(e),Na),checkForUpdates:(e=`local`)=>v(`${Lo(e)}?refresh=1`,Na,{cache:`no-store`}),piWebRuntime:()=>v(`api/pi-web/runtime`,Pa)},zo={machines:()=>v(`api/machines`,xn),addMachine:e=>v(`api/machines`,Sn,{method:`POST`,body:JSON.stringify(e)}),deleteMachine:e=>v(`api/machines/${encodeURIComponent(e)}`,e=>e,{method:`DELETE`}),updateMachine:(e,t)=>v(`api/machines/${encodeURIComponent(e)}`,Sn,{method:`PATCH`,body:JSON.stringify(t)}),health:e=>v(`api/machines/${encodeURIComponent(e)}/health`,Cn),runtime:(e,t=!1)=>v(`api/machines/${encodeURIComponent(e)}/runtime${t?`?refresh=1`:``}`,wn,t?{cache:`no-store`}:{})};function Bo(e){return e===void 0?`api/config`:`${P(e)}/config`}function Vo(e){return e===void 0?`api/plugins`:`${P(e)}/plugins`}var Ho={config:e=>v(Bo(e),ra),saveConfig:(e,t)=>v(Bo(t),ra,{method:`PUT`,body:JSON.stringify({config:e})})};function Uo(e){let t=ss(e)?e:{},n=t.started===!0,r=typeof t.error==`string`?t.error:void 0;return r===void 0?{started:n}:{started:n,error:r}}var Wo={plugins:e=>v(Vo(e),Ca)},Go={status:()=>v(`api/pi-web/update/status`,Xi,{cache:`no-store`}),apply:()=>v(`api/pi-web/update/apply`,Uo,{method:`POST`,body:JSON.stringify({})})},Ko={report:()=>v(`api/pi-web/fleet`,Qi,{cache:`no-store`}),run:(e,t)=>v(`api/pi-web/fleet/run`,$i,{method:`POST`,body:JSON.stringify({operation:e,...t===void 0?{}:{machineIds:t}})})};function qo(e=``,t){let n=t===void 0?`api/pi-packages`:`${P(t)}/pi-packages`;return e===``?n:`${n}/${e}`}var Jo={packages:e=>v(qo(``,e),va),install:(e,t)=>{let n={source:e};return v(qo(`install`,t),ya,{method:`POST`,body:JSON.stringify(n)})},remove:(e,t,n)=>{let r=t===void 0?{source:e}:{source:e,scope:t};return v(qo(`remove`,n),ya,{method:`POST`,body:JSON.stringify(r)})},update:(e,t)=>{let n=e===void 0?void 0:{source:e};return v(qo(`update`,t),ya,{method:`POST`,...n===void 0?{}:{body:JSON.stringify(n)}})}},Yo={machineStatus:(e=`local`)=>v(`${P(e)}/status`,Yi)},Xo={projects:(e=`local`)=>v(`${P(e)}/projects`,j(On)),addProject:(e,t,n,r=`local`)=>v(`${P(r)}/projects`,On,{method:`POST`,body:JSON.stringify({path:e,name:t,create:n})}),closeProject:(e,t=`local`)=>v(`${P(t)}/projects/${encodeURIComponent(e)}`,so,{method:`DELETE`}),projectDirectories:(e,t=`local`,n)=>v(`${P(t)}/project-directories?q=${encodeURIComponent(e)}`,j(Ii),n)};function Zo(e,t=`local`){return v(`${P(t)}/projects/${encodeURIComponent(e)}/workspaces`,t=>{let n=An(t);if(n.projectId!==e)throw Error(`Workspace resolution did not match the requested project`);return n})}var Qo={workspaceResolution:Zo,workspaces:async(e,t=`local`)=>[...(await Zo(e,t)).workspaces],deleteWorkspace:(e,t,n,r=`local`)=>{let i={precondition:n};return v(`${P(r)}/projects/${encodeURIComponent(e)}/workspaces/${encodeURIComponent(t)}`,Ki,{method:`DELETE`,body:JSON.stringify(i)})},archiveWorkspaceGoal:(e,t,n,r=`local`)=>v(`${P(r)}/projects/${encodeURIComponent(e)}/workspaces/${encodeURIComponent(t)}/goals/${encodeURIComponent(n)}/archive`,Zi,{method:`POST`,body:JSON.stringify({})}),workspaceGoals:(e,t,n=`local`,r)=>{let i=r===void 0||r===``?``:`?sessionCwd=${encodeURIComponent(r)}`;return v(`${P(n)}/projects/${encodeURIComponent(e)}/workspaces/${encodeURIComponent(t)}/goals${i}`,yr,{cache:`no-store`})},workspaceTree:(e,t,n=``,r=`local`)=>v(`${P(r)}/projects/${encodeURIComponent(e)}/workspaces/${encodeURIComponent(t)}/tree?path=${encodeURIComponent(n)}`,Li),workspaceFile:(e,t,n,r=`local`)=>v(`${P(r)}/projects/${encodeURIComponent(e)}/workspaces/${encodeURIComponent(t)}/file?path=${encodeURIComponent(n)}`,zi),writeWorkspaceFile:(e,t,n,r,i,a=`local`)=>{let o=new URLSearchParams({path:n});i?.createDirs===!1&&o.set(`createDirs`,`false`),i?.overwrite===!1&&o.set(`overwrite`,`false`);let s=r instanceof Uint8Array,c=s?new Uint8Array(r):new TextEncoder().encode(r);return v(`${P(a)}/projects/${encodeURIComponent(e)}/workspaces/${encodeURIComponent(t)}/file?${o.toString()}`,Bi,{method:`PUT`,body:c,headers:{"Content-Type":s?`application/octet-stream`:`text/plain`}})},deleteWorkspaceFile:(e,t,n,r=`local`)=>{let i=new URLSearchParams({path:n});return v(`${P(r)}/projects/${encodeURIComponent(e)}/workspaces/${encodeURIComponent(t)}/file?${i.toString()}`,Vi,{method:`DELETE`})},moveWorkspaceFile:(e,t,n,r,i,a=`local`)=>{let o=new URLSearchParams({fromPath:n,toPath:r});return i?.createDirs===!1&&o.set(`createDirs`,`false`),i?.overwrite===!0&&o.set(`overwrite`,`true`),v(`${P(a)}/projects/${encodeURIComponent(e)}/workspaces/${encodeURIComponent(t)}/file/move?${o.toString()}`,Hi,{method:`POST`})}},$o={sessions:(e,t=`local`)=>v(`${P(t)}/sessions?cwd=${encodeURIComponent(e)}`,j(Bn)),unreadCatalog:(e=`local`)=>v(`${P(e)}/sessions/unread`,xr,{cache:`no-store`}),statusCatalog:(e=`local`)=>v(`${P(e)}/sessions/statuses`,br,{cache:`no-store`}),interruptedRuns:(e=`local`)=>v(`${P(e)}/sessions/interrupted`,vo,{cache:`no-store`}),subsessions:(e,t=`local`)=>v(`${F(e,`subsessions`,t)}?cwd=${encodeURIComponent(e.cwd)}`,yo,{cache:`no-store`}),acknowledgeUnread:(e,t,n,r=`local`)=>{let i={cwd:e.cwd,catalogId:t,throughCompletionOrder:n};return v(F(e,`unread/acknowledge`,r),Sr,{method:`POST`,body:JSON.stringify(i)})},notificationInbox:(e,t=`local`)=>v(No(e,`notifications`,t),Br),dismissNotification:(e,t,n,r=`local`)=>v(F(e,`notifications/dismiss`,r),Vr,{method:`POST`,body:I(e,{daemonInstanceId:t,notificationId:n})}),dismissAllNotifications:(e,t,n,r=`local`)=>v(F(e,`notifications/dismiss-all`,r),Vr,{method:`POST`,body:I(e,{daemonInstanceId:t,throughOrder:n.order,throughOverflowWatermark:n.overflowWatermark})}),startSession:(e,t=`local`,n)=>v(`${P(t)}/sessions`,Bn,{method:`POST`,body:JSON.stringify(n===void 0?{cwd:e}:{cwd:e,startupToken:n})}),cleanupPreview:(e,t=`local`)=>v(`${P(t)}/sessions/cleanup/preview`,ri,{method:`POST`,body:JSON.stringify(e)}),cleanup:(e,t=`local`)=>v(`${P(t)}/sessions/cleanup`,ii,{method:`POST`,body:JSON.stringify(e)}),archiveMany:(e,t=`local`)=>v(`${P(t)}/sessions/bulk/archive`,ai,{method:`POST`,body:Fo(e)}),deleteArchivedMany:(e,t=`local`)=>v(`${P(t)}/sessions/bulk/delete-archived`,oi,{method:`POST`,body:Fo(e)}),messages:(e,t,n=`local`)=>v(Do(e,t,n),bn),status:(e,t=`local`)=>v(No(e,`status`,t),mr),streamSnapshot:(e,t=`local`)=>v(No(e,`stream-snapshot`,t),hr),streamSync:(e,t,n=`local`)=>v(`${F(e,`stream-snapshot`,n)}${Po(e)}&sinceSeq=${String(t)}`,gr),backgroundTasks:(e,t=`local`)=>v(`${F(e,`background-tasks`,t)}?cwd=${encodeURIComponent(e.cwd)}`,xo,{cache:`no-store`}),backgroundTaskOutput:(e,t,n=`local`)=>v(`${F(e,`background-tasks/${encodeURIComponent(t)}/output`,n)}?cwd=${encodeURIComponent(e.cwd)}`,So,{cache:`no-store`}),subagentRunOutput:(e,t,n=`local`)=>v(`${F(e,`subagent-runs/${encodeURIComponent(t)}/output`,n)}?cwd=${encodeURIComponent(e.cwd)}`,Co,{cache:`no-store`}),subagentRunMessages:(e,t,n,r=`local`)=>v(Oo(e,t,n,r),bn,{cache:`no-store`}),clearQueue:(e,t=`local`)=>v(F(e,`queue/clear`,t),mr,{method:`POST`,body:I(e)}),recallQueuedMessage:(e,t,n=`local`)=>v(F(e,`queue/clear`,n),bo,{method:`POST`,body:I(e,{text:t.text,kind:t.kind,...t.clientMessageId===void 0?{}:{clientMessageId:t.clientMessageId}})}),dismissWarning:(e,t,n=`local`)=>v(F(e,`warnings/dismiss`,n),mr,{method:`POST`,body:I(e,{dismissId:t})}),submitAsk:(e,t,n,r=`local`)=>v(F(e,`ask/submit`,r),tr,{method:`POST`,body:I(e,{askId:t,answers:n.answers})}),cancelAsk:(e,t,n=`local`)=>v(F(e,`ask/cancel`,n),tr,{method:`POST`,body:I(e,{askId:t})}),answerDialog:(e,t,n,r=`local`)=>v(F(e,`dialogs/answer`,r),nr,{method:`POST`,body:I(e,{dialogId:t,value:n})}),cancelDialog:(e,t,n=`local`)=>v(F(e,`dialogs/cancel`,n),nr,{method:`POST`,body:I(e,{dialogId:t})}),models:(e,t=`local`)=>v(No(e,`models`,t),hi),modelCatalog:(e,t=`local`)=>v(No(e,`models/catalog`,t),_i),setModelEnabled:(e,t,n,r,i=`local`)=>v(F(e,`models/enabled`,i),_i,{method:`POST`,body:I(e,{provider:t,modelId:n,enabled:r})}),setModel:(e,t,n,r=`local`)=>v(F(e,`model`,r),mr,{method:`POST`,body:I(e,{provider:t,modelId:n})}),cycleModel:(e,t,n=`local`)=>v(F(e,`model/cycle`,n),mr,{method:`POST`,body:I(e,{direction:t})}),thinkingLevels:(e,t=`local`)=>v(No(e,`thinking-levels`,t),yi),setThinkingLevel:(e,t,n=`local`)=>v(F(e,`thinking-level`,n),mr,{method:`POST`,body:I(e,{level:t})}),cycleThinkingLevel:(e,t=`local`)=>v(F(e,`thinking-level/cycle`,t),mr,{method:`POST`,body:I(e)}),commands:(e,t=`local`)=>v(No(e,`commands`,t),j(Fi)),prompt:(e,t,n,r=`local`,i,a)=>v(F(e,`prompt`,r),io,{method:`POST`,body:I(e,{text:t,...n===void 0?{}:{streamingBehavior:n},...i!==void 0&&i.length>0?{attachments:i}:{},...a===void 0?{}:{clientMessageId:a}})}),saveAttachments:(e,t,n=`local`,r)=>v(F(e,`attachments`,n),ao,{method:`POST`,body:I(e,{attachments:t,...r===void 0?{}:{folder:r}})}),shell:(e,t,n=`local`)=>v(F(e,`shell`,n),io,{method:`POST`,body:I(e,{text:t})}),runCommand:(e,t,n=`local`)=>v(F(e,`commands/run`,n),Ka,{method:`POST`,body:I(e,{text:t})}),respondToCommand:(e,t,n,r=`local`)=>v(F(e,`commands/respond`,r),Ka,{method:`POST`,body:I(e,{requestId:t,value:n})}),navigateTree:(e,t,n=`local`)=>v(F(e,`tree/navigate`,n),Xa,{method:`POST`,body:I(e,{targetId:t.targetId,expectedLeafId:t.expectedLeafId,summary:t.summary})}),forkTree:(e,t,n=`local`)=>ns(e,t,n),abort:(e,t=`local`)=>v(F(e,`abort`,t),co,{method:`POST`,body:I(e)}),stop:(e,t=`local`)=>v(F(e,`stop`,t),lo,{method:`POST`,body:I(e)}),archive:(e,t=`local`)=>v(F(e,`archive`,t),uo,{method:`POST`,body:I(e)}),archiveWithDescendants:(e,t=`local`)=>v(F(e,`archive-tree`,t),uo,{method:`POST`,body:I(e)}),restore:(e,t=`local`)=>v(F(e,`restore`,t),fo,{method:`POST`,body:I(e)}),detachParent:(e,t=`local`)=>v(F(e,`detach-parent`,t),po,{method:`POST`,body:I(e)}),reloadSession:(e,t=`local`)=>v(F(e,`reload`,t),mo,{method:`POST`,body:I(e)}),authProviders:e=>{let t=new URLSearchParams;e?.mode!==void 0&&t.set(`mode`,e.mode),e?.authType!==void 0&&t.set(`authType`,e.authType);let n=t.toString();return v(`${P(e?.machineId)}/auth/providers${n===``?``:`?${n}`}`,wi)},startInteractiveApiKeyLogin:(e,t=`local`)=>v(`${P(t)}/auth/api-key/interactive`,Ti,{method:`POST`,body:JSON.stringify({providerId:e})}),logoutProvider:(e,t=`local`)=>v(`${P(t)}/auth/logout`,io,{method:`POST`,body:JSON.stringify({providerId:e})}),startOAuthLogin:(e,t=`local`)=>v(`${P(t)}/auth/oauth`,Ti,{method:`POST`,body:JSON.stringify({providerId:e})}),oauthFlow:(e,t=`local`)=>v(`${P(t)}/auth/oauth/${encodeURIComponent(e)}`,Ti),respondOAuthFlow:(e,t,n,r=`local`)=>v(`${P(r)}/auth/oauth/${encodeURIComponent(e)}/respond`,Ti,{method:`POST`,body:JSON.stringify({requestId:t,value:n})}),cancelOAuthFlow:(e,t=`local`)=>v(`${P(t)}/auth/oauth/${encodeURIComponent(e)}/cancel`,Ti,{method:`POST`})},es={terminals:(e,t,n=`local`)=>v(`${P(n)}/projects/${encodeURIComponent(e)}/workspaces/${encodeURIComponent(t)}/terminals`,j(Gi)),startTerminal:(e,t,n,r=`local`)=>v(`${P(r)}/projects/${encodeURIComponent(e)}/workspaces/${encodeURIComponent(t)}/terminals`,Gi,{method:`POST`,body:JSON.stringify(n??{})}),closeWorkspaceTerminals:(e,t,n=`local`)=>v(`${P(n)}/projects/${encodeURIComponent(e)}/workspaces/${encodeURIComponent(t)}/terminals`,so,{method:`DELETE`}),closeTerminal:(e,t,n,r=`local`)=>v(`${P(r)}/projects/${encodeURIComponent(e)}/workspaces/${encodeURIComponent(t)}/terminals/${encodeURIComponent(n)}`,so,{method:`DELETE`}),continueTerminal:(e,t,n,r=`local`)=>v(`${P(r)}/projects/${encodeURIComponent(e)}/workspaces/${encodeURIComponent(t)}/terminals/${encodeURIComponent(n)}/continue`,Gi,{method:`POST`}),runTerminalCommand:(e,t,n=`local`)=>v(`${P(n)}/projects/${encodeURIComponent(t.workspace.projectId)}/workspaces/${encodeURIComponent(t.workspace.id)}/terminal-command-runs`,Ki,{method:`POST`,body:JSON.stringify({origin:e,title:t.title,command:t.command,metadata:t.metadata??{}})}),listCommandRuns:(e,t=`local`)=>v(`${P(t)}/terminal-command-runs${as(e)}`,j(Ki)),getCommandRun:(e,t=`local`)=>is(e,t),cancelCommandRun:(e,t=`local`)=>v(`${P(t)}/terminal-command-runs/${encodeURIComponent(e)}/cancel`,Ki,{method:`POST`})},ts=class extends Error{constructor(){super(`Fork from the session tree is unavailable. Restart the session daemon to enable it.`),this.name=`SessionTreeForkUnavailableError`}};async function ns(e,t,n){let r=await fetch(Ze(F(e,`tree/fork`,n)),{method:`POST`,headers:{"content-type":`application/json`},body:I(e,{entryId:t.entryId,expectedLeafId:t.expectedLeafId})});if(!r.ok){let e=await r.json().catch(()=>({}));throw rs(r.status,e)?new ts:Error(os(e)??r.statusText)}return Za(await r.json())}function rs(e,t){if(e!==404||!ss(t)||t.statusCode!==404||t.error!==`Not Found`)return!1;let n=t.message;return typeof n==`string`&&/^Route POST:.*\/tree\/fork not found$/i.test(n)}async function is(e,t){let n=await fetch(Ze(`${P(t)}/terminal-command-runs/${encodeURIComponent(e)}`));if(n.status!==404){if(!n.ok){let e=await n.json().catch(()=>({}));throw Error(os(e)??n.statusText)}return Ki(await n.json())}}function as(e){if(e===void 0)return``;let t=new URLSearchParams;e.projectId!==void 0&&t.set(`projectId`,e.projectId),e.workspaceId!==void 0&&t.set(`workspaceId`,e.workspaceId),e.terminalId!==void 0&&t.set(`terminalId`,e.terminalId),e.statuses!==void 0&&e.statuses.length>0&&t.set(`statuses`,e.statuses.join(`,`)),e.metadata!==void 0&&Object.keys(e.metadata).length>0&&t.set(`metadata`,JSON.stringify(e.metadata));let n=t.toString();return n===``?``:`?${n}`}function os(e){if(!ss(e))return;let t=e.error;return typeof t==`string`?t:void 0}function ss(e){return typeof e==`object`&&!!e}var cs={files:(e,t)=>{let n=new URLSearchParams({q:e});return t.kind!==void 0&&n.set(`kind`,t.kind),t.mode!==void 0&&n.set(`mode`,t.mode),t.scope!==void 0&&n.set(`scope`,t.scope),v(`${P(t.machineId)}/projects/${encodeURIComponent(t.projectId)}/workspaces/${encodeURIComponent(t.workspaceId)}/files?${n.toString()}`,j(Ii))}},ls=(e,t,n)=>`${P(e)}/projects/${encodeURIComponent(t)}/workspaces/${encodeURIComponent(n)}/trust`,us=(e,t)=>{let n=new URLSearchParams({path:t});return`${P(e)}/projects/trust?${n.toString()}`},ds={projectTrust:(e,t=`local`)=>v(us(t,e),Wi),workspaceTrust:(e,t,n=`local`)=>v(ls(n,e,t),Wi),setWorkspaceTrust:(e,t,n,r=`local`)=>v(ls(r,e,t),Wi,{method:`PUT`,body:JSON.stringify({trusted:n})})},fs={...Ro,...zo,...Ho,...Wo,...Jo,...Xo,...Qo,...$o,...es,...cs,...ds},ps=256*1024,ms=8*1024*1024,hs=266240,gs=8392704,_s=/^[a-z][a-z0-9.-]*$/u,vs=64;function ys(e){return e.length<=128&&_s.test(e)}function bs(e){if(!ys(e))throw Error(`Plugin backend operation must match ${String(_s)} and be at most 128 characters`);return e}function xs(e){if(typeof e!=`string`||e===``||e.length>512)throw Error(`Plugin backend revision must be a non-empty string of at most 512 characters`);return e}function Ss(e,t,n=ps){let r=Ts(e,new Set,t,0);if(ws(JSON.stringify(r))>n)throw Error(`${t} exceeds the ${String(n)} byte limit`);return r}function Cs(e,t,n=ps){if(ws(e)>n)throw Error(`${t} exceeds the ${String(n)} byte limit`);let r;try{r=JSON.parse(e)}catch(e){throw Error(`${t} must be valid JSON`,{cause:e})}return Ss(r,t,n)}function ws(e){return new TextEncoder().encode(e).byteLength}function Ts(e,t,n,r){if(r>vs)throw Error(`${n} exceeds the maximum JSON depth of ${String(vs)}`);if(e===null||typeof e==`string`||typeof e==`boolean`)return e;if(typeof e==`number`){if(!Number.isFinite(e))throw Error(`${n} must contain only finite JSON numbers`);return e}if(Array.isArray(e)){if(t.has(e))throw Error(`${n} must not contain cycles`);t.add(e);let i=e.map(e=>Ts(e,t,n,r+1));return t.delete(e),Object.freeze(i),i}if(!Ds(e))throw Error(`${n} must contain only JSON values`);if(t.has(e))throw Error(`${n} must not contain cycles`);t.add(e);let i={};for(let[a,o]of Object.entries(e))Es(i,a,Ts(o,t,n,r+1));return t.delete(e),Object.freeze(i)}function Es(e,t,n){Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0})}function Ds(e){if(typeof e!=`object`||!e||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function Os(e,t){if(!mn(e.pluginId))throw Error(`Invalid PI WEB plugin id: ${e.pluginId}`);if(e.machineId===``)throw Error(`Machine id is required`);if(e.projectId===``)throw Error(`Project id is required`);if(e.workspaceId===``)throw Error(`Workspace id is required`);let n=bs(t);return`${e.machineId===`local`?`api`:`api/machines/${encodeURIComponent(e.machineId)}`}/plugin-backends/${encodeURIComponent(e.pluginId)}/projects/${encodeURIComponent(e.projectId)}/workspaces/${encodeURIComponent(e.workspaceId)}/${encodeURIComponent(n)}`}function ks(e,t,n){let r=Os(e,t);return n===void 0?Ze(r):Ze(r,n)}async function As(e,t,n){let r=xs(e.backendRevision),i=Ss(n,`Plugin backend request input`),a=JSON.stringify({revision:r,input:i});if(ws(a)>266240)throw Error(`Plugin backend request exceeds the ${String(hs)} byte wire limit`);let o;try{o=await fetch(ks(e,t),{method:`POST`,headers:{"content-type":`application/json`},body:a})}catch(e){throw Error(`Plugin backend request unavailable: ${y(e)}`,{cause:e})}let s=await js(o);if(!o.ok)throw Error(Ns(s)??`Plugin backend request returned HTTP ${String(o.status)}`);return Cs(s,`Plugin backend response`,ms)}async function js(e){let t=e.headers.get(`content-length`);if(t!==null&&/^\d+$/u.test(t)&&Number(t)>8392704)throw await e.body?.cancel(),Error(`Plugin backend response exceeds the ${String(gs)} byte wire limit`);if(e.body===null){let t=await e.text();if(ws(t)>8392704)throw Ms();return t}let n=e.body.getReader(),r=new TextDecoder,i=0,a=``;try{let e=await n.read();for(;!e.done;){if(i+=e.value.byteLength,i>8392704)throw await n.cancel(),Ms();a+=r.decode(e.value,{stream:!0}),e=await n.read()}return a+r.decode()}finally{n.releaseLock()}}function Ms(){return Error(`Plugin backend response exceeds the ${String(gs)} byte wire limit`)}function Ns(e){try{let t=JSON.parse(e);return Ps(t)&&typeof t.error==`string`?t.error:void 0}catch{return}}function Ps(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Fs(e,t=`local`){let n=`?${new URLSearchParams({cwd:e.cwd}).toString()}`;return new WebSocket(Qe(`${Rs(t)}/sessions/${encodeURIComponent(e.id)}/events${n}`))}function Is(e,t,n,r,i=`local`){let a=r===void 0?``:`?${new URLSearchParams({cols:String(r.cols),rows:String(r.rows)}).toString()}`;return new WebSocket(Qe(`${Rs(i)}/projects/${encodeURIComponent(e)}/workspaces/${encodeURIComponent(t)}/terminals/${encodeURIComponent(n)}/socket${a}`))}function Ls(e=`local`){return new WebSocket(Qe(`${Rs(e)}/events`))}function Rs(e){return`api/machines/${encodeURIComponent(e)}`}var zs=`.pi-web/uploads`,Bs=class extends Error{constructor(e=`Workspace upload cancelled`){super(e),this.name=`WorkspaceUploadCancelledError`}},Vs=class extends Error{constructor(e,t){super(Qs(e)),this.name=`WorkspaceUploadBatchError`,this.failures=e.map(e=>({...e})),this.responses=t.map(e=>({...e}))}};function Hs(e){return e?.uploads?.defaultFolder??`.pi-web/uploads`}function Us(e,t){return e.uploads?.defaultFolder??t}function Ws(e,t){let n=ec(e,`upload destination`,{allowEmpty:!0}),r=ec(t,`upload file name`,{allowEmpty:!1});return n===``?r:`${n}/${r}`}function Gs(e,t,n,r={}){let i=r.xhrFactory?.()??new XMLHttpRequest,a=!1,o=!1;return{promise:new Promise((s,c)=>{let l=e=>{a||(a=!0,c(e))},u=e=>{a||(a=!0,s(e))};i.open(`PUT`,ko(e,t,n.path,Js(r)),!0),i.responseType=`json`,i.setRequestHeader(`Content-Type`,(n.contentType??n.file.type)||`application/octet-stream`),i.upload.onprogress=e=>{r.onProgress?.(Ys(e,n.file.size))},i.onload=()=>{if(i.status>=200&&i.status<300){try{r.onProgress?.({loaded:n.file.size,total:n.file.size,percent:1,lengthComputable:!0}),u(Bi(nc(i)))}catch(e){l(e instanceof Error?e:Error(String(e)))}return}l(Error(rc(i)))},i.onerror=()=>{l(Error(`Workspace upload failed`))},i.onabort=()=>{l(new Bs(o?void 0:`Workspace upload aborted`))},i.send(n.file)}),cancel:()=>{a||(o=!0,i.abort())}}}function Ks(e,t,n,r={}){let i=r.destinationFolder??`.pi-web/uploads`,a=n.map((e,t)=>({index:t,name:e.name,path:Ws(i,e.name),loaded:0,total:e.size,percent:Zs(0,e.size),lengthComputable:!0,done:!1})),o,s=0,c={requested:!1},l=()=>{r.onProgress?.(Xs(a,s,a.every(e=>e.done)))};return{promise:(async()=>{let i=[],u=[];for(let d=0;d<n.length;d+=1){if(c.requested)throw new Bs;s=d;let f=n[d],p=a[d];if(!(f===void 0||p===void 0)){o=Gs(e,t,{path:p.path,file:f},{...qs(r),onProgress:e=>{p.total=e.total,p.loaded=Math.min(e.loaded,p.total),p.percent=e.percent,p.lengthComputable=e.lengthComputable,l()}});try{let e=await o.promise;p.loaded=p.total,p.percent=1,p.lengthComputable=!0,p.done=!0,i.push(e),l()}catch(e){if($s(e,c))throw e;let t=y(e);p.loaded=p.total,p.percent=1,p.lengthComputable=!0,p.done=!0,p.error=t,u.push({index:d,name:f.name,path:p.path,error:t}),l()}finally{o=void 0}}}if(u.length>0)throw new Vs(u,i);return i})(),cancel:()=>{c.requested=!0,o?.cancel()}}}function qs(e){return{...e.createDirs===void 0?{}:{createDirs:e.createDirs},...e.overwrite===void 0?{}:{overwrite:e.overwrite},...e.machineId===void 0?{}:{machineId:e.machineId},...e.xhrFactory===void 0?{}:{xhrFactory:e.xhrFactory}}}function Js(e){return{...e.createDirs===void 0?{}:{createDirs:e.createDirs},...e.overwrite===void 0?{}:{overwrite:e.overwrite},...e.machineId===void 0?{}:{machineId:e.machineId}}}function Ys(e,t){let n=e.lengthComputable?e.total:t;return{loaded:e.loaded,total:n,percent:Zs(e.loaded,n),lengthComputable:e.lengthComputable}}function Xs(e,t,n){let r=e.reduce((e,t)=>e+t.total,0),i=e.reduce((e,t)=>e+t.loaded,0);return{currentFileIndex:t,files:e.map(e=>({...e})),loaded:i,total:r,percent:Zs(i,r),done:n}}function Zs(e,t){return t<=0?e<=0?0:1:Math.max(0,Math.min(1,e/t))}function Qs(e){return e.length===1?e[0]?.error??`Workspace upload failed`:`${String(e.length)} files failed to upload`}function $s(e,t){return t.requested||e instanceof Bs}function ec(e,t,n){let r=e.trim();if(r===``){if(n.allowEmpty)return``;throw Error(`${t} must not be empty`)}if(tc(r))throw Error(`${t} must be workspace-relative`);let i=r.split(/[\\/]+/u).filter(e=>e!==``&&e!==`.`);if(i.length===0){if(n.allowEmpty)return``;throw Error(`${t} must not be empty`)}if(i.some(e=>e===`..`))throw Error(`${t} must not contain path traversal`);return i.join(`/`)}function tc(e){let t=e.replace(/\\/g,`/`);return t.startsWith(`/`)||/^[A-Za-z]:\//u.test(t)}function nc(e){return e.response!==void 0&&e.response!==null&&e.response!==``?e.response:e.responseText===``?{}:JSON.parse(e.responseText)}function rc(e){let t=ic(e);return ac(t)&&typeof t.error==`string`?t.error:e.statusText||`HTTP ${String(e.status)}`}function ic(e){try{return nc(e)}catch{return}}function ac(e){return typeof e==`object`&&!!e}function oc(){let e=globalThis.crypto.randomUUID?.();return e===void 0?`cm-${String(Date.now())}-${Math.random().toString(36).slice(2,10)}`:e}function sc(e,t,n=[]){let r=n.filter(e=>e.kind===`image`).map(e=>({type:`image`,mimeType:e.mimeType,data:e.data}));return{role:`user`,parts:e===``?[...r]:[{type:`text`,text:e},...r],meta:{timestamp:new Date().toISOString(),delivery:{clientMessageId:t,state:`sending`}}}}function cc(e){return e===`delivered`}function lc(e){return e===`delivered`||e===`failed`}function uc(e){return!lc(e)}function dc(e,t){if(t.length===0)return{settled:[...e],pending:[]};let n=new Map,r=[];for(let t of e){let e=t.meta?.delivery;e!==void 0&&(n.set(e.clientMessageId,t),uc(e.state)&&r.push(t))}let i=[];for(let e of t){let t=(e.clientMessageId===void 0?void 0:n.get(e.clientMessageId))??r.find(t=>t.meta?.delivery?.kind===e.kind&&fc(t)===e.text);t!==void 0&&r.splice(r.indexOf(t),1),i.push(t??pc(e))}let a=new Set(i);return{settled:e.filter(e=>!a.has(e)),pending:i}}function fc(e){return e.parts.filter(e=>e.type===`text`).map(e=>e.text).join(``)}function pc(e){let t=e.clientMessageId??`queued:${e.kind}:${e.text}`;return{role:`user`,parts:[{type:`text`,text:e.text}],meta:{delivery:{clientMessageId:t,state:`queued`,kind:e.kind}}}}function mc(e,t){return e.findIndex(e=>e.meta?.delivery?.clientMessageId===t)}function hc(e,t,n,r){let i=mc(e,t);if(i===-1)return e;let a=e[i],o=a?.meta?.delivery;if(a===void 0||o===void 0||!vc(o.state,n)&&!gc(o.kind,r,o.state,n))return e;let s=[...e],c=vc(o.state,n)?n:o.state,l=r??o.kind;return s[i]={...a,meta:{...a.meta,delivery:{clientMessageId:t,state:c,...l===void 0?{}:{kind:l}}}},s}function gc(e,t,n,r){return t!==void 0&&t!==e&&n===`queued`&&r===`queued`}var _c={failed:-1,sending:0,received:1,queued:2,delivered:3};function vc(e,t){return e===t?!1:t===`failed`?e!==`delivered`:e!==`failed`&&_c[t]>_c[e]}function yc(e,t){let n=mc(e,t);if(n===-1)return[...e];let r=e[n];if(r?.meta?.delivery?.state!==`failed`)return[...e];let i=r.meta.delivery,a=[...e];return a[n]={...r,meta:{...r.meta,delivery:{clientMessageId:t,state:`sending`,...i.kind===void 0?{}:{kind:i.kind}}}},a}function bc(e,t){let n=mc(e,t);return n===-1?[...e]:[...e.slice(0,n),...e.slice(n+1)]}function xc(e,t){let n=e,r=new Map;for(let e of t)e.clientMessageId!==void 0&&r.set(e.clientMessageId,e.kind);for(let t of e){let e=t.meta?.delivery;if(e===void 0)continue;let i=r.get(e.clientMessageId);if(i!==void 0){n=hc(n,e.clientMessageId,`queued`,i);continue}(e.state===`received`||e.state===`queued`)&&(n=hc(n,e.clientMessageId,`delivered`))}return n}function Sc(e,t){return t!==void 0&&mc(e,t)!==-1}function Cc(e,t){let n=e.meta?.delivery;return n===void 0?t:{...t,meta:{...t.meta,delivery:{...n,state:n.state===`failed`?n.state:`delivered`}}}}function wc(e,t){return t===``?-1:e.findIndex(e=>e.role===`user`&&e.meta?.delivery!==void 0&&Tc(e)===t)}function Tc(e){return e.parts.filter(e=>e.type===`text`).map(e=>e.text).join(`
|
|
4
4
|
|
|
@@ -15,7 +15,7 @@ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./CodeViewer-DyfKGKrr.
|
|
|
15
15
|
`)>e.lastIndexOf(`$ `)}function gd(e,t){if(t==null)return e;let n=Ec([t]);return n.length===0?e:[...e,...n]}function _d(e,t){if(t.type===`message.append`)return Ud(e,t.message,t.clientMessageId,t.echo===!0);if(t.type===`assistant.delta`)return Ac(e,`assistant`,t.text);if(t.type===`assistant.thinking.delta`)return jc(e,t.text);if(t.type===`tool.start`)return Cd(e,t);if(t.type===`tool.update`)return Od(e,t.toolCallId,e=>wd(e,t));if(t.type===`tool.end`)return Td(e,{toolCallId:t.toolCallId,toolName:t.toolName,text:t.text,isError:t.isError,content:t.content,details:t.details,presentation:Ad({role:`toolResult`,content:t.content})});if(t.type===`shell.start`)return[...e,fd(t.command,t.excludeFromContext)];if(t.type===`shell.chunk`)return pd(e,t.chunk);if(t.type===`shell.end`)return md(e,t);if(t.type===`command.output`)return[...e,Dc(t.level===`error`?`system`:`tool`,t.message)];if(t.type===`session.error`)return[...e,Dc(`system`,t.message)];if(t.type===`message.end`)return t.message===void 0?void 0:vd(e,t.message)}function vd(e,t){let n=jd(t);if(n!==void 0)return Td(e,n);let r=Mc(t);if(r.length===0)return;let i=r.map(e=>e.role===`assistant`?xd(e):e).filter(e=>e.parts.length>0);return i.length===0?e:i.reduce((e,t)=>yd(e,t),e)}function yd(e,t){let n=Nd(e,t);if(n.length>0)return Pd(e,n,t);let r=t.parts.find(e=>e.type===`askUserRecord`);if(r!==void 0)return bd(e,t,r);if(t.role===`user`){let n=wc(e,Hd(t)),r=n===-1?Gd(e,t):n;if(r!==-1){let n=e[r];if(n!==void 0)return[...e.slice(0,r),Cc(n,t),...e.slice(r+1)]}}if(t.role===`assistant`){let n=kc(e),r=e.slice(0,n),i=e.slice(n);return r.at(-1)?.role===`assistant`?[...r.slice(0,-1),t,...i]:[...r,t,...i]}let i=e.at(-1);return i?.role===t.role&&Vd(i,t)?[...e.slice(0,-1),t]:[...e,t]}function bd(e,t,n){for(let r=e.length-1;r>=0;r--)if(Dd(e[r],n))return[...e.slice(0,r),t,...e.slice(r+1)];return[...e,t]}function xd(e){return{...e,parts:e.parts.filter(e=>e.type!==`toolCall`)}}function Sd(e){if(e===void 0||e===``)return;let t=e.replace(/\\/g,`/`);if(!t.endsWith(`/SKILL.md`)&&t!==`SKILL.md`)return;let n=t.split(`/`).at(-2);if(!(n===void 0||n===``))return{name:n,path:e}}function Cd(e,t){let n=t.toolName===`read`?Sd(Qd(t.args,`path`)):void 0;if(n!==void 0)return Kd(e,{role:`skill`,parts:[{type:`skillRead`,...n,...t.toolCallId===``?{}:{toolCallId:t.toolCallId}}]});let r={type:`toolExecution`,...t.toolCallId===``?{}:{toolCallId:t.toolCallId},toolName:t.toolName,summary:t.summary||nl(t.args),...t.args===void 0?{}:{args:t.args},status:`running`};return[...e,{role:`tool`,parts:[r]}]}function wd(e,t){let n=el(t.details)??e.preview;return{...e,status:e.status===`pending`?`running`:e.status,...t.text===``?{}:{resultText:t.text},...t.content===void 0?{}:{content:t.content},...t.details===void 0?{}:{details:t.details},...n===void 0?{}:{preview:n}}}function Td(e,t){let{toolCallId:n,toolName:r,text:i,isError:a,content:o,details:s,presentation:c}=t,l=Od(e,n,e=>{let t=el(s)??e.preview;return{...e,status:a?`error`:`success`,resultText:i,...o===void 0?{}:{content:o},...s===void 0?{}:{details:s},...t===void 0?{}:{preview:t}}},e=>kd(e,c)),u=l;if(l===e){let t=el(s),l={type:`toolExecution`,...n===void 0||n===``?{}:{toolCallId:n},toolName:r,summary:nl(o),status:a?`error`:`success`,resultText:i,...o===void 0?{}:{content:o},...s===void 0?{}:{details:s},...t===void 0?{}:{preview:t}};u=[...e,kd({role:`tool`,parts:[l]},c)]}return Ed(u,r,s,c.meta)}function Ed(e,t,n,r){let i=qc(t,n);if(i===void 0)return e;for(let t=e.length-1;t>=0;t--){let n=e[t];if(Dd(n,i))return r===void 0||n===void 0?e:[...e.slice(0,t),{...n,meta:r},...e.slice(t+1)]}return[...e,{role:`tool`,parts:[i],...r===void 0?{}:{meta:r}}]}function Dd(e,t){return e?.parts.some(e=>e.type===`askUserRecord`&&e.outcome.askId===t.outcome.askId&&e.outcome.reason===t.outcome.reason)===!0}function Od(e,t,n,r=e=>e){if(t===void 0||t===``)return e;for(let i=e.length-1;i>=0;i--){let a=e[i];if(a===void 0)continue;let o=a.parts.findIndex(e=>e.type===`toolExecution`&&e.toolCallId===t);if(o<0)continue;let s=a.parts[o];if(s?.type!==`toolExecution`)continue;let c=r({...a,parts:[...a.parts.slice(0,o),n(s),...a.parts.slice(o+1)]});return[...e.slice(0,i),c,...e.slice(i+1)]}return e}function kd(e,t){let n={...e,parts:[...e.parts.filter(e=>e.type!==`image`),...t.images]};return t.meta===void 0?n:{...n,meta:t.meta}}function Ad(e){let t=Mc(e),n=t.flatMap(e=>e.parts.filter(e=>e.type===`image`)),r=t.find(e=>e.meta!==void 0)?.meta;return{images:n,...r===void 0?{}:{meta:r}}}function jd(e){if(Qd(e,`role`)!==`toolResult`)return;let t=Qd(e,`toolCallId`),n=Zd(e,`content`);return{...t===void 0?{}:{toolCallId:t},toolName:Qd(e,`toolName`)??`tool`,text:Md(n),isError:$d(e,`isError`)===!0,content:n,details:Zd(e,`details`),presentation:Ad(e)}}function Md(e){if(typeof e==`string`)return e;if(Array.isArray(e))return e.map(Md).filter(e=>e!==``).join(`
|
|
16
16
|
`);if(typeof e==`object`&&e){let t=Qd(e,`text`)??Qd(e,`content`)??Qd(e,`output`);if(t!==void 0)return t}return``}function Nd(e,t){let n=Ld(t);if(n.length===0)return[];let r=[],i=n.length,a=Yd(e)+1;for(let t=e.length-1;t>=a;t--){let a=Ld(e[t]);if(a.length===0)continue;let o=i-a.length;if(!(o<0)&&Rd(a,n.slice(o,i))&&(r.unshift(t),i=o,i===0))return r}return[]}function Pd(e,t,n){let r=Fd(e,t,n),i=r[0];if(i===void 0)return e;let a=new Set(r),o=[];for(let t=0;t<e.length;t++){t===i&&o.push(n);let r=e[t];r!==void 0&&!a.has(t)&&o.push(r)}return o}function Fd(e,t,n){let r=t[0];if(n.role!==`assistant`||r===void 0)return t;let i=r-1;return Id(e[i])?[i,...t]:t}function Id(e){return e?.role===`assistant`&&e.parts.length>0&&e.parts.every(e=>e.type===`text`||e.type===`thinking`)}function Ld(e){return e===void 0?[]:e.parts.filter(e=>e.type===`skillRead`)}function Rd(e,t){return e.length===t.length&&e.every((e,n)=>zd(e,t[n]))}function zd(e,t){return t===void 0?!1:e.toolCallId!==void 0&&t.toolCallId!==void 0?e.toolCallId===t.toolCallId:Bd(e.path)===Bd(t.path)||e.name===t.name}function Bd(e){return e.replace(/\\/g,`/`)}function Vd(e,t){return Hd(e)===Hd(t)}function Hd(e){return e.parts.filter(e=>e.type===`text`).map(e=>e.text).join(`
|
|
17
17
|
|
|
18
|
-
`)}function Ud(e,t,n,r=!1){let i=Mc(t);if(i.length===0)return e;if(r)return Wd(e,i,n);let a=ld({transcript:e,lines:i,clientMessageId:n});return a.kind===`ignore`?e:a.kind===`replace`?[...e.slice(0,a.at),a.line,...e.slice(a.at+1),...a.rest]:i.reduce((e,t)=>ud(e,t),e)}function Wd(e,t,n){if(Sc(e,n))return e;let r=t[0];if(r===void 0)return e;let i={...r,meta:{...r.meta,echo:!0}};return[...e,i,...t.slice(1)]}function Gd(e,t){if(t?.role!==`user`)return-1;let n=Hd(t);return n===``?-1:e.findIndex(e=>e.role===`user`&&e.meta?.echo===!0&&Hd(e)===n)}function Kd(e,t){let n=e.at(-1);return qd(e,t)?e:n?.role===t.role&&t.role!==`skill`?[...e.slice(0,-1),{...n,parts:[...n.parts,...t.parts]}]:[...e,t]}function qd(e,t){let n=Ld(t);if(t.role!==`skill`||n.length===0)return!1;let r=Yd(e)+1;return n.every(t=>Jd(e,t,r))}function Jd(e,t,n){for(let r=e.length-1;r>=n;r--)if(Ld(e[r]).some(e=>zd(e,t)))return!0;return!1}function Yd(e){for(let t=e.length-1;t>=0;t--)if(e[t]?.role===`user`)return t;return-1}function Xd(e){return typeof e==`object`&&!!e}function Zd(e,t){return Xd(e)?e[t]:void 0}function Qd(e,t){let n=Zd(e,t);return typeof n==`string`?n:void 0}function $d(e,t){let n=Zd(e,t);return typeof n==`boolean`?n:void 0}var ef=`pi-web:chat-history:v2:`,tf=1800*1e3;function nf(e){try{let t=sessionStorage.getItem(uf(e));if(t===null||t===``)return;let n=JSON.parse(t);if(!df(n))return;if(Date.now()-n.savedAt>tf){sessionStorage.removeItem(uf(e));return}return{messages:n.messages,start:n.start,total:n.total}}catch{return}}function rf(e,t){try{sessionStorage.setItem(uf(e),JSON.stringify({...t,savedAt:Date.now()}))}catch{}}function af(e){try{sessionStorage.removeItem(uf(e))}catch{}}function of(e,t){if(e===void 0||!ff(e))return t;if(!ff(t))return e;if(sf(e,t))return t;let n=Math.min(e.start,t.start),r=Math.max(e.start+e.messages.length,t.start+t.messages.length),i=Array(r-n);return lf(i,n,e),lf(i,n,t),cf(i)?t:{start:n,total:Math.max(e.total,t.total),messages:i}}function sf(e,t){return e.total>t.total&&e.start===0&&t.start===0&&t.messages.length===t.total}function cf(e){for(let t=0;t<e.length;t+=1)if(!(t in e)||e[t]===void 0)return!0;return!1}function lf(e,t,n){n.messages.forEach((r,i)=>{e[n.start-t+i]=r})}function uf(e){return`${ef}${e}`}function df(e){if(typeof e!=`object`||!e||!(`messages`in e)||!(`start`in e)||!(`total`in e)||!(`savedAt`in e))return!1;let{messages:t,start:n,total:r,savedAt:i}=e;return Array.isArray(t)&&typeof n==`number`&&typeof r==`number`&&typeof i==`number`&&ff({messages:t,start:n,total:r})}function ff(e){return Number.isInteger(e.start)&&Number.isInteger(e.total)&&e.start>=0&&e.total>=e.start&&e.messages.length<=e.total-e.start&&!e.messages.some(pf)}function pf(e){return typeof e==`object`&&!!e&&`role`in e&&`parts`in e&&!(`content`in e)&&typeof e.role==`string`&&Array.isArray(e.parts)}var mf={read:nf,write:rf,remove:af},hf=class{constructor(e=mf){this.cache=e,this.rawHistoryPages=new Map}cachedView(e){return gf(this.rawHistoryPage(e))}mergeHistory(e,t){let n=of(this.rawHistoryPage(e),t);return this.
|
|
18
|
+
`)}function Ud(e,t,n,r=!1){let i=Mc(t);if(i.length===0)return e;if(r)return Wd(e,i,n);let a=ld({transcript:e,lines:i,clientMessageId:n});return a.kind===`ignore`?e:a.kind===`replace`?[...e.slice(0,a.at),a.line,...e.slice(a.at+1),...a.rest]:i.reduce((e,t)=>ud(e,t),e)}function Wd(e,t,n){if(Sc(e,n))return e;let r=t[0];if(r===void 0)return e;let i={...r,meta:{...r.meta,echo:!0}};return[...e,i,...t.slice(1)]}function Gd(e,t){if(t?.role!==`user`)return-1;let n=Hd(t);return n===``?-1:e.findIndex(e=>e.role===`user`&&e.meta?.echo===!0&&Hd(e)===n)}function Kd(e,t){let n=e.at(-1);return qd(e,t)?e:n?.role===t.role&&t.role!==`skill`?[...e.slice(0,-1),{...n,parts:[...n.parts,...t.parts]}]:[...e,t]}function qd(e,t){let n=Ld(t);if(t.role!==`skill`||n.length===0)return!1;let r=Yd(e)+1;return n.every(t=>Jd(e,t,r))}function Jd(e,t,n){for(let r=e.length-1;r>=n;r--)if(Ld(e[r]).some(e=>zd(e,t)))return!0;return!1}function Yd(e){for(let t=e.length-1;t>=0;t--)if(e[t]?.role===`user`)return t;return-1}function Xd(e){return typeof e==`object`&&!!e}function Zd(e,t){return Xd(e)?e[t]:void 0}function Qd(e,t){let n=Zd(e,t);return typeof n==`string`?n:void 0}function $d(e,t){let n=Zd(e,t);return typeof n==`boolean`?n:void 0}var ef=`pi-web:chat-history:v2:`,tf=1800*1e3;function nf(e){try{let t=sessionStorage.getItem(uf(e));if(t===null||t===``)return;let n=JSON.parse(t);if(!df(n))return;if(Date.now()-n.savedAt>tf){sessionStorage.removeItem(uf(e));return}return{messages:n.messages,start:n.start,total:n.total}}catch{return}}function rf(e,t){try{sessionStorage.setItem(uf(e),JSON.stringify({...t,savedAt:Date.now()}))}catch{}}function af(e){try{sessionStorage.removeItem(uf(e))}catch{}}function of(e,t){if(e===void 0||!ff(e))return t;if(!ff(t))return e;if(sf(e,t))return t;let n=Math.min(e.start,t.start),r=Math.max(e.start+e.messages.length,t.start+t.messages.length),i=Array(r-n);return lf(i,n,e),lf(i,n,t),cf(i)?t:{start:n,total:Math.max(e.total,t.total),messages:i}}function sf(e,t){return e.total>t.total&&e.start===0&&t.start===0&&t.messages.length===t.total}function cf(e){for(let t=0;t<e.length;t+=1)if(!(t in e)||e[t]===void 0)return!0;return!1}function lf(e,t,n){n.messages.forEach((r,i)=>{e[n.start-t+i]=r})}function uf(e){return`${ef}${e}`}function df(e){if(typeof e!=`object`||!e||!(`messages`in e)||!(`start`in e)||!(`total`in e)||!(`savedAt`in e))return!1;let{messages:t,start:n,total:r,savedAt:i}=e;return Array.isArray(t)&&typeof n==`number`&&typeof r==`number`&&typeof i==`number`&&ff({messages:t,start:n,total:r})}function ff(e){return Number.isInteger(e.start)&&Number.isInteger(e.total)&&e.start>=0&&e.total>=e.start&&e.messages.length<=e.total-e.start&&!e.messages.some(pf)}function pf(e){return typeof e==`object`&&!!e&&`role`in e&&`parts`in e&&!(`content`in e)&&typeof e.role==`string`&&Array.isArray(e.parts)}var mf={read:nf,write:rf,remove:af},hf=class{constructor(e=mf,t={}){this.cache=e,this.rawHistoryPages=new Map,this.maxInMemoryTranscripts=Math.max(1,t.maxInMemoryTranscripts??12)}cachedView(e){return gf(this.rawHistoryPage(e))}mergeHistory(e,t){let n=of(this.rawHistoryPage(e),t);return this.remember(e,n),this.cache.write(e,n),gf(n)}applyLiveEvent(e,t){return _d(e,t)}seedStreamingPartial(e,t){return gd(e,t)}discard(e){this.rawHistoryPages.delete(e),this.cache.remove?.(e)}rawHistoryPage(e){let t=this.rawHistoryPages.get(e);if(t!==void 0)return this.remember(e,t),t;let n=this.cache.read(e);return n!==void 0&&this.remember(e,n),n}remember(e,t){for(this.rawHistoryPages.delete(e),this.rawHistoryPages.set(e,t);this.rawHistoryPages.size>this.maxInMemoryTranscripts;){let e=this.rawHistoryPages.keys().next().value;if(e===void 0)return;this.rawHistoryPages.delete(e)}}};function gf(e){let t=e?.start??0;return{messages:Ec(e?.messages??[]),messagePageStart:t,messagePageEnd:t+(e?.messages.length??0),messagePageTotal:e?.total??0}}var _f=`pi-web:pending-prompt:`;function vf(){try{return typeof localStorage>`u`?void 0:localStorage}catch{return}}function yf(e){return`${_f}${e}`}function bf(e){return typeof e==`object`&&!!e&&typeof Reflect.get(e,`text`)==`string`}function xf(e){return!!(e instanceof Sf||e instanceof TypeError&&/fetch|network|load failed|failed to fetch/i.test(e.message)||e instanceof Error&&/ECONNREFUSED|ENOTFOUND|socket hang up|network.*down/i.test(e.message))}var Sf=class extends Error{constructor(e,t,n){super(e,n),this.clientMessageId=t,this.name=`NetworkSendError`}};function Cf(e,t=vf()){try{let n=t?.getItem(yf(e));if(n==null||n===``)return[];let r=JSON.parse(n);return Array.isArray(r)?r.filter(bf):[]}catch{return[]}}function wf(e,t,n=vf()){try{let r=Cf(e,n),i=t.clientMessageId===void 0?-1:r.findIndex(e=>e.clientMessageId===t.clientMessageId);i===-1?r.push(t):r[i]=t,n?.setItem(yf(e),JSON.stringify(r))}catch{}}function Tf(e,t=vf()){try{t?.removeItem(yf(e))}catch{}}function Ef(e){return e.trim().toLowerCase().split(/\s+/u).filter(Boolean)}function Df(e,t){let n=Ef(t),r=e.toLowerCase();if(n.length===0)return 0;let i=0;for(let e of n){let t=r.indexOf(e);if(t!==-1){i+=100,t===0?i+=30:jf(r.charAt(t-1))&&(i+=20);continue}if(!kf(e,r))return;i+=25}return i}function Of(e,t,n){if(Ef(t).length===0)return[...e];let r=[];return e.forEach((e,i)=>{let a=Df(n(e),t);a!==void 0&&r.push({item:e,score:a,index:i})}),r.sort((e,t)=>t.score-e.score||e.index-t.index),r.map(e=>e.item)}function kf(e,t){if(e===``)return!0;if(t===``)return!1;let n=new Set([0]);for(let r of e){let e=new Set;for(let i of n)for(let n=i;n<t.length;n+=1)t.charAt(n)===r&&(n!==i&&!Af(t,n)||e.add(n+1));if(e.size===0)return!1;n=e}return!0}function Af(e,t){return t===0||jf(e.charAt(t-1))}function jf(e){return e===``||/[\s\-_/.:@]/u.test(e)}function Mf(e,t=e.length){let n=e.slice(0,t),r=Rf(n,t);if(r!==void 0)return r;let i=zf(n,t);if(i!==void 0)return i;let a=Math.max(n.lastIndexOf(` `),n.lastIndexOf(`
|
|
19
19
|
`))+1,o=n.slice(a);if(n.slice(0,a).endsWith(`@ `))return{kind:`file`,query:o,from:a-2,to:t,fileScope:`all`,allPrefix:`@ `};if(o.startsWith(`/`)&&a===0)return{kind:`command`,query:o.slice(1),from:a,to:t};if(o.startsWith(`!@`))return{kind:`file`,query:o.slice(2),from:a,to:t,fileScope:`all`,allPrefix:`!@`};if(o.startsWith(`@`))return{kind:`file`,query:o.slice(1),from:a,to:t,fileScope:`tracked`};if(o.startsWith(`#`))return{kind:`model`,query:o.slice(1),from:a,to:t}}var Nf=12;function Pf(e,t){return Of(e.filter(Ff),t,If).slice(0,Nf).map(e=>({insertText:`#${e.provider}/${e.id}`,detail:e.provider,...e.name!==void 0&&e.name!==``&&e.name!==e.id?{description:e.name}:{}}))}function Ff(e){return typeof e.provider==`string`&&e.provider!==``&&typeof e.id==`string`&&e.id!==``}function If(e){return`${e.provider}/${e.id} ${e.id}${e.name===void 0||e.name===``?``:` ${e.name}`}`}function Lf(e,t,n){let r=n??`@`;return!t&&!e.includes(` `)?`${r}${e}`:`${r}"${e}"`}function Rf(e,t){let n=e.lastIndexOf(`"`);if(n===-1)return;let r=e.slice(0,n);if(r.endsWith(`!@`))return{kind:`file`,query:e.slice(n+1),from:r.length-2,to:t,fileScope:`all`,allPrefix:`!@`,quoted:!0};if(r.endsWith(`@`))return{kind:`file`,query:e.slice(n+1),from:r.length-1,to:t,fileScope:`tracked`,quoted:!0};if(r.endsWith(`@ `))return{kind:`file`,query:e.slice(n+1),from:r.length-2,to:t,fileScope:`all`,allPrefix:`@ `,quoted:!0}}function zf(e,t){let n=e.lastIndexOf(`
|
|
20
20
|
`)+1,r=e.slice(n),i=Bf(r,`@ `),a=Bf(r,`!@`),o=Math.max(i,a);if(o===-1)return;let s=o===a?`!@`:`@ `,c=n+o,l=c+s.length;return{kind:`file`,query:e.slice(l),from:c,to:t,fileScope:`all`,allPrefix:s}}function Bf(e,t){for(let n=e.lastIndexOf(t);n>=0;n=e.lastIndexOf(t,n-1))if(n===0||Vf(e[n-1]))return n;return-1}function Vf(e){return e===` `||e===` `}function Hf(e){let t=e.trimStart();if(t.startsWith(`!@`))return{kind:`file`};if(t.startsWith(`!`))return{kind:`shell`,excludeFromContext:t.startsWith(`!!`)};if(Gf(e).startsWith(`/`))return{kind:`command`};let n=Mf(e);return n?.kind===`file`?{kind:`file`}:n?.kind===`model`?{kind:`model`}:{kind:`normal`}}function Uf(e){return Hf(e).kind===`shell`}function Wf(e,t){return e.kind===t.kind?e.kind===`shell`&&t.kind===`shell`?e.excludeFromContext===t.excludeFromContext:!0:!1}function Gf(e){let t=Math.max(e.lastIndexOf(` `),e.lastIndexOf(`
|
|
21
21
|
`))+1;return e.slice(t)}var Kf=5e4;function qf(e,t=Math.random){return Math.round(e*(.5+t()*.5))}var Jf=class{constructor(){this.seqMonitor=new tp(`session`),this.reconnectDelay=500,this.shouldReconnect=!1,this.hasOpened=!1,this.machineId=`local`,this.lastFrameAt=0}checkLiveness(e=Date.now()){let t=this.socket;t===void 0||!this.shouldReconnect||t.readyState===WebSocket.OPEN&&(this.lastFrameAt===0||e-this.lastFrameAt<Kf||ap(t))}get gapCount(){return this.seqMonitor.gapCount}connect(e,t,n,r=`local`,i,a,o){this.close(),this.machineId=r,this.session=e,this.onEvent=t,this.onReconnect=n,this.onInitialOpen=i,this.onMalformed=a,this.seqMonitor=new tp(`session`,o),this.shouldReconnect=!0,this.open()}setHandler(e){this.onEvent=e}close(){this.shouldReconnect=!1,window.clearTimeout(this.reconnectTimer),ap(this.socket),this.socket=void 0,this.session=void 0,this.onEvent=void 0,this.onReconnect=void 0,this.onInitialOpen=void 0,this.onMalformed=void 0,this.hasOpened=!1,this.machineId=`local`}open(){let e=this.session;if(e===void 0||e.id===``||e.cwd===``||!this.shouldReconnect)return;let t=Fs(e,this.machineId);this.socket=t,t.onopen=()=>{if(this.socket!==t)return;this.reconnectDelay=500,this.lastFrameAt=Date.now(),this.seqMonitor.reset();let e=this.hasOpened;this.hasOpened=!0,e?this.onReconnect?.():this.onInitialOpen?.()},t.onmessage=n=>void this.handleMessage(n.data,t,e),t.onerror=()=>{t.close()},t.onclose=()=>{this.socket===t&&(this.socket=void 0,this.scheduleReconnect())}}scheduleReconnect(){if(!this.shouldReconnect)return;window.clearTimeout(this.reconnectTimer);let e=qf(this.reconnectDelay);this.reconnectDelay=Math.min(this.reconnectDelay*1.6,5e3),this.reconnectTimer=window.setTimeout(()=>{this.open()},e)}reconnectNow(){!this.shouldReconnect||this.socket!==void 0||(window.clearTimeout(this.reconnectTimer),this.reconnectDelay=500,this.open())}async handleMessage(e,t,n){this.socket===t&&(this.lastFrameAt=Date.now());let r=await ip(e);this.seqMonitor.observe(r);let i=Qf(r);if(this.socket===t){if(i===void 0){let e=Zf(r);e!==void 0&&this.onMalformed?.(e);return}i.type===`notifications.inbox`&&(n.id!==i.summary.sessionId||n.cwd!==i.summary.cwd)||this.onEvent?.(i)}}},Yf=class{constructor(){this.seqMonitor=new tp(`global`),this.reconnectDelay=500,this.shouldReconnect=!1,this.machineId=`local`,this.lastFrameAt=0}checkLiveness(e=Date.now()){let t=this.socket;t===void 0||!this.shouldReconnect||t.readyState===WebSocket.OPEN&&(this.lastFrameAt===0||e-this.lastFrameAt<Kf||ap(t))}get gapCount(){return this.seqMonitor.gapCount}connect(e,t,n=`local`){this.close(),this.machineId=n,this.onEvent=e,this.onOpen=t,this.shouldReconnect=!0,this.open()}close(){this.shouldReconnect=!1,window.clearTimeout(this.reconnectTimer),ap(this.socket),this.socket=void 0,this.onEvent=void 0,this.onOpen=void 0,this.machineId=`local`}open(){if(!this.shouldReconnect)return;let e=Ls(this.machineId);this.socket=e,e.onopen=()=>{this.socket===e&&(this.reconnectDelay=500,this.lastFrameAt=Date.now(),this.seqMonitor.reset(),this.onOpen?.())},e.onmessage=t=>void this.handleMessage(t.data,e),e.onerror=()=>{e.close()},e.onclose=()=>{this.socket===e&&(this.socket=void 0,this.scheduleReconnect())}}scheduleReconnect(){if(!this.shouldReconnect)return;window.clearTimeout(this.reconnectTimer);let e=qf(this.reconnectDelay);this.reconnectDelay=Math.min(this.reconnectDelay*1.6,5e3),this.reconnectTimer=window.setTimeout(()=>{this.open()},e)}reconnectNow(){!this.shouldReconnect||this.socket!==void 0||(window.clearTimeout(this.reconnectTimer),this.reconnectDelay=500,this.open())}async handleMessage(e,t){this.socket===t&&(this.lastFrameAt=Date.now());let n=await ip(e);this.seqMonitor.observe(n);let r=$f(n);this.socket===t&&r!==void 0&&this.onEvent?.(r)}},Xf=new Set([`notifications.inbox`,`ask.opened`,`ask.closed`,`dialog.opened`,`dialog.closed`]);function Zf(e){let t=rp(e);return Xf.has(t)?t:void 0}function Qf(e){let t=rp(e);if(t===`notifications.inbox`)return np(()=>Hr(e));if(t===`ask.opened`)return np(()=>Yn(e));if(t===`ask.closed`)return np(()=>Xn(e));if(t===`dialog.opened`)return np(()=>ur(e));if(t===`dialog.closed`)return np(()=>dr(e));let n=np(()=>Or(e));return n===void 0?void 0:ep(n,e)}function $f(e){let t=rp(e);return np(t===`sessions.unread`?()=>Cr(e):t===`session.startup`?()=>wr(e):()=>kr(e))}function ep(e,t){if(typeof t!=`object`||!t||!(`seq`in t))return e;let n=t.seq;return typeof n==`number`?{...e,seq:n}:e}var tp=class{constructor(e,t){this.scope=e,this.onGap=t,this.gapEvents=0}get gapCount(){return this.gapEvents}reset(){this.lastSeen=void 0}observe(e){if(typeof e!=`object`||!e||!(`seq`in e))return;let t=e.seq;if(typeof t!=`number`||!Number.isFinite(t))return;let n=this.lastSeen;n!==void 0&&t<=n||(this.lastSeen=t,!(n===void 0||t===n+1)&&(this.gapEvents+=1,this.onGap?.(n),console.warn(`[pi-web] ${this.scope} scope lost frames: expected ${String(n+1)}, got ${String(t)} (${String(t-n-1)} missing)`)))}};function np(e){try{return e()}catch{return}}function rp(e){if(typeof e!=`object`||!e||!(`type`in e))return``;let t=e.type;return typeof t==`string`?t:``}async function ip(e){try{return typeof e==`string`?JSON.parse(e):e instanceof Blob?JSON.parse(await e.text()):e instanceof ArrayBuffer?JSON.parse(new TextDecoder().decode(e)):void 0}catch{return}}function ap(e){if(e!==void 0){if(e.onmessage=null,e.onerror=null,e.onclose=null,e.readyState===WebSocket.CONNECTING){e.onopen=()=>{e.close()};return}e.close()}}function op(e,t){if(e===void 0)return`unknown`;let n=(t?.sessionId===e.id?t.persisted:void 0)??e.persisted;return n===!0?`persisted`:n===!1||Su(e)?`transient`:`unknown`}function sp(e,t){return e!==void 0&&e.archived!==!0&&op(e,t)===`persisted`}function cp(e,t){return e!==void 0&&e.archived!==!0&&op(e,t)===`transient`}function lp(){try{return typeof sessionStorage>`u`?void 0:sessionStorage}catch{return}}var up=class{constructor(e,t,n=lp()){this.storageKey=e,this.storage=n,this.values=new Map;for(let[r,i]of fp(e,t,n))this.values.set(r,i)}get(e){return this.values.get(e)}set(e,t){this.values.set(e,t),this.save()}delete(e){this.values.delete(e),this.save()}entries(){return[...this.values.entries()]}save(){try{if(this.values.size===0){this.storage?.removeItem(this.storageKey);return}let e={version:1,entries:[...this.values.entries()]};this.storage?.setItem(this.storageKey,JSON.stringify(e))}catch{}}};function dp(e){return typeof e==`string`&&e!==``?e:void 0}function fp(e,t,n){try{let r=n?.getItem(e);if(r==null||r===``)return[];let i=JSON.parse(r);if(!pp(i))return[];let a=[];for(let e of i.entries){let n=e[0],r=t(e[1]);r!==void 0&&a.push([n,r])}return a}catch{return[]}}function pp(e){return!mp(e)||e.version!==1||!Array.isArray(e.entries)?!1:e.entries.every(e=>Array.isArray(e)&&e.length===2&&typeof e[0]==`string`&&e[0]!==``)}function mp(e){return typeof e==`object`&&!!e}var hp=class{constructor(){this.sessionIdsByCwd=new Map}latestSessionId(e){return this.sessionIdsByCwd.get(e)}rememberSession(e){this.sessionIdsByCwd.set(e.cwd,e.id)}forgetWorkspace(e){this.sessionIdsByCwd.delete(e)}},gp=`pi-web:session-selection:v1`,_p=class{constructor(e=lp()){this.sessionIdsByCwd=new up(gp,dp,e)}latestSessionId(e){return this.sessionIdsByCwd.get(e)}rememberSession(e){this.sessionIdsByCwd.set(e.cwd,e.id)}forgetWorkspace(e){this.sessionIdsByCwd.delete(e)}};function vp(e,t){let n=t?.targetSessionId;if(n!==void 0&&n!==``)return bp(e,n);let r=t?.latestSessionId;return r!==void 0&&r!==``?e.find(e=>e.id===r)??e.find(e=>e.archived!==!0):e.find(e=>e.archived!==!0)}function yp(e,t){return t?.archived===!0&&!e.some(e=>e.archived!==!0)}function bp(e,t){return e.find(e=>e.id===t||e.id.startsWith(t))}function xp(e,t,n){return Sp(e,[t],n)}function Sp(e,t,n){let r=new Set(t);return e.map(e=>r.has(e.id)?{...e,archived:!0,archivedAt:n}:e)}function Cp(e,t,n){return wp(e,t,[n])}function wp(e,t,n){if(t===void 0||!n.includes(t))return{type:`unchanged`};let r=new Set(n),i=e.find(e=>!r.has(e.id)&&e.archived!==!0);return i===void 0?{type:`clear`}:{type:`select`,session:i}}var Tp=100,Ep=100,Dp=class{constructor(e,t,n,r=new hp,i={}){this.getState=e,this.setState=t,this.updateUrl=n,this.sessionSelection=r,this.selectionSeq=0,this.disposed=!1,this.dialogScope=new lu({resync:()=>{this.refreshSelectedSession()}}),this.pendingTranscriptEvents=[],this.pendingStatusBySession=new Map,this.pendingActivityBySession=new Map,this.pendingSessionStartSeq=0,this.pendingQueuedSendSeq=0,this.pendingSessionStarts=new Map,this.suppressedCreatedSessions=new Map,this.selectedSessionRefreshes=new Jl,this.statusCatalogEpochs=new Map,this.socket=i.socket??new Jf,this.api=i.api??fs,this.transcripts=i.transcripts??new hf,this.notifications=i.notifications,this.replacePromptEditorText=i.replacePromptEditorText,this.onSelectedSessionReady=i.onSelectedSessionReady,this.onSelectedSessionIdle=i.onSelectedSessionIdle,this.onBackgroundRunCountChanged=i.onBackgroundRunCountChanged}applyGlobalEvent(e){e.type===`status.update`?this.queueStatusUpdate(e.status):e.type===`activity.update`?this.queueActivityUpdate(e.activity):e.type===`session.created`?this.applyCreatedSession(e.session):e.type===`session.name`?this.applySessionName(e.sessionId,e.name):e.type===`session.startup`&&this.queueStartupProgress(e)}dispose(){this.disposed=!0,this.selectionSeq+=1,this.socket.close(),this.clearPendingUpdates()}clearActiveSession(){this.selectionSeq+=1,this.socket.close(),this.notifications?.clearSelectedSession(),this.streamWatermark=void 0,this.clearPendingUpdates(),this.setState({selectedSession:void 0,messages:[],messagePageStart:0,messagePageEnd:0,messagePageTotal:0,isLoadingEarlierMessages:!1,status:void 0,activity:void 0,pendingAsk:void 0,pendingDialogs:[],closedDialogs:[],dismissedDialogIds:[],availableThinkingLevels:[],treeDialog:void 0})}deselectSession(e){let t=this.getState(),n=t.selectedSession?.cwd??t.selectedWorkspace?.path;e?.forgetRememberedSelection===!0&&n!==void 0&&this.sessionSelection.forgetWorkspace(this.workspaceSelectionKey(n)),this.clearActiveSession(),e?.updateUrl!==!1&&this.updateUrl()}clearSelectionAfterArchivedCollapse(){let e=this.getState();yp(e.sessions,e.selectedSession)&&this.deselectSession({forgetRememberedSelection:!0})}async startSession(){let e=this.getState().selectedWorkspace;if(!e)return;let t=R(this.getState()),n=this.createPendingSessionStart(e,t);this.pendingSessionStarts.set(n.tempId,n),this.insertAndSelectPendingSession(n.session);try{let r=await this.api.startSession(e.path,t,n.tempId);await this.resolvePendingSessionStart(n.tempId,r)}catch(e){this.failPendingSessionStart(n.tempId,e)}}preferredSession(e,t,n){return vp(t,{targetSessionId:n,latestSessionId:this.sessionSelection.latestSessionId(this.workspaceSelectionKey(e))})}async selectSession(e,t){if(this.disposed)return;if(Fp(e)){this.selectClientPendingStartSession(e,t);return}this.sessionSelection.rememberSession({...e,cwd:this.workspaceSelectionKey(e.cwd)});let n=++this.selectionSeq;this.socket.close(),this.streamWatermark=void 0,this.dialogScope=new lu({resync:()=>{this.refreshSelectedSession()}}),this.clearPendingUpdates();let r=R(this.getState());this.notifications?.prepareSelectedSession(e,r);let i=this.sessionCacheKey(e.id),a=this.transcripts.cachedView(i),o=this.getState(),s=fu(e,{workspaces:o.workspaces,projects:o.projects}),c=s!==void 0&&(s.workspace.id!==o.selectedWorkspace?.id||s.workspace.projectId!==o.selectedProject?.id);this.setState({selectedSession:e,...s===void 0?{}:{selectedWorkspace:s.workspace,selectedProject:s.project},...c?{sessions:[...Lu(r,s.workspace.path)??[]],sessionsLoad:`loading`}:{},...a,isLoadingEarlierMessages:!1,...t?.preserveTreeDialog===!0?{}:{treeDialog:void 0},status:e.archived===!0?void 0:this.getState().sessionStatuses[e.id],activity:e.archived===!0?void 0:this.getState().sessionActivities[e.id],pendingAsk:e.archived===!0?void 0:this.getState().sessionStatuses[e.id]?.pendingAsk,pendingDialogs:e.archived===!0?[]:this.getState().sessionStatuses[e.id]?.pendingDialogs??[],closedDialogs:[],dismissedDialogIds:[],availableThinkingLevels:[]}),c&&this.refreshCurrentWorkspaceSessions(r);let l;try{if(e.archived===!0){let a=await this.api.messages(e,{limit:Tp},R(this.getState()));if(n!==this.selectionSeq||this.getState().selectedSession?.id!==e.id)return;let o=this.transcripts.mergeHistory(i,a);this.setState({...o,isLoadingEarlierMessages:!1,status:void 0,activity:void 0,pendingAsk:void 0,pendingDialogs:[],closedDialogs:[],dismissedDialogIds:[]}),this.onSelectedSessionReady?.({machineId:r,session:e}),t?.updateUrl!==!1&&this.updateUrl();return}let a=[];if(l=a,this.gapRepair=new uu({apply:e=>{this.applyEvent(e)},request:async t=>{let n=await this.api.streamSync(e,t,r);if(n.kind!==`replay`)return{ok:!1};let i=[];for(let e of n.frames){let t;try{t=JSON.parse(e)}catch{continue}let n=Qf(t);n!==void 0&&i.push(n)}return{ok:!0,frames:i}},resync:()=>{this.refreshSelectedSession(e.id)}}),this.socket.connect(e,e=>a.push(e),()=>{this.refreshSelectedSession(e.id)},r,()=>{this.notifications?.refreshSelectedSession(e,r)},t=>{t===`notifications.inbox`?this.notifications?.refreshSelectedSession(e,r):this.dialogScope.requestResync()},e=>{this.gapRepair?.onGap(e)}),await this.requestSelectedSessionRefresh({session:e,machineId:r,selectionSeq:n}),!this.isCurrentRefreshTarget({session:e,machineId:r,selectionSeq:n}))return;this.refreshAvailableThinkingLevels();for(let e of a)this.applyEvent(e);this.socket.setHandler(e=>{this.routeLiveEvent(e)}),this.onSelectedSessionReady?.({machineId:r,session:e}),t?.updateUrl!==!1&&this.updateUrl()}catch(i){if(n!==this.selectionSeq||this.getState().selectedSession?.id!==e.id){if(t?.propagateRefreshError===!0&&this.isSelectedSessionIdentity(e.id,r))throw i;return}if(Su(e)&&Kp(i)){await this.recreateCachedNewSession(e,t);return}if(l!==void 0){for(let e of l)this.applyEvent(e);this.socket.setHandler(e=>{this.applyEvent(e)})}if(this.setState(b(i)),t?.propagateRefreshError===!0)throw i}}async loadEarlierMessages(){let e=this.getState(),t=e.selectedSession;if(!(!t||e.isLoadingEarlierMessages||e.messagePageStart<=0)){this.setState({isLoadingEarlierMessages:!0});try{let n=await this.api.messages(t,{before:e.messagePageStart,limit:Tp},R(this.getState()));if(this.getState().selectedSession?.id!==t.id)return;let r=this.transcripts.mergeHistory(this.sessionCacheKey(t.id),n);this.setState(r)}catch(e){this.setState(b(e))}finally{this.getState().selectedSession?.id===t.id&&this.setState({isLoadingEarlierMessages:!1})}}}async send(e,t,n,r=`inline`,i){let a=this.getState().selectedSession;if(!a||a.archived===!0)return!1;let o=e.trim(),s=n!==void 0&&n.length>0;return Fp(a)?(!s&&o.startsWith(`/`)?this.enqueuePendingSessionSend(a,{type:`command`,text:e}):!s&&Uf(e)?this.enqueuePendingSessionSend(a,{type:`shell`,text:e}):this.enqueuePendingSessionSend(a,{type:`prompt`,text:e,streamingBehavior:t,attachments:n,delivery:r}),!0):!s&&o.startsWith(`/`)?(await this.runCommand(e),!0):!s&&Uf(e)?(await this.runShell(e),!0):await this.deliverPromptToSession(a,e,t,n,r,R(this.getState()),{markSending:s,...i?.clientMessageId===void 0?{}:{replayClientMessageId:i.clientMessageId}})}markSendingPrompt(e,t){let n=this.getState().sendingPrompts;t?n[e]!==!0&&this.setState({sendingPrompts:{...n,[e]:!0}}):e in n&&this.setState({sendingPrompts:jp(n,e)})}async runShell(e){let t=this.getState().selectedSession;if(!(!t||t.archived===!0)){if(Fp(t)){this.enqueuePendingSessionSend(t,{type:`shell`,text:e});return}await this.deliverShellToSession(t,e,R(this.getState()),{optimisticLine:!0})}}async runCommand(e,t=`typed`){let n=this.getState().selectedSession;if(!n||n.archived===!0)return;let r=R(this.getState()),i=ru(this.getState().commandLedger,{sessionKey:ul(r,n.id),text:e,source:t,now:Date.now()});if(this.setState({commandLedger:i.entries}),Fp(n)){this.enqueuePendingSessionSend(n,{type:`command`,text:e}),this.settleLedgerRow(i.id,{state:`ok`,resultText:`Queued until the session starts.`});return}await this.deliverCommandToSession(n,e,r,{applyResult:!0,ledgerId:i.id})}settleLedgerRow(e,t){let n=Date.now();this.setState({commandLedger:iu(this.getState().commandLedger,e,{...t,now:n})})}dismissLedgerRow(e){this.setState({commandLedger:au(this.getState().commandLedger,e)})}enqueuePendingSessionSend(e,t){let n=this.pendingSessionStarts.get(e.id);if(n===void 0||n.discarded){this.setState({error:`The backend session is not ready for queued sends. Copy your message before discarding this failed start.`});return}let r={...t,id:`pending-send-${String(++this.pendingQueuedSendSeq)}`};n.queuedSends.push(r);let i=this.getState(),a=i.clientQueuedSessionMessages[e.id]??[],o=Lp(e.id,n.queuedSends.length);this.setState({clientQueuedSessionMessages:{...i.clientQueuedSessionMessages,[e.id]:[...a,zp(r)]},sessionActivities:{...i.sessionActivities,[e.id]:o},activity:i.selectedSession?.id===e.id?o:i.activity,error:``})}async flushQueuedPendingSends(e,t,n){for(let r of n){if(!await this.deliverQueuedPendingSend(e,t,r))return;this.dropNextQueuedSessionMessage(e.id)}}async deliverQueuedPendingSend(e,t,n){return n.type===`prompt`?this.deliverPromptToSession(e,n.text,n.streamingBehavior,n.attachments,n.delivery,t,{markSending:!0}):n.type===`shell`?this.deliverShellToSession(e,n.text,t,{optimisticLine:!0}):this.deliverCommandToSession(e,n.text,t,{applyResult:!0})}async deliverPromptToSession(e,t,n,r,i,a,o){let s=r!==void 0&&r.length>0;o.markSending&&this.markSendingPrompt(e.id,!0);let c=o.replayClientMessageId??this.beginTrackedSend(e,t,r??[]);o.replayClientMessageId!==void 0&&this.setState({messages:yc(this.getState().messages,o.replayClientMessageId)});try{if(s&&i===`folder`){let i=(await this.api.saveAttachments(e,r,a)).map(e=>Lf(e.path,!1)).join(` `),o=t===``?i:`${t}\n\n${i}`;await this.api.prompt(e,o,n,a,void 0,c)}else await this.api.prompt(e,t,n,a,r,c);return c!==void 0&&this.markDelivery(e.id,c,`received`),this.markCachedNewSessionPersisted(e),!0}catch(t){if(this.setState(b(t)),xf(t))throw c!==void 0&&this.markDelivery(e.id,c,`failed`),new Sf(String(t),c,{cause:t});return c!==void 0&&this.setState({messages:bc(this.getState().messages,c)}),!1}finally{o.markSending&&this.markSendingPrompt(e.id,!1)}}beginTrackedSend(e,t,n=[]){if(t.trim()===``&&n.length===0||this.getState().selectedSession?.id!==e.id)return;let r=oc();return this.setState({messages:[...this.getState().messages,sc(t,r,n)]}),r}async deliverShellToSession(e,t,n,r){r.optimisticLine&&this.getState().selectedSession?.id===e.id&&this.setState({messages:[...this.getState().messages,Dc(`user`,t)]});try{return await this.api.shell(e,t,n),this.markCachedNewSessionPersisted(e),!0}catch(t){return this.getState().selectedSession?.id===e.id&&this.setState({messages:[...this.getState().messages,Dc(`system`,y(t))]}),this.setState(b(t)),!1}}async deliverCommandToSession(e,t,n,r){this.markSendingPrompt(e.id,!0);try{let i=await this.api.runCommand(e,t,n);if(r.applyResult&&this.isSelectedSessionIdentity(e.id,n)?this.applyCommandResult(i):(i.type===`select`||i.type===`tree`)&&this.setState({error:`Queued command “${t}” needs input; open the session and run it again.`}),this.markCachedNewSessionPersisted(e),r.ledgerId!==void 0){let e=i.type===`done`&&i.message===void 0&&this.getState().status?.isStreaming===!0;this.settleLedgerRow(r.ledgerId,{state:`ok`,...e?{resultText:`accepted — waits for the running reply to finish`}:{}})}return!0}catch(t){return this.getState().selectedSession?.id===e.id&&this.setState({messages:[...this.getState().messages,Dc(`system`,y(t))]}),this.setState(b(t)),r.ledgerId!==void 0&&this.settleLedgerRow(r.ledgerId,{state:`failed`,resultText:y(t)}),!1}finally{this.markSendingPrompt(e.id,!1)}}dropNextQueuedSessionMessage(e){let t=this.getState(),n=t.clientQueuedSessionMessages[e]??[];if(n.length===0)return;let r=n.slice(1);this.setState({clientQueuedSessionMessages:r.length===0?jp(t.clientQueuedSessionMessages,e):{...t.clientQueuedSessionMessages,[e]:r}})}async respondToCommand(e,t){let n=this.getState().selectedSession;if(n){this.setState({commandDialog:void 0});try{this.applyCommandResult(await this.api.respondToCommand(n,e,t,R(this.getState())))}catch(e){this.setState(b(e))}}}cancelCommand(){this.setState({commandDialog:void 0})}async navigateTree(e,t){let n=this.getState(),r=n.selectedSession,i=n.treeDialog;if(r===void 0||i===void 0||r.archived===!0||Fp(r))throw Error(`The session tree navigator is no longer available`);let a=R(n),o=this.selectionSeq,s=ul(a,r.id),c;try{c=await this.api.navigateTree(r,{targetId:e,expectedLeafId:i.activeLeafId,summary:t},a)}catch(e){throw this.isCurrentSessionSelection(r.id,a,o)&&this.setState(b(e)),e}if(c.cancelled)return c;let l=c.editorText??``;if(Uu(s,l),this.transcripts.discard(s),!this.isSelectedSessionIdentity(r.id,a))return c;this.clearPendingUpdates();let u;try{await this.selectSession(r,{updateUrl:!1,preserveTreeDialog:!0,propagateRefreshError:!0})}catch(e){u={error:e}}if(!this.isSelectedSessionIdentity(r.id,a))return c;try{await this.replacePromptEditorText?.({machineId:a,sessionId:r.id,text:l})}catch(e){throw this.isSelectedSessionIdentity(r.id,a)&&this.setState(b(e)),e}if(u!==void 0)throw this.isSelectedSessionIdentity(r.id,a)&&this.setState(b(u.error)),u.error;return this.isSelectedSessionIdentity(r.id,a)&&this.getState().treeDialog===i&&this.setState({treeDialog:void 0}),c}async forkFromTree(e){let t=this.getState(),n=t.selectedSession,r=t.treeDialog;if(n===void 0||r===void 0||n.archived===!0||Fp(n))throw Error(`The session tree navigator is no longer available`);let i=R(t),a=this.selectionSeq,o=ul(i,n.id),s;try{s=await this.api.forkTree(n,{entryId:e,expectedLeafId:r.activeLeafId},i)}catch(e){throw this.isCurrentSessionSelection(n.id,i,a)&&this.setState(b(e)),e}if(s.cancelled)return s;let c=s.session;if(s.promptDraft!==void 0&&Uu(ul(i,c.id),s.promptDraft),this.transcripts.discard(o),!this.isSelectedSessionIdentity(n.id,i))return s;let l=[c,...this.getState().sessions.filter(e=>e.id!==c.id)];return this.setState({sessions:l,treeDialog:void 0}),this.selectSession(c),s}async abortTreeNavigation(){let e=this.getState(),t=e.selectedSession;if(t===void 0||e.treeDialog===void 0||Fp(t))return;let n=R(e),r=this.selectionSeq;try{await this.api.abort(t,n)}catch(e){throw this.isCurrentSessionSelection(t.id,n,r)&&this.setState(b(e)),e}}closeTreeDialog(){this.setState({treeDialog:void 0})}applySessionStatus(e){this.applyStatus(e)}async archiveSession(e=this.getState().selectedSession){if(!e)return;let t=this.statusForSession(e);if(cp(e,t)){await this.deleteCachedNewSession(e);return}if(sp(e,t))try{await this.api.archive(e,R(this.getState()));let t=this.getState(),n=xp(t.sessions,e.id,new Date().toISOString()),r=Cp(n,t.selectedSession?.id,e.id);this.setState({sessions:n}),r.type===`select`?await this.selectSession(r.session):r.type===`clear`&&this.deselectSession({forgetRememberedSelection:!0})}catch(e){this.setState(b(e))}}async archiveSessionWithDescendants(e=this.getState().selectedSession){if(!(e===void 0||!sp(e,this.statusForSession(e))))try{let t=await this.api.archiveWithDescendants(e,R(this.getState())),n=t.sessionIds!==void 0&&t.sessionIds.length>0?t.sessionIds:[e.id],r=this.getState(),i=Sp(r.sessions,n,new Date().toISOString()),a=wp(i,r.selectedSession?.id,n);this.setState({sessions:i}),a.type===`select`?await this.selectSession(a.session):a.type===`clear`&&this.deselectSession({forgetRememberedSelection:!0})}catch(e){this.setState(b(e))}}async archiveSessions(e){let t=Hp(e).filter(e=>sp(e,this.statusForSession(e)));if(t.length!==0)try{let e=R(this.getState()),{succeededIds:n,failures:r,generatedAt:i}=await this.archiveSessionBatch(t,e);if(n.length>0){let e=this.getState(),t=Sp(e.sessions,n,i??new Date().toISOString()),r=wp(t,e.selectedSession?.id,n);this.setState({sessions:t}),r.type===`select`?await this.selectSession(r.session):r.type===`clear`&&this.deselectSession({forgetRememberedSelection:!0})}this.applyBulkSessionFailures(`Archive`,r)}catch(e){this.setState({error:`Archive failed: ${y(e)}`})}}async deleteArchivedSessions(e){let t=Hp(e).filter(e=>e.archived===!0);if(t.length===0)return;let n=R(this.getState());try{let{succeededIds:e,failures:r}=await this.deleteArchivedSessionBatch(t,n);if(e.length>0){let t=new Set(e),n=this.getState(),r=n.sessions.filter(e=>!t.has(e.id));if(this.setState({sessions:r}),n.selectedSession!==void 0&&t.has(n.selectedSession.id)){let e=r.find(e=>e.archived!==!0)??r[0];e===void 0?this.deselectSession({forgetRememberedSelection:!0}):await this.selectSession(e)}}this.applyBulkSessionFailures(`Delete`,r)}catch(e){this.setState({error:`Delete failed: ${y(e)}`})}}async archiveSessionBatch(e,t){let n=await this.api.archiveMany(e,t);return{succeededIds:n.archivedSessionIds,failures:Up(n.failures),generatedAt:n.generatedAt}}async deleteArchivedSessionBatch(e,t){let n=await this.api.deleteArchivedMany(e,t);return{succeededIds:n.deletedSessionIds,failures:Up(n.failures)}}async applySessionCleanupResult(e,t=R(this.getState())){if(R(this.getState())!==t)return;let n=e.archivedSessionIds,r=e.deletedSessionIds;if(n.length>0||r.length>0){let t=this.getState(),i=new Set(r),a=[...n,...r],o=Sp(t.sessions,n,e.generatedAt).filter(e=>!i.has(e.id)),s=t.selectedSession!==void 0&&a.includes(t.selectedSession.id);if(this.setState({sessions:o,sessionStatuses:Mp(t.sessionStatuses,a),sessionActivities:Mp(t.sessionActivities,a),...s?{status:void 0,activity:void 0,pendingAsk:void 0,pendingDialogs:[],closedDialogs:[],dismissedDialogIds:[]}:{}}),t.selectedSession!==void 0&&i.has(t.selectedSession.id)){let e=o.find(e=>e.archived!==!0)??o[0];e===void 0?this.deselectSession({forgetRememberedSelection:!0}):await this.selectSession(e)}else{let e=wp(o,t.selectedSession?.id,n);e.type===`select`?await this.selectSession(e.session):e.type===`clear`&&this.deselectSession({forgetRememberedSelection:!0})}}await this.refreshCurrentWorkspaceSessions(t)}async refreshCurrentWorkspaceSessions(e=R(this.getState())){let t=this.getState().selectedWorkspace;if(t!==void 0)try{let n=xu(t.path,await this.api.sessions(t.path,e),e).filter(t=>!this.isSuppressedCreatedSession(t,e));if(R(this.getState())!==e||this.getState().selectedWorkspace?.id!==t.id)return;let r=this.mergePendingStartSessions(t.path,n,e),i=this.getState().selectedSession;if(Ru(e,t.path,r),this.setState({sessions:r,sessionsLoad:`loaded`}),i===void 0)return;let a=r.find(e=>e.id===i.id);if(a!==void 0){a!==i&&this.setState({selectedSession:a});return}if(!pu({refreshedWorkspacePath:t.path,selectedSessionCwd:i.cwd}))return;let o=r.find(e=>e.archived!==!0)??r[0];o===void 0?this.deselectSession({forgetRememberedSelection:!0}):await this.selectSession(o)}catch(n){R(this.getState())===e&&this.getState().selectedWorkspace?.id===t.id&&this.setState(b(n))}finally{this.hydrateSessionStatuses(e)}}async loadInterruptedRuns(e=R(this.getState())){try{let t=await this.api.interruptedRuns(e);return new Set(t.runs.map(e=>e.sessionId))}catch{return new Set}}async hydrateSessionStatuses(e=R(this.getState()),t){let n;try{n=await this.api.statusCatalog(e)}catch{return}if(R(this.getState())!==e)return;let r=this.getState(),i=t?.replaceKnown===!0,a=this.statusCatalogEpochs.get(e),o=n.daemonInstanceId!==void 0&&a!==n.daemonInstanceId;n.daemonInstanceId!==void 0&&this.statusCatalogEpochs.set(e,n.daemonInstanceId);let s=r.sessionStatuses,c=s;if(i||o){c={};for(let e of n.statuses)c[e.sessionId]=e;let e=r.selectedSession?.id;e!==void 0&&c[e]===void 0&&s[e]!==void 0&&(c[e]=s[e])}else for(let e of n.statuses)s[e.sessionId]===void 0&&(c={...c,[e.sessionId]:e});c!==s&&this.setState({sessionStatuses:c})}async deleteCachedNewSession(e=this.getState().selectedSession){if(e===void 0||!cp(e,this.statusForSession(e)))return;let t=Fp(e)?this.pendingSessionStarts.get(e.id):void 0;t===void 0?this.api.stop(e,R(this.getState())).catch(()=>{}):(t.discarded=!0,t.queuedSends=[]),bu(e.id,R(this.getState())),Wu(this.sessionCacheKey(e.id));let n=this.getState(),r=n.sessions.filter(t=>t.id!==e.id);if(this.setState({sessions:r,sessionStatuses:jp(n.sessionStatuses,e.id),sessionActivities:Ap(n.sessionActivities,e.id),sendingPrompts:jp(n.sendingPrompts,e.id),clientQueuedSessionMessages:jp(n.clientQueuedSessionMessages,e.id)}),this.getState().selectedSession?.id!==e.id)return;let i=r.find(e=>e.archived!==!0)??r[0];i===void 0?(this.clearActiveSession(),this.updateUrl()):await this.selectSession(i)}async restoreSession(e=this.getState().selectedSession){if(e)try{await this.api.restore(e,R(this.getState()));let t={...e};delete t.archived,delete t.archivedAt,this.replaceSession(t),this.getState().selectedSession?.id===t.id&&await this.selectSession(t)}catch(e){this.setState(b(e))}}async reloadSession(e=this.getState().selectedSession){if(e===void 0||!sp(e,this.statusForSession(e)))return;let t=R(this.getState());try{await this.api.reloadSession(e,t),this.transcripts.discard(this.sessionCacheKey(e.id)),this.getState().selectedSession?.id===e.id&&await this.selectSession(e,{updateUrl:!1})}catch(e){this.setState(b(e))}}async detachParent(e=this.getState().selectedSession){if(e?.parentSessionPath!==void 0)try{await this.api.detachParent(e,R(this.getState()));let t={...e};delete t.parentSessionPath,this.replaceSession(t)}catch(e){this.setState(b(e))}}async listModels(){let e=this.getState().selectedSession;if(!e||e.archived===!0)return[];try{return(await this.api.models(e,R(this.getState()))).models}catch(e){return this.setState(b(e)),[]}}async listModelCatalog(){let e=this.getState().selectedSession;if(!e||e.archived===!0)return[];try{return(await this.api.modelCatalog(e,R(this.getState()))).models}catch(e){return this.setState(b(e)),[]}}async setModelEnabled(e,t,n){let r=this.getState().selectedSession;if(!(!r||r.archived===!0))try{return(await this.api.setModelEnabled(r,e,t,n,R(this.getState()))).models}catch(e){this.setState(b(e));return}}async setModel(e,t){let n=this.getState().selectedSession;if(!(!n||n.archived===!0))try{this.applyStatus(await this.api.setModel(n,e,t,R(this.getState()))),await this.refreshAvailableThinkingLevels()}catch(e){this.setState(b(e))}}async cycleModel(e){let t=this.getState().selectedSession;if(!(!t||t.archived===!0))try{this.applyStatus(await this.api.cycleModel(t,e,R(this.getState()))),await this.refreshAvailableThinkingLevels()}catch(e){this.setState(b(e))}}async listThinkingLevels(){let e=this.getState().selectedSession;if(!e||e.archived===!0)return[];try{return(await this.api.thinkingLevels(e,R(this.getState()))).levels}catch(e){return this.setState(b(e)),[]}}async refreshAvailableThinkingLevels(){let e=this.getState().selectedSession;if(!e||e.archived===!0){this.getState().availableThinkingLevels.length>0&&this.setState({availableThinkingLevels:[]});return}let t=await this.listThinkingLevels();this.getState().selectedSession?.id===e.id&&this.setState({availableThinkingLevels:t})}async setThinkingLevel(e){let t=this.getState().selectedSession;if(!(!t||t.archived===!0))try{this.applyStatus(await this.api.setThinkingLevel(t,e,R(this.getState())))}catch(e){this.setState(b(e))}}async cycleThinkingLevel(){let e=this.getState().selectedSession;if(!(!e||e.archived===!0))try{this.applyStatus(await this.api.cycleThinkingLevel(e,R(this.getState())))}catch(e){this.setState(b(e))}}checkSocketLiveness(){this.socket.checkLiveness?.()}reconnectSocketNow(){this.socket.reconnectNow?.()}async clearServerQueue(){let e=this.getState(),t=e.selectedSession;if(t===void 0||t.archived===!0||Fp(t))return;let n=R(e),r=this.selectionSeq;try{let e=await this.api.clearQueue(t,n);this.isCurrentSessionSelection(t.id,n,r)&&this.applyStatus(e)}catch(e){this.isCurrentSessionSelection(t.id,n,r)&&this.setState(b(e))}}async recallQueuedMessage(e){let t=this.getState(),n=t.selectedSession;if(n===void 0||n.archived===!0||Fp(n))return!1;let r=R(t),i=this.selectionSeq;try{let{recalled:t,status:a}=await this.api.recallQueuedMessage(n,e,r);if(!this.isCurrentSessionSelection(n.id,r,i))return!1;let o=e.clientMessageId;return t&&o!==void 0&&this.setState({messages:bc(this.getState().messages,o)}),this.applyStatus(a),t}catch(e){return this.isCurrentSessionSelection(n.id,r,i)&&this.setState(b(e)),!1}}async openSubagentRunConversation(e){let t=this.getState(),n=t.selectedSession;if(n===void 0||Fp(n))return;let r=R(t);try{let t=await this.api.subagentRunMessages(n,e.runId,void 0,r);this.setState({activityConversation:ml(e,t)})}catch(t){if(at(t)){await this.openSubagentRunOutput(e);return}this.setState(b(t))}}async openSubagentRunOutput(e){let t=this.getState(),n=t.selectedSession;if(n===void 0||Fp(n))return;let r=R(t);try{let t=await this.api.subagentRunOutput(n,e.runId,r);this.setState({activityOutput:fl(`Subagent ${e.agent} (${e.runId.slice(0,8)})`,t)})}catch(t){if(at(t)){this.setState({activityOutput:fl(`Subagent ${e.agent} (${e.runId.slice(0,8)})`,``)});return}this.setState(b(t))}}async openBackgroundTaskOutput(e){let t=this.getState(),n=t.selectedSession;if(n===void 0||Fp(n))return;let r=R(t);try{let t=await this.api.backgroundTaskOutput(n,e.id,r);this.setState({activityOutput:fl(`Background task ${e.name} (${e.id})`,t)})}catch(e){this.setState(b(e))}}closeActivityOutput(){this.getState().activityOutput!==void 0&&this.setState({activityOutput:void 0})}closeActivityConversation(){this.getState().activityConversation!==void 0&&this.setState({activityConversation:void 0})}async dismissWarning(e){let t=this.getState(),n=t.selectedSession;if(n===void 0||Fp(n))return;let r=R(t),i=this.selectionSeq;try{let t=await this.api.dismissWarning(n,e,r);this.isCurrentSessionSelection(n.id,r,i)&&this.applyStatus(t)}catch(e){this.isCurrentSessionSelection(n.id,r,i)&&this.setState(b(e))}}submitAsk(e,t){return this.closeOpenAsk(e,(n,r)=>this.api.submitAsk(n,e,t,r))}cancelAsk(e){return this.closeOpenAsk(e,(t,n)=>this.api.cancelAsk(t,e,n))}answerDialog(e,t){return this.closeOpenDialog(e,(n,r)=>this.api.answerDialog(n,e,t,r))}cancelDialog(e){return this.closeOpenDialog(e,(t,n)=>this.api.cancelDialog(t,e,n))}async closeOpenDialog(e,t){let n=this.getState(),r=n.selectedSession;if(r===void 0||r.archived===!0)return;if(Fp(r)){await this.closePendingStartDialog(r,e,t);return}let i=R(n),a=this.selectionSeq;try{let e=await t(r,i);if(!this.isCurrentSessionSelection(r.id,i,a)){this.applyStatusToMap(e.sessionStatus);return}let n=e.outcome;if(n!==void 0){let e=this.getState().pendingDialogs.find(e=>e.dialogId===n.dialogId);e!==void 0&&this.recordClosedDialog({dialog:e,reason:n.reason,...n.answer===void 0?{}:{answer:n.answer}})}this.applyStatus(e.sessionStatus)}catch(e){this.isCurrentSessionSelection(r.id,i,a)&&this.setState(b(e))}}async closePendingStartDialog(e,t,n){let r=this.pendingSessionStarts.get(e.id),i=r?.backendSessionId;if(r===void 0||i===void 0)return;let a=this.selectionSeq;try{let t=await n({...e,id:i},r.machineId);if(a!==this.selectionSeq||this.getState().selectedSession?.id!==e.id)return;let o=t.outcome;if(o!==void 0){let e=this.getState().pendingDialogs.find(e=>e.dialogId===o.dialogId);e!==void 0&&this.recordClosedDialog({dialog:e,reason:o.reason,...o.answer===void 0?{}:{answer:o.answer}})}this.applyPendingStartStatus(r,t.sessionStatus)}catch(t){a===this.selectionSeq&&this.getState().selectedSession?.id===e.id&&this.setState(b(t))}}async closeOpenAsk(e,t){let n=this.getState(),r=n.selectedSession;if(r===void 0||r.archived===!0||Fp(r))return;let i=R(n),a=this.selectionSeq;try{let n=await t(r,i);$u(ul(i,r.id),e),this.isCurrentSessionSelection(r.id,i,a)?this.applyStatus(n.sessionStatus):this.applyStatusToMap(n.sessionStatus)}catch(e){this.isCurrentSessionSelection(r.id,i,a)&&this.setState(b(e))}}applyStatusToMap(e){let t=this.getState();this.setState({sessionStatuses:{...t.sessionStatuses,[e.sessionId]:e}})}async stopActiveWork(){let e=this.getState().selectedSession;if(!e)return[];try{let t=await this.api.abort(e,R(this.getState()));for(let e of t.discarded)e.clientMessageId!==void 0&&this.setState({messages:bc(this.getState().messages,e.clientMessageId)});return t.discarded}catch(e){return this.setState(b(e)),[]}}refreshSelectedSession(e=this.getState().selectedSession?.id){let t=this.getState().selectedSession;if(e===void 0||t?.id!==e||t.archived===!0||Fp(t))return Promise.resolve();let n={session:t,machineId:R(this.getState()),selectionSeq:this.selectionSeq};return this.requestSelectedSessionRefresh(n).catch(e=>{this.isCurrentRefreshTarget(n)&&this.setState(b(e))})}requestSelectedSessionRefresh(e){let t=ul(e.machineId,e.session.id);return this.selectedSessionRefreshes.request(t,async()=>{if(!this.isCurrentRefreshTarget(e))return;this.flushPendingUpdates();let[n,r,i]=await Promise.all([this.api.messages(e.session,{limit:Tp},e.machineId),this.api.status(e.session,e.machineId),this.api.streamSnapshot(e.session,e.machineId),this.notifications?.refreshSelectedSession(e.session,e.machineId)??Promise.resolve()]);if(!this.isCurrentRefreshTarget(e))return;let a=this.transcripts.mergeHistory(t,n),o=Pu(this.getState().messages,a.messages),s=this.transcripts.seedStreamingPartial(o,i.partial);this.streamWatermark={sessionId:e.session.id,seq:i.seq},this.setState({...a,messages:s,status:r,activity:this.getState().sessionActivities[e.session.id]}),this.applyStatus(r)})}isCurrentRefreshTarget(e){return this.isCurrentSessionSelection(e.session.id,e.machineId,e.selectionSeq)}isCurrentSessionSelection(e,t,n){return n===this.selectionSeq&&this.isSelectedSessionIdentity(e,t)}isSelectedSessionIdentity(e,t){if(this.disposed)return!1;let n=this.getState(),r=n.selectedSession;return R(n)===t&&r?.id===e&&r.archived!==!0&&!Fp(r)}applyBulkSessionFailures(e,t){t.length!==0&&this.setState({error:`${e} failed for ${String(t.length)} session${t.length===1?``:`s`}: ${t.join(`; `)}`})}sessionCacheKey(e){return ul(R(this.getState()),e)}statusForSession(e){if(e===void 0)return;let t=this.getState();return t.status?.sessionId===e.id&&t.selectedSession?.id===e.id?t.status:t.sessionStatuses[e.id]}workspaceSelectionKey(e){return`${R(this.getState())}:${e}`}replaceSession(e){let t=this.getState().selectedSession;this.setState({sessions:this.getState().sessions.map(t=>t.id===e.id?e:t),selectedSession:t?.id===e.id?e:t})}createPendingSessionStart(e,t){let n=`pending-session-${String(++this.pendingSessionStartSeq)}-${Date.now().toString(36)}`,r=new Date().toISOString(),i={id:n,path:`pi-web://pending-session/${n}`,cwd:e.path,persisted:!1,name:`New session`,created:r,modified:r,messageCount:0,firstMessage:``,clientPendingStart:!0,machineId:t};return{tempId:n,workspaceId:e.id,cwd:e.path,machineId:t,session:i,queuedSends:[],discarded:!1}}insertAndSelectPendingSession(e){let t=this.getState();this.selectClientPendingStartSession(e,{activity:Lp(e.id),sessions:[e,...t.sessions.filter(t=>t.id!==e.id)]})}selectClientPendingStartSession(e,t){this.sessionSelection.rememberSession({...e,cwd:this.workspaceSelectionKey(e.cwd)}),this.selectionSeq+=1,this.socket.close(),this.notifications?.clearSelectedSession(),this.streamWatermark=void 0,this.clearPendingUpdates();let n=this.getState(),r=this.pendingSessionStarts.get(e.id),i=t?.activity??n.sessionActivities[e.id]??(r===void 0?void 0:Lp(e.id,r.queuedSends.length));this.setState({...t?.sessions===void 0?{}:{sessions:t.sessions},selectedSession:e,messages:[],messagePageStart:0,messagePageEnd:0,messagePageTotal:0,isLoadingEarlierMessages:!1,status:void 0,activity:i,pendingAsk:void 0,pendingDialogs:[],closedDialogs:[],dismissedDialogIds:[],availableThinkingLevels:[],treeDialog:void 0,...i===void 0?{}:{sessionActivities:{...n.sessionActivities,[e.id]:i}},error:``}),r?.backendSessionId!==void 0&&this.connectPendingStartSocket(r),t?.updateUrl!==!1&&this.updateUrl()}async resolvePendingSessionStart(e,t){let n=this.pendingSessionStarts.get(e);if(n===void 0)return;this.pendingSessionStarts.delete(e);let r=n.queuedSends.splice(0),i=this.takeSuppressedCreatedSessionsFor(n.cwd,n.machineId,t.id);if(n.discarded){Wu(ul(n.machineId,e)),this.setState({clientQueuedSessionMessages:jp(this.getState().clientQueuedSessionMessages,e)}),this.applyReleasedCreatedSessions(i,n.machineId),this.api.stop(t,n.machineId).catch(()=>{});return}vu(t,n.machineId),Gu(ul(n.machineId,e),ul(n.machineId,t.id));let a=yu(t,n.machineId);if(!this.isCurrentPendingStart(n)){this.setState({clientQueuedSessionMessages:jp(this.getState().clientQueuedSessionMessages,e)}),await this.flushQueuedPendingSends(a,n.machineId,r);return}let o=this.getState(),s=o.selectedSession?.id===e;this.setState({sessions:Pp(o.sessions,e,a),sessionActivities:Ap(o.sessionActivities,e),sendingPrompts:Np(o.sendingPrompts,e,a.id),clientQueuedSessionMessages:Np(o.clientQueuedSessionMessages,e,a.id),...s?{selectedSession:a,status:o.sessionStatuses[a.id],activity:o.sessionActivities[a.id],pendingAsk:o.sessionStatuses[a.id]?.pendingAsk,pendingDialogs:o.sessionStatuses[a.id]?.pendingDialogs??[],closedDialogs:[],dismissedDialogIds:[]}:{},error:``}),this.applyReleasedCreatedSessions(i,n.machineId),s&&(this.updateUrl({replace:!0}),await this.selectSession(a,{updateUrl:!1})),await this.flushQueuedPendingSends(a,n.machineId,r)}failPendingSessionStart(e,t){let n=this.pendingSessionStarts.get(e);if(n===void 0)return;this.pendingSessionStarts.delete(e);let r=n.discarded;n.discarded=!0,this.getState().selectedSession?.id===e&&this.socket.close();let i=this.takeSuppressedCreatedSessionsFor(n.cwd,n.machineId),a=this.isCurrentPendingStart(n);if(r||!a){a&&this.applyReleasedCreatedSessions(i,n.machineId);return}let o=this.getState(),s=y(t),c=Rp(e,s,n.queuedSends.length),l=o.sessions.some(t=>t.id===e);this.setState({sessions:l?o.sessions:[n.session,...o.sessions],sessionActivities:{...o.sessionActivities,[e]:c},activity:o.selectedSession?.id===e?c:o.activity,...o.selectedSession?.id===e?{pendingDialogs:[]}:{},error:`Failed to start session: ${s}`}),this.applyReleasedCreatedSessions(i,n.machineId)}isCurrentPendingStart(e){let t=this.getState();return R(t)===e.machineId&&t.selectedWorkspace?.id===e.workspaceId}hasPendingStartFor(e,t){return Array.from(this.pendingSessionStarts.values()).some(n=>n.cwd===e&&n.machineId===t)}isSuppressedCreatedSession(e,t){let n=this.suppressedCreatedSessions.get(e.id);return n?.session.cwd===e.cwd&&n.machineId===t}takeSuppressedCreatedSessionsFor(e,t,n){if(n!==void 0&&this.suppressedCreatedSessions.delete(n),this.hasPendingStartFor(e,t))return[];let r=[];for(let[n,i]of this.suppressedCreatedSessions)i.session.cwd!==e||i.machineId!==t||(this.suppressedCreatedSessions.delete(n),r.push(i.session));return r}applyReleasedCreatedSessions(e,t){if(e.length===0||R(this.getState())!==t)return;let n=this.getState();if(n.selectedWorkspace===void 0)return;let r=new Set(n.sessions.map(e=>e.id)),i=e.filter(e=>e.cwd===n.selectedWorkspace?.path&&!r.has(e.id));i.length!==0&&this.setState({sessions:[...i.reverse(),...n.sessions]})}mergePendingStartSessions(e,t,n){let r=this.getState().sessions.filter(t=>Fp(t)&&t.cwd===e&&t.machineId===n);if(r.length===0)return t;let i=new Set(r.map(e=>e.id));return[...r,...t.filter(e=>!i.has(e.id))]}async recreateCachedNewSession(e,t){try{let n=R(this.getState()),r=await this.api.startSession(e.cwd,n);vu(r,n),Gu(this.sessionCacheKey(e.id),this.sessionCacheKey(r.id)),bu(e.id,n);let i=yu(r,n);this.setState({sessions:[i,...this.getState().sessions.filter(t=>t.id!==e.id)],error:``}),await this.selectSession(i,{updateUrl:!1}),this.updateUrl(t?.updateUrl===!1?{replace:!0}:void 0)}catch(e){this.setState(b(e))}}markCachedNewSessionPersisted(e){if(!Su(e))return;let t=this.getState().sessions.find(t=>t.id===e.id)??e;this.replaceSession(Cu(t))}applyCommandResult(e){if(e.type===`select`){this.setState({commandDialog:e});return}if(e.type===`tree`){this.setState({treeDialog:e.tree});return}let t=(e.type,e.message);if(t!==void 0&&t!==``&&this.setState({messages:[...this.getState().messages,Dc(e.type===`unsupported`?`system`:`tool`,t)]}),e.type===`done`&&e.session){e.promptDraft!==void 0&&Uu(this.sessionCacheKey(e.session.id),e.promptDraft);let t=this.getState().selectedSession,n=[e.session,...this.getState().sessions.filter(t=>t.id!==e.session?.id)];this.setState({sessions:n,selectedSession:t?.id===e.session.id?e.session:t}),t?.id!==e.session.id&&this.selectSession(e.session)}}applyCreatedSession(e){let t=this.getState();if(t.selectedWorkspace?.path!==e.cwd||t.sessions.some(t=>t.id===e.id))return;let n=R(t);if(this.hasPendingStartFor(e.cwd,n)){this.suppressedCreatedSessions.set(e.id,{session:e,machineId:n});return}this.setState({sessions:[e,...t.sessions]})}applyActivity(e){this.setState({sessionActivities:{...this.getState().sessionActivities,[e.sessionId]:e},activity:this.getState().selectedSession?.id===e.sessionId?e:this.getState().activity})}applyStatus(e){let t=this.getState(),n=t.selectedSession?.id===e.sessionId,r=n?xc(t.messages,e.queuedMessages):t.messages,i=t.sessionActivities[e.sessionId]?.phase===`active`&&!bl(e),a=n&&bl(t.status??e)&&!bl(e),o=t.sessionStatuses[e.sessionId]?.backgroundRunCount;e.backgroundRunCount!==void 0&&e.backgroundRunCount!==o&&this.onBackgroundRunCountChanged?.(e.sessionId),this.setState({sessionStatuses:{...t.sessionStatuses,[e.sessionId]:e},...Wp(t,e.sessionId,e.messageCount),...i?{sessionActivities:Ap(t.sessionActivities,e.sessionId)}:{},status:n?e:t.status,activity:n&&i?void 0:t.activity,...n?{pendingAsk:e.pendingAsk}:{},...n?{pendingDialogs:kp(e.pendingDialogs,t.dismissedDialogIds)}:{},...r===t.messages?{}:{messages:r}}),n&&e.pendingDialogsRevision!==void 0&&this.dialogScope.markFresh(e.pendingDialogsRevision,e.daemonInstanceId),a&&this.onSelectedSessionIdle?.()}markDelivery(e,t,n){let r=this.getState();if(r.selectedSession?.id!==e)return;let i=hc(r.messages,t,n);i!==r.messages&&this.setState({messages:i})}applyOpenedDialog(e){let t=this.getState();t.selectedSession!==void 0&&(t.pendingDialogs.some(t=>t.dialogId===e.dialogId)||this.setState({pendingDialogs:[...t.pendingDialogs,e],...t.dismissedDialogIds.some(t=>t===e.dialogId)?{dismissedDialogIds:t.dismissedDialogIds.filter(t=>t!==e.dialogId)}:{}}))}applyClosedDialog(e,t,n){let r=this.getState().pendingDialogs.find(t=>t.dialogId===e);r!==void 0&&this.recordClosedDialog({dialog:r,reason:t,...n===void 0?{}:{answer:n}})}recordClosedDialog(e){let t=this.getState();if(t.closedDialogs.some(t=>t.dialog.dialogId===e.dialog.dialogId))return;let n=t.selectedSession?.id;this.setState({pendingDialogs:t.pendingDialogs.filter(t=>t.dialogId!==e.dialog.dialogId),...Op(e)?{closedDialogs:[...t.closedDialogs,e]}:{dismissedDialogIds:[...t.dismissedDialogIds,e.dialog.dialogId]}}),this.patchSessionStatus(n,t=>t.pendingDialogs===void 0||!t.pendingDialogs.some(t=>t.dialogId===e.dialog.dialogId)?t:{...t,pendingDialogs:t.pendingDialogs.filter(t=>t.dialogId!==e.dialog.dialogId)})}dismissClosedDialog(e){let t=this.getState();t.closedDialogs.some(t=>t.dialog.dialogId===e)&&this.setState({closedDialogs:t.closedDialogs.filter(t=>t.dialog.dialogId!==e),dismissedDialogIds:[...t.dismissedDialogIds,e]})}applyOpenedAsk(e){this.getState().selectedSession!==void 0&&this.setState({pendingAsk:e})}applyClosedAsk(e){let t=this.getState();if(t.pendingAsk?.askId!==e)return;let n=t.selectedSession?.id;this.setState({pendingAsk:void 0}),this.patchSessionStatus(n,e=>{if(e.pendingAsk===void 0)return e;let t={...e};return delete t.pendingAsk,t})}patchSessionStatus(e,t){if(e===void 0)return;let n=this.getState(),r=n.sessionStatuses[e];if(r===void 0)return;let i=t(r);i!==r&&this.setState({sessionStatuses:{...n.sessionStatuses,[e]:i}})}async renameSession(e,t,n=R(this.getState())){let r=t.trim();if(r===``)return;let i=e.name;this.applySessionName(e.id,r);try{await this.api.runCommand({id:e.id,cwd:e.cwd},`/name ${r}`,n)}catch(t){this.applySessionName(e.id,i),this.setState(b(t))}}applySessionName(e,t){let n=n=>{if(n.id!==e)return n;let r={...n};return t===void 0||t===``?delete r.name:r.name=t,r},r=this.getState().selectedSession;this.setState({sessions:this.getState().sessions.map(n),selectedSession:r===void 0?void 0:n(r)})}routeLiveEvent(e){let t=Reflect.get(e,`seq`);this.gapRepair?.onLiveFrame(e,typeof t==`number`?t:void 0)}applyEvent(e){if(e.type===`notifications.inbox`){this.notifications?.applyInboxEvent(R(this.getState()),e);return}if(this.isStreamEventBelowWatermark(e))return;if(e.type===`status.update`){this.queueStatusUpdate(e.status);return}if(e.type===`activity.update`){this.queueActivityUpdate(e.activity);return}if(Gp(e)){this.queueTranscriptEvent(e);return}if(this.flushPendingUpdates(),e.type===`ask.opened`){this.dialogScope.observe(e,()=>{this.applyOpenedAsk(e.ask)});return}if(e.type===`prompt.accepted`){let t=this.getState().selectedSession;t!==void 0&&this.markDelivery(t.id,e.clientMessageId,`queued`);return}if(e.type===`ask.closed`){this.dialogScope.observe(e,()=>{this.applyClosedAsk(e.askId)});return}if(e.type===`dialog.opened`){this.dialogScope.observe(e,()=>{this.applyOpenedDialog(e.dialog)});return}if(e.type===`dialog.closed`){this.dialogScope.observe(e,()=>{this.applyClosedDialog(e.dialogId,e.reason,e.answer)});return}let t=this.transcripts.applyLiveEvent(this.getState().messages,e);t?this.setState({messages:t}):e.type===`session.name`&&this.applySessionName(e.sessionId,e.name)}queueTranscriptEvent(e){this.pendingTranscriptEvents.push(e),this.schedulePendingFlush()}queueStatusUpdate(e){this.pendingStatusBySession.set(e.sessionId,e),this.schedulePendingFlush()}queueActivityUpdate(e){this.pendingActivityBySession.set(e.sessionId,e),this.schedulePendingFlush()}queueStartupProgress(e){if(this.getState().sessions.some(t=>t.id===e.activity.sessionId)){this.queueActivityUpdate(e.activity);return}let t=e.startupToken===void 0?void 0:this.pendingSessionStarts.get(e.startupToken);t===void 0||t.discarded||(this.learnPendingStartBackendSession(t,e.activity.sessionId),this.queueActivityUpdate(e.activity.phase===`idle`?Lp(t.tempId,t.queuedSends.length):Ip(e.activity,t.tempId)))}learnPendingStartBackendSession(e,t){t===``||e.backendSessionId!==void 0||(e.backendSessionId=t,this.getState().selectedSession?.id===e.tempId&&this.connectPendingStartSocket(e))}connectPendingStartSocket(e){let t=e.backendSessionId;if(t===void 0||e.discarded)return;let n={id:t,cwd:e.cwd};this.socket.connect(n,t=>{this.applyPendingStartEvent(e,t)},()=>{this.resyncPendingStartDialogs(e)},e.machineId),this.resyncPendingStartDialogs(e)}resyncPendingStartDialogs(e){let t=e.backendSessionId;t!==void 0&&this.api.status({id:t,cwd:e.cwd},e.machineId).then(t=>{if(e.discarded||this.getState().selectedSession?.id!==e.tempId)return;this.applyStatus(t);let n=this.getState(),r=new Set([...n.pendingDialogs.map(e=>e.dialogId),...n.closedDialogs.map(e=>e.dialog.dialogId)]),i=(t.pendingDialogs??[]).filter(e=>!r.has(e.dialogId));i.length>0&&this.setState({pendingDialogs:[...n.pendingDialogs,...i]})},()=>void 0)}applyPendingStartEvent(e,t){if(!(e.discarded||this.getState().selectedSession?.id!==e.tempId)){if(t.type===`dialog.opened`){this.applyOpenedDialog(t.dialog);return}if(t.type===`dialog.closed`){this.applyClosedDialog(t.dialogId,t.reason,t.answer);return}t.type===`status.update`&&this.applyPendingStartStatus(e,t.status)}}applyPendingStartStatus(e,t){this.applyStatus(t),!(e.discarded||this.getState().selectedSession?.id!==e.tempId)&&this.setState({pendingDialogs:t.pendingDialogs??[]})}schedulePendingFlush(){this.pendingFrame??=requestAnimationFrame(()=>{this.pendingFrame=void 0,this.flushPendingUpdates()}),this.pendingFlushTimer??=setTimeout(()=>{this.pendingFlushTimer=void 0,this.flushPendingUpdates()},Ep)}cancelScheduledFlush(){this.pendingFrame!==void 0&&(cancelAnimationFrame(this.pendingFrame),this.pendingFrame=void 0),this.pendingFlushTimer!==void 0&&(clearTimeout(this.pendingFlushTimer),this.pendingFlushTimer=void 0)}flushPendingUpdates(){if(this.cancelScheduledFlush(),this.pendingTranscriptEvents.length>0){let e=this.pendingTranscriptEvents;this.pendingTranscriptEvents=[];let t=this.getState().messages;for(let n of e)t=this.transcripts.applyLiveEvent(t,n)??t;t!==this.getState().messages&&this.setState({messages:t})}if(this.pendingActivityBySession.size>0){let e=Array.from(this.pendingActivityBySession.values());this.pendingActivityBySession.clear();for(let t of e)this.applyActivity(t)}if(this.pendingStatusBySession.size>0){let e=Array.from(this.pendingStatusBySession.values());this.pendingStatusBySession.clear();for(let t of e)this.applyStatus(t)}}clearPendingUpdates(){this.pendingTranscriptEvents=[],this.pendingStatusBySession.clear(),this.pendingActivityBySession.clear(),this.cancelScheduledFlush()}isStreamEventBelowWatermark(e){let t=this.streamWatermark;return t===void 0||t.sessionId!==this.getState().selectedSession?.id?!1:e.seq!==void 0&&e.seq<=t.seq}};function Op(e){return e.reason===`answered`?!1:e.reason!==`timeout`||e.dialog.runScoped}function kp(e,t){let n=e??[];if(t.length===0)return[...n];let r=new Set(t);return n.filter(e=>!r.has(e.dialogId))}function Ap(e,t){return jp(e,t)}function jp(e,t){return Object.fromEntries(Object.entries(e).filter(([e])=>e!==t))}function Mp(e,t){if(t.length===0)return e;let n=new Set(t);return Object.fromEntries(Object.entries(e).filter(([e])=>!n.has(e)))}function Np(e,t,n){if(t===n||!(t in e))return e;let r=e[t];return r===void 0?e:{...jp(e,t),[n]:r}}function Pp(e,t,n){let r=[],i=!1;for(let a of e){if(a.id===t){i||=(r.push(n),!0);continue}a.id!==n.id&&r.push(a)}return i?r:[n,...r]}function Fp(e){return e!==void 0&&`clientPendingStart`in e&&e.clientPendingStart===!0}function Ip(e,t){return{sessionId:t,phase:e.phase,label:e.label,...e.detail===void 0?{}:{detail:e.detail},at:e.at}}function Lp(e,t=0){return{sessionId:e,phase:`active`,label:`Creating session`,detail:t>0?`${String(t)} queued ${t===1?`message`:`messages`} will send when the backend session is ready`:`Waiting for the backend session to be ready`,at:new Date().toISOString()}}function Rp(e,t,n=0){return{sessionId:e,phase:`error`,label:`Session creation failed`,detail:`${t}${n>0?` · ${String(n)} queued ${n===1?`message`:`messages`} kept below`:``}`,at:new Date().toISOString()}}function zp(e){return e.type===`prompt`?{kind:e.streamingBehavior===`steer`?`steer`:`followUp`,text:Bp(e.text,e.attachments)}:{kind:`followUp`,text:e.text}}function Bp(e,t){let n=Vp(t);return n===void 0?e:e.trim()===``?n:`${e}\n\n${n}`}function Vp(e){if(e===void 0||e.length===0)return;let t=e.map(e=>e.name?.trim()).filter(e=>e!==void 0&&e!==``),n=e.length,r=`${String(n)} ${n===1?`attachment`:`attachments`}`;return t.length===0?`[${r} queued]`:`[${r} queued: ${t.slice(0,3).join(`, `)}${t.length>3?`, +${String(t.length-3)} more`:``}]`}function Hp(e){let t=new Set,n=[];for(let r of e)t.has(r.id)||(t.add(r.id),n.push(r));return n}function Up(e){return e.map(e=>`${e.sessionId}: ${e.error}`)}function Wp(e,t,n){if(n===void 0)return{};let r=e.sessions.some(e=>e.id===t&&e.messageCount!==n)?e.sessions.map(e=>e.id===t?{...e,messageCount:n}:e):void 0,i=e.selectedSession?.id===t&&e.selectedSession.messageCount!==n?{...e.selectedSession,messageCount:n}:e.selectedSession;return{...r===void 0?{}:{sessions:r},...i===e.selectedSession?{}:{selectedSession:i}}}function Gp(e){return e.type===`assistant.delta`||e.type===`assistant.thinking.delta`||e.type===`shell.chunk`}function Kp(e){return e instanceof Error&&e.message.toLowerCase().includes(`session not found`)}var qp={order:0,overflowWatermark:0};function Jp(e){return{...e,status:`loading`,catalogRevision:0,notifications:[],dismissThrough:qp,optimisticDismissedIds:[],announcements:[]}}function Yp(e,t,n){if(n.summary.sessionId!==t.sessionId||n.summary.cwd!==t.cwd)throw Error(`Notification inbox snapshot does not match the selected session`);let r=e!==void 0&&sm(e,t)&&e.daemonInstanceId===n.daemonInstanceId;return{...t,status:`fresh`,daemonInstanceId:n.daemonInstanceId,catalogRevision:n.catalogRevision,summary:n.summary,notifications:n.notifications,dismissThrough:n.dismissThrough,optimisticDismissedIds:r?e.optimisticDismissedIds:[],...r&&e.optimisticDismissAllThrough!==void 0?{optimisticDismissAllThrough:e.optimisticDismissAllThrough}:{},announcements:r?e.announcements:[]}}function Xp(e,t,n){if(n.summary.sessionId!==t.sessionId||n.summary.cwd!==t.cwd)return{value:e??Jp(t),needsRefresh:!1,changed:!1};if(e===void 0||!sm(e,t))return{value:lm(t),needsRefresh:!0,changed:!0};if(e.daemonInstanceId!==n.daemonInstanceId)return{value:lm(t),needsRefresh:!0,changed:e.status!==`stale`||e.daemonInstanceId!==void 0||e.notifications.length>0};if(n.delta.kind===`resync`)return{value:{...e,status:`stale`},needsRefresh:!0,changed:e.status!==`stale`};let r=cu({revision:e.summary?.inboxRevision??0,fresh:e.status===`fresh`},{revision:n.summary.inboxRevision});if(r===`ignore`)return{value:e,needsRefresh:!1,changed:!1};if(r===`resync`)return{value:{...e,status:`stale`},needsRefresh:!0,changed:e.status!==`stale`};let i,a;switch(n.delta.kind){case`added`:{let t=n.delta;if(e.notifications.some(e=>e.id===t.notification.id))return{value:{...e,status:`stale`},needsRefresh:!0,changed:!0};i=[t.notification,...e.notifications].filter(e=>e.id!==t.evictedNotificationId).sort((e,t)=>t.order-e.order).slice(0,100),a={id:`${n.daemonInstanceId}:${String(n.summary.inboxRevision)}:${t.notification.id}`,severity:t.notification.severity,message:t.notification.message};break}case`dismissed`:{let t=new Set(n.delta.notificationIds);i=e.notifications.filter(e=>!t.has(e.id));break}case`cleared`:i=[];break}let o=i[0]?.order??0;if(!um(i,n.summary)||n.dismissThrough.order!==o||n.dismissThrough.overflowWatermark<n.summary.discardedCount)return{value:{...e,status:`stale`},needsRefresh:!0,changed:!0};let s=a===void 0?e.announcements:[...e.announcements,a].slice(-100);return{value:{...e,status:`fresh`,daemonInstanceId:n.daemonInstanceId,catalogRevision:n.catalogRevision,summary:n.summary,notifications:i,dismissThrough:n.dismissThrough,announcements:s},needsRefresh:!1,changed:!0}}function Zp(e){if(e?.status!==`fresh`||e.daemonInstanceId===void 0||e.summary===void 0)return;let t=new Set(e.optimisticDismissedIds),n=e.optimisticDismissAllThrough,r=e.notifications.filter(e=>!t.has(e.id)&&(n===void 0||e.order>n.order)),i=fm(e.summary.discardedCount,e.dismissThrough.overflowWatermark,n?.overflowWatermark);return r.length===0&&t.size>0&&(i=0),{machineId:e.machineId,sessionId:e.sessionId,cwd:e.cwd,daemonInstanceId:e.daemonInstanceId,notifications:r,retainedCount:r.length,discardedCount:i,...pm(dm(r)),dismissThrough:e.dismissThrough,pendingDismissedIds:t,dismissAllPending:n!==void 0,announcements:e.announcements}}function Qp(e){return e===`error`?`Error`:e===`warning`?`Warning`:`Info`}function $p(e){return`${Qp(e.severity)} notification received.`}function em(e){return e.retainedCount+e.discardedCount}function tm(e){return`Notifications (${String(em(e))})`}function nm(e){let t=e.message.replace(/\s+/gu,` `).trim();if(t===``)return`Dismiss ${Qp(e.severity).toLowerCase()} notification`;let n=Array.from(t);return`Dismiss notification: ${n.length<=80?t:`${n.slice(0,79).join(``).trimEnd()}…`}`}function rm(e,t){let n=e.findIndex(e=>e.id===t);if(n===-1)return{kind:`header`};let r=e[n+1];if(r!==void 0)return{kind:`notification`,notificationId:r.id};let i=e[n-1];return i===void 0?{kind:`header`}:{kind:`notification`,notificationId:i.id}}function im(e){return JSON.stringify([e.machineId,e.cwd,e.sessionId])}function am(e){return`${String(e)} older ${e===1?`notification`:`notifications`} not shown.`}function om(e){if(!e.truncated)return;let t=Gt/1024;return`Message truncated at ${String(t)} KiB.`}function sm(e,t){return e.machineId===t.machineId&&e.sessionId===t.sessionId&&e.cwd===t.cwd}function cm(e,t){if(e===`error`||t===`error`)return`error`;if(e===`warning`||t===`warning`)return`warning`;if(e===`info`||t===`info`)return`info`}function lm(e){return{...Jp(e),status:`stale`}}function um(e,t){return e.length===t.retainedCount&&dm(e)===t.highestSeverity}function dm(e){let t;for(let n of e)t=cm(t,n.severity);return t}function fm(e,t,n){if(e===0||n===void 0)return e;let r=t-e+1;return e-Math.max(0,Math.min(e,n-r+1))}function pm(e){return e===void 0?{}:{highestSeverity:e}}var mm=class{constructor(e,t,n={}){this.getState=e,this.setState=t,this.selectedGeneration=0,this.dismissingNotificationIds=new Set,this.dismissAllPending=!1,this.disposed=!1,this.api=n.api??fs,this.onBackgroundError=n.onBackgroundError??((e,t)=>{console.warn(e,t)})}dispose(){this.disposed=!0,this.selectedGeneration+=1,this.selectedTarget=void 0,this.selectedJoin=void 0,this.dismissingNotificationIds.clear(),this.dismissAllPending=!1}prepareSelectedSession(e,t){if(this.selectedGeneration+=1,this.selectedTarget=e.archived===!0?void 0:{machineId:t,sessionId:e.id,cwd:e.cwd},this.selectedJoin=void 0,this.dismissingNotificationIds.clear(),this.dismissAllPending=!1,this.selectedTarget===void 0){this.setState({selectedNotificationInbox:void 0});return}this.setState({selectedNotificationInbox:Jp(this.selectedTarget)})}clearSelectedSession(){this.selectedGeneration+=1,this.selectedTarget=void 0,this.selectedJoin=void 0,this.dismissingNotificationIds.clear(),this.dismissAllPending=!1,this.setState({selectedNotificationInbox:void 0})}refreshSelectedSession(e,t){let n=this.selectedTarget;if(this.disposed||n?.machineId!==t||n.sessionId!==e.id||n.cwd!==e.cwd||!this.machineIsReachable(t))return Promise.resolve();let r=this.selectedGeneration,i=this.selectedRefresh;if(i?.generation===r)return i.trailing=!0,i.promise;this.ensureSelectedProjection(n);let a={generation:r,promise:Promise.resolve(),trailing:!1};return a.promise=this.runSelectedRefresh(a,n).finally(()=>{this.selectedRefresh===a&&(this.selectedRefresh=void 0)}),this.selectedRefresh=a,a.promise}applyInboxEvent(e,t){let n=this.selectedTarget;if(n?.machineId!==e||n.sessionId!==t.summary.sessionId||n.cwd!==t.summary.cwd)return;let r=this.selectedJoin;if(r?.generation===this.selectedGeneration){r.events.push(t);return}let i=Xp(this.getState().selectedNotificationInbox,n,t);i.changed&&this.setState({selectedNotificationInbox:i.value}),i.needsRefresh&&this.scheduleSelectedRefresh(n)}syncEnvironment(e,t){if(this.disposed)return;let n=e.machines!==t.machines||e.machineStatuses!==t.machineStatuses,r=this.selectedTarget;if(!n||r===void 0)return;let i=this.machineIsReachableInState(e,r.machineId);if(!this.machineIsReachable(r.machineId)){this.markSelectedStale(r);return}this.ensureSelectedProjection(r),(!i||this.getState().selectedNotificationInbox?.status!==`fresh`)&&this.refreshSelectedSession({id:r.sessionId,cwd:r.cwd},r.machineId)}async dismissNotification(e){let t=this.getState().selectedNotificationInbox,n=Zp(t);if(t===void 0||n===void 0||this.dismissAllPending||this.dismissingNotificationIds.has(e))return;let r=n.notifications.find(t=>t.id===e);if(r===void 0)return;let i=hm(t);r.warningDismiss!==void 0&&this.api.dismissWarning({id:i.sessionId,cwd:i.cwd},r.warningDismiss.id,i.machineId).catch(()=>void 0);let a=this.selectedGeneration;this.dismissingNotificationIds.add(e),this.patchSelectedOverlay(i,t=>({...t,optimisticDismissedIds:[...new Set([...t.optimisticDismissedIds,e])]}));try{let t=await this.api.dismissNotification({id:i.sessionId,cwd:i.cwd},n.daemonInstanceId,e,i.machineId);this.isCurrentTarget(i,a)&&this.applyMutationSnapshot(i,t,t=>({...t,optimisticDismissedIds:t.optimisticDismissedIds.filter(t=>t!==e)}))}catch(t){this.isCurrentTarget(i,a)&&(this.patchSelectedOverlay(i,t=>({...t,optimisticDismissedIds:t.optimisticDismissedIds.filter(t=>t!==e)})),this.setState({error:`Failed to dismiss notification: ${y(t)}`}),await this.refreshSelectedSession({id:i.sessionId,cwd:i.cwd},i.machineId))}finally{this.dismissingNotificationIds.delete(e)}}async dismissAll(){let e=this.getState().selectedNotificationInbox,t=Zp(e);if(e===void 0||t===void 0||this.dismissAllPending||t.retainedCount+t.discardedCount===0)return;let n=hm(e),r=this.selectedGeneration,i={...e.dismissThrough};this.dismissAllPending=!0,this.patchSelectedOverlay(n,e=>({...e,optimisticDismissAllThrough:i}));try{let e=await this.api.dismissAllNotifications({id:n.sessionId,cwd:n.cwd},t.daemonInstanceId,i,n.machineId);e.outcome===`stale-instance`&&this.isCurrentTarget(n,r)&&(e=await this.api.dismissAllNotifications({id:n.sessionId,cwd:n.cwd},e.daemonInstanceId,{...e.dismissThrough},n.machineId)),this.isCurrentTarget(n,r)&&this.applyMutationSnapshot(n,e,e=>{let t={...e};return delete t.optimisticDismissAllThrough,t})}catch(e){this.isCurrentTarget(n,r)&&(this.patchSelectedOverlay(n,e=>{let t={...e};return delete t.optimisticDismissAllThrough,t}),this.setState({error:`Failed to dismiss session notifications: ${y(e)}`}),await this.refreshSelectedSession({id:n.sessionId,cwd:n.cwd},n.machineId))}finally{r===this.selectedGeneration&&(this.dismissAllPending=!1)}}async runSelectedRefresh(e,t){do{e.trailing=!1;let n={generation:e.generation,events:[]};this.selectedJoin=n;try{let r=await this.api.notificationInbox({id:t.sessionId,cwd:t.cwd},t.machineId);if(!this.isCurrentTarget(t,e.generation))return;if(!this.machineIsReachable(t.machineId)){this.markSelectedStale(t);return}let i=this.getState().selectedNotificationInbox,a=i===void 0||gm(i,t,r)?Yp(i,t,r):i;for(let r of[...n.events].sort((e,t)=>e.summary.inboxRevision-t.summary.inboxRevision)){let n=Xp(a,t,r);a=n.value,n.needsRefresh&&(e.trailing=!0)}this.setState({selectedNotificationInbox:a})}catch(n){if(this.isCurrentTarget(t,e.generation)){let e=this.getState().selectedNotificationInbox;e!==void 0&&sm(e,t)&&e.status!==`stale`&&this.setState({selectedNotificationInbox:{...e,status:`stale`}}),this.onBackgroundError(`Failed to refresh notifications for session ${t.sessionId}`,n)}return}finally{this.selectedJoin===n&&(this.selectedJoin=void 0)}}while(e.trailing&&this.isCurrentTarget(t,e.generation)&&this.machineIsReachable(t.machineId))}applyMutationSnapshot(e,t,n){let r=this.getState().selectedNotificationInbox;if(r===void 0||!sm(r,e))return;if(!this.machineIsReachable(e.machineId)){this.setState({selectedNotificationInbox:{...n(r),status:`stale`}});return}let i=gm(r,e,t)?Yp(r,e,t):r;this.setState({selectedNotificationInbox:n(i)})}patchSelectedOverlay(e,t){let n=this.getState().selectedNotificationInbox;n===void 0||!sm(n,e)||this.setState({selectedNotificationInbox:t(n)})}ensureSelectedProjection(e){let t=this.getState().selectedNotificationInbox;(t===void 0||!sm(t,e))&&this.setState({selectedNotificationInbox:Jp(e)})}scheduleSelectedRefresh(e){queueMicrotask(()=>{!this.disposed&&this.selectedTarget!==void 0&&sm(this.selectedTarget,e)&&this.refreshSelectedSession({id:e.sessionId,cwd:e.cwd},e.machineId)})}markSelectedStale(e){let t=this.getState().selectedNotificationInbox;t===void 0||!sm(t,e)||t.status===`stale`||this.setState({selectedNotificationInbox:{...t,status:`stale`}})}isCurrentTarget(e,t){return!this.disposed&&t===this.selectedGeneration&&this.selectedTarget!==void 0&&sm(this.selectedTarget,e)}machineIsReachable(e){return this.machineIsReachableInState(this.getState(),e)}machineIsReachableInState(e,t){let n=e.machines.find(e=>e.id===t);if(t===`local`||n?.kind===`local`)return!0;let r=e.machineStatuses[t]?.status??n?.status;return r===void 0||r===`unknown`||r===`online`}};function hm(e){return{machineId:e.machineId,sessionId:e.sessionId,cwd:e.cwd}}function gm(e,t,n){return!sm(e,t)||e.daemonInstanceId!==n.daemonInstanceId||e.summary===void 0||n.summary.inboxRevision>=e.summary.inboxRevision}var _m=class{constructor(){this.workspaceIdsByProject=new Map}latestWorkspaceId(e){return this.workspaceIdsByProject.get(e)}rememberWorkspace(e){this.workspaceIdsByProject.set(e.projectId,e.id)}forgetProject(e){this.workspaceIdsByProject.delete(e)}},vm=`pi-web:workspace-selection:v1`,ym=class{constructor(e=lp()){this.workspaceIdsByProject=new up(vm,dp,e)}latestWorkspaceId(e){return this.workspaceIdsByProject.get(e)}rememberWorkspace(e){this.workspaceIdsByProject.set(e.projectId,e.id)}forgetProject(e){this.workspaceIdsByProject.delete(e)}};function bm(e,t){let n=t?.targetWorkspaceId;if(n!==void 0&&n!==``)return e.find(e=>e.id===n);let r=t?.latestWorkspaceId;return r!==void 0&&r!==``?e.find(e=>e.id===r)??e[0]:e[0]}var xm=50,Sm=class{constructor(e,t,n,r,i=new _m,a={}){this.getState=e,this.setState=t,this.updateUrl=n,this.sessions=r,this.workspaceSelection=i,this.api=a.api??fs,this.onBackgroundError=a.onBackgroundError??((e,t)=>{console.warn(e,t)}),this.topologyRefreshes=new Jl(a.topologyRefreshDebounceMs??xm)}clearSelection(e){this.sessions.clearActiveSession(),this.setState({selectedProject:void 0,selectedWorkspace:void 0,workspaces:[],isLoadingWorkspaces:!1,...vl()}),e?.updateUrl!==!1&&this.updateUrl()}forgetProject(e){this.workspaceSelection.forgetProject(ll(R(this.getState()),e));let t=Object.fromEntries(Object.entries(this.getState().workspacesByProjectId).filter(([t])=>t!==e));this.setState({workspacesByProjectId:t})}async selectProject(e,t){let n=R(this.getState());this.sessions.clearActiveSession(),this.setState({selectedProject:e,selectedWorkspace:void 0,workspaces:[],isLoadingWorkspaces:!0,...vl()});try{let r=await this.api.workspaces(e.id,n);if(R(this.getState())!==n||this.getState().selectedProject?.id!==e.id)return;this.setState({workspaces:r,workspacesByProjectId:{...this.getState().workspacesByProjectId,[e.id]:r},isLoadingWorkspaces:!1});let i=bm(r,{targetWorkspaceId:t?.workspaceId,latestWorkspaceId:this.workspaceSelection.latestWorkspaceId(ll(n,e.id))});i?await this.selectWorkspace(i,{sessionId:t?.sessionId,updateUrl:t?.updateUrl}):t?.updateUrl!==!1&&this.updateUrl()}catch(t){R(this.getState())===n&&this.getState().selectedProject?.id===e.id&&this.setState({...b(t),isLoadingWorkspaces:!1})}}async selectWorkspace(e,t){let n=R(this.getState());this.workspaceSelection.rememberWorkspace({...e,projectId:ll(n,e.projectId)}),this.sessions.clearActiveSession();let r=Lu(n,e.path);this.setState({selectedWorkspace:e,isLoadingWorkspaces:!1,...vl(),sessions:r===void 0?[]:[...r],sessionsLoad:`loading`});try{let r=xu(e.path,await this.api.sessions(e.path,n),n);if(R(this.getState())!==n||this.getState().selectedWorkspace?.id!==e.id||this.getState().selectedProject?.id!==e.projectId)return;Ru(n,e.path,r),this.setState({sessions:r,sessionsLoad:`loaded`});let i=this.sessions.preferredSession(e.path,r,t?.sessionId);i?await this.sessions.selectSession(i,{updateUrl:t?.updateUrl}):t?.updateUrl!==!1&&this.updateUrl()}catch(t){R(this.getState())===n&&this.getState().selectedWorkspace?.id===e.id&&this.setState({...b(t),sessionsLoad:`unloaded`})}finally{this.refreshWorkspaceGoals(e,n)}}async refreshWorkspaceGoals(e=this.getState().selectedWorkspace,t=R(this.getState())){if(e===void 0)return;let n=dl(t,e.projectId,e.id),r=this.getState().workspaceGoalsLoad,i=r.key===n?r.data:[];this.setState({workspaceGoalsLoad:{state:`loading`,key:n,data:i}});let a;try{let r=this.getState().selectedSession?.cwd;a={state:`loaded`,key:n,data:(await this.api.workspaceGoals(e.projectId,e.id,t,r)).goals}}catch{a={state:`failed`,key:n,data:i}}hl(this.getState())===n&&this.setState({workspaceGoalsLoad:a})}async archiveWorkspaceGoal(e,t=this.getState().selectedWorkspace){if(t===void 0)return;let n=R(this.getState());try{(await this.api.archiveWorkspaceGoal(t.projectId,t.id,e,n)).agentMayRecreate&&this.setState({error:`Goal archived. A session already working it keeps its own copy until it reloads, so run /goal-refresh there if it comes back.`})}catch(e){this.setState({error:`Could not archive the goal: ${y(e)}`})}await this.refreshWorkspaceGoals(t,n)}async refreshProjectWorkspaces(e){let t=this.getState().projects.find(t=>t.id===e);if(t===void 0)throw Error(`Project not found`);let n=await this.api.workspaces(t.id,R(this.getState()));return this.applyProjectWorkspaces(t.id,n),n}async refreshSelectedProjectTopology(){let e=this.getState(),t=e.selectedProject;if(t===void 0)return;let n=R(e);await this.topologyRefreshes.request(ll(n,t.id),async()=>{try{let e=await this.api.workspaces(t.id,n),r=this.getState();if(R(r)!==n||r.selectedProject?.id!==t.id)return;this.applyProjectWorkspaces(t.id,e)}catch(e){this.onBackgroundError(`Failed to refresh workspaces for project ${t.id} on ${n}`,e)}})}async refreshAfterWorkspaceDeleted(e,t){let n=await this.refreshProjectWorkspaces(e),r=this.getState();if(r.selectedProject?.id!==e||r.selectedWorkspace?.id!==t)return;let i=Cm(n);i===void 0?this.clearSelection():await this.selectWorkspace(i)}applyProjectWorkspaces(e,t){let n=this.getState(),r={...n.workspacesByProjectId,[e]:t};if(n.selectedProject?.id!==e){this.setState({workspacesByProjectId:r});return}this.setState({workspaces:t,workspacesByProjectId:r,...this.refreshedSelection(n.selectedWorkspace,t)})}refreshedSelection(e,t){if(e===void 0)return;let n=t.find(t=>t.id===e.id);if(!(n===void 0||wm(e,n)))return{selectedWorkspace:n}}};function Cm(e){return e.find(e=>e.isMain)??e[0]}function wm(e,t){return Tm(e,t)}function Tm(e,t){if(Object.is(e,t))return!0;if(Array.isArray(e)||Array.isArray(t))return Array.isArray(e)&&Array.isArray(t)&&e.length===t.length&&e.every((e,n)=>Tm(e,t[n]));if(!Em(e)||!Em(t))return!1;let n=Object.keys(e),r=Object.keys(t);return n.length===r.length&&n.every(n=>Object.hasOwn(t,n)&&Tm(e[n],t[n]))}function Em(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}var Dm=`pi-web:machine-navigation:v1`,Om=class{constructor(e=lp()){this.snapshotsByMachine=new up(Dm,Nm,e)}latest(e){let t=this.snapshotsByMachine.get(e);return t?.machineId===e?Mm(t):void 0}remember(e){this.snapshotsByMachine.set(e.machineId,Mm(e))}forget(e){this.snapshotsByMachine.delete(e)}};function km(e){return{machineId:e,surface:{}}}function Am(e){let t=e.selectedWorkspace!==void 0;return{machineId:e.selectedMachine?.id??`local`,projectId:e.selectedProject?.id,workspaceId:e.selectedWorkspace?.id,sessionId:e.selectedSession?.id,tool:e.workspaceTool,view:e.mainView,surface:{selectedFilePath:t?e.selectedFilePath:void 0,selectedTerminalId:t?e.selectedTerminalId:void 0}}}function jm(e){return{machineId:e.machineId,projectId:e.projectId,workspaceId:e.workspaceId,sessionId:e.sessionId,tool:e.tool,view:e.view===`navigation`?void 0:e.view}}function Mm(e){return{...e,surface:{...e.surface}}}function Nm(e){if(!zm(e))return;let t=Rm(e,`machineId`);if(t===void 0)return;let n=Im(Rm(e,`tool`)),r=Fm(Rm(e,`view`));return{machineId:t,projectId:Rm(e,`projectId`),workspaceId:Rm(e,`workspaceId`),sessionId:Rm(e,`sessionId`),...n===void 0?{}:{tool:n},...r===void 0?{}:{view:r},surface:Pm(e.surface)}}function Pm(e){return zm(e)?{selectedFilePath:Rm(e,`selectedFilePath`),selectedTerminalId:Rm(e,`selectedTerminalId`)}:{}}function Fm(e){return e===`navigation`||e===`chat`?e:Im(e)}function Im(e){return Lm(e)?e:void 0}function Lm(e){return e!==void 0&&/^[a-z][a-z0-9.-]*:[a-z][a-z0-9.-]*$/u.test(e)}function Rm(e,t){let n=e[t];return typeof n==`string`&&n!==``?n:void 0}function zm(e){return typeof e==`object`&&!!e}var Bm=`pi-web:terminal-selection:v1`,Vm=class{constructor(e=lp()){this.terminalIdsByCwd=new up(Bm,dp,e)}latestTerminalId(e){return this.terminalIdsByCwd.get(e)}rememberTerminal(e,t){this.terminalIdsByCwd.set(e,t)}forgetWorkspace(e){this.terminalIdsByCwd.delete(e)}forgetTerminal(e){for(let[t,n]of this.terminalIdsByCwd.entries())n===e&&this.terminalIdsByCwd.delete(t)}};function Hm(e,t){let n=t?.targetTerminalId;if(n!==void 0&&n!==``)return e.find(e=>e.id===n);let r=t?.latestTerminalId;return r!==void 0&&r!==``?e.find(e=>e.id===r)??e.find(e=>!e.exited)??e[0]:e.find(e=>!e.exited)??e[0]}function Um(e){return e.find(e=>!e.exited)??e[0]}var Wm=1200,Gm=[`mod`,`alt`,`shift`],Km=class{constructor(){this.pendingTokens=[]}handle(e,t,n={}){let r=Zm(e);if(r===void 0)return!1;let i=qm(t,n.shortcuts,{enabledOnly:!0}).filter(e=>e.active).map(e=>({action:e.action,tokens:e.tokens}));if(this.pendingTokens.length>0){if(this.handleSequence([...this.pendingTokens,r],i))return!0;if(this.clearPending(),!Qm(r))return!1}else if(!Qm(r))return!1;return this.handleSequence([r],i)}reset(){this.clearPending()}handleSequence(e,t){let n=t.find(t=>hh(t.tokens,e));return n===void 0?t.some(t=>gh(t.tokens,e))?(this.setPending(e),!0):!1:(this.clearPending(),n.action.run(),!0)}setPending(e){this.clearPending(),this.pendingTokens=e,this.pendingTimer=globalThis.setTimeout(()=>{this.pendingTokens=[],this.pendingTimer=void 0},Wm)}clearPending(){this.pendingTokens=[],this.pendingTimer!==void 0&&(globalThis.clearTimeout(this.pendingTimer),this.pendingTimer=void 0)}};function qm(e,t,n={}){let r=e.flatMap((e,r)=>{if(n.enabledOnly===!0&&e.enabled===!1)return[];let i=$m(e,t,r);return i===void 0?[]:[i]}),i=new Map;for(let e of r)i.set(e.key,[...i.get(e.key)??[],e]);let a=new Map;for(let e of i.values()){let t=[...e].sort(rh)[0];t!==void 0&&a.set(t.key,t)}let o=[...a.values()].sort(ih),s=new Map,c=new Map;for(let e of r){let t=a.get(e.key);if(t===void 0)continue;let n=ah(t,o)??t;c.set(e,n),e!==n&&s.set(n,[...s.get(n)??[],e])}return r.map(e=>{let t=c.get(e),n=t===e,r=t===void 0||n?void 0:nh(t),i=n?[...s.get(e)??[]].sort(rh).map(nh):[];return{...e,active:n,shadows:i,...r===void 0?{}:{shadowedBy:r}}}).sort((e,t)=>e.order-t.order)}function Jm(e){return ch(e,{requireFirstChordActivator:!0})}function Ym(e){let t=ch(e,{requireFirstChordActivator:!1});return t.ok?t.tokens:[]}function Xm(e){return Ym(e).map(e=>e.split(`+`).map(mh).join(`+`)).join(` `)}function Zm(e){if(e.isComposing)return;let t=fh(e.key);if(t===void 0)return;let n=[];return(e.metaKey||e.ctrlKey)&&n.push(`mod`),e.altKey&&n.push(`alt`),e.shiftKey&&n.push(`shift`),n.push(t),n.join(`+`)}function Qm(e){return e.split(`+`).includes(`mod`)||e.split(`+`).includes(`alt`)}function $m(e,t,n){let r=eh(e,t);if(r===null)return;let i=r??e.shortcut;if(i===void 0||i===``)return;let a=Ym(i),o=a[0];if(!(o===void 0||!Qm(o)))return{action:e,shortcut:a.join(` `),source:r===void 0?`default`:`custom`,tokens:a,key:th(a),order:n}}function eh(e,t){if(t!==void 0){for(let n of[e.id,...e.shortcutAliases??[]])if(Object.hasOwn(t,n))return t[n]}}function th(e){return e.join(`\0`)}function nh(e){return{action:e.action,shortcut:e.shortcut,source:e.source}}function rh(e,t){return oh(e.source)-oh(t.source)||sh(e.action.id,t.action.id)||sh(e.action.title,t.action.title)||e.order-t.order}function ih(e,t){return e.tokens.length-t.tokens.length||rh(e,t)}function ah(e,t){return t.find(t=>t!==e&&t.tokens.length<e.tokens.length&&gh(e.tokens,t.tokens))}function oh(e){switch(e){case`custom`:return 0;case`default`:return 1}}function sh(e,t){return e<t?-1:+(e>t)}function ch(e,t){let n=e.trim().toLowerCase().replace(/\s*\+\s*/gu,`+`);if(n===``)return{ok:!1,message:`Enter a shortcut, choose None, or reset to the default.`};let r=[],i=n.split(/\s+/u).filter(e=>e!==``);for(let[e,n]of i.entries()){let i=lh(n);if(!i.ok)return i;if(e===0&&t.requireFirstChordActivator&&!Qm(i.token))return{ok:!1,message:`Shortcuts must start with Ctrl/⌘ or Alt so normal typing is not captured.`};r.push(i.token)}return{ok:!0,shortcut:r.join(` `),tokens:r}}function lh(e){let t=e.split(`+`).filter(e=>e!==``);if(t.length===0)return{ok:!1,message:`Shortcut chords must include a key.`};let n=new Set,r;for(let e of t){let t=uh(e);if(t!==void 0){if(n.has(t))return{ok:!1,message:`Shortcut has duplicate ${mh(t)} modifiers.`};n.add(t);continue}let i=dh(e);if(i===void 0)return{ok:!1,message:`Unsupported shortcut key: ${e}`};if(r!==void 0)return{ok:!1,message:`Each shortcut chord can include only one non-modifier key.`};r=i}return r===void 0?{ok:!1,message:`Shortcut chords must include a key.`}:{ok:!0,token:[...Gm.filter(e=>n.has(e)),r].join(`+`)}}function uh(e){switch(e){case`mod`:case`meta`:case`cmd`:case`command`:case`ctrl`:case`control`:case`primary`:return`mod`;case`alt`:case`option`:case`opt`:return`alt`;case`shift`:return`shift`;default:return}}function dh(e){let t=ph(e);if(t!==void 0)return t;if(/^f(?:[1-9]|1[0-9]|2[0-4])$/u.test(e)||e.length===1)return e}function fh(e){return e===` `?`space`:dh(e.toLowerCase())}function ph(e){switch(e){case` `:case`spacebar`:case`space`:return`space`;case`esc`:case`escape`:return`escape`;case`return`:case`enter`:return`enter`;case`del`:case`delete`:return`delete`;case`backspace`:return`backspace`;case`tab`:return`tab`;case`up`:case`arrowup`:return`arrowup`;case`down`:case`arrowdown`:return`arrowdown`;case`left`:case`arrowleft`:return`arrowleft`;case`right`:case`arrowright`:return`arrowright`;case`pageup`:case`pagedown`:case`home`:case`end`:return e;case`+`:case`plus`:return`plus`;case`period`:case`dot`:return`.`;case`comma`:return`,`;case`slash`:return`/`;case`backslash`:return`\\`;case`minus`:return`-`;default:return}}function mh(e){return e===`mod`?_h()?`⌘`:`Ctrl`:e===`shift`?`Shift`:e===`alt`?_h()?`⌥`:`Alt`:e===`enter`?`Enter`:e===`escape`?`Esc`:e===`space`?`Space`:e===`tab`?`Tab`:e===`backspace`?`Backspace`:e===`delete`?`Delete`:e===`arrowup`?`↑`:e===`arrowdown`?`↓`:e===`arrowleft`?`←`:e===`arrowright`?`→`:e===`pageup`?`PageUp`:e===`pagedown`?`PageDown`:e===`home`?`Home`:e===`end`?`End`:e===`plus`?`+`:/^f(?:[1-9]|1[0-9]|2[0-4])$/u.test(e)||e.length===1?e.toUpperCase():`${e.charAt(0).toUpperCase()}${e.slice(1)}`}function hh(e,t){return e.length===t.length&&gh(e,t)}function gh(e,t){return t.every((t,n)=>e[n]===t)}function _h(){return typeof navigator<`u`&&navigator.userAgent.toLowerCase().includes(`mac`)}function vh(e,t,n=24){if(t===void 0||!Number.isFinite(e)||e<=0||!Number.isFinite(t.height)||t.height<=0)return 0;let r=e-(t.offsetTop+t.height);return!Number.isFinite(r)||r<n?0:Math.min(r,e)}var yh=[`ask-user-card`,`extension-dialog-card`];function bh(e){return e.pointerInFlight?{collapsed:e.collapsed,held:e.next}:{collapsed:e.held??e.next,held:void 0}}function xh(e){return e.some(e=>yh.includes(Ch(e)))}function Sh(e){let t=[],n=e instanceof Node?e:null;for(;n!==null;)t.push(n),n=n.parentNode??(n instanceof ShadowRoot?n.host:null);return t}function Ch(e){return e instanceof Element?e.tagName.toLowerCase():``}function wh(e){return!e.collapsed||e.collapsingHostStillPresent?!1:!xh(e.activeElementPath)}function Th(e){return e.hasSelectedSession&&e.documentVisible}var Eh=2e4;function Dh(e){let t=!1,n=0;async function r(){t=!0;try{let t=-1;for(;t!==n;)t=n,await Promise.race([e(),new Promise(e=>{setTimeout(e,Eh)})])}finally{t=!1}}return async()=>{n+=1,!t&&await r()}}function Oh(e,t){return t?.phase===`error`?`error`:e===void 0?t?.phase===`active`?`working`:void 0:kh(e)?`asking`:e.isStreaming||e.isBashRunning||e.isCompacting||e.pendingMessageCount>0||t?.phase===`active`?`working`:(e.backgroundRunCount??0)>0?`background`:`idle`}function kh(e){return e===void 0?!1:e.pendingAsk!==void 0||(e.pendingDialogs?.length??0)>0}var Ah={archiveIdleEnabled:!0,archiveIdleDays:`30`,deleteArchivedEnabled:!1,deleteArchivedDays:`90`};function jh(e){if(!e.archiveIdleEnabled&&!e.deleteArchivedEnabled)return{ok:!1,error:`Enable at least one cleanup action.`};let t={archiveIdleDays:null,deleteArchivedDays:null};if(e.archiveIdleEnabled){let n=zh(e.archiveIdleDays,`Archive idle sessions after`);if(typeof n==`string`)return{ok:!1,error:n};t.archiveIdleDays=n}if(e.deleteArchivedEnabled){let n=zh(e.deleteArchivedDays,`Delete archived sessions after`);if(typeof n==`string`)return{ok:!1,error:n};t.deleteArchivedDays=n}return{ok:!0,request:t}}function Mh(e){return JSON.stringify({archiveIdleDays:e?.archiveIdleDays??null,deleteArchivedDays:e?.deleteArchivedDays??null})}function Nh(e){if(e.loading===!0||e.running===!0||e.preview===void 0)return!1;let t=jh(e.draft);return!t.ok||Mh(t.request)!==Mh(e.previewRequest)?!1:Ph(e.preview)}function Ph(e){return e.totals.archiveCount>0||e.totals.deleteCount>0}function Fh(e,t){let n=e.projects.map(e=>e.cwd);if(t===void 0)return n;let r=new Set(t);return n.filter(e=>r.has(e))}function Ih(e,t){let n=new Set(Fh(e,t)),r=e.projects.filter(e=>n.has(e.cwd));return{...e,projects:r,totals:r.reduce((e,t)=>({archiveCount:e.archiveCount+t.archiveCount,deleteCount:e.deleteCount+t.deleteCount}),{archiveCount:0,deleteCount:0})}}function Lh(e,t){return t(Rh(e))}function Rh(e){let t=e.totals.archiveCount,n=e.totals.deleteCount,r=[];return t>0&&r.push(`archive ${String(t)} idle ${t===1?`session`:`sessions`}`),n>0&&r.push(`permanently delete ${String(n)} archived ${n===1?`session`:`sessions`}`),`Run cleanup and ${r.length===0?`run cleanup`:r.join(` and `)}?\n\nPermanent deletion only applies to archived sessions and cannot be undone.`}function zh(e,t){let n=e.trim();if(n===``)return`${t} must be set.`;let r=Number(n);return!Number.isInteger(r)||r<0?`${t} must be a non-negative whole number of days.`:r}var Bh=2,Vh=new Set,Hh=Ut+1,Uh={unreadCatalog:e=>$o.unreadCatalog(e),acknowledgeUnread:(e,t,n,r)=>$o.acknowledgeUnread(e,t,n,r)},Wh=class{constructor(e={}){this.machines=new Map,this.api=e.api??Uh,this.onChange=e.onChange??(()=>void 0),this.onBackgroundError=e.onBackgroundError??(()=>void 0)}retainMachines(e){for(let[t,n]of this.machines){if(e.has(t))continue;let r=n.projection!==void 0;n.generation+=1,n.observers.clear(),n.acknowledgements.clear(),this.machines.delete(t),r&&this.onChange(t)}}projection(e){let t=this.machines.get(e),n=t?.projection;if(!(t===void 0||n===void 0))return{status:t.status,catalogId:n.catalogId,catalogRevision:n.catalogRevision,sessions:[...n.summariesByIdentity.values()].sort((e,t)=>t.completionOrder-e.completionOrder).map(e=>({...e}))}}unreadSessionIds(e,t){let n=this.machines.get(e)?.projection;if(n===void 0||t.length===0)return Vh;let r=new Set;for(let e of t)n.summariesByIdentity.has(Xh(e))&&r.add(e.id);return r.size===0?Vh:r}isUnread(e,t){return this.machines.get(e)?.projection?.summariesByIdentity.has(Xh(t))===!0}applyEvent(e,t){let n=this.machine(e);this.recordObservedEvent(n,t);let r=Gh(n.projection,n.status,t);this.installProjection(n,r.projection,r.status)&&this.onChange(e),r.requiresRefresh&&(n.refreshPromise===void 0?this.refresh(e):n.refreshQueued=!0)}refresh(e){let t=this.machine(e);if(t.refreshPromise!==void 0)return t.refreshQueued=!0,t.refreshPromise;let n=t.generation,r=this.runRefreshLoop(t,n);return t.refreshPromise=r,r.finally(()=>{if(!this.isCurrent(t,n)||t.refreshPromise!==r)return;t.refreshPromise=void 0;let e=t.refreshQueued;t.refreshQueued=!1,e&&this.refresh(t.machineId)}),r}async refreshAll(){await Promise.all([...this.machines.values()].map(async e=>{await this.refresh(e.machineId)}))}acknowledge(e,t){let n=this.machines.get(e),r=n?.projection;if(n===void 0||r===void 0)return Promise.resolve();let i=r.summariesByIdentity.get(Xh(t));if(i===void 0)return Promise.resolve();let a=Zh(r.catalogId,i),o=n.acknowledgements.get(a);if(o!==void 0)return o;let s=n.generation,c=this.runAcknowledgement(n,s,t,r.catalogId,i.completionOrder);return n.acknowledgements.set(a,c),c.finally(()=>{n.acknowledgements.get(a)===c&&n.acknowledgements.delete(a)}),c}async runRefreshLoop(e,t){do{if(e.refreshQueued=!1,!this.isCurrent(e,t))return;let n=e.status;this.markRefreshStarted(e)&&this.onChange(e.machineId);let r=this.beginNetworkObservation(e,t,n);try{let n=await this.api.unreadCatalog(e.machineId);if(!this.isCurrent(e,t))return;this.applyNetworkSnapshot(e,n,r)&&(e.refreshQueued=!0)}catch(n){if(this.isCurrent(e,t)){let t=e.status!==`stale`;e.status=`stale`,t&&this.onChange(e.machineId),this.reportError(`snapshot`,e.machineId,n)}}finally{e.observers.delete(r)}}while(e.refreshQueued&&this.isCurrent(e,t))}async runAcknowledgement(e,t,n,r,i,a=Bh){let o=this.beginNetworkObservation(e,t),s;try{let c=await this.api.acknowledgeUnread(n,r,i,e.machineId);if(!this.isCurrent(e,t))return;if(this.applyNetworkSnapshot(e,c,o)&&this.refresh(e.machineId),c.outcome===`superseded`&&a>0){let t=e.projection?.summariesByIdentity.get(Xh(n)),r=e.projection?.catalogId;t!==void 0&&r!==void 0&&t.completionOrder>i&&(s={catalogId:r,throughCompletionOrder:t.completionOrder})}}catch(n){this.isCurrent(e,t)&&this.reportError(`acknowledge`,e.machineId,n)}finally{e.observers.delete(o)}s!==void 0&&this.isCurrent(e,t)&&await this.runAcknowledgement(e,t,n,s.catalogId,s.throughCompletionOrder,a-1)}applyNetworkSnapshot(e,t,n){let r=e.projection;if(e.projectionVersion!==n.projectionVersion&&r!==void 0&&r.catalogId!==t.catalogId||n.overflowed||n.events.some(e=>e.catalogId!==t.catalogId)){let t=e.status!==`stale`;return e.status=`stale`,t&&this.onChange(e.machineId),!0}let i=qh(t),a=`fresh`,o=!1;for(let e of n.events){let t=Gh(i,a,e);i=t.projection,a=t.status,o||=t.requiresRefresh}if(r?.catalogId===i.catalogId&&r.catalogRevision>i.catalogRevision){if(e.projectionVersion===n.projectionVersion&&n.projectionStatus===`fresh`){let t=e.status!==`fresh`;e.status=`fresh`,t&&this.onChange(e.machineId)}o||=e.status===`stale`}else this.installProjection(e,i,a)&&this.onChange(e.machineId);return o}beginNetworkObservation(e,t,n=e.status){let r={generation:t,projectionVersion:e.projectionVersion,projectionStatus:n,events:[],overflowed:!1};return e.observers.add(r),r}recordObservedEvent(e,t){for(let n of e.observers)n.generation!==e.generation||n.overflowed||(n.events.length>=Hh?(n.events.length=0,n.overflowed=!0):n.events.push(t))}markRefreshStarted(e){let t=e.projection===void 0?`loading`:`stale`;return e.status===t?!1:(e.status=t,!0)}installProjection(e,t,n){let r=!Yh(e.projection,t);return e.status===n&&!r?!1:(r&&(e.projection=t,e.projectionVersion+=1),e.status=n,!0)}machine(e){let t=this.machines.get(e);if(t!==void 0)return t;let n={machineId:e,status:`stale`,projection:void 0,projectionVersion:0,generation:0,observers:new Set,acknowledgements:new Map,refreshPromise:void 0,refreshQueued:!1};return this.machines.set(e,n),n}isCurrent(e,t){return this.machines.get(e.machineId)===e&&e.generation===t}reportError(e,t,n){this.onBackgroundError(e,t,n)}};function Gh(e,t,n){if(e===void 0){let e=Jh(n.catalogId);return n.catalogRevision===1?Kh(e,`fresh`,n):{projection:e,status:`stale`,requiresRefresh:!0}}if(e.catalogId!==n.catalogId){let e=Jh(n.catalogId);return n.catalogRevision===1?Kh(e,`stale`,n):{projection:e,status:`stale`,requiresRefresh:!0}}return n.catalogRevision<=e.catalogRevision?{projection:e,status:t,requiresRefresh:t===`stale`}:n.catalogRevision===e.catalogRevision+1?Kh(e,t,n):{projection:e,status:`stale`,requiresRefresh:!0}}function Kh(e,t,n){let r=new Map(e.summariesByIdentity),i=Xh(n);n.unread===null?r.delete(i):r.set(i,{...n.unread});let a=t===`stale`?`stale`:`fresh`;return{projection:{catalogId:n.catalogId,catalogRevision:n.catalogRevision,summariesByIdentity:r},status:a,requiresRefresh:a===`stale`}}function qh(e){return{catalogId:e.catalogId,catalogRevision:e.catalogRevision,summariesByIdentity:new Map(e.sessions.map(e=>[Xh(e),{...e}]))}}function Jh(e){return{catalogId:e,catalogRevision:0,summariesByIdentity:new Map}}function Yh(e,t){if(e?.catalogId!==t.catalogId||e.catalogRevision!==t.catalogRevision||e.summariesByIdentity.size!==t.summariesByIdentity.size)return!1;for(let[n,r]of e.summariesByIdentity){let e=t.summariesByIdentity.get(n);if(e?.completionOrder!==r.completionOrder||e.completedAt!==r.completedAt)return!1}return!0}function Xh(e){let t=`id`in e?e.id:e.sessionId;return JSON.stringify([t,e.cwd])}function Zh(e,t){return JSON.stringify([e,t.sessionId,t.cwd,t.completionOrder])}var Qh=`themes:classic`,$h={themeId:`themes:pi-web-dark`,auto:!0},eg=`pi-web-app-theme`,tg=`--pi-bg.--pi-surface.--pi-surface-hover.--pi-terminal-bg.--pi-terminal-text.--pi-border.--pi-border-muted.--pi-text.--pi-text-secondary.--pi-text-bright.--pi-muted.--pi-dim.--pi-accent.--pi-accent-border.--pi-selection-bg.--pi-success.--pi-success-border.--pi-success-bg.--pi-success-surface.--pi-success-ring.--pi-warning.--pi-warning-border.--pi-warning-surface.--pi-danger.--pi-purple.--pi-purple-border.--pi-purple-surface.--pi-overlay.--pi-shadow-soft.--pi-shadow.--pi-shadow-strong.--pi-bg-overlay-soft.--pi-bg-overlay.--pi-success-bg-overlay.--pi-terminal-selection`.split(`.`),ng=/^[a-z][a-z0-9.-]*:[a-z][a-z0-9.-]*$/u;function rg(){try{let e=window.localStorage.getItem(eg);return e===null?void 0:lg(e)}catch{return}}function ig(e){try{window.localStorage.setItem(eg,JSON.stringify(e))}catch{}}function ag(e){let t=document.documentElement;t.dataset.piWebTheme=e.id,t.style.colorScheme=e.colorScheme;for(let n of tg){let r=e.tokens[n];typeof r==`string`&&r!==``?t.style.setProperty(n,r):t.style.removeProperty(n)}}function og(e){let t=sg(e.themes,e.fallbackThemeId??`themes:classic`),n=e.themes.find(t=>t.id===e.preference.themeId)??t;if(n===void 0)return{selectedTheme:void 0,activeTheme:void 0,selectedThemePair:void 0,fallbackTheme:t};let r=cg(e.themePairs,n.id);if(!e.preference.auto||r===void 0)return{selectedTheme:n,activeTheme:n,selectedThemePair:r,fallbackTheme:t};let i=e.prefersLight?r.light:r.dark;return{selectedTheme:n,activeTheme:e.themes.find(e=>e.id===i)??n,selectedThemePair:r,fallbackTheme:t}}function sg(e,t=Qh){return e.find(e=>e.id===t)??e[0]}function cg(e,t){return e.find(e=>e.light===t||e.dark===t)}function lg(e){let t=e.trim();if(t!==``)try{let e=JSON.parse(t);return ug(e)?e:void 0}catch{return}}function ug(e){if(!dg(e))return!1;let t=e.themeId,n=e.auto;return fg(t)&&typeof n==`boolean`}function dg(e){return typeof e==`object`&&!!e}function fg(e){return typeof e==`string`&&ng.test(e)}var pg=`workspace.delete`,mg=`pi.operation`,hg=`target.workspaceId`;function gg(e){return e?.removal!==void 0&&!e.isMain}function _g(e){return e.removal?.confirmation}function vg(e){return{...e===void 0?{}:{projectId:e},metadata:{[mg]:pg}}}function yg(e){let t={};for(let n of e){let e=Sg(n);if(e===void 0)continue;let r=t[e];(r===void 0||n.createdAt.localeCompare(r.createdAt)>=0)&&(t[e]=n)}return t}function bg(e){return Object.entries(e).filter(([,e])=>Cg(e)).map(([e])=>e)}function xg(e,t){if(t===void 0)return!1;let n=e.workspaceDeletionRuns[t.id];return n!==void 0&&Cg(n)}function Sg(e){return e.metadata[hg]}function Cg(e){return e.status===`queued`||e.status===`running`}function wg(){return[{id:`actions.show`,title:`Show actions`,description:`Open the command palette`,shortcut:`mod+k`,group:`General`,run:e=>{e.openActionPalette()}},{id:`prompt.focus`,title:`Focus prompt`,description:`Move keyboard focus to the message composer`,shortcut:`mod+g c`,group:`General`,run:e=>{e.focusPrompt()}},{id:`machine.add`,title:`Add machine`,description:`Register another PI WEB runtime reachable from this gateway`,group:`Machine`,run:e=>e.addMachine()},{id:`machine.refresh`,title:`Refresh selected machine`,description:`Check whether the selected PI WEB runtime is online`,group:`Machine`,run:e=>e.refreshSelectedMachine()},{id:`machine.open`,title:`Open selected machine PI WEB`,description:`Open the selected remote PI WEB directly in a new tab`,group:`Machine`,enabled:e=>e.state.selectedMachine?.kind===`remote`&&e.state.selectedMachine.baseUrl!==void 0,run:e=>e.openSelectedMachine()},{id:`machine.remove`,title:`Remove selected machine`,description:`Remove the selected remote machine from this gateway`,group:`Machine`,enabled:e=>e.state.selectedMachine?.kind===`remote`,run:e=>e.removeSelectedMachine()},{id:`project.add`,title:`Add project`,group:`Project`,run:e=>e.addProject()},{id:`auth.login`,title:`Configure provider authentication`,description:`Run /login without tying authentication to a session`,group:`General`,run:e=>e.configureAuth()},{id:`auth.logout`,title:`Remove provider authentication`,description:`Run /logout for stored pi credentials`,group:`General`,run:e=>e.logoutAuth()},{id:`theme.select`,title:`Select theme`,description:`Choose the PI WEB color theme`,group:`Preferences`,run:e=>{e.openThemePicker()}},{id:`settings.open`,title:`Open settings`,description:`Manage PI WEB configuration and keyboard shortcuts`,shortcut:`mod+,`,group:`Preferences`,run:e=>{e.piWebUnstable?.openSettings?.()}},{id:`app.reload-page`,title:`Full page reload`,description:`Reload the PI WEB browser page`,group:`General`,run:e=>{e.reloadPage()}},{id:`view.chat`,title:`Go to chat`,shortcut:`mod+1`,group:`Navigation`,run:e=>{e.focusPrompt()}},{id:`view.files`,title:`Go to files`,shortcut:`mod+2`,group:`Navigation`,enabled:Tg,run:e=>{e.selectMainView(`core:workspace.files`)}},{id:`view.terminal`,title:`Go to terminal`,shortcut:`mod+3`,group:`Navigation`,enabled:Tg,run:e=>{e.selectMainView(`core:workspace.terminal`)}},{id:`workspace.refresh-files`,title:`Refresh files`,shortcut:`mod+shift+f`,group:`Workspace`,enabled:Tg,run:e=>e.refreshFiles()},{id:`workspace.delete`,title:`Remove workspace`,description:`Run the owning provider's workspace removal operation`,group:`Workspace`,enabled:Eg,run:e=>e.deleteWorkspace()},{id:`session.start`,title:`Start session`,shortcut:`mod+enter`,group:`Session`,enabled:Tg,run:e=>e.startSession()},{id:`model.select`,title:`Select model`,description:`Choose the model for the selected session`,group:`Session`,enabled:Dg,run:e=>e.openModelPicker()},{id:`thinking.select`,title:`Select thinking level`,description:`Choose the thinking level for the selected session`,group:`Session`,enabled:Dg,run:e=>e.openThinkingLevelPicker()},{id:`session.archive`,title:`Archive session`,description:`Archive the selected session`,group:`Session`,enabled:Og,run:e=>e.archiveSession()},{id:`session.reload`,title:`Reload session from disk`,description:`Close and re-open the selected session from its session file. Use /reload in the prompt for Pi runtime resources.`,group:`Session`,enabled:Ag,run:e=>e.reloadSession()},{id:`session.delete`,title:`Delete new session`,description:`Delete the selected transient new session`,group:`Session`,enabled:kg,run:e=>e.deleteCachedNewSession()},{id:`session.stop`,title:`Stop active work`,shortcut:`mod+.`,group:`Session`,enabled:e=>e.state.selectedSession!==void 0&&bl(e.state.status,e.state.activity),run:e=>e.stopActiveWork()}]}function Tg(e){return e.state.selectedWorkspace!==void 0}function Eg(e){let t=e.state.selectedWorkspace;return gg(t)&&!xg(e.state,t)}function Dg(e){let t=e.state.selectedSession;return t!==void 0&&t.archived!==!0}function Og(e){return sp(e.state.selectedSession,e.state.status)}function kg(e){return cp(e.state.selectedSession,e.state.status)}function Ag(e){return sp(e.state.selectedSession,e.state.status)?!bl(e.state.status,e.state.activity):!1}function jg(e){return typeof e==`string`?Mg(e):h`<span class="tab-custom-icon" aria-hidden="true">${e}</span>`}function Mg(e){switch(e){case`navigation`:return je`
|
|
@@ -43,7 +43,7 @@ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./CodeViewer-DyfKGKrr.
|
|
|
43
43
|
<path d="m7 10 3 3-3 3"></path>
|
|
44
44
|
<path d="M12 16h5"></path>
|
|
45
45
|
</svg>
|
|
46
|
-
`}}function Ng(e){return e===void 0||e===``?`split list-only`:`split`}function Pg(e){return Number.isFinite(e)?e<1e3?Math.round(e).toString():e<1e4?`${(e/1e3).toFixed(1)}k`:e<1e6?`${String(Math.round(e/1e3))}k`:e<1e7?`${(e/1e6).toFixed(1)}M`:`${String(Math.round(e/1e6))}M`:`0`}function Fg(e){if(!Number.isFinite(e)||e<0)return`0 B`;if(e<1024)return`${String(e)} B`;let t=e/1024;if(t<1024)return`${Ig(t)} KB`;let n=t/1024;return n<1024?`${Ig(n)} MB`:`${Ig(n/1024)} GB`}function Ig(e){return e>=10?String(Math.round(e)):e.toFixed(1)}function Lg(e){return!Number.isFinite(e)||e===0?`$0`:e<.01?`$${e.toFixed(4)}`:`$${e.toFixed(2)}`}var Rg=new Set,zg=0;function Bg(e){let t=e.element.ownerDocument,n=Qg(t),r=n instanceof HTMLElement?Kg(t,n):void 0,i={layer:e,order:++zg,restorationPath:n instanceof HTMLElement?[n,...r?.restorationPath??[]]:[]},a=!0;return Rg.add(i),Ug(t),{get isTop(){return a&&Wg(t)===i},focus:()=>a&&Yg(i),unregister:()=>{a&&(a=!1,Rg.delete(i),Ug(t),Hg(i))}}}function Vg(e){return e!==void 0&&Wg(e)!==void 0}function Hg(e){let{element:t}=e.layer,n=t.ownerDocument,r=Qg(n);if(!(r===null||r===n.body||r===n.documentElement)&&!t_(t,r))return;let i=Wg(n);if(i!==void 0){if(Xg(e.restorationPath.filter(e=>t_(i.layer.element,e))))return;Yg(i);return}Xg(e.restorationPath)}function Ug(e){let t=Wg(e);for(let n of[...Rg])n.layer.element.ownerDocument===e&&n.layer.onTopChange?.(n===t)}function Wg(e){let t;for(let n of Rg)Gg(e,n)&&(t===void 0||qg(n,t)>0)&&(t=n);return t}function Gg(e,t){let{element:n,nativeTopLayer:r}=t.layer;return!n.isConnected||n.ownerDocument!==e?!1:r===!0||!$g(n)}function Kg(e,t){let n;for(let r of Rg)!Gg(e,r)||!t_(r.layer.element,t)||(n===void 0||qg(r,n)>0)&&(n=r);return n}function qg(e,t){let n=Number(e.layer.nativeTopLayer===!0)-Number(t.layer.nativeTopLayer===!0);if(n!==0)return n;let r=e.layer.paintElement??e.layer.element,i=t.layer.paintElement??t.layer.element,a=Jg(r)-Jg(i);if(a!==0)return a;if(r!==i){let e=r.compareDocumentPosition(i);if((e&Node.DOCUMENT_POSITION_DISCONNECTED)===0){if((e&Node.DOCUMENT_POSITION_FOLLOWING)!==0)return-1;if((e&Node.DOCUMENT_POSITION_PRECEDING)!==0)return 1}}return e.order-t.order}function Jg(e){let t=e.ownerDocument.defaultView?.getComputedStyle(e).zIndex??``,n=Number.parseFloat(t);return Number.isFinite(n)?n:0}function Yg(e){if(Wg(e.layer.element.ownerDocument)!==e)return!1;e.layer.focus();let t=Qg(e.layer.element.ownerDocument);return t!==null&&t_(e.layer.element,t)}function Xg(e){for(let t of e)if(Zg(t))return!0;return!1}function Zg(e){if(!e.isConnected||e.matches(`:disabled`)||$g(e))return!1;e.focus();let t=Qg(e.ownerDocument);return t===e||t!==null&&t_(e,t)}function Qg(e){let t=e.activeElement;for(;t instanceof HTMLElement;){let e=t.shadowRoot?.activeElement??null;if(e===null)return t;t=e}return t??null}function $g(e){let t=e.ownerDocument.defaultView,n=t?.getComputedStyle(e);if(n?.visibility===`hidden`||n?.visibility===`collapse`)return!0;let r=e;for(;r!==null;){if(r.hasAttribute(`hidden`)||r.hasAttribute(`inert`))return!0;let e=t?.getComputedStyle(r);if(e?.display===`none`||e?.getPropertyValue(`content-visibility`)===`hidden`)return!0;r=e_(r)}return!1}function e_(e){let t=e.assignedSlot;if(t instanceof HTMLSlotElement)return t;let n=e.parentElement;if(n instanceof Element)return n;let r=e.getRootNode();return r instanceof ShadowRoot&&r.host instanceof Element?r.host:null}function t_(e,t){let n=t;for(;;){if(n===e)return!0;let t=n.parentNode;if(t!=null&&t!==n){n=t;continue}let r=n instanceof ShadowRoot?n:n.getRootNode();if(!(r instanceof ShadowRoot))return!1;n=r.host}}var n_=o`
|
|
46
|
+
`}}function Ng(e){return e===void 0||e===``?`split list-only`:`split`}function Pg(e){return Number.isFinite(e)?e<1e3?Math.round(e).toString():e<1e4?`${(e/1e3).toFixed(1)}k`:e<1e6?`${String(Math.round(e/1e3))}k`:e<1e7?`${(e/1e6).toFixed(1)}M`:`${String(Math.round(e/1e6))}M`:`0`}function Fg(e){if(!Number.isFinite(e)||e<0)return`0 B`;if(e<1024)return`${String(e)} B`;let t=e/1024;if(t<1024)return`${Ig(t)} KB`;let n=t/1024;return n<1024?`${Ig(n)} MB`:`${Ig(n/1024)} GB`}function Ig(e){return e>=10?String(Math.round(e)):e.toFixed(1)}function Lg(e){return!Number.isFinite(e)||e===0?`$0`:e<.01?`$${e.toFixed(4)}`:`$${e.toFixed(2)}`}var Rg=new Set,zg=0;function Bg(e){let t=e.element.ownerDocument,n=Qg(t),r=n instanceof HTMLElement?Kg(t,n):void 0,i={layer:e,order:++zg,restorationPath:n instanceof HTMLElement?[n,...r?.restorationPath??[]]:[]},a=!0;return Rg.add(i),Ug(t),{get isTop(){return a&&Wg(t)===i},focus:()=>a&&Yg(i),unregister:()=>{a&&(a=!1,Rg.delete(i),Ug(t),Hg(i))}}}function Vg(e){return e!==void 0&&Wg(e)!==void 0}function Hg(e){let{element:t}=e.layer,n=t.ownerDocument,r=Qg(n);if(!(r===null||r===n.body||r===n.documentElement)&&!t_(t,r))return;let i=Wg(n);if(i!==void 0){if(Xg(e.restorationPath.filter(e=>t_(i.layer.element,e))))return;Yg(i);return}Xg(e.restorationPath)}function Ug(e){let t=Wg(e);for(let n of[...Rg])n.layer.element.ownerDocument===e&&n.layer.onTopChange?.(n===t)}function Wg(e){let t;for(let n of Rg)Gg(e,n)&&(t===void 0||qg(n,t)>0)&&(t=n);return t}function Gg(e,t){let{element:n,nativeTopLayer:r}=t.layer;return!n.isConnected||n.ownerDocument!==e?!1:r===!0||!$g(n)}function Kg(e,t){let n;for(let r of Rg)!Gg(e,r)||!t_(r.layer.element,t)||(n===void 0||qg(r,n)>0)&&(n=r);return n}function qg(e,t){let n=Number(e.layer.nativeTopLayer===!0)-Number(t.layer.nativeTopLayer===!0);if(n!==0)return n;let r=e.layer.paintElement??e.layer.element,i=t.layer.paintElement??t.layer.element,a=Jg(r)-Jg(i);if(a!==0)return a;if(r!==i){let e=r.compareDocumentPosition(i);if((e&Node.DOCUMENT_POSITION_DISCONNECTED)===0){if((e&Node.DOCUMENT_POSITION_FOLLOWING)!==0)return-1;if((e&Node.DOCUMENT_POSITION_PRECEDING)!==0)return 1}}return e.order-t.order}function Jg(e){let t=e.ownerDocument.defaultView?.getComputedStyle(e).zIndex??``,n=Number.parseFloat(t);return Number.isFinite(n)?n:0}function Yg(e){if(Wg(e.layer.element.ownerDocument)!==e)return!1;e.layer.focus();let t=Qg(e.layer.element.ownerDocument);return t!==null&&t_(e.layer.element,t)}function Xg(e){for(let t of e)if(Zg(t))return!0;return!1}function Zg(e){if(!e.isConnected||e.matches(`:disabled`)||$g(e))return!1;e.focus();let t=Qg(e.ownerDocument);return t===e||t!==null&&t_(e,t)}function Qg(e){let t=e.activeElement;for(;t instanceof HTMLElement;){let e=t.shadowRoot?.activeElement??null;if(e===null)return t;t=e}return t??null}function $g(e){let t=e.ownerDocument.defaultView,n=t?.getComputedStyle(e);if(n?.visibility===`hidden`||n?.visibility===`collapse`)return!0;let r=e;for(;r!==null;){if(r.hasAttribute(`hidden`)||r.hasAttribute(`inert`))return!0;let e=t?.getComputedStyle(r);if(e?.display===`none`||e?.getPropertyValue(`content-visibility`)===`hidden`)return!0;r=e_(r)}return!1}function e_(e){let t=e.assignedSlot;if(t instanceof HTMLSlotElement)return t;let n=e.parentElement;if(n instanceof Element)return n;let r=e.getRootNode();return r instanceof ShadowRoot&&r.host instanceof Element?r.host:null}function t_(e,t){let n=t;for(;;){if(n===e)return!0;let t=n.parentNode;if(t!=null&&t!==n){n=t;continue}let r=n instanceof ShadowRoot?n:n.getRootNode();if(!(r instanceof ShadowRoot))return!1;n=r.host}}var n_={Pending:`pending`,Running:`running`,Success:`success`,Error:`error`};function r_(e,t){return e===n_.Pending&&!t?`interrupted`:e}var i_=o`
|
|
47
47
|
/* Motion is decoration here: scroll shadows, hover fades, pulsing dots. A
|
|
48
48
|
reader who asked the system for less motion gets none of it. */
|
|
49
49
|
@media (prefers-reduced-motion: reduce) {
|
|
@@ -112,7 +112,7 @@ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./CodeViewer-DyfKGKrr.
|
|
|
112
112
|
.viewer { min-height: 0; overflow: auto; display: flex; flex-direction: column; }
|
|
113
113
|
pre { margin: 0; padding: var(--pi-space-5); overflow: auto; font: 12px ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; line-height: 1.45; white-space: pre-wrap; overflow-wrap: anywhere; }
|
|
114
114
|
p { margin: var(--pi-space-5); }
|
|
115
|
-
`,
|
|
115
|
+
`,a_=o`
|
|
116
116
|
/* Mobile browsers paint a rectangular highlight on tap, which looks pasted-on
|
|
117
117
|
over a round or rounded control. Suppressed in favour of the app's own
|
|
118
118
|
pressed and focus styling; :focus-visible still shows keyboard focus, so
|
|
@@ -304,7 +304,7 @@ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./CodeViewer-DyfKGKrr.
|
|
|
304
304
|
.workspace-detail-row .workspace-label { overflow: visible; white-space: normal; flex-wrap: wrap; }
|
|
305
305
|
.workspace-detail-row .workspace-label-base, .workspace-detail-row .workspace-label-item, .workspace-detail-row .workspace-label-render { overflow: visible; text-overflow: clip; overflow-wrap: anywhere; white-space: normal; }
|
|
306
306
|
@keyframes pulse { 0%, 100% { transform: scale(.75); opacity: .55; } 50% { transform: scale(1.2); opacity: 1; } }
|
|
307
|
-
`,
|
|
307
|
+
`,o_=o`
|
|
308
308
|
:host { display: block; }
|
|
309
309
|
.formatted { white-space: normal; overflow-wrap: anywhere; line-height: 1.45; text-align: start; unicode-bidi: plaintext; }
|
|
310
310
|
p, ul, ol, pre, blockquote, .table-scroll, .code-block-wrapper { margin: 0 0 var(--pi-space-5); }
|
|
@@ -332,14 +332,14 @@ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./CodeViewer-DyfKGKrr.
|
|
|
332
332
|
table { border-collapse: collapse; width: max-content; min-width: 100%; max-width: none; }
|
|
333
333
|
th, td { border: 1px solid var(--pi-border); padding: var(--pi-space-2) var(--pi-space-4); max-width: 48ch; overflow-wrap: anywhere; }
|
|
334
334
|
th { background: var(--pi-surface); }
|
|
335
|
-
`,
|
|
336
|
-
]`).replace(`lheading`,
|
|
337
|
-
`),n=t.length-1;for(;n>=0&&
|
|
338
|
-
`)}function
|
|
335
|
+
`,s_=e=>e??g,c_={ATTRIBUTE:1,CHILD:2,PROPERTY:3,BOOLEAN_ATTRIBUTE:4,EVENT:5,ELEMENT:6},l_=e=>(...t)=>({_$litDirective$:e,values:t}),u_=class{constructor(e){}get _$AU(){return this._$AM._$AU}_$AT(e,t,n){this._$Ct=e,this._$AM=t,this._$Ci=n}_$AS(e,t){return this.update(e,t)}update(e,t){return this.render(...t)}},d_=class extends u_{constructor(e){if(super(e),this.it=g,e.type!==c_.CHILD)throw Error(this.constructor.directiveName+`() can only be used in child bindings`)}render(e){if(e===g||e==null)return this._t=void 0,this.it=e;if(e===Me)return e;if(typeof e!=`string`)throw Error(this.constructor.directiveName+`() called with a non-string value`);if(e===this.it)return this._t;this.it=e;let t=[e];return t.raw=t,this._t={_$litType$:this.constructor.resultType,strings:t,values:[]}}};d_.directiveName=`unsafeHTML`,d_.resultType=1;var f_=l_(d_);function p_(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var m_=p_();function h_(e){m_=e}var g_={exec:()=>null};function __(e){let t=[];return n=>{let r=Math.max(0,Math.min(3,n-1)),i=t[r];return i||(i=e(r),t[r]=i),i}}function z(e,t=``){let n=typeof e==`string`?e:e.source,r={replace:(e,t)=>{let i=typeof t==`string`?t:t.source;return i=i.replace(y_.caret,`$1`),n=n.replace(e,i),r},getRegex:()=>new RegExp(n,t)};return r}var v_=((e=``)=>{try{return!!RegExp(`(?<=1)(?<!1)`+e)}catch{return!1}})(),y_={codeRemoveIndent:/^(?: {1,4}| {0,3}\t)/gm,outputLinkReplace:/\\([\[\]])/g,indentCodeCompensation:/^(\s+)(?:```)/,beginningSpace:/^\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\n/g,tabCharGlobal:/\t/g,multipleSpaceGlobal:/\s+/g,blankLine:/^[ \t]*$/,doubleBlankLine:/\n[ \t]*\n[ \t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] +\S/,listReplaceTask:/^\[[ xX]\] +/,listTaskCheckbox:/\[[ xX]\]/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\/a>/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^</,endAngleBracket:/>$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:e=>RegExp(`^( {0,3}${e})((?:[ ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:__(e=>RegExp(`^ {0,${e}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`)),hrRegex:__(e=>RegExp(`^ {0,${e}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`)),fencesBeginRegex:__(e=>RegExp(`^ {0,${e}}(?:\`\`\`|~~~)`)),headingBeginRegex:__(e=>RegExp(`^ {0,${e}}#`)),htmlBeginRegex:__(e=>RegExp(`^ {0,${e}}<(?:[a-z].*>|!--)`,`i`)),blockquoteBeginRegex:__(e=>RegExp(`^ {0,${e}}>`))},b_=/^(?:[ \t]*(?:\n|$))+/,x_=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,S_=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,C_=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,w_=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,T_=/ {0,3}(?:[*+-]|\d{1,9}[.)])/,E_=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,D_=z(E_).replace(/bull/g,T_).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,``).getRegex(),O_=z(E_).replace(/bull/g,T_).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),k_=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,A_=/^[^\n]+/,j_=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/,M_=z(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace(`label`,j_).replace(`title`,/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),N_=z(/^(bull)([ \t][^\n]*?)?(?:\n|$)/).replace(/bull/g,T_).getRegex(),P_=`address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul`,F_=/<!--(?:-?>|[\s\S]*?(?:-->|$))/,I_=z(`^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>[^\\n]*\\n+|$)|<![A-Z][\\s\\S]*?(?:>[^\\n]*\\n+|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>[^\\n]*\\n+|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))`,`i`).replace(`comment`,F_).replace(`tag`,P_).replace(`attribute`,/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),L_=e=>z(k_).replace(`hr`,C_).replace(`heading`,` {0,3}#{1,6}(?:\\s|$)`).replace(`|lheading`,``).replace(`|table`,``).replace(`blockquote`,` {0,3}>`).replace(`fences`," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace(`list`,e).replace(`html`,`</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)`).replace(`tag`,P_).getRegex(),R_=L_(/ {0,3}(?:[*+-]|1[.)])[ \t]+[^ \t\n]/),z_=L_(/ {0,3}(?:[*+-]|\d{1,9}[.)])[ \t]+[^ \t\n]/),B_={blockquote:z(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace(`paragraph`,z_).getRegex(),code:x_,def:M_,fences:S_,heading:w_,hr:C_,html:I_,lheading:D_,list:N_,newline:b_,paragraph:R_,table:g_,text:A_},V_=z(`^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)`).replace(`hr`,C_).replace(`heading`,` {0,3}#{1,6}(?:\\s|$)`).replace(`blockquote`,` {0,3}>`).replace(`code`,`(?: {4}| {0,3} )[^\\n]`).replace(`fences`," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace(`list`,` {0,3}(?:[*+-]|1[.)])[ \\t]`).replace(`html`,`</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)`).replace(`tag`,P_).getRegex(),H_={...B_,lheading:O_,table:V_,paragraph:z(k_).replace(`hr`,C_).replace(`heading`,` {0,3}#{1,6}(?:\\s|$)`).replace(`|lheading`,``).replace(`table`,V_).replace(`blockquote`,` {0,3}>`).replace(`fences`," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace(`list`,` {0,3}(?:[*+-]|1[.)])[ \\t]+[^ \\t\\n]`).replace(`html`,`</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)`).replace(`tag`,P_).getRegex()},U_={...B_,html:z(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:"[^"]*"|'[^']*'|\\s[^'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace(`comment`,F_).replace(/tag/g,`(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b`).getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:g_,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:z(k_).replace(`hr`,C_).replace(`heading`,` *#{1,6} *[^
|
|
336
|
+
]`).replace(`lheading`,D_).replace(`|table`,``).replace(`blockquote`,` {0,3}>`).replace(`|fences`,``).replace(`|list`,``).replace(`|html`,``).replace(`|tag`,``).getRegex()},W_=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,G_=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,K_=/^( {2,}|\\)\n(?!\s*$)/,q_=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,J_=/[\p{P}\p{S}]/u,Y_=/[\s\p{P}\p{S}]/u,X_=/[^\s\p{P}\p{S}]/u,Z_=z(/^((?![*_])punctSpace)/,`u`).replace(/punctSpace/g,Y_).getRegex(),Q_=/(?!~)[\p{P}\p{S}]/u,$_=/(?!~)[\s\p{P}\p{S}]/u,ev=/(?:[^\s\p{P}\p{S}]|~)/u,tv=z(/link|precode-code|html/,`g`).replace(`link`,/\[(?:[^\[\]`]|(?<a>`+)[^`]+\k<a>(?!`))*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)/).replace(`precode-`,v_?"(?<!`)()":"(^^|[^`])").replace(`code`,/(?<b>`+)[^`]+\k<b>(?!`)/).replace(`html`,/<(?! )[^<>]*?>/).getRegex(),nv=/^(?:\*+(?:((?!\*)punct)|([^\s*]))?)|^_+(?:((?!_)punct)|([^\s_]))?/,rv=z(nv,`u`).replace(/punct/g,J_).getRegex(),iv=z(nv,`u`).replace(/punct/g,Q_).getRegex(),av=`^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)`,ov=z(av,`gu`).replace(/notPunctSpace/g,X_).replace(/punctSpace/g,Y_).replace(/punct/g,J_).getRegex(),sv=z(av,`gu`).replace(/notPunctSpace/g,ev).replace(/punctSpace/g,$_).replace(/punct/g,Q_).getRegex(),cv=z(`^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)`,`gu`).replace(/notPunctSpace/g,X_).replace(/punctSpace/g,Y_).replace(/punct/g,J_).getRegex(),lv=z(/^~~?(?:((?!~)punct)|[^\s~])/,`u`).replace(/punct/g,J_).getRegex(),uv=z(`^[^~]+(?=[^~])|(?!~)punct(~~?)(?=[\\s]|$)|notPunctSpace(~~?)(?!~)(?=punctSpace|$)|(?!~)punctSpace(~~?)(?=notPunctSpace)|[\\s](~~?)(?!~)(?=punct)|(?!~)punct(~~?)(?!~)(?=punct)|notPunctSpace(~~?)(?=notPunctSpace)`,`gu`).replace(/notPunctSpace/g,X_).replace(/punctSpace/g,Y_).replace(/punct/g,J_).getRegex(),dv=z(/\\(punct)/,`gu`).replace(/punct/g,J_).getRegex(),fv=z(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace(`scheme`,/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace(`email`,/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),pv=z(F_).replace(`(?:-->|$)`,`-->`).getRegex(),mv=z(`^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>`).replace(`comment`,pv).replace(`attribute`,/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),hv=/(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\])|[^\[\]\\`])*?/,gv=z(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]+(?:\n[ \t]*)?|\n[ \t]*)(title))?\s*\)/).replace(`label`,hv).replace(`href`,/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]+|(?=\))/).replace(`title`,/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),_v=z(/^!?\[(label)\]\[(ref)\]/).replace(`label`,hv).replace(`ref`,j_).getRegex(),vv=z(/^!?\[(ref)\](?:\[\])?/).replace(`ref`,j_).getRegex(),yv=z(`reflink|nolink(?!\\()`,`g`).replace(`reflink`,_v).replace(`nolink`,vv).getRegex(),bv=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,xv={_backpedal:g_,anyPunctuation:dv,autolink:fv,blockSkip:tv,br:K_,code:G_,del:g_,delLDelim:g_,delRDelim:g_,emStrongLDelim:rv,emStrongRDelimAst:ov,emStrongRDelimUnd:cv,escape:W_,link:gv,nolink:vv,punctuation:Z_,reflink:_v,reflinkSearch:yv,tag:mv,text:q_,url:g_},Sv={...xv,link:z(/^!?\[(label)\]\((.*?)\)/).replace(`label`,hv).getRegex(),reflink:z(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace(`label`,hv).getRegex()},Cv={...xv,emStrongRDelimAst:sv,emStrongLDelim:iv,delLDelim:lv,delRDelim:uv,url:z(/^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace(`protocol`,bv).replace(`email`,/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/,text:z(/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|protocol:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/).replace(`protocol`,bv).getRegex()},wv={...Cv,br:z(K_).replace(`{2,}`,`*`).getRegex(),text:z(Cv.text).replace(`\\b_`,`\\b_| {2,}\\n`).replace(/\{2,\}/g,`*`).getRegex()},Tv={normal:B_,gfm:H_,pedantic:U_},Ev={normal:xv,gfm:Cv,breaks:wv,pedantic:Sv},Dv={"&":`&`,"<":`<`,">":`>`,'"':`"`,"'":`'`},Ov=e=>Dv[e];function kv(e,t){if(t){if(y_.escapeTest.test(e))return e.replace(y_.escapeReplace,Ov)}else if(y_.escapeTestNoEncode.test(e))return e.replace(y_.escapeReplaceNoEncode,Ov);return e}function Av(e){try{e=encodeURI(e).replace(y_.percentDecode,`%`)}catch{return null}return e}function jv(e,t){let n=e.replace(y_.findPipe,(e,t,n)=>{let r=!1,i=t;for(;--i>=0&&n[i]===`\\`;)r=!r;return r?`|`:` |`}).split(y_.splitPipe),r=0;if(n[0].trim()||n.shift(),n.length>0&&!n.at(-1)?.trim()&&n.pop(),t)if(n.length>t)n.splice(t);else for(;n.length<t;)n.push(``);for(;r<n.length;r++)n[r]=n[r].trim().replace(y_.slashPipe,`|`);return n}function Mv(e,t,n){let r=e.length;if(r===0)return``;let i=0;for(;i<r;){let a=e.charAt(r-i-1);if(a===t&&!n)i++;else if(a!==t&&n)i++;else break}return e.slice(0,r-i)}function Nv(e){let t=e.split(`
|
|
337
|
+
`),n=t.length-1;for(;n>=0&&y_.blankLine.test(t[n]);)n--;return t.length-n<=2?e:t.slice(0,n+1).join(`
|
|
338
|
+
`)}function Pv(e,t){if(e.indexOf(t[1])===-1)return-1;let n=0;for(let r=0;r<e.length;r++)if(e[r]===`\\`)r++;else if(e[r]===t[0])n++;else if(e[r]===t[1]&&(n--,n<0))return r;return n>0?-2:-1}function Fv(e,t=0){let n=t,r=``;for(let t of e)if(t===` `){let e=4-n%4;r+=` `.repeat(e),n+=e}else r+=t,n++;return r}function Iv(e,t,n,r,i){let a=t.href,o=t.title||null,s=e[1].replace(i.other.outputLinkReplace,`$1`);r.state.inLink=!0;let c={type:e[0].charAt(0)===`!`?`image`:`link`,raw:n,href:a,title:o,text:s,tokens:r.inlineTokens(s)};return r.state.inLink=!1,c}function Lv(e,t,n){let r=e.match(n.other.indentCodeCompensation);if(r===null)return t;let i=r[1];return t.split(`
|
|
339
339
|
`).map(e=>{let t=e.match(n.other.beginningSpace);if(t===null)return e;let[r]=t;return r.length>=i.length?e.slice(i.length):e}).join(`
|
|
340
|
-
`)}var
|
|
341
|
-
`),depth:t[1].length,text:e,tokens:this.lexer.inline(e)}}}hr(e){let t=this.rules.block.hr.exec(e);if(t)return{type:`hr`,raw:
|
|
342
|
-
`)}}blockquote(e){let t=this.rules.block.blockquote.exec(e);if(t){let e=
|
|
340
|
+
`)}var Rv=class{options;rules;lexer;constructor(e){this.options=e||m_}space(e){let t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:`space`,raw:t[0]}}code(e){let t=this.rules.block.code.exec(e);if(t){let e=this.options.pedantic?t[0]:Nv(t[0]);return{type:`code`,raw:e,codeBlockStyle:`indented`,text:e.replace(this.rules.other.codeRemoveIndent,``)}}}fences(e){let t=this.rules.block.fences.exec(e);if(t){let e=t[0],n=Lv(e,t[3]||``,this.rules);return{type:`code`,raw:e,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,`$1`):t[2],text:n}}}heading(e){let t=this.rules.block.heading.exec(e);if(t){let e=t[2].trim();if(this.rules.other.endingHash.test(e)){let t=Mv(e,`#`);(this.options.pedantic||!t||this.rules.other.endingSpaceChar.test(t))&&(e=t.trim())}return{type:`heading`,raw:Mv(t[0],`
|
|
341
|
+
`),depth:t[1].length,text:e,tokens:this.lexer.inline(e)}}}hr(e){let t=this.rules.block.hr.exec(e);if(t)return{type:`hr`,raw:Mv(t[0],`
|
|
342
|
+
`)}}blockquote(e){let t=this.rules.block.blockquote.exec(e);if(t){let e=Mv(t[0],`
|
|
343
343
|
`).split(`
|
|
344
344
|
`),n=``,r=``,i=[];for(;e.length>0;){let t=!1,a=[],o;for(o=0;o<e.length;o++)if(this.rules.other.blockquoteStart.test(e[o]))a.push(e[o]),t=!0;else if(!t)a.push(e[o]);else break;e=e.slice(o);let s=a.join(`
|
|
345
345
|
`),c=s.replace(this.rules.other.blockquoteSetextReplace,`
|
|
@@ -350,20 +350,20 @@ ${c}`:c;let l=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTo
|
|
|
350
350
|
`),o=this.blockquote(a);i[i.length-1]=o,n=n.substring(0,n.length-t.raw.length)+o.raw,r=r.substring(0,r.length-t.text.length)+o.text;break}else if(u?.type===`list`){let t=u,a=t.raw+`
|
|
351
351
|
`+e.join(`
|
|
352
352
|
`),o=this.list(a);i[i.length-1]=o,n=n.substring(0,n.length-u.raw.length)+o.raw,r=r.substring(0,r.length-t.raw.length)+o.raw,e=a.substring(i.at(-1).raw.length).split(`
|
|
353
|
-
`);continue}}return{type:`blockquote`,raw:n,tokens:i,text:r}}}list(e){let t=this.rules.block.list.exec(e);if(t){let n=t[1].trim(),r=n.length>1,i={type:`list`,raw:``,ordered:r,start:r?+n.slice(0,-1):``,loose:!1,items:[]};n=r?`\\d{1,9}\\${n.slice(-1)}`:`\\${n}`,this.options.pedantic&&(n=r?n:`[*+-]`);let a=this.rules.other.listItemRegex(n),o=!1;for(;e;){let n=!1,r=``,s=``;if(!(t=a.exec(e))||this.rules.block.hr.test(e))break;r=t[0],e=e.substring(r.length);let c=
|
|
353
|
+
`);continue}}return{type:`blockquote`,raw:n,tokens:i,text:r}}}list(e){let t=this.rules.block.list.exec(e);if(t){let n=t[1].trim(),r=n.length>1,i={type:`list`,raw:``,ordered:r,start:r?+n.slice(0,-1):``,loose:!1,items:[]};n=r?`\\d{1,9}\\${n.slice(-1)}`:`\\${n}`,this.options.pedantic&&(n=r?n:`[*+-]`);let a=this.rules.other.listItemRegex(n),o=!1;for(;e;){let n=!1,r=``,s=``;if(!(t=a.exec(e))||this.rules.block.hr.test(e))break;r=t[0],e=e.substring(r.length);let c=Fv(t[2].split(`
|
|
354
354
|
`,1)[0],t[1].length),l=e.split(`
|
|
355
355
|
`,1)[0],u=!c.trim(),d=0;if(this.options.pedantic?(d=2,s=c.trimStart()):u?d=t[1].length+1:(d=c.search(this.rules.other.nonSpaceChar),d=d>4?1:d,s=c.slice(d),d+=t[1].length),u&&this.rules.other.blankLine.test(l)&&(r+=l+`
|
|
356
356
|
`,e=e.substring(l.length+1),n=!0),!n){let t=this.rules.other.nextBulletRegex(d),n=this.rules.other.hrRegex(d),i=this.rules.other.fencesBeginRegex(d),a=this.rules.other.headingBeginRegex(d),o=this.rules.other.htmlBeginRegex(d),f=this.rules.other.blockquoteBeginRegex(d);for(;e;){let p=e.split(`
|
|
357
357
|
`,1)[0],m;if(l=p,this.options.pedantic?(l=l.replace(this.rules.other.listReplaceNesting,` `),m=l):m=l.replace(this.rules.other.tabCharGlobal,` `),i.test(l)||a.test(l)||o.test(l)||f.test(l)||t.test(l)||n.test(l))break;if(m.search(this.rules.other.nonSpaceChar)>=d||!l.trim())s+=`
|
|
358
358
|
`+m.slice(d);else{if(u||c.replace(this.rules.other.tabCharGlobal,` `).search(this.rules.other.nonSpaceChar)>=4||i.test(c)||a.test(c)||n.test(c))break;s+=`
|
|
359
359
|
`+l}u=!l.trim(),r+=p+`
|
|
360
|
-
`,e=e.substring(p.length+1),c=m.slice(d)}}i.loose||(o?i.loose=!0:this.rules.other.doubleBlankLine.test(r)&&(o=!0)),i.items.push({type:`list_item`,raw:r,task:!!this.options.gfm&&this.rules.other.listIsTask.test(s),loose:!1,text:s,tokens:[]}),i.raw+=r}let s=i.items.at(-1);if(s)s.raw=s.raw.trimEnd(),s.text=s.text.trimEnd();else return;i.raw=i.raw.trimEnd();for(let e of i.items){this.lexer.state.top=!1,e.tokens=this.lexer.blockTokens(e.text,[]);let t=e.tokens[0];if(e.task&&(t?.type===`text`||t?.type===`paragraph`)){e.text=e.text.replace(this.rules.other.listReplaceTask,``),t.raw=t.raw.replace(this.rules.other.listReplaceTask,``),t.text=t.text.replace(this.rules.other.listReplaceTask,``);for(let e=this.lexer.inlineQueue.length-1;e>=0;e--)if(this.rules.other.listIsTask.test(this.lexer.inlineQueue[e].src)){this.lexer.inlineQueue[e].src=this.lexer.inlineQueue[e].src.replace(this.rules.other.listReplaceTask,``);break}let n=this.rules.other.listTaskCheckbox.exec(e.raw);if(n){let t={type:`checkbox`,raw:n[0]+` `,checked:n[0]!==`[ ]`};e.checked=t.checked,i.loose?e.tokens[0]&&[`paragraph`,`text`].includes(e.tokens[0].type)&&`tokens`in e.tokens[0]&&e.tokens[0].tokens?(e.tokens[0].raw=t.raw+e.tokens[0].raw,e.tokens[0].text=t.raw+e.tokens[0].text,e.tokens[0].tokens.unshift(t)):e.tokens.unshift({type:`paragraph`,raw:t.raw,text:t.raw,tokens:[t]}):e.tokens.unshift(t)}}else e.task&&=!1;if(!i.loose){let t=e.tokens.filter(e=>e.type===`space`);i.loose=t.length>0&&t.some(e=>this.rules.other.anyLine.test(e.raw))}}if(i.loose)for(let e of i.items){e.loose=!0;for(let t of e.tokens)t.type===`text`&&(t.type=`paragraph`)}return i}}html(e){let t=this.rules.block.html.exec(e);if(t){let e=
|
|
361
|
-
`),href:n,title:r}}}table(e){let t=this.rules.block.table.exec(e);if(!t||!this.rules.other.tableDelimiter.test(t[2]))return;let n=
|
|
362
|
-
`):[],a={type:`table`,raw:
|
|
363
|
-
`),header:[],align:[],rows:[]};if(n.length===r.length){for(let e of r)this.rules.other.tableAlignRight.test(e)?a.align.push(`right`):this.rules.other.tableAlignCenter.test(e)?a.align.push(`center`):this.rules.other.tableAlignLeft.test(e)?a.align.push(`left`):a.align.push(null);for(let e=0;e<n.length;e++)a.header.push({text:n[e],tokens:this.lexer.inline(n[e]),header:!0,align:a.align[e]});for(let e of i)a.rows.push(
|
|
360
|
+
`,e=e.substring(p.length+1),c=m.slice(d)}}i.loose||(o?i.loose=!0:this.rules.other.doubleBlankLine.test(r)&&(o=!0)),i.items.push({type:`list_item`,raw:r,task:!!this.options.gfm&&this.rules.other.listIsTask.test(s),loose:!1,text:s,tokens:[]}),i.raw+=r}let s=i.items.at(-1);if(s)s.raw=s.raw.trimEnd(),s.text=s.text.trimEnd();else return;i.raw=i.raw.trimEnd();for(let e of i.items){this.lexer.state.top=!1,e.tokens=this.lexer.blockTokens(e.text,[]);let t=e.tokens[0];if(e.task&&(t?.type===`text`||t?.type===`paragraph`)){e.text=e.text.replace(this.rules.other.listReplaceTask,``),t.raw=t.raw.replace(this.rules.other.listReplaceTask,``),t.text=t.text.replace(this.rules.other.listReplaceTask,``);for(let e=this.lexer.inlineQueue.length-1;e>=0;e--)if(this.rules.other.listIsTask.test(this.lexer.inlineQueue[e].src)){this.lexer.inlineQueue[e].src=this.lexer.inlineQueue[e].src.replace(this.rules.other.listReplaceTask,``);break}let n=this.rules.other.listTaskCheckbox.exec(e.raw);if(n){let t={type:`checkbox`,raw:n[0]+` `,checked:n[0]!==`[ ]`};e.checked=t.checked,i.loose?e.tokens[0]&&[`paragraph`,`text`].includes(e.tokens[0].type)&&`tokens`in e.tokens[0]&&e.tokens[0].tokens?(e.tokens[0].raw=t.raw+e.tokens[0].raw,e.tokens[0].text=t.raw+e.tokens[0].text,e.tokens[0].tokens.unshift(t)):e.tokens.unshift({type:`paragraph`,raw:t.raw,text:t.raw,tokens:[t]}):e.tokens.unshift(t)}}else e.task&&=!1;if(!i.loose){let t=e.tokens.filter(e=>e.type===`space`);i.loose=t.length>0&&t.some(e=>this.rules.other.anyLine.test(e.raw))}}if(i.loose)for(let e of i.items){e.loose=!0;for(let t of e.tokens)t.type===`text`&&(t.type=`paragraph`)}return i}}html(e){let t=this.rules.block.html.exec(e);if(t){let e=Nv(t[0]);return{type:`html`,block:!0,raw:e,pre:t[1]===`pre`||t[1]===`script`||t[1]===`style`,text:e}}}def(e){let t=this.rules.block.def.exec(e);if(t){let e=t[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal,` `),n=t[2]?t[2].replace(this.rules.other.hrefBrackets,`$1`).replace(this.rules.inline.anyPunctuation,`$1`):``,r=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline.anyPunctuation,`$1`):t[3];return{type:`def`,tag:e,raw:Mv(t[0],`
|
|
361
|
+
`),href:n,title:r}}}table(e){let t=this.rules.block.table.exec(e);if(!t||!this.rules.other.tableDelimiter.test(t[2]))return;let n=jv(t[1]),r=t[2].replace(this.rules.other.tableAlignChars,``).split(`|`),i=t[3]?.trim()?t[3].replace(this.rules.other.tableRowBlankLine,``).split(`
|
|
362
|
+
`):[],a={type:`table`,raw:Mv(t[0],`
|
|
363
|
+
`),header:[],align:[],rows:[]};if(n.length===r.length){for(let e of r)this.rules.other.tableAlignRight.test(e)?a.align.push(`right`):this.rules.other.tableAlignCenter.test(e)?a.align.push(`center`):this.rules.other.tableAlignLeft.test(e)?a.align.push(`left`):a.align.push(null);for(let e=0;e<n.length;e++)a.header.push({text:n[e],tokens:this.lexer.inline(n[e]),header:!0,align:a.align[e]});for(let e of i)a.rows.push(jv(e,a.header.length).map((e,t)=>({text:e,tokens:this.lexer.inline(e),header:!1,align:a.align[t]})));return a}}lheading(e){let t=this.rules.block.lheading.exec(e);if(t){let e=t[1].trim();return{type:`heading`,raw:Mv(t[0],`
|
|
364
364
|
`),depth:t[2].charAt(0)===`=`?1:2,text:e,tokens:this.lexer.inline(e)}}}paragraph(e){let t=this.rules.block.paragraph.exec(e);if(t){let e=t[1].charAt(t[1].length-1)===`
|
|
365
|
-
`?t[1].slice(0,-1):t[1];return{type:`paragraph`,raw:t[0],text:e,tokens:this.lexer.inline(e)}}}text(e){let t=this.rules.block.text.exec(e);if(t)return{type:`text`,raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){let t=this.rules.inline.escape.exec(e);if(t)return{type:`escape`,raw:t[0],text:t[1]}}tag(e){let t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&this.rules.other.startATag.test(t[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:`html`,raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){let t=this.rules.inline.link.exec(e);if(t){let e=t[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(e)){if(!this.rules.other.endAngleBracket.test(e))return;let t=
|
|
366
|
-
`),this.blockTokens(e,this.tokens);for(let e=0;e<this.inlineQueue.length;e++){let t=this.inlineQueue[e];this.inlineTokens(t.src,t.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(e,t=[],n=!1){this.tokenizer.lexer=this,this.options.pedantic&&(e=e.replace(
|
|
365
|
+
`?t[1].slice(0,-1):t[1];return{type:`paragraph`,raw:t[0],text:e,tokens:this.lexer.inline(e)}}}text(e){let t=this.rules.block.text.exec(e);if(t)return{type:`text`,raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){let t=this.rules.inline.escape.exec(e);if(t)return{type:`escape`,raw:t[0],text:t[1]}}tag(e){let t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&this.rules.other.startATag.test(t[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:`html`,raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){let t=this.rules.inline.link.exec(e);if(t){let e=t[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(e)){if(!this.rules.other.endAngleBracket.test(e))return;let t=Mv(e.slice(0,-1),`\\`);if((e.length-t.length)%2==0)return}else{let e=Pv(t[2],`()`);if(e===-2)return;if(e>-1){let n=(t[0].indexOf(`!`)===0?5:4)+t[1].length+e;t[2]=t[2].substring(0,e),t[0]=t[0].substring(0,n).trim(),t[3]=``}}let n=t[2],r=``;if(this.options.pedantic){let e=this.rules.other.pedanticHrefTitle.exec(n);e&&(n=e[1],r=e[3])}else r=t[3]?t[3].slice(1,-1):``;return n=n.trim(),this.rules.other.startAngleBracket.test(n)&&(n=this.options.pedantic&&!this.rules.other.endAngleBracket.test(e)?n.slice(1):n.slice(1,-1)),Iv(t,{href:n&&n.replace(this.rules.inline.anyPunctuation,`$1`),title:r&&r.replace(this.rules.inline.anyPunctuation,`$1`)},t[0],this.lexer,this.rules)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let e=t[(n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal,` `).toLowerCase()];if(!e){let e=n[0].charAt(0);return{type:`text`,raw:e,text:e}}return Iv(n,e,n[0],this.lexer,this.rules)}}emStrong(e,t,n=``){let r=this.rules.inline.emStrongLDelim.exec(e);if(!(!r||!r[1]&&!r[2]&&!r[3]&&!r[4]||r[4]&&n.match(this.rules.other.unicodeAlphaNumeric))&&(!(r[1]||r[3])||!n||this.rules.inline.punctuation.exec(n))){let n=[...r[0]].length-1,i,a,o=n,s=0,c=r[0][0]===`*`?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(c.lastIndex=0,t=t.slice(-1*e.length+n);(r=c.exec(t))!==null;){if(i=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],!i)continue;if(a=[...i].length,r[3]||r[4]){o+=a;continue}else if((r[5]||r[6])&&n%3&&!((n+a)%3)){s+=a;continue}if(o-=a,o>0)continue;a=Math.min(a,a+o+s);let t=[...r[0]][0].length,c=e.slice(0,n+r.index+t+a);if(Math.min(n,a)%2){let e=c.slice(1,-1);return{type:`em`,raw:c,text:e,tokens:this.lexer.inlineTokens(e)}}let l=c.slice(2,-2);return{type:`strong`,raw:c,text:l,tokens:this.lexer.inlineTokens(l)}}}}codespan(e){let t=this.rules.inline.code.exec(e);if(t){let e=t[2].replace(this.rules.other.newLineCharGlobal,` `),n=this.rules.other.nonSpaceChar.test(e),r=this.rules.other.startingSpaceChar.test(e)&&this.rules.other.endingSpaceChar.test(e);return n&&r&&(e=e.substring(1,e.length-1)),{type:`codespan`,raw:t[0],text:e}}}br(e){let t=this.rules.inline.br.exec(e);if(t)return{type:`br`,raw:t[0]}}del(e,t,n=``){let r=this.rules.inline.delLDelim.exec(e);if(r&&(!r[1]||!n||this.rules.inline.punctuation.exec(n))){let n=[...r[0]].length-1,i,a,o=n,s=this.rules.inline.delRDelim;for(s.lastIndex=0,t=t.slice(-1*e.length+n);(r=s.exec(t))!==null;){if(i=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],!i||(a=[...i].length,a!==n))continue;if(r[3]||r[4]){o+=a;continue}if(o-=a,o>0)continue;a=Math.min(a,a+o);let t=[...r[0]][0].length,s=e.slice(0,n+r.index+t+a),c=s.slice(n,-n);return{type:`del`,raw:s,text:c,tokens:this.lexer.inlineTokens(c)}}}}autolink(e){let t=this.rules.inline.autolink.exec(e);if(t){let e,n;return t[2]===`@`?(e=t[1],n=`mailto:`+e):(e=t[1],n=e),{type:`link`,raw:t[0],text:e,href:n,tokens:[{type:`text`,raw:e,text:e}]}}}url(e){let t;if(t=this.rules.inline.url.exec(e)){let e,n;if(t[2]===`@`)e=t[0],n=`mailto:`+e;else{let r;do r=t[0],t[0]=this.rules.inline._backpedal.exec(t[0])?.[0]??``;while(r!==t[0]);e=t[0],n=t[1]===`www.`?`http://`+t[0]:t[0]}return{type:`link`,raw:t[0],text:e,href:n,tokens:[{type:`text`,raw:e,text:e}]}}}inlineText(e){let t=this.rules.inline.text.exec(e);if(t){let e=this.lexer.state.inRawBlock;return{type:`text`,raw:t[0],text:t[0],escaped:e}}}},zv=class e{tokens;options;state;inlineQueue;tokenizer;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||m_,this.options.tokenizer=this.options.tokenizer||new Rv,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let t={other:y_,block:Tv.normal,inline:Ev.normal};this.options.pedantic?(t.block=Tv.pedantic,t.inline=Ev.pedantic):this.options.gfm&&(t.block=Tv.gfm,this.options.breaks?t.inline=Ev.breaks:t.inline=Ev.gfm),this.tokenizer.rules=t}static get rules(){return{block:Tv,inline:Ev}}static lex(t,n){return new e(n).lex(t)}static lexInline(t,n){return new e(n).inlineTokens(t)}lex(e){e=e.replace(y_.carriageReturn,`
|
|
366
|
+
`),this.blockTokens(e,this.tokens);for(let e=0;e<this.inlineQueue.length;e++){let t=this.inlineQueue[e];this.inlineTokens(t.src,t.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(e,t=[],n=!1){this.tokenizer.lexer=this,this.options.pedantic&&(e=e.replace(y_.tabCharGlobal,` `).replace(y_.spaceLine,``));let r=1/0;for(;e;){if(e.length<r)r=e.length;else{this.infiniteLoopError(e.charCodeAt(0));break}let i;if(this.options.extensions?.block?.some(n=>(i=n.call({lexer:this},e,t))?(e=e.substring(i.raw.length),t.push(i),!0):!1))continue;if(i=this.tokenizer.space(e)){e=e.substring(i.raw.length);let n=t.at(-1);i.raw.length===1&&n!==void 0?n.raw+=`
|
|
367
367
|
`:t.push(i);continue}if(i=this.tokenizer.code(e)){e=e.substring(i.raw.length);let n=t.at(-1);n?.type===`paragraph`||n?.type===`text`?(n.raw+=(n.raw.endsWith(`
|
|
368
368
|
`)?``:`
|
|
369
369
|
`)+i.raw,n.text+=`
|
|
@@ -376,9 +376,9 @@ ${c}`:c;let l=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTo
|
|
|
376
376
|
`+i.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=r.text):t.push(i),n=a.length!==e.length,e=e.substring(i.raw.length);continue}if(i=this.tokenizer.text(e)){e=e.substring(i.raw.length);let n=t.at(-1);n?.type===`text`?(n.raw+=(n.raw.endsWith(`
|
|
377
377
|
`)?``:`
|
|
378
378
|
`)+i.raw,n.text+=`
|
|
379
|
-
`+i.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=n.text):t.push(i);continue}if(e){this.infiniteLoopError(e.charCodeAt(0));break}}return this.state.top=!0,t}inline(e,t=[]){return this.inlineQueue.push({src:e,tokens:t}),t}inlineTokens(e,t=[]){this.tokenizer.lexer=this;let n=e,r=null;if(this.tokens.links){let e=Object.keys(this.tokens.links);if(e.length>0)for(;(r=this.tokenizer.rules.inline.reflinkSearch.exec(n))!==null;)e.includes(r[0].slice(r[0].lastIndexOf(`[`)+1,-1))&&(n=n.slice(0,r.index)+`[`+`a`.repeat(r[0].length-2)+`]`+n.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(r=this.tokenizer.rules.inline.anyPunctuation.exec(n))!==null;)n=n.slice(0,r.index)+`++`+n.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);let i;for(;(r=this.tokenizer.rules.inline.blockSkip.exec(n))!==null;)i=r[2]?r[2].length:0,n=n.slice(0,r.index+i)+`[`+`a`.repeat(r[0].length-i-2)+`]`+n.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);n=this.options.hooks?.emStrongMask?.call({lexer:this},n)??n;let a=!1,o=``,s=1/0;for(;e;){if(e.length<s)s=e.length;else{this.infiniteLoopError(e.charCodeAt(0));break}a||(o=``),a=!1;let r;if(this.options.extensions?.inline?.some(n=>(r=n.call({lexer:this},e,t))?(e=e.substring(r.raw.length),t.push(r),!0):!1))continue;if(r=this.tokenizer.escape(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.tag(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.link(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(r.raw.length);let n=t.at(-1);r.type===`text`&&n?.type===`text`?(n.raw+=r.raw,n.text+=r.text):t.push(r);continue}if(r=this.tokenizer.emStrong(e,n,o)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.codespan(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.br(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.del(e,n,o)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.autolink(e)){e=e.substring(r.raw.length),t.push(r);continue}if(!this.state.inLink&&(r=this.tokenizer.url(e))){e=e.substring(r.raw.length),t.push(r);continue}let i=e;if(this.options.extensions?.startInline){let t=1/0,n=e.slice(1),r;this.options.extensions.startInline.forEach(e=>{r=e.call({lexer:this},n),typeof r==`number`&&r>=0&&(t=Math.min(t,r))}),t<1/0&&t>=0&&(i=e.substring(0,t+1))}if(r=this.tokenizer.inlineText(i)){e=e.substring(r.raw.length),r.raw.slice(-1)!==`_`&&(o=r.raw.slice(-1)),a=!0;let n=t.at(-1);n?.type===`text`?(n.raw+=r.raw,n.text+=r.text):t.push(r);continue}if(e){this.infiniteLoopError(e.charCodeAt(0));break}}return t}infiniteLoopError(e){let t=`Infinite loop on byte: `+e;if(this.options.silent)console.error(t);else throw Error(t)}},
|
|
380
|
-
`;return r?`<pre><code class="language-`+
|
|
381
|
-
`:`<pre><code>`+(n?i:
|
|
379
|
+
`+i.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=n.text):t.push(i);continue}if(e){this.infiniteLoopError(e.charCodeAt(0));break}}return this.state.top=!0,t}inline(e,t=[]){return this.inlineQueue.push({src:e,tokens:t}),t}inlineTokens(e,t=[]){this.tokenizer.lexer=this;let n=e,r=null;if(this.tokens.links){let e=Object.keys(this.tokens.links);if(e.length>0)for(;(r=this.tokenizer.rules.inline.reflinkSearch.exec(n))!==null;)e.includes(r[0].slice(r[0].lastIndexOf(`[`)+1,-1))&&(n=n.slice(0,r.index)+`[`+`a`.repeat(r[0].length-2)+`]`+n.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(r=this.tokenizer.rules.inline.anyPunctuation.exec(n))!==null;)n=n.slice(0,r.index)+`++`+n.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);let i;for(;(r=this.tokenizer.rules.inline.blockSkip.exec(n))!==null;)i=r[2]?r[2].length:0,n=n.slice(0,r.index+i)+`[`+`a`.repeat(r[0].length-i-2)+`]`+n.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);n=this.options.hooks?.emStrongMask?.call({lexer:this},n)??n;let a=!1,o=``,s=1/0;for(;e;){if(e.length<s)s=e.length;else{this.infiniteLoopError(e.charCodeAt(0));break}a||(o=``),a=!1;let r;if(this.options.extensions?.inline?.some(n=>(r=n.call({lexer:this},e,t))?(e=e.substring(r.raw.length),t.push(r),!0):!1))continue;if(r=this.tokenizer.escape(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.tag(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.link(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(r.raw.length);let n=t.at(-1);r.type===`text`&&n?.type===`text`?(n.raw+=r.raw,n.text+=r.text):t.push(r);continue}if(r=this.tokenizer.emStrong(e,n,o)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.codespan(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.br(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.del(e,n,o)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.autolink(e)){e=e.substring(r.raw.length),t.push(r);continue}if(!this.state.inLink&&(r=this.tokenizer.url(e))){e=e.substring(r.raw.length),t.push(r);continue}let i=e;if(this.options.extensions?.startInline){let t=1/0,n=e.slice(1),r;this.options.extensions.startInline.forEach(e=>{r=e.call({lexer:this},n),typeof r==`number`&&r>=0&&(t=Math.min(t,r))}),t<1/0&&t>=0&&(i=e.substring(0,t+1))}if(r=this.tokenizer.inlineText(i)){e=e.substring(r.raw.length),r.raw.slice(-1)!==`_`&&(o=r.raw.slice(-1)),a=!0;let n=t.at(-1);n?.type===`text`?(n.raw+=r.raw,n.text+=r.text):t.push(r);continue}if(e){this.infiniteLoopError(e.charCodeAt(0));break}}return t}infiniteLoopError(e){let t=`Infinite loop on byte: `+e;if(this.options.silent)console.error(t);else throw Error(t)}},Bv=class{options;parser;constructor(e){this.options=e||m_}space(e){return``}code({text:e,lang:t,escaped:n}){let r=(t||``).match(y_.notSpaceStart)?.[0],i=e.replace(y_.endingNewline,``)+`
|
|
380
|
+
`;return r?`<pre><code class="language-`+kv(r)+`">`+(n?i:kv(i,!0))+`</code></pre>
|
|
381
|
+
`:`<pre><code>`+(n?i:kv(i,!0))+`</code></pre>
|
|
382
382
|
`}blockquote({tokens:e}){return`<blockquote>
|
|
383
383
|
${this.parser.parse(e)}</blockquote>
|
|
384
384
|
`}html({text:e}){return e}def(e){return``}heading({tokens:e,depth:t}){return`<h${t}>${this.parser.parseInline(e)}</h${t}>
|
|
@@ -394,12 +394,12 @@ ${this.parser.parse(e)}</blockquote>
|
|
|
394
394
|
`}tablerow({text:e}){return`<tr>
|
|
395
395
|
${e}</tr>
|
|
396
396
|
`}tablecell(e){let t=this.parser.parseInline(e.tokens),n=e.header?`th`:`td`;return(e.align?`<${n} align="${e.align}">`:`<${n}>`)+t+`</${n}>
|
|
397
|
-
`}strong({tokens:e}){return`<strong>${this.parser.parseInline(e)}</strong>`}em({tokens:e}){return`<em>${this.parser.parseInline(e)}</em>`}codespan({text:e}){return`<code>${
|
|
398
|
-
Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error occurred:</p><pre>`+
|
|
399
|
-
${this.renderViewerHeader(t,
|
|
400
|
-
${
|
|
397
|
+
`}strong({tokens:e}){return`<strong>${this.parser.parseInline(e)}</strong>`}em({tokens:e}){return`<em>${this.parser.parseInline(e)}</em>`}codespan({text:e}){return`<code>${kv(e,!0)}</code>`}br(e){return`<br>`}del({tokens:e}){return`<del>${this.parser.parseInline(e)}</del>`}link({href:e,title:t,tokens:n}){let r=this.parser.parseInline(n),i=Av(e);if(i===null)return r;e=i;let a=`<a href="`+e+`"`;return t&&(a+=` title="`+kv(t)+`"`),a+=`>`+r+`</a>`,a}image({href:e,title:t,text:n,tokens:r}){r&&(n=this.parser.parseInline(r,this.parser.textRenderer));let i=Av(e);if(i===null)return kv(n);e=i;let a=`<img src="${e}" alt="${kv(n)}"`;return t&&(a+=` title="${kv(t)}"`),a+=`>`,a}text(e){return`tokens`in e&&e.tokens?this.parser.parseInline(e.tokens):`escaped`in e&&e.escaped?e.text:kv(e.text)}},Vv=class{strong({text:e}){return e}em({text:e}){return e}codespan({text:e}){return e}del({text:e}){return e}html({text:e}){return e}text({text:e}){return e}link({text:e}){return``+e}image({text:e}){return``+e}br(){return``}checkbox({raw:e}){return e}},Hv=class e{options;renderer;textRenderer;constructor(e){this.options=e||m_,this.options.renderer=this.options.renderer||new Bv,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new Vv}static parse(t,n){return new e(n).parse(t)}static parseInline(t,n){return new e(n).parseInline(t)}parse(e){this.renderer.parser=this;let t=``;for(let n=0;n<e.length;n++){let r=e[n];if(this.options.extensions?.renderers?.[r.type]){let e=r,n=this.options.extensions.renderers[e.type].call({parser:this},e);if(n!==!1||![`space`,`hr`,`heading`,`code`,`table`,`blockquote`,`list`,`html`,`def`,`paragraph`,`text`].includes(e.type)){t+=n||``;continue}}let i=r;switch(i.type){case`space`:t+=this.renderer.space(i);break;case`hr`:t+=this.renderer.hr(i);break;case`heading`:t+=this.renderer.heading(i);break;case`code`:t+=this.renderer.code(i);break;case`table`:t+=this.renderer.table(i);break;case`blockquote`:t+=this.renderer.blockquote(i);break;case`list`:t+=this.renderer.list(i);break;case`checkbox`:t+=this.renderer.checkbox(i);break;case`html`:t+=this.renderer.html(i);break;case`def`:t+=this.renderer.def(i);break;case`paragraph`:t+=this.renderer.paragraph(i);break;case`text`:t+=this.renderer.text(i);break;default:{let e=`Token with "`+i.type+`" type was not found.`;if(this.options.silent)return console.error(e),``;throw Error(e)}}}return t}parseInline(e,t=this.renderer){this.renderer.parser=this;let n=``;for(let r=0;r<e.length;r++){let i=e[r];if(this.options.extensions?.renderers?.[i.type]){let e=this.options.extensions.renderers[i.type].call({parser:this},i);if(e!==!1||![`escape`,`html`,`link`,`image`,`strong`,`em`,`codespan`,`br`,`del`,`text`].includes(i.type)){n+=e||``;continue}}let a=i;switch(a.type){case`escape`:n+=t.text(a);break;case`html`:n+=t.html(a);break;case`link`:n+=t.link(a);break;case`image`:n+=t.image(a);break;case`checkbox`:n+=t.checkbox(a);break;case`strong`:n+=t.strong(a);break;case`em`:n+=t.em(a);break;case`codespan`:n+=t.codespan(a);break;case`br`:n+=t.br(a);break;case`del`:n+=t.del(a);break;case`text`:n+=t.text(a);break;default:{let e=`Token with "`+a.type+`" type was not found.`;if(this.options.silent)return console.error(e),``;throw Error(e)}}}return n}},Uv=class{options;block;constructor(e){this.options=e||m_}static passThroughHooks=new Set([`preprocess`,`postprocess`,`processAllTokens`,`emStrongMask`]);static passThroughHooksRespectAsync=new Set([`preprocess`,`postprocess`,`processAllTokens`]);preprocess(e){return e}postprocess(e){return e}processAllTokens(e){return e}emStrongMask(e){return e}provideLexer(e=this.block){return e?zv.lex:zv.lexInline}provideParser(e=this.block){return e?Hv.parse:Hv.parseInline}},Wv=new class{defaults=p_();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=Hv;Renderer=Bv;TextRenderer=Vv;Lexer=zv;Tokenizer=Rv;Hooks=Uv;constructor(...e){this.use(...e)}walkTokens(e,t){let n=[];for(let r of e)switch(n=n.concat(t.call(this,r)),r.type){case`table`:{let e=r;for(let r of e.header)n=n.concat(this.walkTokens(r.tokens,t));for(let r of e.rows)for(let e of r)n=n.concat(this.walkTokens(e.tokens,t));break}case`list`:{let e=r;n=n.concat(this.walkTokens(e.items,t));break}default:{let e=r;this.defaults.extensions?.childTokens?.[e.type]?this.defaults.extensions.childTokens[e.type].forEach(r=>{let i=e[r].flat(1/0);n=n.concat(this.walkTokens(i,t))}):e.tokens&&(n=n.concat(this.walkTokens(e.tokens,t)))}}return n}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(e=>{let n={...e};if(n.async=this.defaults.async||n.async||!1,e.extensions&&(e.extensions.forEach(e=>{if(!e.name)throw Error(`extension name required`);if(`renderer`in e){let n=t.renderers[e.name];n?t.renderers[e.name]=function(...t){let r=e.renderer.apply(this,t);return r===!1&&(r=n.apply(this,t)),r}:t.renderers[e.name]=e.renderer}if(`tokenizer`in e){if(!e.level||e.level!==`block`&&e.level!==`inline`)throw Error(`extension level must be 'block' or 'inline'`);let n=t[e.level];n?n.unshift(e.tokenizer):t[e.level]=[e.tokenizer],e.start&&(e.level===`block`?t.startBlock?t.startBlock.push(e.start):t.startBlock=[e.start]:e.level===`inline`&&(t.startInline?t.startInline.push(e.start):t.startInline=[e.start]))}`childTokens`in e&&e.childTokens&&(t.childTokens[e.name]=e.childTokens)}),n.extensions=t),e.renderer){let t=this.defaults.renderer||new Bv(this.defaults);for(let n in e.renderer){if(!(n in t))throw Error(`renderer '${n}' does not exist`);if([`options`,`parser`].includes(n))continue;let r=n,i=e.renderer[r],a=t[r];t[r]=(...e)=>{let n=i.apply(t,e);return n===!1&&(n=a.apply(t,e)),n||``}}n.renderer=t}if(e.tokenizer){let t=this.defaults.tokenizer||new Rv(this.defaults);for(let n in e.tokenizer){if(!(n in t))throw Error(`tokenizer '${n}' does not exist`);if([`options`,`rules`,`lexer`].includes(n))continue;let r=n,i=e.tokenizer[r],a=t[r];t[r]=(...e)=>{let n=i.apply(t,e);return n===!1&&(n=a.apply(t,e)),n}}n.tokenizer=t}if(e.hooks){let t=this.defaults.hooks||new Uv;for(let n in e.hooks){if(!(n in t))throw Error(`hook '${n}' does not exist`);if([`options`,`block`].includes(n))continue;let r=n,i=e.hooks[r],a=t[r];Uv.passThroughHooks.has(n)?t[r]=e=>{if(this.defaults.async&&Uv.passThroughHooksRespectAsync.has(n))return(async()=>{let n=await i.call(t,e);return a.call(t,n)})();let r=i.call(t,e);return a.call(t,r)}:t[r]=(...e)=>{if(this.defaults.async)return(async()=>{let n=await i.apply(t,e);return n===!1&&(n=await a.apply(t,e)),n})();let n=i.apply(t,e);return n===!1&&(n=a.apply(t,e)),n}}n.hooks=t}if(e.walkTokens){let t=this.defaults.walkTokens,r=e.walkTokens;n.walkTokens=function(e){let n=[];return n.push(r.call(this,e)),t&&(n=n.concat(t.call(this,e))),n}}this.defaults={...this.defaults,...n}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return zv.lex(e,t??this.defaults)}parser(e,t){return Hv.parse(e,t??this.defaults)}parseMarkdown(e){return(t,n)=>{let r={...n},i={...this.defaults,...r},a=this.onError(!!i.silent,!!i.async);if(this.defaults.async===!0&&r.async===!1)return a(Error(`marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.`));if(typeof t>`u`||t===null)return a(Error(`marked(): input parameter is undefined or null`));if(typeof t!=`string`)return a(Error(`marked(): input parameter is of type `+Object.prototype.toString.call(t)+`, string expected`));if(i.hooks&&(i.hooks.options=i,i.hooks.block=e),i.async)return(async()=>{let n=i.hooks?await i.hooks.preprocess(t):t,r=await(i.hooks?await i.hooks.provideLexer(e):e?zv.lex:zv.lexInline)(n,i),a=i.hooks?await i.hooks.processAllTokens(r):r;i.walkTokens&&await Promise.all(this.walkTokens(a,i.walkTokens));let o=await(i.hooks?await i.hooks.provideParser(e):e?Hv.parse:Hv.parseInline)(a,i);return i.hooks?await i.hooks.postprocess(o):o})().catch(a);try{i.hooks&&(t=i.hooks.preprocess(t));let n=(i.hooks?i.hooks.provideLexer(e):e?zv.lex:zv.lexInline)(t,i);i.hooks&&(n=i.hooks.processAllTokens(n)),i.walkTokens&&this.walkTokens(n,i.walkTokens);let r=(i.hooks?i.hooks.provideParser(e):e?Hv.parse:Hv.parseInline)(n,i);return i.hooks&&(r=i.hooks.postprocess(r)),r}catch(e){return a(e)}}}onError(e,t){return n=>{if(n.message+=`
|
|
398
|
+
Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error occurred:</p><pre>`+kv(n.message+``,!0)+`</pre>`;return t?Promise.resolve(e):e}if(t)return Promise.reject(n);throw n}}};function B(e,t){return Wv.parse(e,t)}B.options=B.setOptions=function(e){return Wv.setOptions(e),B.defaults=Wv.defaults,h_(B.defaults),B},B.getDefaults=p_,B.defaults=m_,B.use=function(...e){return Wv.use(...e),B.defaults=Wv.defaults,h_(B.defaults),B},B.walkTokens=function(e,t){return Wv.walkTokens(e,t)},B.parseInline=Wv.parseInline,B.Parser=Hv,B.parser=Hv.parse,B.Renderer=Bv,B.TextRenderer=Vv,B.Lexer=zv,B.lexer=zv.lex,B.Tokenizer=Rv,B.Hooks=Uv,B.parse=B,B.options,B.setOptions,B.use,B.walkTokens,B.parseInline,Hv.parse,zv.lex;var Gv=new B.Renderer;Gv.html=({text:e})=>ry(e),Gv.image=({text:e})=>ry(e===``?`[Image omitted]`:`[Image omitted: ${e}]`),Gv.checkbox=({checked:e})=>e?`[x] `:`[ ] `;var V=new Set,Kv={a:new Set([`href`,`title`]),blockquote:V,br:V,code:V,del:V,em:V,h1:V,h2:V,h3:V,h4:V,h5:V,h6:V,hr:V,li:V,ol:new Set([`start`]),p:V,pre:V,strong:V,table:V,tbody:V,td:new Set([`align`]),th:new Set([`align`]),thead:V,tr:V,ul:V},qv=new Set([`http:`,`https:`,`mailto:`]),Jv=new Set([`left`,`center`,`right`]),Yv=`table-scroll`;function Xv(e){return Zv(B.parse(e,{async:!1,breaks:!0,gfm:!0,renderer:Gv}))}function Zv(e){let t=document.createElement(`template`);t.innerHTML=e;for(let e of[...t.content.querySelectorAll(`*`)]){let t=e.tagName.toLowerCase(),n=Kv[t];if(n===void 0){e.remove();continue}for(let r of[...e.attributes]){let i=r.name.toLowerCase();(!n.has(i)||!$v(t,i,r.value))&&e.removeAttribute(r.name)}t===`a`&&Qv(e)}return ny(t.content),t.innerHTML}function Qv(e){if(!e.hasAttribute(`href`)){e.removeAttribute(`target`),e.removeAttribute(`rel`),e.removeAttribute(`referrerpolicy`);return}e.setAttribute(`target`,`_blank`),e.setAttribute(`rel`,`noopener noreferrer`),e.setAttribute(`referrerpolicy`,`no-referrer`)}function $v(e,t,n){return e===`a`&&t===`href`?ey(n):e===`ol`&&t===`start`?/^-?\d+$/.test(n):(e===`td`||e===`th`)&&t===`align`?Jv.has(n.toLowerCase()):!0}function ey(e){if(e===``||ty(e))return!1;try{return qv.has(new URL(e).protocol)}catch{return!1}}function ty(e){for(let t=0;t<e.length;t+=1){let n=e.charCodeAt(t);if(n<=31||n===127)return!0}return!1}function ny(e){e.querySelectorAll(`table`).forEach(e=>{let t=document.createElement(`div`);t.className=Yv,t.setAttribute(`role`,`region`),t.setAttribute(`aria-label`,`Table`),t.setAttribute(`tabindex`,`0`),e.before(t),t.append(e)})}function ry(e){return e.replaceAll(`&`,`&`).replaceAll(`<`,`<`).replaceAll(`>`,`>`)}var iy=`10 MB`;function ay(e){let t=Math.max(e.lastIndexOf(`/`),e.lastIndexOf(`\\`));return e.slice(t+1)}var oy=`pi-web.workspace.files.viewMode`,sy=`mode`,cy=Ol(`core:workspace.files`);function ly(e){return e===`preview`||e===`raw`?e:void 0}function uy(e,t){let n=ly(e.read());return n===void 0?fy(t)??`raw`:(py(n,t),n)}function dy(e,t,n){py(e,n),t.write(e)}function fy(e){if(e!==void 0)try{return ly(e.getItem(oy))}catch{return}}function py(e,t){if(t!==void 0)try{t.setItem(oy,e)}catch{}}var my={adopt:()=>uy(hy(),gy()),publish:e=>{dy(e,hy(),gy())}};function hy(){return{read:()=>typeof window>`u`?void 0:Al(cy,sy),write:e=>{typeof window>`u`||jl(cy,sy,e,{replace:!0})}}}function gy(){if(!(typeof window>`u`))try{return window.localStorage}catch{return}}function H(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a}var _y=`modulepreload`,vy=function(e,t){return new URL(e,t).href},yy={},by=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?import.meta.resolve(e):new URL(e,import.meta.url).href}r=o(t.map(t=>{if(t=vy(t,n),t=s(t),t in yy)return;yy[t]=!0;let r=t.endsWith(`.css`);for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}let i=document.createElement(`link`);if(i.rel=r?`stylesheet`:_y,r||(i.as=`script`),i.crossOrigin=``,i.href=t,a&&i.setAttribute(`nonce`,a),document.head.appendChild(i),r)return new Promise((e,n)=>{i.addEventListener(`load`,e),i.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},xy=class extends _{constructor(...e){super(...e),this.machineId=``,this.projectId=``,this.workspaceId=``,this.previewUrlBuilder=jo,this.modeStore=my,this.selectionToken=0,this.restoreModeFromHistory=()=>{this.mode=this.modeStore.adopt(),this.publishedMode=void 0,this.failedPreviewToken=void 0,this.requestUpdate()}}connectedCallback(){super.connectedCallback(),window.addEventListener(`popstate`,this.restoreModeFromHistory)}disconnectedCallback(){window.removeEventListener(`popstate`,this.restoreModeFromHistory),super.disconnectedCallback()}willUpdate(){this.mode??=this.modeStore.adopt();let e=this.currentFileKey();e!==this.activeFileKey&&(this.activeFileKey=e,this.selectionToken+=1,this.failedPreviewToken=void 0)}updated(){let e=this.mode;e===void 0||e===this.publishedMode||this.selectionHasRawAndPreviewModes()&&(this.publishedMode=e,this.modeStore.publish(e))}render(){let e=this.selectedPath;if(e===void 0||e===``)return this.renderStatus(`Select a file.`);if(this.loadError!==void 0)return this.renderStatus(`Unable to load ${e}: ${this.loadError}`,!0);let t=this.file;if(t===void 0)return this.renderStatus(`Loading ${e}…`);if(t.path!==e)return this.renderStatus(`Unable to preview ${e}: loaded content belongs to ${t.path}.`,!0);let n=this.selectionToken,r=Cy(t),i=Ey(r)&&t.size>0&&t.size<=10485760;return h`
|
|
399
|
+
${this.renderViewerHeader(t,Dy(t,r),i)}
|
|
400
|
+
${wy(t,r)?this.renderModeControls(t,n):null}
|
|
401
401
|
${this.renderLoadedFile(t,r,n)}
|
|
402
|
-
`}renderLoadedFile(e,t,n){if(
|
|
402
|
+
`}renderLoadedFile(e,t,n){if(wy(e,t)&&this.mode===`raw`)return this.renderRawSource(e);if(e.size===0)return this.renderStatus(`This file is empty.`);switch(t){case`image`:return this.renderImagePreview(e,n);case`html`:return this.renderFramePreview(e,`html`,n);case`pdf`:return this.renderFramePreview(e,`pdf`,n);case`markdown`:return this.renderMarkdownPreview(e);case`download`:return this.renderUnsupportedFile(e);case`code`:return this.renderRawSource(e)}}renderViewerHeader(e,t,n){let r=ay(e.path),i={modifiedAt:e.modifiedAt,machineId:this.machineId},a=this.previewUrlBuilder(this.projectId,this.workspaceId,e.path,i),o=this.previewUrlBuilder(this.projectId,this.workspaceId,e.path,{...i,download:!0});return h`
|
|
403
403
|
<div class="viewer-header">
|
|
404
404
|
<strong title=${e.path}>${e.path}</strong>
|
|
405
405
|
<div class="viewer-actions">
|
|
@@ -430,12 +430,12 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
430
430
|
@click=${()=>{this.setMode(`raw`,t)}}
|
|
431
431
|
>Raw</button>
|
|
432
432
|
</div>
|
|
433
|
-
`}renderRawSource(e){return e.size===0?this.renderStatus(`This file is empty.`):(
|
|
433
|
+
`}renderRawSource(e){return e.size===0?this.renderStatus(`This file is empty.`):(Oy(),h`
|
|
434
434
|
${e.truncated?h`<p class="preview-note" role="status">Raw source is truncated. Use Download for the complete file.</p>`:null}
|
|
435
435
|
<code-viewer .content=${e.content} .language=${e.language}></code-viewer>
|
|
436
|
-
`)}renderMarkdownPreview(e){if(e.size>10485760)return this.renderPreviewTooLarge(e);try{let t=
|
|
436
|
+
`)}renderMarkdownPreview(e){if(e.size>10485760)return this.renderPreviewTooLarge(e);try{let t=Xv(e.content);return h`
|
|
437
437
|
${e.truncated?h`<p class="preview-note" role="status">Preview is rendered from truncated source. Use Download for the complete file.</p>`:null}
|
|
438
|
-
<div class="formatted markdown-preview" dir="auto">${
|
|
438
|
+
<div class="formatted markdown-preview" dir="auto">${f_(t)}</div>
|
|
439
439
|
`}catch{return this.renderStatus(`Markdown preview failed. Use Raw or Download instead.`,!0)}}renderImagePreview(e,t){return e.size>10485760?this.renderPreviewTooLarge(e):this.failedPreviewToken===t?this.renderPreviewFailure(e,t):h`
|
|
440
440
|
<div class="image-preview">
|
|
441
441
|
<img
|
|
@@ -451,7 +451,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
451
451
|
<iframe
|
|
452
452
|
class="file-frame-preview"
|
|
453
453
|
src=${r}
|
|
454
|
-
sandbox=${
|
|
454
|
+
sandbox=${s_(Ty(t))}
|
|
455
455
|
allow=""
|
|
456
456
|
referrerpolicy="no-referrer"
|
|
457
457
|
title=${`Preview of ${e.path}`}
|
|
@@ -463,12 +463,12 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
463
463
|
<span>Open it in a new window or use Download above.</span>
|
|
464
464
|
<button type="button" @click=${()=>{this.retryPreview(t)}}>Retry preview</button>
|
|
465
465
|
</div>
|
|
466
|
-
`}renderUnsupportedFile(e){let t=
|
|
466
|
+
`}renderUnsupportedFile(e){let t=ay(e.path);return h`
|
|
467
467
|
<div class="preview-state">
|
|
468
468
|
<p>Preview isn't available for this file type.</p>
|
|
469
469
|
<a class="download-link" href=${this.previewUrlBuilder(this.projectId,this.workspaceId,e.path,{modifiedAt:e.modifiedAt,machineId:this.machineId,download:!0})} download=${t}>Download ${t} · ${Fg(e.size)}</a>
|
|
470
470
|
</div>
|
|
471
|
-
`}renderPreviewTooLarge(e){return this.renderStatus(`File too large to preview: ${Fg(e.size)} · limit ${
|
|
471
|
+
`}renderPreviewTooLarge(e){return this.renderStatus(`File too large to preview: ${Fg(e.size)} · limit ${iy}. Use Download above.`)}renderStatus(e,t=!1){return t?h`<p class="viewer-status" role="alert">${e}</p>`:h`<p class="viewer-status" role="status" aria-live="polite">${e}</p>`}previewUrl(e){return this.previewUrlBuilder(this.projectId,this.workspaceId,e.path,{modifiedAt:e.modifiedAt,machineId:this.machineId})}setMode(e,t){t===this.selectionToken&&(this.mode=e,this.failedPreviewToken=void 0,this.requestUpdate())}recordPreviewFailure(e){e!==this.selectionToken||this.showsRawSource()||(this.failedPreviewToken=e,this.requestUpdate())}retryPreview(e){e===this.selectionToken&&(this.failedPreviewToken=void 0,this.requestUpdate())}currentFileKey(){return Sy(this)}showsRawSource(){return this.mode===`raw`&&this.selectionHasRawAndPreviewModes()}selectionHasRawAndPreviewModes(){let e=this.file;return e===void 0||this.loadError!==void 0||this.selectedPath===void 0||e.path!==this.selectedPath?!1:wy(e,Cy(e))}static{this.styles=[o_,o`
|
|
472
472
|
:host { flex: 1 1 auto; min-height: 0; display: flex; flex-direction: column; overflow: auto; color: var(--pi-text); font: 14px system-ui, sans-serif; }
|
|
473
473
|
.viewer-header { position: sticky; top: 0; z-index: 1; display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 8px; border-bottom: 1px solid var(--pi-border-muted); background: var(--pi-bg); }
|
|
474
474
|
.viewer-header strong { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
@@ -497,7 +497,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
497
497
|
.viewer-header { align-items: flex-start; flex-direction: column; }
|
|
498
498
|
.viewer-actions { width: 100%; flex-wrap: wrap; }
|
|
499
499
|
}
|
|
500
|
-
`]}};H([S({attribute:!1})],
|
|
500
|
+
`]}};H([S({attribute:!1})],xy.prototype,`machineId`,void 0),H([S({attribute:!1})],xy.prototype,`projectId`,void 0),H([S({attribute:!1})],xy.prototype,`workspaceId`,void 0),H([S({attribute:!1})],xy.prototype,`selectedPath`,void 0),H([S({attribute:!1})],xy.prototype,`file`,void 0),H([S({attribute:!1})],xy.prototype,`loadError`,void 0),H([S({attribute:!1})],xy.prototype,`previewUrlBuilder`,void 0),H([S({attribute:!1})],xy.prototype,`modeStore`,void 0),xy=H([x(`workspace-file-viewer`)],xy);function Sy(e){return JSON.stringify([e.machineId,e.projectId,e.workspaceId,e.selectedPath??null,e.file?.path??null,e.file?.modifiedAt??null,e.file?.mediaType??null])}function Cy(e){return e.mediaType===`image`?`image`:e.mediaType===`html`?`html`:e.mediaType===`pdf`?`pdf`:e.mediaType===`markdown`?`markdown`:e.binary?`download`:`code`}function wy(e,t){return t!==`code`&&t!==`download`&&!e.binary}function Ty(e){return e===`html`?``:void 0}function Ey(e){return e===`image`||e===`html`||e===`pdf`}function Dy(e,t){return`${t===`code`?e.language??`text`:t===`download`?e.mimeType??`binary`:t===`markdown`?`markdown`:e.mimeType??t} · ${Fg(e.size)}${e.truncated?` · truncated`:``}`}function Oy(){by(()=>import(`./CodeViewer-BDNVRbqY.js`),__vite__mapDeps([0,1,2,3]),import.meta.url)}var ky=class extends _{constructor(...e){super(...e),this.destinationFolder=``,this.overwrite=!1,this.createDirs=!0,this.formError=``,this.dragActive=!1,this.dragDepth=0,this.openFilePicker=()=>{this.uploadInput?.click()},this.handleFileInputChange=e=>{let t=e.currentTarget instanceof HTMLInputElement?e.currentTarget:void 0,n=Fy(t?.files);t!==void 0&&(t.value=``),n.length>0&&this.openUploadReview(n)},this.handleDragEnter=e=>{Iy(e)&&(e.preventDefault(),this.dragDepth+=1,this.dragActive=!0)},this.handleDragOver=e=>{Iy(e)&&(e.preventDefault(),e.dataTransfer!==null&&(e.dataTransfer.dropEffect=`copy`),this.dragActive=!0)},this.handleDragLeave=e=>{Iy(e)&&(e.preventDefault(),this.dragDepth=Math.max(0,this.dragDepth-1),this.dragDepth===0&&(this.dragActive=!1))},this.handleDrop=e=>{if(!Iy(e))return;e.preventDefault(),this.dragDepth=0,this.dragActive=!1;let t=Fy(e.dataTransfer?.files),n=this.context;t.length>0&&n!==void 0&&Ny(n,t)},this.handleDestinationInput=e=>{let t=e.currentTarget instanceof HTMLInputElement?e.currentTarget:void 0;this.destinationFolder=t?.value??``,this.formError=``},this.handleCreateDirsChange=e=>{let t=e.currentTarget instanceof HTMLInputElement?e.currentTarget:void 0;this.createDirs=t?.checked??!0},this.handleOverwriteChange=e=>{let t=e.currentTarget instanceof HTMLInputElement?e.currentTarget:void 0;this.overwrite=t?.checked??!1},this.handleDialogKeyDown=e=>{e.key===`Escape`&&(e.preventDefault(),this.closeUploadDialog())}}willUpdate(e){if(!e.has(`context`))return;let t=e.get(`context`);t!==void 0&&this.context!==void 0&&Py(t)!==Py(this.context)&&this.resetPendingUpload()}updated(){this.syncUploadModal()}disconnectedCallback(){this.releaseUploadModal(),super.disconnectedCallback()}render(){let e=this.context;return e===void 0?h`<p class="muted">Files unavailable.</p>`:h`
|
|
501
501
|
<section
|
|
502
502
|
class=${this.dragActive?`files-panel dragging`:`files-panel`}
|
|
503
503
|
@dragenter=${this.handleDragEnter}
|
|
@@ -544,11 +544,11 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
544
544
|
<span>${t.name}</span>
|
|
545
545
|
</button>
|
|
546
546
|
${i?r.map(t=>this.renderTreeEntry(e,t,n+1)):null}
|
|
547
|
-
`}selectTreeEntry(e,t){t.type===`directory`?e.onExpandDir(t.path):e.onSelectFile(t.path)}renderUploadProgress(e){let t=
|
|
547
|
+
`}selectTreeEntry(e,t){t.type===`directory`?e.onExpandDir(t.path):e.onSelectFile(t.path)}renderUploadProgress(e){let t=Ay(e.state.workspaceUploadBatches,{projectId:e.workspace.projectId,workspaceId:e.workspace.id,machineId:e.machine.id});return t.length===0?null:h`
|
|
548
548
|
<section class="upload-progress" aria-label="Workspace uploads">
|
|
549
549
|
<div class="upload-progress-header">
|
|
550
550
|
<strong>Uploads</strong>
|
|
551
|
-
<small>${
|
|
551
|
+
<small>${Ry(t)}</small>
|
|
552
552
|
</div>
|
|
553
553
|
${t.map(t=>this.renderUploadBatch(e,t))}
|
|
554
554
|
</section>
|
|
@@ -556,12 +556,12 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
556
556
|
<article class=${`upload-batch ${t.status}`}>
|
|
557
557
|
<div class="upload-batch-heading">
|
|
558
558
|
<div>
|
|
559
|
-
<strong>${
|
|
559
|
+
<strong>${zy(t)}</strong>
|
|
560
560
|
<small>${t.destinationFolder===``?`workspace root`:t.destinationFolder}</small>
|
|
561
561
|
</div>
|
|
562
|
-
<span>${
|
|
562
|
+
<span>${By(t)}</span>
|
|
563
563
|
</div>
|
|
564
|
-
<progress max="1" .value=${
|
|
564
|
+
<progress max="1" .value=${Vy(t)}></progress>
|
|
565
565
|
<div class="upload-file-list">
|
|
566
566
|
${t.files.map(e=>this.renderUploadFile(e))}
|
|
567
567
|
</div>
|
|
@@ -569,13 +569,13 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
569
569
|
${t.status===`uploading`?h`<button @click=${()=>{e.onCancelWorkspaceUpload(t.id)}}>Cancel</button>`:h`<button @click=${()=>{e.onClearWorkspaceUpload(t.id)}}>Dismiss</button>`}
|
|
570
570
|
</div>
|
|
571
571
|
</article>
|
|
572
|
-
`}renderUploadFile(e){let t=
|
|
572
|
+
`}renderUploadFile(e){let t=Uy(e);return h`
|
|
573
573
|
<div class=${`upload-file ${e.status}`}>
|
|
574
574
|
<div class="upload-file-main">
|
|
575
575
|
<span>${e.name}</span>
|
|
576
576
|
<small>${t}</small>
|
|
577
577
|
</div>
|
|
578
|
-
<span class="upload-file-status">${
|
|
578
|
+
<span class="upload-file-status">${Hy(e)}</span>
|
|
579
579
|
</div>
|
|
580
580
|
`}renderUploadDialog(e,t){let n=t.files.length;return h`
|
|
581
581
|
<div class="dialog-backdrop" @mousedown=${()=>{this.closeUploadDialog()}}>
|
|
@@ -620,7 +620,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
620
620
|
</form>
|
|
621
621
|
</section>
|
|
622
622
|
</div>
|
|
623
|
-
`}openUploadReview(e){let t=this.context,n=
|
|
623
|
+
`}openUploadReview(e){let t=this.context,n=My(t?.workspaceUploadDefaultFolder??``);this.pendingUpload={files:e},this.destinationFolder=n.destinationFolder,this.overwrite=n.overwrite,this.createDirs=n.createDirs,this.formError=``}submitUploadReview(e,t,n){e.preventDefault();let r=jy(n.files,this.destinationFolder);if(r!==void 0){this.formError=r;return}t.onStartWorkspaceUpload(n.files,{destinationFolder:this.destinationFolder,createDirs:this.createDirs,overwrite:this.overwrite,selectUploadedFile:!0})!==void 0&&this.closeUploadDialog()}closeUploadDialog(){this.pendingUpload=void 0,this.formError=``}syncUploadModal(){let e=this.uploadDialogBackdrop,t=this.uploadDialog;if(!(e instanceof HTMLElement)||!(t instanceof HTMLElement)){this.releaseUploadModal();return}if(this.uploadModalRegistration!==void 0){this.applyUploadModalAccessibility(t,this.uploadModalRegistration.isTop);return}let n=Bg({element:e,paintElement:Ly(this),focus:()=>{(this.renderRoot.querySelector(`#workspace-upload-destination`)??t).focus()},onTopChange:e=>{this.applyUploadModalAccessibility(t,e)}});this.uploadModalRegistration=n,n.focus()}applyUploadModalAccessibility(e,t){e.setAttribute(`aria-modal`,t?`true`:`false`),t?e.removeAttribute(`aria-hidden`):e.setAttribute(`aria-hidden`,`true`)}releaseUploadModal(){let e=this.uploadModalRegistration;this.uploadModalRegistration=void 0,e?.unregister()}resetPendingUpload(){this.closeUploadDialog(),this.dragDepth=0,this.dragActive=!1}static{this.styles=[i_,o`
|
|
624
624
|
:host { flex: 1 1 auto; }
|
|
625
625
|
workspace-file-viewer { flex: 1 1 auto; min-height: 0; }
|
|
626
626
|
.files-panel { position: relative; flex: 1 1 auto; min-height: 0; display: flex; flex-direction: column; }
|
|
@@ -667,7 +667,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
667
667
|
.review-file span { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
668
668
|
.dialog-error { border: 1px solid var(--pi-danger); border-radius: 8px; background: color-mix(in srgb, var(--pi-danger) 10%, transparent); color: var(--pi-danger); padding: 9px; line-height: 1.35; overflow-wrap: anywhere; }
|
|
669
669
|
footer { display: flex; justify-content: flex-end; gap: 8px; padding-top: 4px; }
|
|
670
|
-
`]}};H([S({attribute:!1})],Dy.prototype,`context`,void 0),H([w(`#workspace-upload-input`)],Dy.prototype,`uploadInput`,void 0),H([w(`.dialog-backdrop`)],Dy.prototype,`uploadDialogBackdrop`,void 0),H([w(`.upload-dialog`)],Dy.prototype,`uploadDialog`,void 0),H([C()],Dy.prototype,`pendingUpload`,void 0),H([C()],Dy.prototype,`destinationFolder`,void 0),H([C()],Dy.prototype,`overwrite`,void 0),H([C()],Dy.prototype,`createDirs`,void 0),H([C()],Dy.prototype,`formError`,void 0),H([C()],Dy.prototype,`dragActive`,void 0),Dy=H([x(`workspace-files-panel`)],Dy);function Oy(e,t){return Object.values(e).filter(e=>e.projectId===t.projectId&&e.workspaceId===t.workspaceId&&e.machineId===t.machineId).sort((e,t)=>t.startedAt.localeCompare(e.startedAt))}function ky(e,t){if(e.length===0)return`Choose at least one file to upload.`;for(let n of e)try{Ws(t,n.name)}catch(e){return y(e)}}function Ay(e){return{destinationFolder:e,createDirs:!0,overwrite:!1}}function jy(e,t){if(t.length!==0)return e.onStartWorkspaceUpload(t,{destinationFolder:e.workspaceUploadDefaultFolder,createDirs:!0,overwrite:!1,selectUploadedFile:!0})}function My(e){return`${e.machine.id}:${e.workspace.projectId}:${e.workspace.id}`}function Ny(e){return e==null?[]:Array.from(e)}function Py(e){return Array.from(e.dataTransfer?.types??[]).includes(`Files`)}function Fy(e){let t=e.getRootNode();return t instanceof ShadowRoot&&t.host instanceof HTMLElement?t.host:e}function Iy(e){let t=e.filter(e=>e.status===`uploading`).length;return t===0?`${String(e.length)} recent`:`${String(t)} uploading`}function Ly(e){let t=e.files.length,n=t===1?`file`:`files`;switch(e.status){case`completed`:return`Uploaded ${String(t)} ${n}`;case`error`:return`Upload failed for ${String(t)} ${n}`;case`cancelled`:return`Upload cancelled for ${String(t)} ${n}`;case`uploading`:return`Uploading ${String(t)} ${n}`}}function Ry(e){switch(e.status){case`completed`:return`Done`;case`error`:return`Failed`;case`cancelled`:return`Cancelled`;case`uploading`:return Hy(e.percent)}}function zy(e){return e.status===`uploading`?e.percent:1}function By(e){switch(e.status){case`pending`:return`Pending`;case`uploading`:return Hy(e.percent);case`completed`:return`Done`;case`error`:return`Error`;case`cancelled`:return`Cancelled`}}function Vy(e){return e.error===void 0?e.response===void 0?`${e.path} · ${Fg(e.loaded)} / ${Fg(e.total)}`:`Wrote ${e.response.path}`:e.error}function Hy(e){return`${String(Math.round(Math.max(0,Math.min(1,e))*100))}%`}function Uy(){return[{id:`workspace.files`,title:`Files`,icon:Mg(`files`),order:10,routeAliases:[`files`],render:Wy},{id:`workspace.terminal`,title:`Terminal`,icon:Mg(`terminal`),order:30,badge:e=>e.activeTerminalCount>0?e.activeTerminalCount:void 0,render:Gy}]}function Wy(e){return h`<workspace-files-panel .context=${e}></workspace-files-panel>`}function Gy(e){return Ky(),h`<terminal-panel .workspace=${e.workspace} .machineId=${e.machine.id} .selectedTerminalId=${e.selectedTerminalId} .autoStart=${e.terminalAutoStart} .onSelectTerminal=${e.onSelectTerminal}></terminal-panel>`}function Ky(){vy(()=>import(`./TerminalPanel-BBN-7SPs.js`),__vite__mapDeps([4,5,6]),import.meta.url)}var qy={apiVersion:2,name:`PI WEB Core`,activate:()=>({contributions:{actions:wg(),workspacePanels:Uy()}})},Jy={"--pi-bg":`#0d1117`,"--pi-surface":`#161b22`,"--pi-surface-hover":`#21262d`,"--pi-terminal-bg":`#05070a`,"--pi-terminal-text":`#e6edf3`,"--pi-border":`#30363d`,"--pi-border-muted":`#21262d`,"--pi-text":`#e6edf3`,"--pi-text-secondary":`#c9d1d9`,"--pi-text-bright":`#f0f6fc`,"--pi-muted":`#8b949e`,"--pi-dim":`#6e7681`,"--pi-accent":`#58a6ff`,"--pi-accent-border":`#2f81f7`,"--pi-selection-bg":`#0d2847`,"--pi-success":`#3fb950`,"--pi-success-border":`#238636`,"--pi-success-bg":`#0f1b12`,"--pi-success-surface":`#0f2a16`,"--pi-success-ring":`#3fb95055`,"--pi-warning":`#d29922`,"--pi-warning-border":`#6e5200`,"--pi-warning-surface":`#1f1a10`,"--pi-danger":`#ff7b72`,"--pi-purple":`#d2a8ff`,"--pi-purple-border":`#a371f7`,"--pi-purple-surface":`#21132f`,"--pi-overlay":`#0008`,"--pi-shadow-soft":`#0006`,"--pi-shadow":`#0008`,"--pi-shadow-strong":`#000b`,"--pi-bg-overlay-soft":`#0d1117dd`,"--pi-bg-overlay":`#0d1117e6`,"--pi-success-bg-overlay":`#0f1b12ee`,"--pi-terminal-selection":`#264f78`},Yy={"--pi-bg":`#070912`,"--pi-surface":`#101527`,"--pi-surface-hover":`#151b31`,"--pi-terminal-bg":`#050710`,"--pi-terminal-text":`#f7f4ff`,"--pi-border":`#26304f`,"--pi-border-muted":`#26304f`,"--pi-text":`#f7f4ff`,"--pi-text-secondary":`#aaa4bd`,"--pi-text-bright":`#ffffff`,"--pi-muted":`#aaa4bd`,"--pi-dim":`#817a99`,"--pi-accent":`#7c3cff`,"--pi-accent-border":`#5a47b0`,"--pi-selection-bg":`#1d2547`,"--pi-success":`#00f0d8`,"--pi-success-border":`#00f0d8`,"--pi-success-bg":`#071e22`,"--pi-success-surface":`#092d31`,"--pi-success-ring":`#00f0d855`,"--pi-warning":`#ffb000`,"--pi-warning-border":`#ffb000`,"--pi-warning-surface":`#16140d`,"--pi-danger":`#ff4f7b`,"--pi-purple":`#b7a2ff`,"--pi-purple-border":`#7c3cff`,"--pi-purple-surface":`#181026`,"--pi-overlay":`#0008`,"--pi-shadow-soft":`#0006`,"--pi-shadow":`#0008`,"--pi-shadow-strong":`#000b`,"--pi-bg-overlay-soft":`#070912dd`,"--pi-bg-overlay":`#070912e6`,"--pi-success-bg-overlay":`#071e22ee`,"--pi-terminal-selection":`#3d4a78`},Xy={"--pi-bg":`#f7f1e6`,"--pi-surface":`#fff9ee`,"--pi-surface-hover":`#f0e6d6`,"--pi-terminal-bg":`#15131b`,"--pi-terminal-text":`#fff9ee`,"--pi-border":`#c9bca8`,"--pi-border-muted":`#d8cdbc`,"--pi-text":`#15131b`,"--pi-text-secondary":`#15131b`,"--pi-text-bright":`#15131b`,"--pi-muted":`#5f586a`,"--pi-dim":`#766f7e`,"--pi-accent":`#6430d8`,"--pi-accent-border":`#6430d8`,"--pi-selection-bg":`#eadff8`,"--pi-success":`#008c82`,"--pi-success-border":`#008c82`,"--pi-success-bg":`#e1f4ef`,"--pi-success-surface":`#d7f0ec`,"--pi-success-ring":`#008c8255`,"--pi-warning":`#b05f00`,"--pi-warning-border":`#b05f00`,"--pi-warning-surface":`#fff2d2`,"--pi-danger":`#b51d49`,"--pi-purple":`#6430d8`,"--pi-purple-border":`#6430d8`,"--pi-purple-surface":`#eadff8`,"--pi-overlay":`#15131b66`,"--pi-shadow-soft":`#15131b22`,"--pi-shadow":`#15131b33`,"--pi-shadow-strong":`#15131b44`,"--pi-bg-overlay-soft":`#f7f1e6dd`,"--pi-bg-overlay":`#f7f1e6e6`,"--pi-success-bg-overlay":`#e1f4efee`,"--pi-terminal-selection":`#8d7b64`},Zy={"--pi-bg":`#000000`,"--pi-surface":`#0d0d0d`,"--pi-surface-hover":`#1a1a1a`,"--pi-terminal-bg":`#000000`,"--pi-terminal-text":`#ffffff`,"--pi-border":`#5c5c5c`,"--pi-border-muted":`#3d3d3d`,"--pi-text":`#ffffff`,"--pi-text-secondary":`#e6e6e6`,"--pi-text-bright":`#ffffff`,"--pi-muted":`#b3b3b3`,"--pi-dim":`#8f8f8f`,"--pi-accent":`#4dc3ff`,"--pi-accent-border":`#4dc3ff`,"--pi-selection-bg":`#00263a`,"--pi-success":`#3ff05a`,"--pi-success-border":`#3ff05a`,"--pi-success-bg":`#001a06`,"--pi-success-surface":`#00280b`,"--pi-success-ring":`#3ff05a66`,"--pi-warning":`#ffcc33`,"--pi-warning-border":`#ffcc33`,"--pi-warning-surface":`#251c00`,"--pi-danger":`#ff6b6b`,"--pi-purple":`#c9a3ff`,"--pi-purple-border":`#c9a3ff`,"--pi-purple-surface":`#180d29`,"--pi-overlay":`#000000cc`,"--pi-shadow-soft":`#00000099`,"--pi-shadow":`#000000bb`,"--pi-shadow-strong":`#000000e6`,"--pi-bg-overlay-soft":`#000000dd`,"--pi-bg-overlay":`#000000f2`,"--pi-success-bg-overlay":`#001a06ee`,"--pi-terminal-selection":`#00456b`},Qy={"--pi-bg":`#14110e`,"--pi-surface":`#1d1915`,"--pi-surface-hover":`#26211b`,"--pi-terminal-bg":`#100d0b`,"--pi-terminal-text":`#e8ddcc`,"--pi-border":`#3a3229`,"--pi-border-muted":`#2b2520`,"--pi-text":`#e8ddcc`,"--pi-text-secondary":`#cbbfad`,"--pi-text-bright":`#fff4e0`,"--pi-muted":`#9c9081`,"--pi-dim":`#7a6f62`,"--pi-accent":`#e0a35c`,"--pi-accent-border":`#b8813f`,"--pi-selection-bg":`#2e2415`,"--pi-success":`#8fbf6f`,"--pi-success-border":`#6d9954`,"--pi-success-bg":`#161c12`,"--pi-success-surface":`#1e2718`,"--pi-success-ring":`#8fbf6f55`,"--pi-warning":`#d9a441`,"--pi-warning-border":`#9c7429`,"--pi-warning-surface":`#241c0f`,"--pi-danger":`#d97b6c`,"--pi-purple":`#b79ad1`,"--pi-purple-border":`#8d74a8`,"--pi-purple-surface":`#221a2b`,"--pi-overlay":`#0a0806cc`,"--pi-shadow-soft":`#00000055`,"--pi-shadow":`#00000077`,"--pi-shadow-strong":`#000000aa`,"--pi-bg-overlay-soft":`#14110edd`,"--pi-bg-overlay":`#14110ee6`,"--pi-success-bg-overlay":`#161c12ee`,"--pi-terminal-selection":`#3d3121`},$y={"--pi-bg":`#fbfbf9`,"--pi-surface":`#ffffff`,"--pi-surface-hover":`#f1f1ee`,"--pi-terminal-bg":`#1c1c1a`,"--pi-terminal-text":`#fbfbf9`,"--pi-border":`#c7c7c1`,"--pi-border-muted":`#e0e0da`,"--pi-text":`#1c1c1a`,"--pi-text-secondary":`#33332f`,"--pi-text-bright":`#000000`,"--pi-muted":`#5e5e58`,"--pi-dim":`#7c7c75`,"--pi-accent":`#1f5fd0`,"--pi-accent-border":`#1f5fd0`,"--pi-selection-bg":`#e2ecfb`,"--pi-success":`#0f7a4a`,"--pi-success-border":`#0f7a4a`,"--pi-success-bg":`#e6f5ed`,"--pi-success-surface":`#d9efe3`,"--pi-success-ring":`#0f7a4a55`,"--pi-warning":`#8a5a00`,"--pi-warning-border":`#8a5a00`,"--pi-warning-surface":`#fdf0d5`,"--pi-danger":`#b02020`,"--pi-purple":`#5b3fc7`,"--pi-purple-border":`#5b3fc7`,"--pi-purple-surface":`#ece7fb`,"--pi-overlay":`#1c1c1a66`,"--pi-shadow-soft":`#1c1c1a1a`,"--pi-shadow":`#1c1c1a2b`,"--pi-shadow-strong":`#1c1c1a40`,"--pi-bg-overlay-soft":`#fbfbf9dd`,"--pi-bg-overlay":`#fbfbf9e6`,"--pi-success-bg-overlay":`#e6f5edee`,"--pi-terminal-selection":`#9ab4d8`},eb={apiVersion:2,name:`PI WEB Themes`,activate:()=>({contributions:{themes:[{id:`pi-web-dark`,name:`PI WEB Dark`,description:`Dark PI WEB palette.`,order:10,colorScheme:`dark`,tokens:Yy},{id:`pi-web-light`,name:`PI WEB Light`,description:`Light PI WEB palette.`,order:20,colorScheme:`light`,tokens:Xy},{id:`classic`,name:`PI WEB Classic`,description:`The original PI WEB dark palette.`,order:30,colorScheme:`dark`,tokens:Jy},{id:`high-contrast`,name:`High Contrast`,description:`Near-black behind near-white, for bright rooms and tired eyes.`,order:40,colorScheme:`dark`,tokens:Zy},{id:`night`,name:`Night`,description:`Warm and dim, with an amber accent instead of blue light.`,order:50,colorScheme:`dark`,tokens:Qy},{id:`paper`,name:`Paper`,description:`Untinted ink on paper, for daylight and for screenshots.`,order:60,colorScheme:`light`,tokens:$y}],themePairs:[{id:`pi-web`,name:`PI WEB`,description:`Follow the system light/dark preference with PI WEB themes.`,order:10,light:`pi-web-light`,dark:`pi-web-dark`}]}})};async function tb(e=`pi-web-plugins/manifest.json`,t={}){let n=Ze(e),r=await ib(n);if(r===void 0)return{registrations:[],failures:[]};let i=[],a=[],o=await Promise.all(r.plugins.map(async e=>{if(t.shouldLoadPlugin?.(e)!==!1)try{let r=nb(e.module,n),i=lb(await(t.moduleLoader??rb)(r),r);return{registration:{id:t.machineId===void 0?e.id:Sl(t.machineId,e.id),plugin:i,machineSpecific:e.machineSpecific,...e.backendRevision===void 0?{}:{backendRevision:e.backendRevision},...t.machineId===void 0?{}:{machineId:t.machineId,sourcePluginId:e.id}}}}catch(t){return{failure:{entry:e,error:t}}}}));for(let e of o)e!==void 0&&(`registration`in e?i.push(e.registration):a.push(e.failure));return{registrations:i,failures:a}}function nb(e,t,n){return e.startsWith(`/`)?n===void 0?Ze(e):Ze(e,n):new URL(e,t).toString()}async function rb(e){return vy(()=>import(e),[],import.meta.url)}async function ib(e){let t=await fetch(e,{cache:`no-store`});if(t.status!==404){if(!t.ok)throw Error(await ob(t));return ab(await t.json())}}function ab(e){if(!db(e)||!Array.isArray(e.plugins))throw Error(`Invalid plugin manifest`);let t=e.plugins.map(e=>{if(!db(e)||typeof e.id!=`string`||typeof e.module!=`string`||e.module===``)throw Error(`Invalid plugin manifest entry`);let t=e.id;if(!mn(t))throw Error(`Invalid plugin manifest id: ${t}`);if(hn(t))throw Error(`Reserved plugin manifest id: ${t}`);return{id:t,module:e.module,...sb(e.backendRevision),machineSpecific:cb(e.machineSpecific)}}),n=new Set;for(let e of t){if(n.has(e.id))throw Error(`Duplicate plugin manifest id: ${e.id}`);n.add(e.id)}return{plugins:t}}async function ob(e){let t;try{let n=await e.json();if(db(n)){let e=n.error,r=n.detail;t=typeof r==`string`?`${typeof e==`string`?`${e}: `:``}${r}`:typeof e==`string`?e:void 0}}catch{}return`Failed to load plugin manifest (${`${String(e.status)}${e.statusText===``?``:` ${e.statusText}`}`})${t===void 0?``:`: ${t}`}`}function sb(e){if(e===void 0)return{};try{return{backendRevision:xs(e)}}catch{throw Error(`Invalid plugin manifest entry`)}}function cb(e){if(e===void 0)return!1;if(typeof e!=`boolean`)throw Error(`Invalid plugin manifest entry`);return e}function lb(e,t){if(!db(e))throw Error(`Plugin module ${t} did not export an object`);let n=e.default;if(db(n)&&n.apiVersion!==2)throw Error(`Unsupported browser plugin API version for ${t}: ${String(n.apiVersion)} (expected 2)`);if(!ub(n))throw Error(`Plugin module ${t} default export is not a PiWebPlugin`);return n}function ub(e){return db(e)&&e.apiVersion===2&&typeof e.name==`string`&&typeof e.activate==`function`}function db(e){return typeof e==`object`&&!!e}var fb=/^[a-z][a-z0-9.-]*$/u,pb=/^[a-z][a-z0-9.-]*$/u,mb=/^[a-z][a-z0-9.-]*:[a-z][a-z0-9.-]*$/u,hb=/^[a-z][a-z0-9.-]*(?::[a-z][a-z0-9.-]*)?$/u,gb=new WeakMap,_b=new WeakMap,vb=new WeakMap,yb=class{constructor(){this.actions=[],this.workspacePanels=[],this.workspaceLabels=[],this.themes=[],this.themePairs=[],this.pluginIds=new Set,this.registeringPluginIds=new Set,this.gatewayPluginIds=new Set,this.gatewayMachineSpecificPluginIds=new Set,this.remoteMachineSpecificPluginIds=new Map,this.contributionIds=new Set}register(e){let{plugin:t}=e,n=e.id,r=e.sourcePluginId??n;this.validatePluginId(n),this.validatePluginId(r);let i=this.parseMachineSpecific(n,e.machineSpecific),a=this.parseBackendRevision(n,e.backendRevision);if(this.pluginIds.has(n)||this.registeringPluginIds.has(n))throw Error(`Duplicate plugin id: ${n}`);if(!this.isRemoteDuplicateHiddenByGateway(e.sourcePluginId,e.machineId,i)){this.registeringPluginIds.add(n);try{let o=t.apiVersion;if(o!==2)throw Error(`Unsupported browser plugin API version for ${r}: ${String(o)} (expected 2)`);let s=t.activate(Object.freeze({apiVersion:2,pluginId:r,runtimePluginId:n,html:h,svg:je})).contributions,c=new Set,l=(s.actions??[]).map(t=>this.qualifyAction(n,t,e.machineId,e.sourcePluginId,c)),u=(s.workspacePanels??[]).map(t=>this.qualifyWorkspacePanel(n,t,e.machineId,e.sourcePluginId,a,c)),d=(s.workspaceLabels??[]).map(t=>this.qualifyWorkspaceLabelContribution(n,t,e.machineId,e.sourcePluginId,a,c)),f=e.machineId===void 0?(s.themes??[]).map(e=>this.qualifyTheme(n,e,c)):[],p=e.machineId===void 0?(s.themePairs??[]).map(e=>this.qualifyThemePair(n,e,c)):[];this.pluginIds.add(n);for(let e of c)this.contributionIds.add(e);this.actions.push(...l),this.workspacePanels.push(...u),this.workspaceLabels.push(...d),this.themes.push(...f),this.themePairs.push(...p),e.machineId===void 0?(this.gatewayPluginIds.add(n),i&&this.gatewayMachineSpecificPluginIds.add(n)):e.sourcePluginId!==void 0&&i&&Db(this.remoteMachineSpecificPluginIds,e.sourcePluginId,e.machineId)}finally{this.registeringPluginIds.delete(n)}}}hasPlugin(e){return this.pluginIds.has(e)}shouldLoadRemotePlugin(e,t=!1){return!this.gatewayPluginIds.has(e)||this.gatewayMachineSpecificPluginIds.has(e)||t}getActions(e){let t=Ab(e);return this.actions.filter(e=>this.isContributionActive(e.pluginId,e.machineId,t,e.sourcePluginId)).map(t=>{let n=bb(e,t.pluginId),r=t.enabled?.(n),i=r===!1?t.disabledReason?.(n):void 0,a={id:t.id,pluginId:t.pluginId,localId:t.localId,...t.machineId===void 0?{}:{machineId:t.machineId},title:t.title,run:()=>t.run(n)};return t.description!==void 0&&(a.description=t.description),t.shortcut!==void 0&&(a.shortcut=t.shortcut),t.shortcutAliases!==void 0&&(a.shortcutAliases=[...t.shortcutAliases]),t.group!==void 0&&(a.group=t.group),r!==void 0&&(a.enabled=r),i!==void 0&&i!==``&&(a.disabledReason=i),a})}getWorkspacePanels(){return[...this.workspacePanels].sort((e,t)=>(e.order??1e3)-(t.order??1e3)||e.title.localeCompare(t.title))}resolveWorkspacePanelRouteId(e,t){let n=this.workspacePanels.filter(e=>this.isContributionActive(e.pluginId,e.machineId,t,e.sourcePluginId)),r=n.find(t=>t.id===e);if(r!==void 0)return r.id;let i=n.filter(t=>t.routeAliases?.includes(e)===!0);if(i.length===1)return i[0]?.id;i.length>1&&console.warn(`Ambiguous PI WEB workspace panel route: ${e}`)}async invalidateWorkspacePanels(e,t){await Promise.all(this.workspacePanels.map(async n=>{if(!(n.onInvalidate===void 0||t!==void 0&&n.id!==t))try{await n.onInvalidate(e)}catch(e){console.warn(`Failed to invalidate PI WEB plugin panel ${n.id}`,e)}}))}getThemes(){return[...this.themes].sort((e,t)=>(e.order??1e3)-(t.order??1e3)||e.name.localeCompare(t.name))}getThemePairs(){return[...this.themePairs].sort((e,t)=>(e.order??1e3)-(t.order??1e3)||e.name.localeCompare(t.name))}getWorkspaceLabelItems(e){return[...this.workspaceLabels].sort((e,t)=>(e.order??1e3)-(t.order??1e3)||e.id.localeCompare(t.id)).flatMap(t=>t.visible?.(e)===!1?[]:t.items(e))}qualifyAction(e,t,n,r,i){let a=this.qualify(e,t.id,i),o=`${r??e}:${t.id}`,s=this.parseShortcutAliases(a,t.shortcutAliases,o);return{...t,id:a,pluginId:e,localId:t.id,...s.length===0?{}:{shortcutAliases:s},...n===void 0?{}:{machineId:n},...r===void 0?{}:{sourcePluginId:r}}}qualifyWorkspacePanel(e,t,n,r,i,a){let o=this.qualify(e,t.id,a),s=t.badge,c=t.visible,l=t.onInvalidate,u=Eb(e,r,i),d=`${r??e}:${t.id}`,f=this.parseRouteAliases(o,t.routeAliases,d);return{...t,id:o,pluginId:e,localId:t.id,...f.length===0?{}:{routeAliases:f},...n===void 0?{}:{machineId:n},...r===void 0?{}:{sourcePluginId:r},visible:t=>this.isContributionActive(e,n,t.machine.id,r)&&(c?.(xb(t,u))??!0),...s===void 0?{}:{badge:t=>this.isContributionActive(e,n,t.machine.id,r)?s(xb(t,u)):void 0},...l===void 0?{}:{onInvalidate:t=>this.isContributionActive(e,n,t.machine.id,r)?l(xb(t,u)):void 0},render:e=>t.render(xb(e,u))}}qualifyWorkspaceLabelContribution(e,t,n,r,i,a){let o=this.qualify(e,t.id,a),s=t.visible,c=t.items,l=Eb(e,r,i);return{...t,id:o,pluginId:e,localId:t.id,...n===void 0?{}:{machineId:n},visible:t=>this.isContributionActive(e,n,t.machine.id,r)&&(s?.(Sb(t,l))??!0),items:t=>this.isContributionActive(e,n,t.machine.id,r)?c(Sb(t,l)):[]}}qualifyTheme(e,t,n){let r=this.qualify(e,t.id,n);return{...t,id:r,pluginId:e,localId:t.id}}qualifyThemePair(e,t,n){let r=this.qualify(e,t.id,n);return{...t,id:r,pluginId:e,localId:t.id,light:this.qualifyReference(e,t.light),dark:this.qualifyReference(e,t.dark)}}qualify(e,t,n){this.validateLocalId(t);let r=`${e}:${t}`;if(this.contributionIds.has(r)||n.has(r))throw Error(`Duplicate contribution id: ${r}`);return n.add(r),r}qualifyReference(e,t){return this.validateLocalId(t),`${e}:${t}`}isContributionActive(e,t,n,r){return t===void 0?!this.isGatewayPluginHiddenForMachine(e,n):t===n&&!this.isRemotePluginHiddenByGateway(r,t)}isRemoteDuplicateHiddenByGateway(e,t,n){return e!==void 0&&t!==void 0&&this.gatewayPluginIds.has(e)&&!this.gatewayMachineSpecificPluginIds.has(e)&&!n}isRemotePluginHiddenByGateway(e,t){return e===void 0||this.gatewayMachineSpecificPluginIds.has(e)||this.remoteMachineSpecificPluginIds.get(e)?.has(t)===!0?!1:this.gatewayPluginIds.has(e)}isGatewayPluginHiddenForMachine(e,t){return t!==`local`&&(this.gatewayMachineSpecificPluginIds.has(e)||this.remoteMachineSpecificPluginIds.get(e)?.has(t)===!0)}parseShortcutAliases(e,t,n){let r=[...new Set([...t??[],n])].filter(t=>t!==e),i=r.find(e=>!Ob(e));if(i!==void 0)throw Error(`Invalid shortcut alias for ${e}: ${i}`);return r.filter(Ob)}parseRouteAliases(e,t,n){let r=[...new Set([...t??[],n])].filter(t=>t!==e);for(let t of r)if(!hb.test(t))throw Error(`Invalid workspace panel route alias for ${e}: ${t}`);return r}validatePluginId(e){if(!fb.test(e))throw Error(`Invalid plugin id: ${e}`)}validateLocalId(e){if(!pb.test(e))throw Error(`Invalid contribution id: ${e}`)}parseBackendRevision(e,t){if(t!==void 0)try{return xs(t)}catch{throw Error(`Invalid plugin backend revision for ${e}`)}}parseMachineSpecific(e,t){if(t===void 0)return!1;if(typeof t!=`boolean`)throw Error(`Invalid plugin machineSpecific value for ${e}: ${kb(t)}`);return t}};function bb(e,t){return gb.get(e)?.(t)??e}function xb(e,t){return _b.get(e)?.(t)??e}function Sb(e,t){return vb.get(e)?.(t)??e}function Cb(e,t){return gb.set(e,t),e}function wb(e,t){return _b.set(e,t),e}function Tb(e,t){return vb.set(e,t),e}function Eb(e,t,n){return Object.freeze({registrationPluginId:e,sourcePluginId:t??e,...n===void 0?{}:{backendRevision:n}})}function Db(e,t,n){let r=e.get(t);r===void 0?e.set(t,new Set([n])):r.add(n)}function Ob(e){return mb.test(e)}function kb(e){if(typeof e==`string`)return e;if(typeof e==`number`||typeof e==`boolean`||typeof e==`bigint`||typeof e==`symbol`||typeof e==`function`||e==null)return String(e);try{return JSON.stringify(e)}catch{return Object.prototype.toString.call(e)}}function Ab(e){return e.state.selectedMachine?.id??`local`}function jb(e,t,n,r=As){let i=e.backendRevision;if(i!==void 0)return{request:(a,o)=>r({pluginId:e.sourcePluginId,backendRevision:i,machineId:n,projectId:t.projectId,workspaceId:t.id},a,o)}}function Mb(e,t,n,r){return{readFile:r=>e.workspaceFile(t.projectId,t.id,r,n),listFiles:r=>e.workspaceTree(t.projectId,t.id,r,n),writeFile:async(i,a,o)=>{let s=await e.writeWorkspaceFile(t.projectId,t.id,i,a,o,n);return r?.(),s},deleteFile:async i=>{let a=await e.deleteWorkspaceFile(t.projectId,t.id,i,n);return r?.(),a},moveFile:async(i,a,o)=>{let s=await e.moveWorkspaceFile(t.projectId,t.id,i,a,o,n);return r?.(),s}}}var Nb=class{constructor(e,t={}){this.callbacks=e,this.refreshes=new Jl,this.connected=!1,this.onFocus=()=>{this.handleResumeSignal()},this.onVisibilityChange=()=>{this.isDocumentVisible()&&this.handleResumeSignal()},this.windowTarget=t.windowTarget??Pb(),this.documentTarget=t.documentTarget??Fb(),this.isDocumentVisible=t.isDocumentVisible??Ib,this.scheduleFrame=t.scheduleFrame??Lb}connect(){this.connected||(this.connected=!0,this.windowTarget?.addEventListener(`focus`,this.onFocus),this.documentTarget?.addEventListener(`visibilitychange`,this.onVisibilityChange))}disconnect(){this.connected&&(this.connected=!1,this.windowTarget?.removeEventListener(`focus`,this.onFocus),this.documentTarget?.removeEventListener(`visibilitychange`,this.onVisibilityChange),this.scheduledRefresh?.cancel(),this.scheduledRefresh=void 0)}handleResumeSignal(){this.callbacks.onResumeSignal(),this.scheduledRefresh===void 0&&(this.scheduledRefresh=this.scheduleFrame(()=>{this.scheduledRefresh=void 0,this.connected&&this.refreshes.request(`browser-resume`,async()=>{this.connected&&await this.callbacks.refreshAfterResume()}).catch(e=>{this.callbacks.onRefreshError(e)})}))}};function Pb(){return typeof window>`u`?void 0:window}function Fb(){return typeof document>`u`?void 0:document}function Ib(){return typeof document>`u`||document.visibilityState===`visible`}function Lb(e){if(typeof window<`u`&&typeof window.requestAnimationFrame==`function`){let t=window.requestAnimationFrame(()=>{e()});return{cancel:()=>{window.cancelAnimationFrame(t)}}}let t=globalThis.setTimeout(e,0);return{cancel:()=>{globalThis.clearTimeout(t)}}}var Rb=[`machines`,`projects`,`workspaces`,`sessions`];function zb(e){return e.selectedWorkspace===void 0?e.selectedProject===void 0?`projects`:`workspaces`:`sessions`}function Bb(e,t){if(e!==`none`)return e??zb(t)}function Vb(e,t){return Bb(t.expanded,t.state)!==e}function Hb(e,t,n){return Bb(e,n.state)===t?`none`:t}function Ub(e){return e.workspaceCount===1?`sessions`:`workspaces`}function Wb(e){return Rb[Rb.indexOf(e)+1]}var Gb=class{hostConnected(){}constructor(e,t){this.host=e,this.getState=t,e.addController(this)}expandedSection(){return Bb(this.expanded,this.getState())}isCollapsed(e){return Vb(e,{expanded:this.expanded,state:this.getState()})}toggle(e){this.setExpanded(Hb(this.expanded,e,{state:this.getState()}))}expand(e){this.setExpanded(e)}advanceAfterSelection(e,t){let n=e===`projects`?Ub({workspaceCount:t?.workspaceCount}):Wb(e);n!==void 0&&this.expand(n)}open(e,t){this.expand(e),t()}setExpanded(e){this.expanded!==e&&(this.expanded=e,this.host.requestUpdate())}};function Kb(e){return e.isMobileNavigationLayout||e.navigationCollapsed}var qb=class{hostConnected(){}constructor(e){this.host=e,this.navigationPanelCollapsed=!1,this.workspacePanelCollapsed=!1,e.addController(this)}toggleNavigationPanel(){this.navigationPanelCollapsed=!this.navigationPanelCollapsed,this.host.requestUpdate()}toggleWorkspacePanel(){this.workspacePanelCollapsed=!this.workspacePanelCollapsed,this.host.requestUpdate()}expandNavigationPanel(){this.navigationPanelCollapsed&&(this.navigationPanelCollapsed=!1,this.host.requestUpdate())}expandWorkspacePanel(){this.workspacePanelCollapsed&&(this.workspacePanelCollapsed=!1,this.host.requestUpdate())}shellClass(e,t=!0){return[`shell`,Yb(e),...this.navigationPanelCollapsed?[`navigation-panel-collapsed`]:[],...Jb(this.workspacePanelCollapsed,t)?[]:[`workspace-panel-collapsed`]].join(` `)}};function Jb(e,t){return!e&&t}function Yb(e){return e===`navigation`?`navigation-view`:e===`chat`?`chat-view`:`workspace-view`}var Xb=`pi-web:panel-sizes:v1`,Zb={navigation:{minWidth:180,maxWidth:4096,defaultWidth:340,keyboardStep:24,largeKeyboardStep:72},workspace:{minWidth:240,maxWidth:4096,defaultWidth:480,keyboardStep:24,largeKeyboardStep:72}},Qb=class{constructor(e,t={}){this.host=e,e.addController(this),this.storage=t.storage??fx(),this.panelSizes=ix(this.storage)}hostConnected(){}constraints(e){return $b(e)}panelWidth(e,t){return rx(e,t??this.storedPanelWidth(e)??this.constraints(e).defaultWidth)}resizePanel(e,t,n={}){let r=rx(e,t);this.storedPanelWidth(e)!==r&&(this.panelSizes=cx(this.panelSizes,e,r),n.persist!==!1&&this.persistPanelSizes(),this.host.requestUpdate())}resetPanel(e,t={}){this.storedPanelWidth(e)!==void 0&&(this.panelSizes=lx(this.panelSizes,e),t.persist!==!1&&this.persistPanelSizes(),this.host.requestUpdate())}resetPanels(e={}){this.panelSizes.navigationPanelWidth===void 0&&this.panelSizes.workspacePanelWidth===void 0||(this.panelSizes={},e.persist!==!1&&this.persistPanelSizes(),this.host.requestUpdate())}persistPanelSizes(){ax(this.panelSizes,this.storage)}shellStyle(e={}){let t=[];return this.panelSizes.navigationPanelWidth!==void 0&&t.push(`--navigation-panel-size: ${dx(rx(`navigation`,this.panelSizes.navigationPanelWidth,e.navigation))};`),this.panelSizes.workspacePanelWidth!==void 0&&t.push(`--workspace-panel-size: ${dx(rx(`workspace`,this.panelSizes.workspacePanelWidth,e.workspace))};`),t.join(` `)}storedPanelWidth(e){return e===`navigation`?this.panelSizes.navigationPanelWidth:this.panelSizes.workspacePanelWidth}};function $b(e){return Zb[e]}function ex(e,t,n){return e===`navigation`?n-t:t-n}function tx(e,t,n,r,i=$b(e)){return rx(e,t+ex(e,n,r),i)}function nx(e,t,n,r={}){let i=r.constraints??$b(e);if(n===`Home`)return i.minWidth;if(n===`End`)return i.maxWidth;let a=ux(e,n,r.largeStep===!0?i.largeKeyboardStep:i.keyboardStep);if(a!==void 0)return rx(e,t+a,i)}function rx(e,t,n=$b(e)){return Number.isFinite(t)?Math.round(Math.min(Math.max(t,n.minWidth),n.maxWidth)):n.defaultWidth}function ix(e=fx()){try{let t=e?.getItem(Xb);return t==null||t===``?{}:ox(JSON.parse(t))}catch{return{}}}function ax(e,t=fx()){if(t!==void 0)try{if(e.navigationPanelWidth===void 0&&e.workspacePanelWidth===void 0){t.removeItem(Xb);return}let n={version:1};e.navigationPanelWidth!==void 0&&(n.navigationPanelWidth=rx(`navigation`,e.navigationPanelWidth)),e.workspacePanelWidth!==void 0&&(n.workspacePanelWidth=rx(`workspace`,e.workspacePanelWidth)),t.setItem(Xb,JSON.stringify(n))}catch{}}function ox(e){if(!px(e)||e.version!==1)return{};let t={},n=sx(e.navigationPanelWidth),r=sx(e.workspacePanelWidth);return n!==void 0&&(t.navigationPanelWidth=rx(`navigation`,n)),r!==void 0&&(t.workspacePanelWidth=rx(`workspace`,r)),t}function sx(e){return typeof e==`number`&&Number.isFinite(e)?e:void 0}function cx(e,t,n){return t===`navigation`?{...e,navigationPanelWidth:n}:{...e,workspacePanelWidth:n}}function lx(e,t){return t===`navigation`?e.workspacePanelWidth===void 0?{}:{workspacePanelWidth:e.workspacePanelWidth}:e.navigationPanelWidth===void 0?{}:{navigationPanelWidth:e.navigationPanelWidth}}function ux(e,t,n){if(e===`navigation`)return t===`ArrowRight`?n:t===`ArrowLeft`?-n:void 0;if(t===`ArrowLeft`)return n;if(t===`ArrowRight`)return-n}function dx(e){return`${String(Math.round(e))}px`}function fx(){try{return typeof window>`u`?void 0:window.localStorage}catch{return}}function px(e){return typeof e==`object`&&!!e}function mx(){let e=new URLSearchParams(window.location.search);return{machineId:vx(e.get(`machine`)),projectId:vx(e.get(`project`)),workspaceId:vx(e.get(`workspace`)),sessionId:vx(e.get(`session`)),tool:vx(e.get(`tool`)),view:vx(e.get(`view`))}}function hx(e,t){return{machineId:e.machineId,projectId:e.projectId,workspaceId:e.workspaceId,sessionId:e.sessionId,tool:e.tool===void 0?void 0:gx(e.tool,t),view:e.view===`chat`?`chat`:e.view===void 0?void 0:gx(e.view,t)}}function gx(e,t){return t(e)??(yx(e)?e:void 0)}function _x(e,t){let n=new URL(window.location.href);n.searchParams.delete(`machine`),n.searchParams.delete(`project`),n.searchParams.delete(`workspace`),n.searchParams.delete(`session`),n.searchParams.delete(`tool`),n.searchParams.delete(`view`),e.machineId!==void 0&&e.machineId!==``&&e.machineId!==`local`&&n.searchParams.set(`machine`,e.machineId),e.projectId!==void 0&&e.projectId!==``&&n.searchParams.set(`project`,e.projectId),e.workspaceId!==void 0&&e.workspaceId!==``&&n.searchParams.set(`workspace`,e.workspaceId),e.sessionId!==void 0&&e.sessionId!==``&&n.searchParams.set(`session`,e.sessionId),e.tool!==void 0&&e.tool!==``&&n.searchParams.set(`tool`,e.tool),e.view!==void 0&&e.view!==``&&n.searchParams.set(`view`,e.view),`${n.pathname}${n.search}${n.hash}`!=`${window.location.pathname}${window.location.search}${window.location.hash}`&&vt(String(n),t?.replace===!0)}function vx(e){return e===null||e===``?void 0:e}function yx(e){return/^[a-z][a-z0-9.-]*:[a-z][a-z0-9.-]*$/u.test(e)}function bx(){return Sx(new URLSearchParams(window.location.search).get(`settings`))}function xx(e,t){let n=new URL(window.location.href);e===void 0?n.searchParams.delete(`settings`):n.searchParams.set(`settings`,e),`${n.pathname}${n.search}${n.hash}`!=`${window.location.pathname}${window.location.search}${window.location.hash}`&&vt(String(n),t?.replace===!0)}function Sx(e){if(e===`general`)return`general`;if(e===`appearance`||e===`theme`||e===`themes`)return`appearance`;if(e===`sessiond`||e===`sessions`)return`sessiond`;if(e===`machines`)return`machines`;if(e===`packages`||e===`pi-packages`)return`packages`;if(e===`plugins`)return`plugins`;if(e===`shortcuts`||e===`keyboard`||e===`keyboard-shortcuts`)return`shortcuts`}function Cx(e,t){return t===void 0?e:e.map(e=>Tx(e,t))}function wx(e,t){let n=new Set(qm(e,t,{enabledOnly:!0}).filter(e=>e.active).map(e=>e.action.id));return Cx(e,t).map(e=>e.shortcut!==void 0&&!n.has(e.id)?Ex(e):e)}function Tx(e,t){let n=eh(e,t);return n===void 0?e:n===null?Ex(e):{...e,shortcut:n}}function Ex(e){let t={...e};return delete t.shortcut,t}function Dx(e,t){let n=t.api??es,r=t.pollIntervalMs??1e3,i=t.setTimeout??Ax(),a=t.clearTimeout??jx();return{async runCommand(o){let s=await n.runTerminalCommand(e,o);return o.open===!0&&t.openTerminal(o.workspace,{terminalId:s.terminalId}),{run:s,completed:Ox(s,n,r,i,a)}},listCommandRuns:e=>n.listCommandRuns(e),getCommandRun:e=>n.getCommandRun(e),open:e=>{t.openTerminal(void 0,e)}}}function Ox(e,t,n,r,i){return kx(e)?Promise.resolve(e):new Promise((a,o)=>{let s,c=!1,l=e=>{c||(c=!0,s!==void 0&&i(s),a(e))},u=e=>{c||(c=!0,s!==void 0&&i(s),o(e instanceof Error?e:Error(String(e))))},d=()=>{t.getCommandRun(e.id).then(e=>{if(e!==void 0&&kx(e)){l(e);return}s=r(d,n)}).catch(u)};s=r(d,n)})}function kx(e){return e.status===`succeeded`||e.status===`failed`}function Ax(){return(e,t)=>globalThis.setTimeout(e,t)}function jx(){return e=>{globalThis.clearTimeout(e)}}var Mx=class{constructor(e){this.callbacks=e,this.fired=!1}start(e){this.cancel(),this.origin=e,this.fired=!1,this.handle=this.callbacks.setTimer(()=>{this.handle=void 0,this.fired=!0,this.callbacks.onLongPress()},500)}move(e){if(this.origin===void 0)return;let t=Math.abs(e.clientX-this.origin.clientX),n=Math.abs(e.clientY-this.origin.clientY);(t>10||n>10)&&this.cancel()}cancel(){this.handle!==void 0&&this.callbacks.clearTimer(this.handle),this.handle=void 0,this.origin=void 0}consumeSuppressedClick(){let e=this.fired;return this.fired=!1,e}},Nx=class{constructor(e){this.open=e,this.longPress=new Mx({onLongPress:()=>{this.heldId!==void 0&&this.open(this.heldId,this.heldAnchor??null)},setTimer:(e,t)=>window.setTimeout(e,t),clearTimer:e=>{window.clearTimeout(e)}})}pointerDown(e,t){t.pointerType!==`mouse`&&(this.heldId=e,this.heldAnchor=t.currentTarget,this.longPress.start(t))}pointerMove(e){this.longPress.move(e)}cancel(){this.longPress.cancel(),this.heldId=void 0,this.heldAnchor=void 0}consumeSuppressedClick(){return this.longPress.consumeSuppressedClick()}contextMenu(e,t){t.preventDefault(),this.open(e,t.currentTarget)}};function Px(e){return`${e.label}\n${e.path}`}function Fx(e,t){return Of(e,t,Px)}function Ix(e,t){return Of(e,t,e=>e.name)}function Lx(e,t){return e>=8||Ef(t).length>0}var Rx=0,zx=120;function Bx(e,t={}){if(typeof HTMLElement>`u`||typeof window>`u`||!(e instanceof HTMLElement))return``;let n=e.getBoundingClientRect(),r=t.constrainTo===`viewport`?Hx():Vx(e),i=window.innerWidth,a=window.innerHeight,o=Math.max(0,r.left),s=Math.min(i,r.right),c=Math.max(0,r.top),l=Math.min(a,r.bottom),u=Math.min(n.right,s),d=l-n.bottom-Rx,f=n.top-c-Rx;return[...d<zx&&f>d?[`bottom: ${Ux(a-n.top+Rx)};`,`max-height: ${Ux(Math.max(0,f))};`]:[`top: ${Ux(n.bottom+Rx)};`,`max-height: ${Ux(Math.max(0,d))};`],`right: ${Ux(Math.max(0,i-u))};`,`max-width: ${Ux(Math.max(0,u-o))};`].join(` `)}function Vx(e){let t=e.getRootNode();return typeof ShadowRoot<`u`&&t instanceof ShadowRoot&&t.host instanceof HTMLElement?t.host.getBoundingClientRect():Hx()}function Hx(){return{top:0,right:window.innerWidth,bottom:window.innerHeight,left:0}}function Ux(e){return`${String(Math.round(e))}px`}function Wx(e,t=`Active`,n){if(e===void 0)return n===void 0?void 0:h`<span class="activity-indicator unread" role="img" aria-label=${n} title=${n}></span>`;if(n===void 0)return h`<span class=${`activity-indicator ${e}`} role="img" aria-label=${t} title=${t}></span>`;let r=`${n} · ${t}`;return h`<span class="unread-ring" role="img" aria-label=${r} title=${r}><span class=${`activity-indicator ${e}`} aria-hidden="true"></span></span>`}function Gx(e){if(e!==void 0)return e[Qt.working]===!0?`session`:e[Qt.terminal]===!0?`terminal`:Object.entries(e).some(([e,t])=>t&&e!==Qt.unread)?`session`:void 0}function Kx(e){return e?.[Qt.unread]===!0}var qx={working:`Session is working`,background:`Turn ended; background work still running`,idle:`Session is done`,asking:`Waiting for your answer`,error:`Session hit an error`};function Jx(e,t){if(e===void 0)return t===void 0?void 0:h`<span class="session-state unread" role="img" aria-label=${t} title=${t}></span>`;let n=e===`sending`?`Sending message`:qx[e],r=t===void 0?n:`${t} · ${n}`;if(e===`idle`)return h`<span class=${t===void 0?`session-state idle`:`session-state idle unread`} role="img" aria-label=${r} title=${r}></span>`;if(e===`working`||e===`sending`){let i=e===`working`?[0,1,2].map(e=>h`<span class="state-dot working-dot" style=${`animation-delay:${(e*.14).toFixed(2)}s`}></span>`):null;return t===void 0?h`<span class="session-state working" role="img" aria-label=${n} title=${n}><span class="state-dots">${i}</span></span>`:h`<span class="unread-ring" role="img" aria-label=${r} title=${r}><span class="session-state working" aria-hidden="true"><span class="state-dots">${i}</span></span></span>`}return t===void 0?h`<span class=${`session-state ${e}`} role="img" aria-label=${n} title=${n}></span>`:h`<span class="unread-ring" role="img" aria-label=${r} title=${r}><span class=${`session-state ${e}`} aria-hidden="true"></span></span>`}function Yx(e,t=`Active`,n){let r=Wx(e,t,n);if(r!==void 0)return h`<span class="action-activity">${r}</span>`}var Xx=[`a[href]`,`button`,`input`,`select`,`textarea`,`summary`,`[role='button']`,`[role='link']`,`[contenteditable='true']`].join(`,`);function Zx(e){return e.composedPath().some(e=>Qx(e,Xx))}function Qx(e,t){if(typeof Element<`u`&&e instanceof Element)return e.matches(t);if(!(`matches`in e))return!1;let{matches:n}=e;return typeof n==`function`&&n.call(e,t)===!0}function $x(e,t){return Zx(e)?!1:e.key===`Enter`||e.key===` `?(e.preventDefault(),t.activate(),!0):e.key===`ArrowUp`?tS(e,()=>{nS(e.currentTarget,-1)}):e.key===`ArrowDown`?tS(e,()=>{nS(e.currentTarget,1)}):e.key===`Home`?tS(e,()=>{rS(e.currentTarget,0)}):e.key===`End`?tS(e,()=>{rS(e.currentTarget,-1)}):e.key===`ArrowLeft`&&t.previousSection!==void 0?tS(e,t.previousSection):e.key===`ArrowRight`&&t.nextSection!==void 0?tS(e,t.nextSection):e.key===`Escape`&&t.cancel!==void 0&&tS(e,t.cancel)}function eS(e,t={}){let n=e.querySelector(`.action-row.selected`)??e.querySelector(`.action-row`)??(t.fallbackSelector===void 0?void 0:e.querySelector(t.fallbackSelector));return n==null?!1:(n.focus(),n.scrollIntoView({block:`nearest`}),!0)}function tS(e,t){return e.preventDefault(),e.stopPropagation?.(),t(),!0}function nS(e,t){let n=aS(e),r=sS(e);if(r===void 0||n.length===0)return;let i=n.indexOf(r);i<0||iS(n,i+t)}function rS(e,t){let n=aS(e);n.length!==0&&iS(n,t<0?n.length-1:t)}function iS(e,t){let n=e[Math.min(Math.max(t,0),e.length-1)];n?.focus(),n?.scrollIntoView({block:`nearest`})}function aS(e){let t=sS(e)?.getRootNode();return t===void 0||!oS(t)?[]:Array.from(t.querySelectorAll(`.action-row`))}function oS(e){return typeof Document<`u`&&e instanceof Document||typeof DocumentFragment<`u`&&e instanceof DocumentFragment}function sS(e){if(!(typeof HTMLElement>`u`||!(e instanceof HTMLElement)))return e.closest(`.action-row`)??void 0}var U=class extends _{constructor(...e){super(...e),this.machines=[],this.searchQuery=``,this.statuses={},this.statusSnapshots={},this.collapsible=!1,this.collapsed=!1,this.gestures=new Nx((e,t)=>{this.openMenu(e,t)}),this.menuStyle=``,this.onDocumentClick=e=>{e.composedPath().includes(this)||(this.openMenuMachineId=void 0)}}connectedCallback(){super.connectedCallback(),document.addEventListener(`click`,this.onDocumentClick)}disconnectedCallback(){document.removeEventListener(`click`,this.onDocumentClick),super.disconnectedCallback()}updated(e){e.has(`machines`)&&this.openMenuMachineId!==void 0&&!this.machines.some(e=>e.id===this.openMenuMachineId)&&(this.openMenuMachineId=void 0),e.has(`collapsed`)&&this.collapsed&&(this.openMenuMachineId=void 0)}async focusSelectedOrFirst(){return await this.updateComplete,eS(this.renderRoot,{fallbackSelector:`.section-toggle`})}renderSearch(){if(!Lx(this.machines.length,this.searchQuery))return null;let e=this.searchQuery!==``;return h`
|
|
670
|
+
`]}};H([S({attribute:!1})],ky.prototype,`context`,void 0),H([w(`#workspace-upload-input`)],ky.prototype,`uploadInput`,void 0),H([w(`.dialog-backdrop`)],ky.prototype,`uploadDialogBackdrop`,void 0),H([w(`.upload-dialog`)],ky.prototype,`uploadDialog`,void 0),H([C()],ky.prototype,`pendingUpload`,void 0),H([C()],ky.prototype,`destinationFolder`,void 0),H([C()],ky.prototype,`overwrite`,void 0),H([C()],ky.prototype,`createDirs`,void 0),H([C()],ky.prototype,`formError`,void 0),H([C()],ky.prototype,`dragActive`,void 0),ky=H([x(`workspace-files-panel`)],ky);function Ay(e,t){return Object.values(e).filter(e=>e.projectId===t.projectId&&e.workspaceId===t.workspaceId&&e.machineId===t.machineId).sort((e,t)=>t.startedAt.localeCompare(e.startedAt))}function jy(e,t){if(e.length===0)return`Choose at least one file to upload.`;for(let n of e)try{Ws(t,n.name)}catch(e){return y(e)}}function My(e){return{destinationFolder:e,createDirs:!0,overwrite:!1}}function Ny(e,t){if(t.length!==0)return e.onStartWorkspaceUpload(t,{destinationFolder:e.workspaceUploadDefaultFolder,createDirs:!0,overwrite:!1,selectUploadedFile:!0})}function Py(e){return`${e.machine.id}:${e.workspace.projectId}:${e.workspace.id}`}function Fy(e){return e==null?[]:Array.from(e)}function Iy(e){return Array.from(e.dataTransfer?.types??[]).includes(`Files`)}function Ly(e){let t=e.getRootNode();return t instanceof ShadowRoot&&t.host instanceof HTMLElement?t.host:e}function Ry(e){let t=e.filter(e=>e.status===`uploading`).length;return t===0?`${String(e.length)} recent`:`${String(t)} uploading`}function zy(e){let t=e.files.length,n=t===1?`file`:`files`;switch(e.status){case`completed`:return`Uploaded ${String(t)} ${n}`;case`error`:return`Upload failed for ${String(t)} ${n}`;case`cancelled`:return`Upload cancelled for ${String(t)} ${n}`;case`uploading`:return`Uploading ${String(t)} ${n}`}}function By(e){switch(e.status){case`completed`:return`Done`;case`error`:return`Failed`;case`cancelled`:return`Cancelled`;case`uploading`:return Wy(e.percent)}}function Vy(e){return e.status===`uploading`?e.percent:1}function Hy(e){switch(e.status){case`pending`:return`Pending`;case`uploading`:return Wy(e.percent);case`completed`:return`Done`;case`error`:return`Error`;case`cancelled`:return`Cancelled`}}function Uy(e){return e.error===void 0?e.response===void 0?`${e.path} · ${Fg(e.loaded)} / ${Fg(e.total)}`:`Wrote ${e.response.path}`:e.error}function Wy(e){return`${String(Math.round(Math.max(0,Math.min(1,e))*100))}%`}function Gy(){return[{id:`workspace.files`,title:`Files`,icon:Mg(`files`),order:10,routeAliases:[`files`],render:Ky},{id:`workspace.terminal`,title:`Terminal`,icon:Mg(`terminal`),order:30,badge:e=>e.activeTerminalCount>0?e.activeTerminalCount:void 0,render:qy}]}function Ky(e){return h`<workspace-files-panel .context=${e}></workspace-files-panel>`}function qy(e){return Jy(),h`<terminal-panel .workspace=${e.workspace} .machineId=${e.machine.id} .selectedTerminalId=${e.selectedTerminalId} .autoStart=${e.terminalAutoStart} .onSelectTerminal=${e.onSelectTerminal}></terminal-panel>`}function Jy(){by(()=>import(`./TerminalPanel-haos8c1O.js`),__vite__mapDeps([4,5,6]),import.meta.url)}var Yy={apiVersion:2,name:`PI WEB Core`,activate:()=>({contributions:{actions:wg(),workspacePanels:Gy()}})},Xy={"--pi-bg":`#0d1117`,"--pi-surface":`#161b22`,"--pi-surface-hover":`#21262d`,"--pi-terminal-bg":`#05070a`,"--pi-terminal-text":`#e6edf3`,"--pi-border":`#30363d`,"--pi-border-muted":`#21262d`,"--pi-text":`#e6edf3`,"--pi-text-secondary":`#c9d1d9`,"--pi-text-bright":`#f0f6fc`,"--pi-muted":`#8b949e`,"--pi-dim":`#6e7681`,"--pi-accent":`#58a6ff`,"--pi-accent-border":`#2f81f7`,"--pi-selection-bg":`#0d2847`,"--pi-success":`#3fb950`,"--pi-success-border":`#238636`,"--pi-success-bg":`#0f1b12`,"--pi-success-surface":`#0f2a16`,"--pi-success-ring":`#3fb95055`,"--pi-warning":`#d29922`,"--pi-warning-border":`#6e5200`,"--pi-warning-surface":`#1f1a10`,"--pi-danger":`#ff7b72`,"--pi-purple":`#d2a8ff`,"--pi-purple-border":`#a371f7`,"--pi-purple-surface":`#21132f`,"--pi-overlay":`#0008`,"--pi-shadow-soft":`#0006`,"--pi-shadow":`#0008`,"--pi-shadow-strong":`#000b`,"--pi-bg-overlay-soft":`#0d1117dd`,"--pi-bg-overlay":`#0d1117e6`,"--pi-success-bg-overlay":`#0f1b12ee`,"--pi-terminal-selection":`#264f78`},Zy={"--pi-bg":`#070912`,"--pi-surface":`#101527`,"--pi-surface-hover":`#151b31`,"--pi-terminal-bg":`#050710`,"--pi-terminal-text":`#f7f4ff`,"--pi-border":`#26304f`,"--pi-border-muted":`#26304f`,"--pi-text":`#f7f4ff`,"--pi-text-secondary":`#aaa4bd`,"--pi-text-bright":`#ffffff`,"--pi-muted":`#aaa4bd`,"--pi-dim":`#817a99`,"--pi-accent":`#7c3cff`,"--pi-accent-border":`#5a47b0`,"--pi-selection-bg":`#1d2547`,"--pi-success":`#00f0d8`,"--pi-success-border":`#00f0d8`,"--pi-success-bg":`#071e22`,"--pi-success-surface":`#092d31`,"--pi-success-ring":`#00f0d855`,"--pi-warning":`#ffb000`,"--pi-warning-border":`#ffb000`,"--pi-warning-surface":`#16140d`,"--pi-danger":`#ff4f7b`,"--pi-purple":`#b7a2ff`,"--pi-purple-border":`#7c3cff`,"--pi-purple-surface":`#181026`,"--pi-overlay":`#0008`,"--pi-shadow-soft":`#0006`,"--pi-shadow":`#0008`,"--pi-shadow-strong":`#000b`,"--pi-bg-overlay-soft":`#070912dd`,"--pi-bg-overlay":`#070912e6`,"--pi-success-bg-overlay":`#071e22ee`,"--pi-terminal-selection":`#3d4a78`},Qy={"--pi-bg":`#f7f1e6`,"--pi-surface":`#fff9ee`,"--pi-surface-hover":`#f0e6d6`,"--pi-terminal-bg":`#15131b`,"--pi-terminal-text":`#fff9ee`,"--pi-border":`#c9bca8`,"--pi-border-muted":`#d8cdbc`,"--pi-text":`#15131b`,"--pi-text-secondary":`#15131b`,"--pi-text-bright":`#15131b`,"--pi-muted":`#5f586a`,"--pi-dim":`#766f7e`,"--pi-accent":`#6430d8`,"--pi-accent-border":`#6430d8`,"--pi-selection-bg":`#eadff8`,"--pi-success":`#008c82`,"--pi-success-border":`#008c82`,"--pi-success-bg":`#e1f4ef`,"--pi-success-surface":`#d7f0ec`,"--pi-success-ring":`#008c8255`,"--pi-warning":`#b05f00`,"--pi-warning-border":`#b05f00`,"--pi-warning-surface":`#fff2d2`,"--pi-danger":`#b51d49`,"--pi-purple":`#6430d8`,"--pi-purple-border":`#6430d8`,"--pi-purple-surface":`#eadff8`,"--pi-overlay":`#15131b66`,"--pi-shadow-soft":`#15131b22`,"--pi-shadow":`#15131b33`,"--pi-shadow-strong":`#15131b44`,"--pi-bg-overlay-soft":`#f7f1e6dd`,"--pi-bg-overlay":`#f7f1e6e6`,"--pi-success-bg-overlay":`#e1f4efee`,"--pi-terminal-selection":`#8d7b64`},$y={"--pi-bg":`#000000`,"--pi-surface":`#0d0d0d`,"--pi-surface-hover":`#1a1a1a`,"--pi-terminal-bg":`#000000`,"--pi-terminal-text":`#ffffff`,"--pi-border":`#5c5c5c`,"--pi-border-muted":`#3d3d3d`,"--pi-text":`#ffffff`,"--pi-text-secondary":`#e6e6e6`,"--pi-text-bright":`#ffffff`,"--pi-muted":`#b3b3b3`,"--pi-dim":`#8f8f8f`,"--pi-accent":`#4dc3ff`,"--pi-accent-border":`#4dc3ff`,"--pi-selection-bg":`#00263a`,"--pi-success":`#3ff05a`,"--pi-success-border":`#3ff05a`,"--pi-success-bg":`#001a06`,"--pi-success-surface":`#00280b`,"--pi-success-ring":`#3ff05a66`,"--pi-warning":`#ffcc33`,"--pi-warning-border":`#ffcc33`,"--pi-warning-surface":`#251c00`,"--pi-danger":`#ff6b6b`,"--pi-purple":`#c9a3ff`,"--pi-purple-border":`#c9a3ff`,"--pi-purple-surface":`#180d29`,"--pi-overlay":`#000000cc`,"--pi-shadow-soft":`#00000099`,"--pi-shadow":`#000000bb`,"--pi-shadow-strong":`#000000e6`,"--pi-bg-overlay-soft":`#000000dd`,"--pi-bg-overlay":`#000000f2`,"--pi-success-bg-overlay":`#001a06ee`,"--pi-terminal-selection":`#00456b`},eb={"--pi-bg":`#14110e`,"--pi-surface":`#1d1915`,"--pi-surface-hover":`#26211b`,"--pi-terminal-bg":`#100d0b`,"--pi-terminal-text":`#e8ddcc`,"--pi-border":`#3a3229`,"--pi-border-muted":`#2b2520`,"--pi-text":`#e8ddcc`,"--pi-text-secondary":`#cbbfad`,"--pi-text-bright":`#fff4e0`,"--pi-muted":`#9c9081`,"--pi-dim":`#7a6f62`,"--pi-accent":`#e0a35c`,"--pi-accent-border":`#b8813f`,"--pi-selection-bg":`#2e2415`,"--pi-success":`#8fbf6f`,"--pi-success-border":`#6d9954`,"--pi-success-bg":`#161c12`,"--pi-success-surface":`#1e2718`,"--pi-success-ring":`#8fbf6f55`,"--pi-warning":`#d9a441`,"--pi-warning-border":`#9c7429`,"--pi-warning-surface":`#241c0f`,"--pi-danger":`#d97b6c`,"--pi-purple":`#b79ad1`,"--pi-purple-border":`#8d74a8`,"--pi-purple-surface":`#221a2b`,"--pi-overlay":`#0a0806cc`,"--pi-shadow-soft":`#00000055`,"--pi-shadow":`#00000077`,"--pi-shadow-strong":`#000000aa`,"--pi-bg-overlay-soft":`#14110edd`,"--pi-bg-overlay":`#14110ee6`,"--pi-success-bg-overlay":`#161c12ee`,"--pi-terminal-selection":`#3d3121`},tb={"--pi-bg":`#fbfbf9`,"--pi-surface":`#ffffff`,"--pi-surface-hover":`#f1f1ee`,"--pi-terminal-bg":`#1c1c1a`,"--pi-terminal-text":`#fbfbf9`,"--pi-border":`#c7c7c1`,"--pi-border-muted":`#e0e0da`,"--pi-text":`#1c1c1a`,"--pi-text-secondary":`#33332f`,"--pi-text-bright":`#000000`,"--pi-muted":`#5e5e58`,"--pi-dim":`#7c7c75`,"--pi-accent":`#1f5fd0`,"--pi-accent-border":`#1f5fd0`,"--pi-selection-bg":`#e2ecfb`,"--pi-success":`#0f7a4a`,"--pi-success-border":`#0f7a4a`,"--pi-success-bg":`#e6f5ed`,"--pi-success-surface":`#d9efe3`,"--pi-success-ring":`#0f7a4a55`,"--pi-warning":`#8a5a00`,"--pi-warning-border":`#8a5a00`,"--pi-warning-surface":`#fdf0d5`,"--pi-danger":`#b02020`,"--pi-purple":`#5b3fc7`,"--pi-purple-border":`#5b3fc7`,"--pi-purple-surface":`#ece7fb`,"--pi-overlay":`#1c1c1a66`,"--pi-shadow-soft":`#1c1c1a1a`,"--pi-shadow":`#1c1c1a2b`,"--pi-shadow-strong":`#1c1c1a40`,"--pi-bg-overlay-soft":`#fbfbf9dd`,"--pi-bg-overlay":`#fbfbf9e6`,"--pi-success-bg-overlay":`#e6f5edee`,"--pi-terminal-selection":`#9ab4d8`},nb={apiVersion:2,name:`PI WEB Themes`,activate:()=>({contributions:{themes:[{id:`pi-web-dark`,name:`PI WEB Dark`,description:`Dark PI WEB palette.`,order:10,colorScheme:`dark`,tokens:Zy},{id:`pi-web-light`,name:`PI WEB Light`,description:`Light PI WEB palette.`,order:20,colorScheme:`light`,tokens:Qy},{id:`classic`,name:`PI WEB Classic`,description:`The original PI WEB dark palette.`,order:30,colorScheme:`dark`,tokens:Xy},{id:`high-contrast`,name:`High Contrast`,description:`Near-black behind near-white, for bright rooms and tired eyes.`,order:40,colorScheme:`dark`,tokens:$y},{id:`night`,name:`Night`,description:`Warm and dim, with an amber accent instead of blue light.`,order:50,colorScheme:`dark`,tokens:eb},{id:`paper`,name:`Paper`,description:`Untinted ink on paper, for daylight and for screenshots.`,order:60,colorScheme:`light`,tokens:tb}],themePairs:[{id:`pi-web`,name:`PI WEB`,description:`Follow the system light/dark preference with PI WEB themes.`,order:10,light:`pi-web-light`,dark:`pi-web-dark`}]}})};async function rb(e=`pi-web-plugins/manifest.json`,t={}){let n=Ze(e),r=await ob(n);if(r===void 0)return{registrations:[],failures:[]};let i=[],a=[],o=await Promise.all(r.plugins.map(async e=>{if(t.shouldLoadPlugin?.(e)!==!1)try{let r=ib(e.module,n),i=db(await(t.moduleLoader??ab)(r),r);return{registration:{id:t.machineId===void 0?e.id:Sl(t.machineId,e.id),plugin:i,machineSpecific:e.machineSpecific,...e.backendRevision===void 0?{}:{backendRevision:e.backendRevision},...t.machineId===void 0?{}:{machineId:t.machineId,sourcePluginId:e.id}}}}catch(t){return{failure:{entry:e,error:t}}}}));for(let e of o)e!==void 0&&(`registration`in e?i.push(e.registration):a.push(e.failure));return{registrations:i,failures:a}}function ib(e,t,n){return e.startsWith(`/`)?n===void 0?Ze(e):Ze(e,n):new URL(e,t).toString()}async function ab(e){return by(()=>import(e),[],import.meta.url)}async function ob(e){let t=await fetch(e,{cache:`no-store`});if(t.status!==404){if(!t.ok)throw Error(await cb(t));return sb(await t.json())}}function sb(e){if(!pb(e)||!Array.isArray(e.plugins))throw Error(`Invalid plugin manifest`);let t=e.plugins.map(e=>{if(!pb(e)||typeof e.id!=`string`||typeof e.module!=`string`||e.module===``)throw Error(`Invalid plugin manifest entry`);let t=e.id;if(!mn(t))throw Error(`Invalid plugin manifest id: ${t}`);if(hn(t))throw Error(`Reserved plugin manifest id: ${t}`);return{id:t,module:e.module,...lb(e.backendRevision),machineSpecific:ub(e.machineSpecific)}}),n=new Set;for(let e of t){if(n.has(e.id))throw Error(`Duplicate plugin manifest id: ${e.id}`);n.add(e.id)}return{plugins:t}}async function cb(e){let t;try{let n=await e.json();if(pb(n)){let e=n.error,r=n.detail;t=typeof r==`string`?`${typeof e==`string`?`${e}: `:``}${r}`:typeof e==`string`?e:void 0}}catch{}return`Failed to load plugin manifest (${`${String(e.status)}${e.statusText===``?``:` ${e.statusText}`}`})${t===void 0?``:`: ${t}`}`}function lb(e){if(e===void 0)return{};try{return{backendRevision:xs(e)}}catch{throw Error(`Invalid plugin manifest entry`)}}function ub(e){if(e===void 0)return!1;if(typeof e!=`boolean`)throw Error(`Invalid plugin manifest entry`);return e}function db(e,t){if(!pb(e))throw Error(`Plugin module ${t} did not export an object`);let n=e.default;if(pb(n)&&n.apiVersion!==2)throw Error(`Unsupported browser plugin API version for ${t}: ${String(n.apiVersion)} (expected 2)`);if(!fb(n))throw Error(`Plugin module ${t} default export is not a PiWebPlugin`);return n}function fb(e){return pb(e)&&e.apiVersion===2&&typeof e.name==`string`&&typeof e.activate==`function`}function pb(e){return typeof e==`object`&&!!e}var mb=/^[a-z][a-z0-9.-]*$/u,hb=/^[a-z][a-z0-9.-]*$/u,gb=/^[a-z][a-z0-9.-]*:[a-z][a-z0-9.-]*$/u,_b=/^[a-z][a-z0-9.-]*(?::[a-z][a-z0-9.-]*)?$/u,vb=new WeakMap,yb=new WeakMap,bb=new WeakMap,xb=class{constructor(){this.actions=[],this.workspacePanels=[],this.workspaceLabels=[],this.themes=[],this.themePairs=[],this.pluginIds=new Set,this.registeringPluginIds=new Set,this.gatewayPluginIds=new Set,this.gatewayMachineSpecificPluginIds=new Set,this.remoteMachineSpecificPluginIds=new Map,this.contributionIds=new Set}register(e){let{plugin:t}=e,n=e.id,r=e.sourcePluginId??n;this.validatePluginId(n),this.validatePluginId(r);let i=this.parseMachineSpecific(n,e.machineSpecific),a=this.parseBackendRevision(n,e.backendRevision);if(this.pluginIds.has(n)||this.registeringPluginIds.has(n))throw Error(`Duplicate plugin id: ${n}`);if(!this.isRemoteDuplicateHiddenByGateway(e.sourcePluginId,e.machineId,i)){this.registeringPluginIds.add(n);try{let o=t.apiVersion;if(o!==2)throw Error(`Unsupported browser plugin API version for ${r}: ${String(o)} (expected 2)`);let s=t.activate(Object.freeze({apiVersion:2,pluginId:r,runtimePluginId:n,html:h,svg:je})).contributions,c=new Set,l=(s.actions??[]).map(t=>this.qualifyAction(n,t,e.machineId,e.sourcePluginId,c)),u=(s.workspacePanels??[]).map(t=>this.qualifyWorkspacePanel(n,t,e.machineId,e.sourcePluginId,a,c)),d=(s.workspaceLabels??[]).map(t=>this.qualifyWorkspaceLabelContribution(n,t,e.machineId,e.sourcePluginId,a,c)),f=e.machineId===void 0?(s.themes??[]).map(e=>this.qualifyTheme(n,e,c)):[],p=e.machineId===void 0?(s.themePairs??[]).map(e=>this.qualifyThemePair(n,e,c)):[];this.pluginIds.add(n);for(let e of c)this.contributionIds.add(e);this.actions.push(...l),this.workspacePanels.push(...u),this.workspaceLabels.push(...d),this.themes.push(...f),this.themePairs.push(...p),e.machineId===void 0?(this.gatewayPluginIds.add(n),i&&this.gatewayMachineSpecificPluginIds.add(n)):e.sourcePluginId!==void 0&&i&&kb(this.remoteMachineSpecificPluginIds,e.sourcePluginId,e.machineId)}finally{this.registeringPluginIds.delete(n)}}}hasPlugin(e){return this.pluginIds.has(e)}shouldLoadRemotePlugin(e,t=!1){return!this.gatewayPluginIds.has(e)||this.gatewayMachineSpecificPluginIds.has(e)||t}getActions(e){let t=Mb(e);return this.actions.filter(e=>this.isContributionActive(e.pluginId,e.machineId,t,e.sourcePluginId)).map(t=>{let n=Sb(e,t.pluginId),r=t.enabled?.(n),i=r===!1?t.disabledReason?.(n):void 0,a={id:t.id,pluginId:t.pluginId,localId:t.localId,...t.machineId===void 0?{}:{machineId:t.machineId},title:t.title,run:()=>t.run(n)};return t.description!==void 0&&(a.description=t.description),t.shortcut!==void 0&&(a.shortcut=t.shortcut),t.shortcutAliases!==void 0&&(a.shortcutAliases=[...t.shortcutAliases]),t.group!==void 0&&(a.group=t.group),r!==void 0&&(a.enabled=r),i!==void 0&&i!==``&&(a.disabledReason=i),a})}getWorkspacePanels(){return[...this.workspacePanels].sort((e,t)=>(e.order??1e3)-(t.order??1e3)||e.title.localeCompare(t.title))}resolveWorkspacePanelRouteId(e,t){let n=this.workspacePanels.filter(e=>this.isContributionActive(e.pluginId,e.machineId,t,e.sourcePluginId)),r=n.find(t=>t.id===e);if(r!==void 0)return r.id;let i=n.filter(t=>t.routeAliases?.includes(e)===!0);if(i.length===1)return i[0]?.id;i.length>1&&console.warn(`Ambiguous PI WEB workspace panel route: ${e}`)}async invalidateWorkspacePanels(e,t){await Promise.all(this.workspacePanels.map(async n=>{if(!(n.onInvalidate===void 0||t!==void 0&&n.id!==t))try{await n.onInvalidate(e)}catch(e){console.warn(`Failed to invalidate PI WEB plugin panel ${n.id}`,e)}}))}getThemes(){return[...this.themes].sort((e,t)=>(e.order??1e3)-(t.order??1e3)||e.name.localeCompare(t.name))}getThemePairs(){return[...this.themePairs].sort((e,t)=>(e.order??1e3)-(t.order??1e3)||e.name.localeCompare(t.name))}getWorkspaceLabelItems(e){return[...this.workspaceLabels].sort((e,t)=>(e.order??1e3)-(t.order??1e3)||e.id.localeCompare(t.id)).flatMap(t=>t.visible?.(e)===!1?[]:t.items(e))}qualifyAction(e,t,n,r,i){let a=this.qualify(e,t.id,i),o=`${r??e}:${t.id}`,s=this.parseShortcutAliases(a,t.shortcutAliases,o);return{...t,id:a,pluginId:e,localId:t.id,...s.length===0?{}:{shortcutAliases:s},...n===void 0?{}:{machineId:n},...r===void 0?{}:{sourcePluginId:r}}}qualifyWorkspacePanel(e,t,n,r,i,a){let o=this.qualify(e,t.id,a),s=t.badge,c=t.visible,l=t.onInvalidate,u=Ob(e,r,i),d=`${r??e}:${t.id}`,f=this.parseRouteAliases(o,t.routeAliases,d);return{...t,id:o,pluginId:e,localId:t.id,...f.length===0?{}:{routeAliases:f},...n===void 0?{}:{machineId:n},...r===void 0?{}:{sourcePluginId:r},visible:t=>this.isContributionActive(e,n,t.machine.id,r)&&(c?.(Cb(t,u))??!0),...s===void 0?{}:{badge:t=>this.isContributionActive(e,n,t.machine.id,r)?s(Cb(t,u)):void 0},...l===void 0?{}:{onInvalidate:t=>this.isContributionActive(e,n,t.machine.id,r)?l(Cb(t,u)):void 0},render:e=>t.render(Cb(e,u))}}qualifyWorkspaceLabelContribution(e,t,n,r,i,a){let o=this.qualify(e,t.id,a),s=t.visible,c=t.items,l=Ob(e,r,i);return{...t,id:o,pluginId:e,localId:t.id,...n===void 0?{}:{machineId:n},visible:t=>this.isContributionActive(e,n,t.machine.id,r)&&(s?.(wb(t,l))??!0),items:t=>this.isContributionActive(e,n,t.machine.id,r)?c(wb(t,l)):[]}}qualifyTheme(e,t,n){let r=this.qualify(e,t.id,n);return{...t,id:r,pluginId:e,localId:t.id}}qualifyThemePair(e,t,n){let r=this.qualify(e,t.id,n);return{...t,id:r,pluginId:e,localId:t.id,light:this.qualifyReference(e,t.light),dark:this.qualifyReference(e,t.dark)}}qualify(e,t,n){this.validateLocalId(t);let r=`${e}:${t}`;if(this.contributionIds.has(r)||n.has(r))throw Error(`Duplicate contribution id: ${r}`);return n.add(r),r}qualifyReference(e,t){return this.validateLocalId(t),`${e}:${t}`}isContributionActive(e,t,n,r){return t===void 0?!this.isGatewayPluginHiddenForMachine(e,n):t===n&&!this.isRemotePluginHiddenByGateway(r,t)}isRemoteDuplicateHiddenByGateway(e,t,n){return e!==void 0&&t!==void 0&&this.gatewayPluginIds.has(e)&&!this.gatewayMachineSpecificPluginIds.has(e)&&!n}isRemotePluginHiddenByGateway(e,t){return e===void 0||this.gatewayMachineSpecificPluginIds.has(e)||this.remoteMachineSpecificPluginIds.get(e)?.has(t)===!0?!1:this.gatewayPluginIds.has(e)}isGatewayPluginHiddenForMachine(e,t){return t!==`local`&&(this.gatewayMachineSpecificPluginIds.has(e)||this.remoteMachineSpecificPluginIds.get(e)?.has(t)===!0)}parseShortcutAliases(e,t,n){let r=[...new Set([...t??[],n])].filter(t=>t!==e),i=r.find(e=>!Ab(e));if(i!==void 0)throw Error(`Invalid shortcut alias for ${e}: ${i}`);return r.filter(Ab)}parseRouteAliases(e,t,n){let r=[...new Set([...t??[],n])].filter(t=>t!==e);for(let t of r)if(!_b.test(t))throw Error(`Invalid workspace panel route alias for ${e}: ${t}`);return r}validatePluginId(e){if(!mb.test(e))throw Error(`Invalid plugin id: ${e}`)}validateLocalId(e){if(!hb.test(e))throw Error(`Invalid contribution id: ${e}`)}parseBackendRevision(e,t){if(t!==void 0)try{return xs(t)}catch{throw Error(`Invalid plugin backend revision for ${e}`)}}parseMachineSpecific(e,t){if(t===void 0)return!1;if(typeof t!=`boolean`)throw Error(`Invalid plugin machineSpecific value for ${e}: ${jb(t)}`);return t}};function Sb(e,t){return vb.get(e)?.(t)??e}function Cb(e,t){return yb.get(e)?.(t)??e}function wb(e,t){return bb.get(e)?.(t)??e}function Tb(e,t){return vb.set(e,t),e}function Eb(e,t){return yb.set(e,t),e}function Db(e,t){return bb.set(e,t),e}function Ob(e,t,n){return Object.freeze({registrationPluginId:e,sourcePluginId:t??e,...n===void 0?{}:{backendRevision:n}})}function kb(e,t,n){let r=e.get(t);r===void 0?e.set(t,new Set([n])):r.add(n)}function Ab(e){return gb.test(e)}function jb(e){if(typeof e==`string`)return e;if(typeof e==`number`||typeof e==`boolean`||typeof e==`bigint`||typeof e==`symbol`||typeof e==`function`||e==null)return String(e);try{return JSON.stringify(e)}catch{return Object.prototype.toString.call(e)}}function Mb(e){return e.state.selectedMachine?.id??`local`}function Nb(e,t,n,r=As){let i=e.backendRevision;if(i!==void 0)return{request:(a,o)=>r({pluginId:e.sourcePluginId,backendRevision:i,machineId:n,projectId:t.projectId,workspaceId:t.id},a,o)}}function Pb(e,t,n,r){return{readFile:r=>e.workspaceFile(t.projectId,t.id,r,n),listFiles:r=>e.workspaceTree(t.projectId,t.id,r,n),writeFile:async(i,a,o)=>{let s=await e.writeWorkspaceFile(t.projectId,t.id,i,a,o,n);return r?.(),s},deleteFile:async i=>{let a=await e.deleteWorkspaceFile(t.projectId,t.id,i,n);return r?.(),a},moveFile:async(i,a,o)=>{let s=await e.moveWorkspaceFile(t.projectId,t.id,i,a,o,n);return r?.(),s}}}var Fb=class{constructor(e,t={}){this.callbacks=e,this.refreshes=new Jl,this.connected=!1,this.onFocus=()=>{this.handleResumeSignal()},this.onVisibilityChange=()=>{this.isDocumentVisible()&&this.handleResumeSignal()},this.windowTarget=t.windowTarget??Ib(),this.documentTarget=t.documentTarget??Lb(),this.isDocumentVisible=t.isDocumentVisible??Rb,this.scheduleFrame=t.scheduleFrame??zb}connect(){this.connected||(this.connected=!0,this.windowTarget?.addEventListener(`focus`,this.onFocus),this.documentTarget?.addEventListener(`visibilitychange`,this.onVisibilityChange))}disconnect(){this.connected&&(this.connected=!1,this.windowTarget?.removeEventListener(`focus`,this.onFocus),this.documentTarget?.removeEventListener(`visibilitychange`,this.onVisibilityChange),this.scheduledRefresh?.cancel(),this.scheduledRefresh=void 0)}handleResumeSignal(){this.callbacks.onResumeSignal(),this.scheduledRefresh===void 0&&(this.scheduledRefresh=this.scheduleFrame(()=>{this.scheduledRefresh=void 0,this.connected&&this.refreshes.request(`browser-resume`,async()=>{this.connected&&await this.callbacks.refreshAfterResume()}).catch(e=>{this.callbacks.onRefreshError(e)})}))}};function Ib(){return typeof window>`u`?void 0:window}function Lb(){return typeof document>`u`?void 0:document}function Rb(){return typeof document>`u`||document.visibilityState===`visible`}function zb(e){if(typeof window<`u`&&typeof window.requestAnimationFrame==`function`){let t=window.requestAnimationFrame(()=>{e()});return{cancel:()=>{window.cancelAnimationFrame(t)}}}let t=globalThis.setTimeout(e,0);return{cancel:()=>{globalThis.clearTimeout(t)}}}var Bb=[`machines`,`projects`,`workspaces`,`sessions`];function Vb(e){return e.selectedWorkspace===void 0?e.selectedProject===void 0?`projects`:`workspaces`:`sessions`}function Hb(e,t){if(e!==`none`)return e??Vb(t)}function Ub(e,t){return Hb(t.expanded,t.state)!==e}function Wb(e,t,n){return Hb(e,n.state)===t?`none`:t}function Gb(e){return e.workspaceCount===1?`sessions`:`workspaces`}function Kb(e){return Bb[Bb.indexOf(e)+1]}var qb=class{hostConnected(){}constructor(e,t){this.host=e,this.getState=t,e.addController(this)}expandedSection(){return Hb(this.expanded,this.getState())}isCollapsed(e){return Ub(e,{expanded:this.expanded,state:this.getState()})}toggle(e){this.setExpanded(Wb(this.expanded,e,{state:this.getState()}))}expand(e){this.setExpanded(e)}advanceAfterSelection(e,t){let n=e===`projects`?Gb({workspaceCount:t?.workspaceCount}):Kb(e);n!==void 0&&this.expand(n)}open(e,t){this.expand(e),t()}setExpanded(e){this.expanded!==e&&(this.expanded=e,this.host.requestUpdate())}};function Jb(e){return e.isMobileNavigationLayout||e.navigationCollapsed}var Yb=class{hostConnected(){}constructor(e){this.host=e,this.navigationPanelCollapsed=!1,this.workspacePanelCollapsed=!1,e.addController(this)}toggleNavigationPanel(){this.navigationPanelCollapsed=!this.navigationPanelCollapsed,this.host.requestUpdate()}toggleWorkspacePanel(){this.workspacePanelCollapsed=!this.workspacePanelCollapsed,this.host.requestUpdate()}expandNavigationPanel(){this.navigationPanelCollapsed&&(this.navigationPanelCollapsed=!1,this.host.requestUpdate())}expandWorkspacePanel(){this.workspacePanelCollapsed&&(this.workspacePanelCollapsed=!1,this.host.requestUpdate())}shellClass(e,t=!0){return[`shell`,Zb(e),...this.navigationPanelCollapsed?[`navigation-panel-collapsed`]:[],...Xb(this.workspacePanelCollapsed,t)?[]:[`workspace-panel-collapsed`]].join(` `)}};function Xb(e,t){return!e&&t}function Zb(e){return e===`navigation`?`navigation-view`:e===`chat`?`chat-view`:`workspace-view`}var Qb=`pi-web:panel-sizes:v1`,$b={navigation:{minWidth:180,maxWidth:4096,defaultWidth:340,keyboardStep:24,largeKeyboardStep:72},workspace:{minWidth:240,maxWidth:4096,defaultWidth:480,keyboardStep:24,largeKeyboardStep:72}},ex=class{constructor(e,t={}){this.host=e,e.addController(this),this.storage=t.storage??mx(),this.panelSizes=ox(this.storage)}hostConnected(){}constraints(e){return tx(e)}panelWidth(e,t){return ax(e,t??this.storedPanelWidth(e)??this.constraints(e).defaultWidth)}resizePanel(e,t,n={}){let r=ax(e,t);this.storedPanelWidth(e)!==r&&(this.panelSizes=ux(this.panelSizes,e,r),n.persist!==!1&&this.persistPanelSizes(),this.host.requestUpdate())}resetPanel(e,t={}){this.storedPanelWidth(e)!==void 0&&(this.panelSizes=dx(this.panelSizes,e),t.persist!==!1&&this.persistPanelSizes(),this.host.requestUpdate())}resetPanels(e={}){this.panelSizes.navigationPanelWidth===void 0&&this.panelSizes.workspacePanelWidth===void 0||(this.panelSizes={},e.persist!==!1&&this.persistPanelSizes(),this.host.requestUpdate())}persistPanelSizes(){sx(this.panelSizes,this.storage)}shellStyle(e={}){let t=[];return this.panelSizes.navigationPanelWidth!==void 0&&t.push(`--navigation-panel-size: ${px(ax(`navigation`,this.panelSizes.navigationPanelWidth,e.navigation))};`),this.panelSizes.workspacePanelWidth!==void 0&&t.push(`--workspace-panel-size: ${px(ax(`workspace`,this.panelSizes.workspacePanelWidth,e.workspace))};`),t.join(` `)}storedPanelWidth(e){return e===`navigation`?this.panelSizes.navigationPanelWidth:this.panelSizes.workspacePanelWidth}};function tx(e){return $b[e]}function nx(e,t,n){return e===`navigation`?n-t:t-n}function rx(e,t,n,r,i=tx(e)){return ax(e,t+nx(e,n,r),i)}function ix(e,t,n,r={}){let i=r.constraints??tx(e);if(n===`Home`)return i.minWidth;if(n===`End`)return i.maxWidth;let a=fx(e,n,r.largeStep===!0?i.largeKeyboardStep:i.keyboardStep);if(a!==void 0)return ax(e,t+a,i)}function ax(e,t,n=tx(e)){return Number.isFinite(t)?Math.round(Math.min(Math.max(t,n.minWidth),n.maxWidth)):n.defaultWidth}function ox(e=mx()){try{let t=e?.getItem(Qb);return t==null||t===``?{}:cx(JSON.parse(t))}catch{return{}}}function sx(e,t=mx()){if(t!==void 0)try{if(e.navigationPanelWidth===void 0&&e.workspacePanelWidth===void 0){t.removeItem(Qb);return}let n={version:1};e.navigationPanelWidth!==void 0&&(n.navigationPanelWidth=ax(`navigation`,e.navigationPanelWidth)),e.workspacePanelWidth!==void 0&&(n.workspacePanelWidth=ax(`workspace`,e.workspacePanelWidth)),t.setItem(Qb,JSON.stringify(n))}catch{}}function cx(e){if(!hx(e)||e.version!==1)return{};let t={},n=lx(e.navigationPanelWidth),r=lx(e.workspacePanelWidth);return n!==void 0&&(t.navigationPanelWidth=ax(`navigation`,n)),r!==void 0&&(t.workspacePanelWidth=ax(`workspace`,r)),t}function lx(e){return typeof e==`number`&&Number.isFinite(e)?e:void 0}function ux(e,t,n){return t===`navigation`?{...e,navigationPanelWidth:n}:{...e,workspacePanelWidth:n}}function dx(e,t){return t===`navigation`?e.workspacePanelWidth===void 0?{}:{workspacePanelWidth:e.workspacePanelWidth}:e.navigationPanelWidth===void 0?{}:{navigationPanelWidth:e.navigationPanelWidth}}function fx(e,t,n){if(e===`navigation`)return t===`ArrowRight`?n:t===`ArrowLeft`?-n:void 0;if(t===`ArrowLeft`)return n;if(t===`ArrowRight`)return-n}function px(e){return`${String(Math.round(e))}px`}function mx(){try{return typeof window>`u`?void 0:window.localStorage}catch{return}}function hx(e){return typeof e==`object`&&!!e}function gx(){let e=new URLSearchParams(window.location.search);return{machineId:bx(e.get(`machine`)),projectId:bx(e.get(`project`)),workspaceId:bx(e.get(`workspace`)),sessionId:bx(e.get(`session`)),tool:bx(e.get(`tool`)),view:bx(e.get(`view`))}}function _x(e,t){return{machineId:e.machineId,projectId:e.projectId,workspaceId:e.workspaceId,sessionId:e.sessionId,tool:e.tool===void 0?void 0:vx(e.tool,t),view:e.view===`chat`?`chat`:e.view===void 0?void 0:vx(e.view,t)}}function vx(e,t){return t(e)??(xx(e)?e:void 0)}function yx(e,t){let n=new URL(window.location.href);n.searchParams.delete(`machine`),n.searchParams.delete(`project`),n.searchParams.delete(`workspace`),n.searchParams.delete(`session`),n.searchParams.delete(`tool`),n.searchParams.delete(`view`),e.machineId!==void 0&&e.machineId!==``&&e.machineId!==`local`&&n.searchParams.set(`machine`,e.machineId),e.projectId!==void 0&&e.projectId!==``&&n.searchParams.set(`project`,e.projectId),e.workspaceId!==void 0&&e.workspaceId!==``&&n.searchParams.set(`workspace`,e.workspaceId),e.sessionId!==void 0&&e.sessionId!==``&&n.searchParams.set(`session`,e.sessionId),e.tool!==void 0&&e.tool!==``&&n.searchParams.set(`tool`,e.tool),e.view!==void 0&&e.view!==``&&n.searchParams.set(`view`,e.view),`${n.pathname}${n.search}${n.hash}`!=`${window.location.pathname}${window.location.search}${window.location.hash}`&&vt(String(n),t?.replace===!0)}function bx(e){return e===null||e===``?void 0:e}function xx(e){return/^[a-z][a-z0-9.-]*:[a-z][a-z0-9.-]*$/u.test(e)}function Sx(){return wx(new URLSearchParams(window.location.search).get(`settings`))}function Cx(e,t){let n=new URL(window.location.href);e===void 0?n.searchParams.delete(`settings`):n.searchParams.set(`settings`,e),`${n.pathname}${n.search}${n.hash}`!=`${window.location.pathname}${window.location.search}${window.location.hash}`&&vt(String(n),t?.replace===!0)}function wx(e){if(e===`general`)return`general`;if(e===`appearance`||e===`theme`||e===`themes`)return`appearance`;if(e===`sessiond`||e===`sessions`)return`sessiond`;if(e===`machines`)return`machines`;if(e===`packages`||e===`pi-packages`)return`packages`;if(e===`plugins`)return`plugins`;if(e===`shortcuts`||e===`keyboard`||e===`keyboard-shortcuts`)return`shortcuts`}function Tx(e,t){return t===void 0?e:e.map(e=>Dx(e,t))}function Ex(e,t){let n=new Set(qm(e,t,{enabledOnly:!0}).filter(e=>e.active).map(e=>e.action.id));return Tx(e,t).map(e=>e.shortcut!==void 0&&!n.has(e.id)?Ox(e):e)}function Dx(e,t){let n=eh(e,t);return n===void 0?e:n===null?Ox(e):{...e,shortcut:n}}function Ox(e){let t={...e};return delete t.shortcut,t}function kx(e,t){let n=t.api??es,r=t.pollIntervalMs??1e3,i=t.setTimeout??Mx(),a=t.clearTimeout??Nx();return{async runCommand(o){let s=await n.runTerminalCommand(e,o);return o.open===!0&&t.openTerminal(o.workspace,{terminalId:s.terminalId}),{run:s,completed:Ax(s,n,r,i,a)}},listCommandRuns:e=>n.listCommandRuns(e),getCommandRun:e=>n.getCommandRun(e),open:e=>{t.openTerminal(void 0,e)}}}function Ax(e,t,n,r,i){return jx(e)?Promise.resolve(e):new Promise((a,o)=>{let s,c=!1,l=e=>{c||(c=!0,s!==void 0&&i(s),a(e))},u=e=>{c||(c=!0,s!==void 0&&i(s),o(e instanceof Error?e:Error(String(e))))},d=()=>{t.getCommandRun(e.id).then(e=>{if(e!==void 0&&jx(e)){l(e);return}s=r(d,n)}).catch(u)};s=r(d,n)})}function jx(e){return e.status===`succeeded`||e.status===`failed`}function Mx(){return(e,t)=>globalThis.setTimeout(e,t)}function Nx(){return e=>{globalThis.clearTimeout(e)}}var Px=class{constructor(e){this.callbacks=e,this.fired=!1}start(e){this.cancel(),this.origin=e,this.fired=!1,this.handle=this.callbacks.setTimer(()=>{this.handle=void 0,this.fired=!0,this.callbacks.onLongPress()},500)}move(e){if(this.origin===void 0)return;let t=Math.abs(e.clientX-this.origin.clientX),n=Math.abs(e.clientY-this.origin.clientY);(t>10||n>10)&&this.cancel()}cancel(){this.handle!==void 0&&this.callbacks.clearTimer(this.handle),this.handle=void 0,this.origin=void 0}consumeSuppressedClick(){let e=this.fired;return this.fired=!1,e}},Fx=class{constructor(e){this.open=e,this.longPress=new Px({onLongPress:()=>{this.heldId!==void 0&&this.open(this.heldId,this.heldAnchor??null)},setTimer:(e,t)=>window.setTimeout(e,t),clearTimer:e=>{window.clearTimeout(e)}})}pointerDown(e,t){t.pointerType!==`mouse`&&(this.heldId=e,this.heldAnchor=t.currentTarget,this.longPress.start(t))}pointerMove(e){this.longPress.move(e)}cancel(){this.longPress.cancel(),this.heldId=void 0,this.heldAnchor=void 0}consumeSuppressedClick(){return this.longPress.consumeSuppressedClick()}contextMenu(e,t){t.preventDefault(),this.open(e,t.currentTarget)}};function Ix(e){return`${e.label}\n${e.path}`}function Lx(e,t){return Of(e,t,Ix)}function Rx(e,t){return Of(e,t,e=>e.name)}function zx(e,t){return e>=8||Ef(t).length>0}var Bx=0,Vx=120;function Hx(e,t={}){if(typeof HTMLElement>`u`||typeof window>`u`||!(e instanceof HTMLElement))return``;let n=e.getBoundingClientRect(),r=t.constrainTo===`viewport`?Wx():Ux(e),i=window.innerWidth,a=window.innerHeight,o=Math.max(0,r.left),s=Math.min(i,r.right),c=Math.max(0,r.top),l=Math.min(a,r.bottom),u=Math.min(n.right,s),d=l-n.bottom-Bx,f=n.top-c-Bx;return[...d<Vx&&f>d?[`bottom: ${Gx(a-n.top+Bx)};`,`max-height: ${Gx(Math.max(0,f))};`]:[`top: ${Gx(n.bottom+Bx)};`,`max-height: ${Gx(Math.max(0,d))};`],`right: ${Gx(Math.max(0,i-u))};`,`max-width: ${Gx(Math.max(0,u-o))};`].join(` `)}function Ux(e){let t=e.getRootNode();return typeof ShadowRoot<`u`&&t instanceof ShadowRoot&&t.host instanceof HTMLElement?t.host.getBoundingClientRect():Wx()}function Wx(){return{top:0,right:window.innerWidth,bottom:window.innerHeight,left:0}}function Gx(e){return`${String(Math.round(e))}px`}function Kx(e,t=`Active`,n){if(e===void 0)return n===void 0?void 0:h`<span class="activity-indicator unread" role="img" aria-label=${n} title=${n}></span>`;if(n===void 0)return h`<span class=${`activity-indicator ${e}`} role="img" aria-label=${t} title=${t}></span>`;let r=`${n} · ${t}`;return h`<span class="unread-ring" role="img" aria-label=${r} title=${r}><span class=${`activity-indicator ${e}`} aria-hidden="true"></span></span>`}function qx(e){if(e!==void 0)return e[Qt.working]===!0?`session`:e[Qt.terminal]===!0?`terminal`:Object.entries(e).some(([e,t])=>t&&e!==Qt.unread)?`session`:void 0}function Jx(e){return e?.[Qt.unread]===!0}var Yx={working:`Session is working`,background:`Turn ended; background work still running`,idle:`Session is done`,asking:`Waiting for your answer`,error:`Session hit an error`};function Xx(e,t){if(e===void 0)return t===void 0?void 0:h`<span class="session-state unread" role="img" aria-label=${t} title=${t}></span>`;let n=e===`sending`?`Sending message`:Yx[e],r=t===void 0?n:`${t} · ${n}`;if(e===`idle`)return h`<span class=${t===void 0?`session-state idle`:`session-state idle unread`} role="img" aria-label=${r} title=${r}></span>`;if(e===`working`||e===`sending`){let i=e===`working`?[0,1,2].map(e=>h`<span class="state-dot working-dot" style=${`animation-delay:${(e*.14).toFixed(2)}s`}></span>`):null;return t===void 0?h`<span class="session-state working" role="img" aria-label=${n} title=${n}><span class="state-dots">${i}</span></span>`:h`<span class="unread-ring" role="img" aria-label=${r} title=${r}><span class="session-state working" aria-hidden="true"><span class="state-dots">${i}</span></span></span>`}return t===void 0?h`<span class=${`session-state ${e}`} role="img" aria-label=${n} title=${n}></span>`:h`<span class="unread-ring" role="img" aria-label=${r} title=${r}><span class=${`session-state ${e}`} aria-hidden="true"></span></span>`}function Zx(e,t=`Active`,n){let r=Kx(e,t,n);if(r!==void 0)return h`<span class="action-activity">${r}</span>`}var Qx=[`a[href]`,`button`,`input`,`select`,`textarea`,`summary`,`[role='button']`,`[role='link']`,`[contenteditable='true']`].join(`,`);function $x(e){return e.composedPath().some(e=>eS(e,Qx))}function eS(e,t){if(typeof Element<`u`&&e instanceof Element)return e.matches(t);if(!(`matches`in e))return!1;let{matches:n}=e;return typeof n==`function`&&n.call(e,t)===!0}function tS(e,t){return $x(e)?!1:e.key===`Enter`||e.key===` `?(e.preventDefault(),t.activate(),!0):e.key===`ArrowUp`?rS(e,()=>{iS(e.currentTarget,-1)}):e.key===`ArrowDown`?rS(e,()=>{iS(e.currentTarget,1)}):e.key===`Home`?rS(e,()=>{aS(e.currentTarget,0)}):e.key===`End`?rS(e,()=>{aS(e.currentTarget,-1)}):e.key===`ArrowLeft`&&t.previousSection!==void 0?rS(e,t.previousSection):e.key===`ArrowRight`&&t.nextSection!==void 0?rS(e,t.nextSection):e.key===`Escape`&&t.cancel!==void 0&&rS(e,t.cancel)}function nS(e,t={}){let n=e.querySelector(`.action-row.selected`)??e.querySelector(`.action-row`)??(t.fallbackSelector===void 0?void 0:e.querySelector(t.fallbackSelector));return n==null?!1:(n.focus(),n.scrollIntoView({block:`nearest`}),!0)}function rS(e,t){return e.preventDefault(),e.stopPropagation?.(),t(),!0}function iS(e,t){let n=sS(e),r=lS(e);if(r===void 0||n.length===0)return;let i=n.indexOf(r);i<0||oS(n,i+t)}function aS(e,t){let n=sS(e);n.length!==0&&oS(n,t<0?n.length-1:t)}function oS(e,t){let n=e[Math.min(Math.max(t,0),e.length-1)];n?.focus(),n?.scrollIntoView({block:`nearest`})}function sS(e){let t=lS(e)?.getRootNode();return t===void 0||!cS(t)?[]:Array.from(t.querySelectorAll(`.action-row`))}function cS(e){return typeof Document<`u`&&e instanceof Document||typeof DocumentFragment<`u`&&e instanceof DocumentFragment}function lS(e){if(!(typeof HTMLElement>`u`||!(e instanceof HTMLElement)))return e.closest(`.action-row`)??void 0}var U=class extends _{constructor(...e){super(...e),this.machines=[],this.searchQuery=``,this.statuses={},this.statusSnapshots={},this.collapsible=!1,this.collapsed=!1,this.gestures=new Fx((e,t)=>{this.openMenu(e,t)}),this.menuStyle=``,this.onDocumentClick=e=>{e.composedPath().includes(this)||(this.openMenuMachineId=void 0)}}connectedCallback(){super.connectedCallback(),document.addEventListener(`click`,this.onDocumentClick)}disconnectedCallback(){document.removeEventListener(`click`,this.onDocumentClick),super.disconnectedCallback()}updated(e){e.has(`machines`)&&this.openMenuMachineId!==void 0&&!this.machines.some(e=>e.id===this.openMenuMachineId)&&(this.openMenuMachineId=void 0),e.has(`collapsed`)&&this.collapsed&&(this.openMenuMachineId=void 0)}async focusSelectedOrFirst(){return await this.updateComplete,nS(this.renderRoot,{fallbackSelector:`.section-toggle`})}renderSearch(){if(!zx(this.machines.length,this.searchQuery))return null;let e=this.searchQuery!==``;return h`
|
|
671
671
|
<div class="list-search">
|
|
672
672
|
<input
|
|
673
673
|
class="list-search-input"
|
|
@@ -690,11 +690,11 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
690
690
|
${this.collapsed?null:h`
|
|
691
691
|
${this.renderSearch()}
|
|
692
692
|
<div class="list-body">
|
|
693
|
-
${
|
|
693
|
+
${Rx(this.machines,this.searchQuery).map(e=>this.renderMachine(e))}
|
|
694
694
|
</div>
|
|
695
695
|
`}
|
|
696
696
|
</section>
|
|
697
|
-
`}renderMachine(e){let t=this.statuses[e.id]?.status??e.status??`unknown`,n=t===`online`?`online`:t===`offline`?`offline`:t===`error`?`error`:`unknown`,r=
|
|
697
|
+
`}renderMachine(e){let t=this.statuses[e.id]?.status??e.status??`unknown`,n=t===`online`?`online`:t===`offline`?`offline`:t===`error`?`error`:`unknown`,r=dS(e,{remove:this.onRemove!==void 0,rename:this.onRename!==void 0,refresh:this.onRefresh!==void 0,open:this.onOpen!==void 0}).length>0;return h`
|
|
698
698
|
<div
|
|
699
699
|
class=${`action-row machine-row ${this.selected?.id===e.id?`selected`:``} ${r?``:`no-actions`}`}
|
|
700
700
|
title=${e.baseUrl??e.name}
|
|
@@ -716,7 +716,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
716
716
|
</button>
|
|
717
717
|
${r?this.renderMachineMenu(e):null}
|
|
718
718
|
</div>
|
|
719
|
-
`}renderActivity(e){let t=this.statusSnapshots[e.id]?.machine,n=this.statuses[e.id]?.status??e.status,r=n===`offline`||n===`error`?void 0:
|
|
719
|
+
`}renderActivity(e){let t=this.statusSnapshots[e.id]?.machine,n=this.statuses[e.id]?.status??e.status,r=n===`offline`||n===`error`?void 0:qx(t),i=Jx(t)?`Unread sessions on this machine`:void 0;return Zx(r,r===`terminal`?`Machine terminal active`:`Machine active`,i)}renderMachineMenu(e){let t=this.openMenuMachineId===e.id,n=fS(e.id);return h`
|
|
720
720
|
<div class="action-menu">
|
|
721
721
|
<button
|
|
722
722
|
class="action-menu-toggle"
|
|
@@ -731,11 +731,11 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
731
731
|
${this.onRefresh===void 0?null:h`<button title=${`Check ${e.name} again`} @click=${()=>{this.openMenuMachineId=void 0,this.onRefresh?.(e)}}>Check again</button>`}
|
|
732
732
|
${this.onRename===void 0?null:h`<button title=${e.kind===`local`?`Rename this device (display name only)`:`Rename ${e.name}`} @click=${()=>{this.promptRename(e)}}>Rename…</button>`}
|
|
733
733
|
${this.onOpen===void 0||e.kind!==`remote`?null:h`<button title=${`Open ${e.name} in a new tab`} @click=${()=>{this.openMenuMachineId=void 0,this.onOpen?.(e)}}>Open PI WEB</button>`}
|
|
734
|
-
${
|
|
734
|
+
${uS(e)&&this.onRemove!==void 0?h`<button class="danger" title=${`Remove ${e.name}`} @click=${()=>{this.removeMachine(e)}}>Remove</button>`:null}
|
|
735
735
|
</div>
|
|
736
736
|
`:null}
|
|
737
737
|
</div>
|
|
738
|
-
`}renderAdd(){return this.onAdd===void 0?null:h`<button class="section-add" title="Add machine" aria-label="Add machine" @click=${e=>{e.stopPropagation(),this.onAdd?.()}}><span aria-hidden="true">+</span><span class="section-add-label">Add machine</span></button>`}renderHeading(){if(!this.collapsible)return h`<span>Machines</span>`;let e=this.selected?.name??`No machine selected`,t=this.selected?.baseUrl??e;return h`<button class="section-toggle" aria-expanded=${String(!this.collapsed)} @click=${()=>{this.onToggleCollapsed?.()}}><span class="section-title"><span class="section-name">${this.collapsed?`▸`:`▾`} Machines</span>${this.collapsed?h`<small class="section-selected" title=${t}>${e}</small>`:null}</span><small class="section-count">${this.machines.length}</small></button>`}openMenu(e,t){this.menuStyle=
|
|
738
|
+
`}renderAdd(){return this.onAdd===void 0?null:h`<button class="section-add" title="Add machine" aria-label="Add machine" @click=${e=>{e.stopPropagation(),this.onAdd?.()}}><span aria-hidden="true">+</span><span class="section-add-label">Add machine</span></button>`}renderHeading(){if(!this.collapsible)return h`<span>Machines</span>`;let e=this.selected?.name??`No machine selected`,t=this.selected?.baseUrl??e;return h`<button class="section-toggle" aria-expanded=${String(!this.collapsed)} @click=${()=>{this.onToggleCollapsed?.()}}><span class="section-title"><span class="section-name">${this.collapsed?`▸`:`▾`} Machines</span>${this.collapsed?h`<small class="section-selected" title=${t}>${e}</small>`:null}</span><small class="section-count">${this.machines.length}</small></button>`}openMenu(e,t){this.menuStyle=Hx(t,{constrainTo:`viewport`}),this.openMenuMachineId=e}toggleMenu(e,t){if(this.openMenuMachineId===e){this.openMenuMachineId=void 0;return}this.menuStyle=Hx(t,{constrainTo:`viewport`}),this.openMenuMachineId=e}promptRename(e){this.openMenuMachineId=void 0;let t=prompt(e.kind===`local`?`Name for this device:`:`Name for ${e.name}:`,e.name);if(t===null)return;let n=t.trim();n===``||n===e.name||this.onRename?.(e,n)}removeMachine(e){this.openMenuMachineId=void 0,this.onRemove?.(e)}handleMachineKeydown(e,t){if(e.key===`Escape`&&this.openMenuMachineId===t.id){e.preventDefault(),e.stopPropagation(),this.openMenuMachineId=void 0;return}tS(e,{activate:()=>this.onSelect?.(t),nextSection:this.onFocusNextSection===void 0?void 0:()=>{this.onFocusNextSection?.()},cancel:this.onCancelKeyboardNavigation===void 0?void 0:()=>{this.onCancelKeyboardNavigation?.()}})}static{this.styles=[a_,o`
|
|
739
739
|
.machine-row { border-radius: var(--pi-radius-lg); }
|
|
740
740
|
.machine-row.no-actions .action-main { border-radius: var(--pi-radius-lg); }
|
|
741
741
|
.machine-row .action-main { min-height: 58px; align-content: center; }
|
|
@@ -744,7 +744,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
744
744
|
.machine-menu-panel button.danger { color: var(--pi-danger); }
|
|
745
745
|
.machine-menu-panel button.danger:focus { background: color-mix(in srgb, var(--pi-danger) 14%, transparent); }
|
|
746
746
|
@media (hover: hover) { .machine-menu-panel button.danger:hover { background: color-mix(in srgb, var(--pi-danger) 14%, transparent); } }
|
|
747
|
-
`]}};H([S({attribute:!1})],U.prototype,`machines`,void 0),H([C()],U.prototype,`searchQuery`,void 0),H([S({attribute:!1})],U.prototype,`selected`,void 0),H([S({attribute:!1})],U.prototype,`statuses`,void 0),H([S({attribute:!1})],U.prototype,`statusSnapshots`,void 0),H([S({type:Boolean,reflect:!0})],U.prototype,`collapsible`,void 0),H([S({type:Boolean,reflect:!0})],U.prototype,`collapsed`,void 0),H([S({attribute:!1})],U.prototype,`onSelect`,void 0),H([S({attribute:!1})],U.prototype,`onRemove`,void 0),H([S({attribute:!1})],U.prototype,`onRename`,void 0),H([S({attribute:!1})],U.prototype,`onRefresh`,void 0),H([S({attribute:!1})],U.prototype,`onOpen`,void 0),H([S({attribute:!1})],U.prototype,`onToggleCollapsed`,void 0),H([S({attribute:!1})],U.prototype,`onAdd`,void 0),H([S({attribute:!1})],U.prototype,`onFocusNextSection`,void 0),H([S({attribute:!1})],U.prototype,`onCancelKeyboardNavigation`,void 0),H([C()],U.prototype,`openMenuMachineId`,void 0),H([C()],U.prototype,`menuStyle`,void 0),U=H([x(`machine-list`)],U);function
|
|
747
|
+
`]}};H([S({attribute:!1})],U.prototype,`machines`,void 0),H([C()],U.prototype,`searchQuery`,void 0),H([S({attribute:!1})],U.prototype,`selected`,void 0),H([S({attribute:!1})],U.prototype,`statuses`,void 0),H([S({attribute:!1})],U.prototype,`statusSnapshots`,void 0),H([S({type:Boolean,reflect:!0})],U.prototype,`collapsible`,void 0),H([S({type:Boolean,reflect:!0})],U.prototype,`collapsed`,void 0),H([S({attribute:!1})],U.prototype,`onSelect`,void 0),H([S({attribute:!1})],U.prototype,`onRemove`,void 0),H([S({attribute:!1})],U.prototype,`onRename`,void 0),H([S({attribute:!1})],U.prototype,`onRefresh`,void 0),H([S({attribute:!1})],U.prototype,`onOpen`,void 0),H([S({attribute:!1})],U.prototype,`onToggleCollapsed`,void 0),H([S({attribute:!1})],U.prototype,`onAdd`,void 0),H([S({attribute:!1})],U.prototype,`onFocusNextSection`,void 0),H([S({attribute:!1})],U.prototype,`onCancelKeyboardNavigation`,void 0),H([C()],U.prototype,`openMenuMachineId`,void 0),H([C()],U.prototype,`menuStyle`,void 0),U=H([x(`machine-list`)],U);function uS(e){return e.kind===`remote`}function dS(e,t){let n=[];return t.refresh&&n.push(`refresh`),t.rename&&n.push(`rename`),t.open&&e.kind===`remote`&&n.push(`open`),t.remove&&uS(e)&&n.push(`remove`),n}function fS(e){return`machine-menu-${e.replace(/[^a-zA-Z0-9_-]/g,`-`)}`}function pS(e){return`${e.name} ${e.path}`}function mS(e,t){return Of(e,t,pS)}function hS(e,t){return e>=6||Ef(t).length>0}var W=class extends _{constructor(...e){super(...e),this.projects=[],this.projectsLoad=`unloaded`,this.searchQuery=``,this.hidden=!1,this.collapsible=!1,this.collapsed=!1,this.tiles=!1,this.gestures=new Fx((e,t)=>{this.openMenu(e,t)}),this.menuStyle=``,this.onDocumentClick=e=>{e.composedPath().includes(this)||(this.openMenuProjectId=void 0)}}connectedCallback(){super.connectedCallback(),document.addEventListener(`click`,this.onDocumentClick)}disconnectedCallback(){document.removeEventListener(`click`,this.onDocumentClick),super.disconnectedCallback()}updated(e){e.has(`projects`)&&this.openMenuProjectId!==void 0&&!this.projects.some(e=>e.id===this.openMenuProjectId)&&(this.openMenuProjectId=void 0),e.has(`collapsed`)&&this.collapsed&&(this.openMenuProjectId=void 0),e.has(`hidden`)&&this.hidden&&this.searchQuery!==``&&(this.searchQuery=``)}async focusSelectedOrFirst(){return await this.updateComplete,nS(this.renderRoot,{fallbackSelector:`.section-toggle`})}render(){let e=mS(this.projects,this.searchQuery);return h`
|
|
748
748
|
<section>
|
|
749
749
|
<h2>${this.renderHeading()}${this.renderAdd()}</h2>
|
|
750
750
|
${this.collapsed?null:h`
|
|
@@ -796,7 +796,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
796
796
|
<span>Could not load projects.</span>
|
|
797
797
|
<button class="load-retry" @click=${()=>{this.onRetryLoad?.()}}>Retry</button>
|
|
798
798
|
</div>
|
|
799
|
-
`:this.searchQuery.trim()===``?this.projectsLoad===`loaded`?this.projects.length===0?h`<div class="list-empty" role="status">No projects yet. Add one to start working here.</div>`:null:h`<div class="list-loading" role="status">Loading projects…</div>`:null}handleProjectKeydown(e,t){
|
|
799
|
+
`:this.searchQuery.trim()===``?this.projectsLoad===`loaded`?this.projects.length===0?h`<div class="list-empty" role="status">No projects yet. Add one to start working here.</div>`:null:h`<div class="list-loading" role="status">Loading projects…</div>`:null}handleProjectKeydown(e,t){tS(e,{activate:()=>this.onSelect?.(t),previousSection:this.onFocusPreviousSection===void 0?void 0:()=>{this.onFocusPreviousSection?.()},nextSection:this.onFocusNextSection===void 0?void 0:()=>{this.onFocusNextSection?.()},cancel:this.onCancelKeyboardNavigation===void 0?void 0:()=>{this.onCancelKeyboardNavigation?.()}})}renderSearch(){if(!hS(this.projects.length,this.searchQuery))return null;let e=this.searchQuery!==``;return h`
|
|
800
800
|
<div class="list-search">
|
|
801
801
|
<input
|
|
802
802
|
class="list-search-input"
|
|
@@ -813,12 +813,12 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
813
813
|
>
|
|
814
814
|
${e?h`<button class="list-search-clear" title="Clear search" aria-label="Clear search" @click=${()=>{this.searchQuery=``}}>×</button>`:null}
|
|
815
815
|
</div>
|
|
816
|
-
`}renderAdd(){return this.onAdd===void 0?null:h`<button class="section-add" title="Add project" aria-label="Add project" @click=${e=>{e.stopPropagation(),this.onAdd?.()}}><span aria-hidden="true">+</span><span class="section-add-label">Add project</span></button>`}renderHeading(){if(!this.collapsible)return h`<span>Projects</span>`;let e=this.selected?.name??`No project selected`,t=this.selected?.path??e;return h`<button class="section-toggle" aria-expanded=${String(!this.collapsed)} @click=${()=>{this.onToggleCollapsed?.()}}><span class="section-title"><span class="section-name">${this.collapsed?`▸`:`▾`} Projects</span>${this.collapsed?h`<small class="section-selected" title=${t}>${e}</small>`:null}</span><small class="section-count">${this.projects.length}</small></button>`}renderActivity(e){let t=this.statusSnapshot?.projects[e.id],n=
|
|
816
|
+
`}renderAdd(){return this.onAdd===void 0?null:h`<button class="section-add" title="Add project" aria-label="Add project" @click=${e=>{e.stopPropagation(),this.onAdd?.()}}><span aria-hidden="true">+</span><span class="section-add-label">Add project</span></button>`}renderHeading(){if(!this.collapsible)return h`<span>Projects</span>`;let e=this.selected?.name??`No project selected`,t=this.selected?.path??e;return h`<button class="section-toggle" aria-expanded=${String(!this.collapsed)} @click=${()=>{this.onToggleCollapsed?.()}}><span class="section-title"><span class="section-name">${this.collapsed?`▸`:`▾`} Projects</span>${this.collapsed?h`<small class="section-selected" title=${t}>${e}</small>`:null}</span><small class="section-count">${this.projects.length}</small></button>`}renderActivity(e){let t=this.statusSnapshot?.projects[e.id],n=qx(t),r=Jx(t)?`Unread sessions in this project`:void 0;return Zx(n,n===`terminal`?`Project terminal active`:`Project active`,r)}openMenu(e,t){this.menuStyle=Hx(t,{constrainTo:`viewport`}),this.openMenuProjectId=e}toggleMenu(e,t){if(this.openMenuProjectId===e){this.openMenuProjectId=void 0;return}this.menuStyle=Hx(t,{constrainTo:`viewport`}),this.openMenuProjectId=e}close(e){this.openMenuProjectId=void 0,confirm(`Close ${e.name}?\n\nThis only removes it from PI WEB; it will not change the project folder.`)&&this.onClose?.(e)}static{this.styles=[a_,o`
|
|
817
817
|
.list-empty, .list-loading { padding: var(--pi-space-6) var(--pi-space-2); color: var(--pi-muted); font-size: var(--pi-text-sm); }
|
|
818
818
|
.filter-count { padding: var(--pi-space-3) var(--pi-space-2); color: var(--pi-muted); font-size: var(--pi-text-xs); }
|
|
819
819
|
.load-failed { display: flex; align-items: center; gap: var(--pi-space-3); padding: var(--pi-space-3) var(--pi-space-2); color: var(--pi-danger); font-size: var(--pi-text-sm); }
|
|
820
820
|
.load-retry { min-height: 28px; padding: 0 var(--pi-space-4); font-size: var(--pi-text-xs); }
|
|
821
|
-
`]}};H([S({attribute:!1})],W.prototype,`projects`,void 0),H([S({attribute:!1})],W.prototype,`projectsLoad`,void 0),H([S({attribute:!1})],W.prototype,`onRetryLoad`,void 0),H([C()],W.prototype,`searchQuery`,void 0),H([S({type:Boolean,reflect:!0})],W.prototype,`hidden`,void 0),H([S({attribute:!1})],W.prototype,`selected`,void 0),H([S({attribute:!1})],W.prototype,`statusSnapshot`,void 0),H([S({type:Boolean,reflect:!0})],W.prototype,`collapsible`,void 0),H([S({type:Boolean,reflect:!0})],W.prototype,`collapsed`,void 0),H([S({type:Boolean})],W.prototype,`tiles`,void 0),H([S({attribute:!1})],W.prototype,`onAdd`,void 0),H([S({attribute:!1})],W.prototype,`onSelect`,void 0),H([S({attribute:!1})],W.prototype,`onClose`,void 0),H([S({attribute:!1})],W.prototype,`onToggleCollapsed`,void 0),H([S({attribute:!1})],W.prototype,`onFocusPreviousSection`,void 0),H([S({attribute:!1})],W.prototype,`onFocusNextSection`,void 0),H([S({attribute:!1})],W.prototype,`onCancelKeyboardNavigation`,void 0),H([C()],W.prototype,`openMenuProjectId`,void 0),H([C()],W.prototype,`menuStyle`,void 0),W=H([x(`project-list`)],W);async function
|
|
821
|
+
`]}};H([S({attribute:!1})],W.prototype,`projects`,void 0),H([S({attribute:!1})],W.prototype,`projectsLoad`,void 0),H([S({attribute:!1})],W.prototype,`onRetryLoad`,void 0),H([C()],W.prototype,`searchQuery`,void 0),H([S({type:Boolean,reflect:!0})],W.prototype,`hidden`,void 0),H([S({attribute:!1})],W.prototype,`selected`,void 0),H([S({attribute:!1})],W.prototype,`statusSnapshot`,void 0),H([S({type:Boolean,reflect:!0})],W.prototype,`collapsible`,void 0),H([S({type:Boolean,reflect:!0})],W.prototype,`collapsed`,void 0),H([S({type:Boolean})],W.prototype,`tiles`,void 0),H([S({attribute:!1})],W.prototype,`onAdd`,void 0),H([S({attribute:!1})],W.prototype,`onSelect`,void 0),H([S({attribute:!1})],W.prototype,`onClose`,void 0),H([S({attribute:!1})],W.prototype,`onToggleCollapsed`,void 0),H([S({attribute:!1})],W.prototype,`onFocusPreviousSection`,void 0),H([S({attribute:!1})],W.prototype,`onFocusNextSection`,void 0),H([S({attribute:!1})],W.prototype,`onCancelKeyboardNavigation`,void 0),H([C()],W.prototype,`openMenuProjectId`,void 0),H([C()],W.prototype,`menuStyle`,void 0),W=H([x(`project-list`)],W);async function gS(e,t=_S()){if(!t.isSecureContext)return t.fallbackWriteText(e);if(t.writeText!==void 0)try{return await t.writeText(e),!0}catch{return t.fallbackWriteText(e)}return t.fallbackWriteText(e)}function _S(){let e=e=>bS(e),t=yS();return t===void 0?{isSecureContext:vS(),fallbackWriteText:e}:{isSecureContext:vS(),writeText:t,fallbackWriteText:e}}function vS(){return typeof window<`u`&&window.isSecureContext}function yS(){if(!(typeof navigator>`u`||!(`clipboard`in navigator)))return navigator.clipboard.writeText.bind(navigator.clipboard)}function bS(e){if(typeof document>`u`)return!1;let t=document.activeElement,n=document.getSelection(),r=n===null?[]:xS(n),i=document.createElement(`textarea`);i.value=e,i.readOnly=!0,i.setAttribute(`aria-hidden`,`true`),i.style.position=`fixed`,i.style.top=`0`,i.style.left=`-9999px`,i.style.width=`1px`,i.style.height=`1px`,i.style.padding=`0`,i.style.border=`0`,i.style.opacity=`0`,i.style.pointerEvents=`none`,document.body.append(i),i.focus(),i.select(),i.setSelectionRange(0,i.value.length);try{return document.execCommand(`copy`)}catch{return!1}finally{i.remove(),SS(n,r),CS(t)}}function xS(e){let t=[];for(let n=0;n<e.rangeCount;n+=1)t.push(e.getRangeAt(n));return t}function SS(e,t){if(e!==null)try{e.removeAllRanges();for(let n of t)e.addRange(n)}catch{}}function CS(e){if(!(typeof HTMLElement>`u`||!(e instanceof HTMLElement)))try{e.focus({preventScroll:!0})}catch{e.focus()}}function wS(e=[]){return e.map((e,t)=>h`${t===0?null:h`<span class="workspace-label-separator">·</span>`}${TS(e)}`)}function TS(e){if(e.type===`render`)return h`<span class="workspace-label-render">${e.render()}</span>`;if(e.type===`link`&&ES(e.href)){let t=e.target??`_blank`,n=t===`_blank`?`noopener noreferrer`:void 0;return h`<a class="workspace-label-item workspace-label-link" href=${e.href} title=${e.title??e.text} target=${t} rel=${n??void 0}>${e.text}</a>`}return h`<span class="workspace-label-item" title=${e.title??e.text}>${e.text}</span>`}function ES(e){let t=e.trim().toLowerCase();return t!==``&&!t.startsWith(`javascript:`)&&!t.startsWith(`data:`)}var G=class extends _{constructor(...e){super(...e),this.workspaces=[],this.machineId=`local`,this.collapsible=!1,this.collapsed=!1,this.tiles=!1,this.searchQuery=``,this.workspaceLabelItems=()=>[],this.deletingWorkspaceIds=[],this.gestures=new Fx((e,t)=>{this.openMenu(e,t)}),this.menuStyle=``,this.trustByWorkspaceId={},this.onDocumentClick=e=>{e.composedPath().includes(this)||(this.openMenuWorkspaceId=void 0)}}connectedCallback(){super.connectedCallback(),document.addEventListener(`click`,this.onDocumentClick)}disconnectedCallback(){document.removeEventListener(`click`,this.onDocumentClick),super.disconnectedCallback()}updated(e){e.has(`workspaces`)&&this.openMenuWorkspaceId!==void 0&&!this.workspaces.some(e=>e.id===this.openMenuWorkspaceId)&&(this.openMenuWorkspaceId=void 0),e.has(`collapsed`)&&this.collapsed&&(this.openMenuWorkspaceId=void 0),this.shouldRevealSelectedRow(e)&&this.scrollSelectedIntoView()}shouldRevealSelectedRow(e){return this.collapsed?!1:e.has(`collapsed`)?!0:e.has(`selected`)&&e.get(`selected`)?.id!==this.selected?.id}async focusSelectedOrFirst(){return await this.updateComplete,nS(this.renderRoot,{fallbackSelector:`.section-toggle`})}renderSearch(){if(!zx(this.workspaces.length,this.searchQuery))return null;let e=this.searchQuery!==``;return h`
|
|
822
822
|
<div class="list-search">
|
|
823
823
|
<input
|
|
824
824
|
class="list-search-input"
|
|
@@ -841,7 +841,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
841
841
|
${this.collapsed?null:h`
|
|
842
842
|
${this.renderSearch()}
|
|
843
843
|
<div class="list-body ${this.tiles?`tiles`:``}">
|
|
844
|
-
${
|
|
844
|
+
${Lx(this.workspaces,this.searchQuery).map(e=>{let t=DS(e),n=this.workspaceLabelItems(e);return h`
|
|
845
845
|
<div
|
|
846
846
|
class=${`action-row workspace-row ${this.selected?.id===e.id?`selected`:``}`}
|
|
847
847
|
title=${t}
|
|
@@ -866,18 +866,18 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
866
866
|
</div>
|
|
867
867
|
`}
|
|
868
868
|
</section>
|
|
869
|
-
`}renderHeading(){if(!this.collapsible)return h`<span>Workspaces</span>`;let e=this.selected===void 0?`No workspace selected`:`${this.selected.label}${this.selected.isMain?` · main`:``} · ${this.selected.path}`,t=this.selected?.path??e;return h`<button class="section-toggle" aria-expanded=${String(!this.collapsed)} @click=${()=>{this.onToggleCollapsed?.()}}><span class="section-title"><span class="section-name">${this.collapsed?`▸`:`▾`} Workspaces</span>${this.collapsed?h`<small class="section-selected" title=${t}>${e}</small>`:null}</span><small class="section-count">${this.workspaces.length}</small></button>`}renderActivity(e){let t=this.statusSnapshot?.workspaces[e.id],n=
|
|
869
|
+
`}renderHeading(){if(!this.collapsible)return h`<span>Workspaces</span>`;let e=this.selected===void 0?`No workspace selected`:`${this.selected.label}${this.selected.isMain?` · main`:``} · ${this.selected.path}`,t=this.selected?.path??e;return h`<button class="section-toggle" aria-expanded=${String(!this.collapsed)} @click=${()=>{this.onToggleCollapsed?.()}}><span class="section-title"><span class="section-name">${this.collapsed?`▸`:`▾`} Workspaces</span>${this.collapsed?h`<small class="section-selected" title=${t}>${e}</small>`:null}</span><small class="section-count">${this.workspaces.length}</small></button>`}renderActivity(e){let t=this.statusSnapshot?.workspaces[e.id],n=qx(t),r=Jx(t)?`Unread sessions in this workspace`:void 0;return Zx(n,n===`terminal`?`Workspace terminal active`:`Workspace active`,r)}renderWorkspaceMain(e,t,n){return h`
|
|
870
870
|
<span class="workspace-primary">
|
|
871
871
|
<span class="workspace-primary-label">${e}</span>
|
|
872
872
|
${this.isDeleting(n)?h`<span class="workspace-status">Deleting…</span>`:null}
|
|
873
873
|
</span>
|
|
874
874
|
${t.length===0?null:h`
|
|
875
875
|
<small class="workspace-secondary">
|
|
876
|
-
<span class="workspace-label">${
|
|
876
|
+
<span class="workspace-label">${wS(t)}</span>
|
|
877
877
|
</small>
|
|
878
878
|
`}
|
|
879
879
|
${this.renderActivity(n)}
|
|
880
|
-
`}renderWorkspaceMenu(e,t,n){let r=this.openMenuWorkspaceId===n.id,i=
|
|
880
|
+
`}renderWorkspaceMenu(e,t,n){let r=this.openMenuWorkspaceId===n.id,i=OS(n.id);return h`
|
|
881
881
|
<div class="action-menu">
|
|
882
882
|
<button
|
|
883
883
|
class="action-menu-toggle"
|
|
@@ -901,7 +901,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
901
901
|
<button class="danger" title=${t?`Workspace removal in progress`:n} ?disabled=${t} @click=${()=>{this.delete(e)}}>${t?`Removing…`:n}</button>
|
|
902
902
|
`:null}
|
|
903
903
|
</div>
|
|
904
|
-
`}renderTrustToggle(e){let t=this.trustByWorkspaceId[e.id],n=t?.loading===!0||t?.saving===!0,r=`${
|
|
904
|
+
`}renderTrustToggle(e){let t=this.trustByWorkspaceId[e.id],n=t?.loading===!0||t?.saving===!0,r=`${OS(e.id)}-trusted`;return h`
|
|
905
905
|
<div class="workspace-menu-trust">
|
|
906
906
|
<div class="workspace-menu-trust-row">
|
|
907
907
|
<label for=${r}>
|
|
@@ -931,7 +931,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
931
931
|
${t.length===0?null:h`
|
|
932
932
|
<div class="workspace-detail-row">
|
|
933
933
|
<dt>Details</dt>
|
|
934
|
-
<dd><span class="workspace-label">${
|
|
934
|
+
<dd><span class="workspace-label">${wS(t)}</span></dd>
|
|
935
935
|
</div>
|
|
936
936
|
`}
|
|
937
937
|
</dl>
|
|
@@ -939,16 +939,16 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
939
939
|
<button type="button" class="detail-copy" title=${i} aria-label=${i} @click=${()=>{this.copyDetail(e,t)}}>
|
|
940
940
|
<span aria-hidden="true">${r?`✓`:`⧉`}</span>
|
|
941
941
|
</button>
|
|
942
|
-
`}async copyDetail(e,t){await
|
|
942
|
+
`}async copyDetail(e,t){await gS(t)&&(this.copiedDetailKey=e,window.setTimeout(()=>{this.copiedDetailKey===e&&(this.copiedDetailKey=void 0)},1200))}delete(e){this.isDeleting(e)||(this.openMenuWorkspaceId=void 0,this.onDelete?.(e))}isDeleting(e){return this.deletingWorkspaceIds.includes(e.id)}openMenu(e,t){this.menuStyle=Hx(t,{constrainTo:`viewport`}),this.openMenuWorkspaceId=e}toggleMenu(e,t){if(this.openMenuWorkspaceId===e){this.openMenuWorkspaceId=void 0;return}this.menuStyle=Hx(t,{constrainTo:`viewport`}),this.openMenuWorkspaceId=e;let n=this.workspaces.find(t=>t.id===e);n!==void 0&&this.loadTrust(n)}handleWorkspaceKeydown(e,t){if(e.key===`Escape`&&this.openMenuWorkspaceId===t.id){e.preventDefault(),e.stopPropagation(),this.openMenuWorkspaceId=void 0;return}tS(e,{activate:()=>this.onSelect?.(t),previousSection:this.onFocusPreviousSection===void 0?void 0:()=>{this.onFocusPreviousSection?.()},nextSection:this.onFocusNextSection===void 0?void 0:()=>{this.onFocusNextSection?.()},cancel:this.onCancelKeyboardNavigation===void 0?void 0:()=>{this.onCancelKeyboardNavigation?.()}})}scrollSelectedIntoView(){this.renderRoot.querySelector(`.action-row.selected`)?.scrollIntoView({block:`nearest`})}static{this.styles=[a_,o`
|
|
943
943
|
.workspace-menu-trust { display: flex; flex-direction: column; gap: 3px; padding: var(--pi-space-2) var(--pi-space-1); }
|
|
944
944
|
.workspace-menu-trust-row { display: flex; align-items: center; justify-content: space-between; gap: var(--pi-space-4); }
|
|
945
945
|
.workspace-menu-trust label { display: flex; align-items: center; gap: var(--pi-space-3); cursor: pointer; }
|
|
946
946
|
.workspace-menu-trust input { cursor: pointer; }
|
|
947
947
|
.workspace-trust-link { color: var(--pi-accent); font-size: var(--pi-text-xs); text-align: right; white-space: nowrap; }
|
|
948
948
|
.workspace-trust-error { color: var(--pi-danger, #c0392b); line-height: 1.3; }
|
|
949
|
-
`]}};H([S({attribute:!1})],G.prototype,`workspaces`,void 0),H([S({attribute:!1})],G.prototype,`selected`,void 0),H([S({attribute:!1})],G.prototype,`machineId`,void 0),H([S({type:Boolean,reflect:!0})],G.prototype,`collapsible`,void 0),H([S({type:Boolean,reflect:!0})],G.prototype,`collapsed`,void 0),H([S({type:Boolean})],G.prototype,`tiles`,void 0),H([C()],G.prototype,`searchQuery`,void 0),H([S({attribute:!1})],G.prototype,`workspaceLabelItems`,void 0),H([S({attribute:!1})],G.prototype,`statusSnapshot`,void 0),H([S({attribute:!1})],G.prototype,`deletingWorkspaceIds`,void 0),H([S({attribute:!1})],G.prototype,`onSelect`,void 0),H([S({attribute:!1})],G.prototype,`onDelete`,void 0),H([S({attribute:!1})],G.prototype,`onToggleCollapsed`,void 0),H([S({attribute:!1})],G.prototype,`onFocusPreviousSection`,void 0),H([S({attribute:!1})],G.prototype,`onFocusNextSection`,void 0),H([S({attribute:!1})],G.prototype,`onCancelKeyboardNavigation`,void 0),H([C()],G.prototype,`openMenuWorkspaceId`,void 0),H([C()],G.prototype,`menuStyle`,void 0),H([C()],G.prototype,`copiedDetailKey`,void 0),H([C()],G.prototype,`trustByWorkspaceId`,void 0),G=H([x(`workspace-list`)],G);function
|
|
950
|
-
`).toLowerCase()}function
|
|
951
|
-
`).toLowerCase()}function
|
|
949
|
+
`]}};H([S({attribute:!1})],G.prototype,`workspaces`,void 0),H([S({attribute:!1})],G.prototype,`selected`,void 0),H([S({attribute:!1})],G.prototype,`machineId`,void 0),H([S({type:Boolean,reflect:!0})],G.prototype,`collapsible`,void 0),H([S({type:Boolean,reflect:!0})],G.prototype,`collapsed`,void 0),H([S({type:Boolean})],G.prototype,`tiles`,void 0),H([C()],G.prototype,`searchQuery`,void 0),H([S({attribute:!1})],G.prototype,`workspaceLabelItems`,void 0),H([S({attribute:!1})],G.prototype,`statusSnapshot`,void 0),H([S({attribute:!1})],G.prototype,`deletingWorkspaceIds`,void 0),H([S({attribute:!1})],G.prototype,`onSelect`,void 0),H([S({attribute:!1})],G.prototype,`onDelete`,void 0),H([S({attribute:!1})],G.prototype,`onToggleCollapsed`,void 0),H([S({attribute:!1})],G.prototype,`onFocusPreviousSection`,void 0),H([S({attribute:!1})],G.prototype,`onFocusNextSection`,void 0),H([S({attribute:!1})],G.prototype,`onCancelKeyboardNavigation`,void 0),H([C()],G.prototype,`openMenuWorkspaceId`,void 0),H([C()],G.prototype,`menuStyle`,void 0),H([C()],G.prototype,`copiedDetailKey`,void 0),H([C()],G.prototype,`trustByWorkspaceId`,void 0),G=H([x(`workspace-list`)],G);function DS(e){return`${e.label}${e.isMain?` · main`:``}`}function OS(e){return`workspace-menu-${e.replace(/[^a-zA-Z0-9_-]/g,`-`)}`}function kS(e){return e.slice(-8)}function AS(e){let t=e.name?.trim();if(t!==void 0&&t!==``)return t;let n=e.firstMessage.trim();return n===``?void 0:n}function jS(e){return AS(e)??`New session`}function MS(e){return AS(e)===void 0?kS(e.id):void 0}function NS(e){return e.replace(/[/\\]+$/u,``)}function PS(e){return[e.id,e.path].join(`
|
|
950
|
+
`).toLowerCase()}function FS(e){return[e.name??``,e.firstMessage].join(`
|
|
951
|
+
`).toLowerCase()}function IS(e){return e.length>=6&&/^[0-9a-f-]+$/.test(e)&&/[0-9]/.test(e)}function LS(e,t){let n=BS(t);if(n.length===0)return!0;let r=FS(e),i=PS(e);return n.every(e=>IS(e)?r.includes(e)||i.includes(e):r.includes(e)||i.includes(e)||VS(e,r))}function RS(e,t){if(BS(t).length===0)return[...e];let n=new Set;return e.forEach((r,i)=>{if(!LS(r.session,t))return;n.add(i);let a=r.depth-1;for(let t=i-1;t>=0&&a>=0;--t)e[t]?.depth===a&&(n.add(t),--a)}),e.filter((e,t)=>n.has(t))}function zS(e,t){return e>=5||t.trim()!==``}function BS(e){return e.trim().toLowerCase().split(/\s+/u).filter(Boolean)}function VS(e,t){let n=0;for(let r of t)if(r===e[n]&&(n+=1),n===e.length)return!0;return e.length===0}function HS(e,t,n){if(t.size===0)return[...e];let r=[],i;for(let a of e){if(a.depth===0){i=a.hasMissingParent?void 0:a,r.push(a);continue}(i===void 0||!t.has(n(i)))&&r.push(a)}return r}var US=`Unread session activity`;function WS(e,t){if(e===`asking`)return{kind:`asking`,label:Yx.asking};if(e===`working`)return{kind:`running`,label:Yx.working};if(e===`sending`)return{kind:`running`,label:`Sending message`};if(t)return{kind:`unread`,label:US};if(e===`error`)return{kind:`error`,label:Yx.error};if(e===`background`)return{kind:`background`,label:Yx.background};if(e===`idle`)return{kind:`idle`,label:Yx.idle}}function GS(e){if(e!==void 0){if(e.kind===`running`){let t=[0,1,2].map(e=>h`<span class="state-dot" style=${`animation-delay:${(e*.14).toFixed(2)}s`}></span>`);return h`<span class="session-state running" role="img" aria-label=${e.label} title=${e.label}><span class="state-dots">${t}</span></span>`}return h`<span class=${`session-state ${e.kind}`} role="img" aria-label=${e.label} title=${e.label}></span>`}}var KS=o`
|
|
952
952
|
.session-state { box-sizing: border-box; display: inline-grid; place-items: center; width: 9px; height: 9px; flex: 0 0 auto; border-radius: 50%; vertical-align: 1px; }
|
|
953
953
|
.session-state.idle { background: var(--pi-dim); animation: none; }
|
|
954
954
|
/* Hollow, so "still running" cannot be mistaken for "working": the ring is
|
|
@@ -967,7 +967,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
967
967
|
@media (prefers-reduced-motion: reduce) {
|
|
968
968
|
.state-dot { animation: none; }
|
|
969
969
|
}
|
|
970
|
-
`,
|
|
970
|
+
`,qS=`parent unavailable`,JS=`Parent session is not available in this workspace`,K=class extends _{constructor(...e){super(...e),this.sessions=[],this.sessionsLoad=`unloaded`,this.statuses={},this.activities={},this.sending={},this.unreadSessionIds=new Set,this.startingCount=0,this.canStart=!1,this.collapsible=!1,this.collapsed=!1,this.menuStyle=``,this.archivedExpanded=!1,this.collapsedSubtreeRoots=new Set,this.searchQuery=``,this.selectionScopes=new Set,this.longPress=new Px({onLongPress:()=>{this.onRowHeld()},setTimer:(e,t)=>window.setTimeout(e,t),clearTimer:e=>{window.clearTimeout(e)}}),this.selectedSessionIds=new Set,this.onDocumentClick=e=>{e.composedPath().includes(this)||(this.openMenuSessionId=void 0)}}connectedCallback(){super.connectedCallback(),document.addEventListener(`click`,this.onDocumentClick)}disconnectedCallback(){document.removeEventListener(`click`,this.onDocumentClick),super.disconnectedCallback()}updated(e){e.has(`sessions`)&&(this.openMenuSessionId!==void 0&&!this.sessions.some(e=>e.id===this.openMenuSessionId)&&(this.openMenuSessionId=void 0),this.sessions.some(e=>e.archived===!0)||(this.archivedExpanded=!1),this.pruneSelectedSessionIds()),e.has(`collapsed`)&&this.collapsed&&(this.openMenuSessionId=void 0);let t=e.get(`selected`);if(e.has(`selected`)&&this.selected?.archived===!0&&(t?.id!==this.selected.id||t.archived!==!0)&&!this.archivedExpanded){this.archivedExpanded=!0,this.updateComplete.then(()=>{this.scrollSelectedIntoView()});return}this.shouldRevealSelectedRow(e)&&this.scrollSelectedIntoView()}shouldRevealSelectedRow(e){if(this.collapsed)return!1;if(e.has(`collapsed`))return!0;if(!e.has(`selected`))return!1;let t=e.get(`selected`);return t?.id!==this.selected?.id||t?.archived===!0&&this.selected?.archived!==!0}async focusSelectedOrFirst(){return await this.updateComplete,nS(this.renderRoot,{fallbackSelector:`.section-toggle, h2 button:not([disabled])`})}render(){let e=nC(this.sessions),t=new Set(e.map(e=>e.session.id)),n=e.map(e=>e.session).filter(e=>XS(e)===`current`),r=rC(this.sessions.filter(e=>e.archived===!0&&!t.has(e.id)),this.sessions),i=QS(this.sessions),a=YS(n,this.unreadSessionIds),o=this.searchQuery.trim()!==``,s=RS(e,this.searchQuery),c=o?s:HS(s,this.collapsedSubtreeRoots,e=>e.session.path),l=RS(r,this.searchQuery),u=this.archivedExpanded||o&&l.length>0,d=o&&s.length===0&&l.length===0;return h`
|
|
971
971
|
<section>
|
|
972
972
|
${this.renderHeading(e.length+r.length,n,a)}
|
|
973
973
|
${this.collapsed?null:h`
|
|
@@ -988,7 +988,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
988
988
|
</div>
|
|
989
989
|
`}
|
|
990
990
|
</section>
|
|
991
|
-
`}renderEmptyListBody(){return this.sessionsLoad===`loaded`?h`<div class="list-empty" role="status">No sessions yet. Start one to begin working here.</div>`:this.sessionsLoad===`loading`?h`<div class="list-loading" role="status">Loading sessions…</div>`:null}renderSearch(e){if(!
|
|
991
|
+
`}renderEmptyListBody(){return this.sessionsLoad===`loaded`?h`<div class="list-empty" role="status">No sessions yet. Start one to begin working here.</div>`:this.sessionsLoad===`loading`?h`<div class="list-loading" role="status">Loading sessions…</div>`:null}renderSearch(e){if(!zS(e,this.searchQuery))return null;let t=this.searchQuery!==``;return h`
|
|
992
992
|
<div class="session-search">
|
|
993
993
|
<input
|
|
994
994
|
class="session-search-input"
|
|
@@ -1013,7 +1013,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
1013
1013
|
${this.renderCleanupButton()}
|
|
1014
1014
|
${this.renderStartButton()}
|
|
1015
1015
|
</h2>
|
|
1016
|
-
`;let r=this.selected===void 0?`No session selected`:
|
|
1016
|
+
`;let r=this.selected===void 0?`No session selected`:jS(this.selected),i=this.selected?.path??r;return h`
|
|
1017
1017
|
<h2>
|
|
1018
1018
|
<button class="section-toggle" aria-expanded=${String(!this.collapsed)} @click=${()=>{this.onToggleCollapsed?.()}}><span class="section-title"><span class="section-name">${this.collapsed?`▸`:`▾`} Sessions</span>${this.collapsed?h`<small class="section-selected" dir="auto" title=${i}>${r}</small>`:null}</span></button>
|
|
1019
1019
|
${this.renderCurrentSelectionButton(t)}
|
|
@@ -1050,7 +1050,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
1050
1050
|
<button class="danger" title="Permanently delete selected archived sessions" ?disabled=${t.length===0} @click=${()=>{this.confirmDeleteSelectedArchived()}}>Delete</button>
|
|
1051
1051
|
</div>
|
|
1052
1052
|
</div>
|
|
1053
|
-
`}renderSelectionControls(e,t){let n=this.selectedSessions(e).length;return n===0?h`<button @click=${()=>{this.selectVisibleSessions(t)}}>Select visible</button>`:h`<button @click=${()=>{this.clearSelection(e)}}>Clear selected (${n})</button>`}renderSession(e,t,n){let{session:r}=e,i=Math.min(e.depth,2),a=e.depth===0&&t>0,o=
|
|
1053
|
+
`}renderSelectionControls(e,t){let n=this.selectedSessions(e).length;return n===0?h`<button @click=${()=>{this.selectVisibleSessions(t)}}>Select visible</button>`:h`<button @click=${()=>{this.clearSelection(e)}}>Clear selected (${n})</button>`}renderSession(e,t,n){let{session:r}=e,i=Math.min(e.depth,2),a=e.depth===0&&t>0,o=XS(r)===n,s=this.selectionScopes.has(n),c=s&&o,l=c&&this.selectedSessionIds.has(r.id),u=this.statuses[r.id],d=this.activities[r.id],f=$S(r,u,d,this.sending[r.id]===!0),p=eC(r,this.unreadSessionIds),m=sp(r,u),ee=cp(r,u);return h`
|
|
1054
1054
|
<div
|
|
1055
1055
|
class="action-row ${this.selected?.id===r.id?`selected`:``} ${l?`bulk-selected`:``} ${r.archived===!0?`archived`:``} ${s?`selecting`:``} ${p?`unread`:``} ${a?`has-subtree-toggle`:``} ${e.depth>0?`is-child`:``}"
|
|
1056
1056
|
style=${`--depth:${String(i)}`}
|
|
@@ -1061,7 +1061,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
1061
1061
|
absolutely positioned against the row, so moving it out keeps its
|
|
1062
1062
|
place on screen while letting the primary region be a real button
|
|
1063
1063
|
without nesting one control inside another. -->
|
|
1064
|
-
${c?h`<input class="session-checkbox" type="checkbox" aria-label=${`Select ${
|
|
1064
|
+
${c?h`<input class="session-checkbox" type="checkbox" aria-label=${`Select ${jS(r)}`} .checked=${l} @click=${e=>{e.stopPropagation()}} @change=${()=>{this.toggleSelected(r.id)}}>`:null}
|
|
1065
1065
|
${a?this.renderSubtreeToggle(e,n):null}
|
|
1066
1066
|
<button
|
|
1067
1067
|
type="button"
|
|
@@ -1074,8 +1074,8 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
1074
1074
|
@contextmenu=${e=>{this.selectionScopes.has(n)&&e.preventDefault()}}
|
|
1075
1075
|
@click=${()=>{this.longPress.consumeSuppressedClick()||this.activateSessionRow(r,n)}}
|
|
1076
1076
|
>
|
|
1077
|
-
<span class="action-name-line"><span class="action-name" dir="auto">${this.renderRowMarker(e)}${
|
|
1078
|
-
${
|
|
1077
|
+
<span class="action-name-line"><span class="action-name" dir="auto">${this.renderRowMarker(e)}${jS(r)}</span>${this.renderRowBadges(e)}</span><small>${this.renderSessionMetaPrefix(r,u,d)}${this.renderSessionMetaPrefixDetail(r)}${String(r.messageCount)} messages</small>
|
|
1078
|
+
${GS(WS(f,p))}
|
|
1079
1079
|
</button>
|
|
1080
1080
|
<div class="action-menu">
|
|
1081
1081
|
<button class="action-menu-toggle" title="Session actions" @click=${e=>{e.stopPropagation(),this.toggleMenu(r.id,e.currentTarget)}}>⋯</button>
|
|
@@ -1104,14 +1104,14 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
1104
1104
|
type="button"
|
|
1105
1105
|
class="subtree-toggle"
|
|
1106
1106
|
title=${n?`Show subagents`:`Hide subagents`}
|
|
1107
|
-
aria-label=${n?`Expand subagents under ${
|
|
1107
|
+
aria-label=${n?`Expand subagents under ${jS(e.session)}`:`Collapse subagents under ${jS(e.session)}`}
|
|
1108
1108
|
aria-expanded=${n?`false`:`true`}
|
|
1109
1109
|
@pointerdown=${e=>{e.stopPropagation()}}
|
|
1110
1110
|
@click=${t=>{t.stopPropagation(),this.toggleSubtreeCollapsed(e.session.path)}}
|
|
1111
1111
|
>
|
|
1112
1112
|
<span class="subtree-chevron ${n?`collapsed`:``}" aria-hidden="true">▾</span>
|
|
1113
1113
|
</button>
|
|
1114
|
-
`}toggleSubtreeCollapsed(e){let t=new Set(this.collapsedSubtreeRoots);t.has(e)?t.delete(e):t.add(e),this.collapsedSubtreeRoots=t}renderRowMarker(e){return e.hasMissingParent?h`<span class="tree-marker orphan-marker" title=${
|
|
1114
|
+
`}toggleSubtreeCollapsed(e){let t=new Set(this.collapsedSubtreeRoots);t.has(e)?t.delete(e):t.add(e),this.collapsedSubtreeRoots=t}renderRowMarker(e){return e.hasMissingParent?h`<span class="tree-marker orphan-marker" title=${JS} aria-label=${qS}>↳</span>`:e.depth>0?h`<span class="tree-marker">↳</span>`:null}renderRowBadges(e){return e.depth<=2?null:h`<span class="row-badges"><span class="badge">depth ${e.depth}</span></span>`}handleSessionKeydown(e,t,n){tS(e,{activate:()=>{this.activateSessionRow(t,n)},previousSection:this.onFocusPreviousSection===void 0?void 0:()=>{this.onFocusPreviousSection?.()},nextSection:this.onFocusNextSection===void 0?void 0:()=>{this.onFocusNextSection?.()},cancel:this.onCancelKeyboardNavigation===void 0?void 0:()=>{this.onCancelKeyboardNavigation?.()}})}activateSessionRow(e,t){if(this.selectionScopes.has(t)&&XS(e)===t){this.toggleSelected(e.id);return}this.onSelect?.(e)}confirmArchiveWithDescendants(e,t){let n=t===1?`descendant session`:`descendant sessions`;confirm(`Archive “${jS(e)}” and ${String(t)} ${n}?`)&&this.onArchiveWithDescendants?.(e)}promptRename(e){let t=e.name??``,n=prompt(`Name for this session:`,t);if(n===null)return;let r=n.trim();r===``||r===t||this.onRename?.(e,r)}confirmDeleteArchived(e){confirm(`Permanently delete archived session “${jS(e)}”? This cannot be undone.`)&&this.onDeleteArchived?.(e)}confirmDeleteSelectedArchived(){let e=this.selectedSessions(`archived`);if(e.length===0)return;let t=e.length===1?`archived session`:`archived sessions`;confirm(`Permanently delete ${String(e.length)} selected ${t}? This cannot be undone.`)&&(this.selectedSessionIds=ZS(this.selectedSessionIds,e.map(e=>e.id)),this.onDeleteArchivedMany?.(e))}markSelectedCurrentRead(){let e=this.selectedSessions(`current`).filter(e=>this.unreadSessionIds.has(e.id));e.length!==0&&this.onMarkReadMany?.(e)}archiveSelectedCurrent(){let e=this.selectedSessions(`current`).filter(e=>sp(e,this.statuses[e.id]));this.selectedSessionIds=ZS(this.selectedSessionIds,e.map(e=>e.id)),this.onArchiveMany?.(e)}startRowHold(e,t,n){e.pointerType!==`mouse`&&(this.heldSession={session:t,scope:n},this.longPress.start(e))}onRowHeld(){let e=this.heldSession;e!==void 0&&(this.heldSession=void 0,this.selectionScopes.has(e.scope)||(this.selectionScopes=new Set([...this.selectionScopes,e.scope])),this.toggleSelected(e.session.id))}toggleSelection(e,t){if(this.selectionScopes.has(e)){this.closeSelection(e);return}this.startSelection(e,t)}startSelection(e,t){this.selectionScopes=new Set([...this.selectionScopes,e]);let n=t.length===1?t[0]:void 0;n!==void 0&&(this.selectedSessionIds=new Set([...this.selectedSessionIds,n.id]))}closeSelection(e){this.selectionScopes=new Set([...this.selectionScopes].filter(t=>t!==e)),this.clearSelection(e)}clearSelection(e){let t=this.sessions.filter(t=>XS(t)===e).map(e=>e.id);this.selectedSessionIds=ZS(this.selectedSessionIds,t)}toggleSelected(e){let t=new Set(this.selectedSessionIds);t.has(e)?t.delete(e):t.add(e),this.selectedSessionIds=t}selectVisibleSessions(e){this.selectedSessionIds=new Set([...this.selectedSessionIds,...e.map(e=>e.id)])}selectedSessions(e){return this.sessions.filter(t=>this.selectedSessionIds.has(t.id)&&XS(t)===e)}pruneSelectedSessionIds(){let e=new Set(this.sessions.map(e=>e.id)),t=new Set([...this.selectedSessionIds].filter(t=>e.has(t)));t.size!==this.selectedSessionIds.size&&(this.selectedSessionIds=t),this.selectionScopes.has(`archived`)&&!this.sessions.some(e=>e.archived===!0)&&this.closeSelection(`archived`),this.selectionScopes.has(`current`)&&!this.sessions.some(e=>e.archived!==!0)&&this.closeSelection(`current`)}toggleMenu(e,t){if(this.openMenuSessionId===e){this.openMenuSessionId=void 0;return}this.menuStyle=Hx(t,{constrainTo:`viewport`}),this.openMenuSessionId=e}toggleArchived(){this.archivedExpanded=!this.archivedExpanded,this.archivedExpanded||(this.openMenuSessionId=void 0,this.selectionScopes.has(`archived`)&&this.closeSelection(`archived`),this.onArchivedCollapsed?.())}scrollSelectedIntoView(){this.renderRoot.querySelector(`.action-row.selected`)?.scrollIntoView({block:`nearest`})}renderSessionMetaPrefixDetail(e){let t=MS(e);return t===void 0?``:`${t} \u00b7 `}renderSessionMetaPrefix(e,t,n){return cp(e,t)?n?.phase===`active`?`creating · `:n?.phase===`error`?`error · `:`new · `:e.archived===!0?`read-only · `:``}static{this.styles=[a_,KS,o`
|
|
1115
1115
|
h2 { min-height: 30px; gap: var(--pi-space-2); }
|
|
1116
1116
|
/* The shared heading spreads its children across the full width, which
|
|
1117
1117
|
floats the checkbox, the unread count, Clean up and the start button
|
|
@@ -1199,7 +1199,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
1199
1199
|
.action-menu-toggle { min-width: 36px; min-height: 36px; }
|
|
1200
1200
|
.bulk-row button { min-height: 36px; }
|
|
1201
1201
|
}
|
|
1202
|
-
`]}};H([S({attribute:!1})],K.prototype,`sessions`,void 0),H([S({attribute:!1})],K.prototype,`sessionsLoad`,void 0),H([S({attribute:!1})],K.prototype,`statuses`,void 0),H([S({attribute:!1})],K.prototype,`activities`,void 0),H([S({attribute:!1})],K.prototype,`sending`,void 0),H([S({attribute:!1})],K.prototype,`unreadSessionIds`,void 0),H([S({attribute:!1})],K.prototype,`selected`,void 0),H([S({type:Number})],K.prototype,`startingCount`,void 0),H([S({type:Boolean})],K.prototype,`canStart`,void 0),H([S({type:Boolean,reflect:!0})],K.prototype,`collapsible`,void 0),H([S({type:Boolean,reflect:!0})],K.prototype,`collapsed`,void 0),H([S({attribute:!1})],K.prototype,`onSelect`,void 0),H([S({attribute:!1})],K.prototype,`onStart`,void 0),H([S({attribute:!1})],K.prototype,`onToggleCollapsed`,void 0),H([S({attribute:!1})],K.prototype,`onArchivedCollapsed`,void 0),H([S({attribute:!1})],K.prototype,`onFocusPreviousSection`,void 0),H([S({attribute:!1})],K.prototype,`onFocusNextSection`,void 0),H([S({attribute:!1})],K.prototype,`onCancelKeyboardNavigation`,void 0),H([S({attribute:!1})],K.prototype,`onArchive`,void 0),H([S({attribute:!1})],K.prototype,`onArchiveWithDescendants`,void 0),H([S({attribute:!1})],K.prototype,`onArchiveMany`,void 0),H([S({attribute:!1})],K.prototype,`onRestore`,void 0),H([S({attribute:!1})],K.prototype,`onDelete`,void 0),H([S({attribute:!1})],K.prototype,`onDeleteArchived`,void 0),H([S({attribute:!1})],K.prototype,`onDeleteArchivedMany`,void 0),H([S({attribute:!1})],K.prototype,`onDetachParent`,void 0),H([S({attribute:!1})],K.prototype,`onRename`,void 0),H([S({attribute:!1})],K.prototype,`onMarkRead`,void 0),H([S({attribute:!1})],K.prototype,`onMarkReadMany`,void 0),H([S({attribute:!1})],K.prototype,`onReload`,void 0),H([S({attribute:!1})],K.prototype,`onOpenTree`,void 0),H([S({attribute:!1})],K.prototype,`onCleanup`,void 0),H([C()],K.prototype,`openMenuSessionId`,void 0),H([C()],K.prototype,`menuStyle`,void 0),H([C()],K.prototype,`archivedExpanded`,void 0),H([C()],K.prototype,`collapsedSubtreeRoots`,void 0),H([C()],K.prototype,`searchQuery`,void 0),H([C()],K.prototype,`selectionScopes`,void 0),H([C()],K.prototype,`selectedSessionIds`,void 0),K=H([x(`session-list`)],K);function
|
|
1202
|
+
`]}};H([S({attribute:!1})],K.prototype,`sessions`,void 0),H([S({attribute:!1})],K.prototype,`sessionsLoad`,void 0),H([S({attribute:!1})],K.prototype,`statuses`,void 0),H([S({attribute:!1})],K.prototype,`activities`,void 0),H([S({attribute:!1})],K.prototype,`sending`,void 0),H([S({attribute:!1})],K.prototype,`unreadSessionIds`,void 0),H([S({attribute:!1})],K.prototype,`selected`,void 0),H([S({type:Number})],K.prototype,`startingCount`,void 0),H([S({type:Boolean})],K.prototype,`canStart`,void 0),H([S({type:Boolean,reflect:!0})],K.prototype,`collapsible`,void 0),H([S({type:Boolean,reflect:!0})],K.prototype,`collapsed`,void 0),H([S({attribute:!1})],K.prototype,`onSelect`,void 0),H([S({attribute:!1})],K.prototype,`onStart`,void 0),H([S({attribute:!1})],K.prototype,`onToggleCollapsed`,void 0),H([S({attribute:!1})],K.prototype,`onArchivedCollapsed`,void 0),H([S({attribute:!1})],K.prototype,`onFocusPreviousSection`,void 0),H([S({attribute:!1})],K.prototype,`onFocusNextSection`,void 0),H([S({attribute:!1})],K.prototype,`onCancelKeyboardNavigation`,void 0),H([S({attribute:!1})],K.prototype,`onArchive`,void 0),H([S({attribute:!1})],K.prototype,`onArchiveWithDescendants`,void 0),H([S({attribute:!1})],K.prototype,`onArchiveMany`,void 0),H([S({attribute:!1})],K.prototype,`onRestore`,void 0),H([S({attribute:!1})],K.prototype,`onDelete`,void 0),H([S({attribute:!1})],K.prototype,`onDeleteArchived`,void 0),H([S({attribute:!1})],K.prototype,`onDeleteArchivedMany`,void 0),H([S({attribute:!1})],K.prototype,`onDetachParent`,void 0),H([S({attribute:!1})],K.prototype,`onRename`,void 0),H([S({attribute:!1})],K.prototype,`onMarkRead`,void 0),H([S({attribute:!1})],K.prototype,`onMarkReadMany`,void 0),H([S({attribute:!1})],K.prototype,`onReload`,void 0),H([S({attribute:!1})],K.prototype,`onOpenTree`,void 0),H([S({attribute:!1})],K.prototype,`onCleanup`,void 0),H([C()],K.prototype,`openMenuSessionId`,void 0),H([C()],K.prototype,`menuStyle`,void 0),H([C()],K.prototype,`archivedExpanded`,void 0),H([C()],K.prototype,`collapsedSubtreeRoots`,void 0),H([C()],K.prototype,`searchQuery`,void 0),H([C()],K.prototype,`selectionScopes`,void 0),H([C()],K.prototype,`selectedSessionIds`,void 0),K=H([x(`session-list`)],K);function YS(e,t){return e.filter(e=>eC(e,t)).length}function XS(e){return e.archived===!0?`archived`:`current`}function ZS(e,t){let n=new Set(t);return new Set([...e].filter(e=>!n.has(e)))}function QS(e){let t=new Map;for(let n of e){if(n.parentSessionPath===void 0)continue;let e=NS(n.parentSessionPath),r=t.get(e)??[];r.push(n),t.set(e,r)}let n=(e,r)=>{let i=NS(e.path);if(r.has(i))return 0;let a=new Set(r);a.add(i);let o=0;for(let e of t.get(i)??[])a.has(NS(e.path))||(e.archived!==!0&&(o+=1),o+=n(e,a));return o};return new Map(e.map(e=>[e.id,n(e,new Set)]))}function $S(e,t,n,r){if(Su(e)||e.archived===!0)return;if(r)return`sending`;let i=Oh(t,n);if(!(i===`working`&&n?.startup===!0&&!iC(t)))return i}function eC(e,t){return Su(e)||e.archived===!0?!1:t.has(e.id)}function tC(e){return new Map(e.map(e=>[NS(e.path),e]))}function nC(e){let t=tC(e),n=new Set;for(let r of e){if(r.archived===!0)continue;n.add(r.id);let e=r.parentSessionPath===void 0?void 0:NS(r.parentSessionPath),i=new Set([NS(r.path)]);for(;e!==void 0&&!i.has(e);){i.add(e);let r=t.get(e);if(r===void 0)break;n.add(r.id),e=r.parentSessionPath===void 0?void 0:NS(r.parentSessionPath)}}return rC(e.filter(e=>n.has(e.id)))}function rC(e,t=e){let n=tC(e),r=t===e?n:tC(t),i=new Map,a=[];for(let t of e){let e=t.parentSessionPath,r=e===void 0?void 0:n.get(NS(e));if(r===void 0){a.push(t);continue}let o=NS(r.path),s=i.get(o)??[];s.push(t),i.set(o,s)}let o=[],s=(e,t,n)=>{let a=NS(e.path);if(n.has(a))return;let c=e.parentSessionPath;o.push({session:e,depth:t,hasMissingParent:c!==void 0&&!r.has(NS(c))});let l=new Set(n);l.add(a);for(let e of i.get(a)??[])s(e,t+1,l)};for(let e of a)s(e,0,new Set);return o}function iC(e){return e?.isStreaming===!0||e?.isBashRunning===!0||e?.isCompacting===!0||(e?.pendingMessageCount??0)>0}var aC=`button, input, select, textarea, a[href], [tabindex]`,oC=class extends _{constructor(...e){super(...e),this.busy=!1,this.handleKeyDown=e=>{if(e.key===`Tab`){this.trapTabFocus(e);return}if(e.key===`Escape`){if(e.preventDefault(),e.stopPropagation(),this.busy){this.onBusyEscape?.();return}this.onClose?.()}}}connectedCallback(){super.connectedCallback(),this.modalRegistration=Bg({element:this,paintElement:fC(this),focus:()=>{this.focusDialogContent()},onTopChange:()=>{this.requestUpdate()}}),this.addEventListener(`keydown`,this.handleKeyDown)}disconnectedCallback(){this.removeEventListener(`keydown`,this.handleKeyDown);let e=this.modalRegistration;this.modalRegistration=void 0,super.disconnectedCallback(),e?.unregister()}firstUpdated(){this.focusDialog()}focusDialog(){this.modalRegistration?.focus()}focusDialogContent(){let e=this.initialFocusTarget();e!==null&&Zg(e)||this.section!==void 0&&Zg(this.section)}render(){let e=this.modalRegistration?.isTop===!0;return h`
|
|
1203
1203
|
<div class="backdrop" @mousedown=${e=>{this.handleBackdropMouseDown(e)}}>
|
|
1204
1204
|
<section
|
|
1205
1205
|
role="dialog"
|
|
@@ -1210,7 +1210,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
1210
1210
|
tabindex="-1"
|
|
1211
1211
|
><slot></slot></section>
|
|
1212
1212
|
</div>
|
|
1213
|
-
`}initialFocusTarget(){if(this.initialFocus===void 0)return null;try{return this.querySelector(this.initialFocus)}catch{return null}}trapTabFocus(e){let t=
|
|
1213
|
+
`}initialFocusTarget(){if(this.initialFocus===void 0)return null;try{return this.querySelector(this.initialFocus)}catch{return null}}trapTabFocus(e){let t=sC(this);if(t.length===0){e.preventDefault(),this.section?.focus();return}let n=Qg(this.ownerDocument),r=t.findIndex(e=>e===n);if(r===-1){e.preventDefault(),(e.shiftKey?t.at(-1):t[0])?.focus();return}let i=!e.shiftKey&&r===t.length-1,a=e.shiftKey&&r===0;!i&&!a||(e.preventDefault(),(e.shiftKey?t.at(-1):t[0])?.focus())}handleBackdropMouseDown(e){e.target!==e.currentTarget||this.busy||this.onClose?.()}static{this.styles=o`
|
|
1214
1214
|
/* Host dialogs tune this shell with custom properties (defaults match a
|
|
1215
1215
|
centered 720px dialog):
|
|
1216
1216
|
--modal-surface-place-items backdrop grid alignment (default center)
|
|
@@ -1221,7 +1221,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
1221
1221
|
:host { display: block; width: 100%; height: 100%; }
|
|
1222
1222
|
.backdrop { box-sizing: border-box; width: 100%; height: 100%; display: grid; place-items: var(--modal-surface-place-items, center); padding: var(--modal-surface-backdrop-padding, 0); background: var(--pi-overlay); overflow: hidden; }
|
|
1223
1223
|
section[role="dialog"] { box-sizing: border-box; width: var(--modal-surface-width, min(720px, 100%)); max-width: var(--modal-surface-max-width, 100%); height: var(--modal-surface-height, auto); max-height: var(--modal-surface-max-height, 100%); min-height: var(--modal-surface-min-height, auto); display: flex; flex-direction: column; border: var(--modal-surface-border, 1px solid var(--pi-border)); border-radius: var(--modal-surface-radius, 12px); background: var(--pi-bg); box-shadow: var(--modal-surface-shadow, 0 20px 60px var(--pi-shadow-strong)); overflow: hidden; }
|
|
1224
|
-
`}};H([S({attribute:!1})],
|
|
1224
|
+
`}};H([S({attribute:!1})],oC.prototype,`onClose`,void 0),H([S({type:Boolean})],oC.prototype,`busy`,void 0),H([S({attribute:!1})],oC.prototype,`onBusyEscape`,void 0),H([S({attribute:!1})],oC.prototype,`initialFocus`,void 0),H([S({attribute:!1})],oC.prototype,`label`,void 0),H([w(`section`)],oC.prototype,`section`,void 0),oC=H([x(`modal-surface`)],oC);function sC(e){let t=[],n=e=>{e instanceof HTMLElement&&uC(e)&&t.push(e);for(let t of dC(e))n(t)};for(let t of dC(e))n(t);return cC(t)}function cC(e){let t=new Map;for(let n of e){let e=lC(n);if(e===null)continue;let r=t.get(e.form)??new Map;t.set(e.form,r);let i=r.get(e.name);(i===void 0||e.checked&&!i.checked)&&r.set(e.name,e)}let n=new Set(Array.from(t.values()).flatMap(e=>Array.from(e.values())));return e.filter(e=>lC(e)===null||n.has(e))}function lC(e){return!(e instanceof HTMLInputElement)||e.type!==`radio`||e.name===``?null:e}function uC(e){return e.matches(`:disabled`)||$g(e)||e instanceof HTMLInputElement&&e.type===`hidden`?!1:e.matches(aC)&&e.tabIndex>=0}function dC(e){if(e instanceof HTMLSlotElement){let t=e.assignedNodes({flatten:!0}),n=t.length===0?e.childNodes:t;return Array.from(n).filter(e=>e instanceof Element)}let t=e instanceof Element?e.shadowRoot??e:e;return Array.from(t.children)}function fC(e){let t=e.getRootNode();return t instanceof ShadowRoot&&t.host instanceof HTMLElement?t.host:e}var pC=class extends _{constructor(...e){super(...e),this.loading=!1,this.running=!1,this.error=``,this.draft={...Ah},this.formError=``}willUpdate(e){e.has(`preview`)&&(this.selectedProjectCwds=this.preview?.projects.map(e=>e.cwd))}render(){let e=jh(this.draft),t=this.selectedPreview(),n=Nh({draft:this.draft,preview:t,previewRequest:this.previewRequest,loading:this.loading,running:this.running}),r=n?`Run cleanup`:t!==void 0&&!Ph(t)?`Select at least one project to run cleanup`:`Preview cleanup before running it`;return h`
|
|
1225
1225
|
<modal-surface .onClose=${()=>{this.onClose?.()}} .label=${`Clean up sessions`}>
|
|
1226
1226
|
<header>
|
|
1227
1227
|
<div>
|
|
@@ -1246,15 +1246,15 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
1246
1246
|
`}renderForm(e){let t=this.loading||this.running,n=jh(this.draft),r=this.preview!==void 0&&n.ok&&Mh(n.request)!==Mh(this.previewRequest)&&Ph(this.preview);return h`
|
|
1247
1247
|
<fieldset ?disabled=${t}>
|
|
1248
1248
|
<label class="toggle-row">
|
|
1249
|
-
<input type="checkbox" .checked=${this.draft.archiveIdleEnabled} @change=${e=>{this.updateDraft({archiveIdleEnabled:
|
|
1249
|
+
<input type="checkbox" .checked=${this.draft.archiveIdleEnabled} @change=${e=>{this.updateDraft({archiveIdleEnabled:mC(e)})}}>
|
|
1250
1250
|
<span>Archive non-archived sessions idle for more than</span>
|
|
1251
|
-
<input class="days" type="number" min="0" step="1" inputmode="numeric" .value=${this.draft.archiveIdleDays} ?disabled=${t||!this.draft.archiveIdleEnabled} @input=${e=>{this.updateDraft({archiveIdleDays:
|
|
1251
|
+
<input class="days" type="number" min="0" step="1" inputmode="numeric" .value=${this.draft.archiveIdleDays} ?disabled=${t||!this.draft.archiveIdleEnabled} @input=${e=>{this.updateDraft({archiveIdleDays:hC(e)})}}>
|
|
1252
1252
|
<span>days</span>
|
|
1253
1253
|
</label>
|
|
1254
1254
|
<label class="toggle-row delete-row">
|
|
1255
|
-
<input type="checkbox" .checked=${this.draft.deleteArchivedEnabled} @change=${e=>{this.updateDraft({deleteArchivedEnabled:
|
|
1255
|
+
<input type="checkbox" .checked=${this.draft.deleteArchivedEnabled} @change=${e=>{this.updateDraft({deleteArchivedEnabled:mC(e)})}}>
|
|
1256
1256
|
<span>Delete archived sessions archived for more than</span>
|
|
1257
|
-
<input class="days" type="number" min="0" step="1" inputmode="numeric" .value=${this.draft.deleteArchivedDays} ?disabled=${t||!this.draft.deleteArchivedEnabled} @input=${e=>{this.updateDraft({deleteArchivedDays:
|
|
1257
|
+
<input class="days" type="number" min="0" step="1" inputmode="numeric" .value=${this.draft.deleteArchivedDays} ?disabled=${t||!this.draft.deleteArchivedEnabled} @input=${e=>{this.updateDraft({deleteArchivedDays:hC(e)})}}>
|
|
1258
1258
|
<span>days</span>
|
|
1259
1259
|
</label>
|
|
1260
1260
|
</fieldset>
|
|
@@ -1291,7 +1291,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
1291
1291
|
${t.length===0?h`<p class="hint" role="status">Select at least one project to run cleanup.</p>`:null}
|
|
1292
1292
|
`}renderProjectRow(e,t){return h`
|
|
1293
1293
|
<tr class=${t?``:`unselected`}>
|
|
1294
|
-
<td class="select-cell"><input type="checkbox" aria-label=${`Clean up ${e.cwd}`} .checked=${t} ?disabled=${this.running} @change=${t=>{this.setProjectSelected(e.cwd,
|
|
1294
|
+
<td class="select-cell"><input type="checkbox" aria-label=${`Clean up ${e.cwd}`} .checked=${t} ?disabled=${this.running} @change=${t=>{this.setProjectSelected(e.cwd,mC(t))}}></td>
|
|
1295
1295
|
<th title=${e.cwd} dir="auto">${e.cwd}</th>
|
|
1296
1296
|
<td>${e.archiveCount}</td>
|
|
1297
1297
|
<td>${e.deleteCount}</td>
|
|
@@ -1349,7 +1349,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
1349
1349
|
table { min-width: 560px; }
|
|
1350
1350
|
thead th:first-child, td.select-cell { width: 58px; }
|
|
1351
1351
|
}
|
|
1352
|
-
`}};H([S({attribute:!1})],
|
|
1352
|
+
`}};H([S({attribute:!1})],pC.prototype,`preview`,void 0),H([S({attribute:!1})],pC.prototype,`previewRequest`,void 0),H([S({attribute:!1})],pC.prototype,`result`,void 0),H([S({type:Boolean})],pC.prototype,`loading`,void 0),H([S({type:Boolean})],pC.prototype,`running`,void 0),H([S({type:String})],pC.prototype,`error`,void 0),H([S({attribute:!1})],pC.prototype,`onPreview`,void 0),H([S({attribute:!1})],pC.prototype,`onRun`,void 0),H([S({attribute:!1})],pC.prototype,`onClose`,void 0),H([C()],pC.prototype,`draft`,void 0),H([C()],pC.prototype,`formError`,void 0),H([C()],pC.prototype,`selectedProjectCwds`,void 0),pC=H([x(`session-cleanup-dialog`)],pC);function mC(e){return e.target instanceof HTMLInputElement&&e.target.checked}function hC(e){return e.target instanceof HTMLInputElement?e.target.value:``}function gC(e){let t=new Map,n=[];for(let r of e.nodes)t.has(r.id)||(t.set(r.id,r),n.push(r.id));let r=SC(t,n),i=new Map;for(let e of n)i.set(e,[]);let a=[];for(let e of n){let t=r.get(e)??null;if(t===null){a.push(e);continue}i.get(t)?.push(e)}let o=new Map,s=new Map,c=new Set,l=[...a].reverse().map(e=>({id:e,depth:0,branchDepth:0}));for(;l.length>0;){let e=l.pop();if(e===void 0||c.has(e.id))continue;c.add(e.id),o.set(e.id,e.depth),s.set(e.id,e.branchDepth);let t=i.get(e.id)??[],n=e.branchDepth+ +(t.length>1);for(let r=t.length-1;r>=0;--r){let i=t[r];i!==void 0&&l.push({id:i,depth:e.depth+1,branchDepth:n})}}for(let e of n)c.has(e)||(a.push(e),r.set(e,null),o.set(e,0),s.set(e,0));let u=new Map;for(let[e,t]of i)u.set(e,t);let d=e.activeLeafId!==null&&t.has(e.activeLeafId)?e.activeLeafId:null;return{nodesById:t,orderedIds:n,rootIds:a,parentById:r,childrenById:u,depthById:o,branchDepthById:s,activePathIds:d===null?new Set:CC(d,r),activeLeafId:d}}function _C(e,t){let n=[],r=new Set,i=[...e.rootIds].reverse();for(;i.length>0;){let a=i.pop();if(a===void 0||r.has(a))continue;let o=e.nodesById.get(a);if(o===void 0)continue;r.add(a);let s=e.childrenById.get(a)??[];if(n.push({node:o,depth:e.depthById.get(a)??0,branchDepth:e.branchDepthById.get(a)??0,parentId:e.parentById.get(a)??null,childIds:s,activePath:e.activePathIds.has(a),activeLeaf:e.activeLeafId===a}),!t.has(a))for(let e=s.length-1;e>=0;--e){let t=s[e];t!==void 0&&i.push(t)}}return n}function vC(e){return e.activeLeafId===null?e.orderedIds.at(-1):e.activeLeafId}function yC(e,t,n){let r=_C(e,t.foldedIds).map(e=>e.node.id),i=wC(r,t.selectedId),a=i===void 0?-1:r.indexOf(i),o=()=>({...t,selectedId:i,handled:!1}),s=e=>({...t,selectedId:e,handled:!0});switch(n){case`ArrowUp`:return s(a>0?r[a-1]:i);case`ArrowDown`:return s(a>=0&&a<r.length-1?r[a+1]:i);case`Home`:return s(r[0]);case`End`:return s(r.at(-1));case`ArrowLeft`:if(i===void 0)return s(void 0);if((e.childrenById.get(i)??[]).length>0&&!t.foldedIds.has(i)){let e=new Set(t.foldedIds);return e.add(i),{selectedId:i,foldedIds:e,handled:!0}}return s(e.parentById.get(i)??i);case`ArrowRight`:{if(i===void 0)return s(void 0);let n=e.childrenById.get(i)??[];if(n.length===0)return s(i);if(t.foldedIds.has(i)){let e=new Set(t.foldedIds);return e.delete(i),{selectedId:i,foldedIds:e,handled:!0}}return s(n[0])}case`Enter`:return{...t,selectedId:i,handled:!0,...i===void 0?{}:{action:`confirm`}};case`Escape`:return{...t,selectedId:i,handled:!0,action:`cancel`};default:return o()}}function bC(e,t,n){if((e.childrenById.get(n)??[]).length===0)return{...t,selectedId:n};let r=new Set(t.foldedIds);return r.has(n)?r.delete(n):r.add(n),{selectedId:n,foldedIds:r}}function xC(e,t){return e===`none`||e==="default"?{ok:!0,choice:{mode:e}}:t.trim()===``?{ok:!1,error:`Enter custom summary focus instructions.`}:t.length>1e4?{ok:!1,error:`Custom summary focus must be ${String(Zt)} characters or fewer.`}:{ok:!0,choice:{mode:`custom`,instructions:t.trim()}}}function SC(e,t){let n=new Map;for(let r of t){let t=e.get(r)?.parentId??null;n.set(r,t!==null&&t!==r&&e.has(t)?t:null)}let r=new Map;for(let e of t){if(r.has(e))continue;let t=[],i=e;for(;i!==null&&!r.has(i);)r.set(i,`visiting`),t.push(i),i=n.get(i)??null;if(i!==null&&r.get(i)===`visiting`){let e=t.at(-1);e!==void 0&&n.set(e,null)}for(let e of t)r.set(e,`visited`)}return n}function CC(e,t){let n=new Set,r=e;for(;r!==null&&!n.has(r);)n.add(r),r=t.get(r)??null;return n}function wC(e,t){return t!==void 0&&e.includes(t)?t:e.at(-1)}var TC={nodes:[],activeLeafId:null,activePathIds:[]},EC=8,DC={user:{label:`User`,tone:`user`,bookkeeping:!1},assistant:{label:`Assistant`,tone:`assistant`,bookkeeping:!1},"tool-result":{label:`Tool result`,tone:`tool`,bookkeeping:!1},bash:{label:`Shell`,tone:`shell`,bookkeeping:!1},"custom-message":{label:`Custom message`,tone:`context`,bookkeeping:!1},compaction:{label:`Compaction`,tone:`context`,bookkeeping:!1},"branch-summary":{label:`Branch summary`,tone:`context`,bookkeeping:!1},"model-change":{label:`Model`,tone:`metadata`,bookkeeping:!0},"thinking-level-change":{label:`Thinking`,tone:`metadata`,bookkeeping:!0},"session-info":{label:`Session info`,tone:`metadata`,bookkeeping:!0},label:{label:`Label`,tone:`metadata`,bookkeeping:!0},custom:{label:`Custom`,tone:`metadata`,bookkeeping:!0},other:{label:`Other`,tone:`metadata`,bookkeeping:!0}},OC=class extends _{constructor(...e){super(...e),this.tree=TC,this.foldedIds=new Set,this.step=`tree`,this.operation=`continue`,this.summaryMode=`none`,this.customInstructions=``,this.busy=!1,this.aborting=!1,this.error=``,this.statusMessage=``,this.model=gC(TC),this.operationGeneration=0}willUpdate(e){e.has(`tree`)&&this.resetTree()}updated(){let e=this.pendingFocus;e!==void 0&&(this.pendingFocus=void 0,e===`tree`?this.focusSelectedTreeItem():e===`custom`?this.renderRoot.querySelector(`#session-tree-custom-focus`)?.focus():e===`operation`?this.renderRoot.querySelector(`input[name='session-tree-operation']:checked`)?.focus():this.renderRoot.querySelector(`input[name='session-tree-summary']:checked`)?.focus())}render(){return h`
|
|
1353
1353
|
<modal-surface
|
|
1354
1354
|
.label=${`Navigate session tree`}
|
|
1355
1355
|
.initialFocus=${this.selectedId===void 0?`.close-button`:`[data-tree-node-id][tabindex='0']`}
|
|
@@ -1367,7 +1367,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
1367
1367
|
${this.step===`tree`?this.renderTreeStep():this.renderActionStep()}
|
|
1368
1368
|
${this.renderFooter()}
|
|
1369
1369
|
</modal-surface>
|
|
1370
|
-
`}renderTreeStep(){let e=
|
|
1370
|
+
`}renderTreeStep(){let e=_C(this.model,this.foldedIds);return h`
|
|
1371
1371
|
<div class="body tree-step">
|
|
1372
1372
|
<div class="tree-intro">
|
|
1373
1373
|
<p>Select the history entry where you would like to continue.</p>
|
|
@@ -1386,7 +1386,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
1386
1386
|
</div>
|
|
1387
1387
|
`}
|
|
1388
1388
|
</div>
|
|
1389
|
-
`}renderTreeRow(e){let t=e.node.id===this.selectedId,n=e.childIds.length>0&&!this.foldedIds.has(e.node.id),r=
|
|
1389
|
+
`}renderTreeRow(e){let t=e.node.id===this.selectedId,n=e.childIds.length>0&&!this.foldedIds.has(e.node.id),r=jC(e.node.kind),i=[`tree-row`,t?`selected`:``,e.activePath?`active-path`:``,e.activeLeaf?`active-leaf`:``,r.bookkeeping?`bookkeeping`:``].filter(e=>e!==``).join(` `),a=kC(e.branchDepth);return h`
|
|
1390
1390
|
<div
|
|
1391
1391
|
class=${i}
|
|
1392
1392
|
style=${`--tree-indent: ${String(a*16)}px; --tree-indent-mobile: ${String(a*12)}px;`}
|
|
@@ -1419,7 +1419,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
1419
1419
|
${e.node.timestamp===void 0?null:h`<time datetime=${e.node.timestamp}>${e.node.timestamp}</time>`}
|
|
1420
1420
|
</span>
|
|
1421
1421
|
</div>
|
|
1422
|
-
`}renderKindBadge(e){return h`<span class=${`kind kind-tone-${e.tone}`}>${e.label}</span>`}renderActionStep(){let e=this.selectedId===void 0?void 0:this.model.nodesById.get(this.selectedId),t=
|
|
1422
|
+
`}renderKindBadge(e){return h`<span class=${`kind kind-tone-${e.tone}`}>${e.label}</span>`}renderActionStep(){let e=this.selectedId===void 0?void 0:this.model.nodesById.get(this.selectedId),t=xC(this.summaryMode,this.customInstructions);return h`
|
|
1423
1423
|
<div class="body confirmation-step">
|
|
1424
1424
|
<div class="confirmation-card">
|
|
1425
1425
|
<div>
|
|
@@ -1428,7 +1428,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
1428
1428
|
</div>
|
|
1429
1429
|
${e===void 0?h`<div class="empty">The selected history entry is no longer available.</div>`:h`
|
|
1430
1430
|
<div class="selected-entry">
|
|
1431
|
-
${this.renderKindBadge(
|
|
1431
|
+
${this.renderKindBadge(jC(e.kind))}
|
|
1432
1432
|
<strong dir="auto">${e.summary}</strong>
|
|
1433
1433
|
<p>${this.selectedEntryDescription(e.kind)}</p>
|
|
1434
1434
|
</div>
|
|
@@ -1467,7 +1467,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
1467
1467
|
${this.error===``?null:h`<div class="dialog-error" role="alert">${this.error}</div>`}
|
|
1468
1468
|
</div>
|
|
1469
1469
|
</div>
|
|
1470
|
-
`}selectedEntryDescription(e){return this.operation===`fork`?e===`user`?`The new session will branch before this user message, and its text will return to the prompt editor as the new session draft.`:`The new session will include this entry and all history leading to it.`:
|
|
1470
|
+
`}selectedEntryDescription(e){return this.operation===`fork`?e===`user`?`The new session will branch before this user message, and its text will return to the prompt editor as the new session draft.`:`The new session will include this entry and all history leading to it.`:AC(e)?`This message’s text will return to the prompt editor for optional editing and resubmission in this session.`:`The prompt editor will be empty after continuing from this entry in this session.`}renderOperationOption(e,t,n){return h`
|
|
1471
1471
|
<label class=${`choice-option${this.operation===e?` selected`:``}`}>
|
|
1472
1472
|
<input
|
|
1473
1473
|
type="radio"
|
|
@@ -1506,7 +1506,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
1506
1506
|
${this.primaryActionLabel()}
|
|
1507
1507
|
</button>
|
|
1508
1508
|
</footer>
|
|
1509
|
-
`}resetTree(){this.operationGeneration+=1,this.model=
|
|
1509
|
+
`}resetTree(){this.operationGeneration+=1,this.model=gC(this.tree),this.selectedId=vC(this.model),this.foldedIds=new Set,this.step=`tree`,this.operation=`continue`,this.summaryMode=`none`,this.customInstructions=``,this.busy=!1,this.aborting=!1,this.error=``,this.statusMessage=``,this.pendingFocus=`tree`}selectNode(e){this.model.nodesById.has(e)&&(this.selectedId=e,this.error=``,this.statusMessage=``,this.pendingFocus=`tree`)}toggleNode(e,t){t.preventDefault(),t.stopPropagation();let n=bC(this.model,{selectedId:this.selectedId,foldedIds:this.foldedIds},e);this.selectedId=n.selectedId,this.foldedIds=n.foldedIds,this.error=``,this.statusMessage=``,this.pendingFocus=`tree`}handleTreeKeyDown(e){if(e.key===`Escape`)return;let t=yC(this.model,{selectedId:this.selectedId,foldedIds:this.foldedIds},e.key);if(t.handled){if(e.preventDefault(),e.stopPropagation(),t.action===`confirm`){this.continueToAction();return}this.selectedId=t.selectedId,this.foldedIds=t.foldedIds,this.pendingFocus=`tree`}}continueToAction(){this.busy||this.selectedId===void 0||!this.model.nodesById.has(this.selectedId)||(xC(this.summaryMode,this.customInstructions).ok||(this.summaryMode=`none`,this.customInstructions=``),this.step=`action`,this.error=``,this.statusMessage=``,this.pendingFocus=`operation`)}returnToTree(){this.busy||(this.step=`tree`,this.error=``,this.statusMessage=``,this.pendingFocus=`tree`)}selectOperation(e){this.busy||(this.operation=e,this.error=``,this.statusMessage=``,this.pendingFocus=`operation`)}selectSummaryMode(e){this.busy||(this.summaryMode=e,this.error=``,this.statusMessage=``,this.pendingFocus=e===`custom`?`custom`:`summary`)}handleCustomInstructionsInput(e){e.currentTarget instanceof HTMLTextAreaElement&&(this.customInstructions=e.currentTarget.value,this.error=``,this.statusMessage=``)}primaryActionLabel(){return this.busy?this.operation===`fork`?`Forking…`:this.summaryMode===`none`?`Continuing…`:`Summarizing…`:this.operation===`continue`?`Continue from here`:`Fork into new session`}submitSelectedOperation(){return this.operation===`continue`?this.submitNavigation():this.submitFork()}async submitNavigation(){if(this.busy||this.selectedId===void 0)return;let e=xC(this.summaryMode,this.customInstructions);if(!e.ok){this.error=``,this.statusMessage=``,this.pendingFocus=`custom`,this.requestUpdate();return}let t=this.onNavigate;if(t===void 0){this.error=`Session tree navigation is unavailable. Close and reopen /tree, then try again.`;return}let n=this.selectedId,r=++this.operationGeneration;this.busy=!0,this.aborting=!1,this.error=``,this.statusMessage=``;try{let i=await t(n,e.choice);if(r!==this.operationGeneration||(this.busy=!1,this.aborting=!1,!i.cancelled))return;this.step=`tree`,this.statusMessage=i.aborted===!0?`Summarization cancelled. Your selected history entry is unchanged.`:`Navigation cancelled. Your selected history entry is unchanged.`,this.pendingFocus=`tree`}catch(e){if(r!==this.operationGeneration)return;this.busy=!1,this.aborting=!1,this.statusMessage=``,this.error=`Could not navigate session history: ${y(e)}`}}async submitFork(){if(this.busy||this.selectedId===void 0)return;let e=this.onFork;if(e===void 0){this.error=`Fork from the session tree is unavailable. Close and reopen /tree, then try again.`;return}let t=this.selectedId,n=++this.operationGeneration;this.busy=!0,this.error=``,this.statusMessage=``;try{let r=await e(t);if(n!==this.operationGeneration)return;this.busy=!1,r.cancelled&&(this.statusMessage=`Fork cancelled. No new session was created; your selected history entry is unchanged.`)}catch(e){if(n!==this.operationGeneration)return;this.busy=!1,this.statusMessage=``,this.error=y(e)}}async abortNavigation(){if(!this.busy||this.summaryMode===`none`||this.aborting)return;let e=this.onAbort;if(e===void 0){this.error=`Summarization cannot be cancelled from this client.`;return}let t=this.operationGeneration;this.aborting=!0,this.error=``,this.statusMessage=`Cancelling summarization…`;try{await e()}catch(e){if(t!==this.operationGeneration)return;this.aborting=!1,this.statusMessage=``,this.error=`Could not cancel summarization: ${y(e)}`}}requestDismissal(){this.step===`action`?this.returnToTree():this.onCancel?.()}requestBusyEscape(){this.operation===`continue`&&this.summaryMode!==`none`&&this.abortNavigation()}focusSelectedTreeItem(){let e=this.selectedId;if(e===void 0){this.renderRoot.querySelector(`.close-button`)?.focus();return}let t=this.renderRoot.querySelectorAll(`[data-tree-node-id]`);for(let n of t)if(n.dataset.treeNodeId===e){n.focus(),n.scrollIntoView({block:`nearest`});return}}static{this.styles=o`
|
|
1510
1510
|
:host { position: fixed; inset: 0; z-index: var(--pi-layer-popover); color: var(--pi-text); font: 14px system-ui, sans-serif; }
|
|
1511
1511
|
* { box-sizing: border-box; }
|
|
1512
1512
|
/* Full-viewport shell: the surface's centered-card defaults are overridden
|
|
@@ -1607,9 +1607,9 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
1607
1607
|
.custom-focus, .validation-error { margin-inline-start: 0; }
|
|
1608
1608
|
footer { flex-wrap: wrap; }
|
|
1609
1609
|
}
|
|
1610
|
-
`}};H([S({attribute:!1})],EC.prototype,`tree`,void 0),H([S({attribute:!1})],EC.prototype,`onNavigate`,void 0),H([S({attribute:!1})],EC.prototype,`onFork`,void 0),H([S({attribute:!1})],EC.prototype,`onAbort`,void 0),H([S({attribute:!1})],EC.prototype,`onCancel`,void 0),H([C()],EC.prototype,`selectedId`,void 0),H([C()],EC.prototype,`foldedIds`,void 0),H([C()],EC.prototype,`step`,void 0),H([C()],EC.prototype,`operation`,void 0),H([C()],EC.prototype,`summaryMode`,void 0),H([C()],EC.prototype,`customInstructions`,void 0),H([C()],EC.prototype,`busy`,void 0),H([C()],EC.prototype,`aborting`,void 0),H([C()],EC.prototype,`error`,void 0),H([C()],EC.prototype,`statusMessage`,void 0),EC=H([x(`session-tree-navigator`)],EC);function DC(e){return Math.min(Math.max(0,e),wC)}function OC(e){return e===`user`||e===`custom-message`}function kC(e){return TC[e]}function AC(e){return e===void 0?0:Math.max(0,e.offsetWidth-e.clientWidth)}function jC(e){return e.wasWorking&&!e.working}var MC=`pi-web:chat-scroll:`,NC=180,PC=48,FC=2,IC={getItem(e){return typeof localStorage>`u`?null:localStorage.getItem(e)},setItem(e,t){typeof localStorage>`u`||localStorage.setItem(e,t)},removeItem(e){typeof localStorage>`u`||localStorage.removeItem(e)}},LC={setTimeout(e,t){return window.setTimeout(e,t)},clearTimeout(e){window.clearTimeout(e)}},RC=class{constructor(e=IC,t=LC){this.storage=e,this.scheduler=t}dispose(){this.clearScheduledSave()}clearScheduledSave(){this.saveTimer!==void 0&&(this.scheduler.clearTimeout(this.saveTimer),this.saveTimer=void 0)}scheduleSave(e,t,n=NC){this.clearScheduledSave(),this.saveTimer=this.scheduler.setTimeout(()=>{this.saveTimer=void 0,t(e)},n)}savePosition(e,t,n,r=FC){if(e===``||t===void 0||!VC(t))return`skipped`;try{if(UC(t,r))return this.storage.setItem(zC(e),JSON.stringify({mode:`bottom`})),`saved`;let i=GC(t,n);if(i===void 0)return`skipped`;let a=WC(t,i);return this.storage.setItem(zC(e),JSON.stringify(a)),`saved`}catch{return`skipped`}}restorePosition(e,t,n,r){let i=this.readPosition(e);return i===void 0?this.scrollToBottom(t):this.restoreExplicitPosition(i,t,n,r)}restoreExplicitPosition(e,t,n,r){if(e.mode===`bottom`)return this.scrollToBottom(t);if(t===void 0||!VC(t))return{status:`skipped`};let i=qC(n,e.anchorId);if(i===void 0)return r?.fallbackToBottom===!1?{status:`missing`,position:e}:this.scrollToBottom(t);let a=t.getBoundingClientRect().top,o=i.getBoundingClientRect().top-a;return t.scrollTop+=o-e.offset,{status:`restored`}}readPosition(e){if(e!==``)try{let t=this.storage.getItem(zC(e));if(t===null||t===``)return;let n=JSON.parse(t);return BC(n)?n:void 0}catch{return}}scrollToBottom(e){return e===void 0||!VC(e)?{status:`skipped`}:(e.scrollTop=e.scrollHeight,{status:`bottom`})}};function zC(e){return`${MC}${e}`}function BC(e){return typeof e!=`object`||!e||!(`mode`in e)?!1:e.mode===`bottom`||e.mode===`anchor`&&`anchorId`in e&&typeof e.anchorId==`string`&&e.anchorId!==``&&`offset`in e&&typeof e.offset==`number`}function VC(e){return e.clientHeight>0&&e.scrollHeight>0}function HC(e){return e.scrollHeight-e.scrollTop-e.clientHeight}function UC(e,t=PC){return HC(e)<t}function WC(e,t){let n=e.getBoundingClientRect().top;return{mode:`anchor`,anchorId:JC(t)??``,offset:t.getBoundingClientRect().top-n}}function GC(e,t){let n=e.getBoundingClientRect(),r,i=-1/0,a,o=1/0;for(let e of t){if(JC(e)===void 0)continue;let t=e.getBoundingClientRect();if(t.bottom<=t.top||t.bottom<n.top||t.top>n.bottom)continue;let s=t.top-n.top;s<=0&&s>=i?(r=e,i=s):s>0&&s<o&&(a=e,o=s)}return r??a}function KC(e,t){let n=e.getBoundingClientRect();return t.find(e=>{let t=e.getBoundingClientRect();return t.bottom>=n.top&&t.top<=n.bottom})}function qC(e,t){return e.find(e=>JC(e)===t)}function JC(e){return e.dataset.scrollAnchorId!==void 0&&e.dataset.scrollAnchorId!==``?e.dataset.scrollAnchorId:void 0}function YC(e){return HC(e)>=e.clientHeight*1}var XC=1e4,ZC=class{constructor(){this.suppressedFollow=!1}notePointerDown(e){this.pointerDownAt=e,this.releasedAt=void 0}notePointerUp(e){this.pointerDownAt=void 0,this.releasedAt=e}holdsOrSettling(e){let t=this.pointerDownAt;if(t!==void 0)return e-t<=XC;let n=this.releasedAt;return n!==void 0&&e-n<250}followsNewest(e){let t=this.pointerDownAt;if(t!==void 0)return e-t>XC?!0:(this.suppressedFollow=!0,!1);let n=this.releasedAt;return n===void 0||e-n>=250?!0:(this.suppressedFollow=!0,!1)}takeSuppressedFollow(){let e=this.suppressedFollow;return this.suppressedFollow=!1,e}},{I:QC}=Ke,$C=e=>e,ew=()=>document.createComment(``),tw=(e,t,n)=>{let r=e._$AA.parentNode,i=t===void 0?e._$AB:t._$AA;if(n===void 0)n=new QC(r.insertBefore(ew(),i),r.insertBefore(ew(),i),e,e.options);else{let t=n._$AB.nextSibling,a=n._$AM,o=a!==e;if(o){let t;n._$AQ?.(e),n._$AM=e,n._$AP!==void 0&&(t=e._$AU)!==a._$AU&&n._$AP(t)}if(t!==i||o){let e=n._$AA;for(;e!==t;){let t=$C(e).nextSibling;$C(r).insertBefore(e,i),e=t}}}return n},nw=(e,t,n=e)=>(e._$AI(t,n),e),rw={},iw=(e,t=rw)=>e._$AH=t,aw=e=>e._$AH,ow=e=>{e._$AR(),e._$AA.remove()},sw=(e,t,n)=>{let r=new Map;for(let i=t;i<=n;i++)r.set(e[i],i);return r},cw=s_(class extends c_{constructor(e){if(super(e),e.type!==o_.CHILD)throw Error(`repeat() can only be used in text expressions`)}dt(e,t,n){let r;n===void 0?n=t:t!==void 0&&(r=t);let i=[],a=[],o=0;for(let t of e)i[o]=r?r(t,o):o,a[o]=n(t,o),o++;return{values:a,keys:i}}render(e,t,n){return this.dt(e,t,n).values}update(e,[t,n,r]){let i=aw(e),{values:a,keys:o}=this.dt(t,n,r);if(!Array.isArray(i))return this.ut=o,a;let s=this.ut??=[],c=[],l,u,d=0,f=i.length-1,p=0,m=a.length-1;for(;d<=f&&p<=m;)if(i[d]===null)d++;else if(i[f]===null)f--;else if(s[d]===o[p])c[p]=nw(i[d],a[p]),d++,p++;else if(s[f]===o[m])c[m]=nw(i[f],a[m]),f--,m--;else if(s[d]===o[m])c[m]=nw(i[d],a[m]),tw(e,c[m+1],i[d]),d++,m--;else if(s[f]===o[p])c[p]=nw(i[f],a[p]),tw(e,i[d],i[f]),f--,p++;else if(l===void 0&&(l=sw(o,p,m),u=sw(s,d,f)),l.has(s[d]))if(l.has(s[f])){let t=u.get(o[p]),n=t===void 0?null:i[t];if(n===null){let t=tw(e,i[d]);nw(t,a[p]),c[p]=t}else c[p]=nw(n,a[p]),tw(e,i[d],n),i[t]=null;p++}else ow(i[f]),f--;else ow(i[d]),d++;for(;p<=m;){let t=tw(e,c[m+1]);nw(t,a[p]),c[p++]=t}for(;d<=f;){let e=i[d++];e!==null&&ow(e)}return this.ut=o,iw(e,c),Me}}),lw=`pi-web:chat-groups:`,uw={read(e){try{if(typeof localStorage>`u`)return;let t=localStorage.getItem(fw(e));return t===null||t===``?void 0:pw(JSON.parse(t))}catch{return}},write(e,t){try{if(typeof localStorage>`u`)return;localStorage.setItem(fw(e),JSON.stringify(t))}catch{}}},dw=class{constructor(e=uw){this.storage=e,this.sessionId=``,this.openGroupKeys=new Set,this.closedDefaultOpenGroupKeys=new Set}syncSession(e){if(this.sessionId===e)return;this.sessionId=e;let t=e===``?void 0:this.storage.read(e);this.openGroupKeys=new Set(t?.open??[]),this.closedDefaultOpenGroupKeys=new Set(t?.closedDefaultOpen??[])}isOpen(e,t){return t?!this.closedDefaultOpenGroupKeys.has(e):this.openGroupKeys.has(e)}applyToggle(e,t,n){let r=this.isOpen(e,n),i=new Set(this.openGroupKeys),a=new Set(this.closedDefaultOpenGroupKeys);return n?(i.delete(e),t?a.delete(e):a.add(e)):(a.delete(e),t?i.add(e):i.delete(e)),(n?!a.has(e):i.has(e))===r&&hw(i,this.openGroupKeys)&&hw(a,this.closedDefaultOpenGroupKeys)?!1:(this.openGroupKeys=i,this.closedDefaultOpenGroupKeys=a,this.persist(),!0)}snapshot(){return{open:[...this.openGroupKeys],closedDefaultOpen:[...this.closedDefaultOpenGroupKeys]}}persist(){this.sessionId!==``&&this.storage.write(this.sessionId,this.snapshot())}};function fw(e){return`${lw}${e}`}function pw(e){if(Array.isArray(e))return{open:mw(e),closedDefaultOpen:[]};if(gw(e))return{open:Array.isArray(e.open)?mw(e.open):[],closedDefaultOpen:Array.isArray(e.closedDefaultOpen)?mw(e.closedDefaultOpen):[]}}function mw(e){return e.filter(e=>typeof e==`string`)}function hw(e,t){if(e.size!==t.size)return!1;for(let n of e)if(!t.has(n))return!1;return!0}function gw(e){return typeof e==`object`&&!!e}function _w(e,t=0){let n=[],r=[],i=0,a=(e,t)=>{r.length||(i=t),r.push(e)},o=()=>{r.length&&(n.push({kind:`group`,messages:r,startIndex:i,endIndex:i+r.length-1}),r=[])};return e.forEach((e,r)=>{let i=e.parts.filter(t=>xw(e,t)),s=e.parts.filter(t=>!xw(e,t)),c=t+r,l={...e.source===void 0?{}:{source:e.source},...e.meta===void 0?{}:{meta:e.meta}};if(s.length&&a({role:e.role,parts:s,...l},c),i.length){o();let t={role:i.every(e=>e.type===`skillRead`)?`skill`:e.role,parts:i,...l};if(yw(t)){let e=bw(s);n.push({kind:`tool-image`,message:t,index:c,...e===void 0?{}:{toolName:e}})}else n.push({kind:`message`,message:t,index:c})}}),o(),n}function vw(e){if(e.every(e=>e.source===`compaction`))return`${String(e.length)} history compaction ${e.length===1?`summary`:`summaries`}`;if(e.every(e=>e.source===`branch_summary`))return`${String(e.length)} branch ${e.length===1?`summary`:`summaries`}`;let t=e.reduce((e,t)=>(e[t.role]=(e[t.role]??0)+1,e),{}),n=Object.entries(t).map(([e,t])=>`${String(t)} ${e}`).join(` · `);return`${String(e.length)} ${e.length===1?`event`:`events`}${n===``?``:` · ${n}`}`}function yw(e){return e.role===`tool`&&e.parts.length>0&&e.parts.every(e=>e.type===`image`)}function bw(e){for(let t of e)if((t.type===`toolCall`||t.type===`toolExecution`||t.type===`toolResult`)&&t.toolName!==``)return t.toolName}function xw(e,t){return e.source===`compaction`||e.source===`branch_summary`?!1:t.type===`skillInvocation`||t.type===`skillRead`||t.type===`image`||t.type===`askUserRecord`||t.type===`text`&&(e.role===`user`||e.role===`assistant`||e.role===`system`||e.role===`bash`)}function Sw(e,t,n){let r=e.length;if(r===0||t.length===0||n.length!==r+1||n[r-1]!==e[r-1])return;let i=n[r],a=e[r-1];if(i===void 0||a===void 0)return;let o=t.at(-1);if(o===void 0)return;let s=t.slice(0,-1),c,l;o.kind===`group`?(c=o.startIndex,l=[...o.messages,i]):(c=o.index,l=[a,i]);let u=_w(l,c);return[...s,...u]}function Cw(e,t){let n=Tw(Ow(e,t)),r={distanceFromBottom:e.scrollHeight-e.scrollTop};return n===void 0?r:{...r,markerId:n.id,markerOffset:n.offset}}function ww(e,t,n){if(n!==void 0&&t.markerOffset!==void 0){let r=n.getBoundingClientRect().top-e.getBoundingClientRect().top;e.scrollTop+=Ew(r,t.markerOffset);return}e.scrollTop=Dw(e.scrollHeight,t.distanceFromBottom)}function Tw(e){let t,n=-1/0,r,i=1/0;for(let a of e)a.offset<=0&&a.offset>=n?(t=a,n=a.offset):a.offset>0&&a.offset<i&&(r=a,i=a.offset);return t??r}function Ew(e,t){return e-t}function Dw(e,t){return Math.max(0,e-t)}function Ow(e,t){let n=e.getBoundingClientRect().top;return t.flatMap(e=>{let t=e.dataset.markerId;return t===void 0?[]:[{id:t,offset:e.getBoundingClientRect().top-n}]})}var kw=600,Aw=1;function jw(e){return!e.hasMore||e.loadingMore||!e.canRequest||e.clientHeight<=0?!1:Mw(e)||Nw(e)}function Mw(e){return e.scrollTop<(e.topThreshold??Math.max(kw,e.clientHeight))}function Nw(e){return e.scrollHeight<=e.clientHeight+Aw}var Pw={left:!1,right:!1},Fw=1;function Iw(e){if(e===void 0)return Pw;let t=Math.max(0,e.scrollWidth-e.clientWidth);return{left:e.scrollLeft>Fw,right:t-e.scrollLeft>Fw}}function Lw(e){return`${e.left?` can-scroll-left`:``}${e.right?` can-scroll-right`:``}`}var Rw=e=>{if(!(typeof ResizeObserver>`u`))return new ResizeObserver(()=>{e()})},zw=class{constructor(e,t=Rw){this.onChange=e,this.createObserver=t,this.current=Pw}get edges(){return this.current}observe(e){if(this.element!==e&&(this.observer?.disconnect(),this.observer=void 0,this.element=e,e!==void 0)){let t=this.createObserver(()=>{this.refresh()});t!==void 0&&(t.observe(e),this.observer=t)}this.refresh()}refresh(){let e=Iw(this.element);e.left===this.current.left&&e.right===this.current.right||(this.current=e,this.onChange())}dispose(){this.observer?.disconnect(),this.observer=void 0,this.element=void 0,this.current=Pw}};function Bw(e){return e.role===`user`&&Vw(e)!==void 0}function Vw(e){if(e.role!==`user`)return;let t=[],n=[];for(let r of e.parts){if(Hw(r)){r.text!==``&&t.push(r.text);continue}r.type===`image`&&r.data!==``&&r.mimeType!==``&&n.push({kind:`image`,mimeType:r.mimeType,data:r.data})}let r=t.join(`
|
|
1610
|
+
`}};H([S({attribute:!1})],OC.prototype,`tree`,void 0),H([S({attribute:!1})],OC.prototype,`onNavigate`,void 0),H([S({attribute:!1})],OC.prototype,`onFork`,void 0),H([S({attribute:!1})],OC.prototype,`onAbort`,void 0),H([S({attribute:!1})],OC.prototype,`onCancel`,void 0),H([C()],OC.prototype,`selectedId`,void 0),H([C()],OC.prototype,`foldedIds`,void 0),H([C()],OC.prototype,`step`,void 0),H([C()],OC.prototype,`operation`,void 0),H([C()],OC.prototype,`summaryMode`,void 0),H([C()],OC.prototype,`customInstructions`,void 0),H([C()],OC.prototype,`busy`,void 0),H([C()],OC.prototype,`aborting`,void 0),H([C()],OC.prototype,`error`,void 0),H([C()],OC.prototype,`statusMessage`,void 0),OC=H([x(`session-tree-navigator`)],OC);function kC(e){return Math.min(Math.max(0,e),EC)}function AC(e){return e===`user`||e===`custom-message`}function jC(e){return DC[e]}function MC(e){return e===void 0?0:Math.max(0,e.offsetWidth-e.clientWidth)}function NC(e){return e.wasWorking&&!e.working}var PC=`pi-web:chat-scroll:`,FC=180,IC=48,LC=2,RC={getItem(e){return typeof localStorage>`u`?null:localStorage.getItem(e)},setItem(e,t){typeof localStorage>`u`||localStorage.setItem(e,t)},removeItem(e){typeof localStorage>`u`||localStorage.removeItem(e)}},zC={setTimeout(e,t){return window.setTimeout(e,t)},clearTimeout(e){window.clearTimeout(e)}},BC=class{constructor(e=RC,t=zC){this.storage=e,this.scheduler=t}dispose(){this.clearScheduledSave()}clearScheduledSave(){this.saveTimer!==void 0&&(this.scheduler.clearTimeout(this.saveTimer),this.saveTimer=void 0)}scheduleSave(e,t,n=FC){this.clearScheduledSave(),this.saveTimer=this.scheduler.setTimeout(()=>{this.saveTimer=void 0,t(e)},n)}savePosition(e,t,n,r=LC){if(e===``||t===void 0||!UC(t))return`skipped`;try{if(GC(t,r))return this.storage.setItem(VC(e),JSON.stringify({mode:`bottom`})),`saved`;let i=qC(t,n);if(i===void 0)return`skipped`;let a=KC(t,i);return this.storage.setItem(VC(e),JSON.stringify(a)),`saved`}catch{return`skipped`}}restorePosition(e,t,n,r){let i=this.readPosition(e);return i===void 0?this.scrollToBottom(t):this.restoreExplicitPosition(i,t,n,r)}restoreExplicitPosition(e,t,n,r){if(e.mode===`bottom`)return this.scrollToBottom(t);if(t===void 0||!UC(t))return{status:`skipped`};let i=YC(n,e.anchorId);if(i===void 0)return r?.fallbackToBottom===!1?{status:`missing`,position:e}:this.scrollToBottom(t);let a=t.getBoundingClientRect().top,o=i.getBoundingClientRect().top-a;return t.scrollTop+=o-e.offset,{status:`restored`}}readPosition(e){if(e!==``)try{let t=this.storage.getItem(VC(e));if(t===null||t===``)return;let n=JSON.parse(t);return HC(n)?n:void 0}catch{return}}scrollToBottom(e){return e===void 0||!UC(e)?{status:`skipped`}:(e.scrollTop=e.scrollHeight,{status:`bottom`})}};function VC(e){return`${PC}${e}`}function HC(e){return typeof e!=`object`||!e||!(`mode`in e)?!1:e.mode===`bottom`||e.mode===`anchor`&&`anchorId`in e&&typeof e.anchorId==`string`&&e.anchorId!==``&&`offset`in e&&typeof e.offset==`number`}function UC(e){return e.clientHeight>0&&e.scrollHeight>0}function WC(e){return e.scrollHeight-e.scrollTop-e.clientHeight}function GC(e,t=IC){return WC(e)<t}function KC(e,t){let n=e.getBoundingClientRect().top;return{mode:`anchor`,anchorId:XC(t)??``,offset:t.getBoundingClientRect().top-n}}function qC(e,t){let n=e.getBoundingClientRect(),r,i=-1/0,a,o=1/0;for(let e of t){if(XC(e)===void 0)continue;let t=e.getBoundingClientRect();if(t.bottom<=t.top||t.bottom<n.top||t.top>n.bottom)continue;let s=t.top-n.top;s<=0&&s>=i?(r=e,i=s):s>0&&s<o&&(a=e,o=s)}return r??a}function JC(e,t){let n=e.getBoundingClientRect();return t.find(e=>{let t=e.getBoundingClientRect();return t.bottom>=n.top&&t.top<=n.bottom})}function YC(e,t){return e.find(e=>XC(e)===t)}function XC(e){return e.dataset.scrollAnchorId!==void 0&&e.dataset.scrollAnchorId!==``?e.dataset.scrollAnchorId:void 0}function ZC(e){return WC(e)>=e.clientHeight*1}var QC=1e4,$C=class{constructor(){this.suppressedFollow=!1}notePointerDown(e){this.pointerDownAt=e,this.releasedAt=void 0}notePointerUp(e){this.pointerDownAt=void 0,this.releasedAt=e}holdsOrSettling(e){let t=this.pointerDownAt;if(t!==void 0)return e-t<=QC;let n=this.releasedAt;return n!==void 0&&e-n<250}followsNewest(e){let t=this.pointerDownAt;if(t!==void 0)return e-t>QC?!0:(this.suppressedFollow=!0,!1);let n=this.releasedAt;return n===void 0||e-n>=250?!0:(this.suppressedFollow=!0,!1)}takeSuppressedFollow(){let e=this.suppressedFollow;return this.suppressedFollow=!1,e}},{I:ew}=Ke,tw=e=>e,nw=()=>document.createComment(``),rw=(e,t,n)=>{let r=e._$AA.parentNode,i=t===void 0?e._$AB:t._$AA;if(n===void 0)n=new ew(r.insertBefore(nw(),i),r.insertBefore(nw(),i),e,e.options);else{let t=n._$AB.nextSibling,a=n._$AM,o=a!==e;if(o){let t;n._$AQ?.(e),n._$AM=e,n._$AP!==void 0&&(t=e._$AU)!==a._$AU&&n._$AP(t)}if(t!==i||o){let e=n._$AA;for(;e!==t;){let t=tw(e).nextSibling;tw(r).insertBefore(e,i),e=t}}}return n},iw=(e,t,n=e)=>(e._$AI(t,n),e),aw={},ow=(e,t=aw)=>e._$AH=t,sw=e=>e._$AH,cw=e=>{e._$AR(),e._$AA.remove()},lw=(e,t,n)=>{let r=new Map;for(let i=t;i<=n;i++)r.set(e[i],i);return r},uw=l_(class extends u_{constructor(e){if(super(e),e.type!==c_.CHILD)throw Error(`repeat() can only be used in text expressions`)}dt(e,t,n){let r;n===void 0?n=t:t!==void 0&&(r=t);let i=[],a=[],o=0;for(let t of e)i[o]=r?r(t,o):o,a[o]=n(t,o),o++;return{values:a,keys:i}}render(e,t,n){return this.dt(e,t,n).values}update(e,[t,n,r]){let i=sw(e),{values:a,keys:o}=this.dt(t,n,r);if(!Array.isArray(i))return this.ut=o,a;let s=this.ut??=[],c=[],l,u,d=0,f=i.length-1,p=0,m=a.length-1;for(;d<=f&&p<=m;)if(i[d]===null)d++;else if(i[f]===null)f--;else if(s[d]===o[p])c[p]=iw(i[d],a[p]),d++,p++;else if(s[f]===o[m])c[m]=iw(i[f],a[m]),f--,m--;else if(s[d]===o[m])c[m]=iw(i[d],a[m]),rw(e,c[m+1],i[d]),d++,m--;else if(s[f]===o[p])c[p]=iw(i[f],a[p]),rw(e,i[d],i[f]),f--,p++;else if(l===void 0&&(l=lw(o,p,m),u=lw(s,d,f)),l.has(s[d]))if(l.has(s[f])){let t=u.get(o[p]),n=t===void 0?null:i[t];if(n===null){let t=rw(e,i[d]);iw(t,a[p]),c[p]=t}else c[p]=iw(n,a[p]),rw(e,i[d],n),i[t]=null;p++}else cw(i[f]),f--;else cw(i[d]),d++;for(;p<=m;){let t=rw(e,c[m+1]);iw(t,a[p]),c[p++]=t}for(;d<=f;){let e=i[d++];e!==null&&cw(e)}return this.ut=o,ow(e,c),Me}}),dw=`pi-web:chat-groups:`,fw={read(e){try{if(typeof localStorage>`u`)return;let t=localStorage.getItem(mw(e));return t===null||t===``?void 0:hw(JSON.parse(t))}catch{return}},write(e,t){try{if(typeof localStorage>`u`)return;localStorage.setItem(mw(e),JSON.stringify(t))}catch{}}},pw=class{constructor(e=fw){this.storage=e,this.sessionId=``,this.openGroupKeys=new Set,this.closedDefaultOpenGroupKeys=new Set}syncSession(e){if(this.sessionId===e)return;this.sessionId=e;let t=e===``?void 0:this.storage.read(e);this.openGroupKeys=new Set(t?.open??[]),this.closedDefaultOpenGroupKeys=new Set(t?.closedDefaultOpen??[])}isOpen(e,t){return t?!this.closedDefaultOpenGroupKeys.has(e):this.openGroupKeys.has(e)}applyToggle(e,t,n){let r=this.isOpen(e,n),i=new Set(this.openGroupKeys),a=new Set(this.closedDefaultOpenGroupKeys);return n?(i.delete(e),t?a.delete(e):a.add(e)):(a.delete(e),t?i.add(e):i.delete(e)),(n?!a.has(e):i.has(e))===r&&_w(i,this.openGroupKeys)&&_w(a,this.closedDefaultOpenGroupKeys)?!1:(this.openGroupKeys=i,this.closedDefaultOpenGroupKeys=a,this.persist(),!0)}snapshot(){return{open:[...this.openGroupKeys],closedDefaultOpen:[...this.closedDefaultOpenGroupKeys]}}persist(){this.sessionId!==``&&this.storage.write(this.sessionId,this.snapshot())}};function mw(e){return`${dw}${e}`}function hw(e){if(Array.isArray(e))return{open:gw(e),closedDefaultOpen:[]};if(vw(e))return{open:Array.isArray(e.open)?gw(e.open):[],closedDefaultOpen:Array.isArray(e.closedDefaultOpen)?gw(e.closedDefaultOpen):[]}}function gw(e){return e.filter(e=>typeof e==`string`)}function _w(e,t){if(e.size!==t.size)return!1;for(let n of e)if(!t.has(n))return!1;return!0}function vw(e){return typeof e==`object`&&!!e}function yw(e,t=0){let n=[],r=[],i=0,a=(e,t)=>{r.length||(i=t),r.push(e)},o=()=>{r.length&&(n.push({kind:`group`,messages:r,startIndex:i,endIndex:i+r.length-1}),r=[])};return e.forEach((e,r)=>{let i=e.parts.filter(t=>Cw(e,t)),s=e.parts.filter(t=>!Cw(e,t)),c=t+r,l={...e.source===void 0?{}:{source:e.source},...e.meta===void 0?{}:{meta:e.meta}};if(s.length&&a({role:e.role,parts:s,...l},c),i.length){o();let t={role:i.every(e=>e.type===`skillRead`)?`skill`:e.role,parts:i,...l};if(xw(t)){let e=Sw(s);n.push({kind:`tool-image`,message:t,index:c,...e===void 0?{}:{toolName:e}})}else n.push({kind:`message`,message:t,index:c})}}),o(),n}function bw(e){if(e.every(e=>e.source===`compaction`))return`${String(e.length)} history compaction ${e.length===1?`summary`:`summaries`}`;if(e.every(e=>e.source===`branch_summary`))return`${String(e.length)} branch ${e.length===1?`summary`:`summaries`}`;let t=e.reduce((e,t)=>(e[t.role]=(e[t.role]??0)+1,e),{}),n=Object.entries(t).map(([e,t])=>`${String(t)} ${e}`).join(` · `);return`${String(e.length)} ${e.length===1?`event`:`events`}${n===``?``:` · ${n}`}`}function xw(e){return e.role===`tool`&&e.parts.length>0&&e.parts.every(e=>e.type===`image`)}function Sw(e){for(let t of e)if((t.type===`toolCall`||t.type===`toolExecution`||t.type===`toolResult`)&&t.toolName!==``)return t.toolName}function Cw(e,t){return e.source===`compaction`||e.source===`branch_summary`?!1:t.type===`skillInvocation`||t.type===`skillRead`||t.type===`image`||t.type===`askUserRecord`||t.type===`text`&&(e.role===`user`||e.role===`assistant`||e.role===`system`||e.role===`bash`)}function ww(e,t,n){let r=e.length;if(r===0||t.length===0||n.length!==r+1||n[r-1]!==e[r-1])return;let i=n[r],a=e[r-1];if(i===void 0||a===void 0)return;let o=t.at(-1);if(o===void 0)return;let s=t.slice(0,-1),c,l;o.kind===`group`?(c=o.startIndex,l=[...o.messages,i]):(c=o.index,l=[a,i]);let u=yw(l,c);return[...s,...u]}function Tw(e,t){let n=Dw(Aw(e,t)),r={distanceFromBottom:e.scrollHeight-e.scrollTop};return n===void 0?r:{...r,markerId:n.id,markerOffset:n.offset}}function Ew(e,t,n){if(n!==void 0&&t.markerOffset!==void 0){let r=n.getBoundingClientRect().top-e.getBoundingClientRect().top;e.scrollTop+=Ow(r,t.markerOffset);return}e.scrollTop=kw(e.scrollHeight,t.distanceFromBottom)}function Dw(e){let t,n=-1/0,r,i=1/0;for(let a of e)a.offset<=0&&a.offset>=n?(t=a,n=a.offset):a.offset>0&&a.offset<i&&(r=a,i=a.offset);return t??r}function Ow(e,t){return e-t}function kw(e,t){return Math.max(0,e-t)}function Aw(e,t){let n=e.getBoundingClientRect().top;return t.flatMap(e=>{let t=e.dataset.markerId;return t===void 0?[]:[{id:t,offset:e.getBoundingClientRect().top-n}]})}var jw=600,Mw=1;function Nw(e){return!e.hasMore||e.loadingMore||!e.canRequest||e.clientHeight<=0?!1:Pw(e)||Fw(e)}function Pw(e){return e.scrollTop<(e.topThreshold??Math.max(jw,e.clientHeight))}function Fw(e){return e.scrollHeight<=e.clientHeight+Mw}var Iw={left:!1,right:!1},Lw=1;function Rw(e){if(e===void 0)return Iw;let t=Math.max(0,e.scrollWidth-e.clientWidth);return{left:e.scrollLeft>Lw,right:t-e.scrollLeft>Lw}}function zw(e){return`${e.left?` can-scroll-left`:``}${e.right?` can-scroll-right`:``}`}var Bw=e=>{if(!(typeof ResizeObserver>`u`))return new ResizeObserver(()=>{e()})},Vw=class{constructor(e,t=Bw){this.onChange=e,this.createObserver=t,this.current=Iw}get edges(){return this.current}observe(e){if(this.element!==e&&(this.observer?.disconnect(),this.observer=void 0,this.element=e,e!==void 0)){let t=this.createObserver(()=>{this.refresh()});t!==void 0&&(t.observe(e),this.observer=t)}this.refresh()}refresh(){let e=Rw(this.element);e.left===this.current.left&&e.right===this.current.right||(this.current=e,this.onChange())}dispose(){this.observer?.disconnect(),this.observer=void 0,this.element=void 0,this.current=Iw}};function Hw(e){return e.role===`user`&&Uw(e)!==void 0}function Uw(e){if(e.role!==`user`)return;let t=[],n=[];for(let r of e.parts){if(Ww(r)){r.text!==``&&t.push(r.text);continue}r.type===`image`&&r.data!==``&&r.mimeType!==``&&n.push({kind:`image`,mimeType:r.mimeType,data:r.data})}let r=t.join(`
|
|
1611
1611
|
|
|
1612
|
-
`).trim();if(!(r===``&&n.length===0))return{text:r,attachments:n}}function
|
|
1612
|
+
`).trim();if(!(r===``&&n.length===0))return{text:r,attachments:n}}function Ww(e){return e.type===`text`}function Gw(e){return e.status===`complete`||e.status===`completed`||e.status===`abandoned`}function Kw(e){return e.status===`paused`||e.status===`blocked`||e.status===`budget_limited`}function qw(e){return e.totalTaskCount<=0?0:Math.min(1,Math.max(0,e.completedTaskCount/e.totalTaskCount))}function Jw(e){return e.totalTaskCount<=0?`No tasks`:`${String(e.completedTaskCount)}/${String(e.totalTaskCount)}`}function Yw(e){switch(e){case`active`:return`Active`;case`paused`:return`Paused`;case`blocked`:return`Blocked`;case`complete`:case`completed`:return`Complete`;case`abandoned`:return`Abandoned`;case`budget_limited`:return`Budget reached`;default:return e.replace(/_/gu,` `)}}function Xw(e){if(e.currentTaskId!==void 0)return Zw(e.tasks,e.currentTaskId)}function Zw(e,t){for(let n of e){if(n.id===t)return n;let e=n.subtasks===void 0?void 0:Zw(n.subtasks,t);if(e!==void 0)return e}}function Qw(e,t=0){let n=[];for(let r of e)n.push({task:r,depth:t}),r.subtasks!==void 0&&n.push(...Qw(r.subtasks,t+1));return n}function $w(e){if(!(e===void 0||e<=0))return e>=1e6?`${(e/1e6).toFixed(1)}M tokens`:e>=1e3?`${String(Math.round(e/1e3))}k tokens`:`${String(e)} tokens`}function eT(e){if(Gw(e))return[];let t=Kw(e)?[{label:`Resume`,command:`/goal-resume`,description:`Resume this goal in the focused session`,destructive:!1}]:[{label:`Pause`,command:`/goal-pause`,description:`Pause this goal`,destructive:!1}];return t.push({label:`Abandon`,command:`/goal-clear`,description:`Archive this goal after confirmation`,destructive:!0}),t}var tT=class extends _{constructor(...e){super(...e),this.goalsLoad={state:`unloaded`,key:void 0,data:[]},this.canRunCommands=!0,this.commandInFlight=!1,this.expanded=new Set}render(){return h`
|
|
1613
1613
|
<section>
|
|
1614
1614
|
<h2>
|
|
1615
1615
|
Goals
|
|
@@ -1625,7 +1625,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
1625
1625
|
</h2>
|
|
1626
1626
|
${this.rows.length===0?this.renderEmpty():h`<div class="goal-list">${this.rows.map(e=>this.renderGoal(e))}</div>`}
|
|
1627
1627
|
</section>
|
|
1628
|
-
`}get rows(){return this.goalsLoad.state===`loaded`?this.goalsLoad.data:[]}sourceRootLabel(e){if(!(new Set(this.rows.map(e=>e.sourceRoot).filter(e=>e!==void 0)).size<2))return e.sourceRoot}get isReading(){return this.goalsLoad.state===`loading`||this.goalsLoad.state===`unloaded`}openGoalsLabel(){let e=this.rows.filter(e=>!
|
|
1628
|
+
`}get rows(){return this.goalsLoad.state===`loaded`?this.goalsLoad.data:[]}sourceRootLabel(e){if(!(new Set(this.rows.map(e=>e.sourceRoot).filter(e=>e!==void 0)).size<2))return e.sourceRoot}get isReading(){return this.goalsLoad.state===`loading`||this.goalsLoad.state===`unloaded`}openGoalsLabel(){let e=this.rows.filter(e=>!Gw(e)).length;return e===0?``:`${String(e)} open`}renderCommands(e){let t=eT(e);return t.length===0?null:h`
|
|
1629
1629
|
<div class="goal-commands">
|
|
1630
1630
|
${t.map(t=>h`
|
|
1631
1631
|
<button
|
|
@@ -1637,7 +1637,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
1637
1637
|
>${t.label}</button>
|
|
1638
1638
|
`)}
|
|
1639
1639
|
</div>
|
|
1640
|
-
`}renderEmpty(){return h`<p class="empty">${this.goalsLoad.state===`failed`?`Couldn't read goals from this workspace.`:this.isReading?`Loading goals…`:`No goals recorded for this workspace.`}</p>`}renderGoal(e){let t=this.expanded.has(e.id),n=
|
|
1640
|
+
`}renderEmpty(){return h`<p class="empty">${this.goalsLoad.state===`failed`?`Couldn't read goals from this workspace.`:this.isReading?`Loading goals…`:`No goals recorded for this workspace.`}</p>`}renderGoal(e){let t=this.expanded.has(e.id),n=qw(e),r=$w(e.tokensUsed),i=Xw(e),a=Gw(e)?`done`:Kw(e)?`blocked`:`active`,o=this.sourceRootLabel(e);return h`
|
|
1641
1641
|
<article class=${`goal ${a}`}>
|
|
1642
1642
|
<button
|
|
1643
1643
|
class="goal-header"
|
|
@@ -1648,8 +1648,8 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
1648
1648
|
>
|
|
1649
1649
|
<span class="goal-caret" aria-hidden="true">${t?`▾`:`▸`}</span>
|
|
1650
1650
|
<span class="goal-objective">${e.objective}</span>
|
|
1651
|
-
<span class=${`goal-status ${a}`}>${
|
|
1652
|
-
<span class="goal-ratio">${
|
|
1651
|
+
<span class=${`goal-status ${a}`}>${Yw(e.status)}</span>
|
|
1652
|
+
<span class="goal-ratio">${Jw(e)}</span>
|
|
1653
1653
|
${o===void 0?g:h`<span class="goal-root" title=${o}>${o}</span>`}
|
|
1654
1654
|
</button>
|
|
1655
1655
|
<div
|
|
@@ -1658,7 +1658,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
1658
1658
|
aria-valuemin="0"
|
|
1659
1659
|
aria-valuemax=${String(e.totalTaskCount)}
|
|
1660
1660
|
aria-valuenow=${String(e.completedTaskCount)}
|
|
1661
|
-
aria-label=${`${e.objective}: ${
|
|
1661
|
+
aria-label=${`${e.objective}: ${Jw(e)} tasks complete`}
|
|
1662
1662
|
>
|
|
1663
1663
|
<span class="goal-bar-fill" style=${`transform: scaleX(${String(n)})`}></span>
|
|
1664
1664
|
</div>
|
|
@@ -1671,7 +1671,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
1671
1671
|
${r===void 0?g:h`<span class="goal-reason">${r}</span>`}
|
|
1672
1672
|
${n===void 0?g:h`<span class="goal-tokens">${n}</span>`}
|
|
1673
1673
|
</p>
|
|
1674
|
-
`}renderDetail(e,t,n){let r=
|
|
1674
|
+
`}renderDetail(e,t,n){let r=Qw(e.tasks);return h`
|
|
1675
1675
|
<div class="goal-detail">
|
|
1676
1676
|
${e.pauseReason===void 0?g:h`<p class="goal-reason detail">${e.pauseReason}</p>`}
|
|
1677
1677
|
${e.verificationContract===void 0?g:h`<p class="goal-contract"><span class="label">Verification</span>${e.verificationContract}</p>`}
|
|
@@ -1707,7 +1707,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
1707
1707
|
</span>
|
|
1708
1708
|
${n?h`<span class="task-now" title="The task the agent reported working on">now</span>`:g}
|
|
1709
1709
|
</li>
|
|
1710
|
-
`}toggle(e){let t=new Set(this.expanded);t.delete(e)||t.add(e),this.expanded=t}static{this.styles=[
|
|
1710
|
+
`}toggle(e){let t=new Set(this.expanded);t.delete(e)||t.add(e),this.expanded=t}static{this.styles=[a_,o`
|
|
1711
1711
|
h2 { min-height: 30px; }
|
|
1712
1712
|
h2 > .section-count { flex: 1 1 auto; margin-inline-start: var(--pi-space-3); color: var(--pi-muted); font-size: var(--pi-text-2xs); font-weight: 400; letter-spacing: normal; }
|
|
1713
1713
|
.refresh-entry { flex: 0 0 auto; display: inline-grid; place-items: center; width: 34px; height: 34px; padding: 0; font-size: var(--pi-text-sm); }
|
|
@@ -1783,7 +1783,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
1783
1783
|
@container (max-width: 580px) {
|
|
1784
1784
|
.goal-header, .refresh-entry { min-height: 42px; }
|
|
1785
1785
|
}
|
|
1786
|
-
`]}};H([S({attribute:!1})]
|
|
1786
|
+
`]}};H([S({attribute:!1})],tT.prototype,`goalsLoad`,void 0),H([S({attribute:!1})],tT.prototype,`onRefresh`,void 0),H([S({attribute:!1})],tT.prototype,`onArchive`,void 0),H([S({attribute:!1})],tT.prototype,`onRunCommand`,void 0),H([S({type:Boolean})],tT.prototype,`canRunCommands`,void 0),H([S({type:Boolean})],tT.prototype,`commandInFlight`,void 0),H([C()],tT.prototype,`expanded`,void 0),H([C()],tT.prototype,`confirmingArchiveId`,void 0),tT=H([x(`goal-panel`)],tT);function nT(e){let t=e?.trim();if(t===void 0||t===``)return;let n=t.indexOf(`/`),r=n===-1?void 0:t.slice(0,n),i=n===-1?t:t.slice(n+1),a=i.lastIndexOf(`:`),o=a===-1?i:i.slice(0,a),s=a===-1?void 0:i.slice(a+1);if(o!==``)return{...r===void 0||r===``?{}:{provider:r},model:o,...s===void 0||s===``?{}:{thinking:s},label:s===void 0||s===``?o:`${o} · ${s}`}}function rT(e){typeof CSS<`u`&&CSS.supports(`field-sizing`,`content`)||(e.style.height=`auto`,e.style.height=`${String(e.scrollHeight)}px`)}var iT=class extends _{constructor(...e){super(...e),this.draftSessionId=``,this.answers={},this.step=0,this.confirmingPartialSubmit=!1,this.submitting=!1}willUpdate(e){if(!e.has(`ask`)&&!e.has(`outcome`)&&!e.has(`draftSessionId`))return;let t=this.currentModelIdentity();t!==this.modelIdentity&&(this.modelIdentity=t,this.answers=this.loadCurrentDraft(),this.confirmingPartialSubmit=!1,this.submitting=!1)}render(){return this.outcome===void 0?this.ask===void 0?null:this.renderOpenAsk(this.ask):this.renderRecord(this.outcome)}renderOpenAsk(e){let t=nd(e.questions,this.answers),n=rd(e.questions,this.answers);return h`
|
|
1787
1787
|
<article class="card open-card" aria-labelledby="ask-user-heading">
|
|
1788
1788
|
<header class="card-header">
|
|
1789
1789
|
<h2 id="ask-user-heading">Questions</h2>
|
|
@@ -1804,7 +1804,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
1804
1804
|
<fieldset
|
|
1805
1805
|
id=${this.questionFieldsetId(n)}
|
|
1806
1806
|
class=${`question${i?` answered`:``}`}
|
|
1807
|
-
aria-describedby=${
|
|
1807
|
+
aria-describedby=${s_(a)}
|
|
1808
1808
|
tabindex="-1"
|
|
1809
1809
|
>
|
|
1810
1810
|
<legend>
|
|
@@ -1906,7 +1906,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
1906
1906
|
${r.fromDraft?h`<p class="draft-note">Draft answer · not sent</p>`:null}
|
|
1907
1907
|
`}
|
|
1908
1908
|
</section>
|
|
1909
|
-
`}changeOption(e,t,n){let r=n.currentTarget;if(!(r instanceof HTMLInputElement))return;if(e.multiple!==!0){r.checked&&this.setAnswer(e,{values:[t]});return}let i=this.answers[e.id],a=r.checked?[...new Set([...i?.values??[],t])]:(i?.values??[]).filter(e=>e!==t);this.setAnswer(e,{values:a,...i?.otherText===void 0?{}:{otherText:i.otherText}})}changeOther(e,t,n){let r=n.currentTarget;if(!(r instanceof HTMLInputElement))return;let i=this.answers[e.id];e.multiple===!0?this.setAnswer(e,{values:[...i?.values??[]],...r.checked?{otherText:i?.otherText??``}:{}}):r.checked&&this.setAnswer(e,{values:[],otherText:this.isOtherSelected(e,i)?i?.otherText??``:``}),r.checked&&this.focusOtherInput(t)}changeOtherText(e,t){let n=t.currentTarget;if(!(n instanceof HTMLTextAreaElement))return;
|
|
1909
|
+
`}changeOption(e,t,n){let r=n.currentTarget;if(!(r instanceof HTMLInputElement))return;if(e.multiple!==!0){r.checked&&this.setAnswer(e,{values:[t]});return}let i=this.answers[e.id],a=r.checked?[...new Set([...i?.values??[],t])]:(i?.values??[]).filter(e=>e!==t);this.setAnswer(e,{values:a,...i?.otherText===void 0?{}:{otherText:i.otherText}})}changeOther(e,t,n){let r=n.currentTarget;if(!(r instanceof HTMLInputElement))return;let i=this.answers[e.id];e.multiple===!0?this.setAnswer(e,{values:[...i?.values??[]],...r.checked?{otherText:i?.otherText??``}:{}}):r.checked&&this.setAnswer(e,{values:[],otherText:this.isOtherSelected(e,i)?i?.otherText??``:``}),r.checked&&this.focusOtherInput(t)}changeOtherText(e,t){let n=t.currentTarget;if(!(n instanceof HTMLTextAreaElement))return;rT(n);let r=this.answers[e.id];this.setAnswer(e,{values:[...r?.values??[]],otherText:n.value.slice(0,qt)})}setAnswer(e,t){let n=t.values.length===0&&t.otherText===void 0?Object.fromEntries(Object.entries(this.answers).filter(([t])=>t!==e.id)):{...this.answers,[e.id]:t};this.answers=n,this.confirmingPartialSubmit=!1,this.ask!==void 0&&this.draftSessionId!==``&&Qu(this.draftSessionId,this.ask.askId,n)}handleSubmit(e,t){if(e.preventDefault(),!this.submitting){if(rd(t.questions,this.answers).length>0){this.showPartialSubmitConfirmation();return}this.submitAnswers(t)}}submitAnswers(e){if(this.submitting)return;this.submitting=!0;let t=this.onSubmit;if(t===void 0){this.submitting=!1;return}let n=e.askId;Promise.resolve().then(()=>t(n,id(e.questions,this.answers))).catch(()=>{}).finally(()=>{this.ask?.askId===n&&(this.submitting=!1)})}async showPartialSubmitConfirmation(){this.confirmingPartialSubmit=!0,await this.updateComplete,this.renderRoot.querySelector(`.send-anyway`)?.focus()}keepEditing(e,t){this.confirmingPartialSubmit=!1;let n=t[0];n!==void 0&&this.focusQuestion(e.questions.indexOf(n))}focusQuestion(e){e<0||this.updateComplete.then(()=>{let t=this.renderRoot.querySelector(`#${this.questionFieldsetId(e)}`);(t?.querySelector(`input, textarea`)??t)?.focus()})}async focusOtherInput(e){await this.updateComplete,this.renderRoot.querySelector(`#${this.otherInputId(e)}`)?.focus()}isOtherSelected(e,t){return t?.otherText===void 0?!1:e.multiple===!0||t.values.length===0}displayedRecordAnswer(e,t){if(t.answered)return{values:[...t.values],...t.otherText===void 0?{}:{otherText:t.otherText},fromDraft:!1};if(e.reason!==`superseded`)return;let n=id([t.question],this.answers).answers[0];if(n!==void 0)return{values:[...n.values],...n.otherText===void 0?{}:{otherText:n.otherText},fromDraft:!0}}optionLabel(e,t){return e.options.find(e=>e.value===t)?.label??t}currentModelIdentity(){if(this.outcome!==void 0)return`record:${this.draftSessionId}:${this.outcome.askId}`;if(this.ask!==void 0)return`open:${this.draftSessionId}:${this.ask.askId}`}loadCurrentDraft(){let e=this.outcome?.askId??this.ask?.askId;return e===void 0||this.draftSessionId===``?{}:Zu(this.draftSessionId,e)}questionGroupName(e,t){return`ask-user:${e.askId}:${t.id}`}questionFieldsetId(e){return`ask-user-question-${String(e)}`}questionDetailId(e){return`ask-user-question-detail-${String(e)}`}otherInputId(e){return`ask-user-other-${String(e)}`}recordQuestionHeadingId(e){return`ask-user-record-question-${String(e)}`}static{this.styles=o`
|
|
1910
1910
|
/* This card is its own shadow root, so the transcript's tap rules do not
|
|
1911
1911
|
reach it: without these, the option buttons stay eligible for the
|
|
1912
1912
|
browser's double-tap-zoom click delay and paint the platform's rectangular
|
|
@@ -2096,9 +2096,9 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
2096
2096
|
.confirmation-actions { justify-content: flex-end; }
|
|
2097
2097
|
.primary-action { min-height: 42px; }
|
|
2098
2098
|
}
|
|
2099
|
-
`}};H([S({attribute:!1})],
|
|
2099
|
+
`}};H([S({attribute:!1})],iT.prototype,`ask`,void 0),H([S({attribute:!1})],iT.prototype,`outcome`,void 0),H([S({attribute:!1})],iT.prototype,`draftSessionId`,void 0),H([S({attribute:!1})],iT.prototype,`onSubmit`,void 0),H([C()],iT.prototype,`answers`,void 0),H([C()],iT.prototype,`step`,void 0),H([C()],iT.prototype,`confirmingPartialSubmit`,void 0),H([C()],iT.prototype,`submitting`,void 0),iT=H([x(`ask-user-card`)],iT);var aT=1e3,oT=120;function sT(e){let t=e.replace(/\r\n/g,`
|
|
2100
2100
|
`).replace(/^\n+/,``).trimEnd(),n=t.indexOf(`
|
|
2101
|
-
`);if(n===-1)return t.length<=
|
|
2101
|
+
`);if(n===-1)return t.length<=oT?{heading:t}:{heading:`${t.slice(0,oT).trimEnd()}\u2026`,body:t};let r=t.slice(0,n).trimEnd(),i=r.length<=oT,a=i?r:`${r.slice(0,oT).trimEnd()}\u2026`,o=i?t.slice(n+1).replace(/\n+$/,``):t;return o.trim()===``?{heading:a}:{heading:a,body:o}}function cT(e){switch(e){case`answered`:return`Answered`;case`cancelled`:return`Cancelled`;case`timeout`:return`Timed out`;case`aborted`:return`Aborted`;case`session-ended`:return`Session ended`}}function lT(e){switch(e.reason){case`answered`:{let t=e.answer;return t===void 0?`Closed without an answer.`:typeof t==`boolean`?`Answered: ${t?`Yes`:`No`}`:t===``?`Answered with an empty response.`:`Answered: ${t}`}case`cancelled`:return`Dismissed without an answer.`;case`timeout`:return`No answer was given before the dialog timed out.`;case`aborted`:return`The run ended before this dialog was answered.`;case`session-ended`:return`The session ended before this dialog was answered.`}}function uT(e,t){if(e===void 0)return;let n=Date.parse(e);if(!Number.isFinite(n))return;let r=n-t;if(r<=0)return`Auto-cancel imminent`;let i=Math.ceil(r/1e3);if(i>=3600){let e=Math.floor(i/3600),t=Math.floor(i%3600/60);return`Auto-cancels in ${String(e)}h ${String(t)}m`}if(i>=60){let e=Math.floor(i/60);return`Auto-cancels in ${String(e)}m ${String(i%60)}s`}return`Auto-cancels in ${String(i)}s`}var dT=class extends _{constructor(...e){super(...e),this.inputValue=``,this.closing=!1,this.countdownNow=0}connectedCallback(){super.connectedCallback(),this.syncCountdownTimer()}disconnectedCallback(){this.stopCountdownTimer(),super.disconnectedCallback()}willUpdate(e){if(!e.has(`dialog`)&&!e.has(`outcome`))return;let t=this.currentIdentity();t!==this.dialogIdentity&&(this.dialogIdentity=t,this.inputValue=``,this.closing=!1),this.syncCountdownTimer()}render(){return this.outcome===void 0?this.dialog===void 0?null:this.renderOpen(this.dialog):this.renderClosed(this.outcome)}renderOpen(e){let t=uT(e.timeoutAt,this.countdownNow===0?Date.now():this.countdownNow),{heading:n,body:r}=sT(e.title);return h`
|
|
2102
2102
|
<article class="card open-card" aria-labelledby="extension-dialog-heading">
|
|
2103
2103
|
<header class="card-header">
|
|
2104
2104
|
<h2 id="extension-dialog-heading">${n}</h2>
|
|
@@ -2130,7 +2130,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
2130
2130
|
type="text"
|
|
2131
2131
|
name="dialog-answer"
|
|
2132
2132
|
aria-label="Your answer"
|
|
2133
|
-
placeholder=${
|
|
2133
|
+
placeholder=${s_(e.placeholder)}
|
|
2134
2134
|
maxlength=${String(Xt)}
|
|
2135
2135
|
.value=${this.inputValue}
|
|
2136
2136
|
?disabled=${this.closing}
|
|
@@ -2144,10 +2144,10 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
2144
2144
|
`}renderClosed(e){return e.reason===`answered`?this.renderAnsweredRow(e):h`
|
|
2145
2145
|
<article class="card closed-card" aria-labelledby="extension-dialog-closed-heading">
|
|
2146
2146
|
<header class="card-header">
|
|
2147
|
-
<h2 id="extension-dialog-closed-heading">${
|
|
2148
|
-
<span class=${`header-status ${e.reason}`}>${
|
|
2147
|
+
<h2 id="extension-dialog-closed-heading">${sT(e.dialog.title).heading}</h2>
|
|
2148
|
+
<span class=${`header-status ${e.reason}`}>${cT(e.reason)}</span>
|
|
2149
2149
|
</header>
|
|
2150
|
-
<p class="closed-summary">${
|
|
2150
|
+
<p class="closed-summary">${lT(e)}</p>
|
|
2151
2151
|
<footer class="dialog-footer">
|
|
2152
2152
|
<button class="secondary-action" type="button" @click=${()=>{this.dismissClosed(e)}}>Dismiss</button>
|
|
2153
2153
|
</footer>
|
|
@@ -2155,10 +2155,10 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
2155
2155
|
`}renderAnsweredRow(e){return h`
|
|
2156
2156
|
<article class="answered-row" aria-labelledby="extension-dialog-answered-heading">
|
|
2157
2157
|
<span class="header-status answered">Answered</span>
|
|
2158
|
-
<h2 id="extension-dialog-answered-heading">${
|
|
2159
|
-
<p class="answered-answer">${
|
|
2158
|
+
<h2 id="extension-dialog-answered-heading">${sT(e.dialog.title).heading}</h2>
|
|
2159
|
+
<p class="answered-answer">${lT(e)}</p>
|
|
2160
2160
|
</article>
|
|
2161
|
-
`}answerDialog(e,t){this.closeWith(e,()=>this.onAnswer?.(e.dialogId,t))}cancelDialog(e){this.closeWith(e,()=>this.onCancel?.(e.dialogId))}submitInput(e,t){e.preventDefault(),this.answerDialog(t,this.inputValue)}closeWith(e,t){if(this.closing)return;this.closing=!0;let n=e.dialogId;Promise.resolve().then(t).catch(()=>{}).finally(()=>{this.dialog?.dialogId===n&&(this.closing=!1)})}changeInput(e){let t=e.currentTarget;t instanceof HTMLInputElement&&(this.inputValue=t.value)}dismissClosed(e){this.onDismiss?.(e.dialog.dialogId)}currentIdentity(){if(this.outcome!==void 0)return`closed:${this.outcome.dialog.dialogId}`;if(this.dialog!==void 0)return`open:${this.dialog.dialogId}`}syncCountdownTimer(){let e=this.isConnected&&this.outcome===void 0&&this.dialog?.timeoutAt!==void 0;if(e&&this.countdownTimer===void 0){this.countdownNow=Date.now(),this.countdownTimer=window.setInterval(()=>{this.countdownNow=Date.now()},
|
|
2161
|
+
`}answerDialog(e,t){this.closeWith(e,()=>this.onAnswer?.(e.dialogId,t))}cancelDialog(e){this.closeWith(e,()=>this.onCancel?.(e.dialogId))}submitInput(e,t){e.preventDefault(),this.answerDialog(t,this.inputValue)}closeWith(e,t){if(this.closing)return;this.closing=!0;let n=e.dialogId;Promise.resolve().then(t).catch(()=>{}).finally(()=>{this.dialog?.dialogId===n&&(this.closing=!1)})}changeInput(e){let t=e.currentTarget;t instanceof HTMLInputElement&&(this.inputValue=t.value)}dismissClosed(e){this.onDismiss?.(e.dialog.dialogId)}currentIdentity(){if(this.outcome!==void 0)return`closed:${this.outcome.dialog.dialogId}`;if(this.dialog!==void 0)return`open:${this.dialog.dialogId}`}syncCountdownTimer(){let e=this.isConnected&&this.outcome===void 0&&this.dialog?.timeoutAt!==void 0;if(e&&this.countdownTimer===void 0){this.countdownNow=Date.now(),this.countdownTimer=window.setInterval(()=>{this.countdownNow=Date.now()},aT);return}e||this.stopCountdownTimer()}stopCountdownTimer(){this.countdownTimer!==void 0&&(window.clearInterval(this.countdownTimer),this.countdownTimer=void 0)}static{this.styles=o`
|
|
2162
2162
|
/* This card is its own shadow root, so the transcript's tap rules do not
|
|
2163
2163
|
reach it: without these, the option buttons stay eligible for the
|
|
2164
2164
|
browser's double-tap-zoom click delay and paint the platform's rectangular
|
|
@@ -2220,6 +2220,13 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
2220
2220
|
line-height: 1.45;
|
|
2221
2221
|
white-space: pre-wrap;
|
|
2222
2222
|
overflow-wrap: anywhere;
|
|
2223
|
+
/* The one inner scroller of the card: long details (task lists, contracts)
|
|
2224
|
+
cap here so the action row below stays on screen without scrolling the
|
|
2225
|
+
whole card — nested scrollers in a 45vh slot put the confirm buttons
|
|
2226
|
+
out of a thumb's reach. */
|
|
2227
|
+
max-height: 40vh;
|
|
2228
|
+
overflow-y: auto;
|
|
2229
|
+
overscroll-behavior-y: contain;
|
|
2223
2230
|
}
|
|
2224
2231
|
.dialog-detail:focus-visible { outline: 2px solid var(--pi-accent); outline-offset: -2px; }
|
|
2225
2232
|
.dialog-options {
|
|
@@ -2345,7 +2352,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
2345
2352
|
does not fit. */
|
|
2346
2353
|
.dialog-detail { max-height: min(40vh, 320px); overflow-y: auto; overscroll-behavior: contain; }
|
|
2347
2354
|
}
|
|
2348
|
-
`}};H([S({attribute:!1})],
|
|
2355
|
+
`}};H([S({attribute:!1})],dT.prototype,`dialog`,void 0),H([S({attribute:!1})],dT.prototype,`outcome`,void 0),H([S({attribute:!1})],dT.prototype,`onAnswer`,void 0),H([S({attribute:!1})],dT.prototype,`onCancel`,void 0),H([S({attribute:!1})],dT.prototype,`onDismiss`,void 0),H([C()],dT.prototype,`inputValue`,void 0),H([C()],dT.prototype,`closing`,void 0),H([C()],dT.prototype,`countdownNow`,void 0),dT=H([x(`extension-dialog-card`)],dT);var fT=class extends _{constructor(...e){super(...e),this.positionPercent=0,this.loadedPercent=100}render(){let e=pT(this.positionPercent),t=pT(this.loadedPercent),n=`Message position: about ${String(Math.round(e))}% through conversation. ${String(Math.round(t))}% of messages loaded.`;return h`
|
|
2349
2356
|
<div
|
|
2350
2357
|
class="meter"
|
|
2351
2358
|
style=${`--position:${e.toFixed(2)}%;`}
|
|
@@ -2369,24 +2376,24 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
2369
2376
|
.track { position: relative; height: 4px; margin-top: 4px; border-radius: 999px; background: color-mix(in srgb, var(--pi-border-muted) 34%, transparent); box-shadow: 0 0 0 1px color-mix(in srgb, var(--pi-bg) 55%, transparent); }
|
|
2370
2377
|
.progress { position: absolute; left: 0; width: var(--position); top: 0; bottom: 0; border-radius: 999px; background: color-mix(in srgb, var(--pi-accent) 42%, var(--pi-border-muted)); }
|
|
2371
2378
|
.marker { position: absolute; left: var(--position); top: 50%; width: 10px; height: 10px; border: 2px solid var(--pi-bg); border-radius: 50%; background: var(--pi-accent); box-shadow: 0 2px 8px var(--pi-shadow); transform: translate(-50%, -50%); }
|
|
2372
|
-
`}};H([S({type:Number})],
|
|
2373
|
-
<section class=${`tool-card ${
|
|
2379
|
+
`}};H([S({type:Number})],fT.prototype,`positionPercent`,void 0),H([S({type:Number})],fT.prototype,`loadedPercent`,void 0),fT=H([x(`conversation-meter`)],fT);function pT(e){return Number.isFinite(e)?Math.min(100,Math.max(0,e)):0}var mT=new B.Renderer;mT.html=({text:e})=>vT(e);var hT=300,gT=new Map;function _T(e){let t=gT.get(e);if(t!==void 0)return t;let n=bT(B.parse(e,{async:!1,breaks:!0,gfm:!0,renderer:mT}));if(gT.set(e,n),gT.size>hT){let e=gT.keys().next().value;e!==void 0&&gT.delete(e)}return n}function vT(e){return e.replaceAll(`&`,`&`).replaceAll(`<`,`<`).replaceAll(`>`,`>`)}var yT=`table-scroll`;function bT(e){let t=document.createElement(`template`);return t.innerHTML=e,t.content.querySelectorAll(`script, style, iframe, object, embed`).forEach(e=>{e.remove()}),t.content.querySelectorAll(`*`).forEach(e=>{for(let t of[...e.attributes]){let n=t.name.toLowerCase();n.startsWith(`on`)&&e.removeAttribute(t.name),(n===`href`||n===`src`)&&!ST(t.value)&&e.removeAttribute(t.name)}e.tagName===`A`&&(e.setAttribute(`target`,`_blank`),e.setAttribute(`rel`,`noreferrer noopener`))}),xT(t.content),t.innerHTML}function xT(e){e.querySelectorAll(`table`).forEach(e=>{if(e.parentElement?.classList.contains(yT)===!0)return;let t=document.createElement(`div`);t.className=yT,t.setAttribute(`role`,`region`),t.setAttribute(`aria-label`,`Table`),t.setAttribute(`tabindex`,`0`),e.before(t),t.append(e)})}function ST(e){if(e.startsWith(`#`)||e.startsWith(`/`))return!0;try{return[`http:`,`https:`,`mailto:`].includes(new URL(e).protocol)}catch{return!1}}var CT=class extends _{constructor(...e){super(...e),this.text=``,this.parsedText=``,this.parsedHtml=``,this.enhancedForHtml=``,this.streamingSuffix=``,this.onFormattedClick=e=>{if(!(e.target instanceof Element))return;let t=e.target.closest(`.code-copy-button`);if(!(t instanceof HTMLButtonElement))return;let n=t.closest(`.code-block-wrapper`);if(!(n instanceof HTMLElement))return;let r=n.querySelector(`pre code`);r instanceof HTMLElement&&this.copyCode(r.textContent,t)}}render(){if(!(this.parsedText.length>0&&this.text.startsWith(this.parsedText)&&this.text.length>this.parsedText.length))return this.text!==this.parsedText&&(this.parsedHtml=_T(this.text),this.parsedText=this.text),this.settleTimer=void 0,this.streamingSuffix=``,h`<div class="formatted" dir="auto" @click=${this.onFormattedClick}>${f_(this.parsedHtml)}</div>`;let e=this.text.slice(this.parsedText.length);return this.streamingSuffix=e,this.scheduleSettleParse(),h`<div class="formatted" dir="auto" @click=${this.onFormattedClick}>${f_(this.parsedHtml)}${e===``?``:h`<span class="stream-suffix">${e}</span>`}</div>`}updated(){this.enhancedForHtml!==this.parsedHtml&&(this.enhancedForHtml=this.parsedHtml,this.enhanceCodeBlocks())}scheduleSettleParse(){this.settleTimer===void 0&&(this.settleTimer=setTimeout(()=>{this.settleTimer=void 0,this.parsedText!==this.text&&(this.parsedHtml=_T(this.text),this.parsedText=this.text,this.streamingSuffix=``,this.requestUpdate())},350))}enhanceCodeBlocks(){this.renderRoot.querySelectorAll(`pre`).forEach(e=>{if(!(e instanceof HTMLPreElement)||e.parentElement?.classList.contains(`code-block-wrapper`)===!0||!(e.querySelector(`code`)instanceof HTMLElement))return;let t=document.createElement(`div`);t.className=`code-block-wrapper`;let n=document.createElement(`button`);n.type=`button`,n.className=`code-copy-button`,n.title=`Copy code block`,n.setAttribute(`aria-label`,`Copy code block`);let r=document.createElement(`span`);r.setAttribute(`aria-hidden`,`true`),r.textContent=`⧉`,n.append(r),e.before(t),t.append(e,n)})}async copyCode(e,t){let n=await gS(e);this.setCopyButtonState(t,n?`copied`:`failed`),window.setTimeout(()=>{this.setCopyButtonState(t,`idle`)},1200)}setCopyButtonState(e,t){let n=e.querySelector(`span`);n!==null&&(n.textContent=t===`copied`?`✓`:`⧉`);let r=t===`copied`?`Copied code block`:t===`failed`?`Failed to copy code block`:`Copy code block`;e.title=r,e.setAttribute(`aria-label`,r)}static{this.styles=o_}};H([S()],CT.prototype,`text`,void 0),CT=H([x(`formatted-text`)],CT);var wT=180,TT=class extends _{constructor(...e){super(...e),this.streaming=!1,this.showFullDiff=!1,this.copied=!1,this.diffOpen=!0}render(){let e=this.execution;if(e===void 0)return null;let t=r_(e.status,this.streaming),n=DT(e.args),r=kT(e.details),i=e.preview,a=r??i?.diff,o=a===void 0?void 0:AT(a),s=r!==void 0&&i?.diff!==void 0&&r!==i.diff,c=e.status===`error`?e.resultText:i?.error,l=a===void 0?e.resultText:void 0,u=ET(e,n);return h`
|
|
2380
|
+
<section class=${`tool-card ${t}`}>
|
|
2374
2381
|
<div class="tool-header">
|
|
2375
2382
|
<div class="tool-title">
|
|
2376
|
-
<span class="status-icon" aria-hidden="true">${
|
|
2383
|
+
<span class="status-icon" aria-hidden="true">${PT[t]}</span>
|
|
2377
2384
|
<strong>${e.toolName}</strong>
|
|
2378
|
-
${this.renderHeaderTarget(
|
|
2385
|
+
${this.renderHeaderTarget(u)}
|
|
2379
2386
|
</div>
|
|
2380
2387
|
<div class="tool-meta">
|
|
2381
|
-
${
|
|
2382
|
-
${
|
|
2383
|
-
<span class="status-label">${
|
|
2388
|
+
${OT(e)===void 0?null:h`<span>${OT(e)}</span>`}
|
|
2389
|
+
${o===void 0?null:h`<span class="diff-stats"><b class="added">+${o.added}</b><span>/</span><b class="removed">-${o.removed}</b></span>`}
|
|
2390
|
+
<span class="status-label">${FT[t]}</span>
|
|
2384
2391
|
</div>
|
|
2385
2392
|
</div>
|
|
2386
2393
|
|
|
2387
|
-
${
|
|
2388
|
-
${
|
|
2389
|
-
${
|
|
2394
|
+
${s?h`<p class="notice">Applied diff differs from the preview.</p>`:null}
|
|
2395
|
+
${c===void 0||c===``?null:h`<pre class="error-text">${c}</pre>`}
|
|
2396
|
+
${a===void 0?this.renderTextBody(l,e.status===`error`,u):this.renderDiffBody(a,r===void 0?`Preview diff`:`Applied diff`,u)}
|
|
2390
2397
|
</section>
|
|
2391
2398
|
`}renderHeaderTarget(e){return e===void 0?null:h`<span class=${e.label===`File`?`path`:`summary`} title=${e.text} aria-label=${`${e.label}: ${e.text}`}>${e.text}</span>`}renderExpandedTarget(e){return e===void 0?null:h`
|
|
2392
2399
|
<div class="detail-target">
|
|
@@ -2405,7 +2412,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
2405
2412
|
`}
|
|
2406
2413
|
</details>
|
|
2407
2414
|
`}renderDiffBody(e,t,n){let r=e.split(`
|
|
2408
|
-
`),i=!this.showFullDiff&&r.length>
|
|
2415
|
+
`),i=!this.showFullDiff&&r.length>wT,a=i?r.slice(0,wT):r;return h`
|
|
2409
2416
|
<details class="diff-details" ?open=${this.diffOpen} @toggle=${e=>{this.onDiffToggle(e)}}>
|
|
2410
2417
|
<summary>
|
|
2411
2418
|
<span>${t}</span>
|
|
@@ -2416,17 +2423,18 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
2416
2423
|
<span>${i?`Showing ${String(a.length)} of ${String(r.length)} lines`:`Full diff`}</span>
|
|
2417
2424
|
<button type="button" @click=${()=>{this.copyDiff(e)}}>${this.copied?`Copied`:`Copy diff`}</button>
|
|
2418
2425
|
</div>
|
|
2419
|
-
<pre class="diff" aria-label=${t}><code class="diff-content">${a.map(e=>h`<span class=${
|
|
2426
|
+
<pre class="diff" aria-label=${t}><code class="diff-content">${a.map(e=>h`<span class=${jT(e)}>${e}</span>`)}</code></pre>
|
|
2420
2427
|
${i?h`
|
|
2421
2428
|
<button class="show-more" type="button" @click=${()=>{this.showFullDiff=!0}}>
|
|
2422
2429
|
Show all ${String(r.length)} diff lines
|
|
2423
2430
|
</button>
|
|
2424
2431
|
`:null}
|
|
2425
2432
|
</details>
|
|
2426
|
-
`}onDiffToggle(e){let t=e.currentTarget;t instanceof HTMLDetailsElement&&(this.diffOpen=t.open)}async copyDiff(e){if(!await
|
|
2433
|
+
`}onDiffToggle(e){let t=e.currentTarget;t instanceof HTMLDetailsElement&&(this.diffOpen=t.open)}async copyDiff(e){if(!await gS(e)){this.copied=!1;return}this.copied=!0,window.setTimeout(()=>{this.copied=!1},1200)}static{this.styles=o`
|
|
2427
2434
|
:host { display: block; width: 100%; max-width: 100%; min-width: 0; color: var(--pi-text); }
|
|
2428
2435
|
.tool-card { display: grid; gap: 8px; width: 100%; max-width: 100%; min-width: 0; box-sizing: border-box; overflow: hidden; border: 1px solid var(--pi-border); border-radius: 8px; background: var(--pi-bg); padding: 9px; color: var(--pi-text); }
|
|
2429
2436
|
.tool-card.running, .tool-card.pending { border-color: var(--pi-warning-border); background: var(--pi-warning-surface); }
|
|
2437
|
+
.tool-card.interrupted { border-color: var(--pi-border); background: var(--pi-surface); }
|
|
2430
2438
|
.tool-card.success { border-color: var(--pi-success-border); background: var(--pi-success-bg); }
|
|
2431
2439
|
.tool-card.error { border-color: var(--pi-danger); background: color-mix(in srgb, var(--pi-danger) 10%, var(--pi-bg)); }
|
|
2432
2440
|
.tool-header { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; min-width: 0; }
|
|
@@ -2468,9 +2476,9 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
2468
2476
|
.diff .added { background: color-mix(in srgb, var(--pi-success) 12%, transparent); }
|
|
2469
2477
|
.diff .removed { background: color-mix(in srgb, var(--pi-danger) 12%, transparent); }
|
|
2470
2478
|
.show-more { justify-self: start; }
|
|
2471
|
-
`}};H([S({attribute:!1})],
|
|
2472
|
-
`))
|
|
2473
|
-
${
|
|
2479
|
+
`}};H([S({attribute:!1})],TT.prototype,`execution`,void 0),H([S({type:Boolean})],TT.prototype,`streaming`,void 0),H([C()],TT.prototype,`showFullDiff`,void 0),H([C()],TT.prototype,`copied`,void 0),H([C()],TT.prototype,`diffOpen`,void 0),TT=H([x(`tool-execution-view`)],TT);function ET(e,t){if(t!==void 0&&t!==``)return{label:`File`,text:t};let n=RT(e.args,`command`);if(n!==void 0&&n!==``)return{label:`Command`,text:n};if(e.summary!==``)return{label:`Input`,text:e.summary}}function DT(e){return RT(e,`path`)??RT(e,`file_path`)}function OT(e){if(e.toolName!==`edit`)return;let t=LT(e.args,`edits`);if(Array.isArray(t))return`${String(t.length)} edit${t.length===1?``:`s`}`;if(typeof LT(e.args,`oldText`)==`string`&&typeof LT(e.args,`newText`)==`string`)return`1 edit`}function kT(e){return RT(e,`diff`)}function AT(e){let t=0,n=0;for(let r of e.split(`
|
|
2480
|
+
`))MT(r)?t++:NT(r)&&n++;return{added:t,removed:n}}function jT(e){return MT(e)?`added`:NT(e)?`removed`:e.startsWith(`@@`)?`hunk`:e.startsWith(`+++`)||e.startsWith(`---`)?`file`:e.startsWith(`diff `)||e.startsWith(`index `)?`meta`:`context`}function MT(e){return e.startsWith(`+`)&&!e.startsWith(`+++`)}function NT(e){return e.startsWith(`-`)&&!e.startsWith(`---`)}var PT={pending:`○`,running:`●`,success:`✓`,error:`✖`,interrupted:`○`},FT={pending:`pending`,running:`running`,success:`done`,error:`failed`,interrupted:`interrupted`};function IT(e){return typeof e==`object`&&!!e}function LT(e,t){return IT(e)?e[t]:void 0}function RT(e,t){let n=LT(e,t);return typeof n==`string`?n:void 0}var zT=o`
|
|
2481
|
+
${KS}
|
|
2474
2482
|
/* Mobile browsers paint a rectangular highlight on tap, which looks pasted-on
|
|
2475
2483
|
over a round or rounded control. Suppressed in favour of the app's own
|
|
2476
2484
|
pressed and focus styling; :focus-visible still shows keyboard focus, so
|
|
@@ -2741,7 +2749,11 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
2741
2749
|
/* Its own row of the column, so the transcript above can grow all it likes
|
|
2742
2750
|
without moving a control the reader is aiming at. Tall questions scroll
|
|
2743
2751
|
inside the slot rather than pushing the composer off the screen. */
|
|
2744
|
-
|
|
2752
|
+
/* No scroll of its own: the card's detail caps and scrolls internally, so
|
|
2753
|
+
the action row is always on screen. The slot used to scroll the whole
|
|
2754
|
+
card inside 45vh and the confirm buttons landed below the fold of an
|
|
2755
|
+
inner scroller a thumb could not drive. */
|
|
2756
|
+
.waiting-slot { flex: 0 0 auto; margin: 0 var(--pi-chat-gutter) var(--pi-space-4); }
|
|
2745
2757
|
.activity-dock { flex: 0 0 auto; margin: 0 var(--pi-chat-gutter) 10px; z-index: var(--pi-layer-sticky); display: flex; align-items: center; gap: var(--pi-space-4); min-width: 0; box-sizing: border-box; border: 1px solid var(--pi-border); border-radius: var(--pi-radius-pill); background: var(--pi-bg-overlay); color: var(--pi-muted); padding: var(--pi-space-4) var(--pi-space-6); font-size: var(--pi-text-sm); pointer-events: none; box-shadow: 0 8px 28px var(--pi-shadow); backdrop-filter: blur(6px); }
|
|
2746
2758
|
/* Idle is the state nobody needs a full-width banner for: keep the signal,
|
|
2747
2759
|
drop the bar that looked like an empty card above the composer.
|
|
@@ -2951,23 +2963,23 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
2951
2963
|
pre { margin: var(--pi-space-3) 0 0; white-space: pre-wrap; overflow-wrap: anywhere; font: inherit; direction: ltr; text-align: left; unicode-bidi: isolate; }
|
|
2952
2964
|
.shell-output { color: var(--pi-text); font: 13px ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; line-height: 1.45; direction: ltr; text-align: left; unicode-bidi: isolate; }
|
|
2953
2965
|
@keyframes pulse { 0%, 100% { transform: scale(.75); opacity: .55; } 50% { transform: scale(1.2); opacity: 1; } }
|
|
2954
|
-
`,
|
|
2966
|
+
`,BT=8,VT=new Intl.DateTimeFormat(void 0,{dateStyle:`medium`,timeStyle:`medium`}),HT=new Intl.DateTimeFormat(void 0,{timeStyle:`short`});function UT(e){if(typeof e!=`object`||!e)return;let t=Reflect.get(e,`queuedMessages`);if(Array.isArray(t))return{queuedMessages:t}}function WT(e){return h`
|
|
2955
2967
|
<svg class=${`notification-icon notification-disclosure-icon${e?``:` expanded`}`} viewBox="0 0 24 24" aria-hidden="true" focusable="false">
|
|
2956
2968
|
<path d="m9 18 6-6-6-6"></path>
|
|
2957
2969
|
</svg>
|
|
2958
|
-
`}function
|
|
2970
|
+
`}function GT(){return h`
|
|
2959
2971
|
<svg class="notification-icon notification-close-icon" viewBox="0 0 24 24" aria-hidden="true" focusable="false">
|
|
2960
2972
|
<path d="M6 6l12 12"></path>
|
|
2961
2973
|
<path d="M18 6 6 18"></path>
|
|
2962
2974
|
</svg>
|
|
2963
|
-
`}function WT(e){return typeof e==`object`&&!!e&&typeof Reflect.get(e,`machineId`)==`string`&&typeof Reflect.get(e,`cwd`)==`string`&&typeof Reflect.get(e,`sessionId`)==`string`}function GT(e){return KT(e,0,100)}function KT(e,t,n){return Number.isFinite(e)?Math.min(n,Math.max(t,e)):t}function qT(e){return e!==void 0&&!cc(e.state)}function JT(e){if(e.state===`sending`)return{glyph:`◌`,text:`Sending`,label:`Sending`,tone:`pending`};if(e.state===`failed`)return{glyph:`!`,text:`Not sent`,label:`Not sent - the server never received this message`,tone:`failed`};if(e.state===`queued`){let t=e.kind===`steer`?`Queued to steer`:`Queued`;return{glyph:`✓`,text:t,label:`${t} - the server has this message and the agent will take it next`,tone:`received`}}return e.state===`received`?{glyph:`✓`,text:`Sent`,label:`Sent - the server received this message`,tone:`received`}:{glyph:`✓✓`,text:`Read`,label:`Read - the agent took this message into the conversation`,tone:`delivered`}}function YT(e){return{src:`data:${e.mimeType};base64,${e.data}`,alt:`attached image`}}function XT(e){return e===void 0||e===``?`tool output`:`${e} output`}function ZT(e){return`m:${String(e)}`}function QT(e){return`g:${String(e)}`}function $T(e){return`e:${String(e)}`}function eE(e){return`g:${String(e)}`}function tE(e){return e?`msg event-group live`:`msg event-group`}function nE(e){return e?`live events`:`events`}function rE(e){let t=e.meta?.timestamp;return[t===void 0?void 0:iE(t),aE(e),e.meta?.thinkingLevel].filter(e=>e!==void 0&&e!==``).join(` · `)}function iE(e){let t=new Date(e);if(Number.isFinite(t.getTime()))return zT.format(t)}function aE(e){let t=e.meta?.model;if(t===void 0)return;let n=t.responseId??t.id;return n===void 0||n===``?t.provider:t.provider!==void 0&&t.provider!==``?`${t.provider}/${n}`:n}var q=class extends _{constructor(...e){super(...e),this.messages=[],this.sessionId=``,this.messageStart=0,this.messageEnd=0,this.messageTotal=0,this.hasMore=!1,this.loadingMore=!1,this.isSendingPrompt=!1,this.isCompacting=!1,this.pendingMessageCount=0,this.clientQueuedMessages=[],this.askDraftSessionId=``,this.pendingDialogs=[],this.commandLedger=[],this.goalCommandInFlight=!1,this.closedDialogs=[],this.activityFailed=!1,this.notificationsFailed=!1,this.pinnedToBottom=!0,this.followGate=new ZC,this.drawerGate=new ZC,this.jumpToBottomVisible=!1,this.zoomedImage=void 0,this.collapsedTopDrawerKeys=new Set,this.expandedTopDrawerKeys=new Set,this.drawerWorkWasRunning=!1,this.goalsLoad={state:`unloaded`,key:void 0,data:[]},this.activityFilter=`all`,this.activityScope=`active`,this.turnNowMs=0,this.disclosures=new dw,this.scrollController=new RC,this.drawerTabEdgeTracker=new zw(()=>{this.requestUpdate()}),this.suppressScrollSave=!1,this.suppressLoadMoreRequests=!1,this.groupedMessagesStart=0,this.groupedMessagesCache=[],this.messageMetaCache=new WeakMap,this.messageCopyTextCache=new WeakMap,this.lastScrollTop=0,this.lastClientHeight=0,this.prependRestoreToken=0,this.loadMoreRequested=!1,this.onViewportResize=()=>{this.pinnedToBottom?this.scrollToBottom():this.lastClientHeight=this.chat?.clientHeight??0},this.onImageLoad=()=>{this.pinnedToBottom&&this.scrollToBottom()},this.openImageZoom=(e,t)=>{this.zoomedImage={src:e,alt:t}},this.closeImageZoom=()=>{this.zoomedImage!==void 0&&(this.zoomedImage=void 0)},this.onImageZoomDialogClick=e=>{e.target===this.imageZoomDialog&&this.closeImageZoom()},this.onPageHide=()=>{this.saveScrollPosition()},this.handleClearServerQueue=()=>{this.onClearServerQueue?.(this.status?.queuedMessages??[])},this.closeActivityOutput=()=>{this.activityOutput!==void 0&&this.onCloseActivityOutput?.()},this.onActivityOutputDialogClick=e=>{e.target===this.activityOutputDialog&&this.closeActivityOutput()},this.closeActivityConversation=()=>{this.activityConversation!==void 0&&this.onCloseActivityConversation?.()},this.onActivityConversationDialogClick=e=>{e.target===this.activityConversationDialog&&this.closeActivityConversation()}}connectedCallback(){super.connectedCallback(),window.addEventListener(`resize`,this.onViewportResize),window.addEventListener(`pagehide`,this.onPageHide),window.visualViewport?.addEventListener(`resize`,this.onViewportResize)}firstUpdated(){this.lastClientHeight=this.chat?.clientHeight??0}disconnectedCallback(){this.stopTurnClock(),this.saveScrollPosition(),this.scrollController.dispose(),this.drawerTabEdgeTracker.dispose(),this.dockResizeObserver?.disconnect(),this.dockResizeObserver=void 0,this.observedDock=void 0,this.releaseImageZoomModal(),this.releaseActivityOutputModal(),this.prependRestoreToken+=1,this.restoreScrollFrame!==void 0&&cancelAnimationFrame(this.restoreScrollFrame),this.loadMoreCheckFrame!==void 0&&cancelAnimationFrame(this.loadMoreCheckFrame),this.scrollToBottomFrame!==void 0&&cancelAnimationFrame(this.scrollToBottomFrame),this.conversationRailFrame!==void 0&&cancelAnimationFrame(this.conversationRailFrame),this.catchUpFollowTimer!==void 0&&(clearTimeout(this.catchUpFollowTimer),this.catchUpFollowTimer=void 0),this.drawerCatchUpTimer!==void 0&&(clearTimeout(this.drawerCatchUpTimer),this.drawerCatchUpTimer=void 0),window.removeEventListener(`resize`,this.onViewportResize),window.removeEventListener(`pagehide`,this.onPageHide),window.visualViewport?.removeEventListener(`resize`,this.onViewportResize),super.disconnectedCallback()}savePreviousSessionScrollPosition(e){typeof e!=`string`||e===``||e===this.sessionId||this.saveScrollPosition(e)}prepareSessionUiState(){this.turnStartedAtMs=void 0,this.disclosures.syncSession(this.sessionId),this.pendingNotificationFocus=void 0,this.retainedEmptyNotificationTrayTargetKey=void 0,this.drawerHold=void 0,this.scrollController.clearScheduledSave(),this.suppressScrollSave=!1,this.suppressLoadMoreRequests=!1,this.pendingScrollRestoreSessionId=void 0,this.pendingScrollRestorePosition=void 0,this.heldWaiting=void 0,this.heldWaitingClearTimer!==void 0&&(clearTimeout(this.heldWaitingClearTimer),this.heldWaitingClearTimer=void 0),this.prependRestoreToken+=1,this.restoreScrollFrame!==void 0&&(cancelAnimationFrame(this.restoreScrollFrame),this.restoreScrollFrame=void 0)}willUpdate(e){if(this.foldDrawerAsWorkFinishes(),(e.has(`subagents`)||e.has(`subagentRuns`)||e.has(`backgroundTasks`))&&(this.activityRowsSessionId=this.sessionId),e.has(`sessionId`)?(this.savePreviousSessionScrollPosition(e.get(`sessionId`)),this.prepareSessionUiState()):e.has(`notificationInbox`)&&this.notificationTargetChanged(e.get(`notificationInbox`))&&(this.pendingNotificationFocus=void 0,this.retainedEmptyNotificationTrayTargetKey=void 0,this.drawerHold=void 0),e.has(`notificationInbox`)){let t=e.get(`notificationInbox`);this.offerDrawerInbox(hE(t)?this.visibleInboxOf(t):void 0)}(e.has(`messages`)||e.has(`pendingAsk`)||e.has(`pendingDialogs`)||e.has(`closedDialogs`))&&(this.pinnedToBottom=this.pinnedToBottom&&(this.didChatHeightChange()||this.isNearBottom()))}update(e){let t=this.isPrependingMessages(e)?this.capturePrependScrollAnchor():void 0;super.update(e),t!==void 0&&this.restorePrependScrollAnchor(t)}updated(e){e.has(`loadingMore`)&&!this.loadingMore&&(this.loadMoreRequested=!1),e.has(`hasMore`)&&!this.hasMore&&(this.loadMoreRequested=!1),e.has(`sessionId`)?this.restoreScrollPosition():!e.has(`sessionId`)&&(e.has(`messages`)||this.queueGrew(e.get(`status`))||e.has(`pendingAsk`)||e.has(`pendingDialogs`)||e.has(`closedDialogs`))&&this.pinnedToBottom&&this.scrollToBottom(),(e.has(`messages`)||e.has(`messageStart`)||e.has(`messageTotal`)||e.has(`hasMore`)||e.has(`loadingMore`))&&this.scheduleConversationRailUpdate(),(e.has(`messages`)||e.has(`messageStart`)||e.has(`hasMore`)||e.has(`loadingMore`)||e.has(`pendingAsk`)||e.has(`pendingDialogs`)||e.has(`closedDialogs`))&&this.continuePendingScrollRestore(),(e.has(`messages`)||e.has(`hasMore`)||e.has(`loadingMore`))&&this.requestLoadMoreIfNeeded(),e.has(`notificationInbox`)&&this.drawerHold===void 0&&this.pendingNotificationFocus!==void 0&&this.focusPendingNotificationTarget(),e.has(`drawerHold`)&&this.drawerHold===void 0&&this.pendingNotificationFocus!==void 0&&this.focusPendingNotificationTarget(),e.has(`zoomedImage`)&&this.syncImageZoomDialog(),e.has(`activityOutput`)&&this.syncActivityOutputDialog(),e.has(`activityConversation`)&&this.syncActivityConversationDialog(),this.drawerTabEdgeTracker.observe(this.drawerTabs??void 0),this.publishScrollbarWidth(),this.observeDock();let t=this.chat;t!==void 0&&(this.jumpToBottomVisible=YC(t)),(e.has(`status`)||e.has(`activity`)||e.has(`isSendingPrompt`))&&this.syncTurnClock()}publishScrollbarWidth(){let e=AC(this.chat);this.style.setProperty(`--pi-chat-scrollbar`,`${String(e)}px`)}observeDock(){let e=this.renderRoot.querySelector(`.activity-dock`),t=e instanceof HTMLElement?e:void 0;this.observedDock!==t&&(this.dockResizeObserver?.disconnect(),this.observedDock=t,this.dockResizeObserver=void 0,!(t===void 0||typeof ResizeObserver>`u`)&&(this.dockResizeObserver=new ResizeObserver(()=>{this.publishDockRoom()}),this.dockResizeObserver.observe(t)))}publishDockRoom(){let e=this.renderRoot.querySelector(`.activity-dock`),t=e===null?0:Math.ceil(e.getBoundingClientRect().height)+RT;this.style.setProperty(`--pi-chat-dock-room`,`${String(t)}px`)}syncImageZoomDialog(){let e=this.imageZoomDialog;if(e!==void 0){if(this.zoomedImage!==void 0){if(this.imageZoomModalRegistration===void 0){let t=Bg({element:e,nativeTopLayer:!0,focus:()=>{(this.renderRoot.querySelector(`.image-zoom-close`)??e).focus()}});this.imageZoomModalRegistration=t;try{e.open||e.showModal()}catch(e){throw this.imageZoomModalRegistration=void 0,t.unregister(),e}}this.imageZoomModalRegistration.focus();return}e.open&&e.close(),this.releaseImageZoomModal()}}syncActivityOutputDialog(){let e=this.activityOutputDialog;if(e!==void 0){if(this.activityOutput!==void 0){if(this.activityOutputModalRegistration===void 0){let t=Bg({element:e,nativeTopLayer:!0,focus:()=>{(this.renderRoot.querySelector(`.activity-output-close`)??e).focus()}});this.activityOutputModalRegistration=t;try{e.open||e.showModal()}catch(e){throw this.activityOutputModalRegistration=void 0,t.unregister(),e}}this.activityOutputModalRegistration.focus();return}e.open&&e.close(),this.releaseActivityOutputModal()}}releaseActivityOutputModal(){let e=this.activityOutputModalRegistration;this.activityOutputModalRegistration=void 0,e?.unregister()}syncActivityConversationDialog(){let e=this.activityConversationDialog;if(e!==void 0){if(this.activityConversation!==void 0){if(this.activityConversationModalRegistration===void 0){let t=Bg({element:e,nativeTopLayer:!0,focus:()=>{(this.renderRoot.querySelector(`.activity-conversation-close`)??e).focus()}});this.activityConversationModalRegistration=t;try{e.open||e.showModal()}catch(e){throw this.activityConversationModalRegistration=void 0,t.unregister(),e}}this.activityConversationModalRegistration.focus();return}e.open&&e.close(),this.releaseActivityConversationModal()}}releaseActivityConversationModal(){let e=this.activityConversationModalRegistration;this.activityConversationModalRegistration=void 0,e?.unregister()}releaseImageZoomModal(){let e=this.imageZoomModalRegistration;this.imageZoomModalRegistration=void 0,e?.unregister()}notificationTargetChanged(e){let t=this.notificationInbox;return!WT(e)||t===void 0?e!==t:im(e)!==im(t)}render(){let e=this.groupedMessages();return h`
|
|
2975
|
+
`}function KT(e){return typeof e==`object`&&!!e&&typeof Reflect.get(e,`machineId`)==`string`&&typeof Reflect.get(e,`cwd`)==`string`&&typeof Reflect.get(e,`sessionId`)==`string`}function qT(e){return JT(e,0,100)}function JT(e,t,n){return Number.isFinite(e)?Math.min(n,Math.max(t,e)):t}function YT(e){return e!==void 0&&!cc(e.state)}function XT(e){if(e.state===`sending`)return{glyph:`◌`,text:`Sending`,label:`Sending`,tone:`pending`};if(e.state===`failed`)return{glyph:`!`,text:`Not sent`,label:`Not sent - the server never received this message`,tone:`failed`};if(e.state===`queued`){let t=e.kind===`steer`?`Queued to steer`:`Queued`;return{glyph:`✓`,text:t,label:`${t} - the server has this message and the agent will take it next`,tone:`received`}}return e.state===`received`?{glyph:`✓`,text:`Sent`,label:`Sent - the server received this message`,tone:`received`}:{glyph:`✓✓`,text:`Read`,label:`Read - the agent took this message into the conversation`,tone:`delivered`}}function ZT(e){return{src:`data:${e.mimeType};base64,${e.data}`,alt:`attached image`}}function QT(e){return e===void 0||e===``?`tool output`:`${e} output`}function $T(e){return`m:${String(e)}`}function eE(e){return`g:${String(e)}`}function tE(e){return`e:${String(e)}`}function nE(e){return`g:${String(e)}`}function rE(e){return e?`msg event-group live`:`msg event-group`}function iE(e){return e?`live events`:`events`}function aE(e){let t=e.meta?.timestamp;return[t===void 0?void 0:oE(t),sE(e),e.meta?.thinkingLevel].filter(e=>e!==void 0&&e!==``).join(` · `)}function oE(e){let t=new Date(e);if(Number.isFinite(t.getTime()))return VT.format(t)}function sE(e){let t=e.meta?.model;if(t===void 0)return;let n=t.responseId??t.id;return n===void 0||n===``?t.provider:t.provider!==void 0&&t.provider!==``?`${t.provider}/${n}`:n}var q=class extends _{constructor(...e){super(...e),this.messages=[],this.sessionId=``,this.messageStart=0,this.messageEnd=0,this.messageTotal=0,this.hasMore=!1,this.loadingMore=!1,this.isSendingPrompt=!1,this.isCompacting=!1,this.pendingMessageCount=0,this.clientQueuedMessages=[],this.askDraftSessionId=``,this.pendingDialogs=[],this.commandLedger=[],this.goalCommandInFlight=!1,this.closedDialogs=[],this.activityFailed=!1,this.notificationsFailed=!1,this.pinnedToBottom=!0,this.followGate=new $C,this.drawerGate=new $C,this.jumpToBottomVisible=!1,this.zoomedImage=void 0,this.collapsedTopDrawerKeys=new Set,this.expandedTopDrawerKeys=new Set,this.drawerWorkWasRunning=!1,this.goalsLoad={state:`unloaded`,key:void 0,data:[]},this.activityFilter=`all`,this.activityScope=`active`,this.turnNowMs=0,this.disclosures=new pw,this.scrollController=new BC,this.drawerTabEdgeTracker=new Vw(()=>{this.requestUpdate()}),this.suppressScrollSave=!1,this.suppressLoadMoreRequests=!1,this.groupedMessagesStart=0,this.groupedMessagesCache=[],this.messageMetaCache=new WeakMap,this.messageCopyTextCache=new WeakMap,this.lastScrollTop=0,this.lastClientHeight=0,this.prependRestoreToken=0,this.loadMoreRequested=!1,this.onViewportResize=()=>{this.pinnedToBottom?this.scrollToBottom():this.lastClientHeight=this.chat?.clientHeight??0},this.onImageLoad=()=>{this.pinnedToBottom&&this.scrollToBottom()},this.openImageZoom=(e,t)=>{this.zoomedImage={src:e,alt:t}},this.closeImageZoom=()=>{this.zoomedImage!==void 0&&(this.zoomedImage=void 0)},this.onImageZoomDialogClick=e=>{e.target===this.imageZoomDialog&&this.closeImageZoom()},this.onPageHide=()=>{this.saveScrollPosition()},this.handleClearServerQueue=()=>{this.onClearServerQueue?.(this.status?.queuedMessages??[])},this.closeActivityOutput=()=>{this.activityOutput!==void 0&&this.onCloseActivityOutput?.()},this.onActivityOutputDialogClick=e=>{e.target===this.activityOutputDialog&&this.closeActivityOutput()},this.closeActivityConversation=()=>{this.activityConversation!==void 0&&this.onCloseActivityConversation?.()},this.onActivityConversationDialogClick=e=>{e.target===this.activityConversationDialog&&this.closeActivityConversation()}}connectedCallback(){super.connectedCallback(),window.addEventListener(`resize`,this.onViewportResize),window.addEventListener(`pagehide`,this.onPageHide),window.visualViewport?.addEventListener(`resize`,this.onViewportResize)}firstUpdated(){this.lastClientHeight=this.chat?.clientHeight??0}disconnectedCallback(){this.stopTurnClock(),this.saveScrollPosition(),this.scrollController.dispose(),this.drawerTabEdgeTracker.dispose(),this.dockResizeObserver?.disconnect(),this.dockResizeObserver=void 0,this.observedDock=void 0,this.releaseImageZoomModal(),this.releaseActivityOutputModal(),this.prependRestoreToken+=1,this.restoreScrollFrame!==void 0&&cancelAnimationFrame(this.restoreScrollFrame),this.loadMoreCheckFrame!==void 0&&cancelAnimationFrame(this.loadMoreCheckFrame),this.scrollToBottomFrame!==void 0&&cancelAnimationFrame(this.scrollToBottomFrame),this.conversationRailFrame!==void 0&&cancelAnimationFrame(this.conversationRailFrame),this.catchUpFollowTimer!==void 0&&(clearTimeout(this.catchUpFollowTimer),this.catchUpFollowTimer=void 0),this.drawerCatchUpTimer!==void 0&&(clearTimeout(this.drawerCatchUpTimer),this.drawerCatchUpTimer=void 0),window.removeEventListener(`resize`,this.onViewportResize),window.removeEventListener(`pagehide`,this.onPageHide),window.visualViewport?.removeEventListener(`resize`,this.onViewportResize),super.disconnectedCallback()}savePreviousSessionScrollPosition(e){typeof e!=`string`||e===``||e===this.sessionId||this.saveScrollPosition(e)}prepareSessionUiState(){this.turnStartedAtMs=void 0,this.disclosures.syncSession(this.sessionId),this.pendingNotificationFocus=void 0,this.retainedEmptyNotificationTrayTargetKey=void 0,this.drawerHold=void 0,this.scrollController.clearScheduledSave(),this.suppressScrollSave=!1,this.suppressLoadMoreRequests=!1,this.pendingScrollRestoreSessionId=void 0,this.pendingScrollRestorePosition=void 0,this.heldWaiting=void 0,this.heldWaitingClearTimer!==void 0&&(clearTimeout(this.heldWaitingClearTimer),this.heldWaitingClearTimer=void 0),this.prependRestoreToken+=1,this.restoreScrollFrame!==void 0&&(cancelAnimationFrame(this.restoreScrollFrame),this.restoreScrollFrame=void 0)}willUpdate(e){if(this.foldDrawerAsWorkFinishes(),(e.has(`subagents`)||e.has(`subagentRuns`)||e.has(`backgroundTasks`))&&(this.activityRowsSessionId=this.sessionId),e.has(`sessionId`)?(this.savePreviousSessionScrollPosition(e.get(`sessionId`)),this.prepareSessionUiState()):e.has(`notificationInbox`)&&this.notificationTargetChanged(e.get(`notificationInbox`))&&(this.pendingNotificationFocus=void 0,this.retainedEmptyNotificationTrayTargetKey=void 0,this.drawerHold=void 0),e.has(`notificationInbox`)){let t=e.get(`notificationInbox`);this.offerDrawerInbox(_E(t)?this.visibleInboxOf(t):void 0)}(e.has(`messages`)||e.has(`pendingAsk`)||e.has(`pendingDialogs`)||e.has(`closedDialogs`))&&(this.pinnedToBottom=this.pinnedToBottom&&(this.didChatHeightChange()||this.isNearBottom()))}update(e){let t=this.isPrependingMessages(e)?this.capturePrependScrollAnchor():void 0;super.update(e),t!==void 0&&this.restorePrependScrollAnchor(t)}updated(e){e.has(`loadingMore`)&&!this.loadingMore&&(this.loadMoreRequested=!1),e.has(`hasMore`)&&!this.hasMore&&(this.loadMoreRequested=!1),e.has(`sessionId`)?this.restoreScrollPosition():!e.has(`sessionId`)&&(e.has(`messages`)||this.queueGrew(e.get(`status`))||e.has(`pendingAsk`)||e.has(`pendingDialogs`)||e.has(`closedDialogs`))&&this.pinnedToBottom&&this.scrollToBottom(),(e.has(`messages`)||e.has(`messageStart`)||e.has(`messageTotal`)||e.has(`hasMore`)||e.has(`loadingMore`))&&this.scheduleConversationRailUpdate(),(e.has(`messages`)||e.has(`messageStart`)||e.has(`hasMore`)||e.has(`loadingMore`)||e.has(`pendingAsk`)||e.has(`pendingDialogs`)||e.has(`closedDialogs`))&&this.continuePendingScrollRestore(),(e.has(`messages`)||e.has(`hasMore`)||e.has(`loadingMore`))&&this.requestLoadMoreIfNeeded(),e.has(`notificationInbox`)&&this.drawerHold===void 0&&this.pendingNotificationFocus!==void 0&&this.focusPendingNotificationTarget(),e.has(`drawerHold`)&&this.drawerHold===void 0&&this.pendingNotificationFocus!==void 0&&this.focusPendingNotificationTarget(),e.has(`zoomedImage`)&&this.syncImageZoomDialog(),e.has(`activityOutput`)&&this.syncActivityOutputDialog(),e.has(`activityConversation`)&&this.syncActivityConversationDialog(),this.drawerTabEdgeTracker.observe(this.drawerTabs??void 0),this.publishScrollbarWidth(),this.observeDock();let t=this.chat;t!==void 0&&(this.jumpToBottomVisible=ZC(t)),(e.has(`status`)||e.has(`activity`)||e.has(`isSendingPrompt`))&&this.syncTurnClock()}publishScrollbarWidth(){let e=MC(this.chat);this.style.setProperty(`--pi-chat-scrollbar`,`${String(e)}px`)}observeDock(){let e=this.renderRoot.querySelector(`.activity-dock`),t=e instanceof HTMLElement?e:void 0;this.observedDock!==t&&(this.dockResizeObserver?.disconnect(),this.observedDock=t,this.dockResizeObserver=void 0,!(t===void 0||typeof ResizeObserver>`u`)&&(this.dockResizeObserver=new ResizeObserver(()=>{this.publishDockRoom()}),this.dockResizeObserver.observe(t)))}publishDockRoom(){let e=this.renderRoot.querySelector(`.activity-dock`),t=e===null?0:Math.ceil(e.getBoundingClientRect().height)+BT;this.style.setProperty(`--pi-chat-dock-room`,`${String(t)}px`)}syncImageZoomDialog(){let e=this.imageZoomDialog;if(e!==void 0){if(this.zoomedImage!==void 0){if(this.imageZoomModalRegistration===void 0){let t=Bg({element:e,nativeTopLayer:!0,focus:()=>{(this.renderRoot.querySelector(`.image-zoom-close`)??e).focus()}});this.imageZoomModalRegistration=t;try{e.open||e.showModal()}catch(e){throw this.imageZoomModalRegistration=void 0,t.unregister(),e}}this.imageZoomModalRegistration.focus();return}e.open&&e.close(),this.releaseImageZoomModal()}}syncActivityOutputDialog(){let e=this.activityOutputDialog;if(e!==void 0){if(this.activityOutput!==void 0){if(this.activityOutputModalRegistration===void 0){let t=Bg({element:e,nativeTopLayer:!0,focus:()=>{(this.renderRoot.querySelector(`.activity-output-close`)??e).focus()}});this.activityOutputModalRegistration=t;try{e.open||e.showModal()}catch(e){throw this.activityOutputModalRegistration=void 0,t.unregister(),e}}this.activityOutputModalRegistration.focus();return}e.open&&e.close(),this.releaseActivityOutputModal()}}releaseActivityOutputModal(){let e=this.activityOutputModalRegistration;this.activityOutputModalRegistration=void 0,e?.unregister()}syncActivityConversationDialog(){let e=this.activityConversationDialog;if(e!==void 0){if(this.activityConversation!==void 0){if(this.activityConversationModalRegistration===void 0){let t=Bg({element:e,nativeTopLayer:!0,focus:()=>{(this.renderRoot.querySelector(`.activity-conversation-close`)??e).focus()}});this.activityConversationModalRegistration=t;try{e.open||e.showModal()}catch(e){throw this.activityConversationModalRegistration=void 0,t.unregister(),e}}this.activityConversationModalRegistration.focus();return}e.open&&e.close(),this.releaseActivityConversationModal()}}releaseActivityConversationModal(){let e=this.activityConversationModalRegistration;this.activityConversationModalRegistration=void 0,e?.unregister()}releaseImageZoomModal(){let e=this.imageZoomModalRegistration;this.imageZoomModalRegistration=void 0,e?.unregister()}notificationTargetChanged(e){let t=this.notificationInbox;return!KT(e)||t===void 0?e!==t:im(e)!==im(t)}render(){let e=this.groupedMessages();return h`
|
|
2964
2976
|
${this.renderTopNotices()}
|
|
2965
2977
|
${this.renderNotificationLiveRegions()}
|
|
2966
2978
|
<div class="chat-wrap">
|
|
2967
2979
|
${this.renderConversationRail()}
|
|
2968
2980
|
<div class="chat" @scroll=${()=>{this.onScroll()}} @wheel=${e=>{this.onWheel(e)}} @touchend=${()=>{this.onTouchEnd()}} @touchcancel=${()=>{this.onTouchEnd()}} @pointerdown=${()=>{this.notePressStart()}} @pointerup=${()=>{this.releasePointer()}} @pointercancel=${()=>{this.releasePointer()}} @touchstart=${e=>{this.onTouchStart(e)}} @touchmove=${e=>{this.onTouchMove(e)}}>
|
|
2969
2981
|
${this.renderHistoryBoundary()}
|
|
2970
|
-
${
|
|
2982
|
+
${uw(e,e=>e.kind===`group`?this.groupRenderKey(e.startIndex):this.messageAnchorKey(e.index),(t,n)=>t.kind===`group`?this.renderMessageGroup(t.messages,t.startIndex,t.endIndex,this.isLiveTailGroup(e,n)):t.kind===`tool-image`?this.renderToolImageOutput(t.message,t.index,t.toolName):this.renderMessage(t.message,t.index))}
|
|
2971
2983
|
${this.renderSessionActivity()}
|
|
2972
2984
|
${this.renderPendingMessages()}
|
|
2973
2985
|
${this.renderQueuedMessages()}
|
|
@@ -2989,7 +3001,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
2989
3001
|
aria-label="Jump to the newest message"
|
|
2990
3002
|
@click=${()=>{this.pinnedToBottom=!0,this.scrollToBottom(),this.jumpToBottomVisible=!1}}
|
|
2991
3003
|
>↓</button>
|
|
2992
|
-
`:null}renderTopNotices(){let e=this.renderTopDrawer();return e===null?null:h`<div class="top-notices">${e}</div>`}renderTopDrawer(){let e=this.activityPanelState(),t=this.drawerInbox(),n=this.goalsLoad.data.length>0||this.goalsLoad.state===`loading`||this.goalsLoad.state===`failed`;if(e===void 0&&t===void 0&&!n&&!this.notificationsFailed)return null;let r=
|
|
3004
|
+
`:null}renderTopNotices(){let e=this.renderTopDrawer();return e===null?null:h`<div class="top-notices">${e}</div>`}renderTopDrawer(){let e=this.activityPanelState(),t=this.drawerInbox(),n=this.goalsLoad.data.length>0||this.goalsLoad.state===`loading`||this.goalsLoad.state===`failed`;if(e===void 0&&t===void 0&&!n&&!this.notificationsFailed)return null;let r=TE({activity:e!==void 0,notifications:t!==void 0||this.notificationsFailed,goals:this.goalsLoad.data.length>0},this.topDrawerTab),i=this.topDrawerKey(),a=this.expandedTopDrawerKeys.has(i)?!1:this.collapsedTopDrawerKeys.has(i)||!wE(),o=a?`Show session activity and notifications`:`Hide session activity and notifications`,s=t===void 0?0:em(t);return h`
|
|
2993
3005
|
<section
|
|
2994
3006
|
class=${`top-drawer${a?` collapsed`:``}`}
|
|
2995
3007
|
role="region"
|
|
@@ -2997,7 +3009,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
2997
3009
|
@focusout=${e=>{this.releaseEmptyNotificationTray(e)}}
|
|
2998
3010
|
>
|
|
2999
3011
|
<header class="drawer-header" data-notification-focus="header" tabindex="-1">
|
|
3000
|
-
<div class=${`drawer-tabs-frame${
|
|
3012
|
+
<div class=${`drawer-tabs-frame${zw(this.drawerTabEdgeTracker.edges)}`}>
|
|
3001
3013
|
<div class="drawer-tabs" role="tablist" aria-label="Session drawer sections" @scroll=${()=>{this.drawerTabEdgeTracker.refresh()}} @keydown=${e=>{this.onDrawerTabsKeydown(e)}}>
|
|
3002
3014
|
<button
|
|
3003
3015
|
type="button"
|
|
@@ -3010,7 +3022,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
3010
3022
|
@click=${()=>{this.selectTopDrawerTab(`activity`,a)}}
|
|
3011
3023
|
>
|
|
3012
3024
|
${e?.summary.working===!0?h`<span class="subagent-dot working" aria-hidden="true"></span>`:null}
|
|
3013
|
-
<span class="drawer-tab-label">${
|
|
3025
|
+
<span class="drawer-tab-label">${vE({active:e?.activeCount??0})}</span>
|
|
3014
3026
|
</button>
|
|
3015
3027
|
<button
|
|
3016
3028
|
type="button"
|
|
@@ -3022,7 +3034,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
3022
3034
|
aria-controls="session-notification-list"
|
|
3023
3035
|
@click=${()=>{this.selectTopDrawerTab(`notifications`,a)}}
|
|
3024
3036
|
>
|
|
3025
|
-
<span class="drawer-tab-label">${
|
|
3037
|
+
<span class="drawer-tab-label">${EE(t,this.notificationInbox?.sessionId===this.sessionId)}</span>
|
|
3026
3038
|
</button>
|
|
3027
3039
|
<button
|
|
3028
3040
|
type="button"
|
|
@@ -3034,7 +3046,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
3034
3046
|
aria-controls="session-goal-list"
|
|
3035
3047
|
@click=${()=>{this.selectTopDrawerTab(`goals`,a)}}
|
|
3036
3048
|
>
|
|
3037
|
-
<span class="drawer-tab-label">${
|
|
3049
|
+
<span class="drawer-tab-label">${DE(this.goalsLoad.data,this.goalsLoad.state===`loaded`)}</span>
|
|
3038
3050
|
</button>
|
|
3039
3051
|
</div>
|
|
3040
3052
|
</div>
|
|
@@ -3057,7 +3069,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
3057
3069
|
aria-expanded=${String(!a)}
|
|
3058
3070
|
aria-controls=${r===`activity`?`session-activity-list`:r===`goals`?`session-goal-list`:`session-notification-list`}
|
|
3059
3071
|
@click=${()=>{this.toggleTopDrawer(a)}}
|
|
3060
|
-
>${
|
|
3072
|
+
>${WT(a)}</button>
|
|
3061
3073
|
</div>
|
|
3062
3074
|
</header>
|
|
3063
3075
|
<div class="drawer-body" ?hidden=${a}>
|
|
@@ -3075,7 +3087,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
3075
3087
|
`:null}
|
|
3076
3088
|
</div>
|
|
3077
3089
|
</section>
|
|
3078
|
-
`}visibleNotificationInbox(){return this.visibleInboxOf(this.notificationInbox)}visibleInboxOf(e){if(e?.sessionId!==this.sessionId)return;let t=e.pendingDismissedIds.size>0||e.dismissAllPending,n=this.retainedEmptyNotificationTrayTargetKey===im(e);if(!(em(e)===0&&!t&&!n))return e}drawerInbox(){let e=this.drawerHold;return e===void 0?this.visibleNotificationInbox():e.inbox}offerDrawerInbox(e){if(this.drawerGate.followsNewest(Date.now())){this.drawerHold!==void 0&&(this.drawerHold=void 0);return}e!==void 0&&(this.drawerHold??={inbox:e},this.scheduleDrawerCatchUp())}releaseDrawerPointer(){this.drawerGate.notePointerUp(Date.now()),this.drawerGate.takeSuppressedFollow()&&this.scheduleDrawerCatchUp()}scheduleDrawerCatchUp(){this.drawerCatchUpTimer!==void 0&&clearTimeout(this.drawerCatchUpTimer),this.drawerCatchUpTimer=setTimeout(()=>{this.drawerCatchUpTimer=void 0,this.drawerGate.followsNewest(Date.now())&&this.drawerHold!==void 0&&(this.drawerHold=void 0)},250)}topDrawerKey(){let e=this.notificationInbox;return e?.sessionId===this.sessionId?im(e):JSON.stringify([null,null,this.sessionId])}toggleTopDrawer(e){let t=this.topDrawerKey(),n=new Set(this.collapsedTopDrawerKeys),r=new Set(this.expandedTopDrawerKeys);e?(n.delete(t),r.add(t)):(r.delete(t),n.add(t)),this.collapsedTopDrawerKeys=n,this.expandedTopDrawerKeys=r}selectTopDrawerTab(e,t){this.topDrawerTab=e,t&&this.toggleTopDrawer(t)}renderActivityFilters(e,t){let n=
|
|
3090
|
+
`}visibleNotificationInbox(){return this.visibleInboxOf(this.notificationInbox)}visibleInboxOf(e){if(e?.sessionId!==this.sessionId)return;let t=e.pendingDismissedIds.size>0||e.dismissAllPending,n=this.retainedEmptyNotificationTrayTargetKey===im(e);if(!(em(e)===0&&!t&&!n))return e}drawerInbox(){let e=this.drawerHold;return e===void 0?this.visibleNotificationInbox():e.inbox}offerDrawerInbox(e){if(this.drawerGate.followsNewest(Date.now())){this.drawerHold!==void 0&&(this.drawerHold=void 0);return}e!==void 0&&(this.drawerHold??={inbox:e},this.scheduleDrawerCatchUp())}releaseDrawerPointer(){this.drawerGate.notePointerUp(Date.now()),this.drawerGate.takeSuppressedFollow()&&this.scheduleDrawerCatchUp()}scheduleDrawerCatchUp(){this.drawerCatchUpTimer!==void 0&&clearTimeout(this.drawerCatchUpTimer),this.drawerCatchUpTimer=setTimeout(()=>{this.drawerCatchUpTimer=void 0,this.drawerGate.followsNewest(Date.now())&&this.drawerHold!==void 0&&(this.drawerHold=void 0)},250)}topDrawerKey(){let e=this.notificationInbox;return e?.sessionId===this.sessionId?im(e):JSON.stringify([null,null,this.sessionId])}toggleTopDrawer(e){let t=this.topDrawerKey(),n=new Set(this.collapsedTopDrawerKeys),r=new Set(this.expandedTopDrawerKeys);e?(n.delete(t),r.add(t)):(r.delete(t),n.add(t)),this.collapsedTopDrawerKeys=n,this.expandedTopDrawerKeys=r}selectTopDrawerTab(e,t){this.topDrawerTab=e,t&&this.toggleTopDrawer(t)}renderActivityFilters(e,t){let n=yE(e);return n.length<=1?null:h`
|
|
3079
3091
|
<div class="activity-filters" role="group" aria-label="Filter session activity">
|
|
3080
3092
|
${n.map(e=>h`
|
|
3081
3093
|
<button
|
|
@@ -3086,7 +3098,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
3086
3098
|
>${e.label}${e.count===0?null:h` <span class="activity-filter-count">${String(e.count)}</span>`}</button>
|
|
3087
3099
|
`)}
|
|
3088
3100
|
</div>
|
|
3089
|
-
`}activityRowsDeliveredForSelectedSession(){return this.activityRowsSessionId!==void 0&&this.activityRowsSessionId===this.sessionId}activityPanelState(){if(!this.activityRowsDeliveredForSelectedSession())return;let e=this.subagents??[],t=this.subagentRuns??[],n=this.backgroundTasks??[];if(e.length===0&&t.length===0&&n.length===0)return;let r=
|
|
3101
|
+
`}activityRowsDeliveredForSelectedSession(){return this.activityRowsSessionId!==void 0&&this.activityRowsSessionId===this.sessionId}activityPanelState(){if(!this.activityRowsDeliveredForSelectedSession())return;let e=this.subagents??[],t=this.subagentRuns??[],n=this.backgroundTasks??[];if(e.length===0&&t.length===0&&n.length===0)return;let r=AE(e),i=lE(t),a=uE(n),o=OE([...r.map(e=>e.status),...i.map(e=>e.status),...a.map(e=>e.status)]),s=[...r,...i,...a].filter(e=>hE(e.status)).length;return{rows:r,runRows:i,taskRows:a,summary:o,total:r.length+i.length+a.length,activeCount:s}}renderActivityPanel(e){let t=this.activityFailed?h`<p class="activity-empty activity-failed">Activity could not be loaded. It will retry automatically.</p>`:null;if(e===void 0)return t===null?this.activityRowsDeliveredForSelectedSession()?h`
|
|
3090
3102
|
<div class="subagents-list" id="session-activity-list" role="tabpanel" aria-labelledby="drawer-tab-activity">
|
|
3091
3103
|
<p class="activity-empty">No subagent or background activity from this chat yet.</p>
|
|
3092
3104
|
</div>
|
|
@@ -3098,16 +3110,16 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
3098
3110
|
<div class="subagents-list" id="session-activity-list" role="tabpanel" aria-labelledby="drawer-tab-activity">
|
|
3099
3111
|
${t}
|
|
3100
3112
|
</div>
|
|
3101
|
-
`;let n=
|
|
3113
|
+
`;let n=xE(this.activityFilter,e),r=fE([...e.rows.map((e,t)=>({kind:`subagents`,index:t,status:e.status,row:e})),...e.runRows.map((e,t)=>({kind:`runs`,index:t,status:e.status,startedAt:e.run.startedAt,row:e})),...e.taskRows.map((e,t)=>({kind:`tasks`,index:t,status:e.status,startedAt:e.task.startedAt,row:e}))]).filter(e=>n===`all`||n===e.kind);if(t!==null)return h`
|
|
3102
3114
|
<div class="subagents-list" id="session-activity-list" role="tabpanel" aria-labelledby="drawer-tab-activity">
|
|
3103
3115
|
${t}
|
|
3104
|
-
${
|
|
3116
|
+
${uw(r,dE,e=>this.renderActivityEntry(e))}
|
|
3105
3117
|
</div>
|
|
3106
|
-
`;let i=e.activeCount===0&&this.activityScope===`active`?`empty-active`:this.activityScope,a=r.filter(e=>i===`all`||!
|
|
3118
|
+
`;let i=e.activeCount===0&&this.activityScope===`active`?`empty-active`:this.activityScope,a=r.filter(e=>i===`all`||!gE(e.status)),o=r.filter(e=>gE(e.status)).length;return h`
|
|
3107
3119
|
<div class="subagents-list" id="session-activity-list" role="tabpanel" aria-labelledby="drawer-tab-activity">
|
|
3108
3120
|
${this.renderActivityFilters(e,n)}
|
|
3109
3121
|
${i===`empty-active`&&a.length===0?h`<p class="activity-empty">Nothing running right now.</p>`:null}
|
|
3110
|
-
${
|
|
3122
|
+
${uw(a,dE,e=>this.renderActivityEntry(e))}
|
|
3111
3123
|
${o===0?null:h`
|
|
3112
3124
|
<button
|
|
3113
3125
|
type="button"
|
|
@@ -3172,12 +3184,12 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
3172
3184
|
${e!==void 0&&e.discardedCount!==0?h`
|
|
3173
3185
|
<p class="notification-overflow">${am(e.discardedCount)}</p>
|
|
3174
3186
|
`:null}
|
|
3175
|
-
${e===void 0?null:
|
|
3187
|
+
${e===void 0?null:uw(e.notifications,e=>e.id,t=>{let n=Qp(t.severity),r=om(t);return h`
|
|
3176
3188
|
<article class=${`notification-row ${t.severity}`} data-notification-id=${t.id} tabindex="-1">
|
|
3177
3189
|
<div class="notification-metadata">
|
|
3178
3190
|
<strong class="notification-severity">${n}</strong>
|
|
3179
3191
|
<span aria-hidden="true">·</span>
|
|
3180
|
-
<time datetime=${t.receivedAt}>${
|
|
3192
|
+
<time datetime=${t.receivedAt}>${HT.format(new Date(t.receivedAt))}</time>
|
|
3181
3193
|
</div>
|
|
3182
3194
|
<p class="notification-message" dir="auto">${t.message}</p>
|
|
3183
3195
|
${r===void 0?null:h`<p class="notification-truncated">${r}</p>`}
|
|
@@ -3196,15 +3208,15 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
3196
3208
|
title="Dismiss notification"
|
|
3197
3209
|
?disabled=${e.pendingDismissedIds.has(t.id)||e.dismissAllPending||this.onDismissNotification===void 0}
|
|
3198
3210
|
@click=${()=>{this.dismissNotification(t.id)}}
|
|
3199
|
-
>${
|
|
3211
|
+
>${GT()}</button>
|
|
3200
3212
|
</div>
|
|
3201
3213
|
</article>
|
|
3202
3214
|
`})}
|
|
3203
3215
|
${e?.notifications.length===0?h`<p class="notification-empty">No notifications for this chat.</p>`:null}
|
|
3204
3216
|
</div>
|
|
3205
3217
|
`}renderNotificationLiveRegions(){let e=this.notificationInbox?.sessionId===this.sessionId?this.notificationInbox.announcements:[],t=e.filter(e=>e.severity!==`error`),n=e.filter(e=>e.severity===`error`);return h`
|
|
3206
|
-
<div class="visually-hidden notification-live" aria-live="polite" aria-atomic="false">${
|
|
3207
|
-
<div class="visually-hidden notification-live" aria-live="assertive" aria-atomic="false">${
|
|
3218
|
+
<div class="visually-hidden notification-live" aria-live="polite" aria-atomic="false">${uw(t,e=>e.id,e=>h`<span data-announcement-id=${e.id}>${$p(e)}</span>`)}</div>
|
|
3219
|
+
<div class="visually-hidden notification-live" aria-live="assertive" aria-atomic="false">${uw(n,e=>e.id,e=>h`<span data-announcement-id=${e.id}>${$p(e)}</span>`)}</div>
|
|
3208
3220
|
`}dismissNotification(e){let t=this.notificationInbox;if(t===void 0||this.onDismissNotification===void 0)return;let n=rm(t.notifications,e),r=im(t);this.pendingNotificationFocus={chatKey:r,focusTarget:n},n.kind===`header`&&(this.retainedEmptyNotificationTrayTargetKey=r),this.onDismissNotification(e)}dismissAllNotifications(){let e=this.notificationInbox;if(e===void 0||this.onDismissAllNotifications===void 0)return;let t=im(e);this.pendingNotificationFocus={chatKey:t,focusTarget:{kind:`header`}},this.retainedEmptyNotificationTrayTargetKey=t,this.onDismissAllNotifications()}releaseEmptyNotificationTray(e){let t=e.currentTarget,n=e.relatedTarget;if(t instanceof HTMLElement&&n instanceof Node&&t.contains(n)||this.pendingNotificationFocus!==void 0)return;let r=this.notificationInbox;r!==void 0&&this.retainedEmptyNotificationTrayTargetKey===im(r)&&em(r)===0&&(this.retainedEmptyNotificationTrayTargetKey=void 0)}focusPendingNotificationTarget(){let e=this.pendingNotificationFocus;this.pendingNotificationFocus=void 0;let t=this.notificationInbox;if(e===void 0||t===void 0||im(t)!==e.chatKey)return;let n=e.focusTarget;if(n.kind===`header`){this.renderRoot.querySelector(`[data-notification-focus='header']`)?.focus();return}let r=Array.from(this.renderRoot.querySelectorAll(`[data-notification-id]`)).find(e=>e.dataset.notificationId===n.notificationId);if(r!==void 0){r.focus();return}em(t)===0&&(this.retainedEmptyNotificationTrayTargetKey=e.chatKey),this.renderRoot.querySelector(`[data-notification-focus='header']`)?.focus()}renderActivityOutput(){let e=this.activityOutput;return h`
|
|
3209
3221
|
<dialog class="activity-output" @click=${this.onActivityOutputDialogClick} @close=${this.closeActivityOutput} @cancel=${this.closeActivityOutput}>
|
|
3210
3222
|
${e===void 0?null:h`
|
|
@@ -3245,12 +3257,12 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
3245
3257
|
<img class="image-zoom-full" src=${this.zoomedImage.src} alt=${this.zoomedImage.alt} />
|
|
3246
3258
|
`}
|
|
3247
3259
|
</dialog>
|
|
3248
|
-
`}transcriptMessages(){return this.transcriptSplit().settled}transcriptSplit(){return dc(this.messages,[...this.clientQueuedMessages,...this.status?.queuedMessages??[]])}queueGrew(e){let t=
|
|
3260
|
+
`}transcriptMessages(){return this.transcriptSplit().settled}transcriptSplit(){return dc(this.messages,[...this.clientQueuedMessages,...this.status?.queuedMessages??[]])}queueGrew(e){let t=UT(e)?.queuedMessages?.length??0;return(this.status?.queuedMessages??[]).length>t}groupedMessages(){let e=this.transcriptMessages();if(this.groupedMessagesInput===e&&this.groupedMessagesStart===this.messageStart)return this.groupedMessagesCache;let t=this.groupedMessagesInput;if(this.groupedMessagesStart===this.messageStart&&t!==void 0){let n=ww(t,this.groupedMessagesCache,e);if(n!==void 0)return this.groupedMessagesInput=e,this.groupedMessagesCache=n,n}return this.groupedMessagesInput=e,this.groupedMessagesStart=this.messageStart,this.groupedMessagesCache=yw(e,this.messageStart),this.groupedMessagesCache}isLiveTailGroup(e,t){return t===e.length-1&&this.isSessionLive()}isSessionLive(){return this.isSendingPrompt||this.status?.isStreaming===!0||this.status?.isCompacting===!0||this.status?.isBashRunning===!0||this.activity?.phase===`active`}syncTurnClock(){if(!this.isSessionLive()){this.turnStartedAtMs=void 0,this.stopTurnClock();return}this.turnStartedAtMs??=Date.now(),this.turnNowMs=Date.now(),this.turnClockTimer===void 0&&(this.turnClockTimer=window.setInterval(()=>{this.turnNowMs=Date.now()},1e3))}stopTurnClock(){this.turnClockTimer!==void 0&&(window.clearInterval(this.turnClockTimer),this.turnClockTimer=void 0)}renderActivityDock(){if(this.pendingAsk!==void 0)return null;if(this.isSendingPrompt)return h`
|
|
3249
3261
|
<div class="activity-dock sending" aria-live="polite">
|
|
3250
3262
|
<span class="state-dots"><span class="state-dot"></span><span class="state-dot"></span><span class="state-dot"></span></span>
|
|
3251
3263
|
<span class="activity-text">Sending your message…</span>
|
|
3252
3264
|
</div>
|
|
3253
|
-
`;let e=this.activityState();if(e===void 0)return null;let t=this.activityCategory(e),n=
|
|
3265
|
+
`;let e=this.activityState();if(e===void 0)return null;let t=this.activityCategory(e),n=SE(this.activityPanelState());if(n!==void 0&&(t===`idle`||t===void 0))return h`
|
|
3254
3266
|
<button
|
|
3255
3267
|
type="button"
|
|
3256
3268
|
class="activity-dock background"
|
|
@@ -3262,18 +3274,18 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
3262
3274
|
<span class="activity-text">${n}</span>
|
|
3263
3275
|
<span class="subagent-chevron" aria-hidden="true">›</span>
|
|
3264
3276
|
</button>
|
|
3265
|
-
`;let r=t===`working`?
|
|
3277
|
+
`;let r=t===`working`?mE(this.turnStartedAtMs,this.turnNowMs):void 0;return h`
|
|
3266
3278
|
<div class=${`activity-dock ${t??``}${r?.long===!0?` long-running`:``}`} aria-live="polite">
|
|
3267
3279
|
${t===`working`?h`<span class="state-dots"><span class="state-dot"></span><span class="state-dot"></span><span class="state-dot"></span></span>`:h`<span class="dot"></span>`}
|
|
3268
|
-
<span class="activity-text">${
|
|
3280
|
+
<span class="activity-text">${CE(t,e,this.activityText(e))}</span>
|
|
3269
3281
|
${r===void 0?null:h`<span class="activity-elapsed" aria-hidden="true">${r.text}</span>`}
|
|
3270
3282
|
</div>
|
|
3271
|
-
`}foldDrawerAsWorkFinishes(){let e=this.activityPanelState()?.summary.working===!0,t=
|
|
3283
|
+
`}foldDrawerAsWorkFinishes(){let e=this.activityPanelState()?.summary.working===!0,t=NC({wasWorking:this.drawerWorkWasRunning,working:e});if(this.drawerWorkWasRunning=e,!t)return;let n=this.topDrawerKey();if(!this.expandedTopDrawerKeys.has(n))return;let r=new Set(this.expandedTopDrawerKeys);r.delete(n),this.expandedTopDrawerKeys=r}revealActivity(){let e=this.topDrawerKey(),t=new Set(this.collapsedTopDrawerKeys);t.delete(e);let n=new Set(this.expandedTopDrawerKeys);n.add(e),this.collapsedTopDrawerKeys=t,this.expandedTopDrawerKeys=n,this.topDrawerTab=`activity`,this.activityScope=`active`}renderDeliveryMark(e){let t=e.meta?.delivery;if(!YT(t)||t===void 0)return null;let n=XT(t);return h`
|
|
3272
3284
|
<div class=${`delivery-mark ${n.tone}`} role="status" aria-label=${n.label}>
|
|
3273
3285
|
<span class="delivery-glyph" aria-hidden="true">${n.glyph}</span>
|
|
3274
3286
|
<span class="delivery-text">${n.text}</span>
|
|
3275
3287
|
</div>
|
|
3276
|
-
`}toggleActivityScope(e){this.activityScope=this.activityScope===`all`?`active`:`all`,e instanceof HTMLElement&&this.updateComplete.then(()=>{e.scrollIntoView({block:`nearest`})})}onDrawerTabsKeydown(e){let t=e.key===`ArrowRight`?1:e.key===`ArrowLeft`?-1:0;if(t===0)return;let n=[...this.renderRoot.querySelectorAll(`.drawer-tab`)];if(n.length<2)return;let r=n.findIndex(t=>t===e.target);if(r===-1)return;e.preventDefault();let i=n[(r+t+n.length)%n.length];i?.click(),i?.focus()}renderPendingMessages(){let e=this.transcriptSplit().pending;if(e.length===0)return null;let t=this.messages.length;return h`${
|
|
3288
|
+
`}toggleActivityScope(e){this.activityScope=this.activityScope===`all`?`active`:`all`,e instanceof HTMLElement&&this.updateComplete.then(()=>{e.scrollIntoView({block:`nearest`})})}onDrawerTabsKeydown(e){let t=e.key===`ArrowRight`?1:e.key===`ArrowLeft`?-1:0;if(t===0)return;let n=[...this.renderRoot.querySelectorAll(`.drawer-tab`)];if(n.length<2)return;let r=n.findIndex(t=>t===e.target);if(r===-1)return;e.preventDefault();let i=n[(r+t+n.length)%n.length];i?.click(),i?.focus()}renderPendingMessages(){let e=this.transcriptSplit().pending;if(e.length===0)return null;let t=this.messages.length;return h`${uw(e,(e,n)=>this.messageAnchorKey(t+n),(e,n)=>this.renderMessage(e,t+n))}`}renderQueuedMessages(){let e=this.status?.queuedMessages??[];return e.length===0?null:h`
|
|
3277
3289
|
<div class="queued-strip" aria-live="polite">
|
|
3278
3290
|
<span class="queued-strip-count">${String(e.length)} queued</span>
|
|
3279
3291
|
${this.onClearServerQueue===void 0?null:h`
|
|
@@ -3310,7 +3322,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
3310
3322
|
</div>
|
|
3311
3323
|
`)}
|
|
3312
3324
|
`}renderClosedDialogs(){return this.closedDialogs.length===0?null:h`
|
|
3313
|
-
${
|
|
3325
|
+
${uw(this.closedDialogs,e=>e.dialog.dialogId,e=>h`
|
|
3314
3326
|
<extension-dialog-card
|
|
3315
3327
|
class="closed-dialog-card"
|
|
3316
3328
|
data-scroll-anchor-id=${`closed-dialog:${e.dialog.dialogId}`}
|
|
@@ -3324,7 +3336,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
3324
3336
|
<span>The agent is summarizing earlier context. New prompts will be queued until compaction finishes.</span>
|
|
3325
3337
|
${this.pendingMessageCount>0?h`<small>${this.pendingMessageCount} queued ${this.pendingMessageCount===1?`message`:`messages`}</small>`:null}
|
|
3326
3338
|
</aside>
|
|
3327
|
-
`:null}activityState(){let e=this.status;return e===void 0?this.activity?.label:e.isCompacting?`compacting`:e.isBashRunning?`bash`:e.isStreaming?`running`:e.pendingMessageCount>0?`queued`:`idle`}activityCategory(e){return this.activity?.phase===`error`?`error`:e===`idle`||e===`undefined`?kh(this.status)?`asking`:`idle`:kh(this.status)?`asking`:`working`}activityText(e){let t=this.activity;return t===void 0||e!==`idle`&&t.phase===`idle`?e:t.detail!==void 0&&t.detail!==``?`${t.label}: ${t.detail}`:t.label}renderConversationRail(){if(!this.messages.length||this.messageTotal<=0)return null;let e=this.conversationDisplayTotal();return h`<conversation-meter .positionPercent=${this.conversationPositionPercent(e)} .loadedPercent=${this.hasMore?
|
|
3339
|
+
`:null}activityState(){let e=this.status;return e===void 0?this.activity?.label:e.isCompacting?`compacting`:e.isBashRunning?`bash`:e.isStreaming?`running`:e.pendingMessageCount>0?`queued`:`idle`}activityCategory(e){return this.activity?.phase===`error`?`error`:e===`idle`||e===`undefined`?kh(this.status)?`asking`:`idle`:kh(this.status)?`asking`:`working`}activityText(e){let t=this.activity;return t===void 0||e!==`idle`&&t.phase===`idle`?e:t.detail!==void 0&&t.detail!==``?`${t.label}: ${t.detail}`:t.label}renderConversationRail(){if(!this.messages.length||this.messageTotal<=0)return null;let e=this.conversationDisplayTotal();return h`<conversation-meter .positionPercent=${this.conversationPositionPercent(e)} .loadedPercent=${this.hasMore?qT(this.messages.length/e*100):100}></conversation-meter>`}conversationDisplayTotal(){return!this.hasMore&&this.messageStart===0?Math.max(1,this.messages.length):Math.max(1,this.messageTotal,this.messageStart+this.messages.length)}conversationPositionPercent(e=this.conversationDisplayTotal()){if(e<=1)return 100;let t=this.pinnedToBottom?this.messageStart+this.messages.length-1:this.messageStart;return qT(JT(this.currentConversationIndex??t,0,e-1)/(e-1)*100)}renderHistoryBoundary(){let e=this.historyRangeLabel();return this.loadingMore?h`<div class="history-boundary"><span>Loading earlier messages…</span>${e}</div>`:this.hasMore?h`
|
|
3328
3340
|
<div class="history-boundary">
|
|
3329
3341
|
<button type="button" class="history-load-button" ?disabled=${this.loadMoreRequested} @click=${()=>{this.requestLoadMore()}}>Load earlier messages</button>
|
|
3330
3342
|
<span>Scroll up to load earlier messages</span>
|
|
@@ -3342,7 +3354,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
3342
3354
|
${e.parts.map(t=>this.renderPart(t,e))}
|
|
3343
3355
|
${this.renderDeliveryMark(e)}
|
|
3344
3356
|
</article>
|
|
3345
|
-
`}renderToolImageOutput(e,t,n){let r=
|
|
3357
|
+
`}renderToolImageOutput(e,t,n){let r=QT(n);return h`
|
|
3346
3358
|
${this.renderScrollMarker(this.messageScrollMarkerId(t))}
|
|
3347
3359
|
<article class="msg tool-image-output" data-index=${t} data-scroll-anchor-id=${this.messageAnchorKey(t)}>
|
|
3348
3360
|
${this.renderMessageHeader(e,String(t),r)}
|
|
@@ -3350,10 +3362,10 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
3350
3362
|
</article>
|
|
3351
3363
|
`}isToolExecutionOnlyMessage(e){return e.role===`tool`&&e.parts.length>0&&e.parts.every(e=>e.type===`toolExecution`)}isAskUserRecordOnlyMessage(e){return e.parts.length>0&&e.parts.every(e=>e.type===`askUserRecord`)}renderMessageGroup(e,t,n,r){let i=this.groupDisclosureKey(t,n,r),a=this.disclosures.isOpen(i,r);return h`
|
|
3352
3364
|
${this.renderScrollMarker(this.groupScrollMarkerId(n))}
|
|
3353
|
-
<details class=${
|
|
3365
|
+
<details class=${rE(r)} data-index=${t} data-scroll-anchor-id=${this.groupAnchorKey(t)} ?open=${a} @toggle=${e=>{this.onGroupToggle(i,e,r)}}>
|
|
3354
3366
|
<summary>
|
|
3355
|
-
<b class="label">${
|
|
3356
|
-
<span>${
|
|
3367
|
+
<b class="label">${iE(r)}</b>
|
|
3368
|
+
<span>${bw(e)}</span>
|
|
3357
3369
|
</summary>
|
|
3358
3370
|
${a?this.renderMessageGroupBody(e,t):null}
|
|
3359
3371
|
</details>
|
|
@@ -3376,7 +3388,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
3376
3388
|
</div>
|
|
3377
3389
|
`}queueEntryFor(e){let t=e.meta?.delivery?.clientMessageId;if(t===void 0)return;let n=this.status?.queuedMessages??[],r=n.find(e=>e.clientMessageId===t);if(r!==void 0)return r;let i=/^queued:([^:]+):(.*)$/.exec(t);if(i===null)return;let[,a,o]=i;return n.find(e=>e.kind===a&&e.text===o)}isQueuedLine(e){return this.queueEntryFor(e)!==void 0}renderQueuedBubbleRecall(e){if(this.onRecallQueuedMessage===void 0)return null;let t=this.queueEntryFor(e);return t===void 0?null:h`<button type="button" class="msg-action" data-action="recall" title="Recall: take this message back and put it in the composer" aria-label="Recall this queued message into the composer" @click=${()=>{this.onRecallQueuedMessage?.(t)}}>
|
|
3378
3390
|
<span aria-hidden="true">↩</span>
|
|
3379
|
-
</button>`}renderMessageActions(e,t){let n=this.onResendMessage!==void 0&&
|
|
3391
|
+
</button>`}renderMessageActions(e,t){let n=this.onResendMessage!==void 0&&Hw(e),r=this.renderQueuedBubbleRecall(e);if(!this.isCopyableMessage(e)&&!n&&r===null)return null;let i=this.copiedMessageKey===t;return h`
|
|
3380
3392
|
<div class="msg-actions" aria-label="Message actions">
|
|
3381
3393
|
${r}
|
|
3382
3394
|
${n?h`<button type="button" class="msg-action" title="Edit and send again" aria-label="Put this message back in the composer to send again" @click=${t=>{this.resendMessage(e,t)}}>
|
|
@@ -3386,9 +3398,9 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
3386
3398
|
<span aria-hidden="true">${i?`✓`:`⧉`}</span>
|
|
3387
3399
|
</button>`:null}
|
|
3388
3400
|
</div>
|
|
3389
|
-
`}resendMessage(e,t){t.stopPropagation();let n=
|
|
3401
|
+
`}resendMessage(e,t){t.stopPropagation();let n=Uw(e);n!==void 0&&this.onResendMessage?.(n)}onMetaKeydown(e,t,n){e.key!==`Enter`&&e.key!==` `||(e.preventDefault(),this.expandedMetaKey=n?void 0:t)}isCopyableMessage(e){return(e.role===`user`||e.role===`assistant`)&&this.messageCopyText(e)!==``}messageCopyText(e){let t=this.messageCopyTextCache.get(e);if(t!==void 0)return t;let n=e.parts.filter(e=>e.type===`text`).map(e=>e.text.trim()).filter(e=>e!==``).join(`
|
|
3390
3402
|
|
|
3391
|
-
`);return this.messageCopyTextCache.set(e,n),n}async copyNotification(e){if(!await
|
|
3403
|
+
`);return this.messageCopyTextCache.set(e,n),n}async copyNotification(e){if(!await gS(e.message))return;let t=e.id;this.copiedNotificationId=t,setTimeout(()=>{this.copiedNotificationId===t&&(this.copiedNotificationId=void 0)},1200)}async copyMessage(e,t,n){n.stopPropagation(),await gS(this.messageCopyText(e))&&(this.copiedMessageKey=t,window.setTimeout(()=>{this.copiedMessageKey===t&&(this.copiedMessageKey=void 0)},1200))}messageMetaLabel(e){let t=this.messageMetaCache.get(e);if(t!==void 0)return t;let n=aE(e);return this.messageMetaCache.set(e,n),n}renderPart(e,t){if(e.type===`text`&&t?.role===`bash`)return h`<pre class="part shell-output">${e.text}</pre>`;if(e.type===`text`)return h`<formatted-text class="part" .text=${e.text}></formatted-text>`;if(e.type===`thinking`)return h`<details class="part"><summary>thinking</summary><formatted-text .text=${e.text}></formatted-text></details>`;if(e.type===`skillInvocation`)return h`
|
|
3392
3404
|
<details class="part skill-invocation">
|
|
3393
3405
|
<summary><b>[skill]</b> ${e.name}</summary>
|
|
3394
3406
|
<small>${e.location}</small>
|
|
@@ -3405,13 +3417,13 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
3405
3417
|
.outcome=${e.outcome}
|
|
3406
3418
|
.draftSessionId=${this.askDraftSessionId}
|
|
3407
3419
|
></ask-user-card>
|
|
3408
|
-
`;if(e.type===`image`){let{src:t,alt:n}=
|
|
3420
|
+
`;if(e.type===`image`){let{src:t,alt:n}=ZT(e);return h`<img class="part chat-image" src=${t} alt=${n} loading="lazy" role="button" tabindex="0" title="Click to enlarge" @load=${this.onImageLoad} @click=${()=>{this.openImageZoom(t,n)}} @keydown=${e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),this.openImageZoom(t,n))}} />`}return e.type===`toolCall`?h`<div class="part tool-line">▶ ${e.toolName}<span class="summary">${e.summary}</span></div>`:e.type===`toolExecution`?h`<tool-execution-view class="part" .execution=${e} .streaming=${this.status?.isStreaming===!0}></tool-execution-view>`:e.type===`toolResult`?h`
|
|
3409
3421
|
<details class="part" ?open=${e.isError}>
|
|
3410
3422
|
<summary>${e.isError?`✖`:`✓`} ${e.toolName} result</summary>
|
|
3411
3423
|
<formatted-text .text=${e.text}></formatted-text>
|
|
3412
3424
|
</details>
|
|
3413
|
-
`:null}onGroupToggle(e,t,n){let r=t.currentTarget;r instanceof HTMLDetailsElement&&this.disclosures.applyToggle(e,r.open,n)&&this.requestUpdate()}onScroll(){this.requestLoadMoreIfNeeded(),this.updatePinnedToBottomFromScroll(),this.scheduleConversationRailUpdate(),this.suppressScrollSave||this.scheduleScrollPositionSave()}onWheel(e){e.deltaY<0&&this.canScrollUp()&&(this.pinnedToBottom=!1)}onTouchStart(e){this.touchStartY=e.touches[0]?.clientY,this.notePressStart()}onTouchEnd(){this.releasePointer()}releasePointer(){this.followGate.notePointerUp(Date.now()),this.heldWaiting!==void 0&&(this.heldWaitingClearTimer!==void 0&&clearTimeout(this.heldWaitingClearTimer),this.heldWaitingClearTimer=setTimeout(()=>{this.heldWaitingClearTimer=void 0,this.requestUpdate()},251)),!(!this.followGate.takeSuppressedFollow()||!this.pinnedToBottom)&&(this.catchUpFollowTimer!==void 0&&clearTimeout(this.catchUpFollowTimer),this.catchUpFollowTimer=setTimeout(()=>{this.catchUpFollowTimer=void 0,this.pinnedToBottom&&this.scrollToBottom()},250))}notePressStart(){this.catchUpFollowTimer!==void 0&&(clearTimeout(this.catchUpFollowTimer),this.catchUpFollowTimer=void 0),this.followGate.notePointerDown(Date.now())}onTouchMove(e){let t=e.touches[0]?.clientY;this.touchStartY!==void 0&&t!==void 0&&t>this.touchStartY&&this.canScrollUp()&&(this.pinnedToBottom=!1)}updatePinnedToBottomFromScroll(){let e=this.chat;if(!e)return;let t=this.didChatHeightChange(),n=this.pinnedToBottom,r=e.scrollTop<this.lastScrollTop;if(t&&n){this.lastClientHeight=e.clientHeight,this.scrollToBottom();return}this.isAtBottom()?this.pinnedToBottom=!0:r?this.pinnedToBottom=!1:this.pinnedToBottom=this.isNearBottom(),this.jumpToBottomVisible=YC(e),this.lastScrollTop=e.scrollTop,this.lastClientHeight=e.clientHeight}didChatHeightChange(){let e=this.chat;return e!==void 0&&this.lastClientHeight!==0&&e.clientHeight!==this.lastClientHeight}isPrependingMessages(e){let t=e.get(`messageStart`);return typeof t==`number`&&this.messageStart<t}requestLoadMoreIfNeeded(){this.loadMoreCheckFrame===void 0&&(this.loadMoreCheckFrame=requestAnimationFrame(()=>{if(this.loadMoreCheckFrame=void 0,this.suppressLoadMoreRequests)return;let e=this.chat;e&&jw({hasMore:this.hasMore,loadingMore:this.loadingMore||this.loadMoreRequested,canRequest:this.onLoadMore!==void 0,scrollTop:e.scrollTop,scrollHeight:e.scrollHeight,clientHeight:e.clientHeight})&&this.requestLoadMore()}))}requestLoadMore(){this.loadMoreRequested||!this.hasMore||this.loadingMore||this.onLoadMore===void 0||(this.loadMoreRequested=!0,this.onLoadMore())}isNearBottom(){let e=this.chat;return!e||UC(e)}isAtBottom(){let e=this.chat;return!e||HC(e)<2}canScrollUp(){let e=this.chat;return e!==void 0&&e.scrollTop>0}scrollToBottom(){this.scrollToBottomFrame===void 0&&(this.scrollToBottomFrame=requestAnimationFrame(()=>{this.scrollToBottomFrame=void 0;let e=this.chat;e&&this.followGate.followsNewest(Date.now())&&this.withSuppressedScrollSave(()=>{e.scrollTop=e.scrollHeight,this.lastScrollTop=e.scrollTop,this.lastClientHeight=e.clientHeight})}))}restoreScrollPosition(){let e=this.sessionId;this.restoreScrollFrame!==void 0&&cancelAnimationFrame(this.restoreScrollFrame),this.restoreScrollFrame=requestAnimationFrame(()=>{this.restoreScrollFrame=void 0,this.sessionId===e&&this.withSuppressedScrollSave(()=>{let t=this.scrollController.restorePosition(e,this.chat,this.scrollAnchorElements(),{fallbackToBottom:this.shouldFallbackToBottomForMissingAnchor()});this.handleScrollRestoreResult(e,t)})})}continuePendingScrollRestore(){let e=this.pendingScrollRestoreSessionId,t=this.pendingScrollRestorePosition;e===void 0||t===void 0||e!==this.sessionId||this.restoreScrollFrame!==void 0||(this.restoreScrollFrame=requestAnimationFrame(()=>{this.restoreScrollFrame=void 0,this.sessionId===e&&this.withSuppressedScrollSave(()=>{let n=this.scrollController.restoreExplicitPosition(t,this.chat,this.scrollAnchorElements(),{fallbackToBottom:this.shouldFallbackToBottomForMissingAnchor()});this.handleScrollRestoreResult(e,n)})}))}handleScrollRestoreResult(e,t){if(this.syncScrollMetrics(),t.status!==`missing`){this.updatePinnedToBottomAfterRestore(t.status),(t.status===`restored`||t.status===`bottom`)&&this.cancelPrependRestore(),this.pendingScrollRestoreSessionId=void 0,this.pendingScrollRestorePosition=void 0;return}this.pinnedToBottom=!1,this.pendingScrollRestoreSessionId=e,this.pendingScrollRestorePosition=t.position;let n=this.chat;n===void 0||!this.hasMore||this.loadingMore||(n.scrollTop=0,this.syncScrollMetrics(),this.requestLoadMore())}shouldFallbackToBottomForMissingAnchor(){return!this.hasMore}updatePinnedToBottomAfterRestore(e){e===`bottom`?this.pinnedToBottom=!0:e===`restored`&&(this.pinnedToBottom=this.isNearBottom())}syncScrollMetrics(){let e=this.chat;e!==void 0&&(this.lastScrollTop=e.scrollTop,this.lastClientHeight=e.clientHeight)}cancelPrependRestore(){this.prependRestoreToken+=1,this.suppressLoadMoreRequests=!1}capturePrependScrollAnchor(){let e=this.chat;if(e)return Cw(e,this.scrollMarkers())}restorePrependScrollAnchor(e){if(!this.chat||!e)return;this.suppressLoadMoreRequests=!0,this.suppressScrollSave=!0;let t=this.prependRestoreToken+1;this.prependRestoreToken=t;let n=0,r=()=>{let i=this.chat;if(!(!i||t!==this.prependRestoreToken)){if(ww(i,e,e.markerId===void 0?void 0:this.scrollMarkerAt(e.markerId)),this.lastScrollTop=i.scrollTop,n+=1,n<30){requestAnimationFrame(r);return}requestAnimationFrame(()=>{t===this.prependRestoreToken&&(this.suppressScrollSave=!1,this.suppressLoadMoreRequests=!1)})}};r()}saveScrollPosition(e=this.sessionId){e&&this.scrollController.savePosition(e,this.chat,this.scrollAnchorElements())}scheduleScrollPositionSave(){let e=this.sessionId;this.scrollController.scheduleSave(e,e=>{this.sessionId===e&&this.saveScrollPosition(e)})}scheduleConversationRailUpdate(){this.conversationRailFrame===void 0&&(this.conversationRailFrame=requestAnimationFrame(()=>{this.conversationRailFrame=void 0,this.updateConversationRailPosition()}))}updateConversationRailPosition(){if(!this.messages.length||this.messageTotal<=0){this.currentConversationIndex=void 0;return}let e=this.conversationDisplayTotal(),t=this.firstVisibleArticle(),n=Number(t?.dataset.index);if(Number.isFinite(n)){this.currentConversationIndex=KT(n,0,Math.max(0,e-1));return}this.currentConversationIndex=KT(this.pinnedToBottom?this.messageStart+this.messages.length-1:this.messageStart,0,Math.max(0,e-1))}scrollMarkers(){return Array.from(this.renderRoot.querySelectorAll(`.scroll-marker`))}scrollMarkerAt(e){return this.scrollMarkers().find(t=>t.dataset.markerId===e)}firstVisibleArticle(){let e=this.chat;if(e!==void 0)return KC(e,Array.from(this.renderRoot.querySelectorAll(`article.msg`)))??KC(e,this.articles())}articles(){return Array.from(this.renderRoot.querySelectorAll(`article.msg, details.msg`))}scrollAnchorElements(){return Array.from(this.renderRoot.querySelectorAll(`[data-scroll-anchor-id]`))}withSuppressedScrollSave(e){this.suppressScrollSave=!0,e(),requestAnimationFrame(()=>{requestAnimationFrame(()=>{this.suppressScrollSave=!1})})}groupDisclosureKey(e,t,n){return n?`${this.sessionId}:live:${String(e)}`:`${this.sessionId}:${String(t)}`}messageAnchorKey(e){return ZT(e)}groupRenderKey(e){return QT(e)}groupAnchorKey(e){return QT(e)}eventAnchorKey(e){return $T(e)}messageScrollMarkerId(e){return ZT(e)}groupScrollMarkerId(e){return eE(e)}static{this.styles=LT}};H([S({attribute:!1})],q.prototype,`messages`,void 0),H([S()],q.prototype,`sessionId`,void 0),H([S({type:Number})],q.prototype,`messageStart`,void 0),H([S({type:Number})],q.prototype,`messageEnd`,void 0),H([S({type:Number})],q.prototype,`messageTotal`,void 0),H([S({type:Boolean})],q.prototype,`hasMore`,void 0),H([S({type:Boolean})],q.prototype,`loadingMore`,void 0),H([S({type:Boolean})],q.prototype,`isSendingPrompt`,void 0),H([S({type:Boolean})],q.prototype,`isCompacting`,void 0),H([S({type:Number})],q.prototype,`pendingMessageCount`,void 0),H([S({attribute:!1})],q.prototype,`clientQueuedMessages`,void 0),H([S({attribute:!1})],q.prototype,`status`,void 0),H([S({attribute:!1})],q.prototype,`activity`,void 0),H([S({attribute:!1})],q.prototype,`pendingAsk`,void 0),H([S({attribute:!1})],q.prototype,`askDraftSessionId`,void 0),H([S({attribute:!1})],q.prototype,`onSubmitAsk`,void 0),H([S({attribute:!1})],q.prototype,`pendingDialogs`,void 0),H([S({attribute:!1})],q.prototype,`commandLedger`,void 0),H([S({type:Boolean})],q.prototype,`goalCommandInFlight`,void 0),H([S({attribute:!1})],q.prototype,`closedDialogs`,void 0),H([S({attribute:!1})],q.prototype,`onAnswerDialog`,void 0),H([S({attribute:!1})],q.prototype,`onCancelDialog`,void 0),H([S({attribute:!1})],q.prototype,`onDismissClosedDialog`,void 0),H([S({attribute:!1})],q.prototype,`onResendMessage`,void 0),H([S({attribute:!1})],q.prototype,`notificationInbox`,void 0),H([S({attribute:!1})],q.prototype,`subagents`,void 0),H([S({attribute:!1})],q.prototype,`subagentRuns`,void 0),H([S({attribute:!1})],q.prototype,`backgroundTasks`,void 0),H([S({type:Boolean})],q.prototype,`activityFailed`,void 0),H([S({type:Boolean})],q.prototype,`notificationsFailed`,void 0),H([S({attribute:!1})],q.prototype,`onOpenBackgroundTask`,void 0),H([S({attribute:!1})],q.prototype,`onOpenSubagentRun`,void 0),H([S({attribute:!1})],q.prototype,`onOpenSubagent`,void 0),H([S({attribute:!1})],q.prototype,`onClearServerQueue`,void 0),H([S({attribute:!1})],q.prototype,`onDismissLedgerRow`,void 0),H([S({attribute:!1})],q.prototype,`onRecallQueuedMessage`,void 0),H([S({attribute:!1})],q.prototype,`onDismissNotification`,void 0),H([S({attribute:!1})],q.prototype,`onDismissAllNotifications`,void 0),H([S({attribute:!1})],q.prototype,`onLoadMore`,void 0),H([S({attribute:!1})],q.prototype,`onFocusComposer`,void 0),H([S({attribute:!1})],q.prototype,`activityOutput`,void 0),H([S({attribute:!1})],q.prototype,`onCloseActivityOutput`,void 0),H([S({attribute:!1})],q.prototype,`activityConversation`,void 0),H([S({attribute:!1})],q.prototype,`onCloseActivityConversation`,void 0),H([w(`.chat`)],q.prototype,`chat`,void 0),H([w(`.drawer-tabs`)],q.prototype,`drawerTabs`,void 0),H([w(`dialog.image-zoom`)],q.prototype,`imageZoomDialog`,void 0),H([w(`dialog.activity-output`)],q.prototype,`activityOutputDialog`,void 0),H([w(`dialog.activity-conversation`)],q.prototype,`activityConversationDialog`,void 0),H([C()],q.prototype,`pinnedToBottom`,void 0),H([C()],q.prototype,`drawerHold`,void 0),H([C()],q.prototype,`jumpToBottomVisible`,void 0),H([C()],q.prototype,`zoomedImage`,void 0),H([C()],q.prototype,`expandedMetaKey`,void 0),H([C()],q.prototype,`copiedNotificationId`,void 0),H([C()],q.prototype,`copiedMessageKey`,void 0),H([C()],q.prototype,`currentConversationIndex`,void 0),H([C()],q.prototype,`collapsedTopDrawerKeys`,void 0),H([C()],q.prototype,`expandedTopDrawerKeys`,void 0),H([S({attribute:!1})],q.prototype,`goalsLoad`,void 0),H([S({attribute:!1})],q.prototype,`onRunGoalCommand`,void 0),H([C()],q.prototype,`topDrawerTab`,void 0),H([C()],q.prototype,`activityFilter`,void 0),H([C()],q.prototype,`activityScope`,void 0),H([C()],q.prototype,`turnStartedAtMs`,void 0),H([C()],q.prototype,`turnNowMs`,void 0),H([C()],q.prototype,`retainedEmptyNotificationTrayTargetKey`,void 0),H([C()],q.prototype,`loadMoreRequested`,void 0),q=H([x(`chat-view`)],q);function oE(e){let t=Math.max(0,Math.round(e/1e3));if(t<60)return`${String(t)}s`;let n=Math.floor(t/60);return n<60?`${String(n)}m ${String(t%60)}s`:`${String(Math.floor(n/60))}h ${String(n%60)}m`}function sE(e){return e.map(e=>{let t=e.status===`running`?`Running`:e.status===`done`?`Done`:e.status===`failed`?`Failed`:e.status===`lost`?`Lost`:`Unknown`,n=oE(e.elapsedMs),r=e.status===`running`?e.lastActivity??`working`:e.task??``,i=eT(e.model);return{run:e,status:e.status,statusLabel:t,duration:n,detail:r,...i===void 0?{}:{modelLabel:i.label,modelTitle:e.model??i.label},ariaLabel:`${t} ${e.agent} subagent, ${n}`+(i===void 0?``:`, on ${i.label}`)+(r===``?``:`, ${r}`)}})}function cE(e){return e.map(e=>{let t=e.status===`running`?`running`:e.status===`completed`?`done`:e.status===`killed`?`stopped`:e.status===`failed`?`failed`:e.status===`lost`?`lost`:`unknown`,n=e.status===`completed`?`Done`:e.status===`running`?`Running`:e.status===`killed`?`Stopped`:e.status===`lost`?`Lost`:e.status.charAt(0).toUpperCase()+e.status.slice(1),r=oE(e.durationMs??0),i=t===`running`?e.command.slice(0,60):e.exitCode===void 0?``:`exit ${String(e.exitCode)}`;return{task:e,status:t,statusLabel:n,duration:r,detail:i,ariaLabel:`${n} background task ${e.name}, ${r}${i===``?``:`, ${i}`}`}})}function lE(e){return e.kind===`subagents`?`subagents:${e.row.subagent.sessionId}`:e.kind===`runs`?`runs:${e.row.run.runId}`:`tasks:${e.row.task.id}`}function uE(e){return[...e].sort((e,t)=>{let n=Number(pE(t.status))-Number(pE(e.status));if(n!==0)return n;let r=Number(mE(e.status))-Number(mE(t.status));if(r!==0)return r;let i=(t.startedAt??``).localeCompare(e.startedAt??``);return i===0?e.kind.localeCompare(t.kind):i})}var dE=600*1e3;function fE(e,t){if(e===void 0)return;let n=Math.max(0,t-e);if(!(n<5e3))return{text:oE(n),long:n>=dE}}function pE(e){return e===`working`||e===`running`}function mE(e){return e===`done`||e===`failed`||e===`error`||e===`lost`||e===`stopped`}function hE(e){return typeof e==`object`&&!!e&&typeof Reflect.get(e,`sessionId`)==`string`&&Array.isArray(Reflect.get(e,`notifications`))}function gE(e){return e.active>0?`Activity · ${String(e.active)} running`:`Activity`}function _E(e){let t=[{id:`subagents`,label:`Subagents`,rows:e.rows},{id:`runs`,label:`Agent runs`,rows:e.runRows},{id:`tasks`,label:`Tasks`,rows:e.taskRows}].filter(e=>e.rows.length>0).map(e=>({id:e.id,label:e.label,count:vE(e.rows)}));return t.length<=1?t:[{id:`all`,label:`All`,count:t.reduce((e,t)=>e+t.count,0)},...t]}function vE(e){return e.filter(e=>!mE(e.status)).length}function yE(e,t){return e===`subagents`&&t.rows.length>0?`subagents`:e===`runs`&&t.runRows.length>0?`runs`:e===`tasks`&&t.taskRows.length>0?`tasks`:`all`}function bE(e){if(e===void 0)return;let t=[...e.rows,...e.runRows,...e.taskRows].filter(e=>e.status===`working`||e.status===`running`).length;if(t!==0)return t===1?`idle · 1 background run`:`idle · ${String(t)} background runs`}function xE(e,t,n){return e===`asking`&&t===`idle`?`Waiting for your answer`:n}function SE(){return!1}function CE(e,t){return t===`activity`?`activity`:t===`notifications`?`notifications`:t===`goals`?`goals`:e.notifications?`notifications`:e.activity?`activity`:e.goals===!0?`goals`:`activity`}function wE(e,t){return e===void 0?t?`Notifications (0)`:`Notifications`:tm(e)}function TE(e,t){return t?`Goals ${String(e.length)}`:`Goals`}function EE(e){return{working:e.some(e=>e===`working`||e===`running`),failed:e.some(e=>e===`error`||e===`failed`)}}function DE(e){return e===``?`Unknown`:e.charAt(0).toUpperCase()+e.slice(1)}function OE(e){return e.map(e=>{let t=e.status,n=e.sessionId.slice(-8),r=DE(t);return{subagent:e,shortId:n,status:t,statusLabel:r,cwd:e.cwd,ariaLabel:`${r} subagent ${n}`}})}var kE=new Set([`image/jpeg`,`image/png`,`image/gif`,`image/webp`]);function AE(e){return typeof e==`string`&&kE.has(e)}function jE(e){switch(e){case`image/jpeg`:return`jpg`;case`image/png`:return`png`;case`image/gif`:return`gif`;case`image/webp`:return`webp`;default:return`bin`}}var ME=`application/octet-stream`,NE=`Failed to read an attachment.`;async function PE(e,t){let n=[],r;for(let i of e)try{let e=await t(i);n.push(RE(i,e))}catch{r=NE}return{attachments:n,...r===void 0?{}:{error:r}}}function FE(e){return e.kind===`image`&&AE(e.mimeType)}function IE(e){return e.every(e=>FE(e))}function LE(e,t){return IE(t)?e:`folder`}function RE(e,t){return AE(e.type)?{kind:`image`,name:BE(e),mimeType:e.type,data:t,size:e.size}:{kind:`file`,name:BE(e),mimeType:zE(e),data:t,size:e.size}}function zE(e){let t=e.type.trim();return t===``?ME:t}function BE(e){return e.name===``?AE(e.type)?`pasted-image.${jE(e.type)}`:`pasted-file.bin`:e.name}var VE=50,HE=`pi-web:prompt-history:`;function UE(e){return`${HE}${e}`}function WE(e){try{let t=localStorage.getItem(UE(e));if(t===null||t===``)return[];let n=JSON.parse(t);return Array.isArray(n)?n.filter(e=>typeof e==`string`&&e.trim()!==``):[]}catch{return[]}}function GE(e,t){try{localStorage.setItem(UE(e),JSON.stringify(t.slice(0,VE)))}catch{}}function KE(e,t){let n=t.trim();if(n===``)return WE(e);let r=[n,...WE(e).filter(e=>e!==n)].slice(0,VE);return GE(e,r),r}function qE(e,t,n=[]){let r=WE(e),i=[...r,...n.filter(e=>!r.includes(e))],a=t.trim().toLowerCase();return a===``?i:JE(i,a.split(/\s+/u).filter(Boolean))}function JE(e,t){return e.filter(e=>{let n=e.toLowerCase();return t.every(e=>n.includes(e)||YE(e,n))})}function YE(e,t){let n=0;for(let r of e){if(n=t.indexOf(r,n),n===-1)return!1;n+=r.length}return!0}function XE(e){return e===`older`?1:-1}var ZE=`(pointer: coarse), (max-width: 760px)`,QE=`pi-web.promptEnterPreference`;function $E(){return typeof window<`u`&&`matchMedia`in window?window.matchMedia(ZE):void 0}function eD(e){return e===`send`||e===`newline`?e:`auto`}function tD(e=oD()){if(e===void 0)return`auto`;try{return eD(e.getItem(QE))}catch{return`auto`}}function nD(e,t=oD()){if(t!==void 0)try{t.setItem(QE,e)}catch{}}function rD(e=$E(),t=tD()){return t===`send`||t!==`newline`&&e?.matches!==!0}function iD(e,t,n=$E()){return e?n?.matches!==!0||t:!1}function aD(e,t=$E(),n=tD()){let r=rD(t,n);return e?!r:r}function oD(){if(!(typeof window>`u`))try{return window.localStorage}catch{return}}var sD=100;function cD(){let e,t,n,r,i=[],a=()=>{r!==void 0&&(window.clearInterval(r),r=void 0),e?.getTracks().forEach(e=>{e.stop()}),e=void 0,n?.close().catch(()=>void 0),n=void 0,t=void 0};return{async start(a){i=[],e=await navigator.mediaDevices.getUserMedia({audio:!0}),t=new MediaRecorder(e),t.addEventListener(`dataavailable`,e=>{e.data.size>0&&i.push(e.data)}),t.start(),n=new AudioContext;let o=n.createMediaStreamSource(e),s=n.createAnalyser();s.fftSize=512,o.connect(s);let c=new Uint8Array(s.fftSize);r=window.setInterval(()=>{s.getByteTimeDomainData(c),a(lD(c),sD)},sD)},stop(){let e=t;return e===void 0?(a(),Promise.resolve(new Blob([]))):new Promise(t=>{e.addEventListener(`stop`,()=>{let e=i[0]?.type??`audio/webm`,n=new Blob(i,{type:e});a(),t(n)},{once:!0}),e.stop()})},cancel(){i=[],t?.state===`recording`&&t.stop(),a()}}}function lD(e){let t=0;for(let n of e){let e=Math.abs(n-128)/128;e>t&&(t=e)}return t}function uD(e){return e!==void 0&&e.endpoint.trim()!==``}async function dD(e,t,n){if(!uD(t))return{ok:!1,message:`Dictation is not configured.`};if(e.size===0)return{ok:!1,message:`Nothing was recorded.`};let r=new FormData;r.append(`file`,e,`speech.webm`),t.model!==void 0&&t.model!==``&&r.append(`model`,t.model),t.language!==void 0&&t.language!==``&&r.append(`language`,t.language);let i;try{i=await n.fetch(t.endpoint,{method:`POST`,body:r,...n.signal===void 0?{}:{signal:n.signal}})}catch(e){return{ok:!1,message:`Could not reach the transcription service: ${mD(e)}`}}if(!i.ok)return{ok:!1,message:`Transcription failed (${String(i.status)}).`};let a;try{a=await i.json()}catch{return{ok:!1,message:`The transcription service returned a response that could not be read.`}}let o=fD(a);if(o===void 0)return{ok:!1,message:`The transcription service returned no text.`};let s=o.trim();return s===``?{ok:!1,message:`No speech was recognised.`}:{ok:!0,text:s}}function fD(e){if(typeof e==`string`)return e;let t=pD(e);if(t===void 0)return;for(let e of[`text`,`transcript`,`transcription`]){let n=t[e];if(typeof n==`string`)return n}let n=t.segments;if(!Array.isArray(n))return;let r=n.map(e=>pD(e)?.text).filter(e=>typeof e==`string`).join(` `);return r.trim()===``?void 0:r}function pD(e){if(typeof e!=`object`||!e||Array.isArray(e))return;let t={};for(let[n,r]of Object.entries(e))t[n]=r;return t}function mD(e){return e instanceof Error?e.message:String(e)}var hD={"openai-realtime":`append`,deepgram:`replace`,"azure-speech":`replace`},gD=class{constructor(e){this.settled=``,this.pending=``,this.mode=e}apply(e){if(e.kind===`delta`){this.pending=this.mode===`append`?this.pending+e.text:e.text;return}if(e.kind===`final`){this.settled=this.settled===``?e.text:`${this.settled} ${e.text}`,this.pending=``;return}}text(){return this.pending===``?this.settled:this.settled===``?this.pending:/^\s/u.test(this.pending)?this.settled+this.pending:`${this.settled} ${this.pending}`}settledText(){return this.settled}};function _D(e,t){if(SD(t))return e===`openai-realtime`?yD(t):e===`azure-speech`?vD(t):bD(t)}function vD(e){let t=xD(e,`Type`);if(t===`speech.hypothesis`){let t=xD(e,`Text`);return t===void 0||t===``?void 0:{kind:`delta`,text:t}}if(t!==`speech.phrase`)return;let n=xD(e,`RecognitionStatus`);if(n===`Error`)return{kind:`error`,message:`Speech recognition reported an error.`};if(n!==`Success`)return;let r=xD(e,`DisplayText`);return r===void 0||r===``?void 0:{kind:`final`,text:r}}function yD(e){let t=xD(e,`type`);if(t===`conversation.item.input_audio_transcription.delta`){let t=xD(e,`delta`);return t===void 0||t===``?void 0:{kind:`delta`,text:t}}if(t===`conversation.item.input_audio_transcription.completed`){let t=xD(e,`transcript`);return t===void 0?void 0:{kind:`final`,text:t}}if(t===`error`){let t=e.error;return{kind:`error`,message:(SD(t)?xD(t,`message`):void 0)??`Transcription failed.`}}}function bD(e){if(xD(e,`type`)!==`Results`)return;let t=e.channel;if(!SD(t))return;let n=t.alternatives;if(!Array.isArray(n))return;let r=n.at(0),i=SD(r)?xD(r,`transcript`):void 0;if(!(i===void 0||i===``))return e.is_final===!0?{kind:`final`,text:i}:{kind:`delta`,text:i}}function xD(e,t){let n=e[t];return typeof n==`string`?n:void 0}function SD(e){return typeof e==`object`&&!!e}function CD(e,t){if(e===void 0)return{kind:`unavailable`,reason:`Live transcription is not configured.`};if(e.protocol===`browser`)return{kind:`browser`};let n=e.url?.trim();if(n===void 0||n===``)return{kind:`unavailable`,reason:`Streaming transcription needs a socket url.`};let r=e.tokenEndpoint?.trim();if(r===void 0||r===``)return{kind:`unavailable`,reason:`Streaming transcription needs a token endpoint so the account key stays on the server.`};let i=t?.trim(),a=i===void 0||i===``?n:`${n}${n.includes(`?`)?`&`:`?`}language=${encodeURIComponent(i)}`;return{kind:`socket`,protocol:e.protocol,url:a,tokenEndpoint:r,deltaMode:hD[e.protocol]}}var wD={trailingSilenceMs:900,speechThreshold:.02,maxUtteranceMs:12e4};function TD(e,t,n,r=wD){if(e.kind!==`listening`&&e.kind!==`speaking`&&e.kind!==`trailing`)return e;if(n>=r.maxUtteranceMs)return e.kind===`listening`?{kind:`idle`}:{kind:`transcribing`};let i=t.level>=r.speechThreshold;if(e.kind===`listening`)return i?{kind:`speaking`}:e;if(e.kind===`speaking`)return i?e:{kind:`trailing`,silenceMs:t.elapsedMs};if(i)return{kind:`speaking`};let a=e.silenceMs+t.elapsedMs;return a>=r.trailingSilenceMs?{kind:`transcribing`}:{kind:`trailing`,silenceMs:a}}function ED(e){switch(e.kind){case`idle`:case`denied`:case`error`:return{kind:`listening`};case`listening`:return{kind:`idle`};case`speaking`:case`trailing`:return{kind:`transcribing`};case`transcribing`:case`unavailable`:return e}}function DD(e){return e.kind===`listening`||e.kind===`speaking`||e.kind===`trailing`}function OD(e,t){switch(e.kind){case`idle`:return t?.streaming===!0?`Dictate live`:`Dictate`;case`listening`:return`Listening…`;case`speaking`:return`Listening…`;case`trailing`:return`Listening…`;case`transcribing`:return`Transcribing…`;case`denied`:return`Microphone permission denied`;case`unavailable`:return e.reason;case`error`:return e.message}}function kD(){return v(`api/speech/token`,AD,{method:`POST`})}function AD(e){if(typeof e!=`object`||!e)throw Error(`The speech token response was not an object.`);let t={...e},n=t.token,r=t.region;if(typeof n!=`string`||n===``)throw Error(`The speech token response carried no token.`);if(typeof r!=`string`||r===``)throw Error(`The speech token response carried no region.`);return{token:n,region:r}}function jD(e){let t=/\r?\n\r?\n/u.exec(e);if(t===null)return;let n=e.slice(0,t.index),r=e.slice(t.index+t[0].length),i;for(let e of n.split(/\r?\n/u)){let t=e.indexOf(`:`);t!==-1&&e.slice(0,t).trim().toLowerCase()===`path`&&(i=e.slice(t+1).trim())}if(!(i===void 0||i===``))return{path:i,body:ND(r)}}function MD(e,t,n){return`${[`Path:${e}`,`X-RequestId:${t}`,`X-Timestamp:${new Date().toISOString()}`,`Content-Type:application/json`].join(`\r
|
|
3414
|
-
`)}\r\n\r\n${JSON.stringify(n)}`}function
|
|
3425
|
+
`:null}onGroupToggle(e,t,n){let r=t.currentTarget;r instanceof HTMLDetailsElement&&this.disclosures.applyToggle(e,r.open,n)&&this.requestUpdate()}onScroll(){this.requestLoadMoreIfNeeded(),this.updatePinnedToBottomFromScroll(),this.scheduleConversationRailUpdate(),this.suppressScrollSave||this.scheduleScrollPositionSave()}onWheel(e){e.deltaY<0&&this.canScrollUp()&&(this.pinnedToBottom=!1)}onTouchStart(e){this.touchStartY=e.touches[0]?.clientY,this.notePressStart()}onTouchEnd(){this.releasePointer()}releasePointer(){this.followGate.notePointerUp(Date.now()),this.heldWaiting!==void 0&&(this.heldWaitingClearTimer!==void 0&&clearTimeout(this.heldWaitingClearTimer),this.heldWaitingClearTimer=setTimeout(()=>{this.heldWaitingClearTimer=void 0,this.requestUpdate()},251)),!(!this.followGate.takeSuppressedFollow()||!this.pinnedToBottom)&&(this.catchUpFollowTimer!==void 0&&clearTimeout(this.catchUpFollowTimer),this.catchUpFollowTimer=setTimeout(()=>{this.catchUpFollowTimer=void 0,this.pinnedToBottom&&this.scrollToBottom()},250))}notePressStart(){this.catchUpFollowTimer!==void 0&&(clearTimeout(this.catchUpFollowTimer),this.catchUpFollowTimer=void 0),this.followGate.notePointerDown(Date.now())}onTouchMove(e){let t=e.touches[0]?.clientY;this.touchStartY!==void 0&&t!==void 0&&t>this.touchStartY&&this.canScrollUp()&&(this.pinnedToBottom=!1)}updatePinnedToBottomFromScroll(){let e=this.chat;if(!e)return;let t=this.didChatHeightChange(),n=this.pinnedToBottom,r=e.scrollTop<this.lastScrollTop;if(t&&n){this.lastClientHeight=e.clientHeight,this.scrollToBottom();return}this.isAtBottom()?this.pinnedToBottom=!0:r?this.pinnedToBottom=!1:this.pinnedToBottom=this.isNearBottom(),this.jumpToBottomVisible=ZC(e),this.lastScrollTop=e.scrollTop,this.lastClientHeight=e.clientHeight}didChatHeightChange(){let e=this.chat;return e!==void 0&&this.lastClientHeight!==0&&e.clientHeight!==this.lastClientHeight}isPrependingMessages(e){let t=e.get(`messageStart`);return typeof t==`number`&&this.messageStart<t}requestLoadMoreIfNeeded(){this.loadMoreCheckFrame===void 0&&(this.loadMoreCheckFrame=requestAnimationFrame(()=>{if(this.loadMoreCheckFrame=void 0,this.suppressLoadMoreRequests)return;let e=this.chat;e&&Nw({hasMore:this.hasMore,loadingMore:this.loadingMore||this.loadMoreRequested,canRequest:this.onLoadMore!==void 0,scrollTop:e.scrollTop,scrollHeight:e.scrollHeight,clientHeight:e.clientHeight})&&this.requestLoadMore()}))}requestLoadMore(){this.loadMoreRequested||!this.hasMore||this.loadingMore||this.onLoadMore===void 0||(this.loadMoreRequested=!0,this.onLoadMore())}isNearBottom(){let e=this.chat;return!e||GC(e)}isAtBottom(){let e=this.chat;return!e||WC(e)<2}canScrollUp(){let e=this.chat;return e!==void 0&&e.scrollTop>0}scrollToBottom(){this.scrollToBottomFrame===void 0&&(this.scrollToBottomFrame=requestAnimationFrame(()=>{this.scrollToBottomFrame=void 0;let e=this.chat;e&&this.followGate.followsNewest(Date.now())&&this.withSuppressedScrollSave(()=>{e.scrollTop=e.scrollHeight,this.lastScrollTop=e.scrollTop,this.lastClientHeight=e.clientHeight})}))}restoreScrollPosition(){let e=this.sessionId;this.restoreScrollFrame!==void 0&&cancelAnimationFrame(this.restoreScrollFrame),this.restoreScrollFrame=requestAnimationFrame(()=>{this.restoreScrollFrame=void 0,this.sessionId===e&&this.withSuppressedScrollSave(()=>{let t=this.scrollController.restorePosition(e,this.chat,this.scrollAnchorElements(),{fallbackToBottom:this.shouldFallbackToBottomForMissingAnchor()});this.handleScrollRestoreResult(e,t)})})}continuePendingScrollRestore(){let e=this.pendingScrollRestoreSessionId,t=this.pendingScrollRestorePosition;e===void 0||t===void 0||e!==this.sessionId||this.restoreScrollFrame!==void 0||(this.restoreScrollFrame=requestAnimationFrame(()=>{this.restoreScrollFrame=void 0,this.sessionId===e&&this.withSuppressedScrollSave(()=>{let n=this.scrollController.restoreExplicitPosition(t,this.chat,this.scrollAnchorElements(),{fallbackToBottom:this.shouldFallbackToBottomForMissingAnchor()});this.handleScrollRestoreResult(e,n)})}))}handleScrollRestoreResult(e,t){if(this.syncScrollMetrics(),t.status!==`missing`){this.updatePinnedToBottomAfterRestore(t.status),(t.status===`restored`||t.status===`bottom`)&&this.cancelPrependRestore(),this.pendingScrollRestoreSessionId=void 0,this.pendingScrollRestorePosition=void 0;return}this.pinnedToBottom=!1,this.pendingScrollRestoreSessionId=e,this.pendingScrollRestorePosition=t.position;let n=this.chat;n===void 0||!this.hasMore||this.loadingMore||(n.scrollTop=0,this.syncScrollMetrics(),this.requestLoadMore())}shouldFallbackToBottomForMissingAnchor(){return!this.hasMore}updatePinnedToBottomAfterRestore(e){e===`bottom`?this.pinnedToBottom=!0:e===`restored`&&(this.pinnedToBottom=this.isNearBottom())}syncScrollMetrics(){let e=this.chat;e!==void 0&&(this.lastScrollTop=e.scrollTop,this.lastClientHeight=e.clientHeight)}cancelPrependRestore(){this.prependRestoreToken+=1,this.suppressLoadMoreRequests=!1}capturePrependScrollAnchor(){let e=this.chat;if(e)return Tw(e,this.scrollMarkers())}restorePrependScrollAnchor(e){if(!this.chat||!e)return;this.suppressLoadMoreRequests=!0,this.suppressScrollSave=!0;let t=this.prependRestoreToken+1;this.prependRestoreToken=t;let n=0,r=()=>{let i=this.chat;if(!(!i||t!==this.prependRestoreToken)){if(Ew(i,e,e.markerId===void 0?void 0:this.scrollMarkerAt(e.markerId)),this.lastScrollTop=i.scrollTop,n+=1,n<30){requestAnimationFrame(r);return}requestAnimationFrame(()=>{t===this.prependRestoreToken&&(this.suppressScrollSave=!1,this.suppressLoadMoreRequests=!1)})}};r()}saveScrollPosition(e=this.sessionId){e&&this.scrollController.savePosition(e,this.chat,this.scrollAnchorElements())}scheduleScrollPositionSave(){let e=this.sessionId;this.scrollController.scheduleSave(e,e=>{this.sessionId===e&&this.saveScrollPosition(e)})}scheduleConversationRailUpdate(){this.conversationRailFrame===void 0&&(this.conversationRailFrame=requestAnimationFrame(()=>{this.conversationRailFrame=void 0,this.updateConversationRailPosition()}))}updateConversationRailPosition(){if(!this.messages.length||this.messageTotal<=0){this.currentConversationIndex=void 0;return}let e=this.conversationDisplayTotal(),t=this.firstVisibleArticle(),n=Number(t?.dataset.index);if(Number.isFinite(n)){this.currentConversationIndex=JT(n,0,Math.max(0,e-1));return}this.currentConversationIndex=JT(this.pinnedToBottom?this.messageStart+this.messages.length-1:this.messageStart,0,Math.max(0,e-1))}scrollMarkers(){return Array.from(this.renderRoot.querySelectorAll(`.scroll-marker`))}scrollMarkerAt(e){return this.scrollMarkers().find(t=>t.dataset.markerId===e)}firstVisibleArticle(){let e=this.chat;if(e!==void 0)return JC(e,Array.from(this.renderRoot.querySelectorAll(`article.msg`)))??JC(e,this.articles())}articles(){return Array.from(this.renderRoot.querySelectorAll(`article.msg, details.msg`))}scrollAnchorElements(){return Array.from(this.renderRoot.querySelectorAll(`[data-scroll-anchor-id]`))}withSuppressedScrollSave(e){this.suppressScrollSave=!0,e(),requestAnimationFrame(()=>{requestAnimationFrame(()=>{this.suppressScrollSave=!1})})}groupDisclosureKey(e,t,n){return n?`${this.sessionId}:live:${String(e)}`:`${this.sessionId}:${String(t)}`}messageAnchorKey(e){return $T(e)}groupRenderKey(e){return eE(e)}groupAnchorKey(e){return eE(e)}eventAnchorKey(e){return tE(e)}messageScrollMarkerId(e){return $T(e)}groupScrollMarkerId(e){return nE(e)}static{this.styles=zT}};H([S({attribute:!1})],q.prototype,`messages`,void 0),H([S()],q.prototype,`sessionId`,void 0),H([S({type:Number})],q.prototype,`messageStart`,void 0),H([S({type:Number})],q.prototype,`messageEnd`,void 0),H([S({type:Number})],q.prototype,`messageTotal`,void 0),H([S({type:Boolean})],q.prototype,`hasMore`,void 0),H([S({type:Boolean})],q.prototype,`loadingMore`,void 0),H([S({type:Boolean})],q.prototype,`isSendingPrompt`,void 0),H([S({type:Boolean})],q.prototype,`isCompacting`,void 0),H([S({type:Number})],q.prototype,`pendingMessageCount`,void 0),H([S({attribute:!1})],q.prototype,`clientQueuedMessages`,void 0),H([S({attribute:!1})],q.prototype,`status`,void 0),H([S({attribute:!1})],q.prototype,`activity`,void 0),H([S({attribute:!1})],q.prototype,`pendingAsk`,void 0),H([S({attribute:!1})],q.prototype,`askDraftSessionId`,void 0),H([S({attribute:!1})],q.prototype,`onSubmitAsk`,void 0),H([S({attribute:!1})],q.prototype,`pendingDialogs`,void 0),H([S({attribute:!1})],q.prototype,`commandLedger`,void 0),H([S({type:Boolean})],q.prototype,`goalCommandInFlight`,void 0),H([S({attribute:!1})],q.prototype,`closedDialogs`,void 0),H([S({attribute:!1})],q.prototype,`onAnswerDialog`,void 0),H([S({attribute:!1})],q.prototype,`onCancelDialog`,void 0),H([S({attribute:!1})],q.prototype,`onDismissClosedDialog`,void 0),H([S({attribute:!1})],q.prototype,`onResendMessage`,void 0),H([S({attribute:!1})],q.prototype,`notificationInbox`,void 0),H([S({attribute:!1})],q.prototype,`subagents`,void 0),H([S({attribute:!1})],q.prototype,`subagentRuns`,void 0),H([S({attribute:!1})],q.prototype,`backgroundTasks`,void 0),H([S({type:Boolean})],q.prototype,`activityFailed`,void 0),H([S({type:Boolean})],q.prototype,`notificationsFailed`,void 0),H([S({attribute:!1})],q.prototype,`onOpenBackgroundTask`,void 0),H([S({attribute:!1})],q.prototype,`onOpenSubagentRun`,void 0),H([S({attribute:!1})],q.prototype,`onOpenSubagent`,void 0),H([S({attribute:!1})],q.prototype,`onClearServerQueue`,void 0),H([S({attribute:!1})],q.prototype,`onDismissLedgerRow`,void 0),H([S({attribute:!1})],q.prototype,`onRecallQueuedMessage`,void 0),H([S({attribute:!1})],q.prototype,`onDismissNotification`,void 0),H([S({attribute:!1})],q.prototype,`onDismissAllNotifications`,void 0),H([S({attribute:!1})],q.prototype,`onLoadMore`,void 0),H([S({attribute:!1})],q.prototype,`onFocusComposer`,void 0),H([S({attribute:!1})],q.prototype,`activityOutput`,void 0),H([S({attribute:!1})],q.prototype,`onCloseActivityOutput`,void 0),H([S({attribute:!1})],q.prototype,`activityConversation`,void 0),H([S({attribute:!1})],q.prototype,`onCloseActivityConversation`,void 0),H([w(`.chat`)],q.prototype,`chat`,void 0),H([w(`.drawer-tabs`)],q.prototype,`drawerTabs`,void 0),H([w(`dialog.image-zoom`)],q.prototype,`imageZoomDialog`,void 0),H([w(`dialog.activity-output`)],q.prototype,`activityOutputDialog`,void 0),H([w(`dialog.activity-conversation`)],q.prototype,`activityConversationDialog`,void 0),H([C()],q.prototype,`pinnedToBottom`,void 0),H([C()],q.prototype,`drawerHold`,void 0),H([C()],q.prototype,`jumpToBottomVisible`,void 0),H([C()],q.prototype,`zoomedImage`,void 0),H([C()],q.prototype,`expandedMetaKey`,void 0),H([C()],q.prototype,`copiedNotificationId`,void 0),H([C()],q.prototype,`copiedMessageKey`,void 0),H([C()],q.prototype,`currentConversationIndex`,void 0),H([C()],q.prototype,`collapsedTopDrawerKeys`,void 0),H([C()],q.prototype,`expandedTopDrawerKeys`,void 0),H([S({attribute:!1})],q.prototype,`goalsLoad`,void 0),H([S({attribute:!1})],q.prototype,`onRunGoalCommand`,void 0),H([C()],q.prototype,`topDrawerTab`,void 0),H([C()],q.prototype,`activityFilter`,void 0),H([C()],q.prototype,`activityScope`,void 0),H([C()],q.prototype,`turnStartedAtMs`,void 0),H([C()],q.prototype,`turnNowMs`,void 0),H([C()],q.prototype,`retainedEmptyNotificationTrayTargetKey`,void 0),H([C()],q.prototype,`loadMoreRequested`,void 0),q=H([x(`chat-view`)],q);function cE(e){let t=Math.max(0,Math.round(e/1e3));if(t<60)return`${String(t)}s`;let n=Math.floor(t/60);return n<60?`${String(n)}m ${String(t%60)}s`:`${String(Math.floor(n/60))}h ${String(n%60)}m`}function lE(e){return e.map(e=>{let t=e.status===`running`?`Running`:e.status===`done`?`Done`:e.status===`failed`?`Failed`:e.status===`lost`?`Lost`:`Unknown`,n=cE(e.elapsedMs),r=e.status===`running`?e.lastActivity??`working`:e.task??``,i=nT(e.model);return{run:e,status:e.status,statusLabel:t,duration:n,detail:r,...i===void 0?{}:{modelLabel:i.label,modelTitle:e.model??i.label},ariaLabel:`${t} ${e.agent} subagent, ${n}`+(i===void 0?``:`, on ${i.label}`)+(r===``?``:`, ${r}`)}})}function uE(e){return e.map(e=>{let t=e.status===`running`?`running`:e.status===`completed`?`done`:e.status===`killed`?`stopped`:e.status===`failed`?`failed`:e.status===`lost`?`lost`:`unknown`,n=e.status===`completed`?`Done`:e.status===`running`?`Running`:e.status===`killed`?`Stopped`:e.status===`lost`?`Lost`:e.status.charAt(0).toUpperCase()+e.status.slice(1),r=cE(e.durationMs??0),i=t===`running`?e.command.slice(0,60):e.exitCode===void 0?``:`exit ${String(e.exitCode)}`;return{task:e,status:t,statusLabel:n,duration:r,detail:i,ariaLabel:`${n} background task ${e.name}, ${r}${i===``?``:`, ${i}`}`}})}function dE(e){return e.kind===`subagents`?`subagents:${e.row.subagent.sessionId}`:e.kind===`runs`?`runs:${e.row.run.runId}`:`tasks:${e.row.task.id}`}function fE(e){return[...e].sort((e,t)=>{let n=Number(hE(t.status))-Number(hE(e.status));if(n!==0)return n;let r=Number(gE(e.status))-Number(gE(t.status));if(r!==0)return r;let i=(t.startedAt??``).localeCompare(e.startedAt??``);return i===0?e.kind.localeCompare(t.kind):i})}var pE=600*1e3;function mE(e,t){if(e===void 0)return;let n=Math.max(0,t-e);if(!(n<5e3))return{text:cE(n),long:n>=pE}}function hE(e){return e===`working`||e===`running`}function gE(e){return e===`done`||e===`failed`||e===`error`||e===`lost`||e===`stopped`}function _E(e){return typeof e==`object`&&!!e&&typeof Reflect.get(e,`sessionId`)==`string`&&Array.isArray(Reflect.get(e,`notifications`))}function vE(e){return e.active>0?`Activity · ${String(e.active)} running`:`Activity`}function yE(e){let t=[{id:`subagents`,label:`Subagents`,rows:e.rows},{id:`runs`,label:`Agent runs`,rows:e.runRows},{id:`tasks`,label:`Tasks`,rows:e.taskRows}].filter(e=>e.rows.length>0).map(e=>({id:e.id,label:e.label,count:bE(e.rows)}));return t.length<=1?t:[{id:`all`,label:`All`,count:t.reduce((e,t)=>e+t.count,0)},...t]}function bE(e){return e.filter(e=>!gE(e.status)).length}function xE(e,t){return e===`subagents`&&t.rows.length>0?`subagents`:e===`runs`&&t.runRows.length>0?`runs`:e===`tasks`&&t.taskRows.length>0?`tasks`:`all`}function SE(e){if(e===void 0)return;let t=[...e.rows,...e.runRows,...e.taskRows].filter(e=>e.status===`working`||e.status===`running`).length;if(t!==0)return t===1?`idle · 1 background run`:`idle · ${String(t)} background runs`}function CE(e,t,n){return e===`asking`&&t===`idle`?`Waiting for your answer`:n}function wE(){return!1}function TE(e,t){return t===`activity`?`activity`:t===`notifications`?`notifications`:t===`goals`?`goals`:e.notifications?`notifications`:e.activity?`activity`:e.goals===!0?`goals`:`activity`}function EE(e,t){return e===void 0?t?`Notifications (0)`:`Notifications`:tm(e)}function DE(e,t){return t?`Goals ${String(e.length)}`:`Goals`}function OE(e){return{working:e.some(e=>e===`working`||e===`running`),failed:e.some(e=>e===`error`||e===`failed`)}}function kE(e){return e===``?`Unknown`:e.charAt(0).toUpperCase()+e.slice(1)}function AE(e){return e.map(e=>{let t=e.status,n=e.sessionId.slice(-8),r=kE(t);return{subagent:e,shortId:n,status:t,statusLabel:r,cwd:e.cwd,ariaLabel:`${r} subagent ${n}`}})}var jE=new Set([`image/jpeg`,`image/png`,`image/gif`,`image/webp`]);function ME(e){return typeof e==`string`&&jE.has(e)}function NE(e){switch(e){case`image/jpeg`:return`jpg`;case`image/png`:return`png`;case`image/gif`:return`gif`;case`image/webp`:return`webp`;default:return`bin`}}var PE=`application/octet-stream`,FE=`Failed to read an attachment.`;async function IE(e,t){let n=[],r;for(let i of e)try{let e=await t(i);n.push(BE(i,e))}catch{r=FE}return{attachments:n,...r===void 0?{}:{error:r}}}function LE(e){return e.kind===`image`&&ME(e.mimeType)}function RE(e){return e.every(e=>LE(e))}function zE(e,t){return RE(t)?e:`folder`}function BE(e,t){return ME(e.type)?{kind:`image`,name:HE(e),mimeType:e.type,data:t,size:e.size}:{kind:`file`,name:HE(e),mimeType:VE(e),data:t,size:e.size}}function VE(e){let t=e.type.trim();return t===``?PE:t}function HE(e){return e.name===``?ME(e.type)?`pasted-image.${NE(e.type)}`:`pasted-file.bin`:e.name}var UE=50,WE=`pi-web:prompt-history:`;function GE(e){return`${WE}${e}`}function KE(e){try{let t=localStorage.getItem(GE(e));if(t===null||t===``)return[];let n=JSON.parse(t);return Array.isArray(n)?n.filter(e=>typeof e==`string`&&e.trim()!==``):[]}catch{return[]}}function qE(e,t){try{localStorage.setItem(GE(e),JSON.stringify(t.slice(0,UE)))}catch{}}function JE(e,t){let n=t.trim();if(n===``)return KE(e);let r=[n,...KE(e).filter(e=>e!==n)].slice(0,UE);return qE(e,r),r}function YE(e,t,n=[]){let r=KE(e),i=[...r,...n.filter(e=>!r.includes(e))],a=t.trim().toLowerCase();return a===``?i:XE(i,a.split(/\s+/u).filter(Boolean))}function XE(e,t){return e.filter(e=>{let n=e.toLowerCase();return t.every(e=>n.includes(e)||ZE(e,n))})}function ZE(e,t){let n=0;for(let r of e){if(n=t.indexOf(r,n),n===-1)return!1;n+=r.length}return!0}function QE(e){return e===`older`?1:-1}var $E=`(pointer: coarse), (max-width: 760px)`,eD=`pi-web.promptEnterPreference`;function tD(){return typeof window<`u`&&`matchMedia`in window?window.matchMedia($E):void 0}function nD(e){return e===`send`||e===`newline`?e:`auto`}function rD(e=cD()){if(e===void 0)return`auto`;try{return nD(e.getItem(eD))}catch{return`auto`}}function iD(e,t=cD()){if(t!==void 0)try{t.setItem(eD,e)}catch{}}function aD(e=tD(),t=rD()){return t===`send`||t!==`newline`&&e?.matches!==!0}function oD(e,t,n=tD()){return e?n?.matches!==!0||t:!1}function sD(e,t=tD(),n=rD()){let r=aD(t,n);return e?!r:r}function cD(){if(!(typeof window>`u`))try{return window.localStorage}catch{return}}var lD=100;function uD(){let e,t,n,r,i=[],a=()=>{r!==void 0&&(window.clearInterval(r),r=void 0),e?.getTracks().forEach(e=>{e.stop()}),e=void 0,n?.close().catch(()=>void 0),n=void 0,t=void 0};return{async start(a){i=[],e=await navigator.mediaDevices.getUserMedia({audio:!0}),t=new MediaRecorder(e),t.addEventListener(`dataavailable`,e=>{e.data.size>0&&i.push(e.data)}),t.start(),n=new AudioContext;let o=n.createMediaStreamSource(e),s=n.createAnalyser();s.fftSize=512,o.connect(s);let c=new Uint8Array(s.fftSize);r=window.setInterval(()=>{s.getByteTimeDomainData(c),a(dD(c),lD)},lD)},stop(){let e=t;return e===void 0?(a(),Promise.resolve(new Blob([]))):new Promise(t=>{e.addEventListener(`stop`,()=>{let e=i[0]?.type??`audio/webm`,n=new Blob(i,{type:e});a(),t(n)},{once:!0}),e.stop()})},cancel(){i=[],t?.state===`recording`&&t.stop(),a()}}}function dD(e){let t=0;for(let n of e){let e=Math.abs(n-128)/128;e>t&&(t=e)}return t}function fD(e){return e!==void 0&&e.endpoint.trim()!==``}async function pD(e,t,n){if(!fD(t))return{ok:!1,message:`Dictation is not configured.`};if(e.size===0)return{ok:!1,message:`Nothing was recorded.`};let r=new FormData;r.append(`file`,e,`speech.webm`),t.model!==void 0&&t.model!==``&&r.append(`model`,t.model),t.language!==void 0&&t.language!==``&&r.append(`language`,t.language);let i;try{i=await n.fetch(t.endpoint,{method:`POST`,body:r,...n.signal===void 0?{}:{signal:n.signal}})}catch(e){return{ok:!1,message:`Could not reach the transcription service: ${gD(e)}`}}if(!i.ok)return{ok:!1,message:`Transcription failed (${String(i.status)}).`};let a;try{a=await i.json()}catch{return{ok:!1,message:`The transcription service returned a response that could not be read.`}}let o=mD(a);if(o===void 0)return{ok:!1,message:`The transcription service returned no text.`};let s=o.trim();return s===``?{ok:!1,message:`No speech was recognised.`}:{ok:!0,text:s}}function mD(e){if(typeof e==`string`)return e;let t=hD(e);if(t===void 0)return;for(let e of[`text`,`transcript`,`transcription`]){let n=t[e];if(typeof n==`string`)return n}let n=t.segments;if(!Array.isArray(n))return;let r=n.map(e=>hD(e)?.text).filter(e=>typeof e==`string`).join(` `);return r.trim()===``?void 0:r}function hD(e){if(typeof e!=`object`||!e||Array.isArray(e))return;let t={};for(let[n,r]of Object.entries(e))t[n]=r;return t}function gD(e){return e instanceof Error?e.message:String(e)}var _D={"openai-realtime":`append`,deepgram:`replace`,"azure-speech":`replace`},vD=class{constructor(e){this.settled=``,this.pending=``,this.mode=e}apply(e){if(e.kind===`delta`){this.pending=this.mode===`append`?this.pending+e.text:e.text;return}if(e.kind===`final`){this.settled=this.settled===``?e.text:`${this.settled} ${e.text}`,this.pending=``;return}}text(){return this.pending===``?this.settled:this.settled===``?this.pending:/^\s/u.test(this.pending)?this.settled+this.pending:`${this.settled} ${this.pending}`}settledText(){return this.settled}};function yD(e,t){if(wD(t))return e===`openai-realtime`?xD(t):e===`azure-speech`?bD(t):SD(t)}function bD(e){let t=CD(e,`Type`);if(t===`speech.hypothesis`){let t=CD(e,`Text`);return t===void 0||t===``?void 0:{kind:`delta`,text:t}}if(t!==`speech.phrase`)return;let n=CD(e,`RecognitionStatus`);if(n===`Error`)return{kind:`error`,message:`Speech recognition reported an error.`};if(n!==`Success`)return;let r=CD(e,`DisplayText`);return r===void 0||r===``?void 0:{kind:`final`,text:r}}function xD(e){let t=CD(e,`type`);if(t===`conversation.item.input_audio_transcription.delta`){let t=CD(e,`delta`);return t===void 0||t===``?void 0:{kind:`delta`,text:t}}if(t===`conversation.item.input_audio_transcription.completed`){let t=CD(e,`transcript`);return t===void 0?void 0:{kind:`final`,text:t}}if(t===`error`){let t=e.error;return{kind:`error`,message:(wD(t)?CD(t,`message`):void 0)??`Transcription failed.`}}}function SD(e){if(CD(e,`type`)!==`Results`)return;let t=e.channel;if(!wD(t))return;let n=t.alternatives;if(!Array.isArray(n))return;let r=n.at(0),i=wD(r)?CD(r,`transcript`):void 0;if(!(i===void 0||i===``))return e.is_final===!0?{kind:`final`,text:i}:{kind:`delta`,text:i}}function CD(e,t){let n=e[t];return typeof n==`string`?n:void 0}function wD(e){return typeof e==`object`&&!!e}function TD(e,t){if(e===void 0)return{kind:`unavailable`,reason:`Live transcription is not configured.`};if(e.protocol===`browser`)return{kind:`browser`};let n=e.url?.trim();if(n===void 0||n===``)return{kind:`unavailable`,reason:`Streaming transcription needs a socket url.`};let r=e.tokenEndpoint?.trim();if(r===void 0||r===``)return{kind:`unavailable`,reason:`Streaming transcription needs a token endpoint so the account key stays on the server.`};let i=t?.trim(),a=i===void 0||i===``?n:`${n}${n.includes(`?`)?`&`:`?`}language=${encodeURIComponent(i)}`;return{kind:`socket`,protocol:e.protocol,url:a,tokenEndpoint:r,deltaMode:_D[e.protocol]}}var ED={trailingSilenceMs:900,speechThreshold:.02,maxUtteranceMs:12e4};function DD(e,t,n,r=ED){if(e.kind!==`listening`&&e.kind!==`speaking`&&e.kind!==`trailing`)return e;if(n>=r.maxUtteranceMs)return e.kind===`listening`?{kind:`idle`}:{kind:`transcribing`};let i=t.level>=r.speechThreshold;if(e.kind===`listening`)return i?{kind:`speaking`}:e;if(e.kind===`speaking`)return i?e:{kind:`trailing`,silenceMs:t.elapsedMs};if(i)return{kind:`speaking`};let a=e.silenceMs+t.elapsedMs;return a>=r.trailingSilenceMs?{kind:`transcribing`}:{kind:`trailing`,silenceMs:a}}function OD(e){switch(e.kind){case`idle`:case`denied`:case`error`:return{kind:`listening`};case`listening`:return{kind:`idle`};case`speaking`:case`trailing`:return{kind:`transcribing`};case`transcribing`:case`unavailable`:return e}}function kD(e){return e.kind===`listening`||e.kind===`speaking`||e.kind===`trailing`}function AD(e,t){switch(e.kind){case`idle`:return t?.streaming===!0?`Dictate live`:`Dictate`;case`listening`:return`Listening…`;case`speaking`:return`Listening…`;case`trailing`:return`Listening…`;case`transcribing`:return`Transcribing…`;case`denied`:return`Microphone permission denied`;case`unavailable`:return e.reason;case`error`:return e.message}}function jD(){return v(`api/speech/token`,MD,{method:`POST`})}function MD(e){if(typeof e!=`object`||!e)throw Error(`The speech token response was not an object.`);let t={...e},n=t.token,r=t.region;if(typeof n!=`string`||n===``)throw Error(`The speech token response carried no token.`);if(typeof r!=`string`||r===``)throw Error(`The speech token response carried no region.`);return{token:n,region:r}}function ND(e){let t=/\r?\n\r?\n/u.exec(e);if(t===null)return;let n=e.slice(0,t.index),r=e.slice(t.index+t[0].length),i;for(let e of n.split(/\r?\n/u)){let t=e.indexOf(`:`);t!==-1&&e.slice(0,t).trim().toLowerCase()===`path`&&(i=e.slice(t+1).trim())}if(!(i===void 0||i===``))return{path:i,body:FD(r)}}function PD(e,t,n){return`${[`Path:${e}`,`X-RequestId:${t}`,`X-Timestamp:${new Date().toISOString()}`,`Content-Type:application/json`].join(`\r
|
|
3426
|
+
`)}\r\n\r\n${JSON.stringify(n)}`}function FD(e){if(e.trim()!==``)try{let t=JSON.parse(e);if(typeof t!=`object`||!t)return;let n={};for(let[e,r]of Object.entries(t))n[e]=r;return n}catch{return}}function ID(e){let t=new Int16Array(e.length);for(let n=0;n<e.length;n+=1){let r=Math.max(-1,Math.min(1,e[n]??0));t[n]=Math.round(r<0?r*32768:r*32767)}return t}function LD(e,t,n){if(t===n)return e;if(t<n)throw Error(`Cannot upsample audio from ${String(t)} to ${String(n)}`);let r=t/n,i=Math.floor(e.length/r),a=new Float32Array(i);for(let t=0;t<i;t+=1)a[t]=e[Math.floor(t*r)]??0;return a}function RD(e){if(e.length===0)return``;let t=new Uint8Array(e.buffer,e.byteOffset,e.byteLength),n=``;for(let e of t)n+=String.fromCharCode(e);return btoa(n)}var zD=16e3,BD=class e{constructor(e,t=`azure-speech`){this.requestId=``,this.deps=e,this.protocol=t,this.buffer=new vD(_D[t])}static closeQuietly(e){if(e!==void 0){if(e.onmessage=null,e.onerror=null,e.readyState===WebSocket.CONNECTING){e.onopen=()=>{e.close()};return}e.onopen=null,e.close()}}async start(e){this.buffer=new vD(_D[this.protocol]);let t;try{t=await this.deps.requestToken()}catch(e){this.deps.onError(`Could not get a dictation token: ${VD(e)}`);return}this.requestId=this.deps.newRequestId();let n=new URLSearchParams({"X-ConnectionId":this.requestId}),r=`${e}${e.includes(`?`)?`&`:`?`}Authorization=${encodeURIComponent(`Bearer ${t.token}`)}&${n.toString()}`,i=this.deps.openSocket(r);this.socket=i,i.onmessage=e=>{this.receive(e.data)},i.onerror=()=>{this.deps.onError(`The dictation connection failed.`)},i.onopen=()=>{i.send(PD(`speech.config`,this.requestId,{context:{system:{name:`pi-web`}}})),this.beginCapture(i)}}stop(){this.stopCapture?.(),this.stopCapture=void 0;let t=this.socket;this.socket=void 0,e.closeQuietly(t);let n=this.buffer.settledText();n!==``&&this.deps.onText(n)}async beginCapture(e){try{this.stopCapture=await this.deps.captureAudio((t,n)=>{if(e.readyState!==WebSocket.OPEN)return;let r=LD(t,n,zD);e.send(PD(`audio`,this.requestId,{audio:RD(ID(r))}))})}catch(e){this.deps.onError(`Could not use the microphone: ${VD(e)}`),this.stop()}}receive(e){if(typeof e!=`string`)return;let t=ND(e);if(t?.body===void 0)return;let n=yD(this.protocol,{...t.body,Type:t.path});if(n!==void 0){if(n.kind===`error`){this.deps.onError(n.message);return}this.buffer.apply(n),this.deps.onText(this.buffer.text())}}};function VD(e){return e instanceof Error?e.message:String(e)}var HD=`
|
|
3415
3427
|
class SampleTap extends AudioWorkletProcessor {
|
|
3416
3428
|
process(inputs) {
|
|
3417
3429
|
const channel = inputs[0]?.[0];
|
|
@@ -3420,31 +3432,31 @@ class SampleTap extends AudioWorkletProcessor {
|
|
|
3420
3432
|
}
|
|
3421
3433
|
}
|
|
3422
3434
|
registerProcessor("sample-tap", SampleTap);
|
|
3423
|
-
`;async function
|
|
3435
|
+
`;async function UD(e){let t=await navigator.mediaDevices.getUserMedia({audio:!0}),n=new AudioContext,r=URL.createObjectURL(new Blob([HD],{type:`text/javascript`}));try{await n.audioWorklet.addModule(r)}finally{URL.revokeObjectURL(r)}let i=n.createMediaStreamSource(t),a=new AudioWorkletNode(n,`sample-tap`);return a.port.onmessage=t=>{e(t.data,n.sampleRate)},i.connect(a),()=>{a.port.onmessage=null,a.disconnect(),i.disconnect();for(let e of t.getTracks())e.stop();n.close()}}var WD={live:`live`,wholeClip:`whole-clip`,unavailable:`unavailable`};function GD(e){return fD(e)?TD(e.streaming).kind===`unavailable`?WD.wholeClip:WD.live:WD.unavailable}function KD(){return globalThis.fetch.bind(globalThis)}var qD=class{constructor(e,t){this.deps=e,this.callbacks=t,this.state={kind:`idle`},this.elapsedMs=0}getState(){return this.state}async toggle(e){if(!fD(e)){this.setState({kind:`unavailable`,reason:`Dictation is not configured.`});return}let t=OD(this.state);if(t.kind===`listening`&&!kD(this.state)){GD(e)===WD.live?await this.startLive(e):await this.startListening(e);return}if(t.kind===`idle`){this.closeLive(),this.deps.recorder.cancel(),this.setState({kind:`idle`});return}if(t.kind===`transcribing`){if(this.live!==void 0){this.closeLive(),this.setState({kind:`idle`});return}await this.finish(e);return}this.setState(t)}closeLive(){let e=this.live;e!==void 0&&(this.live=void 0,e.stop())}async startLive(e){let t=TD(e.streaming,e.language),n=this.deps.createLiveDictation;if(t.kind!==`socket`||n===void 0){await this.startListening(e);return}this.activeConfig=e,this.elapsedMs=0,this.setState({kind:`listening`}),this.live=n(e=>{this.callbacks.onTranscript(e)},e=>{this.setState({kind:`error`,message:e})});try{await this.live.start(t.url)}catch(e){this.live=void 0,this.setState({kind:`error`,message:`Live transcription failed: ${YD(e)}`})}}async startListening(e){this.activeConfig=e,this.elapsedMs=0,this.setState({kind:`listening`});try{await this.deps.recorder.start((e,t)=>{this.onFrame(e,t)})}catch(e){this.setState(JD(e)?{kind:`denied`}:{kind:`error`,message:`Microphone unavailable: ${YD(e)}`})}}onFrame(e,t){if(!kD(this.state))return;this.elapsedMs+=t;let n=DD(this.state,{level:e,elapsedMs:t},this.elapsedMs,this.deps.captureConfig??ED);if(n!==this.state){if(n.kind===`transcribing`){this.finish(this.activeConfig);return}n.kind===`idle`&&this.deps.recorder.cancel(),this.setState(n)}}async finish(e){this.setState({kind:`transcribing`});let t;try{t=await this.deps.recorder.stop()}catch(e){this.setState({kind:`error`,message:`Recording failed: ${YD(e)}`});return}if(!fD(e)){this.setState({kind:`unavailable`,reason:`Dictation is not configured.`});return}let n=await(this.deps.transcribe??pD)(t,e,{fetch:this.deps.fetch??KD()});if(!n.ok){this.setState({kind:`error`,message:n.message});return}this.callbacks.onTranscript(n.text),this.setState({kind:`idle`})}setState(e){this.state=e,this.callbacks.onState(e)}};function JD(e){if(typeof e!=`object`||!e)return!1;let t=`name`in e?e.name:void 0;return t===`NotAllowedError`||t===`SecurityError`}function YD(e){return e instanceof Error?e.message:String(e)}function XD(){return je`
|
|
3424
3436
|
<svg class="prompt-action-icon" viewBox="0 0 24 24" aria-hidden="true" focusable="false">
|
|
3425
3437
|
<path d="M20 11.5 12.5 19a4 4 0 0 1-5.66-5.66l7.07-7.07a2.5 2.5 0 0 1 3.54 3.54l-7.07 7.07a1 1 0 0 1-1.42-1.42l6.37-6.36"></path>
|
|
3426
3438
|
</svg>
|
|
3427
|
-
`}function
|
|
3439
|
+
`}function ZD(){return je`
|
|
3428
3440
|
<svg class="prompt-action-icon" viewBox="0 0 24 24" aria-hidden="true" focusable="false">
|
|
3429
3441
|
<path d="M21 3 13.5 21l-2-8.5L3 10.5Z"></path>
|
|
3430
3442
|
<path d="M21 3 11.5 12.5"></path>
|
|
3431
3443
|
</svg>
|
|
3432
|
-
`}function
|
|
3444
|
+
`}function QD(){return je`
|
|
3433
3445
|
<svg class="prompt-action-icon" viewBox="0 0 24 24" aria-hidden="true" focusable="false">
|
|
3434
3446
|
<path d="M4 7h11"></path>
|
|
3435
3447
|
<path d="M4 12h7"></path>
|
|
3436
3448
|
<path d="M4 17h7"></path>
|
|
3437
3449
|
<path d="m15 14 5 3-5 3z"></path>
|
|
3438
3450
|
</svg>
|
|
3439
|
-
`}function
|
|
3451
|
+
`}function $D(){return ZD()}function eO(){return je`
|
|
3440
3452
|
<svg class="prompt-action-icon prompt-action-icon-filled" viewBox="0 0 24 24" aria-hidden="true" focusable="false">
|
|
3441
3453
|
<rect x="6.5" y="6.5" width="11" height="11" rx="2"></rect>
|
|
3442
3454
|
</svg>
|
|
3443
|
-
`}function
|
|
3455
|
+
`}function tO(e){let t=Math.max(e.total,1),n=t>1?1.2:0,r=(18-n*(t-1))/t;return je`
|
|
3444
3456
|
<svg class="prompt-thinking-gauge" viewBox="0 0 24 24" aria-hidden="true" focusable="false">
|
|
3445
3457
|
${Array.from({length:t},(i,a)=>{let o=3+a*(r+n),s=4+(a+1)/t*12,c=20-s;return je`<rect class=${a<e.filled?`gauge-bar gauge-bar-active`:`gauge-bar`} x=${o} y=${c} width=${r} height=${s} rx="1"></rect>`})}
|
|
3446
3458
|
</svg>
|
|
3447
|
-
`}var
|
|
3459
|
+
`}var nO=[`off`,`minimal`,`low`,`medium`,`high`,`xhigh`,`max`];function rO(e){return e===void 0||e===``?`off`:e}function iO(e,t){let n=t.length>=2?t:nO,r=n.length-1,i=rO(e),a=n.indexOf(i);return{total:r,filled:a<=0?0:Math.min(a,r)}}var aO=l_(class extends u_{constructor(e){super(e),this.wasSelected=!1,this.isElementPart=e.type===c_.ELEMENT}update(e,[t,n]){if(!this.isElementPart)throw Error(`scrollWhenSelected must be used on an element`);if(t&&(!this.wasSelected||n!==this.previousKey)){let t=`element`in e?e.element:void 0;requestAnimationFrame(()=>{t instanceof HTMLElement&&t.scrollIntoView({block:`nearest`})})}this.wasSelected=t,this.previousKey=n}render(e,t){}}),oO=o`
|
|
3448
3460
|
:host { display: block; }
|
|
3449
3461
|
.menu { position: absolute; left: 0; right: 0; bottom: calc(100% + 6px); z-index: var(--pi-layer-raised); max-height: 260px; overflow: auto; border: 1px solid var(--pi-border); border-radius: var(--pi-radius-md); background: var(--pi-surface); box-shadow: 0 10px 30px var(--pi-shadow); }
|
|
3450
3462
|
button { font: var(--pi-text-xs) var(--pi-font-ui); display: grid; grid-template-columns: minmax(120px, 1fr) auto; gap: var(--pi-space-2) var(--pi-space-5); width: 100%; border: 0; border-bottom: 1px solid var(--pi-border); border-radius: 0; background: transparent; color: var(--pi-text); padding: var(--pi-space-4) var(--pi-space-5); text-align: left; cursor: pointer; }
|
|
@@ -3453,17 +3465,17 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
3453
3465
|
@media (hover: hover) { button:hover { background: var(--pi-selection-bg); } }
|
|
3454
3466
|
span { color: var(--pi-muted); font-size: var(--pi-text-xs); }
|
|
3455
3467
|
small { grid-column: 1 / -1; color: var(--pi-muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
3456
|
-
`,
|
|
3468
|
+
`,sO=class extends _{constructor(...e){super(...e),this.items=[],this.selectedIndex=0}render(){return this.items.length?h`
|
|
3457
3469
|
<div class="menu">
|
|
3458
3470
|
${this.items.map((e,t)=>h`
|
|
3459
|
-
<button class=${t===this.selectedIndex?`selected`:``} ${
|
|
3471
|
+
<button class=${t===this.selectedIndex?`selected`:``} ${aO(t===this.selectedIndex,e)} @mousedown=${t=>{t.preventDefault(),this.onPick?.(e)}}>
|
|
3460
3472
|
<strong>${e.insertText}</strong>
|
|
3461
3473
|
<span>${e.detail}</span>
|
|
3462
3474
|
${e.description!==void 0&&e.description!==``?h`<small>${e.description}</small>`:null}
|
|
3463
3475
|
</button>
|
|
3464
3476
|
`)}
|
|
3465
3477
|
</div>
|
|
3466
|
-
`:null}static{this.styles=
|
|
3478
|
+
`:null}static{this.styles=oO}};H([S({attribute:!1})],sO.prototype,`items`,void 0),H([S({type:Number})],sO.prototype,`selectedIndex`,void 0),H([S({attribute:!1})],sO.prototype,`onPick`,void 0),sO=H([x(`autocomplete-menu`)],sO);function cO(e){return e.composedPath().some(e=>e instanceof HTMLButtonElement||e instanceof HTMLAnchorElement&&e.hasAttribute(`href`))}var lO=class extends _{constructor(...e){super(...e),this.sessionKey=``,this.sessionPrompts=[],this.query=``,this.selectedIndex=0}entries(){return YE(this.sessionKey,this.query,this.sessionPrompts)}render(){let e=this.entries(),t=Math.min(this.selectedIndex,Math.max(e.length-1,0));return h`
|
|
3467
3479
|
<modal-surface
|
|
3468
3480
|
.onClose=${()=>{this.onClose?.()}}
|
|
3469
3481
|
.initialFocus=${Lt({touchPrimary:Rt()})}
|
|
@@ -3493,13 +3505,13 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
3493
3505
|
class=${`entry${n===t?` selected`:``}`}
|
|
3494
3506
|
title=${e}
|
|
3495
3507
|
dir="auto"
|
|
3496
|
-
${
|
|
3508
|
+
${aO(n===t,e)}
|
|
3497
3509
|
@click=${()=>{this.pick(e)}}
|
|
3498
3510
|
><span class="entry-text">${e}</span></button>
|
|
3499
3511
|
`)}
|
|
3500
3512
|
</div>
|
|
3501
3513
|
</modal-surface>
|
|
3502
|
-
`}onQueryInput(e){e.target instanceof HTMLInputElement&&(this.query=e.target.value,this.selectedIndex=0)}handleKeyDown(e,t,n){if(e.key===`ArrowDown`||e.key===`ArrowUp`){if(t.length===0)return;e.preventDefault();let r=e.key===`ArrowDown`?1:-1;this.selectedIndex=Math.min(Math.max(n+r,0),t.length-1);return}if(e.key!==`Enter`||
|
|
3514
|
+
`}onQueryInput(e){e.target instanceof HTMLInputElement&&(this.query=e.target.value,this.selectedIndex=0)}handleKeyDown(e,t,n){if(e.key===`ArrowDown`||e.key===`ArrowUp`){if(t.length===0)return;e.preventDefault();let r=e.key===`ArrowDown`?1:-1;this.selectedIndex=Math.min(Math.max(n+r,0),t.length-1);return}if(e.key!==`Enter`||cO(e))return;let r=t[n];r!==void 0&&(e.preventDefault(),this.pick(r))}pick(e){this.onPick?.(e)}static{this.styles=o`
|
|
3503
3515
|
/* The sheet's controls are in their own shadow root, so the composer's
|
|
3504
3516
|
tap rules do not reach them: without these, every row and the close
|
|
3505
3517
|
button stay eligible for the browser's double-tap-zoom click delay. */
|
|
@@ -3526,7 +3538,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
3526
3538
|
.entry:focus-visible { outline: var(--pi-focus-ring-width) solid var(--pi-accent); outline-offset: -2px; }
|
|
3527
3539
|
.entry-text { display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 3; overflow: hidden; overflow-wrap: anywhere; font: var(--pi-text-sm) var(--pi-font-ui); line-height: 1.4; }
|
|
3528
3540
|
.empty { margin: var(--pi-space-7) var(--pi-space-2); color: var(--pi-muted); text-align: center; }
|
|
3529
|
-
`}};H([S()],
|
|
3541
|
+
`}};H([S()],lO.prototype,`sessionKey`,void 0),H([S({attribute:!1})],lO.prototype,`sessionPrompts`,void 0),H([S({attribute:!1})],lO.prototype,`onPick`,void 0),H([S({attribute:!1})],lO.prototype,`onClose`,void 0),H([C()],lO.prototype,`query`,void 0),H([C()],lO.prototype,`selectedIndex`,void 0),lO=H([x(`prompt-history-panel`)],lO);var uO=o`
|
|
3530
3542
|
/* Mobile browsers paint a rectangular highlight on tap, which looks pasted-on
|
|
3531
3543
|
over a round or rounded control. Suppressed in favour of the app's own
|
|
3532
3544
|
pressed and focus styling; :focus-visible still shows keyboard focus, so
|
|
@@ -3698,7 +3710,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
3698
3710
|
.list-search-clear { width: 30px; height: 30px; }
|
|
3699
3711
|
.list-body.tiles { gap: var(--pi-space-3); grid-template-columns: 1fr; }
|
|
3700
3712
|
.list-body.tiles .action-main { min-height: 48px; padding: var(--pi-space-4) 28px var(--pi-space-4) var(--pi-space-4); }
|
|
3701
|
-
}`,J=class extends _{constructor(...e){super(...e),this.disabled=!1,this.machineId=`local`,this.canSteer=!1,this.isCompacting=!1,this.canStop=!1,this.sending=!1,this.collapsed=!1,this.availableThinkingLevels=[],this.draft=``,this.hasRenderedOnce=!1,this.currentInputMode={kind:`normal`},this.completions=[],this.selectedIndex=0,this.historyOpen=!1,this.sessionPrompts=[],this.voiceState={kind:`idle`},this.attachments=[],this.attachmentError=void 0,this.attachingCount=0,this.attachingSettled=Promise.resolve(),this.attachmentSeq=0,this.requestVersion=0,this.historyDraftBeforeBrowse=``,this.editorLoading=!1,this.mobilePromptEnterMedia
|
|
3713
|
+
}`,J=class extends _{constructor(...e){super(...e),this.disabled=!1,this.machineId=`local`,this.canSteer=!1,this.isCompacting=!1,this.canStop=!1,this.sending=!1,this.collapsed=!1,this.availableThinkingLevels=[],this.draft=``,this.hasRenderedOnce=!1,this.currentInputMode={kind:`normal`},this.completions=[],this.selectedIndex=0,this.historyOpen=!1,this.sessionPrompts=[],this.voiceState={kind:`idle`},this.attachments=[],this.attachmentError=void 0,this.attachingCount=0,this.attachingSettled=Promise.resolve(),this.attachmentSeq=0,this.requestVersion=0,this.historyDraftBeforeBrowse=``,this.editorLoading=!1,this.mobilePromptEnterMedia=tD(),this.explicitShiftKeyActive=!1,this.pendingPrompts=[],this.openAttachmentZoom=(e,t)=>{this.zoomedAttachment={src:e,alt:t}},this.closeAttachmentZoom=()=>{this.zoomedAttachment=void 0},this.onAttachmentZoomDialogClick=e=>{e.target===this.attachmentZoomDialog&&this.closeAttachmentZoom()},this.flushPendingPrompts=()=>{if(!navigator.onLine)return;let e=ul(this.machineId,this.sessionId??``);if(e===``)return;let t=Cf(e);if(t.length===0)return;let n=t;(async()=>{let t=[],r=!1;for(let e of n)try{await this.onSend?.(e.text,e.behavior,e.attachments,e.attachments===void 0?void 0:this.effectiveAttachmentDelivery(),e.clientMessageId===void 0?void 0:{clientMessageId:e.clientMessageId})===!1&&t.push(e)}catch(n){r||=xf(n),t.push(e)}t.length===0?Tf(e):r||Tf(e),this.pendingPrompts=t.length===0?[]:t,n=t})()}}willUpdate(e){let t=e.has(`sessionId`),n=e.has(`machineId`),r=this.hasRenderedOnce;if(!Ku({hasRendered:r,sessionChanged:t,machineChanged:n}))return;this.hasRenderedOnce=!0;let i=t?e.get(`sessionId`):this.sessionId,a=fO(n?e.get(`machineId`):this.machineId,i);a!==void 0&&qu({hasRendered:r})&&Uu(a,this.draft);let o=fO(this.machineId,this.sessionId);this.draft=o===void 0?``:Hu(o),this.currentInputMode=Hf(this.draft),this.completions=[],this.selectedIndex=0,(t||n)&&(this.historyOpen=!1)}shouldUpdate(e){return e.has(`status`)&&e.size===1?!dO(e.get(`status`),this.status):!0}firstUpdated(){this.createEditor(),this.pendingPrompts=this.pendingPromptsForSession(),window.addEventListener(`online`,this.flushPendingPrompts)}connectedCallback(){super.connectedCallback(),this.pendingPrompts=this.pendingPromptsForSession()}updated(e){e.has(`collapsed`)&&(this.collapsed?(this.editor?.destroy(),this.editor=void 0,this.editorControls=void 0):this.createEditor()),e.has(`disabled`)&&this.updateEditorDisabledState(),(e.has(`sessionId`)||e.has(`machineId`))&&this.syncEditorDoc(),this.syncAttachmentZoomDialog()}disconnectedCallback(){window.removeEventListener(`online`,this.flushPendingPrompts),this.editor?.destroy(),this.editor=void 0,this.editorControls=void 0,super.disconnectedCallback()}render(){if(this.collapsed)return this.renderCollapsed();let e=this.currentInputMode.kind===`shell`?this.currentInputMode:void 0,t=e!==void 0,n=this.canSteer||this.isCompacting,r=this.disabled||this.sending;return h`
|
|
3702
3714
|
<footer class=${t?`shell-mode`:``} @paste=${e=>{this.handlePaste(e)}} @dragover=${e=>{this.handleDragOver(e)}} @drop=${e=>{this.handleDrop(e)}}>
|
|
3703
3715
|
<input class="attachment-input" type="file" multiple hidden @change=${e=>{this.handleFileInput(e)}} />
|
|
3704
3716
|
${this.renderAttachments()}
|
|
@@ -3711,15 +3723,15 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
3711
3723
|
aria-label="Message pi"
|
|
3712
3724
|
aria-disabled=${this.disabled?`true`:`false`}
|
|
3713
3725
|
></div>
|
|
3714
|
-
<button class="editor-attach icon-button" ?disabled=${this.disabled} title="Attach files" aria-label="Attach files" @click=${()=>{this.attachmentInput?.click()}}>${
|
|
3726
|
+
<button class="editor-attach icon-button" ?disabled=${this.disabled} title="Attach files" aria-label="Attach files" @click=${()=>{this.attachmentInput?.click()}}>${XD()}</button>
|
|
3715
3727
|
<autocomplete-menu .items=${this.completions} .selectedIndex=${this.selectedIndex} .onPick=${e=>{this.pick(e)}}></autocomplete-menu>
|
|
3716
3728
|
</div>
|
|
3717
3729
|
<div class="actions">
|
|
3718
3730
|
${this.renderCompactStatus()}
|
|
3719
3731
|
${this.renderHistoryButton()}
|
|
3720
3732
|
${this.renderDictateButton()}
|
|
3721
|
-
<button class="icon-button send-button" ?disabled=${r} title=${n?`Steer — joins the current turn at the next safe point`:`Send message`} aria-label=${n?`Steer current response (queued if busy)`:`Send message`} @click=${()=>{this.send(this.canSteer?`steer`:`followUp`)}}>${this.canSteer
|
|
3722
|
-
<button class="icon-button stop-button" ?disabled=${this.disabled||!this.canStop} title=${this.canStop?`Stop current work and clear queued messages`:`Nothing running`} aria-label="Stop current work" @click=${()=>this.onStop?.()}>${
|
|
3733
|
+
<button class="icon-button send-button" ?disabled=${r} title=${n?`Steer — joins the current turn at the next safe point`:`Send message`} aria-label=${n?`Steer current response (queued if busy)`:`Send message`} @click=${()=>{this.send(this.canSteer?`steer`:`followUp`)}}>${this.canSteer?$D():n?QD():ZD()}</button>
|
|
3734
|
+
<button class="icon-button stop-button" ?disabled=${this.disabled||!this.canStop} title=${this.canStop?`Stop current work and clear queued messages`:`Nothing running`} aria-label="Stop current work" @click=${()=>this.onStop?.()}>${eO()}</button>
|
|
3723
3735
|
</div>
|
|
3724
3736
|
</footer>
|
|
3725
3737
|
${this.renderAttachmentZoom()}
|
|
@@ -3738,22 +3750,22 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
3738
3750
|
${this.draftPreview===``?null:h`<span class="expand-composer-draft" dir="auto">${this.draftPreview}</span>`}
|
|
3739
3751
|
</button>
|
|
3740
3752
|
</footer>
|
|
3741
|
-
`}get draftPreview(){let e=(this.editor?.state.doc.toString()??this.draft).trim().replace(/\s+/gu,` `);return e.length>60?`${e.slice(0,59)}…`:e}focusInput(){this.editor?.focus()}restorePrompt(e){this.attachmentError=void 0,this.attachments=e.attachments.filter(e=>e.kind===`image`).map((e,t)=>(this.attachmentSeq+=1,{id:`restored-${String(this.attachmentSeq)}`,kind:`image`,name:e.name??`image-${String(t+1)}`,mimeType:e.mimeType,data:e.data,size:Math.floor(e.data.length*3/4)})),this.replaceText(e.text),this.focusInput()}replaceText(e){this.draft=e;let t=
|
|
3753
|
+
`}get draftPreview(){let e=(this.editor?.state.doc.toString()??this.draft).trim().replace(/\s+/gu,` `);return e.length>60?`${e.slice(0,59)}…`:e}focusInput(){this.editor?.focus()}restorePrompt(e){this.attachmentError=void 0,this.attachments=e.attachments.filter(e=>e.kind===`image`).map((e,t)=>(this.attachmentSeq+=1,{id:`restored-${String(this.attachmentSeq)}`,kind:`image`,name:e.name??`image-${String(t+1)}`,mimeType:e.mimeType,data:e.data,size:Math.floor(e.data.length*3/4)})),this.replaceText(e.text),this.focusInput()}replaceText(e){this.draft=e;let t=fO(this.machineId,this.sessionId);t!==void 0&&Uu(t,e);let n=this.editor;if(n!==void 0&&this.cm!==void 0){let t=n.state.doc.toString();n.dispatch({...t===e?{}:{changes:{from:0,to:t.length,insert:e}},selection:this.cm.cursorAt(e.length)})}this.requestVersion+=1,this.currentInputMode=Hf(e),this.completions=[],this.selectedIndex=0}get view(){return this.editor}renderCompactStatus(){let e=this.status;if(e===void 0)return null;let t=e.model?.id??`no model`,n=e.model?.provider!==void 0&&e.model.provider!==``?`${e.model.provider}/`:``;return h`
|
|
3742
3754
|
<div class="compact-status" aria-label="Session status">
|
|
3743
3755
|
<button class="select-model" title=${`Select model: ${n}${t}`} @click=${()=>this.onSelectModel?.()}>${n===``?null:h`<span class="select-model-provider">${n}</span>`}<span class="select-model-id">${t}</span></button>
|
|
3744
|
-
<button class="select-thinking icon-button" title=${`Thinking level: ${
|
|
3756
|
+
<button class="select-thinking icon-button" title=${`Thinking level: ${rO(e.thinkingLevel)}`} aria-label=${`Thinking level: ${rO(e.thinkingLevel)}`} @click=${()=>this.onSelectThinking?.()}>${tO(iO(e.thinkingLevel,this.availableThinkingLevels))}</button>
|
|
3745
3757
|
</div>
|
|
3746
3758
|
`}renderAttachments(){return this.attachments.length===0&&this.attachmentError===void 0?null:h`
|
|
3747
3759
|
<div class="attachments" aria-label="Pending attachments">
|
|
3748
3760
|
${this.attachments.map(e=>h`
|
|
3749
|
-
<div class=${`attachment-chip ${
|
|
3761
|
+
<div class=${`attachment-chip ${LE(e)?`attachment-chip-image`:`attachment-chip-file`}`} title=${e.name}>
|
|
3750
3762
|
${this.renderAttachmentPreview(e)}
|
|
3751
3763
|
<button type="button" class="attachment-remove" title="Remove attachment" aria-label=${`Remove ${e.name}`} @click=${()=>{this.removeAttachment(e.id)}}>×</button>
|
|
3752
3764
|
</div>
|
|
3753
3765
|
`)}
|
|
3754
3766
|
${this.attachmentError===void 0?null:h`<div class="attachment-error">${this.attachmentError}</div>`}
|
|
3755
3767
|
</div>
|
|
3756
|
-
`}renderAttachmentPreview(e){if(
|
|
3768
|
+
`}renderAttachmentPreview(e){if(LE(e)){let t=`data:${e.mimeType};base64,${e.data}`;return h`<img
|
|
3757
3769
|
src=${t}
|
|
3758
3770
|
alt=${e.name}
|
|
3759
3771
|
role="button"
|
|
@@ -3762,7 +3774,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
3762
3774
|
@click=${()=>{this.openAttachmentZoom(t,e.name)}}
|
|
3763
3775
|
@keydown=${n=>{(n.key===`Enter`||n.key===` `)&&(n.preventDefault(),this.openAttachmentZoom(t,e.name))}}
|
|
3764
3776
|
/>`}return h`
|
|
3765
|
-
<div class="attachment-file-preview" aria-hidden="true">${
|
|
3777
|
+
<div class="attachment-file-preview" aria-hidden="true">${yO(e.name)}</div>
|
|
3766
3778
|
<span class="attachment-file-name">${e.name}</span>
|
|
3767
3779
|
`}removeAttachment(e){this.attachments=this.attachments.filter(t=>t.id!==e)}syncAttachmentZoomDialog(){let e=this.attachmentZoomDialog;if(e){if(this.zoomedAttachment!==void 0){try{e.open||e.showModal()}catch{this.zoomedAttachment=void 0;return}(this.renderRoot.querySelector(`.attachment-zoom-close`)??e).focus();return}e.open&&e.close()}}renderAttachmentZoom(){let e=this.zoomedAttachment;return h`
|
|
3768
3780
|
<dialog class="attachment-zoom" @click=${this.onAttachmentZoomDialogClick} @close=${this.closeAttachmentZoom} @cancel=${this.closeAttachmentZoom}>
|
|
@@ -3771,7 +3783,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
3771
3783
|
<img class="attachment-zoom-full" src=${e.src} alt=${e.alt} />
|
|
3772
3784
|
`}
|
|
3773
3785
|
</dialog>
|
|
3774
|
-
`}async handlePaste(e){let t=
|
|
3786
|
+
`}async handlePaste(e){let t=gO(e.clipboardData);t.length!==0&&(e.preventDefault(),await this.addAttachmentFiles(t))}handleDragOver(e){e.dataTransfer!==null&&_O(e.dataTransfer)&&e.preventDefault()}async handleDrop(e){let t=gO(e.dataTransfer);t.length!==0&&(e.preventDefault(),await this.addAttachmentFiles(t))}async handleFileInput(e){if(!(e.target instanceof HTMLInputElement)||e.target.files===null)return;let t=Array.from(e.target.files);e.target.value=``,await this.addAttachmentFiles(t)}async addAttachmentFiles(e){this.attachmentError=void 0,this.attachingCount+=1;let t=IE(e,bO);this.attachingSettled=this.attachingSettled.then(async()=>{await t}).catch(()=>void 0);let n;try{n=await t}finally{--this.attachingCount}let{attachments:r,error:i}=n;r.length>0&&(this.attachments=[...this.attachments,...r.map(e=>({id:`attachment-${String(++this.attachmentSeq)}`,...e}))]),i!==void 0&&(this.attachmentError=i)}currentAttachments(){return this.attachments.map(e=>vO(e))}renderVoiceHint(){let e=this.voiceState;if(e.kind===`idle`)return null;let t=e.kind===`error`?e.message:e.kind===`unavailable`?e.reason:e.kind===`denied`?`Microphone permission refused`:e.kind===`transcribing`?`Transcribing…`:`Listening…`;return h`<div class=${`mode-hint${e.kind===`error`||e.kind===`denied`||e.kind===`unavailable`?` mode-hint-problem`:``}`} role="status">${t}</div>`}renderHistoryButton(){if(this.disabled)return null;let e=fO(this.machineId,this.sessionId);return(e===void 0?0:KE(e).length)===0&&this.sessionPrompts.length===0?null:h`
|
|
3775
3787
|
<button
|
|
3776
3788
|
class="editor-history icon-button"
|
|
3777
3789
|
type="button"
|
|
@@ -3780,14 +3792,14 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
3780
3792
|
aria-label="Reuse an earlier prompt"
|
|
3781
3793
|
@click=${()=>{this.openPromptHistoryPicker()}}
|
|
3782
3794
|
>⟲</button>
|
|
3783
|
-
`}renderHistoryPanel(){if(!this.historyOpen||this.collapsed)return null;let e=
|
|
3795
|
+
`}renderHistoryPanel(){if(!this.historyOpen||this.collapsed)return null;let e=fO(this.machineId,this.sessionId);return e===void 0?null:h`
|
|
3784
3796
|
<prompt-history-panel
|
|
3785
3797
|
.sessionKey=${e}
|
|
3786
3798
|
.sessionPrompts=${this.sessionPrompts}
|
|
3787
3799
|
.onPick=${e=>{this.restoreHistoryEntry(e)}}
|
|
3788
3800
|
.onClose=${()=>{this.historyOpen=!1}}
|
|
3789
3801
|
></prompt-history-panel>
|
|
3790
|
-
`}restoreHistoryEntry(e){this.historyIndex=void 0,this.historyOpen=!1,this.replaceText(e),this.focusInput()}renderDictateButton(){if(!
|
|
3802
|
+
`}restoreHistoryEntry(e){this.historyIndex=void 0,this.historyOpen=!1,this.replaceText(e),this.focusInput()}renderDictateButton(){if(!fD(this.speechToText))return null;let e=TD(this.speechToText.streaming).kind!==`unavailable`,t=AD(this.voiceState,{streaming:e}),n=kD(this.voiceState);return h`
|
|
3791
3803
|
<button
|
|
3792
3804
|
class=${`editor-dictate icon-button${n?` listening`:``}`}
|
|
3793
3805
|
type="button"
|
|
@@ -3797,8 +3809,8 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
3797
3809
|
aria-pressed=${String(n)}
|
|
3798
3810
|
@click=${()=>{this.toggleDictation()}}
|
|
3799
3811
|
>${n?`■`:`●`}</button>
|
|
3800
|
-
`}async toggleDictation(){this.voice??=new
|
|
3801
|
-
`)?``:` `;this.replaceText(`${t}${n}${e}`)}effectiveAttachmentDelivery(){return LE(`inline`,this.attachments)}createEditor(){!this.editorHost||this.editor!==void 0||this.editorLoading||(this.editorLoading=!0,vy(()=>import(`./composerEditorSetup-DcmFM6jm.js`).then(e=>{if(this.editorLoading=!1,!this.editorHost||this.editor!==void 0||!this.isConnected)return;let t=e.createComposerEditor({parent:this.editorHost,doc:this.draft,disabled:this.disabled,placeholderText:SO(),contentAttributesFor:e=>xO(e),onDocChanged:e=>{this.updateDraft(e)},onKeyUp:e=>this.handleEditorKeyUp(e),onBlur:()=>{this.resetEditorModifierState()},onKeyDown:(e,t)=>this.handleEditorKeyDown(e,t),onArrow:(e,t)=>this.handleEditorArrow(e,t),onEscape:()=>this.closeCompletions(),onTab:e=>this.handleEditorTab(e)});this.cm=e,this.editorControls=t,this.editor=t.view,this.syncEditorDoc(),this.updateEditorDisabledState()}),__vite__mapDeps([7,1,2]),import.meta.url))}syncEditorDoc(){let e=this.editor,t=this.cm;if(!e||t===void 0)return;let n=e.state.doc.toString();n!==this.draft&&e.dispatch({changes:{from:0,to:n.length,insert:this.draft},selection:t.cursorAt(this.draft.length)})}updateEditorDisabledState(){this.editorControls?.setDisabled(this.disabled)}updateDraft(e){this.draft=e;let t=uO(this.machineId,this.sessionId);t!==void 0&&Uu(t,this.draft);let n=Hf(this.draft);Wf(n,this.currentInputMode)||(this.currentInputMode=n),this.refreshCompletions()}async refreshCompletions(){let e=this.currentTrigger(),t=++this.requestVersion;if(this.selectedIndex=0,e===void 0){this.completions=[];return}if(e.kind===`command`&&this.sessionId!==void 0&&this.sessionId!==``&&this.cwd!==void 0&&this.cwd!==``){let n=await fs.commands({id:this.sessionId,cwd:this.cwd},this.machineId).catch(dO);if(t!==this.requestVersion)return;this.completions=n.filter(t=>t.name.toLowerCase().includes(e.query.toLowerCase())).slice(0,12).map(t=>({kind:`command`,replaceFrom:e.from,replaceTo:e.to,insertText:`/${t.name}`,detail:t.source,...t.description===void 0?{}:{description:t.description}}))}else if(e.kind===`file`&&this.projectId!==void 0&&this.workspaceId!==void 0){let n=await fs.files(e.query,{scope:e.fileScope,machineId:this.machineId,projectId:this.projectId,workspaceId:this.workspaceId}).catch(fO);if(t!==this.requestVersion)return;this.completions=n.slice(0,12).map(t=>{let n=Lf(t.path,e.quoted===!0,t.path.endsWith(`/`)?e.allPrefix:void 0);return{kind:`file`,replaceFrom:e.from,replaceTo:e.to,insertText:n,detail:t.kind,...t.path.endsWith(`/`)&&n.endsWith(`"`)?{cursorOffset:n.length-1}:{}}})}else if(e.kind===`model`&&this.sessionId!==void 0&&this.sessionId!==``&&this.cwd!==void 0&&this.cwd!==``){let n=await fs.models({id:this.sessionId,cwd:this.cwd},this.machineId).then(e=>e.models).catch(pO);if(t!==this.requestVersion)return;this.completions=Pf(n,e.query).map(t=>({kind:`model`,replaceFrom:e.from,replaceTo:e.to,...t}))}}currentTrigger(){return Mf(this.draft,this.editor?.state.selection.main.head??this.draft.length)}moveCompletion(e){return this.completions.length?(this.selectedIndex=(this.selectedIndex+e+this.completions.length)%this.completions.length,!0):!1}handleEditorArrow(e,t){return this.completions.length?this.moveCompletion(t===`older`?-1:1):this.browsePromptHistory(e,XE(t))}browsePromptHistory(e,t){let n=uO(this.machineId,this.sessionId);if(n===void 0)return!1;let r=WE(n);if(r.length===0)return!1;let i=e.state.selection.main.head,a=e.state.selection.main.empty,o=e.state.doc.toString();if(this.historyIndex===void 0){if(!(a&&i===o.length&&o.trim()===``))return!1;this.historyDraftBeforeBrowse=o,this.historyIndex=0}else{let e=this.historyIndex+t;if(e<0)return!0;if(e>=r.length)return this.historyIndex=void 0,this.replaceText(this.historyDraftBeforeBrowse),!0;this.historyIndex=e}let s=r[this.historyIndex]??this.historyDraftBeforeBrowse;return this.replaceText(s),!0}closeCompletions(){return this.completions.length?(this.completions=[],!0):!1}handleEditorKeyDown(e,t){if(e.key===`Shift`)return this.explicitShiftKeyActive=!0,!1;if((e.ctrlKey||e.metaKey)&&e.key.toLowerCase()===`r`)return e.preventDefault(),this.openPromptHistoryPicker();if(e.key!==`Enter`)return this.explicitShiftKeyActive=!1,e.key!==`ArrowUp`&&e.key!==`ArrowDown`&&(this.historyIndex=void 0),!1;if(e.defaultPrevented||e.isComposing||t.composing)return!1;let n=iD(e.shiftKey,this.explicitShiftKeyActive,this.mobilePromptEnterMedia);return this.explicitShiftKeyActive=!1,this.handleEditorEnter(t,n)}handleEditorKeyUp(e){return e.key===`Shift`&&(this.explicitShiftKeyActive=!1),!1}resetEditorModifierState(){return this.explicitShiftKeyActive=!1,!1}handleEditorEnter(e,t){if(!t&&this.completions.length){let e=this.completions[this.selectedIndex];return e!==void 0&&this.pick(e),!0}return aD(t,this.mobilePromptEnterMedia,tD())?(this.send(this.canSteer?`steer`:`followUp`),!0):this.cm?.composerNewline(e)??!1}handleEditorTab(e){if(this.completions.length){let e=this.completions[this.selectedIndex];return e!==void 0&&this.pick(e),!0}return this.currentTrigger()?.kind===`file`?(this.refreshCompletions(),!0):this.cm?.composerIndent(e)??!1}pick(e){let t=this.editor;if(!t)return;let n=e.kind===`file`&&(e.insertText.endsWith(`/`)||e.cursorOffset!==void 0)?``:` `,r=e.replaceFrom+(e.cursorOffset??e.insertText.length)+n.length,i=e.insertText.endsWith(`"`)&&this.draft.slice(e.replaceTo).startsWith(`"`)?e.replaceTo+1:e.replaceTo;t.dispatch({changes:{from:e.replaceFrom,to:i,insert:`${e.insertText}${n}`},selection:this.cm===void 0?void 0:this.cm.cursorAt(r),scrollIntoView:!0}),this.completions=[]}openPromptHistoryPicker(){if(this.collapsed)return!1;let e=uO(this.machineId,this.sessionId);return e===void 0||qE(e,``,this.sessionPrompts).length===0?!1:(this.historyOpen=!0,!0)}pendingPromptsForSession(){let e=ul(this.machineId,this.sessionId??``);return e===``?[]:Cf(e)}send(e){if(this.disabled||this.sending)return;if(this.attachingCount>0){this.attachingSettled.then(()=>{this.send(e)});return}let t=this.draft.trim(),n=this.attachments;if(t===``&&n.length===0)return;let r=this.canSteer||this.isCompacting?e:void 0,i=n.length>0?this.currentAttachments():void 0,a=this.effectiveAttachmentDelivery(),o=uO(this.machineId,this.sessionId);o!==void 0&&t!==``&&KE(o,t);let s={text:this.draft,attachments:n};this.resetComposer(),this.deliverAndRestoreOnFailure(t,r,i,a,s)}async deliverAndRestoreOnFailure(e,t,n,r,i){let a,o;try{a=await this.onSend?.(e,t,n,n===void 0?void 0:r)}catch(e){a=!1,o=e}if(a===!1){if(xf(o)){let r=ul(this.machineId,this.sessionId??``);if(r!==``){let i=o instanceof Sf?o.clientMessageId:void 0;wf(r,{text:e,...t===void 0?{}:{behavior:t},...i===void 0?{}:{clientMessageId:i},...n===void 0||n.length===0?{}:{attachments:n},at:new Date().toISOString()}),this.pendingPrompts=Cf(r);return}}(this.editor?.state.doc.toString()??this.draft).trim()===``&&(this.attachments=i.attachments,this.replaceText(i.text))}}resetComposer(){this.draft=``,this.currentInputMode={kind:`normal`};let e=uO(this.machineId,this.sessionId);e!==void 0&&Wu(e),this.completions=[],this.attachments=[],this.attachmentError=void 0,this.syncEditorDoc()}static{this.styles=cO}};H([S({type:Boolean})],J.prototype,`disabled`,void 0),H([S()],J.prototype,`sessionId`,void 0),H([S()],J.prototype,`cwd`,void 0),H([S()],J.prototype,`machineId`,void 0),H([S()],J.prototype,`projectId`,void 0),H([S()],J.prototype,`workspaceId`,void 0),H([S({type:Boolean})],J.prototype,`canSteer`,void 0),H([S({type:Boolean})],J.prototype,`isCompacting`,void 0),H([S({type:Boolean})],J.prototype,`canStop`,void 0),H([S({attribute:!1})],J.prototype,`status`,void 0),H([S({type:Boolean})],J.prototype,`sending`,void 0),H([S({type:Boolean,reflect:!0})],J.prototype,`collapsed`,void 0),H([S({attribute:!1})],J.prototype,`onSend`,void 0),H([S({attribute:!1})],J.prototype,`onStop`,void 0),H([S({attribute:!1})],J.prototype,`onSelectModel`,void 0),H([S({attribute:!1})],J.prototype,`onSelectThinking`,void 0),H([S({attribute:!1})],J.prototype,`onExpand`,void 0),H([S({attribute:!1})],J.prototype,`availableThinkingLevels`,void 0),H([w(`.markdown-editor`)],J.prototype,`editorHost`,void 0),H([w(`.attachment-input`)],J.prototype,`attachmentInput`,void 0),H([w(`dialog.attachment-zoom`)],J.prototype,`attachmentZoomDialog`,void 0),H([C()],J.prototype,`currentInputMode`,void 0),H([C()],J.prototype,`completions`,void 0),H([C()],J.prototype,`selectedIndex`,void 0),H([C()],J.prototype,`historyOpen`,void 0),H([S({attribute:!1})],J.prototype,`speechToText`,void 0),H([S({attribute:!1})],J.prototype,`sessionPrompts`,void 0),H([C()],J.prototype,`voiceState`,void 0),H([C()],J.prototype,`zoomedAttachment`,void 0),H([C()],J.prototype,`attachments`,void 0),H([C()],J.prototype,`attachmentError`,void 0),H([C()],J.prototype,`attachingCount`,void 0),H([C()],J.prototype,`pendingPrompts`,void 0),J=H([x(`prompt-editor`)],J);function lO(e,t){return e===t?!0:e===void 0||t===void 0?!1:e.model?.id===t.model?.id&&e.model?.provider===t.model?.provider&&e.thinkingLevel===t.thinkingLevel}function uO(e,t){if(!(typeof e!=`string`||e===``)&&!(typeof t!=`string`||t===``))return ul(e,t)}function dO(){return[]}function fO(){return[]}function pO(){return[]}function mO(e){return e===null?[]:Array.from(e.files)}function hO(e){let t=Array.from(e.items);return t.length>0?t.some(e=>e.kind===`file`):Array.from(e.types).includes(`Files`)}function gO(e){return e.kind===`image`?{kind:`image`,mimeType:e.mimeType,data:e.data,name:e.name}:{kind:`file`,mimeType:e.mimeType,data:e.data,name:e.name}}function _O(e){let t=e.trim(),n=t.lastIndexOf(`.`);return n>=0&&n<t.length-1?t.slice(n+1,n+5).toUpperCase():`FILE`}function vO(e){return new Promise((t,n)=>{let r=new FileReader;r.onerror=()=>{n(r.error??Error(`Failed to read file`))},r.onload=()=>{let e=r.result;if(typeof e!=`string`){n(Error(`Unexpected file reader result`));return}let i=e.indexOf(`,`);t(i===-1?e:e.slice(i+1))},r.readAsDataURL(e)})}var yO={spellcheck:`true`,autocorrect:`on`,autocapitalize:`sentences`,writingsuggestions:`true`,dir:`auto`},bO={spellcheck:`false`,autocorrect:`off`,autocapitalize:`off`,writingsuggestions:`false`,dir:`auto`};function xO(e){return Hf(e).kind===`normal`?yO:bO}function SO(){let e=document.createElement(`span`);e.className=`composer-placeholder`;let t=document.createElement(`span`);t.className=`composer-placeholder-label`,t.textContent=`Message pi…`;let n=document.createElement(`span`);return n.className=`composer-placeholder-hints`,n.textContent=`/ @ #`,e.append(t,n),e}var CO=o`
|
|
3812
|
+
`}async toggleDictation(){this.voice??=new qD({recorder:uD(),createLiveDictation:(e,t)=>new BD({requestToken:jD,openSocket:e=>new WebSocket(e),captureAudio:UD,onText:e,onError:t,newRequestId:()=>crypto.randomUUID().replaceAll(`-`,``)})},{onState:e=>{this.voiceState=e},onTranscript:e=>{this.insertDictatedText(e)}}),await this.voice.toggle(this.speechToText)}insertDictatedText(e){let t=this.editor?.state.doc.toString()??this.draft,n=t===``||t.endsWith(` `)||t.endsWith(`
|
|
3813
|
+
`)?``:` `;this.replaceText(`${t}${n}${e}`)}effectiveAttachmentDelivery(){return zE(`inline`,this.attachments)}createEditor(){!this.editorHost||this.editor!==void 0||this.editorLoading||(this.editorLoading=!0,by(()=>import(`./composerEditorSetup-DcmFM6jm.js`).then(e=>{if(this.editorLoading=!1,!this.editorHost||this.editor!==void 0||!this.isConnected)return;let t=e.createComposerEditor({parent:this.editorHost,doc:this.draft,disabled:this.disabled,placeholderText:wO(),contentAttributesFor:e=>CO(e),onDocChanged:e=>{this.updateDraft(e)},onKeyUp:e=>this.handleEditorKeyUp(e),onBlur:()=>{this.resetEditorModifierState()},onKeyDown:(e,t)=>this.handleEditorKeyDown(e,t),onArrow:(e,t)=>this.handleEditorArrow(e,t),onEscape:()=>this.closeCompletions(),onTab:e=>this.handleEditorTab(e)});this.cm=e,this.editorControls=t,this.editor=t.view,this.syncEditorDoc(),this.updateEditorDisabledState()}),__vite__mapDeps([7,1,2]),import.meta.url))}syncEditorDoc(){let e=this.editor,t=this.cm;if(!e||t===void 0)return;let n=e.state.doc.toString();n!==this.draft&&e.dispatch({changes:{from:0,to:n.length,insert:this.draft},selection:t.cursorAt(this.draft.length)})}updateEditorDisabledState(){this.editorControls?.setDisabled(this.disabled)}updateDraft(e){this.draft=e;let t=fO(this.machineId,this.sessionId);t!==void 0&&Uu(t,this.draft);let n=Hf(this.draft);Wf(n,this.currentInputMode)||(this.currentInputMode=n),this.refreshCompletions()}async refreshCompletions(){let e=this.currentTrigger(),t=++this.requestVersion;if(this.selectedIndex=0,e===void 0){this.completions=[];return}if(e.kind===`command`&&this.sessionId!==void 0&&this.sessionId!==``&&this.cwd!==void 0&&this.cwd!==``){let n=await fs.commands({id:this.sessionId,cwd:this.cwd},this.machineId).catch(pO);if(t!==this.requestVersion)return;this.completions=n.filter(t=>t.name.toLowerCase().includes(e.query.toLowerCase())).slice(0,12).map(t=>({kind:`command`,replaceFrom:e.from,replaceTo:e.to,insertText:`/${t.name}`,detail:t.source,...t.description===void 0?{}:{description:t.description}}))}else if(e.kind===`file`&&this.projectId!==void 0&&this.workspaceId!==void 0){let n=await fs.files(e.query,{scope:e.fileScope,machineId:this.machineId,projectId:this.projectId,workspaceId:this.workspaceId}).catch(mO);if(t!==this.requestVersion)return;this.completions=n.slice(0,12).map(t=>{let n=Lf(t.path,e.quoted===!0,t.path.endsWith(`/`)?e.allPrefix:void 0);return{kind:`file`,replaceFrom:e.from,replaceTo:e.to,insertText:n,detail:t.kind,...t.path.endsWith(`/`)&&n.endsWith(`"`)?{cursorOffset:n.length-1}:{}}})}else if(e.kind===`model`&&this.sessionId!==void 0&&this.sessionId!==``&&this.cwd!==void 0&&this.cwd!==``){let n=await fs.models({id:this.sessionId,cwd:this.cwd},this.machineId).then(e=>e.models).catch(hO);if(t!==this.requestVersion)return;this.completions=Pf(n,e.query).map(t=>({kind:`model`,replaceFrom:e.from,replaceTo:e.to,...t}))}}currentTrigger(){return Mf(this.draft,this.editor?.state.selection.main.head??this.draft.length)}moveCompletion(e){return this.completions.length?(this.selectedIndex=(this.selectedIndex+e+this.completions.length)%this.completions.length,!0):!1}handleEditorArrow(e,t){return this.completions.length?this.moveCompletion(t===`older`?-1:1):this.browsePromptHistory(e,QE(t))}browsePromptHistory(e,t){let n=fO(this.machineId,this.sessionId);if(n===void 0)return!1;let r=KE(n);if(r.length===0)return!1;let i=e.state.selection.main.head,a=e.state.selection.main.empty,o=e.state.doc.toString();if(this.historyIndex===void 0){if(!(a&&i===o.length&&o.trim()===``))return!1;this.historyDraftBeforeBrowse=o,this.historyIndex=0}else{let e=this.historyIndex+t;if(e<0)return!0;if(e>=r.length)return this.historyIndex=void 0,this.replaceText(this.historyDraftBeforeBrowse),!0;this.historyIndex=e}let s=r[this.historyIndex]??this.historyDraftBeforeBrowse;return this.replaceText(s),!0}closeCompletions(){return this.completions.length?(this.completions=[],!0):!1}handleEditorKeyDown(e,t){if(e.key===`Shift`)return this.explicitShiftKeyActive=!0,!1;if((e.ctrlKey||e.metaKey)&&e.key.toLowerCase()===`r`)return e.preventDefault(),this.openPromptHistoryPicker();if(e.key!==`Enter`)return this.explicitShiftKeyActive=!1,e.key!==`ArrowUp`&&e.key!==`ArrowDown`&&(this.historyIndex=void 0),!1;if(e.defaultPrevented||e.isComposing||t.composing)return!1;let n=oD(e.shiftKey,this.explicitShiftKeyActive,this.mobilePromptEnterMedia);return this.explicitShiftKeyActive=!1,this.handleEditorEnter(t,n)}handleEditorKeyUp(e){return e.key===`Shift`&&(this.explicitShiftKeyActive=!1),!1}resetEditorModifierState(){return this.explicitShiftKeyActive=!1,!1}handleEditorEnter(e,t){if(!t&&this.completions.length){let e=this.completions[this.selectedIndex];return e!==void 0&&this.pick(e),!0}return sD(t,this.mobilePromptEnterMedia,rD())?(this.send(this.canSteer?`steer`:`followUp`),!0):this.cm?.composerNewline(e)??!1}handleEditorTab(e){if(this.completions.length){let e=this.completions[this.selectedIndex];return e!==void 0&&this.pick(e),!0}return this.currentTrigger()?.kind===`file`?(this.refreshCompletions(),!0):this.cm?.composerIndent(e)??!1}pick(e){let t=this.editor;if(!t)return;let n=e.kind===`file`&&(e.insertText.endsWith(`/`)||e.cursorOffset!==void 0)?``:` `,r=e.replaceFrom+(e.cursorOffset??e.insertText.length)+n.length,i=e.insertText.endsWith(`"`)&&this.draft.slice(e.replaceTo).startsWith(`"`)?e.replaceTo+1:e.replaceTo;t.dispatch({changes:{from:e.replaceFrom,to:i,insert:`${e.insertText}${n}`},selection:this.cm===void 0?void 0:this.cm.cursorAt(r),scrollIntoView:!0}),this.completions=[]}openPromptHistoryPicker(){if(this.collapsed)return!1;let e=fO(this.machineId,this.sessionId);return e===void 0||YE(e,``,this.sessionPrompts).length===0?!1:(this.historyOpen=!0,!0)}pendingPromptsForSession(){let e=ul(this.machineId,this.sessionId??``);return e===``?[]:Cf(e)}send(e){if(this.disabled||this.sending)return;if(this.attachingCount>0){this.attachingSettled.then(()=>{this.send(e)});return}let t=this.draft.trim(),n=this.attachments;if(t===``&&n.length===0)return;let r=this.canSteer||this.isCompacting?e:void 0,i=n.length>0?this.currentAttachments():void 0,a=this.effectiveAttachmentDelivery(),o=fO(this.machineId,this.sessionId);o!==void 0&&t!==``&&JE(o,t);let s={text:this.draft,attachments:n};this.resetComposer(),this.deliverAndRestoreOnFailure(t,r,i,a,s)}async deliverAndRestoreOnFailure(e,t,n,r,i){let a,o;try{a=await this.onSend?.(e,t,n,n===void 0?void 0:r)}catch(e){a=!1,o=e}if(a===!1){if(xf(o)){let r=ul(this.machineId,this.sessionId??``);if(r!==``){let i=o instanceof Sf?o.clientMessageId:void 0;wf(r,{text:e,...t===void 0?{}:{behavior:t},...i===void 0?{}:{clientMessageId:i},...n===void 0||n.length===0?{}:{attachments:n},at:new Date().toISOString()}),this.pendingPrompts=Cf(r);return}}(this.editor?.state.doc.toString()??this.draft).trim()===``&&(this.attachments=i.attachments,this.replaceText(i.text))}}resetComposer(){this.draft=``,this.currentInputMode={kind:`normal`};let e=fO(this.machineId,this.sessionId);e!==void 0&&Wu(e),this.completions=[],this.attachments=[],this.attachmentError=void 0,this.syncEditorDoc()}static{this.styles=uO}};H([S({type:Boolean})],J.prototype,`disabled`,void 0),H([S()],J.prototype,`sessionId`,void 0),H([S()],J.prototype,`cwd`,void 0),H([S()],J.prototype,`machineId`,void 0),H([S()],J.prototype,`projectId`,void 0),H([S()],J.prototype,`workspaceId`,void 0),H([S({type:Boolean})],J.prototype,`canSteer`,void 0),H([S({type:Boolean})],J.prototype,`isCompacting`,void 0),H([S({type:Boolean})],J.prototype,`canStop`,void 0),H([S({attribute:!1})],J.prototype,`status`,void 0),H([S({type:Boolean})],J.prototype,`sending`,void 0),H([S({type:Boolean,reflect:!0})],J.prototype,`collapsed`,void 0),H([S({attribute:!1})],J.prototype,`onSend`,void 0),H([S({attribute:!1})],J.prototype,`onStop`,void 0),H([S({attribute:!1})],J.prototype,`onSelectModel`,void 0),H([S({attribute:!1})],J.prototype,`onSelectThinking`,void 0),H([S({attribute:!1})],J.prototype,`onExpand`,void 0),H([S({attribute:!1})],J.prototype,`availableThinkingLevels`,void 0),H([w(`.markdown-editor`)],J.prototype,`editorHost`,void 0),H([w(`.attachment-input`)],J.prototype,`attachmentInput`,void 0),H([w(`dialog.attachment-zoom`)],J.prototype,`attachmentZoomDialog`,void 0),H([C()],J.prototype,`currentInputMode`,void 0),H([C()],J.prototype,`completions`,void 0),H([C()],J.prototype,`selectedIndex`,void 0),H([C()],J.prototype,`historyOpen`,void 0),H([S({attribute:!1})],J.prototype,`speechToText`,void 0),H([S({attribute:!1})],J.prototype,`sessionPrompts`,void 0),H([C()],J.prototype,`voiceState`,void 0),H([C()],J.prototype,`zoomedAttachment`,void 0),H([C()],J.prototype,`attachments`,void 0),H([C()],J.prototype,`attachmentError`,void 0),H([C()],J.prototype,`attachingCount`,void 0),H([C()],J.prototype,`pendingPrompts`,void 0),J=H([x(`prompt-editor`)],J);function dO(e,t){return e===t?!0:e===void 0||t===void 0?!1:e.model?.id===t.model?.id&&e.model?.provider===t.model?.provider&&e.thinkingLevel===t.thinkingLevel}function fO(e,t){if(!(typeof e!=`string`||e===``)&&!(typeof t!=`string`||t===``))return ul(e,t)}function pO(){return[]}function mO(){return[]}function hO(){return[]}function gO(e){return e===null?[]:Array.from(e.files)}function _O(e){let t=Array.from(e.items);return t.length>0?t.some(e=>e.kind===`file`):Array.from(e.types).includes(`Files`)}function vO(e){return e.kind===`image`?{kind:`image`,mimeType:e.mimeType,data:e.data,name:e.name}:{kind:`file`,mimeType:e.mimeType,data:e.data,name:e.name}}function yO(e){let t=e.trim(),n=t.lastIndexOf(`.`);return n>=0&&n<t.length-1?t.slice(n+1,n+5).toUpperCase():`FILE`}function bO(e){return new Promise((t,n)=>{let r=new FileReader;r.onerror=()=>{n(r.error??Error(`Failed to read file`))},r.onload=()=>{let e=r.result;if(typeof e!=`string`){n(Error(`Unexpected file reader result`));return}let i=e.indexOf(`,`);t(i===-1?e:e.slice(i+1))},r.readAsDataURL(e)})}var xO={spellcheck:`true`,autocorrect:`on`,autocapitalize:`sentences`,writingsuggestions:`true`,dir:`auto`},SO={spellcheck:`false`,autocorrect:`off`,autocapitalize:`off`,writingsuggestions:`false`,dir:`auto`};function CO(e){return Hf(e).kind===`normal`?xO:SO}function wO(){let e=document.createElement(`span`);e.className=`composer-placeholder`;let t=document.createElement(`span`);t.className=`composer-placeholder-label`,t.textContent=`Message pi…`;let n=document.createElement(`span`);return n.className=`composer-placeholder-hints`,n.textContent=`/ @ #`,e.append(t,n),e}var TO=o`
|
|
3802
3814
|
:host { display: block; color: var(--pi-muted); font: var(--pi-text-xs) var(--pi-font-ui); }
|
|
3803
3815
|
.bar { display: flex; justify-content: flex-end; gap: var(--pi-space-6); align-items: center; min-width: 0; padding: var(--pi-space-4) var(--pi-space-6); border-top: 1px solid var(--pi-border); background: var(--pi-bg); white-space: nowrap; overflow: hidden; }
|
|
3804
3816
|
span { flex: 0 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; }
|
|
@@ -3808,7 +3820,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
3808
3820
|
.activity.active .dot { animation: pulse 1s ease-in-out infinite; opacity: 1; }
|
|
3809
3821
|
.muted { color: var(--pi-dim); }
|
|
3810
3822
|
@keyframes pulse { 0%, 100% { transform: scale(.75); opacity: .55; } 50% { transform: scale(1.2); opacity: 1; } }
|
|
3811
|
-
`,
|
|
3823
|
+
`,EO=class extends _{render(){let e=this.status;if(e===void 0)return h`<div class="bar muted">No session status yet</div>`;let t=e.contextUsage,n=t?t.percent==null?`context ${Pg(t.contextWindow)}`:`${t.percent.toFixed(1)}%/${Pg(t.contextWindow)}`:`context unknown`,r=e.tokens;return h`
|
|
3812
3824
|
<div class="bar">
|
|
3813
3825
|
<span>↑${Pg(r.input)}</span>
|
|
3814
3826
|
<span>↓${Pg(r.output)}</span>
|
|
@@ -3816,7 +3828,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
3816
3828
|
<span>${Lg(e.cost)}</span>
|
|
3817
3829
|
${e.pendingMessageCount>0?h`<span>${String(e.pendingMessageCount)} queued</span>`:null}
|
|
3818
3830
|
</div>
|
|
3819
|
-
`}static{this.styles=
|
|
3831
|
+
`}static{this.styles=TO}};H([S({attribute:!1})],EO.prototype,`status`,void 0),EO=H([x(`status-bar`)],EO);var DO=class extends _{constructor(...e){super(...e),this.title=`Select`,this.searchable=!1,this.options=[],this.selectedIndex=0,this.query=``}render(){let e=this.filteredOptions();return h`
|
|
3820
3832
|
<modal-surface
|
|
3821
3833
|
.onClose=${()=>this.onCancel?.()}
|
|
3822
3834
|
.initialFocus=${this.searchable?`input`:`.options`}
|
|
@@ -3833,7 +3845,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
3833
3845
|
<button
|
|
3834
3846
|
class=${t===this.selectedIndex?`selected`:``}
|
|
3835
3847
|
aria-current=${t===this.selectedIndex?`true`:g}
|
|
3836
|
-
${
|
|
3848
|
+
${aO(t===this.selectedIndex,e.value)}
|
|
3837
3849
|
@focus=${()=>{this.selectedIndex=t}}
|
|
3838
3850
|
@click=${()=>this.onPick?.(e.value)}
|
|
3839
3851
|
>
|
|
@@ -3844,7 +3856,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
3844
3856
|
${e.length===0?h`<div class="empty">No matching options</div>`:null}
|
|
3845
3857
|
</div>
|
|
3846
3858
|
</modal-surface>
|
|
3847
|
-
`}firstUpdated(){this.selectInitialValue()}selectInitialValue(){if(this.selectedValue===void 0)return;let e=this.filteredOptions().findIndex(e=>e.value===this.selectedValue);e>=0&&(this.selectedIndex=e)}handleSearchInput(e){e.target instanceof HTMLInputElement&&(this.query=e.target.value,this.selectedIndex=0)}filteredOptions(){return Of(this.options,this.query,e=>`${e.label} ${e.description??``} ${e.value}`)}handleKeyDown(e){if(
|
|
3859
|
+
`}firstUpdated(){this.selectInitialValue()}selectInitialValue(){if(this.selectedValue===void 0)return;let e=this.filteredOptions().findIndex(e=>e.value===this.selectedValue);e>=0&&(this.selectedIndex=e)}handleSearchInput(e){e.target instanceof HTMLInputElement&&(this.query=e.target.value,this.selectedIndex=0)}filteredOptions(){return Of(this.options,this.query,e=>`${e.label} ${e.description??``} ${e.value}`)}handleKeyDown(e){if(cO(e))return;let t=this.filteredOptions();if(e.key===`ArrowDown`)e.preventDefault(),t.length>0&&(this.selectedIndex=(this.selectedIndex+1)%t.length);else if(e.key===`ArrowUp`)e.preventDefault(),t.length>0&&(this.selectedIndex=(this.selectedIndex-1+t.length)%t.length);else if(e.key===`Enter`){e.preventDefault();let n=t[this.selectedIndex];n&&this.onPick?.(n.value)}}static{this.styles=o`
|
|
3848
3860
|
:host { position: fixed; inset: 0; z-index: var(--pi-layer-popover); color: var(--pi-text); font: 14px system-ui, sans-serif; }
|
|
3849
3861
|
modal-surface { --modal-surface-width: min(720px, calc(100vw - 40px)); --modal-surface-max-height: min(640px, calc(100vh - 40px)); }
|
|
3850
3862
|
header { display: flex; align-items: center; justify-content: space-between; padding: 12px; border-bottom: 1px solid var(--pi-border); }
|
|
@@ -3861,7 +3873,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
3861
3873
|
@media (hover: hover) { .options button:hover { background: var(--pi-selection-bg); } }
|
|
3862
3874
|
small { display: block; margin-top: 4px; color: var(--pi-muted); }
|
|
3863
3875
|
.empty { padding: 24px; color: var(--pi-muted); text-align: center; }
|
|
3864
|
-
`}};H([S()],
|
|
3876
|
+
`}};H([S()],DO.prototype,`title`,void 0),H([S({type:Boolean})],DO.prototype,`searchable`,void 0),H([S({attribute:!1})],DO.prototype,`options`,void 0),H([S({attribute:!1})],DO.prototype,`selectedValue`,void 0),H([S({attribute:!1})],DO.prototype,`onPick`,void 0),H([S({attribute:!1})],DO.prototype,`onCancel`,void 0),H([C()],DO.prototype,`selectedIndex`,void 0),H([C()],DO.prototype,`query`,void 0),DO=H([x(`command-picker`)],DO);function OO(e,t){let n=e.toLowerCase();return t.split(/\s+/).every(e=>n.includes(e))}function kO(e){return e.trim().toLowerCase()}function AO(e){return`${e.provider}/${e.id}`}function jO(e,t){let n=kO(t);return n===``?[...e]:e.filter(e=>OO(`${e.label} ${e.description??``} ${e.value}`,n))}function MO(e,t){let n=kO(t),r=n===``?[...e]:e.filter(e=>OO(`${e.provider} ${e.id} ${e.name??``}`,n));return{rows:r,showGroupHeaders:n===``&&r.some(e=>e.enabled)&&r.some(e=>!e.enabled)}}var NO=class extends _{constructor(...e){super(...e),this.title=`Select model`,this.options=[],this.catalog=[],this.mode=`enabled`,this.selectedIndex=0,this.query=``,this.pendingToggles=new Set}render(){let e=this.visibleRows();return h`
|
|
3865
3877
|
<modal-surface
|
|
3866
3878
|
.onClose=${()=>this.onCancel?.()}
|
|
3867
3879
|
.initialFocus=${`input.search`}
|
|
@@ -3882,19 +3894,19 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
3882
3894
|
${e.length===0?h`<div class="empty">No matching options</div>`:null}
|
|
3883
3895
|
</div>
|
|
3884
3896
|
</modal-surface>
|
|
3885
|
-
`}firstUpdated(){this.anchorSelectionToSelectedValue()}willUpdate(e){if(!e.has(`catalog`)||this.mode!==`all`)return;let t=e.get(`catalog`);if(t===void 0)return;let n=
|
|
3897
|
+
`}firstUpdated(){this.anchorSelectionToSelectedValue()}willUpdate(e){if(!e.has(`catalog`)||this.mode!==`all`)return;let t=e.get(`catalog`);if(t===void 0)return;let n=MO(t,this.query).rows[this.selectedIndex],r=MO(this.catalog,this.query).rows,i=n===void 0?void 0:AO(n),a=i===void 0?-1:r.findIndex(e=>AO(e)===i);this.selectedIndex=a>=0?a:Math.min(this.selectedIndex,Math.max(r.length-1,0))}renderScopeToggleButton(e,t){return h`<button aria-pressed=${this.mode===e?`true`:`false`} @click=${()=>{this.selectMode(e)}}>${t}</button>`}renderEnabledList(){return jO(this.options,this.query).map((e,t)=>h`
|
|
3886
3898
|
<button
|
|
3887
3899
|
class=${t===this.selectedIndex?`selected`:``}
|
|
3888
3900
|
aria-current=${t===this.selectedIndex?`true`:g}
|
|
3889
|
-
${
|
|
3901
|
+
${aO(t===this.selectedIndex,e.value)}
|
|
3890
3902
|
@focus=${()=>{this.selectedIndex=t}}
|
|
3891
3903
|
@click=${()=>this.onPick?.(e.value)}
|
|
3892
3904
|
>
|
|
3893
3905
|
<span>${e.label}</span>
|
|
3894
3906
|
${e.description!==void 0&&e.description!==``?h`<small>${e.description}</small>`:null}
|
|
3895
3907
|
</button>
|
|
3896
|
-
`)}renderCatalogList(){let e=
|
|
3897
|
-
<div class="catalog-row ${r?`selected`:``}" ${
|
|
3908
|
+
`)}renderCatalogList(){let e=MO(this.catalog,this.query),t=[],n;return e.rows.forEach((r,i)=>{e.showGroupHeaders&&r.enabled!==n&&t.push(h`<div class="group-header">${r.enabled?`Enabled`:`Other models`}</div>`),n=r.enabled,t.push(this.renderCatalogRow(r,i))}),t}renderCatalogRow(e,t){let n=AO(e),r=t===this.selectedIndex,i=this.pendingToggles.has(n);return h`
|
|
3909
|
+
<div class="catalog-row ${r?`selected`:``}" ${aO(r,n)}>
|
|
3898
3910
|
<input
|
|
3899
3911
|
type="checkbox"
|
|
3900
3912
|
.checked=${e.enabled}
|
|
@@ -3912,7 +3924,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
3912
3924
|
<small>${e.provider}</small>
|
|
3913
3925
|
</button>
|
|
3914
3926
|
</div>
|
|
3915
|
-
`}visibleRows(){return this.mode===`all`?
|
|
3927
|
+
`}visibleRows(){return this.mode===`all`?MO(this.catalog,this.query).rows.map(e=>({value:AO(e),entry:e})):jO(this.options,this.query).map(e=>({value:e.value}))}anchorSelectionToSelectedValue(){if(this.selectedValue===void 0){this.selectedIndex=0;return}let e=this.visibleRows().findIndex(e=>e.value===this.selectedValue);this.selectedIndex=e>=0?e:0}selectMode(e){e!==this.mode&&(this.mode=e,this.anchorSelectionToSelectedValue())}handleSearchInput(e){e.target instanceof HTMLInputElement&&(this.query=e.target.value,this.selectedIndex=0)}handleKeyDown(e){if(cO(e))return;let t=this.visibleRows();if(e.key===`ArrowDown`)e.preventDefault(),t.length>0&&(this.selectedIndex=(this.selectedIndex+1)%t.length);else if(e.key===`ArrowUp`)e.preventDefault(),t.length>0&&(this.selectedIndex=(this.selectedIndex-1+t.length)%t.length);else if(e.key===`Enter`){e.preventDefault();let n=t[this.selectedIndex];n!==void 0&&this.onPick?.(n.value)}else if(e.key===` `&&this.mode===`all`){if(e.composedPath().some(e=>e instanceof HTMLInputElement))return;let n=t[this.selectedIndex];if(n?.entry===void 0)return;e.preventDefault(),this.requestEnabledToggle(n.entry)}}handleEnableToggleClick(e,t){t.preventDefault(),t.currentTarget instanceof HTMLInputElement&&(t.currentTarget.checked=e.enabled),this.requestEnabledToggle(e)}requestEnabledToggle(e){let t=AO(e);if(this.pendingToggles.has(t))return;let n=new Set(this.pendingToggles);n.add(t),this.pendingToggles=n,this.settleEnabledToggle(t,e)}async settleEnabledToggle(e,t){try{await this.onToggleEnabled?.(t.provider,t.id,!t.enabled)}catch(t){console.warn(`Failed to toggle model ${e}`,t)}finally{let t=new Set(this.pendingToggles);t.delete(e),this.pendingToggles=t}}static{this.styles=o`
|
|
3916
3928
|
:host { position: fixed; inset: 0; z-index: var(--pi-layer-popover); color: var(--pi-text); font: 14px system-ui, sans-serif; }
|
|
3917
3929
|
modal-surface { --modal-surface-width: min(720px, calc(100vw - 40px)); --modal-surface-max-height: min(640px, calc(100vh - 40px)); }
|
|
3918
3930
|
header { display: flex; align-items: center; justify-content: space-between; padding: 12px; border-bottom: 1px solid var(--pi-border); }
|
|
@@ -3935,7 +3947,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
3935
3947
|
.group-header { padding: 8px 12px 4px; color: var(--pi-muted); font-size: 12px; text-transform: uppercase; letter-spacing: 0.04em; }
|
|
3936
3948
|
small { display: block; margin-top: 4px; color: var(--pi-muted); }
|
|
3937
3949
|
.empty { padding: 24px; color: var(--pi-muted); text-align: center; }
|
|
3938
|
-
`}};H([S()],
|
|
3950
|
+
`}};H([S()],NO.prototype,`title`,void 0),H([S({attribute:!1})],NO.prototype,`options`,void 0),H([S({attribute:!1})],NO.prototype,`catalog`,void 0),H([S({attribute:!1})],NO.prototype,`selectedValue`,void 0),H([S({attribute:!1})],NO.prototype,`onPick`,void 0),H([S({attribute:!1})],NO.prototype,`onCancel`,void 0),H([S({attribute:!1})],NO.prototype,`onToggleEnabled`,void 0),H([C()],NO.prototype,`mode`,void 0),H([C()],NO.prototype,`selectedIndex`,void 0),H([C()],NO.prototype,`query`,void 0),H([C()],NO.prototype,`pendingToggles`,void 0),NO=H([x(`model-picker`)],NO);var PO=class extends _{constructor(...e){super(...e),this.actions=[],this.queryText=``,this.selectedIndex=0}render(){let e=this.filteredActions();return h`
|
|
3939
3951
|
<modal-surface
|
|
3940
3952
|
.onClose=${()=>this.onCancel?.()}
|
|
3941
3953
|
.initialFocus=${`input`}
|
|
@@ -3957,7 +3969,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
3957
3969
|
?disabled=${e.enabled===!1}
|
|
3958
3970
|
title=${e.disabledReason??e.title}
|
|
3959
3971
|
aria-current=${t===this.selectedIndex?`true`:g}
|
|
3960
|
-
${
|
|
3972
|
+
${aO(t===this.selectedIndex,e.id)}
|
|
3961
3973
|
@focus=${()=>{this.selectedIndex=t}}
|
|
3962
3974
|
@click=${()=>{this.run(e)}}
|
|
3963
3975
|
>
|
|
@@ -3972,7 +3984,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
3972
3984
|
`)}
|
|
3973
3985
|
</div>
|
|
3974
3986
|
</modal-surface>
|
|
3975
|
-
`}updated(e){if(!e.has(`actions`)&&!e.has(`queryText`))return;let t=Math.max(0,this.filteredActions().length-1);this.selectedIndex>t&&(this.selectedIndex=t)}filteredActions(){return
|
|
3987
|
+
`}updated(e){if(!e.has(`actions`)&&!e.has(`queryText`))return;let t=Math.max(0,this.filteredActions().length-1);this.selectedIndex>t&&(this.selectedIndex=t)}filteredActions(){return LO(this.actions,this.queryText)}handleKeyDown(e){if(cO(e))return;let t=this.filteredActions();if(e.key===`ArrowDown`)e.preventDefault(),t.length>0&&(this.selectedIndex=(this.selectedIndex+1)%t.length);else if(e.key===`ArrowUp`)e.preventDefault(),t.length>0&&(this.selectedIndex=(this.selectedIndex-1+t.length)%t.length);else if(e.key===`Enter`){e.preventDefault();let n=t[this.selectedIndex];n!==void 0&&this.run(n)}}run(e){e.enabled!==!1&&this.onRun?.(e)}static{this.styles=o`
|
|
3976
3988
|
:host { position: fixed; inset: 0; z-index: var(--pi-layer-overlay); color: var(--pi-text); font: 14px system-ui, sans-serif; }
|
|
3977
3989
|
modal-surface { --palette-top: min(12dvh, 90px); --palette-bottom: max(20px, env(safe-area-inset-bottom)); --modal-surface-place-items: start center; --modal-surface-backdrop-padding: var(--palette-top) 20px var(--palette-bottom); --modal-surface-max-height: min(640px, calc(100dvh - var(--palette-top) - var(--palette-bottom))); }
|
|
3978
3990
|
header { display: grid; grid-template-columns: 1fr auto; gap: 8px; padding: 10px; border-bottom: 1px solid var(--pi-border); }
|
|
@@ -4002,7 +4014,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
4002
4014
|
kbd { display: none; }
|
|
4003
4015
|
.options button { grid-template-columns: minmax(0, 1fr); }
|
|
4004
4016
|
}
|
|
4005
|
-
`}};H([S({attribute:!1})],
|
|
4017
|
+
`}};H([S({attribute:!1})],PO.prototype,`actions`,void 0),H([S({attribute:!1})],PO.prototype,`onRun`,void 0),H([S({attribute:!1})],PO.prototype,`onCancel`,void 0),H([C()],PO.prototype,`queryText`,void 0),H([C()],PO.prototype,`selectedIndex`,void 0),PO=H([x(`action-palette`)],PO);var FO=`actions.show`;function IO(e){return e.id===FO||e.id.endsWith(`:${FO}`)}function LO(e,t){let n=kO(t);return e.filter(e=>!IO(e)).filter(e=>e.enabled!==!1||e.disabledReason!==void 0).filter(e=>n===``||OO([e.title,e.description??``,e.disabledReason??``,e.group??``,e.shortcut??``].join(` `),n))}var RO=[`error`,`waiting`,`interrupted`,`active`,`unread`,`pinned`,`today`,`yesterday`,`earlier`],zO={error:`Needs attention`,waiting:`Waiting for you`,interrupted:`Interrupted`,active:`Working`,unread:`Finished`,pinned:`Pinned`,today:`Today`,yesterday:`Yesterday`,earlier:`Earlier`},BO=1440*60*1e3,VO=new Set;function HO(e){let t=e.sessions.filter(e=>e.archived!==!0).filter(t=>LS(t,e.query)),n=new Map;for(let r of t){let t=UO(r,{active:e.activeSessionIds,error:e.errorSessionIds??VO,waiting:e.waitingSessionIds??VO,unread:e.unreadSessionIds??VO,interrupted:e.interruptedSessionIds??VO,pinned:e.pinnedSessionIds??VO},e.now),i=n.get(t)??[];i.push(r),n.set(t,i)}let r=[];for(let e of RO){let t=n.get(e);t===void 0||t.length===0||r.push({id:e,title:zO[e],sessions:t.sort(WO)})}return{groups:r,matchCount:t.length}}function UO(e,t,n){if(t.error.has(e.id))return`error`;if(t.waiting.has(e.id))return`waiting`;if(t.interrupted.has(e.id)&&!t.active.has(e.id))return`interrupted`;if(t.active.has(e.id))return`active`;if(t.unread.has(e.id))return`unread`;if(t.pinned.has(e.id))return`pinned`;let r=Date.parse(e.modified);if(Number.isNaN(r))return`earlier`;let i=n-r;return i<BO?`today`:i<2*BO?`yesterday`:`earlier`}function WO(e,t){return GO(t.modified)-GO(e.modified)}function GO(e){let t=Date.parse(e);return Number.isNaN(t)?0:t}function KO(e,t,n){let r=new Set(n.filter(e=>e.projectId===t.projectId).map(e=>e.path)),i=t.projectId===void 0||r.size===0?void 0:r;return e.filter(e=>!(t.workspacePath!==void 0&&e.cwd!==t.workspacePath||i!==void 0&&!i.has(e.cwd)))}function qO(e){return e.machineId!==void 0||e.projectId!==void 0||e.workspacePath!==void 0}function JO(e,t){let n=t.trim().toLowerCase().split(/\s+/u).filter(Boolean);return n.length===0?[...e]:e.filter(e=>{let t=`${e.label}\n${e.path}`.toLowerCase();return n.every(e=>t.includes(e))})}function YO(e,t){let n=t.find(t=>t.path===e.cwd),r=`${String(e.messageCount)} ${e.messageCount===1?`message`:`messages`}`;return n===void 0?r:`${n.label} · ${r}`}function XO(e,t,n){return e.some(e=>e.id===t)?e.map(e=>e.id===t?{...e,name:n}:e):e}function ZO(e,t,n){let r=new Map;for(let i of e){let e=Oh(t[i.id],n[i.id]);e!==void 0&&r.set(i.id,e)}return r}function QO(e){return e}var Y=class extends _{constructor(...e){super(...e),this.loading=!1,this.sessions=[],this.workspaces=[],this.activeSessionIds=new Set,this.waitingSessionIds=new Set,this.unreadSessionIds=new Set,this.interruptedSessionIds=new Set,this.errorSessionIds=new Set,this.pinnedSessionIds=new Set,this.projects=[],this.sessionStates=new Map,this.canStartSession=!1,this.query=``,this.filter={},this.renameDraft=``,this.longPress=new Px({onLongPress:()=>{this.openMenuSessionId=this.heldSession?.id},setTimer:(e,t)=>window.setTimeout(e,t),clearTimer:e=>{window.clearTimeout(e)}})}render(){let e=this.model(),t=JO(this.workspaces,this.query).filter(e=>e.id!==this.selectedWorkspace?.id);return h`
|
|
4006
4018
|
<modal-surface
|
|
4007
4019
|
.onClose=${()=>this.onClose?.()}
|
|
4008
4020
|
.initialFocus=${Lt({touchPrimary:Rt()})}
|
|
@@ -4065,7 +4077,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
4065
4077
|
<button
|
|
4066
4078
|
class=${`row session-row ${t?`selected`:``} ${n?`unread`:``}`}
|
|
4067
4079
|
aria-current=${t?`true`:g}
|
|
4068
|
-
${
|
|
4080
|
+
${aO(t,e.id)}
|
|
4069
4081
|
@click=${()=>{this.openSession(e)}}
|
|
4070
4082
|
@contextmenu=${t=>{t.preventDefault(),this.openMenuSessionId=e.id}}
|
|
4071
4083
|
@pointerdown=${t=>{this.heldSession=e,this.longPress.start(t)}}
|
|
@@ -4073,16 +4085,16 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
4073
4085
|
@pointerup=${()=>{this.longPress.cancel()}}
|
|
4074
4086
|
@pointercancel=${()=>{this.longPress.cancel()}}
|
|
4075
4087
|
>
|
|
4076
|
-
<span class="row-title" dir="auto">${r?h`<span class="pin-mark" title="Pinned" aria-label="Pinned">${`⚑`}</span> `:g}${
|
|
4077
|
-
<span class="row-subtitle">${
|
|
4078
|
-
<span class="row-state">${
|
|
4088
|
+
<span class="row-title" dir="auto">${r?h`<span class="pin-mark" title="Pinned" aria-label="Pinned">${`⚑`}</span> `:g}${jS(e)}</span>
|
|
4089
|
+
<span class="row-subtitle">${YO(e,this.workspaces)}</span>
|
|
4090
|
+
<span class="row-state">${Xx(o,n&&o===void 0?`Unread activity`:void 0)}</span>
|
|
4079
4091
|
${a?h`<span class="row-flag interrupted" title="A restart interrupted this run" aria-label="A restart interrupted this run"></span>`:null}
|
|
4080
4092
|
${o===void 0&&!a&&n?h`<span class="row-flag unread" title="Unread activity" aria-label="Unread activity"></span>`:null}
|
|
4081
4093
|
</button>
|
|
4082
4094
|
<button
|
|
4083
4095
|
class="row-menu-toggle"
|
|
4084
4096
|
title="Session actions"
|
|
4085
|
-
aria-label=${`Actions for ${
|
|
4097
|
+
aria-label=${`Actions for ${jS(e)}`}
|
|
4086
4098
|
aria-haspopup="menu"
|
|
4087
4099
|
aria-expanded=${this.openMenuSessionId===e.id?`true`:`false`}
|
|
4088
4100
|
@click=${()=>{this.openMenuSessionId=this.openMenuSessionId===e.id?void 0:e.id}}
|
|
@@ -4099,7 +4111,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
4099
4111
|
<form class="row rename-row" @submit=${t=>{t.preventDefault(),this.confirmRename(e)}}>
|
|
4100
4112
|
<input
|
|
4101
4113
|
class="rename-input"
|
|
4102
|
-
aria-label=${`Rename ${
|
|
4114
|
+
aria-label=${`Rename ${jS(e)}`}
|
|
4103
4115
|
.value=${this.renameDraft}
|
|
4104
4116
|
@input=${e=>{e.target instanceof HTMLInputElement&&(this.renameDraft=e.target.value)}}
|
|
4105
4117
|
@keydown=${e=>{e.key===`Escape`&&(e.stopPropagation(),this.renamingSessionId=void 0)}}
|
|
@@ -4109,7 +4121,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
4109
4121
|
<button type="button" title="Cancel rename" aria-label="Cancel rename" @click=${()=>{this.renamingSessionId=void 0}}>${`×`}</button>
|
|
4110
4122
|
</div>
|
|
4111
4123
|
</form>
|
|
4112
|
-
`}togglePin(e){this.openMenuSessionId=void 0,this.onTogglePin?.(e)}startRename(e){this.openMenuSessionId=void 0,this.renameDraft=
|
|
4124
|
+
`}togglePin(e){this.openMenuSessionId=void 0,this.onTogglePin?.(e)}startRename(e){this.openMenuSessionId=void 0,this.renameDraft=jS(e),this.renamingSessionId=e.id}async confirmRename(e){let t=this.renameDraft.trim();this.renamingSessionId=void 0,!(t===``||t===jS(e))&&await this.onRenameSession?.(e,t)}handleKeyDown(e){if(e.key!==`Enter`||cO(e))return;let t=this.model().groups[0]?.sessions[0];t!==void 0&&(e.preventDefault(),this.openSession(t))}model(){return HO({sessions:KO(this.sessions,this.filter,this.workspaces),activeSessionIds:this.activeSessionIds,errorSessionIds:this.errorSessionIds,waitingSessionIds:this.waitingSessionIds,unreadSessionIds:this.unreadSessionIds,interruptedSessionIds:this.interruptedSessionIds,pinnedSessionIds:this.pinnedSessionIds,query:this.query,now:Date.now()})}renderFilters(){let e=QO(this.projects);if(e.length===0&&this.workspaces.length<2)return g;let t=qO(this.filter);return h`
|
|
4113
4125
|
<div class="filters" role="group" aria-label="Filter sessions by context">
|
|
4114
4126
|
<button
|
|
4115
4127
|
type="button"
|
|
@@ -4135,7 +4147,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
4135
4147
|
>${e.label}</button>
|
|
4136
4148
|
`)}
|
|
4137
4149
|
</div>
|
|
4138
|
-
`}filterWorkspaces(e){if(this.filter.projectId!==void 0){let e=this.workspaces.filter(e=>e.projectId===this.filter.projectId);return e.length>1?e:[]}return e.length===0?this.workspaces:[]}toggleFilter(e){let t=e.projectId!==void 0&&e.projectId===this.filter.projectId||e.workspacePath!==void 0&&e.workspacePath===this.filter.workspacePath;this.filter=t?{}:e}onQueryInput(e){e.target instanceof HTMLInputElement&&(this.query=e.target.value)}createSession(){this.canStartSession&&(this.onCreateSession?.(),this.onClose?.())}openSession(e){this.onOpenSession?.(e),this.onClose?.()}selectWorkspace(e){this.onSelectWorkspace?.(e),this.query=``}browse(){this.onBrowse?.(),this.onClose?.()}static{this.styles=[
|
|
4150
|
+
`}filterWorkspaces(e){if(this.filter.projectId!==void 0){let e=this.workspaces.filter(e=>e.projectId===this.filter.projectId);return e.length>1?e:[]}return e.length===0?this.workspaces:[]}toggleFilter(e){let t=e.projectId!==void 0&&e.projectId===this.filter.projectId||e.workspacePath!==void 0&&e.workspacePath===this.filter.workspacePath;this.filter=t?{}:e}onQueryInput(e){e.target instanceof HTMLInputElement&&(this.query=e.target.value)}createSession(){this.canStartSession&&(this.onCreateSession?.(),this.onClose?.())}openSession(e){this.onOpenSession?.(e),this.onClose?.()}selectWorkspace(e){this.onSelectWorkspace?.(e),this.query=``}browse(){this.onBrowse?.(),this.onClose?.()}static{this.styles=[KS,o`
|
|
4139
4151
|
:host { position: fixed; inset: 0; z-index: var(--pi-layer-overlay); color: var(--pi-text); font: var(--pi-text-base) var(--pi-font-ui); }
|
|
4140
4152
|
modal-surface {
|
|
4141
4153
|
--modal-surface-place-items: end center;
|
|
@@ -4222,7 +4234,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
4222
4234
|
.empty { margin: var(--pi-space-7) var(--pi-space-2); color: var(--pi-muted); }
|
|
4223
4235
|
footer { flex: 0 0 auto; padding: var(--pi-space-5); padding-bottom: max(10px, env(safe-area-inset-bottom)); border-top: 1px solid var(--pi-border); }
|
|
4224
4236
|
footer button { width: 100%; min-height: 44px; border: 1px solid var(--pi-border); border-radius: var(--pi-radius-lg); background: var(--pi-surface); color: var(--pi-text); cursor: pointer; }
|
|
4225
|
-
`]}};H([S({type:Boolean})],Y.prototype,`loading`,void 0),H([S({attribute:!1})],Y.prototype,`sessions`,void 0),H([S({attribute:!1})],Y.prototype,`workspaces`,void 0),H([S({attribute:!1})],Y.prototype,`selectedSession`,void 0),H([S({attribute:!1})],Y.prototype,`selectedWorkspace`,void 0),H([S({attribute:!1})],Y.prototype,`activeSessionIds`,void 0),H([S({attribute:!1})],Y.prototype,`waitingSessionIds`,void 0),H([S({attribute:!1})],Y.prototype,`unreadSessionIds`,void 0),H([S({attribute:!1})],Y.prototype,`interruptedSessionIds`,void 0),H([S({attribute:!1})],Y.prototype,`errorSessionIds`,void 0),H([S({attribute:!1})],Y.prototype,`pinnedSessionIds`,void 0),H([S({attribute:!1})],Y.prototype,`projects`,void 0),H([S({attribute:!1})],Y.prototype,`sessionStates`,void 0),H([S({type:Boolean})],Y.prototype,`canStartSession`,void 0),H([S({attribute:!1})],Y.prototype,`onCreateSession`,void 0),H([S({attribute:!1})],Y.prototype,`onOpenSession`,void 0),H([S({attribute:!1})],Y.prototype,`onSelectWorkspace`,void 0),H([S({attribute:!1})],Y.prototype,`onBrowse`,void 0),H([S({attribute:!1})],Y.prototype,`onClose`,void 0),H([S({attribute:!1})],Y.prototype,`onTogglePin`,void 0),H([S({attribute:!1})],Y.prototype,`onRenameSession`,void 0),H([C()],Y.prototype,`query`,void 0),H([C()],Y.prototype,`filter`,void 0),H([C()],Y.prototype,`openMenuSessionId`,void 0),H([C()],Y.prototype,`renamingSessionId`,void 0),Y=H([x(`quick-switcher`)],Y);var
|
|
4237
|
+
`]}};H([S({type:Boolean})],Y.prototype,`loading`,void 0),H([S({attribute:!1})],Y.prototype,`sessions`,void 0),H([S({attribute:!1})],Y.prototype,`workspaces`,void 0),H([S({attribute:!1})],Y.prototype,`selectedSession`,void 0),H([S({attribute:!1})],Y.prototype,`selectedWorkspace`,void 0),H([S({attribute:!1})],Y.prototype,`activeSessionIds`,void 0),H([S({attribute:!1})],Y.prototype,`waitingSessionIds`,void 0),H([S({attribute:!1})],Y.prototype,`unreadSessionIds`,void 0),H([S({attribute:!1})],Y.prototype,`interruptedSessionIds`,void 0),H([S({attribute:!1})],Y.prototype,`errorSessionIds`,void 0),H([S({attribute:!1})],Y.prototype,`pinnedSessionIds`,void 0),H([S({attribute:!1})],Y.prototype,`projects`,void 0),H([S({attribute:!1})],Y.prototype,`sessionStates`,void 0),H([S({type:Boolean})],Y.prototype,`canStartSession`,void 0),H([S({attribute:!1})],Y.prototype,`onCreateSession`,void 0),H([S({attribute:!1})],Y.prototype,`onOpenSession`,void 0),H([S({attribute:!1})],Y.prototype,`onSelectWorkspace`,void 0),H([S({attribute:!1})],Y.prototype,`onBrowse`,void 0),H([S({attribute:!1})],Y.prototype,`onClose`,void 0),H([S({attribute:!1})],Y.prototype,`onTogglePin`,void 0),H([S({attribute:!1})],Y.prototype,`onRenameSession`,void 0),H([C()],Y.prototype,`query`,void 0),H([C()],Y.prototype,`filter`,void 0),H([C()],Y.prototype,`openMenuSessionId`,void 0),H([C()],Y.prototype,`renamingSessionId`,void 0),Y=H([x(`quick-switcher`)],Y);var $O=class extends _{constructor(...e){super(...e),this.selectedIndex=0,this.query=``}render(){let e=this.state;return e===void 0?null:h`
|
|
4226
4238
|
<modal-surface
|
|
4227
4239
|
.onClose=${()=>{this.cancel()}}
|
|
4228
4240
|
.initialFocus=${this.initialFocusTarget(e)}
|
|
@@ -4235,7 +4247,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
4235
4247
|
</header>
|
|
4236
4248
|
${this.renderBody(e)}
|
|
4237
4249
|
</modal-surface>
|
|
4238
|
-
`}optionsFor(e){switch(e.step){case`method`:return[{key:`oauth`,title:`Use a subscription`,detail:`ChatGPT Plus/Pro, Claude Pro/Max, or GitHub Copilot`,searchText:`Use a subscription`,run:()=>{this.onChooseMethod?.(`oauth`)}},{key:`api_key`,title:`Use provider credentials`,detail:`Configure an API key or provider-specific credentials in the active Pi-compatible profile's auth.json`,searchText:`Use provider credentials`,run:()=>{this.onChooseMethod?.(`api_key`)}}];case`providers`:return e.providers.map(e=>({key:e.id,title:h`${e.name}${e.status.source===void 0?null:h` <em>${
|
|
4250
|
+
`}optionsFor(e){switch(e.step){case`method`:return[{key:`oauth`,title:`Use a subscription`,detail:`ChatGPT Plus/Pro, Claude Pro/Max, or GitHub Copilot`,searchText:`Use a subscription`,run:()=>{this.onChooseMethod?.(`oauth`)}},{key:`api_key`,title:`Use provider credentials`,detail:`Configure an API key or provider-specific credentials in the active Pi-compatible profile's auth.json`,searchText:`Use provider credentials`,run:()=>{this.onChooseMethod?.(`api_key`)}}];case`providers`:return e.providers.map(e=>({key:e.id,title:h`${e.name}${e.status.source===void 0?null:h` <em>${ck(e)}</em>`}`,detail:`${e.id} · ${ik(e.authType)}`,searchText:e.name,run:()=>{this.onSelectProvider?.(e.id,e.authType)}}));case`logout`:return e.providers.map(e=>({key:e.id,title:e.name,detail:`${e.id} · ${ik(e.authType)}`,searchText:e.name,run:()=>{this.onLogoutProvider?.(e.id)}}));case`oauth`:return}}initialFocusTarget(e){if(e.step===`oauth`)return e.flow.prompt===void 0?void 0:`input`;if(e.step===`providers`||e.step===`logout`)return e.providers.length>0?`input`:void 0}stepHasSearch(e){return e.step===`providers`||e.step===`logout`}handleSearchInput(e){e.target instanceof HTMLInputElement&&(this.query=e.target.value,this.selectedIndex=0)}filteredOptions(e){let t=kO(this.query);return t===``?e:e.filter(e=>OO(`${e.searchText} ${e.detail} ${e.key}`,t))}visibleOptions(e){let t=this.optionsFor(e);return t===void 0?[]:this.filteredOptions(t)}willUpdate(e){if(!e.has(`state`))return;if(sk(e.get(`state`))!==this.state?.step){this.selectedIndex=0,this.query=``;return}let t=this.state===void 0?void 0:this.visibleOptions(this.state);t!==void 0&&(this.selectedIndex=Math.min(this.selectedIndex,Math.max(0,t.length-1)))}updated(e){if(!e.has(`state`))return;let t=sk(e.get(`state`));if(t===void 0)return;let n=this.state?.step,r=t!==n,i=t===`oauth`&&n===`oauth`&&ak(e.get(`state`))!==ak(this.state);(r||i)&&this.surface?.focusDialog()}dialogTitle(e){switch(e.step){case`method`:return`Configure provider authentication`;case`providers`:return e.authType===void 0?`Select provider authentication`:e.authType===`oauth`?`Select subscription provider`:`Select credential provider`;case`oauth`:return`Login to ${e.flow.providerName}`;case`logout`:return`Remove stored provider authentication`}}renderBody(e){if(e.step===`oauth`)return this.renderOAuth(e);let t=this.optionsFor(e)??[],n=this.filteredOptions(t);return h`
|
|
4239
4251
|
${this.stepHasSearch(e)&&t.length>0?h`
|
|
4240
4252
|
<input aria-label="Search providers" placeholder="Search providers" .value=${this.query} @input=${e=>{this.handleSearchInput(e)}}>
|
|
4241
4253
|
`:null}
|
|
@@ -4244,7 +4256,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
4244
4256
|
<button
|
|
4245
4257
|
class=${t===this.selectedIndex?`selected`:``}
|
|
4246
4258
|
aria-current=${t===this.selectedIndex?`true`:g}
|
|
4247
|
-
${
|
|
4259
|
+
${aO(t===this.selectedIndex,e.key)}
|
|
4248
4260
|
@focus=${()=>{this.selectedIndex=t}}
|
|
4249
4261
|
@click=${()=>{e.run()}}
|
|
4250
4262
|
>
|
|
@@ -4253,7 +4265,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
4253
4265
|
</button>
|
|
4254
4266
|
`)}
|
|
4255
4267
|
</div>
|
|
4256
|
-
`}renderOAuth(e){let t=e.flow,n=t.prompt,r=t.select,i=n===void 0?void 0:
|
|
4268
|
+
`}renderOAuth(e){let t=e.flow,n=t.prompt,r=t.select,i=n===void 0?void 0:ek(n.promptType),a=rk(e.machineId,window.location.hostname)&&t.status===`running`&&n?.promptType===`manual_code`;return h`
|
|
4257
4269
|
<div class="form">
|
|
4258
4270
|
${t.auth===void 0?h`<p>Starting login flow…</p>`:h`
|
|
4259
4271
|
<p>Open this authorization link:</p>
|
|
@@ -4287,7 +4299,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
4287
4299
|
${t.status===`error`||t.status===`cancelled`?h`<div class="error-text">${t.error??t.status}</div><div class="actions"><button @click=${()=>{this.cancel()}}>Close</button></div>`:null}
|
|
4288
4300
|
${n===void 0&&r===void 0&&t.status===`running`?h`<div class="actions"><button @click=${()=>{this.onOAuthCancel?.()}}>Cancel</button></div>`:null}
|
|
4289
4301
|
</div>
|
|
4290
|
-
`}handleKeyDown(e){let t=this.state;if(t===void 0||
|
|
4302
|
+
`}handleKeyDown(e){let t=this.state;if(t===void 0||cO(e))return;if(e.key===`ArrowDown`||e.key===`ArrowUp`){let n=this.visibleOptions(t);if(n.length===0)return;e.preventDefault();let r=e.key===`ArrowDown`?1:-1;this.selectedIndex=(this.selectedIndex+r+n.length)%n.length;return}if(e.key!==`Enter`)return;if(t.step===`oauth`){if(t.flow.prompt===void 0)return;e.preventDefault(),this.onOAuthRespond?.();return}let n=this.visibleOptions(t)[this.selectedIndex];n!==void 0&&(e.preventDefault(),n.run())}cancel(){this.state?.step===`oauth`?this.onOAuthCancel?.():this.onCancel?.()}static{this.styles=[o`
|
|
4291
4303
|
:host { position: fixed; inset: 0; z-index: var(--pi-layer-blocking); color: var(--pi-text); font: 14px system-ui, sans-serif; }
|
|
4292
4304
|
modal-surface { --modal-surface-width: min(720px, calc(100vw - 40px)); --modal-surface-max-height: min(640px, calc(100vh - 40px)); }
|
|
4293
4305
|
header { display: flex; align-items: center; justify-content: space-between; padding: 12px; border-bottom: 1px solid var(--pi-border); }
|
|
@@ -4323,7 +4335,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
4323
4335
|
.inline-options button { display: grid; gap: 2px; text-align: left; }
|
|
4324
4336
|
.inline-options small { color: var(--pi-muted); }
|
|
4325
4337
|
em { color: var(--pi-success); font-style: normal; font-size: 12px; }
|
|
4326
|
-
`]}};H([S({attribute:!1})]
|
|
4338
|
+
`]}};H([S({attribute:!1})],$O.prototype,`state`,void 0),H([S({attribute:!1})],$O.prototype,`onChooseMethod`,void 0),H([S({attribute:!1})],$O.prototype,`onSelectProvider`,void 0),H([S({attribute:!1})],$O.prototype,`onLogoutProvider`,void 0),H([S({attribute:!1})],$O.prototype,`onOAuthInput`,void 0),H([S({attribute:!1})],$O.prototype,`onOAuthRespond`,void 0),H([S({attribute:!1})],$O.prototype,`onOAuthCancel`,void 0),H([S({attribute:!1})],$O.prototype,`onCancel`,void 0),H([w(`modal-surface`)],$O.prototype,`surface`,void 0),H([C()],$O.prototype,`selectedIndex`,void 0),H([C()],$O.prototype,`query`,void 0),$O=H([x(`auth-dialog`)],$O);function ek(e){return e===`secret`?`password`:`text`}var tk=new Set([`localhost`,`127.0.0.1`,`::1`]);function nk(e){return tk.has(e.trim().replace(/^\[|\]$/g,``).toLowerCase())}function rk(e,t){return e!==`local`||!nk(t)}function ik(e){return e===`oauth`?`subscription`:`credentials`}function ak(e){if(sk(e)!==`oauth`||typeof e!=`object`||!e||!(`flow`in e))return;let t=e.flow;if(typeof t!=`object`||!t)return;let n=`flowId`in t&&typeof t.flowId==`string`?t.flowId:``,r=`prompt`in t?ok(t.prompt):void 0;if(r!==void 0)return`${n}:prompt:${r}:${`responding`in e&&e.responding===!0?`responding`:`ready`}`;let i=`select`in t?ok(t.select):void 0;return i===void 0?`${n}:waiting:${`status`in t&&typeof t.status==`string`?t.status:`unknown`}`:`${n}:select:${i}`}function ok(e){if(!(typeof e!=`object`||!e||!(`requestId`in e)))return typeof e.requestId==`string`?e.requestId:void 0}function sk(e){if(!(typeof e!=`object`||!e||!(`step`in e)))switch(e.step){case`method`:case`providers`:case`oauth`:case`logout`:return e.step;default:return}}function ck(e){if(e.status.source===void 0)return``;switch(e.status.source){case`stored`:return`✓ configured`;case`environment`:return`✓ env${e.status.label===void 0?``:`: ${e.status.label}`}`;case`runtime`:return`✓ runtime`;case`fallback`:return`✓ custom key`;case`models_json_key`:return`✓ models.json key`;case`models_json_command`:return`✓ models.json command`;default:return``}}var lk=120,uk=class extends _{constructor(...e){super(...e),this.machineId=`local`,this.path=``,this.createMissing=!0,this.submitError=void 0,this.submitting=!1,this.suggestions=[],this.suggestionsQuery=void 0,this.suggestionsFailed=!1,this.selected=0,this.loading=!1,this.trustTouched=!1,this.suggestionRequestId=0,this.trustRequestId=0}connectedCallback(){super.connectedCallback(),this.loadSuggestions()}disconnectedCallback(){this.cancelPendingSuggestions(),this.cancelPendingTrust(),this.abortSuggestions(),super.disconnectedCallback()}scheduleSuggestions(){this.cancelPendingSuggestions(),this.abortSuggestions(),this.suggestionTimer=setTimeout(()=>{this.suggestionTimer=void 0,this.loadSuggestions()},lk)}cancelPendingSuggestions(){this.suggestionTimer!==void 0&&(clearTimeout(this.suggestionTimer),this.suggestionTimer=void 0)}abortSuggestions(){this.suggestionsAbort?.abort(),this.suggestionsAbort=void 0}scheduleTrust(){this.cancelPendingTrust(),this.trustTimer=setTimeout(()=>{this.trustTimer=void 0,this.loadTrust()},lk)}cancelPendingTrust(){this.trustTimer!==void 0&&(clearTimeout(this.trustTimer),this.trustTimer=void 0)}async loadSuggestions(){this.abortSuggestions();let e=++this.suggestionRequestId,t=this.path,n=new AbortController;this.suggestionsAbort=n,this.loading=!0;try{let r=await fs.projectDirectories(t,this.machineId,{signal:n.signal});if(e!==this.suggestionRequestId)return;this.suggestions=r,this.suggestionsQuery=t,this.suggestionsFailed=!1,this.selected=Math.min(this.selected,Math.max(0,r.length-1))}catch{if(e!==this.suggestionRequestId)return;this.suggestions=[],this.suggestionsQuery=t,this.suggestionsFailed=!0}finally{e===this.suggestionRequestId&&(this.loading=!1)}}get displayedSuggestions(){return this.suggestionsQuery===this.path?this.suggestions:[]}setPath(e){this.path=e,this.selected=0,this.scheduleSuggestions(),this.trustTouched=!1,this.scheduleTrust()}pick(e){this.path=e.path,this.selected=0,this.cancelPendingSuggestions(),this.cancelPendingTrust(),this.loadSuggestions(),this.loadTrust()}submit(){this.path.trim()===``||this.submitting||(this.submitError=void 0,this.submitting=!0,(async()=>{try{let e=await this.onSubmit?.(this.path,this.createMissing,this.trust===void 0?void 0:{trusted:this.trust.trusted,changed:this.trustTouched});this.submitError=typeof e==`string`&&e!==``?e:void 0}finally{this.submitting=!1}})())}onPathInput(e){e.target instanceof HTMLInputElement&&this.setPath(e.target.value)}onCreateMissingChange(e){e.target instanceof HTMLInputElement&&(this.createMissing=e.target.checked)}async loadTrust(){let e=++this.trustRequestId,t=this.path.trim();if(t===``){e===this.trustRequestId&&(this.trust=void 0);return}e===this.trustRequestId&&(this.trust={...this.trust??{path:t,decision:null,trusted:!1},path:t,loading:!0});try{let n=await ds.projectTrust(t,this.machineId);if(e!==this.trustRequestId||this.trustTouched)return;this.trust={path:n.path,decision:n.decision,trusted:n.trusted,loading:!1}}catch(n){if(e!==this.trustRequestId||this.trustTouched)return;this.trust={path:t,decision:null,trusted:!1,loading:!1,error:y(n)}}}onTrustChange(e){this.trustTouched=!0,this.trust!==void 0&&(this.trust={...this.trust,trusted:e,loading:!1})}renderTrustChoice(){let e=this.trust===void 0||this.trust.loading||this.trust.error!==void 0;return h`
|
|
4327
4339
|
<label class="check">
|
|
4328
4340
|
<input type="checkbox" .checked=${this.trust?.trusted??!1} ?disabled=${e} @change=${e=>{e.target instanceof HTMLInputElement&&this.onTrustChange(e.target.checked)}} />
|
|
4329
4341
|
<span>Trust this project</span>
|
|
@@ -4412,7 +4424,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
4412
4424
|
header button { border: 0; background: transparent; color: var(--pi-muted); font-size: 22px; padding: 0 8px; }
|
|
4413
4425
|
.primary { border-color: var(--pi-success-border); background: var(--pi-success-border); }
|
|
4414
4426
|
button:disabled { opacity: .5; cursor: not-allowed; }
|
|
4415
|
-
`}};H([S({attribute:!1})],
|
|
4427
|
+
`}};H([S({attribute:!1})],uk.prototype,`onSubmit`,void 0),H([S({attribute:!1})],uk.prototype,`onCancel`,void 0),H([S()],uk.prototype,`machineId`,void 0),H([C()],uk.prototype,`path`,void 0),H([C()],uk.prototype,`createMissing`,void 0),H([C()],uk.prototype,`submitError`,void 0),H([C()],uk.prototype,`submitting`,void 0),H([C()],uk.prototype,`suggestions`,void 0),H([C()],uk.prototype,`suggestionsQuery`,void 0),H([C()],uk.prototype,`suggestionsFailed`,void 0),H([C()],uk.prototype,`selected`,void 0),H([C()],uk.prototype,`loading`,void 0),H([C()],uk.prototype,`trust`,void 0),H([C()],uk.prototype,`trustTouched`,void 0),H([w(`input`)],uk.prototype,`pathInput`,void 0),uk=H([x(`project-dialog`)],uk);var dk=class extends _{constructor(...e){super(...e),this.error=``,this.url=``,this.name=``,this.token=``,this.submitting=!1,this.nameEdited=!1,this.previousSuggestedName=``}handleUrlInput(e){if(!(e.target instanceof HTMLInputElement))return;let t=e.target.value,n=fk(t);(!this.nameEdited||this.name.trim()===``||this.name===this.previousSuggestedName)&&(this.name=n),this.previousSuggestedName=n,this.url=t}handleNameInput(e){e.target instanceof HTMLInputElement&&(this.nameEdited=!0,this.name=e.target.value)}handleTokenInput(e){e.target instanceof HTMLInputElement&&(this.token=e.target.value)}handleKeyDown(e){e.key===`Enter`&&e.target instanceof HTMLInputElement&&e.target.name===`baseUrl`&&pk(this.url)===void 0&&(e.preventDefault(),this.updateComplete.then(()=>{this.nameInput?.focus(),this.nameInput?.select()}))}handleSubmit(e){e.preventDefault(),this.submit()}async submit(){let e=this.validInput();if(!(e===void 0||this.submitting)){this.submitting=!0;try{await this.onSubmit?.(e)}finally{this.isConnected&&(this.submitting=!1)}}}validInput(){let e=this.url.trim(),t=this.name.trim();if(e===``||t===``||pk(e)!==void 0)return;let n=this.token.trim();return{name:t,baseUrl:e,...n===``?{}:{token:n}}}render(){let e=this.url.trim()!==``,t=e?pk(this.url):void 0,n=this.validInput()!==void 0&&!this.submitting;return h`
|
|
4416
4428
|
<modal-surface
|
|
4417
4429
|
.onClose=${()=>this.onCancel?.()}
|
|
4418
4430
|
.initialFocus=${`input[name='baseUrl']`}
|
|
@@ -4471,7 +4483,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
4471
4483
|
header button { border: 0; background: transparent; color: var(--pi-muted); font-size: 22px; padding: 0 8px; }
|
|
4472
4484
|
.primary { border-color: var(--pi-success-border); background: var(--pi-success-border); }
|
|
4473
4485
|
button:disabled { opacity: .5; cursor: not-allowed; }
|
|
4474
|
-
`}};H([S({attribute:!1})],
|
|
4486
|
+
`}};H([S({attribute:!1})],dk.prototype,`onSubmit`,void 0),H([S({attribute:!1})],dk.prototype,`onCancel`,void 0),H([S()],dk.prototype,`error`,void 0),H([C()],dk.prototype,`url`,void 0),H([C()],dk.prototype,`name`,void 0),H([C()],dk.prototype,`token`,void 0),H([C()],dk.prototype,`submitting`,void 0),H([w(`input[name='name']`)],dk.prototype,`nameInput`,void 0),dk=H([x(`machine-dialog`)],dk);function fk(e){let t=e.trim();if(t===``)return``;let n=mk(t)??mk(`http://${t.replace(/^\/+/u,``)}`);return n!==void 0&&n.hostname!==``?n.hostname.replace(/^\[(.*)\]$/u,`$1`):hk(t)}function pk(e){let t=e.trim();if(t===``)return`Remote PI WEB URL is required.`;let n;try{n=new URL(t)}catch{return`Enter a valid URL including http:// or https://.`}if(n.protocol!==`http:`&&n.protocol!==`https:`)return`Use an http:// or https:// URL.`;if(n.username!==``||n.password!==``)return`Do not include credentials in the machine URL.`;if(n.search!==``||n.hash!==``)return`Do not include a query string or fragment.`}function mk(e){try{let t=new URL(e);return t.protocol===`http:`||t.protocol===`https:`?t:void 0}catch{return}}function hk(e){let t=e.replace(/^[a-z][a-z\d+.-]*:\/\//iu,``),n=t.slice(t.lastIndexOf(`@`)+1).split(/[/?#]/u)[0]??``;return n.startsWith(`[`)&&n.includes(`]`)?n.slice(1,n.indexOf(`]`)):n.replace(/:\d+$/u,``)}var gk=class extends _{constructor(...e){super(...e),this.themes=[],this.followSystem=!1}render(){return h`
|
|
4475
4487
|
<settings-panel-frame>
|
|
4476
4488
|
<div class="heading">
|
|
4477
4489
|
<div>
|
|
@@ -4557,7 +4569,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
4557
4569
|
.theme-grid { grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: var(--pi-space-4); }
|
|
4558
4570
|
.preview { height: 64px; }
|
|
4559
4571
|
}
|
|
4560
|
-
`}};H([S({attribute:!1})],
|
|
4572
|
+
`}};H([S({attribute:!1})],gk.prototype,`themes`,void 0),H([S({attribute:!1})],gk.prototype,`selectedThemeId`,void 0),H([S({attribute:!1})],gk.prototype,`activeThemeId`,void 0),H([S({type:Boolean})],gk.prototype,`followSystem`,void 0),H([S({attribute:!1})],gk.prototype,`onSelectTheme`,void 0),H([S({attribute:!1})],gk.prototype,`onToggleFollowSystem`,void 0),gk=H([x(`settings-appearance-panel`)],gk);var _k={availability:`error`,error:`error`,success:`success`,security:`warning`,warning:`warning`,info:`info`};function vk(e){return e.tone??_k[e.type]}var yk=class extends _{constructor(...e){super(...e),this.heading=``,this.description=``,this.actionLabel=``,this.actionTitle=``,this.actionDisabled=!1,this.notices=[]}render(){return h`
|
|
4561
4573
|
<section class="panel" aria-label=${this.heading||`Settings panel`}>
|
|
4562
4574
|
<header class="section-heading">
|
|
4563
4575
|
<div class="heading-copy">
|
|
@@ -4580,7 +4592,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
4580
4592
|
<div class="notice-stack" aria-label="Settings notices">
|
|
4581
4593
|
${this.notices.map(e=>this.renderNotice(e))}
|
|
4582
4594
|
</div>
|
|
4583
|
-
`}renderNotice(e){let t=
|
|
4595
|
+
`}renderNotice(e){let t=vk(e),n=e.role??bk(t),r=e.title;return h`
|
|
4584
4596
|
<article class=${`notice ${t}`} role=${n}>
|
|
4585
4597
|
${r===void 0||r===``?g:h`<strong class="notice-title">${r}</strong>`}
|
|
4586
4598
|
<div class="notice-content">${e.content}</div>
|
|
@@ -4613,13 +4625,13 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
4613
4625
|
.section-heading { display: grid; gap: 12px; }
|
|
4614
4626
|
.heading-actions { justify-self: start; }
|
|
4615
4627
|
}
|
|
4616
|
-
`}};H([S()],
|
|
4617
|
-
`):``}}function
|
|
4618
|
-
`)??``,uploadDefaultFolder:e.uploads?.defaultFolder??``}}function
|
|
4619
|
-
`).map(e=>e.trim()).filter(e=>e!==``),n=t.find(e=>!
|
|
4628
|
+
`}};H([S()],yk.prototype,`heading`,void 0),H([S({attribute:!1})],yk.prototype,`description`,void 0),H([S()],yk.prototype,`actionLabel`,void 0),H([S()],yk.prototype,`actionTitle`,void 0),H([S({type:Boolean})],yk.prototype,`actionDisabled`,void 0),H([S({attribute:!1})],yk.prototype,`notices`,void 0),H([S({attribute:!1})],yk.prototype,`onAction`,void 0),yk=H([x(`settings-panel-frame`)],yk);function bk(e){switch(e){case`error`:return`alert`;case`success`:return`status`;case`warning`:case`info`:return`note`}}function xk(){return{host:``,port:``,allowedHostsMode:`list`,allowedHostsText:``}}function Sk(){return{allowedPathsText:``,uploadDefaultFolder:``}}function Ck(e){return{host:e.host??``,port:e.port===void 0?``:String(e.port),allowedHostsMode:e.allowedHosts===!0?`all`:`list`,allowedHostsText:Array.isArray(e.allowedHosts)?e.allowedHosts.join(`
|
|
4629
|
+
`):``}}function wk(e){return{allowedPathsText:e.pathAccess?.allowedPaths?.join(`
|
|
4630
|
+
`)??``,uploadDefaultFolder:e.uploads?.defaultFolder??``}}function Tk(e,t={}){let n=Dk(t),r=e.host.trim(),i=e.port.trim();if(r!==``&&(n.host=r),i!==``){let e=Number(i);if(!Number.isInteger(e)||e<1||e>65535)throw Error(`Port must be an integer from 1 to 65535.`);n.port=e}return n.allowedHosts=e.allowedHostsMode===`all`||Ok(e.allowedHostsText),n}function Ek(e){let t=kk(e.allowedPathsText),n=Ak(e.uploadDefaultFolder);return{pathAccess:{allowedPaths:t},uploads:n===``?{}:{defaultFolder:n}}}function Dk(e){return{...e.shortcuts===void 0?{}:{shortcuts:e.shortcuts},...e.plugins===void 0?{}:{plugins:e.plugins},...e.pathAccess===void 0?{}:{pathAccess:e.pathAccess},...e.uploads===void 0?{}:{uploads:e.uploads},...e.maxUploadBytes===void 0?{}:{maxUploadBytes:e.maxUploadBytes},...e.spawnSessions===void 0?{}:{spawnSessions:e.spawnSessions},...e.subsessions===void 0?{}:{subsessions:e.subsessions},...e.askUser===void 0?{}:{askUser:e.askUser},...e.agent===void 0?{}:{agent:e.agent}}}function Ok(e){return e.split(/[\n,]/u).map(e=>e.trim()).filter(e=>e!==``)}function kk(e){let t=e.split(`
|
|
4631
|
+
`).map(e=>e.trim()).filter(e=>e!==``),n=t.find(e=>!jk(e));if(n!==void 0)throw Error(`Allowed external paths must be absolute paths or start with ~: ${n}`);return t}function Ak(e){let t=e.trim();if(t===``)return``;if(Mk(t))throw Error(`Upload default folder must be workspace-relative.`);let n=t.split(/[\\/]+/u).filter(e=>e!==``&&e!==`.`);if(n.length===0)return``;if(n.some(e=>e===`..`))throw Error(`Upload default folder must not contain path traversal.`);return n.join(`/`)}function jk(e){return e===`~`||e.startsWith(`~/`)||e.startsWith(`~\\`)||e.startsWith(`/`)||e.startsWith(`\\`)||/^[A-Za-z]:[\\/]/u.test(e)}function Mk(e){let t=e.replace(/\\/g,`/`);return t.startsWith(`/`)||/^[A-Za-z]:\//u.test(t)}function Nk(e){return h`Gateway server fields edit this local gateway. File access and upload defaults edit ${e}.`}var Pk=class extends _{constructor(...e){super(...e),this.loading=!1,this.machineLoading=!1,this.saving=!1,this.error=``,this.machineError=``,this.savedMessage=``,this.targetLabel=`selected machine`,this.gatewayDraft=xk(),this.machineDraft=Sk(),this.gatewayLocalError=``,this.machineLocalError=``}willUpdate(e){e.has(`configResponse`)&&this.configResponse!==void 0&&(this.gatewayDraft=Ck(this.configResponse.config),this.gatewayLocalError=``),e.has(`machineConfigResponse`)&&this.machineConfigResponse!==void 0&&(this.machineDraft=wk(this.machineConfigResponse.config),this.machineLocalError=``)}render(){return h`
|
|
4620
4632
|
<settings-panel-frame
|
|
4621
4633
|
heading="General configuration"
|
|
4622
|
-
.description=${
|
|
4634
|
+
.description=${Nk(this.targetLabel)}
|
|
4623
4635
|
actionLabel="Reload"
|
|
4624
4636
|
.actionDisabled=${this.loading||this.machineLoading}
|
|
4625
4637
|
.notices=${this.panelNotices()}
|
|
@@ -4648,7 +4660,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
4648
4660
|
<span>Host</span>
|
|
4649
4661
|
${this.renderOverrideBadge(`host`)}
|
|
4650
4662
|
</span>
|
|
4651
|
-
<input .value=${this.gatewayDraft.host} placeholder="127.0.0.1" autocomplete="off" spellcheck="false" @input=${e=>{this.updateGatewayDraft({host:
|
|
4663
|
+
<input .value=${this.gatewayDraft.host} placeholder="127.0.0.1" autocomplete="off" spellcheck="false" @input=${e=>{this.updateGatewayDraft({host:Lk(e)})}}>
|
|
4652
4664
|
<small>Address the web server should bind to. Leave empty to use PI WEB's default.</small>
|
|
4653
4665
|
</label>
|
|
4654
4666
|
|
|
@@ -4657,7 +4669,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
4657
4669
|
<span>Port</span>
|
|
4658
4670
|
${this.renderOverrideBadge(`port`)}
|
|
4659
4671
|
</span>
|
|
4660
|
-
<input .value=${this.gatewayDraft.port} inputmode="numeric" pattern="[0-9]*" placeholder="8504" autocomplete="off" @input=${e=>{this.updateGatewayDraft({port:
|
|
4672
|
+
<input .value=${this.gatewayDraft.port} inputmode="numeric" pattern="[0-9]*" placeholder="8504" autocomplete="off" @input=${e=>{this.updateGatewayDraft({port:Lk(e)})}}>
|
|
4661
4673
|
<small>TCP port from 1 to 65535. Leave empty to use PI WEB's default.</small>
|
|
4662
4674
|
</label>
|
|
4663
4675
|
|
|
@@ -4666,11 +4678,11 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
4666
4678
|
<span>Allowed hosts</span>
|
|
4667
4679
|
${this.renderOverrideBadge(`allowedHosts`)}
|
|
4668
4680
|
</span>
|
|
4669
|
-
<select .value=${this.gatewayDraft.allowedHostsMode} @change=${e=>{this.updateGatewayDraft({allowedHostsMode:
|
|
4681
|
+
<select .value=${this.gatewayDraft.allowedHostsMode} @change=${e=>{this.updateGatewayDraft({allowedHostsMode:Rk(e)===`all`?`all`:`list`})}}>
|
|
4670
4682
|
<option value="list">Only listed hosts</option>
|
|
4671
4683
|
<option value="all">Allow every host</option>
|
|
4672
4684
|
</select>
|
|
4673
|
-
<textarea .value=${this.gatewayDraft.allowedHostsText} ?disabled=${this.gatewayDraft.allowedHostsMode===`all`} rows="4" placeholder="example.local 192.168.1.20" spellcheck="false" @input=${e=>{this.updateGatewayDraft({allowedHostsText:
|
|
4685
|
+
<textarea .value=${this.gatewayDraft.allowedHostsText} ?disabled=${this.gatewayDraft.allowedHostsMode===`all`} rows="4" placeholder="example.local 192.168.1.20" spellcheck="false" @input=${e=>{this.updateGatewayDraft({allowedHostsText:zk(e)})}}></textarea>
|
|
4674
4686
|
<small>Enter one host per line, or choose “Allow every host” to write <code>true</code>.</small>
|
|
4675
4687
|
</div>
|
|
4676
4688
|
|
|
@@ -4700,7 +4712,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
4700
4712
|
<span class="field-heading">
|
|
4701
4713
|
<span>External filesystem roots</span>
|
|
4702
4714
|
</span>
|
|
4703
|
-
<textarea .value=${this.machineDraft.allowedPathsText} rows="4" placeholder="~/SDKs /opt/reference" spellcheck="false" @input=${e=>{this.updateMachineDraft({allowedPathsText:
|
|
4715
|
+
<textarea .value=${this.machineDraft.allowedPathsText} rows="4" placeholder="~/SDKs /opt/reference" spellcheck="false" @input=${e=>{this.updateMachineDraft({allowedPathsText:zk(e)})}}></textarea>
|
|
4704
4716
|
<small>Allowlist for absolute <code>@</code> completions and file explorer reads outside a workspace on ${this.targetLabel}. Enter one absolute path, Windows absolute path, or <code>~</code>-prefixed path per line. Leave empty to deny external paths by default.</small>
|
|
4705
4717
|
</label>
|
|
4706
4718
|
|
|
@@ -4708,7 +4720,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
4708
4720
|
<span class="field-heading">
|
|
4709
4721
|
<span>Default upload folder</span>
|
|
4710
4722
|
</span>
|
|
4711
|
-
<input .value=${this.machineDraft.uploadDefaultFolder} placeholder=${zs} autocomplete="off" spellcheck="false" @input=${e=>{this.updateMachineDraft({uploadDefaultFolder:
|
|
4723
|
+
<input .value=${this.machineDraft.uploadDefaultFolder} placeholder=${zs} autocomplete="off" spellcheck="false" @input=${e=>{this.updateMachineDraft({uploadDefaultFolder:Lk(e)})}}>
|
|
4712
4724
|
<small>Workspace-relative folder for manual file uploads on ${this.targetLabel}. Leave empty to use PI WEB's default <code>${zs}</code>.</small>
|
|
4713
4725
|
</label>
|
|
4714
4726
|
|
|
@@ -4726,18 +4738,18 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
4726
4738
|
<dl>
|
|
4727
4739
|
<div><dt>Host</dt><dd>${e.host??h`<span class="muted">127.0.0.1 default</span>`}</dd></div>
|
|
4728
4740
|
<div><dt>Port</dt><dd>${e.port??h`<span class="muted">8504 default</span>`}</dd></div>
|
|
4729
|
-
<div><dt>Allowed hosts</dt><dd>${
|
|
4741
|
+
<div><dt>Allowed hosts</dt><dd>${Fk(e.allowedHosts)}</dd></div>
|
|
4730
4742
|
</dl>
|
|
4731
4743
|
</section>
|
|
4732
4744
|
`}renderMachineEffectiveConfig(){let e=this.machineConfigResponse?.effectiveConfig??{};return h`
|
|
4733
4745
|
<section class="effective-card" aria-label="Effective selected machine file access and upload summary">
|
|
4734
4746
|
<h3>Effective selected-machine settings</h3>
|
|
4735
4747
|
<dl>
|
|
4736
|
-
<div><dt>External roots</dt><dd>${
|
|
4748
|
+
<div><dt>External roots</dt><dd>${Ik(e.pathAccess?.allowedPaths)}</dd></div>
|
|
4737
4749
|
<div><dt>Upload folder</dt><dd>${e.uploads?.defaultFolder??h`<span class="muted">${`.pi-web/uploads`} default</span>`}</dd></div>
|
|
4738
4750
|
</dl>
|
|
4739
4751
|
</section>
|
|
4740
|
-
`}reloadAll(){this.onReload?.(),this.onReloadMachine?.()}async saveGatewayConfig(e){e.preventDefault(),this.gatewayLocalError=``;try{await this.onSave?.(
|
|
4752
|
+
`}reloadAll(){this.onReload?.(),this.onReloadMachine?.()}async saveGatewayConfig(e){e.preventDefault(),this.gatewayLocalError=``;try{await this.onSave?.(Tk(this.gatewayDraft,this.configResponse?.config??{}))}catch(e){this.gatewayLocalError=y(e)}}async saveMachineAccessConfig(e){e.preventDefault(),this.machineLocalError=``;try{await this.onSaveMachineConfig?.(Ek(this.machineDraft))}catch(e){this.machineLocalError=y(e)}}updateGatewayDraft(e){this.gatewayDraft={...this.gatewayDraft,...e},this.gatewayLocalError=``}updateMachineDraft(e){this.machineDraft={...this.machineDraft,...e},this.machineLocalError=``}static{this.styles=o`
|
|
4741
4753
|
:host { display: block; }
|
|
4742
4754
|
.card-heading { display: grid; gap: 6px; min-width: 0; }
|
|
4743
4755
|
h3, p { margin: 0; }
|
|
@@ -4776,7 +4788,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
4776
4788
|
@media (max-width: 760px) {
|
|
4777
4789
|
.effective-card dl > div { grid-template-columns: minmax(0, 1fr); gap: 3px; }
|
|
4778
4790
|
}
|
|
4779
|
-
`}};H([S({attribute:!1})],
|
|
4791
|
+
`}};H([S({attribute:!1})],Pk.prototype,`configResponse`,void 0),H([S({attribute:!1})],Pk.prototype,`machineConfigResponse`,void 0),H([S({type:Boolean})],Pk.prototype,`loading`,void 0),H([S({type:Boolean})],Pk.prototype,`machineLoading`,void 0),H([S({type:Boolean})],Pk.prototype,`saving`,void 0),H([S()],Pk.prototype,`error`,void 0),H([S()],Pk.prototype,`machineError`,void 0),H([S()],Pk.prototype,`savedMessage`,void 0),H([S()],Pk.prototype,`targetLabel`,void 0),H([S({attribute:!1})],Pk.prototype,`onReload`,void 0),H([S({attribute:!1})],Pk.prototype,`onReloadMachine`,void 0),H([S({attribute:!1})],Pk.prototype,`onSave`,void 0),H([S({attribute:!1})],Pk.prototype,`onSaveMachineConfig`,void 0),H([C()],Pk.prototype,`gatewayDraft`,void 0),H([C()],Pk.prototype,`machineDraft`,void 0),H([C()],Pk.prototype,`gatewayLocalError`,void 0),H([C()],Pk.prototype,`machineLocalError`,void 0),Pk=H([x(`settings-general-panel`)],Pk);function Fk(e){return e===!0?`Any host`:Array.isArray(e)?e.length===0?h`<span class="muted">None listed</span>`:e.join(`, `):h`<span class="muted">Unset</span>`}function Ik(e){return e===void 0||e.length===0?h`<span class="muted">External paths denied</span>`:e.join(`, `)}function Lk(e){return e.target instanceof HTMLInputElement?e.target.value:``}function Rk(e){return e.target instanceof HTMLSelectElement?e.target.value:``}function zk(e){return e.target instanceof HTMLTextAreaElement?e.target.value:``}var Bk=class extends _{constructor(...e){super(...e),this.loading=!1}render(){let e=this.report?.machines??[];return h`
|
|
4780
4792
|
<section class="fleet">
|
|
4781
4793
|
<header>
|
|
4782
4794
|
<div>
|
|
@@ -4859,7 +4871,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
4859
4871
|
.machine { grid-template-columns: auto minmax(0, 1fr); }
|
|
4860
4872
|
.machine .row-actions { grid-row: auto; grid-column: 1 / -1; }
|
|
4861
4873
|
}
|
|
4862
|
-
`}};H([S({attribute:!1})],
|
|
4874
|
+
`}};H([S({attribute:!1})],Bk.prototype,`report`,void 0),H([S({type:Boolean})],Bk.prototype,`loading`,void 0),H([S({attribute:!1})],Bk.prototype,`error`,void 0),H([S({attribute:!1})],Bk.prototype,`onRefresh`,void 0),H([S({attribute:!1})],Bk.prototype,`onRun`,void 0),H([C()],Bk.prototype,`running`,void 0),H([C()],Bk.prototype,`lastRun`,void 0),Bk=H([x(`settings-fleet-section`)],Bk);var Vk=class extends _{constructor(...e){super(...e),this.machines=[],this.machineStatuses={},this.fleetLoading=!1,this.draftName=``}render(){return h`
|
|
4863
4875
|
<settings-panel-frame>
|
|
4864
4876
|
<div class="machines-heading">
|
|
4865
4877
|
<div>
|
|
@@ -4932,10 +4944,10 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
4932
4944
|
.machine-grid { grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); gap: var(--pi-space-3); }
|
|
4933
4945
|
.machine-card { min-height: 88px; padding: var(--pi-space-4); }
|
|
4934
4946
|
}
|
|
4935
|
-
`}};H([S({attribute:!1})],
|
|
4947
|
+
`}};H([S({attribute:!1})],Vk.prototype,`machines`,void 0),H([S({attribute:!1})],Vk.prototype,`machineStatuses`,void 0),H([S({attribute:!1})],Vk.prototype,`onAdd`,void 0),H([S({attribute:!1})],Vk.prototype,`onRename`,void 0),H([S({attribute:!1})],Vk.prototype,`onRemove`,void 0),H([S({attribute:!1})],Vk.prototype,`fleetReport`,void 0),H([S({type:Boolean})],Vk.prototype,`fleetLoading`,void 0),H([S({attribute:!1})],Vk.prototype,`fleetError`,void 0),H([S({attribute:!1})],Vk.prototype,`onRefreshFleet`,void 0),H([S({attribute:!1})],Vk.prototype,`onRunFleet`,void 0),H([C()],Vk.prototype,`renamingId`,void 0),H([C()],Vk.prototype,`draftName`,void 0),Vk=H([x(`settings-machines-panel`)],Vk);function Hk(e){return{spawnSessions:e}}function Uk(e){return{subsessions:e}}function Wk(e){return{askUser:e}}function Gk(e,t){return{...e,config:{...e.config,...t.config},effectiveConfig:{...e.effectiveConfig,...t.effectiveConfig},envOverrides:{...e.envOverrides,spawnSessions:t.envOverrides.spawnSessions,subsessions:t.envOverrides.subsessions,askUser:t.envOverrides.askUser}}}var Kk=class extends _{constructor(...e){super(...e),this.loading=!1,this.saving=!1,this.error=``,this.savedMessage=``,this.targetLabel=`local (local gateway)`}render(){let e=this.configResponse,t=e?.envOverrides.spawnSessions===!0,n=e?.effectiveConfig.spawnSessions!==!1,r=e?.envOverrides.subsessions===!0,i=e?.effectiveConfig.subsessions===!0&&n,a=e?.envOverrides.askUser===!0,o=e?.effectiveConfig.askUser===!0;return h`
|
|
4936
4948
|
<settings-panel-frame
|
|
4937
4949
|
heading="Session daemon"
|
|
4938
|
-
.description=${
|
|
4950
|
+
.description=${qk(this.targetLabel)}
|
|
4939
4951
|
actionLabel="Reload"
|
|
4940
4952
|
.actionDisabled=${this.loading}
|
|
4941
4953
|
.notices=${this.panelNotices()}
|
|
@@ -5005,7 +5017,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
5005
5017
|
</section>
|
|
5006
5018
|
`}
|
|
5007
5019
|
</settings-panel-frame>
|
|
5008
|
-
`}panelNotices(){return
|
|
5020
|
+
`}panelNotices(){return Jk({error:this.error,savedMessage:this.savedMessage})}renderUnavailableConfigState(){return h`<div class="loading-card">${this.loading?`Loading configuration…`:`Configuration is unavailable. Reload to try again.`}</div>`}async toggleSpawnSessions(e){let t=e.target instanceof HTMLInputElement&&e.target.checked;await this.onSave?.(Hk(t))}async toggleSubsessions(e){let t=e.target instanceof HTMLInputElement&&e.target.checked;await this.onSave?.(Uk(t))}async toggleAskUser(e){let t=e.target instanceof HTMLInputElement&&e.target.checked;await this.onSave?.(Wk(t))}static{this.styles=o`
|
|
5009
5021
|
:host { display: block; }
|
|
5010
5022
|
h3 { margin: 0; font-size: 13px; line-height: 1.3; }
|
|
5011
5023
|
.loading-card, .config-path-card, .effective-card { border: 1px solid var(--pi-border); border-radius: 10px; background: var(--pi-surface); padding: 12px; }
|
|
@@ -5029,10 +5041,10 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
5029
5041
|
@media (max-width: 760px) {
|
|
5030
5042
|
.effective-card dl > div { grid-template-columns: minmax(0, 1fr); gap: 3px; }
|
|
5031
5043
|
}
|
|
5032
|
-
`}};H([S({attribute:!1})],
|
|
5044
|
+
`}};H([S({attribute:!1})],Kk.prototype,`configResponse`,void 0),H([S({type:Boolean})],Kk.prototype,`loading`,void 0),H([S({type:Boolean})],Kk.prototype,`saving`,void 0),H([S()],Kk.prototype,`error`,void 0),H([S()],Kk.prototype,`savedMessage`,void 0),H([S()],Kk.prototype,`targetLabel`,void 0),H([S({attribute:!1})],Kk.prototype,`onReload`,void 0),H([S({attribute:!1})],Kk.prototype,`onSave`,void 0),Kk=H([x(`settings-sessiond-panel`)],Kk);function qk(e){return`Agent tool capabilities for sessions on ${e}. Changes are saved immediately but only take effect after the session daemon on that machine restarts.`}function Jk(e){let t=[];return e.error!==``&&t.push({type:`error`,content:e.error}),e.savedMessage!==``&&t.push({type:`success`,content:e.savedMessage}),t}function Yk(e){return e===void 0?{id:`local`,name:`local`,kind:`local`}:{id:e.id,name:e.name,kind:e.kind}}function Xk(e){return e.kind===`local`?`${e.name} (local gateway)`:`${e.name} (remote machine)`}function Zk(e){return e.kind===`local`}function Qk(e){return e.trim()}function $k(e){if(Qk(e)===``)return`Enter a Pi package source accepted by Pi, such as npm:@scope/package, a git/URL source, or a local path.`}function eA(e){return e.scope===`project`?`Project scope`:`User scope`}function tA(e){return e.filtered?`Filtered by current Pi package settings`:`Available in this PI WEB process`}function nA(e){return e.installedPath??`Installed path not reported by Pi`}function rA(e){return e.scope===`user`}function iA(e){if(!rA(e))return`Project-scope Pi packages are listed for visibility, but PI WEB only updates user-scope Pi packages safely from this view.`}function aA(e){return e.length>0&&e.every(rA)}function oA(e){if(e.length===0)return`No Pi packages are configured yet.`;if(!aA(e))return`Update all is disabled while project-scope Pi packages are listed; update user-scope packages individually.`}function sA(e,t,n){return e?.kind===t?n===void 0||e.source===n:!1}function cA(e,t=Yk(void 0)){return`Pi package ${e===`install`?`installed`:e===`remove`?`removed`:`updated`}${t.kind===`local`?``:` on ${t.name}`}. Type /reload in ${t.kind===`local`?`each idle PI WEB session`:`each idle PI WEB session on ${t.name}`} to rediscover Pi runtime resources: extensions, skills, prompt templates, themes, and context/system prompt files. Reload the browser page separately for ${t.kind===`local`?`PI WEB browser plugin changes`:`PI WEB browser plugin changes served by ${t.name}`}.`}function lA(e,t){let n=e.trim();return t.kind===`remote`?n===`Remote machine timeout`?`Timed out while contacting ${t.name} for Pi package management. The package operation may still be running remotely; reload the package list before retrying.`:n===`Remote machine unavailable`?`Could not reach ${t.name} for Pi package management. Check the machine connection and try again.`:n:n}var uA=class extends _{constructor(...e){super(...e),this.loading=!1,this.error=``,this.operationMessage=``,this.installSource=``,this.validationMessage=``}render(){let e=this.packagesResponse?.packages??[],t=this.packageTarget,n=Xk(t),r=this.packagesResponse!==void 0;return h`
|
|
5033
5045
|
<settings-panel-frame
|
|
5034
5046
|
heading="Pi packages"
|
|
5035
|
-
.description=${
|
|
5047
|
+
.description=${dA(n)}
|
|
5036
5048
|
actionLabel="Reload"
|
|
5037
5049
|
actionTitle=${`Reload Pi packages from ${n}`}
|
|
5038
5050
|
.actionDisabled=${this.loading||this.isOperating}
|
|
@@ -5049,12 +5061,12 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
5049
5061
|
<label for="package-source">Pi package source</label>
|
|
5050
5062
|
<div class="install-row">
|
|
5051
5063
|
<input id="package-source" .value=${this.installSource} ?disabled=${this.isOperating} placeholder="npm:@scope/package, git URL, or local path" @input=${e=>{this.updateInstallSource(e)}}>
|
|
5052
|
-
<button type="submit" title="Install this Pi package" ?disabled=${this.isOperating}>${
|
|
5064
|
+
<button type="submit" title="Install this Pi package" ?disabled=${this.isOperating}>${sA(this.operation,`install`)?`Installing…`:`Install`}</button>
|
|
5053
5065
|
</div>
|
|
5054
5066
|
${this.validationMessage===``?null:h`<div class="field-error">${this.validationMessage}</div>`}
|
|
5055
5067
|
<small>Installs run on ${e} and use Pi's default package location, equivalent to <code>pi install <source></code>. PI WEB does not ask you to choose an install location.</small>
|
|
5056
5068
|
</form>
|
|
5057
|
-
`}renderPackageList(e,t){let n=
|
|
5069
|
+
`}renderPackageList(e,t){let n=Xk(t),r=oA(e),i=r!==void 0&&e.length>0;return h`
|
|
5058
5070
|
<section class="package-section" aria-label="Configured Pi packages">
|
|
5059
5071
|
<div class="package-toolbar">
|
|
5060
5072
|
<div>
|
|
@@ -5062,7 +5074,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
5062
5074
|
<p>This list comes from Pi's package manager settings on ${n}.</p>
|
|
5063
5075
|
</div>
|
|
5064
5076
|
<button class="secondary" title=${r??`Update all user-scope Pi packages`} ?disabled=${this.isOperating||r!==void 0} @click=${()=>{this.updatePackage()}}>
|
|
5065
|
-
${
|
|
5077
|
+
${sA(this.operation,`update-all`)?`Updating…`:`Update all`}
|
|
5066
5078
|
</button>
|
|
5067
5079
|
</div>
|
|
5068
5080
|
${i?h`<div class="action-note">${r}</div>`:null}
|
|
@@ -5073,12 +5085,12 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
5073
5085
|
<div class="package-list">
|
|
5074
5086
|
${e.map(e=>this.renderPackage(e))}
|
|
5075
5087
|
</div>
|
|
5076
|
-
`}renderPackage(e){let t=
|
|
5088
|
+
`}renderPackage(e){let t=iA(e),n=sA(this.operation,`update`,e.source),r=sA(this.operation,`remove`,e.source);return h`
|
|
5077
5089
|
<article class=${`package-card${e.filtered?` filtered`:``}`}>
|
|
5078
5090
|
<div class="package-main">
|
|
5079
5091
|
<strong>${e.source}</strong>
|
|
5080
|
-
<small>${
|
|
5081
|
-
<small>Installed path: <code>${
|
|
5092
|
+
<small>${eA(e)} · ${tA(e)}</small>
|
|
5093
|
+
<small>Installed path: <code>${nA(e)}</code></small>
|
|
5082
5094
|
${t===void 0?null:h`<small class="action-note">${t}</small>`}
|
|
5083
5095
|
</div>
|
|
5084
5096
|
<div class="package-actions">
|
|
@@ -5086,7 +5098,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
5086
5098
|
<button class="danger" title="Remove this Pi package" ?disabled=${this.isOperating} @click=${()=>{this.removePackage(e)}}>${r?`Removing…`:`Remove`}</button>
|
|
5087
5099
|
</div>
|
|
5088
5100
|
</article>
|
|
5089
|
-
`}updateInstallSource(e){this.installSource=e.target instanceof HTMLInputElement?e.target.value:``,this.validationMessage=``}async installPackage(e){e.preventDefault();let t
|
|
5101
|
+
`}updateInstallSource(e){this.installSource=e.target instanceof HTMLInputElement?e.target.value:``,this.validationMessage=``}async installPackage(e){e.preventDefault();let t=$k(this.installSource);if(t!==void 0){this.validationMessage=t;return}let n=Qk(this.installSource);try{await this.onInstallPackage?.(n),this.installSource=``,this.validationMessage=``}catch{}}async removePackage(e){try{await this.onRemovePackage?.(e.source,e.scope)}catch{}}async updatePackage(e){try{await this.onUpdatePackage?.(e)}catch{}}get packageTarget(){return this.targetMachine??Yk(void 0)}get isOperating(){return this.operation!==void 0}static{this.styles=o`
|
|
5090
5102
|
:host { display: block; }
|
|
5091
5103
|
.package-toolbar { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; margin-bottom: 14px; }
|
|
5092
5104
|
.package-toolbar > div, .package-main { display: grid; gap: 6px; min-width: 0; }
|
|
@@ -5121,10 +5133,10 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
5121
5133
|
.package-actions { justify-self: start; flex-wrap: wrap; }
|
|
5122
5134
|
.package-main strong, .package-main small { white-space: normal; }
|
|
5123
5135
|
}
|
|
5124
|
-
`}};H([S({attribute:!1})],
|
|
5136
|
+
`}};H([S({attribute:!1})],uA.prototype,`packagesResponse`,void 0),H([S({type:Boolean})],uA.prototype,`loading`,void 0),H([S({attribute:!1})],uA.prototype,`operation`,void 0),H([S({attribute:!1})],uA.prototype,`targetMachine`,void 0),H([S()],uA.prototype,`error`,void 0),H([S()],uA.prototype,`operationMessage`,void 0),H([S({attribute:!1})],uA.prototype,`onReload`,void 0),H([S({attribute:!1})],uA.prototype,`onInstallPackage`,void 0),H([S({attribute:!1})],uA.prototype,`onRemovePackage`,void 0),H([S({attribute:!1})],uA.prototype,`onUpdatePackage`,void 0),H([C()],uA.prototype,`installSource`,void 0),H([C()],uA.prototype,`validationMessage`,void 0),uA=H([x(`settings-packages-panel`)],uA);function dA(e){return h`Managing Pi packages on <strong>${e}</strong>. Install, remove, and update packages managed by Pi on the selected machine. Pi packages can provide extensions, skills, prompt templates, themes, context/system prompt files, and PI WEB browser plugins.`}var fA=class extends _{constructor(...e){super(...e),this.loading=!1,this.saving=!1,this.recoveryCommandsSupported=!1,this.error=``,this.savedMessage=``,this.targetLabel=`local (local gateway)`}render(){let e=pA(this.pluginsResponse,this.configResponse),t=this.pluginsResponse!==void 0;return h`
|
|
5125
5137
|
<settings-panel-frame
|
|
5126
5138
|
heading="PI WEB plugins"
|
|
5127
|
-
.description=${
|
|
5139
|
+
.description=${_A(this.targetLabel)}
|
|
5128
5140
|
actionLabel="Reload"
|
|
5129
5141
|
actionTitle=${`Reload PI WEB plugins from ${this.targetLabel}`}
|
|
5130
5142
|
.actionDisabled=${this.loading}
|
|
@@ -5163,11 +5175,11 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
5163
5175
|
</article>
|
|
5164
5176
|
`}renderPluginStatuses(e){let t=e.server;return h`
|
|
5165
5177
|
<div class="status-list" aria-label=${`${e.id} plugin states`}>
|
|
5166
|
-
${t===void 0?h`<span class="status neutral">${e.configOnly?`Configured only`:`Browser only`}</span>`:h`<span class=${`status ${
|
|
5178
|
+
${t===void 0?h`<span class="status neutral">${e.configOnly?`Configured only`:`Browser only`}</span>`:h`<span class=${`status ${hA(t.state)}`}>${mA(t.state)}</span>`}
|
|
5167
5179
|
${e.conflict?h`<span class="status error">Conflict</span>`:g}
|
|
5168
5180
|
${t?.staleRevision===!0?h`<span class="status warning">Stale revision</span>`:g}
|
|
5169
5181
|
${t?.restartRequired===!0?h`<span class="status warning">Restart required</span>`:g}
|
|
5170
|
-
${t?.health===void 0?g:h`<span class=${`status ${
|
|
5182
|
+
${t?.health===void 0?g:h`<span class=${`status ${gA(t.health.status)}`}>Health ${t.health.status}</span>`}
|
|
5171
5183
|
</div>
|
|
5172
5184
|
`}renderRecoveryCommands(){let e=this.pluginsResponse?.serverRuntime,t=(e?.status===`incompatible`&&!this.recoveryCommandsSupported?void 0:e?.recovery)??(this.recoveryCommandsSupported?gn:void 0);return t===void 0?g:h`
|
|
5173
5185
|
<aside class="recovery" aria-label="Offline server-plugin recovery commands">
|
|
@@ -5208,10 +5220,10 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
5208
5220
|
.plugin-card { grid-template-columns: minmax(0, 1fr); align-items: start; }
|
|
5209
5221
|
.toggle { justify-self: start; }
|
|
5210
5222
|
}
|
|
5211
|
-
`}};H([S({attribute:!1})],
|
|
5223
|
+
`}};H([S({attribute:!1})],fA.prototype,`pluginsResponse`,void 0),H([S({attribute:!1})],fA.prototype,`configResponse`,void 0),H([S({type:Boolean})],fA.prototype,`loading`,void 0),H([S({type:Boolean})],fA.prototype,`saving`,void 0),H([S({type:Boolean})],fA.prototype,`recoveryCommandsSupported`,void 0),H([S()],fA.prototype,`error`,void 0),H([S()],fA.prototype,`savedMessage`,void 0),H([S()],fA.prototype,`targetLabel`,void 0),H([S({attribute:!1})],fA.prototype,`onReload`,void 0),H([S({attribute:!1})],fA.prototype,`onTogglePlugin`,void 0),fA=H([x(`settings-plugins-panel`)],fA);function pA(e,t){let n=t?.config.plugins??{},r=(e?.plugins??[]).map(e=>{let t=n[e.id],r=t?.enabled??e.enabled;return{...e,enabled:r,configOnly:!1,editable:e.discovered||t!==void 0}}),i=new Set(r.map(({id:e})=>e));for(let[e,t]of Object.entries(n))i.has(e)||r.push({id:e,source:`config`,scope:`local`,machineSpecific:!1,enabled:t.enabled!==!1,discovered:!1,conflict:!1,configOnly:!0,editable:!0});return r.sort((e,t)=>e.id.localeCompare(t.id))}function mA(e){switch(e){case`active`:return`Active`;case`failed`:return`Failed`;case`incompatible`:return`Incompatible`;case`disabled`:return`Disabled`;case`missing`:return`Not active`;case`unknown`:return`Active state unavailable`}}function hA(e){switch(e){case`active`:return`success`;case`disabled`:case`missing`:return`warning`;case`failed`:case`incompatible`:return`error`;case`unknown`:return`neutral`}}function gA(e){switch(e){case`healthy`:return`success`;case`degraded`:return`warning`;case`unhealthy`:return`error`}}function _A(e){return h`Compare desired plugin config with the active sessiond startup snapshot on <strong>${e}</strong>. This is separate from installing Pi packages.`}var vA={capture:!0},yA=[{value:`auto`,label:`Auto/default`,description:`Desktop-like Enter sends; mobile, coarse pointer, or narrow screens insert a new line.`},{value:`send`,label:`Enter sends message`,description:`Enter sends the chat message; Shift+Enter adds a new line when supported.`},{value:`newline`,label:`Enter inserts new line`,description:`Enter adds a line break; Shift+Enter sends the chat message when supported.`}];function bA(){return h`Edit app shortcuts by action. Type a shortcut such as <code>mod+k</code> or <code>mod+g p</code>, record one from the keyboard, disable it with None, or reset it to the default. When shortcuts conflict, custom shortcuts win before defaults; ties are resolved by action id, and shorter shortcuts shadow longer sequences with the same prefix.`}var xA=class extends _{constructor(...e){super(...e),this.actions=[],this.loading=!1,this.saving=!1,this.error=``,this.savedMessage=``,this.drafts={},this.localError=``,this.promptEnterPreference=rD(),this.recordingListenerActive=!1,this.onRecordKeyDown=e=>{let t=this.recording;if(t===void 0)return;if(e.preventDefault(),e.stopPropagation(),e.key===`Escape`){this.stopRecording();return}let n=Zm(e);if(n===void 0){this.localError=`Press a letter, number, punctuation, function, or navigation key. Press Esc to cancel recording.`;return}if(t.tokens.length===0&&!Qm(n)){this.localError=`Start shortcuts with Ctrl/⌘ or Alt so normal typing is not captured.`;return}let r=[...t.tokens,n];this.localError=``,this.drafts={[t.actionId]:r.join(` `)},this.recording={actionId:t.actionId,tokens:r},this.armRecordingTimer()}}willUpdate(e){e.has(`configResponse`)&&this.configResponse!==void 0&&(this.drafts={},this.localError=``,this.stopRecording())}disconnectedCallback(){this.stopRecording(),super.disconnectedCallback()}render(){let e=TA(this.actions),t=this.shortcutResolutions();return h`
|
|
5212
5224
|
<settings-panel-frame
|
|
5213
5225
|
heading="Keyboard shortcuts"
|
|
5214
|
-
.description=${
|
|
5226
|
+
.description=${bA()}
|
|
5215
5227
|
actionLabel="Reload"
|
|
5216
5228
|
.actionDisabled=${this.loading}
|
|
5217
5229
|
.notices=${this.panelNotices()}
|
|
@@ -5242,7 +5254,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
5242
5254
|
<p>Choose what Enter does in this browser. Shift+Enter does the opposite when supported; automatic touch-keyboard capitalization is ignored to avoid accidental sends.</p>
|
|
5243
5255
|
</div>
|
|
5244
5256
|
<div class="prompt-enter-options" role="radiogroup" aria-label="Enter and Shift Enter behavior in the chat composer">
|
|
5245
|
-
${
|
|
5257
|
+
${yA.map(e=>h`
|
|
5246
5258
|
<label class="prompt-enter-option">
|
|
5247
5259
|
<input
|
|
5248
5260
|
type="radio"
|
|
@@ -5259,8 +5271,8 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
5259
5271
|
`)}
|
|
5260
5272
|
</div>
|
|
5261
5273
|
</section>
|
|
5262
|
-
`}updatePromptEnterPreference(e){this.promptEnterPreference=e,
|
|
5263
|
-
<article class=${
|
|
5274
|
+
`}updatePromptEnterPreference(e){this.promptEnterPreference=e,iD(e)}renderShortcutRow(e,t){let n=this.configResponse?.config.shortcuts,r=eh(e,n),i=kA(e,n),a=this.shortcutInputText(e),o=a.trim()===``?void 0:Jm(a),s=o?.ok===!0?o.shortcut:OA(e,n),c=r!==void 0,l=this.drafts[e.id]!==void 0,u=l&&a.trim()!==``?`custom`:i,d=this.recordingHint(e.id),f=wA(t);return h`
|
|
5275
|
+
<article class=${SA(t)}>
|
|
5264
5276
|
<div class="shortcut-main">
|
|
5265
5277
|
<strong>${e.title}</strong>
|
|
5266
5278
|
${e.description!==void 0&&e.description!==``?h`<small>${e.description}</small>`:null}
|
|
@@ -5270,8 +5282,8 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
5270
5282
|
<div class="shortcut-editor">
|
|
5271
5283
|
<div class="shortcut-status">
|
|
5272
5284
|
${s!==void 0&&s!==``?h`<kbd>${Xm(s)}</kbd>`:h`<span class="unassigned">${i===`disabled`?`Disabled`:`Unassigned`}</span>`}
|
|
5273
|
-
<small class=${u}>${
|
|
5274
|
-
${f===void 0?null:h`<small class=${
|
|
5285
|
+
<small class=${u}>${AA(u)}${l?` · Unsaved`:``}</small>
|
|
5286
|
+
${f===void 0?null:h`<small class=${CA(t)}>${f}</small>`}
|
|
5275
5287
|
</div>
|
|
5276
5288
|
<label class="shortcut-input-label">
|
|
5277
5289
|
<span>Shortcut</span>
|
|
@@ -5284,7 +5296,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
5284
5296
|
autocapitalize="off"
|
|
5285
5297
|
spellcheck="false"
|
|
5286
5298
|
?disabled=${this.saving}
|
|
5287
|
-
@input=${t=>{this.updateDraft(e.id,
|
|
5299
|
+
@input=${t=>{this.updateDraft(e.id,jA(t))}}
|
|
5288
5300
|
>
|
|
5289
5301
|
</label>
|
|
5290
5302
|
${d===``?null:h`<small class="recording-hint">${d}</small>`}
|
|
@@ -5296,7 +5308,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
5296
5308
|
</div>
|
|
5297
5309
|
</div>
|
|
5298
5310
|
</article>
|
|
5299
|
-
`}shortcutInputText(e){let t=this.drafts[e.id];if(t!==void 0)return t;let n=eh(e,this.configResponse?.config.shortcuts);return n===null?``:n??e.shortcut??``}recordingHint(e){let t=this.recording;return t?.actionId===e?t.tokens.length===0?`Recording: press Ctrl/⌘ or Alt with a key. Press Esc to cancel.`:`Recording: ${Xm(t.tokens.join(` `))}. Press another key to add a sequence, or wait to finish.`:``}updateDraft(e,t){this.drafts={[e]:t},this.localError=``}async saveShortcut(e){this.stopRecording();let t=Jm(this.shortcutInputText(e).trim());if(!t.ok){this.localError=t.message;return}this.localError=``,await this.saveShortcutPreference(e,t.shortcut)}async setShortcutNone(e){this.stopRecording(),this.localError=``,await this.saveShortcutPreference(e,null)}async resetShortcut(e){this.stopRecording(),this.localError=``,await this.saveShortcutPreference(e,void 0)}async saveShortcutPreference(e,t){let n={...this.configResponse?.config??{}},r=
|
|
5311
|
+
`}shortcutInputText(e){let t=this.drafts[e.id];if(t!==void 0)return t;let n=eh(e,this.configResponse?.config.shortcuts);return n===null?``:n??e.shortcut??``}recordingHint(e){let t=this.recording;return t?.actionId===e?t.tokens.length===0?`Recording: press Ctrl/⌘ or Alt with a key. Press Esc to cancel.`:`Recording: ${Xm(t.tokens.join(` `))}. Press another key to add a sequence, or wait to finish.`:``}updateDraft(e,t){this.drafts={[e]:t},this.localError=``}async saveShortcut(e){this.stopRecording();let t=Jm(this.shortcutInputText(e).trim());if(!t.ok){this.localError=t.message;return}this.localError=``,await this.saveShortcutPreference(e,t.shortcut)}async setShortcutNone(e){this.stopRecording(),this.localError=``,await this.saveShortcutPreference(e,null)}async resetShortcut(e){this.stopRecording(),this.localError=``,await this.saveShortcutPreference(e,void 0)}async saveShortcutPreference(e,t){let n={...this.configResponse?.config??{}},r=DA(n.shortcuts??{},[e.id,...e.shortcutAliases??[]]),i=t===void 0?r:{...r,[e.id]:t};Object.keys(i).length===0?delete n.shortcuts:n.shortcuts=i,await this.onSave?.(n)}shortcutResolutions(){return new Map(qm(this.actions,this.previewShortcutConfig(),{enabledOnly:!0}).map(e=>[e.action.id,e]))}previewShortcutConfig(){let e={...this.configResponse?.config.shortcuts??{}};for(let[t,n]of Object.entries(this.drafts)){let r=n.trim();if(r===``)continue;let i=Jm(r);i.ok&&(e[t]=i.shortcut)}return Object.keys(e).length===0?void 0:e}async toggleRecording(e){if(this.recording?.actionId===e){this.stopRecording();return}this.stopRecording(),this.localError=``,this.recording={actionId:e,tokens:[]},this.ensureRecordingListener(),await this.updateComplete,this.focusShortcutInput(e)}focusShortcutInput(e){for(let t of this.renderRoot.querySelectorAll(`.shortcut-input`))if(t.dataset.actionId===e){t.focus(),t.select();return}}armRecordingTimer(){this.clearRecordingTimer(),this.recordingTimer=window.setTimeout(()=>{this.recordingTimer=void 0,this.stopRecording()},Wm)}stopRecording(){this.clearRecordingTimer(),this.removeRecordingListener(),this.recording=void 0}clearRecordingTimer(){this.recordingTimer!==void 0&&(window.clearTimeout(this.recordingTimer),this.recordingTimer=void 0)}ensureRecordingListener(){this.recordingListenerActive||=(window.addEventListener(`keydown`,this.onRecordKeyDown,vA),!0)}removeRecordingListener(){this.recordingListenerActive&&=(window.removeEventListener(`keydown`,this.onRecordKeyDown,vA),!1)}static{this.styles=o`
|
|
5300
5312
|
:host { display: block; }
|
|
5301
5313
|
h3, p { margin: 0; }
|
|
5302
5314
|
h3 { font-size: 13px; line-height: 1.3; }
|
|
@@ -5352,7 +5364,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
5352
5364
|
.shortcut-row { grid-template-columns: minmax(0, 1fr); align-items: start; }
|
|
5353
5365
|
.shortcut-status, .shortcut-actions { justify-content: flex-start; }
|
|
5354
5366
|
}
|
|
5355
|
-
`}};H([S({attribute:!1})],
|
|
5367
|
+
`}};H([S({attribute:!1})],xA.prototype,`actions`,void 0),H([S({attribute:!1})],xA.prototype,`configResponse`,void 0),H([S({type:Boolean})],xA.prototype,`loading`,void 0),H([S({type:Boolean})],xA.prototype,`saving`,void 0),H([S()],xA.prototype,`error`,void 0),H([S()],xA.prototype,`savedMessage`,void 0),H([S({attribute:!1})],xA.prototype,`onReload`,void 0),H([S({attribute:!1})],xA.prototype,`onSave`,void 0),H([C()],xA.prototype,`drafts`,void 0),H([C()],xA.prototype,`localError`,void 0),H([C()],xA.prototype,`promptEnterPreference`,void 0),H([C()],xA.prototype,`recording`,void 0),xA=H([x(`settings-shortcuts-panel`)],xA);function SA(e){return e?.active===!1?`shortcut-row shadowed`:e?.active===!0&&e.shadows.length>0?`shortcut-row shadowing`:`shortcut-row`}function CA(e){return e?.active===!1?`conflict shadowed`:`conflict shadowing`}function wA(e){if(e===void 0)return;if(!e.active)return`Shadowed by ${e.shadowedBy?.action.title??`another action`}`;let t=e.shadows.length;if(t===0)return;let n=e.shadows.slice(0,2).map(e=>e.action.title).join(`, `),r=t>2?`, +${String(t-2)} more`:``;return`Shadows ${String(t)} ${t===1?`action`:`actions`}: ${n}${r}`}function TA(e){let t=new Map;for(let n of[...e].sort(EA)){let e=n.group??`Other`;t.set(e,[...t.get(e)??[],n])}return[...t.entries()].map(([e,t])=>({name:e,actions:t}))}function EA(e,t){return(e.group??`Other`).localeCompare(t.group??`Other`)||e.title.localeCompare(t.title)}function DA(e,t){let n=new Set(t);return Object.fromEntries(Object.entries(e).filter(([e])=>!n.has(e)))}function OA(e,t){let n=eh(e,t);if(n!==null)return n??e.shortcut}function kA(e,t){let n=eh(e,t);return n===null?`disabled`:n===void 0?e.shortcut===void 0||e.shortcut===``?`unassigned`:`default`:`custom`}function AA(e){switch(e){case`default`:return`Default`;case`custom`:return`Custom`;case`disabled`:return`Disabled`;case`unassigned`:return`No default`}}function jA(e){return e.target instanceof HTMLInputElement?e.target.value:``}async function MA(e){let[t,n]=await Promise.allSettled([e.loadConfig(),e.loadPlugins()]),r={error:``},i=[];return t.status===`fulfilled`?r.config=t.value:i.push(`config: ${y(t.reason)}`),n.status===`fulfilled`?r.plugins=n.value:i.push(`PI WEB plugins: ${y(n.reason)}`),i.length>0&&(r.error=`Failed to load settings: ${i.join(`; `)}`),r}async function NA(e,t){try{return{packagesResponse:await t(e.id),error:``}}catch(t){return{error:`Failed to load Pi packages from ${Xk(e)}: ${lA(y(t),e)}`}}}function PA(e,t){return{...e,config:FA(e.config,t.config),effectiveConfig:FA(e.effectiveConfig,t.effectiveConfig)}}function FA(e,t){return{...e,...t.pathAccess===void 0?{}:{pathAccess:t.pathAccess},...t.uploads===void 0?{}:{uploads:t.uploads},...t.maxUploadBytes===void 0?{}:{maxUploadBytes:t.maxUploadBytes}}}function IA(e){return e===void 0?{id:`local`,name:`local`,kind:`local`}:{id:e.id,name:e.name,kind:e.kind}}function LA(e){return e.kind===`local`?`${e.name} (local gateway)`:`${e.name} (remote machine)`}function RA(e,t){return e.kind===`local`?{state:`supported`}:t?.ok===!0?sn(t,Ht.pluginLifecycle)?{state:`supported`}:{state:`unsupported`,message:VA(e)}:{state:`unknown`}}function zA(e){return`${e.state}:${e.message??``}`}function BA(e){return e?.state===`unsupported`}function VA(e){return`Plugin lifecycle diagnostics are not available on ${e.name}. Update and restart PI WEB on that machine before loading server-backed plugins.`}function HA(e,t){let n=e.trim();return t.kind===`remote`?n===`Remote machine timeout`?`Timed out while contacting ${t.name} for selected-machine settings. The operation may still be running remotely; reload before retrying.`:n===`Remote machine unavailable`?`Could not reach ${t.name} for selected-machine settings. Check the machine connection and try again.`:n:n}function UA(e,t,n){let r=e.plugins??{},i=r[t]??{};return{plugins:{...r,[t]:{...i,enabled:n}}}}function WA(e,t){return{...e,config:GA(e.config,t.config),effectiveConfig:GA(e.effectiveConfig,t.effectiveConfig)}}function GA(e,t){return t.plugins===void 0?e:{...e,plugins:t.plugins}}var X=class extends _{constructor(...e){super(...e),this.section=`general`,this.actions=[],this.machines=[],this.machineStatuses={},this.themes=[],this.followSystemTheme=!1,this.fleetLoading=!1,this.loading=!0,this.accessLoading=!0,this.sessiondLoading=!0,this.pluginLoading=!0,this.packageLoading=!0,this.saving=!1,this.error=``,this.accessError=``,this.sessiondError=``,this.pluginError=``,this.packageError=``,this.savedMessage=``,this.packageMessage=``,this.loadRequestSeq=0,this.accessLoadRequestSeq=0,this.sessiondLoadRequestSeq=0,this.pluginLoadRequestSeq=0,this.packageLoadRequestSeq=0,this.packageMutationSeq=0}connectedCallback(){super.connectedCallback(),this.loadConfig(),this.loadAccessConfigForTarget(),this.reloadSessiondState(),this.loadPluginsForTarget(),this.loadPackagesForTarget()}disconnectedCallback(){this.savedMessageTimer!==void 0&&window.clearTimeout(this.savedMessageTimer),this.savedMessageTimer=void 0,super.disconnectedCallback()}updated(e){let t=this.settingsTarget();if(e.has(`machine`)&&IA(e.get(`machine`)).id!==t.id){this.resetAccessStateForTargetChange(),this.isConnected&&this.loadAccessConfigForTarget(t),this.resetSessiondStateForTargetChange(),this.isConnected&&this.loadSessiondConfigForTarget(t),this.resetPluginStateForTargetChange(),this.isConnected&&this.loadPluginsForTarget(t),this.resetPackageStateForTargetChange(),this.isConnected&&this.loadPackagesForTarget(t);return}e.has(`machineRuntime`)&&this.pluginLifecycleSupportNeedsReload(e.get(`machineRuntime`),t)&&(this.resetPluginStateForTargetChange(),this.isConnected&&this.loadPluginsForTarget(t))}render(){return h`
|
|
5356
5368
|
<modal-surface .onClose=${()=>this.onClose?.()} .label=${`PI WEB settings`}>
|
|
5357
5369
|
<header class="settings-header">
|
|
5358
5370
|
<div>
|
|
@@ -5405,7 +5417,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
5405
5417
|
.saving=${this.saving}
|
|
5406
5418
|
.error=${this.sessiondError}
|
|
5407
5419
|
.savedMessage=${this.savedMessage}
|
|
5408
|
-
.targetLabel=${
|
|
5420
|
+
.targetLabel=${LA(this.settingsTarget())}
|
|
5409
5421
|
.onReload=${()=>this.reloadSessiondState()}
|
|
5410
5422
|
.onSave=${e=>this.saveSessiondConfig(e)}
|
|
5411
5423
|
></settings-sessiond-panel>
|
|
@@ -5442,7 +5454,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
5442
5454
|
.recoveryCommandsSupported=${this.pluginLifecycleSupport().state===`supported`}
|
|
5443
5455
|
.error=${this.pluginError}
|
|
5444
5456
|
.savedMessage=${this.savedMessage}
|
|
5445
|
-
.targetLabel=${
|
|
5457
|
+
.targetLabel=${LA(this.settingsTarget())}
|
|
5446
5458
|
.onReload=${()=>this.loadPluginsForTarget()}
|
|
5447
5459
|
.onTogglePlugin=${(e,t)=>this.togglePlugin(e,t)}
|
|
5448
5460
|
></settings-plugins-panel>
|
|
@@ -5456,7 +5468,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
5456
5468
|
.error=${this.error}
|
|
5457
5469
|
.machineError=${this.accessError}
|
|
5458
5470
|
.savedMessage=${this.savedMessage}
|
|
5459
|
-
.targetLabel=${
|
|
5471
|
+
.targetLabel=${LA(this.settingsTarget())}
|
|
5460
5472
|
.onReload=${()=>this.loadConfig()}
|
|
5461
5473
|
.onReloadMachine=${()=>this.loadAccessConfigForTarget()}
|
|
5462
5474
|
.onSave=${e=>this.saveConfig(e)}
|
|
@@ -5467,7 +5479,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
5467
5479
|
<strong>${t}</strong>
|
|
5468
5480
|
<small>${n}</small>
|
|
5469
5481
|
</button>
|
|
5470
|
-
`}navigate(e){this.onNavigate?.(e)}async loadConfig(){let e=++this.loadRequestSeq;this.loading=!0,this.error=``;try{let t=await
|
|
5482
|
+
`}navigate(e){this.onNavigate?.(e)}async loadConfig(){let e=++this.loadRequestSeq;this.loading=!0,this.error=``;try{let t=await MA({loadConfig:()=>Ho.config(),loadPlugins:()=>Wo.plugins()});if(!this.isCurrentLoad(e))return;t.config!==void 0&&(this.configResponse=t.config),t.plugins!==void 0&&(this.pluginsResponse=t.plugins),this.error=t.error}finally{this.isCurrentLoad(e)&&(this.loading=!1)}}async loadAccessConfigForTarget(e=this.settingsTarget()){let t=++this.accessLoadRequestSeq;this.accessLoading=!0,this.accessError=``;try{let n=await Ho.config(e.id);if(!this.isCurrentAccessLoad(t,e))return;this.accessConfigResponse=n}catch(n){this.isCurrentAccessLoad(t,e)&&(this.accessError=`Failed to load file access/upload config from ${LA(e)}: ${HA(y(n),e)}`)}finally{this.isCurrentAccessLoad(t,e)&&(this.accessLoading=!1)}}async reloadSessiondState(e=this.settingsTarget()){await Promise.all([this.loadSessiondConfigForTarget(e),this.onRefreshMachineRuntime?.(e.id)])}async loadSessiondConfigForTarget(e=this.settingsTarget()){let t=++this.sessiondLoadRequestSeq;this.sessiondLoading=!0,this.sessiondError=``;try{let n=await Ho.config(e.id);if(!this.isCurrentSessiondLoad(t,e))return;this.sessiondConfigResponse=n}catch(n){this.isCurrentSessiondLoad(t,e)&&(this.sessiondError=`Failed to load session-daemon config from ${LA(e)}: ${HA(y(n),e)}`)}finally{this.isCurrentSessiondLoad(t,e)&&(this.sessiondLoading=!1)}}async loadPluginsForTarget(e=this.settingsTarget()){let t=++this.pluginLoadRequestSeq;this.pluginLoading=!0,this.pluginError=``;try{let n=this.pluginLifecycleSupport(e);if(BA(n)){try{let r=await Ho.config(e.id);if(!this.isCurrentPluginLoad(t,e))return;this.selectedPluginConfigResponse=r,this.selectedPluginsResponse=void 0,this.pluginError=n.message??`Plugin lifecycle diagnostics are not available on ${LA(e)}.`}catch(r){if(!this.isCurrentPluginLoad(t,e))return;this.pluginError=`Failed to load PI WEB plugin config from ${LA(e)}: ${HA(y(r),e)}; ${n.message??`plugin lifecycle diagnostics are unsupported`}`}return}let[r,i]=await Promise.allSettled([Ho.config(e.id),Wo.plugins(e.id)]);if(!this.isCurrentPluginLoad(t,e))return;let a=[];r.status===`fulfilled`?this.selectedPluginConfigResponse=r.value:a.push(`config: ${HA(y(r.reason),e)}`),i.status===`fulfilled`?this.selectedPluginsResponse=i.value:a.push(`PI WEB plugins: ${HA(y(i.reason),e)}`),this.pluginError=a.length===0?``:`Failed to load PI WEB plugin settings from ${LA(e)}: ${a.join(`; `)}`}finally{this.isCurrentPluginLoad(t,e)&&(this.pluginLoading=!1)}}async loadPackagesForTarget(e=this.packageTarget()){let t=++this.packageLoadRequestSeq;this.packageLoading=!0,this.packageError=``,this.packageMessage=``;try{let n=await NA(e,e=>Jo.packages(e));if(!this.isCurrentPackageLoad(t,e))return;this.packagesResponse=n.packagesResponse,this.packageError=n.error}finally{this.isCurrentPackageLoad(t,e)&&(this.packageLoading=!1)}}async togglePlugin(e,t){if(this.saving)return;let n=this.settingsTarget(),r=this.pluginLifecycleSupport(n);if(this.selectedPluginConfigResponse===void 0){this.pluginError=`Plugin config is not loaded for ${LA(n)}. Reload before changing plugin enablement.`;return}let i=UA(this.selectedPluginConfigResponse.config,e,t);this.saving=!0,this.pluginError=``,this.savedMessage=``;try{let e=await Ho.saveConfig(i,n.id);if(!this.isCurrentSettingsTarget(n))return;this.selectedPluginConfigResponse=e,n.kind===`local`&&this.configResponse!==void 0&&(this.configResponse=WA(this.configResponse,e),this.onConfigSaved?.(this.configResponse.effectiveConfig));let t;if(BA(r)?(this.selectedPluginsResponse=void 0,t=r.message??`Plugin lifecycle diagnostics are not available on ${LA(n)}.`):t=await this.refreshPluginsForTarget(n),!this.isCurrentSettingsTarget(n))return;t!==void 0&&(this.pluginError=t),this.showSavedMessage()}catch(e){this.isCurrentSettingsTarget(n)&&(this.pluginError=`Failed to save PI WEB plugin config on ${LA(n)}: ${HA(y(e),n)}`)}finally{this.saving=!1}}async saveConfig(e){if(!this.saving){this.saving=!0,this.error=``,this.savedMessage=``;try{let t=await Ho.saveConfig(e);this.configResponse=t,this.onConfigSaved?.(t.effectiveConfig),this.showSavedMessage()}catch(e){this.error=`Failed to save config: ${y(e)}`}finally{this.saving=!1}}}async saveMachineAccessConfig(e){if(this.saving)return;let t=this.settingsTarget();this.saving=!0,this.accessError=``,this.savedMessage=``;try{let n=await Ho.saveConfig(e,t.id);if(!this.isCurrentSettingsTarget(t))return;this.accessConfigResponse=n,t.kind===`local`&&this.configResponse!==void 0&&(this.configResponse=PA(this.configResponse,n),this.onConfigSaved?.(this.configResponse.effectiveConfig)),this.showSavedMessage()}catch(e){this.isCurrentSettingsTarget(t)&&(this.accessError=`Failed to save file access/upload config on ${LA(t)}: ${HA(y(e),t)}`)}finally{this.saving=!1}}async saveSessiondConfig(e){if(this.saving)return;let t=this.settingsTarget();this.saving=!0,this.sessiondError=``,this.savedMessage=``;try{let n=await Ho.saveConfig(e,t.id);if(!this.isCurrentSettingsTarget(t))return;this.sessiondConfigResponse=n,t.kind===`local`&&this.configResponse!==void 0&&(this.configResponse=Gk(this.configResponse,n)),this.showSavedMessage()}catch(e){this.isCurrentSettingsTarget(t)&&(this.sessiondError=`Failed to save session-daemon config on ${LA(t)}: ${HA(y(e),t)}`)}finally{this.saving=!1}}async installPiPackage(e){let t=this.packageTarget();await this.runPiPackageMutation({kind:`install`,source:e},`install Pi package`,t,()=>Jo.install(e,t.id))}async removePiPackage(e,t){let n=this.packageTarget();await this.runPiPackageMutation({kind:`remove`,source:e},`remove Pi package`,n,()=>Jo.remove(e,t,n.id))}async updatePiPackage(e){let t=this.packageTarget();await this.runPiPackageMutation(e===void 0?{kind:`update-all`}:{kind:`update`,source:e},`update Pi packages`,t,()=>Jo.update(e,t.id))}async runPiPackageMutation(e,t,n,r){if(this.saving)throw Error(`A settings operation is already running.`);let i=++this.packageMutationSeq;this.packageLoadRequestSeq+=1,this.packageLoading=!1,this.saving=!0,this.packageOperation=e,this.packageError=``,this.packageMessage=``;try{let e=await r();if(!this.isCurrentPackageMutation(i,n))return;this.packagesResponse={packages:e.packages};let t=Zk(n)?await this.refreshGatewayPlugins():void 0;if(!this.isCurrentPackageMutation(i,n))return;t!==void 0&&(this.packageError=t),this.packageMessage=cA(e.action,n)}catch(e){throw this.isCurrentPackageMutation(i,n)&&(this.packageError=`Failed to ${t} on ${Xk(n)}: ${lA(y(e),n)}`),e}finally{this.packageMutationSeq===i&&(this.packageOperation=void 0,this.saving=!1)}}async refreshGatewayPlugins(){try{this.pluginsResponse=await Wo.plugins();return}catch(e){return`Failed to refresh gateway PI WEB plugins: ${y(e)}`}}async refreshPluginsForTarget(e){try{let t=await Wo.plugins(e.id);this.isCurrentSettingsTarget(e)&&(this.selectedPluginsResponse=t);return}catch(t){return this.isCurrentSettingsTarget(e)&&(this.selectedPluginsResponse=void 0),`Config saved, but failed to refresh PI WEB plugins from ${LA(e)}: ${HA(y(t),e)}`}}settingsTarget(){return IA(this.machine)}packageTarget(){return this.settingsTarget()}pluginLifecycleSupport(e=this.settingsTarget()){return RA(e,this.machineRuntime)}pluginLifecycleSupportNeedsReload(e,t){let n=RA(t,e),r=this.pluginLifecycleSupport(t);return zA(n)!==zA(r)}isCurrentLoad(e){return e===this.loadRequestSeq}isCurrentAccessLoad(e,t){return e===this.accessLoadRequestSeq&&this.isCurrentSettingsTarget(t)}isCurrentSessiondLoad(e,t){return e===this.sessiondLoadRequestSeq&&this.isCurrentSettingsTarget(t)}isCurrentPluginLoad(e,t){return e===this.pluginLoadRequestSeq&&this.isCurrentSettingsTarget(t)}isCurrentPackageLoad(e,t){return e===this.packageLoadRequestSeq&&this.isCurrentPackageTarget(t)}isCurrentPackageMutation(e,t){return e===this.packageMutationSeq&&this.isCurrentPackageTarget(t)}isCurrentPackageTarget(e){return this.packageTarget().id===e.id}isCurrentSettingsTarget(e){return this.settingsTarget().id===e.id}resetAccessStateForTargetChange(){this.accessLoadRequestSeq+=1,this.accessLoading=!1,this.accessError=``,this.accessConfigResponse=void 0,this.savedMessage=``}resetSessiondStateForTargetChange(){this.sessiondLoadRequestSeq+=1,this.sessiondLoading=!1,this.sessiondError=``,this.sessiondConfigResponse=void 0,this.savedMessage=``}resetPluginStateForTargetChange(){this.pluginLoadRequestSeq+=1,this.pluginLoading=!1,this.pluginError=``,this.selectedPluginConfigResponse=void 0,this.selectedPluginsResponse=void 0,this.savedMessage=``}resetPackageStateForTargetChange(){let e=this.packageOperation!==void 0;this.packageLoadRequestSeq+=1,this.packageMutationSeq+=1,this.packageLoading=!1,this.packageOperation=void 0,this.packageMessage=``,this.packageError=``,this.packagesResponse=void 0,e&&(this.saving=!1)}showSavedMessage(){this.savedMessage=`Config saved.`,this.savedMessageTimer!==void 0&&window.clearTimeout(this.savedMessageTimer),this.savedMessageTimer=window.setTimeout(()=>{this.savedMessage===`Config saved.`&&(this.savedMessage=``),this.savedMessageTimer=void 0},3e3)}static{this.styles=o`
|
|
5471
5483
|
:host { position: fixed; inset: 0; z-index: var(--pi-layer-dialog); color: var(--pi-text); font: 14px system-ui, sans-serif; }
|
|
5472
5484
|
modal-surface { --modal-surface-backdrop-padding: max(20px, env(safe-area-inset-top)) max(20px, env(safe-area-inset-right)) max(20px, env(safe-area-inset-bottom)) max(20px, env(safe-area-inset-left)); --modal-surface-width: min(980px, 100%); --modal-surface-max-height: min(760px, 100%); --modal-surface-min-height: min(620px, 100%); --modal-surface-radius: 14px; }
|
|
5473
5485
|
.settings-header { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 14px 16px; border-bottom: 1px solid var(--pi-border); }
|
|
@@ -5494,7 +5506,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
5494
5506
|
.settings-nav button { flex: 0 0 auto; width: auto; min-width: 128px; margin: 0; }
|
|
5495
5507
|
.settings-content { padding: 14px 12px calc(18px + env(safe-area-inset-bottom)); }
|
|
5496
5508
|
}
|
|
5497
|
-
`}};H([S({attribute:!1})],X.prototype,`section`,void 0),H([S({attribute:!1})],X.prototype,`actions`,void 0),H([S({attribute:!1})],X.prototype,`machine`,void 0),H([S({attribute:!1})],X.prototype,`machineRuntime`,void 0),H([S({attribute:!1})],X.prototype,`machines`,void 0),H([S({attribute:!1})],X.prototype,`machineStatuses`,void 0),H([S({attribute:!1})],X.prototype,`onAddMachine`,void 0),H([S({attribute:!1})],X.prototype,`onRenameMachine`,void 0),H([S({attribute:!1})],X.prototype,`onRemoveMachine`,void 0),H([S({attribute:!1})],X.prototype,`themes`,void 0),H([S({attribute:!1})],X.prototype,`selectedThemeId`,void 0),H([S({attribute:!1})],X.prototype,`activeThemeId`,void 0),H([S({type:Boolean})],X.prototype,`followSystemTheme`,void 0),H([S({attribute:!1})],X.prototype,`onSelectTheme`,void 0),H([S({attribute:!1})],X.prototype,`onToggleFollowSystem`,void 0),H([S({attribute:!1})],X.prototype,`fleetReport`,void 0),H([S({type:Boolean})],X.prototype,`fleetLoading`,void 0),H([S({attribute:!1})],X.prototype,`fleetError`,void 0),H([S({attribute:!1})],X.prototype,`onRefreshFleet`,void 0),H([S({attribute:!1})],X.prototype,`onRunFleet`,void 0),H([S({attribute:!1})],X.prototype,`onNavigate`,void 0),H([S({attribute:!1})],X.prototype,`onClose`,void 0),H([S({attribute:!1})],X.prototype,`onConfigSaved`,void 0),H([S({attribute:!1})],X.prototype,`onRefreshMachineRuntime`,void 0),H([C()],X.prototype,`configResponse`,void 0),H([C()],X.prototype,`accessConfigResponse`,void 0),H([C()],X.prototype,`sessiondConfigResponse`,void 0),H([C()],X.prototype,`pluginsResponse`,void 0),H([C()],X.prototype,`selectedPluginConfigResponse`,void 0),H([C()],X.prototype,`selectedPluginsResponse`,void 0),H([C()],X.prototype,`packagesResponse`,void 0),H([C()],X.prototype,`loading`,void 0),H([C()],X.prototype,`accessLoading`,void 0),H([C()],X.prototype,`sessiondLoading`,void 0),H([C()],X.prototype,`pluginLoading`,void 0),H([C()],X.prototype,`packageLoading`,void 0),H([C()],X.prototype,`saving`,void 0),H([C()],X.prototype,`packageOperation`,void 0),H([C()],X.prototype,`error`,void 0),H([C()],X.prototype,`accessError`,void 0),H([C()],X.prototype,`sessiondError`,void 0),H([C()],X.prototype,`pluginError`,void 0),H([C()],X.prototype,`packageError`,void 0),H([C()],X.prototype,`savedMessage`,void 0),H([C()],X.prototype,`packageMessage`,void 0),X=H([x(`settings-dialog`)],X);var
|
|
5509
|
+
`}};H([S({attribute:!1})],X.prototype,`section`,void 0),H([S({attribute:!1})],X.prototype,`actions`,void 0),H([S({attribute:!1})],X.prototype,`machine`,void 0),H([S({attribute:!1})],X.prototype,`machineRuntime`,void 0),H([S({attribute:!1})],X.prototype,`machines`,void 0),H([S({attribute:!1})],X.prototype,`machineStatuses`,void 0),H([S({attribute:!1})],X.prototype,`onAddMachine`,void 0),H([S({attribute:!1})],X.prototype,`onRenameMachine`,void 0),H([S({attribute:!1})],X.prototype,`onRemoveMachine`,void 0),H([S({attribute:!1})],X.prototype,`themes`,void 0),H([S({attribute:!1})],X.prototype,`selectedThemeId`,void 0),H([S({attribute:!1})],X.prototype,`activeThemeId`,void 0),H([S({type:Boolean})],X.prototype,`followSystemTheme`,void 0),H([S({attribute:!1})],X.prototype,`onSelectTheme`,void 0),H([S({attribute:!1})],X.prototype,`onToggleFollowSystem`,void 0),H([S({attribute:!1})],X.prototype,`fleetReport`,void 0),H([S({type:Boolean})],X.prototype,`fleetLoading`,void 0),H([S({attribute:!1})],X.prototype,`fleetError`,void 0),H([S({attribute:!1})],X.prototype,`onRefreshFleet`,void 0),H([S({attribute:!1})],X.prototype,`onRunFleet`,void 0),H([S({attribute:!1})],X.prototype,`onNavigate`,void 0),H([S({attribute:!1})],X.prototype,`onClose`,void 0),H([S({attribute:!1})],X.prototype,`onConfigSaved`,void 0),H([S({attribute:!1})],X.prototype,`onRefreshMachineRuntime`,void 0),H([C()],X.prototype,`configResponse`,void 0),H([C()],X.prototype,`accessConfigResponse`,void 0),H([C()],X.prototype,`sessiondConfigResponse`,void 0),H([C()],X.prototype,`pluginsResponse`,void 0),H([C()],X.prototype,`selectedPluginConfigResponse`,void 0),H([C()],X.prototype,`selectedPluginsResponse`,void 0),H([C()],X.prototype,`packagesResponse`,void 0),H([C()],X.prototype,`loading`,void 0),H([C()],X.prototype,`accessLoading`,void 0),H([C()],X.prototype,`sessiondLoading`,void 0),H([C()],X.prototype,`pluginLoading`,void 0),H([C()],X.prototype,`packageLoading`,void 0),H([C()],X.prototype,`saving`,void 0),H([C()],X.prototype,`packageOperation`,void 0),H([C()],X.prototype,`error`,void 0),H([C()],X.prototype,`accessError`,void 0),H([C()],X.prototype,`sessiondError`,void 0),H([C()],X.prototype,`pluginError`,void 0),H([C()],X.prototype,`packageError`,void 0),H([C()],X.prototype,`savedMessage`,void 0),H([C()],X.prototype,`packageMessage`,void 0),X=H([x(`settings-dialog`)],X);var KA=class extends _{constructor(...e){super(...e),this.tool=`core:workspace.files`,this.panels=[],this.hideToolTabs=!1,this.onSelectTool=()=>void 0,this.workspaceHeaderEdges=new Vw(()=>{this.requestUpdate()}),this.onWorkspaceHeaderScroll=()=>{this.workspaceHeaderEdges.refresh()}}updated(){this.workspaceHeaderEdges.observe(this.workspaceHeaderStripElement())}disconnectedCallback(){this.workspaceHeaderEdges.dispose(),super.disconnectedCallback()}render(){if(this.workspace===void 0)return this.renderEmptyState(this.emptyState??{title:`Select a workspace`,body:`Choose a workspace to use its tools.`});let e=this.panelContext;if(e===void 0)return this.renderEmptyState({title:`Workspace tools unavailable`,body:`Try selecting the workspace again.`});let t=this.panels,n=t.find(e=>e.id===this.tool)??t[0];return h`
|
|
5498
5510
|
${this.hideToolTabs?null:h`
|
|
5499
5511
|
<header>
|
|
5500
5512
|
<div class=${this.workspaceHeaderFrameClass()}>
|
|
@@ -5524,12 +5536,12 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
5524
5536
|
<h2>${e.title}</h2>
|
|
5525
5537
|
${e.body===void 0?null:h`<p>${e.body}</p>`}
|
|
5526
5538
|
</section>
|
|
5527
|
-
`}workspaceHeaderFrameClass(){return`workspace-header-scroll-frame${
|
|
5539
|
+
`}workspaceHeaderFrameClass(){return`workspace-header-scroll-frame${zw(this.workspaceHeaderEdges.edges)}`}workspaceHeaderStripElement(){let e=this.workspaceHeaderStrip;return e instanceof HTMLElement?e:void 0}static{this.styles=i_}};H([S({attribute:!1})],KA.prototype,`workspace`,void 0),H([S({attribute:!1})],KA.prototype,`panelContext`,void 0),H([S({attribute:!1})],KA.prototype,`emptyState`,void 0),H([S()],KA.prototype,`tool`,void 0),H([S({attribute:!1})],KA.prototype,`panels`,void 0),H([S({type:Boolean})],KA.prototype,`hideToolTabs`,void 0),H([S({attribute:!1})],KA.prototype,`onSelectTool`,void 0),H([w(`.workspace-header-strip`)],KA.prototype,`workspaceHeaderStrip`,void 0),KA=H([x(`workspace-panel`)],KA);function qA(e){return e===`chat`?`sessions`:`conversation`}var JA=8,Z=class extends _{constructor(...e){super(...e),this.machines=[],this.mainView=`chat`,this.isWorking=!1,this.emphasizeSession=!1,this.renamingSession=!1,this.renameSeed=``,this.renameInputSeeded=!1,this.canScrollLeft=!1,this.canScrollRight=!1,this.onContextScroll=()=>{this.updateScrollState()}}disconnectedCallback(){this.contextItemsResizeObserver?.disconnect(),this.contextItemsResizeObserver=void 0,this.observedContextItems=void 0,this.actionsResizeObserver?.disconnect(),this.actionsResizeObserver=void 0,this.observedActions=void 0,super.disconnectedCallback()}firstUpdated(){this.observeContextItems(),this.updateScrollState(),this.observeActions()}updated(){this.observeContextItems(),this.updateScrollState(),this.observeActions();let e=this.renderRoot.querySelector(`.context-session-input`);e!==null&&!this.renameInputSeeded?(this.renameInputSeeded=!0,e.select()):e===null&&(this.renameInputSeeded=!1)}render(){return this.emphasizeSession&&this.session!==void 0?this.renderSessionLed():this.renderLocationTrail()}renderSessionLed(){let e=nj(this.workspace,this.project,this.machine,this.machines),t=ij(this.session);return h`
|
|
5528
5540
|
<nav class=${this.contextBarClass()} aria-label="Current session">
|
|
5529
5541
|
<button
|
|
5530
5542
|
type="button"
|
|
5531
5543
|
class="context-breadcrumb"
|
|
5532
|
-
title=${
|
|
5544
|
+
title=${rj(this.workspace,this.project)}
|
|
5533
5545
|
aria-label=${`Location: ${e}. Open navigation.`}
|
|
5534
5546
|
@click=${()=>{this.onOpenSection?.(this.breadcrumbSection())}}
|
|
5535
5547
|
>${e}</button>
|
|
@@ -5564,7 +5576,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
5564
5576
|
</span>`:h`<button
|
|
5565
5577
|
type="button"
|
|
5566
5578
|
class="context-session-title"
|
|
5567
|
-
title=${
|
|
5579
|
+
title=${aj(this.session)}
|
|
5568
5580
|
aria-label=${`Session: ${t}. Open session selection.`}
|
|
5569
5581
|
@click=${()=>{this.openSessions()}}
|
|
5570
5582
|
>${t}</button>`}
|
|
@@ -5583,33 +5595,33 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
5583
5595
|
><span class="context-working-dot"></span><span class="context-working-dot"></span><span class="context-working-dot"></span></span>`:null}
|
|
5584
5596
|
${this.hasContextActions()?h`<div class="context-actions inline">${this.renderQuickSwitchButton()}${this.renderToolsButton()}${this.renderActionsButton()}${this.refreshControl}</div>`:null}
|
|
5585
5597
|
</nav>
|
|
5586
|
-
`}onRenameKeydown(e){if(e.key===`Escape`){e.preventDefault(),this.renamingSession=!1;return}e.key===`Enter`&&(e.preventDefault(),this.commitRename())}commitRename(){let e=(this.renderRoot.querySelector(`.context-session-input`)?.value??``).trim();this.renamingSession=!1,!(e===``||e===this.renameSeed||e===this.session?.name)&&this.onRenameSession?.(e)}breadcrumbSection(){return this.workspace===void 0?this.project===void 0&&
|
|
5598
|
+
`}onRenameKeydown(e){if(e.key===`Escape`){e.preventDefault(),this.renamingSession=!1;return}e.key===`Enter`&&(e.preventDefault(),this.commitRename())}commitRename(){let e=(this.renderRoot.querySelector(`.context-session-input`)?.value??``).trim();this.renamingSession=!1,!(e===``||e===this.renameSeed||e===this.session?.name)&&this.onRenameSession?.(e)}breadcrumbSection(){return this.workspace===void 0?this.project===void 0&&YA(this.machines)?`machines`:`projects`:`workspaces`}renderLocationTrail(){let e=YA(this.machines),t=XA(this.machine),n=QA(this.project),r=ej(this.workspace),i=ij(this.session),a=this.session!==void 0;return h`
|
|
5587
5599
|
<nav class=${this.contextBarClass()} aria-label="Current location">
|
|
5588
5600
|
<span class="context-bar-label">Location</span>
|
|
5589
5601
|
<ol class="context-items" @scroll=${this.onContextScroll}>
|
|
5590
5602
|
${e?h`
|
|
5591
5603
|
<li class="context-item">
|
|
5592
|
-
<button type="button" class=${this.machine===void 0?`context-chip empty`:`context-chip`} title=${
|
|
5604
|
+
<button type="button" class=${this.machine===void 0?`context-chip empty`:`context-chip`} title=${ZA(this.machine)} aria-label=${`Machine: ${t}. Open machine selection.`} @click=${()=>{this.onOpenSection?.(`machines`)}}>
|
|
5593
5605
|
<span class="context-kind">Machine</span>
|
|
5594
5606
|
<span class="context-value">${t}</span>
|
|
5595
5607
|
</button>
|
|
5596
5608
|
</li>
|
|
5597
5609
|
`:null}
|
|
5598
5610
|
<li class="context-item">
|
|
5599
|
-
<button type="button" class=${this.project===void 0?`context-chip empty`:`context-chip`} title=${
|
|
5611
|
+
<button type="button" class=${this.project===void 0?`context-chip empty`:`context-chip`} title=${$A(this.project)} aria-label=${`Project: ${n}. Open project selection.`} @click=${()=>{this.onOpenSection?.(`projects`)}}>
|
|
5600
5612
|
<span class="context-kind">Project</span>
|
|
5601
5613
|
<span class="context-value">${n}</span>
|
|
5602
5614
|
</button>
|
|
5603
5615
|
</li>
|
|
5604
5616
|
<li class="context-item">
|
|
5605
|
-
<button type="button" class=${this.workspace===void 0?`context-chip empty`:`context-chip`} title=${
|
|
5617
|
+
<button type="button" class=${this.workspace===void 0?`context-chip empty`:`context-chip`} title=${tj(this.workspace)} aria-label=${`Workspace: ${r}. Open workspace selection.`} @click=${()=>{this.onOpenSection?.(`workspaces`)}}>
|
|
5606
5618
|
<span class="context-kind">Workspace</span>
|
|
5607
5619
|
<span class="context-value">${r}</span>
|
|
5608
5620
|
</button>
|
|
5609
5621
|
</li>
|
|
5610
5622
|
${a?h`
|
|
5611
5623
|
<li class="context-item">
|
|
5612
|
-
<button type="button" class="context-chip" title=${
|
|
5624
|
+
<button type="button" class="context-chip" title=${aj(this.session)} aria-label=${`Session: ${i}. ${qA(this.mainView)===`conversation`?`Back to the conversation.`:`Open session selection.`}`} @click=${()=>{this.followSessionChip()}}>
|
|
5613
5625
|
<span class="context-kind">Session</span>
|
|
5614
5626
|
<span class="context-value session-value">${i}</span>
|
|
5615
5627
|
</button>
|
|
@@ -5618,7 +5630,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
5618
5630
|
</ol>
|
|
5619
5631
|
${this.hasContextActions()?h`<div class="context-actions">${this.renderQuickSwitchButton()}${this.renderToolsButton()}${this.renderActionsButton()}${this.refreshControl}</div>`:null}
|
|
5620
5632
|
</nav>
|
|
5621
|
-
`}followSessionChip(){if(
|
|
5633
|
+
`}followSessionChip(){if(qA(this.mainView)===`conversation`&&this.onShowConversation!==void 0){this.onShowConversation();return}this.openSessions()}openSessions(){if(this.onQuickSwitch!==void 0){this.onQuickSwitch();return}this.onOpenSection?.(`sessions`)}renderQuickSwitchButton(){return this.onQuickSwitch===void 0?null:h`
|
|
5622
5634
|
<button type="button" class="context-action-button" title="Sessions" aria-label="Open sessions" @click=${e=>{e.stopPropagation(),this.onQuickSwitch?.()}}>
|
|
5623
5635
|
<svg class="context-action-icon" viewBox="0 0 24 24" aria-hidden="true" focusable="false" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
5624
5636
|
<path d="M4 6h16M4 12h16M4 18h10"></path>
|
|
@@ -5636,7 +5648,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
5636
5648
|
<path d="M13 2 4 14h7l-1 8 10-13h-7V2Z"></path>
|
|
5637
5649
|
</svg>
|
|
5638
5650
|
</button>
|
|
5639
|
-
`}contextBarClass(){let e=[`context-bar`];return this.hasContextActions()&&e.push(`has-context-actions`),this.canScrollLeft&&e.push(`can-scroll-left`),this.canScrollRight&&e.push(`can-scroll-right`),e.join(` `)}hasContextActions(){return this.refreshControl!==void 0||this.onShowActions!==void 0||this.onQuickSwitch!==void 0||this.onOpenTools!==void 0}observeContextItems(){let e=this.contextItemsElement();this.observedContextItems!==e&&(this.contextItemsResizeObserver?.disconnect(),this.observedContextItems=e,this.contextItemsResizeObserver=void 0,!(e===void 0||typeof ResizeObserver>`u`)&&(this.contextItemsResizeObserver=new ResizeObserver(()=>{this.updateScrollState()}),this.contextItemsResizeObserver.observe(e)))}observeActions(){let e=this.renderRoot.querySelector(`.context-actions`),t=e instanceof HTMLElement?e:void 0;this.observedActions!==t&&(this.actionsResizeObserver?.disconnect(),this.observedActions=t,this.actionsResizeObserver=void 0,!(t===void 0||typeof ResizeObserver>`u`)&&(this.actionsResizeObserver=new ResizeObserver(()=>{this.publishActionsRoom()}),this.actionsResizeObserver.observe(t)))}publishActionsRoom(){let e=this.renderRoot.querySelector(`.context-actions`),t=e===null?0:Math.ceil(e.getBoundingClientRect().width)+
|
|
5651
|
+
`}contextBarClass(){let e=[`context-bar`];return this.hasContextActions()&&e.push(`has-context-actions`),this.canScrollLeft&&e.push(`can-scroll-left`),this.canScrollRight&&e.push(`can-scroll-right`),e.join(` `)}hasContextActions(){return this.refreshControl!==void 0||this.onShowActions!==void 0||this.onQuickSwitch!==void 0||this.onOpenTools!==void 0}observeContextItems(){let e=this.contextItemsElement();this.observedContextItems!==e&&(this.contextItemsResizeObserver?.disconnect(),this.observedContextItems=e,this.contextItemsResizeObserver=void 0,!(e===void 0||typeof ResizeObserver>`u`)&&(this.contextItemsResizeObserver=new ResizeObserver(()=>{this.updateScrollState()}),this.contextItemsResizeObserver.observe(e)))}observeActions(){let e=this.renderRoot.querySelector(`.context-actions`),t=e instanceof HTMLElement?e:void 0;this.observedActions!==t&&(this.actionsResizeObserver?.disconnect(),this.observedActions=t,this.actionsResizeObserver=void 0,!(t===void 0||typeof ResizeObserver>`u`)&&(this.actionsResizeObserver=new ResizeObserver(()=>{this.publishActionsRoom()}),this.actionsResizeObserver.observe(t)))}publishActionsRoom(){let e=this.renderRoot.querySelector(`.context-actions`),t=e===null?0:Math.ceil(e.getBoundingClientRect().width)+JA;this.style.setProperty(`--pi-context-actions-room`,`${String(t)}px`)}updateScrollState(){let e=this.contextItemsElement(),t=e===void 0?0:Math.max(0,e.scrollWidth-e.clientWidth),n=e!==void 0&&e.scrollLeft>1,r=e!==void 0&&t-e.scrollLeft>1;this.canScrollLeft!==n&&(this.canScrollLeft=n),this.canScrollRight!==r&&(this.canScrollRight=r)}contextItemsElement(){let e=this.contextItems;return e instanceof HTMLElement?e:void 0}static{this.styles=o`
|
|
5640
5652
|
/* The edit replaces the title in place; nothing else may move under the
|
|
5641
5653
|
user's thumb, so the row keeps one line and the controls beside it keep
|
|
5642
5654
|
their slots. 40px + 16px font keep the field tappable and free of the
|
|
@@ -5765,7 +5777,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
5765
5777
|
The row scrolls, so the extra width costs the others nothing. */
|
|
5766
5778
|
.context-value.session-value { max-width: min(70vw, 32ch); }
|
|
5767
5779
|
button { cursor: pointer; }
|
|
5768
|
-
`}};H([S({attribute:!1})],Z.prototype,`machines`,void 0),H([S({attribute:!1})],Z.prototype,`machine`,void 0),H([S({attribute:!1})],Z.prototype,`project`,void 0),H([S({attribute:!1})],Z.prototype,`workspace`,void 0),H([S({attribute:!1})],Z.prototype,`session`,void 0),H([S({attribute:!1})],Z.prototype,`refreshControl`,void 0),H([S({attribute:!1})],Z.prototype,`onOpenSection`,void 0),H([S({attribute:!1})],Z.prototype,`onShowActions`,void 0),H([S({attribute:!1})],Z.prototype,`onQuickSwitch`,void 0),H([S({attribute:!1})],Z.prototype,`mainView`,void 0),H([S({attribute:!1})],Z.prototype,`onShowConversation`,void 0),H([S({attribute:!1})],Z.prototype,`onOpenTools`,void 0),H([S({attribute:!1})],Z.prototype,`onRenameSession`,void 0),H([S({type:Boolean})],Z.prototype,`isWorking`,void 0),H([S({type:Boolean})],Z.prototype,`emphasizeSession`,void 0),H([w(`.context-items`)],Z.prototype,`contextItems`,void 0),H([C()],Z.prototype,`renamingSession`,void 0),H([C()],Z.prototype,`renameSeed`,void 0),H([C()],Z.prototype,`canScrollLeft`,void 0),H([C()],Z.prototype,`canScrollRight`,void 0),Z=H([x(`app-context-bar`)],Z);function
|
|
5780
|
+
`}};H([S({attribute:!1})],Z.prototype,`machines`,void 0),H([S({attribute:!1})],Z.prototype,`machine`,void 0),H([S({attribute:!1})],Z.prototype,`project`,void 0),H([S({attribute:!1})],Z.prototype,`workspace`,void 0),H([S({attribute:!1})],Z.prototype,`session`,void 0),H([S({attribute:!1})],Z.prototype,`refreshControl`,void 0),H([S({attribute:!1})],Z.prototype,`onOpenSection`,void 0),H([S({attribute:!1})],Z.prototype,`onShowActions`,void 0),H([S({attribute:!1})],Z.prototype,`onQuickSwitch`,void 0),H([S({attribute:!1})],Z.prototype,`mainView`,void 0),H([S({attribute:!1})],Z.prototype,`onShowConversation`,void 0),H([S({attribute:!1})],Z.prototype,`onOpenTools`,void 0),H([S({attribute:!1})],Z.prototype,`onRenameSession`,void 0),H([S({type:Boolean})],Z.prototype,`isWorking`,void 0),H([S({type:Boolean})],Z.prototype,`emphasizeSession`,void 0),H([w(`.context-items`)],Z.prototype,`contextItems`,void 0),H([C()],Z.prototype,`renamingSession`,void 0),H([C()],Z.prototype,`renameSeed`,void 0),H([C()],Z.prototype,`canScrollLeft`,void 0),H([C()],Z.prototype,`canScrollRight`,void 0),Z=H([x(`app-context-bar`)],Z);function YA(e){return e.length>0}function XA(e){return e===void 0?`No machine`:`${e.name}${e.kind===`remote`?` · remote`:``}`}function ZA(e){return e===void 0?`No machine selected`:e.baseUrl??e.name}function QA(e){return e?.name??`No project`}function $A(e){return e===void 0?`No project selected`:`${e.name} — ${e.path}`}function ej(e){return e===void 0?`No workspace`:`${e.label}${e.isMain?` · main`:``}`}function tj(e){return e===void 0?`No workspace selected`:`${e.label}${e.isMain?` · main`:``} — ${e.path}`}function nj(e,t,n,r){let i=YA(r)&&n!==void 0?`${n.name} / `:``;return e===void 0?t===void 0?i===``?`No workspace`:i.replace(/ \/ $/u,``):`${i}${t.name}`:`${i}${e.isMain&&t!==void 0?t.name:e.label}`}function rj(e,t){return e===void 0?t===void 0?`No workspace selected`:t.path:e.path}function ij(e){return e===void 0?`No session`:jS(e)}function aj(e){return e===void 0?`No session selected`:e.path}var oj=class extends _{constructor(...e){super(...e),this.tabs=[]}render(){return h`
|
|
5769
5781
|
<modal-surface .onClose=${()=>this.onClose?.()} .label=${`Views`} .initialFocus=${`button`}>
|
|
5770
5782
|
<header><h2>Go to</h2></header>
|
|
5771
5783
|
<div class="body">
|
|
@@ -5804,7 +5816,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
5804
5816
|
.tool-badge { min-width: 20px; border-radius: var(--pi-radius-pill); background: var(--pi-surface-hover); color: var(--pi-text-secondary); padding: 1px var(--pi-space-4); font-size: var(--pi-text-xs); text-align: center; }
|
|
5805
5817
|
.tool-badge.unread { background: var(--pi-selection-bg); color: var(--pi-accent); }
|
|
5806
5818
|
.tool-check { color: var(--pi-accent); }
|
|
5807
|
-
`}};H([S({attribute:!1})],
|
|
5819
|
+
`}};H([S({attribute:!1})],oj.prototype,`tabs`,void 0),H([S({attribute:!1})],oj.prototype,`selectedView`,void 0),H([S({attribute:!1})],oj.prototype,`onSelect`,void 0),H([S({attribute:!1})],oj.prototype,`onClose`,void 0),oj=H([x(`app-mobile-tool-sheet`)],oj);var sj=`PI WEB`;function cj(e){let t=e?.label.trim();if(!(t===void 0||t===``))return t.split(`/`).filter(e=>e!==``).pop()??t}function lj(e){if(e.mainView===`chat`&&e.selectedSession!==void 0){let t=jS(e.selectedSession).trim();if(t!==``)return t}let t=cj(e.selectedWorkspace);if(t!==void 0)return t;let n=e.selectedProject?.name.trim();if(n!==void 0&&n!==``)return n;let r=e.selectedMachine;if(r!==void 0&&r.kind!==`local`){let e=r.name.trim();if(e!==``)return e}return sj}function uj(e,t=40){let n=lj(e);return n.length<=t?n:`${n.slice(0,t-1).trimEnd()}…`}var dj=class extends _{constructor(...e){super(...e),this.machines=[]}render(){return h`
|
|
5808
5820
|
<nav aria-label="Current context">
|
|
5809
5821
|
${this.machines.length>0?this.renderStep(`machines`,`Machine`,this.selectedMachine?.name,this.onAddMachine,`Add machine`):g}
|
|
5810
5822
|
${this.renderStep(`projects`,`Project`,this.selectedProject?.name,this.onAddProject,`Add project`)}
|
|
@@ -5856,12 +5868,12 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
5856
5868
|
.step.open .add { border-left-color: color-mix(in srgb, var(--pi-accent) 40%, var(--pi-border)); }
|
|
5857
5869
|
@media (pointer: coarse) { .add { width: 40px; } }
|
|
5858
5870
|
@media (hover: hover) { .add:hover { color: var(--pi-text); } }
|
|
5859
|
-
`}};H([S({attribute:!1})],
|
|
5871
|
+
`}};H([S({attribute:!1})],dj.prototype,`machines`,void 0),H([S({attribute:!1})],dj.prototype,`selectedMachine`,void 0),H([S({attribute:!1})],dj.prototype,`selectedProject`,void 0),H([S({attribute:!1})],dj.prototype,`selectedWorkspace`,void 0),H([S({attribute:!1})],dj.prototype,`openSection`,void 0),H([S({attribute:!1})],dj.prototype,`onOpenSection`,void 0),H([S({attribute:!1})],dj.prototype,`onAddMachine`,void 0),H([S({attribute:!1})],dj.prototype,`onAddProject`,void 0),dj=H([x(`app-context-switcher`)],dj);var fj=class extends _{constructor(...e){super(...e),this.machines=[],this.statuses={},this.statusSnapshots={},this.open=!1,this.menuStyle=``,this.actionMenuStyle=``,this.onDocumentClick=e=>{e.composedPath().includes(this)||(this.open=!1,this.openActionsMachineId=void 0)}}connectedCallback(){super.connectedCallback(),document.addEventListener(`click`,this.onDocumentClick)}disconnectedCallback(){document.removeEventListener(`click`,this.onDocumentClick),super.disconnectedCallback()}updated(e){e.has(`machines`)&&this.open&&this.selectedMachine()===void 0&&(this.open=!1),e.has(`machines`)&&this.openActionsMachineId!==void 0&&!this.machines.some(e=>e.id===this.openActionsMachineId)&&(this.openActionsMachineId=void 0)}async focusSelectedOrFirst(){let e=this.switcherButton();return e!==null&&await this.openMenuAndFocusOption(e)}render(){let e=this.selectedMachine();if(e===void 0)return null;let t=pj(e,this.statuses),n=e.name;return h`
|
|
5860
5872
|
<div class="machine-switcher">
|
|
5861
5873
|
<button
|
|
5862
5874
|
type="button"
|
|
5863
5875
|
class="machine-switcher-button"
|
|
5864
|
-
title=${
|
|
5876
|
+
title=${hj(e)}
|
|
5865
5877
|
aria-label=${this.machineSwitcherAriaLabel(e)}
|
|
5866
5878
|
aria-expanded=${String(this.open)}
|
|
5867
5879
|
@click=${e=>{this.toggleMenu(e.currentTarget)}}
|
|
@@ -5872,7 +5884,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
5872
5884
|
<span class="machine-switcher-kicker">Machine</span>
|
|
5873
5885
|
<span class="machine-switcher-label">${n}</span>
|
|
5874
5886
|
</span>
|
|
5875
|
-
<span class=${`machine-status ${t}`}>${
|
|
5887
|
+
<span class=${`machine-status ${t}`}>${mj(t)}</span>
|
|
5876
5888
|
<span class="machine-chevron" aria-hidden="true">▾</span>
|
|
5877
5889
|
</button>
|
|
5878
5890
|
${this.open?h`
|
|
@@ -5881,17 +5893,17 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
5881
5893
|
</div>
|
|
5882
5894
|
`:null}
|
|
5883
5895
|
</div>
|
|
5884
|
-
`}renderMachineOption(e){let t=this.selected?.id===e.id,n=
|
|
5896
|
+
`}renderMachineOption(e){let t=this.selected?.id===e.id,n=pj(e,this.statuses),r=uS(e)&&this.onRemove!==void 0,i=this.openActionsMachineId===e.id;return h`
|
|
5885
5897
|
<div class=${`machine-option ${t?`selected`:``} ${r?``:`no-actions`}`}>
|
|
5886
5898
|
<button
|
|
5887
5899
|
type="button"
|
|
5888
5900
|
class="machine-option-main"
|
|
5889
|
-
title=${
|
|
5901
|
+
title=${hj(e)}
|
|
5890
5902
|
data-machine-id=${e.id}
|
|
5891
5903
|
@click=${()=>{this.select(e)}}
|
|
5892
5904
|
@keydown=${e=>{this.handleMachineOptionKeydown(e)}}
|
|
5893
5905
|
>
|
|
5894
|
-
<span class="machine-option-name">${this.renderActivity(e)}<span>${e.name}</span><span class=${`machine-option-status ${n}`}><span class="dot" aria-hidden="true"></span>${
|
|
5906
|
+
<span class="machine-option-name">${this.renderActivity(e)}<span>${e.name}</span><span class=${`machine-option-status ${n}`}><span class="dot" aria-hidden="true"></span>${mj(n)}</span></span>
|
|
5895
5907
|
<small>${e.kind===`local`?`Local Pi Web`:e.baseUrl??`Remote Pi Web`}</small>
|
|
5896
5908
|
</button>
|
|
5897
5909
|
${r?h`
|
|
@@ -5912,7 +5924,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
5912
5924
|
</div>
|
|
5913
5925
|
`:null}
|
|
5914
5926
|
</div>
|
|
5915
|
-
`}renderActivity(e){let t=this.statusSnapshots[e.id]?.machine,n=
|
|
5927
|
+
`}renderActivity(e){let t=this.statusSnapshots[e.id]?.machine,n=pj(e,this.statuses),r=n===`offline`||n===`error`?void 0:qx(t),i=Jx(t)?`Unread sessions on this machine`:void 0;return Kx(r,r===`terminal`?`Machine terminal active`:`Machine active`,i)}selectedMachine(){return this.selected??this.machines.find(e=>e.id===`local`)??this.machines[0]}machineSwitcherAriaLabel(e){return`Machine: ${e.name}. Switch machine.`}switcherButton(){return this.renderRoot.querySelector(`.machine-switcher-button`)}handleSwitcherButtonKeydown(e){if(e.key===`ArrowDown`||e.key===`ArrowUp`){e.preventDefault(),e.stopPropagation(),this.openMenuAndFocusOption(e.currentTarget);return}if(e.key===`ArrowRight`&&this.onFocusNextSection!==void 0){e.preventDefault(),e.stopPropagation(),this.onFocusNextSection();return}e.key===`Escape`&&this.onCancelKeyboardNavigation!==void 0&&(e.preventDefault(),e.stopPropagation(),this.onCancelKeyboardNavigation())}handleMachineOptionKeydown(e){if(e.key===`ArrowUp`){this.focusRelativeMachineOption(e.currentTarget,-1,e);return}if(e.key===`ArrowDown`){this.focusRelativeMachineOption(e.currentTarget,1,e);return}if(e.key===`Home`){this.focusIndexedMachineOption(0,e);return}if(e.key===`End`){this.focusIndexedMachineOption(-1,e);return}if(e.key===`ArrowRight`&&this.onFocusNextSection!==void 0){e.preventDefault(),e.stopPropagation(),this.open=!1,this.onFocusNextSection();return}(e.key===`ArrowLeft`||e.key===`Escape`)&&(e.preventDefault(),e.stopPropagation(),this.open=!1,this.updateComplete.then(()=>{this.focusSwitcherButton()}))}toggleMenu(e){this.menuStyle=gj(e),this.open=!this.open,this.openActionsMachineId=void 0}focusSwitcherButton(){let e=this.switcherButton();return e===null?!1:(e.focus(),!0)}async openMenuAndFocusOption(e){return this.menuStyle=gj(e),this.open=!0,this.openActionsMachineId=void 0,await this.updateComplete,this.focusSelectedMachineOption()}focusSelectedMachineOption(){let e=this.renderRoot.querySelector(`.machine-option.selected .machine-option-main`),t=this.machineOptionButtons()[0],n=e??t;return n===void 0?!1:(n.focus(),n.scrollIntoView({block:`nearest`}),!0)}focusRelativeMachineOption(e,t,n){n.preventDefault(),n.stopPropagation();let r=this.machineOptionButtons();if(r.length===0||!(e instanceof HTMLElement))return;let i=r.indexOf(e);i<0||this.focusMachineOptionAt(i+t)}focusIndexedMachineOption(e,t){t.preventDefault(),t.stopPropagation(),this.focusMachineOptionAt(e<0?this.machineOptionButtons().length-1:e)}focusMachineOptionAt(e){let t=this.machineOptionButtons(),n=t[Math.min(Math.max(e,0),t.length-1)];n?.focus(),n?.scrollIntoView({block:`nearest`})}machineOptionButtons(){return Array.from(this.renderRoot.querySelectorAll(`.machine-option-main`))}toggleActionsMenu(e,t){if(this.openActionsMachineId===e){this.openActionsMachineId=void 0;return}this.actionMenuStyle=Hx(t,{constrainTo:`viewport`}),this.openActionsMachineId=e}select(e){this.open=!1,this.openActionsMachineId=void 0,this.onSelect?.(e)}removeMachine(e){this.open=!1,this.openActionsMachineId=void 0,this.onRemove?.(e)}static{this.styles=o`
|
|
5916
5928
|
:host { min-width: 0; display: block; }
|
|
5917
5929
|
/* A display rule on :host outranks the HTML hidden attribute, so an element
|
|
5918
5930
|
rendered with the hidden attribute stays on screen unless this says so.
|
|
@@ -5968,7 +5980,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
5968
5980
|
.machine-option-actions-panel button.danger:focus-visible { background: color-mix(in srgb, var(--pi-danger) 14%, transparent); }
|
|
5969
5981
|
@media (hover: hover) { .machine-option-actions-panel button.danger:hover { background: color-mix(in srgb, var(--pi-danger) 14%, transparent); } }
|
|
5970
5982
|
@keyframes pulse { 0%, 100% { opacity: .55; } 50% { opacity: 1; } }
|
|
5971
|
-
`}};H([S({attribute:!1})],
|
|
5983
|
+
`}};H([S({attribute:!1})],fj.prototype,`machines`,void 0),H([S({attribute:!1})],fj.prototype,`selected`,void 0),H([S({attribute:!1})],fj.prototype,`statuses`,void 0),H([S({attribute:!1})],fj.prototype,`statusSnapshots`,void 0),H([S({attribute:!1})],fj.prototype,`onSelect`,void 0),H([S({attribute:!1})],fj.prototype,`onRemove`,void 0),H([S({attribute:!1})],fj.prototype,`onFocusNextSection`,void 0),H([S({attribute:!1})],fj.prototype,`onCancelKeyboardNavigation`,void 0),H([C()],fj.prototype,`open`,void 0),H([C()],fj.prototype,`menuStyle`,void 0),H([C()],fj.prototype,`openActionsMachineId`,void 0),H([C()],fj.prototype,`actionMenuStyle`,void 0),fj=H([x(`machine-switcher`)],fj);function pj(e,t){return t[e.id]?.status??e.status??`unknown`}function mj(e){return e===`online`?`online`:e===`offline`?`offline`:e===`error`?`error`:`unknown`}function hj(e){return e.baseUrl??e.name}function gj(e){if(typeof HTMLElement>`u`||typeof window>`u`||!(e instanceof HTMLElement))return``;let t=e.getBoundingClientRect(),n=Math.min(280,Math.max(0,window.innerWidth-16)),r=Math.min(Math.max(8,t.left),Math.max(8,window.innerWidth-8-n)),i=Math.max(0,window.innerHeight-t.bottom-8);return[`top: ${_j(t.bottom)};`,`left: ${_j(r)};`,`width: ${_j(n)};`,`max-height: ${_j(i)};`].join(` `)}function _j(e){return`${String(Math.round(e))}px`}var Q=class extends _{constructor(...e){super(...e),this.machines=[],this.machineStatuses={},this.machineStatusSnapshots={},this.projects=[],this.projectsLoad=`unloaded`,this.workspaces=[],this.sessions=[],this.sessionsLoad=`unloaded`,this.sessionActivities={},this.sessionStatuses={},this.sendingPrompts={},this.unreadSessionIds=new Set,this.deletingWorkspaceIds=[],this.workspaceLabelItems=()=>[],this.collapsible=!1,this.compact=!1,this.machinesCollapsed=!1,this.projectsCollapsed=!1,this.workspacesCollapsed=!1,this.sessionsCollapsed=!1,this.startingSessionCount=0,this.canStartSession=!1,this.goalsLoad={state:`unloaded`,key:void 0,data:[]},this.canRunGoalCommands=!0,this.goalCommandInFlight=!1}async focusSection(e){switch(await this.updateComplete,e){case`machines`:return await this.focusNavigableSection(this.compact?this.machineList:this.machineSwitcher);case`projects`:return await this.focusNavigableSection(this.projectList);case`workspaces`:return await this.focusNavigableSection(this.workspaceList);case`sessions`:return await this.focusNavigableSection(this.sessionList)}}headerName(){return lj({mainView:this.selectedSession===void 0?`navigation`:`chat`,selectedMachine:this.selectedMachine,selectedProject:this.selectedProject,selectedWorkspace:this.selectedWorkspace,selectedSession:this.selectedSession})}render(){if(this.compact)return this.renderCompact();let e=this.compactVisibleSection();return h`
|
|
5972
5984
|
<header>
|
|
5973
5985
|
<strong title=${this.headerName()}>${this.headerName()}</strong>
|
|
5974
5986
|
<div class="header-actions">
|
|
@@ -5994,7 +6006,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
5994
6006
|
${e===`sessions`?this.renderGoalPanel():null}
|
|
5995
6007
|
`}renderCompact(){return h`
|
|
5996
6008
|
<div class="compact-shell">
|
|
5997
|
-
${
|
|
6009
|
+
${vj(this.machines)?h`
|
|
5998
6010
|
<machine-switcher
|
|
5999
6011
|
hidden
|
|
6000
6012
|
.machines=${this.machines}
|
|
@@ -6026,7 +6038,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
6026
6038
|
${this.renderWorkspaceList(!1,e!==`workspaces`)}
|
|
6027
6039
|
${this.renderSessionList(!1,e!==`sessions`)}
|
|
6028
6040
|
${e===`sessions`?this.renderGoalPanel():null}
|
|
6029
|
-
`}openSection(e){e===`machines`?this.onToggleMachines?.():e===`projects`?this.onToggleProjects?.():e===`workspaces`?this.onToggleWorkspaces?.():this.onToggleSessions?.()}compactVisibleSection(){return
|
|
6041
|
+
`}openSection(e){e===`machines`?this.onToggleMachines?.():e===`projects`?this.onToggleProjects?.():e===`workspaces`?this.onToggleWorkspaces?.():this.onToggleSessions?.()}compactVisibleSection(){return vj(this.machines)&&!this.machinesCollapsed?`machines`:this.projectsCollapsed?this.workspacesCollapsed?!this.sessionsCollapsed||this.selectedWorkspace!==void 0?`sessions`:this.selectedProject===void 0?`projects`:`workspaces`:`workspaces`:`projects`}renderMachineList(e,t=!1){return vj(this.machines)?h`
|
|
6030
6042
|
<machine-list
|
|
6031
6043
|
?hidden=${t}
|
|
6032
6044
|
.machines=${this.machines}
|
|
@@ -6128,7 +6140,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
6128
6140
|
.onFocusNextSection=${()=>{this.focusNextFrom(`sessions`)}}
|
|
6129
6141
|
.onCancelKeyboardNavigation=${()=>{this.cancelKeyboardNavigation()}}
|
|
6130
6142
|
></session-list>
|
|
6131
|
-
`}selectedMachineStatusSnapshot(){return this.machineStatusSnapshots[R({selectedMachine:this.selectedMachine})]}async focusNavigableSection(e){return e!==void 0&&await e.focusSelectedOrFirst()}runMaybeAsync(e){e?.()instanceof Promise}focusPreviousFrom(e){let t=
|
|
6143
|
+
`}selectedMachineStatusSnapshot(){return this.machineStatusSnapshots[R({selectedMachine:this.selectedMachine})]}async focusNavigableSection(e){return e!==void 0&&await e.focusSelectedOrFirst()}runMaybeAsync(e){e?.()instanceof Promise}focusPreviousFrom(e){let t=yj(e,this.machines);t!==void 0&&this.onFocusNavigationTarget?.(t)}focusNextFrom(e){this.onFocusNavigationTarget?.(bj(e,this.machines))}cancelKeyboardNavigation(){this.onCancelKeyboardNavigation?.()}static{this.styles=o`
|
|
6132
6144
|
|
|
6133
6145
|
/* Shell styles do not cross a shadow boundary, so the tap-highlight
|
|
6134
6146
|
suppression is repeated for components that define their own. */
|
|
@@ -6160,7 +6172,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
6160
6172
|
task list cannot push the sessions it belongs to off-screen. */
|
|
6161
6173
|
goal-panel { flex: 0 1 auto; min-height: 0; max-height: var(--pi-nav-goals-max-height, 26vh); overflow: auto; border-top: 1px solid var(--pi-border-muted); }
|
|
6162
6174
|
button { border: 1px solid var(--pi-border); border-radius: 8px; background: var(--pi-surface); color: var(--pi-text); padding: 7px 9px; cursor: pointer; }
|
|
6163
|
-
`}};H([S({attribute:!1})],Q.prototype,`machines`,void 0),H([S({attribute:!1})],Q.prototype,`selectedMachine`,void 0),H([S({attribute:!1})],Q.prototype,`machineStatuses`,void 0),H([S({attribute:!1})],Q.prototype,`machineStatusSnapshots`,void 0),H([S({attribute:!1})],Q.prototype,`projects`,void 0),H([S({attribute:!1})],Q.prototype,`projectsLoad`,void 0),H([S({attribute:!1})],Q.prototype,`onRetryProjectsLoad`,void 0),H([S({attribute:!1})],Q.prototype,`selectedProject`,void 0),H([S({attribute:!1})],Q.prototype,`workspaces`,void 0),H([S({attribute:!1})],Q.prototype,`selectedWorkspace`,void 0),H([S({attribute:!1})],Q.prototype,`sessions`,void 0),H([S({attribute:!1})],Q.prototype,`sessionsLoad`,void 0),H([S({attribute:!1})],Q.prototype,`selectedSession`,void 0),H([S({attribute:!1})],Q.prototype,`sessionActivities`,void 0),H([S({attribute:!1})],Q.prototype,`sessionStatuses`,void 0),H([S({attribute:!1})],Q.prototype,`sendingPrompts`,void 0),H([S({attribute:!1})],Q.prototype,`unreadSessionIds`,void 0),H([S({attribute:!1})],Q.prototype,`deletingWorkspaceIds`,void 0),H([S({attribute:!1})],Q.prototype,`workspaceLabelItems`,void 0),H([S({attribute:!1})],Q.prototype,`refreshControl`,void 0),H([S({type:Boolean,reflect:!0})],Q.prototype,`collapsible`,void 0),H([S({type:Boolean,reflect:!0})],Q.prototype,`compact`,void 0),H([S({type:Boolean})],Q.prototype,`machinesCollapsed`,void 0),H([S({type:Boolean})],Q.prototype,`projectsCollapsed`,void 0),H([S({type:Boolean})],Q.prototype,`workspacesCollapsed`,void 0),H([S({type:Boolean})],Q.prototype,`sessionsCollapsed`,void 0),H([S({type:Number})],Q.prototype,`startingSessionCount`,void 0),H([S({type:Boolean})],Q.prototype,`canStartSession`,void 0),H([S({attribute:!1})],Q.prototype,`onShowActions`,void 0),H([S({attribute:!1})],Q.prototype,`onOpenSettings`,void 0),H([S({attribute:!1})],Q.prototype,`onAddMachine`,void 0),H([S({attribute:!1})],Q.prototype,`onOpenSessionTree`,void 0),H([S({attribute:!1})],Q.prototype,`onRefreshMachine`,void 0),H([S({attribute:!1})],Q.prototype,`onRenameMachine`,void 0),H([S({attribute:!1})],Q.prototype,`onOpenMachine`,void 0),H([S({attribute:!1})],Q.prototype,`onQuickSwitch`,void 0),H([S({attribute:!1})],Q.prototype,`onAddProject`,void 0),H([S({attribute:!1})],Q.prototype,`onToggleMachines`,void 0),H([S({attribute:!1})],Q.prototype,`onToggleProjects`,void 0),H([S({attribute:!1})],Q.prototype,`onToggleWorkspaces`,void 0),H([S({attribute:!1})],Q.prototype,`onToggleSessions`,void 0),H([S({attribute:!1})],Q.prototype,`onSelectProject`,void 0),H([S({attribute:!1})],Q.prototype,`onCloseProject`,void 0),H([S({attribute:!1})],Q.prototype,`onSelectWorkspace`,void 0),H([S({attribute:!1})],Q.prototype,`onDeleteWorkspace`,void 0),H([S({attribute:!1})],Q.prototype,`onStartSession`,void 0),H([S({attribute:!1})],Q.prototype,`onSelectSession`,void 0),H([S({attribute:!1})],Q.prototype,`onArchiveSession`,void 0),H([S({attribute:!1})],Q.prototype,`onArchiveSessionWithDescendants`,void 0),H([S({attribute:!1})],Q.prototype,`onArchiveSessions`,void 0),H([S({attribute:!1})],Q.prototype,`onRestoreSession`,void 0),H([S({attribute:!1})],Q.prototype,`onDeleteCachedNewSession`,void 0),H([S({attribute:!1})],Q.prototype,`onDeleteArchivedSession`,void 0),H([S({attribute:!1})],Q.prototype,`onDeleteArchivedSessions`,void 0),H([S({attribute:!1})],Q.prototype,`onDetachParentSession`,void 0),H([S({attribute:!1})],Q.prototype,`onRenameSession`,void 0),H([S({attribute:!1})],Q.prototype,`goalsLoad`,void 0),H([S({type:Boolean})],Q.prototype,`canRunGoalCommands`,void 0),H([S({type:Boolean})],Q.prototype,`goalCommandInFlight`,void 0),H([S({attribute:!1})],Q.prototype,`onRefreshGoals`,void 0),H([S({attribute:!1})],Q.prototype,`onArchiveGoal`,void 0),H([S({attribute:!1})],Q.prototype,`onRunGoalCommand`,void 0),H([S({attribute:!1})],Q.prototype,`onMarkSessionRead`,void 0),H([S({attribute:!1})],Q.prototype,`onMarkSessionsRead`,void 0),H([S({attribute:!1})],Q.prototype,`onReloadSession`,void 0),H([S({attribute:!1})],Q.prototype,`onCleanupSessions`,void 0),H([S({attribute:!1})],Q.prototype,`onArchivedCollapsed`,void 0),H([S({attribute:!1})],Q.prototype,`onSelectMachine`,void 0),H([S({attribute:!1})],Q.prototype,`onRemoveMachine`,void 0),H([S({attribute:!1})],Q.prototype,`onFocusNavigationTarget`,void 0),H([S({attribute:!1})],Q.prototype,`onCancelKeyboardNavigation`,void 0),H([w(`machine-list`)],Q.prototype,`machineList`,void 0),H([w(`machine-switcher`)],Q.prototype,`machineSwitcher`,void 0),H([w(`project-list`)],Q.prototype,`projectList`,void 0),H([w(`workspace-list`)],Q.prototype,`workspaceList`,void 0),H([w(`session-list`)],Q.prototype,`sessionList`,void 0),Q=H([x(`app-navigation-panel`)],Q);function
|
|
6175
|
+
`}};H([S({attribute:!1})],Q.prototype,`machines`,void 0),H([S({attribute:!1})],Q.prototype,`selectedMachine`,void 0),H([S({attribute:!1})],Q.prototype,`machineStatuses`,void 0),H([S({attribute:!1})],Q.prototype,`machineStatusSnapshots`,void 0),H([S({attribute:!1})],Q.prototype,`projects`,void 0),H([S({attribute:!1})],Q.prototype,`projectsLoad`,void 0),H([S({attribute:!1})],Q.prototype,`onRetryProjectsLoad`,void 0),H([S({attribute:!1})],Q.prototype,`selectedProject`,void 0),H([S({attribute:!1})],Q.prototype,`workspaces`,void 0),H([S({attribute:!1})],Q.prototype,`selectedWorkspace`,void 0),H([S({attribute:!1})],Q.prototype,`sessions`,void 0),H([S({attribute:!1})],Q.prototype,`sessionsLoad`,void 0),H([S({attribute:!1})],Q.prototype,`selectedSession`,void 0),H([S({attribute:!1})],Q.prototype,`sessionActivities`,void 0),H([S({attribute:!1})],Q.prototype,`sessionStatuses`,void 0),H([S({attribute:!1})],Q.prototype,`sendingPrompts`,void 0),H([S({attribute:!1})],Q.prototype,`unreadSessionIds`,void 0),H([S({attribute:!1})],Q.prototype,`deletingWorkspaceIds`,void 0),H([S({attribute:!1})],Q.prototype,`workspaceLabelItems`,void 0),H([S({attribute:!1})],Q.prototype,`refreshControl`,void 0),H([S({type:Boolean,reflect:!0})],Q.prototype,`collapsible`,void 0),H([S({type:Boolean,reflect:!0})],Q.prototype,`compact`,void 0),H([S({type:Boolean})],Q.prototype,`machinesCollapsed`,void 0),H([S({type:Boolean})],Q.prototype,`projectsCollapsed`,void 0),H([S({type:Boolean})],Q.prototype,`workspacesCollapsed`,void 0),H([S({type:Boolean})],Q.prototype,`sessionsCollapsed`,void 0),H([S({type:Number})],Q.prototype,`startingSessionCount`,void 0),H([S({type:Boolean})],Q.prototype,`canStartSession`,void 0),H([S({attribute:!1})],Q.prototype,`onShowActions`,void 0),H([S({attribute:!1})],Q.prototype,`onOpenSettings`,void 0),H([S({attribute:!1})],Q.prototype,`onAddMachine`,void 0),H([S({attribute:!1})],Q.prototype,`onOpenSessionTree`,void 0),H([S({attribute:!1})],Q.prototype,`onRefreshMachine`,void 0),H([S({attribute:!1})],Q.prototype,`onRenameMachine`,void 0),H([S({attribute:!1})],Q.prototype,`onOpenMachine`,void 0),H([S({attribute:!1})],Q.prototype,`onQuickSwitch`,void 0),H([S({attribute:!1})],Q.prototype,`onAddProject`,void 0),H([S({attribute:!1})],Q.prototype,`onToggleMachines`,void 0),H([S({attribute:!1})],Q.prototype,`onToggleProjects`,void 0),H([S({attribute:!1})],Q.prototype,`onToggleWorkspaces`,void 0),H([S({attribute:!1})],Q.prototype,`onToggleSessions`,void 0),H([S({attribute:!1})],Q.prototype,`onSelectProject`,void 0),H([S({attribute:!1})],Q.prototype,`onCloseProject`,void 0),H([S({attribute:!1})],Q.prototype,`onSelectWorkspace`,void 0),H([S({attribute:!1})],Q.prototype,`onDeleteWorkspace`,void 0),H([S({attribute:!1})],Q.prototype,`onStartSession`,void 0),H([S({attribute:!1})],Q.prototype,`onSelectSession`,void 0),H([S({attribute:!1})],Q.prototype,`onArchiveSession`,void 0),H([S({attribute:!1})],Q.prototype,`onArchiveSessionWithDescendants`,void 0),H([S({attribute:!1})],Q.prototype,`onArchiveSessions`,void 0),H([S({attribute:!1})],Q.prototype,`onRestoreSession`,void 0),H([S({attribute:!1})],Q.prototype,`onDeleteCachedNewSession`,void 0),H([S({attribute:!1})],Q.prototype,`onDeleteArchivedSession`,void 0),H([S({attribute:!1})],Q.prototype,`onDeleteArchivedSessions`,void 0),H([S({attribute:!1})],Q.prototype,`onDetachParentSession`,void 0),H([S({attribute:!1})],Q.prototype,`onRenameSession`,void 0),H([S({attribute:!1})],Q.prototype,`goalsLoad`,void 0),H([S({type:Boolean})],Q.prototype,`canRunGoalCommands`,void 0),H([S({type:Boolean})],Q.prototype,`goalCommandInFlight`,void 0),H([S({attribute:!1})],Q.prototype,`onRefreshGoals`,void 0),H([S({attribute:!1})],Q.prototype,`onArchiveGoal`,void 0),H([S({attribute:!1})],Q.prototype,`onRunGoalCommand`,void 0),H([S({attribute:!1})],Q.prototype,`onMarkSessionRead`,void 0),H([S({attribute:!1})],Q.prototype,`onMarkSessionsRead`,void 0),H([S({attribute:!1})],Q.prototype,`onReloadSession`,void 0),H([S({attribute:!1})],Q.prototype,`onCleanupSessions`,void 0),H([S({attribute:!1})],Q.prototype,`onArchivedCollapsed`,void 0),H([S({attribute:!1})],Q.prototype,`onSelectMachine`,void 0),H([S({attribute:!1})],Q.prototype,`onRemoveMachine`,void 0),H([S({attribute:!1})],Q.prototype,`onFocusNavigationTarget`,void 0),H([S({attribute:!1})],Q.prototype,`onCancelKeyboardNavigation`,void 0),H([w(`machine-list`)],Q.prototype,`machineList`,void 0),H([w(`machine-switcher`)],Q.prototype,`machineSwitcher`,void 0),H([w(`project-list`)],Q.prototype,`projectList`,void 0),H([w(`workspace-list`)],Q.prototype,`workspaceList`,void 0),H([w(`session-list`)],Q.prototype,`sessionList`,void 0),Q=H([x(`app-navigation-panel`)],Q);function vj(e){return e.length>0}function yj(e,t){let n=xj(t);return n[n.indexOf(e)-1]}function bj(e,t){let n=xj(t);return n[n.indexOf(e)+1]??`chat`}function xj(e){return Bb.filter(t=>t!==`machines`||vj(e))}var Sj=new Set([`ArrowLeft`,`ArrowRight`,`Home`,`End`]),Cj=420,wj=4,Tj=class extends _{constructor(...e){super(...e),this.side=`navigation`,this.collapsed=!1,this.resizable=!1,this.controls=``,this.resizeLabel=`Resize panel`,this.expandLabel=`Expand panel`,this.collapseLabel=`Collapse panel`,this.lastTapAt=0}disconnectedCallback(){this.finishActiveResize(),super.disconnectedCallback()}render(){let e=this.collapsed?this.expandLabel:this.collapseLabel;return h`
|
|
6164
6176
|
${this.renderResizeHandle()}
|
|
6165
6177
|
<button
|
|
6166
6178
|
type="button"
|
|
@@ -6190,7 +6202,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
6190
6202
|
@dblclick=${e=>{this.onResizeDoubleClick(e)}}
|
|
6191
6203
|
@keydown=${e=>{this.onResizeKeyDown(e)}}
|
|
6192
6204
|
></div>
|
|
6193
|
-
`}resizeAriaValueNow(){return this.panelWidth===void 0?g:String(Math.round(this.panelWidth))}renderIcon(){return h`<svg class="edge-icon" viewBox="0 0 24 24" aria-hidden="true" focusable="false"><path d=${this.iconDirection()===`left`?`M15 18l-6-6 6-6`:`M9 18l6-6-6-6`}/></svg>`}iconDirection(){return this.side===`navigation`?this.collapsed?`right`:`left`:this.collapsed?`left`:`right`}onResizePointerDown(e){if(!this.resizable||e.button!==0)return;let t=e.currentTarget;if(!(t instanceof HTMLElement))return;let n=this.resizeStartWidth();n!==void 0&&(e.preventDefault(),e.stopPropagation(),t.setPointerCapture(e.pointerId),this.activeResize={pointerId:e.pointerId,startClientX:e.clientX,startWidth:n,handle:t,moved:!1},this.toggleAttribute(`resizing`,!0))}onResizePointerMove(e){let t=this.activeResize;t?.pointerId===e.pointerId&&(e.preventDefault(),!(Math.abs(e.clientX-t.startClientX)<=
|
|
6205
|
+
`}resizeAriaValueNow(){return this.panelWidth===void 0?g:String(Math.round(this.panelWidth))}renderIcon(){return h`<svg class="edge-icon" viewBox="0 0 24 24" aria-hidden="true" focusable="false"><path d=${this.iconDirection()===`left`?`M15 18l-6-6 6-6`:`M9 18l6-6-6-6`}/></svg>`}iconDirection(){return this.side===`navigation`?this.collapsed?`right`:`left`:this.collapsed?`left`:`right`}onResizePointerDown(e){if(!this.resizable||e.button!==0)return;let t=e.currentTarget;if(!(t instanceof HTMLElement))return;let n=this.resizeStartWidth();n!==void 0&&(e.preventDefault(),e.stopPropagation(),t.setPointerCapture(e.pointerId),this.activeResize={pointerId:e.pointerId,startClientX:e.clientX,startWidth:n,handle:t,moved:!1},this.toggleAttribute(`resizing`,!0))}onResizePointerMove(e){let t=this.activeResize;t?.pointerId===e.pointerId&&(e.preventDefault(),!(Math.abs(e.clientX-t.startClientX)<=wj)&&(t.moved=!0,this.commitPanelWidth(rx(this.side,t.startWidth,t.startClientX,e.clientX,this.resizeConstraints()))))}onResizePointerUp(e){let t=this.activeResize;t?.pointerId===e.pointerId&&(e.preventDefault(),this.finishActiveResize(),t.moved||this.registerTapForReset())}onResizePointerCancel(e){this.activeResize?.pointerId===e.pointerId&&this.finishActiveResize()}onResizeDoubleClick(e){e.preventDefault(),e.stopPropagation(),this.resetPanelSize()}onResizeKeyDown(e){if(!this.resizable||!Sj.has(e.key))return;let t=this.resizeStartWidth();if(t===void 0)return;let n=ix(this.side,t,e.key,{largeStep:e.shiftKey,constraints:this.resizeConstraints()});n!==void 0&&(e.preventDefault(),e.stopPropagation(),this.commitPanelWidth(n),this.onResizeEnd?.())}registerTapForReset(){let e=Date.now();if(e-this.lastTapAt<=Cj){this.lastTapAt=0,this.resetPanelSize();return}this.lastTapAt=e}resetPanelSize(){this.finishActiveResize(),this.onReset?.()}resizeStartWidth(){let e=this.onResizeStart?.()??this.panelWidth;if(e!==void 0)return ax(this.side,e,this.resizeConstraints())}commitPanelWidth(e){this.onResize?.(ax(this.side,e,this.resizeConstraints()))}finishActiveResize(){let e=this.activeResize;if(e!==void 0){try{e.handle.releasePointerCapture(e.pointerId)}catch{}this.activeResize=void 0,this.toggleAttribute(`resizing`,!1),this.onResizeEnd?.()}}resizeConstraints(){let e=tx(this.side);return{...e,minWidth:this.minWidth??e.minWidth,maxWidth:this.maxWidth??e.maxWidth}}static{this.styles=o`
|
|
6194
6206
|
:host { position: relative; min-width: 0; min-height: 0; display: flex; align-items: center; justify-content: center; overflow: visible; background: var(--pi-border-muted); z-index: 2; }
|
|
6195
6207
|
:host([side="navigation"]) { grid-column: 2; }
|
|
6196
6208
|
:host([side="workspace"]) { grid-column: 4; }
|
|
@@ -6219,7 +6231,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
6219
6231
|
@media (max-width: 760px) {
|
|
6220
6232
|
:host([side="navigation"]) { display: none; }
|
|
6221
6233
|
}
|
|
6222
|
-
`}};H([S({reflect:!0})],
|
|
6234
|
+
`}};H([S({reflect:!0})],Tj.prototype,`side`,void 0),H([S({type:Boolean,reflect:!0})],Tj.prototype,`collapsed`,void 0),H([S({type:Boolean})],Tj.prototype,`resizable`,void 0),H([S({type:Number})],Tj.prototype,`panelWidth`,void 0),H([S({type:Number})],Tj.prototype,`minWidth`,void 0),H([S({type:Number})],Tj.prototype,`maxWidth`,void 0),H([S()],Tj.prototype,`controls`,void 0),H([S()],Tj.prototype,`resizeLabel`,void 0),H([S()],Tj.prototype,`expandLabel`,void 0),H([S()],Tj.prototype,`collapseLabel`,void 0),H([S({attribute:!1})],Tj.prototype,`onToggle`,void 0),H([S({attribute:!1})],Tj.prototype,`onResizeStart`,void 0),H([S({attribute:!1})],Tj.prototype,`onResize`,void 0),H([S({attribute:!1})],Tj.prototype,`onResizeEnd`,void 0),H([S({attribute:!1})],Tj.prototype,`onReset`,void 0),Tj=H([x(`app-panel-edge-control`)],Tj);var Ej=class extends _{constructor(...e){super(...e),this.onReloadClick=e=>{e.stopPropagation(),this.onReload?.()}}render(){let e=`Full page reload`;return h`
|
|
6223
6235
|
<button
|
|
6224
6236
|
class="app-refresh-button"
|
|
6225
6237
|
title=${e}
|
|
@@ -6238,12 +6250,12 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
6238
6250
|
:host, :host * { -webkit-user-select: none; user-select: none; }
|
|
6239
6251
|
.app-refresh-button { box-sizing: border-box; width: 36px; height: 36px; display: grid; place-items: center; border: 1px solid var(--pi-border); border-radius: 999px; background: var(--pi-surface); color: var(--pi-text); padding: 0; line-height: 1; cursor: pointer; touch-action: manipulation; -webkit-touch-callout: none; }
|
|
6240
6252
|
.app-refresh-icon { width: 18px; height: 18px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; pointer-events: none; }
|
|
6241
|
-
`}};H([S({attribute:!1})],
|
|
6253
|
+
`}};H([S({attribute:!1})],Ej.prototype,`onReload`,void 0),Ej=H([x(`app-refresh-control`)],Ej);var Dj=`pi-web.pinnedSessions`;function Oj(e=jj()){if(e===void 0)return new Set;try{let t=e.getItem(Dj);if(t===null||t===``)return new Set;let n=JSON.parse(t);return Array.isArray(n)?new Set(n.filter(e=>typeof e==`string`)):new Set}catch{return new Set}}function kj(e,t=jj()){if(t!==void 0)try{t.setItem(Dj,JSON.stringify([...e]))}catch{}}function Aj(e,t){let n=new Set(e);return n.has(t)?n.delete(t):n.add(t),n}function jj(){if(!(typeof window>`u`))try{return window.localStorage}catch{return}}function Mj(e,t){if(e===``)return null;let n=Fj(e);return h`<div class=${`error${n===void 0?``:` transient`}`} role=${n===void 0?`alert`:`status`}>
|
|
6242
6254
|
<span class="error-text">${n??e}</span>
|
|
6243
6255
|
<button type="button" class="error-dismiss" aria-label="Dismiss error" title="Dismiss error" @click=${()=>{t()}}>✕</button>
|
|
6244
|
-
</div>`}function
|
|
6245
|
-
${e.map(e=>h`<p class="deprecation-notice-text">${
|
|
6246
|
-
</div>`}var
|
|
6256
|
+
</div>`}function Nj(e){return Fj(e)!==void 0}var Pj=6e3;function Fj(e){if(/session daemon\b.*\bunavailable: connect (enoent|econnrefused)/i.test(e)&&/sessiond\.sock/i.test(e))return`Reconnecting to the session daemon…`;if(/\boperation was aborted\b/i.test(e))return`Previous request was interrupted. Retry if the message did not finish.`;if(/remote machine request cancelled/i.test(e))return`Connection changed while the request was in flight. Retrying is usually enough.`;if(/failed to fetch|load failed|networkerror when attempting to fetch/i.test(e))return`Lost connection to PI WEB. Reconnecting…`}function Ij(e,t){let n=[];for(let r of e){let e=t[r.id]?.deprecatedAgentInputs;e===void 0||e.length===0||n.push({machineId:r.id,machineName:r.name,inputs:e})}return n}function Lj(e){let t=e.inputs.map(Rj).join(`; `);return`${e.machineName}: ${t}. Support for deprecated agent configuration inputs will be removed in a future release.`}function Rj(e){let t=e.source===`config`?`config key ${e.name}`:`environment variable ${e.name}`;return e.replacement===void 0?`${t} is deprecated and ignored; remove it, there is no replacement`:`${t} is deprecated; set ${e.replacement} instead`}function zj(e){return e.length===0?null:h`<div class="deprecation-notice" role="alert">
|
|
6257
|
+
${e.map(e=>h`<p class="deprecation-notice-text">${Lj(e)}</p>`)}
|
|
6258
|
+
</div>`}var Bj=o`
|
|
6247
6259
|
/* Motion is decoration here: scroll shadows, hover fades, pulsing dots. A
|
|
6248
6260
|
reader who asked the system for less motion gets none of it. */
|
|
6249
6261
|
@media (prefers-reduced-motion: reduce) {
|
|
@@ -6345,7 +6357,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
6345
6357
|
@media (hover: hover) { .self-update-banner button:hover { border-color: var(--pi-accent); } }
|
|
6346
6358
|
.self-update-banner button.skip { color: var(--pi-muted); background: transparent; }
|
|
6347
6359
|
.self-update-banner .state-dot { background: currentColor; }
|
|
6348
|
-
`,zj=900*1e3,Bj=3e4,Vj=50,Hj=15e3;function Uj(e){if(typeof e!=`object`||!e)return!1;let t=e;return typeof t.addEventListener==`function`&&typeof t.removeEventListener==`function`}var Wj=750,Gj=[1e3,3e3,8e3,15e3,3e4],Kj={capture:!0},qj=`auto:on`,Jj=`auto:off`,Yj=`theme:`,Xj=Ol(`core:workspace.files`),Zj=Ol(`core:workspace.terminal`),Qj=320,$j=2,eM=`(min-width: 1181px)`,$=class extends _{constructor(...e){super(...e),this.state=yl(),this.sessionUnread=new Wh({onChange:e=>{R(this.state)===e&&(this.syncUnreadSessionIds(),this.syncSelectedSessionReadState())},onBackgroundError:(e,t,n)=>{console.warn(`Failed to ${e} session unread state for ${t}`,n)}}),this.interruptedSessionIds=new Set,this.unreadSessionIds=this.sessionUnread.unreadSessionIds(R(this.state),this.state.sessions),this.unreadConnected=!1,this.notifications=new mm(()=>this.state,e=>{this.setState(e)},{onBackgroundError:(e,t)=>{console.warn(e,t)}}),this.sessions=new Dp(()=>this.state,e=>{this.setState(e)},()=>{this.updateUrl()},new _p,{notifications:this.notifications,onSelectedSessionIdle:()=>{this.workspaces.refreshWorkspaceGoals()},onSelectedSessionReady:({machineId:e,session:t})=>{this.commitReadyChatAfterRender(e,t),this.refreshSelfUpdate(),this.workspaces.refreshWorkspaceGoals()},replacePromptEditorText:async({machineId:e,sessionId:t,text:n})=>{await this.updateComplete,!(R(this.state)!==e||this.state.selectedSession?.id!==t)&&this.promptEditor?.replaceText(n)}}),this.machineStatus=new Yl(()=>this.state,e=>{this.setState(e)}),this.auth=new wl(()=>this.state,e=>{this.setState(e)},e=>{this.sessions.applySessionStatus(e)}),this.workspaces=new Sm(()=>this.state,e=>{this.setState(e)},()=>{this.updateUrl()},this.sessions,new ym),this.projects=new Zl(()=>this.state,e=>{this.setState(e)},this.workspaces),this.machines=new Gl(()=>this.state,e=>{this.setState(e)},()=>{this.updateUrl()},this.projects),this.piWebStatusController=new $l(()=>this.state,e=>{this.setState(e)},{onRefreshError:(e,t)=>{console.warn(`Failed to refresh PI WEB status for ${e}`,t)}}),this.files=new Hl(()=>this.state,e=>{this.setState(e)},()=>{this.updateUrl()}),this.keyboard=new Km,this.realtime=new Yf,this.machineRealtimeSockets=new Map,this.activeTerminalIds=new Set,this.machineNavigation=new Om,this.terminalSelection=new Vm,this.appShell=new At(this),this.browserResume=new Nb({onResumeSignal:()=>{this.handleBrowserResumeSignal()},refreshAfterResume:()=>this.refreshAfterBrowserResume(),onRefreshError:e=>{console.warn(`Failed to refresh after browser resume`,e)}}),this.panelCollapse=new qb(this),this.panelResize=new Qb(this),this.navigationSections=new Gb(this,()=>this.state),this.systemLightThemeMedia=typeof window<`u`&&`matchMedia`in window?window.matchMedia(`(prefers-color-scheme: light)`):void 0,this.refreshingWorkspaceDeletionRuns=!1,this.handledWorkspaceDeletionRunIds=new Set,this.terminalCommandRunRuntimes=new Map,this.machineNavigationRestoreSeq=0,this.navigationSelectionSeq=0,this.routeRestoreSeq=0,this.routeRestoreDepth=0,this.remoteRouteRestoreAttempt=0,this.remoteRouteRestoreInProgress=!1,this.plugins=tM(),this.loadedMachinePluginIds=new Set,this.machinePluginLoadPromises=new Map,this.themePreference=rg()??$h,this.activeThemeId=Qh,this.isRefreshingApp=!1,this.heldErrorBanner=null,this.lastScheduledError=``,this.quickSwitcherOpen=!1,this.composerCollapsed=!1,this.mobileToolSheetOpen=!1,this.quickSwitcherLoading=!1,this.quickSwitcherSessions=[],this.quickSwitcherFetchedAt=0,this.pinnedSessionIds=Ej(),this.quickSwitcherWorkspaces=[],this.settingsSection=bx(),this.fleetLoading=!1,this.fleetSectionShown=!1,this.shortcutConfig={},this.workspaceUploadDefaultFolder=Hs(void 0),this.onPopState=()=>{if(this.modalLayerOpen()){_t(),this.closeModalLayer();return}this.currentRouteMatchesUrl()||this.withChatScrollTransition(async()=>{this.restoreSettingsRoute(),await this.restoreRoute(!1)})},this.onPageShow=()=>{this.sessionUnread.refreshAll(),this.appShell.repairViewportPosition(),this.retryPendingRemoteRouteRestoreSoon()},this.onBrowserOnline=()=>{this.realtime.reconnectNow(),this.sessions.reconnectSocketNow(),this.checkSocketLiveness()},this.onFocusIn=e=>{let t=bh({pointerInFlight:this.pointerPressInFlight,collapsed:this.composerCollapsed,held:this.deferredCollapse,next:xh(e.composedPath())});this.composerCollapsed=t.collapsed,this.deferredCollapse=t.held},this.pointerPressInFlight=!1,this.deferredCollapse=void 0,this.onPointerPressStart=()=>{this.pointerPressInFlight=!0},this.onPointerPressEnd=()=>{let e=bh({pointerInFlight:!1,collapsed:this.composerCollapsed,held:this.deferredCollapse,next:this.deferredCollapse??this.composerCollapsed});this.composerCollapsed=e.collapsed,this.deferredCollapse=e.held},this.onFocusOut=e=>{let t=e.relatedTarget;if(t===null)return;let n=bh({pointerInFlight:this.pointerPressInFlight,collapsed:this.composerCollapsed,held:this.deferredCollapse,next:xh(Sh(t))});this.composerCollapsed=n.collapsed,this.deferredCollapse=n.held},this.onDocumentVisibilityChange=()=>{this.updateSubagentPolling(),document.visibilityState===`visible`&&this.refreshSubagents()},this.onSystemLightThemeChange=()=>{this.themePreference.auto&&this.applyPreferredTheme(!1)},this.onKeyDown=e=>{this.isRenderedModalOpen()||this.keyboard.handle(e,this.getDefaultActions(),{shortcuts:this.shortcutConfig})&&(e.preventDefault(),e.stopPropagation())},this.refreshSubagents=Dh(()=>this.readSubagents()),this.selfUpdateCooldownUntil=0,this.onVisualViewportChange=()=>{let e=vh(window.innerHeight,window.visualViewport??void 0);this.style.setProperty(`--pi-app-keyboard-inset`,`${String(Math.round(e))}px`);let t=window.visualViewport?.height;t===void 0||!Number.isFinite(t)||t<=0?this.style.removeProperty(`--pi-app-visible-height`):this.style.setProperty(`--pi-app-visible-height`,`${String(Math.round(t))}px`)},this.goalCommandInFlight=!1,this.handleSendPrompt=(e,t,n,r,i)=>this.sendPrompt(e,t,n,r,i),this.handleStopActiveWork=()=>{this.sessions.stopActiveWork().then(e=>{this.restoreToComposer(e)})},this.handleClearServerQueue=e=>{this.restoreToComposer(e),this.sessions.clearServerQueue()},this.handleOpenSubagentRun=e=>{this.sessions.openSubagentRunConversation(e)},this.handleOpenBackgroundTask=e=>{e.hasOutput&&this.sessions.openBackgroundTaskOutput(e)},this.handleCloseActivityOutput=()=>{this.sessions.closeActivityOutput()},this.handleCloseActivityConversation=()=>{this.sessions.closeActivityConversation()},this.handleOpenSubagentSession=e=>{this.openSubagent(e)},this.handleRecallQueuedMessage=e=>{this.sessions.recallQueuedMessage(e).then(t=>{t&&this.restoreToComposer([e])})},this.handleSubmitAsk=(e,t)=>this.sessions.submitAsk(e,t),this.handleAnswerDialog=(e,t)=>this.sessions.answerDialog(e,t),this.handleCancelDialog=e=>this.sessions.cancelDialog(e),this.handleDismissClosedDialog=e=>{this.sessions.dismissClosedDialog(e)},this.handleDismissNotification=e=>{this.notifications.dismissNotification(e)},this.handleDismissAllNotifications=()=>{this.notifications.dismissAll()},this.handleResendMessage=e=>{this.promptEditor?.restorePrompt(e)},this.handleSelectModel=()=>{this.openModelDialog()},this.handleToggleModelEnabled=async(e,t,n)=>{let r=await this.sessions.setModelEnabled(e,t,n),i=this.state.modelDialog;r===void 0||i===void 0||this.setState({modelDialog:{...i,catalog:r,options:this.modelDialogOptions(r.filter(e=>e.enabled))}})},this.handleSelectThinking=()=>{this.openThinkingDialog()}}currentRouteMatchesUrl(){let e=this.state,t=new URL(window.location.href),n=e=>{let n=t.searchParams.get(e);return n===null||n===``?void 0:n},r=e.selectedMachine===void 0?void 0:e.selectedMachine.id;return n(`machine`)===(r===`local`?void 0:r)&&xt({project:n(`project`),workspace:n(`workspace`),session:n(`session`),view:n(`view`)},{project:e.selectedProject?.id,workspace:e.selectedWorkspace?.id,session:e.selectedSession?.id,view:e.mainView},this.appShell.defaultRouteView({sessionId:e.selectedSession?.id}))}closeModalLayer(){if(this.mobileToolSheetOpen){this.mobileToolSheetOpen=!1;return}if(this.quickSwitcherOpen){this.quickSwitcherOpen=!1;return}let e=this.state;if(e.actionPaletteOpen){this.setState({actionPaletteOpen:!1});return}if(e.projectDialogOpen){this.setState({projectDialogOpen:!1});return}if(e.machineDialogOpen){this.setState({machineDialogOpen:!1});return}if(e.commandDialog!==void 0){this.sessions.cancelCommand();return}if(e.modelDialog!==void 0){this.setState({modelDialog:void 0});return}if(e.thinkingDialog!==void 0){this.setState({thinkingDialog:void 0});return}if(e.themeDialog!==void 0){this.setState({themeDialog:void 0});return}if(this.sessionCleanupDialog!==void 0){this.sessionCleanupDialog=void 0;return}}listenForFormFocus(e){let t=this.renderRoot;if(Uj(t)){if(e===`add`){t.addEventListener(`focusin`,this.onFocusIn),t.addEventListener(`focusout`,this.onFocusOut),t.addEventListener(`pointerdown`,this.onPointerPressStart),t.addEventListener(`pointerup`,this.onPointerPressEnd),t.addEventListener(`pointercancel`,this.onPointerPressEnd);return}t.removeEventListener(`focusin`,this.onFocusIn),t.removeEventListener(`focusout`,this.onFocusOut),t.removeEventListener(`pointerdown`,this.onPointerPressStart),t.removeEventListener(`pointerup`,this.onPointerPressEnd),t.removeEventListener(`pointercancel`,this.onPointerPressEnd)}}get routeRestoreInProgress(){return this.routeRestoreDepth>0}willUpdate(){this.toggleAttribute(`pwa-display-mode`,this.appShell.isPwaDisplayMode)}updated(){this.committedChatIdentity=aM(this.state),this.syncSelectedSessionReadState(),this.syncFleetOnSettingsSection(),this.syncDocumentTitle()}syncDocumentTitle(){let e=this.state,t=cj({mainView:e.mainView,selectedMachine:e.selectedMachine,selectedProject:e.selectedProject,selectedWorkspace:e.selectedWorkspace,selectedSession:e.selectedSession});document.title!==t&&(document.title=t)}syncFleetOnSettingsSection(){let e=this.settingsSection===`machines`;e&&!this.fleetSectionShown&&this.refreshFleet(),this.fleetSectionShown=e}syncSelectedSessionReadState(){let e=this.state.selectedSession;if(e===void 0)return;let t=R(this.state);this.isSessionSeen(t,e)&&(this.sessionUnread.acknowledge(t,e),this.composerCollapsed&&this.state.pendingDialogs.length===0&&this.state.pendingAsk===void 0&&wh({collapsed:!0,collapsingHostStillPresent:!1,activeElementPath:Sh(document.activeElement)})&&(this.composerCollapsed=!1,this.requestUpdate()))}markSessionsRead(e){let t=R(this.state);for(let n of e)this.sessionUnread.acknowledge(t,n)}async commitReadyChatAfterRender(e,t){let n=iM(e,t);await this.updateComplete,!(!this.unreadConnected||aM(this.state)!==n)&&(this.readyChatIdentity=n,this.syncSelectedSessionReadState())}refreshInterruptedRuns(e){this.sessions.loadInterruptedRuns(e).then(e=>{this.interruptedSessionIds=e})}updateSubagentPolling(){let e=Th({hasSelectedSession:this.state.selectedSession!==void 0,documentVisible:document.visibilityState===`visible`});if(e&&this.subagentRefreshArmedFor!==this.state.selectedSession?.id){this.subagentRefreshArmedFor=this.state.selectedSession?.id,this.refreshSubagents();return}e||(this.subagentRefreshArmedFor=void 0)}openSubagent(e){let t=this.quickSwitcherSessions.find(t=>t.id===e.sessionId)??this.state.sessions.find(t=>t.id===e.sessionId);t!==void 0&&this.selectNavigationItem(`sessions`,`chat`,()=>this.sessions.selectSession(t))}async readSubagents(){let e=this.state.selectedSession;if(e!==void 0)try{let t=R(this.state),[n,r]=await Promise.all([$o.subsessions(e,t),$o.backgroundTasks(e,t).catch(()=>this.state.backgroundTasks)]);if(this.state.selectedSession?.id!==e.id||R(this.state)!==t)return;let i=!fM(n.subsessions,this.state.subagents),a=!pM(n.toolRuns,this.state.subagentRuns),o=!dM(r,this.state.backgroundTasks);if(!i&&!a&&!o){this.state.activityFailed&&this.setState({activityFailed:!1});return}this.setState({subagents:n.subsessions,subagentRuns:n.toolRuns,backgroundTasks:r,activityFailed:!1})}catch{this.state.activityFailed||this.setState({activityFailed:!0})}}async refreshSelfUpdate(){if(!(Date.now()<this.selfUpdateCooldownUntil)){this.selfUpdateCooldownUntil=Date.now()+6e4;try{let e=await Go.status();this.setState({selfUpdate:e})}catch(e){console.warn(`Self-update status check failed`,e)}}}async applySelfUpdate(){if(!this.state.selfUpdateApplying){this.setState({selfUpdateApplying:!0});try{let e=await Go.apply();e.started||(this.setState({selfUpdateApplying:!1}),e.error!==void 0&&(this.setState({error:`Update failed: ${e.error}`}),this.scheduleTransientErrorDismissal(`Update failed: ${e.error}`)))}catch{this.setState({selfUpdateApplying:!1}),this.setState({error:`Update request failed`}),this.scheduleTransientErrorDismissal(`Update request failed`)}}}skipSelfUpdate(){let e=this.state.selfUpdate?.latest;if(e!==void 0){try{window.localStorage.setItem(`piWebSelfUpdateSkipped`,e)}catch{}this.setState({selfUpdate:void 0})}}renderSelfUpdateBanner(){let e=this.state.selfUpdate;if(e===void 0||!e.enabled||!e.available)return null;if(this.state.selfUpdateApplying)return h`
|
|
6360
|
+
`,Vj=900*1e3,Hj=3e4,Uj=50,Wj=15e3;function Gj(e){if(typeof e!=`object`||!e)return!1;let t=e;return typeof t.addEventListener==`function`&&typeof t.removeEventListener==`function`}var Kj=750,qj=[1e3,3e3,8e3,15e3,3e4],Jj={capture:!0},Yj=`auto:on`,Xj=`auto:off`,Zj=`theme:`,Qj=Ol(`core:workspace.files`),$j=Ol(`core:workspace.terminal`),eM=320,tM=2,nM=`(min-width: 1181px)`,$=class extends _{constructor(...e){super(...e),this.state=yl(),this.sessionUnread=new Wh({onChange:e=>{R(this.state)===e&&(this.syncUnreadSessionIds(),this.syncSelectedSessionReadState())},onBackgroundError:(e,t,n)=>{console.warn(`Failed to ${e} session unread state for ${t}`,n)}}),this.interruptedSessionIds=new Set,this.unreadSessionIds=this.sessionUnread.unreadSessionIds(R(this.state),this.state.sessions),this.unreadConnected=!1,this.notifications=new mm(()=>this.state,e=>{this.setState(e)},{onBackgroundError:(e,t)=>{console.warn(e,t)}}),this.sessions=new Dp(()=>this.state,e=>{this.setState(e)},()=>{this.updateUrl()},new _p,{notifications:this.notifications,onSelectedSessionIdle:()=>{this.workspaces.refreshWorkspaceGoals()},onSelectedSessionReady:({machineId:e,session:t})=>{this.commitReadyChatAfterRender(e,t),this.refreshSelfUpdate(),this.workspaces.refreshWorkspaceGoals()},replacePromptEditorText:async({machineId:e,sessionId:t,text:n})=>{await this.updateComplete,!(R(this.state)!==e||this.state.selectedSession?.id!==t)&&this.promptEditor?.replaceText(n)}}),this.machineStatus=new Yl(()=>this.state,e=>{this.setState(e)}),this.auth=new wl(()=>this.state,e=>{this.setState(e)},e=>{this.sessions.applySessionStatus(e)}),this.workspaces=new Sm(()=>this.state,e=>{this.setState(e)},()=>{this.updateUrl()},this.sessions,new ym),this.projects=new Zl(()=>this.state,e=>{this.setState(e)},this.workspaces),this.machines=new Gl(()=>this.state,e=>{this.setState(e)},()=>{this.updateUrl()},this.projects),this.piWebStatusController=new $l(()=>this.state,e=>{this.setState(e)},{onRefreshError:(e,t)=>{console.warn(`Failed to refresh PI WEB status for ${e}`,t)}}),this.files=new Hl(()=>this.state,e=>{this.setState(e)},()=>{this.updateUrl()}),this.keyboard=new Km,this.realtime=new Yf,this.machineRealtimeSockets=new Map,this.activeTerminalIds=new Set,this.machineNavigation=new Om,this.terminalSelection=new Vm,this.appShell=new At(this),this.browserResume=new Fb({onResumeSignal:()=>{this.handleBrowserResumeSignal()},refreshAfterResume:()=>this.refreshAfterBrowserResume(),onRefreshError:e=>{console.warn(`Failed to refresh after browser resume`,e)}}),this.panelCollapse=new Yb(this),this.panelResize=new ex(this),this.navigationSections=new qb(this,()=>this.state),this.systemLightThemeMedia=typeof window<`u`&&`matchMedia`in window?window.matchMedia(`(prefers-color-scheme: light)`):void 0,this.refreshingWorkspaceDeletionRuns=!1,this.handledWorkspaceDeletionRunIds=new Set,this.terminalCommandRunRuntimes=new Map,this.machineNavigationRestoreSeq=0,this.navigationSelectionSeq=0,this.routeRestoreSeq=0,this.routeRestoreDepth=0,this.remoteRouteRestoreAttempt=0,this.remoteRouteRestoreInProgress=!1,this.plugins=rM(),this.loadedMachinePluginIds=new Set,this.machinePluginLoadPromises=new Map,this.themePreference=rg()??$h,this.activeThemeId=Qh,this.isRefreshingApp=!1,this.heldErrorBanner=null,this.lastScheduledError=``,this.quickSwitcherOpen=!1,this.composerCollapsed=!1,this.mobileToolSheetOpen=!1,this.quickSwitcherLoading=!1,this.quickSwitcherSessions=[],this.quickSwitcherFetchedAt=0,this.pinnedSessionIds=Oj(),this.quickSwitcherWorkspaces=[],this.settingsSection=Sx(),this.fleetLoading=!1,this.fleetSectionShown=!1,this.shortcutConfig={},this.workspaceUploadDefaultFolder=Hs(void 0),this.onPopState=()=>{if(this.modalLayerOpen()){_t(),this.closeModalLayer();return}this.currentRouteMatchesUrl()||this.withChatScrollTransition(async()=>{this.restoreSettingsRoute(),await this.restoreRoute(!1)})},this.onPageShow=()=>{this.sessionUnread.refreshAll(),this.appShell.repairViewportPosition(),this.retryPendingRemoteRouteRestoreSoon()},this.onBrowserOnline=()=>{this.realtime.reconnectNow(),this.sessions.reconnectSocketNow(),this.checkSocketLiveness()},this.onFocusIn=e=>{let t=bh({pointerInFlight:this.pointerPressInFlight,collapsed:this.composerCollapsed,held:this.deferredCollapse,next:xh(e.composedPath())});this.composerCollapsed=t.collapsed,this.deferredCollapse=t.held},this.pointerPressInFlight=!1,this.deferredCollapse=void 0,this.onPointerPressStart=()=>{this.pointerPressInFlight=!0},this.onPointerPressEnd=()=>{let e=bh({pointerInFlight:!1,collapsed:this.composerCollapsed,held:this.deferredCollapse,next:this.deferredCollapse??this.composerCollapsed});this.composerCollapsed=e.collapsed,this.deferredCollapse=e.held},this.onFocusOut=e=>{let t=e.relatedTarget;if(t===null)return;let n=bh({pointerInFlight:this.pointerPressInFlight,collapsed:this.composerCollapsed,held:this.deferredCollapse,next:xh(Sh(t))});this.composerCollapsed=n.collapsed,this.deferredCollapse=n.held},this.onDocumentVisibilityChange=()=>{this.updateSubagentPolling(),document.visibilityState===`visible`&&this.refreshSubagents()},this.onSystemLightThemeChange=()=>{this.themePreference.auto&&this.applyPreferredTheme(!1)},this.onKeyDown=e=>{this.isRenderedModalOpen()||this.keyboard.handle(e,this.getDefaultActions(),{shortcuts:this.shortcutConfig})&&(e.preventDefault(),e.stopPropagation())},this.refreshSubagents=Dh(()=>this.readSubagents()),this.selfUpdateCooldownUntil=0,this.onVisualViewportChange=()=>{let e=vh(window.innerHeight,window.visualViewport??void 0);this.style.setProperty(`--pi-app-keyboard-inset`,`${String(Math.round(e))}px`);let t=window.visualViewport?.height;t===void 0||!Number.isFinite(t)||t<=0?this.style.removeProperty(`--pi-app-visible-height`):this.style.setProperty(`--pi-app-visible-height`,`${String(Math.round(t))}px`)},this.goalCommandInFlight=!1,this.handleSendPrompt=(e,t,n,r,i)=>this.sendPrompt(e,t,n,r,i),this.handleStopActiveWork=()=>{this.sessions.stopActiveWork().then(e=>{this.restoreToComposer(e)})},this.handleClearServerQueue=e=>{this.restoreToComposer(e),this.sessions.clearServerQueue()},this.handleOpenSubagentRun=e=>{this.sessions.openSubagentRunConversation(e)},this.handleOpenBackgroundTask=e=>{e.hasOutput&&this.sessions.openBackgroundTaskOutput(e)},this.handleCloseActivityOutput=()=>{this.sessions.closeActivityOutput()},this.handleCloseActivityConversation=()=>{this.sessions.closeActivityConversation()},this.handleOpenSubagentSession=e=>{this.openSubagent(e)},this.handleRecallQueuedMessage=e=>{this.sessions.recallQueuedMessage(e).then(t=>{t&&this.restoreToComposer([e])})},this.handleSubmitAsk=(e,t)=>this.sessions.submitAsk(e,t),this.handleAnswerDialog=(e,t)=>this.sessions.answerDialog(e,t),this.handleCancelDialog=e=>this.sessions.cancelDialog(e),this.handleDismissClosedDialog=e=>{this.sessions.dismissClosedDialog(e)},this.handleDismissNotification=e=>{this.notifications.dismissNotification(e)},this.handleDismissAllNotifications=()=>{this.notifications.dismissAll()},this.handleResendMessage=e=>{this.promptEditor?.restorePrompt(e)},this.handleSelectModel=()=>{this.openModelDialog()},this.handleToggleModelEnabled=async(e,t,n)=>{let r=await this.sessions.setModelEnabled(e,t,n),i=this.state.modelDialog;r===void 0||i===void 0||this.setState({modelDialog:{...i,catalog:r,options:this.modelDialogOptions(r.filter(e=>e.enabled))}})},this.handleSelectThinking=()=>{this.openThinkingDialog()}}currentRouteMatchesUrl(){let e=this.state,t=new URL(window.location.href),n=e=>{let n=t.searchParams.get(e);return n===null||n===``?void 0:n},r=e.selectedMachine===void 0?void 0:e.selectedMachine.id;return n(`machine`)===(r===`local`?void 0:r)&&xt({project:n(`project`),workspace:n(`workspace`),session:n(`session`),view:n(`view`)},{project:e.selectedProject?.id,workspace:e.selectedWorkspace?.id,session:e.selectedSession?.id,view:e.mainView},this.appShell.defaultRouteView({sessionId:e.selectedSession?.id}))}closeModalLayer(){if(this.mobileToolSheetOpen){this.mobileToolSheetOpen=!1;return}if(this.quickSwitcherOpen){this.quickSwitcherOpen=!1;return}let e=this.state;if(e.actionPaletteOpen){this.setState({actionPaletteOpen:!1});return}if(e.projectDialogOpen){this.setState({projectDialogOpen:!1});return}if(e.machineDialogOpen){this.setState({machineDialogOpen:!1});return}if(e.commandDialog!==void 0){this.sessions.cancelCommand();return}if(e.modelDialog!==void 0){this.setState({modelDialog:void 0});return}if(e.thinkingDialog!==void 0){this.setState({thinkingDialog:void 0});return}if(e.themeDialog!==void 0){this.setState({themeDialog:void 0});return}if(this.sessionCleanupDialog!==void 0){this.sessionCleanupDialog=void 0;return}}listenForFormFocus(e){let t=this.renderRoot;if(Gj(t)){if(e===`add`){t.addEventListener(`focusin`,this.onFocusIn),t.addEventListener(`focusout`,this.onFocusOut),t.addEventListener(`pointerdown`,this.onPointerPressStart),t.addEventListener(`pointerup`,this.onPointerPressEnd),t.addEventListener(`pointercancel`,this.onPointerPressEnd);return}t.removeEventListener(`focusin`,this.onFocusIn),t.removeEventListener(`focusout`,this.onFocusOut),t.removeEventListener(`pointerdown`,this.onPointerPressStart),t.removeEventListener(`pointerup`,this.onPointerPressEnd),t.removeEventListener(`pointercancel`,this.onPointerPressEnd)}}get routeRestoreInProgress(){return this.routeRestoreDepth>0}willUpdate(){this.toggleAttribute(`pwa-display-mode`,this.appShell.isPwaDisplayMode)}updated(){this.committedChatIdentity=sM(this.state),this.syncSelectedSessionReadState(),this.syncFleetOnSettingsSection(),this.syncDocumentTitle()}syncDocumentTitle(){let e=this.state,t=uj({mainView:e.mainView,selectedMachine:e.selectedMachine,selectedProject:e.selectedProject,selectedWorkspace:e.selectedWorkspace,selectedSession:e.selectedSession});document.title!==t&&(document.title=t)}syncFleetOnSettingsSection(){let e=this.settingsSection===`machines`;e&&!this.fleetSectionShown&&this.refreshFleet(),this.fleetSectionShown=e}syncSelectedSessionReadState(){let e=this.state.selectedSession;if(e===void 0)return;let t=R(this.state);this.isSessionSeen(t,e)&&(this.sessionUnread.acknowledge(t,e),this.composerCollapsed&&this.state.pendingDialogs.length===0&&this.state.pendingAsk===void 0&&wh({collapsed:!0,collapsingHostStillPresent:!1,activeElementPath:Sh(document.activeElement)})&&(this.composerCollapsed=!1,this.requestUpdate()))}markSessionsRead(e){let t=R(this.state);for(let n of e)this.sessionUnread.acknowledge(t,n)}async commitReadyChatAfterRender(e,t){let n=oM(e,t);await this.updateComplete,!(!this.unreadConnected||sM(this.state)!==n)&&(this.readyChatIdentity=n,this.syncSelectedSessionReadState())}refreshInterruptedRuns(e){this.sessions.loadInterruptedRuns(e).then(e=>{this.interruptedSessionIds=e})}updateSubagentPolling(){let e=Th({hasSelectedSession:this.state.selectedSession!==void 0,documentVisible:document.visibilityState===`visible`});if(e&&this.subagentRefreshArmedFor!==this.state.selectedSession?.id){this.subagentRefreshArmedFor=this.state.selectedSession?.id,this.refreshSubagents();return}e||(this.subagentRefreshArmedFor=void 0)}openSubagent(e){let t=this.quickSwitcherSessions.find(t=>t.id===e.sessionId)??this.state.sessions.find(t=>t.id===e.sessionId);t!==void 0&&this.selectNavigationItem(`sessions`,`chat`,()=>this.sessions.selectSession(t))}async readSubagents(){let e=this.state.selectedSession;if(e!==void 0)try{let t=R(this.state),[n,r]=await Promise.all([$o.subsessions(e,t),$o.backgroundTasks(e,t).catch(()=>this.state.backgroundTasks)]);if(this.state.selectedSession?.id!==e.id||R(this.state)!==t)return;let i=!mM(n.subsessions,this.state.subagents),a=!hM(n.toolRuns,this.state.subagentRuns),o=!pM(r,this.state.backgroundTasks);if(!i&&!a&&!o){this.state.activityFailed&&this.setState({activityFailed:!1});return}this.setState({subagents:n.subsessions,subagentRuns:n.toolRuns,backgroundTasks:r,activityFailed:!1})}catch{this.state.activityFailed||this.setState({activityFailed:!0})}}async refreshSelfUpdate(){if(!(Date.now()<this.selfUpdateCooldownUntil)){this.selfUpdateCooldownUntil=Date.now()+6e4;try{let e=await Go.status();this.setState({selfUpdate:e})}catch(e){console.warn(`Self-update status check failed`,e)}}}async applySelfUpdate(){if(!this.state.selfUpdateApplying){this.setState({selfUpdateApplying:!0});try{let e=await Go.apply();e.started||(this.setState({selfUpdateApplying:!1}),e.error!==void 0&&(this.setState({error:`Update failed: ${e.error}`}),this.scheduleTransientErrorDismissal(`Update failed: ${e.error}`)))}catch{this.setState({selfUpdateApplying:!1}),this.setState({error:`Update request failed`}),this.scheduleTransientErrorDismissal(`Update request failed`)}}}skipSelfUpdate(){let e=this.state.selfUpdate?.latest;if(e!==void 0){try{window.localStorage.setItem(`piWebSelfUpdateSkipped`,e)}catch{}this.setState({selfUpdate:void 0})}}renderSelfUpdateBanner(){let e=this.state.selfUpdate;if(e===void 0||!e.enabled||!e.available)return null;if(this.state.selfUpdateApplying)return h`
|
|
6349
6361
|
<div class="self-update-banner applying" role="status" aria-live="polite">
|
|
6350
6362
|
<span class="state-dots"><span class="state-dot"></span><span class="state-dot"></span><span class="state-dot"></span></span>
|
|
6351
6363
|
<span>正在更新 pi-web(${e.current} → ${e.latest??`new`})… 重启后页面将自动重连。</span>
|
|
@@ -6354,7 +6366,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
6354
6366
|
<span>pi-web 有新版本:${e.current} → ${e.latest??`new`}</span>
|
|
6355
6367
|
<button type="button" @click=${()=>{this.applySelfUpdate()}}>Update now</button>
|
|
6356
6368
|
<button type="button" class="skip" @click=${()=>{this.skipSelfUpdate()}}>Skip</button>
|
|
6357
|
-
</div>`}syncUnreadSessionIds(){let e=this.sessionUnread.unreadSessionIds(R(this.state),this.state.sessions);mM(e,this.unreadSessionIds)||(this.unreadSessionIds=e)}isSessionSeen(e,t){if(!this.unreadConnected)return!1;let n=iM(e,t);return aM(this.state)!==n||this.committedChatIdentity!==n||this.readyChatIdentity!==n||typeof document<`u`&&(document.visibilityState!==`visible`||typeof document.hasFocus==`function`&&!document.hasFocus())||this.isRenderedModalOpen()?!1:this.state.mainView===`chat`?!0:this.state.mainView===`navigation`?!this.appShell.isMobileNavigationLayout:this.isDesktopSideBySideLayout()}isRenderedModalOpen(){return Vg(this.ownerDocument)}connectedCallback(){super.connectedCallback(),nt(()=>{this.clearTransientError()}),this.unreadConnected=!0,window.visualViewport?.addEventListener(`resize`,this.onVisualViewportChange),window.visualViewport?.addEventListener(`scroll`,this.onVisualViewportChange),window.addEventListener(`resize`,this.onVisualViewportChange),window.addEventListener(`orientationchange`,this.onVisualViewportChange),this.onVisualViewportChange(),requestAnimationFrame(()=>{this.onVisualViewportChange()}),window.setTimeout(()=>{this.onVisualViewportChange()},400),window.addEventListener(`popstate`,this.onPopState),window.addEventListener(`pageshow`,this.onPageShow),this.browserResume.connect(),window.addEventListener(`keydown`,this.onKeyDown,Kj),this.systemLightThemeMedia?.addEventListener(`change`,this.onSystemLightThemeChange),this.applyPreferredTheme(!1),this.connectRealtime(),this.syncSessionUnreadMachines(),this.piWebStatusTimer=window.setInterval(()=>{this.schedulePiWebStatusRefresh()},zj),document.addEventListener(`visibilitychange`,this.onDocumentVisibilityChange),this.listenForFormFocus(`add`),this.livenessTimer=window.setInterval(()=>{this.checkSocketLiveness()},Hj),window.addEventListener(`online`,this.onBrowserOnline),this.updateSubagentPolling(),this.loadClientConfig(),this.refreshSelfUpdate(),this.ensureGatewayPluginsLoaded(),this.loadProjectsAndRestoreRoute().finally(()=>{this.schedulePiWebStatusRefresh()})}clearTransientError(){this.state.error===``||this.state.errorRetiredBy!==ct.reply||(this.transientErrorTimer!==void 0&&(window.clearTimeout(this.transientErrorTimer),this.transientErrorTimer=void 0),this.setState({error:``}))}scheduleTransientErrorDismissal(e){this.transientErrorTimer!==void 0&&(window.clearTimeout(this.transientErrorTimer),this.transientErrorTimer=void 0),jj(e)&&(this.transientErrorTimer=window.setTimeout(()=>{this.transientErrorTimer=void 0,this.state.error===e&&this.setState({error:``})},Mj))}disconnectedCallback(){nt(void 0),this.transientErrorTimer!==void 0&&window.clearTimeout(this.transientErrorTimer),window.removeEventListener(`resize`,this.onVisualViewportChange),window.removeEventListener(`orientationchange`,this.onVisualViewportChange),window.visualViewport?.removeEventListener(`resize`,this.onVisualViewportChange),window.visualViewport?.removeEventListener(`scroll`,this.onVisualViewportChange),this.unreadConnected=!1,this.committedChatIdentity=void 0,this.readyChatIdentity=void 0,this.sessionUnread.retainMachines(new Set),window.removeEventListener(`popstate`,this.onPopState),window.removeEventListener(`pageshow`,this.onPageShow),this.browserResume.disconnect(),window.removeEventListener(`keydown`,this.onKeyDown,Kj),this.systemLightThemeMedia?.removeEventListener(`change`,this.onSystemLightThemeChange),this.keyboard.reset(),this.auth.dispose(),this.sessions.dispose(),this.notifications.dispose(),this.realtime.close(),this.closeMachineActivitySockets(),this.piWebStatusTimer!==void 0&&window.clearInterval(this.piWebStatusTimer),this.piWebStatusTimer=void 0,this.clearScheduledPiWebStatusRefresh(),this.workspaceDeletionPollTimer!==void 0&&window.clearInterval(this.workspaceDeletionPollTimer),this.workspaceDeletionPollTimer=void 0,this.livenessTimer!==void 0&&window.clearInterval(this.livenessTimer),this.livenessTimer=void 0,window.removeEventListener(`online`,this.onBrowserOnline),document.removeEventListener(`visibilitychange`,this.onDocumentVisibilityChange),this.listenForFormFocus(`remove`),this.clearPendingRemoteRouteRestore(),super.disconnectedCallback()}setState(e){if(!uM(this.state,e))return;let t=this.state;this.state={...this.state,...e},aM(t)!==aM(this.state)&&(this.committedChatIdentity=void 0,this.readyChatIdentity=void 0),oM(t,this.state)&&this.syncSessionUnreadMachines(),this.syncUnreadSessionIds(),this.handleActivityTransition(t,this.state),this.handleWorkspaceChange(t,this.state),this.handleMachineChange(t,this.state),sM(t,this.state)&&this.syncMachineActivitySubscriptions(),this.notifications.syncEnvironment(t,this.state),t.selectedSession?.id!==this.state.selectedSession?.id&&this.updateSubagentPolling(),this.composerCollapsed&&this.state.pendingAsk===void 0&&this.state.pendingDialogs.length===0&&(this.composerCollapsed=!1)}async loadProjectsAndRestoreRoute(){this.restoreSettingsRoute();let e=mx();await this.machines.loadMachines(e.machineId);let t=this.routeForSelectedMachine(e),n=this.state.machineStatuses[t.machineId??`local`];if(t!==e&&this.replaceRouteAndClearWorkspaceQuery(t),await this.projects.loadProjects(),t.projectId!==void 0&&this.state.projectsLoad===`failed`){this.deferRemoteRouteRestore(t),await this.refreshWorkspaceDeletionRuns();return}await this.withChatScrollTransition(()=>this.restoreRouteFor(t,!1)),this.shouldDeferRemoteRouteRestore(t,n)?this.deferRemoteRouteRestore(t):(this.clearPendingRemoteRouteRestore(),this.rememberCurrentMachineNavigation()),await this.refreshWorkspaceDeletionRuns()}checkSocketLiveness(){document.visibilityState===`visible`&&(this.realtime.checkLiveness(),this.sessions.checkSocketLiveness())}handleBrowserResumeSignal(){this.appShell.repairViewportPosition(),this.realtime.checkLiveness(),this.sessions.checkSocketLiveness(),this.schedulePiWebStatusRefresh(),this.retryPendingRemoteRouteRestoreSoon()}async refreshAfterBrowserResume(){await this.sessionUnread.refreshAll(),await Promise.all([this.sessions.refreshSelectedSession(),this.refreshMachineStatusSnapshots(),this.refreshWorkspaceDeletionRuns(),this.refreshCurrentWorkspaceSurface(),this.workspaces.refreshSelectedProjectTopology(),this.projects.loadProjects()])}schedulePiWebStatusRefresh(e=Wj){this.clearScheduledPiWebStatusRefresh(),this.piWebStatusDeferredTimer=window.setTimeout(()=>{this.piWebStatusDeferredTimer=void 0,this.piWebStatusController.refresh()},e)}clearScheduledPiWebStatusRefresh(){this.piWebStatusDeferredTimer!==void 0&&(window.clearTimeout(this.piWebStatusDeferredTimer),this.piWebStatusDeferredTimer=void 0)}async refreshMachineStatusSnapshots(){await Promise.all(this.refreshableMachineIds().map(async e=>{try{await this.machineStatus.refresh(e)}catch(t){console.warn(`Failed to refresh machine status for ${e}`,t)}}))}refreshableMachineIds(){return this.state.machines.length===0?[R(this.state)]:this.state.machines.filter(e=>lM(e,this.state.machineStatuses[e.id])).map(e=>e.id)}async loadClientConfig(){try{this.applyClientConfig((await Ho.config()).effectiveConfig)}catch(e){console.warn(`Failed to load PI WEB config`,e)}}applyClientConfig(e){this.shortcutConfig=e.shortcuts??{},this.workspaceUploadDefaultFolder=Hs(e),this.speechToTextConfig=e.speechToText}async refreshAppData(){if(!this.isRefreshingApp){this.isRefreshingApp=!0;try{await Promise.all([this.sessions.refreshSelectedSession(),this.refreshMachineStatusSnapshots(),this.loadClientConfig(),this.refreshWorkspaceDeletionRuns(),this.refreshCurrentWorkspaceSurface(),this.workspaces.refreshSelectedProjectTopology()]),this.schedulePiWebStatusRefresh()}finally{this.isRefreshingApp=!1}}}async refreshCurrentWorkspaceSurface(){let e=this.state.selectedWorkspace,t=this.state.mainView!==`chat`&&this.state.mainView!==`navigation`?this.state.mainView:this.state.workspaceTool;t===`core:workspace.files`?await this.files.refreshFiles():t===`core:workspace.terminal`&&e!==void 0?await this.refreshActiveTerminals(e):await this.invalidateWorkspacePanels(t)}hardReloadApp(){window.location.reload()}async restoreRoute(e){await this.restoreRouteFor(mx(),e),this.rememberCurrentMachineNavigation()}async restoreRouteFor(e,t,n=this.readWorkspaceRouteSurface(e),r){let i=R(this.state),a=e.projectId===void 0||e.projectId===``?vM():n,o=++this.routeRestoreSeq;this.routeRestoreDepth+=1,this.restoringRouteTerminalId=a.selectedTerminalId;try{if(await this.restoreRouteMachine(e,!1),await this.loadPluginsForSelectedMachine(),!this.isCurrentRouteRestore(o))return;let n=hx(e,e=>this.plugins.resolveWorkspacePanelRouteId(e,R(this.state)));if(this.setState({workspaceTool:n.tool??this.state.workspaceTool,mainView:this.resolveRestoredMainView(r)??n.view??this.defaultRouteView(n),selectedFilePath:a.selectedFilePath,selectedTerminalId:a.selectedTerminalId}),n.projectId===void 0||n.projectId===``){t&&this.updateUrl();return}if(this.routeMatchesCurrentSelection(n)){a.selectedTerminalId!==void 0&&this.rememberSelectedTerminal(a.selectedTerminalId),await this.refreshRestoredWorkspaceTool(n.tool,a.selectedFilePath),t&&this.updateUrl();return}let i=this.state.projects.find(e=>e.id===n.projectId);if(!i){this.setState({selectedFilePath:void 0,selectedTerminalId:void 0}),t&&this.updateUrl();return}if(await this.workspaces.selectProject(i,{workspaceId:n.workspaceId,sessionId:n.sessionId,updateUrl:!1}),!this.isCurrentRouteRestore(o))return;this.setState({selectedFilePath:a.selectedFilePath,selectedTerminalId:a.selectedTerminalId}),a.selectedTerminalId!==void 0&&this.rememberSelectedTerminal(a.selectedTerminalId),await this.refreshRestoredWorkspaceTool(n.tool,a.selectedFilePath),t&&this.updateUrl()}finally{this.routeRestoreDepth=Math.max(0,this.routeRestoreDepth-1),this.routeRestoreDepth===0&&(this.restoringRouteTerminalId=void 0),R(this.state)!==i&&this.schedulePiWebStatusRefresh()}}isCurrentRouteRestore(e){return e===this.routeRestoreSeq}readWorkspaceRouteSurface(e){return e.projectId===void 0||e.projectId===``?vM():{selectedFilePath:Al(Xj,`file`),selectedTerminalId:Al(Zj,`terminal`)}}routeForSelectedMachine(e){let t=this.state.selectedMachine?.id??`local`;return(e.machineId??`local`)===t?e:{machineId:t,projectId:void 0,workspaceId:void 0,sessionId:void 0,tool:void 0,view:void 0}}replaceRouteAndClearWorkspaceQuery(e){_x(e,{replace:!0}),jl(Xj,`file`,void 0,{replace:!0}),jl(Zj,`terminal`,void 0,{replace:!0})}shouldDeferRemoteRouteRestore(e,t=this.state.machineStatuses[e.machineId??`local`]){let n=e.machineId??`local`,r=this.state.selectedMachine;return n===`local`||r?.id!==n||r.kind!==`remote`||t?.ok!==!1?!1:e.projectId===void 0||e.projectId===``?this.state.projects.length===0:this.state.selectedProject?.id!==e.projectId}deferRemoteRouteRestore(e){this.pendingRemoteRouteRestore=e,this.remoteRouteRestoreAttempt=0,this.setRemoteRouteRestoreMessage(e),this.schedulePendingRemoteRouteRestore()}retryPendingRemoteRouteRestoreSoon(){this.pendingRemoteRouteRestore!==void 0&&this.schedulePendingRemoteRouteRestore(0)}schedulePendingRemoteRouteRestore(e=bM(this.remoteRouteRestoreAttempt)){this.pendingRemoteRouteRestore!==void 0&&(this.clearPendingRemoteRouteRestoreTimer(),this.remoteRouteRestoreTimer=window.setTimeout(()=>{this.remoteRouteRestoreTimer=void 0,this.retryPendingRemoteRouteRestore()},e))}async retryPendingRemoteRouteRestore(){if(this.remoteRouteRestoreInProgress)return;let e=this.pendingRemoteRouteRestore;if(e!==void 0){if(!this.pendingRemoteRouteRestoreStillCurrent(e)){this.clearPendingRemoteRouteRestore();return}this.remoteRouteRestoreInProgress=!0;try{let t=e.machineId??`local`,n=await this.machines.refreshMachineHealth(t);if(!this.pendingRemoteRouteRestoreStillCurrent(e))return;if(n?.ok!==!0){this.scheduleNextRemoteRouteRestoreAttempt(e);return}if(await this.machines.refreshMachineRuntime(t),!this.pendingRemoteRouteRestoreStillCurrent(e)||(await this.projects.loadProjects(),!this.pendingRemoteRouteRestoreStillCurrent(e)))return;if(this.state.error!==``){this.scheduleNextRemoteRouteRestoreAttempt(e);return}if(await this.withChatScrollTransition(()=>this.restoreRouteFor(e,!1)),!this.pendingRemoteRouteRestoreStillCurrent(e))return;this.clearPendingRemoteRouteRestore(),this.rememberCurrentMachineNavigation(),await this.refreshWorkspaceDeletionRuns()}finally{this.remoteRouteRestoreInProgress=!1}}}scheduleNextRemoteRouteRestoreAttempt(e){if(this.remoteRouteRestoreAttempt+=1,this.remoteRouteRestoreAttempt>=Gj.length){this.setRemoteRouteRestoreMessage(e,{exhausted:!0}),this.clearPendingRemoteRouteRestore();return}this.setRemoteRouteRestoreMessage(e),this.schedulePendingRemoteRouteRestore()}setRemoteRouteRestoreMessage(e,t={}){let n=e.machineId??`local`,r=this.state.machines.find(e=>e.id===n)?.name??this.state.selectedMachine?.name??`Remote machine`,i=this.state.machineStatuses[n]?.error??(this.state.error===``?void 0:this.state.error),a=t.exhausted===!0?`${r} is still unavailable.`:`${r} is unavailable; reconnecting…`;this.setState({error:`${a}${i===void 0?``:` ${i}`}`})}pendingRemoteRouteRestoreStillCurrent(e){let t=e.machineId??`local`;return t!==`local`&&this.pendingRemoteRouteRestore===e&&this.state.selectedMachine?.id===t&&this.state.machines.some(e=>e.id===t)}clearPendingRemoteRouteRestore(){this.clearPendingRemoteRouteRestoreTimer(),this.pendingRemoteRouteRestore=void 0,this.remoteRouteRestoreAttempt=0}clearPendingRemoteRouteRestoreTimer(){this.remoteRouteRestoreTimer!==void 0&&(window.clearTimeout(this.remoteRouteRestoreTimer),this.remoteRouteRestoreTimer=void 0)}async restoreRouteMachine(e,t){let n=e.machineId??`local`;if(this.state.selectedMachine?.id===n)return;let r=this.state.machines.find(e=>e.id===n);r!==void 0&&await this.machines.selectMachine(r,{updateUrl:t})}routeMatchesCurrentSelection(e){return(e.machineId??`local`)===(this.state.selectedMachine?.id??`local`)&&e.workspaceId!==void 0&&e.workspaceId!==``&&this.state.selectedProject?.id===e.projectId&&this.state.selectedWorkspace?.id===e.workspaceId&&this.state.selectedSession?.id===e.sessionId}async refreshRestoredWorkspaceTool(e,t){e===`core:workspace.files`?(await this.files.refreshFiles(),t!==void 0&&await this.files.restoreFile(t)):e!==void 0&&e!==`core:workspace.terminal`&&await this.invalidateWorkspacePanels(e)}resolveRestoredMainView(e){return e===void 0||e===`chat`||e===`navigation`?e:gx(e,e=>this.plugins.resolveWorkspacePanelRouteId(e,R(this.state)))}async withChatScrollTransition(e,t=()=>!0){this.chatView?.saveScrollPosition(),await e(),t()&&(await this.updateComplete,t()&&(await this.chatView?.updateComplete,t()&&(await SM(),t()&&(this.chatView?.restoreScrollPosition(),this.shouldAutoFocusPrompt()&&this.promptEditor?.focusInput()))))}shouldAutoFocusPrompt(){return Nt({touchPrimary:Rt(),modalOpen:this.isRenderedModalOpen()})&&this.appShell.shouldAutoFocusPrompt()}async withChatPrependTransition(e){await e(),await this.updateComplete,await this.chatView?.updateComplete}defaultRouteView(e={}){return this.appShell.defaultRouteView(e)}updateUrl(e){this.rememberCurrentMachineNavigation(),_x({machineId:this.state.selectedMachine?.id,projectId:this.state.selectedProject?.id,workspaceId:this.state.selectedWorkspace?.id,sessionId:this.state.selectedSession?.id,tool:this.state.workspaceTool,view:this.state.mainView===`navigation`?void 0:this.state.mainView},e),this.syncWorkspaceRouteSurfaceToUrl()}rememberCurrentMachineNavigation(){this.machineNavigation.remember(Am(this.state))}syncWorkspaceRouteSurfaceToUrl(){this.writeWorkspaceRouteSurfaceToUrl(Am(this.state).surface)}writeMachineNavigationSnapshotToUrl(e,t){_x(jm(e),t),this.writeWorkspaceRouteSurfaceToUrl(e.surface)}writeWorkspaceRouteSurfaceToUrl(e){jl(Xj,`file`,e.selectedFilePath,{replace:!0}),jl(Zj,`terminal`,e.selectedTerminalId,{replace:!0})}async selectMachineWithMemory(e,t={}){if(this.state.selectedMachine?.id===e.id)return;t.rememberCurrent!==!1&&!this.routeRestoreInProgress&&this.rememberCurrentMachineNavigation();let n=++this.machineNavigationRestoreSeq,r=this.machineNavigation.latest(e.id)??km(e.id);if(await this.restoreRouteFor(jm(r),!1,r.surface,r.view),!(n!==this.machineNavigationRestoreSeq||this.state.selectedMachine?.id!==e.id)){if(this.shouldPreserveUnrestoredMachineNavigation(r)){this.machineNavigation.remember(r),this.writeMachineNavigationSnapshotToUrl(r);return}this.updateUrl()}}shouldPreserveUnrestoredMachineNavigation(e){return e.projectId!==void 0&&this.state.selectedProject?.id!==e.projectId&&this.state.error!==``}openWorkspaceTool(e){e===`core:workspace.terminal`&&(this.terminalAutoStartWorkspaceId=this.state.selectedWorkspace?.id),this.setState({workspaceTool:e,mainView:e}),this.updateUrl(),this.refreshSelectedWorkspaceTool(e)}openTerminal(e){e?.terminalId!==void 0&&this.selectTerminal(e.terminalId,{replace:!0}),this.openWorkspaceTool(`core:workspace.terminal`)}terminalCommandRunsForOrigin(e,t=R(this.state)){let n=yM(t,e),r=this.terminalCommandRunRuntimes.get(n);if(r!==void 0)return r;let i=Dx(e,{api:{runTerminalCommand:(e,n)=>es.runTerminalCommand(e,n,t),listCommandRuns:e=>es.listCommandRuns(e,t),getCommandRun:e=>es.getCommandRun(e,t)},openTerminal:(e,n)=>{this.openRuntimeTerminal(t,e,n)}});return this.terminalCommandRunRuntimes.set(n,i),i}async openRuntimeTerminal(e,t,n){if((R(this.state)!==e||t!==void 0&&(this.state.selectedWorkspace?.id!==t.id||this.state.selectedProject?.id!==t.projectId))&&(this.routeRestoreInProgress||this.rememberCurrentMachineNavigation(),await this.restoreRouteFor({machineId:e,projectId:t?.projectId,workspaceId:t?.id,sessionId:void 0,tool:`core:workspace.terminal`,view:`core:workspace.terminal`},!1,{selectedTerminalId:n?.terminalId},`core:workspace.terminal`),R(this.state)!==e)){this.setState({error:`Machine not found for terminal command run`});return}this.openTerminal(n)}selectTerminal(e,t){this.rememberSelectedTerminal(e),this.setState({selectedTerminalId:e}),this.rememberCurrentMachineNavigation(),this.writeSelectedTerminalToUrl(e,t)}rememberSelectedTerminal(e){let t=this.state.selectedWorkspace;t!==void 0&&(e===void 0?this.terminalSelection.forgetWorkspace(this.terminalWorkspaceKey(t)):this.terminalSelection.rememberTerminal(this.terminalWorkspaceKey(t),e))}writeSelectedTerminalToUrl(e,t){jl(Zj,`terminal`,e,t)}terminalWorkspaceKey(e){return`${R(this.state)}:${e.path}`}selectMainView(e){if(e!==`navigation`&&e!==`chat`){this.openWorkspaceTool(e);return}this.setState({mainView:e}),this.updateUrl()}openSettings(e=`general`){this.settingsSection=e,xx(e)}async refreshFleet(){this.fleetLoading=!0,this.fleetError=void 0;try{this.fleetReport=await Ko.report()}catch(e){this.fleetError=y(e)}finally{this.fleetLoading=!1}}async runFleetOperation(e,t){this.fleetError=void 0;try{return await Ko.run(e,t)}catch(e){this.fleetError=y(e);return}finally{this.refreshFleet()}}closeSettings(){this.settingsSection=void 0,xx(void 0)}navigateSettings(e){this.settingsSection=e,xx(e)}restoreSettingsRoute(){this.settingsSection=bx()}handleWorkspaceChange(e,t){if(e.selectedWorkspace?.id===t.selectedWorkspace?.id)return;this.terminalAutoStartWorkspaceId=void 0,this.activeTerminalIds.clear();let n=this.routeRestoreInProgress?this.restoringRouteTerminalId:t.selectedWorkspace===void 0?void 0:this.terminalSelection.latestTerminalId(this.terminalWorkspaceKey(t.selectedWorkspace));this.setState({activeTerminalCount:0,selectedTerminalId:n}),this.routeRestoreInProgress||(this.rememberCurrentMachineNavigation(),this.writeSelectedTerminalToUrl(n,{replace:!0})),t.selectedWorkspace!==void 0&&(this.refreshActiveTerminals(t.selectedWorkspace),this.refreshWorkspaceDeletionRuns(),this.refreshSelectedWorkspaceTool(t.workspaceTool))}syncSessionUnreadMachines(){if(!this.unreadConnected){this.sessionUnread.retainMachines(new Set);return}let e=new Set(this.state.machines.map(e=>e.id));e.add(R(this.state)),this.sessionUnread.retainMachines(e);for(let t of e)this.sessionUnread.projection(t)===void 0&&this.sessionUnread.refresh(t)}connectRealtime(){let e=R(this.state);this.refreshInterruptedRuns(e),this.realtime.connect(t=>{this.handleRealtimeEvent(e,t)},()=>{this.clearTransientError(),this.sessionUnread.refresh(e),this.sessions.hydrateSessionStatuses(e,{replaceKnown:!0}),this.sessions.refreshCurrentWorkspaceSessions(e),this.refreshInterruptedRuns(e);let t=this.state.selectedWorkspace;t!==void 0&&this.refreshActiveTerminals(t)},e)}syncMachineActivitySubscriptions(){let e=this.machineActivitySubscriptionIds();for(let[t,n]of this.machineRealtimeSockets.entries())e.has(t)||(n.close(),this.machineRealtimeSockets.delete(t));for(let t of e){if(this.machineRealtimeSockets.has(t))continue;let e=new Yf;e.connect(e=>{this.handleMachineActivityEvent(t,e)},()=>{this.sessionUnread.refresh(t)},t),this.machineRealtimeSockets.set(t,e)}}closeMachineActivitySockets(){for(let e of this.machineRealtimeSockets.values())e.close();this.machineRealtimeSockets.clear()}machineActivitySubscriptionIds(){let e=R(this.state);return new Set(this.state.machines.filter(t=>t.id!==e).filter(e=>cM(e,this.state.machineStatuses[e.id])).map(e=>e.id))}handleMachineActivityEvent(e,t){t.type===`sessions.unread`?this.sessionUnread.applyEvent(e,t):t.type===`machine.status`&&this.machineStatus.apply(e,t.status)}handleRealtimeEvent(e,t){t.type===`sessions.unread`?this.sessionUnread.applyEvent(e,t):t.type===`machine.status`?this.machineStatus.apply(e,t.status):_M(t)?(this.applyTerminalEvent(t),t.type===`terminal.exited`&&this.refreshWorkspaceDeletionRuns()):this.sessions.applyGlobalEvent(t)}applyTerminalEvent(e){let t=this.state.selectedWorkspace;t!==void 0&&(e.type===`terminal.closed`?e.cwd:e.terminal.cwd)===t.path&&(e.type===`terminal.created`&&!e.terminal.exited?this.activeTerminalIds.add(e.terminal.id):this.activeTerminalIds.delete(e.type===`terminal.closed`?e.terminalId:e.terminal.id),e.type===`terminal.closed`&&(this.terminalSelection.forgetTerminal(e.terminalId),this.state.selectedTerminalId===e.terminalId&&this.selectTerminal(void 0,{replace:!0})),this.setState({activeTerminalCount:this.activeTerminalIds.size}))}async refreshActiveTerminals(e){let t=R(this.state);try{let n=await es.terminals(e.projectId,e.id,t);if(R(this.state)!==t||this.state.selectedWorkspace?.id!==e.id)return;this.activeTerminalIds.clear();for(let e of n)e.exited||this.activeTerminalIds.add(e.id);this.setState({activeTerminalCount:this.activeTerminalIds.size})}catch(e){this.setState(b(e))}}handleActivityTransition(e,t){let n=gM(e),r=gM(t);n&&!r&&(this.setState({fileTreeStale:!0}),this.refreshSelectedWorkspaceTool(this.state.workspaceTool))}handleMachineChange(e,t){(e.selectedMachine?.id??`local`)!==(t.selectedMachine?.id??`local`)&&((this.pendingRemoteRouteRestore?.machineId??`local`)!==(t.selectedMachine?.id??`local`)&&this.clearPendingRemoteRouteRestore(),this.sessions.clearActiveSession(),this.realtime.close(),this.connectRealtime(),this.activeTerminalIds.clear(),this.sessionCleanupDialog=void 0,this.setState({piWebStatus:void 0}),this.loadPluginsForSelectedMachine())}refreshSelectedWorkspaceTool(e){e===`core:workspace.files`?this.files.refreshFiles():e!==`core:workspace.terminal`&&this.invalidateWorkspacePanels(e)}renderWorkspacePanel(){let e=this.state.selectedWorkspace;return h`
|
|
6369
|
+
</div>`}syncUnreadSessionIds(){let e=this.sessionUnread.unreadSessionIds(R(this.state),this.state.sessions);gM(e,this.unreadSessionIds)||(this.unreadSessionIds=e)}isSessionSeen(e,t){if(!this.unreadConnected)return!1;let n=oM(e,t);return sM(this.state)!==n||this.committedChatIdentity!==n||this.readyChatIdentity!==n||typeof document<`u`&&(document.visibilityState!==`visible`||typeof document.hasFocus==`function`&&!document.hasFocus())||this.isRenderedModalOpen()?!1:this.state.mainView===`chat`?!0:this.state.mainView===`navigation`?!this.appShell.isMobileNavigationLayout:this.isDesktopSideBySideLayout()}isRenderedModalOpen(){return Vg(this.ownerDocument)}connectedCallback(){super.connectedCallback(),nt(()=>{this.clearTransientError()}),this.unreadConnected=!0,window.visualViewport?.addEventListener(`resize`,this.onVisualViewportChange),window.visualViewport?.addEventListener(`scroll`,this.onVisualViewportChange),window.addEventListener(`resize`,this.onVisualViewportChange),window.addEventListener(`orientationchange`,this.onVisualViewportChange),this.onVisualViewportChange(),requestAnimationFrame(()=>{this.onVisualViewportChange()}),window.setTimeout(()=>{this.onVisualViewportChange()},400),window.addEventListener(`popstate`,this.onPopState),window.addEventListener(`pageshow`,this.onPageShow),this.browserResume.connect(),window.addEventListener(`keydown`,this.onKeyDown,Jj),this.systemLightThemeMedia?.addEventListener(`change`,this.onSystemLightThemeChange),this.applyPreferredTheme(!1),this.connectRealtime(),this.syncSessionUnreadMachines(),this.piWebStatusTimer=window.setInterval(()=>{this.schedulePiWebStatusRefresh()},Vj),document.addEventListener(`visibilitychange`,this.onDocumentVisibilityChange),this.listenForFormFocus(`add`),this.livenessTimer=window.setInterval(()=>{this.checkSocketLiveness()},Wj),window.addEventListener(`online`,this.onBrowserOnline),this.updateSubagentPolling(),this.loadClientConfig(),this.refreshSelfUpdate(),this.ensureGatewayPluginsLoaded(),this.loadProjectsAndRestoreRoute().finally(()=>{this.schedulePiWebStatusRefresh()})}clearTransientError(){this.state.error===``||this.state.errorRetiredBy!==ct.reply||(this.transientErrorTimer!==void 0&&(window.clearTimeout(this.transientErrorTimer),this.transientErrorTimer=void 0),this.setState({error:``}))}scheduleTransientErrorDismissal(e){this.transientErrorTimer!==void 0&&(window.clearTimeout(this.transientErrorTimer),this.transientErrorTimer=void 0),Nj(e)&&(this.transientErrorTimer=window.setTimeout(()=>{this.transientErrorTimer=void 0,this.state.error===e&&this.setState({error:``})},Pj))}disconnectedCallback(){nt(void 0),this.transientErrorTimer!==void 0&&window.clearTimeout(this.transientErrorTimer),window.removeEventListener(`resize`,this.onVisualViewportChange),window.removeEventListener(`orientationchange`,this.onVisualViewportChange),window.visualViewport?.removeEventListener(`resize`,this.onVisualViewportChange),window.visualViewport?.removeEventListener(`scroll`,this.onVisualViewportChange),this.unreadConnected=!1,this.committedChatIdentity=void 0,this.readyChatIdentity=void 0,this.sessionUnread.retainMachines(new Set),window.removeEventListener(`popstate`,this.onPopState),window.removeEventListener(`pageshow`,this.onPageShow),this.browserResume.disconnect(),window.removeEventListener(`keydown`,this.onKeyDown,Jj),this.systemLightThemeMedia?.removeEventListener(`change`,this.onSystemLightThemeChange),this.keyboard.reset(),this.auth.dispose(),this.sessions.dispose(),this.notifications.dispose(),this.realtime.close(),this.closeMachineActivitySockets(),this.piWebStatusTimer!==void 0&&window.clearInterval(this.piWebStatusTimer),this.piWebStatusTimer=void 0,this.clearScheduledPiWebStatusRefresh(),this.workspaceDeletionPollTimer!==void 0&&window.clearInterval(this.workspaceDeletionPollTimer),this.workspaceDeletionPollTimer=void 0,this.livenessTimer!==void 0&&window.clearInterval(this.livenessTimer),this.livenessTimer=void 0,window.removeEventListener(`online`,this.onBrowserOnline),document.removeEventListener(`visibilitychange`,this.onDocumentVisibilityChange),this.listenForFormFocus(`remove`),this.clearPendingRemoteRouteRestore(),super.disconnectedCallback()}setState(e){if(!fM(this.state,e))return;let t=this.state;this.state={...this.state,...e},sM(t)!==sM(this.state)&&(this.committedChatIdentity=void 0,this.readyChatIdentity=void 0),cM(t,this.state)&&this.syncSessionUnreadMachines(),this.syncUnreadSessionIds(),this.handleActivityTransition(t,this.state),this.handleWorkspaceChange(t,this.state),this.handleMachineChange(t,this.state),lM(t,this.state)&&this.syncMachineActivitySubscriptions(),this.notifications.syncEnvironment(t,this.state),t.selectedSession?.id!==this.state.selectedSession?.id&&this.updateSubagentPolling(),this.composerCollapsed&&this.state.pendingAsk===void 0&&this.state.pendingDialogs.length===0&&(this.composerCollapsed=!1)}async loadProjectsAndRestoreRoute(){this.restoreSettingsRoute();let e=gx();await this.machines.loadMachines(e.machineId);let t=this.routeForSelectedMachine(e),n=this.state.machineStatuses[t.machineId??`local`];if(t!==e&&this.replaceRouteAndClearWorkspaceQuery(t),await this.projects.loadProjects(),t.projectId!==void 0&&this.state.projectsLoad===`failed`){this.deferRemoteRouteRestore(t),await this.refreshWorkspaceDeletionRuns();return}await this.withChatScrollTransition(()=>this.restoreRouteFor(t,!1)),this.shouldDeferRemoteRouteRestore(t,n)?this.deferRemoteRouteRestore(t):(this.clearPendingRemoteRouteRestore(),this.rememberCurrentMachineNavigation()),await this.refreshWorkspaceDeletionRuns()}checkSocketLiveness(){document.visibilityState===`visible`&&(this.realtime.checkLiveness(),this.sessions.checkSocketLiveness())}handleBrowserResumeSignal(){this.appShell.repairViewportPosition(),this.realtime.checkLiveness(),this.sessions.checkSocketLiveness(),this.schedulePiWebStatusRefresh(),this.retryPendingRemoteRouteRestoreSoon()}async refreshAfterBrowserResume(){await this.sessionUnread.refreshAll(),await Promise.all([this.sessions.refreshSelectedSession(),this.refreshMachineStatusSnapshots(),this.refreshWorkspaceDeletionRuns(),this.refreshCurrentWorkspaceSurface(),this.workspaces.refreshSelectedProjectTopology(),this.projects.loadProjects()])}schedulePiWebStatusRefresh(e=Kj){this.clearScheduledPiWebStatusRefresh(),this.piWebStatusDeferredTimer=window.setTimeout(()=>{this.piWebStatusDeferredTimer=void 0,this.piWebStatusController.refresh()},e)}clearScheduledPiWebStatusRefresh(){this.piWebStatusDeferredTimer!==void 0&&(window.clearTimeout(this.piWebStatusDeferredTimer),this.piWebStatusDeferredTimer=void 0)}async refreshMachineStatusSnapshots(){await Promise.all(this.refreshableMachineIds().map(async e=>{try{await this.machineStatus.refresh(e)}catch(t){console.warn(`Failed to refresh machine status for ${e}`,t)}}))}refreshableMachineIds(){return this.state.machines.length===0?[R(this.state)]:this.state.machines.filter(e=>dM(e,this.state.machineStatuses[e.id])).map(e=>e.id)}async loadClientConfig(){try{this.applyClientConfig((await Ho.config()).effectiveConfig)}catch(e){console.warn(`Failed to load PI WEB config`,e)}}applyClientConfig(e){this.shortcutConfig=e.shortcuts??{},this.workspaceUploadDefaultFolder=Hs(e),this.speechToTextConfig=e.speechToText}async refreshAppData(){if(!this.isRefreshingApp){this.isRefreshingApp=!0;try{await Promise.all([this.sessions.refreshSelectedSession(),this.refreshMachineStatusSnapshots(),this.loadClientConfig(),this.refreshWorkspaceDeletionRuns(),this.refreshCurrentWorkspaceSurface(),this.workspaces.refreshSelectedProjectTopology()]),this.schedulePiWebStatusRefresh()}finally{this.isRefreshingApp=!1}}}async refreshCurrentWorkspaceSurface(){let e=this.state.selectedWorkspace,t=this.state.mainView!==`chat`&&this.state.mainView!==`navigation`?this.state.mainView:this.state.workspaceTool;t===`core:workspace.files`?await this.files.refreshFiles():t===`core:workspace.terminal`&&e!==void 0?await this.refreshActiveTerminals(e):await this.invalidateWorkspacePanels(t)}hardReloadApp(){window.location.reload()}async restoreRoute(e){await this.restoreRouteFor(gx(),e),this.rememberCurrentMachineNavigation()}async restoreRouteFor(e,t,n=this.readWorkspaceRouteSurface(e),r){let i=R(this.state),a=e.projectId===void 0||e.projectId===``?bM():n,o=++this.routeRestoreSeq;this.routeRestoreDepth+=1,this.restoringRouteTerminalId=a.selectedTerminalId;try{if(await this.restoreRouteMachine(e,!1),await this.loadPluginsForSelectedMachine(),!this.isCurrentRouteRestore(o))return;let n=_x(e,e=>this.plugins.resolveWorkspacePanelRouteId(e,R(this.state)));if(this.setState({workspaceTool:n.tool??this.state.workspaceTool,mainView:this.resolveRestoredMainView(r)??n.view??this.defaultRouteView(n),selectedFilePath:a.selectedFilePath,selectedTerminalId:a.selectedTerminalId}),n.projectId===void 0||n.projectId===``){t&&this.updateUrl();return}if(this.routeMatchesCurrentSelection(n)){a.selectedTerminalId!==void 0&&this.rememberSelectedTerminal(a.selectedTerminalId),await this.refreshRestoredWorkspaceTool(n.tool,a.selectedFilePath),t&&this.updateUrl();return}let i=this.state.projects.find(e=>e.id===n.projectId);if(!i){this.setState({selectedFilePath:void 0,selectedTerminalId:void 0}),t&&this.updateUrl();return}if(await this.workspaces.selectProject(i,{workspaceId:n.workspaceId,sessionId:n.sessionId,updateUrl:!1}),!this.isCurrentRouteRestore(o))return;this.setState({selectedFilePath:a.selectedFilePath,selectedTerminalId:a.selectedTerminalId}),a.selectedTerminalId!==void 0&&this.rememberSelectedTerminal(a.selectedTerminalId),await this.refreshRestoredWorkspaceTool(n.tool,a.selectedFilePath),t&&this.updateUrl()}finally{this.routeRestoreDepth=Math.max(0,this.routeRestoreDepth-1),this.routeRestoreDepth===0&&(this.restoringRouteTerminalId=void 0),R(this.state)!==i&&this.schedulePiWebStatusRefresh()}}isCurrentRouteRestore(e){return e===this.routeRestoreSeq}readWorkspaceRouteSurface(e){return e.projectId===void 0||e.projectId===``?bM():{selectedFilePath:Al(Qj,`file`),selectedTerminalId:Al($j,`terminal`)}}routeForSelectedMachine(e){let t=this.state.selectedMachine?.id??`local`;return(e.machineId??`local`)===t?e:{machineId:t,projectId:void 0,workspaceId:void 0,sessionId:void 0,tool:void 0,view:void 0}}replaceRouteAndClearWorkspaceQuery(e){yx(e,{replace:!0}),jl(Qj,`file`,void 0,{replace:!0}),jl($j,`terminal`,void 0,{replace:!0})}shouldDeferRemoteRouteRestore(e,t=this.state.machineStatuses[e.machineId??`local`]){let n=e.machineId??`local`,r=this.state.selectedMachine;return n===`local`||r?.id!==n||r.kind!==`remote`||t?.ok!==!1?!1:e.projectId===void 0||e.projectId===``?this.state.projects.length===0:this.state.selectedProject?.id!==e.projectId}deferRemoteRouteRestore(e){this.pendingRemoteRouteRestore=e,this.remoteRouteRestoreAttempt=0,this.setRemoteRouteRestoreMessage(e),this.schedulePendingRemoteRouteRestore()}retryPendingRemoteRouteRestoreSoon(){this.pendingRemoteRouteRestore!==void 0&&this.schedulePendingRemoteRouteRestore(0)}schedulePendingRemoteRouteRestore(e=SM(this.remoteRouteRestoreAttempt)){this.pendingRemoteRouteRestore!==void 0&&(this.clearPendingRemoteRouteRestoreTimer(),this.remoteRouteRestoreTimer=window.setTimeout(()=>{this.remoteRouteRestoreTimer=void 0,this.retryPendingRemoteRouteRestore()},e))}async retryPendingRemoteRouteRestore(){if(this.remoteRouteRestoreInProgress)return;let e=this.pendingRemoteRouteRestore;if(e!==void 0){if(!this.pendingRemoteRouteRestoreStillCurrent(e)){this.clearPendingRemoteRouteRestore();return}this.remoteRouteRestoreInProgress=!0;try{let t=e.machineId??`local`,n=await this.machines.refreshMachineHealth(t);if(!this.pendingRemoteRouteRestoreStillCurrent(e))return;if(n?.ok!==!0){this.scheduleNextRemoteRouteRestoreAttempt(e);return}if(await this.machines.refreshMachineRuntime(t),!this.pendingRemoteRouteRestoreStillCurrent(e)||(await this.projects.loadProjects(),!this.pendingRemoteRouteRestoreStillCurrent(e)))return;if(this.state.error!==``){this.scheduleNextRemoteRouteRestoreAttempt(e);return}if(await this.withChatScrollTransition(()=>this.restoreRouteFor(e,!1)),!this.pendingRemoteRouteRestoreStillCurrent(e))return;this.clearPendingRemoteRouteRestore(),this.rememberCurrentMachineNavigation(),await this.refreshWorkspaceDeletionRuns()}finally{this.remoteRouteRestoreInProgress=!1}}}scheduleNextRemoteRouteRestoreAttempt(e){if(this.remoteRouteRestoreAttempt+=1,this.remoteRouteRestoreAttempt>=qj.length){this.setRemoteRouteRestoreMessage(e,{exhausted:!0}),this.clearPendingRemoteRouteRestore();return}this.setRemoteRouteRestoreMessage(e),this.schedulePendingRemoteRouteRestore()}setRemoteRouteRestoreMessage(e,t={}){let n=e.machineId??`local`,r=this.state.machines.find(e=>e.id===n)?.name??this.state.selectedMachine?.name??`Remote machine`,i=this.state.machineStatuses[n]?.error??(this.state.error===``?void 0:this.state.error),a=t.exhausted===!0?`${r} is still unavailable.`:`${r} is unavailable; reconnecting…`;this.setState({error:`${a}${i===void 0?``:` ${i}`}`})}pendingRemoteRouteRestoreStillCurrent(e){let t=e.machineId??`local`;return t!==`local`&&this.pendingRemoteRouteRestore===e&&this.state.selectedMachine?.id===t&&this.state.machines.some(e=>e.id===t)}clearPendingRemoteRouteRestore(){this.clearPendingRemoteRouteRestoreTimer(),this.pendingRemoteRouteRestore=void 0,this.remoteRouteRestoreAttempt=0}clearPendingRemoteRouteRestoreTimer(){this.remoteRouteRestoreTimer!==void 0&&(window.clearTimeout(this.remoteRouteRestoreTimer),this.remoteRouteRestoreTimer=void 0)}async restoreRouteMachine(e,t){let n=e.machineId??`local`;if(this.state.selectedMachine?.id===n)return;let r=this.state.machines.find(e=>e.id===n);r!==void 0&&await this.machines.selectMachine(r,{updateUrl:t})}routeMatchesCurrentSelection(e){return(e.machineId??`local`)===(this.state.selectedMachine?.id??`local`)&&e.workspaceId!==void 0&&e.workspaceId!==``&&this.state.selectedProject?.id===e.projectId&&this.state.selectedWorkspace?.id===e.workspaceId&&this.state.selectedSession?.id===e.sessionId}async refreshRestoredWorkspaceTool(e,t){e===`core:workspace.files`?(await this.files.refreshFiles(),t!==void 0&&await this.files.restoreFile(t)):e!==void 0&&e!==`core:workspace.terminal`&&await this.invalidateWorkspacePanels(e)}resolveRestoredMainView(e){return e===void 0||e===`chat`||e===`navigation`?e:vx(e,e=>this.plugins.resolveWorkspacePanelRouteId(e,R(this.state)))}async withChatScrollTransition(e,t=()=>!0){this.chatView?.saveScrollPosition(),await e(),t()&&(await this.updateComplete,t()&&(await this.chatView?.updateComplete,t()&&(await wM(),t()&&(this.chatView?.restoreScrollPosition(),this.shouldAutoFocusPrompt()&&this.promptEditor?.focusInput()))))}shouldAutoFocusPrompt(){return Nt({touchPrimary:Rt(),modalOpen:this.isRenderedModalOpen()})&&this.appShell.shouldAutoFocusPrompt()}async withChatPrependTransition(e){await e(),await this.updateComplete,await this.chatView?.updateComplete}defaultRouteView(e={}){return this.appShell.defaultRouteView(e)}updateUrl(e){this.rememberCurrentMachineNavigation(),yx({machineId:this.state.selectedMachine?.id,projectId:this.state.selectedProject?.id,workspaceId:this.state.selectedWorkspace?.id,sessionId:this.state.selectedSession?.id,tool:this.state.workspaceTool,view:this.state.mainView===`navigation`?void 0:this.state.mainView},e),this.syncWorkspaceRouteSurfaceToUrl()}rememberCurrentMachineNavigation(){this.machineNavigation.remember(Am(this.state))}syncWorkspaceRouteSurfaceToUrl(){this.writeWorkspaceRouteSurfaceToUrl(Am(this.state).surface)}writeMachineNavigationSnapshotToUrl(e,t){yx(jm(e),t),this.writeWorkspaceRouteSurfaceToUrl(e.surface)}writeWorkspaceRouteSurfaceToUrl(e){jl(Qj,`file`,e.selectedFilePath,{replace:!0}),jl($j,`terminal`,e.selectedTerminalId,{replace:!0})}async selectMachineWithMemory(e,t={}){if(this.state.selectedMachine?.id===e.id)return;t.rememberCurrent!==!1&&!this.routeRestoreInProgress&&this.rememberCurrentMachineNavigation();let n=++this.machineNavigationRestoreSeq,r=this.machineNavigation.latest(e.id)??km(e.id);if(await this.restoreRouteFor(jm(r),!1,r.surface,r.view),!(n!==this.machineNavigationRestoreSeq||this.state.selectedMachine?.id!==e.id)){if(this.shouldPreserveUnrestoredMachineNavigation(r)){this.machineNavigation.remember(r),this.writeMachineNavigationSnapshotToUrl(r);return}this.updateUrl()}}shouldPreserveUnrestoredMachineNavigation(e){return e.projectId!==void 0&&this.state.selectedProject?.id!==e.projectId&&this.state.error!==``}openWorkspaceTool(e){e===`core:workspace.terminal`&&(this.terminalAutoStartWorkspaceId=this.state.selectedWorkspace?.id),this.setState({workspaceTool:e,mainView:e}),this.updateUrl(),this.refreshSelectedWorkspaceTool(e)}openTerminal(e){e?.terminalId!==void 0&&this.selectTerminal(e.terminalId,{replace:!0}),this.openWorkspaceTool(`core:workspace.terminal`)}terminalCommandRunsForOrigin(e,t=R(this.state)){let n=xM(t,e),r=this.terminalCommandRunRuntimes.get(n);if(r!==void 0)return r;let i=kx(e,{api:{runTerminalCommand:(e,n)=>es.runTerminalCommand(e,n,t),listCommandRuns:e=>es.listCommandRuns(e,t),getCommandRun:e=>es.getCommandRun(e,t)},openTerminal:(e,n)=>{this.openRuntimeTerminal(t,e,n)}});return this.terminalCommandRunRuntimes.set(n,i),i}async openRuntimeTerminal(e,t,n){if((R(this.state)!==e||t!==void 0&&(this.state.selectedWorkspace?.id!==t.id||this.state.selectedProject?.id!==t.projectId))&&(this.routeRestoreInProgress||this.rememberCurrentMachineNavigation(),await this.restoreRouteFor({machineId:e,projectId:t?.projectId,workspaceId:t?.id,sessionId:void 0,tool:`core:workspace.terminal`,view:`core:workspace.terminal`},!1,{selectedTerminalId:n?.terminalId},`core:workspace.terminal`),R(this.state)!==e)){this.setState({error:`Machine not found for terminal command run`});return}this.openTerminal(n)}selectTerminal(e,t){this.rememberSelectedTerminal(e),this.setState({selectedTerminalId:e}),this.rememberCurrentMachineNavigation(),this.writeSelectedTerminalToUrl(e,t)}rememberSelectedTerminal(e){let t=this.state.selectedWorkspace;t!==void 0&&(e===void 0?this.terminalSelection.forgetWorkspace(this.terminalWorkspaceKey(t)):this.terminalSelection.rememberTerminal(this.terminalWorkspaceKey(t),e))}writeSelectedTerminalToUrl(e,t){jl($j,`terminal`,e,t)}terminalWorkspaceKey(e){return`${R(this.state)}:${e.path}`}selectMainView(e){if(e!==`navigation`&&e!==`chat`){this.openWorkspaceTool(e);return}this.setState({mainView:e}),this.updateUrl()}openSettings(e=`general`){this.settingsSection=e,Cx(e)}async refreshFleet(){this.fleetLoading=!0,this.fleetError=void 0;try{this.fleetReport=await Ko.report()}catch(e){this.fleetError=y(e)}finally{this.fleetLoading=!1}}async runFleetOperation(e,t){this.fleetError=void 0;try{return await Ko.run(e,t)}catch(e){this.fleetError=y(e);return}finally{this.refreshFleet()}}closeSettings(){this.settingsSection=void 0,Cx(void 0)}navigateSettings(e){this.settingsSection=e,Cx(e)}restoreSettingsRoute(){this.settingsSection=Sx()}handleWorkspaceChange(e,t){if(e.selectedWorkspace?.id===t.selectedWorkspace?.id)return;this.terminalAutoStartWorkspaceId=void 0,this.activeTerminalIds.clear();let n=this.routeRestoreInProgress?this.restoringRouteTerminalId:t.selectedWorkspace===void 0?void 0:this.terminalSelection.latestTerminalId(this.terminalWorkspaceKey(t.selectedWorkspace));this.setState({activeTerminalCount:0,selectedTerminalId:n}),this.routeRestoreInProgress||(this.rememberCurrentMachineNavigation(),this.writeSelectedTerminalToUrl(n,{replace:!0})),t.selectedWorkspace!==void 0&&(this.refreshActiveTerminals(t.selectedWorkspace),this.refreshWorkspaceDeletionRuns(),this.refreshSelectedWorkspaceTool(t.workspaceTool))}syncSessionUnreadMachines(){if(!this.unreadConnected){this.sessionUnread.retainMachines(new Set);return}let e=new Set(this.state.machines.map(e=>e.id));e.add(R(this.state)),this.sessionUnread.retainMachines(e);for(let t of e)this.sessionUnread.projection(t)===void 0&&this.sessionUnread.refresh(t)}connectRealtime(){let e=R(this.state);this.refreshInterruptedRuns(e),this.realtime.connect(t=>{this.handleRealtimeEvent(e,t)},()=>{this.clearTransientError(),this.sessionUnread.refresh(e),this.sessions.hydrateSessionStatuses(e,{replaceKnown:!0}),this.sessions.refreshCurrentWorkspaceSessions(e),this.refreshInterruptedRuns(e);let t=this.state.selectedWorkspace;t!==void 0&&this.refreshActiveTerminals(t)},e)}syncMachineActivitySubscriptions(){let e=this.machineActivitySubscriptionIds();for(let[t,n]of this.machineRealtimeSockets.entries())e.has(t)||(n.close(),this.machineRealtimeSockets.delete(t));for(let t of e){if(this.machineRealtimeSockets.has(t))continue;let e=new Yf;e.connect(e=>{this.handleMachineActivityEvent(t,e)},()=>{this.sessionUnread.refresh(t)},t),this.machineRealtimeSockets.set(t,e)}}closeMachineActivitySockets(){for(let e of this.machineRealtimeSockets.values())e.close();this.machineRealtimeSockets.clear()}machineActivitySubscriptionIds(){let e=R(this.state);return new Set(this.state.machines.filter(t=>t.id!==e).filter(e=>uM(e,this.state.machineStatuses[e.id])).map(e=>e.id))}handleMachineActivityEvent(e,t){t.type===`sessions.unread`?this.sessionUnread.applyEvent(e,t):t.type===`machine.status`&&this.machineStatus.apply(e,t.status)}handleRealtimeEvent(e,t){t.type===`sessions.unread`?this.sessionUnread.applyEvent(e,t):t.type===`machine.status`?this.machineStatus.apply(e,t.status):yM(t)?(this.applyTerminalEvent(t),t.type===`terminal.exited`&&this.refreshWorkspaceDeletionRuns()):this.sessions.applyGlobalEvent(t)}applyTerminalEvent(e){let t=this.state.selectedWorkspace;t!==void 0&&(e.type===`terminal.closed`?e.cwd:e.terminal.cwd)===t.path&&(e.type===`terminal.created`&&!e.terminal.exited?this.activeTerminalIds.add(e.terminal.id):this.activeTerminalIds.delete(e.type===`terminal.closed`?e.terminalId:e.terminal.id),e.type===`terminal.closed`&&(this.terminalSelection.forgetTerminal(e.terminalId),this.state.selectedTerminalId===e.terminalId&&this.selectTerminal(void 0,{replace:!0})),this.setState({activeTerminalCount:this.activeTerminalIds.size}))}async refreshActiveTerminals(e){let t=R(this.state);try{let n=await es.terminals(e.projectId,e.id,t);if(R(this.state)!==t||this.state.selectedWorkspace?.id!==e.id)return;this.activeTerminalIds.clear();for(let e of n)e.exited||this.activeTerminalIds.add(e.id);this.setState({activeTerminalCount:this.activeTerminalIds.size})}catch(e){this.setState(b(e))}}handleActivityTransition(e,t){let n=vM(e),r=vM(t);n&&!r&&(this.setState({fileTreeStale:!0}),this.refreshSelectedWorkspaceTool(this.state.workspaceTool))}handleMachineChange(e,t){(e.selectedMachine?.id??`local`)!==(t.selectedMachine?.id??`local`)&&((this.pendingRemoteRouteRestore?.machineId??`local`)!==(t.selectedMachine?.id??`local`)&&this.clearPendingRemoteRouteRestore(),this.sessions.clearActiveSession(),this.realtime.close(),this.connectRealtime(),this.activeTerminalIds.clear(),this.sessionCleanupDialog=void 0,this.setState({piWebStatus:void 0}),this.loadPluginsForSelectedMachine())}refreshSelectedWorkspaceTool(e){e===`core:workspace.files`?this.files.refreshFiles():e!==`core:workspace.terminal`&&this.invalidateWorkspacePanels(e)}renderWorkspacePanel(){let e=this.state.selectedWorkspace;return h`
|
|
6358
6370
|
<workspace-panel
|
|
6359
6371
|
id="workspace-panel"
|
|
6360
6372
|
.workspace=${e}
|
|
@@ -6400,7 +6412,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
6400
6412
|
.onResizeEnd=${()=>{this.panelResize.persistPanelSizes()}}
|
|
6401
6413
|
.onReset=${()=>{this.resetResizablePanel(`workspace`)}}
|
|
6402
6414
|
></app-panel-edge-control>
|
|
6403
|
-
`}startPanelResize(e){return e===`navigation`?this.panelCollapse.expandNavigationPanel():this.panelCollapse.expandWorkspacePanel(),this.measuredPanelWidth(e)??this.panelResize.panelWidth(e)}resizablePanelConstraints(e){let t=this.panelResize.constraints(e);return{...t,maxWidth:this.resizablePanelMaxWidth(e,t)}}resizablePanelMaxWidth(e,t){let n=this.getBoundingClientRect().width||(typeof window>`u`?0:window.innerWidth);if(n<=0)return t.maxWidth;let r=this.oppositeResizablePanelWidth(e),i=Math.floor(n-r
|
|
6415
|
+
`}startPanelResize(e){return e===`navigation`?this.panelCollapse.expandNavigationPanel():this.panelCollapse.expandWorkspacePanel(),this.measuredPanelWidth(e)??this.panelResize.panelWidth(e)}resizablePanelConstraints(e){let t=this.panelResize.constraints(e);return{...t,maxWidth:this.resizablePanelMaxWidth(e,t)}}resizablePanelMaxWidth(e,t){let n=this.getBoundingClientRect().width||(typeof window>`u`?0:window.innerWidth);if(n<=0)return t.maxWidth;let r=this.oppositeResizablePanelWidth(e),i=Math.floor(n-r-tM-eM);return Math.max(t.minWidth,Math.min(t.maxWidth,i))}oppositeResizablePanelWidth(e){let t=e===`navigation`?`workspace`:`navigation`;return this.isResizablePanelCollapsedOrStacked(t)?0:this.measuredPanelWidth(t)??this.panelResize.panelWidth(t)}isResizablePanelCollapsedOrStacked(e){return e===`navigation`?this.panelCollapse.navigationPanelCollapsed:this.panelCollapse.workspacePanelCollapsed||!this.isDesktopSideBySideLayout()}isDesktopSideBySideLayout(){return typeof window>`u`||!(`matchMedia`in window)||window.matchMedia(nM).matches}measuredPanelWidth(e){let t=(e===`navigation`?this.navigationPanelFrame:this.workspacePanelFrame)?.getBoundingClientRect().width;return t===void 0||t<=0?void 0:t}resetResizablePanel(e){this.panelResize.resetPanel(e)}resetResizablePanels(){this.panelResize.resetPanels()}selectedMachineRuntime(){return this.state.machineRuntimes[R(this.state)]}openSessionCleanupDialog(){this.sessionCleanupDialog={error:``}}closeSessionCleanupDialog(){this.sessionCleanupDialog=void 0}async previewSessionCleanup(e){let t=R(this.state);this.sessionCleanupDialog={...this.sessionCleanupDialog??{},loading:!0,error:``,preview:void 0,previewRequest:void 0,result:void 0};try{let n=await $o.cleanupPreview(e,t);if(R(this.state)!==t)return;this.sessionCleanupDialog={...this.sessionCleanupDialog,preview:n,previewRequest:e,result:void 0,loading:!1,error:``}}catch(e){R(this.state)===t&&(this.sessionCleanupDialog={...this.sessionCleanupDialog,loading:!1,error:`Failed to preview cleanup: ${y(e)}`})}}async runSessionCleanup(e){let t=this.sessionCleanupDialog;if(t?.preview===void 0||Mh(t.previewRequest)!==Mh(e)){this.sessionCleanupDialog={...t??{},error:`Preview cleanup before running it.`};return}let n=R(this.state);this.sessionCleanupDialog={...t,running:!0,error:``};try{let t=await $o.cleanup(e,n);if(R(this.state)!==n)return;this.sessionCleanupDialog={...this.sessionCleanupDialog,preview:t,previewRequest:e,result:t,running:!1,error:``},await this.sessions.applySessionCleanupResult(t,n)}catch(e){R(this.state)===n&&(this.sessionCleanupDialog={...this.sessionCleanupDialog,running:!1,error:`Failed to run cleanup: ${y(e)}`})}}renderNavigationPanel(){return h`
|
|
6404
6416
|
<app-navigation-panel
|
|
6405
6417
|
.machines=${this.state.machines}
|
|
6406
6418
|
.selectedMachine=${this.state.selectedMachine}
|
|
@@ -6474,7 +6486,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
6474
6486
|
.onFocusNavigationTarget=${e=>{this.focusNavigationTarget(e)}}
|
|
6475
6487
|
.onCancelKeyboardNavigation=${()=>{this.focusChatComposer()}}
|
|
6476
6488
|
></app-navigation-panel>
|
|
6477
|
-
`}openNavigationSection(e){this.navigationSections.open(e,()=>{this.selectMainView(`navigation`)})}async selectNavigationItem(e,t,n){let r=++this.navigationSelectionSeq,i=()=>r===this.navigationSelectionSeq;if(await this.withChatScrollTransition(async()=>{this.navigationSections.advanceAfterSelection(e),await n()},i),!i())return;let a=t;e===`projects`&&(this.navigationSections.advanceAfterSelection(`projects`,{workspaceCount:this.state.workspaces.length}),this.state.workspaces.length===1&&this.state.selectedWorkspace!==void 0&&(a=`sessions`)),await this.focusNavigationTarget(a)}async startSessionFromNavigation(){let e=++this.navigationSelectionSeq;this.navigationSections.advanceAfterSelection(`sessions`),await this.startSessionAndOpenChat(()=>e===this.navigationSelectionSeq)}canStartSession(){return this.state.selectedWorkspace!==void 0}activeSessionIds(){let e=new Set;for(let t of this.quickSwitcherSessions)bl(this.state.sessionStatuses[t.id],this.state.sessionActivities[t.id])&&e.add(t.id);return e}sessionStateKinds(){return
|
|
6489
|
+
`}openNavigationSection(e){this.navigationSections.open(e,()=>{this.selectMainView(`navigation`)})}async selectNavigationItem(e,t,n){let r=++this.navigationSelectionSeq,i=()=>r===this.navigationSelectionSeq;if(await this.withChatScrollTransition(async()=>{this.navigationSections.advanceAfterSelection(e),await n()},i),!i())return;let a=t;e===`projects`&&(this.navigationSections.advanceAfterSelection(`projects`,{workspaceCount:this.state.workspaces.length}),this.state.workspaces.length===1&&this.state.selectedWorkspace!==void 0&&(a=`sessions`)),await this.focusNavigationTarget(a)}async startSessionFromNavigation(){let e=++this.navigationSelectionSeq;this.navigationSections.advanceAfterSelection(`sessions`),await this.startSessionAndOpenChat(()=>e===this.navigationSelectionSeq)}canStartSession(){return this.state.selectedWorkspace!==void 0}activeSessionIds(){let e=new Set;for(let t of this.quickSwitcherSessions)bl(this.state.sessionStatuses[t.id],this.state.sessionActivities[t.id])&&e.add(t.id);return e}sessionStateKinds(){return ZO(this.quickSwitcherSessions,this.state.sessionStatuses,this.state.sessionActivities)}errorSessionIds(){let e=new Set;for(let[t,n]of this.sessionStateKinds())n===`error`&&e.add(t);return e}togglePinnedSession(e){this.pinnedSessionIds=Aj(this.pinnedSessionIds,e.id),kj(this.pinnedSessionIds)}waitingSessionIds(){let e=new Set;for(let t of this.quickSwitcherSessions)kh(this.state.sessionStatuses[t.id])&&e.add(t.id);return e}modalLayerOpen(){return this.quickSwitcherOpen||this.mobileToolSheetOpen||this.state.actionPaletteOpen||this.state.projectDialogOpen||this.state.machineDialogOpen||this.state.commandDialog!==void 0||this.state.modelDialog!==void 0||this.state.thinkingDialog!==void 0||this.state.themeDialog!==void 0||this.sessionCleanupDialog!==void 0}pushModalLayerFrame(){window.history.pushState({},``),gt()}openActionPalette(){this.pushModalLayerFrame(),this.setState({actionPaletteOpen:!0})}openProjectDialog(){this.pushModalLayerFrame(),this.setState({projectDialogOpen:!0})}openQuickSwitcher(){It(),this.quickSwitcherOpen=!0,this.pushModalLayerFrame(),this.loadQuickSwitcherData();let e=R(this.state);e!==``&&(this.sessions.hydrateSessionStatuses(e,{replaceKnown:!0}),this.refreshInterruptedRuns(e))}applyRenameToQuickSwitcher(e,t){this.quickSwitcherSessions=XO(this.quickSwitcherSessions,e,t)}async loadQuickSwitcherData(e=!1){let t=R(this.state);if(!(!e&&this.quickSwitcherMachineId===t&&(this.quickSwitcherSessions.length>0||this.quickSwitcherWorkspaces.length>0)&&Date.now()-this.quickSwitcherFetchedAt<Hj)){this.quickSwitcherLoading=!0;try{let e=this.state.projects.length>0?this.state.projects:await Xo.projects(t),n=_M((await Promise.all(e.map(async e=>{try{return await Qo.workspaces(e.id,t)}catch{return[]}}))).flat()),r=await Promise.all(n.map(async e=>{try{return await $o.sessions(e.path,t)}catch{return[]}}));this.quickSwitcherMachineId=t,this.quickSwitcherFetchedAt=Date.now(),this.quickSwitcherWorkspaces=n,this.quickSwitcherSessions=_M(r.flat()).sort((e,t)=>Date.parse(t.modified)-Date.parse(e.modified))}catch(e){R(this.state)===t&&this.setState({error:`Failed to load sessions: ${y(e)}`})}finally{R(this.state)===t&&(this.quickSwitcherLoading=!1)}}}async openSessionFromQuickSwitcher(e){await this.sessions.selectSession(e),await this.focusChatComposer()}async startSessionAndOpenChat(e=()=>!0){this.sessions.startSession().catch(t=>{e()&&this.setState(b(t))}),e()&&await this.focusChatComposer()}async focusNavigationTarget(e){if(e===`chat`){await this.focusChatComposer();return}await this.focusNavigationSection(e)}async focusNavigationSection(e){if(e===`machines`&&!vj(this.state.machines)){await this.focusNavigationSection(`projects`);return}this.panelCollapse.expandNavigationPanel(),this.appShell.isMobileNavigationLayout&&this.selectMainView(`navigation`),this.navigationSections.expand(e),await this.updateComplete,await wM(),await this.navigationPanel?.focusSection(e)}async focusChatComposer(){this.state.mainView!==`chat`&&this.selectMainView(`chat`),await this.updateComplete,await wM(),!this.isRenderedModalOpen()&&this.shouldAutoFocusPrompt()&&this.promptEditor?.focusInput()}async navigateSessionTree(e,t){let n=R(this.state),r=this.state.selectedSession?.id,i=await this.sessions.navigateTree(e,t);return!i.cancelled&&r!==void 0&&R(this.state)===n&&this.state.selectedSession?.id===r&&await this.focusChatComposer(),i}async forkSessionTree(e){return this.sessions.forkFromTree(e)}async openSessionTree(e){this.state.selectedSession?.id!==e.id&&await this.sessions.selectSession(e),await this.sessions.runCommand(`/tree`)}closeSessionTreeNavigator(){this.sessions.closeTreeDialog(),this.focusChatComposer()}renderSessionTreeNavigator(e){return e.treeDialog===void 0?null:h`
|
|
6478
6490
|
<session-tree-navigator
|
|
6479
6491
|
.tree=${e.treeDialog}
|
|
6480
6492
|
.onNavigate=${(e,t)=>this.navigateSessionTree(e,t)}
|
|
@@ -6482,13 +6494,13 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
6482
6494
|
.onAbort=${()=>this.sessions.abortTreeNavigation()}
|
|
6483
6495
|
.onCancel=${()=>{this.closeSessionTreeNavigator()}}
|
|
6484
6496
|
></session-tree-navigator>
|
|
6485
|
-
`}visibleWorkspacePanels(){let e=this.state.selectedWorkspace;if(e===void 0)return[];let t=this.createWorkspacePanelContext(e);return this.plugins.getWorkspacePanels().filter(e=>e.visible?.(t)??!0)}workspacePanelEmptyState(){let e=this.state.selectedProject;return this.state.projectsLoad!==`loaded`&&this.state.projectsLoad!==`failed`?{title:`Loading projects…`,body:`Looking for projects you have added to PI WEB.`}:e===void 0?this.state.projects.length===0?{title:`No projects yet`,body:`Use Actions → Add Project to add a folder. Workspace tools will appear here after you choose a workspace.`}:{title:`Select a project`,body:`Choose a project from the sidebar, then select a workspace to use its tools.`}:this.state.isLoadingWorkspaces?{title:`Loading workspaces…`,body:`Preparing workspace tools for ${e.name}.`}:this.state.workspaces.length===0?{title:`No workspaces found`,body:`${e.name} does not have any available workspaces. Try selecting the project again or re-adding it.`}:{title:`Select a workspace`,body:`Choose a workspace in ${e.name} to use its tools.`}}sessionEmptyMessage(){return this.state.projectsLoad!==`loaded`&&this.state.projectsLoad!==`failed`?`Loading projects…`:this.state.selectedWorkspace===void 0?this.state.selectedProject===void 0?this.state.projects.length===0?`Add a project to start a session.`:`Select a project and workspace to start a session.`:`Select a workspace to start a session.`:`Select or start a session.`}mobilePanelBadge(e){let t=this.state.selectedWorkspace;if(t!==void 0)return e.badge?.(this.createWorkspacePanelContext(t))}workspaceLabelItems(e){return this.plugins.getWorkspaceLabelItems(this.createWorkspaceLabelContext(e))}createWorkspaceLabelContext(e){let t=rM(this.state),n=r=>{let i=jb(r,e,t.id);return Tb({machine:t,workspace:e,state:this.state,files:this.createWorkspaceFiles(e,t.id),...i===void 0?{}:{backend:i},host:this.createWorkspaceHost()},n)};return n(nM())}createWorkspaceFiles(e,t){return Mb(Qo,e,t,()=>{this.files.refreshFiles()})}createWorkspaceHost(){return{requestRender:()=>{this.requestUpdate()}}}createWorkspacePanelContext(e){let t=rM(this.state),n=t.id,r=i=>{let a=this.terminalCommandRunsForOrigin(i.registrationPluginId,n),o=jb(i,e,n);return wb({machine:t,workspace:e,state:this.state,files:this.createWorkspaceFiles(e,n),...o===void 0?{}:{backend:o},prompt:this.createPromptEditor(),terminal:{open:t=>{this.openRuntimeTerminal(n,e,t)},runCommand:t=>a.runCommand({...t,workspace:e})},openTerminal:t=>{this.openRuntimeTerminal(n,e,t)},host:this.createWorkspaceHost(),piWebUnstable:{terminalCommandRuns:a},fileTree:this.state.fileTree,expandedDirs:this.state.expandedDirs,selectedFilePath:this.state.selectedFilePath,selectedFileContent:this.state.selectedFileContent,selectedFileLoadError:this.state.selectedFileLoadError,fileTreeStale:this.state.fileTreeStale,activeTerminalCount:this.state.activeTerminalCount,selectedTerminalId:this.state.selectedTerminalId,terminalAutoStart:this.terminalAutoStartWorkspaceId===e.id,workspaceUploadDefaultFolder:Us(e.effectiveConfig,this.workspaceUploadDefaultFolder),onRefreshFiles:()=>{this.files.refreshFiles()},onExpandDir:e=>{this.files.expandDir(e)},onSelectFile:e=>{this.files.selectFile(e)},onStartWorkspaceUpload:(e,t)=>this.files.startWorkspaceUpload(e,t),onCancelWorkspaceUpload:e=>{this.files.cancelWorkspaceUpload(e)},onClearWorkspaceUpload:e=>{this.files.clearWorkspaceUpload(e)},onSelectTerminal:(e,t)=>{this.selectTerminal(e,t)}},r)};return r(nM())}invalidateWorkspacePanels(e){let t=this.state.selectedWorkspace;return t===void 0?Promise.resolve():this.plugins.invalidateWorkspacePanels(this.createWorkspacePanelContext(t),e)}getActions(){return wx(this.getDefaultActions(),this.shortcutConfig)}getDefaultActions(){return[...this.plugins.getActions(this.createPluginRuntimeContext()),...this.workspaceSurfaceActions(),...this.sessionActions(),...this.navigationFocusActions(),...this.panelLayoutActions()]}workspaceSurfaceActions(){return[{id:`core:workspace.refresh-current`,title:`Refresh current panel`,shortcut:`mod+shift+r`,group:`Workspace`,enabled:this.state.selectedWorkspace!==void 0,run:()=>this.refreshCurrentWorkspaceSurface()}]}sessionActions(){return[{id:`app.sessions.quick-switch`,title:`Open session`,description:`Search and open a session, or start a new one, without walking the navigation panel`,shortcut:`mod+p`,group:`Sessions`,run:()=>{this.openQuickSwitcher()}},{id:`app.sessions.new`,title:`New session`,description:`Start a session in the selected workspace`,shortcut:`mod+shift+n`,group:`Sessions`,enabled:this.canStartSession(),...this.canStartSession()?{}:{disabledReason:`Select a workspace first`},run:()=>{this.startSessionAndOpenChat()}},{id:`app.sessions.cleanup`,title:`Clean up sessions`,description:`Preview and manually clean up idle or archived sessions on the selected machine`,group:`Sessions`,run:()=>{this.openSessionCleanupDialog()}}]}panelLayoutActions(){return[{id:`app.layout.reset-navigation-panel-size`,title:`Reset navigation panel size`,description:`Restore the navigation panel to its default width`,group:`View`,run:()=>{this.resetResizablePanel(`navigation`)}},{id:`app.layout.reset-workspace-panel-size`,title:`Reset workspace panel size`,description:`Restore the workspace panel to its default width`,group:`View`,run:()=>{this.resetResizablePanel(`workspace`)}},{id:`app.layout.reset-panel-sizes`,title:`Reset panel sizes`,description:`Restore all side panels to their default widths`,group:`View`,run:()=>{this.resetResizablePanels()}}]}navigationFocusActions(){return[{id:`app.navigation.focus-machines`,title:`Focus machines`,description:`Move keyboard focus to the machine selector`,shortcut:`mod+g m`,group:`Navigation`,run:()=>this.focusNavigationSection(`machines`)},{id:`app.navigation.focus-projects`,title:`Focus projects`,description:`Move keyboard focus to the projects list`,shortcut:`mod+g p`,group:`Navigation`,run:()=>this.focusNavigationSection(`projects`)},{id:`app.navigation.focus-workspaces`,title:`Focus workspaces`,description:`Move keyboard focus to the workspaces list`,shortcut:`mod+g w`,group:`Navigation`,run:()=>this.focusNavigationSection(`workspaces`)},{id:`app.navigation.focus-sessions`,title:`Focus sessions`,description:`Move keyboard focus to the sessions list`,shortcut:`mod+g s`,group:`Navigation`,run:()=>this.focusNavigationSection(`sessions`)}]}ensureGatewayPluginsLoaded(){let e=this.gatewayPluginLoadPromise;if(e!==void 0)return e;let t=this.loadExternalPlugins().then(e=>{!e&&this.gatewayPluginLoadPromise===t&&(this.gatewayPluginLoadPromise=void 0)});return this.gatewayPluginLoadPromise=t,t}loadExternalPlugins(){return this.registerExternalPlugins(`PI WEB plugins`,()=>tb(`pi-web-plugins/manifest.json`,{shouldLoadPlugin:e=>!this.plugins.hasPlugin(e.id)}))}async loadPluginsForSelectedMachine(){await this.ensureGatewayPluginsLoaded();let e=this.state.selectedMachine;e?.kind===`remote`&&await this.loadPluginsForMachine(e)}async loadPluginsForMachine(e){if(await this.ensureGatewayPluginsLoaded(),e.kind!==`remote`||this.loadedMachinePluginIds.has(e.id))return;let t=this.state.machineRuntimes[e.id];if(t?.ok===!0&&!sn(t,Ht.pluginLifecycle)){console.warn(`PI WEB plugins from ${e.name} require a matching plugin lifecycle capability; update and restart PI WEB on that machine`);return}let n=this.machinePluginLoadPromises.get(e.id);if(n!==void 0)return n;let r=this.registerExternalPlugins(`PI WEB plugins from ${e.name}`,()=>tb(`api/machines/${encodeURIComponent(e.id)}/pi-web-plugins/manifest.json`,{machineId:e.id,shouldLoadPlugin:t=>!this.plugins.hasPlugin(Sl(e.id,t.id))&&this.plugins.shouldLoadRemotePlugin(t.id,t.machineSpecific)})).then(t=>{t&&this.loadedMachinePluginIds.add(e.id)}).finally(()=>{this.machinePluginLoadPromises.delete(e.id)});this.machinePluginLoadPromises.set(e.id,r),await r}async registerExternalPlugins(e,t){try{let e=await t(),n=e.failures.length===0;for(let t of e.failures)console.warn(`Failed to load PI WEB plugin ${t.entry.id} (${t.entry.module})`,t.error);for(let t of e.registrations)if(!this.plugins.hasPlugin(t.id))try{this.plugins.register(t)}catch(e){n=!1,console.warn(`Failed to register PI WEB plugin ${t.id}`,e)}return this.applyPreferredTheme(!1),this.requestUpdate(),n}catch(t){return console.warn(`Failed to load ${e}`,t),!1}}createPromptEditor(){return{insertText:e=>{let t=this.promptEditor?.view;if(!t)return;t.hasFocus||t.focus();let n=t.state.selection.main;t.dispatch({changes:{from:n.from,to:n.to,insert:e},selection:{anchor:n.from+e.length}})},getText:()=>this.promptEditor?.view?.state.doc.toString()??``,getSelection:()=>{let e=this.promptEditor?.view;if(!e)return null;let t=e.state.selection.main;return t.empty?null:{start:t.from,end:t.to,text:e.state.sliceDoc(t.from,t.to)}}}}createPluginRuntimeContext(){let e=t=>Cb({state:this.state,prompt:this.createPromptEditor(),piWebUnstable:{terminalCommandRuns:this.terminalCommandRunsForOrigin(t),openSettings:e=>{this.openSettings(e)}},openActionPalette:()=>{this.openActionPalette()},focusPrompt:()=>{this.focusChatComposer()},addProject:()=>{this.openProjectDialog()},addMachine:()=>{this.openMachineDialog()},refreshSelectedMachine:async()=>{await Promise.all([this.machines.refreshMachineHealth(),this.machines.refreshMachineRuntime()])},removeSelectedMachine:()=>this.removeMachine(),openSelectedMachine:()=>{this.openSelectedMachine()},configureAuth:()=>this.auth.openLogin(),logoutAuth:()=>this.auth.openLogout(),openThemePicker:()=>{this.openThemeDialog()},openModelPicker:()=>this.openModelDialog(),openThinkingLevelPicker:()=>this.openThinkingDialog(),selectMainView:e=>{this.selectMainView(e)},selectWorkspaceTool:e=>{this.openWorkspaceTool(e)},openTerminal:e=>{this.openTerminal(e)},refreshFiles:()=>this.files.refreshFiles(),refreshWorkspacePanels:e=>this.invalidateWorkspacePanels(e),refreshAppData:()=>this.refreshAppData(),checkForPiWebUpdates:()=>this.piWebStatusController.checkForUpdates(),reloadPage:()=>{this.hardReloadApp()},deleteWorkspace:e=>this.deleteWorkspace(e),startSession:()=>this.withChatScrollTransition(()=>this.startSessionAndOpenChat()),archiveSession:()=>this.sessions.archiveSession(),reloadSession:()=>this.sessions.reloadSession(),deleteCachedNewSession:()=>this.sessions.deleteCachedNewSession(),stopActiveWork:async()=>{await this.sessions.stopActiveWork()}},e);return e(`core`)}async deleteWorkspace(e=this.state.selectedWorkspace){if(e===void 0)return;if(!gg(e)){this.setState({error:`Workspace removal is not available`});return}if(xg(this.state,e))return;let t=e.removal,n=_g(e);if(t===void 0||n===void 0||!confirm(n))return;let r=R(this.state);try{let n=await Qo.deleteWorkspace(e.projectId,e.id,t.precondition,r);if(R(this.state)!==r)return;this.recordWorkspaceDeletionRun(n,r);let i=await this.workspaceForCommandRun(n);if(R(this.state)!==r)return;i!==void 0&&this.openRuntimeTerminal(r,i,{terminalId:n.terminalId})}catch(e){R(this.state)===r&&this.setState({error:`Failed to start workspace removal: ${y(e)}`})}}async workspaceForCommandRun(e){let t=this.state.selectedProject?.id===e.projectId?this.state.workspaces:this.state.workspacesByProjectId[e.projectId];return(t===void 0||t.length===0)&&(t=await this.workspaces.refreshProjectWorkspaces(e.projectId)),t.find(t=>t.id===e.workspaceId)}recordWorkspaceDeletionRun(e,t){if(R(this.state)!==t)return;let n=Sg(e);n!==void 0&&(this.setState({workspaceDeletionRuns:{...this.state.workspaceDeletionRuns,[n]:e}}),this.updateWorkspaceDeletionPolling())}async refreshWorkspaceDeletionRuns(){if(this.refreshingWorkspaceDeletionRuns)return;let e=R(this.state),t=this.state.selectedProject;if(t===void 0){this.setState({workspaceDeletionRuns:{}}),this.updateWorkspaceDeletionPolling();return}this.refreshingWorkspaceDeletionRuns=!0;try{let n=await this.terminalCommandRunsForOrigin(`core`,e).listCommandRuns(vg(t.id));if(R(this.state)!==e)return;let r=yg(n);this.setState({workspaceDeletionRuns:r});for(let t of Object.values(r))Cg(t)||await this.handleCompletedWorkspaceDeletionRun(t,e)}catch(e){console.warn(`Failed to refresh workspace deletion runs`,e)}finally{this.refreshingWorkspaceDeletionRuns=!1,this.updateWorkspaceDeletionPolling()}}updateWorkspaceDeletionPolling(){let e=Object.values(this.state.workspaceDeletionRuns).some(Cg);if(e&&this.workspaceDeletionPollTimer===void 0){this.workspaceDeletionPollTimer=window.setInterval(()=>{this.refreshWorkspaceDeletionRuns()},1e3);return}!e&&this.workspaceDeletionPollTimer!==void 0&&(window.clearInterval(this.workspaceDeletionPollTimer),this.workspaceDeletionPollTimer=void 0)}async handleCompletedWorkspaceDeletionRun(e,t=R(this.state)){if(R(this.state)!==t)return;let n=yM(t,e.id);if(this.handledWorkspaceDeletionRunIds.has(n))return;let r=Sg(e);if(r!==void 0){if(this.handledWorkspaceDeletionRunIds.add(n),e.status===`succeeded`){if(await this.workspaces.refreshAfterWorkspaceDeleted(e.projectId,r),R(this.state)!==t)return;this.setState({workspaceDeletionRuns:xM(this.state.workspaceDeletionRuns,r)}),this.updateWorkspaceDeletionPolling();return}e.status===`failed`&&(this.setState({error:`Workspace removal failed. See terminal output.`}),this.updateWorkspaceDeletionPolling())}}async focusPromptEditorSoon(){await this.updateComplete,this.shouldAutoFocusPrompt()&&this.promptEditor?.focusInput()}openMachineDialog(){this.pushModalLayerFrame(),this.setState({machineDialogOpen:!0,error:``})}async submitMachineDialog(e){await this.machines.addMachine(e)!==void 0&&(this.setState({machineDialogOpen:!1}),this.schedulePiWebStatusRefresh())}async renameMachine(e,t){let n=t.trim();n===``||n===e.name||await this.machines.updateMachine(e,{name:n})}async removeMachine(e=this.state.selectedMachine){if(e===void 0||e.kind===`local`||!window.confirm(`Remove ${e.name}?\n\nThis only removes it from this PI WEB gateway.`))return;let t=this.state.selectedMachine?.id===e.id;t&&this.rememberCurrentMachineNavigation();let n=await this.machines.deleteMachine(e,{selectFallback:!t});this.state.machines.some(t=>t.id===e.id)||this.machineNavigation.forget(e.id),t&&n!==void 0&&await this.selectMachineWithMemory(n,{rememberCurrent:!1})}openSelectedMachine(){let e=this.state.selectedMachine;e?.kind!==`remote`||e.baseUrl===void 0||window.open(e.baseUrl,`_blank`,`noopener,noreferrer`)}runAction(e){Promise.resolve().then(()=>e.run()).catch(t=>{let n=y(t);console.warn(`Action failed: ${e.id}`,t),this.setState({error:`Action failed: ${n}`})})}async openModelDialog(){let[e,t]=await Promise.all([this.sessions.listModels(),this.sessions.listModelCatalog()]),n=this.currentModelValue();this.setState({modelDialog:{title:`Select model`,...n===void 0?{}:{selectedValue:n},options:this.modelDialogOptions(e),catalog:t}})}currentModelValue(){let e=this.state.status?.model?.provider,t=this.state.status?.model?.id;return e!==void 0&&t!==void 0?`${e}/${t}`:void 0}modelDialogOptions(e){let t=this.currentModelValue();return e.map(e=>{let n=e.provider??``,r=e.id??``,i=`${n}/${r}`;return{value:i,label:`${r}${i===t?` ✓ current`:``}`,description:n}})}async pickModel(e){this.setState({modelDialog:void 0});let t=e.indexOf(`/`);t<=0||await this.sessions.setModel(e.slice(0,t),e.slice(t+1))}openThemeDialog(){let e=this.plugins.getThemes(),t=this.resolveCurrentThemePreference(e),n=t.selectedTheme?.id,r=this.themePreference.auto?Jj:qj;this.pushModalLayerFrame(),this.setState({themeDialog:{title:`Select theme`,selectedValue:n===void 0?r:`${Yj}${n}`,options:[{value:r,label:`Auto ${this.themePreference.auto?`✓ on`:`off`}`,description:this.autoThemeDescription(t)},...e.map(e=>({value:`${Yj}${e.id}`,label:this.themeOptionLabel(e,n),description:this.themeOptionDescription(e)}))]}})}selectTheme(e){let t=this.plugins.getThemes().find(t=>t.id===e);t!==void 0&&(this.themePreference={themeId:t.id,auto:this.themePreference.auto},this.applyPreferredTheme(!0))}setFollowSystemTheme(e){this.themePreference={themeId:this.themePreference.themeId,auto:e},this.applyPreferredTheme(!0)}pickTheme(e){if(this.setState({themeDialog:void 0}),e===qj||e===Jj){let t=this.resolveCurrentThemePreference().selectedTheme?.id;if(t===void 0)return;this.themePreference={themeId:t,auto:e===qj},this.applyPreferredTheme(!0);return}if(!e.startsWith(Yj))return;let t=e.slice(6),n=this.plugins.getThemes().find(e=>e.id===t);n!==void 0&&(this.themePreference={themeId:n.id,auto:this.themePreference.auto},this.applyPreferredTheme(!0))}applyPreferredTheme(e){let t=this.resolveCurrentThemePreference().activeTheme;t!==void 0&&(this.activeThemeId=t.id,ag(t),e&&ig(this.themePreference))}resolveCurrentThemePreference(e=this.plugins.getThemes()){return og({themes:e,themePairs:this.plugins.getThemePairs(),preference:this.themePreference,prefersLight:this.systemPrefersLight()})}themePairForTheme(e){return cg(this.plugins.getThemePairs(),e)}systemPrefersLight(){return this.systemLightThemeMedia?.matches??!1}autoThemeDescription(e){return!this.themePreference.auto||e.selectedTheme===void 0?`Follow the system light/dark preference when the selected theme has a pair.`:e.selectedThemePair===void 0?`On, but the selected theme has no light/dark pair, so it will stay selected.`:`On · ${e.selectedThemePair.name} follows the system ${this.systemPrefersLight()?`light`:`dark`} preference.`}themeOptionLabel(e,t){let n=[...e.id===t?[`selected`]:[],...e.id===this.activeThemeId&&e.id!==t?[`active`]:[]];return n.length===0?e.name:`${e.name} ✓ ${n.join(` · `)}`}themeOptionDescription(e){let t=[e.colorScheme];return this.themePairForTheme(e.id)!==void 0&&t.push(`auto pair`),e.description!==void 0&&t.push(e.description),t.join(` · `)}async openThinkingDialog(){let e=await this.sessions.listThinkingLevels(),t=this.state.status?.thinkingLevel??`off`;this.pushModalLayerFrame(),this.setState({thinkingDialog:{title:`Select thinking level`,selectedValue:t,options:e.map(e=>{let n=CM(e);return{value:e,label:`${e}${e===t?` ✓ current`:``}`,...n===void 0?{}:{description:n}}})}})}async pickThinking(e){this.setState({thinkingDialog:void 0}),e!==``&&await this.sessions.setThinkingLevel(e)}async runGoalCommand(e){if(!this.goalCommandInFlight){if(this.state.selectedSession===void 0){this.setState({error:`Open a session in this workspace to run goal commands.`});return}this.goalCommandInFlight=!0,this.requestUpdate();try{await this.sessions.runCommand(e,`goal-panel`)}finally{this.goalCommandInFlight=!1,this.requestUpdate()}this.workspaces.refreshWorkspaceGoals()}}async sendPrompt(e,t,n,r,i){return!(n!==void 0&&n.length>0)&&t===void 0&&this.auth.handleSlashCommand(e)?!0:await this.sessions.send(e,t,n,r,i)}restoreToComposer(e){let t=e.map(e=>e.text).filter(e=>e.trim()!==``);t.length!==0&&(this.promptEditor?.replaceText(t.join(`
|
|
6497
|
+
`}visibleWorkspacePanels(){let e=this.state.selectedWorkspace;if(e===void 0)return[];let t=this.createWorkspacePanelContext(e);return this.plugins.getWorkspacePanels().filter(e=>e.visible?.(t)??!0)}workspacePanelEmptyState(){let e=this.state.selectedProject;return this.state.projectsLoad!==`loaded`&&this.state.projectsLoad!==`failed`?{title:`Loading projects…`,body:`Looking for projects you have added to PI WEB.`}:e===void 0?this.state.projects.length===0?{title:`No projects yet`,body:`Use Actions → Add Project to add a folder. Workspace tools will appear here after you choose a workspace.`}:{title:`Select a project`,body:`Choose a project from the sidebar, then select a workspace to use its tools.`}:this.state.isLoadingWorkspaces?{title:`Loading workspaces…`,body:`Preparing workspace tools for ${e.name}.`}:this.state.workspaces.length===0?{title:`No workspaces found`,body:`${e.name} does not have any available workspaces. Try selecting the project again or re-adding it.`}:{title:`Select a workspace`,body:`Choose a workspace in ${e.name} to use its tools.`}}sessionEmptyMessage(){return this.state.projectsLoad!==`loaded`&&this.state.projectsLoad!==`failed`?`Loading projects…`:this.state.selectedWorkspace===void 0?this.state.selectedProject===void 0?this.state.projects.length===0?`Add a project to start a session.`:`Select a project and workspace to start a session.`:`Select a workspace to start a session.`:`Select or start a session.`}mobilePanelBadge(e){let t=this.state.selectedWorkspace;if(t!==void 0)return e.badge?.(this.createWorkspacePanelContext(t))}workspaceLabelItems(e){return this.plugins.getWorkspaceLabelItems(this.createWorkspaceLabelContext(e))}createWorkspaceLabelContext(e){let t=aM(this.state),n=r=>{let i=Nb(r,e,t.id);return Db({machine:t,workspace:e,state:this.state,files:this.createWorkspaceFiles(e,t.id),...i===void 0?{}:{backend:i},host:this.createWorkspaceHost()},n)};return n(iM())}createWorkspaceFiles(e,t){return Pb(Qo,e,t,()=>{this.files.refreshFiles()})}createWorkspaceHost(){return{requestRender:()=>{this.requestUpdate()}}}createWorkspacePanelContext(e){let t=aM(this.state),n=t.id,r=i=>{let a=this.terminalCommandRunsForOrigin(i.registrationPluginId,n),o=Nb(i,e,n);return Eb({machine:t,workspace:e,state:this.state,files:this.createWorkspaceFiles(e,n),...o===void 0?{}:{backend:o},prompt:this.createPromptEditor(),terminal:{open:t=>{this.openRuntimeTerminal(n,e,t)},runCommand:t=>a.runCommand({...t,workspace:e})},openTerminal:t=>{this.openRuntimeTerminal(n,e,t)},host:this.createWorkspaceHost(),piWebUnstable:{terminalCommandRuns:a},fileTree:this.state.fileTree,expandedDirs:this.state.expandedDirs,selectedFilePath:this.state.selectedFilePath,selectedFileContent:this.state.selectedFileContent,selectedFileLoadError:this.state.selectedFileLoadError,fileTreeStale:this.state.fileTreeStale,activeTerminalCount:this.state.activeTerminalCount,selectedTerminalId:this.state.selectedTerminalId,terminalAutoStart:this.terminalAutoStartWorkspaceId===e.id,workspaceUploadDefaultFolder:Us(e.effectiveConfig,this.workspaceUploadDefaultFolder),onRefreshFiles:()=>{this.files.refreshFiles()},onExpandDir:e=>{this.files.expandDir(e)},onSelectFile:e=>{this.files.selectFile(e)},onStartWorkspaceUpload:(e,t)=>this.files.startWorkspaceUpload(e,t),onCancelWorkspaceUpload:e=>{this.files.cancelWorkspaceUpload(e)},onClearWorkspaceUpload:e=>{this.files.clearWorkspaceUpload(e)},onSelectTerminal:(e,t)=>{this.selectTerminal(e,t)}},r)};return r(iM())}invalidateWorkspacePanels(e){let t=this.state.selectedWorkspace;return t===void 0?Promise.resolve():this.plugins.invalidateWorkspacePanels(this.createWorkspacePanelContext(t),e)}getActions(){return Ex(this.getDefaultActions(),this.shortcutConfig)}getDefaultActions(){return[...this.plugins.getActions(this.createPluginRuntimeContext()),...this.workspaceSurfaceActions(),...this.sessionActions(),...this.navigationFocusActions(),...this.panelLayoutActions()]}workspaceSurfaceActions(){return[{id:`core:workspace.refresh-current`,title:`Refresh current panel`,shortcut:`mod+shift+r`,group:`Workspace`,enabled:this.state.selectedWorkspace!==void 0,run:()=>this.refreshCurrentWorkspaceSurface()}]}sessionActions(){return[{id:`app.sessions.quick-switch`,title:`Open session`,description:`Search and open a session, or start a new one, without walking the navigation panel`,shortcut:`mod+p`,group:`Sessions`,run:()=>{this.openQuickSwitcher()}},{id:`app.sessions.new`,title:`New session`,description:`Start a session in the selected workspace`,shortcut:`mod+shift+n`,group:`Sessions`,enabled:this.canStartSession(),...this.canStartSession()?{}:{disabledReason:`Select a workspace first`},run:()=>{this.startSessionAndOpenChat()}},{id:`app.sessions.cleanup`,title:`Clean up sessions`,description:`Preview and manually clean up idle or archived sessions on the selected machine`,group:`Sessions`,run:()=>{this.openSessionCleanupDialog()}}]}panelLayoutActions(){return[{id:`app.layout.reset-navigation-panel-size`,title:`Reset navigation panel size`,description:`Restore the navigation panel to its default width`,group:`View`,run:()=>{this.resetResizablePanel(`navigation`)}},{id:`app.layout.reset-workspace-panel-size`,title:`Reset workspace panel size`,description:`Restore the workspace panel to its default width`,group:`View`,run:()=>{this.resetResizablePanel(`workspace`)}},{id:`app.layout.reset-panel-sizes`,title:`Reset panel sizes`,description:`Restore all side panels to their default widths`,group:`View`,run:()=>{this.resetResizablePanels()}}]}navigationFocusActions(){return[{id:`app.navigation.focus-machines`,title:`Focus machines`,description:`Move keyboard focus to the machine selector`,shortcut:`mod+g m`,group:`Navigation`,run:()=>this.focusNavigationSection(`machines`)},{id:`app.navigation.focus-projects`,title:`Focus projects`,description:`Move keyboard focus to the projects list`,shortcut:`mod+g p`,group:`Navigation`,run:()=>this.focusNavigationSection(`projects`)},{id:`app.navigation.focus-workspaces`,title:`Focus workspaces`,description:`Move keyboard focus to the workspaces list`,shortcut:`mod+g w`,group:`Navigation`,run:()=>this.focusNavigationSection(`workspaces`)},{id:`app.navigation.focus-sessions`,title:`Focus sessions`,description:`Move keyboard focus to the sessions list`,shortcut:`mod+g s`,group:`Navigation`,run:()=>this.focusNavigationSection(`sessions`)}]}ensureGatewayPluginsLoaded(){let e=this.gatewayPluginLoadPromise;if(e!==void 0)return e;let t=this.loadExternalPlugins().then(e=>{!e&&this.gatewayPluginLoadPromise===t&&(this.gatewayPluginLoadPromise=void 0)});return this.gatewayPluginLoadPromise=t,t}loadExternalPlugins(){return this.registerExternalPlugins(`PI WEB plugins`,()=>rb(`pi-web-plugins/manifest.json`,{shouldLoadPlugin:e=>!this.plugins.hasPlugin(e.id)}))}async loadPluginsForSelectedMachine(){await this.ensureGatewayPluginsLoaded();let e=this.state.selectedMachine;e?.kind===`remote`&&await this.loadPluginsForMachine(e)}async loadPluginsForMachine(e){if(await this.ensureGatewayPluginsLoaded(),e.kind!==`remote`||this.loadedMachinePluginIds.has(e.id))return;let t=this.state.machineRuntimes[e.id];if(t?.ok===!0&&!sn(t,Ht.pluginLifecycle)){console.warn(`PI WEB plugins from ${e.name} require a matching plugin lifecycle capability; update and restart PI WEB on that machine`);return}let n=this.machinePluginLoadPromises.get(e.id);if(n!==void 0)return n;let r=this.registerExternalPlugins(`PI WEB plugins from ${e.name}`,()=>rb(`api/machines/${encodeURIComponent(e.id)}/pi-web-plugins/manifest.json`,{machineId:e.id,shouldLoadPlugin:t=>!this.plugins.hasPlugin(Sl(e.id,t.id))&&this.plugins.shouldLoadRemotePlugin(t.id,t.machineSpecific)})).then(t=>{t&&this.loadedMachinePluginIds.add(e.id)}).finally(()=>{this.machinePluginLoadPromises.delete(e.id)});this.machinePluginLoadPromises.set(e.id,r),await r}async registerExternalPlugins(e,t){try{let e=await t(),n=e.failures.length===0;for(let t of e.failures)console.warn(`Failed to load PI WEB plugin ${t.entry.id} (${t.entry.module})`,t.error);for(let t of e.registrations)if(!this.plugins.hasPlugin(t.id))try{this.plugins.register(t)}catch(e){n=!1,console.warn(`Failed to register PI WEB plugin ${t.id}`,e)}return this.applyPreferredTheme(!1),this.requestUpdate(),n}catch(t){return console.warn(`Failed to load ${e}`,t),!1}}createPromptEditor(){return{insertText:e=>{let t=this.promptEditor?.view;if(!t)return;t.hasFocus||t.focus();let n=t.state.selection.main;t.dispatch({changes:{from:n.from,to:n.to,insert:e},selection:{anchor:n.from+e.length}})},getText:()=>this.promptEditor?.view?.state.doc.toString()??``,getSelection:()=>{let e=this.promptEditor?.view;if(!e)return null;let t=e.state.selection.main;return t.empty?null:{start:t.from,end:t.to,text:e.state.sliceDoc(t.from,t.to)}}}}createPluginRuntimeContext(){let e=t=>Tb({state:this.state,prompt:this.createPromptEditor(),piWebUnstable:{terminalCommandRuns:this.terminalCommandRunsForOrigin(t),openSettings:e=>{this.openSettings(e)}},openActionPalette:()=>{this.openActionPalette()},focusPrompt:()=>{this.focusChatComposer()},addProject:()=>{this.openProjectDialog()},addMachine:()=>{this.openMachineDialog()},refreshSelectedMachine:async()=>{await Promise.all([this.machines.refreshMachineHealth(),this.machines.refreshMachineRuntime()])},removeSelectedMachine:()=>this.removeMachine(),openSelectedMachine:()=>{this.openSelectedMachine()},configureAuth:()=>this.auth.openLogin(),logoutAuth:()=>this.auth.openLogout(),openThemePicker:()=>{this.openThemeDialog()},openModelPicker:()=>this.openModelDialog(),openThinkingLevelPicker:()=>this.openThinkingDialog(),selectMainView:e=>{this.selectMainView(e)},selectWorkspaceTool:e=>{this.openWorkspaceTool(e)},openTerminal:e=>{this.openTerminal(e)},refreshFiles:()=>this.files.refreshFiles(),refreshWorkspacePanels:e=>this.invalidateWorkspacePanels(e),refreshAppData:()=>this.refreshAppData(),checkForPiWebUpdates:()=>this.piWebStatusController.checkForUpdates(),reloadPage:()=>{this.hardReloadApp()},deleteWorkspace:e=>this.deleteWorkspace(e),startSession:()=>this.withChatScrollTransition(()=>this.startSessionAndOpenChat()),archiveSession:()=>this.sessions.archiveSession(),reloadSession:()=>this.sessions.reloadSession(),deleteCachedNewSession:()=>this.sessions.deleteCachedNewSession(),stopActiveWork:async()=>{await this.sessions.stopActiveWork()}},e);return e(`core`)}async deleteWorkspace(e=this.state.selectedWorkspace){if(e===void 0)return;if(!gg(e)){this.setState({error:`Workspace removal is not available`});return}if(xg(this.state,e))return;let t=e.removal,n=_g(e);if(t===void 0||n===void 0||!confirm(n))return;let r=R(this.state);try{let n=await Qo.deleteWorkspace(e.projectId,e.id,t.precondition,r);if(R(this.state)!==r)return;this.recordWorkspaceDeletionRun(n,r);let i=await this.workspaceForCommandRun(n);if(R(this.state)!==r)return;i!==void 0&&this.openRuntimeTerminal(r,i,{terminalId:n.terminalId})}catch(e){R(this.state)===r&&this.setState({error:`Failed to start workspace removal: ${y(e)}`})}}async workspaceForCommandRun(e){let t=this.state.selectedProject?.id===e.projectId?this.state.workspaces:this.state.workspacesByProjectId[e.projectId];return(t===void 0||t.length===0)&&(t=await this.workspaces.refreshProjectWorkspaces(e.projectId)),t.find(t=>t.id===e.workspaceId)}recordWorkspaceDeletionRun(e,t){if(R(this.state)!==t)return;let n=Sg(e);n!==void 0&&(this.setState({workspaceDeletionRuns:{...this.state.workspaceDeletionRuns,[n]:e}}),this.updateWorkspaceDeletionPolling())}async refreshWorkspaceDeletionRuns(){if(this.refreshingWorkspaceDeletionRuns)return;let e=R(this.state),t=this.state.selectedProject;if(t===void 0){this.setState({workspaceDeletionRuns:{}}),this.updateWorkspaceDeletionPolling();return}this.refreshingWorkspaceDeletionRuns=!0;try{let n=await this.terminalCommandRunsForOrigin(`core`,e).listCommandRuns(vg(t.id));if(R(this.state)!==e)return;let r=yg(n);this.setState({workspaceDeletionRuns:r});for(let t of Object.values(r))Cg(t)||await this.handleCompletedWorkspaceDeletionRun(t,e)}catch(e){console.warn(`Failed to refresh workspace deletion runs`,e)}finally{this.refreshingWorkspaceDeletionRuns=!1,this.updateWorkspaceDeletionPolling()}}updateWorkspaceDeletionPolling(){let e=Object.values(this.state.workspaceDeletionRuns).some(Cg);if(e&&this.workspaceDeletionPollTimer===void 0){this.workspaceDeletionPollTimer=window.setInterval(()=>{this.refreshWorkspaceDeletionRuns()},1e3);return}!e&&this.workspaceDeletionPollTimer!==void 0&&(window.clearInterval(this.workspaceDeletionPollTimer),this.workspaceDeletionPollTimer=void 0)}async handleCompletedWorkspaceDeletionRun(e,t=R(this.state)){if(R(this.state)!==t)return;let n=xM(t,e.id);if(this.handledWorkspaceDeletionRunIds.has(n))return;let r=Sg(e);if(r!==void 0){if(this.handledWorkspaceDeletionRunIds.add(n),e.status===`succeeded`){if(await this.workspaces.refreshAfterWorkspaceDeleted(e.projectId,r),R(this.state)!==t)return;this.setState({workspaceDeletionRuns:CM(this.state.workspaceDeletionRuns,r)}),this.updateWorkspaceDeletionPolling();return}e.status===`failed`&&(this.setState({error:`Workspace removal failed. See terminal output.`}),this.updateWorkspaceDeletionPolling())}}async focusPromptEditorSoon(){await this.updateComplete,this.shouldAutoFocusPrompt()&&this.promptEditor?.focusInput()}openMachineDialog(){this.pushModalLayerFrame(),this.setState({machineDialogOpen:!0,error:``})}async submitMachineDialog(e){await this.machines.addMachine(e)!==void 0&&(this.setState({machineDialogOpen:!1}),this.schedulePiWebStatusRefresh())}async renameMachine(e,t){let n=t.trim();n===``||n===e.name||await this.machines.updateMachine(e,{name:n})}async removeMachine(e=this.state.selectedMachine){if(e===void 0||e.kind===`local`||!window.confirm(`Remove ${e.name}?\n\nThis only removes it from this PI WEB gateway.`))return;let t=this.state.selectedMachine?.id===e.id;t&&this.rememberCurrentMachineNavigation();let n=await this.machines.deleteMachine(e,{selectFallback:!t});this.state.machines.some(t=>t.id===e.id)||this.machineNavigation.forget(e.id),t&&n!==void 0&&await this.selectMachineWithMemory(n,{rememberCurrent:!1})}openSelectedMachine(){let e=this.state.selectedMachine;e?.kind!==`remote`||e.baseUrl===void 0||window.open(e.baseUrl,`_blank`,`noopener,noreferrer`)}runAction(e){Promise.resolve().then(()=>e.run()).catch(t=>{let n=y(t);console.warn(`Action failed: ${e.id}`,t),this.setState({error:`Action failed: ${n}`})})}async openModelDialog(){let[e,t]=await Promise.all([this.sessions.listModels(),this.sessions.listModelCatalog()]),n=this.currentModelValue();this.setState({modelDialog:{title:`Select model`,...n===void 0?{}:{selectedValue:n},options:this.modelDialogOptions(e),catalog:t}})}currentModelValue(){let e=this.state.status?.model?.provider,t=this.state.status?.model?.id;return e!==void 0&&t!==void 0?`${e}/${t}`:void 0}modelDialogOptions(e){let t=this.currentModelValue();return e.map(e=>{let n=e.provider??``,r=e.id??``,i=`${n}/${r}`;return{value:i,label:`${r}${i===t?` ✓ current`:``}`,description:n}})}async pickModel(e){this.setState({modelDialog:void 0});let t=e.indexOf(`/`);t<=0||await this.sessions.setModel(e.slice(0,t),e.slice(t+1))}openThemeDialog(){let e=this.plugins.getThemes(),t=this.resolveCurrentThemePreference(e),n=t.selectedTheme?.id,r=this.themePreference.auto?Xj:Yj;this.pushModalLayerFrame(),this.setState({themeDialog:{title:`Select theme`,selectedValue:n===void 0?r:`${Zj}${n}`,options:[{value:r,label:`Auto ${this.themePreference.auto?`✓ on`:`off`}`,description:this.autoThemeDescription(t)},...e.map(e=>({value:`${Zj}${e.id}`,label:this.themeOptionLabel(e,n),description:this.themeOptionDescription(e)}))]}})}selectTheme(e){let t=this.plugins.getThemes().find(t=>t.id===e);t!==void 0&&(this.themePreference={themeId:t.id,auto:this.themePreference.auto},this.applyPreferredTheme(!0))}setFollowSystemTheme(e){this.themePreference={themeId:this.themePreference.themeId,auto:e},this.applyPreferredTheme(!0)}pickTheme(e){if(this.setState({themeDialog:void 0}),e===Yj||e===Xj){let t=this.resolveCurrentThemePreference().selectedTheme?.id;if(t===void 0)return;this.themePreference={themeId:t,auto:e===Yj},this.applyPreferredTheme(!0);return}if(!e.startsWith(Zj))return;let t=e.slice(6),n=this.plugins.getThemes().find(e=>e.id===t);n!==void 0&&(this.themePreference={themeId:n.id,auto:this.themePreference.auto},this.applyPreferredTheme(!0))}applyPreferredTheme(e){let t=this.resolveCurrentThemePreference().activeTheme;t!==void 0&&(this.activeThemeId=t.id,ag(t),e&&ig(this.themePreference))}resolveCurrentThemePreference(e=this.plugins.getThemes()){return og({themes:e,themePairs:this.plugins.getThemePairs(),preference:this.themePreference,prefersLight:this.systemPrefersLight()})}themePairForTheme(e){return cg(this.plugins.getThemePairs(),e)}systemPrefersLight(){return this.systemLightThemeMedia?.matches??!1}autoThemeDescription(e){return!this.themePreference.auto||e.selectedTheme===void 0?`Follow the system light/dark preference when the selected theme has a pair.`:e.selectedThemePair===void 0?`On, but the selected theme has no light/dark pair, so it will stay selected.`:`On · ${e.selectedThemePair.name} follows the system ${this.systemPrefersLight()?`light`:`dark`} preference.`}themeOptionLabel(e,t){let n=[...e.id===t?[`selected`]:[],...e.id===this.activeThemeId&&e.id!==t?[`active`]:[]];return n.length===0?e.name:`${e.name} ✓ ${n.join(` · `)}`}themeOptionDescription(e){let t=[e.colorScheme];return this.themePairForTheme(e.id)!==void 0&&t.push(`auto pair`),e.description!==void 0&&t.push(e.description),t.join(` · `)}async openThinkingDialog(){let e=await this.sessions.listThinkingLevels(),t=this.state.status?.thinkingLevel??`off`;this.pushModalLayerFrame(),this.setState({thinkingDialog:{title:`Select thinking level`,selectedValue:t,options:e.map(e=>{let n=TM(e);return{value:e,label:`${e}${e===t?` ✓ current`:``}`,...n===void 0?{}:{description:n}}})}})}async pickThinking(e){this.setState({thinkingDialog:void 0}),e!==``&&await this.sessions.setThinkingLevel(e)}async runGoalCommand(e){if(!this.goalCommandInFlight){if(this.state.selectedSession===void 0){this.setState({error:`Open a session in this workspace to run goal commands.`});return}this.goalCommandInFlight=!0,this.requestUpdate();try{await this.sessions.runCommand(e,`goal-panel`)}finally{this.goalCommandInFlight=!1,this.requestUpdate()}this.workspaces.refreshWorkspaceGoals()}}async sendPrompt(e,t,n,r,i){return!(n!==void 0&&n.length>0)&&t===void 0&&this.auth.handleSlashCommand(e)?!0:await this.sessions.send(e,t,n,r,i)}restoreToComposer(e){let t=e.map(e=>e.text).filter(e=>e.trim()!==``);t.length!==0&&(this.promptEditor?.replaceText(t.join(`
|
|
6486
6498
|
|
|
6487
6499
|
`)),this.shouldAutoFocusPrompt()&&this.promptEditor?.focusInput())}renderChatView(e,t){return h`
|
|
6488
6500
|
<chat-view .goalsLoad=${gl(e)} .onRunGoalCommand=${(e,t)=>this.runGoalCommand(t)} .sessionId=${t.id} .messages=${e.messages} .messageStart=${e.messagePageStart} .messageEnd=${e.messagePageEnd} .messageTotal=${e.messagePageTotal} .hasMore=${e.messagePageStart>0} .loadingMore=${e.isLoadingEarlierMessages} .isSendingPrompt=${e.sendingPrompts[t.id]===!0} .isCompacting=${e.status?.isCompacting===!0} .pendingMessageCount=${e.status?.pendingMessageCount??0} .clientQueuedMessages=${e.clientQueuedSessionMessages[t.id]??[]} .status=${e.status} .activity=${e.activity} .pendingAsk=${e.pendingAsk} .pendingDialogs=${e.pendingDialogs} .commandLedger=${ou(e.commandLedger,ul(R(e),t.id))} .goalCommandInFlight=${this.goalCommandInFlight} .closedDialogs=${e.closedDialogs} .onAnswerDialog=${this.handleAnswerDialog} .onCancelDialog=${this.handleCancelDialog} .onDismissClosedDialog=${this.handleDismissClosedDialog} .onResendMessage=${this.handleResendMessage} .askDraftSessionId=${ul(R(e),t.id)} .onSubmitAsk=${this.handleSubmitAsk} .notificationInbox=${Zp(e.selectedNotificationInbox)} .notificationsFailed=${e.selectedNotificationInbox?.status===`stale`&&e.selectedNotificationInbox.sessionId===t.id&&e.selectedNotificationInbox.cwd===t.cwd} .subagents=${e.subagents} .subagentRuns=${e.subagentRuns} .backgroundTasks=${e.backgroundTasks} .activityFailed=${e.activityFailed} .activityOutput=${e.activityOutput} .onCloseActivityOutput=${this.handleCloseActivityOutput} .activityConversation=${e.activityConversation} .onCloseActivityConversation=${this.handleCloseActivityConversation} .onOpenSubagent=${this.handleOpenSubagentSession} .onOpenSubagentRun=${this.handleOpenSubagentRun} .onOpenBackgroundTask=${this.handleOpenBackgroundTask} .onClearServerQueue=${this.handleClearServerQueue} .onDismissLedgerRow=${e=>{this.sessions.dismissLedgerRow(e)}} .onRecallQueuedMessage=${this.handleRecallQueuedMessage} .onDismissNotification=${this.handleDismissNotification} .onDismissAllNotifications=${this.handleDismissAllNotifications} .onLoadMore=${()=>this.withChatPrependTransition(()=>this.sessions.loadEarlierMessages())} .onFocusComposer=${()=>{this.focusChatComposer()}}></chat-view>
|
|
6489
|
-
`}sessionPromptsFor(e){if(this.sessionPromptsMemo?.source===e.messages)return this.sessionPromptsMemo.prompts;let t=[],n=new Set;for(let r=e.messages.length-1;r>=0&&t.length<
|
|
6501
|
+
`}sessionPromptsFor(e){if(this.sessionPromptsMemo?.source===e.messages)return this.sessionPromptsMemo.prompts;let t=[],n=new Set;for(let r=e.messages.length-1;r>=0&&t.length<Uj;--r){let i=e.messages[r];if(i?.role!==`user`||i.meta?.echo===!0)continue;let a=(i.parts.find(e=>e.type===`text`)?.text??``).trim();a===``||n.has(a)||(n.add(a),t.push(a))}return this.sessionPromptsMemo={source:e.messages,prompts:t},t}renderStatusBar(e){return h`
|
|
6490
6502
|
<status-bar .status=${e.status}></status-bar>
|
|
6491
|
-
`}renderErrorBanner(e){let t=bt({shownAt:this.bannerShownAt,now:Date.now(),next:e});return t.kind===`hold`?(this.bannerHoldTimer!==void 0&&window.clearTimeout(this.bannerHoldTimer),this.bannerHoldTimer=window.setTimeout(()=>{this.bannerHoldTimer=void 0,this.requestUpdate()},t.retryInMs),this.heldErrorBanner):t.kind===`hide`?(this.bannerShownAt=void 0,this.heldErrorBanner=null,null):(this.bannerShownAt??=Date.now(),e!==this.lastScheduledError&&(this.lastScheduledError=e,this.scheduleTransientErrorDismissal(e)),this.heldErrorBanner=
|
|
6503
|
+
`}renderErrorBanner(e){let t=bt({shownAt:this.bannerShownAt,now:Date.now(),next:e});return t.kind===`hold`?(this.bannerHoldTimer!==void 0&&window.clearTimeout(this.bannerHoldTimer),this.bannerHoldTimer=window.setTimeout(()=>{this.bannerHoldTimer=void 0,this.requestUpdate()},t.retryInMs),this.heldErrorBanner):t.kind===`hide`?(this.bannerShownAt=void 0,this.heldErrorBanner=null,null):(this.bannerShownAt??=Date.now(),e!==this.lastScheduledError&&(this.lastScheduledError=e,this.scheduleTransientErrorDismissal(e)),this.heldErrorBanner=Mj(e,()=>{this.setState({error:``})}),this.heldErrorBanner)}renderContextBar(){return Jb({isMobileNavigationLayout:this.appShell.isMobileNavigationLayout,navigationCollapsed:this.panelCollapse.navigationPanelCollapsed})?h`
|
|
6492
6504
|
<app-context-bar
|
|
6493
6505
|
.machines=${this.state.machines}
|
|
6494
6506
|
.machine=${this.state.selectedMachine}
|
|
@@ -6496,7 +6508,7 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
6496
6508
|
.workspace=${this.state.selectedWorkspace}
|
|
6497
6509
|
.session=${this.state.selectedSession}
|
|
6498
6510
|
?emphasizeSession=${this.state.mainView===`chat`}
|
|
6499
|
-
?isWorking=${this.state.mainView===`chat`&&this.state.selectedSession!==void 0&&
|
|
6511
|
+
?isWorking=${this.state.mainView===`chat`&&this.state.selectedSession!==void 0&&vM(this.state)}
|
|
6500
6512
|
.refreshControl=${this.appShell.shouldShowAppRefreshInContextBar()?this.renderAppRefresh():void 0}
|
|
6501
6513
|
.mainView=${this.state.mainView}
|
|
6502
6514
|
.onShowConversation=${()=>{this.selectMainView(`chat`)}}
|
|
@@ -6513,16 +6525,16 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
6513
6525
|
.onSelect=${e=>{this.selectMainView(e)}}
|
|
6514
6526
|
.onClose=${()=>{this.mobileToolSheetOpen=!1}}
|
|
6515
6527
|
></app-mobile-tool-sheet>
|
|
6516
|
-
`:null}openMobileToolSheet(){this.pushModalLayerFrame(),this.mobileToolSheetOpen=!0}mobileMainTabs(){let e=
|
|
6528
|
+
`:null}openMobileToolSheet(){this.pushModalLayerFrame(),this.mobileToolSheetOpen=!0}mobileMainTabs(){let e=YS(this.state.sessions,this.unreadSessionIds);return[{id:`navigation`,label:`Sessions`,icon:`navigation`,className:`navigation-tab`,...e===0?{}:{badge:e,badgeLabel:`${String(e)} unread`,badgeTone:`unread`}},{id:`chat`,label:`Chat`,icon:`chat`},...this.visibleWorkspacePanels().map(e=>{let t=e.icon;return{id:e.id,label:e.title,...t===void 0?{}:{icon:t},badge:this.mobilePanelBadge(e)}})]}renderAppRefresh(){return h`<app-refresh-control .onReload=${()=>{this.hardReloadApp()}}></app-refresh-control>`}render(){let e=this.state;return h`
|
|
6517
6529
|
<div class=${this.panelCollapse.shellClass(e.mainView,e.selectedWorkspace!==void 0)} style=${this.panelResize.shellStyle({navigation:this.resizablePanelConstraints(`navigation`),workspace:this.resizablePanelConstraints(`workspace`)})}>
|
|
6518
6530
|
<aside id="navigation-panel">${this.appShell.isMobileNavigationLayout?null:this.renderNavigationPanel()}</aside>
|
|
6519
6531
|
${this.renderNavigationPanelEdgeControl()}
|
|
6520
|
-
<main class=${
|
|
6532
|
+
<main class=${Zb(e.mainView)}>
|
|
6521
6533
|
${this.renderContextBar()}
|
|
6522
6534
|
|
|
6523
6535
|
${this.renderErrorBanner(e.error)}
|
|
6524
6536
|
${this.renderSelfUpdateBanner()}
|
|
6525
|
-
${
|
|
6537
|
+
${zj(Ij(e.machines,e.machineRuntimes))}
|
|
6526
6538
|
<div class="mobile-navigation-panel">${this.appShell.isMobileNavigationLayout?this.renderNavigationPanel():null}</div>
|
|
6527
6539
|
${e.selectedSession?h`
|
|
6528
6540
|
${this.renderChatView(e,e.selectedSession)}
|
|
@@ -6568,4 +6580,4 @@ registerProcessor("sample-tap", SampleTap);
|
|
|
6568
6580
|
${e.themeDialog===void 0?null:h`<command-picker title=${e.themeDialog.title} .options=${e.themeDialog.options} .selectedValue=${e.themeDialog.selectedValue} .onPick=${e=>{this.pickTheme(e)}} .onCancel=${()=>{this.setState({themeDialog:void 0})}}></command-picker>`}
|
|
6569
6581
|
${this.settingsSection===void 0?null:h`<settings-dialog .section=${this.settingsSection} .machine=${e.selectedMachine} .machineRuntime=${this.selectedMachineRuntime()} .actions=${this.getDefaultActions()} .onNavigate=${e=>{this.navigateSettings(e)}} .onClose=${()=>{this.closeSettings()}} .onConfigSaved=${e=>{this.applyClientConfig(e)}} .onRefreshMachineRuntime=${async e=>{await this.machines.refreshMachineRuntime(e)}} .machines=${e.machines} .machineStatuses=${e.machineStatuses} .onAddMachine=${()=>{this.openMachineDialog()}} .onRenameMachine=${async(e,t)=>{await this.renameMachine(e,t)}} .onRemoveMachine=${e=>{this.removeMachine(e)}} .fleetReport=${this.fleetReport} ?fleetLoading=${this.fleetLoading} .fleetError=${this.fleetError} .onRefreshFleet=${()=>this.refreshFleet()} .onRunFleet=${(e,t)=>this.runFleetOperation(e,t)} .themes=${this.plugins.getThemes()} .selectedThemeId=${this.resolveCurrentThemePreference().selectedTheme?.id} .activeThemeId=${this.activeThemeId} ?followSystemTheme=${this.themePreference.auto} .onSelectTheme=${e=>{this.selectTheme(e)}} .onToggleFollowSystem=${e=>{this.setFollowSystemTheme(e)}}></settings-dialog>`}
|
|
6570
6582
|
</div>
|
|
6571
|
-
`}static{this.styles=
|
|
6583
|
+
`}static{this.styles=Bj}};H([C()],$.prototype,`state`,void 0),H([w(`chat-view`)],$.prototype,`chatView`,void 0),H([w(`prompt-editor`)],$.prototype,`promptEditor`,void 0),H([w(`app-navigation-panel`)],$.prototype,`navigationPanel`,void 0),H([w(`#navigation-panel`)],$.prototype,`navigationPanelFrame`,void 0),H([w(`#workspace-panel`)],$.prototype,`workspacePanelFrame`,void 0),H([C()],$.prototype,`interruptedSessionIds`,void 0),H([C()],$.prototype,`unreadSessionIds`,void 0),H([C()],$.prototype,`activeThemeId`,void 0),H([C()],$.prototype,`isRefreshingApp`,void 0),H([C()],$.prototype,`quickSwitcherOpen`,void 0),H([C()],$.prototype,`composerCollapsed`,void 0),H([C()],$.prototype,`mobileToolSheetOpen`,void 0),H([C()],$.prototype,`quickSwitcherLoading`,void 0),H([C()],$.prototype,`quickSwitcherSessions`,void 0),H([C()],$.prototype,`pinnedSessionIds`,void 0),H([C()],$.prototype,`quickSwitcherWorkspaces`,void 0),H([C()],$.prototype,`sessionCleanupDialog`,void 0),H([C()],$.prototype,`settingsSection`,void 0),H([C()],$.prototype,`fleetReport`,void 0),H([C()],$.prototype,`fleetLoading`,void 0),H([C()],$.prototype,`fleetError`,void 0),H([C()],$.prototype,`shortcutConfig`,void 0),H([C()],$.prototype,`workspaceUploadDefaultFolder`,void 0),H([C()],$.prototype,`speechToTextConfig`,void 0),$=H([x(`pi-web-app`)],$);function rM(){let e=new xb;return e.register({id:`core`,plugin:Yy}),e.register({id:`themes`,plugin:nb}),e}function iM(){return{registrationPluginId:`core`,sourcePluginId:`core`}}function aM(e){let t=e.selectedMachine;return t===void 0?{id:`local`,name:`local`,kind:`local`}:{id:t.id,name:t.name,kind:t.kind}}function oM(e,t){return JSON.stringify([e,t.id,t.cwd])}function sM(e){let t=e.selectedSession;return t===void 0?void 0:oM(R(e),t)}function cM(e,t){return e.machines!==t.machines}function lM(e,t){return e.machines!==t.machines||e.machineStatuses!==t.machineStatuses||(e.selectedMachine?.id??`local`)!==(t.selectedMachine?.id??`local`)}function uM(e,t){return dM(e,t)}function dM(e,t){if(e.kind===`local`)return!0;let n=t?.status??e.status;return n===void 0||n===`unknown`||n===`online`}function fM(e,t){return Object.entries(t).some(([t,n])=>Reflect.get(e,t)!==n)}function pM(e,t){return e.length===t.length&&e.every((e,n)=>{let r=t[n];return r?.id===e.id&&r.status===e.status&&r.exitCode===e.exitCode&&r.durationMs===e.durationMs})}function mM(e,t){return e.length===t.length&&e.every((e,n)=>{let r=t[n];return r?.sessionId===e.sessionId&&r.status===e.status})}function hM(e,t){return e.length===t.length&&e.every((e,n)=>{let r=t[n];return r?.runId===e.runId&&r.status===e.status&&r.elapsedMs===e.elapsedMs&&r.lastActivity===e.lastActivity})}function gM(e,t){return e.size===t.size&&[...e].every(e=>t.has(e))}function _M(e){let t=new Set,n=[];for(let r of e)t.has(r.id)||(t.add(r.id),n.push(r));return n}function vM(e){return bl(e.status,e.activity)}function yM(e){return e.type===`terminal.created`||e.type===`terminal.exited`||e.type===`terminal.closed`}function bM(){return{}}function xM(e,t){return JSON.stringify([e,t])}function SM(e){return qj[Math.min(e,qj.length-1)]??3e4}function CM(e,t){return Object.fromEntries(Object.entries(e).filter(([e])=>e!==t))}function wM(){return new Promise(e=>requestAnimationFrame(()=>{e()}))}function TM(e){switch(e){case`off`:return`No reasoning`;case`minimal`:return`Very brief reasoning (~1k tokens)`;case`low`:return`Light reasoning (~2k tokens)`;case`medium`:return`Moderate reasoning (~8k tokens)`;case`high`:return`Deep reasoning (~16k tokens)`;case`xhigh`:return`Maximum reasoning (~32k tokens)`;default:return}}export{h as _,c_ as a,Is as c,C as d,S as f,Me as g,_ as h,u_ as i,es as l,y as m,H as n,Um as o,x as p,l_ as r,Hm as s,gS as t,w as u,o as v};
|