@chainingintention/pi-web-cn 1.202610.4 → 2.202610.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/cli.js +31 -7
- package/dist/cli.js.map +1 -1
- package/dist/client/assets/PiWebApp-BXSziMEg.js +4921 -0
- package/dist/client/assets/classic-CyM97Akm.css +54 -0
- package/dist/client/assets/external-B9K8duyP.js +2 -0
- package/dist/client/assets/graphite-DquaqFXU.css +54 -0
- package/dist/client/assets/index-cdtUOfOW.js +2 -0
- package/dist/client/assets/paper-CB1oLuRr.css +54 -0
- package/dist/client/assets/pi-web-dark-D_KtbM95.css +54 -0
- package/dist/client/assets/pi-web-light-DSNLMIBI.css +54 -0
- package/dist/client/assets/vendor-editor-core-BfnHL1Dg.js +10 -0
- package/dist/client/assets/{vendor-editor-languages-DOCw3vc9.js → vendor-editor-languages-bNquDJP0.js} +1 -1
- package/dist/client/index.html +3 -47
- package/dist/config.js +11 -2
- package/dist/config.js.map +1 -1
- package/dist/nativeServices/installedServiceDefinitions.js +10 -7
- package/dist/nativeServices/installedServiceDefinitions.js.map +1 -1
- package/dist/pi-packages/captains-log/dist/browser/index.js +43 -47
- package/dist/pi-packages/captains-log/dist/browser/panel.js +6 -10
- package/dist/pi-packages/captains-log/dist/companion.js +1 -1
- package/dist/pi-packages/captains-log/package.json +4 -4
- package/dist/pi-packages/relays/extensions/index.js +61 -0
- package/dist/pi-packages/relays/package.json +10 -1
- package/dist/pi-packages/relays/pi-web-plugin.js +52 -2
- package/dist/pi-packages/relays/prompts/relay-worktree.md +6 -16
- package/dist/pi-packages/relays/prompts/relay.md +6 -33
- package/dist/pi-packages/relays/relayDispatch.js +67 -0
- package/dist/pi-packages/relays/relayIdentity.js +37 -0
- package/dist/pi-packages/relays/relaysPanelElement.js +75 -37
- package/dist/pi-packages/relays/skills/relay/SKILL.md +24 -68
- package/dist/pi-packages/relays/skills/relay-runner/SKILL.md +40 -219
- package/dist/pi-packages/workflows/browser/pi-web-plugin.js +42 -0
- package/dist/pi-packages/workflows/browser/worktreeDialog.js +170 -0
- package/dist/pi-packages/workflows/package.json +23 -0
- package/dist/pi-packages/workflows/prompts/worktree.md +21 -0
- package/dist/pi-packages/workflows/server-plugin.js +586 -0
- package/dist/pi-packages/workflows/vite.config.mjs +17 -0
- package/dist/pi-web-plugins/code-highlight/browser/pi-web-plugin.js +22 -0
- package/dist/pi-web-plugins/code-highlight/package.json +13 -0
- package/dist/pi-web-plugins/files/browser/pi-web-plugin.js +115 -105
- package/dist/pi-web-plugins/git/browser/git-panel.js +60 -46
- package/dist/pi-web-plugins/git/browser/pi-web-plugin.js +23 -3
- package/dist/pi-web-plugins/git/git-backend.js +20 -1
- package/dist/pi-web-plugins/git/server-plugin.js +20 -3
- package/dist/pi-web-plugins/git/workspace-discovery-notify.cjs +14 -0
- package/dist/pi-web-plugins/git/workspaceDiscoveryHooks.js +186 -0
- package/dist/pi-web-plugins/info/infoInternals.js +3 -3
- package/dist/pi-web-plugins/info/pi-web-plugin.js +1 -1
- package/dist/pi-web-plugins/mermaid/browser/mermaid-engine.js +1087 -422
- package/dist/pi-web-plugins/mermaid/browser/pi-web-plugin.js +8 -3
- package/dist/pi-web-plugins/terminal/browser/pi-web-plugin.js +39 -33
- package/dist/pi-web-plugins/updates/pi-web-plugin.js +13 -13
- package/dist/pi-web-plugins/updates/updatesLogic.js +4 -5
- package/dist/pi-web-plugins/workspace-tasks/pi-web-plugin.js +21 -1
- package/dist/pi-web-plugins/workspace-tasks/tasksPanelElement.js +39 -22
- package/dist/pi-web-plugins/zh-cn/bundled.json +44 -1
- package/dist/pi-web-plugins/zh-cn/cli.json +60 -1
- package/dist/pi-web-plugins/zh-cn/client.json +7 -1
- package/dist/pi-web-plugins/zh-cn/components.json +252 -2
- package/dist/pi-web-plugins/zh-cn/config-errors.json +17 -1
- package/dist/pi-web-plugins/zh-cn/files.json +10 -1
- package/dist/pi-web-plugins/zh-cn/main.json +1 -1
- package/dist/pi-web-plugins/zh-cn/provider-auth.json +2 -1
- package/dist/pi-web-plugins/zh-cn/server.json +83 -1
- package/dist/piAi.js +4 -0
- package/dist/piAi.js.map +1 -0
- package/dist/piRuntime.js +150 -0
- package/dist/piRuntime.js.map +1 -0
- package/dist/piSdk.js +5 -0
- package/dist/piSdk.js.map +1 -0
- package/dist/piWebUpdate.js +508 -0
- package/dist/piWebUpdate.js.map +1 -0
- package/dist/piWebVersionReport.js +43 -1
- package/dist/piWebVersionReport.js.map +1 -1
- package/dist/plugin-api.d.ts +393 -51
- package/dist/server/activity/workspaceActivityService.js +8 -1
- package/dist/server/activity/workspaceActivityService.js.map +1 -1
- package/dist/server/app.js +19 -4
- package/dist/server/app.js.map +1 -1
- package/dist/server/browserMessageProjection.js +39 -20
- package/dist/server/browserMessageProjection.js.map +1 -1
- package/dist/server/configRoutes.js +8 -0
- package/dist/server/configRoutes.js.map +1 -1
- package/dist/server/index.js +10 -1
- package/dist/server/index.js.map +1 -1
- package/dist/server/knownAutoInstallPiPackages.js +6 -0
- package/dist/server/knownAutoInstallPiPackages.js.map +1 -1
- package/dist/server/machines/machineProxyRoutes.js +37 -2
- package/dist/server/machines/machineProxyRoutes.js.map +1 -1
- package/dist/server/navigationPreferenceRoutes.js +59 -0
- package/dist/server/navigationPreferenceRoutes.js.map +1 -0
- package/dist/server/piPackageService.js +1 -1
- package/dist/server/piPackageService.js.map +1 -1
- package/dist/server/piWebPluginCatalog.js +1 -1
- package/dist/server/piWebPluginCatalog.js.map +1 -1
- package/dist/server/piWebPluginService.js +7 -1
- package/dist/server/piWebPluginService.js.map +1 -1
- package/dist/server/piWebStatus.js +17 -56
- package/dist/server/piWebStatus.js.map +1 -1
- package/dist/server/plugins/pluginBackendChannelProxyAdmission.js +1 -1
- package/dist/server/plugins/pluginBackendChannelProxyAdmission.js.map +1 -1
- package/dist/server/plugins/pluginBackendChannelProxyRoutes.js +40 -42
- package/dist/server/plugins/pluginBackendChannelProxyRoutes.js.map +1 -1
- package/dist/server/plugins/pluginBackendProxyRoutes.js +40 -44
- package/dist/server/plugins/pluginBackendProxyRoutes.js.map +1 -1
- package/dist/server/plugins/pluginBackendRegistry.js +66 -35
- package/dist/server/plugins/pluginBackendRegistry.js.map +1 -1
- package/dist/server/plugins/projectPluginSettings.js +95 -0
- package/dist/server/plugins/projectPluginSettings.js.map +1 -0
- package/dist/server/plugins/serverPluginCatalogCapability.js +106 -0
- package/dist/server/plugins/serverPluginCatalogCapability.js.map +1 -0
- package/dist/server/plugins/serverPluginRuntime.js +47 -11
- package/dist/server/plugins/serverPluginRuntime.js.map +1 -1
- package/dist/server/projectTrustRoutes.js +1 -1
- package/dist/server/projectTrustRoutes.js.map +1 -1
- package/dist/server/projects/projectLifecycleService.js +17 -7
- package/dist/server/projects/projectLifecycleService.js.map +1 -1
- package/dist/server/realtime/sessionEventHub.js +22 -9
- package/dist/server/realtime/sessionEventHub.js.map +1 -1
- package/dist/server/sessiond/agentHttpDispatcher.js +1 -1
- package/dist/server/sessiond/agentHttpDispatcher.js.map +1 -1
- package/dist/server/sessiond/autoInstallPiPackages.js +3 -3
- package/dist/server/sessiond/pluginBackendChannelRoutes.js +27 -14
- package/dist/server/sessiond/pluginBackendChannelRoutes.js.map +1 -1
- package/dist/server/sessiond/pluginBackendRoutes.js +56 -49
- package/dist/server/sessiond/pluginBackendRoutes.js.map +1 -1
- package/dist/server/sessiond/pluginCatalogRoutes.js +41 -0
- package/dist/server/sessiond/pluginCatalogRoutes.js.map +1 -0
- package/dist/server/sessiond/sessionProxyRoutes.js +46 -1
- package/dist/server/sessiond/sessionProxyRoutes.js.map +1 -1
- package/dist/server/sessiond/sessionServiceDependencies.js +1 -0
- package/dist/server/sessiond/sessionServiceDependencies.js.map +1 -1
- package/dist/server/sessiond/workspaceCatalogRoutes.js +6 -2
- package/dist/server/sessiond/workspaceCatalogRoutes.js.map +1 -1
- package/dist/server/sessiond/workspaceNotificationRoutes.js +55 -0
- package/dist/server/sessiond/workspaceNotificationRoutes.js.map +1 -0
- package/dist/server/sessiond.js +58 -8
- package/dist/server/sessiond.js.map +1 -1
- package/dist/server/sessions/askUserDomain.js +232 -0
- package/dist/server/sessions/askUserDomain.js.map +1 -0
- package/dist/server/sessions/askUserTool.js +18 -18
- package/dist/server/sessions/askUserTool.js.map +1 -1
- package/dist/server/sessions/attachmentService.js +1 -1
- package/dist/server/sessions/attachmentService.js.map +1 -1
- package/dist/server/sessions/authRoutes.js +12 -0
- package/dist/server/sessions/authRoutes.js.map +1 -1
- package/dist/server/sessions/authService.js +11 -1
- package/dist/server/sessions/authService.js.map +1 -1
- package/dist/server/sessions/builtinExtensionFactories.js +36 -0
- package/dist/server/sessions/builtinExtensionFactories.js.map +1 -0
- package/dist/server/sessions/companionBackend.js +286 -0
- package/dist/server/sessions/companionBackend.js.map +1 -0
- package/dist/server/sessions/dockerEnvironmentFacts.js +16 -1
- package/dist/server/sessions/dockerEnvironmentFacts.js.map +1 -1
- package/dist/server/sessions/extensionSessionDispatch.js +76 -0
- package/dist/server/sessions/extensionSessionDispatch.js.map +1 -0
- package/dist/server/sessions/globalProviderPolicy.js +88 -19
- package/dist/server/sessions/globalProviderPolicy.js.map +1 -1
- package/dist/server/sessions/managementAgentTools.js +2 -2
- package/dist/server/sessions/managementAgentTools.js.map +1 -1
- package/dist/server/sessions/mcpAuthFlowService.js +289 -0
- package/dist/server/sessions/mcpAuthFlowService.js.map +1 -0
- package/dist/server/sessions/mcpAuthRoutes.js +104 -0
- package/dist/server/sessions/mcpAuthRoutes.js.map +1 -0
- package/dist/server/sessions/mcpOAuthCredentialAdapter.js +92 -0
- package/dist/server/sessions/mcpOAuthCredentialAdapter.js.map +1 -0
- package/dist/server/sessions/messageHistoryTarget.js +79 -0
- package/dist/server/sessions/messageHistoryTarget.js.map +1 -0
- package/dist/server/sessions/piSessionEventConnections.js +5 -2
- package/dist/server/sessions/piSessionEventConnections.js.map +1 -1
- package/dist/server/sessions/piSessionManagerGateway.js +32 -27
- package/dist/server/sessions/piSessionManagerGateway.js.map +1 -1
- package/dist/server/sessions/piSessionService.js +1296 -341
- package/dist/server/sessions/piSessionService.js.map +1 -1
- package/dist/server/sessions/plainTextTheme.js +1 -1
- package/dist/server/sessions/plainTextTheme.js.map +1 -1
- package/dist/server/sessions/projectAuthService.js +1 -1
- package/dist/server/sessions/projectAuthService.js.map +1 -1
- package/dist/server/sessions/projectSettingsScope.js +1 -1
- package/dist/server/sessions/projectSettingsScope.js.map +1 -1
- package/dist/server/sessions/projectTrust.js +1 -1
- package/dist/server/sessions/projectTrust.js.map +1 -1
- package/dist/server/sessions/queuedMessageMutation.js +170 -0
- package/dist/server/sessions/queuedMessageMutation.js.map +1 -0
- package/dist/server/sessions/relaySkill.js +57 -7
- package/dist/server/sessions/relaySkill.js.map +1 -1
- package/dist/server/sessions/sessionArchiveMapping.js +6 -0
- package/dist/server/sessions/sessionArchiveMapping.js.map +1 -1
- package/dist/server/sessions/sessionArchiveStore.js +5 -1
- package/dist/server/sessions/sessionArchiveStore.js.map +1 -1
- package/dist/server/sessions/sessionArchiveTree.js +2 -2
- package/dist/server/sessions/sessionArchiveTree.js.map +1 -1
- package/dist/server/sessions/sessionCommandService.js +11 -24
- package/dist/server/sessions/sessionCommandService.js.map +1 -1
- package/dist/server/sessions/sessionImageDimensions.js +31 -0
- package/dist/server/sessions/sessionImageDimensions.js.map +1 -0
- package/dist/server/sessions/sessionMediaIndex.js +191 -0
- package/dist/server/sessions/sessionMediaIndex.js.map +1 -0
- package/dist/server/sessions/sessionMetadata.js +51 -0
- package/dist/server/sessions/sessionMetadata.js.map +1 -0
- package/dist/server/sessions/sessionModelScope.js +2 -2
- package/dist/server/sessions/sessionModelScope.js.map +1 -1
- package/dist/server/sessions/sessionNameGenerator.js +13 -33
- package/dist/server/sessions/sessionNameGenerator.js.map +1 -1
- package/dist/server/sessions/sessionReadAccess.js +41 -0
- package/dist/server/sessions/sessionReadAccess.js.map +1 -0
- package/dist/server/sessions/sessionRoutes.js +61 -6
- package/dist/server/sessions/sessionRoutes.js.map +1 -1
- package/dist/server/sessions/sessionSummaryScanner.js +62 -5
- package/dist/server/sessions/sessionSummaryScanner.js.map +1 -1
- package/dist/server/sessions/sessionUiEvents.js +17 -4
- package/dist/server/sessions/sessionUiEvents.js.map +1 -1
- package/dist/server/sessions/spawnSessionTool.js +11 -3
- package/dist/server/sessions/spawnSessionTool.js.map +1 -1
- package/dist/server/sessions/spawnSubsessionTool.js +35 -19
- package/dist/server/sessions/spawnSubsessionTool.js.map +1 -1
- package/dist/server/sessions/subsessionCompletionDelivery.js +15 -0
- package/dist/server/sessions/subsessionCompletionDelivery.js.map +1 -0
- package/dist/server/sessions/subsessionCompletionInbox.js +134 -0
- package/dist/server/sessions/subsessionCompletionInbox.js.map +1 -0
- package/dist/server/sessions/subsessionProvenance.js +27 -0
- package/dist/server/sessions/subsessionProvenance.js.map +1 -0
- package/dist/server/sessions/transcriptMarkdown.js +48 -0
- package/dist/server/sessions/transcriptMarkdown.js.map +1 -0
- package/dist/server/sessions/transcriptMessages.js +3 -0
- package/dist/server/sessions/transcriptMessages.js.map +1 -1
- package/dist/server/startupLogger.js +13 -0
- package/dist/server/startupLogger.js.map +1 -0
- package/dist/server/startupUrls.js +27 -0
- package/dist/server/startupUrls.js.map +1 -0
- package/dist/server/status/machineStatusService.js +15 -9
- package/dist/server/status/machineStatusService.js.map +1 -1
- package/dist/server/storage/navigationPreferenceStore.js +138 -0
- package/dist/server/storage/navigationPreferenceStore.js.map +1 -0
- package/dist/server/webSocketBridge.js +9 -0
- package/dist/server/webSocketBridge.js.map +1 -1
- package/dist/server/workbench/skillSync.js +1 -1
- package/dist/server/workbench/skillSync.js.map +1 -1
- package/dist/server/workbench/workbenchTools.js +2 -2
- package/dist/server/workbench/workbenchTools.js.map +1 -1
- package/dist/server/workspaces/filePreviewService.js +5 -2
- package/dist/server/workspaces/filePreviewService.js.map +1 -1
- package/dist/server/workspaces/projectPiWebConfig.js +87 -6
- package/dist/server/workspaces/projectPiWebConfig.js.map +1 -1
- package/dist/server/workspaces/workspaceChangeNotifier.js +12 -0
- package/dist/server/workspaces/workspaceChangeNotifier.js.map +1 -0
- package/dist/server/workspaces/workspaceNotificationCommand.js +64 -0
- package/dist/server/workspaces/workspaceNotificationCommand.js.map +1 -0
- package/dist/server/workspaces/workspaceProviderRegistry.js +53 -0
- package/dist/server/workspaces/workspaceProviderRegistry.js.map +1 -1
- package/dist/server-plugin-api.d.ts +83 -15
- package/dist/server-plugin-api.js +25 -0
- package/dist/server-plugin-api.js.map +1 -1
- package/dist/sessiond/sessionDaemonClient.js +27 -3
- package/dist/sessiond/sessionDaemonClient.js.map +1 -1
- package/dist/shared/apiTypes.js +3 -2
- package/dist/shared/apiTypes.js.map +1 -1
- package/dist/shared/capabilities.js +3 -0
- package/dist/shared/capabilities.js.map +1 -1
- package/dist/shared/federatedRoutes.js +25 -5
- package/dist/shared/federatedRoutes.js.map +1 -1
- package/dist/shared/machineStatus.js +11 -2
- package/dist/shared/machineStatus.js.map +1 -1
- package/dist/shared/navigationPreferences.js +6 -0
- package/dist/shared/navigationPreferences.js.map +1 -0
- package/dist/shared/piWebConfigParsing.js +54 -0
- package/dist/shared/piWebConfigParsing.js.map +1 -1
- package/dist/shared/pluginApiTypes.d.ts +55 -0
- package/dist/shared/pluginBackendProtocol.js +56 -1
- package/dist/shared/pluginBackendProtocol.js.map +1 -1
- package/dist/shared/pluginCatalogTypes.d.ts +49 -0
- package/dist/shared/pluginCatalogTypes.js +156 -0
- package/dist/shared/pluginCatalogTypes.js.map +1 -0
- package/dist/shared/sessionMedia.js +12 -0
- package/dist/shared/sessionMedia.js.map +1 -0
- package/dist/shared/streamingBehavior.js +8 -0
- package/dist/shared/streamingBehavior.js.map +1 -0
- package/dist/shared/themePreference.js +24 -0
- package/dist/shared/themePreference.js.map +1 -0
- package/dist/workspaceNotificationCli.js +95 -0
- package/dist/workspaceNotificationCli.js.map +1 -0
- package/docs/README.md +31 -0
- package/docs/config.md +77 -4
- package/docs/plugins.md +60 -11
- package/examples/session-bridge-plugin/package.json +2 -2
- package/examples/session-bridge-plugin/src/browser/index.ts +1 -1
- package/examples/session-bridge-plugin/src/companion.ts +1 -1
- package/extensions/pi-web.ts +3 -1
- package/package.json +46 -34
- package/skills/README.md +10 -9
- package/skills/relay/SKILL.md +24 -68
- package/skills/relay-runner/SKILL.md +40 -219
- package/dist/client/assets/PiWebApp-CN3g7SqA.js +0 -4362
- package/dist/client/assets/external-DUGCSDhZ.js +0 -2
- package/dist/client/assets/index-JduZlbIF.js +0 -2
- package/dist/client/assets/vendor-editor-core-YWog6mAR.js +0 -10
- package/dist/server/sessions/pendingAskStore.js +0 -275
- package/dist/server/sessions/pendingAskStore.js.map +0 -1
|
@@ -87,8 +87,8 @@ function renderComponent(html, component) {
|
|
|
87
87
|
function renderCommandActions(html, terminal, label, command) {
|
|
88
88
|
return html `
|
|
89
89
|
<span class="updates-command-actions">
|
|
90
|
-
<button @click=${(event) => { void copyCommandToClipboard(command, event?.currentTarget); }}>${t("bundled.updates.copy.63d90d", "Copy")}</button>
|
|
91
|
-
${terminal === undefined ? null : html `<button class="primary" @click=${() => { runCommandInTerminal(terminal, label, command); }}>${t("bundled.workspace-tasks.run.75b269", "Run")}</button>`}
|
|
90
|
+
<button type="button" class="ui-button ui-button--action ui-button--compact" @click=${(event) => { void copyCommandToClipboard(command, event?.currentTarget); }}>${t("bundled.updates.copy.63d90d", "Copy")}</button>
|
|
91
|
+
${terminal === undefined ? null : html `<button type="button" class="ui-button ui-button--action ui-button--compact ui-button--primary" @click=${() => { runCommandInTerminal(terminal, label, command); }}>${t("bundled.workspace-tasks.run.75b269", "Run")}</button>`}
|
|
92
92
|
</span>
|
|
93
93
|
`;
|
|
94
94
|
}
|
|
@@ -126,7 +126,7 @@ function renderRecommended(html, terminal, recommended, messages) {
|
|
|
126
126
|
return html `
|
|
127
127
|
<section class="updates-recommended">
|
|
128
128
|
<strong>${t("bundled.updates.recommended.1452de", "Recommended")}</strong>
|
|
129
|
-
${messages.length === 0 ? html `<p class="muted">${t("bundled.updates.
|
|
129
|
+
${messages.length === 0 ? html `<p class="muted">${t("bundled.updates.confirmationAndSafeExecution", "Run the recommended command. Updates require confirmation in the terminal and may interrupt active sessions; the CLI will provide instructions if this terminal cannot safely run the update.")}</p>` : messages.map((message) => renderNotice(html, message))}
|
|
130
130
|
${renderCommand(html, terminal, recommended.label, recommended.command)}
|
|
131
131
|
</section>
|
|
132
132
|
`;
|
|
@@ -146,7 +146,7 @@ function renderUpdatesPanel(html, terminal, state) {
|
|
|
146
146
|
const status = statusFor(state) ?? fallbackDockerStatus(runtimeHint);
|
|
147
147
|
if (status === undefined) {
|
|
148
148
|
return html `
|
|
149
|
-
<section class="toolbar"><strong>${t("bundled.updates.updates.3055a0", "Updates")}</strong></section>
|
|
149
|
+
<section class="ui-toolbar updates-toolbar"><strong class="ui-toolbar-title">${t("bundled.updates.updates.3055a0", "Updates")}</strong></section>
|
|
150
150
|
<section class="viewer"><p class="muted">${t("bundled.updates.checking.pi.web.update.status.24e243", "Checking PI WEB update status...")}</p></section>
|
|
151
151
|
`;
|
|
152
152
|
}
|
|
@@ -155,6 +155,7 @@ function renderUpdatesPanel(html, terminal, state) {
|
|
|
155
155
|
const additional = additionalCommands(status, recommended);
|
|
156
156
|
return html `
|
|
157
157
|
<style>
|
|
158
|
+
.updates-toolbar { flex: 0 0 auto; padding-inline: 12px; border-bottom: 1px solid var(--pi-border-muted); }
|
|
158
159
|
.viewer.updates-status { flex: 1 1 auto; min-height: 0; box-sizing: border-box; display: flex; flex-direction: column; gap: 14px; padding: 12px; overflow-y: auto; overflow-x: hidden; }
|
|
159
160
|
.viewer.updates-status section { flex: 0 0 auto; min-width: 0; display: grid; gap: 8px; }
|
|
160
161
|
.updates-message { display: grid; gap: 5px; border: 1px solid var(--pi-border); border-radius: 8px; padding: 10px; background: var(--pi-surface); }
|
|
@@ -163,21 +164,20 @@ function renderUpdatesPanel(html, terminal, state) {
|
|
|
163
164
|
.updates-message-title { display: flex; gap: 8px; align-items: baseline; }
|
|
164
165
|
.updates-message-title span { color: var(--pi-muted); font-size: 12px; text-transform: uppercase; }
|
|
165
166
|
.updates-version-row { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 3px 10px; border-bottom: 1px solid var(--pi-border-muted); padding: 6px 0; }
|
|
166
|
-
.updates-version-row small { grid-column: 1 / -1; color: var(--pi-muted); }
|
|
167
|
-
.updates-command { min-width: 0; display: grid; grid-template-columns:
|
|
167
|
+
.updates-version-row small { grid-column: 1 / -1; color: var(--pi-muted); overflow-wrap: anywhere; }
|
|
168
|
+
.updates-command { min-width: 0; display: grid; grid-template-columns: 150px minmax(0, 1fr) auto; gap: 8px; align-items: center; }
|
|
168
169
|
.updates-command code { overflow: auto; border: 1px solid var(--pi-border-muted); border-radius: 6px; background: var(--pi-bg); padding: 5px 7px; white-space: nowrap; }
|
|
169
170
|
.updates-command-actions { display: inline-flex; gap: 6px; }
|
|
170
|
-
.updates-command-actions button.primary { border-color: var(--pi-accent-border); color: var(--pi-text-bright); }
|
|
171
171
|
.updates-recommended { border: 1px solid var(--pi-accent-border); border-radius: 8px; padding: 10px; background: var(--pi-surface); }
|
|
172
172
|
.updates-recommended > strong { color: var(--pi-text-bright); }
|
|
173
173
|
.updates-recommended .updates-message { border: none; background: none; padding: 0; }
|
|
174
|
-
.updates-meta { display: grid; gap: 2px; color: var(--pi-muted); font-size: 12px; }
|
|
175
|
-
@
|
|
176
|
-
.updates-command { grid-template-columns: minmax(0, 1fr)
|
|
177
|
-
.updates-command
|
|
174
|
+
.updates-meta { display: grid; gap: 2px; color: var(--pi-muted); font-size: 12px; overflow-wrap: anywhere; }
|
|
175
|
+
@container (max-width: 520px) {
|
|
176
|
+
.updates-command { grid-template-columns: minmax(0, 1fr); }
|
|
177
|
+
.updates-command-actions { justify-self: start; }
|
|
178
178
|
}
|
|
179
179
|
</style>
|
|
180
|
-
<section class="toolbar"><strong>${t("bundled.updates.updates.3055a0", "Updates")}</strong>${messages.length > 0 ? html `<span class="stale">${String(messages.length)}</span>` : null}</section>
|
|
180
|
+
<section class="ui-toolbar updates-toolbar"><strong class="ui-toolbar-title">${t("bundled.updates.updates.3055a0", "Updates")}</strong>${messages.length > 0 ? html `<span class="stale">${String(messages.length)}</span>` : null}</section>
|
|
181
181
|
<section class="viewer updates-status">
|
|
182
182
|
${recommended === undefined ? renderNotices(html, messages) : renderRecommended(html, terminal, recommended, messages)}
|
|
183
183
|
|
|
@@ -224,7 +224,7 @@ const plugin = {
|
|
|
224
224
|
run: (context) => context.checkForPiWebUpdates?.(),
|
|
225
225
|
},
|
|
226
226
|
],
|
|
227
|
-
|
|
227
|
+
applicationPanels: [
|
|
228
228
|
{
|
|
229
229
|
id: "workspace.updates",
|
|
230
230
|
title: t("bundled.updates.updates.3055a0", "Updates"),
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
// Generated from pi-web-plugins/updates/updatesLogic.ts. Do not edit directly.
|
|
2
2
|
import { t } from "./i18n.js";
|
|
3
|
-
// The
|
|
4
|
-
//
|
|
5
|
-
// restart; otherwise, when anything is stale, a full restart is enough.
|
|
3
|
+
// The CLI owns installation-specific planning, confirmation and safe execution.
|
|
4
|
+
// Stale services without an available update still use the restart command.
|
|
6
5
|
export function recommendedCommand(status) {
|
|
7
6
|
const { commands, release, components } = status;
|
|
8
7
|
if (release.updateAvailable && typeof commands.update === "string" && commands.update !== "") {
|
|
9
|
-
return { label: t("bundled.updates.
|
|
8
|
+
return { label: t("bundled.updates.updatePiWeb", "Update PI WEB"), command: commands.update };
|
|
10
9
|
}
|
|
11
10
|
const restartNeeded = components.web.stale || components.sessiond.stale || !components.sessiond.available;
|
|
12
11
|
if (restartNeeded && typeof commands.restart === "string" && commands.restart !== "") {
|
|
@@ -63,7 +62,7 @@ export function fallbackDockerStatus(hint, generatedAt = t("bundled.updates.fede
|
|
|
63
62
|
},
|
|
64
63
|
release: { packageName: "@chainingintention/pi-web-cn", updateAvailable: false, skipped: true },
|
|
65
64
|
commands: {
|
|
66
|
-
update:
|
|
65
|
+
update: hint.dockerMode === "dev" ? "node /workspace/dist/cli.js update" : "pi-web update",
|
|
67
66
|
restart: `${commandPrefix} restart`,
|
|
68
67
|
restartWeb: `${commandPrefix} restart-web`,
|
|
69
68
|
restartSessiond: `${commandPrefix} restart-sessiond`,
|
|
@@ -2,13 +2,33 @@
|
|
|
2
2
|
import { t, setTranslator } from "./i18n.js";
|
|
3
3
|
import { TASKS_CONFIG_PATH } from "./config.js";
|
|
4
4
|
import { defineTasksPanelElement, tasksPanelBadge } from "./tasksPanelElement.js";
|
|
5
|
+
const stylesheetIntegrationCapability = {
|
|
6
|
+
pluginId: "pi-web", id: "stylesheet-integration", version: 1,
|
|
7
|
+
parse(value) {
|
|
8
|
+
if (!isStylesheetIntegration(value)) {
|
|
9
|
+
throw new Error("Stylesheet integration capability v1 requires registerRoot and createController");
|
|
10
|
+
}
|
|
11
|
+
return value;
|
|
12
|
+
},
|
|
13
|
+
};
|
|
14
|
+
function isStylesheetIntegration(value) {
|
|
15
|
+
return typeof value === "object" && value !== null
|
|
16
|
+
&& "registerRoot" in value && typeof value.registerRoot === "function"
|
|
17
|
+
&& "createController" in value && typeof value.createController === "function"
|
|
18
|
+
&& "subscribe" in value && typeof value.subscribe === "function";
|
|
19
|
+
}
|
|
5
20
|
const plugin = {
|
|
6
21
|
apiVersion: 4,
|
|
7
22
|
name: t("bundled.workspace-tasks.workspace.tasks.b4ef49", "Workspace tasks"),
|
|
23
|
+
requires: [stylesheetIntegrationCapability],
|
|
8
24
|
activate: ({ runtimePluginId, html, svg, translate }) => {
|
|
9
25
|
setTranslator(translate);
|
|
10
26
|
defineTasksPanelElement();
|
|
27
|
+
let stylesheetIntegration;
|
|
11
28
|
return {
|
|
29
|
+
start({ capabilities }) {
|
|
30
|
+
stylesheetIntegration = capabilities.resolve(stylesheetIntegrationCapability);
|
|
31
|
+
},
|
|
12
32
|
contributions: {
|
|
13
33
|
actions: [
|
|
14
34
|
{
|
|
@@ -40,7 +60,7 @@ const plugin = {
|
|
|
40
60
|
`,
|
|
41
61
|
order: 40,
|
|
42
62
|
badge: (context) => tasksPanelBadge(context),
|
|
43
|
-
render: (context) => html `<pi-web-workspace-tasks-panel .context=${context}></pi-web-workspace-tasks-panel>`,
|
|
63
|
+
render: (context) => html `<pi-web-workspace-tasks-panel .stylesheetIntegration=${stylesheetIntegration} .context=${context}></pi-web-workspace-tasks-panel>`,
|
|
44
64
|
},
|
|
45
65
|
],
|
|
46
66
|
},
|
|
@@ -14,17 +14,36 @@ export function tasksPanelBadge(context) {
|
|
|
14
14
|
const state = getCachedWorkspaceConfig(context);
|
|
15
15
|
return state?.kind === "unavailable" ? "!" : undefined;
|
|
16
16
|
}
|
|
17
|
-
class PiWebTasksPanel extends HTMLElement {
|
|
17
|
+
export class PiWebTasksPanel extends HTMLElement {
|
|
18
|
+
integration;
|
|
19
|
+
releaseStyles;
|
|
20
|
+
set stylesheetIntegration(value) {
|
|
21
|
+
if (value === this.integration)
|
|
22
|
+
return;
|
|
23
|
+
this.releaseStyles?.();
|
|
24
|
+
this.releaseStyles = undefined;
|
|
25
|
+
this.integration = value;
|
|
26
|
+
if (this.isConnected)
|
|
27
|
+
this.releaseStyles = value?.registerRoot(this.root, { sharedUi: true });
|
|
28
|
+
}
|
|
18
29
|
contextValue;
|
|
19
30
|
runningTaskId;
|
|
20
31
|
status;
|
|
21
32
|
root;
|
|
33
|
+
localStyle = document.createElement("style");
|
|
22
34
|
onConfigChanged = () => {
|
|
23
35
|
this.render();
|
|
24
36
|
};
|
|
25
37
|
constructor() {
|
|
26
38
|
super();
|
|
27
39
|
this.root = this.attachShadow({ mode: "open" });
|
|
40
|
+
this.localStyle.textContent = taskStyles();
|
|
41
|
+
this.root.append(this.localStyle);
|
|
42
|
+
}
|
|
43
|
+
setContent(markup) {
|
|
44
|
+
const template = document.createElement("template");
|
|
45
|
+
template.innerHTML = markup;
|
|
46
|
+
this.root.replaceChildren(this.localStyle, template.content);
|
|
28
47
|
}
|
|
29
48
|
set context(value) {
|
|
30
49
|
const previousKey = this.contextValue === undefined ? undefined : cacheKeyForContext(this.contextValue);
|
|
@@ -39,33 +58,36 @@ class PiWebTasksPanel extends HTMLElement {
|
|
|
39
58
|
this.render();
|
|
40
59
|
}
|
|
41
60
|
connectedCallback() {
|
|
61
|
+
this.releaseStyles ??= this.integration?.registerRoot(this.root, { sharedUi: true });
|
|
42
62
|
window.addEventListener(configChangedEvent, this.onConfigChanged);
|
|
43
63
|
this.render();
|
|
44
64
|
}
|
|
45
65
|
disconnectedCallback() {
|
|
66
|
+
this.releaseStyles?.();
|
|
67
|
+
this.releaseStyles = undefined;
|
|
46
68
|
window.removeEventListener(configChangedEvent, this.onConfigChanged);
|
|
47
69
|
}
|
|
48
70
|
render() {
|
|
49
71
|
const context = this.contextValue;
|
|
50
72
|
if (context === undefined) {
|
|
51
|
-
this.
|
|
73
|
+
this.setContent(`<section class="empty">${escapeHtml(t("bundled.workspace-tasks.select.a.workspace.95796d", "Select a workspace."))}</section>`);
|
|
52
74
|
return;
|
|
53
75
|
}
|
|
54
76
|
const state = getOrLoadWorkspaceConfig(context);
|
|
55
|
-
this.
|
|
56
|
-
|
|
57
|
-
<section class="toolbar">
|
|
58
|
-
<strong>${escapeHtml(t("bundled.workspace-tasks.workspace.tasks.b4ef49", "Workspace tasks"))}</strong>
|
|
59
|
-
<span class="toolbar-
|
|
60
|
-
<button class="
|
|
61
|
-
<button class="
|
|
77
|
+
this.setContent(`
|
|
78
|
+
|
|
79
|
+
<section class="toolbar ui-toolbar">
|
|
80
|
+
<strong class="ui-toolbar-title toolbar-title">${escapeHtml(t("bundled.workspace-tasks.workspace.tasks.b4ef49", "Workspace tasks"))}</strong>
|
|
81
|
+
<span class="ui-toolbar-group">
|
|
82
|
+
<button type="button" class="ui-button" data-refresh-config ${state.kind === "loading" ? "disabled" : ""}>${escapeHtml(t("bundled.workspace-tasks.refresh.aee887", "Refresh"))}</button>
|
|
83
|
+
<button type="button" class="ui-button" data-open-terminal>${escapeHtml(t("bundled.workspace-tasks.open.terminal.b89a0e", "Open terminal"))}</button>
|
|
62
84
|
</span>
|
|
63
85
|
</section>
|
|
64
86
|
${this.renderStatus()}
|
|
65
87
|
<section class="viewer tasks-viewer">
|
|
66
88
|
${this.renderConfigState(state)}
|
|
67
89
|
</section>
|
|
68
|
-
|
|
90
|
+
`);
|
|
69
91
|
this.root.querySelector("button[data-refresh-config]")?.addEventListener("click", () => {
|
|
70
92
|
void this.refreshConfig(context);
|
|
71
93
|
});
|
|
@@ -200,11 +222,11 @@ function cacheKeyForContext(context) {
|
|
|
200
222
|
return `${context.machine.id}:${context.workspace.projectId}:${context.workspace.id}`;
|
|
201
223
|
}
|
|
202
224
|
function renderMissingState(state) {
|
|
203
|
-
return `<div class="empty-state"><strong>${escapeHtml(state.message)}</strong><p>${escapeHtml(state.hint)}</p></div>`;
|
|
225
|
+
return `<div class="empty-state"><strong class="ui-toolbar-title toolbar-title">${escapeHtml(state.message)}</strong><p>${escapeHtml(state.hint)}</p></div>`;
|
|
204
226
|
}
|
|
205
227
|
function renderUnavailableState(state) {
|
|
206
228
|
const detail = state.detail === undefined ? "" : `<pre>${escapeHtml(state.detail)}</pre>`;
|
|
207
|
-
return `<div class="status error"><strong>${escapeHtml(state.message)}</strong><p>${escapeHtml(state.hint)}</p>${detail}</div>`;
|
|
229
|
+
return `<div class="status error"><strong class="ui-toolbar-title toolbar-title">${escapeHtml(state.message)}</strong><p>${escapeHtml(state.hint)}</p>${detail}</div>`;
|
|
208
230
|
}
|
|
209
231
|
function renderTaskGroups(tasks, runningTaskId) {
|
|
210
232
|
return `<div class="tasks">${groupTasks(tasks).map((group) => renderTaskGroup(group, runningTaskId)).join("")}</div>`;
|
|
@@ -233,11 +255,11 @@ function renderTask(task, runningTaskId) {
|
|
|
233
255
|
return `
|
|
234
256
|
<article class="task-card">
|
|
235
257
|
<div class="task-copy">
|
|
236
|
-
<strong>${escapeHtml(task.title)}</strong>
|
|
258
|
+
<strong class="ui-toolbar-title toolbar-title">${escapeHtml(task.title)}</strong>
|
|
237
259
|
${description}
|
|
238
260
|
<code>${escapeHtml(task.command)}</code>
|
|
239
261
|
</div>
|
|
240
|
-
<button data-task-id="${escapeAttr(task.id)}" ${disabled ? "disabled" : ""}>${escapeHtml(running ? t("bundled.workspace-tasks.dispatching.f0ad17", "Dispatching...") : t("bundled.workspace-tasks.run.75b269", "Run"))}</button>
|
|
262
|
+
<button type="button" class="ui-button ui-button--primary" data-task-id="${escapeAttr(task.id)}" ${disabled ? "disabled" : ""}>${escapeHtml(running ? t("bundled.workspace-tasks.dispatching.f0ad17", "Dispatching...") : t("bundled.workspace-tasks.run.75b269", "Run"))}</button>
|
|
241
263
|
</article>
|
|
242
264
|
`;
|
|
243
265
|
}
|
|
@@ -248,10 +270,9 @@ function taskFromConfigState(state, taskId) {
|
|
|
248
270
|
}
|
|
249
271
|
function taskStyles() {
|
|
250
272
|
return `
|
|
251
|
-
<style>
|
|
252
273
|
:host { display: contents; }
|
|
253
|
-
.toolbar {
|
|
254
|
-
.toolbar-
|
|
274
|
+
.toolbar { border-bottom: 1px solid var(--pi-border-muted); }
|
|
275
|
+
.toolbar-title { padding-inline: 10px; }
|
|
255
276
|
.viewer { box-sizing: border-box; min-height: 0; overflow: auto; padding: 12px; }
|
|
256
277
|
.tasks-viewer { display: grid; align-content: start; gap: 12px; }
|
|
257
278
|
.tasks { display: grid; gap: 14px; }
|
|
@@ -260,12 +281,9 @@ function taskStyles() {
|
|
|
260
281
|
.task-card { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 12px; align-items: center; border: 1px solid var(--pi-border); border-radius: 10px; background: var(--pi-surface); padding: 12px; }
|
|
261
282
|
.task-copy { display: grid; min-width: 0; gap: 5px; }
|
|
262
283
|
.task-copy span, .muted { color: var(--pi-muted); }
|
|
263
|
-
code, pre { border: 1px solid var(--pi-border-muted); border-radius: 6px; background: var(--pi-bg); color: var(--pi-text-secondary); font: 12px ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; }
|
|
284
|
+
code, pre { border: 1px solid var(--pi-border-muted); border-radius: 6px; background: var(--pi-bg); color: var(--pi-text-secondary); font: 12px var(--pi-mono, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace); }
|
|
264
285
|
code { overflow: auto; padding: 5px 7px; white-space: nowrap; }
|
|
265
286
|
pre { margin: 8px 0 0; overflow: auto; padding: 8px; white-space: pre-wrap; }
|
|
266
|
-
button { border: 1px solid var(--pi-accent-border); border-radius: 7px; background: var(--pi-accent); color: var(--pi-bg); cursor: pointer; padding: 6px 10px; font: inherit; }
|
|
267
|
-
button.secondary { border-color: var(--pi-border); background: var(--pi-surface); color: var(--pi-text); }
|
|
268
|
-
button:disabled { cursor: wait; opacity: 0.65; }
|
|
269
287
|
.empty-state { border: 1px dashed var(--pi-border-muted); border-radius: 8px; color: var(--pi-muted); padding: 12px; }
|
|
270
288
|
.empty-state p { margin: 6px 0 0; }
|
|
271
289
|
.panel-status { margin: 12px 12px 0; }
|
|
@@ -278,7 +296,6 @@ function taskStyles() {
|
|
|
278
296
|
.task-card { grid-template-columns: 1fr; }
|
|
279
297
|
.task-card button { justify-self: start; }
|
|
280
298
|
}
|
|
281
|
-
</style>
|
|
282
299
|
`;
|
|
283
300
|
}
|
|
284
301
|
function escapeHtml(value) {
|
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
"bundled.info.component.details": "{component}:{details}",
|
|
3
3
|
"bundled.info.list.separator": "、",
|
|
4
4
|
"bundled.relays.document.files": "中继包通常包含 {files}。",
|
|
5
|
+
"bundled.relays.open.packet": "打开中继 {name},第 {leg} 段",
|
|
6
|
+
"bundled.relays.label": "中继",
|
|
7
|
+
"bundled.relays.invalid.packet.link": "中继链接必须指向规范的工作区相对资料包目录。",
|
|
8
|
+
"bundled.relays.packet.documents": "中继资料包包含 charter.md(目标)、status.md(当前交接)和 log.md(历史);可选的 decisions.md 记录重要决定及理由。",
|
|
9
|
+
"bundled.workflows.create.worktree": "创建工作树",
|
|
10
|
+
"bundled.workflows.group": "工作流",
|
|
5
11
|
"bundled.relays.empty.location": "中继包存放在 {path},此工作区目前还没有中继包。",
|
|
6
12
|
"bundled.workspace-tasks.no.workspace.tasks.configured.here.bb6994": "这里还没有配置工作区任务。",
|
|
7
13
|
"bundled.workspace-tasks.is.optional.create.it.in.this.workspace.for.custom.tasks.306cdb": "{value1} 是可选文件。如果需要自定义任务,请在当前工作区创建它。",
|
|
@@ -172,5 +178,42 @@
|
|
|
172
178
|
"bundled.relays.refresh.aee887": "刷新",
|
|
173
179
|
"bundled.relays.partial": "部分嵌套内容未列出:此中继目录树超过了面板的深度或数量限制。",
|
|
174
180
|
"builtin.argument.name": "<会话名称>",
|
|
175
|
-
"builtin.argument.compact": "[说明]"
|
|
181
|
+
"builtin.argument.compact": "[说明]",
|
|
182
|
+
"git.cwdRootUnavailable": "无法解析 Git 工作树根目录",
|
|
183
|
+
"git.cwdRootInvalid": "Git 返回了无效的工作树根目录",
|
|
184
|
+
"bundled.workflows.create.description": "选择基础分支和用途,然后在主工作区发起新对话",
|
|
185
|
+
"bundled.workflows.select.project": "请先选择 Workflows 后端可用的项目。",
|
|
186
|
+
"bundled.workflows.project.required": "请先选择项目。",
|
|
187
|
+
"bundled.workflows.backend.required": "Workflows 后端不支持请求。",
|
|
188
|
+
"bundled.workflows.dialog.title": "创建工作树",
|
|
189
|
+
"bundled.workflows.base": "基础分支",
|
|
190
|
+
"bundled.workflows.purpose": "用途或描述",
|
|
191
|
+
"bundled.workflows.base.help": "选择本地或远端分支。HEAD 表示主工作区的当前提交。",
|
|
192
|
+
"bundled.workflows.purpose.help": "代理将据此命名分支和工作树。",
|
|
193
|
+
"bundled.workflows.loading": "正在加载分支...",
|
|
194
|
+
"bundled.workflows.cancel": "取消",
|
|
195
|
+
"bundled.workflows.target": "项目:{project}。将在其主工作区发起新对话,当前对话和草稿保持不变。",
|
|
196
|
+
"bundled.workflows.input.required": "请输入基础分支和用途或描述。",
|
|
197
|
+
"bundled.workflows.starting": "正在发起新对话...",
|
|
198
|
+
"bundled.workflows.opening": "对话已开始,正在打开...",
|
|
199
|
+
"bundled.workflows.started": "对话已开始。",
|
|
200
|
+
"bundled.workflows.uncertain": "无法确认任务是否已发起。",
|
|
201
|
+
"bundled.workflows.recover.session": "请在会话列表中打开对话 {sessionId}。",
|
|
202
|
+
"bundled.workflows.recover.uncertain": "重试前请先检查会话列表,对话可能已经开始。",
|
|
203
|
+
"bundled.workflows.close": "关闭",
|
|
204
|
+
"bundled.workflows.branches.invalid": "Workflows 返回的分支列表无效。",
|
|
205
|
+
"bundled.workflows.main.workspace": "主工作区:{path}",
|
|
206
|
+
"bundled.workflows.prepare.failed": "无法加载工作树选项。",
|
|
207
|
+
"bundled.workflows.response.invalid": "Workflows 返回的响应无效。",
|
|
208
|
+
"bundled.workflows.server.project.required": "Workflows 需要项目作用域",
|
|
209
|
+
"bundled.workflows.server.operation.unknown": "未知的 Workflows 操作",
|
|
210
|
+
"bundled.workflows.server.not.started": "Workflows 尚未启动",
|
|
211
|
+
"bundled.workflows.server.workspace.outside": "目录返回的工作区不属于当前项目",
|
|
212
|
+
"bundled.workflows.server.main.required": "项目必须有且只有一个主工作区",
|
|
213
|
+
"bundled.workflows.server.worktree.required": "主工作区必须是非裸 Git 工作树",
|
|
214
|
+
"bundled.workflows.server.branch.empty": "Git 返回了空的当前分支",
|
|
215
|
+
"bundled.workflows.server.input.fields": "发起任务的输入只能包含 base 和 description",
|
|
216
|
+
"bundled.workflows.server.input.invalid": "{field} 无效:必须是非空文本,不含 NUL,且不超过 {maxBytes} 个 UTF-8 字节",
|
|
217
|
+
"bundled.workflows.server.git.truncated": "Git 输出超过宿主限制",
|
|
218
|
+
"bundled.workflows.server.git.failed": "Git 命令失败({status}):{detail}"
|
|
176
219
|
}
|
|
@@ -1,4 +1,62 @@
|
|
|
1
1
|
{
|
|
2
|
+
"update.help": "用法:pi-web update [--yes] [--force]\n--force 在 npm 全局安装已为当前版本时重新安装。不加 --yes 时需要交互确认。会话内的 Linux 更新使用独立 systemd 用户服务,会话内的 macOS 更新使用独立 launchd 用户代理。",
|
|
3
|
+
"update.invalidArguments": "无效的更新参数。{help}",
|
|
4
|
+
"update.profileAbsolute": "无法安全确定 Pi 配置目录:必须为宿主绝对路径。",
|
|
5
|
+
"update.profileInvalid": "无法安全解析当前 Pi 配置目录:{error}",
|
|
6
|
+
"update.commandFailed": "{command} 执行失败({result}),未继续执行后续更新或重启步骤。",
|
|
7
|
+
"update.invalidHandoff": "无效的内部 npm 更新交接,未执行更改。",
|
|
8
|
+
"update.invalidIdentityHandoff": "无效的内部更新身份交接,未执行更改。",
|
|
9
|
+
"update.handoffIdentityChanged": "更新交接的身份已变化,未执行安装或重启。",
|
|
10
|
+
"update.unknownInstallation": "无法自动更新未知安装方式。请使用原安装工具更新,再从宿主终端运行 pi-web restart。未执行更改。",
|
|
11
|
+
"update.nestedRefused": "拒绝在 PI WEB 会话内执行原生更新:重启 daemon 可能终止更新进程。请在 PI WEB 之外的宿主终端运行 pi-web update;--yes 不能绕过此检查。",
|
|
12
|
+
"update.dockerModeUnknown": "Docker 安装模式未知,请使用原 pi-web-docker 宿主安装进行更新;未执行更改。",
|
|
13
|
+
"update.installationMissing": "无法安全定位当前 PI WEB 安装,未执行更改。",
|
|
14
|
+
"update.npmInstallationMissing": "无法安全定位当前 npm 全局安装,未执行更改。",
|
|
15
|
+
"update.npmTargetMismatch": "npm 全局目标与当前安装不匹配,未执行更改。",
|
|
16
|
+
"update.npmLatestFailed": "无法确定最新 PI WEB npm 版本,未执行安装或重启。",
|
|
17
|
+
"update.npmInstalledUnknown": "无法确定已安装的 PI WEB 版本,未执行更改。",
|
|
18
|
+
"update.alreadyCurrent": "PI WEB 已为最新版本({version}),未执行更改。可使用 --force 重新安装。",
|
|
19
|
+
"update.piScopeUnsupported": "仅支持自动更新用户作用域的远端 Pi 包。请使用原安装工具更新此包;未执行更改。",
|
|
20
|
+
"update.systemdDispatchFailed": "无法安全派发独立 systemd 重启,请使用 PI WEB 之外的宿主终端;未执行更改。",
|
|
21
|
+
"update.target": "更新目标:{target}",
|
|
22
|
+
"update.install": "安装:{command}",
|
|
23
|
+
"update.launchdHandoff": ",通过独立 launchd 用户代理 {target}",
|
|
24
|
+
"update.systemdHandoff": ",通过独立 systemd 用户单元 {unit}",
|
|
25
|
+
"update.afterInstall": "安装成功后执行:{command}{handoff}。",
|
|
26
|
+
"update.output": "独立更新输出:{path}",
|
|
27
|
+
"update.dockerOwnsRestart": "Docker 安装器负责更新与服务重启。",
|
|
28
|
+
"update.warning": "更新 PI WEB 将重启服务并中断活动会话和终端,包括当前终端。",
|
|
29
|
+
"update.consentRequired": "非交互更新必须显式使用 --yes 确认,未执行更改。",
|
|
30
|
+
"update.confirm": "是否继续更新并重启?",
|
|
31
|
+
"update.cancelled": "已取消更新,未执行更改。",
|
|
32
|
+
"update.launchdDispatched": "已交给 launchd 用户代理 {target},尚未验证完成。请查看 {path}。",
|
|
33
|
+
"update.checkoutPullFailed": "无法快进本地检出。请确认工作区干净、上游可访问且无需合并即可拉取;未执行安装或重启。",
|
|
34
|
+
"update.systemdDispatched": "已派发重启,尚未验证完成。请查看 journalctl --user -u {unit}。",
|
|
35
|
+
"update.checkoutInspectionFailed": "{reason}未执行更改。",
|
|
36
|
+
"update.checkoutInspectRoot": "无法安全更新本地安装:不是 Git 检出或无法检查仓库根目录。",
|
|
37
|
+
"update.checkoutRootMismatch": "无法安全更新本地安装:包根目录不是 Git 检出根目录。未执行更改。",
|
|
38
|
+
"update.checkoutInspectStatus": "无法检查本地检出状态。",
|
|
39
|
+
"update.checkoutDirty": "本地检出存在未提交或未跟踪的更改。请先提交、使用 stash 保存或移除这些更改;未执行更新。",
|
|
40
|
+
"update.checkoutInspectBranch": "本地检出处于分离 HEAD 状态,或无法确定当前分支。",
|
|
41
|
+
"update.checkoutDetached": "本地检出处于分离 HEAD 状态,请先切换到配置了上游的分支。未执行更改。",
|
|
42
|
+
"update.checkoutNoUpstream": "本地检出分支 {branch} 未配置上游分支。",
|
|
43
|
+
"update.handoffInstallationMissing": "无法安全定位用于 launchd 交接的 PI WEB 安装,未执行更改。",
|
|
44
|
+
"update.handoffRelativePath": "无法使用相对路径安全创建 launchd 交接,未执行更改。",
|
|
45
|
+
"update.handoffUserMissing": "无法安全确定用于 launchd 交接的 macOS 用户域,未执行更改。",
|
|
46
|
+
"update.handoffIdentifierInvalid": "交接标识无效,无法安全创建 launchd 交接;未执行更改。",
|
|
47
|
+
"update.launchdDispatchFailed": "无法安全派发独立 launchd 更新,请使用 PI WEB 之外的宿主终端;未执行更改。",
|
|
48
|
+
"update.handoffCleanupFailed": "警告:无法移除临时 launchd 交接文件 {path}:{error}",
|
|
49
|
+
"update.unsafeDaemonUrl": "无法交接不安全的会话 daemon 地址,请使用不含凭据的端点。未执行更改。",
|
|
50
|
+
"update.nativeUnsupported": "原生自动更新需要 Linux 或 macOS 服务,未执行更改。",
|
|
51
|
+
"update.nativeServicesMissing": "原生服务缺失或不完整。请从宿主终端运行 pi-web install,或使用原安装工具手动更新;未执行更改。",
|
|
52
|
+
"update.nativeNotLoaded": "原生服务 {service} 未加载,请先修复服务再更新;未执行更改。",
|
|
53
|
+
"version.latestRelease": "最新 npm 版本:",
|
|
54
|
+
"version.releaseSkipped": "? 已跳过:{reason}",
|
|
55
|
+
"version.releaseFailed": "! npm 版本检查失败:{error}",
|
|
56
|
+
"version.releaseDisabled": "以下环境变量已禁用远端版本检查:{keys}",
|
|
57
|
+
"version.registryStatus": "npm registry 返回 HTTP {status}",
|
|
58
|
+
"version.registryVersionMissing": "npm registry 响应未包含版本号",
|
|
59
|
+
"version.registryTimeout": "npm registry 检查在 5000 ms 后超时",
|
|
2
60
|
"pluginRecovery.help": "PI WEB 服务端插件恢复\n\n用法:\n pi-web plugins disable <plugin-id> [--config <path>] [--restart]\n pi-web plugins safe-start show [--config <path>]\n pi-web plugins safe-start set <bundled-only|none> [--config <path>] [--restart]\n pi-web plugins safe-start clear [--config <path>] [--restart]\n\n安全启动级别:\n bundled-only 只加载内置服务端插件,包括必需的 Terminal。\n none 不加载服务端插件;终端不可用,核心文件夹工作区仍可使用。\n\n必需的 Terminal 插件不能单独禁用;离线恢复请使用 safe-start none。\n这些命令离线修改配置,不连接会话守护进程,也不导入插件。\n修改在手动重启会话守护进程后生效;如果 --restart 可以自动重启,则会直接应用。",
|
|
3
61
|
"doctor.strategyUnknown": "已安装策略未知",
|
|
4
62
|
"doctor.ambiguousMode": "已安装的服务 ID 无法确定唯一模式({ids})。",
|
|
@@ -45,7 +103,7 @@
|
|
|
45
103
|
"install.overrideSkipped": "! {service} 使用自定义命令覆盖;预检未执行该自定义命令。",
|
|
46
104
|
"install.open": "打开:{url}",
|
|
47
105
|
"doctor.lingerCommand": " 服务器建议执行:sudo loginctl enable-linger {username}",
|
|
48
|
-
"help": "PI WEB\n\n用法:\n pi-web install [--dev] [--host 127.0.0.1] [--port 8504] [--config ~/.config/pi-web/config.json]\n pi-web uninstall\n pi-web start|stop|restart|status|logs\n pi-web audit <command> [options]\n pi-web doctor\n pi-web version\n\n审计命令:\n pi-web audit list|stats|export|prune|vacuum\n\n推荐安装方式:\n npm install -g @chainingintention/pi-web-cn --allow-scripts=node-pty\n pi-web install\n\n从源码目录安装开发服务:\n pi-web install --dev\n",
|
|
106
|
+
"help": "PI WEB\n\n用法:\n pi-web install [--dev] [--host 127.0.0.1] [--port 8504] [--config ~/.config/pi-web/config.json]\n pi-web uninstall\n pi-web start|stop|restart|status|logs\n pi-web audit <command> [options]\n pi-web doctor\n pi-web update [--yes] [--force]\n pi-web version [--check]\n\n审计命令:\n pi-web audit list|stats|export|prune|vacuum\n\n推荐安装方式:\n npm install -g @chainingintention/pi-web-cn --allow-scripts=node-pty\n pi-web install\n\n从源码目录安装开发服务:\n pi-web install --dev\n",
|
|
49
107
|
"service.unsupported": "`{command}` 需要受支持的用户级服务管理器(systemd 用户服务或 LaunchAgents),不支持 {platform}。\n\n{advice}",
|
|
50
108
|
"manual.checkout": "从源码目录手动运行 PI WEB:",
|
|
51
109
|
"manual.singleTerminal": "在一个终端中开发:",
|
|
@@ -90,6 +148,7 @@
|
|
|
90
148
|
"doctor.compareContexts": "\n若命令在终端可用但未通过服务管理器检查,请比较上述调用者与管理器环境。",
|
|
91
149
|
"cli.unknownCommand": "未知命令:{command}",
|
|
92
150
|
"version.heading": "PI WEB 版本",
|
|
151
|
+
"version.usage": "用法:pi-web version [--check]",
|
|
93
152
|
"version.installed": "已安装的软件包:",
|
|
94
153
|
"version.packageUnknown": "? {arg0}:未知",
|
|
95
154
|
"version.metadataMissing": " 缺少软件包元数据:{arg0}",
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
+
"client.sessionController.conversationRefreshUnavailable": "无法刷新对话,请检查连接后重试。",
|
|
3
|
+
"client.sessionController.sessionListRefreshUnavailable": "无法刷新会话列表,请检查连接后重试。",
|
|
2
4
|
"thinking.label.off": "关闭",
|
|
3
5
|
"thinking.label.minimal": "最低",
|
|
4
6
|
"thinking.label.low": "低",
|
|
@@ -215,5 +217,9 @@
|
|
|
215
217
|
"client.terminalKeys.move.backward.one.word.99de53": "向后移动一个单词",
|
|
216
218
|
"client.terminalKeys.move.forward.one.word.f92250": "向前移动一个单词",
|
|
217
219
|
"client.workspaceUploadState.not.uploaded.because.a.previous.file.upload.failed.989382": "因前面的文件上传失败而未上传。",
|
|
218
|
-
"client.workspaceUploadState.upload.cancelled.2e6b43": "上传已取消"
|
|
220
|
+
"client.workspaceUploadState.upload.cancelled.2e6b43": "上传已取消",
|
|
221
|
+
"client.themes.paper.description": "白色和中性灰,搭配克制的状态色。",
|
|
222
|
+
"client.themes.graphite.description": "炭黑和中性灰,搭配克制的状态色。",
|
|
223
|
+
"client.themes.neutralPair.description": "跟随系统浅色/深色偏好使用中性灰主题。",
|
|
224
|
+
"client.workspaceController.authorityDegraded": "工作区权威目录暂不可用"
|
|
219
225
|
}
|