@pi-harness/pi-harness 0.1.28 → 0.1.29

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 (282) hide show
  1. package/apps/web/dist/assets/{index-1vaEg8Vr.js → index-DCkzrlCA.js} +2 -2
  2. package/apps/web/dist/index.html +1 -1
  3. package/apps/web/package.json +6 -6
  4. package/apps/web/profile/cordis.yml +73 -73
  5. package/node_modules/@pi-harness/api-gateway/dist/index.d.ts.map +1 -1
  6. package/node_modules/@pi-harness/api-gateway/dist/index.js +4 -11
  7. package/node_modules/@pi-harness/api-gateway/dist/index.js.map +1 -1
  8. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/agent-teams.json +3 -3
  9. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/anchored-standard.json +3 -3
  10. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/annotation.json +3 -3
  11. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/archify.json +3 -3
  12. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/at-file.json +3 -3
  13. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/auto-mode.json +3 -3
  14. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/better-sidebar.json +3 -3
  15. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/browser-fetch.json +3 -3
  16. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/browser-session.json +3 -3
  17. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/canvas-draw.json +3 -3
  18. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/change-verifier.json +3 -3
  19. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/cleaner.json +3 -3
  20. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/cli-notifier.json +3 -3
  21. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/code2skill.json +3 -3
  22. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/colleague-skill.json +3 -3
  23. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/context-doctor.json +3 -3
  24. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/context.json +3 -3
  25. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/cost-meter.json +3 -3
  26. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/dependency-checker.json +3 -3
  27. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/docker-sandbox.json +3 -3
  28. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/fail-logger.json +3 -3
  29. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/genui.json +3 -3
  30. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/git-time-capsule.json +3 -3
  31. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/graph-memory.json +3 -3
  32. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/history-compressor.json +3 -3
  33. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/hol-guard.json +3 -3
  34. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/i18n-pair.json +3 -3
  35. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/image-compressor.json +3 -3
  36. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/llm-verifier.json +3 -3
  37. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/mcp-client.json +3 -3
  38. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/mcp-panel.json +3 -3
  39. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/memory.json +3 -3
  40. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/mirage-bridge.json +3 -3
  41. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/mock-server.json +3 -3
  42. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/modlens.json +3 -3
  43. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/module-search.json +3 -3
  44. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/obsidian-sync.json +3 -3
  45. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/openpets.json +3 -3
  46. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/plan-execute.json +3 -3
  47. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/plugin-check.json +3 -3
  48. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/plugin-dev.json +3 -3
  49. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/plugin-finder.json +3 -3
  50. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/plugin-radar.json +3 -3
  51. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/plugin-stars.json +3 -3
  52. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/prompt-guard.json +3 -3
  53. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/prompt-library.json +3 -3
  54. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/readme-gen.json +3 -3
  55. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/recall-unread.json +3 -3
  56. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/reverse-skill.json +3 -3
  57. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/reviewer-bot.json +3 -3
  58. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/runtime-doctor.json +3 -3
  59. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/secure-audit.json +3 -3
  60. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/session-bookmarks.json +3 -3
  61. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/session-bridge.json +3 -3
  62. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/session-compare.json +3 -3
  63. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/session-export.json +3 -3
  64. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/session-insights.json +3 -3
  65. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/session-search.json +3 -3
  66. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/skill-catalog.json +3 -3
  67. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/skill-guard.json +3 -3
  68. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/sql-lens.json +3 -3
  69. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/synapse.json +3 -3
  70. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/tab-manager.json +3 -3
  71. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/taskboard.json +3 -3
  72. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/telemetry-blocker.json +3 -3
  73. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/test-harness.json +3 -3
  74. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/theme-studio.json +3 -3
  75. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/token-guard.json +3 -3
  76. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/turn-rewind.json +3 -3
  77. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/undo-savepoint.json +3 -3
  78. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/vision-toolkit.json +3 -3
  79. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/web-research.json +3 -3
  80. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/workspace-navigator.json +3 -3
  81. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/workspace-search.json +3 -3
  82. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/yaml-validator.json +3 -3
  83. package/node_modules/@pi-harness/api-gateway/dist/marketplace.d.ts +0 -1
  84. package/node_modules/@pi-harness/api-gateway/dist/marketplace.d.ts.map +1 -1
  85. package/node_modules/@pi-harness/api-gateway/dist/marketplace.js +0 -3
  86. package/node_modules/@pi-harness/api-gateway/dist/marketplace.js.map +1 -1
  87. package/node_modules/@pi-harness/api-gateway/package.json +27 -1
  88. package/node_modules/@pi-harness/cli/dist/main.d.ts.map +1 -1
  89. package/node_modules/@pi-harness/cli/dist/main.js +5 -2
  90. package/node_modules/@pi-harness/cli/dist/main.js.map +1 -1
  91. package/node_modules/@pi-harness/cli/dist/profiles.d.ts +3 -0
  92. package/node_modules/@pi-harness/cli/dist/profiles.d.ts.map +1 -0
  93. package/node_modules/@pi-harness/cli/dist/profiles.js +5 -0
  94. package/node_modules/@pi-harness/cli/dist/profiles.js.map +1 -0
  95. package/node_modules/@pi-harness/cli/package.json +3 -2
  96. package/node_modules/@pi-harness/cli/profiles/default/cordis.yml +122 -0
  97. package/node_modules/@pi-harness/cli/profiles/development/cordis.yml +47 -0
  98. package/node_modules/@pi-harness/host-webserver/package.json +1 -1
  99. package/node_modules/@pi-harness/web-app/package.json +1 -1
  100. package/package.json +41 -14
  101. package/packages/api-gateway/dist/index.d.ts.map +1 -1
  102. package/packages/api-gateway/dist/index.js +4 -11
  103. package/packages/api-gateway/dist/index.js.map +1 -1
  104. package/packages/api-gateway/dist/marketplace-entries/official/agent-teams.json +3 -3
  105. package/packages/api-gateway/dist/marketplace-entries/official/anchored-standard.json +3 -3
  106. package/packages/api-gateway/dist/marketplace-entries/official/annotation.json +3 -3
  107. package/packages/api-gateway/dist/marketplace-entries/official/archify.json +3 -3
  108. package/packages/api-gateway/dist/marketplace-entries/official/at-file.json +3 -3
  109. package/packages/api-gateway/dist/marketplace-entries/official/auto-mode.json +3 -3
  110. package/packages/api-gateway/dist/marketplace-entries/official/better-sidebar.json +3 -3
  111. package/packages/api-gateway/dist/marketplace-entries/official/browser-fetch.json +3 -3
  112. package/packages/api-gateway/dist/marketplace-entries/official/browser-session.json +3 -3
  113. package/packages/api-gateway/dist/marketplace-entries/official/canvas-draw.json +3 -3
  114. package/packages/api-gateway/dist/marketplace-entries/official/change-verifier.json +3 -3
  115. package/packages/api-gateway/dist/marketplace-entries/official/cleaner.json +3 -3
  116. package/packages/api-gateway/dist/marketplace-entries/official/cli-notifier.json +3 -3
  117. package/packages/api-gateway/dist/marketplace-entries/official/code2skill.json +3 -3
  118. package/packages/api-gateway/dist/marketplace-entries/official/colleague-skill.json +3 -3
  119. package/packages/api-gateway/dist/marketplace-entries/official/context-doctor.json +3 -3
  120. package/packages/api-gateway/dist/marketplace-entries/official/context.json +3 -3
  121. package/packages/api-gateway/dist/marketplace-entries/official/cost-meter.json +3 -3
  122. package/packages/api-gateway/dist/marketplace-entries/official/dependency-checker.json +3 -3
  123. package/packages/api-gateway/dist/marketplace-entries/official/docker-sandbox.json +3 -3
  124. package/packages/api-gateway/dist/marketplace-entries/official/fail-logger.json +3 -3
  125. package/packages/api-gateway/dist/marketplace-entries/official/genui.json +3 -3
  126. package/packages/api-gateway/dist/marketplace-entries/official/git-time-capsule.json +3 -3
  127. package/packages/api-gateway/dist/marketplace-entries/official/graph-memory.json +3 -3
  128. package/packages/api-gateway/dist/marketplace-entries/official/history-compressor.json +3 -3
  129. package/packages/api-gateway/dist/marketplace-entries/official/hol-guard.json +3 -3
  130. package/packages/api-gateway/dist/marketplace-entries/official/i18n-pair.json +3 -3
  131. package/packages/api-gateway/dist/marketplace-entries/official/image-compressor.json +3 -3
  132. package/packages/api-gateway/dist/marketplace-entries/official/llm-verifier.json +3 -3
  133. package/packages/api-gateway/dist/marketplace-entries/official/mcp-client.json +3 -3
  134. package/packages/api-gateway/dist/marketplace-entries/official/mcp-panel.json +3 -3
  135. package/packages/api-gateway/dist/marketplace-entries/official/memory.json +3 -3
  136. package/packages/api-gateway/dist/marketplace-entries/official/mirage-bridge.json +3 -3
  137. package/packages/api-gateway/dist/marketplace-entries/official/mock-server.json +3 -3
  138. package/packages/api-gateway/dist/marketplace-entries/official/modlens.json +3 -3
  139. package/packages/api-gateway/dist/marketplace-entries/official/module-search.json +3 -3
  140. package/packages/api-gateway/dist/marketplace-entries/official/obsidian-sync.json +3 -3
  141. package/packages/api-gateway/dist/marketplace-entries/official/openpets.json +3 -3
  142. package/packages/api-gateway/dist/marketplace-entries/official/plan-execute.json +3 -3
  143. package/packages/api-gateway/dist/marketplace-entries/official/plugin-check.json +3 -3
  144. package/packages/api-gateway/dist/marketplace-entries/official/plugin-dev.json +3 -3
  145. package/packages/api-gateway/dist/marketplace-entries/official/plugin-finder.json +3 -3
  146. package/packages/api-gateway/dist/marketplace-entries/official/plugin-radar.json +3 -3
  147. package/packages/api-gateway/dist/marketplace-entries/official/plugin-stars.json +3 -3
  148. package/packages/api-gateway/dist/marketplace-entries/official/prompt-guard.json +3 -3
  149. package/packages/api-gateway/dist/marketplace-entries/official/prompt-library.json +3 -3
  150. package/packages/api-gateway/dist/marketplace-entries/official/readme-gen.json +3 -3
  151. package/packages/api-gateway/dist/marketplace-entries/official/recall-unread.json +3 -3
  152. package/packages/api-gateway/dist/marketplace-entries/official/reverse-skill.json +3 -3
  153. package/packages/api-gateway/dist/marketplace-entries/official/reviewer-bot.json +3 -3
  154. package/packages/api-gateway/dist/marketplace-entries/official/runtime-doctor.json +3 -3
  155. package/packages/api-gateway/dist/marketplace-entries/official/secure-audit.json +3 -3
  156. package/packages/api-gateway/dist/marketplace-entries/official/session-bookmarks.json +3 -3
  157. package/packages/api-gateway/dist/marketplace-entries/official/session-bridge.json +3 -3
  158. package/packages/api-gateway/dist/marketplace-entries/official/session-compare.json +3 -3
  159. package/packages/api-gateway/dist/marketplace-entries/official/session-export.json +3 -3
  160. package/packages/api-gateway/dist/marketplace-entries/official/session-insights.json +3 -3
  161. package/packages/api-gateway/dist/marketplace-entries/official/session-search.json +3 -3
  162. package/packages/api-gateway/dist/marketplace-entries/official/skill-catalog.json +3 -3
  163. package/packages/api-gateway/dist/marketplace-entries/official/skill-guard.json +3 -3
  164. package/packages/api-gateway/dist/marketplace-entries/official/sql-lens.json +3 -3
  165. package/packages/api-gateway/dist/marketplace-entries/official/synapse.json +3 -3
  166. package/packages/api-gateway/dist/marketplace-entries/official/tab-manager.json +3 -3
  167. package/packages/api-gateway/dist/marketplace-entries/official/taskboard.json +3 -3
  168. package/packages/api-gateway/dist/marketplace-entries/official/telemetry-blocker.json +3 -3
  169. package/packages/api-gateway/dist/marketplace-entries/official/test-harness.json +3 -3
  170. package/packages/api-gateway/dist/marketplace-entries/official/theme-studio.json +3 -3
  171. package/packages/api-gateway/dist/marketplace-entries/official/token-guard.json +3 -3
  172. package/packages/api-gateway/dist/marketplace-entries/official/turn-rewind.json +3 -3
  173. package/packages/api-gateway/dist/marketplace-entries/official/undo-savepoint.json +3 -3
  174. package/packages/api-gateway/dist/marketplace-entries/official/vision-toolkit.json +3 -3
  175. package/packages/api-gateway/dist/marketplace-entries/official/web-research.json +3 -3
  176. package/packages/api-gateway/dist/marketplace-entries/official/workspace-navigator.json +3 -3
  177. package/packages/api-gateway/dist/marketplace-entries/official/workspace-search.json +3 -3
  178. package/packages/api-gateway/dist/marketplace-entries/official/yaml-validator.json +3 -3
  179. package/packages/api-gateway/dist/marketplace.d.ts +0 -1
  180. package/packages/api-gateway/dist/marketplace.d.ts.map +1 -1
  181. package/packages/api-gateway/dist/marketplace.js +0 -3
  182. package/packages/api-gateway/dist/marketplace.js.map +1 -1
  183. package/packages/api-gateway/package.json +27 -1
  184. package/packages/api-gateway/src/index.ts +3 -11
  185. package/packages/api-gateway/src/marketplace-entries/official/agent-teams.json +3 -3
  186. package/packages/api-gateway/src/marketplace-entries/official/anchored-standard.json +3 -3
  187. package/packages/api-gateway/src/marketplace-entries/official/annotation.json +3 -3
  188. package/packages/api-gateway/src/marketplace-entries/official/archify.json +3 -3
  189. package/packages/api-gateway/src/marketplace-entries/official/at-file.json +3 -3
  190. package/packages/api-gateway/src/marketplace-entries/official/auto-mode.json +3 -3
  191. package/packages/api-gateway/src/marketplace-entries/official/better-sidebar.json +3 -3
  192. package/packages/api-gateway/src/marketplace-entries/official/browser-fetch.json +3 -3
  193. package/packages/api-gateway/src/marketplace-entries/official/browser-session.json +3 -3
  194. package/packages/api-gateway/src/marketplace-entries/official/canvas-draw.json +3 -3
  195. package/packages/api-gateway/src/marketplace-entries/official/change-verifier.json +3 -3
  196. package/packages/api-gateway/src/marketplace-entries/official/cleaner.json +3 -3
  197. package/packages/api-gateway/src/marketplace-entries/official/cli-notifier.json +3 -3
  198. package/packages/api-gateway/src/marketplace-entries/official/code2skill.json +3 -3
  199. package/packages/api-gateway/src/marketplace-entries/official/colleague-skill.json +3 -3
  200. package/packages/api-gateway/src/marketplace-entries/official/context-doctor.json +3 -3
  201. package/packages/api-gateway/src/marketplace-entries/official/context.json +3 -3
  202. package/packages/api-gateway/src/marketplace-entries/official/cost-meter.json +3 -3
  203. package/packages/api-gateway/src/marketplace-entries/official/dependency-checker.json +3 -3
  204. package/packages/api-gateway/src/marketplace-entries/official/docker-sandbox.json +3 -3
  205. package/packages/api-gateway/src/marketplace-entries/official/fail-logger.json +3 -3
  206. package/packages/api-gateway/src/marketplace-entries/official/genui.json +3 -3
  207. package/packages/api-gateway/src/marketplace-entries/official/git-time-capsule.json +3 -3
  208. package/packages/api-gateway/src/marketplace-entries/official/graph-memory.json +3 -3
  209. package/packages/api-gateway/src/marketplace-entries/official/history-compressor.json +3 -3
  210. package/packages/api-gateway/src/marketplace-entries/official/hol-guard.json +3 -3
  211. package/packages/api-gateway/src/marketplace-entries/official/i18n-pair.json +3 -3
  212. package/packages/api-gateway/src/marketplace-entries/official/image-compressor.json +3 -3
  213. package/packages/api-gateway/src/marketplace-entries/official/llm-verifier.json +3 -3
  214. package/packages/api-gateway/src/marketplace-entries/official/mcp-client.json +3 -3
  215. package/packages/api-gateway/src/marketplace-entries/official/mcp-panel.json +3 -3
  216. package/packages/api-gateway/src/marketplace-entries/official/memory.json +3 -3
  217. package/packages/api-gateway/src/marketplace-entries/official/mirage-bridge.json +3 -3
  218. package/packages/api-gateway/src/marketplace-entries/official/mock-server.json +3 -3
  219. package/packages/api-gateway/src/marketplace-entries/official/modlens.json +3 -3
  220. package/packages/api-gateway/src/marketplace-entries/official/module-search.json +3 -3
  221. package/packages/api-gateway/src/marketplace-entries/official/obsidian-sync.json +3 -3
  222. package/packages/api-gateway/src/marketplace-entries/official/openpets.json +3 -3
  223. package/packages/api-gateway/src/marketplace-entries/official/plan-execute.json +3 -3
  224. package/packages/api-gateway/src/marketplace-entries/official/plugin-check.json +3 -3
  225. package/packages/api-gateway/src/marketplace-entries/official/plugin-dev.json +3 -3
  226. package/packages/api-gateway/src/marketplace-entries/official/plugin-finder.json +3 -3
  227. package/packages/api-gateway/src/marketplace-entries/official/plugin-radar.json +3 -3
  228. package/packages/api-gateway/src/marketplace-entries/official/plugin-stars.json +3 -3
  229. package/packages/api-gateway/src/marketplace-entries/official/prompt-guard.json +3 -3
  230. package/packages/api-gateway/src/marketplace-entries/official/prompt-library.json +3 -3
  231. package/packages/api-gateway/src/marketplace-entries/official/readme-gen.json +3 -3
  232. package/packages/api-gateway/src/marketplace-entries/official/recall-unread.json +3 -3
  233. package/packages/api-gateway/src/marketplace-entries/official/reverse-skill.json +3 -3
  234. package/packages/api-gateway/src/marketplace-entries/official/reviewer-bot.json +3 -3
  235. package/packages/api-gateway/src/marketplace-entries/official/runtime-doctor.json +3 -3
  236. package/packages/api-gateway/src/marketplace-entries/official/secure-audit.json +3 -3
  237. package/packages/api-gateway/src/marketplace-entries/official/session-bookmarks.json +3 -3
  238. package/packages/api-gateway/src/marketplace-entries/official/session-bridge.json +3 -3
  239. package/packages/api-gateway/src/marketplace-entries/official/session-compare.json +3 -3
  240. package/packages/api-gateway/src/marketplace-entries/official/session-export.json +3 -3
  241. package/packages/api-gateway/src/marketplace-entries/official/session-insights.json +3 -3
  242. package/packages/api-gateway/src/marketplace-entries/official/session-search.json +3 -3
  243. package/packages/api-gateway/src/marketplace-entries/official/skill-catalog.json +3 -3
  244. package/packages/api-gateway/src/marketplace-entries/official/skill-guard.json +3 -3
  245. package/packages/api-gateway/src/marketplace-entries/official/sql-lens.json +3 -3
  246. package/packages/api-gateway/src/marketplace-entries/official/synapse.json +3 -3
  247. package/packages/api-gateway/src/marketplace-entries/official/tab-manager.json +3 -3
  248. package/packages/api-gateway/src/marketplace-entries/official/taskboard.json +3 -3
  249. package/packages/api-gateway/src/marketplace-entries/official/telemetry-blocker.json +3 -3
  250. package/packages/api-gateway/src/marketplace-entries/official/test-harness.json +3 -3
  251. package/packages/api-gateway/src/marketplace-entries/official/theme-studio.json +3 -3
  252. package/packages/api-gateway/src/marketplace-entries/official/token-guard.json +3 -3
  253. package/packages/api-gateway/src/marketplace-entries/official/turn-rewind.json +3 -3
  254. package/packages/api-gateway/src/marketplace-entries/official/undo-savepoint.json +3 -3
  255. package/packages/api-gateway/src/marketplace-entries/official/vision-toolkit.json +3 -3
  256. package/packages/api-gateway/src/marketplace-entries/official/web-research.json +3 -3
  257. package/packages/api-gateway/src/marketplace-entries/official/workspace-navigator.json +3 -3
  258. package/packages/api-gateway/src/marketplace-entries/official/workspace-search.json +3 -3
  259. package/packages/api-gateway/src/marketplace-entries/official/yaml-validator.json +3 -3
  260. package/packages/api-gateway/src/marketplace.ts +0 -4
  261. package/packages/api-gateway/test/index.test.ts +140 -94
  262. package/packages/api-gateway/test/marketplace-schema.test.ts +1 -1
  263. package/packages/api-gateway/test/marketplace.test.ts +7 -9
  264. package/packages/api-gateway/test/packed-package.test.ts +3 -3
  265. package/packages/api-gateway/test/release-contract.test.ts +35 -5
  266. package/packages/api-gateway/test/release-package.test.ts +1 -1
  267. package/packages/api-gateway/test/release-version.test.ts +79 -3
  268. package/packages/bundle-web-app/package.json +1 -1
  269. package/packages/cli/dist/main.d.ts.map +1 -1
  270. package/packages/cli/dist/main.js +5 -2
  271. package/packages/cli/dist/main.js.map +1 -1
  272. package/packages/cli/dist/profiles.d.ts +3 -0
  273. package/packages/cli/dist/profiles.d.ts.map +1 -0
  274. package/packages/cli/dist/profiles.js +5 -0
  275. package/packages/cli/dist/profiles.js.map +1 -0
  276. package/packages/cli/package.json +3 -2
  277. package/packages/cli/profiles/default/cordis.yml +122 -0
  278. package/packages/cli/profiles/development/cordis.yml +47 -0
  279. package/packages/cli/src/main.ts +5 -2
  280. package/packages/cli/src/profiles.ts +6 -0
  281. package/packages/cli/test/profiles.integration.test.ts +575 -0
  282. package/packages/host-webserver/package.json +1 -1
@@ -102,7 +102,7 @@ describe("API gateway plugin", () => {
102
102
  {
103
103
  id: "profile:group:child",
104
104
  disabled: true,
105
- options: { id: "child", name: "@pi-harness/core/plugins/context", disabled: true },
105
+ options: { id: "child", name: "@pi-harness/plugin-context", disabled: true },
106
106
  },
107
107
  ];
108
108
  context.reflect.provide("loader", {
@@ -125,7 +125,7 @@ describe("API gateway plugin", () => {
125
125
  data: {
126
126
  entries: [
127
127
  { id: "profile:group", name: "plugin-group", state: "unloaded", enabled: true },
128
- { id: "profile:group:child", name: "@pi-harness/core/plugins/context", state: "unloaded", enabled: false },
128
+ { id: "profile:group:child", name: "@pi-harness/plugin-context", state: "unloaded", enabled: false },
129
129
  ],
130
130
  },
131
131
  },
@@ -227,7 +227,7 @@ describe("API gateway plugin", () => {
227
227
  });
228
228
 
229
229
  test("publishes the persisted UTC cost ledger through its dedicated panel", async () => {
230
- const costMeterModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/core/plugins/cost-meter"))) as {
230
+ const costMeterModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/plugin-cost-meter"))) as {
231
231
  default: Parameters<Context["plugin"]>[0];
232
232
  };
233
233
  const context = new Context();
@@ -266,7 +266,7 @@ describe("API gateway plugin", () => {
266
266
  items: [
267
267
  {
268
268
  id: "cost-meter-panel",
269
- pluginId: "@pi-harness/core/plugins/cost-meter",
269
+ pluginId: "@pi-harness/plugin-cost-meter",
270
270
  title: "Cost Meter",
271
271
  data: {
272
272
  sessionCost: 1.25,
@@ -285,7 +285,7 @@ describe("API gateway plugin", () => {
285
285
  });
286
286
 
287
287
  test("publishes the bounded dependency report through its dedicated panel", async () => {
288
- const dependencyCheckerModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/core/plugins/dependency-checker"))) as {
288
+ const dependencyCheckerModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/plugin-dependency-checker"))) as {
289
289
  default: Parameters<Context["plugin"]>[0];
290
290
  };
291
291
  const context = new Context();
@@ -317,7 +317,7 @@ describe("API gateway plugin", () => {
317
317
  items: [
318
318
  {
319
319
  id: "dependency-checker-panel",
320
- pluginId: "@pi-harness/core/plugins/dependency-checker",
320
+ pluginId: "@pi-harness/plugin-dependency-checker",
321
321
  title: "Dependency Checker",
322
322
  data: {
323
323
  report: {
@@ -338,7 +338,7 @@ describe("API gateway plugin", () => {
338
338
  });
339
339
 
340
340
  test("publishes the enforced Docker sandbox defaults through its real plugin panel", async () => {
341
- const dockerSandboxModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/core/plugins/docker-sandbox"))) as {
341
+ const dockerSandboxModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/plugin-docker-sandbox"))) as {
342
342
  default: Parameters<Context["plugin"]>[0];
343
343
  };
344
344
  const context = new Context();
@@ -362,7 +362,7 @@ describe("API gateway plugin", () => {
362
362
  items: [
363
363
  {
364
364
  id: "docker-sandbox-panel",
365
- pluginId: "@pi-harness/core/plugins/docker-sandbox",
365
+ pluginId: "@pi-harness/plugin-docker-sandbox",
366
366
  title: "Docker Sandbox",
367
367
  description: "仅使用本地镜像,并以无网络、只读根文件系统和有界资源运行 argv 命令。工作区默认只读。",
368
368
  icon: "⬡",
@@ -386,7 +386,7 @@ describe("API gateway plugin", () => {
386
386
  });
387
387
 
388
388
  test("publishes aggregated failures through the real Failure Logger panel", async () => {
389
- const failLoggerModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/core/plugins/fail-logger"))) as {
389
+ const failLoggerModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/plugin-fail-logger"))) as {
390
390
  default: Parameters<Context["plugin"]>[0];
391
391
  };
392
392
  const context = new Context();
@@ -433,7 +433,7 @@ describe("API gateway plugin", () => {
433
433
  expect(payload.items).toHaveLength(1);
434
434
  expect(payload.items[0]).toMatchObject({
435
435
  id: "fail-logger-panel",
436
- pluginId: "@pi-harness/core/plugins/fail-logger",
436
+ pluginId: "@pi-harness/plugin-fail-logger",
437
437
  title: "Failure Logger",
438
438
  data: {
439
439
  total: 3,
@@ -450,7 +450,7 @@ describe("API gateway plugin", () => {
450
450
  });
451
451
 
452
452
  test("publishes bounded structured cards through the real GenUI panel", async () => {
453
- const genUiModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/core/plugins/genui"))) as {
453
+ const genUiModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/plugin-genui"))) as {
454
454
  default: Parameters<Context["plugin"]>[0];
455
455
  };
456
456
  const context = new Context();
@@ -488,7 +488,7 @@ describe("API gateway plugin", () => {
488
488
  items: [
489
489
  {
490
490
  id: "genui-panel",
491
- pluginId: "@pi-harness/core/plugins/genui",
491
+ pluginId: "@pi-harness/plugin-genui",
492
492
  title: "GenUI",
493
493
  data: {
494
494
  rendered: 1,
@@ -507,7 +507,7 @@ describe("API gateway plugin", () => {
507
507
  });
508
508
 
509
509
  test("publishes captured Git undo capsules through the real plugin panel", async () => {
510
- const gitTimeCapsuleModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/core/plugins/git-time-capsule"))) as {
510
+ const gitTimeCapsuleModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/plugin-git-time-capsule"))) as {
511
511
  default: Parameters<Context["plugin"]>[0];
512
512
  };
513
513
  const context = new Context();
@@ -557,7 +557,7 @@ describe("API gateway plugin", () => {
557
557
  items: [
558
558
  {
559
559
  id: "git-time-capsule-panel",
560
- pluginId: "@pi-harness/core/plugins/git-time-capsule",
560
+ pluginId: "@pi-harness/plugin-git-time-capsule",
561
561
  title: "Git Time Capsule",
562
562
  data: {
563
563
  latest: { action: "capture", status: "completed", files: 1 },
@@ -576,7 +576,7 @@ describe("API gateway plugin", () => {
576
576
  });
577
577
 
578
578
  test("publishes the persisted graph memory through the real plugin panel", async () => {
579
- const graphMemoryModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/core/plugins/graph-memory"))) as {
579
+ const graphMemoryModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/plugin-graph-memory"))) as {
580
580
  default: Parameters<Context["plugin"]>[0];
581
581
  };
582
582
  const context = new Context();
@@ -606,7 +606,7 @@ describe("API gateway plugin", () => {
606
606
  items: [
607
607
  {
608
608
  id: "graph-memory-panel",
609
- pluginId: "@pi-harness/core/plugins/graph-memory",
609
+ pluginId: "@pi-harness/plugin-graph-memory",
610
610
  title: "Graph Memory",
611
611
  data: {
612
612
  nodes: 1,
@@ -622,7 +622,7 @@ describe("API gateway plugin", () => {
622
622
  });
623
623
 
624
624
  test("publishes a bounded locale parity report through the real plugin panel", async () => {
625
- const i18nPairModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/core/plugins/i18n-pair"))) as {
625
+ const i18nPairModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/plugin-i18n-pair"))) as {
626
626
  default: Parameters<Context["plugin"]>[0];
627
627
  };
628
628
  const context = new Context();
@@ -654,7 +654,7 @@ describe("API gateway plugin", () => {
654
654
  items: [
655
655
  {
656
656
  id: "i18n-pair-panel",
657
- pluginId: "@pi-harness/core/plugins/i18n-pair",
657
+ pluginId: "@pi-harness/plugin-i18n-pair",
658
658
  title: "I18n Pair",
659
659
  data: {
660
660
  status: { state: "completed" },
@@ -677,7 +677,7 @@ describe("API gateway plugin", () => {
677
677
  });
678
678
 
679
679
  test("publishes bounded Git capsule cleanup activity through the real plugin panel", async () => {
680
- const cleanerModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/core/plugins/cleaner"))) as {
680
+ const cleanerModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/plugin-cleaner"))) as {
681
681
  default: Parameters<Context["plugin"]>[0];
682
682
  };
683
683
  const context = new Context();
@@ -711,7 +711,7 @@ describe("API gateway plugin", () => {
711
711
  items: [
712
712
  {
713
713
  id: "cleaner-panel",
714
- pluginId: "@pi-harness/core/plugins/cleaner",
714
+ pluginId: "@pi-harness/plugin-cleaner",
715
715
  title: "Harness Cleaner",
716
716
  data: {
717
717
  capsules: [{ name: "0003.patch", bytes: 3 }],
@@ -725,7 +725,7 @@ describe("API gateway plugin", () => {
725
725
  });
726
726
 
727
727
  test("publishes a bounded isolated SQLite query through the real plugin panel", async () => {
728
- const sqlLensModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/core/plugins/sql-lens"))) as {
728
+ const sqlLensModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/plugin-sql-lens"))) as {
729
729
  default: Parameters<Context["plugin"]>[0];
730
730
  };
731
731
  const context = new Context();
@@ -757,7 +757,7 @@ describe("API gateway plugin", () => {
757
757
  items: [
758
758
  {
759
759
  id: "sql-lens-panel",
760
- pluginId: "@pi-harness/core/plugins/sql-lens",
760
+ pluginId: "@pi-harness/plugin-sql-lens",
761
761
  title: "SQL Lens",
762
762
  data: {
763
763
  status: { state: "completed" },
@@ -777,7 +777,7 @@ describe("API gateway plugin", () => {
777
777
  });
778
778
 
779
779
  test("publishes bounded MCP inventories and limits through the real plugin panel", async () => {
780
- const mcpClientModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/core/plugins/mcp-client"))) as {
780
+ const mcpClientModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/plugin-mcp-client"))) as {
781
781
  default: Parameters<Context["plugin"]>[0];
782
782
  };
783
783
  const context = new Context();
@@ -815,7 +815,7 @@ describe("API gateway plugin", () => {
815
815
  items: [
816
816
  {
817
817
  id: "mcp-client-panel",
818
- pluginId: "@pi-harness/core/plugins/mcp-client",
818
+ pluginId: "@pi-harness/plugin-mcp-client",
819
819
  title: "MCP Client",
820
820
  data: {
821
821
  inventory: {
@@ -844,7 +844,7 @@ describe("API gateway plugin", () => {
844
844
  });
845
845
 
846
846
  test("publishes a bounded Browser Fetch preview through the real plugin panel", async () => {
847
- const browserFetchModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/core/plugins/browser-fetch"))) as {
847
+ const browserFetchModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/plugin-browser-fetch"))) as {
848
848
  default: Parameters<Context["plugin"]>[0];
849
849
  };
850
850
  const context = new Context();
@@ -886,7 +886,7 @@ describe("API gateway plugin", () => {
886
886
  items: [
887
887
  {
888
888
  id: "browser-fetch-panel",
889
- pluginId: "@pi-harness/core/plugins/browser-fetch",
889
+ pluginId: "@pi-harness/plugin-browser-fetch",
890
890
  title: "Browser Fetch",
891
891
  data: {
892
892
  latest: { status: 200, bytes: 12_001, truncated: false, previewTruncated: true },
@@ -905,7 +905,7 @@ describe("API gateway plugin", () => {
905
905
  });
906
906
 
907
907
  test("publishes a bounded Browser Session inventory through the real plugin panel", async () => {
908
- const browserSessionModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/core/plugins/browser-session"))) as {
908
+ const browserSessionModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/plugin-browser-session"))) as {
909
909
  default: Parameters<Context["plugin"]>[0];
910
910
  };
911
911
  const context = new Context();
@@ -954,7 +954,7 @@ describe("API gateway plugin", () => {
954
954
  items: [
955
955
  {
956
956
  id: "browser-session-panel",
957
- pluginId: "@pi-harness/core/plugins/browser-session",
957
+ pluginId: "@pi-harness/plugin-browser-session",
958
958
  title: "Browser Session",
959
959
  data: {
960
960
  endpoint: `http://127.0.0.1:${devtoolsAddress.port}/`,
@@ -973,7 +973,7 @@ describe("API gateway plugin", () => {
973
973
  });
974
974
 
975
975
  test("publishes a bounded Plugin Stars inventory through the real plugin panel", async () => {
976
- const pluginStarsModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/core/plugins/plugin-stars"))) as {
976
+ const pluginStarsModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/plugin-plugin-stars"))) as {
977
977
  default: Parameters<Context["plugin"]>[0];
978
978
  };
979
979
  const originalFetch = globalThis.fetch;
@@ -1018,7 +1018,7 @@ describe("API gateway plugin", () => {
1018
1018
  items: [
1019
1019
  {
1020
1020
  id: "plugin-stars-panel",
1021
- pluginId: "@pi-harness/core/plugins/plugin-stars",
1021
+ pluginId: "@pi-harness/plugin-plugin-stars",
1022
1022
  title: "Plugin Stars",
1023
1023
  data: {
1024
1024
  limit: 50,
@@ -1035,7 +1035,7 @@ describe("API gateway plugin", () => {
1035
1035
  });
1036
1036
 
1037
1037
  test("publishes bounded YAML diagnostics through the real plugin panel", async () => {
1038
- const yamlValidatorModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/core/plugins/yaml-validator"))) as {
1038
+ const yamlValidatorModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/plugin-yaml-validator"))) as {
1039
1039
  default: Parameters<Context["plugin"]>[0];
1040
1040
  };
1041
1041
  const context = new Context();
@@ -1067,7 +1067,7 @@ describe("API gateway plugin", () => {
1067
1067
  items: [
1068
1068
  {
1069
1069
  id: "yaml-validator-panel",
1070
- pluginId: "@pi-harness/core/plugins/yaml-validator",
1070
+ pluginId: "@pi-harness/plugin-yaml-validator",
1071
1071
  title: "YAML Validator",
1072
1072
  data: {
1073
1073
  latest: { path: "invalid.yml", valid: false, errorCount: 101, diagnosticsTruncated: false },
@@ -1084,7 +1084,7 @@ describe("API gateway plugin", () => {
1084
1084
  });
1085
1085
 
1086
1086
  test("publishes bounded Plugin Dev reload state through the real plugin panel", async () => {
1087
- const pluginDevModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/core/plugins/plugin-dev"))) as {
1087
+ const pluginDevModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/plugin-plugin-dev"))) as {
1088
1088
  default: Parameters<Context["plugin"]>[0];
1089
1089
  };
1090
1090
  const context = new Context();
@@ -1124,7 +1124,7 @@ describe("API gateway plugin", () => {
1124
1124
  items: [
1125
1125
  {
1126
1126
  id: "plugin-dev-panel",
1127
- pluginId: "@pi-harness/core/plugins/plugin-dev",
1127
+ pluginId: "@pi-harness/plugin-plugin-dev",
1128
1128
  title: "Plugin Dev",
1129
1129
  data: {
1130
1130
  status: "reloaded",
@@ -1140,7 +1140,7 @@ describe("API gateway plugin", () => {
1140
1140
  });
1141
1141
 
1142
1142
  test("publishes bounded OpenPets state through the real plugin panel", async () => {
1143
- const openPetsModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/core/plugins/openpets"))) as {
1143
+ const openPetsModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/plugin-openpets"))) as {
1144
1144
  default: Parameters<Context["plugin"]>[0];
1145
1145
  };
1146
1146
  const context = new Context();
@@ -1177,7 +1177,7 @@ describe("API gateway plugin", () => {
1177
1177
  items: [
1178
1178
  {
1179
1179
  id: "openpets-panel",
1180
- pluginId: "@pi-harness/core/plugins/openpets",
1180
+ pluginId: "@pi-harness/plugin-openpets",
1181
1181
  title: "OpenPets",
1182
1182
  data: {
1183
1183
  name: "Pi",
@@ -1195,7 +1195,7 @@ describe("API gateway plugin", () => {
1195
1195
  });
1196
1196
 
1197
1197
  test("publishes bounded Session Bridge previews through the real plugin panel", async () => {
1198
- const sessionBridgeModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/core/plugins/session-bridge"))) as {
1198
+ const sessionBridgeModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/plugin-session-bridge"))) as {
1199
1199
  default: Parameters<Context["plugin"]>[0];
1200
1200
  };
1201
1201
  const context = new Context();
@@ -1239,7 +1239,7 @@ describe("API gateway plugin", () => {
1239
1239
  items: [
1240
1240
  {
1241
1241
  id: "session-bridge-panel",
1242
- pluginId: "@pi-harness/core/plugins/session-bridge",
1242
+ pluginId: "@pi-harness/plugin-session-bridge",
1243
1243
  title: "Session Bridge",
1244
1244
  data: {
1245
1245
  latest: null,
@@ -1267,7 +1267,7 @@ describe("API gateway plugin", () => {
1267
1267
  });
1268
1268
 
1269
1269
  test("publishes bounded Skill Guard audits through the real plugin panel", async () => {
1270
- const skillGuardModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/core/plugins/skill-guard"))) as {
1270
+ const skillGuardModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/plugin-skill-guard"))) as {
1271
1271
  default: Parameters<Context["plugin"]>[0];
1272
1272
  };
1273
1273
  const cwd = await mkdtemp(join(tmpdir(), "pi-harness-api-skill-guard-"));
@@ -1302,7 +1302,7 @@ describe("API gateway plugin", () => {
1302
1302
  items: [
1303
1303
  {
1304
1304
  id: "skill-guard-panel",
1305
- pluginId: "@pi-harness/core/plugins/skill-guard",
1305
+ pluginId: "@pi-harness/plugin-skill-guard",
1306
1306
  title: "Skill Guard",
1307
1307
  data: {
1308
1308
  scans: 1,
@@ -1338,7 +1338,7 @@ describe("API gateway plugin", () => {
1338
1338
  }, 15_000);
1339
1339
 
1340
1340
  test("publishes bounded Recall Unread inventory through the real plugin panel", async () => {
1341
- const recallUnreadModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/core/plugins/recall-unread"))) as {
1341
+ const recallUnreadModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/plugin-recall-unread"))) as {
1342
1342
  default: Parameters<Context["plugin"]>[0];
1343
1343
  };
1344
1344
  const workspace = await mkdtemp(join(tmpdir(), "pi-harness-api-recall-unread-workspace-"));
@@ -1384,7 +1384,7 @@ describe("API gateway plugin", () => {
1384
1384
  items: [
1385
1385
  {
1386
1386
  id: "recall-unread-panel",
1387
- pluginId: "@pi-harness/core/plugins/recall-unread",
1387
+ pluginId: "@pi-harness/plugin-recall-unread",
1388
1388
  title: "Recall Unread",
1389
1389
  data: {
1390
1390
  scans: 1,
@@ -1422,7 +1422,7 @@ describe("API gateway plugin", () => {
1422
1422
  });
1423
1423
 
1424
1424
  test("publishes bounded Context Insights through the real plugin panel", async () => {
1425
- const contextInsightsModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/core/plugins/context"))) as {
1425
+ const contextInsightsModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/plugin-context"))) as {
1426
1426
  default: Parameters<Context["plugin"]>[0];
1427
1427
  };
1428
1428
  const context = new Context();
@@ -1451,7 +1451,7 @@ describe("API gateway plugin", () => {
1451
1451
  items: [
1452
1452
  {
1453
1453
  id: "context-insight-panel",
1454
- pluginId: "@pi-harness/core/plugins/context",
1454
+ pluginId: "@pi-harness/plugin-context",
1455
1455
  title: "上下文洞察",
1456
1456
  data: {
1457
1457
  tokens: 2_000,
@@ -1473,7 +1473,7 @@ describe("API gateway plugin", () => {
1473
1473
  });
1474
1474
 
1475
1475
  test("publishes cached Token Guard state through the real plugin panel", async () => {
1476
- const tokenGuardModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/core/plugins/token-guard"))) as {
1476
+ const tokenGuardModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/plugin-token-guard"))) as {
1477
1477
  default: Parameters<Context["plugin"]>[0];
1478
1478
  };
1479
1479
  const context = new Context();
@@ -1501,7 +1501,7 @@ describe("API gateway plugin", () => {
1501
1501
  items: [
1502
1502
  {
1503
1503
  id: "token-guard-panel",
1504
- pluginId: "@pi-harness/core/plugins/token-guard",
1504
+ pluginId: "@pi-harness/plugin-token-guard",
1505
1505
  title: "Token Guard",
1506
1506
  data: {
1507
1507
  maxPercent: 90,
@@ -1522,7 +1522,7 @@ describe("API gateway plugin", () => {
1522
1522
  });
1523
1523
 
1524
1524
  test("publishes the bounded Context Doctor audit through the real plugin panel", async () => {
1525
- const contextDoctorModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/core/plugins/context-doctor"))) as {
1525
+ const contextDoctorModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/plugin-context-doctor"))) as {
1526
1526
  default: Parameters<Context["plugin"]>[0];
1527
1527
  };
1528
1528
  const context = new Context();
@@ -1559,7 +1559,7 @@ describe("API gateway plugin", () => {
1559
1559
  items: [
1560
1560
  {
1561
1561
  id: "context-doctor-panel",
1562
- pluginId: "@pi-harness/core/plugins/context-doctor",
1562
+ pluginId: "@pi-harness/plugin-context-doctor",
1563
1563
  title: "Context Doctor",
1564
1564
  data: {
1565
1565
  status: "warning",
@@ -1589,7 +1589,7 @@ describe("API gateway plugin", () => {
1589
1589
  });
1590
1590
 
1591
1591
  test("publishes bounded current-branch Turn Rewind candidates through the real plugin panel", async () => {
1592
- const turnRewindModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/core/plugins/turn-rewind"))) as {
1592
+ const turnRewindModule = (await import(/* @vite-ignore */ import.meta.resolve("@pi-harness/plugin-turn-rewind"))) as {
1593
1593
  default: Parameters<Context["plugin"]>[0];
1594
1594
  };
1595
1595
  const manager = SessionManager.inMemory("/workspace");
@@ -1640,7 +1640,7 @@ describe("API gateway plugin", () => {
1640
1640
  items: [
1641
1641
  {
1642
1642
  id: "turn-rewind-panel",
1643
- pluginId: "@pi-harness/core/plugins/turn-rewind",
1643
+ pluginId: "@pi-harness/plugin-turn-rewind",
1644
1644
  title: "Turn Rewind",
1645
1645
  data: {
1646
1646
  candidates: [
@@ -2146,44 +2146,65 @@ describe("API gateway plugin", () => {
2146
2146
  expect(invalidSort.status).toBe(400);
2147
2147
  });
2148
2148
 
2149
- test("writes bundled official plugin entries without invoking npm", async () => {
2150
- const cwd = await mkdtemp(join(tmpdir(), "pi-harness-api-plugin-install-"));
2151
- const configPath = join(cwd, "pi.toml");
2149
+ // An official plugin is its own npm package, so it takes the same install path a community package takes: npm first, then the profile row, then the loader entry. Nothing about `source: "official"` shortcuts any of it.
2150
+ test("installs an official plugin through npm exactly like a community package", async () => {
2151
+ const directory = await mkdtemp(join(tmpdir(), "pi-harness-api-plugin-install-"));
2152
+ temporaryDirectories.push(directory);
2153
+ const shimDirectory = join(directory, "bin");
2154
+ await mkdir(shimDirectory);
2155
+ await writeFile(join(directory, "package.json"), '{ "name": "harness" }\n', "utf8");
2156
+ const configPath = join(directory, "pi.toml");
2152
2157
  await writeFile(configPath, '- id: runtime\n name: "@pi-harness/core/plugins/runtime"\n config: {}\n', "utf8");
2158
+ const npmLog = join(directory, "npm.log");
2159
+ await writeFile(join(shimDirectory, "npm"), `#!/bin/sh\nprintf '%s\\n' "$*" >> ${JSON.stringify(npmLog)}\n`, { mode: 0o755 });
2153
2160
  const context = new Context();
2154
2161
  contexts.push(context);
2155
2162
  await context.plugin(webServerPlugin, { host: "127.0.0.1", port: 0 });
2156
2163
  const session = { sessionId: "marketplace-install-session", sessionFile: undefined, messages: [], isStreaming: false, subscribe: () => () => {} };
2157
2164
  context.provide("piRuntime", { session, prompt: () => Promise.resolve(), abort: () => Promise.resolve(), dispose: () => Promise.resolve() } as never);
2158
2165
  context.provide("piModels", { model: { provider: "test", id: "model" } } as never);
2159
- context.provide("piHarnessLaunch", { cwd, agentDir: cwd, configPath, args: [], requestExit() {} });
2160
- let createCalled = false;
2166
+ context.provide("piHarnessLaunch", { cwd: directory, agentDir: directory, configPath, args: [], requestExit() {} });
2167
+ const created: Array<{ name?: unknown }> = [];
2161
2168
  context.reflect.provide("loader", {
2162
- entries() {
2163
- return [];
2164
- },
2165
- create: () => {
2166
- createCalled = true;
2167
- return Promise.reject(new Error("bundled plugin must not be dynamically created"));
2169
+ entries: () => [],
2170
+ create: (options: { name?: unknown }) => {
2171
+ created.push(options);
2172
+ return Promise.resolve("marketplace-entry");
2168
2173
  },
2174
+ resolve: () => ({ fiber: { await: () => Promise.resolve() } }),
2175
+ remove: () => Promise.resolve(),
2169
2176
  });
2170
2177
  await context.plugin(apiPlugin);
2171
2178
 
2172
- const response = await fetch(context.webServer.url + "/api/marketplace/install", {
2173
- method: "POST",
2174
- headers: { "content-type": "application/json" },
2175
- body: JSON.stringify({ id: "skill-guard" }),
2176
- });
2179
+ const originalPath = process.env.PATH ?? "";
2180
+ process.env.PATH = `${shimDirectory}:${originalPath}`;
2181
+ let response: Response;
2182
+ try {
2183
+ response = await fetch(context.webServer.url + "/api/marketplace/install", {
2184
+ method: "POST",
2185
+ headers: { "content-type": "application/json" },
2186
+ body: JSON.stringify({ id: "skill-guard" }),
2187
+ });
2188
+ } finally {
2189
+ process.env.PATH = originalPath;
2190
+ }
2191
+
2177
2192
  expect(response.status).toBe(200);
2178
- await expect(response.json()).resolves.toMatchObject({ installed: false, restartRequired: true, plugin: { id: "skill-guard" } });
2179
- expect(createCalled).toBe(false);
2180
- await expect(readFile(configPath, "utf8")).resolves.toContain('name: "@pi-harness/core/plugins/skill-guard"');
2193
+ await expect(response.json()).resolves.toMatchObject({ installed: true, plugin: { id: "skill-guard" } });
2194
+ expect((await readFile(npmLog, "utf8")).trim()).toMatch(/^install --save-exact --package-lock=false @pi-harness\/plugin-skill-guard@\d/u);
2195
+ expect(created).toEqual([expect.objectContaining({ name: "@pi-harness/plugin-skill-guard" })]);
2196
+ await expect(readFile(configPath, "utf8")).resolves.toContain('name: "@pi-harness/plugin-skill-guard"');
2181
2197
  });
2182
2198
 
2183
2199
  test("locks marketplace installation before reading a request body", async () => {
2184
2200
  const cwd = await mkdtemp(join(tmpdir(), "pi-harness-api-plugin-install-lock-"));
2201
+ temporaryDirectories.push(cwd);
2202
+ const shimDirectory = join(cwd, "bin");
2203
+ await mkdir(shimDirectory);
2204
+ await writeFile(join(cwd, "package.json"), '{ "name": "harness" }\n', "utf8");
2185
2205
  const configPath = join(cwd, "pi.toml");
2186
2206
  await writeFile(configPath, '- id: runtime\n name: "@pi-harness/core/plugins/runtime"\n config: {}\n', "utf8");
2207
+ await writeFile(join(shimDirectory, "npm"), "#!/bin/sh\nexit 0\n", { mode: 0o755 });
2187
2208
  const context = new Context();
2188
2209
  contexts.push(context);
2189
2210
  await context.plugin(webServerPlugin, { host: "127.0.0.1", port: 0 });
@@ -2191,7 +2212,12 @@ describe("API gateway plugin", () => {
2191
2212
  context.provide("piRuntime", { session, prompt: () => Promise.resolve(), abort: () => Promise.resolve(), dispose: () => Promise.resolve() } as never);
2192
2213
  context.provide("piModels", { model: { provider: "test", id: "model" } } as never);
2193
2214
  context.provide("piHarnessLaunch", { cwd, agentDir: cwd, configPath, args: [], requestExit() {} });
2194
- context.reflect.provide("loader", { entries: () => [] });
2215
+ context.reflect.provide("loader", {
2216
+ entries: () => [],
2217
+ create: () => Promise.resolve("marketplace-entry"),
2218
+ resolve: () => ({ fiber: { await: () => Promise.resolve() } }),
2219
+ remove: () => Promise.resolve(),
2220
+ });
2195
2221
  await context.plugin(apiPlugin);
2196
2222
 
2197
2223
  let finishBody: (() => void) | undefined;
@@ -2204,23 +2230,29 @@ describe("API gateway plugin", () => {
2204
2230
  };
2205
2231
  },
2206
2232
  });
2207
- const first = fetch(context.webServer.url + "/api/marketplace/install", {
2208
- method: "POST",
2209
- headers: { "content-type": "application/json" },
2210
- body,
2211
- duplex: "half",
2212
- } as RequestInit & { duplex: "half" });
2213
- await new Promise((resolveDelay) => setTimeout(resolveDelay, 25));
2233
+ const originalPath = process.env.PATH ?? "";
2234
+ process.env.PATH = `${shimDirectory}:${originalPath}`;
2235
+ try {
2236
+ const first = fetch(context.webServer.url + "/api/marketplace/install", {
2237
+ method: "POST",
2238
+ headers: { "content-type": "application/json" },
2239
+ body,
2240
+ duplex: "half",
2241
+ } as RequestInit & { duplex: "half" });
2242
+ await new Promise((resolveDelay) => setTimeout(resolveDelay, 25));
2214
2243
 
2215
- const competing = await fetch(context.webServer.url + "/api/marketplace/install", {
2216
- method: "POST",
2217
- headers: { "content-type": "application/json" },
2218
- body: JSON.stringify({ id: "cost-meter" }),
2219
- });
2220
- expect(competing.status).toBe(409);
2244
+ const competing = await fetch(context.webServer.url + "/api/marketplace/install", {
2245
+ method: "POST",
2246
+ headers: { "content-type": "application/json" },
2247
+ body: JSON.stringify({ id: "cost-meter" }),
2248
+ });
2249
+ expect(competing.status).toBe(409);
2221
2250
 
2222
- finishBody?.();
2223
- expect((await first).status).toBe(200);
2251
+ finishBody?.();
2252
+ expect((await first).status).toBe(200);
2253
+ } finally {
2254
+ process.env.PATH = originalPath;
2255
+ }
2224
2256
  });
2225
2257
 
2226
2258
  test("marks legacy random-id marketplace entries as removable", async () => {
@@ -2230,7 +2262,7 @@ describe("API gateway plugin", () => {
2230
2262
  const session = { sessionId: "legacy-plugin-session", sessionFile: undefined, messages: [], isStreaming: false, subscribe: () => () => {} };
2231
2263
  const loaderEntries = [
2232
2264
  { options: { id: "769990d2", name: "@deepseek-ai/cordis-plugin-logger-console" } },
2233
- { options: { id: "marketplace-session-bridge", name: "@pi-harness/core/plugins/session-bridge" } },
2265
+ { options: { id: "marketplace-session-bridge", name: "@pi-harness/plugin-session-bridge" } },
2234
2266
  ];
2235
2267
  context.provide("piRuntime", { session, prompt: () => Promise.resolve() } as never);
2236
2268
  context.provide("piModels", { model: { provider: "test", id: "model" } } as never);
@@ -2256,7 +2288,7 @@ describe("API gateway plugin", () => {
2256
2288
  },
2257
2289
  {
2258
2290
  id: "marketplace-session-bridge",
2259
- name: "@pi-harness/core/plugins/session-bridge",
2291
+ name: "@pi-harness/plugin-session-bridge",
2260
2292
  enabled: true,
2261
2293
  state: "unloaded",
2262
2294
  removable: true,
@@ -2361,16 +2393,22 @@ describe("API gateway plugin", () => {
2361
2393
  await expect(readFile(configPath, "utf8")).resolves.toContain("- id: sibling");
2362
2394
  });
2363
2395
 
2364
- test("uninstalls bundled marketplace plugins from their existing profile row without invoking npm", async () => {
2396
+ // The plugin was installed from npm, so removing it removes the profile row, the loader entry, and the package.
2397
+ test("uninstalls an official marketplace plugin from its profile row and from npm", async () => {
2365
2398
  const context = new Context();
2366
2399
  contexts.push(context);
2367
2400
  const directory = await mkdtemp(join(tmpdir(), "pi-harness-api-bundled-uninstall-"));
2401
+ temporaryDirectories.push(directory);
2402
+ const shimDirectory = join(directory, "bin");
2403
+ await mkdir(shimDirectory);
2404
+ const npmLog = join(directory, "npm.log");
2405
+ await writeFile(join(shimDirectory, "npm"), `#!/bin/sh\nprintf '%s\\n' "$*" >> ${JSON.stringify(npmLog)}\n`, { mode: 0o755 });
2368
2406
  const configPath = join(directory, "profile.yml");
2369
2407
  const entryId = "skill-guard";
2370
2408
  let active = true;
2371
2409
  const loaderEntry = {
2372
2410
  id: `profile:${entryId}`,
2373
- options: { id: entryId, name: "@pi-harness/core/plugins/skill-guard", config: {} },
2411
+ options: { id: entryId, name: "@pi-harness/plugin-skill-guard", config: {} },
2374
2412
  parent: {
2375
2413
  tree: { write() {} },
2376
2414
  remove(id: string): Promise<void> {
@@ -2397,14 +2435,22 @@ describe("API gateway plugin", () => {
2397
2435
  });
2398
2436
  await context.plugin(apiPlugin);
2399
2437
 
2400
- const response = await fetch(context.webServer.url + "/api/plugins/uninstall", {
2401
- method: "POST",
2402
- headers: { "content-type": "application/json" },
2403
- body: JSON.stringify({ id: entryId }),
2404
- });
2438
+ const originalPath = process.env.PATH ?? "";
2439
+ process.env.PATH = `${shimDirectory}:${originalPath}`;
2440
+ let response: Response;
2441
+ try {
2442
+ response = await fetch(context.webServer.url + "/api/plugins/uninstall", {
2443
+ method: "POST",
2444
+ headers: { "content-type": "application/json" },
2445
+ body: JSON.stringify({ id: entryId }),
2446
+ });
2447
+ } finally {
2448
+ process.env.PATH = originalPath;
2449
+ }
2405
2450
 
2406
2451
  expect(response.status).toBe(200);
2407
2452
  expect(active).toBe(false);
2453
+ expect((await readFile(npmLog, "utf8")).trim()).toBe("uninstall --package-lock=false @pi-harness/plugin-skill-guard");
2408
2454
  await expect(readFile(configPath, "utf8")).resolves.not.toContain(entryId);
2409
2455
  await expect(readFile(configPath, "utf8")).resolves.toContain("- id: sibling");
2410
2456
  });