@jmfederico/pi-web 1.202608.0 → 1.202608.2
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 +4 -4
- package/dist/cli.js +287 -113
- package/dist/cli.js.map +1 -1
- package/dist/client/assets/CodeViewer-BMWwxG7q.js +4 -0
- package/dist/client/assets/{TerminalPanel-fYrKc3jh.js → TerminalPanel-CacQDIYn.js} +6 -6
- package/dist/client/assets/index-DUW2xnoV.js +4279 -0
- package/dist/client/assets/vendor-editor-core-CXO8gGab.js +12 -0
- package/dist/client/assets/vendor-editor-languages-CpW4sJsX.js +46 -0
- package/dist/client/index.html +3 -3
- package/dist/config.js +110 -73
- package/dist/config.js.map +1 -1
- package/dist/docker/piWebDockerCommandPlan.js +4 -3
- package/dist/docker/piWebDockerCommandPlan.js.map +1 -1
- package/dist/environment.js +4 -0
- package/dist/environment.js.map +1 -0
- package/dist/nativeServices/installedServiceDefinitions.js +602 -0
- package/dist/nativeServices/installedServiceDefinitions.js.map +1 -0
- package/dist/nativeServices/serviceAction.js +174 -0
- package/dist/nativeServices/serviceAction.js.map +1 -0
- package/dist/nativeServices/serviceDoctor.js +374 -71
- package/dist/nativeServices/serviceDoctor.js.map +1 -1
- package/dist/nativeServices/servicePlan.js +1 -1
- package/dist/nativeServices/servicePlan.js.map +1 -1
- package/dist/{pi-web-plugins → pi-packages}/relays/markdownDocument.js +1 -1
- package/dist/pi-packages/relays/package.json +11 -0
- package/dist/{pi-web-plugins → pi-packages}/relays/pi-web-plugin.js +4 -4
- package/dist/pi-packages/relays/prompts/relay-worktree.md +157 -0
- package/dist/pi-packages/relays/prompts/relay.md +152 -0
- package/dist/{pi-web-plugins → pi-packages}/relays/relayDiscovery.js +1 -1
- package/dist/{pi-web-plugins → pi-packages}/relays/relaysPanelElement.js +1 -1
- package/dist/pi-packages/relays/skills/relay/SKILL.md +123 -0
- package/dist/pi-web-plugins/git/browser/git-contract.js +108 -0
- package/dist/pi-web-plugins/git/browser/git-panel.js +609 -0
- package/dist/pi-web-plugins/git/browser/gitFileList.js +43 -0
- package/dist/pi-web-plugins/git/browser/gitFileShared.js +16 -0
- package/dist/pi-web-plugins/git/browser/gitFileTree.js +81 -0
- package/dist/pi-web-plugins/git/browser/gitFileViewPreference.js +35 -0
- package/dist/pi-web-plugins/git/browser/gitRoute.js +42 -0
- package/dist/pi-web-plugins/git/browser/pi-web-plugin.js +10 -0
- package/dist/pi-web-plugins/git/browser/unifiedDiff.js +301 -0
- package/dist/{server/git/gitService.js → pi-web-plugins/git/git-backend.js} +209 -60
- package/dist/pi-web-plugins/git/package.json +16 -0
- package/dist/pi-web-plugins/git/server-plugin.js +176 -0
- package/dist/pi-web-plugins/info/infoInternals.js +16 -2
- package/dist/pi-web-plugins/info/package.json +1 -1
- package/dist/pi-web-plugins/info/pi-web-plugin.js +2 -2
- package/dist/pi-web-plugins/updates/package.json +1 -1
- package/dist/pi-web-plugins/updates/pi-web-plugin.js +1 -1
- package/dist/pi-web-plugins/workspace-tasks/package.json +1 -1
- package/dist/pi-web-plugins/workspace-tasks/pi-web-plugin.js +3 -3
- package/dist/piWebVersionReport.js +63 -10
- package/dist/piWebVersionReport.js.map +1 -1
- package/dist/plugin-api.d.ts +33 -16
- package/dist/pluginRecoveryCli.js +172 -0
- package/dist/pluginRecoveryCli.js.map +1 -0
- package/dist/server/activity/workspaceActivityService.js +27 -19
- package/dist/server/activity/workspaceActivityService.js.map +1 -1
- package/dist/server/app.js +41 -15
- package/dist/server/app.js.map +1 -1
- package/dist/server/configRoutes.js +3 -21
- package/dist/server/configRoutes.js.map +1 -1
- package/dist/server/knownAutoInstallPiPackages.js +30 -0
- package/dist/server/knownAutoInstallPiPackages.js.map +1 -0
- package/dist/server/machines/machineClient.js +23 -4
- package/dist/server/machines/machineClient.js.map +1 -1
- package/dist/server/machines/machinePluginProxyRoutes.js +74 -17
- package/dist/server/machines/machinePluginProxyRoutes.js.map +1 -1
- package/dist/server/machines/machineProxyRoutes.js +165 -8
- package/dist/server/machines/machineProxyRoutes.js.map +1 -1
- package/dist/server/machines/machineService.js +23 -0
- package/dist/server/machines/machineService.js.map +1 -1
- package/dist/server/piPackageIdentity.js +25 -0
- package/dist/server/piPackageIdentity.js.map +1 -0
- package/dist/server/piPackageService.js +69 -8
- package/dist/server/piPackageService.js.map +1 -1
- package/dist/server/piWebPluginCatalog.js +584 -0
- package/dist/server/piWebPluginCatalog.js.map +1 -0
- package/dist/server/piWebPluginLifecycle.js +162 -0
- package/dist/server/piWebPluginLifecycle.js.map +1 -0
- package/dist/server/piWebPluginService.js +159 -261
- package/dist/server/piWebPluginService.js.map +1 -1
- package/dist/server/piWebStatus.js +41 -9
- package/dist/server/piWebStatus.js.map +1 -1
- package/dist/server/plugins/pluginBackendProxyRoutes.js +69 -0
- package/dist/server/plugins/pluginBackendProxyRoutes.js.map +1 -0
- package/dist/server/plugins/serverPluginExec.js +184 -0
- package/dist/server/plugins/serverPluginExec.js.map +1 -0
- package/dist/server/plugins/serverPluginRuntime.js +480 -0
- package/dist/server/plugins/serverPluginRuntime.js.map +1 -0
- package/dist/server/projectTrustRoutes.js +80 -0
- package/dist/server/projectTrustRoutes.js.map +1 -0
- package/dist/server/projects/projectService.js +3 -1
- package/dist/server/projects/projectService.js.map +1 -1
- package/dist/server/realtime/sessionEventHub.js +26 -11
- package/dist/server/realtime/sessionEventHub.js.map +1 -1
- package/dist/server/requestCancellation.js +32 -0
- package/dist/server/requestCancellation.js.map +1 -0
- package/dist/server/sessiond/agentProcessEnvironment.js +29 -30
- package/dist/server/sessiond/agentProcessEnvironment.js.map +1 -1
- package/dist/server/sessiond/autoInstallPiPackages.js +63 -0
- package/dist/server/sessiond/autoInstallPiPackages.js.map +1 -0
- package/dist/server/sessiond/pluginBackendRoutes.js +64 -0
- package/dist/server/sessiond/pluginBackendRoutes.js.map +1 -0
- package/dist/server/sessiond/sessionDaemonShutdown.js +24 -0
- package/dist/server/sessiond/sessionDaemonShutdown.js.map +1 -0
- package/dist/server/sessiond/sessionProxyRoutes.js +2 -2
- package/dist/server/sessiond/sessionProxyRoutes.js.map +1 -1
- package/dist/server/sessiond/sessionServiceDependencies.js +2 -1
- package/dist/server/sessiond/sessionServiceDependencies.js.map +1 -1
- package/dist/server/sessiond/sessiondStateOwnership.js +235 -0
- package/dist/server/sessiond/sessiondStateOwnership.js.map +1 -0
- package/dist/server/sessiond/workspaceCatalogRoutes.js +31 -0
- package/dist/server/sessiond/workspaceCatalogRoutes.js.map +1 -0
- package/dist/server/sessiond/workspaceRemovalRoutes.js +41 -0
- package/dist/server/sessiond/workspaceRemovalRoutes.js.map +1 -0
- package/dist/server/sessiond.js +284 -98
- package/dist/server/sessiond.js.map +1 -1
- package/dist/server/sessions/authService.js +15 -54
- package/dist/server/sessions/authService.js.map +1 -1
- package/dist/server/sessions/dockerEnvironmentFacts.js +254 -0
- package/dist/server/sessions/dockerEnvironmentFacts.js.map +1 -0
- package/dist/server/sessions/modelCatalogRefresher.js +4 -3
- package/dist/server/sessions/modelCatalogRefresher.js.map +1 -1
- package/dist/server/sessions/piSessionManagerGateway.js +18 -67
- package/dist/server/sessions/piSessionManagerGateway.js.map +1 -1
- package/dist/server/sessions/piSessionService.js +495 -142
- package/dist/server/sessions/piSessionService.js.map +1 -1
- package/dist/server/sessions/sessionCommandService.js +24 -1
- package/dist/server/sessions/sessionCommandService.js.map +1 -1
- package/dist/server/sessions/sessionEnvironmentFacts.js +48 -0
- package/dist/server/sessions/sessionEnvironmentFacts.js.map +1 -0
- package/dist/server/sessions/sessionFileFormat.js +27 -0
- package/dist/server/sessions/sessionFileFormat.js.map +1 -0
- package/dist/server/sessions/sessionFileHeader.js +1 -14
- package/dist/server/sessions/sessionFileHeader.js.map +1 -1
- package/dist/server/sessions/sessionModelScope.js +160 -0
- package/dist/server/sessions/sessionModelScope.js.map +1 -0
- package/dist/server/sessions/sessionNameGenerator.js +6 -6
- package/dist/server/sessions/sessionNameGenerator.js.map +1 -1
- package/dist/server/sessions/sessionRoutes.js +55 -0
- package/dist/server/sessions/sessionRoutes.js.map +1 -1
- package/dist/server/sessions/sessionSummaryScanner.js +96 -224
- package/dist/server/sessions/sessionSummaryScanner.js.map +1 -1
- package/dist/server/sessions/spawnSubsessionTool.js +5 -9
- package/dist/server/sessions/spawnSubsessionTool.js.map +1 -1
- package/dist/server/sessions/spawnTargetResolver.js +1 -1
- package/dist/server/status/machineStatusRoutes.js +8 -0
- package/dist/server/status/machineStatusRoutes.js.map +1 -0
- package/dist/server/status/machineStatusService.js +181 -0
- package/dist/server/status/machineStatusService.js.map +1 -0
- package/dist/server/status/workspaceAttribution.js +87 -0
- package/dist/server/status/workspaceAttribution.js.map +1 -0
- package/dist/server/storage/piPackageDismissalStore.js +78 -0
- package/dist/server/storage/piPackageDismissalStore.js.map +1 -0
- package/dist/server/terminalProxyRoutes.js +2 -1
- package/dist/server/terminalProxyRoutes.js.map +1 -1
- package/dist/server/workspaceExplorerRoutes.js +20 -13
- package/dist/server/workspaceExplorerRoutes.js.map +1 -1
- package/dist/server/workspaces/fileContentService.js +18 -9
- package/dist/server/workspaces/fileContentService.js.map +1 -1
- package/dist/server/workspaces/filePreviewResponseHeaders.js +18 -0
- package/dist/server/workspaces/filePreviewResponseHeaders.js.map +1 -0
- package/dist/server/workspaces/filePreviewResponsePolicy.js +55 -0
- package/dist/server/workspaces/filePreviewResponsePolicy.js.map +1 -0
- package/dist/server/workspaces/filePreviewService.js +81 -0
- package/dist/server/workspaces/filePreviewService.js.map +1 -0
- package/dist/server/workspaces/projectWorkspaceCwds.js +0 -5
- package/dist/server/workspaces/projectWorkspaceCwds.js.map +1 -1
- package/dist/server/workspaces/sessionDaemonWorkspaceCatalog.js +402 -0
- package/dist/server/workspaces/sessionDaemonWorkspaceCatalog.js.map +1 -0
- package/dist/server/workspaces/workspaceCatalog.js +47 -0
- package/dist/server/workspaces/workspaceCatalog.js.map +1 -0
- package/dist/server/workspaces/workspaceContext.js +1 -3
- package/dist/server/workspaces/workspaceContext.js.map +1 -1
- package/dist/server/workspaces/workspaceDeletionRoutes.js +35 -125
- package/dist/server/workspaces/workspaceDeletionRoutes.js.map +1 -1
- package/dist/server/workspaces/workspaceProviderRegistry.js +651 -0
- package/dist/server/workspaces/workspaceProviderRegistry.js.map +1 -0
- package/dist/server/workspaces/workspaceRemovalService.js +256 -0
- package/dist/server/workspaces/workspaceRemovalService.js.map +1 -0
- package/dist/server/workspaces/workspaceRouteErrors.js +7 -0
- package/dist/server/workspaces/workspaceRouteErrors.js.map +1 -0
- package/dist/server/workspaces/worktreePreRemoveHook.js +39 -0
- package/dist/server/workspaces/worktreePreRemoveHook.js.map +1 -0
- package/dist/server-plugin-api.d.ts +140 -0
- package/dist/server-plugin-api.js +2 -0
- package/dist/server-plugin-api.js.map +1 -0
- package/dist/serverPluginRecovery.js +138 -0
- package/dist/serverPluginRecovery.js.map +1 -0
- package/dist/sessiond/activeAgentProfile.js +3 -22
- package/dist/sessiond/activeAgentProfile.js.map +1 -1
- package/dist/sessiond/config.js +11 -0
- package/dist/sessiond/config.js.map +1 -1
- package/dist/sessiond/sessionDaemonClient.js +11 -9
- package/dist/sessiond/sessionDaemonClient.js.map +1 -1
- package/dist/shared/activeAgentProfile.js +2 -41
- package/dist/shared/activeAgentProfile.js.map +1 -1
- package/dist/shared/activity.js +0 -3
- package/dist/shared/activity.js.map +1 -1
- package/dist/shared/apiTypes.js +7 -5
- package/dist/shared/apiTypes.js.map +1 -1
- package/dist/shared/capabilities.js +8 -6
- package/dist/shared/capabilities.js.map +1 -1
- package/dist/shared/federatedRoutes.js +36 -5
- package/dist/shared/federatedRoutes.js.map +1 -1
- package/dist/shared/machinePluginIds.js +4 -2
- package/dist/shared/machinePluginIds.js.map +1 -1
- package/dist/shared/machineStatus.js +94 -0
- package/dist/shared/machineStatus.js.map +1 -0
- package/dist/shared/piWebStatusParsing.js +33 -0
- package/dist/shared/piWebStatusParsing.js.map +1 -1
- package/dist/shared/pluginApiTypes.d.ts +150 -0
- package/dist/shared/pluginApiTypes.js +3 -0
- package/dist/shared/pluginApiTypes.js.map +1 -0
- package/dist/shared/pluginBackendProtocol.js +110 -0
- package/dist/shared/pluginBackendProtocol.js.map +1 -0
- package/dist/shared/pluginIds.js +5 -0
- package/dist/shared/pluginIds.js.map +1 -1
- package/dist/shared/pluginRecoveryCommands.js +14 -0
- package/dist/shared/pluginRecoveryCommands.js.map +1 -0
- package/dist/shared/workspaceFiles.js +41 -2
- package/dist/shared/workspaceFiles.js.map +1 -1
- package/dist/shared/workspaceRemovalProtocol.js +24 -0
- package/dist/shared/workspaceRemovalProtocol.js.map +1 -0
- package/docs/config.md +105 -52
- package/docs/plugins.md +403 -146
- package/examples/workspace-provider-plugin/README.md +52 -0
- package/examples/workspace-provider-plugin/package.json +25 -0
- package/examples/workspace-provider-plugin/src/browser/index.ts +69 -0
- package/examples/workspace-provider-plugin/src/server.ts +64 -0
- package/examples/workspace-provider-plugin/tsconfig.json +21 -0
- package/package.json +30 -11
- package/server-plugin-api.d.ts +1 -0
- package/dist/client/assets/CodeViewer-D91Sp61M.js +0 -4
- package/dist/client/assets/UnifiedDiffViewer-BafLWGtF.js +0 -39
- package/dist/client/assets/index-CA8q9_o7.js +0 -4025
- package/dist/client/assets/vendor-editor-core-vUi74DnD.js +0 -12
- package/dist/client/assets/vendor-editor-languages-DoaXUodB.js +0 -46
- package/dist/pi-web-plugins/relays/package.json +0 -9
- package/dist/plugin-api/unstable.d.ts +0 -22
- package/dist/server/activity/workspaceActivityRoutes.js +0 -4
- package/dist/server/activity/workspaceActivityRoutes.js.map +0 -1
- package/dist/server/git/gitService.js.map +0 -1
- package/dist/server/gitRoutes.js +0 -23
- package/dist/server/gitRoutes.js.map +0 -1
- package/dist/server/sessions/parentSessionLocator.js +0 -75
- package/dist/server/sessions/parentSessionLocator.js.map +0 -1
- package/dist/server/workspaces/gitWorktreeDiscovery.js +0 -43
- package/dist/server/workspaces/gitWorktreeDiscovery.js.map +0 -1
- package/dist/server/workspaces/imagePreviewService.js +0 -40
- package/dist/server/workspaces/imagePreviewService.js.map +0 -1
- package/dist/server/workspaces/workspaceService.js +0 -52
- package/dist/server/workspaces/workspaceService.js.map +0 -1
- package/dist/shared/apiTypes.d.ts +0 -1217
- package/dist/shared/thinkingLevels.d.ts +0 -27
- package/plugin-api/unstable.d.ts +0 -1
- /package/dist/{pi-web-plugins → pi-packages}/relays/vendor/README.md +0 -0
- /package/dist/{pi-web-plugins → pi-packages}/relays/vendor/marked.esm.js +0 -0
|
@@ -16,9 +16,22 @@ export class SessionEventHub {
|
|
|
16
16
|
sockets.delete(socket);
|
|
17
17
|
});
|
|
18
18
|
}
|
|
19
|
+
/**
|
|
20
|
+
* Frame sent to each global subscriber the moment it joins, before any live
|
|
21
|
+
* event. It closes the join race for state the browser would otherwise only
|
|
22
|
+
* fetch over HTTP: with two proxy hops in federation, that fetch can resolve
|
|
23
|
+
* before the upstream subscription exists and then be clobbered by a stale
|
|
24
|
+
* value.
|
|
25
|
+
*/
|
|
26
|
+
setGlobalJoinFrame(frame) {
|
|
27
|
+
this.globalJoinFrame = frame;
|
|
28
|
+
}
|
|
19
29
|
addGlobal(socket) {
|
|
20
30
|
this.globalSockets.add(socket);
|
|
21
31
|
socket.on("close", () => this.globalSockets.delete(socket));
|
|
32
|
+
const joinFrame = this.globalJoinFrame?.();
|
|
33
|
+
if (joinFrame !== undefined)
|
|
34
|
+
this.sendToSocket(this.globalSockets, socket, JSON.stringify(joinFrame));
|
|
22
35
|
}
|
|
23
36
|
publish(sessionId, event) {
|
|
24
37
|
const seq = (this.seqBySession.get(sessionId) ?? 0) + 1;
|
|
@@ -49,20 +62,22 @@ export class SessionEventHub {
|
|
|
49
62
|
sendToSockets(sockets, payload) {
|
|
50
63
|
if (sockets === undefined)
|
|
51
64
|
return;
|
|
52
|
-
for (const socket of sockets)
|
|
53
|
-
|
|
54
|
-
|
|
65
|
+
for (const socket of sockets)
|
|
66
|
+
this.sendToSocket(sockets, socket, payload);
|
|
67
|
+
}
|
|
68
|
+
sendToSocket(sockets, socket, payload) {
|
|
69
|
+
if (socket.readyState !== socket.OPEN)
|
|
70
|
+
return;
|
|
71
|
+
try {
|
|
72
|
+
socket.send(payload);
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
sockets.delete(socket);
|
|
55
76
|
try {
|
|
56
|
-
socket.
|
|
77
|
+
socket.terminate();
|
|
57
78
|
}
|
|
58
79
|
catch {
|
|
59
|
-
sockets.
|
|
60
|
-
try {
|
|
61
|
-
socket.terminate();
|
|
62
|
-
}
|
|
63
|
-
catch {
|
|
64
|
-
// Removal is authoritative; cleanup failure must not block healthy sockets.
|
|
65
|
-
}
|
|
80
|
+
// Removal is authoritative; cleanup failure must not block healthy sockets.
|
|
66
81
|
}
|
|
67
82
|
}
|
|
68
83
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessionEventHub.js","sourceRoot":"","sources":["../../../src/server/realtime/sessionEventHub.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAU5E,MAAM,OAAO,eAAe;IAA5B;QACmB,qBAAgB,GAAG,IAAI,GAAG,EAA+B,CAAC;QAC1D,kBAAa,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC1C,iBAAY,GAAG,IAAI,GAAG,EAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"sessionEventHub.js","sourceRoot":"","sources":["../../../src/server/realtime/sessionEventHub.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAU5E,MAAM,OAAO,eAAe;IAA5B;QACmB,qBAAgB,GAAG,IAAI,GAAG,EAA+B,CAAC;QAC1D,kBAAa,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC1C,iBAAY,GAAG,IAAI,GAAG,EAAkB,CAAC;IAkF5D,CAAC;IA/EC,GAAG,CAAC,SAAiB,EAAE,MAAsB;QAC3C,IAAI,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACnD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;YACpB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAChD,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpB,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACtB,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;OAMG;IACH,kBAAkB,CAAC,KAA0B;QAC3C,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;IAC/B,CAAC;IAED,SAAS,CAAC,MAAsB;QAC9B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC/B,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5D,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;QAC3C,IAAI,SAAS,KAAK,SAAS;YAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;IACxG,CAAC;IAED,OAAO,CAAC,SAAiB,EAAE,KAAqB;QAC9C,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACxD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,0BAA0B,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;QAC9E,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;IACpE,CAAC;IAED;;;;;OAKG;IACH,UAAU,CAAC,SAAiB;QAC1B,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC;IAED,aAAa,CAAC,KAAyB;QACrC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,0BAA0B,CAAC,KAAsC;QAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IAClD,CAAC;IAED,eAAe,CAAC,KAAoB;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IAClD,CAAC;IAEO,aAAa,CAAC,OAAwC,EAAE,OAAe;QAC7E,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO;QAClC,KAAK,MAAM,MAAM,IAAI,OAAO;YAAE,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5E,CAAC;IAEO,YAAY,CAAC,OAA4B,EAAE,MAAsB,EAAE,OAAe;QACxF,IAAI,MAAM,CAAC,UAAU,KAAK,MAAM,CAAC,IAAI;YAAE,OAAO;QAC9C,IAAI,CAAC;YACH,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACvB,IAAI,CAAC;gBACH,MAAM,CAAC,SAAS,EAAE,CAAC;YACrB,CAAC;YAAC,MAAM,CAAC;gBACP,4EAA4E;YAC9E,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Turns an inbound HTTP disconnect into cooperative cancellation for a bounded
|
|
3
|
+
* downstream operation. A normal completed response never aborts the signal.
|
|
4
|
+
*/
|
|
5
|
+
export function requestCancellation(request, reply) {
|
|
6
|
+
const controller = new AbortController();
|
|
7
|
+
const abort = () => {
|
|
8
|
+
if (!controller.signal.aborted) {
|
|
9
|
+
controller.abort(new DOMException("HTTP request cancelled", "AbortError"));
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
const abortOnPrematureResponseClose = () => {
|
|
13
|
+
if (!reply.raw.writableEnded)
|
|
14
|
+
abort();
|
|
15
|
+
};
|
|
16
|
+
request.raw.once("aborted", abort);
|
|
17
|
+
reply.raw.once("close", abortOnPrematureResponseClose);
|
|
18
|
+
// Node auto-destroys the request stream once its body has been fully read, so
|
|
19
|
+
// `request.raw.destroyed` alone does not mean the client went away. Only an
|
|
20
|
+
// incomplete request stream, or a response closed before it was written, is a
|
|
21
|
+
// real disconnect that happened before this cancellation was installed.
|
|
22
|
+
if ((request.raw.destroyed && !request.raw.complete) || (reply.raw.destroyed && !reply.raw.writableEnded))
|
|
23
|
+
abort();
|
|
24
|
+
return {
|
|
25
|
+
signal: controller.signal,
|
|
26
|
+
dispose() {
|
|
27
|
+
request.raw.removeListener("aborted", abort);
|
|
28
|
+
reply.raw.removeListener("close", abortOnPrematureResponseClose);
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=requestCancellation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"requestCancellation.js","sourceRoot":"","sources":["../../src/server/requestCancellation.ts"],"names":[],"mappings":"AAOA;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAuB,EAAE,KAAmB;IAC9E,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,GAAS,EAAE;QACvB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAC/B,UAAU,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC,wBAAwB,EAAE,YAAY,CAAC,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC,CAAC;IACF,MAAM,6BAA6B,GAAG,GAAS,EAAE;QAC/C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa;YAAE,KAAK,EAAE,CAAC;IACxC,CAAC,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IACnC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,6BAA6B,CAAC,CAAC;IACvD,8EAA8E;IAC9E,4EAA4E;IAC5E,8EAA8E;IAC9E,wEAAwE;IACxE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC;QAAE,KAAK,EAAE,CAAC;IAEnH,OAAO;QACL,MAAM,EAAE,UAAU,CAAC,MAAM;QACzB,OAAO;YACL,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAC7C,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,OAAO,EAAE,6BAA6B,CAAC,CAAC;QACnE,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -3,46 +3,45 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Sessions run inside the session daemon process, so everything agents can
|
|
5
5
|
* spawn — the bash tool, terminals, subsessions — inherits the daemon's
|
|
6
|
-
* environment by default. That
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
* session point at the live daemon's state.
|
|
6
|
+
* environment by default. That inheritance is deliberate: the daemon's
|
|
7
|
+
* `PI_WEB_*` wiring stays visible so agent-facing tooling keeps working, and
|
|
8
|
+
* a second PI WEB instance started from inside a session resolves the same
|
|
9
|
+
* state and fails loudly at startup (see `sessiondStateOwnership`) instead of
|
|
10
|
+
* silently corrupting the live daemon's data. `PI_WEB_SESSION=1` and the
|
|
11
|
+
* session environment facts tell agents they are nested and which precautions
|
|
12
|
+
* apply.
|
|
14
13
|
*
|
|
15
|
-
* The daemon captures its environment once at startup for its own use and
|
|
16
|
-
* removes
|
|
17
|
-
* inherit a clean environment without per-call-site
|
|
18
|
-
* rules:
|
|
14
|
+
* The daemon captures its environment once at startup for its own use and
|
|
15
|
+
* then removes the handful of keys that silently distort the tools agents
|
|
16
|
+
* run, so all later spawns inherit a clean environment without per-call-site
|
|
17
|
+
* filtering. Visibility rules:
|
|
19
18
|
*
|
|
20
19
|
* - Ordinary variables (`PATH`, `HOME`, `XDG_CONFIG_HOME`, proxy keys, …)
|
|
21
20
|
* stay.
|
|
22
|
-
* - `PI_WEB_*` keys
|
|
23
|
-
*
|
|
24
|
-
*
|
|
21
|
+
* - `PI_WEB_*` keys stay — including `PI_WEB_DOCKER_*` deployment descriptors
|
|
22
|
+
* the agent-facing `pi-web-docker` CLI reads, and the deprecated
|
|
23
|
+
* `PI_WEB_AGENT_*` aliases: the canonical `PI_CODING_AGENT_*` vars are
|
|
24
|
+
* exported with the fully resolved values, so both names resolve
|
|
25
|
+
* identically for anything started from here.
|
|
25
26
|
* - `HOSTEXEC_*` stays: agents use `hostexec`.
|
|
26
27
|
* - `PI_CODING_AGENT_DIR` stays so agent-spawned `pi` CLIs find the profile's
|
|
27
|
-
* auth and models; `PI_CODING_AGENT_SESSION_DIR`
|
|
28
|
-
* wiring
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
28
|
+
* auth and models; `PI_CODING_AGENT_SESSION_DIR` stays for the same reason:
|
|
29
|
+
* it is documented `pi` configuration, not daemon wiring, so a deployment
|
|
30
|
+
* that sets it wants every `pi` process — whether daemon-spawned or started
|
|
31
|
+
* by an agent — using the same session storage.
|
|
32
|
+
* - `NODE_ENV` and `PORT` are app-runtime configuration and the only removals:
|
|
33
|
+
* `NODE_ENV=production` makes npm skip devDependencies and flips Node
|
|
34
|
+
* package-export conditions, and `PORT` leaks into the listener
|
|
35
|
+
* configuration of tools agents run.
|
|
32
36
|
*/
|
|
33
|
-
/** Deployment descriptors agent-facing tools (`pi-web-docker`) legitimately read. */
|
|
34
|
-
const AGENT_VISIBLE_PI_WEB_PREFIXES = ["PI_WEB_DOCKER_"];
|
|
35
37
|
/**
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
* keys
|
|
39
|
-
*
|
|
40
|
-
* compatibility name owned by the companion CLI (`PI_CODING_AGENT_*`).
|
|
38
|
+
* Keys that configure the daemon or app runtime in ways that silently break
|
|
39
|
+
* the tools agents run. Daemon configuration belongs in `PI_WEB_`-prefixed
|
|
40
|
+
* keys, which stay visible; a key only belongs here when it cannot carry the
|
|
41
|
+
* prefix (deployment conventions like `NODE_ENV`).
|
|
41
42
|
*/
|
|
42
|
-
const DAEMON_ONLY_ENV_KEYS = new Set(["NODE_ENV", "PORT"
|
|
43
|
+
const DAEMON_ONLY_ENV_KEYS = new Set(["NODE_ENV", "PORT"]);
|
|
43
44
|
export function isAgentVisibleEnvKey(key) {
|
|
44
|
-
if (key.startsWith("PI_WEB_"))
|
|
45
|
-
return AGENT_VISIBLE_PI_WEB_PREFIXES.some((prefix) => key.startsWith(prefix));
|
|
46
45
|
return !DAEMON_ONLY_ENV_KEYS.has(key);
|
|
47
46
|
}
|
|
48
47
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agentProcessEnvironment.js","sourceRoot":"","sources":["../../../src/server/sessiond/agentProcessEnvironment.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"agentProcessEnvironment.js","sourceRoot":"","sources":["../../../src/server/sessiond/agentProcessEnvironment.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH;;;;;GAKG;AACH,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;AAE3D,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,OAAO,CAAC,oBAAoB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACxC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CAAC,GAAsB;IAChE,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9E,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,2EAA2E;QAC3E,yEAAyE;QACzE,gEAAgE;QAChE,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;AACzB,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sessiond-startup auto-install reconciliation for Pi packages PI WEB ships
|
|
3
|
+
* "out of the box" (see the `relay-pi-package-autoinstall` relay).
|
|
4
|
+
*
|
|
5
|
+
* Some Pi-package plugins (currently just `@jmfederico/pi-relay`, the Relays
|
|
6
|
+
* plugin) are shipped inside PI WEB's own npm tarball but must be installed
|
|
7
|
+
* as a real Pi package for pi's own package resolution to pick them up,
|
|
8
|
+
* rather than being bundled-discovered by directory scan. To keep today's
|
|
9
|
+
* zero-extra-steps experience, sessiond reconciles this at startup for the
|
|
10
|
+
* active agent profile: if the profile does not already have a package
|
|
11
|
+
* declaring one of these known names configured, and the profile has not
|
|
12
|
+
* dismissed it (removed it on purpose through the Settings UI — tracked by
|
|
13
|
+
* {@link PiPackageDismissalStore}), sessiond installs it from its shipped
|
|
14
|
+
* local path using the same install mechanism the manual Settings UI Install
|
|
15
|
+
* action already uses.
|
|
16
|
+
*
|
|
17
|
+
* This is entirely best-effort and non-fatal: any failure (offline, a
|
|
18
|
+
* read-only agent directory, a package-manager error, a corrupt dismissal
|
|
19
|
+
* file, etc.) is logged and reconciliation moves on, per package and overall.
|
|
20
|
+
* It must never crash or block session daemon startup — callers should not
|
|
21
|
+
* await this before the daemon starts serving requests.
|
|
22
|
+
*/
|
|
23
|
+
import { defaultPiWebPackageRoot, KNOWN_AUTO_INSTALLABLE_PI_PACKAGES, resolveShippedPiPackagePath, } from "../knownAutoInstallPiPackages.js";
|
|
24
|
+
import { resolveDeclaredPiPackageName } from "../piPackageIdentity.js";
|
|
25
|
+
import { PiPackageDismissalStore } from "../storage/piPackageDismissalStore.js";
|
|
26
|
+
const defaultIdentityResolver = {
|
|
27
|
+
resolveDeclaredName: resolveDeclaredPiPackageName,
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Reconciles the active agent profile's configured Pi packages against the
|
|
31
|
+
* known auto-installable registry, installing any that are neither already
|
|
32
|
+
* configured nor dismissed. Never throws: every failure, per package, is
|
|
33
|
+
* caught and logged so one broken package (or a broken check) never prevents
|
|
34
|
+
* reconciling the rest, and never affects session daemon startup.
|
|
35
|
+
*/
|
|
36
|
+
export async function reconcileAutoInstallablePiPackages(options) {
|
|
37
|
+
const { profileDir, packageProvider, installer, dismissalChecker = new PiPackageDismissalStore(), identityResolver = defaultIdentityResolver, packageRoot = defaultPiWebPackageRoot(), knownPackages = KNOWN_AUTO_INSTALLABLE_PI_PACKAGES, logger, } = options;
|
|
38
|
+
for (const knownPackage of knownPackages) {
|
|
39
|
+
try {
|
|
40
|
+
if (await isAlreadyConfigured(knownPackage.id, packageProvider, identityResolver))
|
|
41
|
+
continue;
|
|
42
|
+
if (await dismissalChecker.isDismissed(profileDir, knownPackage.id))
|
|
43
|
+
continue;
|
|
44
|
+
const source = resolveShippedPiPackagePath(knownPackage, packageRoot);
|
|
45
|
+
await installer.install(source);
|
|
46
|
+
logger?.info?.({ packageId: knownPackage.id, profileDir, source }, "auto-installed known Pi package for the active agent profile");
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
logger?.warn({ err: error, packageId: knownPackage.id, profileDir }, "best-effort auto-install reconciliation failed for a known Pi package; continuing without it");
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
async function isAlreadyConfigured(packageId, packageProvider, identityResolver) {
|
|
54
|
+
for (const configured of packageProvider.listPackages()) {
|
|
55
|
+
const installedPath = configured.installedPath ?? packageProvider.getInstalledPath(configured.source, configured.scope);
|
|
56
|
+
if (installedPath === undefined)
|
|
57
|
+
continue;
|
|
58
|
+
if (await identityResolver.resolveDeclaredName(installedPath) === packageId)
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=autoInstallPiPackages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autoInstallPiPackages.js","sourceRoot":"","sources":["../../../src/server/sessiond/autoInstallPiPackages.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,EACL,uBAAuB,EACvB,kCAAkC,EAClC,2BAA2B,GAE5B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,4BAA4B,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAuChF,MAAM,uBAAuB,GAAyC;IACpE,mBAAmB,EAAE,4BAA4B;CAClD,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,kCAAkC,CAAC,OAAkD;IACzG,MAAM,EACJ,UAAU,EACV,eAAe,EACf,SAAS,EACT,gBAAgB,GAAG,IAAI,uBAAuB,EAAE,EAChD,gBAAgB,GAAG,uBAAuB,EAC1C,WAAW,GAAG,uBAAuB,EAAE,EACvC,aAAa,GAAG,kCAAkC,EAClD,MAAM,GACP,GAAG,OAAO,CAAC;IAEZ,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;QACzC,IAAI,CAAC;YACH,IAAI,MAAM,mBAAmB,CAAC,YAAY,CAAC,EAAE,EAAE,eAAe,EAAE,gBAAgB,CAAC;gBAAE,SAAS;YAC5F,IAAI,MAAM,gBAAgB,CAAC,WAAW,CAAC,UAAU,EAAE,YAAY,CAAC,EAAE,CAAC;gBAAE,SAAS;YAE9E,MAAM,MAAM,GAAG,2BAA2B,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;YACtE,MAAM,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAChC,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,YAAY,CAAC,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,8DAA8D,CAAC,CAAC;QACrI,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,EAAE,IAAI,CACV,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,CAAC,EAAE,EAAE,UAAU,EAAE,EACtD,8FAA8F,CAC/F,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,SAAiB,EACjB,eAAkC,EAClC,gBAAsD;IAEtD,KAAK,MAAM,UAAU,IAAI,eAAe,CAAC,YAAY,EAAE,EAAE,CAAC;QACxD,MAAM,aAAa,GAAG,UAAU,CAAC,aAAa,IAAI,eAAe,CAAC,gBAAgB,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;QACxH,IAAI,aAAa,KAAK,SAAS;YAAE,SAAS;QAC1C,IAAI,MAAM,gBAAgB,CAAC,mBAAmB,CAAC,aAAa,CAAC,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;IAC3F,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { isPiWebPluginId } from "../../shared/pluginIds.js";
|
|
2
|
+
import { parsePluginBackendRequestEnvelope, PLUGIN_BACKEND_REQUEST_BODY_MAX_BYTES, PLUGIN_BACKEND_RESPONSE_JSON_MAX_BYTES, requirePluginBackendOperation, serializeBoundedPluginBackendJson, } from "../../shared/pluginBackendProtocol.js";
|
|
3
|
+
import { WorkspaceProviderRequestError, } from "../workspaces/workspaceProviderRegistry.js";
|
|
4
|
+
/** JSON-only sessiond boundary for the active owner of one current workspace. */
|
|
5
|
+
export function registerPluginBackendRoutes(app, dependencies, prefix = "/plugin-backends") {
|
|
6
|
+
app.post(`${prefix}/:pluginId/projects/:projectId/workspaces/:workspaceId/:operation`, { bodyLimit: PLUGIN_BACKEND_REQUEST_BODY_MAX_BYTES }, async (request, reply) => {
|
|
7
|
+
const { pluginId, projectId, workspaceId } = request.params;
|
|
8
|
+
let operation = request.params.operation;
|
|
9
|
+
let envelope;
|
|
10
|
+
try {
|
|
11
|
+
if (!isPiWebPluginId(pluginId))
|
|
12
|
+
throw new Error(`Invalid PI WEB plugin id: ${pluginId}`);
|
|
13
|
+
operation = requirePluginBackendOperation(operation);
|
|
14
|
+
if (projectId === "")
|
|
15
|
+
throw new Error("Project id is required");
|
|
16
|
+
if (workspaceId === "")
|
|
17
|
+
throw new Error("Workspace id is required");
|
|
18
|
+
envelope = parsePluginBackendRequestEnvelope(request.body);
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
return attributedError(reply, 400, boundedErrorMessage(error), "invalid-request", pluginId, operation);
|
|
22
|
+
}
|
|
23
|
+
let project;
|
|
24
|
+
try {
|
|
25
|
+
project = await dependencies.projects.requireProject(projectId);
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
const message = boundedErrorMessage(error);
|
|
29
|
+
return attributedError(reply, message === "Project not found" ? 404 : 500, message, message === "Project not found" ? "project-not-found" : "project-resolution-failed", pluginId, operation);
|
|
30
|
+
}
|
|
31
|
+
try {
|
|
32
|
+
const result = await dependencies.backends.request({
|
|
33
|
+
pluginId,
|
|
34
|
+
moduleRevision: envelope.revision,
|
|
35
|
+
project,
|
|
36
|
+
workspaceId,
|
|
37
|
+
operation,
|
|
38
|
+
input: envelope.input,
|
|
39
|
+
});
|
|
40
|
+
const serialized = serializeBoundedPluginBackendJson(result, `Server plugin ${pluginId} operation ${operation} result`, PLUGIN_BACKEND_RESPONSE_JSON_MAX_BYTES);
|
|
41
|
+
return await reply.type("application/json; charset=utf-8").send(serialized);
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
return await pluginBackendRequestFailed(reply, error, pluginId, operation);
|
|
45
|
+
}
|
|
46
|
+
finally {
|
|
47
|
+
dependencies.onWorkspacesMutated();
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
function pluginBackendRequestFailed(reply, error, pluginId, operation) {
|
|
52
|
+
if (error instanceof WorkspaceProviderRequestError) {
|
|
53
|
+
return attributedError(reply, error.statusCode, error.message, error.code, pluginId, operation);
|
|
54
|
+
}
|
|
55
|
+
return attributedError(reply, 502, `Plugin backend request failed: ${boundedErrorMessage(error)}`, "request-failed", pluginId, operation);
|
|
56
|
+
}
|
|
57
|
+
function attributedError(reply, statusCode, message, code, pluginId, operation) {
|
|
58
|
+
return reply.code(statusCode).send({ error: message, code, pluginId, operation });
|
|
59
|
+
}
|
|
60
|
+
function boundedErrorMessage(error) {
|
|
61
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
62
|
+
return message.length <= 2_048 ? message : `${message.slice(0, 2_045)}...`;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=pluginBackendRoutes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pluginBackendRoutes.js","sourceRoot":"","sources":["../../../src/server/sessiond/pluginBackendRoutes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/** Quiesces ingress, disposes consumers, then tears down plugin providers and dependencies. */
|
|
2
|
+
export async function runSessionDaemonShutdown(options) {
|
|
3
|
+
const { dependencies } = options;
|
|
4
|
+
const operations = [
|
|
5
|
+
["quiesce server", () => dependencies.quiesceServer()],
|
|
6
|
+
["dispose terminals", () => dependencies.terminals.dispose()],
|
|
7
|
+
["dispose catalog refresher", () => dependencies.catalogRefresher.dispose()],
|
|
8
|
+
["dispose sessions", () => dependencies.sessions.dispose()],
|
|
9
|
+
["close server", () => dependencies.closeServer()],
|
|
10
|
+
["stop server plugins", () => dependencies.serverPlugins.stop()],
|
|
11
|
+
["dispose auth", () => dependencies.auth.dispose()],
|
|
12
|
+
["flush session unread state", () => dependencies.unreadStore.flush()],
|
|
13
|
+
];
|
|
14
|
+
for (const [operation, run] of operations) {
|
|
15
|
+
try {
|
|
16
|
+
await run();
|
|
17
|
+
}
|
|
18
|
+
catch (error) {
|
|
19
|
+
options.onFailure?.();
|
|
20
|
+
options.logger.error({ err: error, operation }, "session daemon shutdown operation failed");
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=sessionDaemonShutdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionDaemonShutdown.js","sourceRoot":"","sources":["../../../src/server/sessiond/sessionDaemonShutdown.ts"],"names":[],"mappings":"AAqBA,+FAA+F;AAC/F,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,OAAqC;IAClF,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC;IACjC,MAAM,UAAU,GAA+D;QAC7E,CAAC,gBAAgB,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,CAAC;QACtD,CAAC,mBAAmB,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QAC7D,CAAC,2BAA2B,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;QAC5E,CAAC,kBAAkB,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QAC3D,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;QAClD,CAAC,qBAAqB,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;QAChE,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACnD,CAAC,4BAA4B,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;KACvE,CAAC;IAEF,KAAK,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,IAAI,UAAU,EAAE,CAAC;QAC1C,IAAI,CAAC;YACH,MAAM,GAAG,EAAE,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;YACtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,0CAA0C,CAAC,CAAC;QAC9F,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { WebSocket } from "ws";
|
|
2
|
-
import { SessionDaemonClient } from "../../sessiond/sessionDaemonClient.js";
|
|
2
|
+
import { SessionDaemonClient, } from "../../sessiond/sessionDaemonClient.js";
|
|
3
3
|
export function registerSessionProxyRoutes(app, daemon = new SessionDaemonClient(), prefix = "/api") {
|
|
4
4
|
const proxy = async (request, reply) => {
|
|
5
5
|
try {
|
|
@@ -26,7 +26,7 @@ export function registerSessionProxyRoutes(app, daemon = new SessionDaemonClient
|
|
|
26
26
|
app.get(`${prefix}/events`, { websocket: true }, (socket) => {
|
|
27
27
|
bridgeSockets(socket, daemon.connectWebSocket("/events"));
|
|
28
28
|
});
|
|
29
|
-
app.all(`${prefix}/
|
|
29
|
+
app.all(`${prefix}/status`, (request, reply) => proxy(request, reply));
|
|
30
30
|
app.all(`${prefix}/auth`, (request, reply) => proxy(request, reply));
|
|
31
31
|
app.all(`${prefix}/auth/*`, (request, reply) => proxy(request, reply));
|
|
32
32
|
app.all(`${prefix}/sessions`, (request, reply) => proxy(request, reply));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessionProxyRoutes.js","sourceRoot":"","sources":["../../../src/server/sessiond/sessionProxyRoutes.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAgB,MAAM,IAAI,CAAC;AAC7C,OAAO,
|
|
1
|
+
{"version":3,"file":"sessionProxyRoutes.js","sourceRoot":"","sources":["../../../src/server/sessiond/sessionProxyRoutes.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,14 +16,15 @@ export function sessionServiceDependencies(input) {
|
|
|
16
16
|
workspaceActivity: input.workspaceActivity,
|
|
17
17
|
logger: input.logger,
|
|
18
18
|
...(input.spawnTargets === undefined ? {} : { spawnTargets: input.spawnTargets }),
|
|
19
|
-
...(input.projectWorkspaces === undefined ? {} : { projectWorkspaces: input.projectWorkspaces }),
|
|
20
19
|
// Tracked subsessions share the spawn capability's project-scope resolver,
|
|
21
20
|
// so they stay off unless spawning is configured too.
|
|
22
21
|
subsessionsEnabled: input.spawnTargets !== undefined && input.subsessionsEnabled,
|
|
23
22
|
askUserEnabled: input.askUserEnabled,
|
|
23
|
+
appendSystemPromptSections: input.appendSystemPromptSections,
|
|
24
24
|
extensionDialogsTimeoutMs: input.extensionDialogsTimeoutMs,
|
|
25
25
|
notificationStore: input.notificationStore,
|
|
26
26
|
unreadStore: input.unreadStore,
|
|
27
|
+
onUnreadChanged: input.onUnreadChanged,
|
|
27
28
|
// Read-only, so session startup can tell a waiting user that provider
|
|
28
29
|
// model lists are refreshing at the same time.
|
|
29
30
|
catalogRefreshStatus: input.catalogRefreshStatus,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessionServiceDependencies.js","sourceRoot":"","sources":["../../../src/server/sessiond/sessionServiceDependencies.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sessionServiceDependencies.js","sourceRoot":"","sources":["../../../src/server/sessiond/sessionServiceDependencies.ts"],"names":[],"mappings":"AAmCA;;;;;;;;;GASG;AACH,MAAM,UAAU,0BAA0B,CAAC,KAAoC;IAC7E,OAAO;QACL,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;QAC1C,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,GAAG,CAAC,KAAK,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC;QACjF,2EAA2E;QAC3E,sDAAsD;QACtD,kBAAkB,EAAE,KAAK,CAAC,YAAY,KAAK,SAAS,IAAI,KAAK,CAAC,kBAAkB;QAChF,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,0BAA0B,EAAE,KAAK,CAAC,0BAA0B;QAC5D,yBAAyB,EAAE,KAAK,CAAC,yBAAyB;QAC1D,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;QAC1C,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,eAAe,EAAE,KAAK,CAAC,eAAe;QACtC,sEAAsE;QACtE,+CAA+C;QAC/C,oBAAoB,EAAE,KAAK,CAAC,oBAAoB;QAChD,cAAc,EAAE,KAAK,CAAC,cAAc;KACrC,CAAC;AACJ,CAAC"}
|