@chainingintention/pi-web-cn 2.0.0 → 2.202610.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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-BXSziMEg.js +4921 -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-cdtUOfOW.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 +155 -77
  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,127 +1,129 @@
1
1
  import { writeFileSync } from "node:fs";
2
+ import { createTranslator } from "../../shared/i18n.js";
2
3
  import { DEFAULT_NORMAL_TOOL_AUDIT_MAX_ROWS, effectivePiWebConfig } from "../../config.js";
3
4
  import { normalToolAuditDatabasePath, normalToolAuditStats, pruneNormalToolAudit, queryNormalToolAudit, vacuumNormalToolAudit, } from "./normalToolAuditStore.js";
4
5
  export function runNormalToolAuditCommand(args, options = {}) {
6
+ const t = options.translator ?? createTranslator("en", {});
5
7
  const [subcommand, ...optionArgs] = args;
6
8
  if (subcommand === undefined || subcommand === "help" || subcommand === "--help" || subcommand === "-h") {
7
- (options.stdout ?? console.log)(normalToolAuditHelp());
9
+ (options.stdout ?? console.log)(normalToolAuditHelp(t));
8
10
  return;
9
11
  }
10
- const values = parseOptions(optionArgs);
12
+ const values = parseOptions(optionArgs, t);
11
13
  const path = options.databasePath ?? normalToolAuditDatabasePath();
12
14
  const now = options.now?.() ?? new Date();
13
15
  const stdout = options.stdout ?? console.log;
14
16
  if (subcommand === "list") {
15
- requireAllowedOptions(values, ["since", "status", "session", "tool", "limit"]);
16
- for (const row of queryNormalToolAudit(path, auditQuery(values, now)))
17
+ requireAllowedOptions(values, ["since", "status", "session", "tool", "limit"], t);
18
+ for (const row of queryNormalToolAudit(path, auditQuery(values, now, 100, t)))
17
19
  stdout(JSON.stringify(row));
18
20
  return;
19
21
  }
20
22
  if (subcommand === "stats") {
21
- requireAllowedOptions(values, ["since"]);
22
- stdout(JSON.stringify(normalToolAuditStats(path, optionalBoundary(values.get("since"), now)), null, 2));
23
+ requireAllowedOptions(values, ["since"], t);
24
+ stdout(JSON.stringify(normalToolAuditStats(path, optionalBoundary(values.get("since"), now, t)), null, 2));
23
25
  return;
24
26
  }
25
27
  if (subcommand === "export") {
26
- requireAllowedOptions(values, ["since", "status", "session", "tool", "limit", "format", "output"]);
28
+ requireAllowedOptions(values, ["since", "status", "session", "tool", "limit", "format", "output"], t);
27
29
  const format = values.get("format") ?? "jsonl";
28
30
  if (format !== "jsonl" && format !== "csv")
29
- throw new Error("--format must be jsonl or csv");
30
- const output = requiredOption(values, "output");
31
- const rows = queryNormalToolAudit(path, auditQuery(values, now, 10_000));
31
+ throw new Error(t("audit.invalidFormat", "--format must be jsonl or csv"));
32
+ const output = requiredOption(values, "output", t);
33
+ const rows = queryNormalToolAudit(path, auditQuery(values, now, 10_000, t));
32
34
  (options.writeOutput ?? ((target, content) => { writeFileSync(target, content, "utf8"); }))(output, format === "csv" ? rowsCsv(rows) : rowsJsonl(rows));
33
- stdout(`Exported ${String(rows.length)} audit rows to ${output}`);
35
+ stdout(t("audit.exported", "Exported {count} audit rows to {path}", { count: rows.length, path: output }));
34
36
  return;
35
37
  }
36
38
  if (subcommand === "prune") {
37
- requireAllowedOptions(values, ["before"]);
38
- const before = parseBoundary(requiredOption(values, "before"), now);
39
+ requireAllowedOptions(values, ["before"], t);
40
+ const before = parseBoundary(requiredOption(values, "before", t), now, t);
39
41
  const maxRows = options.maxRows ?? effectivePiWebConfig().config.auditLog?.normalMode?.maxRows ?? DEFAULT_NORMAL_TOOL_AUDIT_MAX_ROWS;
40
- stdout(`Deleted ${String(pruneNormalToolAudit(path, before, maxRows))} audit rows`);
42
+ stdout(t("audit.pruned", "Deleted {count} audit rows", { count: pruneNormalToolAudit(path, before, maxRows) }));
41
43
  return;
42
44
  }
43
45
  if (subcommand === "vacuum") {
44
- requireAllowedOptions(values, []);
46
+ requireAllowedOptions(values, [], t);
45
47
  vacuumNormalToolAudit(path);
46
- stdout("Audit database vacuum completed");
48
+ stdout(t("audit.vacuumed", "Audit database vacuum completed"));
47
49
  return;
48
50
  }
49
- throw new Error(`Unknown audit command: ${subcommand}`);
51
+ throw new Error(t("audit.unknownCommand", "Unknown audit command: {command}", { command: subcommand }));
50
52
  }
51
- export function normalToolAuditHelp() {
52
- return `PI WEB ordinary-mode tool audit
53
+ export function normalToolAuditHelp(t = createTranslator("en", {})) {
54
+ return t("audit.help", `PI WEB ordinary-mode tool audit
53
55
 
54
56
  Usage:
55
57
  pi-web audit list [--since 24h] [--status failed] [--session ID] [--tool NAME] [--limit 100]
56
58
  pi-web audit stats [--since 30d]
57
59
  pi-web audit export --output FILE [--format jsonl|csv] [--since 30d] [--status STATUS] [--session ID] [--tool NAME] [--limit 10000]
58
60
  pi-web audit prune --before DATE
59
- pi-web audit vacuum`;
61
+ pi-web audit vacuum`);
60
62
  }
61
- function parseOptions(args) {
63
+ function parseOptions(args, t) {
62
64
  const values = new Map();
63
65
  for (let index = 0; index < args.length; index += 1) {
64
66
  const argument = args[index];
65
67
  if (argument === undefined || !argument.startsWith("--") || argument.length === 2)
66
- throw new Error(`Unexpected audit argument: ${argument ?? ""}`);
68
+ throw new Error(t("audit.unexpectedArgument", "Unexpected audit argument: {argument}", { argument: argument ?? "" }));
67
69
  const name = argument.slice(2);
68
70
  if (values.has(name))
69
- throw new Error(`Audit option --${name} was provided more than once`);
71
+ throw new Error(t("audit.duplicateOption", "Audit option --{name} was provided more than once", { name }));
70
72
  const value = args[index + 1];
71
73
  if (value === undefined || value.startsWith("--"))
72
- throw new Error(`Audit option --${name} requires a value`);
74
+ throw new Error(t("audit.optionValueRequired", "Audit option --{name} requires a value", { name }));
73
75
  values.set(name, value);
74
76
  index += 1;
75
77
  }
76
78
  return values;
77
79
  }
78
- function requireAllowedOptions(values, allowed) {
80
+ function requireAllowedOptions(values, allowed, t) {
79
81
  const allowedSet = new Set(allowed);
80
82
  const unknown = [...values.keys()].find((key) => !allowedSet.has(key));
81
83
  if (unknown !== undefined)
82
- throw new Error(`Audit command does not support --${unknown}`);
84
+ throw new Error(t("audit.unsupportedOption", "Audit command does not support --{name}", { name: unknown }));
83
85
  }
84
- function auditQuery(values, now, defaultLimit = 100) {
86
+ function auditQuery(values, now, defaultLimit, t) {
85
87
  const status = values.get("status");
86
88
  return {
87
- ...(values.get("since") === undefined ? {} : { since: parseBoundary(requiredOption(values, "since"), now) }),
88
- ...(status === undefined ? {} : { status: parseStatus(status) }),
89
- ...(values.get("session") === undefined ? {} : { sessionId: requiredOption(values, "session") }),
90
- ...(values.get("tool") === undefined ? {} : { toolName: requiredOption(values, "tool") }),
91
- limit: values.get("limit") === undefined ? defaultLimit : positiveInteger(requiredOption(values, "limit"), "--limit"),
89
+ ...(values.get("since") === undefined ? {} : { since: parseBoundary(requiredOption(values, "since", t), now, t) }),
90
+ ...(status === undefined ? {} : { status: parseStatus(status, t) }),
91
+ ...(values.get("session") === undefined ? {} : { sessionId: requiredOption(values, "session", t) }),
92
+ ...(values.get("tool") === undefined ? {} : { toolName: requiredOption(values, "tool", t) }),
93
+ limit: values.get("limit") === undefined ? defaultLimit : positiveInteger(requiredOption(values, "limit", t), "--limit", t),
92
94
  };
93
95
  }
94
- function optionalBoundary(value, now) {
95
- return value === undefined ? undefined : parseBoundary(value, now);
96
+ function optionalBoundary(value, now, t) {
97
+ return value === undefined ? undefined : parseBoundary(value, now, t);
96
98
  }
97
- function parseBoundary(value, now) {
99
+ function parseBoundary(value, now, t) {
98
100
  const duration = /^(\d+)(m|h|d)$/u.exec(value);
99
101
  if (duration !== null) {
100
- const amount = positiveInteger(duration[1] ?? "", "time range");
102
+ const amount = positiveInteger(duration[1] ?? "", t("audit.timeRange", "time range"), t);
101
103
  const unit = duration[2];
102
104
  const multiplier = unit === "m" ? 60_000 : unit === "h" ? 3_600_000 : 86_400_000;
103
105
  return new Date(now.getTime() - amount * multiplier);
104
106
  }
105
107
  const parsed = new Date(value);
106
108
  if (Number.isNaN(parsed.getTime()))
107
- throw new Error(`Invalid audit time boundary: ${value}`);
109
+ throw new Error(t("audit.invalidTime", "Invalid audit time boundary: {value}", { value }));
108
110
  return parsed;
109
111
  }
110
- function parseStatus(value) {
112
+ function parseStatus(value, t) {
111
113
  if (value === "started" || value === "completed" || value === "failed" || value === "interrupted")
112
114
  return value;
113
- throw new Error("--status must be started, completed, failed, or interrupted");
115
+ throw new Error(t("audit.invalidStatus", "--status must be started, completed, failed, or interrupted"));
114
116
  }
115
- function positiveInteger(value, label) {
117
+ function positiveInteger(value, label, t) {
116
118
  const number = Number(value);
117
119
  if (!Number.isSafeInteger(number) || number < 1)
118
- throw new Error(`${label} must be a positive integer`);
120
+ throw new Error(t("audit.positiveInteger", "{label} must be a positive integer", { label }));
119
121
  return number;
120
122
  }
121
- function requiredOption(values, name) {
123
+ function requiredOption(values, name, t) {
122
124
  const value = values.get(name);
123
125
  if (value === undefined || value === "")
124
- throw new Error(`Audit option --${name} is required`);
126
+ throw new Error(t("audit.optionRequired", "Audit option --{name} is required", { name }));
125
127
  return value;
126
128
  }
127
129
  function rowsJsonl(rows) {
@@ -1 +1 @@
1
- {"version":3,"file":"normalToolAuditCli.js","sourceRoot":"","sources":["../../../src/server/audit/normalToolAuditCli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"normalToolAuditCli.js","sourceRoot":"","sources":["../../../src/server/audit/normalToolAuditCli.ts"],"names":[],"mappings":"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"}
@@ -1,34 +1,51 @@
1
1
  /**
2
- * Remove provider-only thinking data at the browser transport boundary. The
3
- * runtime message remains unchanged because only affected messages and content
4
- * blocks are copied.
2
+ * Strip provider-only thinking data and optionally reference images at the
3
+ * browser transport boundary. Runtime messages stay unchanged: only affected
4
+ * messages and content blocks are copied.
5
5
  */
6
- export function projectBrowserMessage(message) {
6
+ export function projectBrowserMessage(message, images) {
7
7
  if (!isRecord(message))
8
8
  return message;
9
9
  const originalContent = message["content"];
10
- if (!isUnknownArray(originalContent))
11
- return message;
12
- const content = mapChanged(originalContent, (part) => {
13
- if (!isRecord(part) || part["type"] !== "thinking" || !Object.hasOwn(part, "thinkingSignature"))
14
- return part;
15
- const projected = { ...part };
16
- delete projected["thinkingSignature"];
17
- return projected;
18
- });
10
+ const content = projectBrowserContent(originalContent, images);
19
11
  return content === originalContent ? message : { ...message, content };
20
12
  }
21
- export function projectBrowserMessageResponse(response) {
22
- if (Array.isArray(response))
23
- return mapChanged(response, projectBrowserMessage);
24
- const messages = mapChanged(response.messages, projectBrowserMessage);
13
+ function projectBrowserContent(content, images) {
14
+ if (isUnknownArray(content))
15
+ return mapChanged(content, (part) => projectBrowserContent(part, images));
16
+ if (!isRecord(content))
17
+ return content;
18
+ if (content["type"] === "image" && images !== undefined)
19
+ return images(content) ?? content;
20
+ if (content["type"] !== "thinking" || !Object.hasOwn(content, "thinkingSignature"))
21
+ return content;
22
+ const projected = { ...content };
23
+ delete projected["thinkingSignature"];
24
+ return projected;
25
+ }
26
+ export function projectBrowserMessageResponse(response, images) {
27
+ const messages = mapChanged(response.messages, (message) => projectBrowserMessage(message, images));
25
28
  return messages === response.messages ? response : { ...response, messages };
26
29
  }
27
- export function projectBrowserSessionEvent(event) {
28
- if (event.type !== "message.end" || event.message === undefined)
29
- return event;
30
- const message = projectBrowserMessage(event.message);
31
- return message === event.message ? event : { ...event, message };
30
+ export function projectBrowserStreamSnapshot(snapshot, images) {
31
+ const partial = projectBrowserMessage(snapshot.partial, images);
32
+ return partial === snapshot.partial ? snapshot : { ...snapshot, partial };
33
+ }
34
+ export function projectBrowserTranscriptSnapshot(snapshot, images) {
35
+ const stream = projectBrowserStreamSnapshot(snapshot, images);
36
+ const page = projectBrowserMessageResponse(snapshot.page, images);
37
+ return page === snapshot.page ? stream : { ...stream, page };
38
+ }
39
+ export function projectBrowserSessionEvent(event, images) {
40
+ if ((event.type === "assistant.start" || event.type === "message.end" || event.type === "message.append") && event.message !== undefined) {
41
+ const message = projectBrowserMessage(event.message, images);
42
+ return message === event.message ? event : { ...event, message };
43
+ }
44
+ if (event.type === "tool.end" || event.type === "tool.update") {
45
+ const content = projectBrowserContent(event.content, images);
46
+ return content === event.content ? event : { ...event, content };
47
+ }
48
+ return event;
32
49
  }
33
50
  function mapChanged(values, project) {
34
51
  let projectedValues;
@@ -1 +1 @@
1
- {"version":3,"file":"browserMessageProjection.js","sourceRoot":"","sources":["../../src/server/browserMessageProjection.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC;IACvC,MAAM,eAAe,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAC3C,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC;QAAE,OAAO,OAAO,CAAC;IAErD,MAAM,OAAO,GAAG,UAAU,CAAC,eAAe,EAAE,CAAC,IAAI,EAAE,EAAE;QACnD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,mBAAmB,CAAC;YAAE,OAAO,IAAI,CAAC;QAC7G,MAAM,SAAS,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAC,mBAAmB,CAAC,CAAC;QACtC,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,KAAK,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,QAAiC;IAC7E,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;QAAE,OAAO,UAAU,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC;IAChF,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC;IACtE,OAAO,QAAQ,KAAK,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,EAAE,QAAQ,EAAE,CAAC;AAC/E,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,KAAqB;IAC9D,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAC9E,MAAM,OAAO,GAAG,qBAAqB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACrD,OAAO,OAAO,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,CAAC;AACnE,CAAC;AAED,SAAS,UAAU,CAAI,MAAW,EAAE,OAAwB;IAC1D,IAAI,eAAgC,CAAC;IACrC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;YAClC,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;gBACxB,KAAK,IAAI,CAAC,CAAC;gBACX,SAAS;YACX,CAAC;YACD,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC3C,CAAC;QACD,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAChC,KAAK,IAAI,CAAC,CAAC;IACb,CAAC;IACD,OAAO,eAAe,IAAI,MAAM,CAAC;AACnC,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC"}
1
+ {"version":3,"file":"browserMessageProjection.js","sourceRoot":"","sources":["../../src/server/browserMessageProjection.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,16 @@
1
- import { agentDirEnvSource, hasAgentDirEnvOverride, hasAgentSessionDirEnvOverride, loadPiWebConfig, parseAgentConfig, parseUploadsConfig, resolveEffectivePiWebConfig, savePiWebConfig } from "../config.js";
1
+ import { UserFacingError, createTranslator, userFacingErrorMessage } from "../shared/i18n.js";
2
+ import { agentDirEnvSource, hasAgentDirEnvOverride, hasAgentSessionDirEnvOverride, loadPiWebConfig, parseAgentConfig, parseAttachmentsConfig, parseUploadsConfig, resolveEffectivePiWebConfig, savePiWebConfig } from "../config.js";
3
+ import { requireDefaultThemePreference } from "../shared/themePreference.js";
4
+ import { requireDefaultStreamingBehavior } from "../shared/streamingBehavior.js";
2
5
  import { isPiWebPluginId } from "../shared/pluginIds.js";
3
6
  import { parsePiWebConfigRequest } from "../shared/piWebConfigParsing.js";
4
7
  export const SELECTED_MACHINE_CONFIG_KEYS = [
5
8
  "plugins",
6
9
  "pathAccess",
7
10
  "uploads",
11
+ "attachments",
8
12
  "maxUploadBytes",
13
+ "sessionNaming",
9
14
  "spawnSessions",
10
15
  "subsessions",
11
16
  "askUser",
@@ -33,13 +38,13 @@ export function currentPiWebConfigResponse(options = {}) {
33
38
  envOverrides: piWebConfigEnvOverrides(env),
34
39
  };
35
40
  }
36
- export function registerConfigRoutes(app, service = createFilePiWebConfigService()) {
41
+ export function registerConfigRoutes(app, service = createFilePiWebConfigService(), translate = createTranslator("en", {})) {
37
42
  app.get("/api/config", async (_request, reply) => {
38
43
  try {
39
44
  return await service.read();
40
45
  }
41
46
  catch (error) {
42
- return reply.code(500).send({ error: errorMessage(error) });
47
+ return reply.code(500).send({ error: userFacingErrorMessage(error, translate) });
43
48
  }
44
49
  });
45
50
  app.put("/api/config", async (request, reply) => {
@@ -48,17 +53,17 @@ export function registerConfigRoutes(app, service = createFilePiWebConfigService
48
53
  }
49
54
  catch (error) {
50
55
  const status = isConfigValidationError(error) ? 400 : 500;
51
- return reply.code(status).send({ error: errorMessage(error) });
56
+ return reply.code(status).send({ error: userFacingErrorMessage(error, translate) });
52
57
  }
53
58
  });
54
59
  }
55
- export function registerLocalMachineConfigRoutes(app, service = createFilePiWebConfigService()) {
60
+ export function registerLocalMachineConfigRoutes(app, service = createFilePiWebConfigService(), translate = createTranslator("en", {})) {
56
61
  app.get("/api/machines/local/config", async (_request, reply) => {
57
62
  try {
58
63
  return selectedMachineConfigResponse(await service.read());
59
64
  }
60
65
  catch (error) {
61
- return reply.code(500).send({ error: errorMessage(error) });
66
+ return reply.code(500).send({ error: userFacingErrorMessage(error, translate) });
62
67
  }
63
68
  });
64
69
  app.put("/api/machines/local/config", async (request, reply) => {
@@ -69,21 +74,29 @@ export function registerLocalMachineConfigRoutes(app, service = createFilePiWebC
69
74
  }
70
75
  catch (error) {
71
76
  const status = isConfigValidationError(error) ? 400 : 500;
72
- return reply.code(status).send({ error: errorMessage(error) });
77
+ return reply.code(status).send({ error: userFacingErrorMessage(error, translate) });
73
78
  }
74
79
  });
75
80
  }
76
81
  export function parseSelectedMachineConfigRequest(value, agentPathHost = "current") {
77
82
  if (!isRecord(value))
78
- throw new Error("PI WEB selected-machine config update must include a config object");
83
+ throw new UserFacingError("configError.pi.web.selected.machine.config.update.must.include.a.config.object.14b6bb", "PI WEB selected-machine config update must include a config object");
79
84
  for (const key of Object.keys(value)) {
80
85
  if (!SELECTED_MACHINE_CONFIG_KEY_SET.has(key))
81
- throw new Error(`PI WEB selected-machine config key is not allowed: ${key}`);
86
+ throw new UserFacingError("configError.pi.web.selected.machine.config.key.is.not.allowed.field.f05005", "PI WEB selected-machine config key is not allowed: {value1}", { value1: key });
82
87
  }
83
88
  try {
84
89
  return pickSelectedMachineConfig(parseConfigRequest(value, agentPathHost));
85
90
  }
86
91
  catch (error) {
92
+ if (error instanceof UserFacingError) {
93
+ const fallback = error.fallback.startsWith("PI WEB config ")
94
+ ? `PI WEB selected-machine config ${error.fallback.slice("PI WEB config ".length)}`
95
+ : `PI WEB selected-machine config ${error.fallback}`;
96
+ const wrapped = new UserFacingError(`${error.messageKey}.selectedMachine`, fallback, error.parameters);
97
+ Object.defineProperty(wrapped, "cause", { value: error, configurable: true, writable: true });
98
+ throw wrapped;
99
+ }
87
100
  throw new Error(selectedMachineConfigErrorMessage(error), { cause: error });
88
101
  }
89
102
  }
@@ -109,7 +122,7 @@ export function parsePiWebConfigResponseBody(value, source = "PI WEB config resp
109
122
  }
110
123
  function parseConfigRequest(value, agentPathHost = "current") {
111
124
  if (!isRecord(value))
112
- throw new Error("PI WEB config update must include a config object");
125
+ throw new UserFacingError("configError.pi.web.config.update.must.include.a.config.object.ec8277", "PI WEB config update must include a config object");
113
126
  const config = parsePiWebConfigRequest(value);
114
127
  const host = value["host"];
115
128
  const port = value["port"];
@@ -118,6 +131,7 @@ function parseConfigRequest(value, agentPathHost = "current") {
118
131
  const plugins = value["plugins"];
119
132
  const pathAccess = value["pathAccess"];
120
133
  const uploads = value["uploads"];
134
+ const attachments = value["attachments"];
121
135
  const maxUploadBytes = value["maxUploadBytes"];
122
136
  const spawnSessions = value["spawnSessions"];
123
137
  const subsessions = value["subsessions"];
@@ -125,39 +139,45 @@ function parseConfigRequest(value, agentPathHost = "current") {
125
139
  const agent = value["agent"];
126
140
  if (host !== undefined) {
127
141
  if (typeof host !== "string")
128
- throw new Error("PI WEB config host must be a string");
142
+ throw new UserFacingError("configError.pi.web.config.host.must.be.a.string.c8d259", "PI WEB config host must be a string");
129
143
  config.host = host;
130
144
  }
131
145
  if (port !== undefined) {
132
146
  if (typeof port !== "number")
133
- throw new Error("PI WEB config port must be a number");
147
+ throw new UserFacingError("configError.pi.web.config.port.must.be.a.number.8ac8cd", "PI WEB config port must be a number");
134
148
  config.port = port;
135
149
  }
136
150
  if (allowedHosts !== undefined)
137
151
  config.allowedHosts = parseAllowedHostsRequest(allowedHosts);
138
152
  if (shortcuts !== undefined)
139
153
  config.shortcuts = parseShortcutsRequest(shortcuts);
154
+ if (value["defaultTheme"] !== undefined)
155
+ config.defaultTheme = requireDefaultThemePreference(value["defaultTheme"], "request");
156
+ if (value["defaultStreamingBehavior"] !== undefined)
157
+ config.defaultStreamingBehavior = requireDefaultStreamingBehavior(value["defaultStreamingBehavior"], "request");
140
158
  if (plugins !== undefined)
141
159
  config.plugins = parsePluginsRequest(plugins);
142
160
  if (pathAccess !== undefined)
143
161
  config.pathAccess = parsePathAccessRequest(pathAccess);
144
162
  if (uploads !== undefined)
145
163
  config.uploads = parseUploadsConfig(uploads, "request");
164
+ if (attachments !== undefined)
165
+ config.attachments = parseAttachmentsConfig(attachments, "request");
146
166
  if (maxUploadBytes !== undefined)
147
167
  config.maxUploadBytes = parseMaxUploadBytesRequest(maxUploadBytes);
148
168
  if (spawnSessions !== undefined) {
149
169
  if (typeof spawnSessions !== "boolean")
150
- throw new Error("PI WEB config spawnSessions must be a boolean");
170
+ throw new UserFacingError("configError.pi.web.config.spawnsessions.must.be.a.boolean.344a04", "PI WEB config spawnSessions must be a boolean");
151
171
  config.spawnSessions = spawnSessions;
152
172
  }
153
173
  if (subsessions !== undefined) {
154
174
  if (typeof subsessions !== "boolean")
155
- throw new Error("PI WEB config subsessions must be a boolean");
175
+ throw new UserFacingError("configError.pi.web.config.subsessions.must.be.a.boolean.2777c0", "PI WEB config subsessions must be a boolean");
156
176
  config.subsessions = subsessions;
157
177
  }
158
178
  if (askUser !== undefined) {
159
179
  if (typeof askUser !== "boolean")
160
- throw new Error("PI WEB config askUser must be a boolean");
180
+ throw new UserFacingError("configError.pi.web.config.askuser.must.be.a.boolean.be8bd4", "PI WEB config askUser must be a boolean");
161
181
  config.askUser = askUser;
162
182
  }
163
183
  if (agent !== undefined)
@@ -169,7 +189,9 @@ function pickSelectedMachineConfig(config) {
169
189
  ...(config.plugins !== undefined ? { plugins: config.plugins } : {}),
170
190
  ...(config.pathAccess !== undefined ? { pathAccess: config.pathAccess } : {}),
171
191
  ...(config.uploads !== undefined ? { uploads: config.uploads } : {}),
192
+ ...(config.attachments !== undefined ? { attachments: config.attachments } : {}),
172
193
  ...(config.maxUploadBytes !== undefined ? { maxUploadBytes: config.maxUploadBytes } : {}),
194
+ ...(config.sessionNaming !== undefined ? { sessionNaming: config.sessionNaming } : {}),
173
195
  ...(config.spawnSessions !== undefined ? { spawnSessions: config.spawnSessions } : {}),
174
196
  ...(config.subsessions !== undefined ? { subsessions: config.subsessions } : {}),
175
197
  ...(config.askUser !== undefined ? { askUser: config.askUser } : {}),
@@ -186,22 +208,22 @@ function parseAllowedHostsRequest(value) {
186
208
  if (value === true)
187
209
  return true;
188
210
  if (!Array.isArray(value) || !value.every((item) => typeof item === "string")) {
189
- throw new Error("PI WEB config allowedHosts must be true or an array of strings");
211
+ throw new UserFacingError("configError.pi.web.config.allowedhosts.must.be.true.or.an.array.of.strings.4d8d83", "PI WEB config allowedHosts must be true or an array of strings");
190
212
  }
191
213
  return value;
192
214
  }
193
215
  function parseShortcutsRequest(value) {
194
216
  if (!isRecord(value))
195
- throw new Error("PI WEB config shortcuts must be an object");
217
+ throw new UserFacingError("configError.pi.web.config.shortcuts.must.be.an.object.146099", "PI WEB config shortcuts must be an object");
196
218
  return Object.fromEntries(Object.entries(value).map(([actionId, shortcut]) => {
197
219
  if (shortcut !== null && (typeof shortcut !== "string" || shortcut === ""))
198
- throw new Error("PI WEB config shortcut values must be non-empty strings or null");
220
+ throw new UserFacingError("configError.pi.web.config.shortcut.values.must.be.non.empty.strings.or.null.2025e9", "PI WEB config shortcut values must be non-empty strings or null");
199
221
  return [actionId, shortcut];
200
222
  }));
201
223
  }
202
224
  function parsePathAccessRequest(value) {
203
225
  if (!isRecord(value))
204
- throw new Error("PI WEB config pathAccess must be an object");
226
+ throw new UserFacingError("configError.pi.web.config.pathaccess.must.be.an.object.d7d8d2", "PI WEB config pathAccess must be an object");
205
227
  const allowedPaths = value["allowedPaths"];
206
228
  return {
207
229
  ...(allowedPaths === undefined ? {} : { allowedPaths: parseAllowedPathsRequest(allowedPaths) }),
@@ -209,7 +231,7 @@ function parsePathAccessRequest(value) {
209
231
  }
210
232
  function parseAllowedPathsRequest(value) {
211
233
  if (!isNonEmptyStringArray(value)) {
212
- throw new Error("PI WEB config pathAccess.allowedPaths must be an array of non-empty strings");
234
+ throw new UserFacingError("configError.pi.web.config.pathaccess.allowedpaths.must.be.an.array.of.non.empty.strings.5e0fd8", "PI WEB config pathAccess.allowedPaths must be an array of non-empty strings");
213
235
  }
214
236
  return value;
215
237
  }
@@ -218,7 +240,7 @@ function isNonEmptyStringArray(value) {
218
240
  }
219
241
  function parseMaxUploadBytesRequest(value) {
220
242
  if (typeof value !== "number" || !Number.isInteger(value) || value < 1)
221
- throw new Error("PI WEB config maxUploadBytes must be a positive integer");
243
+ throw new UserFacingError("configError.pi.web.config.maxuploadbytes.must.be.a.positive.integer.08d269", "PI WEB config maxUploadBytes must be a positive integer");
222
244
  return value;
223
245
  }
224
246
  function parseAgentRequest(value, pathHost) {
@@ -226,18 +248,18 @@ function parseAgentRequest(value, pathHost) {
226
248
  }
227
249
  function parsePluginsRequest(value) {
228
250
  if (!isRecord(value) || Array.isArray(value))
229
- throw new Error("PI WEB config plugins must be an object");
251
+ throw new UserFacingError("configError.pi.web.config.plugins.must.be.an.object.2d870f", "PI WEB config plugins must be an object");
230
252
  return Object.fromEntries(Object.entries(value).map(([pluginId, config]) => {
231
253
  if (!isPiWebPluginId(pluginId))
232
- throw new Error("PI WEB config plugin ids are invalid");
254
+ throw new UserFacingError("configError.pi.web.config.plugin.ids.are.invalid.674ddc", "PI WEB config plugin ids are invalid");
233
255
  if (!isRecord(config) || Array.isArray(config))
234
- throw new Error("PI WEB config plugin entries must be objects");
256
+ throw new UserFacingError("configError.pi.web.config.plugin.entries.must.be.objects.45e442", "PI WEB config plugin entries must be objects");
235
257
  const enabled = config["enabled"];
236
258
  if (enabled !== undefined && typeof enabled !== "boolean")
237
- throw new Error("PI WEB config plugin enabled values must be booleans");
259
+ throw new UserFacingError("configError.pi.web.config.plugin.enabled.values.must.be.booleans.ab8416", "PI WEB config plugin enabled values must be booleans");
238
260
  const settings = config["settings"];
239
261
  if (settings !== undefined && (!isRecord(settings) || Array.isArray(settings)))
240
- throw new Error("PI WEB config plugin settings must be objects");
262
+ throw new UserFacingError("configError.pi.web.config.plugin.settings.must.be.objects.efc582", "PI WEB config plugin settings must be objects");
241
263
  return [pluginId, config];
242
264
  }));
243
265
  }
@@ -249,8 +271,7 @@ function parsePiWebConfigEnvOverridesResponse(value, source) {
249
271
  allowedHosts: requireResponseBoolean(record, "allowedHosts", source),
250
272
  spawnSessions: requireResponseBoolean(record, "spawnSessions", source),
251
273
  subsessions: requireResponseBoolean(record, "subsessions", source),
252
- // Older responses predate the ask_user tool; treat a missing flag as "not overridden".
253
- askUser: optionalResponseBoolean(record, "askUser", source) ?? false,
274
+ askUser: requireResponseBoolean(record, "askUser", source),
254
275
  agentCommand: optionalResponseBoolean(record, "agentCommand", source) ?? false,
255
276
  agentDir: optionalResponseBoolean(record, "agentDir", source) ?? false,
256
277
  ...optionalAgentDirSource(record, source),
@@ -259,19 +280,19 @@ function parsePiWebConfigEnvOverridesResponse(value, source) {
259
280
  }
260
281
  function requireResponseRecord(value, source) {
261
282
  if (!isRecord(value))
262
- throw new Error(`${source} must be an object`);
283
+ throw new UserFacingError("configError.field.must.be.an.object.bab512", "{value1} must be an object", { value1: source });
263
284
  return value;
264
285
  }
265
286
  function requireResponseString(record, key, source) {
266
287
  const value = record[key];
267
288
  if (typeof value !== "string")
268
- throw new Error(`${source} field must be a string: ${key}`);
289
+ throw new UserFacingError("configError.field.field.must.be.a.string.field.6e7ac7", "{value1} field must be a string: {value2}", { value1: source, value2: key });
269
290
  return value;
270
291
  }
271
292
  function requireResponseBoolean(record, key, source) {
272
293
  const value = record[key];
273
294
  if (typeof value !== "boolean")
274
- throw new Error(`${source} field must be a boolean: ${key}`);
295
+ throw new UserFacingError("configError.field.field.must.be.a.boolean.field.be00df", "{value1} field must be a boolean: {value2}", { value1: source, value2: key });
275
296
  return value;
276
297
  }
277
298
  function optionalResponseBoolean(record, key, source) {
@@ -279,7 +300,7 @@ function optionalResponseBoolean(record, key, source) {
279
300
  if (value === undefined)
280
301
  return undefined;
281
302
  if (typeof value !== "boolean")
282
- throw new Error(`${source} field must be a boolean: ${key}`);
303
+ throw new UserFacingError("configError.field.field.must.be.a.boolean.field.be00df", "{value1} field must be a boolean: {value2}", { value1: source, value2: key });
283
304
  return value;
284
305
  }
285
306
  function optionalAgentDirSource(record, source) {
@@ -287,7 +308,7 @@ function optionalAgentDirSource(record, source) {
287
308
  if (value === undefined)
288
309
  return {};
289
310
  if (value !== "pi-web" && value !== "pi-compatibility")
290
- throw new Error(`${source} field must be a valid agent directory source: agentDirSource`);
311
+ throw new UserFacingError("configError.field.field.must.be.a.valid.agent.directory.source.agentdirsource.934d85", "{value1} field must be a valid agent directory source: agentDirSource", { value1: source });
291
312
  return { agentDirSource: value };
292
313
  }
293
314
  function piWebConfigEnvOverrides(env) {