@vincenthanxiaodu/pi-web 1.202608.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (376) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +185 -0
  3. package/dist/cli.js +1149 -0
  4. package/dist/cli.js.map +1 -0
  5. package/dist/client/apple-touch-icon.png +0 -0
  6. package/dist/client/assets/CodeViewer-D_Q6ljLV.js +4 -0
  7. package/dist/client/assets/TerminalPanel-CTGixJIz.js +187 -0
  8. package/dist/client/assets/index-C2phil_t.js +5637 -0
  9. package/dist/client/assets/vendor-editor-core-CXO8gGab.js +12 -0
  10. package/dist/client/assets/vendor-editor-languages-CpW4sJsX.js +46 -0
  11. package/dist/client/assets/vendor-editor-legacy-CYBnW6ZU.js +1 -0
  12. package/dist/client/assets/vendor-terminal-BrP-ENHg.css +1 -0
  13. package/dist/client/assets/vendor-terminal-D8k4UKM2.js +35 -0
  14. package/dist/client/favicon.svg +11 -0
  15. package/dist/client/index.html +124 -0
  16. package/dist/client/manifest.webmanifest +24 -0
  17. package/dist/client/pwa-icon-192.png +0 -0
  18. package/dist/client/pwa-icon-512.png +0 -0
  19. package/dist/config.js +505 -0
  20. package/dist/config.js.map +1 -0
  21. package/dist/docker/piWebDockerCommandPlan.js +212 -0
  22. package/dist/docker/piWebDockerCommandPlan.js.map +1 -0
  23. package/dist/environment.js +4 -0
  24. package/dist/environment.js.map +1 -0
  25. package/dist/nativeServices/installedServiceDefinitions.js +602 -0
  26. package/dist/nativeServices/installedServiceDefinitions.js.map +1 -0
  27. package/dist/nativeServices/serviceAction.js +174 -0
  28. package/dist/nativeServices/serviceAction.js.map +1 -0
  29. package/dist/nativeServices/serviceDoctor.js +783 -0
  30. package/dist/nativeServices/serviceDoctor.js.map +1 -0
  31. package/dist/nativeServices/serviceInstall.js +35 -0
  32. package/dist/nativeServices/serviceInstall.js.map +1 -0
  33. package/dist/nativeServices/servicePlan.js +358 -0
  34. package/dist/nativeServices/servicePlan.js.map +1 -0
  35. package/dist/nativeServices/serviceProbe.js +447 -0
  36. package/dist/nativeServices/serviceProbe.js.map +1 -0
  37. package/dist/nativeServices/serviceRendering.js +132 -0
  38. package/dist/nativeServices/serviceRendering.js.map +1 -0
  39. package/dist/pi-web-plugins/git/browser/git-contract.js +108 -0
  40. package/dist/pi-web-plugins/git/browser/git-panel.js +609 -0
  41. package/dist/pi-web-plugins/git/browser/gitFileList.js +43 -0
  42. package/dist/pi-web-plugins/git/browser/gitFileShared.js +16 -0
  43. package/dist/pi-web-plugins/git/browser/gitFileTree.js +81 -0
  44. package/dist/pi-web-plugins/git/browser/gitFileViewPreference.js +35 -0
  45. package/dist/pi-web-plugins/git/browser/gitRoute.js +42 -0
  46. package/dist/pi-web-plugins/git/browser/pi-web-plugin.js +10 -0
  47. package/dist/pi-web-plugins/git/browser/unifiedDiff.js +301 -0
  48. package/dist/pi-web-plugins/git/git-backend.js +439 -0
  49. package/dist/pi-web-plugins/git/package.json +16 -0
  50. package/dist/pi-web-plugins/git/server-plugin.js +176 -0
  51. package/dist/pi-web-plugins/info/infoInternals.js +222 -0
  52. package/dist/pi-web-plugins/info/package.json +9 -0
  53. package/dist/pi-web-plugins/info/pi-web-plugin.js +48 -0
  54. package/dist/pi-web-plugins/relays/markdownDocument.js +81 -0
  55. package/dist/pi-web-plugins/relays/package.json +9 -0
  56. package/dist/pi-web-plugins/relays/pi-web-plugin.js +44 -0
  57. package/dist/pi-web-plugins/relays/relayDiscovery.js +228 -0
  58. package/dist/pi-web-plugins/relays/relaysPanelElement.js +550 -0
  59. package/dist/pi-web-plugins/relays/vendor/README.md +24 -0
  60. package/dist/pi-web-plugins/relays/vendor/marked.esm.js +76 -0
  61. package/dist/pi-web-plugins/updates/package.json +9 -0
  62. package/dist/pi-web-plugins/updates/pi-web-plugin.js +185 -0
  63. package/dist/pi-web-plugins/updates/updatesLogic.js +97 -0
  64. package/dist/pi-web-plugins/workspace-tasks/config.js +91 -0
  65. package/dist/pi-web-plugins/workspace-tasks/package.json +9 -0
  66. package/dist/pi-web-plugins/workspace-tasks/pi-web-plugin.js +48 -0
  67. package/dist/pi-web-plugins/workspace-tasks/taskRunner.js +12 -0
  68. package/dist/pi-web-plugins/workspace-tasks/tasksPanelElement.js +288 -0
  69. package/dist/pi-web-plugins/workspace-tasks/workspaceTasksClient.js +47 -0
  70. package/dist/piWebVersionReport.js +278 -0
  71. package/dist/piWebVersionReport.js.map +1 -0
  72. package/dist/plugin-api.d.ts +222 -0
  73. package/dist/pluginRecoveryCli.js +172 -0
  74. package/dist/pluginRecoveryCli.js.map +1 -0
  75. package/dist/server/activeAgentProfileProvider.js +25 -0
  76. package/dist/server/activeAgentProfileProvider.js.map +1 -0
  77. package/dist/server/activity/workspaceActivityService.js +106 -0
  78. package/dist/server/activity/workspaceActivityService.js.map +1 -0
  79. package/dist/server/app.js +218 -0
  80. package/dist/server/app.js.map +1 -0
  81. package/dist/server/browserMessageProjection.js +54 -0
  82. package/dist/server/browserMessageProjection.js.map +1 -0
  83. package/dist/server/configRoutes.js +293 -0
  84. package/dist/server/configRoutes.js.map +1 -0
  85. package/dist/server/diagnostics/nodePtyNativeModule.js +36 -0
  86. package/dist/server/diagnostics/nodePtyNativeModule.js.map +1 -0
  87. package/dist/server/diagnostics/nodePtySpawnHelper.js +135 -0
  88. package/dist/server/diagnostics/nodePtySpawnHelper.js.map +1 -0
  89. package/dist/server/git/gitEnv.js +15 -0
  90. package/dist/server/git/gitEnv.js.map +1 -0
  91. package/dist/server/goals/goalArchive.js +184 -0
  92. package/dist/server/goals/goalArchive.js.map +1 -0
  93. package/dist/server/goals/goalFile.js +200 -0
  94. package/dist/server/goals/goalFile.js.map +1 -0
  95. package/dist/server/goals/goalStore.js +65 -0
  96. package/dist/server/goals/goalStore.js.map +1 -0
  97. package/dist/server/index.js +7 -0
  98. package/dist/server/index.js.map +1 -0
  99. package/dist/server/machines/machineClient.js +191 -0
  100. package/dist/server/machines/machineClient.js.map +1 -0
  101. package/dist/server/machines/machinePluginProxyRoutes.js +247 -0
  102. package/dist/server/machines/machinePluginProxyRoutes.js.map +1 -0
  103. package/dist/server/machines/machineProxyRoutes.js +318 -0
  104. package/dist/server/machines/machineProxyRoutes.js.map +1 -0
  105. package/dist/server/machines/machineRoutes.js +56 -0
  106. package/dist/server/machines/machineRoutes.js.map +1 -0
  107. package/dist/server/machines/machineService.js +274 -0
  108. package/dist/server/machines/machineService.js.map +1 -0
  109. package/dist/server/machines/machineStore.js +143 -0
  110. package/dist/server/machines/machineStore.js.map +1 -0
  111. package/dist/server/piPackageRoutes.js +91 -0
  112. package/dist/server/piPackageRoutes.js.map +1 -0
  113. package/dist/server/piPackageService.js +101 -0
  114. package/dist/server/piPackageService.js.map +1 -0
  115. package/dist/server/piWebPluginCatalog.js +584 -0
  116. package/dist/server/piWebPluginCatalog.js.map +1 -0
  117. package/dist/server/piWebPluginLifecycle.js +162 -0
  118. package/dist/server/piWebPluginLifecycle.js.map +1 -0
  119. package/dist/server/piWebPluginService.js +224 -0
  120. package/dist/server/piWebPluginService.js.map +1 -0
  121. package/dist/server/piWebReleaseLookupCache.js +37 -0
  122. package/dist/server/piWebReleaseLookupCache.js.map +1 -0
  123. package/dist/server/piWebStatus.js +624 -0
  124. package/dist/server/piWebStatus.js.map +1 -0
  125. package/dist/server/piWebStatusCache.js +45 -0
  126. package/dist/server/piWebStatusCache.js.map +1 -0
  127. package/dist/server/plugins/pluginBackendProxyRoutes.js +69 -0
  128. package/dist/server/plugins/pluginBackendProxyRoutes.js.map +1 -0
  129. package/dist/server/plugins/serverPluginExec.js +184 -0
  130. package/dist/server/plugins/serverPluginExec.js.map +1 -0
  131. package/dist/server/plugins/serverPluginRuntime.js +480 -0
  132. package/dist/server/plugins/serverPluginRuntime.js.map +1 -0
  133. package/dist/server/projectTrustRoutes.js +80 -0
  134. package/dist/server/projectTrustRoutes.js.map +1 -0
  135. package/dist/server/projects/directorySuggestions.js +207 -0
  136. package/dist/server/projects/directorySuggestions.js.map +1 -0
  137. package/dist/server/projects/projectService.js +33 -0
  138. package/dist/server/projects/projectService.js.map +1 -0
  139. package/dist/server/realtime/sessionEventHub.js +93 -0
  140. package/dist/server/realtime/sessionEventHub.js.map +1 -0
  141. package/dist/server/requestCancellation.js +32 -0
  142. package/dist/server/requestCancellation.js.map +1 -0
  143. package/dist/server/sessiond/agentHttpDispatcher.js +108 -0
  144. package/dist/server/sessiond/agentHttpDispatcher.js.map +1 -0
  145. package/dist/server/sessiond/agentProcessEnvironment.js +61 -0
  146. package/dist/server/sessiond/agentProcessEnvironment.js.map +1 -0
  147. package/dist/server/sessiond/pluginBackendRoutes.js +64 -0
  148. package/dist/server/sessiond/pluginBackendRoutes.js.map +1 -0
  149. package/dist/server/sessiond/sessionDaemonShutdown.js +31 -0
  150. package/dist/server/sessiond/sessionDaemonShutdown.js.map +1 -0
  151. package/dist/server/sessiond/sessionProxyRoutes.js +61 -0
  152. package/dist/server/sessiond/sessionProxyRoutes.js.map +1 -0
  153. package/dist/server/sessiond/sessionServiceDependencies.js +34 -0
  154. package/dist/server/sessiond/sessionServiceDependencies.js.map +1 -0
  155. package/dist/server/sessiond/sessiondStateOwnership.js +235 -0
  156. package/dist/server/sessiond/sessiondStateOwnership.js.map +1 -0
  157. package/dist/server/sessiond/workspaceCatalogRoutes.js +31 -0
  158. package/dist/server/sessiond/workspaceCatalogRoutes.js.map +1 -0
  159. package/dist/server/sessiond/workspaceRemovalRoutes.js +41 -0
  160. package/dist/server/sessiond/workspaceRemovalRoutes.js.map +1 -0
  161. package/dist/server/sessiond.js +387 -0
  162. package/dist/server/sessiond.js.map +1 -0
  163. package/dist/server/sessions/askUserTool.js +102 -0
  164. package/dist/server/sessions/askUserTool.js.map +1 -0
  165. package/dist/server/sessions/attachmentService.js +119 -0
  166. package/dist/server/sessions/attachmentService.js.map +1 -0
  167. package/dist/server/sessions/authProviderOptions.js +50 -0
  168. package/dist/server/sessions/authProviderOptions.js.map +1 -0
  169. package/dist/server/sessions/authRoutes.js +59 -0
  170. package/dist/server/sessions/authRoutes.js.map +1 -0
  171. package/dist/server/sessions/authService.js +122 -0
  172. package/dist/server/sessions/authService.js.map +1 -0
  173. package/dist/server/sessions/builtinCommands.js +27 -0
  174. package/dist/server/sessions/builtinCommands.js.map +1 -0
  175. package/dist/server/sessions/dockerEnvironmentFacts.js +254 -0
  176. package/dist/server/sessions/dockerEnvironmentFacts.js.map +1 -0
  177. package/dist/server/sessions/editPreview.js +196 -0
  178. package/dist/server/sessions/editPreview.js.map +1 -0
  179. package/dist/server/sessions/extensionDialogWaiters.js +76 -0
  180. package/dist/server/sessions/extensionDialogWaiters.js.map +1 -0
  181. package/dist/server/sessions/globalProviderPolicy.js +167 -0
  182. package/dist/server/sessions/globalProviderPolicy.js.map +1 -0
  183. package/dist/server/sessions/interruptedRunStore.js +147 -0
  184. package/dist/server/sessions/interruptedRunStore.js.map +1 -0
  185. package/dist/server/sessions/messagePaging.js +43 -0
  186. package/dist/server/sessions/messagePaging.js.map +1 -0
  187. package/dist/server/sessions/modelCatalogRefresher.js +193 -0
  188. package/dist/server/sessions/modelCatalogRefresher.js.map +1 -0
  189. package/dist/server/sessions/oauthLoginFlowService.js +346 -0
  190. package/dist/server/sessions/oauthLoginFlowService.js.map +1 -0
  191. package/dist/server/sessions/pendingAskStore.js +275 -0
  192. package/dist/server/sessions/pendingAskStore.js.map +1 -0
  193. package/dist/server/sessions/pendingExtensionDialogStore.js +196 -0
  194. package/dist/server/sessions/pendingExtensionDialogStore.js.map +1 -0
  195. package/dist/server/sessions/piSessionManagerGateway.js +246 -0
  196. package/dist/server/sessions/piSessionManagerGateway.js.map +1 -0
  197. package/dist/server/sessions/piSessionService.js +4059 -0
  198. package/dist/server/sessions/piSessionService.js.map +1 -0
  199. package/dist/server/sessions/plainTextTheme.js +112 -0
  200. package/dist/server/sessions/plainTextTheme.js.map +1 -0
  201. package/dist/server/sessions/sessionArchiveStore.js +273 -0
  202. package/dist/server/sessions/sessionArchiveStore.js.map +1 -0
  203. package/dist/server/sessions/sessionArchiveTree.js +35 -0
  204. package/dist/server/sessions/sessionArchiveTree.js.map +1 -0
  205. package/dist/server/sessions/sessionCleanup.js +157 -0
  206. package/dist/server/sessions/sessionCleanup.js.map +1 -0
  207. package/dist/server/sessions/sessionCommandService.js +336 -0
  208. package/dist/server/sessions/sessionCommandService.js.map +1 -0
  209. package/dist/server/sessions/sessionEnvironmentFacts.js +48 -0
  210. package/dist/server/sessions/sessionEnvironmentFacts.js.map +1 -0
  211. package/dist/server/sessions/sessionFileFormat.js +27 -0
  212. package/dist/server/sessions/sessionFileFormat.js.map +1 -0
  213. package/dist/server/sessions/sessionFileHeader.js +104 -0
  214. package/dist/server/sessions/sessionFileHeader.js.map +1 -0
  215. package/dist/server/sessions/sessionModelScope.js +141 -0
  216. package/dist/server/sessions/sessionModelScope.js.map +1 -0
  217. package/dist/server/sessions/sessionNameGenerator.js +90 -0
  218. package/dist/server/sessions/sessionNameGenerator.js.map +1 -0
  219. package/dist/server/sessions/sessionNotificationStore.js +484 -0
  220. package/dist/server/sessions/sessionNotificationStore.js.map +1 -0
  221. package/dist/server/sessions/sessionRoutes.js +744 -0
  222. package/dist/server/sessions/sessionRoutes.js.map +1 -0
  223. package/dist/server/sessions/sessionRuntimeStore.js +2 -0
  224. package/dist/server/sessions/sessionRuntimeStore.js.map +1 -0
  225. package/dist/server/sessions/sessionService.js +2 -0
  226. package/dist/server/sessions/sessionService.js.map +1 -0
  227. package/dist/server/sessions/sessionSummaryScanner.js +491 -0
  228. package/dist/server/sessions/sessionSummaryScanner.js.map +1 -0
  229. package/dist/server/sessions/sessionTreeProjection.js +250 -0
  230. package/dist/server/sessions/sessionTreeProjection.js.map +1 -0
  231. package/dist/server/sessions/sessionUnreadStore.js +520 -0
  232. package/dist/server/sessions/sessionUnreadStore.js.map +1 -0
  233. package/dist/server/sessions/shutdownDrain.js +73 -0
  234. package/dist/server/sessions/shutdownDrain.js.map +1 -0
  235. package/dist/server/sessions/spawnSessionTool.js +48 -0
  236. package/dist/server/sessions/spawnSessionTool.js.map +1 -0
  237. package/dist/server/sessions/spawnSubsessionTool.js +216 -0
  238. package/dist/server/sessions/spawnSubsessionTool.js.map +1 -0
  239. package/dist/server/sessions/spawnTargetResolver.js +23 -0
  240. package/dist/server/sessions/spawnTargetResolver.js.map +1 -0
  241. package/dist/server/sessions/subsessionTranscript.js +235 -0
  242. package/dist/server/sessions/subsessionTranscript.js.map +1 -0
  243. package/dist/server/status/machineStatusRoutes.js +8 -0
  244. package/dist/server/status/machineStatusRoutes.js.map +1 -0
  245. package/dist/server/status/machineStatusService.js +181 -0
  246. package/dist/server/status/machineStatusService.js.map +1 -0
  247. package/dist/server/status/workspaceAttribution.js +87 -0
  248. package/dist/server/status/workspaceAttribution.js.map +1 -0
  249. package/dist/server/storage/projectStore.js +88 -0
  250. package/dist/server/storage/projectStore.js.map +1 -0
  251. package/dist/server/terminalProxyRoutes.js +141 -0
  252. package/dist/server/terminalProxyRoutes.js.map +1 -0
  253. package/dist/server/terminals/terminalRoutes.js +155 -0
  254. package/dist/server/terminals/terminalRoutes.js.map +1 -0
  255. package/dist/server/terminals/terminalService.js +305 -0
  256. package/dist/server/terminals/terminalService.js.map +1 -0
  257. package/dist/server/terminals/terminalSize.js +17 -0
  258. package/dist/server/terminals/terminalSize.js.map +1 -0
  259. package/dist/server/types.js +2 -0
  260. package/dist/server/types.js.map +1 -0
  261. package/dist/server/updates/fleetRoutes.js +111 -0
  262. package/dist/server/updates/fleetRoutes.js.map +1 -0
  263. package/dist/server/updates/restartRoutes.js +48 -0
  264. package/dist/server/updates/restartRoutes.js.map +1 -0
  265. package/dist/server/updates/selfUpdateRoutes.js +145 -0
  266. package/dist/server/updates/selfUpdateRoutes.js.map +1 -0
  267. package/dist/server/webSocketBridge.js +32 -0
  268. package/dist/server/webSocketBridge.js.map +1 -0
  269. package/dist/server/workingDirectory.js +44 -0
  270. package/dist/server/workingDirectory.js.map +1 -0
  271. package/dist/server/workspaceExplorerRoutes.js +147 -0
  272. package/dist/server/workspaceExplorerRoutes.js.map +1 -0
  273. package/dist/server/workspaces/effectivePathAccess.js +8 -0
  274. package/dist/server/workspaces/effectivePathAccess.js.map +1 -0
  275. package/dist/server/workspaces/fileContentService.js +190 -0
  276. package/dist/server/workspaces/fileContentService.js.map +1 -0
  277. package/dist/server/workspaces/filePreviewResponseHeaders.js +18 -0
  278. package/dist/server/workspaces/filePreviewResponseHeaders.js.map +1 -0
  279. package/dist/server/workspaces/filePreviewResponsePolicy.js +55 -0
  280. package/dist/server/workspaces/filePreviewResponsePolicy.js.map +1 -0
  281. package/dist/server/workspaces/filePreviewService.js +81 -0
  282. package/dist/server/workspaces/filePreviewService.js.map +1 -0
  283. package/dist/server/workspaces/fileSuggestions.js +520 -0
  284. package/dist/server/workspaces/fileSuggestions.js.map +1 -0
  285. package/dist/server/workspaces/fileTreeService.js +35 -0
  286. package/dist/server/workspaces/fileTreeService.js.map +1 -0
  287. package/dist/server/workspaces/pathAccessPolicy.js +90 -0
  288. package/dist/server/workspaces/pathAccessPolicy.js.map +1 -0
  289. package/dist/server/workspaces/pathSafety.js +45 -0
  290. package/dist/server/workspaces/pathSafety.js.map +1 -0
  291. package/dist/server/workspaces/projectPiWebConfig.js +61 -0
  292. package/dist/server/workspaces/projectPiWebConfig.js.map +1 -0
  293. package/dist/server/workspaces/projectWorkspaceCwds.js +17 -0
  294. package/dist/server/workspaces/projectWorkspaceCwds.js.map +1 -0
  295. package/dist/server/workspaces/sessionDaemonWorkspaceCatalog.js +402 -0
  296. package/dist/server/workspaces/sessionDaemonWorkspaceCatalog.js.map +1 -0
  297. package/dist/server/workspaces/workspaceCatalog.js +47 -0
  298. package/dist/server/workspaces/workspaceCatalog.js.map +1 -0
  299. package/dist/server/workspaces/workspaceContext.js +6 -0
  300. package/dist/server/workspaces/workspaceContext.js.map +1 -0
  301. package/dist/server/workspaces/workspaceDeletionRoutes.js +49 -0
  302. package/dist/server/workspaces/workspaceDeletionRoutes.js.map +1 -0
  303. package/dist/server/workspaces/workspaceProviderRegistry.js +651 -0
  304. package/dist/server/workspaces/workspaceProviderRegistry.js.map +1 -0
  305. package/dist/server/workspaces/workspaceRemovalService.js +256 -0
  306. package/dist/server/workspaces/workspaceRemovalService.js.map +1 -0
  307. package/dist/server/workspaces/workspaceRouteErrors.js +7 -0
  308. package/dist/server/workspaces/workspaceRouteErrors.js.map +1 -0
  309. package/dist/server/workspaces/worktreePreRemoveHook.js +39 -0
  310. package/dist/server/workspaces/worktreePreRemoveHook.js.map +1 -0
  311. package/dist/server-plugin-api.d.ts +140 -0
  312. package/dist/server-plugin-api.js +2 -0
  313. package/dist/server-plugin-api.js.map +1 -0
  314. package/dist/serverPluginRecovery.js +138 -0
  315. package/dist/serverPluginRecovery.js.map +1 -0
  316. package/dist/sessiond/activeAgentProfile.js +12 -0
  317. package/dist/sessiond/activeAgentProfile.js.map +1 -0
  318. package/dist/sessiond/config.js +20 -0
  319. package/dist/sessiond/config.js.map +1 -0
  320. package/dist/sessiond/sessionDaemonClient.js +105 -0
  321. package/dist/sessiond/sessionDaemonClient.js.map +1 -0
  322. package/dist/shared/activeAgentProfile.js +37 -0
  323. package/dist/shared/activeAgentProfile.js.map +1 -0
  324. package/dist/shared/activity.js +16 -0
  325. package/dist/shared/activity.js.map +1 -0
  326. package/dist/shared/apiTypes.js +41 -0
  327. package/dist/shared/apiTypes.js.map +1 -0
  328. package/dist/shared/capabilities.js +37 -0
  329. package/dist/shared/capabilities.js.map +1 -0
  330. package/dist/shared/federatedRoutes.js +127 -0
  331. package/dist/shared/federatedRoutes.js.map +1 -0
  332. package/dist/shared/machinePluginIds.js +43 -0
  333. package/dist/shared/machinePluginIds.js.map +1 -0
  334. package/dist/shared/machineStatus.js +94 -0
  335. package/dist/shared/machineStatus.js.map +1 -0
  336. package/dist/shared/piWebStatusParsing.js +141 -0
  337. package/dist/shared/piWebStatusParsing.js.map +1 -0
  338. package/dist/shared/pluginApiTypes.d.ts +150 -0
  339. package/dist/shared/pluginApiTypes.js +3 -0
  340. package/dist/shared/pluginApiTypes.js.map +1 -0
  341. package/dist/shared/pluginBackendProtocol.js +110 -0
  342. package/dist/shared/pluginBackendProtocol.js.map +1 -0
  343. package/dist/shared/pluginIds.js +10 -0
  344. package/dist/shared/pluginIds.js.map +1 -0
  345. package/dist/shared/pluginRecoveryCommands.js +14 -0
  346. package/dist/shared/pluginRecoveryCommands.js.map +1 -0
  347. package/dist/shared/promptAttachments.js +92 -0
  348. package/dist/shared/promptAttachments.js.map +1 -0
  349. package/dist/shared/selfUpdate.js +3 -0
  350. package/dist/shared/selfUpdate.js.map +1 -0
  351. package/dist/shared/thinkingLevels.js +31 -0
  352. package/dist/shared/thinkingLevels.js.map +1 -0
  353. package/dist/shared/workspaceDeletion.js +12 -0
  354. package/dist/shared/workspaceDeletion.js.map +1 -0
  355. package/dist/shared/workspaceFiles.js +42 -0
  356. package/dist/shared/workspaceFiles.js.map +1 -0
  357. package/dist/shared/workspaceRemovalProtocol.js +24 -0
  358. package/dist/shared/workspaceRemovalProtocol.js.map +1 -0
  359. package/docs/assets/favicon.svg +11 -0
  360. package/docs/assets/pi-web-banner.png +0 -0
  361. package/docs/assets/pi-web-desktop.png +0 -0
  362. package/docs/assets/pi-web-mobile.png +0 -0
  363. package/docs/assets/pi-web-tablet.png +0 -0
  364. package/docs/config.md +444 -0
  365. package/docs/plugins.md +1305 -0
  366. package/examples/workspace-provider-plugin/README.md +52 -0
  367. package/examples/workspace-provider-plugin/package.json +25 -0
  368. package/examples/workspace-provider-plugin/src/browser/index.ts +69 -0
  369. package/examples/workspace-provider-plugin/src/server.ts +64 -0
  370. package/examples/workspace-provider-plugin/tsconfig.json +21 -0
  371. package/extensions/README-pi-web-restart-migration.md +45 -0
  372. package/extensions/pi-web.ts +324 -0
  373. package/install.sh +5 -0
  374. package/package.json +173 -0
  375. package/plugin-api.d.ts +1 -0
  376. package/server-plugin-api.d.ts +1 -0
@@ -0,0 +1,222 @@
1
+ import type { TemplateResult } from "lit";
2
+ import type { DeleteWorkspaceFileResponse, FileContentResponse, FileTreeResponse, JsonValue, MachineKind, MoveWorkspaceFileOptions, MoveWorkspaceFileResponse, PiWebStatusResponse, TerminalCommandRunHandle, WorkspaceProviderMetadata, WorkspaceRemovalPresentation, WriteWorkspaceFileOptions, WriteWorkspaceFileResponse } from "./shared/pluginApiTypes.js";
3
+ export type { FileContentMediaType, FileContentResponse, FileTreeEntry, FileTreeResponse, JsonObject, JsonPrimitive, JsonValue, MachineKind, PiWebComponentStatus, PiWebDockerMode, PiWebInstallationInfo, PiWebInstallationKind, PiWebReleaseStatus, PiWebServiceComponent, PiWebStatusMessage, PiWebStatusResponse, PiWebStatusSeverity, PiWebVersionResponse, TerminalCommandRun, TerminalCommandRunHandle, TerminalCommandRunStatus, WorkspaceProviderCapabilities, WorkspaceProviderMetadata, WorkspaceRemovalPresentation, WriteWorkspaceFileOptions, WriteWorkspaceFileResponse, DeleteWorkspaceFileResponse, MoveWorkspaceFileOptions, MoveWorkspaceFileResponse, } from "./shared/pluginApiTypes.js";
4
+ export type PluginId = string;
5
+ export type LocalContributionId = string;
6
+ export type QualifiedContributionId = string;
7
+ export type HtmlTemplateTag = (strings: TemplateStringsArray, ...values: unknown[]) => TemplateResult;
8
+ export type SvgTemplateTag = (strings: TemplateStringsArray, ...values: unknown[]) => TemplateResult;
9
+ export interface PiWebPlugin {
10
+ apiVersion: 2;
11
+ name: string;
12
+ activate: (context: PluginActivationContext) => PluginActivationResult;
13
+ }
14
+ /** Host-owned frozen values supplied once during browser plugin activation. */
15
+ export interface PluginActivationContext {
16
+ readonly apiVersion: 2;
17
+ /** Stable package/source identity, including on federated machines. */
18
+ readonly pluginId: PluginId;
19
+ /** Host-unique identity for qualified contribution references in this runtime. */
20
+ readonly runtimePluginId: PluginId;
21
+ readonly html: HtmlTemplateTag;
22
+ readonly svg: SvgTemplateTag;
23
+ }
24
+ export interface PluginActivationResult {
25
+ contributions: PluginContributions;
26
+ }
27
+ export interface PluginContributions {
28
+ actions?: PluginAction[];
29
+ workspacePanels?: WorkspacePanelContribution[];
30
+ workspaceLabels?: WorkspaceLabelContribution[];
31
+ themes?: ThemeContribution[];
32
+ themePairs?: ThemePairContribution[];
33
+ }
34
+ export interface PluginMachine {
35
+ id: string;
36
+ name: string;
37
+ kind: MachineKind;
38
+ }
39
+ export interface PluginRuntimeState {
40
+ /** Identity of the currently selected machine. Undefined only on older hosts or before machines load. */
41
+ selectedMachine?: PluginMachine;
42
+ selectedWorkspace?: Workspace;
43
+ selectedSession?: unknown;
44
+ workspaceTool?: string;
45
+ mainView?: string;
46
+ piWebStatus?: PiWebStatusResponse;
47
+ }
48
+ export interface PluginPromptEditor {
49
+ /** Insert text at the current cursor position. Replaces any selection.
50
+ * If the editor is not focused, focuses it first.
51
+ * No-op if the editor is not mounted. */
52
+ insertText(text: string): void;
53
+ /** Get the current prompt text content. Returns "" if the editor is not mounted. */
54
+ getText(): string;
55
+ /** Get the current selection range, or null if no selection or editor not mounted. */
56
+ getSelection(): {
57
+ start: number;
58
+ end: number;
59
+ text: string;
60
+ } | null;
61
+ }
62
+ export interface PluginRuntimeContext {
63
+ state: PluginRuntimeState;
64
+ prompt: PluginPromptEditor;
65
+ openActionPalette: () => void;
66
+ focusPrompt: () => void;
67
+ addProject: () => void | Promise<void>;
68
+ configureAuth: () => void | Promise<void>;
69
+ logoutAuth: () => void | Promise<void>;
70
+ openThemePicker: () => void;
71
+ selectMainView: (view: string) => void;
72
+ selectWorkspaceTool: (tool: QualifiedContributionId) => void;
73
+ openTerminal: (options?: {
74
+ terminalId?: string | undefined;
75
+ }) => void;
76
+ refreshFiles: () => void | Promise<void>;
77
+ /** Invalidate plugin workspace-panel data for the selected workspace, optionally targeting one qualified panel id. */
78
+ refreshWorkspacePanels: (panelId?: QualifiedContributionId) => void | Promise<void>;
79
+ refreshAppData: () => void | Promise<void>;
80
+ /** Force a fresh PI WEB release check on the selected machine. Optional for compatibility with older hosts. */
81
+ checkForPiWebUpdates?: () => void | Promise<void>;
82
+ reloadPage: () => void;
83
+ startSession: () => void | Promise<void>;
84
+ archiveSession: () => void | Promise<void>;
85
+ stopActiveWork: () => void | Promise<void>;
86
+ }
87
+ export interface PluginAction {
88
+ id: LocalContributionId;
89
+ title: string;
90
+ description?: string;
91
+ shortcut?: string;
92
+ /** Former qualified action ids whose saved shortcut preference should still apply. */
93
+ shortcutAliases?: QualifiedContributionId[];
94
+ group?: string;
95
+ enabled?: (context: PluginRuntimeContext) => boolean;
96
+ /** Explain why a disabled action is visible but unavailable. */
97
+ disabledReason?: (context: PluginRuntimeContext) => string | undefined;
98
+ run: (context: PluginRuntimeContext) => void | Promise<void>;
99
+ }
100
+ /** Host-resolved workspace snapshot exposed to browser plugin callbacks. */
101
+ export interface Workspace {
102
+ readonly id: string;
103
+ readonly projectId: string;
104
+ readonly path: string;
105
+ readonly label: string;
106
+ readonly isMain: boolean;
107
+ readonly provider?: WorkspaceProviderMetadata;
108
+ readonly removal?: WorkspaceRemovalPresentation;
109
+ }
110
+ export interface WorkspaceFiles {
111
+ /** Read a file from the workspace. Works for local and federated machines. */
112
+ readFile(path: string): Promise<FileContentResponse>;
113
+ /** List the entries of a workspace directory. Pass "" for the workspace root.
114
+ * Works for local and federated machines. Rejects when the directory does not
115
+ * exist or cannot be read, matching readFile error behavior. */
116
+ listFiles(path: string): Promise<FileTreeResponse>;
117
+ /** Write content to a workspace file. Creates intermediate directories by default.
118
+ * Works for local and federated machines. Auto-refreshes the file explorer after success. */
119
+ writeFile(path: string, content: string | Uint8Array, options?: WriteWorkspaceFileOptions): Promise<WriteWorkspaceFileResponse>;
120
+ /** Delete a file from the workspace. Idempotent — returns { existed: false } if file doesn't exist.
121
+ * Deletes the entry itself (for symlinks, removes the symlink not the target). */
122
+ deleteFile(path: string): Promise<DeleteWorkspaceFileResponse>;
123
+ /** Move or rename a file within the workspace. Unix mv semantics.
124
+ * Default overwrite: false (safer than writeFile). Auto-refreshes the file explorer after success. */
125
+ moveFile(fromPath: string, toPath: string, options?: MoveWorkspaceFileOptions): Promise<MoveWorkspaceFileResponse>;
126
+ }
127
+ export type WorkspacePanelFiles = WorkspaceFiles;
128
+ /** JSON-only request path to the server module that currently owns this workspace. */
129
+ export interface WorkspaceBackend {
130
+ request(operation: string, input: JsonValue): Promise<JsonValue>;
131
+ }
132
+ export interface WorkspaceHost {
133
+ requestRender(): void;
134
+ }
135
+ export type WorkspacePanelHost = WorkspaceHost;
136
+ export interface WorkspaceContext {
137
+ machine: PluginMachine;
138
+ workspace: Workspace;
139
+ state?: PluginRuntimeState;
140
+ files: WorkspaceFiles;
141
+ /** Present only when this browser entry has a paired active server backend. */
142
+ backend?: WorkspaceBackend;
143
+ host: WorkspaceHost;
144
+ }
145
+ export interface WorkspaceTerminalCommandInput {
146
+ title: string;
147
+ command: string;
148
+ metadata?: Record<string, string>;
149
+ open?: boolean;
150
+ }
151
+ export interface WorkspacePanelTerminal {
152
+ open(options?: {
153
+ terminalId?: string | undefined;
154
+ }): void;
155
+ runCommand(input: WorkspaceTerminalCommandInput): Promise<TerminalCommandRunHandle>;
156
+ }
157
+ export interface WorkspacePanelContext extends WorkspaceContext {
158
+ prompt: PluginPromptEditor;
159
+ terminal: WorkspacePanelTerminal;
160
+ }
161
+ export type WorkspacePanelIcon = TemplateResult;
162
+ export interface WorkspacePanelContribution {
163
+ id: LocalContributionId;
164
+ title: string;
165
+ icon?: WorkspacePanelIcon;
166
+ order?: number;
167
+ /** Former URL tool/view values that should resolve to this panel. */
168
+ routeAliases?: string[];
169
+ visible?: (context: WorkspacePanelContext) => boolean;
170
+ badge?: (context: WorkspacePanelContext) => string | number | TemplateResult | undefined;
171
+ /** Called when the host invalidates workspace-panel data. */
172
+ onInvalidate?: (context: WorkspacePanelContext) => void | Promise<void>;
173
+ render: (context: WorkspacePanelContext) => TemplateResult;
174
+ }
175
+ export interface WorkspaceLabelContext extends WorkspaceContext {
176
+ machine: PluginMachine;
177
+ workspace: Workspace;
178
+ state?: PluginRuntimeState;
179
+ files: WorkspaceFiles;
180
+ host: WorkspaceHost;
181
+ }
182
+ export type WorkspaceLabelItem = WorkspaceLabelTextItem | WorkspaceLabelLinkItem | WorkspaceLabelRenderItem;
183
+ export interface WorkspaceLabelTextItem {
184
+ type: "text";
185
+ text: string;
186
+ title?: string;
187
+ }
188
+ export interface WorkspaceLabelLinkItem {
189
+ type: "link";
190
+ text: string;
191
+ href: string;
192
+ title?: string;
193
+ target?: "_blank" | "_self";
194
+ }
195
+ export interface WorkspaceLabelRenderItem {
196
+ type: "render";
197
+ render: () => TemplateResult;
198
+ }
199
+ export interface WorkspaceLabelContribution {
200
+ id: LocalContributionId;
201
+ order?: number;
202
+ visible?: (context: WorkspaceLabelContext) => boolean;
203
+ items: (context: WorkspaceLabelContext) => WorkspaceLabelItem[];
204
+ }
205
+ export type ThemeColorScheme = "dark" | "light";
206
+ export type ThemeTokens = Record<string, string>;
207
+ export interface ThemeContribution {
208
+ id: LocalContributionId;
209
+ name: string;
210
+ description?: string;
211
+ order?: number;
212
+ colorScheme: ThemeColorScheme;
213
+ tokens: ThemeTokens;
214
+ }
215
+ export interface ThemePairContribution {
216
+ id: LocalContributionId;
217
+ name: string;
218
+ description?: string;
219
+ order?: number;
220
+ light: LocalContributionId;
221
+ dark: LocalContributionId;
222
+ }
@@ -0,0 +1,172 @@
1
+ import { isPiWebPluginId } from "./shared/pluginIds.js";
2
+ import { disableServerPlugin, loadServerPluginRecoveryConfig, setServerPluginSafeStart, } from "./serverPluginRecovery.js";
3
+ export function pluginRecoveryHelp() {
4
+ return `PI WEB server plugin recovery
5
+
6
+ Usage:
7
+ pi-web plugins disable <plugin-id> [--config <path>] [--restart]
8
+ pi-web plugins safe-start show [--config <path>]
9
+ pi-web plugins safe-start set <bundled-only|none> [--config <path>] [--restart]
10
+ pi-web plugins safe-start clear [--config <path>] [--restart]
11
+
12
+ Safe-start levels:
13
+ bundled-only Load bundled server plugins only.
14
+ none Load no server plugins; the kernel folder workspace remains available.
15
+
16
+ These commands edit config offline and never contact the session daemon or import plugins.
17
+ Changes take effect after a manual session-daemon restart unless --restart can restart it automatically.`;
18
+ }
19
+ export function runPluginRecoveryCli(args, dependencies) {
20
+ const command = parsePluginRecoveryCommand(args);
21
+ const writeLine = dependencies.writeLine ?? ((line) => { console.log(line); });
22
+ if (command.kind === "help") {
23
+ for (const line of pluginRecoveryHelp().split("\n"))
24
+ writeLine(line);
25
+ return;
26
+ }
27
+ const configOptions = recoveryConfigOptions(command.configPath, dependencies);
28
+ if (command.kind === "safe-start-show") {
29
+ const recovery = loadServerPluginRecoveryConfig(configOptions);
30
+ writeLine(`Server plugin safe start: ${recovery.safeStart ?? "off"}`);
31
+ reportRecoveryDiagnostic(recovery.safeStartDiagnostic, writeLine);
32
+ writeLine(`Config: ${recovery.path}${recovery.exists ? "" : " (not created)"}`);
33
+ return;
34
+ }
35
+ if (command.kind === "disable") {
36
+ const recovery = disableServerPlugin(command.pluginId, configOptions);
37
+ writeLine(`Disabled server plugin ${JSON.stringify(command.pluginId)} in ${recovery.path}.`);
38
+ reportRecoveryDiagnostic(recovery.safeStartDiagnostic, writeLine);
39
+ reportRestart(command.restart, restartPlanFor(recovery.path, command.configPath, dependencies), writeLine);
40
+ return;
41
+ }
42
+ if (command.kind === "safe-start-set") {
43
+ const recovery = setServerPluginSafeStart(command.safeStart, configOptions);
44
+ writeLine(`Set server plugin safe start to ${command.safeStart} in ${recovery.path}.`);
45
+ reportRecoveryDiagnostic(recovery.safeStartDiagnostic, writeLine);
46
+ reportRestart(command.restart, restartPlanFor(recovery.path, command.configPath, dependencies), writeLine);
47
+ return;
48
+ }
49
+ const recovery = setServerPluginSafeStart(undefined, configOptions);
50
+ writeLine(`Cleared server plugin safe start in ${recovery.path}.`);
51
+ reportRecoveryDiagnostic(recovery.safeStartDiagnostic, writeLine);
52
+ reportRestart(command.restart, restartPlanFor(recovery.path, command.configPath, dependencies), writeLine);
53
+ }
54
+ function parsePluginRecoveryCommand(args) {
55
+ const parsed = parseOptions(args);
56
+ if (parsed.help)
57
+ return { kind: "help" };
58
+ const [command, ...rest] = parsed.positional;
59
+ if (command === undefined || command === "help")
60
+ return requireNoMutationOptions(parsed, { kind: "help" });
61
+ if (command === "disable") {
62
+ const [pluginId, ...extra] = rest;
63
+ if (pluginId === undefined || extra.length > 0)
64
+ throw new Error("Usage: pi-web plugins disable <plugin-id> [--config <path>] [--restart]");
65
+ if (!isPiWebPluginId(pluginId))
66
+ throw new Error(`Invalid PI WEB plugin id: ${pluginId}`);
67
+ return withConfigPath({ kind: "disable", pluginId, restart: parsed.restart }, parsed.configPath);
68
+ }
69
+ if (command !== "safe-start")
70
+ throw new Error(`Unknown plugins command: ${command}`);
71
+ const [action, value, ...extra] = rest;
72
+ if (action === "show" && value === undefined && extra.length === 0) {
73
+ if (parsed.restart)
74
+ throw new Error("--restart is not valid with safe-start show");
75
+ return withConfigPath({ kind: "safe-start-show" }, parsed.configPath);
76
+ }
77
+ if (action === "clear" && value === undefined && extra.length === 0) {
78
+ return withConfigPath({ kind: "safe-start-clear", restart: parsed.restart }, parsed.configPath);
79
+ }
80
+ if (action === "set" && extra.length === 0) {
81
+ if (value !== "bundled-only" && value !== "none") {
82
+ throw new Error("Safe-start level must be bundled-only or none");
83
+ }
84
+ return withConfigPath({ kind: "safe-start-set", safeStart: value, restart: parsed.restart }, parsed.configPath);
85
+ }
86
+ throw new Error("Usage: pi-web plugins safe-start show|clear|set <bundled-only|none> [--config <path>] [--restart]");
87
+ }
88
+ function parseOptions(args) {
89
+ const positional = [];
90
+ let configPath;
91
+ let restart = false;
92
+ let help = false;
93
+ for (let index = 0; index < args.length; index += 1) {
94
+ const arg = args[index];
95
+ if (arg === undefined)
96
+ continue;
97
+ if (arg === "--help" || arg === "-h") {
98
+ help = true;
99
+ }
100
+ else if (arg === "--restart") {
101
+ if (restart)
102
+ throw new Error("Duplicate plugins option: --restart");
103
+ restart = true;
104
+ }
105
+ else if (arg === "--config") {
106
+ if (configPath !== undefined)
107
+ throw new Error("Duplicate plugins option: --config");
108
+ const value = args[index + 1];
109
+ if (value === undefined || value === "" || value.startsWith("-"))
110
+ throw new Error("--config requires a path");
111
+ configPath = value;
112
+ index += 1;
113
+ }
114
+ else if (arg.startsWith("--config=")) {
115
+ if (configPath !== undefined)
116
+ throw new Error("Duplicate plugins option: --config");
117
+ const value = arg.slice("--config=".length);
118
+ if (value === "")
119
+ throw new Error("--config requires a path");
120
+ configPath = value;
121
+ }
122
+ else if (arg.startsWith("-")) {
123
+ throw new Error(`Unknown plugins option: ${arg}`);
124
+ }
125
+ else {
126
+ positional.push(arg);
127
+ }
128
+ }
129
+ return {
130
+ positional,
131
+ ...(configPath === undefined ? {} : { configPath }),
132
+ restart,
133
+ help,
134
+ };
135
+ }
136
+ function recoveryConfigOptions(configPath, dependencies) {
137
+ return {
138
+ ...(dependencies.env === undefined ? {} : { env: dependencies.env }),
139
+ ...(dependencies.cwd === undefined ? {} : { cwd: dependencies.cwd }),
140
+ ...(configPath === undefined ? {} : { configPath }),
141
+ };
142
+ }
143
+ function withConfigPath(value, configPath) {
144
+ return { ...value, ...(configPath === undefined ? {} : { configPath }) };
145
+ }
146
+ function requireNoMutationOptions(parsed, command) {
147
+ if (parsed.configPath !== undefined || parsed.restart)
148
+ throw new Error("Plugin recovery help does not accept --config or --restart");
149
+ return command;
150
+ }
151
+ function restartPlanFor(configPath, explicitConfigPath, dependencies) {
152
+ return dependencies.restartPlan({ configPath, explicitConfigPath: explicitConfigPath !== undefined });
153
+ }
154
+ function reportRecoveryDiagnostic(diagnostic, writeLine) {
155
+ if (diagnostic !== undefined)
156
+ writeLine(`Warning: ${diagnostic}`);
157
+ }
158
+ function reportRestart(performRestart, plan, writeLine) {
159
+ if (performRestart && plan.kind === "automatic" && plan.perform !== undefined) {
160
+ plan.perform();
161
+ writeLine("Session daemon restart requested. Active sessions owned by that daemon may stop.");
162
+ return;
163
+ }
164
+ if (performRestart && plan.kind === "manual") {
165
+ writeLine("The session daemon cannot be restarted automatically for this installation.");
166
+ }
167
+ writeLine("Restart the session daemon to apply this change. Active sessions owned by that daemon may stop.");
168
+ writeLine(plan.guidance);
169
+ if (plan.command !== undefined)
170
+ writeLine(` ${plan.command}`);
171
+ }
172
+ //# sourceMappingURL=pluginRecoveryCli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pluginRecoveryCli.js","sourceRoot":"","sources":["../src/pluginRecoveryCli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { getSessionDaemonActiveAgentProfile, } from "../sessiond/sessionDaemonClient.js";
2
+ /** Reads the daemon-owned profile on every call so a new sessiond epoch is observed. */
3
+ export class SessionDaemonActiveAgentProfileProvider {
4
+ constructor(daemon) {
5
+ this.daemon = daemon;
6
+ }
7
+ getActiveAgentProfile() {
8
+ return getSessionDaemonActiveAgentProfile(this.daemon);
9
+ }
10
+ }
11
+ export class ActiveAgentProfileAccessError extends Error {
12
+ constructor(result) {
13
+ const label = result.status === "unavailable" ? "unavailable" : "invalid";
14
+ super(`Active agent profile is ${label}: ${result.error}`);
15
+ this.name = "ActiveAgentProfileAccessError";
16
+ this.profileStatus = result.status;
17
+ }
18
+ }
19
+ export async function requireActiveAgentProfile(provider) {
20
+ const result = await provider.getActiveAgentProfile();
21
+ if (result.status !== "available")
22
+ throw new ActiveAgentProfileAccessError(result);
23
+ return result.profile;
24
+ }
25
+ //# sourceMappingURL=activeAgentProfileProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activeAgentProfileProvider.js","sourceRoot":"","sources":["../../src/server/activeAgentProfileProvider.ts"],"names":[],"mappings":"AACA,OAAO,EACL,kCAAkC,GAGnC,MAAM,oCAAoC,CAAC;AAM5C,wFAAwF;AACxF,MAAM,OAAO,uCAAuC;IAClD,YAA6B,MAAkC;QAAlC,WAAM,GAAN,MAAM,CAA4B;IAAG,CAAC;IAEnE,qBAAqB;QACnB,OAAO,kCAAkC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACzD,CAAC;CACF;AAED,MAAM,OAAO,6BAA8B,SAAQ,KAAK;IAGtD,YAAY,MAAyE;QACnF,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,KAAK,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1E,KAAK,CAAC,2BAA2B,KAAK,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAC3D,IAAI,CAAC,IAAI,GAAG,+BAA+B,CAAC;QAC5C,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC;IACrC,CAAC;CACF;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,QAAoC;IAClF,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,qBAAqB,EAAE,CAAC;IACtD,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW;QAAE,MAAM,IAAI,6BAA6B,CAAC,MAAM,CAAC,CAAC;IACnF,OAAO,MAAM,CAAC,OAAO,CAAC;AACxB,CAAC"}
@@ -0,0 +1,106 @@
1
+ import { isSessionActive } from "../../shared/activity.js";
2
+ /**
3
+ * In-memory record of which working directories currently have session or
4
+ * terminal activity.
5
+ *
6
+ * It publishes nothing itself: attribution and roll-up belong to the machine
7
+ * status projection, which this service notifies whenever the record changes.
8
+ */
9
+ export class WorkspaceActivityService {
10
+ constructor(onChanged) {
11
+ this.onChanged = onChanged;
12
+ this.sessions = new Map();
13
+ this.terminals = new Map();
14
+ }
15
+ applySessionStatus(cwd, status) {
16
+ const previousCwd = this.sessions.get(status.sessionId)?.cwd;
17
+ const record = this.sessions.get(status.sessionId) ?? { cwd };
18
+ record.cwd = cwd;
19
+ record.status = status;
20
+ if (!isSessionActive(status) && record.activity?.phase === "active")
21
+ delete record.activity;
22
+ this.sessions.set(status.sessionId, record);
23
+ this.pruneIdleSession(status.sessionId);
24
+ this.notifyChangedCwds(previousCwd, cwd);
25
+ }
26
+ applySessionActivity(cwd, activity) {
27
+ const previousCwd = this.sessions.get(activity.sessionId)?.cwd;
28
+ const record = this.sessions.get(activity.sessionId) ?? { cwd };
29
+ record.cwd = cwd;
30
+ record.activity = activity;
31
+ this.sessions.set(activity.sessionId, record);
32
+ this.pruneIdleSession(activity.sessionId);
33
+ this.notifyChangedCwds(previousCwd, cwd);
34
+ }
35
+ removeSession(sessionId, cwd) {
36
+ const previousCwd = this.sessions.get(sessionId)?.cwd ?? cwd;
37
+ this.sessions.delete(sessionId);
38
+ this.notifyCwd(previousCwd);
39
+ }
40
+ reconcileSessionActivity(cwd, sessionIds) {
41
+ const knownSessionIds = new Set(sessionIds);
42
+ let changed = false;
43
+ for (const [sessionId, record] of this.sessions.entries()) {
44
+ if (record.cwd !== cwd || knownSessionIds.has(sessionId))
45
+ continue;
46
+ this.sessions.delete(sessionId);
47
+ changed = true;
48
+ }
49
+ if (changed)
50
+ this.notifyCwd(cwd);
51
+ }
52
+ updateTerminal(terminal) {
53
+ const previousCwd = this.terminals.get(terminal.id)?.cwd;
54
+ if (terminal.exited)
55
+ this.terminals.delete(terminal.id);
56
+ else
57
+ this.terminals.set(terminal.id, { cwd: terminal.cwd });
58
+ this.notifyChangedCwds(previousCwd, terminal.cwd);
59
+ }
60
+ removeTerminal(terminalId, cwd) {
61
+ const previousCwd = this.terminals.get(terminalId)?.cwd ?? cwd;
62
+ this.terminals.delete(terminalId);
63
+ this.notifyCwd(previousCwd);
64
+ }
65
+ snapshot() {
66
+ return { workspaces: this.activeCwds().map((cwd) => this.summaryForCwd(cwd)) };
67
+ }
68
+ pruneIdleSession(sessionId) {
69
+ const record = this.sessions.get(sessionId);
70
+ if (record !== undefined && !isSessionActive(record.status, record.activity))
71
+ this.sessions.delete(sessionId);
72
+ }
73
+ notifyChangedCwds(previousCwd, cwd) {
74
+ this.notifyCwd(previousCwd);
75
+ if (previousCwd !== cwd)
76
+ this.notifyCwd(cwd);
77
+ }
78
+ /**
79
+ * The listener recomputes the whole projection, so it is told that something
80
+ * changed rather than which cwd changed. Repeated notifications are harmless:
81
+ * the projection publishes only when the computed tree actually differs.
82
+ */
83
+ notifyCwd(cwd) {
84
+ if (cwd === undefined || cwd === "")
85
+ return;
86
+ this.onChanged?.();
87
+ }
88
+ activeCwds() {
89
+ const cwds = new Set();
90
+ for (const record of this.sessions.values()) {
91
+ if (isSessionActive(record.status, record.activity))
92
+ cwds.add(record.cwd);
93
+ }
94
+ for (const record of this.terminals.values())
95
+ cwds.add(record.cwd);
96
+ return [...cwds].sort((a, b) => a.localeCompare(b));
97
+ }
98
+ summaryForCwd(cwd) {
99
+ return {
100
+ cwd,
101
+ hasSessionActivity: [...this.sessions.values()].some((record) => record.cwd === cwd && isSessionActive(record.status, record.activity)),
102
+ hasTerminalActivity: [...this.terminals.values()].some((terminal) => terminal.cwd === cwd),
103
+ };
104
+ }
105
+ }
106
+ //# sourceMappingURL=workspaceActivityService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspaceActivityService.js","sourceRoot":"","sources":["../../../src/server/activity/workspaceActivityService.ts"],"names":[],"mappings":"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"}