@pi-harness/pi-harness 0.1.23 → 0.1.24

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 (295) hide show
  1. package/README.md +11 -9
  2. package/apps/web/dist/assets/index-BcLXLKqO.js +24 -0
  3. package/apps/web/dist/assets/index-xF647pQJ.css +2 -0
  4. package/apps/web/dist/index.html +2 -2
  5. package/apps/web/package.json +6 -6
  6. package/apps/web/profile/cordis.yml +1 -0
  7. package/apps/web/server-dist/bin.js +27 -2
  8. package/apps/web/server-dist/bin.js.map +1 -1
  9. package/apps/web/src/server/bin.ts +27 -2
  10. package/apps/web/test/bin.test.ts +228 -5
  11. package/node_modules/@pi-harness/api-gateway/dist/index.d.ts.map +1 -1
  12. package/node_modules/@pi-harness/api-gateway/dist/index.js +113 -42
  13. package/node_modules/@pi-harness/api-gateway/dist/index.js.map +1 -1
  14. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/agent-teams.json +1 -1
  15. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/anchored-standard.json +1 -1
  16. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/annotation.json +1 -1
  17. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/archify.json +1 -1
  18. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/at-file.json +1 -1
  19. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/auto-mode.json +1 -1
  20. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/better-sidebar.json +1 -1
  21. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/browser-fetch.json +1 -1
  22. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/browser-session.json +1 -1
  23. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/canvas-draw.json +1 -1
  24. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/change-verifier.json +1 -1
  25. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/cleaner.json +1 -1
  26. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/cli-notifier.json +1 -1
  27. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/code2skill.json +1 -1
  28. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/colleague-skill.json +1 -1
  29. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/context-doctor.json +1 -1
  30. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/context.json +1 -1
  31. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/cost-meter.json +1 -1
  32. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/dependency-checker.json +1 -1
  33. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/docker-sandbox.json +1 -1
  34. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/fail-logger.json +1 -1
  35. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/genui.json +1 -1
  36. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/git-time-capsule.json +1 -1
  37. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/graph-memory.json +1 -1
  38. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/history-compressor.json +1 -1
  39. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/hol-guard.json +1 -1
  40. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/i18n-pair.json +1 -1
  41. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/image-compressor.json +1 -1
  42. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/llm-verifier.json +1 -1
  43. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/mcp-client.json +1 -1
  44. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/mcp-panel.json +1 -1
  45. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/memory.json +1 -1
  46. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/mirage-bridge.json +1 -1
  47. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/mock-server.json +1 -1
  48. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/modlens.json +1 -1
  49. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/module-search.json +1 -1
  50. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/obsidian-sync.json +1 -1
  51. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/openpets.json +1 -1
  52. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/plan-execute.json +1 -1
  53. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/plugin-check.json +1 -1
  54. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/plugin-dev.json +1 -1
  55. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/plugin-finder.json +1 -1
  56. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/plugin-radar.json +1 -1
  57. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/plugin-stars.json +1 -1
  58. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/prompt-guard.json +1 -1
  59. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/prompt-library.json +1 -1
  60. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/readme-gen.json +1 -1
  61. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/recall-unread.json +1 -1
  62. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/reverse-skill.json +1 -1
  63. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/reviewer-bot.json +1 -1
  64. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/runtime-doctor.json +1 -1
  65. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/secure-audit.json +1 -1
  66. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/session-bookmarks.json +1 -1
  67. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/session-bridge.json +1 -1
  68. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/session-compare.json +1 -1
  69. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/session-export.json +1 -1
  70. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/session-insights.json +1 -1
  71. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/session-search.json +1 -1
  72. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/skill-catalog.json +1 -1
  73. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/skill-guard.json +1 -1
  74. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/sql-lens.json +1 -1
  75. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/synapse.json +1 -1
  76. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/tab-manager.json +1 -1
  77. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/taskboard.json +1 -1
  78. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/telemetry-blocker.json +1 -1
  79. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/test-harness.json +1 -1
  80. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/theme-studio.json +1 -1
  81. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/token-guard.json +1 -1
  82. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/turn-rewind.json +1 -1
  83. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/undo-savepoint.json +1 -1
  84. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/vision-toolkit.json +1 -1
  85. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/web-research.json +1 -1
  86. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/workspace-navigator.json +1 -1
  87. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/workspace-search.json +1 -1
  88. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/yaml-validator.json +1 -1
  89. package/node_modules/@pi-harness/api-gateway/package.json +1 -1
  90. package/node_modules/@pi-harness/cli/dist/main.d.ts +1 -0
  91. package/node_modules/@pi-harness/cli/dist/main.d.ts.map +1 -1
  92. package/node_modules/@pi-harness/cli/dist/main.js +11 -0
  93. package/node_modules/@pi-harness/cli/dist/main.js.map +1 -1
  94. package/node_modules/@pi-harness/cli/dist/relaunch.d.ts.map +1 -1
  95. package/node_modules/@pi-harness/cli/dist/relaunch.js +2 -4
  96. package/node_modules/@pi-harness/cli/dist/relaunch.js.map +1 -1
  97. package/node_modules/@pi-harness/cli/package.json +1 -1
  98. package/node_modules/@pi-harness/host-webserver/dist/index.d.ts +1 -0
  99. package/node_modules/@pi-harness/host-webserver/dist/index.d.ts.map +1 -1
  100. package/node_modules/@pi-harness/host-webserver/dist/index.js +39 -5
  101. package/node_modules/@pi-harness/host-webserver/dist/index.js.map +1 -1
  102. package/node_modules/@pi-harness/host-webserver/package.json +1 -1
  103. package/node_modules/@pi-harness/web-app/dist/index.d.ts.map +1 -1
  104. package/node_modules/@pi-harness/web-app/dist/index.js +12 -3
  105. package/node_modules/@pi-harness/web-app/dist/index.js.map +1 -1
  106. package/node_modules/@pi-harness/web-app/package.json +1 -1
  107. package/package.json +7 -7
  108. package/packages/api-gateway/dist/index.d.ts.map +1 -1
  109. package/packages/api-gateway/dist/index.js +113 -42
  110. package/packages/api-gateway/dist/index.js.map +1 -1
  111. package/packages/api-gateway/dist/marketplace-entries/official/agent-teams.json +1 -1
  112. package/packages/api-gateway/dist/marketplace-entries/official/anchored-standard.json +1 -1
  113. package/packages/api-gateway/dist/marketplace-entries/official/annotation.json +1 -1
  114. package/packages/api-gateway/dist/marketplace-entries/official/archify.json +1 -1
  115. package/packages/api-gateway/dist/marketplace-entries/official/at-file.json +1 -1
  116. package/packages/api-gateway/dist/marketplace-entries/official/auto-mode.json +1 -1
  117. package/packages/api-gateway/dist/marketplace-entries/official/better-sidebar.json +1 -1
  118. package/packages/api-gateway/dist/marketplace-entries/official/browser-fetch.json +1 -1
  119. package/packages/api-gateway/dist/marketplace-entries/official/browser-session.json +1 -1
  120. package/packages/api-gateway/dist/marketplace-entries/official/canvas-draw.json +1 -1
  121. package/packages/api-gateway/dist/marketplace-entries/official/change-verifier.json +1 -1
  122. package/packages/api-gateway/dist/marketplace-entries/official/cleaner.json +1 -1
  123. package/packages/api-gateway/dist/marketplace-entries/official/cli-notifier.json +1 -1
  124. package/packages/api-gateway/dist/marketplace-entries/official/code2skill.json +1 -1
  125. package/packages/api-gateway/dist/marketplace-entries/official/colleague-skill.json +1 -1
  126. package/packages/api-gateway/dist/marketplace-entries/official/context-doctor.json +1 -1
  127. package/packages/api-gateway/dist/marketplace-entries/official/context.json +1 -1
  128. package/packages/api-gateway/dist/marketplace-entries/official/cost-meter.json +1 -1
  129. package/packages/api-gateway/dist/marketplace-entries/official/dependency-checker.json +1 -1
  130. package/packages/api-gateway/dist/marketplace-entries/official/docker-sandbox.json +1 -1
  131. package/packages/api-gateway/dist/marketplace-entries/official/fail-logger.json +1 -1
  132. package/packages/api-gateway/dist/marketplace-entries/official/genui.json +1 -1
  133. package/packages/api-gateway/dist/marketplace-entries/official/git-time-capsule.json +1 -1
  134. package/packages/api-gateway/dist/marketplace-entries/official/graph-memory.json +1 -1
  135. package/packages/api-gateway/dist/marketplace-entries/official/history-compressor.json +1 -1
  136. package/packages/api-gateway/dist/marketplace-entries/official/hol-guard.json +1 -1
  137. package/packages/api-gateway/dist/marketplace-entries/official/i18n-pair.json +1 -1
  138. package/packages/api-gateway/dist/marketplace-entries/official/image-compressor.json +1 -1
  139. package/packages/api-gateway/dist/marketplace-entries/official/llm-verifier.json +1 -1
  140. package/packages/api-gateway/dist/marketplace-entries/official/mcp-client.json +1 -1
  141. package/packages/api-gateway/dist/marketplace-entries/official/mcp-panel.json +1 -1
  142. package/packages/api-gateway/dist/marketplace-entries/official/memory.json +1 -1
  143. package/packages/api-gateway/dist/marketplace-entries/official/mirage-bridge.json +1 -1
  144. package/packages/api-gateway/dist/marketplace-entries/official/mock-server.json +1 -1
  145. package/packages/api-gateway/dist/marketplace-entries/official/modlens.json +1 -1
  146. package/packages/api-gateway/dist/marketplace-entries/official/module-search.json +1 -1
  147. package/packages/api-gateway/dist/marketplace-entries/official/obsidian-sync.json +1 -1
  148. package/packages/api-gateway/dist/marketplace-entries/official/openpets.json +1 -1
  149. package/packages/api-gateway/dist/marketplace-entries/official/plan-execute.json +1 -1
  150. package/packages/api-gateway/dist/marketplace-entries/official/plugin-check.json +1 -1
  151. package/packages/api-gateway/dist/marketplace-entries/official/plugin-dev.json +1 -1
  152. package/packages/api-gateway/dist/marketplace-entries/official/plugin-finder.json +1 -1
  153. package/packages/api-gateway/dist/marketplace-entries/official/plugin-radar.json +1 -1
  154. package/packages/api-gateway/dist/marketplace-entries/official/plugin-stars.json +1 -1
  155. package/packages/api-gateway/dist/marketplace-entries/official/prompt-guard.json +1 -1
  156. package/packages/api-gateway/dist/marketplace-entries/official/prompt-library.json +1 -1
  157. package/packages/api-gateway/dist/marketplace-entries/official/readme-gen.json +1 -1
  158. package/packages/api-gateway/dist/marketplace-entries/official/recall-unread.json +1 -1
  159. package/packages/api-gateway/dist/marketplace-entries/official/reverse-skill.json +1 -1
  160. package/packages/api-gateway/dist/marketplace-entries/official/reviewer-bot.json +1 -1
  161. package/packages/api-gateway/dist/marketplace-entries/official/runtime-doctor.json +1 -1
  162. package/packages/api-gateway/dist/marketplace-entries/official/secure-audit.json +1 -1
  163. package/packages/api-gateway/dist/marketplace-entries/official/session-bookmarks.json +1 -1
  164. package/packages/api-gateway/dist/marketplace-entries/official/session-bridge.json +1 -1
  165. package/packages/api-gateway/dist/marketplace-entries/official/session-compare.json +1 -1
  166. package/packages/api-gateway/dist/marketplace-entries/official/session-export.json +1 -1
  167. package/packages/api-gateway/dist/marketplace-entries/official/session-insights.json +1 -1
  168. package/packages/api-gateway/dist/marketplace-entries/official/session-search.json +1 -1
  169. package/packages/api-gateway/dist/marketplace-entries/official/skill-catalog.json +1 -1
  170. package/packages/api-gateway/dist/marketplace-entries/official/skill-guard.json +1 -1
  171. package/packages/api-gateway/dist/marketplace-entries/official/sql-lens.json +1 -1
  172. package/packages/api-gateway/dist/marketplace-entries/official/synapse.json +1 -1
  173. package/packages/api-gateway/dist/marketplace-entries/official/tab-manager.json +1 -1
  174. package/packages/api-gateway/dist/marketplace-entries/official/taskboard.json +1 -1
  175. package/packages/api-gateway/dist/marketplace-entries/official/telemetry-blocker.json +1 -1
  176. package/packages/api-gateway/dist/marketplace-entries/official/test-harness.json +1 -1
  177. package/packages/api-gateway/dist/marketplace-entries/official/theme-studio.json +1 -1
  178. package/packages/api-gateway/dist/marketplace-entries/official/token-guard.json +1 -1
  179. package/packages/api-gateway/dist/marketplace-entries/official/turn-rewind.json +1 -1
  180. package/packages/api-gateway/dist/marketplace-entries/official/undo-savepoint.json +1 -1
  181. package/packages/api-gateway/dist/marketplace-entries/official/vision-toolkit.json +1 -1
  182. package/packages/api-gateway/dist/marketplace-entries/official/web-research.json +1 -1
  183. package/packages/api-gateway/dist/marketplace-entries/official/workspace-navigator.json +1 -1
  184. package/packages/api-gateway/dist/marketplace-entries/official/workspace-search.json +1 -1
  185. package/packages/api-gateway/dist/marketplace-entries/official/yaml-validator.json +1 -1
  186. package/packages/api-gateway/package.json +1 -1
  187. package/packages/api-gateway/src/index.ts +104 -40
  188. package/packages/api-gateway/src/marketplace-entries/official/agent-teams.json +1 -1
  189. package/packages/api-gateway/src/marketplace-entries/official/anchored-standard.json +1 -1
  190. package/packages/api-gateway/src/marketplace-entries/official/annotation.json +1 -1
  191. package/packages/api-gateway/src/marketplace-entries/official/archify.json +1 -1
  192. package/packages/api-gateway/src/marketplace-entries/official/at-file.json +1 -1
  193. package/packages/api-gateway/src/marketplace-entries/official/auto-mode.json +1 -1
  194. package/packages/api-gateway/src/marketplace-entries/official/better-sidebar.json +1 -1
  195. package/packages/api-gateway/src/marketplace-entries/official/browser-fetch.json +1 -1
  196. package/packages/api-gateway/src/marketplace-entries/official/browser-session.json +1 -1
  197. package/packages/api-gateway/src/marketplace-entries/official/canvas-draw.json +1 -1
  198. package/packages/api-gateway/src/marketplace-entries/official/change-verifier.json +1 -1
  199. package/packages/api-gateway/src/marketplace-entries/official/cleaner.json +1 -1
  200. package/packages/api-gateway/src/marketplace-entries/official/cli-notifier.json +1 -1
  201. package/packages/api-gateway/src/marketplace-entries/official/code2skill.json +1 -1
  202. package/packages/api-gateway/src/marketplace-entries/official/colleague-skill.json +1 -1
  203. package/packages/api-gateway/src/marketplace-entries/official/context-doctor.json +1 -1
  204. package/packages/api-gateway/src/marketplace-entries/official/context.json +1 -1
  205. package/packages/api-gateway/src/marketplace-entries/official/cost-meter.json +1 -1
  206. package/packages/api-gateway/src/marketplace-entries/official/dependency-checker.json +1 -1
  207. package/packages/api-gateway/src/marketplace-entries/official/docker-sandbox.json +1 -1
  208. package/packages/api-gateway/src/marketplace-entries/official/fail-logger.json +1 -1
  209. package/packages/api-gateway/src/marketplace-entries/official/genui.json +1 -1
  210. package/packages/api-gateway/src/marketplace-entries/official/git-time-capsule.json +1 -1
  211. package/packages/api-gateway/src/marketplace-entries/official/graph-memory.json +1 -1
  212. package/packages/api-gateway/src/marketplace-entries/official/history-compressor.json +1 -1
  213. package/packages/api-gateway/src/marketplace-entries/official/hol-guard.json +1 -1
  214. package/packages/api-gateway/src/marketplace-entries/official/i18n-pair.json +1 -1
  215. package/packages/api-gateway/src/marketplace-entries/official/image-compressor.json +1 -1
  216. package/packages/api-gateway/src/marketplace-entries/official/llm-verifier.json +1 -1
  217. package/packages/api-gateway/src/marketplace-entries/official/mcp-client.json +1 -1
  218. package/packages/api-gateway/src/marketplace-entries/official/mcp-panel.json +1 -1
  219. package/packages/api-gateway/src/marketplace-entries/official/memory.json +1 -1
  220. package/packages/api-gateway/src/marketplace-entries/official/mirage-bridge.json +1 -1
  221. package/packages/api-gateway/src/marketplace-entries/official/mock-server.json +1 -1
  222. package/packages/api-gateway/src/marketplace-entries/official/modlens.json +1 -1
  223. package/packages/api-gateway/src/marketplace-entries/official/module-search.json +1 -1
  224. package/packages/api-gateway/src/marketplace-entries/official/obsidian-sync.json +1 -1
  225. package/packages/api-gateway/src/marketplace-entries/official/openpets.json +1 -1
  226. package/packages/api-gateway/src/marketplace-entries/official/plan-execute.json +1 -1
  227. package/packages/api-gateway/src/marketplace-entries/official/plugin-check.json +1 -1
  228. package/packages/api-gateway/src/marketplace-entries/official/plugin-dev.json +1 -1
  229. package/packages/api-gateway/src/marketplace-entries/official/plugin-finder.json +1 -1
  230. package/packages/api-gateway/src/marketplace-entries/official/plugin-radar.json +1 -1
  231. package/packages/api-gateway/src/marketplace-entries/official/plugin-stars.json +1 -1
  232. package/packages/api-gateway/src/marketplace-entries/official/prompt-guard.json +1 -1
  233. package/packages/api-gateway/src/marketplace-entries/official/prompt-library.json +1 -1
  234. package/packages/api-gateway/src/marketplace-entries/official/readme-gen.json +1 -1
  235. package/packages/api-gateway/src/marketplace-entries/official/recall-unread.json +1 -1
  236. package/packages/api-gateway/src/marketplace-entries/official/reverse-skill.json +1 -1
  237. package/packages/api-gateway/src/marketplace-entries/official/reviewer-bot.json +1 -1
  238. package/packages/api-gateway/src/marketplace-entries/official/runtime-doctor.json +1 -1
  239. package/packages/api-gateway/src/marketplace-entries/official/secure-audit.json +1 -1
  240. package/packages/api-gateway/src/marketplace-entries/official/session-bookmarks.json +1 -1
  241. package/packages/api-gateway/src/marketplace-entries/official/session-bridge.json +1 -1
  242. package/packages/api-gateway/src/marketplace-entries/official/session-compare.json +1 -1
  243. package/packages/api-gateway/src/marketplace-entries/official/session-export.json +1 -1
  244. package/packages/api-gateway/src/marketplace-entries/official/session-insights.json +1 -1
  245. package/packages/api-gateway/src/marketplace-entries/official/session-search.json +1 -1
  246. package/packages/api-gateway/src/marketplace-entries/official/skill-catalog.json +1 -1
  247. package/packages/api-gateway/src/marketplace-entries/official/skill-guard.json +1 -1
  248. package/packages/api-gateway/src/marketplace-entries/official/sql-lens.json +1 -1
  249. package/packages/api-gateway/src/marketplace-entries/official/synapse.json +1 -1
  250. package/packages/api-gateway/src/marketplace-entries/official/tab-manager.json +1 -1
  251. package/packages/api-gateway/src/marketplace-entries/official/taskboard.json +1 -1
  252. package/packages/api-gateway/src/marketplace-entries/official/telemetry-blocker.json +1 -1
  253. package/packages/api-gateway/src/marketplace-entries/official/test-harness.json +1 -1
  254. package/packages/api-gateway/src/marketplace-entries/official/theme-studio.json +1 -1
  255. package/packages/api-gateway/src/marketplace-entries/official/token-guard.json +1 -1
  256. package/packages/api-gateway/src/marketplace-entries/official/turn-rewind.json +1 -1
  257. package/packages/api-gateway/src/marketplace-entries/official/undo-savepoint.json +1 -1
  258. package/packages/api-gateway/src/marketplace-entries/official/vision-toolkit.json +1 -1
  259. package/packages/api-gateway/src/marketplace-entries/official/web-research.json +1 -1
  260. package/packages/api-gateway/src/marketplace-entries/official/workspace-navigator.json +1 -1
  261. package/packages/api-gateway/src/marketplace-entries/official/workspace-search.json +1 -1
  262. package/packages/api-gateway/src/marketplace-entries/official/yaml-validator.json +1 -1
  263. package/packages/api-gateway/test/index.test.ts +438 -4
  264. package/packages/api-gateway/test/packed-package.test.ts +70 -0
  265. package/packages/api-gateway/test/reference-docs.test.ts +50 -0
  266. package/packages/api-gateway/test/release-package.test.ts +32 -1
  267. package/packages/api-gateway/test/release-version.test.ts +40 -0
  268. package/packages/bundle-web-app/dist/index.d.ts.map +1 -1
  269. package/packages/bundle-web-app/dist/index.js +12 -3
  270. package/packages/bundle-web-app/dist/index.js.map +1 -1
  271. package/packages/bundle-web-app/package.json +1 -1
  272. package/packages/bundle-web-app/src/index.ts +13 -3
  273. package/packages/bundle-web-app/test/index.test.ts +83 -2
  274. package/packages/cli/dist/main.d.ts +1 -0
  275. package/packages/cli/dist/main.d.ts.map +1 -1
  276. package/packages/cli/dist/main.js +11 -0
  277. package/packages/cli/dist/main.js.map +1 -1
  278. package/packages/cli/dist/relaunch.d.ts.map +1 -1
  279. package/packages/cli/dist/relaunch.js +2 -4
  280. package/packages/cli/dist/relaunch.js.map +1 -1
  281. package/packages/cli/package.json +1 -1
  282. package/packages/cli/src/main.ts +11 -0
  283. package/packages/cli/src/relaunch.ts +2 -3
  284. package/packages/cli/test/cli.test.ts +3 -1
  285. package/packages/cli/test/main.test.ts +134 -0
  286. package/packages/cli/test/relaunch.test.ts +86 -11
  287. package/packages/host-webserver/dist/index.d.ts +1 -0
  288. package/packages/host-webserver/dist/index.d.ts.map +1 -1
  289. package/packages/host-webserver/dist/index.js +39 -5
  290. package/packages/host-webserver/dist/index.js.map +1 -1
  291. package/packages/host-webserver/package.json +1 -1
  292. package/packages/host-webserver/src/index.ts +44 -6
  293. package/packages/host-webserver/test/index.test.ts +36 -5
  294. package/apps/web/dist/assets/index-BVI_IS-R.css +0 -2
  295. package/apps/web/dist/assets/index-Bo9CNI_U.js +0 -22
@@ -1,7 +1,7 @@
1
1
  import { execFile, type ExecFileException } from "node:child_process";
2
2
  import { mkdir, mkdtemp, readFile, rename, rm, stat, unlink, writeFile } from "node:fs/promises";
3
3
  import type { IncomingMessage, ServerResponse } from "node:http";
4
- import { basename, isAbsolute, join, relative, resolve, sep } from "node:path";
4
+ import { basename, dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
5
5
  import { tmpdir } from "node:os";
6
6
  import type { Context } from "@deepseek-ai/cordis";
7
7
  import { SessionManager, type AgentSessionEvent, type ExtensionUIContext } from "@earendil-works/pi-coding-agent";
@@ -18,6 +18,7 @@ import {
18
18
  paginateMarketplace,
19
19
  searchMarketplace,
20
20
  needsMarketplacePackageInstall,
21
+ marketplaceNpmPackageName,
21
22
  sortMarketplaceByRecommendation,
22
23
  type MarketplacePlugin,
23
24
  } from "./marketplace.js";
@@ -55,17 +56,18 @@ function sendJson(response: ServerResponse, status: number, payload: unknown): v
55
56
  response.end(body);
56
57
  }
57
58
 
59
+ // A multi-byte UTF-8 sequence can straddle a chunk boundary, so the raw bytes are collected and decoded once; decoding each chunk on its own would replace the split sequence with U+FFFD.
58
60
  async function bodyText(request: IncomingMessage, maxBytes = DEFAULT_BODY_LIMIT_BYTES): Promise<string> {
59
- const chunks: string[] = [];
61
+ const chunks: Buffer[] = [];
60
62
  let length = 0;
61
63
  for await (const chunk of request) {
62
64
  const input: string | Uint8Array = chunk as string | Uint8Array;
63
- const value = typeof input === "string" ? input : Buffer.from(input).toString("utf8");
64
- length += Buffer.byteLength(value);
65
+ const buffer = typeof input === "string" ? Buffer.from(input, "utf8") : Buffer.isBuffer(input) ? input : Buffer.from(input);
66
+ length += buffer.length;
65
67
  if (length > maxBytes) throw new PayloadTooLargeError();
66
- chunks.push(value);
68
+ chunks.push(buffer);
67
69
  }
68
- return chunks.join("");
70
+ return Buffer.concat(chunks).toString("utf8");
69
71
  }
70
72
 
71
73
  function errorText(error: unknown): string {
@@ -80,9 +82,14 @@ function jsonSafe(value: unknown, seen = new WeakSet<object>()): unknown {
80
82
  if (value instanceof Date) return value.toISOString();
81
83
  if (typeof value !== "object") return Object.prototype.toString.call(value);
82
84
  if (seen.has(value)) return "[Circular]";
85
+ // Only the ancestors of the current node stay marked: a sibling that repeats the same object (Pi pushes one AgentMessage instance into both the message list and its events) is legitimate data, not a cycle.
83
86
  seen.add(value);
84
- if (Array.isArray(value)) return value.map((item) => jsonSafe(item, seen));
85
- return Object.fromEntries(Object.entries(value).map(([key, item]) => [key, jsonSafe(item, seen)]));
87
+ try {
88
+ if (Array.isArray(value)) return value.map((item) => jsonSafe(item, seen));
89
+ return Object.fromEntries(Object.entries(value).map(([key, item]) => [key, jsonSafe(item, seen)]));
90
+ } finally {
91
+ seen.delete(value);
92
+ }
86
93
  }
87
94
 
88
95
  function createStatus(services: ApiServices, events: readonly AgentSessionEvent[]) {
@@ -350,6 +357,7 @@ function sanitizeLogValue(value: unknown, state: LogSanitizeState, depth = 0): u
350
357
  if (typeof value !== "object") return Object.prototype.toString.call(value);
351
358
  if (depth >= loggerPanelDepthLimit) return "[Max Depth]";
352
359
  if (state.seen.has(value)) return "[Circular]";
360
+ // Unmarked once its subtree is done, so an object logged twice as a sibling is rendered twice instead of being mistaken for a cycle.
353
361
  state.seen.add(value);
354
362
 
355
363
  try {
@@ -379,6 +387,8 @@ function sanitizeLogValue(value: unknown, state: LogSanitizeState, depth = 0): u
379
387
  return Object.fromEntries(entries);
380
388
  } catch {
381
389
  return "[Unavailable]";
390
+ } finally {
391
+ state.seen.delete(value);
382
392
  }
383
393
  }
384
394
 
@@ -530,17 +540,18 @@ interface GitStatusResult {
530
540
  readonly truncated: boolean;
531
541
  }
532
542
 
543
+ // `-z` is what makes the paths usable: without it git wraps any path holding a space, a quote or a non-ASCII byte in C-style quoting, and the quoted form is not a pathspec git will accept back on diff, add or ls-files.
533
544
  function gitStatus(cwd: string): Promise<GitStatusResult> {
534
545
  return new Promise((resolveStatus, rejectStatus) => {
535
- execFile("git", ["status", "--short", "--untracked-files=all"], { cwd, timeout: GIT_TIMEOUT_MS, maxBuffer: 512 * 1024 }, (error, stdout, stderr) => {
546
+ execFile("git", ["status", "--short", "-z", "--untracked-files=all"], { cwd, timeout: GIT_TIMEOUT_MS, maxBuffer: 512 * 1024 }, (error, stdout, stderr) => {
536
547
  if (error === null) {
537
548
  resolveStatus({ output: stdout, truncated: false });
538
549
  return;
539
550
  }
540
551
  const termination = gitTermination(error);
541
552
  if (termination === "output-limit") {
542
- // Keep the complete lines that arrived before the kill; the final line may have been cut mid-path.
543
- resolveStatus({ output: stdout.slice(0, stdout.lastIndexOf("\n") + 1), truncated: true });
553
+ // Keep the complete records that arrived before the kill; the final one may have been cut mid-path.
554
+ resolveStatus({ output: stdout.slice(0, stdout.lastIndexOf("\0") + 1), truncated: true });
544
555
  return;
545
556
  }
546
557
  if (termination === undefined && error.code === 128 && /not a git repository/i.test(stderr)) {
@@ -610,6 +621,26 @@ async function isDirectory(path: string): Promise<boolean> {
610
621
  }
611
622
  }
612
623
 
624
+ async function isFile(path: string): Promise<boolean> {
625
+ try {
626
+ return (await stat(path)).isFile();
627
+ } catch {
628
+ return false;
629
+ }
630
+ }
631
+
632
+ // The loader resolves a bare plugin specifier from the profile file upwards (`createRequire(profilePath).resolve(name)`), never from the shell the harness was started in, so a marketplace package has to land in the package that owns the profile or it installs successfully and then fails to load.
633
+ async function marketplaceInstallDirectory(configPath: string, fallback: string): Promise<string> {
634
+ let directory = dirname(resolve(configPath));
635
+ let parent = dirname(directory);
636
+ while (parent !== directory) {
637
+ if (await isFile(join(directory, "package.json"))) return directory;
638
+ directory = parent;
639
+ parent = dirname(directory);
640
+ }
641
+ return fallback;
642
+ }
643
+
613
644
  function pickDirectory(): Promise<string> {
614
645
  return new Promise((resolvePath, reject) => {
615
646
  execFile(
@@ -1073,15 +1104,17 @@ export default {
1073
1104
  sendJson(response, 409, { error: "Plugin is already installed", plugin });
1074
1105
  return;
1075
1106
  }
1076
- const packageJsonPath = join(services.launch.cwd, "package.json");
1077
- const packageLockPath = join(services.launch.cwd, "package-lock.json");
1107
+ const installDirectory = await marketplaceInstallDirectory(configPath, services.launch.cwd);
1108
+ const packageJsonPath = join(installDirectory, "package.json");
1109
+ const packageLockPath = join(installDirectory, "package-lock.json");
1078
1110
  const packageJsonBefore = await readFile(packageJsonPath, "utf8").catch(() => undefined);
1079
1111
  const packageLockBefore = await readFile(packageLockPath, "utf8").catch(() => undefined);
1080
1112
  let profileBefore: string | undefined;
1081
1113
  let entryId: string | undefined;
1082
1114
  try {
1083
1115
  if (needsMarketplacePackageInstall(plugin)) {
1084
- await runProcess("npm", ["install", "--save-exact", "--package-lock=false", `${plugin.packageName}@${plugin.version}`], services.launch.cwd);
1116
+ const specifier = `${marketplaceNpmPackageName(plugin.packageName)}@${plugin.version}`;
1117
+ await runProcess("npm", ["install", "--save-exact", "--package-lock=false", specifier], installDirectory);
1085
1118
  }
1086
1119
  profileBefore = await appendMarketplaceProfile(configPath, plugin);
1087
1120
  if (!needsMarketplacePackageInstall(plugin)) {
@@ -1101,8 +1134,11 @@ export default {
1101
1134
  } catch (error) {
1102
1135
  if (entryId !== undefined) await loader.remove(entryId).catch(() => {});
1103
1136
  if (profileBefore !== undefined) await writeFile(configPath, profileBefore, "utf8").catch(() => {});
1104
- if (packageJsonBefore !== undefined) await writeFile(packageJsonPath, packageJsonBefore, "utf8").catch(() => {});
1105
- if (packageLockBefore !== undefined) await writeFile(packageLockPath, packageLockBefore, "utf8").catch(() => {});
1137
+ // A manifest npm created for this install is removed rather than left behind; restoring is only possible when one existed before.
1138
+ if (packageJsonBefore === undefined) await unlink(packageJsonPath).catch(() => {});
1139
+ else await writeFile(packageJsonPath, packageJsonBefore, "utf8").catch(() => {});
1140
+ if (packageLockBefore === undefined) await unlink(packageLockPath).catch(() => {});
1141
+ else await writeFile(packageLockPath, packageLockBefore, "utf8").catch(() => {});
1106
1142
  sendJson(response, 502, { error: errorText(error) });
1107
1143
  }
1108
1144
  } catch (error) {
@@ -1198,15 +1234,17 @@ export default {
1198
1234
  }
1199
1235
  const profileEntryId = entry.options.id;
1200
1236
  const profileBefore = await readFile(configPath, "utf8");
1201
- const packageJsonPath = join(services.launch.cwd, "package.json");
1202
- const packageLockPath = join(services.launch.cwd, "package-lock.json");
1237
+ const installDirectory = await marketplaceInstallDirectory(configPath, services.launch.cwd);
1238
+ const packageJsonPath = join(installDirectory, "package.json");
1239
+ const packageLockPath = join(installDirectory, "package-lock.json");
1203
1240
  const packageJsonBefore = await readFile(packageJsonPath, "utf8").catch(() => undefined);
1204
1241
  const packageLockBefore = await readFile(packageLockPath, "utf8").catch(() => undefined);
1205
1242
  await entry.parent.remove(entry.options.id);
1206
1243
  entry.parent.tree.write();
1207
1244
  try {
1208
1245
  await updateMarketplaceProfile(configPath, profileEntryId, { remove: true });
1209
- if (needsMarketplacePackageInstall(plugin)) await runProcess("npm", ["uninstall", "--package-lock=false", plugin.packageName], services.launch.cwd);
1246
+ if (needsMarketplacePackageInstall(plugin))
1247
+ await runProcess("npm", ["uninstall", "--package-lock=false", marketplaceNpmPackageName(plugin.packageName)], installDirectory);
1210
1248
  sendJson(response, 200, { uninstalled: true, id: payload.id });
1211
1249
  } catch (error) {
1212
1250
  await writeFile(configPath, profileBefore, "utf8").catch(() => {});
@@ -1309,18 +1347,20 @@ export default {
1309
1347
  sendJson(response, 500, { error: errorText(error) });
1310
1348
  return;
1311
1349
  }
1312
- const items = status.output
1313
- .split("\n")
1314
- .map((line) => line.trimEnd())
1315
- .filter((line) => line.length > 0)
1316
- .map((line) => {
1317
- const status = line.slice(0, 2).trim() || "??";
1318
- return {
1319
- path: line.slice(3),
1320
- status,
1321
- label: status === "??" ? "untracked" : status.includes("D") ? "deleted" : status.includes("A") ? "added" : "modified",
1322
- };
1350
+ const records = status.output.split("\0");
1351
+ const items: { path: string; status: string; label: string }[] = [];
1352
+ for (let index = 0; index < records.length; index += 1) {
1353
+ const record = records[index] ?? "";
1354
+ if (record.length < 4) continue;
1355
+ const code = record.slice(0, 2).trim() || "??";
1356
+ // Rename and copy records carry the original path in a second NUL-terminated field, which is not a workspace change of its own.
1357
+ if (code.startsWith("R") || code.startsWith("C")) index += 1;
1358
+ items.push({
1359
+ path: record.slice(3),
1360
+ status: code,
1361
+ label: code === "??" ? "untracked" : code.includes("D") ? "deleted" : code.includes("A") ? "added" : "modified",
1323
1362
  });
1363
+ }
1324
1364
  sendJson(response, 200, { items, ...(status.truncated ? { truncated: true } : {}) });
1325
1365
  },
1326
1366
  });
@@ -1803,20 +1843,44 @@ export default {
1803
1843
  sendJson(response, 409, { error: "Cannot batch-delete the active session" });
1804
1844
  return;
1805
1845
  }
1806
- await mutateSessionMetadata(manager, context.logger, async (metadata) => {
1846
+ if (action === "delete") {
1847
+ // The unlinks run outside the metadata mutation: a failure halfway through must not discard the key removals for the files that are already gone from disk.
1848
+ const removed: string[] = [];
1849
+ const failed: { path: string; error: string }[] = [];
1807
1850
  for (const path of paths) {
1808
- if (action === "delete") {
1851
+ try {
1809
1852
  await unlink(path);
1810
- delete metadata[path];
1811
- } else {
1812
- const current = metadata[path] ?? {};
1813
- metadata[path] = {
1814
- ...current,
1815
- ...(action === "archive" || action === "unarchive" ? { archived: action === "archive" } : {}),
1816
- ...(action === "pin" || action === "unpin" ? { pinned: action === "pin" } : {}),
1817
- };
1853
+ removed.push(path);
1854
+ } catch (error) {
1855
+ // A session another tab already deleted leaves nothing to unlink, but its metadata entry still has to go.
1856
+ if ((error as NodeJS.ErrnoException).code === "ENOENT") removed.push(path);
1857
+ else failed.push({ path, error: errorText(error) });
1818
1858
  }
1819
1859
  }
1860
+ await mutateSessionMetadata(manager, context.logger, (metadata) => {
1861
+ for (const path of removed) delete metadata[path];
1862
+ });
1863
+ if (failed.length > 0) {
1864
+ sendJson(response, 409, {
1865
+ error: `Some sessions could not be deleted: ${failed.map((item) => item.path).join(", ")}`,
1866
+ action,
1867
+ count: removed.length,
1868
+ failed,
1869
+ });
1870
+ return;
1871
+ }
1872
+ sendJson(response, 200, { action, count: removed.length });
1873
+ return;
1874
+ }
1875
+ await mutateSessionMetadata(manager, context.logger, (metadata) => {
1876
+ for (const path of paths) {
1877
+ const current = metadata[path] ?? {};
1878
+ metadata[path] = {
1879
+ ...current,
1880
+ ...(action === "archive" || action === "unarchive" ? { archived: action === "archive" } : {}),
1881
+ ...(action === "pin" || action === "unpin" ? { pinned: action === "pin" } : {}),
1882
+ };
1883
+ }
1820
1884
  });
1821
1885
  sendJson(response, 200, { action, count: paths.length });
1822
1886
  } catch (error) {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "agent-teams",
3
3
  "packageName": "@pi-harness/core/plugins/agent-teams",
4
- "version": "0.1.23",
4
+ "version": "0.1.24",
5
5
  "name": "Agent Team Board",
6
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.",
7
7
  "author": "Pi Harness",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "anchored-standard",
3
3
  "packageName": "@pi-harness/core/plugins/anchored-standard",
4
- "version": "0.1.23",
4
+ "version": "0.1.24",
5
5
  "name": "Anchored Standard",
6
6
  "description": "Audit agent trajectories against an explicit tool-call allowlist and flag activity outside the anchored run.",
7
7
  "author": "Pi Harness",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "annotation",
3
3
  "packageName": "@pi-harness/core/plugins/annotation",
4
- "version": "0.1.23",
4
+ "version": "0.1.24",
5
5
  "name": "Annotations",
6
6
  "description": "Capture bounded selections and notes from the conversation for later agent context.",
7
7
  "author": "Pi Harness",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "archify",
3
3
  "packageName": "@pi-harness/core/plugins/archify",
4
- "version": "0.1.23",
4
+ "version": "0.1.24",
5
5
  "name": "Architecture Map",
6
6
  "description": "Build a bounded, read-only architecture map from workspace components and package dependencies.",
7
7
  "author": "Pi Harness",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "at-file",
3
3
  "packageName": "@pi-harness/core/plugins/at-file",
4
- "version": "0.1.23",
4
+ "version": "0.1.24",
5
5
  "name": "@file Context",
6
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.",
7
7
  "author": "Pi Harness",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "auto-mode",
3
3
  "packageName": "@pi-harness/core/plugins/auto-mode",
4
- "version": "0.1.23",
4
+ "version": "0.1.24",
5
5
  "name": "Auto Mode",
6
6
  "description": "Execute argv commands under a safe policy that blocks shell wrappers and requires confirmation for risky operations.",
7
7
  "author": "Pi Harness",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "better-sidebar",
3
3
  "packageName": "@pi-harness/core/plugins/better-sidebar",
4
- "version": "0.1.23",
4
+ "version": "0.1.24",
5
5
  "name": "Better Sidebar",
6
6
  "description": "Show a compact workspace, Git, and session overview beside the conversation without modifying files.",
7
7
  "author": "Pi Harness",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "browser-fetch",
3
3
  "packageName": "@pi-harness/core/plugins/browser-fetch",
4
- "version": "0.1.23",
4
+ "version": "0.1.24",
5
5
  "name": "Browser Fetch",
6
6
  "description": "Fetch public HTTP and HTTPS pages as bounded text with descriptor-safe inputs, DNS pinning, per-redirect private-network validation, textual MIME enforcement, cancellation, a whole-request timeout, and validated fail-closed panel reporting.",
7
7
  "author": "Pi Harness",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "browser-session",
3
3
  "packageName": "@pi-harness/core/plugins/browser-session",
4
- "version": "0.1.23",
4
+ "version": "0.1.24",
5
5
  "name": "Browser Session",
6
6
  "description": "Control a loopback-only Chrome DevTools session with descriptor-safe commands, bounded discovery, cancellable operations, screenshot metadata protection, and validated fail-closed panel previews.",
7
7
  "author": "Pi Harness",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "canvas-draw",
3
3
  "packageName": "@pi-harness/core/plugins/canvas-draw",
4
- "version": "0.1.23",
4
+ "version": "0.1.24",
5
5
  "name": "Canvas Draw",
6
6
  "description": "Generate validated, bounded Mermaid flowchart source from structured nodes and edges in the workspace UI.",
7
7
  "author": "Pi Harness",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "change-verifier",
3
3
  "packageName": "@pi-harness/core/plugins/change-verifier",
4
- "version": "0.1.23",
4
+ "version": "0.1.24",
5
5
  "name": "Change Verifier",
6
6
  "description": "Combine project tests and Git change review into one explicit verification gate before handoff.",
7
7
  "author": "Pi Harness",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "cleaner",
3
3
  "packageName": "@pi-harness/core/plugins/cleaner",
4
- "version": "0.1.23",
4
+ "version": "0.1.24",
5
5
  "name": "Cleaner",
6
6
  "description": "Strict descriptor-safe configuration and parameters, display-safe bounded Pi Harness Git capsule inventory, removal with explicit confirmation and retention controls, symlink and replacement defenses, cancellable serialization, and a fail-closed normalized panel.",
7
7
  "author": "Pi Harness",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "cli-notifier",
3
3
  "packageName": "@pi-harness/core/plugins/cli-notifier",
4
- "version": "0.1.23",
4
+ "version": "0.1.24",
5
5
  "name": "CLI Notifier",
6
6
  "description": "Send local desktop notifications when an agent turn completes, fails, or is aborted, and when context compaction fails.",
7
7
  "author": "Pi Harness",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "code2skill",
3
3
  "packageName": "@pi-harness/core/plugins/code2skill",
4
- "version": "0.1.23",
4
+ "version": "0.1.24",
5
5
  "name": "Code2Skill",
6
6
  "description": "Package selected workspace source files into a bounded local Pi skill with a generated SKILL.md manifest and preserved references.",
7
7
  "author": "Pi Harness",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "colleague-skill",
3
3
  "packageName": "@pi-harness/core/plugins/colleague-skill",
4
- "version": "0.1.23",
4
+ "version": "0.1.24",
5
5
  "name": "Colleague Skill",
6
6
  "description": "Create durable, structured handoff packets for another role without hidden agents or external message delivery.",
7
7
  "author": "Pi Harness",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "context-doctor",
3
3
  "packageName": "@pi-harness/core/plugins/context-doctor",
4
- "version": "0.1.23",
4
+ "version": "0.1.24",
5
5
  "name": "Context Doctor",
6
6
  "description": "Descriptor-safe bounded context audits detect pressure, oversized or uninspectable messages, and tool errors. Compaction requests are queued until the agent has settled; confirmed model-backed compaction may incur cost and provides cancellable waits with dedicated cancellation.",
7
7
  "author": "Pi Harness",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "context-insights",
3
3
  "packageName": "@pi-harness/core/plugins/context",
4
- "version": "0.1.23",
4
+ "version": "0.1.24",
5
5
  "name": "Context Insights",
6
6
  "description": "Inspect context usage and descriptor-safe bounded message composition with cached active-session lifecycle counters and a fixed-limit normalized browser panel.",
7
7
  "author": "Pi Harness",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "cost-meter",
3
3
  "packageName": "@pi-harness/core/plugins/cost-meter",
4
- "version": "0.1.23",
4
+ "version": "0.1.24",
5
5
  "name": "Cost Meter",
6
6
  "description": "Track runtime-reported costs as UTC daily increments in a bounded local ledger, with session snapshots and optional daily budget monitoring; no model prices are guessed.",
7
7
  "author": "Pi Harness",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "dependency-checker",
3
3
  "packageName": "@pi-harness/core/plugins/dependency-checker",
4
- "version": "0.1.23",
4
+ "version": "0.1.24",
5
5
  "name": "Dependency Checker",
6
6
  "description": "Run a bounded, offline, read-only check of workspace package.json and requirements*.txt manifests for local package presence, duplicate declaration consistency, unresolved constraints, and unsupported Python directives.",
7
7
  "author": "Pi Harness",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "docker-sandbox",
3
3
  "packageName": "@pi-harness/core/plugins/docker-sandbox",
4
- "version": "0.1.23",
4
+ "version": "0.1.24",
5
5
  "name": "Docker Sandbox",
6
6
  "description": "Run descriptor-safe argv commands with local-only Docker images, no container network, a read-only workspace by default, fixed CPU, memory, and PID limits, sanitized output, strict panel reporting, and cancellation cleanup.",
7
7
  "author": "Pi Harness",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "fail-logger",
3
3
  "packageName": "@pi-harness/core/plugins/fail-logger",
4
- "version": "0.1.23",
4
+ "version": "0.1.24",
5
5
  "name": "Failure Logger",
6
6
  "description": "Aggregate bounded extension, Agent, and non-aborted compaction failures through descriptor-safe event inspection, safe diagnostic summaries, and occurrence counts without retaining full payloads.",
7
7
  "author": "Pi Harness",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "genui",
3
3
  "packageName": "@pi-harness/core/plugins/genui",
4
- "version": "0.1.23",
4
+ "version": "0.1.24",
5
5
  "name": "GenUI",
6
6
  "description": "Render bounded structured cards with text, badge, and decimal progress blocks while displaying HTML and scripts as plain text.",
7
7
  "author": "Pi Harness",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "git-time-capsule",
3
3
  "packageName": "@pi-harness/core/plugins/git-time-capsule",
4
- "version": "0.1.23",
4
+ "version": "0.1.24",
5
5
  "name": "Git Time Capsule",
6
6
  "description": "Capture the current unstaged tracked Git diff as a byte-exact, validated undo capsule without external diff or textconv helpers, then reverse-apply it only after explicit confirmation.",
7
7
  "author": "Pi Harness",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "graph-memory",
3
3
  "packageName": "@pi-harness/core/plugins/graph-memory",
4
- "version": "0.1.23",
4
+ "version": "0.1.24",
5
5
  "name": "Graph Memory",
6
6
  "description": "Store bounded typed task, skill, and event nodes with validated directed relations, atomic locked persistence, and inspectable cross-session search.",
7
7
  "author": "Pi Harness",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "history-compressor",
3
3
  "packageName": "@pi-harness/core/plugins/history-compressor",
4
- "version": "0.1.23",
4
+ "version": "0.1.24",
5
5
  "name": "History Compressor",
6
6
  "description": "Compact the current Pi session automatically when context usage approaches a configured threshold.",
7
7
  "author": "Pi Harness",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "hol-guard",
3
3
  "packageName": "@pi-harness/core/plugins/hol-guard",
4
- "version": "0.1.23",
4
+ "version": "0.1.24",
5
5
  "name": "HOL Guard",
6
6
  "description": "Audit tool arguments and preflight text for destructive commands, sensitive paths, credentials, and remote exfiltration. Advisory only: reports risk, does not block execution.",
7
7
  "author": "Pi Harness",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "i18n-pair",
3
3
  "packageName": "@pi-harness/core/plugins/i18n-pair",
4
- "version": "0.1.23",
4
+ "version": "0.1.24",
5
5
  "name": "I18n Pair",
6
6
  "description": "Strict read-only comparison of bounded JSON locale files from no-follow workspace paths, with collision-safe missing and extra keys, stable failures, cancellation, and validated panel status.",
7
7
  "author": "Pi Harness",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "image-compressor",
3
3
  "packageName": "@pi-harness/core/plugins/image-compressor",
4
- "version": "0.1.23",
4
+ "version": "0.1.24",
5
5
  "name": "Image Compressor",
6
6
  "description": "Create bounded image copies for model context while preserving the original file and reporting saved bytes.",
7
7
  "author": "Pi Harness",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "llm-verifier",
3
3
  "packageName": "@pi-harness/core/plugins/llm-verifier",
4
- "version": "0.1.23",
4
+ "version": "0.1.24",
5
5
  "name": "LLM Verifier",
6
6
  "description": "Ask a configured verifier model to judge a claim against bounded, untrusted evidence.",
7
7
  "author": "Pi Harness",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "mcp-client",
3
3
  "packageName": "@pi-harness/core/plugins/mcp-client",
4
- "version": "0.1.23",
4
+ "version": "0.1.24",
5
5
  "name": "MCP Client",
6
6
  "description": "Connect to direct-argv MCP stdio servers with bounded pagination and protocol validation, tool, resource, and prompt bridging, cancellable queued requests, and lifecycle-owned process cleanup.",
7
7
  "author": "Pi Harness",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "mcp-panel",
3
3
  "packageName": "@pi-harness/core/plugins/mcp-panel",
4
- "version": "0.1.23",
4
+ "version": "0.1.24",
5
5
  "name": "MCP Panel",
6
6
  "description": "Inspect MCP server health and tools, preview profile patches, and apply changes only with an explicit confirmation and backup.",
7
7
  "author": "Pi Harness",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "memory",
3
3
  "packageName": "@pi-harness/core/plugins/memory",
4
- "version": "0.1.23",
4
+ "version": "0.1.24",
5
5
  "name": "Memory",
6
6
  "description": "Persist bounded cross-session notes with explicit recall and update operations.",
7
7
  "author": "Pi Harness",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "mirage-bridge",
3
3
  "packageName": "@pi-harness/core/plugins/mirage-bridge",
4
- "version": "0.1.23",
4
+ "version": "0.1.24",
5
5
  "name": "Mirage Bridge",
6
6
  "description": "Connect Pi Harness to the official Mirage virtual-terminal CLI without adding a second host shell.",
7
7
  "author": "Pi Harness",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "mock-server",
3
3
  "packageName": "@pi-harness/core/plugins/mock-server",
4
- "version": "0.1.23",
4
+ "version": "0.1.24",
5
5
  "name": "Mock Server",
6
6
  "description": "Start a local, bounded HTTP mock server from explicit routes for integration testing without external services.",
7
7
  "author": "Pi Harness",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "modlens",
3
3
  "packageName": "@pi-harness/core/plugins/modlens",
4
- "version": "0.1.23",
4
+ "version": "0.1.24",
5
5
  "name": "ModLens Vision Bridge",
6
6
  "description": "Send bounded workspace images to native vision models or return schema-validated evidence from the bundled ModLens engine for text-only models.",
7
7
  "author": "Pi Harness",