@pi-harness/pi-harness 0.1.31 → 0.1.33

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 (280) hide show
  1. package/apps/web/dist/assets/index-CZMbiZj6.css +2 -0
  2. package/apps/web/dist/assets/index-DLcE8YQ7.js +26 -0
  3. package/apps/web/dist/index.html +2 -2
  4. package/apps/web/package.json +1 -1
  5. package/apps/web/server-dist/bin.js +19 -3
  6. package/apps/web/server-dist/bin.js.map +1 -1
  7. package/apps/web/src/server/bin.ts +18 -2
  8. package/apps/web/src/style.css +51 -1
  9. package/node_modules/@pi-harness/api-gateway/dist/index.d.ts.map +1 -1
  10. package/node_modules/@pi-harness/api-gateway/dist/index.js +117 -11
  11. package/node_modules/@pi-harness/api-gateway/dist/index.js.map +1 -1
  12. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/agent-teams.json +5 -5
  13. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/anchored-standard.json +3 -3
  14. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/annotation.json +3 -3
  15. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/archify.json +3 -3
  16. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/at-file.json +3 -11
  17. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/auto-mode.json +3 -3
  18. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/better-sidebar.json +5 -5
  19. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/browser-fetch.json +3 -10
  20. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/browser-session.json +3 -10
  21. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/canvas-draw.json +4 -4
  22. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/change-verifier.json +3 -3
  23. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/cleaner.json +3 -11
  24. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/cli-notifier.json +3 -3
  25. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/code2skill.json +5 -5
  26. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/colleague-skill.json +3 -3
  27. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/context-doctor.json +3 -10
  28. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/context.json +3 -9
  29. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/cordis-group.json +12 -5
  30. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/cordis-logger-console.json +16 -5
  31. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/cordis-timer.json +11 -5
  32. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/cost-meter.json +3 -3
  33. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/dependency-checker.json +4 -12
  34. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/docker-sandbox.json +3 -11
  35. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/fail-logger.json +3 -10
  36. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/genui.json +3 -3
  37. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/git-time-capsule.json +3 -10
  38. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/graph-memory.json +5 -5
  39. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/history-compressor.json +4 -4
  40. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/hol-guard.json +4 -4
  41. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/i18n-pair.json +3 -9
  42. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/image-compressor.json +4 -4
  43. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/llm-verifier.json +5 -5
  44. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/mcp-client.json +5 -11
  45. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/mcp-panel.json +5 -5
  46. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/memory.json +5 -5
  47. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/mirage-bridge.json +5 -5
  48. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/mock-server.json +5 -5
  49. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/modlens.json +3 -3
  50. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/module-search.json +3 -3
  51. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/obsidian-sync.json +3 -3
  52. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/openpets.json +4 -10
  53. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/plan-execute.json +3 -3
  54. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/plugin-check.json +3 -3
  55. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/plugin-dev.json +3 -3
  56. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/plugin-finder.json +3 -3
  57. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/plugin-radar.json +3 -3
  58. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/plugin-stars.json +3 -10
  59. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/prompt-guard.json +4 -4
  60. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/prompt-library.json +3 -3
  61. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/readme-gen.json +3 -11
  62. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/recall-unread.json +3 -10
  63. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/reverse-skill.json +4 -4
  64. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/reviewer-bot.json +3 -3
  65. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/runtime-doctor.json +3 -3
  66. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/secure-audit.json +3 -3
  67. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/session-bookmarks.json +3 -3
  68. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/session-bridge.json +3 -11
  69. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/session-compare.json +3 -3
  70. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/session-export.json +3 -3
  71. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/session-insights.json +3 -11
  72. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/session-search.json +3 -3
  73. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/skill-catalog.json +3 -3
  74. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/skill-guard.json +4 -11
  75. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/sql-lens.json +5 -12
  76. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/synapse.json +3 -3
  77. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/tab-manager.json +3 -3
  78. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/taskboard.json +3 -3
  79. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/telemetry-blocker.json +3 -3
  80. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/test-harness.json +5 -13
  81. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/theme-studio.json +3 -3
  82. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/token-guard.json +3 -11
  83. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/turn-rewind.json +3 -10
  84. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/undo-savepoint.json +3 -3
  85. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/vision-toolkit.json +3 -9
  86. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/web-research.json +3 -3
  87. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/workspace-navigator.json +3 -3
  88. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/workspace-search.json +4 -4
  89. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/yaml-validator.json +3 -9
  90. package/node_modules/@pi-harness/api-gateway/dist/marketplace.d.ts +18 -2
  91. package/node_modules/@pi-harness/api-gateway/dist/marketplace.d.ts.map +1 -1
  92. package/node_modules/@pi-harness/api-gateway/dist/marketplace.js +93 -10
  93. package/node_modules/@pi-harness/api-gateway/dist/marketplace.js.map +1 -1
  94. package/node_modules/@pi-harness/api-gateway/package.json +1 -1
  95. package/node_modules/@pi-harness/cli/dist/main.d.ts.map +1 -1
  96. package/node_modules/@pi-harness/cli/dist/main.js +21 -3
  97. package/node_modules/@pi-harness/cli/dist/main.js.map +1 -1
  98. package/node_modules/@pi-harness/cli/package.json +1 -1
  99. package/node_modules/@pi-harness/host-webserver/package.json +1 -1
  100. package/node_modules/@pi-harness/web-app/package.json +1 -1
  101. package/package.json +6 -6
  102. package/packages/api-gateway/dist/index.d.ts.map +1 -1
  103. package/packages/api-gateway/dist/index.js +117 -11
  104. package/packages/api-gateway/dist/index.js.map +1 -1
  105. package/packages/api-gateway/dist/marketplace-entries/official/agent-teams.json +5 -5
  106. package/packages/api-gateway/dist/marketplace-entries/official/anchored-standard.json +3 -3
  107. package/packages/api-gateway/dist/marketplace-entries/official/annotation.json +3 -3
  108. package/packages/api-gateway/dist/marketplace-entries/official/archify.json +3 -3
  109. package/packages/api-gateway/dist/marketplace-entries/official/at-file.json +3 -11
  110. package/packages/api-gateway/dist/marketplace-entries/official/auto-mode.json +3 -3
  111. package/packages/api-gateway/dist/marketplace-entries/official/better-sidebar.json +5 -5
  112. package/packages/api-gateway/dist/marketplace-entries/official/browser-fetch.json +3 -10
  113. package/packages/api-gateway/dist/marketplace-entries/official/browser-session.json +3 -10
  114. package/packages/api-gateway/dist/marketplace-entries/official/canvas-draw.json +4 -4
  115. package/packages/api-gateway/dist/marketplace-entries/official/change-verifier.json +3 -3
  116. package/packages/api-gateway/dist/marketplace-entries/official/cleaner.json +3 -11
  117. package/packages/api-gateway/dist/marketplace-entries/official/cli-notifier.json +3 -3
  118. package/packages/api-gateway/dist/marketplace-entries/official/code2skill.json +5 -5
  119. package/packages/api-gateway/dist/marketplace-entries/official/colleague-skill.json +3 -3
  120. package/packages/api-gateway/dist/marketplace-entries/official/context-doctor.json +3 -10
  121. package/packages/api-gateway/dist/marketplace-entries/official/context.json +3 -9
  122. package/packages/api-gateway/dist/marketplace-entries/official/cordis-group.json +12 -5
  123. package/packages/api-gateway/dist/marketplace-entries/official/cordis-logger-console.json +16 -5
  124. package/packages/api-gateway/dist/marketplace-entries/official/cordis-timer.json +11 -5
  125. package/packages/api-gateway/dist/marketplace-entries/official/cost-meter.json +3 -3
  126. package/packages/api-gateway/dist/marketplace-entries/official/dependency-checker.json +4 -12
  127. package/packages/api-gateway/dist/marketplace-entries/official/docker-sandbox.json +3 -11
  128. package/packages/api-gateway/dist/marketplace-entries/official/fail-logger.json +3 -10
  129. package/packages/api-gateway/dist/marketplace-entries/official/genui.json +3 -3
  130. package/packages/api-gateway/dist/marketplace-entries/official/git-time-capsule.json +3 -10
  131. package/packages/api-gateway/dist/marketplace-entries/official/graph-memory.json +5 -5
  132. package/packages/api-gateway/dist/marketplace-entries/official/history-compressor.json +4 -4
  133. package/packages/api-gateway/dist/marketplace-entries/official/hol-guard.json +4 -4
  134. package/packages/api-gateway/dist/marketplace-entries/official/i18n-pair.json +3 -9
  135. package/packages/api-gateway/dist/marketplace-entries/official/image-compressor.json +4 -4
  136. package/packages/api-gateway/dist/marketplace-entries/official/llm-verifier.json +5 -5
  137. package/packages/api-gateway/dist/marketplace-entries/official/mcp-client.json +5 -11
  138. package/packages/api-gateway/dist/marketplace-entries/official/mcp-panel.json +5 -5
  139. package/packages/api-gateway/dist/marketplace-entries/official/memory.json +5 -5
  140. package/packages/api-gateway/dist/marketplace-entries/official/mirage-bridge.json +5 -5
  141. package/packages/api-gateway/dist/marketplace-entries/official/mock-server.json +5 -5
  142. package/packages/api-gateway/dist/marketplace-entries/official/modlens.json +3 -3
  143. package/packages/api-gateway/dist/marketplace-entries/official/module-search.json +3 -3
  144. package/packages/api-gateway/dist/marketplace-entries/official/obsidian-sync.json +3 -3
  145. package/packages/api-gateway/dist/marketplace-entries/official/openpets.json +4 -10
  146. package/packages/api-gateway/dist/marketplace-entries/official/plan-execute.json +3 -3
  147. package/packages/api-gateway/dist/marketplace-entries/official/plugin-check.json +3 -3
  148. package/packages/api-gateway/dist/marketplace-entries/official/plugin-dev.json +3 -3
  149. package/packages/api-gateway/dist/marketplace-entries/official/plugin-finder.json +3 -3
  150. package/packages/api-gateway/dist/marketplace-entries/official/plugin-radar.json +3 -3
  151. package/packages/api-gateway/dist/marketplace-entries/official/plugin-stars.json +3 -10
  152. package/packages/api-gateway/dist/marketplace-entries/official/prompt-guard.json +4 -4
  153. package/packages/api-gateway/dist/marketplace-entries/official/prompt-library.json +3 -3
  154. package/packages/api-gateway/dist/marketplace-entries/official/readme-gen.json +3 -11
  155. package/packages/api-gateway/dist/marketplace-entries/official/recall-unread.json +3 -10
  156. package/packages/api-gateway/dist/marketplace-entries/official/reverse-skill.json +4 -4
  157. package/packages/api-gateway/dist/marketplace-entries/official/reviewer-bot.json +3 -3
  158. package/packages/api-gateway/dist/marketplace-entries/official/runtime-doctor.json +3 -3
  159. package/packages/api-gateway/dist/marketplace-entries/official/secure-audit.json +3 -3
  160. package/packages/api-gateway/dist/marketplace-entries/official/session-bookmarks.json +3 -3
  161. package/packages/api-gateway/dist/marketplace-entries/official/session-bridge.json +3 -11
  162. package/packages/api-gateway/dist/marketplace-entries/official/session-compare.json +3 -3
  163. package/packages/api-gateway/dist/marketplace-entries/official/session-export.json +3 -3
  164. package/packages/api-gateway/dist/marketplace-entries/official/session-insights.json +3 -11
  165. package/packages/api-gateway/dist/marketplace-entries/official/session-search.json +3 -3
  166. package/packages/api-gateway/dist/marketplace-entries/official/skill-catalog.json +3 -3
  167. package/packages/api-gateway/dist/marketplace-entries/official/skill-guard.json +4 -11
  168. package/packages/api-gateway/dist/marketplace-entries/official/sql-lens.json +5 -12
  169. package/packages/api-gateway/dist/marketplace-entries/official/synapse.json +3 -3
  170. package/packages/api-gateway/dist/marketplace-entries/official/tab-manager.json +3 -3
  171. package/packages/api-gateway/dist/marketplace-entries/official/taskboard.json +3 -3
  172. package/packages/api-gateway/dist/marketplace-entries/official/telemetry-blocker.json +3 -3
  173. package/packages/api-gateway/dist/marketplace-entries/official/test-harness.json +5 -13
  174. package/packages/api-gateway/dist/marketplace-entries/official/theme-studio.json +3 -3
  175. package/packages/api-gateway/dist/marketplace-entries/official/token-guard.json +3 -11
  176. package/packages/api-gateway/dist/marketplace-entries/official/turn-rewind.json +3 -10
  177. package/packages/api-gateway/dist/marketplace-entries/official/undo-savepoint.json +3 -3
  178. package/packages/api-gateway/dist/marketplace-entries/official/vision-toolkit.json +3 -9
  179. package/packages/api-gateway/dist/marketplace-entries/official/web-research.json +3 -3
  180. package/packages/api-gateway/dist/marketplace-entries/official/workspace-navigator.json +3 -3
  181. package/packages/api-gateway/dist/marketplace-entries/official/workspace-search.json +4 -4
  182. package/packages/api-gateway/dist/marketplace-entries/official/yaml-validator.json +3 -9
  183. package/packages/api-gateway/dist/marketplace.d.ts +18 -2
  184. package/packages/api-gateway/dist/marketplace.d.ts.map +1 -1
  185. package/packages/api-gateway/dist/marketplace.js +93 -10
  186. package/packages/api-gateway/dist/marketplace.js.map +1 -1
  187. package/packages/api-gateway/package.json +1 -1
  188. package/packages/api-gateway/src/index.ts +121 -12
  189. package/packages/api-gateway/src/marketplace-entries/official/agent-teams.json +5 -5
  190. package/packages/api-gateway/src/marketplace-entries/official/anchored-standard.json +3 -3
  191. package/packages/api-gateway/src/marketplace-entries/official/annotation.json +3 -3
  192. package/packages/api-gateway/src/marketplace-entries/official/archify.json +3 -3
  193. package/packages/api-gateway/src/marketplace-entries/official/at-file.json +3 -11
  194. package/packages/api-gateway/src/marketplace-entries/official/auto-mode.json +3 -3
  195. package/packages/api-gateway/src/marketplace-entries/official/better-sidebar.json +5 -5
  196. package/packages/api-gateway/src/marketplace-entries/official/browser-fetch.json +3 -10
  197. package/packages/api-gateway/src/marketplace-entries/official/browser-session.json +3 -10
  198. package/packages/api-gateway/src/marketplace-entries/official/canvas-draw.json +4 -4
  199. package/packages/api-gateway/src/marketplace-entries/official/change-verifier.json +3 -3
  200. package/packages/api-gateway/src/marketplace-entries/official/cleaner.json +3 -11
  201. package/packages/api-gateway/src/marketplace-entries/official/cli-notifier.json +3 -3
  202. package/packages/api-gateway/src/marketplace-entries/official/code2skill.json +5 -5
  203. package/packages/api-gateway/src/marketplace-entries/official/colleague-skill.json +3 -3
  204. package/packages/api-gateway/src/marketplace-entries/official/context-doctor.json +3 -10
  205. package/packages/api-gateway/src/marketplace-entries/official/context.json +3 -9
  206. package/packages/api-gateway/src/marketplace-entries/official/cordis-group.json +12 -5
  207. package/packages/api-gateway/src/marketplace-entries/official/cordis-logger-console.json +16 -5
  208. package/packages/api-gateway/src/marketplace-entries/official/cordis-timer.json +11 -5
  209. package/packages/api-gateway/src/marketplace-entries/official/cost-meter.json +3 -3
  210. package/packages/api-gateway/src/marketplace-entries/official/dependency-checker.json +4 -12
  211. package/packages/api-gateway/src/marketplace-entries/official/docker-sandbox.json +3 -11
  212. package/packages/api-gateway/src/marketplace-entries/official/fail-logger.json +3 -10
  213. package/packages/api-gateway/src/marketplace-entries/official/genui.json +3 -3
  214. package/packages/api-gateway/src/marketplace-entries/official/git-time-capsule.json +3 -10
  215. package/packages/api-gateway/src/marketplace-entries/official/graph-memory.json +5 -5
  216. package/packages/api-gateway/src/marketplace-entries/official/history-compressor.json +4 -4
  217. package/packages/api-gateway/src/marketplace-entries/official/hol-guard.json +4 -4
  218. package/packages/api-gateway/src/marketplace-entries/official/i18n-pair.json +3 -9
  219. package/packages/api-gateway/src/marketplace-entries/official/image-compressor.json +4 -4
  220. package/packages/api-gateway/src/marketplace-entries/official/llm-verifier.json +5 -5
  221. package/packages/api-gateway/src/marketplace-entries/official/mcp-client.json +5 -11
  222. package/packages/api-gateway/src/marketplace-entries/official/mcp-panel.json +5 -5
  223. package/packages/api-gateway/src/marketplace-entries/official/memory.json +5 -5
  224. package/packages/api-gateway/src/marketplace-entries/official/mirage-bridge.json +5 -5
  225. package/packages/api-gateway/src/marketplace-entries/official/mock-server.json +5 -5
  226. package/packages/api-gateway/src/marketplace-entries/official/modlens.json +3 -3
  227. package/packages/api-gateway/src/marketplace-entries/official/module-search.json +3 -3
  228. package/packages/api-gateway/src/marketplace-entries/official/obsidian-sync.json +3 -3
  229. package/packages/api-gateway/src/marketplace-entries/official/openpets.json +4 -10
  230. package/packages/api-gateway/src/marketplace-entries/official/plan-execute.json +3 -3
  231. package/packages/api-gateway/src/marketplace-entries/official/plugin-check.json +3 -3
  232. package/packages/api-gateway/src/marketplace-entries/official/plugin-dev.json +3 -3
  233. package/packages/api-gateway/src/marketplace-entries/official/plugin-finder.json +3 -3
  234. package/packages/api-gateway/src/marketplace-entries/official/plugin-radar.json +3 -3
  235. package/packages/api-gateway/src/marketplace-entries/official/plugin-stars.json +3 -10
  236. package/packages/api-gateway/src/marketplace-entries/official/prompt-guard.json +4 -4
  237. package/packages/api-gateway/src/marketplace-entries/official/prompt-library.json +3 -3
  238. package/packages/api-gateway/src/marketplace-entries/official/readme-gen.json +3 -11
  239. package/packages/api-gateway/src/marketplace-entries/official/recall-unread.json +3 -10
  240. package/packages/api-gateway/src/marketplace-entries/official/reverse-skill.json +4 -4
  241. package/packages/api-gateway/src/marketplace-entries/official/reviewer-bot.json +3 -3
  242. package/packages/api-gateway/src/marketplace-entries/official/runtime-doctor.json +3 -3
  243. package/packages/api-gateway/src/marketplace-entries/official/secure-audit.json +3 -3
  244. package/packages/api-gateway/src/marketplace-entries/official/session-bookmarks.json +3 -3
  245. package/packages/api-gateway/src/marketplace-entries/official/session-bridge.json +3 -11
  246. package/packages/api-gateway/src/marketplace-entries/official/session-compare.json +3 -3
  247. package/packages/api-gateway/src/marketplace-entries/official/session-export.json +3 -3
  248. package/packages/api-gateway/src/marketplace-entries/official/session-insights.json +3 -11
  249. package/packages/api-gateway/src/marketplace-entries/official/session-search.json +3 -3
  250. package/packages/api-gateway/src/marketplace-entries/official/skill-catalog.json +3 -3
  251. package/packages/api-gateway/src/marketplace-entries/official/skill-guard.json +4 -11
  252. package/packages/api-gateway/src/marketplace-entries/official/sql-lens.json +5 -12
  253. package/packages/api-gateway/src/marketplace-entries/official/synapse.json +3 -3
  254. package/packages/api-gateway/src/marketplace-entries/official/tab-manager.json +3 -3
  255. package/packages/api-gateway/src/marketplace-entries/official/taskboard.json +3 -3
  256. package/packages/api-gateway/src/marketplace-entries/official/telemetry-blocker.json +3 -3
  257. package/packages/api-gateway/src/marketplace-entries/official/test-harness.json +5 -13
  258. package/packages/api-gateway/src/marketplace-entries/official/theme-studio.json +3 -3
  259. package/packages/api-gateway/src/marketplace-entries/official/token-guard.json +3 -11
  260. package/packages/api-gateway/src/marketplace-entries/official/turn-rewind.json +3 -10
  261. package/packages/api-gateway/src/marketplace-entries/official/undo-savepoint.json +3 -3
  262. package/packages/api-gateway/src/marketplace-entries/official/vision-toolkit.json +3 -9
  263. package/packages/api-gateway/src/marketplace-entries/official/web-research.json +3 -3
  264. package/packages/api-gateway/src/marketplace-entries/official/workspace-navigator.json +3 -3
  265. package/packages/api-gateway/src/marketplace-entries/official/workspace-search.json +4 -4
  266. package/packages/api-gateway/src/marketplace-entries/official/yaml-validator.json +3 -9
  267. package/packages/api-gateway/src/marketplace.ts +113 -12
  268. package/packages/api-gateway/test/index.test.ts +148 -6
  269. package/packages/api-gateway/test/marketplace-schema.test.ts +12 -0
  270. package/packages/api-gateway/test/marketplace.test.ts +255 -354
  271. package/packages/bundle-web-app/package.json +1 -1
  272. package/packages/cli/dist/main.d.ts.map +1 -1
  273. package/packages/cli/dist/main.js +21 -3
  274. package/packages/cli/dist/main.js.map +1 -1
  275. package/packages/cli/package.json +1 -1
  276. package/packages/cli/src/main.ts +20 -3
  277. package/packages/cli/test/cli.test.ts +20 -0
  278. package/packages/host-webserver/package.json +1 -1
  279. package/apps/web/dist/assets/index-D9ZcvGXi.js +0 -25
  280. package/apps/web/dist/assets/index-DJsNIiIo.css +0 -2
@@ -1,6 +1,28 @@
1
1
  import { readdirSync, readFileSync } from "node:fs";
2
2
  import { dirname, join } from "node:path";
3
3
  import { fileURLToPath } from "node:url";
4
+ /** What a plugin does to the machine it is installed on, ordered from the least invasive to the most, so a reader can decide from the badges alone. This replaced free text, which produced 299 values across 78 entries with 284 of them held by a single plugin: the filter listed nearly one option per plugin and nothing could be compared against anything else. Every value here is derived from the plugin's own imports, including those it inherits from a plugin it depends on. */
5
+ const MARKETPLACE_CAPABILITY_VOCABULARY = [
6
+ { id: "read-only", label: "只读运行" },
7
+ { id: "session-data", label: "读取会话内容" },
8
+ { id: "reads-files", label: "读取本机文件" },
9
+ { id: "writes-files", label: "写入本机文件" },
10
+ { id: "runs-commands", label: "执行本机命令" },
11
+ { id: "local-server", label: "监听本地端口" },
12
+ { id: "network-access", label: "访问网络" },
13
+ { id: "model-calls", label: "额外调用模型" },
14
+ ];
15
+ /** A badge that says a plugin changes nothing is a claim about trust, so an entry that also carries one of these is rejected rather than shown. */
16
+ const MARKETPLACE_EFFECT_CAPABILITIES = ["writes-files", "runs-commands", "local-server", "network-access", "model-calls"];
17
+ const marketplaceCapabilityLabels = new Map(MARKETPLACE_CAPABILITY_VOCABULARY.map((capability) => [capability.id, capability.label]));
18
+ function isMarketplaceCapabilityList(value) {
19
+ if (!Array.isArray(value) || value.length === 0)
20
+ return false;
21
+ const capabilities = value.filter((entry) => typeof entry === "string" && marketplaceCapabilityLabels.has(entry));
22
+ if (capabilities.length !== value.length || new Set(capabilities).size !== capabilities.length)
23
+ return false;
24
+ return !capabilities.includes("read-only") || !capabilities.some((entry) => MARKETPLACE_EFFECT_CAPABILITIES.includes(entry));
25
+ }
4
26
  const npmPackagePattern = /^(?:@[a-z0-9._~-]+\/)?[a-z0-9._~-]+(?:\/[a-z0-9._~-]+)*$/;
5
27
  const entryIdPattern = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
6
28
  const versionPattern = /^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/;
@@ -36,9 +58,7 @@ function isMarketplacePlugin(value) {
36
58
  categoryIdPattern.test(category.id) &&
37
59
  typeof category.label === "string" &&
38
60
  category.label.trim() !== "" &&
39
- Array.isArray(value.capabilities) &&
40
- value.capabilities.length > 0 &&
41
- value.capabilities.every((entry) => typeof entry === "string" && entry.trim() !== "") &&
61
+ isMarketplaceCapabilityList(value.capabilities) &&
42
62
  Array.isArray(value.hooks) &&
43
63
  value.hooks.length > 0 &&
44
64
  value.hooks.every((entry) => typeof entry === "string" && entry.trim() !== "") &&
@@ -73,13 +93,19 @@ function loadMarketplacePlugins() {
73
93
  });
74
94
  const ids = new Set();
75
95
  const packages = new Set();
96
+ // The category tabs are built from whichever entry is read first, so two entries that spell the same category differently would make the label depend on file order.
97
+ const categoryLabels = new Map();
76
98
  for (const plugin of plugins) {
77
99
  if (ids.has(plugin.id))
78
100
  throw new Error(`Duplicate marketplace id: ${plugin.id}`);
79
101
  if (packages.has(plugin.packageName))
80
102
  throw new Error(`Duplicate marketplace package: ${plugin.packageName}`);
103
+ const categoryLabel = categoryLabels.get(plugin.category.id);
104
+ if (categoryLabel !== undefined && categoryLabel !== plugin.category.label)
105
+ throw new Error(`Conflicting marketplace category label for ${plugin.category.id}: ${categoryLabel} and ${plugin.category.label}`);
81
106
  ids.add(plugin.id);
82
107
  packages.add(plugin.packageName);
108
+ categoryLabels.set(plugin.category.id, plugin.category.label);
83
109
  }
84
110
  return plugins;
85
111
  }
@@ -151,11 +177,32 @@ async function fetchNpmPackageStatistics(packageName, fetcher, timeoutMs) {
151
177
  export function createMarketplaceStatisticsLoader(options = {}) {
152
178
  const fetcher = options.fetcher ?? ((url, init) => globalThis.fetch(url, init));
153
179
  const failureTtlMs = options.failureTtlMs ?? 60_000;
180
+ // Consecutive failures double the retry window up to this ceiling: an open console polls the catalog every few seconds, so a flat failure window would send one registry lookup per catalogued package every minute for as long as the tab stays open.
181
+ const failureMaxTtlMs = options.failureMaxTtlMs ?? 30 * 60_000;
154
182
  const now = options.now ?? Date.now;
155
183
  const timeoutMs = options.timeoutMs ?? 3_000;
156
184
  const ttlMs = options.ttlMs ?? 6 * 60 * 60 * 1_000;
185
+ // The registry answers an unthrottled fan-out over the whole catalogue with 429s, so lookups queue behind a small number of slots instead of leaving at once.
186
+ const concurrency = Math.max(1, Math.trunc(options.concurrency ?? 4));
157
187
  const cache = new Map();
158
188
  const inFlight = new Map();
189
+ const waiting = [];
190
+ let active = 0;
191
+ const acquireSlot = async () => {
192
+ if (active < concurrency) {
193
+ active += 1;
194
+ return;
195
+ }
196
+ await new Promise((resolveSlot) => waiting.push(resolveSlot));
197
+ };
198
+ const releaseSlot = () => {
199
+ const next = waiting.shift();
200
+ if (next === undefined)
201
+ active -= 1;
202
+ else
203
+ next();
204
+ };
205
+ const failureTtl = (failures) => Math.min(failureTtlMs * 2 ** Math.min(failures - 1, 20), failureMaxTtlMs);
159
206
  const loadPackage = async (packageName) => {
160
207
  const timestamp = now();
161
208
  const cached = cache.get(packageName);
@@ -164,11 +211,21 @@ export function createMarketplaceStatisticsLoader(options = {}) {
164
211
  const pending = inFlight.get(packageName);
165
212
  if (pending !== undefined)
166
213
  return pending;
167
- const request = fetchNpmPackageStatistics(packageName, fetcher, timeoutMs);
214
+ // The slot is taken inside the promise so the in-flight entry is still registered synchronously and concurrent callers keep sharing one request.
215
+ const request = (async () => {
216
+ await acquireSlot();
217
+ try {
218
+ return await fetchNpmPackageStatistics(packageName, fetcher, timeoutMs);
219
+ }
220
+ finally {
221
+ releaseSlot();
222
+ }
223
+ })();
168
224
  inFlight.set(packageName, request);
169
225
  try {
170
226
  const result = await request;
171
- cache.set(packageName, { expiresAt: now() + (result.failed ? failureTtlMs : ttlMs), result });
227
+ const failures = result.failed ? (cached?.failures ?? 0) + 1 : 0;
228
+ cache.set(packageName, { expiresAt: now() + (result.failed ? failureTtl(failures) : ttlMs), failures, result });
172
229
  return result;
173
230
  }
174
231
  finally {
@@ -176,11 +233,31 @@ export function createMarketplaceStatisticsLoader(options = {}) {
176
233
  inFlight.delete(packageName);
177
234
  }
178
235
  };
179
- return async (plugins) => {
180
- const packageNames = [...new Set(plugins.map((plugin) => marketplaceNpmPackageName(plugin.packageName)))].sort();
181
- const entries = await Promise.all(packageNames.map(async (packageName) => [packageName, await loadPackage(packageName)]));
236
+ const packageNames = (plugins) => [...new Set(plugins.map((plugin) => marketplaceNpmPackageName(plugin.packageName)))].sort();
237
+ const load = async (plugins) => {
238
+ const entries = await Promise.all(packageNames(plugins).map(async (packageName) => [packageName, await loadPackage(packageName)]));
182
239
  return new Map(entries.flatMap(([packageName, result]) => (result.statistics === undefined ? [] : [[packageName, result.statistics]])));
183
240
  };
241
+ const readCached = (plugins) => {
242
+ const timestamp = now();
243
+ const statistics = new Map();
244
+ // Readiness tracks whether a package has ever been looked up, not whether its entry is fresh, so an expiring entry refreshes in the background without dropping the catalogue back to an unsorted order.
245
+ let ready = true;
246
+ for (const packageName of packageNames(plugins)) {
247
+ const cached = cache.get(packageName);
248
+ if (cached === undefined)
249
+ ready = false;
250
+ if (cached !== undefined && cached.expiresAt > timestamp) {
251
+ if (cached.result.statistics !== undefined)
252
+ statistics.set(packageName, cached.result.statistics);
253
+ continue;
254
+ }
255
+ // A prewarm has nobody to report to, and a catalogue sorted without npm statistics is not worth crashing the process over an unhandled rejection.
256
+ void loadPackage(packageName).catch(() => { });
257
+ }
258
+ return { ready, statistics };
259
+ };
260
+ return Object.assign(load, { readCached });
184
261
  }
185
262
  export function attachMarketplaceStatistics(plugins, statistics) {
186
263
  return plugins.map((plugin) => {
@@ -205,7 +282,9 @@ export function searchMarketplace(query = "", capability = "", category = "") {
205
282
  const normalizedCapability = capability.trim().toLowerCase();
206
283
  const normalizedCategory = category.trim().toLowerCase();
207
284
  return MARKETPLACE_PLUGINS.filter((plugin) => {
208
- const searchable = [plugin.name, plugin.packageName, plugin.description, plugin.author, ...plugin.capabilities, ...plugin.hooks].join(" ").toLowerCase();
285
+ // The capability labels are searched alongside their ids: the ids are what the filter and the URL carry, and the labels are what the reader sees on the card.
286
+ const capabilities = plugin.capabilities.flatMap((item) => [item, marketplaceCapabilityLabels.get(item) ?? item]);
287
+ const searchable = [plugin.name, plugin.packageName, plugin.description, plugin.author, ...capabilities, ...plugin.hooks].join(" ").toLowerCase();
209
288
  return ((normalizedQuery === "" || searchable.includes(normalizedQuery)) &&
210
289
  (normalizedCapability === "" || plugin.capabilities.some((item) => item.toLowerCase() === normalizedCapability)) &&
211
290
  (normalizedCategory === "" || plugin.category.id.toLowerCase() === normalizedCategory));
@@ -223,7 +302,11 @@ export function paginateMarketplace(items, page = 0, pageSize = 24) {
223
302
  hasNext: start + normalizedPageSize < items.length,
224
303
  };
225
304
  }
226
- export const MARKETPLACE_CAPABILITIES = [...new Set(MARKETPLACE_PLUGINS.flatMap((plugin) => plugin.capabilities))].sort();
305
+ // Kept in vocabulary order rather than sorted, so the filter reads from the least invasive option to the most, and an unused capability is left out rather than offering a filter that returns nothing.
306
+ export const MARKETPLACE_CAPABILITIES = MARKETPLACE_CAPABILITY_VOCABULARY.map((capability) => ({
307
+ ...capability,
308
+ count: MARKETPLACE_PLUGINS.filter((plugin) => plugin.capabilities.includes(capability.id)).length,
309
+ })).filter((capability) => capability.count > 0);
227
310
  export const MARKETPLACE_CATEGORIES = [
228
311
  ...new Map(MARKETPLACE_PLUGINS.map((plugin) => [plugin.category.id, { id: plugin.category.id, label: plugin.category.label, count: 0 }])).values(),
229
312
  ]
@@ -1 +1 @@
1
- {"version":3,"file":"marketplace.js","sourceRoot":"","sources":["../src/marketplace.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"marketplace.js","sourceRoot":"","sources":["../src/marketplace.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/api-gateway",
3
- "version": "0.1.31",
3
+ "version": "0.1.33",
4
4
  "private": true,
5
5
  "description": "Cordis HTTP API routes for the Pi Harness browser client",
6
6
  "homepage": "https://github.com/pi-harness/pi-harness#readme",
@@ -32,7 +32,8 @@ interface ApiServices {
32
32
  readonly pluginUi: PiPluginUiRegistry | undefined;
33
33
  }
34
34
 
35
- const loadMarketplaceStatistics = createMarketplaceStatisticsLoader();
35
+ // The first paint waits for every console endpoint to answer, so the catalogue is sorted from whatever npm statistics are already cached and the misses are warmed in the background instead of held on to.
36
+ const { readCached: readCachedMarketplaceStatistics } = createMarketplaceStatisticsLoader();
36
37
 
37
38
  const RUNTIME_ENTRY_NAME = "@pi-harness/core/plugins/runtime";
38
39
 
@@ -42,7 +43,13 @@ const IMPORT_CONTENT_LIMIT_BYTES = 10 * 1024 * 1024;
42
43
  const IMPORT_BODY_LIMIT_BYTES = 16 * 1024 * 1024;
43
44
  // Retained trajectory events are replayed to every SSE client and returned by /api/session, so the array must stay bounded.
44
45
  const MAX_RETAINED_EVENTS = 2000;
46
+ // Tool calls that opened but never closed. Far above any real concurrency, so the cap only ever trims a run the runtime abandoned.
47
+ const MAX_PENDING_TOOL_CALLS = 256;
48
+ /** A session event with the two fields the gateway owns: when it arrived, and for a tool call how long it took. */
49
+ type StampedSessionEvent = AgentSessionEvent & { readonly receivedAt: number; readonly durationMs?: number };
45
50
  const GIT_TIMEOUT_MS = 15_000;
51
+ const PROCESS_FAILURE_TEXT_LIMIT = 400;
52
+ const PROCESS_TIMEOUT_MS = 120_000;
46
53
  // Mutating commands run user hooks (pre-commit, lint-staged, test suites) and may stage large trees; killing them part-way leaves index.lock and a half-finished operation behind, so they get a far more generous bound than read-only queries.
47
54
  const GIT_MUTATION_TIMEOUT_MS = 120_000;
48
55
 
@@ -95,10 +102,14 @@ function jsonSafe(value: unknown, seen = new WeakSet<object>()): unknown {
95
102
  }
96
103
  }
97
104
 
105
+ // A plugin that contributes tools only joins on the next start, so the console remembers what it installed until then. That memory is about one particular process, and the console cannot tell a restart from a reconnect on its own, so the identity of this process rides along with the status it already polls.
106
+ const PROCESS_STARTED_AT = new Date(Date.now() - Math.round(process.uptime() * 1000)).toISOString();
107
+
98
108
  function createStatus(services: ApiServices, events: readonly AgentSessionEvent[]) {
99
109
  const activeModel = services.runtime.session.model ?? services.models.model;
100
110
  const cwd = activeCwd(services);
101
111
  return {
112
+ processStartedAt: PROCESS_STARTED_AT,
102
113
  status: services.runtime.session.isStreaming ? "running" : "ready",
103
114
  model: activeModel.provider + "/" + activeModel.id,
104
115
  messages: services.runtime.session.messages.length,
@@ -327,6 +338,42 @@ function pluginSummary(entry: LoaderEntrySummary) {
327
338
  };
328
339
  }
329
340
 
341
+ /** The state a marketplace plugin is in between the install that wrote it and the restart that loads it. It is not a loader state because the loader has no entry for it at all. */
342
+ const RESTART_REQUIRED_STATE = "restart-required";
343
+
344
+ // The install writes the entry as two adjacent lines, so this reads back exactly what `marketplaceProfileEntry` writes rather than parsing the profile as YAML, which the `!!js` tags in it would need a schema for.
345
+ const MARKETPLACE_PROFILE_ENTRY_PATTERN = /^[ \t]*- id: (marketplace-\S+)[ \t]*\r?\n[ \t]*name: "([^"]+)"/gmu;
346
+
347
+ /** The loader holds what is running; the profile file holds what is installed. The two differ for a plugin that contributes tools, which cannot join a harness that is already running: the install leaves its package and its profile entry in place and the plugin arrives on the next start. Reading only the loader makes that plugin indistinguishable from one that was never installed, which is why the console answered an install that had just succeeded with "nothing is installed" and then could not uninstall what it had hidden. */
348
+ async function readMarketplaceProfileEntries(configPath: string): Promise<readonly { readonly id: string; readonly packageName: string }[]> {
349
+ const source = await readFile(configPath, "utf8").catch(() => undefined);
350
+ if (source === undefined) return [];
351
+ const entries: { id: string; packageName: string }[] = [];
352
+ for (const match of source.matchAll(MARKETPLACE_PROFILE_ENTRY_PATTERN)) entries.push({ id: match[1] ?? "", packageName: match[2] ?? "" });
353
+ return entries;
354
+ }
355
+
356
+ /** The installed plugins the loader does not have, described the same way a loaded one is so the console can list them side by side instead of leaving the user to guess what happened to the install. */
357
+ async function restartPendingSummaries(services: ApiServices): Promise<readonly ReturnType<typeof pluginSummary>[]> {
358
+ const configPath = services.launch.configPath;
359
+ if (configPath === undefined || services.loader === undefined) return [];
360
+ const loaded = new Set([...services.loader.entries()].map((entry) => entry.options.id));
361
+ const entries = await readMarketplaceProfileEntries(configPath);
362
+ return entries
363
+ .filter((entry) => !loaded.has(entry.id))
364
+ .map((entry) => {
365
+ const plugin = MARKETPLACE_PLUGINS.find((item) => item.packageName === entry.packageName);
366
+ return {
367
+ id: entry.id,
368
+ name: entry.packageName,
369
+ enabled: true,
370
+ state: RESTART_REQUIRED_STATE,
371
+ removable: true,
372
+ category: plugin?.category,
373
+ };
374
+ });
375
+ }
376
+
330
377
  function pluginLoaded(services: ApiServices, packageName: string): boolean {
331
378
  return services.loader !== undefined && [...services.loader.entries()].some((entry) => entry.options.name === packageName && !entry.disabled);
332
379
  }
@@ -470,11 +517,28 @@ function registerPluginPanels(context: Context, services: ApiServices): () => vo
470
517
  return () => disposers.reverse().forEach((dispose) => dispose());
471
518
  }
472
519
 
520
+ // npm ends every failure with the path to a debug log inside its own cache, which the reader of this console has no reason to open and no easy way to reach.
521
+ const PROCESS_FAILURE_NOISE = /^npm (error|ERR!) A complete log of this run can be found in:/u;
522
+
523
+ // npm reports a failure over many lines and the whole text is shown to someone who never typed the command, so the lines are joined up to a character budget and the command itself stays on the cause for diagnostics. Node's own message is never used as the fallback: it reads `Command failed: <the whole command line>`, which is exactly what this is removing.
524
+ function processFailureText(executable: string, stderr: string, error: ExecFileException): string {
525
+ const text = stderr
526
+ .split(/\r?\n/u)
527
+ .map((line) => line.trim())
528
+ .filter((line) => line !== "" && !PROCESS_FAILURE_NOISE.test(line))
529
+ .join(" ");
530
+ if (text === "")
531
+ return error.killed === true
532
+ ? `${executable} was stopped after ${PROCESS_TIMEOUT_MS / 1000}s`
533
+ : `${executable} exited with code ${error.code ?? "unknown"} and reported nothing`;
534
+ return text.length <= PROCESS_FAILURE_TEXT_LIMIT ? text : text.slice(0, PROCESS_FAILURE_TEXT_LIMIT) + "…";
535
+ }
536
+
473
537
  function runProcess(executable: string, args: readonly string[], cwd: string): Promise<{ stdout: string; stderr: string }> {
474
538
  return new Promise((resolveProcess, rejectProcess) => {
475
- execFile(executable, [...args], { cwd, timeout: 120_000, maxBuffer: 2 * 1024 * 1024 }, (error, stdout, stderr) => {
539
+ execFile(executable, [...args], { cwd, timeout: PROCESS_TIMEOUT_MS, maxBuffer: 2 * 1024 * 1024 }, (error, stdout, stderr) => {
476
540
  if (error) {
477
- rejectProcess(new Error(`${executable} ${args.join(" ")} failed: ${stderr || error.message}`, { cause: error }));
541
+ rejectProcess(new Error(processFailureText(executable, stderr, error), { cause: { command: `${executable} ${args.join(" ")}`, error } }));
478
542
  return;
479
543
  }
480
544
  resolveProcess({ stdout, stderr });
@@ -753,9 +817,31 @@ export default {
753
817
  };
754
818
  const disposePluginPanels = registerPluginPanels(context, services);
755
819
  let busy = false;
756
- const events: AgentSessionEvent[] = [];
820
+ const events: StampedSessionEvent[] = [];
757
821
  const eventClients = new Set<ServerResponse>();
758
- const handleEvent = (event: AgentSessionEvent) => {
822
+ // Pi puts a wall-clock on a message payload and nowhere else, so a tool call has no time of its own and nothing downstream can recover when the harness saw it. The gateway is the one place that sees every event as it happens, so it stamps each one on arrival, and pairs a tool call's two events to record how long the call took.
823
+ // The stamp is written onto the event rather than onto a copy: a copy would give every event a new identity, and the serializer's cycle detection reads identity, so a self-referential event would serialize one level deeper on every hop.
824
+ const toolCallStartedAt = new Map<string, number>();
825
+ const stampEvent = (event: AgentSessionEvent): StampedSessionEvent => {
826
+ const receivedAt = Date.now();
827
+ const toolCallId = (event as { readonly toolCallId?: unknown }).toolCallId;
828
+ if (typeof toolCallId === "string" && event.type === "tool_execution_start") {
829
+ // A call whose end never arrives would otherwise keep its entry forever; the oldest is dropped rather than letting a stalled run grow the map without bound.
830
+ if (toolCallStartedAt.size >= MAX_PENDING_TOOL_CALLS) {
831
+ const oldest = toolCallStartedAt.keys().next().value;
832
+ if (oldest !== undefined) toolCallStartedAt.delete(oldest);
833
+ }
834
+ toolCallStartedAt.set(toolCallId, receivedAt);
835
+ }
836
+ if (typeof toolCallId === "string" && event.type === "tool_execution_end") {
837
+ const startedAt = toolCallStartedAt.get(toolCallId);
838
+ toolCallStartedAt.delete(toolCallId);
839
+ if (startedAt !== undefined) return Object.assign(event, { receivedAt, durationMs: receivedAt - startedAt });
840
+ }
841
+ return Object.assign(event, { receivedAt });
842
+ };
843
+ const handleEvent = (rawEvent: AgentSessionEvent) => {
844
+ const event = stampEvent(rawEvent);
759
845
  // Streaming deltas reach clients live over SSE and each one carries the whole partial message, so only durable events are retained for snapshots.
760
846
  if (event.type !== "message_update") {
761
847
  events.push(event);
@@ -1074,8 +1160,10 @@ export default {
1074
1160
  });
1075
1161
  const disposePlugins = services.webServer.register({
1076
1162
  path: "/api/plugins",
1077
- handler(_request, response) {
1078
- const items = services.loader ? [...services.loader.entries()].map(pluginSummary) : [];
1163
+ async handler(_request, response) {
1164
+ const loaded = services.loader ? [...services.loader.entries()].map(pluginSummary) : [];
1165
+ // The pending entries follow the loaded ones so a list that was stable before an install stays in the same order after it.
1166
+ const items = [...loaded, ...(await restartPendingSummaries(services))];
1079
1167
  sendJson(response, 200, jsonSafe({ items }));
1080
1168
  },
1081
1169
  });
@@ -1096,7 +1184,7 @@ export default {
1096
1184
  });
1097
1185
  const disposeMarketplace = services.webServer.register({
1098
1186
  path: "/api/marketplace",
1099
- async handler(request, response) {
1187
+ handler(request, response) {
1100
1188
  if (request.method !== "GET") {
1101
1189
  sendJson(response, 405, { error: "Method not allowed" });
1102
1190
  return;
@@ -1123,10 +1211,10 @@ export default {
1123
1211
  return;
1124
1212
  }
1125
1213
  const filtered = searchMarketplace(query, capability, category);
1214
+ const cached = readCachedMarketplaceStatistics(MARKETPLACE_PLUGINS);
1215
+ // Recommendation is only applied once the whole catalogue has been looked up. Scoring a half-warm cache would reorder the grid under the reader's cursor on every poll as the background lookups land, which costs more than the few seconds the first sort is delayed.
1126
1216
  const items =
1127
- sort === "recommended"
1128
- ? sortMarketplaceByRecommendation(attachMarketplaceStatistics(filtered, await loadMarketplaceStatistics(MARKETPLACE_PLUGINS)))
1129
- : filtered;
1217
+ sort === "recommended" && cached.ready ? sortMarketplaceByRecommendation(attachMarketplaceStatistics(filtered, cached.statistics)) : filtered;
1130
1218
  sendJson(response, 200, {
1131
1219
  ...paginateMarketplace(items, page, pageSize),
1132
1220
  capabilities: MARKETPLACE_CAPABILITIES,
@@ -1169,6 +1257,11 @@ export default {
1169
1257
  sendJson(response, 409, { error: "Plugin is already installed", plugin });
1170
1258
  return;
1171
1259
  }
1260
+ // A plugin already waiting for a restart is installed even though the loader has no entry for it, so installing it again would re-run npm and report a fresh restart for work that is already done.
1261
+ if ((await readMarketplaceProfileEntries(configPath)).some((entry) => entry.packageName === plugin.packageName)) {
1262
+ sendJson(response, 200, { plugin, installed: true, restartRequired: true });
1263
+ return;
1264
+ }
1172
1265
  const installDirectory = await marketplaceInstallDirectory(configPath, services.launch.cwd);
1173
1266
  const packageJsonPath = join(installDirectory, "package.json");
1174
1267
  const packageLockPath = join(installDirectory, "package-lock.json");
@@ -1298,7 +1391,23 @@ export default {
1298
1391
  }
1299
1392
  const entry = [...loader.entries()].find((item) => item.id === payload.id || item.options.id === payload.id);
1300
1393
  if (entry === undefined) {
1301
- sendJson(response, 404, { error: "Installed plugin was not found" });
1394
+ // A plugin waiting for a restart has no loader entry to remove, only the profile entry and the package the install left behind. Refusing here left the user unable to undo an install until they restarted the very process they installed it to avoid restarting.
1395
+ const pending = (await readMarketplaceProfileEntries(configPath)).find((item) => item.id === payload.id);
1396
+ const pendingPlugin = pending === undefined ? undefined : MARKETPLACE_PLUGINS.find((item) => item.packageName === pending.packageName);
1397
+ if (pending === undefined || pendingPlugin === undefined) {
1398
+ sendJson(response, 404, { error: "Installed plugin was not found" });
1399
+ return;
1400
+ }
1401
+ const pendingProfileBefore = await readFile(configPath, "utf8");
1402
+ const pendingInstallDirectory = await marketplaceInstallDirectory(configPath, services.launch.cwd);
1403
+ try {
1404
+ await updateMarketplaceProfile(configPath, pending.id, { remove: true });
1405
+ await runProcess("npm", ["uninstall", "--package-lock=false", marketplaceNpmPackageName(pendingPlugin.packageName)], pendingInstallDirectory);
1406
+ sendJson(response, 200, { uninstalled: true, id: payload.id });
1407
+ } catch (error) {
1408
+ await writeFile(configPath, pendingProfileBefore, "utf8").catch(() => {});
1409
+ sendJson(response, 502, { error: errorText(error) });
1410
+ }
1302
1411
  return;
1303
1412
  }
1304
1413
  const plugin = marketplacePluginForEntry(entry);
@@ -3,18 +3,18 @@
3
3
  "packageName": "@pi-harness/plugin-agent-teams",
4
4
  "version": "0.1.29",
5
5
  "name": "Agent Team Board",
6
- "description": "Maintain a bounded, session-local collaboration ledger of named roles, dependency-aware tasks, and mailbox notes without spawning agents or sending external messages.",
6
+ "description": "在当前会话内维护一份角色、任务依赖与留言板,不会额外启动 agent,也不会对外发消息。",
7
7
  "author": "Pi Harness",
8
8
  "repository": "https://github.com/pi-harness/pi-harness",
9
9
  "license": "MIT",
10
10
  "source": "official",
11
11
  "status": "verified",
12
12
  "category": {
13
- "id": "collaboration",
14
- "label": "会话协作"
13
+ "id": "workflow",
14
+ "label": "工作流"
15
15
  },
16
- "capabilities": ["collaboration ledger", "tasks", "mailbox notes", "dependency graph", "cycle detection"],
17
- "hooks": ["session lifecycle", "plugin UI"],
16
+ "capabilities": ["read-only", "session-data"],
17
+ "hooks": ["会话生命周期", "插件面板"],
18
18
  "profile": {
19
19
  "name": "@pi-harness/plugin-agent-teams",
20
20
  "config": {}
@@ -3,7 +3,7 @@
3
3
  "packageName": "@pi-harness/plugin-anchored-standard",
4
4
  "version": "0.1.29",
5
5
  "name": "Anchored Standard",
6
- "description": "Audit agent trajectories against an explicit tool-call allowlist and flag activity outside the anchored run.",
6
+ "description": "按显式的工具白名单审计 agent 的执行轨迹,标出越界的调用。",
7
7
  "author": "Pi Harness",
8
8
  "repository": "https://github.com/pi-harness/pi-harness",
9
9
  "license": "MIT",
@@ -13,8 +13,8 @@
13
13
  "id": "security",
14
14
  "label": "安全"
15
15
  },
16
- "capabilities": ["trajectory audit", "tool allowlist", "run anchoring"],
17
- "hooks": ["session events", "plugin UI"],
16
+ "capabilities": ["read-only"],
17
+ "hooks": ["会话事件", "插件面板"],
18
18
  "profile": {
19
19
  "name": "@pi-harness/plugin-anchored-standard",
20
20
  "config": {}
@@ -3,7 +3,7 @@
3
3
  "packageName": "@pi-harness/plugin-annotation",
4
4
  "version": "0.1.29",
5
5
  "name": "Annotations",
6
- "description": "Capture bounded selections and notes from the conversation for later agent context.",
6
+ "description": "把对话里选中的片段和批注存下来,作为后续对话的上下文。",
7
7
  "author": "Pi Harness",
8
8
  "repository": "https://github.com/pi-harness/pi-harness",
9
9
  "license": "MIT",
@@ -13,8 +13,8 @@
13
13
  "id": "context",
14
14
  "label": "上下文管理"
15
15
  },
16
- "capabilities": ["annotations", "context"],
17
- "hooks": ["plugin UI"],
16
+ "capabilities": ["read-only"],
17
+ "hooks": ["插件面板"],
18
18
  "profile": {
19
19
  "name": "@pi-harness/plugin-annotation",
20
20
  "config": {}
@@ -3,7 +3,7 @@
3
3
  "packageName": "@pi-harness/plugin-archify",
4
4
  "version": "0.1.29",
5
5
  "name": "Architecture Map",
6
- "description": "Build a bounded, read-only architecture map from workspace components and package dependencies.",
6
+ "description": "从工作区的模块和依赖清单生成一张只读的架构图。",
7
7
  "author": "Pi Harness",
8
8
  "repository": "https://github.com/pi-harness/pi-harness",
9
9
  "license": "MIT",
@@ -13,8 +13,8 @@
13
13
  "id": "developer",
14
14
  "label": "开发工具"
15
15
  },
16
- "capabilities": ["architecture map", "workspace scan", "dependency map", "Mermaid"],
17
- "hooks": ["workspace files", "package manifest", "plugin UI"],
16
+ "capabilities": ["reads-files", "runs-commands"],
17
+ "hooks": ["工作区文件", "依赖清单", "插件面板"],
18
18
  "profile": {
19
19
  "name": "@pi-harness/plugin-archify",
20
20
  "config": {}
@@ -3,7 +3,7 @@
3
3
  "packageName": "@pi-harness/plugin-at-file",
4
4
  "version": "0.1.29",
5
5
  "name": "@file Context",
6
- "description": "Attach a bounded 256 KiB strict UTF-8 workspace file using canonical workspace path confinement and no-follow regular-file reads, framing it as offline, read-only, untrusted model context with closing-tag neutralization and cancellable sequential execution.",
6
+ "description": "把工作区里的单个文件(上限 256 KiB、严格 UTF-8)作为只读上下文附给模型,路径限定在工作区内且不跟随符号链接。",
7
7
  "author": "Pi Harness",
8
8
  "repository": "https://github.com/pi-harness/pi-harness",
9
9
  "license": "MIT",
@@ -13,16 +13,8 @@
13
13
  "id": "context",
14
14
  "label": "上下文管理"
15
15
  },
16
- "capabilities": [
17
- "256 KiB strict UTF-8 text attachments",
18
- "canonical workspace path confinement",
19
- "no-follow regular-file reads",
20
- "untrusted context framing",
21
- "closing-tag neutralization",
22
- "cancellable sequential execution",
23
- "descriptor-safe normalized panel"
24
- ],
25
- "hooks": ["file context tool", "workspace file read", "plugin UI"],
16
+ "capabilities": ["read-only", "reads-files"],
17
+ "hooks": ["文件上下文工具", "工作区文件读取", "插件面板"],
26
18
  "profile": {
27
19
  "name": "@pi-harness/plugin-at-file",
28
20
  "config": {}
@@ -3,7 +3,7 @@
3
3
  "packageName": "@pi-harness/plugin-auto-mode",
4
4
  "version": "0.1.29",
5
5
  "name": "Auto Mode",
6
- "description": "Execute argv commands under a safe policy that blocks shell wrappers and requires confirmation for risky operations.",
6
+ "description": "在受控策略下执行 argv 命令:拒绝 shell 包装,危险操作要求确认。",
7
7
  "author": "Pi Harness",
8
8
  "repository": "https://github.com/pi-harness/pi-harness",
9
9
  "license": "MIT",
@@ -13,8 +13,8 @@
13
13
  "id": "security",
14
14
  "label": "安全"
15
15
  },
16
- "capabilities": ["command policy", "confirmation gate", "safe execution"],
17
- "hooks": ["argv execution", "plugin UI"],
16
+ "capabilities": ["reads-files", "runs-commands"],
17
+ "hooks": ["argv 执行", "插件面板"],
18
18
  "profile": {
19
19
  "name": "@pi-harness/plugin-auto-mode",
20
20
  "config": {
@@ -3,18 +3,18 @@
3
3
  "packageName": "@pi-harness/plugin-better-sidebar",
4
4
  "version": "0.1.29",
5
5
  "name": "Better Sidebar",
6
- "description": "Show a compact workspace, Git, and session overview beside the conversation without modifying files.",
6
+ "description": "在对话旁边显示工作区、Git 与会话概览,只读不改文件。",
7
7
  "author": "Pi Harness",
8
8
  "repository": "https://github.com/pi-harness/pi-harness",
9
9
  "license": "MIT",
10
10
  "source": "official",
11
11
  "status": "verified",
12
12
  "category": {
13
- "id": "developer",
14
- "label": "开发工具"
13
+ "id": "interface",
14
+ "label": "界面增强"
15
15
  },
16
- "capabilities": ["workspace overview", "Git status", "session context", "sidebar UI"],
17
- "hooks": ["workspace scan", "read-only Git", "session manager", "plugin UI"],
16
+ "capabilities": ["session-data", "reads-files", "runs-commands"],
17
+ "hooks": ["工作区扫描", "只读 Git", "会话管理器", "插件面板"],
18
18
  "profile": {
19
19
  "name": "@pi-harness/plugin-better-sidebar",
20
20
  "config": {}