@chainingintention/pi-web-cn 2.0.0 → 2.202610.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 (584) hide show
  1. package/README.md +61 -106
  2. package/dist/.plugins-ready +1 -0
  3. package/dist/cli.js +331 -174
  4. package/dist/cli.js.map +1 -1
  5. package/dist/client/apple-touch-icon-dev.png +0 -0
  6. package/dist/client/assets/PiWebApp-vueV4eKR.js +4938 -0
  7. package/dist/client/assets/classic-CyM97Akm.css +54 -0
  8. package/dist/client/assets/external-B9K8duyP.js +2 -0
  9. package/dist/client/assets/graphite-DquaqFXU.css +54 -0
  10. package/dist/client/assets/index-C8f0d0CR.js +2 -0
  11. package/dist/client/assets/paper-CB1oLuRr.css +54 -0
  12. package/dist/client/assets/pi-web-dark-D_KtbM95.css +54 -0
  13. package/dist/client/assets/pi-web-light-DSNLMIBI.css +54 -0
  14. package/dist/client/assets/vendor-editor-core-BfnHL1Dg.js +10 -0
  15. package/dist/client/assets/vendor-editor-languages-bNquDJP0.js +28 -0
  16. package/dist/client/favicon-dev.svg +8 -0
  17. package/dist/client/index.html +7 -51
  18. package/dist/client/manifest.webmanifest +2 -1
  19. package/dist/client/pwa-icon-dev-192.png +0 -0
  20. package/dist/client/pwa-icon-dev-512.png +0 -0
  21. package/dist/config.js +55 -8
  22. package/dist/config.js.map +1 -1
  23. package/dist/docker/piWebDockerCommandPlan.js +13 -4
  24. package/dist/docker/piWebDockerCommandPlan.js.map +1 -1
  25. package/dist/environment.js +4 -0
  26. package/dist/environment.js.map +1 -0
  27. package/dist/localization.js +24 -0
  28. package/dist/localization.js.map +1 -0
  29. package/dist/nativeServices/installedServiceDefinitions.js +617 -0
  30. package/dist/nativeServices/installedServiceDefinitions.js.map +1 -0
  31. package/dist/nativeServices/serviceAction.js +78 -20
  32. package/dist/nativeServices/serviceAction.js.map +1 -1
  33. package/dist/nativeServices/serviceDoctor.js +418 -114
  34. package/dist/nativeServices/serviceDoctor.js.map +1 -1
  35. package/dist/nativeServices/servicePlan.js +2 -2
  36. package/dist/nativeServices/servicePlan.js.map +1 -1
  37. package/dist/pi-packages/captains-log/README.md +11 -0
  38. package/dist/pi-packages/captains-log/dist/browser/channelProtocol.js +29 -0
  39. package/dist/pi-packages/captains-log/dist/browser/index.js +143 -0
  40. package/dist/pi-packages/captains-log/dist/browser/markdown.js +68 -0
  41. package/dist/pi-packages/captains-log/dist/browser/panel.js +148 -0
  42. package/dist/pi-packages/captains-log/dist/browser/protocol.js +26 -0
  43. package/dist/pi-packages/captains-log/dist/companion.js +126 -0
  44. package/dist/pi-packages/captains-log/dist/roundtrip.js +62 -0
  45. package/dist/pi-packages/captains-log/dist/server.js +210 -0
  46. package/dist/pi-packages/captains-log/dist/store.js +75 -0
  47. package/dist/pi-packages/captains-log/docs/usage.md +29 -0
  48. package/dist/pi-packages/captains-log/i18n.js +7 -0
  49. package/dist/pi-packages/captains-log/package.json +35 -0
  50. package/dist/pi-packages/captains-log/tsconfig.json +21 -0
  51. package/dist/pi-packages/captains-log/vite.config.mjs +28 -0
  52. package/dist/pi-packages/relays/extensions/index.js +61 -0
  53. package/dist/pi-packages/relays/i18n.js +7 -0
  54. package/dist/{pi-web-plugins → pi-packages}/relays/markdownDocument.js +3 -2
  55. package/dist/pi-packages/relays/package.json +20 -0
  56. package/dist/pi-packages/relays/pi-web-plugin.js +96 -0
  57. package/dist/pi-packages/relays/prompts/relay-worktree.md +18 -0
  58. package/dist/pi-packages/relays/prompts/relay.md +18 -0
  59. package/dist/{pi-web-plugins → pi-packages}/relays/relayDiscovery.js +2 -2
  60. package/dist/pi-packages/relays/relayDispatch.js +67 -0
  61. package/dist/pi-packages/relays/relayIdentity.js +37 -0
  62. package/dist/{pi-web-plugins → pi-packages}/relays/relaysPanelElement.js +98 -59
  63. package/dist/pi-packages/relays/skills/relay/SKILL.md +50 -0
  64. package/dist/pi-packages/relays/skills/relay-runner/SKILL.md +74 -0
  65. package/dist/pi-packages/workflows/browser/pi-web-plugin.js +42 -0
  66. package/dist/pi-packages/workflows/browser/worktreeDialog.js +170 -0
  67. package/dist/pi-packages/workflows/package.json +23 -0
  68. package/dist/pi-packages/workflows/prompts/worktree.md +21 -0
  69. package/dist/pi-packages/workflows/server-plugin.js +586 -0
  70. package/dist/pi-packages/workflows/vite.config.mjs +17 -0
  71. package/dist/pi-web-plugins/code-highlight/browser/pi-web-plugin.js +22 -0
  72. package/dist/pi-web-plugins/code-highlight/package.json +13 -0
  73. package/dist/pi-web-plugins/files/browser/assets/files-icon-DZObYhxb.svg +3 -0
  74. package/dist/pi-web-plugins/files/browser/pi-web-plugin.js +466 -0
  75. package/dist/pi-web-plugins/files/package.json +15 -0
  76. package/dist/pi-web-plugins/git/browser/git-contract.js +22 -11
  77. package/dist/pi-web-plugins/git/browser/git-panel.js +228 -100
  78. package/dist/pi-web-plugins/git/browser/i18n.js +7 -0
  79. package/dist/pi-web-plugins/git/browser/pi-web-plugin.js +28 -4
  80. package/dist/pi-web-plugins/git/git-backend.js +61 -21
  81. package/dist/pi-web-plugins/git/gitStatusCache.js +48 -0
  82. package/dist/pi-web-plugins/git/i18n.js +7 -0
  83. package/dist/pi-web-plugins/git/package.json +1 -0
  84. package/dist/pi-web-plugins/git/server-plugin.js +45 -24
  85. package/dist/pi-web-plugins/git/workspace-discovery-notify.cjs +14 -0
  86. package/dist/pi-web-plugins/git/workspaceDiscoveryHooks.js +186 -0
  87. package/dist/pi-web-plugins/info/i18n.js +7 -0
  88. package/dist/pi-web-plugins/info/infoInternals.js +76 -65
  89. package/dist/pi-web-plugins/info/package.json +1 -1
  90. package/dist/pi-web-plugins/info/pi-web-plugin.js +40 -42
  91. package/dist/pi-web-plugins/mermaid/browser/mermaid-engine.js +4255 -0
  92. package/dist/pi-web-plugins/mermaid/browser/pi-web-plugin.js +11 -0
  93. package/dist/pi-web-plugins/mermaid/package.json +13 -0
  94. package/dist/pi-web-plugins/terminal/browser/pi-web-plugin.js +219 -0
  95. package/dist/pi-web-plugins/terminal/i18n.js +7 -0
  96. package/dist/pi-web-plugins/terminal/package.json +16 -0
  97. package/dist/pi-web-plugins/terminal/server-plugin.js +367 -0
  98. package/dist/pi-web-plugins/terminal/terminalService.js +436 -0
  99. package/dist/pi-web-plugins/updates/i18n.js +7 -0
  100. package/dist/pi-web-plugins/updates/package.json +1 -1
  101. package/dist/pi-web-plugins/updates/pi-web-plugin.js +143 -140
  102. package/dist/pi-web-plugins/updates/updatesLogic.js +24 -24
  103. package/dist/pi-web-plugins/workspace-tasks/config.js +12 -11
  104. package/dist/pi-web-plugins/workspace-tasks/i18n.js +7 -0
  105. package/dist/pi-web-plugins/workspace-tasks/package.json +1 -1
  106. package/dist/pi-web-plugins/workspace-tasks/pi-web-plugin.js +31 -9
  107. package/dist/pi-web-plugins/workspace-tasks/tasksPanelElement.js +54 -36
  108. package/dist/pi-web-plugins/workspace-tasks/workspaceTasksClient.js +12 -11
  109. package/dist/pi-web-plugins/zh-cn/auth.json +9 -0
  110. package/dist/pi-web-plugins/zh-cn/bundled.json +219 -0
  111. package/dist/pi-web-plugins/zh-cn/cli.json +230 -0
  112. package/dist/pi-web-plugins/zh-cn/client.json +225 -0
  113. package/dist/pi-web-plugins/zh-cn/components.json +1252 -0
  114. package/dist/pi-web-plugins/zh-cn/config-errors.json +188 -0
  115. package/dist/pi-web-plugins/zh-cn/files.json +50 -0
  116. package/dist/pi-web-plugins/zh-cn/machines.json +28 -0
  117. package/dist/pi-web-plugins/zh-cn/main.json +459 -0
  118. package/dist/pi-web-plugins/zh-cn/management-errors.json +23 -0
  119. package/dist/pi-web-plugins/zh-cn/manifest.webmanifest +25 -0
  120. package/dist/pi-web-plugins/zh-cn/metadata.json +3 -0
  121. package/dist/pi-web-plugins/zh-cn/package.json +10 -0
  122. package/dist/pi-web-plugins/zh-cn/pi-web-plugin.js +16 -0
  123. package/dist/pi-web-plugins/zh-cn/projects.json +6 -0
  124. package/dist/pi-web-plugins/zh-cn/provider-auth.json +18 -0
  125. package/dist/pi-web-plugins/zh-cn/routing.json +68 -0
  126. package/dist/pi-web-plugins/zh-cn/server-main.json +99 -0
  127. package/dist/pi-web-plugins/zh-cn/server.json +256 -0
  128. package/dist/piAi.js +4 -0
  129. package/dist/piAi.js.map +1 -0
  130. package/dist/piRuntime.js +150 -0
  131. package/dist/piRuntime.js.map +1 -0
  132. package/dist/piSdk.js +5 -0
  133. package/dist/piSdk.js.map +1 -0
  134. package/dist/piWebUpdate.js +508 -0
  135. package/dist/piWebUpdate.js.map +1 -0
  136. package/dist/piWebVersionReport.js +109 -41
  137. package/dist/piWebVersionReport.js.map +1 -1
  138. package/dist/plugin-api.d.ts +609 -29
  139. package/dist/plugin-api.js +1 -0
  140. package/dist/pluginRecoveryCli.js +27 -25
  141. package/dist/pluginRecoveryCli.js.map +1 -1
  142. package/dist/server/activity/workspaceActivityService.js +13 -6
  143. package/dist/server/activity/workspaceActivityService.js.map +1 -1
  144. package/dist/server/app.js +158 -89
  145. package/dist/server/app.js.map +1 -1
  146. package/dist/server/audit/managementAuditStore.js +6 -1
  147. package/dist/server/audit/managementAuditStore.js.map +1 -1
  148. package/dist/server/audit/normalToolAuditCli.js +45 -43
  149. package/dist/server/audit/normalToolAuditCli.js.map +1 -1
  150. package/dist/server/browserMessageProjection.js +39 -22
  151. package/dist/server/browserMessageProjection.js.map +1 -1
  152. package/dist/server/configRoutes.js +54 -33
  153. package/dist/server/configRoutes.js.map +1 -1
  154. package/dist/server/deploymentIdentity.js +67 -0
  155. package/dist/server/deploymentIdentity.js.map +1 -0
  156. package/dist/server/deploymentIdentityRoutes.js +22 -0
  157. package/dist/server/deploymentIdentityRoutes.js.map +1 -0
  158. package/dist/server/diagnostics/nodePtyNativeModule.js +7 -6
  159. package/dist/server/diagnostics/nodePtyNativeModule.js.map +1 -1
  160. package/dist/server/diagnostics/nodePtySpawnHelper.js +21 -20
  161. package/dist/server/diagnostics/nodePtySpawnHelper.js.map +1 -1
  162. package/dist/server/index.js +10 -1
  163. package/dist/server/index.js.map +1 -1
  164. package/dist/server/knownAutoInstallPiPackages.js +36 -0
  165. package/dist/server/knownAutoInstallPiPackages.js.map +1 -0
  166. package/dist/server/knownPiPackages.js +12 -0
  167. package/dist/server/knownPiPackages.js.map +1 -0
  168. package/dist/server/machines/machineClient.js +23 -19
  169. package/dist/server/machines/machineClient.js.map +1 -1
  170. package/dist/server/machines/machinePluginProxyRoutes.js +131 -31
  171. package/dist/server/machines/machinePluginProxyRoutes.js.map +1 -1
  172. package/dist/server/machines/machineProxyRoutes.js +138 -47
  173. package/dist/server/machines/machineProxyRoutes.js.map +1 -1
  174. package/dist/server/machines/machineRoutes.js +18 -13
  175. package/dist/server/machines/machineRoutes.js.map +1 -1
  176. package/dist/server/machines/machineService.js +40 -18
  177. package/dist/server/machines/machineService.js.map +1 -1
  178. package/dist/server/managementEmbed.js +149 -30
  179. package/dist/server/managementEmbed.js.map +1 -1
  180. package/dist/server/managementPrivileges.js +21 -0
  181. package/dist/server/managementPrivileges.js.map +1 -0
  182. package/dist/server/managementTerminalProxyRoutes.js +124 -0
  183. package/dist/server/managementTerminalProxyRoutes.js.map +1 -0
  184. package/dist/server/navigationPreferenceRoutes.js +59 -0
  185. package/dist/server/navigationPreferenceRoutes.js.map +1 -0
  186. package/dist/server/normalAuth.js +77 -53
  187. package/dist/server/normalAuth.js.map +1 -1
  188. package/dist/server/notices/serverNoticeRoutes.js +43 -0
  189. package/dist/server/notices/serverNoticeRoutes.js.map +1 -0
  190. package/dist/server/notices/serverNoticeService.js +26 -0
  191. package/dist/server/notices/serverNoticeService.js.map +1 -0
  192. package/dist/server/notices/serverNoticeStore.js +122 -0
  193. package/dist/server/notices/serverNoticeStore.js.map +1 -0
  194. package/dist/server/passwordVerifier.js +91 -0
  195. package/dist/server/passwordVerifier.js.map +1 -0
  196. package/dist/server/piPackageIdentity.js +25 -0
  197. package/dist/server/piPackageIdentity.js.map +1 -0
  198. package/dist/server/piPackageService.js +72 -9
  199. package/dist/server/piPackageService.js.map +1 -1
  200. package/dist/server/piWebPluginCatalog.js +212 -35
  201. package/dist/server/piWebPluginCatalog.js.map +1 -1
  202. package/dist/server/piWebPluginLifecycle.js +29 -3
  203. package/dist/server/piWebPluginLifecycle.js.map +1 -1
  204. package/dist/server/piWebPluginService.js +199 -292
  205. package/dist/server/piWebPluginService.js.map +1 -1
  206. package/dist/server/piWebStatus.js +57 -100
  207. package/dist/server/piWebStatus.js.map +1 -1
  208. package/dist/server/pluginCallbackDrain.js +35 -0
  209. package/dist/server/pluginCallbackDrain.js.map +1 -0
  210. package/dist/server/plugins/pluginBackendChannelProxyAdmission.js +84 -0
  211. package/dist/server/plugins/pluginBackendChannelProxyAdmission.js.map +1 -0
  212. package/dist/server/plugins/pluginBackendChannelProxyCoordinator.js +234 -0
  213. package/dist/server/plugins/pluginBackendChannelProxyCoordinator.js.map +1 -0
  214. package/dist/server/plugins/pluginBackendChannelProxyRoutes.js +61 -0
  215. package/dist/server/plugins/pluginBackendChannelProxyRoutes.js.map +1 -0
  216. package/dist/server/plugins/pluginBackendProxyRoutes.js +47 -57
  217. package/dist/server/plugins/pluginBackendProxyRoutes.js.map +1 -1
  218. package/dist/server/plugins/pluginBackendRegistry.js +804 -0
  219. package/dist/server/plugins/pluginBackendRegistry.js.map +1 -0
  220. package/dist/server/plugins/projectPluginSettings.js +95 -0
  221. package/dist/server/plugins/projectPluginSettings.js.map +1 -0
  222. package/dist/server/plugins/serverPluginCatalogCapability.js +106 -0
  223. package/dist/server/plugins/serverPluginCatalogCapability.js.map +1 -0
  224. package/dist/server/plugins/serverPluginPiSessionEventsCapability.js +34 -0
  225. package/dist/server/plugins/serverPluginPiSessionEventsCapability.js.map +1 -0
  226. package/dist/server/plugins/serverPluginPiSessionsCapability.js +185 -0
  227. package/dist/server/plugins/serverPluginPiSessionsCapability.js.map +1 -0
  228. package/dist/server/plugins/serverPluginRuntime.js +1088 -108
  229. package/dist/server/plugins/serverPluginRuntime.js.map +1 -1
  230. package/dist/server/plugins/serverPluginWorkspacesCapability.js +114 -0
  231. package/dist/server/plugins/serverPluginWorkspacesCapability.js.map +1 -0
  232. package/dist/server/projectTrustRoutes.js +86 -0
  233. package/dist/server/projectTrustRoutes.js.map +1 -0
  234. package/dist/server/projects/projectLifecycleService.js +94 -0
  235. package/dist/server/projects/projectLifecycleService.js.map +1 -0
  236. package/dist/server/projects/projectService.js +7 -4
  237. package/dist/server/projects/projectService.js.map +1 -1
  238. package/dist/server/realtime/sessionEventHub.js +58 -39
  239. package/dist/server/realtime/sessionEventHub.js.map +1 -1
  240. package/dist/server/realtime/sessionEventScope.js +4 -0
  241. package/dist/server/realtime/sessionEventScope.js.map +1 -1
  242. package/dist/server/requestCancellation.js +15 -1
  243. package/dist/server/requestCancellation.js.map +1 -1
  244. package/dist/server/sessiond/agentHttpDispatcher.js +108 -0
  245. package/dist/server/sessiond/agentHttpDispatcher.js.map +1 -0
  246. package/dist/server/sessiond/autoInstallPiPackages.js +63 -0
  247. package/dist/server/sessiond/autoInstallPiPackages.js.map +1 -0
  248. package/dist/server/sessiond/pluginBackendChannelRoutes.js +410 -0
  249. package/dist/server/sessiond/pluginBackendChannelRoutes.js.map +1 -0
  250. package/dist/server/sessiond/pluginBackendRoutes.js +64 -47
  251. package/dist/server/sessiond/pluginBackendRoutes.js.map +1 -1
  252. package/dist/server/sessiond/pluginCatalogRoutes.js +41 -0
  253. package/dist/server/sessiond/pluginCatalogRoutes.js.map +1 -0
  254. package/dist/server/sessiond/projectMutationRoutes.js +39 -0
  255. package/dist/server/sessiond/projectMutationRoutes.js.map +1 -0
  256. package/dist/server/sessiond/sessionDaemonShutdown.js +36 -0
  257. package/dist/server/sessiond/sessionDaemonShutdown.js.map +1 -0
  258. package/dist/server/sessiond/sessionDaemonStartup.js +30 -4
  259. package/dist/server/sessiond/sessionDaemonStartup.js.map +1 -1
  260. package/dist/server/sessiond/sessionProxyRoutes.js +263 -91
  261. package/dist/server/sessiond/sessionProxyRoutes.js.map +1 -1
  262. package/dist/server/sessiond/sessionServiceDependencies.js +5 -0
  263. package/dist/server/sessiond/sessionServiceDependencies.js.map +1 -1
  264. package/dist/server/sessiond/sessiondStateOwnership.js +174 -39
  265. package/dist/server/sessiond/sessiondStateOwnership.js.map +1 -1
  266. package/dist/server/sessiond/workspaceCatalogRoutes.js +11 -5
  267. package/dist/server/sessiond/workspaceCatalogRoutes.js.map +1 -1
  268. package/dist/server/sessiond/workspaceNotificationRoutes.js +55 -0
  269. package/dist/server/sessiond/workspaceNotificationRoutes.js.map +1 -0
  270. package/dist/server/sessiond/workspaceRemovalRoutes.js +1 -1
  271. package/dist/server/sessiond/workspaceRemovalRoutes.js.map +1 -1
  272. package/dist/server/sessiond.js +313 -69
  273. package/dist/server/sessiond.js.map +1 -1
  274. package/dist/server/sessions/askUserDomain.js +232 -0
  275. package/dist/server/sessions/askUserDomain.js.map +1 -0
  276. package/dist/server/sessions/askUserTool.js +18 -21
  277. package/dist/server/sessions/askUserTool.js.map +1 -1
  278. package/dist/server/sessions/attachmentService.js +2 -6
  279. package/dist/server/sessions/attachmentService.js.map +1 -1
  280. package/dist/server/sessions/authRoutes.js +32 -19
  281. package/dist/server/sessions/authRoutes.js.map +1 -1
  282. package/dist/server/sessions/authService.js +31 -11
  283. package/dist/server/sessions/authService.js.map +1 -1
  284. package/dist/server/sessions/builtinCommands.js +28 -21
  285. package/dist/server/sessions/builtinCommands.js.map +1 -1
  286. package/dist/server/sessions/builtinExtensionFactories.js +36 -0
  287. package/dist/server/sessions/builtinExtensionFactories.js.map +1 -0
  288. package/dist/server/sessions/clientSessionPreview.js +14 -0
  289. package/dist/server/sessions/clientSessionPreview.js.map +1 -0
  290. package/dist/server/sessions/companionBackend.js +286 -0
  291. package/dist/server/sessions/companionBackend.js.map +1 -0
  292. package/dist/server/sessions/dockerEnvironmentFacts.js +98 -10
  293. package/dist/server/sessions/dockerEnvironmentFacts.js.map +1 -1
  294. package/dist/server/sessions/extensionSessionDispatch.js +76 -0
  295. package/dist/server/sessions/extensionSessionDispatch.js.map +1 -0
  296. package/dist/server/sessions/globalProviderPolicy.js +88 -19
  297. package/dist/server/sessions/globalProviderPolicy.js.map +1 -1
  298. package/dist/server/sessions/managementAgentTools.js +116 -6
  299. package/dist/server/sessions/managementAgentTools.js.map +1 -1
  300. package/dist/server/sessions/managementPermissionSystem.js +36 -14
  301. package/dist/server/sessions/managementPermissionSystem.js.map +1 -1
  302. package/dist/server/sessions/managementSandbox.js +7 -18
  303. package/dist/server/sessions/managementSandbox.js.map +1 -1
  304. package/dist/server/sessions/mcpAuthFlowService.js +289 -0
  305. package/dist/server/sessions/mcpAuthFlowService.js.map +1 -0
  306. package/dist/server/sessions/mcpAuthRoutes.js +104 -0
  307. package/dist/server/sessions/mcpAuthRoutes.js.map +1 -0
  308. package/dist/server/sessions/mcpOAuthCredentialAdapter.js +92 -0
  309. package/dist/server/sessions/mcpOAuthCredentialAdapter.js.map +1 -0
  310. package/dist/server/sessions/messageHistoryTarget.js +79 -0
  311. package/dist/server/sessions/messageHistoryTarget.js.map +1 -0
  312. package/dist/server/sessions/messagePaging.js +2 -2
  313. package/dist/server/sessions/messagePaging.js.map +1 -1
  314. package/dist/server/sessions/modelCatalogRefresher.js +4 -3
  315. package/dist/server/sessions/modelCatalogRefresher.js.map +1 -1
  316. package/dist/server/sessions/oauthLoginFlowService.js +19 -20
  317. package/dist/server/sessions/oauthLoginFlowService.js.map +1 -1
  318. package/dist/server/sessions/piSessionEventConnections.js +68 -0
  319. package/dist/server/sessions/piSessionEventConnections.js.map +1 -0
  320. package/dist/server/sessions/piSessionManagerGateway.js +206 -27
  321. package/dist/server/sessions/piSessionManagerGateway.js.map +1 -1
  322. package/dist/server/sessions/piSessionService.js +2508 -991
  323. package/dist/server/sessions/piSessionService.js.map +1 -1
  324. package/dist/server/sessions/plainTextTheme.js +1 -1
  325. package/dist/server/sessions/plainTextTheme.js.map +1 -1
  326. package/dist/server/sessions/projectAuthService.js +35 -6
  327. package/dist/server/sessions/projectAuthService.js.map +1 -1
  328. package/dist/server/sessions/projectSettingsScope.js +88 -33
  329. package/dist/server/sessions/projectSettingsScope.js.map +1 -1
  330. package/dist/server/sessions/projectTrust.js +119 -0
  331. package/dist/server/sessions/projectTrust.js.map +1 -0
  332. package/dist/server/sessions/queuedMessageMutation.js +170 -0
  333. package/dist/server/sessions/queuedMessageMutation.js.map +1 -0
  334. package/dist/server/sessions/relaySkill.js +169 -0
  335. package/dist/server/sessions/relaySkill.js.map +1 -0
  336. package/dist/server/sessions/sessionActivityMarker.js +105 -0
  337. package/dist/server/sessions/sessionActivityMarker.js.map +1 -0
  338. package/dist/server/sessions/sessionArchiveMapping.js +16 -15
  339. package/dist/server/sessions/sessionArchiveMapping.js.map +1 -1
  340. package/dist/server/sessions/sessionArchiveStore.js +5 -1
  341. package/dist/server/sessions/sessionArchiveStore.js.map +1 -1
  342. package/dist/server/sessions/sessionArchiveTree.js +2 -2
  343. package/dist/server/sessions/sessionArchiveTree.js.map +1 -1
  344. package/dist/server/sessions/sessionCleanup.js +4 -3
  345. package/dist/server/sessions/sessionCleanup.js.map +1 -1
  346. package/dist/server/sessions/sessionCommandService.js +79 -87
  347. package/dist/server/sessions/sessionCommandService.js.map +1 -1
  348. package/dist/server/sessions/sessionEnvironmentFacts.js +5 -4
  349. package/dist/server/sessions/sessionEnvironmentFacts.js.map +1 -1
  350. package/dist/server/sessions/sessionFileHeader.js +41 -0
  351. package/dist/server/sessions/sessionFileHeader.js.map +1 -1
  352. package/dist/server/sessions/sessionImageDimensions.js +31 -0
  353. package/dist/server/sessions/sessionImageDimensions.js.map +1 -0
  354. package/dist/server/sessions/sessionMediaIndex.js +191 -0
  355. package/dist/server/sessions/sessionMediaIndex.js.map +1 -0
  356. package/dist/server/sessions/sessionMetadata.js +51 -0
  357. package/dist/server/sessions/sessionMetadata.js.map +1 -0
  358. package/dist/server/sessions/sessionModelScope.js +160 -0
  359. package/dist/server/sessions/sessionModelScope.js.map +1 -0
  360. package/dist/server/sessions/sessionNameGenerator.js +16 -35
  361. package/dist/server/sessions/sessionNameGenerator.js.map +1 -1
  362. package/dist/server/sessions/sessionNotificationStore.js +14 -11
  363. package/dist/server/sessions/sessionNotificationStore.js.map +1 -1
  364. package/dist/server/sessions/sessionReadAccess.js +41 -0
  365. package/dist/server/sessions/sessionReadAccess.js.map +1 -0
  366. package/dist/server/sessions/sessionRoutes.js +221 -78
  367. package/dist/server/sessions/sessionRoutes.js.map +1 -1
  368. package/dist/server/sessions/sessionSummaryScanner.js +62 -5
  369. package/dist/server/sessions/sessionSummaryScanner.js.map +1 -1
  370. package/dist/server/sessions/sessionTreeProjection.js +50 -49
  371. package/dist/server/sessions/sessionTreeProjection.js.map +1 -1
  372. package/dist/server/sessions/sessionUiEvents.js +22 -10
  373. package/dist/server/sessions/sessionUiEvents.js.map +1 -1
  374. package/dist/server/sessions/sessionUnreadStore.js +53 -3
  375. package/dist/server/sessions/sessionUnreadStore.js.map +1 -1
  376. package/dist/server/sessions/spawnSessionTool.js +14 -6
  377. package/dist/server/sessions/spawnSessionTool.js.map +1 -1
  378. package/dist/server/sessions/spawnSubsessionTool.js +40 -24
  379. package/dist/server/sessions/spawnSubsessionTool.js.map +1 -1
  380. package/dist/server/sessions/spawnTargetResolver.js +1 -1
  381. package/dist/server/sessions/subsessionCompletionDelivery.js +15 -0
  382. package/dist/server/sessions/subsessionCompletionDelivery.js.map +1 -0
  383. package/dist/server/sessions/subsessionCompletionInbox.js +134 -0
  384. package/dist/server/sessions/subsessionCompletionInbox.js.map +1 -0
  385. package/dist/server/sessions/subsessionProvenance.js +27 -0
  386. package/dist/server/sessions/subsessionProvenance.js.map +1 -0
  387. package/dist/server/sessions/transcriptBranchCache.js +81 -0
  388. package/dist/server/sessions/transcriptBranchCache.js.map +1 -0
  389. package/dist/server/sessions/transcriptMarkdown.js +48 -0
  390. package/dist/server/sessions/transcriptMarkdown.js.map +1 -0
  391. package/dist/server/sessions/transcriptMessages.js +57 -0
  392. package/dist/server/sessions/transcriptMessages.js.map +1 -0
  393. package/dist/server/startupLogger.js +13 -0
  394. package/dist/server/startupLogger.js.map +1 -0
  395. package/dist/server/startupUrls.js +27 -0
  396. package/dist/server/startupUrls.js.map +1 -0
  397. package/dist/server/status/machineStatusService.js +15 -7
  398. package/dist/server/status/machineStatusService.js.map +1 -1
  399. package/dist/server/storage/navigationPreferenceStore.js +138 -0
  400. package/dist/server/storage/navigationPreferenceStore.js.map +1 -0
  401. package/dist/server/storage/piPackageDismissalStore.js +78 -0
  402. package/dist/server/storage/piPackageDismissalStore.js.map +1 -0
  403. package/dist/server/terminals/{terminalService.js → managementCommandRunService.js} +98 -102
  404. package/dist/server/terminals/managementCommandRunService.js.map +1 -0
  405. package/dist/server/terminals/managementTerminalRoutes.js +91 -0
  406. package/dist/server/terminals/managementTerminalRoutes.js.map +1 -0
  407. package/dist/server/terminals/requiredTerminalService.js +103 -0
  408. package/dist/server/terminals/requiredTerminalService.js.map +1 -0
  409. package/dist/server/webSocketBridge.js +348 -0
  410. package/dist/server/webSocketBridge.js.map +1 -1
  411. package/dist/server/workbench/accessStateStore.js +33 -5
  412. package/dist/server/workbench/accessStateStore.js.map +1 -1
  413. package/dist/server/workbench/capabilitySearch.js +3 -2
  414. package/dist/server/workbench/capabilitySearch.js.map +1 -1
  415. package/dist/server/workbench/gatewayIntegration.js +40 -13
  416. package/dist/server/workbench/gatewayIntegration.js.map +1 -1
  417. package/dist/server/workbench/knowledgeSearch.js +100 -0
  418. package/dist/server/workbench/knowledgeSearch.js.map +1 -0
  419. package/dist/server/workbench/mcpClient.js +41 -8
  420. package/dist/server/workbench/mcpClient.js.map +1 -1
  421. package/dist/server/workbench/skillSync.js +11 -3
  422. package/dist/server/workbench/skillSync.js.map +1 -1
  423. package/dist/server/workbench/workbenchClient.js +130 -7
  424. package/dist/server/workbench/workbenchClient.js.map +1 -1
  425. package/dist/server/workbench/workbenchTools.js +196 -14
  426. package/dist/server/workbench/workbenchTools.js.map +1 -1
  427. package/dist/server/workingDirectory.js +3 -2
  428. package/dist/server/workingDirectory.js.map +1 -1
  429. package/dist/server/workspaceExplorerRoutes.js +53 -21
  430. package/dist/server/workspaceExplorerRoutes.js.map +1 -1
  431. package/dist/server/workspaces/fileContentService.js +31 -16
  432. package/dist/server/workspaces/fileContentService.js.map +1 -1
  433. package/dist/server/workspaces/fileOperationService.js +11 -9
  434. package/dist/server/workspaces/fileOperationService.js.map +1 -1
  435. package/dist/server/workspaces/filePreviewService.js +10 -6
  436. package/dist/server/workspaces/filePreviewService.js.map +1 -1
  437. package/dist/server/workspaces/fileSuggestions.js +77 -10
  438. package/dist/server/workspaces/fileSuggestions.js.map +1 -1
  439. package/dist/server/workspaces/fileTreeService.js +103 -15
  440. package/dist/server/workspaces/fileTreeService.js.map +1 -1
  441. package/dist/server/workspaces/normalProjectCwdResolver.js +35 -0
  442. package/dist/server/workspaces/normalProjectCwdResolver.js.map +1 -0
  443. package/dist/server/workspaces/pathAccessPolicy.js +24 -18
  444. package/dist/server/workspaces/pathAccessPolicy.js.map +1 -1
  445. package/dist/server/workspaces/pathSafety.js +6 -5
  446. package/dist/server/workspaces/pathSafety.js.map +1 -1
  447. package/dist/server/workspaces/projectPiWebConfig.js +95 -8
  448. package/dist/server/workspaces/projectPiWebConfig.js.map +1 -1
  449. package/dist/server/workspaces/projectWorkspaceCwds.js +0 -5
  450. package/dist/server/workspaces/projectWorkspaceCwds.js.map +1 -1
  451. package/dist/server/workspaces/sessionDaemonWorkspaceCatalog.js +37 -22
  452. package/dist/server/workspaces/sessionDaemonWorkspaceCatalog.js.map +1 -1
  453. package/dist/server/workspaces/workspaceCatalog.js +6 -4
  454. package/dist/server/workspaces/workspaceCatalog.js.map +1 -1
  455. package/dist/server/workspaces/workspaceChangeNotifier.js +12 -0
  456. package/dist/server/workspaces/workspaceChangeNotifier.js.map +1 -0
  457. package/dist/server/workspaces/workspaceDeletionRoutes.js +9 -70
  458. package/dist/server/workspaces/workspaceDeletionRoutes.js.map +1 -1
  459. package/dist/server/workspaces/workspaceNotificationCommand.js +64 -0
  460. package/dist/server/workspaces/workspaceNotificationCommand.js.map +1 -0
  461. package/dist/server/workspaces/workspaceProviderRegistry.js +128 -24
  462. package/dist/server/workspaces/workspaceProviderRegistry.js.map +1 -1
  463. package/dist/server/workspaces/workspaceRemovalService.js +41 -7
  464. package/dist/server/workspaces/workspaceRemovalService.js.map +1 -1
  465. package/dist/server/workspaces/workspaceRouteContext.js +1 -1
  466. package/dist/server/workspaces/workspaceRouteContext.js.map +1 -1
  467. package/dist/server/workspaces/workspaceRouteErrors.js +4 -2
  468. package/dist/server/workspaces/workspaceRouteErrors.js.map +1 -1
  469. package/dist/server/workspaces/workspaceUserError.js +18 -0
  470. package/dist/server/workspaces/workspaceUserError.js.map +1 -0
  471. package/dist/server-plugin-api.d.ts +349 -49
  472. package/dist/server-plugin-api.js +344 -2
  473. package/dist/server-plugin-api.js.map +1 -1
  474. package/dist/serverPluginRecovery.js +6 -1
  475. package/dist/serverPluginRecovery.js.map +1 -1
  476. package/dist/sessiond/activeAgentProfile.js +27 -2
  477. package/dist/sessiond/activeAgentProfile.js.map +1 -1
  478. package/dist/sessiond/config.js +4 -3
  479. package/dist/sessiond/config.js.map +1 -1
  480. package/dist/sessiond/sessionDaemonClient.js +75 -19
  481. package/dist/sessiond/sessionDaemonClient.js.map +1 -1
  482. package/dist/sessiond/sessionDaemonErrors.js +49 -0
  483. package/dist/sessiond/sessionDaemonErrors.js.map +1 -0
  484. package/dist/shared/activeAgentProfile.js +2 -34
  485. package/dist/shared/activeAgentProfile.js.map +1 -1
  486. package/dist/shared/activity.js +0 -3
  487. package/dist/shared/activity.js.map +1 -1
  488. package/dist/shared/apiTypes.js +10 -3
  489. package/dist/shared/apiTypes.js.map +1 -1
  490. package/dist/shared/capabilities.js +8 -0
  491. package/dist/shared/capabilities.js.map +1 -1
  492. package/dist/shared/federatedRoutes.js +77 -11
  493. package/dist/shared/federatedRoutes.js.map +1 -1
  494. package/dist/shared/i18n.js +41 -0
  495. package/dist/shared/i18n.js.map +1 -0
  496. package/dist/shared/machinePluginIds.js +30 -7
  497. package/dist/shared/machinePluginIds.js.map +1 -1
  498. package/dist/shared/machineStatus.js +46 -3
  499. package/dist/shared/machineStatus.js.map +1 -1
  500. package/dist/shared/navigationPreferences.js +6 -0
  501. package/dist/shared/navigationPreferences.js.map +1 -0
  502. package/dist/shared/piWebConfigParsing.js +118 -49
  503. package/dist/shared/piWebConfigParsing.js.map +1 -1
  504. package/dist/shared/piWebStatusParsing.js +33 -0
  505. package/dist/shared/piWebStatusParsing.js.map +1 -1
  506. package/dist/shared/pluginApiTypes.d.ts +87 -8
  507. package/dist/shared/pluginApiTypes.js +2 -0
  508. package/dist/shared/pluginApiTypes.js.map +1 -0
  509. package/dist/shared/pluginBackendProtocol.js +218 -2
  510. package/dist/shared/pluginBackendProtocol.js.map +1 -1
  511. package/dist/shared/pluginCatalogTypes.d.ts +49 -0
  512. package/dist/shared/pluginCatalogTypes.js +156 -0
  513. package/dist/shared/pluginCatalogTypes.js.map +1 -0
  514. package/dist/shared/pluginIds.js +10 -1
  515. package/dist/shared/pluginIds.js.map +1 -1
  516. package/dist/shared/requiredTerminalPlugin.js +6 -0
  517. package/dist/shared/requiredTerminalPlugin.js.map +1 -0
  518. package/dist/shared/serverNoticeContract.js +88 -0
  519. package/dist/shared/serverNoticeContract.js.map +1 -0
  520. package/dist/shared/sessionDefaults.js +42 -0
  521. package/dist/shared/sessionDefaults.js.map +1 -0
  522. package/dist/shared/sessionMedia.js +12 -0
  523. package/dist/shared/sessionMedia.js.map +1 -0
  524. package/dist/shared/streamingBehavior.js +8 -0
  525. package/dist/shared/streamingBehavior.js.map +1 -0
  526. package/dist/shared/themePreference.js +24 -0
  527. package/dist/shared/themePreference.js.map +1 -0
  528. package/dist/shared/thinkingLevels.js +17 -16
  529. package/dist/shared/thinkingLevels.js.map +1 -1
  530. package/dist/shared/workspaceFiles.js.map +1 -1
  531. package/dist/workspaceNotificationCli.js +95 -0
  532. package/dist/workspaceNotificationCli.js.map +1 -0
  533. package/docs/README.md +31 -0
  534. package/docs/config.md +344 -277
  535. package/docs/plugins.md +204 -930
  536. package/examples/session-bridge-plugin/README.md +20 -0
  537. package/examples/session-bridge-plugin/docs/usage.md +54 -0
  538. package/examples/session-bridge-plugin/package.json +26 -0
  539. package/examples/session-bridge-plugin/src/browser/index.ts +87 -0
  540. package/examples/session-bridge-plugin/src/browser/protocol.ts +24 -0
  541. package/examples/session-bridge-plugin/src/companion.ts +65 -0
  542. package/examples/session-bridge-plugin/src/reviewRun.ts +39 -0
  543. package/examples/session-bridge-plugin/src/server.ts +85 -0
  544. package/examples/session-bridge-plugin/src/store.ts +80 -0
  545. package/examples/session-bridge-plugin/tsconfig.json +21 -0
  546. package/examples/workspace-provider-plugin/README.md +39 -0
  547. package/examples/workspace-provider-plugin/package.json +25 -0
  548. package/examples/workspace-provider-plugin/src/browser/index.ts +69 -0
  549. package/examples/workspace-provider-plugin/src/server.ts +68 -0
  550. package/examples/workspace-provider-plugin/tsconfig.json +21 -0
  551. package/extensions/pi-web.ts +3 -1
  552. package/package.json +59 -36
  553. package/skills/README.md +28 -2
  554. package/skills/relay/SKILL.md +24 -89
  555. package/skills/relay-runner/SKILL.md +74 -0
  556. package/dist/client/assets/CodeViewer-DCl56K0Z.js +0 -4
  557. package/dist/client/assets/TerminalPanel-DCvoEjUF.js +0 -187
  558. package/dist/client/assets/index-CMvms5cF.js +0 -4325
  559. package/dist/client/assets/vendor-editor-core-vUi74DnD.js +0 -12
  560. package/dist/client/assets/vendor-editor-languages-DoaXUodB.js +0 -46
  561. package/dist/client/assets/vendor-editor-legacy-CYBnW6ZU.js +0 -1
  562. package/dist/client/assets/vendor-terminal-BrP-ENHg.css +0 -1
  563. package/dist/client/assets/vendor-terminal-D8k4UKM2.js +0 -35
  564. package/dist/pi-web-plugins/relays/package.json +0 -9
  565. package/dist/pi-web-plugins/relays/pi-web-plugin.js +0 -44
  566. package/dist/server/git/gitService.js +0 -290
  567. package/dist/server/git/gitService.js.map +0 -1
  568. package/dist/server/gitRoutes.js +0 -23
  569. package/dist/server/gitRoutes.js.map +0 -1
  570. package/dist/server/sessions/pendingAskStore.js +0 -278
  571. package/dist/server/sessions/pendingAskStore.js.map +0 -1
  572. package/dist/server/terminalProxyRoutes.js +0 -178
  573. package/dist/server/terminalProxyRoutes.js.map +0 -1
  574. package/dist/server/terminals/terminalRoutes.js +0 -164
  575. package/dist/server/terminals/terminalRoutes.js.map +0 -1
  576. package/dist/server/terminals/terminalService.js.map +0 -1
  577. package/dist/server/terminals/terminalSize.js +0 -17
  578. package/dist/server/terminals/terminalSize.js.map +0 -1
  579. package/dist/server/workspaces/gitWorktreeDiscovery.js +0 -43
  580. package/dist/server/workspaces/gitWorktreeDiscovery.js.map +0 -1
  581. package/dist/server/workspaces/workspaceService.js +0 -52
  582. package/dist/server/workspaces/workspaceService.js.map +0 -1
  583. /package/dist/{pi-web-plugins → pi-packages}/relays/vendor/README.md +0 -0
  584. /package/dist/{pi-web-plugins → pi-packages}/relays/vendor/marked.esm.js +0 -0
@@ -1,10 +1,34 @@
1
1
  // Generated from pi-web-plugins/git/browser/pi-web-plugin.ts. Do not edit directly.
2
+ import { setTranslator } from "./i18n.js";
2
3
  import { createGitBrowserContributions } from "./git-panel.js";
4
+ const stylesheetIntegrationCapability = {
5
+ pluginId: "pi-web", id: "stylesheet-integration", version: 1,
6
+ parse: (value) => {
7
+ if (!isStylesheetIntegration(value)) {
8
+ throw new Error("Invalid PI WEB stylesheet integration capability v1");
9
+ }
10
+ return value;
11
+ },
12
+ };
13
+ function isStylesheetIntegration(value) {
14
+ return typeof value === "object" && value !== null
15
+ && "registerRoot" in value && typeof value.registerRoot === "function"
16
+ && "subscribe" in value && typeof value.subscribe === "function"
17
+ && "createController" in value && typeof value.createController === "function";
18
+ }
3
19
  const plugin = {
4
- apiVersion: 2,
20
+ apiVersion: 4,
5
21
  name: "Git",
6
- activate: ({ pluginId, runtimePluginId, html, svg }) => ({
7
- contributions: createGitBrowserContributions(pluginId, runtimePluginId ?? pluginId, html, svg),
8
- }),
22
+ requires: [stylesheetIntegrationCapability],
23
+ activate: ({ pluginId, runtimePluginId, html, svg, translate }) => {
24
+ setTranslator(translate);
25
+ let stylesheetIntegration;
26
+ return {
27
+ start: ({ capabilities }) => {
28
+ stylesheetIntegration = capabilities.resolve(stylesheetIntegrationCapability);
29
+ },
30
+ contributions: createGitBrowserContributions(pluginId, runtimePluginId, html, svg, () => stylesheetIntegration),
31
+ };
32
+ },
9
33
  };
10
34
  export default plugin;
@@ -1,38 +1,58 @@
1
1
  // Generated from pi-web-plugins/git/git-backend.ts. Do not edit directly.
2
+ import { t } from "./i18n.js";
2
3
  import { createHash } from "node:crypto";
3
4
  import { realpath } from "node:fs/promises";
5
+ import { GitStatusCache } from "./gitStatusCache.js";
4
6
  import { isAbsolute, join, relative, sep } from "node:path";
5
7
  import { GIT_DIFF_OPERATION, GIT_STATUS_OPERATION, } from "./browser/git-contract.js";
6
8
  export { GIT_DIFF_OPERATION, GIT_STATUS_OPERATION } from "./browser/git-contract.js";
7
9
  const GIT_COMMAND_TIMEOUT_MS = 10_000;
10
+ const statusCaches = new WeakMap();
8
11
  const GIT_LOCAL_ENV_VARS = Object.freeze([
9
12
  "GIT_ALTERNATE_OBJECT_DIRECTORIES",
10
13
  "GIT_COMMON_DIR",
14
+ "GIT_CONFIG",
15
+ "GIT_CONFIG_COUNT",
16
+ "GIT_CONFIG_PARAMETERS",
11
17
  "GIT_DIR",
18
+ "GIT_GRAFT_FILE",
19
+ "GIT_IMPLICIT_WORK_TREE",
12
20
  "GIT_INDEX_FILE",
21
+ "GIT_NO_REPLACE_OBJECTS",
13
22
  "GIT_OBJECT_DIRECTORY",
14
23
  "GIT_PREFIX",
15
24
  "GIT_QUARANTINE_PATH",
25
+ "GIT_REPLACE_REF_BASE",
26
+ "GIT_SHALLOW_FILE",
16
27
  "GIT_WORK_TREE",
17
28
  ]);
18
- /** Dispatch the Git-owned status/diff schema through the provider's public request seam. */
29
+ /** Dispatch the Git status/diff schema through the package peer request seam. */
19
30
  export async function requestGitBackend(activationContext, request) {
20
31
  const runGit = createGitRunner(activationContext, request.signal);
21
32
  if (request.operation === GIT_STATUS_OPERATION) {
22
33
  requireStatusInput(request.input);
23
- return statusProviderResponse(await gitStatusWithRunner(runGit, request.workspace.path));
34
+ let cache = statusCaches.get(activationContext);
35
+ if (cache === undefined) {
36
+ cache = new GitStatusCache((cwd, signal) => gitStatus(activationContext, cwd, signal));
37
+ statusCaches.set(activationContext, cache);
38
+ }
39
+ const key = JSON.stringify([request.project.id, request.project.path, request.workspace.id, request.workspace.path, request.workspace.provider]);
40
+ return statusPeerResponse(await cache.get(key, request.workspace.path, request.signal, request.input !== null));
24
41
  }
25
42
  if (request.operation === GIT_DIFF_OPERATION) {
26
- return diffProviderResponse(await gitDiffWithRunner(runGit, request.workspace.path, parseDiffInput(request.input)));
43
+ return diffPeerResponse(await gitDiffWithRunner(runGit, request.workspace.path, parseDiffInput(request.input)));
27
44
  }
28
45
  throw new Error(`Unsupported Git workspace backend operation: ${request.operation}`);
29
46
  }
47
+ export async function gitStatus(context, cwd, signal) {
48
+ return gitStatusWithRunner(createGitRunner(context, signal), cwd);
49
+ }
30
50
  async function gitStatusWithRunner(runGit, cwd) {
31
51
  const result = await runGit(cwd, ["status", "--porcelain=v2", "--branch", "--untracked-files=all", "-z"]);
32
52
  if (result.code !== 0)
33
- return { isGitRepo: false, hash: hash(result.stdout + result.stderr), files: [], submodules: [] };
34
- const parsed = parseStatus(result.stdout, { deferSubmodules: true });
35
- return expandSubmodules(runGit, cwd, parsed, result.stdout);
53
+ return { isGitRepo: false, hash: hash(result.stdout + result.stderr), files: [], submodules: [], ...(result.truncated ? { truncated: true } : {}) };
54
+ const parsed = parseStatus(result.truncated ? result.stdout.slice(0, result.stdout.lastIndexOf("\0") + 1) : result.stdout, { deferSubmodules: true });
55
+ return expandSubmodules(runGit, await gitWorktreeRoot(runGit, cwd), parsed, result.stdout, result.truncated);
36
56
  }
37
57
  /**
38
58
  * Merge each dirty submodule's own changes into the flat file list. A moved
@@ -41,7 +61,7 @@ async function gitStatusWithRunner(runGit, cwd) {
41
61
  * entries under `<submodule>/<inner path>`. A plain `-dirty` pointer (commit
42
62
  * unchanged) is intentionally not surfaced as a pointer entry.
43
63
  */
44
- async function expandSubmodules(runGit, cwd, parsed, topRaw) {
64
+ async function expandSubmodules(runGit, cwd, parsed, topRaw, topTruncated) {
45
65
  // Fan out concurrently — one `git status` per dirty submodule plus one
46
66
  // `git rev-parse` per unstaged pointer move — then concatenate in input
47
67
  // order so the file list and hash are identical to a serial pass.
@@ -55,10 +75,12 @@ async function expandSubmodules(runGit, cwd, parsed, topRaw) {
55
75
  const files = [...parsed.files];
56
76
  const dirtySubmodulePaths = [];
57
77
  let extraForHash = "";
78
+ let truncated = topTruncated;
58
79
  for (const part of expanded) {
59
80
  dirtySubmodulePaths.push(part.path);
60
81
  files.push(...part.files);
61
82
  extraForHash += part.extraForHash;
83
+ truncated ||= part.truncated;
62
84
  }
63
85
  return {
64
86
  isGitRepo: true,
@@ -69,12 +91,14 @@ async function expandSubmodules(runGit, cwd, parsed, topRaw) {
69
91
  ...(parsed.behind === undefined ? {} : { behind: parsed.behind }),
70
92
  files,
71
93
  submodules: dirtySubmodulePaths,
94
+ ...(truncated ? { truncated: true } : {}),
72
95
  };
73
96
  }
74
97
  /** Expand one dirty submodule: the pointer entry first, then its inner files. */
75
98
  async function expandSubmodule(runGit, sub, location) {
76
99
  const files = [];
77
100
  let extraForHash = "";
101
+ let truncated = false;
78
102
  if (sub.commitChanged) {
79
103
  files.push({
80
104
  path: sub.path,
@@ -86,9 +110,10 @@ async function expandSubmodule(runGit, sub, location) {
86
110
  }
87
111
  if ((sub.hasModifiedContent || sub.hasUntrackedContent) && location !== undefined) {
88
112
  const inner = await runGit(location.cwd, ["status", "--porcelain=v2", "--untracked-files=all", "-z"]);
113
+ truncated = inner.truncated;
89
114
  if (inner.code === 0) {
90
115
  extraForHash = `\0${sub.path}\0${inner.stdout}`;
91
- const innerFiles = parseStatus(inner.stdout, { deferSubmodules: false }).files;
116
+ const innerFiles = parseStatus(inner.truncated ? inner.stdout.slice(0, inner.stdout.lastIndexOf("\0") + 1) : inner.stdout, { deferSubmodules: false }).files;
92
117
  for (const file of innerFiles) {
93
118
  files.push({
94
119
  ...file,
@@ -99,7 +124,7 @@ async function expandSubmodule(runGit, sub, location) {
99
124
  }
100
125
  // non-zero exit: uninitialized / unreadable submodule — skip silently
101
126
  }
102
- return { files, extraForHash };
127
+ return { files, extraForHash, truncated };
103
128
  }
104
129
  async function resolveSubmoduleToCommit(runGit, cwd, sub) {
105
130
  // Staged pointer moves already expose the new commit as the index OID; an
@@ -111,11 +136,16 @@ async function resolveSubmoduleToCommit(runGit, cwd, sub) {
111
136
  const resolved = head.stdout.trim();
112
137
  return head.code === 0 && resolved !== "" ? resolved : sub.indexOid;
113
138
  }
139
+ export async function gitDiff(context, cwd, options, signal) {
140
+ return gitDiffWithRunner(createGitRunner(context, signal), cwd, options);
141
+ }
114
142
  async function gitDiffWithRunner(runGit, cwd, options) {
115
143
  const staged = options.staged === true;
116
144
  let path;
117
145
  if (options.path !== undefined && options.path !== "")
118
146
  path = normalizeRelativePath(options.path);
147
+ // Diff/status paths belong to the repository, not a folder project's session cwd.
148
+ cwd = await gitWorktreeRoot(runGit, cwd);
119
149
  if (path !== undefined) {
120
150
  const owner = await submoduleForPath(runGit, cwd, path);
121
151
  if (owner !== undefined)
@@ -128,11 +158,11 @@ async function gitDiffWithRunner(runGit, cwd, options) {
128
158
  args.push("--", path);
129
159
  const result = await runGit(cwd, args);
130
160
  if (result.code !== 0)
131
- throw new Error(result.stderr.trim() || "git diff 执行失败");
161
+ throw new Error(result.stderr.trim() || t("ui.main.0a7b52df3fee", "git diff failed"));
132
162
  if (!staged && path !== undefined && result.stdout === "" && await isUntracked(runGit, cwd, path)) {
133
163
  const untracked = await runGit(cwd, ["diff", "--no-ext-diff", "--color=never", "--no-index", "/dev/null", "--", path]);
134
164
  if (untracked.code !== 0 && untracked.code !== 1)
135
- throw new Error(untracked.stderr.trim() || "git diff 执行失败");
165
+ throw new Error(untracked.stderr.trim() || t("ui.main.0a7b52df3fee", "git diff failed"));
136
166
  return { path, staged, hash: hash(untracked.stdout), diff: untracked.stdout, truncated: untracked.truncated };
137
167
  }
138
168
  return { ...(path === undefined ? {} : { path }), staged, hash: hash(result.stdout), diff: result.stdout, truncated: result.truncated };
@@ -152,15 +182,24 @@ async function submoduleDiff(runGit, owner, path, staged) {
152
182
  args.push("--", rel);
153
183
  const result = await runGit(subCwd, args);
154
184
  if (result.code !== 0)
155
- throw new Error(result.stderr.trim() || "git diff 执行失败");
185
+ throw new Error(result.stderr.trim() || t("ui.main.0a7b52df3fee", "git diff failed"));
156
186
  if (!staged && result.stdout === "" && await isUntracked(runGit, subCwd, rel)) {
157
187
  const untracked = await runGit(subCwd, ["diff", "--no-ext-diff", "--color=never", "--no-index", "/dev/null", "--", rel]);
158
188
  if (untracked.code !== 0 && untracked.code !== 1)
159
- throw new Error(untracked.stderr.trim() || "git diff 执行失败");
189
+ throw new Error(untracked.stderr.trim() || t("ui.main.0a7b52df3fee", "git diff failed"));
160
190
  return { path, staged, hash: hash(untracked.stdout), diff: untracked.stdout, truncated: untracked.truncated };
161
191
  }
162
192
  return { path, staged, hash: hash(result.stdout), diff: result.stdout, truncated: result.truncated };
163
193
  }
194
+ async function gitWorktreeRoot(runGit, cwd) {
195
+ const result = await runGit(cwd, ["rev-parse", "--show-toplevel"]);
196
+ if (result.code !== 0)
197
+ throw new Error(result.stderr.trim() || t("git.cwdRootUnavailable", "Cannot resolve Git worktree root"));
198
+ const root = result.stdout.replace(/\r?\n$/u, "");
199
+ if (!isAbsolute(root))
200
+ throw new Error(t("git.cwdRootInvalid", "Git returned an invalid worktree root"));
201
+ return root;
202
+ }
164
203
  async function isUntracked(runGit, cwd, path) {
165
204
  const result = await runGit(cwd, ["ls-files", "--others", "--exclude-standard", "-z", "--", path]);
166
205
  return result.code === 0 && result.stdout.split("\0").includes(path);
@@ -345,7 +384,7 @@ function displayFromCommit(headOid) {
345
384
  function hash(value) {
346
385
  return createHash("sha1").update(value).digest("hex");
347
386
  }
348
- function statusProviderResponse(status) {
387
+ function statusPeerResponse(status) {
349
388
  return {
350
389
  isGitRepo: status.isGitRepo,
351
390
  hash: status.hash,
@@ -362,9 +401,10 @@ function statusProviderResponse(status) {
362
401
  ...(file.submoduleToCommit === undefined ? {} : { submoduleToCommit: file.submoduleToCommit }),
363
402
  })),
364
403
  submodules: status.submodules,
404
+ ...(status.truncated === true ? { truncated: true } : {}),
365
405
  };
366
406
  }
367
- function diffProviderResponse(diff) {
407
+ function diffPeerResponse(diff) {
368
408
  return {
369
409
  ...(diff.path === undefined ? {} : { path: diff.path }),
370
410
  staged: diff.staged,
@@ -397,21 +437,21 @@ function commandResult(result, args) {
397
437
  };
398
438
  }
399
439
  function requireStatusInput(input) {
400
- if (input !== null)
401
- throw new Error("Git 状态输入必须为 null");
440
+ if (input !== null && !(isRecord(input) && input["refresh"] === true && Object.keys(input).length === 1))
441
+ throw new Error(t("ui.main.ec33070a9080", "Git status input must be null or a refresh object"));
402
442
  }
403
443
  function parseDiffInput(input) {
404
444
  if (!isRecord(input))
405
- throw new Error("Git 差异输入必须是对象");
445
+ throw new Error(t("ui.main.4ae7ff3e02c0", "Git diff input must be an object"));
406
446
  const unsupported = Object.keys(input).find((key) => key !== "path" && key !== "staged");
407
447
  if (unsupported !== undefined)
408
- throw new Error(`Git 差异输入包含不支持的字段:${unsupported}`);
448
+ throw new Error(t("ui.main.629f180b2bba", "Git diff input contains an unsupported field: {arg0}", { arg0: unsupported }));
409
449
  const path = input["path"];
410
450
  const staged = input["staged"];
411
451
  if (path !== undefined && typeof path !== "string")
412
- throw new Error("Git 差异输入的 path 必须是字符串");
452
+ throw new Error(t("ui.main.f1d20e0c6fa6", "Git diff input path must be a string"));
413
453
  if (staged !== undefined && typeof staged !== "boolean")
414
- throw new Error("Git 差异输入的 staged 必须是布尔值");
454
+ throw new Error(t("ui.main.bebd7c4f895a", "Git diff input staged must be a boolean"));
415
455
  return {
416
456
  ...(path === undefined ? {} : { path }),
417
457
  ...(staged === undefined ? {} : { staged }),
@@ -0,0 +1,48 @@
1
+ // Generated from pi-web-plugins/git/gitStatusCache.ts. Do not edit directly.
2
+ /** Completed snapshots are shared; cancellable scans belong to their exact invocation signal. */
3
+ export class GitStatusCache {
4
+ scan;
5
+ now;
6
+ entries = new Map();
7
+ constructor(scan, now = Date.now) {
8
+ this.scan = scan;
9
+ this.now = now;
10
+ }
11
+ get(key, cwd, signal, force = false) {
12
+ signal.throwIfAborted();
13
+ const entry = this.entries.get(key) ?? { expires: 0, generation: 0, pending: new Map() };
14
+ const pending = entry.pending.get(signal);
15
+ if (pending !== undefined)
16
+ return pending;
17
+ if (!force && entry.value !== undefined && entry.expires > this.now())
18
+ return Promise.resolve(entry.value);
19
+ this.entries.set(key, entry);
20
+ if (force)
21
+ delete entry.value;
22
+ const generation = ++entry.generation;
23
+ const request = Promise.resolve().then(() => this.scan(cwd, signal)).then((status) => {
24
+ signal.throwIfAborted();
25
+ if (entry.generation === generation) {
26
+ if (status.isGitRepo) {
27
+ entry.value = status;
28
+ entry.expires = this.now() + 2000;
29
+ }
30
+ else
31
+ delete entry.value;
32
+ }
33
+ return status;
34
+ }).catch((error) => {
35
+ if (entry.generation === generation)
36
+ delete entry.value;
37
+ throw error;
38
+ }).finally(() => {
39
+ entry.pending.delete(signal);
40
+ for (const [oldKey, old] of this.entries) {
41
+ if (old.pending.size === 0 && (old.value === undefined || old.expires <= this.now()))
42
+ this.entries.delete(oldKey);
43
+ }
44
+ });
45
+ entry.pending.set(signal, request);
46
+ return request;
47
+ }
48
+ }
@@ -0,0 +1,7 @@
1
+ // Generated from pi-web-plugins/git/i18n.ts. Do not edit directly.
2
+ let translate;
3
+ export function setTranslator(value) {
4
+ translate = value;
5
+ }
6
+ export const t = (key, fallback, params) => translate?.(key, fallback, params)
7
+ ?? fallback.replace(/\{([A-Za-z0-9_]+)\}/g, (match, name) => String(params?.[name] ?? match));
@@ -6,6 +6,7 @@
6
6
  "plugins": [
7
7
  {
8
8
  "id": "git",
9
+ "browserRoot": "browser",
9
10
  "module": "browser/pi-web-plugin.js",
10
11
  "serverModule": "server-plugin.js",
11
12
  "machineSpecific": true
@@ -1,47 +1,68 @@
1
1
  // Generated from pi-web-plugins/git/server-plugin.ts. Do not edit directly.
2
+ import { t, setTranslator } from "./i18n.js";
2
3
  import { basename, resolve } from "node:path";
3
4
  import { requestGitBackend } from "./git-backend.js";
5
+ import { createWorkspaceDiscoveryHooks } from "./workspaceDiscoveryHooks.js";
4
6
  const GIT_LOCAL_ENV_VARS = Object.freeze([
5
7
  "GIT_ALTERNATE_OBJECT_DIRECTORIES",
6
8
  "GIT_COMMON_DIR",
9
+ "GIT_CONFIG",
10
+ "GIT_CONFIG_COUNT",
11
+ "GIT_CONFIG_PARAMETERS",
7
12
  "GIT_DIR",
13
+ "GIT_GRAFT_FILE",
14
+ "GIT_IMPLICIT_WORK_TREE",
8
15
  "GIT_INDEX_FILE",
16
+ "GIT_NO_REPLACE_OBJECTS",
9
17
  "GIT_OBJECT_DIRECTORY",
10
18
  "GIT_PREFIX",
11
19
  "GIT_QUARANTINE_PATH",
20
+ "GIT_REPLACE_REF_BASE",
21
+ "GIT_SHALLOW_FILE",
12
22
  "GIT_WORK_TREE",
13
23
  ]);
14
24
  const plugin = {
15
- apiVersion: 1,
25
+ apiVersion: 3,
16
26
  name: "Git",
17
27
  activate(context) {
18
- return { workspaceProvider: createGitWorkspaceProvider(context) };
28
+ setTranslator(context.translate);
29
+ return {
30
+ workspaceProvider: createGitWorkspaceProvider(context, process.env["PI_WEB_INSTANCE_NAMESPACE"] ?? ""),
31
+ peer: { request: (request) => requestGitBackend(context, request) },
32
+ };
19
33
  },
20
34
  };
21
35
  export default plugin;
22
- export function createGitWorkspaceProvider(context) {
36
+ export function createGitWorkspaceProvider(context, instanceNamespace = "") {
23
37
  return Object.freeze({
24
38
  fallback: true,
39
+ integration: createWorkspaceDiscoveryHooks(context, (cwd, args, signal) => runGit(context, cwd, args, signal), process.execPath, instanceNamespace),
25
40
  async probe(project, signal) {
26
41
  const result = await runGit(context, project.path, ["rev-parse", "--is-inside-work-tree"], signal);
27
42
  if (result.signal !== null)
28
- throw new Error(`git repository probe ended from signal ${result.signal}`);
43
+ throw new Error(t("ui.main.8919cbc9c0bd", "Git repository probe ended with signal {arg0}", { arg0: result.signal }));
29
44
  if (result.exitCode !== 0)
30
45
  return "pass";
31
- return result.stdout.trim() === "true" ? "claim" : "pass";
46
+ if (result.stdout.trim() !== "true")
47
+ return "pass";
48
+ const root = await requireGit(runGit(context, project.path, ["rev-parse", "--show-toplevel"], signal), t("ui.main.49c35c822771", "resolve the Git worktree root"));
49
+ if (root.stdout.trim() === "")
50
+ throw new Error(t("ui.main.f1639c9e2fd7", "Git returned an empty worktree root"));
51
+ // A folder project keeps its cwd; only checkout roots own worktree discovery.
52
+ return resolve(root.stdout.trim()) === resolve(project.path) ? "claim" : "pass";
32
53
  },
33
54
  async list(project, signal) {
34
- const rootResult = await requireGit(runGit(context, project.path, ["rev-parse", "--show-toplevel"], signal), "解析 Git 工作树根目录");
55
+ const rootResult = await requireGit(runGit(context, project.path, ["rev-parse", "--show-toplevel"], signal), t("ui.main.49c35c822771", "resolve the Git worktree root"));
35
56
  const mainRootOutput = rootResult.stdout.trim();
36
57
  if (mainRootOutput === "")
37
- throw new Error("Git 返回了空的工作树根目录");
58
+ throw new Error(t("ui.main.f1639c9e2fd7", "Git returned an empty worktree root"));
38
59
  const mainRoot = resolve(mainRootOutput);
39
- const commonDirectoryResult = await requireGit(runGit(context, project.path, ["rev-parse", "--git-common-dir"], signal), "resolve the Git common directory");
60
+ const commonDirectoryResult = await requireGit(runGit(context, project.path, ["rev-parse", "--git-common-dir"], signal), t("ui.main.d59fce8c03cf", "resolve the Git common directory"));
40
61
  const commonDirectoryOutput = commonDirectoryResult.stdout.trim();
41
62
  if (commonDirectoryOutput === "")
42
- throw new Error("Git 返回了空的公共目录");
63
+ throw new Error(t("ui.main.8d51c7fbda53", "Git returned an empty common directory"));
43
64
  const commonDirectory = resolve(project.path, commonDirectoryOutput);
44
- const listResult = await requireGit(runGit(context, project.path, ["worktree", "list", "--porcelain", "-z"], signal), "列出 Git 工作树");
65
+ const listResult = await requireGit(runGit(context, project.path, ["worktree", "list", "--porcelain", "-z"], signal), t("ui.main.09734cee0f68", "list Git worktrees"));
45
66
  const worktrees = parseGitWorktreeList(listResult.stdout)
46
67
  .filter((worktree) => worktree.bare !== true)
47
68
  .map((worktree) => {
@@ -60,7 +81,7 @@ export function createGitWorkspaceProvider(context) {
60
81
  if (selectable.length === 0)
61
82
  return [singleGitWorkspace(project)];
62
83
  return selectable.map(({ worktree, path, isMain }) => {
63
- const label = worktree.branch ?? (worktree.detached === true ? "游离 HEAD" : basename(worktree.path) || worktree.path);
84
+ const label = worktree.branch ?? (worktree.detached === true ? t("ui.workspaceGitPanel.detachedHead", "Detached HEAD") : basename(worktree.path) || worktree.path);
64
85
  return {
65
86
  key: path,
66
87
  path,
@@ -80,22 +101,21 @@ export function createGitWorkspaceProvider(context) {
80
101
  };
81
102
  });
82
103
  },
83
- request: (request) => requestGitBackend(context, request),
84
104
  async prepareRemove({ project, workspace, signal }) {
85
105
  const privatePath = gitPrivateWorktreePath(workspace);
86
106
  if (resolve(privatePath) !== workspace.path) {
87
- throw new Error("Git 工作区删除数据与当前工作区路径不再匹配");
107
+ throw new Error(t("ui.main.ee323b371b28", "Git workspace removal data no longer matches the current workspace path"));
88
108
  }
89
- const listResult = await requireGit(runGit(context, project.path, ["worktree", "list", "--porcelain", "-z"], signal), "删除前验证 Git 工作树");
109
+ const listResult = await requireGit(runGit(context, project.path, ["worktree", "list", "--porcelain", "-z"], signal), t("ui.main.67b7774d37e3", "validate the Git worktree before removal"));
90
110
  const current = parseGitWorktreeList(listResult.stdout)
91
111
  .find((worktree) => resolve(worktree.path) === workspace.path);
92
112
  if (current === undefined || current.prunable === true) {
93
- throw new Error("Git 工作树已不可用于删除");
113
+ throw new Error(t("ui.main.2eaaec45ffc2", "Git worktree is no longer available for removal"));
94
114
  }
95
115
  if (current.bare === true)
96
- throw new Error("裸 Git 仓库不能作为链接工作树删除");
116
+ throw new Error(t("ui.main.e316bd0c1e32", "A bare Git workspace cannot be removed as a linked worktree"));
97
117
  return {
98
- title: `删除工作区:${workspace.label}`,
118
+ title: t("ui.shared.168f8f19045c", "Delete workspace: {workspace}", { workspace: workspace.label }),
99
119
  command: `git worktree remove ${shellQuote(workspace.path)}`,
100
120
  };
101
121
  },
@@ -137,18 +157,18 @@ function singleGitWorkspace(project) {
137
157
  }
138
158
  function gitRemovalPresentation(label, path) {
139
159
  return {
140
- actionLabel: "删除工作区",
141
- confirmation: `删除工作区 ${label}?\n\n此操作将运行 git worktree remove 并删除:\n${path}\n\n不会删除对应的 Git 分支。`,
160
+ actionLabel: t("client.actions.delete.workspace.1bca7e", "Delete workspace"),
161
+ confirmation: t("ui.main.8e2b2416adcd", "Delete workspace {arg0}?\n\nThis runs git worktree remove and deletes:\n{arg1}\n\nThe corresponding Git branch will not be deleted.", { arg0: label, arg1: path }),
142
162
  };
143
163
  }
144
164
  function gitPrivateWorktreePath(workspace) {
145
165
  const data = workspace.data;
146
166
  if (typeof data !== "object" || data === null || Array.isArray(data)) {
147
- throw new Error("Git 工作区删除数据不可用");
167
+ throw new Error(t("ui.main.b6c981521483", "Git workspace removal data is unavailable"));
148
168
  }
149
169
  const path = Reflect.get(data, "worktreePath");
150
170
  if (typeof path !== "string" || path === "")
151
- throw new Error("用于删除的 Git 工作树路径不可用");
171
+ throw new Error(t("ui.main.2f42169d50eb", "Git worktree path is unavailable for removal"));
152
172
  return path;
153
173
  }
154
174
  function shellQuote(value) {
@@ -159,10 +179,11 @@ async function runGit(context, cwd, args, signal) {
159
179
  file: "git",
160
180
  args: ["-C", cwd, ...args],
161
181
  unsetEnv: GIT_LOCAL_ENV_VARS,
182
+ timeoutMs: 10_000,
162
183
  signal,
163
184
  });
164
185
  if (result.stdoutTruncated || result.stderrTruncated) {
165
- throw new Error(`git ${args.join(" ")} exceeded the host output limit`);
186
+ throw new Error(t("ui.main.f1dbb26bf138", "git {arg0} exceeded the host output limit", { arg0: args.join(" ") }));
166
187
  }
167
188
  return result;
168
189
  }
@@ -171,6 +192,6 @@ async function requireGit(resultPromise, action) {
171
192
  if (result.signal === null && result.exitCode === 0)
172
193
  return result;
173
194
  const detail = result.stderr.trim();
174
- const outcome = result.signal === null ? `exit ${String(result.exitCode)}` : `signal ${result.signal}`;
175
- throw new Error(`Unable to ${action} (${outcome})${detail === "" ? "" : `: ${detail}`}`);
195
+ const outcome = result.signal === null ? t("client.shellMessages.exit.code.2beadf", "Exit code {value1}", { value1: String(result.exitCode) }) : t("ui.main.c008196ee907", "signal {arg0}", { arg0: result.signal });
196
+ throw new Error(t("ui.main.0def9a625382", "Could not {arg0} ({arg1}){arg2}", { arg0: action, arg1: outcome, arg2: detail === "" ? "" : `:${detail}` }));
176
197
  }
@@ -0,0 +1,14 @@
1
+ // Packaged with PI WEB: best-effort discovery hint, never Git authority.
2
+ const { spawnSync } = require("node:child_process");
3
+ const [notification, ...args] = process.argv.slice(2);
4
+
5
+ // Initial worktree checkout has a null previous OID and branch flag 1.
6
+ // --no-checkout skips this hook; ordinary catalog access still discovers it.
7
+ if (args.length === 3 && /^(?:0{40}|0{64})$/.test(args[0]) && args[2] === "1") {
8
+ try {
9
+ const command = JSON.parse(notification);
10
+ if (Array.isArray(command) && command.length > 0 && command.every((value) => typeof value === "string")) {
11
+ spawnSync(command[0], command.slice(1), { stdio: "ignore", timeout: 2000, killSignal: "SIGKILL" });
12
+ }
13
+ } catch { /* Invalid arguments, missing commands, and daemon failures must not affect Git. */ }
14
+ }