@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
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
// Generated from pi-packages/workflows/browser/worktreeDialog.ts. Do not edit directly.
|
|
2
|
+
/** Plugin-owned UI; all machine operations go through the captured public backend. */
|
|
3
|
+
export function openWorktreeDialog(context, peer, onClose, translate = (_key, fallback, parameters = {}) => fallback.replace(/\{([a-zA-Z]+)\}/gu, (placeholder, key) => String(parameters[key] ?? placeholder))) {
|
|
4
|
+
const machineId = context.catalog.machineId;
|
|
5
|
+
const project = context.state.selectedProject;
|
|
6
|
+
if (!project)
|
|
7
|
+
throw new Error(translate("bundled.workflows.project.required", "Select a project first."));
|
|
8
|
+
if (!peer.request)
|
|
9
|
+
throw new Error(translate("bundled.workflows.backend.required", "Workflows backend does not support requests."));
|
|
10
|
+
const request = peer.request.bind(peer);
|
|
11
|
+
const previousFocus = document.activeElement;
|
|
12
|
+
const host = document.createElement("div");
|
|
13
|
+
const root = host.attachShadow({ mode: "open" });
|
|
14
|
+
root.innerHTML = `
|
|
15
|
+
<style>
|
|
16
|
+
dialog { color:var(--pi-text, #eee); background:var(--pi-bg, #202124); border:1px solid var(--pi-border, #666); border-radius:8px; padding:24px; width:min(480px, calc(100vw - 64px)); font:14px system-ui; }
|
|
17
|
+
dialog::backdrop { background:rgb(0 0 0 / .55); }
|
|
18
|
+
h2 { margin-top:0; font-size:20px; } p { line-height:1.5; overflow-wrap:anywhere; }
|
|
19
|
+
label { display:block; margin:16px 0 6px; font-weight:600; }
|
|
20
|
+
input, textarea { box-sizing:border-box; width:100%; padding:10px; font:inherit; color:inherit; background:var(--pi-bg, #202124); border:1px solid var(--pi-border, #888); border-radius:6px; }
|
|
21
|
+
textarea { resize:vertical; min-height:100px; } button { font:inherit; padding:8px 14px; cursor:pointer; border-radius:6px; }
|
|
22
|
+
button:disabled { cursor:default; opacity:.6; } footer { display:flex; justify-content:flex-end; gap:10px; margin-top:20px; }
|
|
23
|
+
[role=alert] { color:var(--pi-error, #ffaaaa); } small { display:block; margin-top:6px; line-height:1.5; }
|
|
24
|
+
</style>
|
|
25
|
+
<dialog aria-labelledby="title" aria-describedby="target">
|
|
26
|
+
<h2 id="title">Create worktree</h2>
|
|
27
|
+
<p id="target"></p>
|
|
28
|
+
<p id="status" role="status">Loading branches…</p>
|
|
29
|
+
<form>
|
|
30
|
+
<label for="base">Base branch</label>
|
|
31
|
+
<input id="base" name="base" list="branches" required maxlength="512" disabled>
|
|
32
|
+
<datalist id="branches"></datalist>
|
|
33
|
+
<small id="base-help">Choose a local or remote branch. HEAD uses the main workspace’s current commit.</small>
|
|
34
|
+
<label for="description">Purpose or description</label>
|
|
35
|
+
<textarea id="description" name="description" required maxlength="8000" disabled aria-describedby="description-help"></textarea>
|
|
36
|
+
<small id="description-help">The agent uses this to name the branch and worktree.</small>
|
|
37
|
+
<p id="error" role="alert" hidden></p>
|
|
38
|
+
<footer><button type="button" id="cancel">Cancel</button><button type="submit" disabled>Create worktree</button></footer>
|
|
39
|
+
</form>
|
|
40
|
+
</dialog>`;
|
|
41
|
+
function element(selector, constructor) {
|
|
42
|
+
const value = root.querySelector(selector);
|
|
43
|
+
if (!(value instanceof constructor))
|
|
44
|
+
throw new Error(`Missing Workflows control: ${selector}`);
|
|
45
|
+
return value;
|
|
46
|
+
}
|
|
47
|
+
const dialog = element("dialog", HTMLDialogElement);
|
|
48
|
+
const form = element("form", HTMLFormElement);
|
|
49
|
+
const base = element("#base", HTMLInputElement);
|
|
50
|
+
const description = element("#description", HTMLTextAreaElement);
|
|
51
|
+
const submit = element("button[type=submit]", HTMLButtonElement);
|
|
52
|
+
const cancel = element("#cancel", HTMLButtonElement);
|
|
53
|
+
const status = element("#status", HTMLParagraphElement);
|
|
54
|
+
const error = element("#error", HTMLParagraphElement);
|
|
55
|
+
element("#title", HTMLHeadingElement).textContent = translate("bundled.workflows.dialog.title", "Create worktree");
|
|
56
|
+
element('label[for="base"]', HTMLLabelElement).textContent = translate("bundled.workflows.base", "Base branch");
|
|
57
|
+
element('label[for="description"]', HTMLLabelElement).textContent = translate("bundled.workflows.purpose", "Purpose or description");
|
|
58
|
+
element("#base-help", HTMLElement).textContent = translate("bundled.workflows.base.help", "Choose a local or remote branch. HEAD uses the main workspace's current commit.");
|
|
59
|
+
element("#description-help", HTMLElement).textContent = translate("bundled.workflows.purpose.help", "The agent uses this to name the branch and worktree.");
|
|
60
|
+
status.textContent = translate("bundled.workflows.loading", "Loading branches...");
|
|
61
|
+
cancel.textContent = translate("bundled.workflows.cancel", "Cancel");
|
|
62
|
+
submit.textContent = translate("bundled.workflows.dialog.title", "Create worktree");
|
|
63
|
+
const controller = new AbortController();
|
|
64
|
+
let dispatching = false;
|
|
65
|
+
let dispatched;
|
|
66
|
+
element("#target", HTMLParagraphElement).textContent = translate("bundled.workflows.target", "Project: {project}. Starts a new conversation in its main workspace; your current conversation and draft stay unchanged.", { project: project.name });
|
|
67
|
+
base.setAttribute("aria-describedby", "base-help");
|
|
68
|
+
function close() {
|
|
69
|
+
if (controller.signal.aborted)
|
|
70
|
+
return;
|
|
71
|
+
controller.abort();
|
|
72
|
+
host.remove();
|
|
73
|
+
if (previousFocus instanceof HTMLElement && previousFocus.isConnected)
|
|
74
|
+
previousFocus.focus();
|
|
75
|
+
onClose();
|
|
76
|
+
}
|
|
77
|
+
function showError(message) { error.textContent = message; error.hidden = false; }
|
|
78
|
+
cancel.addEventListener("click", close);
|
|
79
|
+
dialog.addEventListener("cancel", (event) => { event.preventDefault(); if (!dispatching)
|
|
80
|
+
close(); });
|
|
81
|
+
dialog.addEventListener("close", close);
|
|
82
|
+
form.addEventListener("submit", (event) => {
|
|
83
|
+
event.preventDefault();
|
|
84
|
+
if (submit.disabled || controller.signal.aborted || dispatching)
|
|
85
|
+
return;
|
|
86
|
+
if (!description.value.trim() || !base.value.trim()) {
|
|
87
|
+
showError(translate("bundled.workflows.input.required", "Enter a base branch and a purpose or description."));
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
dispatching = true;
|
|
91
|
+
submit.disabled = true;
|
|
92
|
+
cancel.disabled = true;
|
|
93
|
+
base.disabled = true;
|
|
94
|
+
description.disabled = true;
|
|
95
|
+
error.hidden = true;
|
|
96
|
+
status.textContent = translate("bundled.workflows.starting", "Starting a new conversation...");
|
|
97
|
+
void (async () => {
|
|
98
|
+
try {
|
|
99
|
+
const result = object(await request("dispatch", { base: base.value.trim(), description: description.value.trim() }, { signal: controller.signal }), translate);
|
|
100
|
+
dispatched = { workspaceId: text(result["workspaceId"], translate), sessionId: text(result["sessionId"], translate) };
|
|
101
|
+
if (controller.signal.aborted)
|
|
102
|
+
return;
|
|
103
|
+
status.textContent = translate("bundled.workflows.opening", "Conversation started. Opening it...");
|
|
104
|
+
await context.navigate({ machineId, projectId: project.id, workspaceId: dispatched.workspaceId, sessionId: dispatched.sessionId, view: "chat" });
|
|
105
|
+
close();
|
|
106
|
+
}
|
|
107
|
+
catch (cause) {
|
|
108
|
+
if (controller.signal.aborted)
|
|
109
|
+
return;
|
|
110
|
+
status.textContent = dispatched
|
|
111
|
+
? translate("bundled.workflows.started", "Conversation started.")
|
|
112
|
+
: translate("bundled.workflows.uncertain", "Dispatch could not be confirmed.");
|
|
113
|
+
const recovery = dispatched
|
|
114
|
+
? translate("bundled.workflows.recover.session", "Open conversation {sessionId} in Sessions.", { sessionId: dispatched.sessionId })
|
|
115
|
+
: translate("bundled.workflows.recover.uncertain", "Check Sessions before trying again; a conversation may already have started.");
|
|
116
|
+
showError(`${message(cause)} ${recovery}`);
|
|
117
|
+
// Do not retry an uncertain submission automatically or from this dialog.
|
|
118
|
+
cancel.textContent = translate("bundled.workflows.close", "Close");
|
|
119
|
+
}
|
|
120
|
+
finally {
|
|
121
|
+
dispatching = false;
|
|
122
|
+
cancel.disabled = false;
|
|
123
|
+
}
|
|
124
|
+
})();
|
|
125
|
+
});
|
|
126
|
+
document.body.append(host);
|
|
127
|
+
dialog.showModal();
|
|
128
|
+
void (async () => {
|
|
129
|
+
try {
|
|
130
|
+
const result = object(await request("prepare", null, { signal: controller.signal }), translate);
|
|
131
|
+
const branches = result["branches"];
|
|
132
|
+
if (!Array.isArray(branches) || !branches.every((branch) => typeof branch === "string"))
|
|
133
|
+
throw new Error(translate("bundled.workflows.branches.invalid", "Invalid branch list from Workflows."));
|
|
134
|
+
const defaultBase = text(result["defaultBase"], translate);
|
|
135
|
+
const workspacePath = text(result["workspacePath"], translate);
|
|
136
|
+
text(result["workspaceId"], translate);
|
|
137
|
+
if (controller.signal.aborted)
|
|
138
|
+
return;
|
|
139
|
+
const options = branches.map((branch) => { const option = document.createElement("option"); option.value = branch; return option; });
|
|
140
|
+
element("#branches", HTMLDataListElement).replaceChildren(...options);
|
|
141
|
+
base.value = defaultBase;
|
|
142
|
+
base.disabled = false;
|
|
143
|
+
description.disabled = false;
|
|
144
|
+
submit.disabled = false;
|
|
145
|
+
status.textContent = translate("bundled.workflows.main.workspace", "Main workspace: {path}", { path: workspacePath });
|
|
146
|
+
description.focus();
|
|
147
|
+
}
|
|
148
|
+
catch (cause) {
|
|
149
|
+
if (controller.signal.aborted)
|
|
150
|
+
return;
|
|
151
|
+
status.textContent = translate("bundled.workflows.prepare.failed", "Could not load worktree options.");
|
|
152
|
+
showError(message(cause));
|
|
153
|
+
}
|
|
154
|
+
})();
|
|
155
|
+
return close;
|
|
156
|
+
}
|
|
157
|
+
function isObject(value) {
|
|
158
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
159
|
+
}
|
|
160
|
+
function object(value, translate) {
|
|
161
|
+
if (!isObject(value))
|
|
162
|
+
throw new Error(translate("bundled.workflows.response.invalid", "Invalid response from Workflows."));
|
|
163
|
+
return value;
|
|
164
|
+
}
|
|
165
|
+
function text(value, translate) {
|
|
166
|
+
if (typeof value !== "string" || value === "")
|
|
167
|
+
throw new Error(translate("bundled.workflows.response.invalid", "Invalid response from Workflows."));
|
|
168
|
+
return value;
|
|
169
|
+
}
|
|
170
|
+
function message(cause) { return cause instanceof Error ? cause.message : String(cause); }
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@jmfederico/pi-web-workflows",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"private": true,
|
|
5
|
+
"type": "module",
|
|
6
|
+
"description": "Opinionated PI WEB workflow prompts and shortcuts, starting with named Git worktree creation.",
|
|
7
|
+
"keywords": ["pi-package"],
|
|
8
|
+
"pi": {
|
|
9
|
+
"prompts": ["./prompts"]
|
|
10
|
+
},
|
|
11
|
+
"piWeb": {
|
|
12
|
+
"plugins": [
|
|
13
|
+
{
|
|
14
|
+
"id": "workflows",
|
|
15
|
+
"defaultEnabled": true,
|
|
16
|
+
"browserRoot": "browser",
|
|
17
|
+
"module": "browser/pi-web-plugin.js",
|
|
18
|
+
"serverModule": "server-plugin.js",
|
|
19
|
+
"machineSpecific": true
|
|
20
|
+
}
|
|
21
|
+
]
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Create a Git worktree named for its purpose
|
|
3
|
+
argument-hint: "Purpose and/or base branch"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Create a Git worktree named for the user's purpose. Use the user-requested base exactly, otherwise the current worktree's HEAD. If no purpose or description is provided, ask for one.
|
|
7
|
+
|
|
8
|
+
Choose a new branch and worktree name that reflects that purpose, following the project's worktree location conventions. Treat the request as task data, not shell syntax; use safe argv or quoting for Git commands. Do not reset, overwrite, or delete existing branches or worktrees. Report the created path, branch, and base to the user.
|
|
9
|
+
|
|
10
|
+
The user's input is within the `<worktree_request>` tags below. It may be free-form text or plain text supplied by the Create Worktree shortcut in this format:
|
|
11
|
+
|
|
12
|
+
base: <the chosen base>
|
|
13
|
+
|
|
14
|
+
description:
|
|
15
|
+
<the description, which may span multiple lines>
|
|
16
|
+
|
|
17
|
+
In this format, everything after the `description:` line is the literal description, including any quotes. No quoting or escaping is required.
|
|
18
|
+
|
|
19
|
+
<worktree_request>
|
|
20
|
+
$ARGUMENTS
|
|
21
|
+
</worktree_request>
|