@pi-harness/pi-harness 0.1.14 → 0.1.16

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 (1513) hide show
  1. package/README.md +8 -4
  2. package/apps/web/dist/assets/{index-C98SJjJd.js → index-DXznRinu.js} +1 -1
  3. package/apps/web/dist/index.html +1 -1
  4. package/apps/web/package.json +6 -6
  5. package/apps/web/server-dist/bin.js +7 -1
  6. package/apps/web/server-dist/bin.js.map +1 -1
  7. package/apps/web/src/server/bin.ts +9 -1
  8. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/agent-teams.json +1 -1
  9. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/anchored-standard.json +1 -1
  10. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/annotation.json +1 -1
  11. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/archify.json +1 -1
  12. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/at-file.json +1 -1
  13. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/auto-mode.json +1 -1
  14. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/better-sidebar.json +1 -1
  15. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/browser-fetch.json +1 -1
  16. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/browser-session.json +1 -1
  17. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/canvas-draw.json +1 -1
  18. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/change-verifier.json +1 -1
  19. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/cleaner.json +1 -1
  20. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/cli-notifier.json +1 -1
  21. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/code2skill.json +1 -1
  22. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/colleague-skill.json +1 -1
  23. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/context-doctor.json +1 -1
  24. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/context.json +1 -1
  25. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/cost-meter.json +1 -1
  26. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/dependency-checker.json +1 -1
  27. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/docker-sandbox.json +1 -1
  28. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/fail-logger.json +1 -1
  29. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/genui.json +1 -1
  30. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/git-time-capsule.json +1 -1
  31. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/graph-memory.json +1 -1
  32. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/history-compressor.json +1 -1
  33. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/hol-guard.json +1 -1
  34. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/i18n-pair.json +1 -1
  35. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/image-compressor.json +1 -1
  36. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/llm-verifier.json +1 -1
  37. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/mcp-client.json +1 -1
  38. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/mcp-panel.json +1 -1
  39. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/memory.json +1 -1
  40. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/mirage-bridge.json +1 -1
  41. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/mock-server.json +1 -1
  42. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/modlens.json +1 -1
  43. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/module-search.json +1 -1
  44. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/obsidian-sync.json +1 -1
  45. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/openpets.json +1 -1
  46. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/plan-execute.json +1 -1
  47. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/plugin-check.json +1 -1
  48. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/plugin-dev.json +1 -1
  49. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/plugin-finder.json +1 -1
  50. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/plugin-radar.json +1 -1
  51. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/plugin-stars.json +1 -1
  52. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/prompt-guard.json +1 -1
  53. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/prompt-library.json +1 -1
  54. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/readme-gen.json +1 -1
  55. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/recall-unread.json +1 -1
  56. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/reverse-skill.json +1 -1
  57. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/reviewer-bot.json +1 -1
  58. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/runtime-doctor.json +1 -1
  59. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/secure-audit.json +1 -1
  60. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/session-bookmarks.json +1 -1
  61. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/session-bridge.json +1 -1
  62. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/session-compare.json +1 -1
  63. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/session-export.json +1 -1
  64. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/session-insights.json +1 -1
  65. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/session-search.json +1 -1
  66. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/skill-catalog.json +1 -1
  67. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/skill-guard.json +1 -1
  68. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/sql-lens.json +1 -1
  69. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/synapse.json +1 -1
  70. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/tab-manager.json +1 -1
  71. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/taskboard.json +1 -1
  72. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/telemetry-blocker.json +1 -1
  73. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/test-harness.json +1 -1
  74. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/theme-studio.json +1 -1
  75. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/token-guard.json +1 -1
  76. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/turn-rewind.json +1 -1
  77. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/undo-savepoint.json +1 -1
  78. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/vision-toolkit.json +1 -1
  79. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/web-research.json +1 -1
  80. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/workspace-navigator.json +1 -1
  81. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/workspace-search.json +1 -1
  82. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/yaml-validator.json +1 -1
  83. package/node_modules/@pi-harness/api-gateway/package.json +1 -1
  84. package/node_modules/@pi-harness/cli/dist/bin.js +2 -0
  85. package/node_modules/@pi-harness/cli/dist/bin.js.map +1 -1
  86. package/node_modules/@pi-harness/cli/dist/main.d.ts +1 -0
  87. package/node_modules/@pi-harness/cli/dist/main.d.ts.map +1 -1
  88. package/node_modules/@pi-harness/cli/dist/main.js +9 -0
  89. package/node_modules/@pi-harness/cli/dist/main.js.map +1 -1
  90. package/node_modules/@pi-harness/cli/package.json +1 -1
  91. package/node_modules/@pi-harness/host-webserver/package.json +1 -1
  92. package/node_modules/@pi-harness/web-app/package.json +1 -1
  93. package/package.json +10 -8
  94. package/packages/api-gateway/dist/marketplace-entries/official/agent-teams.json +1 -1
  95. package/packages/api-gateway/dist/marketplace-entries/official/anchored-standard.json +1 -1
  96. package/packages/api-gateway/dist/marketplace-entries/official/annotation.json +1 -1
  97. package/packages/api-gateway/dist/marketplace-entries/official/archify.json +1 -1
  98. package/packages/api-gateway/dist/marketplace-entries/official/at-file.json +1 -1
  99. package/packages/api-gateway/dist/marketplace-entries/official/auto-mode.json +1 -1
  100. package/packages/api-gateway/dist/marketplace-entries/official/better-sidebar.json +1 -1
  101. package/packages/api-gateway/dist/marketplace-entries/official/browser-fetch.json +1 -1
  102. package/packages/api-gateway/dist/marketplace-entries/official/browser-session.json +1 -1
  103. package/packages/api-gateway/dist/marketplace-entries/official/canvas-draw.json +1 -1
  104. package/packages/api-gateway/dist/marketplace-entries/official/change-verifier.json +1 -1
  105. package/packages/api-gateway/dist/marketplace-entries/official/cleaner.json +1 -1
  106. package/packages/api-gateway/dist/marketplace-entries/official/cli-notifier.json +1 -1
  107. package/packages/api-gateway/dist/marketplace-entries/official/code2skill.json +1 -1
  108. package/packages/api-gateway/dist/marketplace-entries/official/colleague-skill.json +1 -1
  109. package/packages/api-gateway/dist/marketplace-entries/official/context-doctor.json +1 -1
  110. package/packages/api-gateway/dist/marketplace-entries/official/context.json +1 -1
  111. package/packages/api-gateway/dist/marketplace-entries/official/cost-meter.json +1 -1
  112. package/packages/api-gateway/dist/marketplace-entries/official/dependency-checker.json +1 -1
  113. package/packages/api-gateway/dist/marketplace-entries/official/docker-sandbox.json +1 -1
  114. package/packages/api-gateway/dist/marketplace-entries/official/fail-logger.json +1 -1
  115. package/packages/api-gateway/dist/marketplace-entries/official/genui.json +1 -1
  116. package/packages/api-gateway/dist/marketplace-entries/official/git-time-capsule.json +1 -1
  117. package/packages/api-gateway/dist/marketplace-entries/official/graph-memory.json +1 -1
  118. package/packages/api-gateway/dist/marketplace-entries/official/history-compressor.json +1 -1
  119. package/packages/api-gateway/dist/marketplace-entries/official/hol-guard.json +1 -1
  120. package/packages/api-gateway/dist/marketplace-entries/official/i18n-pair.json +1 -1
  121. package/packages/api-gateway/dist/marketplace-entries/official/image-compressor.json +1 -1
  122. package/packages/api-gateway/dist/marketplace-entries/official/llm-verifier.json +1 -1
  123. package/packages/api-gateway/dist/marketplace-entries/official/mcp-client.json +1 -1
  124. package/packages/api-gateway/dist/marketplace-entries/official/mcp-panel.json +1 -1
  125. package/packages/api-gateway/dist/marketplace-entries/official/memory.json +1 -1
  126. package/packages/api-gateway/dist/marketplace-entries/official/mirage-bridge.json +1 -1
  127. package/packages/api-gateway/dist/marketplace-entries/official/mock-server.json +1 -1
  128. package/packages/api-gateway/dist/marketplace-entries/official/modlens.json +1 -1
  129. package/packages/api-gateway/dist/marketplace-entries/official/module-search.json +1 -1
  130. package/packages/api-gateway/dist/marketplace-entries/official/obsidian-sync.json +1 -1
  131. package/packages/api-gateway/dist/marketplace-entries/official/openpets.json +1 -1
  132. package/packages/api-gateway/dist/marketplace-entries/official/plan-execute.json +1 -1
  133. package/packages/api-gateway/dist/marketplace-entries/official/plugin-check.json +1 -1
  134. package/packages/api-gateway/dist/marketplace-entries/official/plugin-dev.json +1 -1
  135. package/packages/api-gateway/dist/marketplace-entries/official/plugin-finder.json +1 -1
  136. package/packages/api-gateway/dist/marketplace-entries/official/plugin-radar.json +1 -1
  137. package/packages/api-gateway/dist/marketplace-entries/official/plugin-stars.json +1 -1
  138. package/packages/api-gateway/dist/marketplace-entries/official/prompt-guard.json +1 -1
  139. package/packages/api-gateway/dist/marketplace-entries/official/prompt-library.json +1 -1
  140. package/packages/api-gateway/dist/marketplace-entries/official/readme-gen.json +1 -1
  141. package/packages/api-gateway/dist/marketplace-entries/official/recall-unread.json +1 -1
  142. package/packages/api-gateway/dist/marketplace-entries/official/reverse-skill.json +1 -1
  143. package/packages/api-gateway/dist/marketplace-entries/official/reviewer-bot.json +1 -1
  144. package/packages/api-gateway/dist/marketplace-entries/official/runtime-doctor.json +1 -1
  145. package/packages/api-gateway/dist/marketplace-entries/official/secure-audit.json +1 -1
  146. package/packages/api-gateway/dist/marketplace-entries/official/session-bookmarks.json +1 -1
  147. package/packages/api-gateway/dist/marketplace-entries/official/session-bridge.json +1 -1
  148. package/packages/api-gateway/dist/marketplace-entries/official/session-compare.json +1 -1
  149. package/packages/api-gateway/dist/marketplace-entries/official/session-export.json +1 -1
  150. package/packages/api-gateway/dist/marketplace-entries/official/session-insights.json +1 -1
  151. package/packages/api-gateway/dist/marketplace-entries/official/session-search.json +1 -1
  152. package/packages/api-gateway/dist/marketplace-entries/official/skill-catalog.json +1 -1
  153. package/packages/api-gateway/dist/marketplace-entries/official/skill-guard.json +1 -1
  154. package/packages/api-gateway/dist/marketplace-entries/official/sql-lens.json +1 -1
  155. package/packages/api-gateway/dist/marketplace-entries/official/synapse.json +1 -1
  156. package/packages/api-gateway/dist/marketplace-entries/official/tab-manager.json +1 -1
  157. package/packages/api-gateway/dist/marketplace-entries/official/taskboard.json +1 -1
  158. package/packages/api-gateway/dist/marketplace-entries/official/telemetry-blocker.json +1 -1
  159. package/packages/api-gateway/dist/marketplace-entries/official/test-harness.json +1 -1
  160. package/packages/api-gateway/dist/marketplace-entries/official/theme-studio.json +1 -1
  161. package/packages/api-gateway/dist/marketplace-entries/official/token-guard.json +1 -1
  162. package/packages/api-gateway/dist/marketplace-entries/official/turn-rewind.json +1 -1
  163. package/packages/api-gateway/dist/marketplace-entries/official/undo-savepoint.json +1 -1
  164. package/packages/api-gateway/dist/marketplace-entries/official/vision-toolkit.json +1 -1
  165. package/packages/api-gateway/dist/marketplace-entries/official/web-research.json +1 -1
  166. package/packages/api-gateway/dist/marketplace-entries/official/workspace-navigator.json +1 -1
  167. package/packages/api-gateway/dist/marketplace-entries/official/workspace-search.json +1 -1
  168. package/packages/api-gateway/dist/marketplace-entries/official/yaml-validator.json +1 -1
  169. package/packages/api-gateway/package.json +1 -1
  170. package/packages/api-gateway/src/marketplace-entries/official/agent-teams.json +1 -1
  171. package/packages/api-gateway/src/marketplace-entries/official/anchored-standard.json +1 -1
  172. package/packages/api-gateway/src/marketplace-entries/official/annotation.json +1 -1
  173. package/packages/api-gateway/src/marketplace-entries/official/archify.json +1 -1
  174. package/packages/api-gateway/src/marketplace-entries/official/at-file.json +1 -1
  175. package/packages/api-gateway/src/marketplace-entries/official/auto-mode.json +1 -1
  176. package/packages/api-gateway/src/marketplace-entries/official/better-sidebar.json +1 -1
  177. package/packages/api-gateway/src/marketplace-entries/official/browser-fetch.json +1 -1
  178. package/packages/api-gateway/src/marketplace-entries/official/browser-session.json +1 -1
  179. package/packages/api-gateway/src/marketplace-entries/official/canvas-draw.json +1 -1
  180. package/packages/api-gateway/src/marketplace-entries/official/change-verifier.json +1 -1
  181. package/packages/api-gateway/src/marketplace-entries/official/cleaner.json +1 -1
  182. package/packages/api-gateway/src/marketplace-entries/official/cli-notifier.json +1 -1
  183. package/packages/api-gateway/src/marketplace-entries/official/code2skill.json +1 -1
  184. package/packages/api-gateway/src/marketplace-entries/official/colleague-skill.json +1 -1
  185. package/packages/api-gateway/src/marketplace-entries/official/context-doctor.json +1 -1
  186. package/packages/api-gateway/src/marketplace-entries/official/context.json +1 -1
  187. package/packages/api-gateway/src/marketplace-entries/official/cost-meter.json +1 -1
  188. package/packages/api-gateway/src/marketplace-entries/official/dependency-checker.json +1 -1
  189. package/packages/api-gateway/src/marketplace-entries/official/docker-sandbox.json +1 -1
  190. package/packages/api-gateway/src/marketplace-entries/official/fail-logger.json +1 -1
  191. package/packages/api-gateway/src/marketplace-entries/official/genui.json +1 -1
  192. package/packages/api-gateway/src/marketplace-entries/official/git-time-capsule.json +1 -1
  193. package/packages/api-gateway/src/marketplace-entries/official/graph-memory.json +1 -1
  194. package/packages/api-gateway/src/marketplace-entries/official/history-compressor.json +1 -1
  195. package/packages/api-gateway/src/marketplace-entries/official/hol-guard.json +1 -1
  196. package/packages/api-gateway/src/marketplace-entries/official/i18n-pair.json +1 -1
  197. package/packages/api-gateway/src/marketplace-entries/official/image-compressor.json +1 -1
  198. package/packages/api-gateway/src/marketplace-entries/official/llm-verifier.json +1 -1
  199. package/packages/api-gateway/src/marketplace-entries/official/mcp-client.json +1 -1
  200. package/packages/api-gateway/src/marketplace-entries/official/mcp-panel.json +1 -1
  201. package/packages/api-gateway/src/marketplace-entries/official/memory.json +1 -1
  202. package/packages/api-gateway/src/marketplace-entries/official/mirage-bridge.json +1 -1
  203. package/packages/api-gateway/src/marketplace-entries/official/mock-server.json +1 -1
  204. package/packages/api-gateway/src/marketplace-entries/official/modlens.json +1 -1
  205. package/packages/api-gateway/src/marketplace-entries/official/module-search.json +1 -1
  206. package/packages/api-gateway/src/marketplace-entries/official/obsidian-sync.json +1 -1
  207. package/packages/api-gateway/src/marketplace-entries/official/openpets.json +1 -1
  208. package/packages/api-gateway/src/marketplace-entries/official/plan-execute.json +1 -1
  209. package/packages/api-gateway/src/marketplace-entries/official/plugin-check.json +1 -1
  210. package/packages/api-gateway/src/marketplace-entries/official/plugin-dev.json +1 -1
  211. package/packages/api-gateway/src/marketplace-entries/official/plugin-finder.json +1 -1
  212. package/packages/api-gateway/src/marketplace-entries/official/plugin-radar.json +1 -1
  213. package/packages/api-gateway/src/marketplace-entries/official/plugin-stars.json +1 -1
  214. package/packages/api-gateway/src/marketplace-entries/official/prompt-guard.json +1 -1
  215. package/packages/api-gateway/src/marketplace-entries/official/prompt-library.json +1 -1
  216. package/packages/api-gateway/src/marketplace-entries/official/readme-gen.json +1 -1
  217. package/packages/api-gateway/src/marketplace-entries/official/recall-unread.json +1 -1
  218. package/packages/api-gateway/src/marketplace-entries/official/reverse-skill.json +1 -1
  219. package/packages/api-gateway/src/marketplace-entries/official/reviewer-bot.json +1 -1
  220. package/packages/api-gateway/src/marketplace-entries/official/runtime-doctor.json +1 -1
  221. package/packages/api-gateway/src/marketplace-entries/official/secure-audit.json +1 -1
  222. package/packages/api-gateway/src/marketplace-entries/official/session-bookmarks.json +1 -1
  223. package/packages/api-gateway/src/marketplace-entries/official/session-bridge.json +1 -1
  224. package/packages/api-gateway/src/marketplace-entries/official/session-compare.json +1 -1
  225. package/packages/api-gateway/src/marketplace-entries/official/session-export.json +1 -1
  226. package/packages/api-gateway/src/marketplace-entries/official/session-insights.json +1 -1
  227. package/packages/api-gateway/src/marketplace-entries/official/session-search.json +1 -1
  228. package/packages/api-gateway/src/marketplace-entries/official/skill-catalog.json +1 -1
  229. package/packages/api-gateway/src/marketplace-entries/official/skill-guard.json +1 -1
  230. package/packages/api-gateway/src/marketplace-entries/official/sql-lens.json +1 -1
  231. package/packages/api-gateway/src/marketplace-entries/official/synapse.json +1 -1
  232. package/packages/api-gateway/src/marketplace-entries/official/tab-manager.json +1 -1
  233. package/packages/api-gateway/src/marketplace-entries/official/taskboard.json +1 -1
  234. package/packages/api-gateway/src/marketplace-entries/official/telemetry-blocker.json +1 -1
  235. package/packages/api-gateway/src/marketplace-entries/official/test-harness.json +1 -1
  236. package/packages/api-gateway/src/marketplace-entries/official/theme-studio.json +1 -1
  237. package/packages/api-gateway/src/marketplace-entries/official/token-guard.json +1 -1
  238. package/packages/api-gateway/src/marketplace-entries/official/turn-rewind.json +1 -1
  239. package/packages/api-gateway/src/marketplace-entries/official/undo-savepoint.json +1 -1
  240. package/packages/api-gateway/src/marketplace-entries/official/vision-toolkit.json +1 -1
  241. package/packages/api-gateway/src/marketplace-entries/official/web-research.json +1 -1
  242. package/packages/api-gateway/src/marketplace-entries/official/workspace-navigator.json +1 -1
  243. package/packages/api-gateway/src/marketplace-entries/official/workspace-search.json +1 -1
  244. package/packages/api-gateway/src/marketplace-entries/official/yaml-validator.json +1 -1
  245. package/packages/api-gateway/test/release-package.test.ts +5 -11
  246. package/packages/api-gateway/test/release-version.test.ts +2 -2
  247. package/packages/bundle-web-app/package.json +1 -1
  248. package/packages/cli/dist/bin.js +2 -0
  249. package/packages/cli/dist/bin.js.map +1 -1
  250. package/packages/cli/dist/main.d.ts +1 -0
  251. package/packages/cli/dist/main.d.ts.map +1 -1
  252. package/packages/cli/dist/main.js +9 -0
  253. package/packages/cli/dist/main.js.map +1 -1
  254. package/packages/cli/package.json +1 -1
  255. package/packages/cli/src/bin.ts +2 -0
  256. package/packages/cli/src/main.ts +9 -0
  257. package/packages/cli/test/cli.test.ts +10 -0
  258. package/packages/host-webserver/package.json +1 -1
  259. package/node_modules/@pi-harness/core/LICENSE +0 -9
  260. package/node_modules/@pi-harness/core/dist/atomic-write.d.ts +0 -8
  261. package/node_modules/@pi-harness/core/dist/atomic-write.d.ts.map +0 -1
  262. package/node_modules/@pi-harness/core/dist/atomic-write.js +0 -40
  263. package/node_modules/@pi-harness/core/dist/atomic-write.js.map +0 -1
  264. package/node_modules/@pi-harness/core/dist/boot.d.ts +0 -13
  265. package/node_modules/@pi-harness/core/dist/boot.d.ts.map +0 -1
  266. package/node_modules/@pi-harness/core/dist/boot.js +0 -257
  267. package/node_modules/@pi-harness/core/dist/boot.js.map +0 -1
  268. package/node_modules/@pi-harness/core/dist/bounded-file.d.ts +0 -7
  269. package/node_modules/@pi-harness/core/dist/bounded-file.d.ts.map +0 -1
  270. package/node_modules/@pi-harness/core/dist/bounded-file.js +0 -50
  271. package/node_modules/@pi-harness/core/dist/bounded-file.js.map +0 -1
  272. package/node_modules/@pi-harness/core/dist/config.d.ts +0 -4
  273. package/node_modules/@pi-harness/core/dist/config.d.ts.map +0 -1
  274. package/node_modules/@pi-harness/core/dist/config.js +0 -29
  275. package/node_modules/@pi-harness/core/dist/config.js.map +0 -1
  276. package/node_modules/@pi-harness/core/dist/context.d.ts +0 -3
  277. package/node_modules/@pi-harness/core/dist/context.d.ts.map +0 -1
  278. package/node_modules/@pi-harness/core/dist/context.js +0 -2
  279. package/node_modules/@pi-harness/core/dist/context.js.map +0 -1
  280. package/node_modules/@pi-harness/core/dist/cordis-timer.d.ts +0 -15
  281. package/node_modules/@pi-harness/core/dist/cordis-timer.d.ts.map +0 -1
  282. package/node_modules/@pi-harness/core/dist/cordis-timer.js +0 -99
  283. package/node_modules/@pi-harness/core/dist/cordis-timer.js.map +0 -1
  284. package/node_modules/@pi-harness/core/dist/http.d.ts +0 -8
  285. package/node_modules/@pi-harness/core/dist/http.d.ts.map +0 -1
  286. package/node_modules/@pi-harness/core/dist/http.js +0 -27
  287. package/node_modules/@pi-harness/core/dist/http.js.map +0 -1
  288. package/node_modules/@pi-harness/core/dist/index.d.ts +0 -9
  289. package/node_modules/@pi-harness/core/dist/index.d.ts.map +0 -1
  290. package/node_modules/@pi-harness/core/dist/index.js +0 -8
  291. package/node_modules/@pi-harness/core/dist/index.js.map +0 -1
  292. package/node_modules/@pi-harness/core/dist/plugins/agent-teams.d.ts +0 -21
  293. package/node_modules/@pi-harness/core/dist/plugins/agent-teams.d.ts.map +0 -1
  294. package/node_modules/@pi-harness/core/dist/plugins/agent-teams.js +0 -1179
  295. package/node_modules/@pi-harness/core/dist/plugins/agent-teams.js.map +0 -1
  296. package/node_modules/@pi-harness/core/dist/plugins/anchored-standard.d.ts +0 -15
  297. package/node_modules/@pi-harness/core/dist/plugins/anchored-standard.d.ts.map +0 -1
  298. package/node_modules/@pi-harness/core/dist/plugins/anchored-standard.js +0 -112
  299. package/node_modules/@pi-harness/core/dist/plugins/anchored-standard.js.map +0 -1
  300. package/node_modules/@pi-harness/core/dist/plugins/annotation.d.ts +0 -19
  301. package/node_modules/@pi-harness/core/dist/plugins/annotation.d.ts.map +0 -1
  302. package/node_modules/@pi-harness/core/dist/plugins/annotation.js +0 -112
  303. package/node_modules/@pi-harness/core/dist/plugins/annotation.js.map +0 -1
  304. package/node_modules/@pi-harness/core/dist/plugins/archify.d.ts +0 -24
  305. package/node_modules/@pi-harness/core/dist/plugins/archify.d.ts.map +0 -1
  306. package/node_modules/@pi-harness/core/dist/plugins/archify.js +0 -145
  307. package/node_modules/@pi-harness/core/dist/plugins/archify.js.map +0 -1
  308. package/node_modules/@pi-harness/core/dist/plugins/at-file.d.ts +0 -12
  309. package/node_modules/@pi-harness/core/dist/plugins/at-file.d.ts.map +0 -1
  310. package/node_modules/@pi-harness/core/dist/plugins/at-file.js +0 -143
  311. package/node_modules/@pi-harness/core/dist/plugins/at-file.js.map +0 -1
  312. package/node_modules/@pi-harness/core/dist/plugins/auto-mode.d.ts +0 -15
  313. package/node_modules/@pi-harness/core/dist/plugins/auto-mode.d.ts.map +0 -1
  314. package/node_modules/@pi-harness/core/dist/plugins/auto-mode.js +0 -183
  315. package/node_modules/@pi-harness/core/dist/plugins/auto-mode.js.map +0 -1
  316. package/node_modules/@pi-harness/core/dist/plugins/better-sidebar.d.ts +0 -38
  317. package/node_modules/@pi-harness/core/dist/plugins/better-sidebar.d.ts.map +0 -1
  318. package/node_modules/@pi-harness/core/dist/plugins/better-sidebar.js +0 -99
  319. package/node_modules/@pi-harness/core/dist/plugins/better-sidebar.js.map +0 -1
  320. package/node_modules/@pi-harness/core/dist/plugins/browser-fetch.d.ts +0 -15
  321. package/node_modules/@pi-harness/core/dist/plugins/browser-fetch.d.ts.map +0 -1
  322. package/node_modules/@pi-harness/core/dist/plugins/browser-fetch.js +0 -359
  323. package/node_modules/@pi-harness/core/dist/plugins/browser-fetch.js.map +0 -1
  324. package/node_modules/@pi-harness/core/dist/plugins/browser-session.d.ts +0 -14
  325. package/node_modules/@pi-harness/core/dist/plugins/browser-session.d.ts.map +0 -1
  326. package/node_modules/@pi-harness/core/dist/plugins/browser-session.js +0 -604
  327. package/node_modules/@pi-harness/core/dist/plugins/browser-session.js.map +0 -1
  328. package/node_modules/@pi-harness/core/dist/plugins/canvas-draw.d.ts +0 -9
  329. package/node_modules/@pi-harness/core/dist/plugins/canvas-draw.d.ts.map +0 -1
  330. package/node_modules/@pi-harness/core/dist/plugins/canvas-draw.js +0 -140
  331. package/node_modules/@pi-harness/core/dist/plugins/canvas-draw.js.map +0 -1
  332. package/node_modules/@pi-harness/core/dist/plugins/change-verifier.d.ts +0 -9
  333. package/node_modules/@pi-harness/core/dist/plugins/change-verifier.d.ts.map +0 -1
  334. package/node_modules/@pi-harness/core/dist/plugins/change-verifier.js +0 -88
  335. package/node_modules/@pi-harness/core/dist/plugins/change-verifier.js.map +0 -1
  336. package/node_modules/@pi-harness/core/dist/plugins/cleaner.d.ts +0 -12
  337. package/node_modules/@pi-harness/core/dist/plugins/cleaner.d.ts.map +0 -1
  338. package/node_modules/@pi-harness/core/dist/plugins/cleaner.js +0 -353
  339. package/node_modules/@pi-harness/core/dist/plugins/cleaner.js.map +0 -1
  340. package/node_modules/@pi-harness/core/dist/plugins/cli-notifier.d.ts +0 -16
  341. package/node_modules/@pi-harness/core/dist/plugins/cli-notifier.d.ts.map +0 -1
  342. package/node_modules/@pi-harness/core/dist/plugins/cli-notifier.js +0 -167
  343. package/node_modules/@pi-harness/core/dist/plugins/cli-notifier.js.map +0 -1
  344. package/node_modules/@pi-harness/core/dist/plugins/code2skill.d.ts +0 -9
  345. package/node_modules/@pi-harness/core/dist/plugins/code2skill.d.ts.map +0 -1
  346. package/node_modules/@pi-harness/core/dist/plugins/code2skill.js +0 -235
  347. package/node_modules/@pi-harness/core/dist/plugins/code2skill.js.map +0 -1
  348. package/node_modules/@pi-harness/core/dist/plugins/colleague-skill.d.ts +0 -28
  349. package/node_modules/@pi-harness/core/dist/plugins/colleague-skill.d.ts.map +0 -1
  350. package/node_modules/@pi-harness/core/dist/plugins/colleague-skill.js +0 -129
  351. package/node_modules/@pi-harness/core/dist/plugins/colleague-skill.js.map +0 -1
  352. package/node_modules/@pi-harness/core/dist/plugins/context-doctor.d.ts +0 -35
  353. package/node_modules/@pi-harness/core/dist/plugins/context-doctor.d.ts.map +0 -1
  354. package/node_modules/@pi-harness/core/dist/plugins/context-doctor.js +0 -459
  355. package/node_modules/@pi-harness/core/dist/plugins/context-doctor.js.map +0 -1
  356. package/node_modules/@pi-harness/core/dist/plugins/context.d.ts +0 -9
  357. package/node_modules/@pi-harness/core/dist/plugins/context.d.ts.map +0 -1
  358. package/node_modules/@pi-harness/core/dist/plugins/context.js +0 -214
  359. package/node_modules/@pi-harness/core/dist/plugins/context.js.map +0 -1
  360. package/node_modules/@pi-harness/core/dist/plugins/cost-meter.d.ts +0 -36
  361. package/node_modules/@pi-harness/core/dist/plugins/cost-meter.d.ts.map +0 -1
  362. package/node_modules/@pi-harness/core/dist/plugins/cost-meter.js +0 -430
  363. package/node_modules/@pi-harness/core/dist/plugins/cost-meter.js.map +0 -1
  364. package/node_modules/@pi-harness/core/dist/plugins/dependency-checker.d.ts +0 -36
  365. package/node_modules/@pi-harness/core/dist/plugins/dependency-checker.d.ts.map +0 -1
  366. package/node_modules/@pi-harness/core/dist/plugins/dependency-checker.js +0 -570
  367. package/node_modules/@pi-harness/core/dist/plugins/dependency-checker.js.map +0 -1
  368. package/node_modules/@pi-harness/core/dist/plugins/docker-sandbox.d.ts +0 -9
  369. package/node_modules/@pi-harness/core/dist/plugins/docker-sandbox.d.ts.map +0 -1
  370. package/node_modules/@pi-harness/core/dist/plugins/docker-sandbox.js +0 -344
  371. package/node_modules/@pi-harness/core/dist/plugins/docker-sandbox.js.map +0 -1
  372. package/node_modules/@pi-harness/core/dist/plugins/fail-logger.d.ts +0 -9
  373. package/node_modules/@pi-harness/core/dist/plugins/fail-logger.d.ts.map +0 -1
  374. package/node_modules/@pi-harness/core/dist/plugins/fail-logger.js +0 -218
  375. package/node_modules/@pi-harness/core/dist/plugins/fail-logger.js.map +0 -1
  376. package/node_modules/@pi-harness/core/dist/plugins/genui.d.ts +0 -9
  377. package/node_modules/@pi-harness/core/dist/plugins/genui.d.ts.map +0 -1
  378. package/node_modules/@pi-harness/core/dist/plugins/genui.js +0 -144
  379. package/node_modules/@pi-harness/core/dist/plugins/genui.js.map +0 -1
  380. package/node_modules/@pi-harness/core/dist/plugins/git-time-capsule.d.ts +0 -15
  381. package/node_modules/@pi-harness/core/dist/plugins/git-time-capsule.d.ts.map +0 -1
  382. package/node_modules/@pi-harness/core/dist/plugins/git-time-capsule.js +0 -436
  383. package/node_modules/@pi-harness/core/dist/plugins/git-time-capsule.js.map +0 -1
  384. package/node_modules/@pi-harness/core/dist/plugins/graph-memory.d.ts +0 -16
  385. package/node_modules/@pi-harness/core/dist/plugins/graph-memory.d.ts.map +0 -1
  386. package/node_modules/@pi-harness/core/dist/plugins/graph-memory.js +0 -669
  387. package/node_modules/@pi-harness/core/dist/plugins/graph-memory.js.map +0 -1
  388. package/node_modules/@pi-harness/core/dist/plugins/history-compressor.d.ts +0 -15
  389. package/node_modules/@pi-harness/core/dist/plugins/history-compressor.d.ts.map +0 -1
  390. package/node_modules/@pi-harness/core/dist/plugins/history-compressor.js +0 -99
  391. package/node_modules/@pi-harness/core/dist/plugins/history-compressor.js.map +0 -1
  392. package/node_modules/@pi-harness/core/dist/plugins/hol-guard.d.ts +0 -29
  393. package/node_modules/@pi-harness/core/dist/plugins/hol-guard.d.ts.map +0 -1
  394. package/node_modules/@pi-harness/core/dist/plugins/hol-guard.js +0 -159
  395. package/node_modules/@pi-harness/core/dist/plugins/hol-guard.js.map +0 -1
  396. package/node_modules/@pi-harness/core/dist/plugins/i18n-pair.d.ts +0 -12
  397. package/node_modules/@pi-harness/core/dist/plugins/i18n-pair.d.ts.map +0 -1
  398. package/node_modules/@pi-harness/core/dist/plugins/i18n-pair.js +0 -332
  399. package/node_modules/@pi-harness/core/dist/plugins/i18n-pair.js.map +0 -1
  400. package/node_modules/@pi-harness/core/dist/plugins/image-compressor.d.ts +0 -15
  401. package/node_modules/@pi-harness/core/dist/plugins/image-compressor.d.ts.map +0 -1
  402. package/node_modules/@pi-harness/core/dist/plugins/image-compressor.js +0 -223
  403. package/node_modules/@pi-harness/core/dist/plugins/image-compressor.js.map +0 -1
  404. package/node_modules/@pi-harness/core/dist/plugins/llm-verifier.d.ts +0 -42
  405. package/node_modules/@pi-harness/core/dist/plugins/llm-verifier.d.ts.map +0 -1
  406. package/node_modules/@pi-harness/core/dist/plugins/llm-verifier.js +0 -138
  407. package/node_modules/@pi-harness/core/dist/plugins/llm-verifier.js.map +0 -1
  408. package/node_modules/@pi-harness/core/dist/plugins/mcp-client.d.ts +0 -19
  409. package/node_modules/@pi-harness/core/dist/plugins/mcp-client.d.ts.map +0 -1
  410. package/node_modules/@pi-harness/core/dist/plugins/mcp-client.js +0 -1288
  411. package/node_modules/@pi-harness/core/dist/plugins/mcp-client.js.map +0 -1
  412. package/node_modules/@pi-harness/core/dist/plugins/mcp-panel.d.ts +0 -14
  413. package/node_modules/@pi-harness/core/dist/plugins/mcp-panel.d.ts.map +0 -1
  414. package/node_modules/@pi-harness/core/dist/plugins/mcp-panel.js +0 -194
  415. package/node_modules/@pi-harness/core/dist/plugins/mcp-panel.js.map +0 -1
  416. package/node_modules/@pi-harness/core/dist/plugins/memory.d.ts +0 -15
  417. package/node_modules/@pi-harness/core/dist/plugins/memory.d.ts.map +0 -1
  418. package/node_modules/@pi-harness/core/dist/plugins/memory.js +0 -394
  419. package/node_modules/@pi-harness/core/dist/plugins/memory.js.map +0 -1
  420. package/node_modules/@pi-harness/core/dist/plugins/mirage-bridge.d.ts +0 -23
  421. package/node_modules/@pi-harness/core/dist/plugins/mirage-bridge.d.ts.map +0 -1
  422. package/node_modules/@pi-harness/core/dist/plugins/mirage-bridge.js +0 -159
  423. package/node_modules/@pi-harness/core/dist/plugins/mirage-bridge.js.map +0 -1
  424. package/node_modules/@pi-harness/core/dist/plugins/mock-server.d.ts +0 -22
  425. package/node_modules/@pi-harness/core/dist/plugins/mock-server.d.ts.map +0 -1
  426. package/node_modules/@pi-harness/core/dist/plugins/mock-server.js +0 -180
  427. package/node_modules/@pi-harness/core/dist/plugins/mock-server.js.map +0 -1
  428. package/node_modules/@pi-harness/core/dist/plugins/model.d.ts +0 -11
  429. package/node_modules/@pi-harness/core/dist/plugins/model.d.ts.map +0 -1
  430. package/node_modules/@pi-harness/core/dist/plugins/model.js +0 -17
  431. package/node_modules/@pi-harness/core/dist/plugins/model.js.map +0 -1
  432. package/node_modules/@pi-harness/core/dist/plugins/models.d.ts +0 -16
  433. package/node_modules/@pi-harness/core/dist/plugins/models.d.ts.map +0 -1
  434. package/node_modules/@pi-harness/core/dist/plugins/models.js +0 -35
  435. package/node_modules/@pi-harness/core/dist/plugins/models.js.map +0 -1
  436. package/node_modules/@pi-harness/core/dist/plugins/modlens.d.ts +0 -15
  437. package/node_modules/@pi-harness/core/dist/plugins/modlens.d.ts.map +0 -1
  438. package/node_modules/@pi-harness/core/dist/plugins/modlens.js +0 -470
  439. package/node_modules/@pi-harness/core/dist/plugins/modlens.js.map +0 -1
  440. package/node_modules/@pi-harness/core/dist/plugins/module-search.d.ts +0 -28
  441. package/node_modules/@pi-harness/core/dist/plugins/module-search.d.ts.map +0 -1
  442. package/node_modules/@pi-harness/core/dist/plugins/module-search.js +0 -193
  443. package/node_modules/@pi-harness/core/dist/plugins/module-search.js.map +0 -1
  444. package/node_modules/@pi-harness/core/dist/plugins/obsidian-sync.d.ts +0 -14
  445. package/node_modules/@pi-harness/core/dist/plugins/obsidian-sync.d.ts.map +0 -1
  446. package/node_modules/@pi-harness/core/dist/plugins/obsidian-sync.js +0 -88
  447. package/node_modules/@pi-harness/core/dist/plugins/obsidian-sync.js.map +0 -1
  448. package/node_modules/@pi-harness/core/dist/plugins/openpets.d.ts +0 -14
  449. package/node_modules/@pi-harness/core/dist/plugins/openpets.d.ts.map +0 -1
  450. package/node_modules/@pi-harness/core/dist/plugins/openpets.js +0 -258
  451. package/node_modules/@pi-harness/core/dist/plugins/openpets.js.map +0 -1
  452. package/node_modules/@pi-harness/core/dist/plugins/plan-execute.d.ts +0 -11
  453. package/node_modules/@pi-harness/core/dist/plugins/plan-execute.d.ts.map +0 -1
  454. package/node_modules/@pi-harness/core/dist/plugins/plan-execute.js +0 -91
  455. package/node_modules/@pi-harness/core/dist/plugins/plan-execute.js.map +0 -1
  456. package/node_modules/@pi-harness/core/dist/plugins/plugin-check.d.ts +0 -47
  457. package/node_modules/@pi-harness/core/dist/plugins/plugin-check.d.ts.map +0 -1
  458. package/node_modules/@pi-harness/core/dist/plugins/plugin-check.js +0 -298
  459. package/node_modules/@pi-harness/core/dist/plugins/plugin-check.js.map +0 -1
  460. package/node_modules/@pi-harness/core/dist/plugins/plugin-dev.d.ts +0 -9
  461. package/node_modules/@pi-harness/core/dist/plugins/plugin-dev.d.ts.map +0 -1
  462. package/node_modules/@pi-harness/core/dist/plugins/plugin-dev.js +0 -177
  463. package/node_modules/@pi-harness/core/dist/plugins/plugin-dev.js.map +0 -1
  464. package/node_modules/@pi-harness/core/dist/plugins/plugin-finder.d.ts +0 -17
  465. package/node_modules/@pi-harness/core/dist/plugins/plugin-finder.d.ts.map +0 -1
  466. package/node_modules/@pi-harness/core/dist/plugins/plugin-finder.js +0 -216
  467. package/node_modules/@pi-harness/core/dist/plugins/plugin-finder.js.map +0 -1
  468. package/node_modules/@pi-harness/core/dist/plugins/plugin-radar.d.ts +0 -33
  469. package/node_modules/@pi-harness/core/dist/plugins/plugin-radar.d.ts.map +0 -1
  470. package/node_modules/@pi-harness/core/dist/plugins/plugin-radar.js +0 -247
  471. package/node_modules/@pi-harness/core/dist/plugins/plugin-radar.js.map +0 -1
  472. package/node_modules/@pi-harness/core/dist/plugins/plugin-stars.d.ts +0 -45
  473. package/node_modules/@pi-harness/core/dist/plugins/plugin-stars.d.ts.map +0 -1
  474. package/node_modules/@pi-harness/core/dist/plugins/plugin-stars.js +0 -366
  475. package/node_modules/@pi-harness/core/dist/plugins/plugin-stars.js.map +0 -1
  476. package/node_modules/@pi-harness/core/dist/plugins/prompt-guard.d.ts +0 -9
  477. package/node_modules/@pi-harness/core/dist/plugins/prompt-guard.d.ts.map +0 -1
  478. package/node_modules/@pi-harness/core/dist/plugins/prompt-guard.js +0 -165
  479. package/node_modules/@pi-harness/core/dist/plugins/prompt-guard.js.map +0 -1
  480. package/node_modules/@pi-harness/core/dist/plugins/prompt-library.d.ts +0 -26
  481. package/node_modules/@pi-harness/core/dist/plugins/prompt-library.d.ts.map +0 -1
  482. package/node_modules/@pi-harness/core/dist/plugins/prompt-library.js +0 -145
  483. package/node_modules/@pi-harness/core/dist/plugins/prompt-library.js.map +0 -1
  484. package/node_modules/@pi-harness/core/dist/plugins/readme-gen.d.ts +0 -29
  485. package/node_modules/@pi-harness/core/dist/plugins/readme-gen.d.ts.map +0 -1
  486. package/node_modules/@pi-harness/core/dist/plugins/readme-gen.js +0 -580
  487. package/node_modules/@pi-harness/core/dist/plugins/readme-gen.js.map +0 -1
  488. package/node_modules/@pi-harness/core/dist/plugins/recall-unread.d.ts +0 -24
  489. package/node_modules/@pi-harness/core/dist/plugins/recall-unread.d.ts.map +0 -1
  490. package/node_modules/@pi-harness/core/dist/plugins/recall-unread.js +0 -467
  491. package/node_modules/@pi-harness/core/dist/plugins/recall-unread.js.map +0 -1
  492. package/node_modules/@pi-harness/core/dist/plugins/resources.d.ts +0 -19
  493. package/node_modules/@pi-harness/core/dist/plugins/resources.d.ts.map +0 -1
  494. package/node_modules/@pi-harness/core/dist/plugins/resources.js +0 -126
  495. package/node_modules/@pi-harness/core/dist/plugins/resources.js.map +0 -1
  496. package/node_modules/@pi-harness/core/dist/plugins/reverse-skill.d.ts +0 -23
  497. package/node_modules/@pi-harness/core/dist/plugins/reverse-skill.d.ts.map +0 -1
  498. package/node_modules/@pi-harness/core/dist/plugins/reverse-skill.js +0 -61
  499. package/node_modules/@pi-harness/core/dist/plugins/reverse-skill.js.map +0 -1
  500. package/node_modules/@pi-harness/core/dist/plugins/reviewer-bot.d.ts +0 -15
  501. package/node_modules/@pi-harness/core/dist/plugins/reviewer-bot.d.ts.map +0 -1
  502. package/node_modules/@pi-harness/core/dist/plugins/reviewer-bot.js +0 -152
  503. package/node_modules/@pi-harness/core/dist/plugins/reviewer-bot.js.map +0 -1
  504. package/node_modules/@pi-harness/core/dist/plugins/runtime-doctor.d.ts +0 -34
  505. package/node_modules/@pi-harness/core/dist/plugins/runtime-doctor.d.ts.map +0 -1
  506. package/node_modules/@pi-harness/core/dist/plugins/runtime-doctor.js +0 -117
  507. package/node_modules/@pi-harness/core/dist/plugins/runtime-doctor.js.map +0 -1
  508. package/node_modules/@pi-harness/core/dist/plugins/runtime.d.ts +0 -14
  509. package/node_modules/@pi-harness/core/dist/plugins/runtime.d.ts.map +0 -1
  510. package/node_modules/@pi-harness/core/dist/plugins/runtime.js +0 -159
  511. package/node_modules/@pi-harness/core/dist/plugins/runtime.js.map +0 -1
  512. package/node_modules/@pi-harness/core/dist/plugins/secure-audit.d.ts +0 -32
  513. package/node_modules/@pi-harness/core/dist/plugins/secure-audit.d.ts.map +0 -1
  514. package/node_modules/@pi-harness/core/dist/plugins/secure-audit.js +0 -139
  515. package/node_modules/@pi-harness/core/dist/plugins/secure-audit.js.map +0 -1
  516. package/node_modules/@pi-harness/core/dist/plugins/session-bookmarks.d.ts +0 -16
  517. package/node_modules/@pi-harness/core/dist/plugins/session-bookmarks.d.ts.map +0 -1
  518. package/node_modules/@pi-harness/core/dist/plugins/session-bookmarks.js +0 -90
  519. package/node_modules/@pi-harness/core/dist/plugins/session-bookmarks.js.map +0 -1
  520. package/node_modules/@pi-harness/core/dist/plugins/session-bridge.d.ts +0 -45
  521. package/node_modules/@pi-harness/core/dist/plugins/session-bridge.d.ts.map +0 -1
  522. package/node_modules/@pi-harness/core/dist/plugins/session-bridge.js +0 -578
  523. package/node_modules/@pi-harness/core/dist/plugins/session-bridge.js.map +0 -1
  524. package/node_modules/@pi-harness/core/dist/plugins/session-compare.d.ts +0 -34
  525. package/node_modules/@pi-harness/core/dist/plugins/session-compare.d.ts.map +0 -1
  526. package/node_modules/@pi-harness/core/dist/plugins/session-compare.js +0 -153
  527. package/node_modules/@pi-harness/core/dist/plugins/session-compare.js.map +0 -1
  528. package/node_modules/@pi-harness/core/dist/plugins/session-export.d.ts +0 -10
  529. package/node_modules/@pi-harness/core/dist/plugins/session-export.d.ts.map +0 -1
  530. package/node_modules/@pi-harness/core/dist/plugins/session-export.js +0 -93
  531. package/node_modules/@pi-harness/core/dist/plugins/session-export.js.map +0 -1
  532. package/node_modules/@pi-harness/core/dist/plugins/session-insights.d.ts +0 -44
  533. package/node_modules/@pi-harness/core/dist/plugins/session-insights.d.ts.map +0 -1
  534. package/node_modules/@pi-harness/core/dist/plugins/session-insights.js +0 -432
  535. package/node_modules/@pi-harness/core/dist/plugins/session-insights.js.map +0 -1
  536. package/node_modules/@pi-harness/core/dist/plugins/session-search.d.ts +0 -21
  537. package/node_modules/@pi-harness/core/dist/plugins/session-search.d.ts.map +0 -1
  538. package/node_modules/@pi-harness/core/dist/plugins/session-search.js +0 -125
  539. package/node_modules/@pi-harness/core/dist/plugins/session-search.js.map +0 -1
  540. package/node_modules/@pi-harness/core/dist/plugins/session.d.ts +0 -15
  541. package/node_modules/@pi-harness/core/dist/plugins/session.d.ts.map +0 -1
  542. package/node_modules/@pi-harness/core/dist/plugins/session.js +0 -29
  543. package/node_modules/@pi-harness/core/dist/plugins/session.js.map +0 -1
  544. package/node_modules/@pi-harness/core/dist/plugins/skill-catalog.d.ts +0 -27
  545. package/node_modules/@pi-harness/core/dist/plugins/skill-catalog.d.ts.map +0 -1
  546. package/node_modules/@pi-harness/core/dist/plugins/skill-catalog.js +0 -98
  547. package/node_modules/@pi-harness/core/dist/plugins/skill-catalog.js.map +0 -1
  548. package/node_modules/@pi-harness/core/dist/plugins/skill-guard.d.ts +0 -27
  549. package/node_modules/@pi-harness/core/dist/plugins/skill-guard.d.ts.map +0 -1
  550. package/node_modules/@pi-harness/core/dist/plugins/skill-guard.js +0 -319
  551. package/node_modules/@pi-harness/core/dist/plugins/skill-guard.js.map +0 -1
  552. package/node_modules/@pi-harness/core/dist/plugins/sql-lens-worker.d.ts +0 -2
  553. package/node_modules/@pi-harness/core/dist/plugins/sql-lens-worker.d.ts.map +0 -1
  554. package/node_modules/@pi-harness/core/dist/plugins/sql-lens-worker.js +0 -206
  555. package/node_modules/@pi-harness/core/dist/plugins/sql-lens-worker.js.map +0 -1
  556. package/node_modules/@pi-harness/core/dist/plugins/sql-lens.d.ts +0 -14
  557. package/node_modules/@pi-harness/core/dist/plugins/sql-lens.d.ts.map +0 -1
  558. package/node_modules/@pi-harness/core/dist/plugins/sql-lens.js +0 -318
  559. package/node_modules/@pi-harness/core/dist/plugins/sql-lens.js.map +0 -1
  560. package/node_modules/@pi-harness/core/dist/plugins/stdio.d.ts +0 -11
  561. package/node_modules/@pi-harness/core/dist/plugins/stdio.d.ts.map +0 -1
  562. package/node_modules/@pi-harness/core/dist/plugins/stdio.js +0 -80
  563. package/node_modules/@pi-harness/core/dist/plugins/stdio.js.map +0 -1
  564. package/node_modules/@pi-harness/core/dist/plugins/synapse.d.ts +0 -38
  565. package/node_modules/@pi-harness/core/dist/plugins/synapse.d.ts.map +0 -1
  566. package/node_modules/@pi-harness/core/dist/plugins/synapse.js +0 -101
  567. package/node_modules/@pi-harness/core/dist/plugins/synapse.js.map +0 -1
  568. package/node_modules/@pi-harness/core/dist/plugins/tab-manager.d.ts +0 -9
  569. package/node_modules/@pi-harness/core/dist/plugins/tab-manager.d.ts.map +0 -1
  570. package/node_modules/@pi-harness/core/dist/plugins/tab-manager.js +0 -240
  571. package/node_modules/@pi-harness/core/dist/plugins/tab-manager.js.map +0 -1
  572. package/node_modules/@pi-harness/core/dist/plugins/taskboard.d.ts +0 -15
  573. package/node_modules/@pi-harness/core/dist/plugins/taskboard.d.ts.map +0 -1
  574. package/node_modules/@pi-harness/core/dist/plugins/taskboard.js +0 -375
  575. package/node_modules/@pi-harness/core/dist/plugins/taskboard.js.map +0 -1
  576. package/node_modules/@pi-harness/core/dist/plugins/telemetry-blocker.d.ts +0 -11
  577. package/node_modules/@pi-harness/core/dist/plugins/telemetry-blocker.d.ts.map +0 -1
  578. package/node_modules/@pi-harness/core/dist/plugins/telemetry-blocker.js +0 -76
  579. package/node_modules/@pi-harness/core/dist/plugins/telemetry-blocker.js.map +0 -1
  580. package/node_modules/@pi-harness/core/dist/plugins/test-harness.d.ts +0 -14
  581. package/node_modules/@pi-harness/core/dist/plugins/test-harness.d.ts.map +0 -1
  582. package/node_modules/@pi-harness/core/dist/plugins/test-harness.js +0 -276
  583. package/node_modules/@pi-harness/core/dist/plugins/test-harness.js.map +0 -1
  584. package/node_modules/@pi-harness/core/dist/plugins/theme-studio.d.ts +0 -29
  585. package/node_modules/@pi-harness/core/dist/plugins/theme-studio.d.ts.map +0 -1
  586. package/node_modules/@pi-harness/core/dist/plugins/theme-studio.js +0 -143
  587. package/node_modules/@pi-harness/core/dist/plugins/theme-studio.js.map +0 -1
  588. package/node_modules/@pi-harness/core/dist/plugins/token-guard.d.ts +0 -15
  589. package/node_modules/@pi-harness/core/dist/plugins/token-guard.d.ts.map +0 -1
  590. package/node_modules/@pi-harness/core/dist/plugins/token-guard.js +0 -210
  591. package/node_modules/@pi-harness/core/dist/plugins/token-guard.js.map +0 -1
  592. package/node_modules/@pi-harness/core/dist/plugins/tools.d.ts +0 -13
  593. package/node_modules/@pi-harness/core/dist/plugins/tools.d.ts.map +0 -1
  594. package/node_modules/@pi-harness/core/dist/plugins/tools.js +0 -23
  595. package/node_modules/@pi-harness/core/dist/plugins/tools.js.map +0 -1
  596. package/node_modules/@pi-harness/core/dist/plugins/turn-rewind.d.ts +0 -36
  597. package/node_modules/@pi-harness/core/dist/plugins/turn-rewind.d.ts.map +0 -1
  598. package/node_modules/@pi-harness/core/dist/plugins/turn-rewind.js +0 -378
  599. package/node_modules/@pi-harness/core/dist/plugins/turn-rewind.js.map +0 -1
  600. package/node_modules/@pi-harness/core/dist/plugins/undo-savepoint.d.ts +0 -17
  601. package/node_modules/@pi-harness/core/dist/plugins/undo-savepoint.d.ts.map +0 -1
  602. package/node_modules/@pi-harness/core/dist/plugins/undo-savepoint.js +0 -353
  603. package/node_modules/@pi-harness/core/dist/plugins/undo-savepoint.js.map +0 -1
  604. package/node_modules/@pi-harness/core/dist/plugins/vision-toolkit.d.ts +0 -36
  605. package/node_modules/@pi-harness/core/dist/plugins/vision-toolkit.d.ts.map +0 -1
  606. package/node_modules/@pi-harness/core/dist/plugins/vision-toolkit.js +0 -468
  607. package/node_modules/@pi-harness/core/dist/plugins/vision-toolkit.js.map +0 -1
  608. package/node_modules/@pi-harness/core/dist/plugins/web-research.d.ts +0 -17
  609. package/node_modules/@pi-harness/core/dist/plugins/web-research.d.ts.map +0 -1
  610. package/node_modules/@pi-harness/core/dist/plugins/web-research.js +0 -284
  611. package/node_modules/@pi-harness/core/dist/plugins/web-research.js.map +0 -1
  612. package/node_modules/@pi-harness/core/dist/plugins/workspace-navigator.d.ts +0 -42
  613. package/node_modules/@pi-harness/core/dist/plugins/workspace-navigator.d.ts.map +0 -1
  614. package/node_modules/@pi-harness/core/dist/plugins/workspace-navigator.js +0 -168
  615. package/node_modules/@pi-harness/core/dist/plugins/workspace-navigator.js.map +0 -1
  616. package/node_modules/@pi-harness/core/dist/plugins/workspace-search.d.ts +0 -15
  617. package/node_modules/@pi-harness/core/dist/plugins/workspace-search.d.ts.map +0 -1
  618. package/node_modules/@pi-harness/core/dist/plugins/workspace-search.js +0 -167
  619. package/node_modules/@pi-harness/core/dist/plugins/workspace-search.js.map +0 -1
  620. package/node_modules/@pi-harness/core/dist/plugins/yaml-validator.d.ts +0 -9
  621. package/node_modules/@pi-harness/core/dist/plugins/yaml-validator.d.ts.map +0 -1
  622. package/node_modules/@pi-harness/core/dist/plugins/yaml-validator.js +0 -203
  623. package/node_modules/@pi-harness/core/dist/plugins/yaml-validator.js.map +0 -1
  624. package/node_modules/@pi-harness/core/dist/profile.d.ts +0 -9
  625. package/node_modules/@pi-harness/core/dist/profile.d.ts.map +0 -1
  626. package/node_modules/@pi-harness/core/dist/profile.js +0 -33
  627. package/node_modules/@pi-harness/core/dist/profile.js.map +0 -1
  628. package/node_modules/@pi-harness/core/dist/runtime.d.ts +0 -16
  629. package/node_modules/@pi-harness/core/dist/runtime.d.ts.map +0 -1
  630. package/node_modules/@pi-harness/core/dist/runtime.js +0 -47
  631. package/node_modules/@pi-harness/core/dist/runtime.js.map +0 -1
  632. package/node_modules/@pi-harness/core/dist/services.d.ts +0 -118
  633. package/node_modules/@pi-harness/core/dist/services.d.ts.map +0 -1
  634. package/node_modules/@pi-harness/core/dist/services.js +0 -115
  635. package/node_modules/@pi-harness/core/dist/services.js.map +0 -1
  636. package/node_modules/@pi-harness/core/dist/stdio.d.ts +0 -37
  637. package/node_modules/@pi-harness/core/dist/stdio.d.ts.map +0 -1
  638. package/node_modules/@pi-harness/core/dist/stdio.js +0 -356
  639. package/node_modules/@pi-harness/core/dist/stdio.js.map +0 -1
  640. package/node_modules/@pi-harness/core/dist/workspace-path.d.ts +0 -13
  641. package/node_modules/@pi-harness/core/dist/workspace-path.d.ts.map +0 -1
  642. package/node_modules/@pi-harness/core/dist/workspace-path.js +0 -71
  643. package/node_modules/@pi-harness/core/dist/workspace-path.js.map +0 -1
  644. package/node_modules/@pi-harness/core/package.json +0 -42
  645. package/node_modules/@pi-harness/core/profiles/default/cordis.yml +0 -122
  646. package/node_modules/@pi-harness/core/profiles/development/cordis.yml +0 -47
  647. package/packages/client-web/LICENSE +0 -9
  648. package/packages/client-web/dist/agent-teams-view.d.ts +0 -70
  649. package/packages/client-web/dist/agent-teams-view.d.ts.map +0 -1
  650. package/packages/client-web/dist/agent-teams-view.js +0 -159
  651. package/packages/client-web/dist/agent-teams-view.js.map +0 -1
  652. package/packages/client-web/dist/annotation-ui.d.ts +0 -11
  653. package/packages/client-web/dist/annotation-ui.d.ts.map +0 -1
  654. package/packages/client-web/dist/annotation-ui.js +0 -24
  655. package/packages/client-web/dist/annotation-ui.js.map +0 -1
  656. package/packages/client-web/dist/at-file-view.d.ts +0 -10
  657. package/packages/client-web/dist/at-file-view.d.ts.map +0 -1
  658. package/packages/client-web/dist/at-file-view.js +0 -65
  659. package/packages/client-web/dist/at-file-view.js.map +0 -1
  660. package/packages/client-web/dist/browser-fetch-view.d.ts +0 -22
  661. package/packages/client-web/dist/browser-fetch-view.d.ts.map +0 -1
  662. package/packages/client-web/dist/browser-fetch-view.js +0 -101
  663. package/packages/client-web/dist/browser-fetch-view.js.map +0 -1
  664. package/packages/client-web/dist/browser-session-view.d.ts +0 -39
  665. package/packages/client-web/dist/browser-session-view.d.ts.map +0 -1
  666. package/packages/client-web/dist/browser-session-view.js +0 -211
  667. package/packages/client-web/dist/browser-session-view.js.map +0 -1
  668. package/packages/client-web/dist/cleaner-view.d.ts +0 -29
  669. package/packages/client-web/dist/cleaner-view.d.ts.map +0 -1
  670. package/packages/client-web/dist/cleaner-view.js +0 -191
  671. package/packages/client-web/dist/cleaner-view.js.map +0 -1
  672. package/packages/client-web/dist/context-doctor-view.d.ts +0 -35
  673. package/packages/client-web/dist/context-doctor-view.d.ts.map +0 -1
  674. package/packages/client-web/dist/context-doctor-view.js +0 -129
  675. package/packages/client-web/dist/context-doctor-view.js.map +0 -1
  676. package/packages/client-web/dist/context-insights-view.d.ts +0 -31
  677. package/packages/client-web/dist/context-insights-view.d.ts.map +0 -1
  678. package/packages/client-web/dist/context-insights-view.js +0 -90
  679. package/packages/client-web/dist/context-insights-view.js.map +0 -1
  680. package/packages/client-web/dist/control-room.d.ts +0 -270
  681. package/packages/client-web/dist/control-room.d.ts.map +0 -1
  682. package/packages/client-web/dist/control-room.js +0 -157
  683. package/packages/client-web/dist/control-room.js.map +0 -1
  684. package/packages/client-web/dist/cost-meter-view.d.ts +0 -16
  685. package/packages/client-web/dist/cost-meter-view.d.ts.map +0 -1
  686. package/packages/client-web/dist/cost-meter-view.js +0 -43
  687. package/packages/client-web/dist/cost-meter-view.js.map +0 -1
  688. package/packages/client-web/dist/dependency-checker-view.d.ts +0 -24
  689. package/packages/client-web/dist/dependency-checker-view.d.ts.map +0 -1
  690. package/packages/client-web/dist/dependency-checker-view.js +0 -195
  691. package/packages/client-web/dist/dependency-checker-view.js.map +0 -1
  692. package/packages/client-web/dist/design-contract.d.ts +0 -85
  693. package/packages/client-web/dist/design-contract.d.ts.map +0 -1
  694. package/packages/client-web/dist/design-contract.js +0 -258
  695. package/packages/client-web/dist/design-contract.js.map +0 -1
  696. package/packages/client-web/dist/docker-sandbox-view.d.ts +0 -28
  697. package/packages/client-web/dist/docker-sandbox-view.d.ts.map +0 -1
  698. package/packages/client-web/dist/docker-sandbox-view.js +0 -152
  699. package/packages/client-web/dist/docker-sandbox-view.js.map +0 -1
  700. package/packages/client-web/dist/fail-logger-view.d.ts +0 -16
  701. package/packages/client-web/dist/fail-logger-view.d.ts.map +0 -1
  702. package/packages/client-web/dist/fail-logger-view.js +0 -97
  703. package/packages/client-web/dist/fail-logger-view.js.map +0 -1
  704. package/packages/client-web/dist/genui-view.d.ts +0 -28
  705. package/packages/client-web/dist/genui-view.d.ts.map +0 -1
  706. package/packages/client-web/dist/genui-view.js +0 -62
  707. package/packages/client-web/dist/genui-view.js.map +0 -1
  708. package/packages/client-web/dist/git-time-capsule-view.d.ts +0 -31
  709. package/packages/client-web/dist/git-time-capsule-view.d.ts.map +0 -1
  710. package/packages/client-web/dist/git-time-capsule-view.js +0 -203
  711. package/packages/client-web/dist/git-time-capsule-view.js.map +0 -1
  712. package/packages/client-web/dist/graph-memory-view.d.ts +0 -39
  713. package/packages/client-web/dist/graph-memory-view.d.ts.map +0 -1
  714. package/packages/client-web/dist/graph-memory-view.js +0 -82
  715. package/packages/client-web/dist/graph-memory-view.js.map +0 -1
  716. package/packages/client-web/dist/i18n-pair-view.d.ts +0 -32
  717. package/packages/client-web/dist/i18n-pair-view.d.ts.map +0 -1
  718. package/packages/client-web/dist/i18n-pair-view.js +0 -182
  719. package/packages/client-web/dist/i18n-pair-view.js.map +0 -1
  720. package/packages/client-web/dist/index.d.ts +0 -20
  721. package/packages/client-web/dist/index.d.ts.map +0 -1
  722. package/packages/client-web/dist/index.js +0 -27
  723. package/packages/client-web/dist/index.js.map +0 -1
  724. package/packages/client-web/dist/markdown.d.ts +0 -5
  725. package/packages/client-web/dist/markdown.d.ts.map +0 -1
  726. package/packages/client-web/dist/markdown.js +0 -20
  727. package/packages/client-web/dist/markdown.js.map +0 -1
  728. package/packages/client-web/dist/marketplace-catalog.d.ts +0 -3
  729. package/packages/client-web/dist/marketplace-catalog.d.ts.map +0 -1
  730. package/packages/client-web/dist/marketplace-catalog.js +0 -10
  731. package/packages/client-web/dist/marketplace-catalog.js.map +0 -1
  732. package/packages/client-web/dist/marketplace-navigation.d.ts +0 -19
  733. package/packages/client-web/dist/marketplace-navigation.d.ts.map +0 -1
  734. package/packages/client-web/dist/marketplace-navigation.js +0 -31
  735. package/packages/client-web/dist/marketplace-navigation.js.map +0 -1
  736. package/packages/client-web/dist/mcp-client-view.d.ts +0 -58
  737. package/packages/client-web/dist/mcp-client-view.d.ts.map +0 -1
  738. package/packages/client-web/dist/mcp-client-view.js +0 -121
  739. package/packages/client-web/dist/mcp-client-view.js.map +0 -1
  740. package/packages/client-web/dist/message-content.d.ts +0 -9
  741. package/packages/client-web/dist/message-content.d.ts.map +0 -1
  742. package/packages/client-web/dist/message-content.js +0 -54
  743. package/packages/client-web/dist/message-content.js.map +0 -1
  744. package/packages/client-web/dist/modlens-view.d.ts +0 -43
  745. package/packages/client-web/dist/modlens-view.d.ts.map +0 -1
  746. package/packages/client-web/dist/modlens-view.js +0 -176
  747. package/packages/client-web/dist/modlens-view.js.map +0 -1
  748. package/packages/client-web/dist/openpets-view.d.ts +0 -26
  749. package/packages/client-web/dist/openpets-view.d.ts.map +0 -1
  750. package/packages/client-web/dist/openpets-view.js +0 -62
  751. package/packages/client-web/dist/openpets-view.js.map +0 -1
  752. package/packages/client-web/dist/panel-safe.d.ts +0 -5
  753. package/packages/client-web/dist/panel-safe.d.ts.map +0 -1
  754. package/packages/client-web/dist/panel-safe.js +0 -58
  755. package/packages/client-web/dist/panel-safe.js.map +0 -1
  756. package/packages/client-web/dist/plugin-card.d.ts +0 -8
  757. package/packages/client-web/dist/plugin-card.d.ts.map +0 -1
  758. package/packages/client-web/dist/plugin-card.js +0 -15
  759. package/packages/client-web/dist/plugin-card.js.map +0 -1
  760. package/packages/client-web/dist/plugin-dev-view.d.ts +0 -15
  761. package/packages/client-web/dist/plugin-dev-view.d.ts.map +0 -1
  762. package/packages/client-web/dist/plugin-dev-view.js +0 -33
  763. package/packages/client-web/dist/plugin-dev-view.js.map +0 -1
  764. package/packages/client-web/dist/plugin-navigation.d.ts +0 -3
  765. package/packages/client-web/dist/plugin-navigation.d.ts.map +0 -1
  766. package/packages/client-web/dist/plugin-navigation.js +0 -10
  767. package/packages/client-web/dist/plugin-navigation.js.map +0 -1
  768. package/packages/client-web/dist/plugin-search.d.ts +0 -2
  769. package/packages/client-web/dist/plugin-search.d.ts.map +0 -1
  770. package/packages/client-web/dist/plugin-search.js +0 -7
  771. package/packages/client-web/dist/plugin-search.js.map +0 -1
  772. package/packages/client-web/dist/plugin-stars-view.d.ts +0 -40
  773. package/packages/client-web/dist/plugin-stars-view.d.ts.map +0 -1
  774. package/packages/client-web/dist/plugin-stars-view.js +0 -216
  775. package/packages/client-web/dist/plugin-stars-view.js.map +0 -1
  776. package/packages/client-web/dist/prompt-completion.d.ts +0 -13
  777. package/packages/client-web/dist/prompt-completion.d.ts.map +0 -1
  778. package/packages/client-web/dist/prompt-completion.js +0 -17
  779. package/packages/client-web/dist/prompt-completion.js.map +0 -1
  780. package/packages/client-web/dist/react-room.d.ts +0 -11
  781. package/packages/client-web/dist/react-room.d.ts.map +0 -1
  782. package/packages/client-web/dist/react-room.js +0 -2844
  783. package/packages/client-web/dist/react-room.js.map +0 -1
  784. package/packages/client-web/dist/readme-gen-view.d.ts +0 -30
  785. package/packages/client-web/dist/readme-gen-view.d.ts.map +0 -1
  786. package/packages/client-web/dist/readme-gen-view.js +0 -134
  787. package/packages/client-web/dist/readme-gen-view.js.map +0 -1
  788. package/packages/client-web/dist/recall-unread-view.d.ts +0 -46
  789. package/packages/client-web/dist/recall-unread-view.d.ts.map +0 -1
  790. package/packages/client-web/dist/recall-unread-view.js +0 -104
  791. package/packages/client-web/dist/recall-unread-view.js.map +0 -1
  792. package/packages/client-web/dist/runtime-events.d.ts +0 -4
  793. package/packages/client-web/dist/runtime-events.d.ts.map +0 -1
  794. package/packages/client-web/dist/runtime-events.js +0 -29
  795. package/packages/client-web/dist/runtime-events.js.map +0 -1
  796. package/packages/client-web/dist/session-bridge-view.d.ts +0 -50
  797. package/packages/client-web/dist/session-bridge-view.d.ts.map +0 -1
  798. package/packages/client-web/dist/session-bridge-view.js +0 -113
  799. package/packages/client-web/dist/session-bridge-view.js.map +0 -1
  800. package/packages/client-web/dist/session-insights-view.d.ts +0 -40
  801. package/packages/client-web/dist/session-insights-view.d.ts.map +0 -1
  802. package/packages/client-web/dist/session-insights-view.js +0 -157
  803. package/packages/client-web/dist/session-insights-view.js.map +0 -1
  804. package/packages/client-web/dist/skill-guard-view.d.ts +0 -47
  805. package/packages/client-web/dist/skill-guard-view.d.ts.map +0 -1
  806. package/packages/client-web/dist/skill-guard-view.js +0 -93
  807. package/packages/client-web/dist/skill-guard-view.js.map +0 -1
  808. package/packages/client-web/dist/sql-lens-view.d.ts +0 -37
  809. package/packages/client-web/dist/sql-lens-view.d.ts.map +0 -1
  810. package/packages/client-web/dist/sql-lens-view.js +0 -235
  811. package/packages/client-web/dist/sql-lens-view.js.map +0 -1
  812. package/packages/client-web/dist/test-harness-view.d.ts +0 -24
  813. package/packages/client-web/dist/test-harness-view.d.ts.map +0 -1
  814. package/packages/client-web/dist/test-harness-view.js +0 -149
  815. package/packages/client-web/dist/test-harness-view.js.map +0 -1
  816. package/packages/client-web/dist/token-guard-view.d.ts +0 -19
  817. package/packages/client-web/dist/token-guard-view.d.ts.map +0 -1
  818. package/packages/client-web/dist/token-guard-view.js +0 -56
  819. package/packages/client-web/dist/token-guard-view.js.map +0 -1
  820. package/packages/client-web/dist/turn-rewind-view.d.ts +0 -41
  821. package/packages/client-web/dist/turn-rewind-view.d.ts.map +0 -1
  822. package/packages/client-web/dist/turn-rewind-view.js +0 -117
  823. package/packages/client-web/dist/turn-rewind-view.js.map +0 -1
  824. package/packages/client-web/dist/vision-toolkit-view.d.ts +0 -66
  825. package/packages/client-web/dist/vision-toolkit-view.d.ts.map +0 -1
  826. package/packages/client-web/dist/vision-toolkit-view.js +0 -238
  827. package/packages/client-web/dist/vision-toolkit-view.js.map +0 -1
  828. package/packages/client-web/dist/yaml-validator-view.d.ts +0 -52
  829. package/packages/client-web/dist/yaml-validator-view.d.ts.map +0 -1
  830. package/packages/client-web/dist/yaml-validator-view.js +0 -96
  831. package/packages/client-web/dist/yaml-validator-view.js.map +0 -1
  832. package/packages/client-web/package.json +0 -42
  833. package/packages/client-web/src/agent-teams-view.ts +0 -189
  834. package/packages/client-web/src/annotation-ui.ts +0 -29
  835. package/packages/client-web/src/at-file-view.ts +0 -69
  836. package/packages/client-web/src/browser-fetch-view.ts +0 -114
  837. package/packages/client-web/src/browser-session-view.ts +0 -232
  838. package/packages/client-web/src/cleaner-view.ts +0 -207
  839. package/packages/client-web/src/context-doctor-view.ts +0 -140
  840. package/packages/client-web/src/context-insights-view.ts +0 -125
  841. package/packages/client-web/src/control-room.ts +0 -359
  842. package/packages/client-web/src/cost-meter-view.ts +0 -63
  843. package/packages/client-web/src/dependency-checker-view.ts +0 -215
  844. package/packages/client-web/src/design-contract.ts +0 -334
  845. package/packages/client-web/src/docker-sandbox-view.ts +0 -177
  846. package/packages/client-web/src/fail-logger-view.ts +0 -112
  847. package/packages/client-web/src/genui-view.ts +0 -88
  848. package/packages/client-web/src/git-time-capsule-view.ts +0 -215
  849. package/packages/client-web/src/graph-memory-view.ts +0 -91
  850. package/packages/client-web/src/i18n-pair-view.ts +0 -194
  851. package/packages/client-web/src/index.ts +0 -34
  852. package/packages/client-web/src/markdown.tsx +0 -22
  853. package/packages/client-web/src/marketplace-catalog.ts +0 -10
  854. package/packages/client-web/src/marketplace-navigation.ts +0 -46
  855. package/packages/client-web/src/mcp-client-view.ts +0 -122
  856. package/packages/client-web/src/message-content.ts +0 -51
  857. package/packages/client-web/src/modlens-view.ts +0 -210
  858. package/packages/client-web/src/openpets-view.ts +0 -67
  859. package/packages/client-web/src/panel-safe.ts +0 -47
  860. package/packages/client-web/src/plugin-card.ts +0 -22
  861. package/packages/client-web/src/plugin-dev-view.ts +0 -39
  862. package/packages/client-web/src/plugin-navigation.ts +0 -9
  863. package/packages/client-web/src/plugin-search.ts +0 -5
  864. package/packages/client-web/src/plugin-stars-view.ts +0 -257
  865. package/packages/client-web/src/prompt-completion.ts +0 -24
  866. package/packages/client-web/src/react-room.tsx +0 -8581
  867. package/packages/client-web/src/readme-gen-view.ts +0 -145
  868. package/packages/client-web/src/recall-unread-view.ts +0 -105
  869. package/packages/client-web/src/runtime-events.ts +0 -29
  870. package/packages/client-web/src/session-bridge-view.ts +0 -118
  871. package/packages/client-web/src/session-insights-view.ts +0 -205
  872. package/packages/client-web/src/skill-guard-view.ts +0 -94
  873. package/packages/client-web/src/sql-lens-view.ts +0 -247
  874. package/packages/client-web/src/test-harness-view.ts +0 -170
  875. package/packages/client-web/src/token-guard-view.ts +0 -75
  876. package/packages/client-web/src/turn-rewind-view.ts +0 -120
  877. package/packages/client-web/src/vision-toolkit-view.ts +0 -280
  878. package/packages/client-web/src/yaml-validator-view.ts +0 -102
  879. package/packages/client-web/test/agent-teams-view.test.ts +0 -198
  880. package/packages/client-web/test/annotation-ui.test.ts +0 -21
  881. package/packages/client-web/test/at-file-panel.test.ts +0 -76
  882. package/packages/client-web/test/browser-fetch-panel.test.ts +0 -44
  883. package/packages/client-web/test/browser-fetch-view.test.ts +0 -89
  884. package/packages/client-web/test/browser-session-panel.test.ts +0 -55
  885. package/packages/client-web/test/browser-session-view.test.ts +0 -115
  886. package/packages/client-web/test/cleaner-panel.test.ts +0 -66
  887. package/packages/client-web/test/cleaner-view.test.ts +0 -143
  888. package/packages/client-web/test/context-doctor-view.test.ts +0 -169
  889. package/packages/client-web/test/context-insights-view.test.ts +0 -120
  890. package/packages/client-web/test/cost-meter-view.test.ts +0 -53
  891. package/packages/client-web/test/dependency-checker-panel.test.ts +0 -51
  892. package/packages/client-web/test/dependency-checker-view.test.ts +0 -266
  893. package/packages/client-web/test/design-contract.test.ts +0 -69
  894. package/packages/client-web/test/docker-sandbox-panel.test.ts +0 -44
  895. package/packages/client-web/test/docker-sandbox-view.test.ts +0 -127
  896. package/packages/client-web/test/fail-logger-view.test.ts +0 -155
  897. package/packages/client-web/test/genui-view.test.ts +0 -55
  898. package/packages/client-web/test/git-time-capsule-view.test.ts +0 -252
  899. package/packages/client-web/test/graph-memory-view.test.ts +0 -67
  900. package/packages/client-web/test/i18n-pair-panel.test.ts +0 -72
  901. package/packages/client-web/test/i18n-pair-view.test.ts +0 -164
  902. package/packages/client-web/test/marketplace-catalog.test.ts +0 -52
  903. package/packages/client-web/test/mcp-client-view.test.ts +0 -106
  904. package/packages/client-web/test/message-content.test.ts +0 -43
  905. package/packages/client-web/test/modlens-view.test.ts +0 -198
  906. package/packages/client-web/test/openpets-view.test.ts +0 -57
  907. package/packages/client-web/test/plugin-card.test.ts +0 -46
  908. package/packages/client-web/test/plugin-dev-view.test.ts +0 -63
  909. package/packages/client-web/test/plugin-navigation.test.ts +0 -14
  910. package/packages/client-web/test/plugin-search.test.ts +0 -22
  911. package/packages/client-web/test/plugin-stars-panel.test.ts +0 -44
  912. package/packages/client-web/test/plugin-stars-view.test.ts +0 -107
  913. package/packages/client-web/test/prompt-completion.test.ts +0 -21
  914. package/packages/client-web/test/readme-gen-panel.test.ts +0 -81
  915. package/packages/client-web/test/readme-gen-view.test.ts +0 -91
  916. package/packages/client-web/test/recall-unread-view.test.ts +0 -153
  917. package/packages/client-web/test/runtime-events.test.ts +0 -28
  918. package/packages/client-web/test/session-bridge-view.test.ts +0 -102
  919. package/packages/client-web/test/session-insights-panel.test.ts +0 -85
  920. package/packages/client-web/test/session-insights-view.test.ts +0 -152
  921. package/packages/client-web/test/skill-guard-view.test.ts +0 -138
  922. package/packages/client-web/test/sql-lens-panel.test.ts +0 -52
  923. package/packages/client-web/test/sql-lens-view.test.ts +0 -134
  924. package/packages/client-web/test/test-harness-panel.test.ts +0 -228
  925. package/packages/client-web/test/token-guard-view.test.ts +0 -93
  926. package/packages/client-web/test/turn-rewind-view.test.ts +0 -159
  927. package/packages/client-web/test/vision-toolkit-view.test.ts +0 -152
  928. package/packages/client-web/test/yaml-validator-view.test.ts +0 -100
  929. package/packages/client-web/tsconfig.build.json +0 -13
  930. package/packages/client-web/tsconfig.json +0 -11
  931. package/packages/core/LICENSE +0 -9
  932. package/packages/core/dist/atomic-write.d.ts +0 -8
  933. package/packages/core/dist/atomic-write.d.ts.map +0 -1
  934. package/packages/core/dist/atomic-write.js +0 -40
  935. package/packages/core/dist/atomic-write.js.map +0 -1
  936. package/packages/core/dist/boot.d.ts +0 -13
  937. package/packages/core/dist/boot.d.ts.map +0 -1
  938. package/packages/core/dist/boot.js +0 -257
  939. package/packages/core/dist/boot.js.map +0 -1
  940. package/packages/core/dist/bounded-file.d.ts +0 -7
  941. package/packages/core/dist/bounded-file.d.ts.map +0 -1
  942. package/packages/core/dist/bounded-file.js +0 -50
  943. package/packages/core/dist/bounded-file.js.map +0 -1
  944. package/packages/core/dist/config.d.ts +0 -4
  945. package/packages/core/dist/config.d.ts.map +0 -1
  946. package/packages/core/dist/config.js +0 -29
  947. package/packages/core/dist/config.js.map +0 -1
  948. package/packages/core/dist/context.d.ts +0 -3
  949. package/packages/core/dist/context.d.ts.map +0 -1
  950. package/packages/core/dist/context.js +0 -2
  951. package/packages/core/dist/context.js.map +0 -1
  952. package/packages/core/dist/cordis-timer.d.ts +0 -15
  953. package/packages/core/dist/cordis-timer.d.ts.map +0 -1
  954. package/packages/core/dist/cordis-timer.js +0 -99
  955. package/packages/core/dist/cordis-timer.js.map +0 -1
  956. package/packages/core/dist/http.d.ts +0 -8
  957. package/packages/core/dist/http.d.ts.map +0 -1
  958. package/packages/core/dist/http.js +0 -27
  959. package/packages/core/dist/http.js.map +0 -1
  960. package/packages/core/dist/index.d.ts +0 -9
  961. package/packages/core/dist/index.d.ts.map +0 -1
  962. package/packages/core/dist/index.js +0 -8
  963. package/packages/core/dist/index.js.map +0 -1
  964. package/packages/core/dist/plugins/agent-teams.d.ts +0 -21
  965. package/packages/core/dist/plugins/agent-teams.d.ts.map +0 -1
  966. package/packages/core/dist/plugins/agent-teams.js +0 -1179
  967. package/packages/core/dist/plugins/agent-teams.js.map +0 -1
  968. package/packages/core/dist/plugins/anchored-standard.d.ts +0 -15
  969. package/packages/core/dist/plugins/anchored-standard.d.ts.map +0 -1
  970. package/packages/core/dist/plugins/anchored-standard.js +0 -112
  971. package/packages/core/dist/plugins/anchored-standard.js.map +0 -1
  972. package/packages/core/dist/plugins/annotation.d.ts +0 -19
  973. package/packages/core/dist/plugins/annotation.d.ts.map +0 -1
  974. package/packages/core/dist/plugins/annotation.js +0 -112
  975. package/packages/core/dist/plugins/annotation.js.map +0 -1
  976. package/packages/core/dist/plugins/archify.d.ts +0 -24
  977. package/packages/core/dist/plugins/archify.d.ts.map +0 -1
  978. package/packages/core/dist/plugins/archify.js +0 -145
  979. package/packages/core/dist/plugins/archify.js.map +0 -1
  980. package/packages/core/dist/plugins/at-file.d.ts +0 -12
  981. package/packages/core/dist/plugins/at-file.d.ts.map +0 -1
  982. package/packages/core/dist/plugins/at-file.js +0 -143
  983. package/packages/core/dist/plugins/at-file.js.map +0 -1
  984. package/packages/core/dist/plugins/auto-mode.d.ts +0 -15
  985. package/packages/core/dist/plugins/auto-mode.d.ts.map +0 -1
  986. package/packages/core/dist/plugins/auto-mode.js +0 -183
  987. package/packages/core/dist/plugins/auto-mode.js.map +0 -1
  988. package/packages/core/dist/plugins/better-sidebar.d.ts +0 -38
  989. package/packages/core/dist/plugins/better-sidebar.d.ts.map +0 -1
  990. package/packages/core/dist/plugins/better-sidebar.js +0 -99
  991. package/packages/core/dist/plugins/better-sidebar.js.map +0 -1
  992. package/packages/core/dist/plugins/browser-fetch.d.ts +0 -15
  993. package/packages/core/dist/plugins/browser-fetch.d.ts.map +0 -1
  994. package/packages/core/dist/plugins/browser-fetch.js +0 -359
  995. package/packages/core/dist/plugins/browser-fetch.js.map +0 -1
  996. package/packages/core/dist/plugins/browser-session.d.ts +0 -14
  997. package/packages/core/dist/plugins/browser-session.d.ts.map +0 -1
  998. package/packages/core/dist/plugins/browser-session.js +0 -604
  999. package/packages/core/dist/plugins/browser-session.js.map +0 -1
  1000. package/packages/core/dist/plugins/canvas-draw.d.ts +0 -9
  1001. package/packages/core/dist/plugins/canvas-draw.d.ts.map +0 -1
  1002. package/packages/core/dist/plugins/canvas-draw.js +0 -140
  1003. package/packages/core/dist/plugins/canvas-draw.js.map +0 -1
  1004. package/packages/core/dist/plugins/change-verifier.d.ts +0 -9
  1005. package/packages/core/dist/plugins/change-verifier.d.ts.map +0 -1
  1006. package/packages/core/dist/plugins/change-verifier.js +0 -88
  1007. package/packages/core/dist/plugins/change-verifier.js.map +0 -1
  1008. package/packages/core/dist/plugins/cleaner.d.ts +0 -12
  1009. package/packages/core/dist/plugins/cleaner.d.ts.map +0 -1
  1010. package/packages/core/dist/plugins/cleaner.js +0 -353
  1011. package/packages/core/dist/plugins/cleaner.js.map +0 -1
  1012. package/packages/core/dist/plugins/cli-notifier.d.ts +0 -16
  1013. package/packages/core/dist/plugins/cli-notifier.d.ts.map +0 -1
  1014. package/packages/core/dist/plugins/cli-notifier.js +0 -167
  1015. package/packages/core/dist/plugins/cli-notifier.js.map +0 -1
  1016. package/packages/core/dist/plugins/code2skill.d.ts +0 -9
  1017. package/packages/core/dist/plugins/code2skill.d.ts.map +0 -1
  1018. package/packages/core/dist/plugins/code2skill.js +0 -235
  1019. package/packages/core/dist/plugins/code2skill.js.map +0 -1
  1020. package/packages/core/dist/plugins/colleague-skill.d.ts +0 -28
  1021. package/packages/core/dist/plugins/colleague-skill.d.ts.map +0 -1
  1022. package/packages/core/dist/plugins/colleague-skill.js +0 -129
  1023. package/packages/core/dist/plugins/colleague-skill.js.map +0 -1
  1024. package/packages/core/dist/plugins/context-doctor.d.ts +0 -35
  1025. package/packages/core/dist/plugins/context-doctor.d.ts.map +0 -1
  1026. package/packages/core/dist/plugins/context-doctor.js +0 -459
  1027. package/packages/core/dist/plugins/context-doctor.js.map +0 -1
  1028. package/packages/core/dist/plugins/context.d.ts +0 -9
  1029. package/packages/core/dist/plugins/context.d.ts.map +0 -1
  1030. package/packages/core/dist/plugins/context.js +0 -214
  1031. package/packages/core/dist/plugins/context.js.map +0 -1
  1032. package/packages/core/dist/plugins/cost-meter.d.ts +0 -36
  1033. package/packages/core/dist/plugins/cost-meter.d.ts.map +0 -1
  1034. package/packages/core/dist/plugins/cost-meter.js +0 -430
  1035. package/packages/core/dist/plugins/cost-meter.js.map +0 -1
  1036. package/packages/core/dist/plugins/dependency-checker.d.ts +0 -36
  1037. package/packages/core/dist/plugins/dependency-checker.d.ts.map +0 -1
  1038. package/packages/core/dist/plugins/dependency-checker.js +0 -570
  1039. package/packages/core/dist/plugins/dependency-checker.js.map +0 -1
  1040. package/packages/core/dist/plugins/docker-sandbox.d.ts +0 -9
  1041. package/packages/core/dist/plugins/docker-sandbox.d.ts.map +0 -1
  1042. package/packages/core/dist/plugins/docker-sandbox.js +0 -344
  1043. package/packages/core/dist/plugins/docker-sandbox.js.map +0 -1
  1044. package/packages/core/dist/plugins/fail-logger.d.ts +0 -9
  1045. package/packages/core/dist/plugins/fail-logger.d.ts.map +0 -1
  1046. package/packages/core/dist/plugins/fail-logger.js +0 -218
  1047. package/packages/core/dist/plugins/fail-logger.js.map +0 -1
  1048. package/packages/core/dist/plugins/genui.d.ts +0 -9
  1049. package/packages/core/dist/plugins/genui.d.ts.map +0 -1
  1050. package/packages/core/dist/plugins/genui.js +0 -144
  1051. package/packages/core/dist/plugins/genui.js.map +0 -1
  1052. package/packages/core/dist/plugins/git-time-capsule.d.ts +0 -15
  1053. package/packages/core/dist/plugins/git-time-capsule.d.ts.map +0 -1
  1054. package/packages/core/dist/plugins/git-time-capsule.js +0 -436
  1055. package/packages/core/dist/plugins/git-time-capsule.js.map +0 -1
  1056. package/packages/core/dist/plugins/graph-memory.d.ts +0 -16
  1057. package/packages/core/dist/plugins/graph-memory.d.ts.map +0 -1
  1058. package/packages/core/dist/plugins/graph-memory.js +0 -669
  1059. package/packages/core/dist/plugins/graph-memory.js.map +0 -1
  1060. package/packages/core/dist/plugins/history-compressor.d.ts +0 -15
  1061. package/packages/core/dist/plugins/history-compressor.d.ts.map +0 -1
  1062. package/packages/core/dist/plugins/history-compressor.js +0 -99
  1063. package/packages/core/dist/plugins/history-compressor.js.map +0 -1
  1064. package/packages/core/dist/plugins/hol-guard.d.ts +0 -29
  1065. package/packages/core/dist/plugins/hol-guard.d.ts.map +0 -1
  1066. package/packages/core/dist/plugins/hol-guard.js +0 -159
  1067. package/packages/core/dist/plugins/hol-guard.js.map +0 -1
  1068. package/packages/core/dist/plugins/i18n-pair.d.ts +0 -12
  1069. package/packages/core/dist/plugins/i18n-pair.d.ts.map +0 -1
  1070. package/packages/core/dist/plugins/i18n-pair.js +0 -332
  1071. package/packages/core/dist/plugins/i18n-pair.js.map +0 -1
  1072. package/packages/core/dist/plugins/image-compressor.d.ts +0 -15
  1073. package/packages/core/dist/plugins/image-compressor.d.ts.map +0 -1
  1074. package/packages/core/dist/plugins/image-compressor.js +0 -223
  1075. package/packages/core/dist/plugins/image-compressor.js.map +0 -1
  1076. package/packages/core/dist/plugins/llm-verifier.d.ts +0 -42
  1077. package/packages/core/dist/plugins/llm-verifier.d.ts.map +0 -1
  1078. package/packages/core/dist/plugins/llm-verifier.js +0 -138
  1079. package/packages/core/dist/plugins/llm-verifier.js.map +0 -1
  1080. package/packages/core/dist/plugins/mcp-client.d.ts +0 -19
  1081. package/packages/core/dist/plugins/mcp-client.d.ts.map +0 -1
  1082. package/packages/core/dist/plugins/mcp-client.js +0 -1288
  1083. package/packages/core/dist/plugins/mcp-client.js.map +0 -1
  1084. package/packages/core/dist/plugins/mcp-panel.d.ts +0 -14
  1085. package/packages/core/dist/plugins/mcp-panel.d.ts.map +0 -1
  1086. package/packages/core/dist/plugins/mcp-panel.js +0 -194
  1087. package/packages/core/dist/plugins/mcp-panel.js.map +0 -1
  1088. package/packages/core/dist/plugins/memory.d.ts +0 -15
  1089. package/packages/core/dist/plugins/memory.d.ts.map +0 -1
  1090. package/packages/core/dist/plugins/memory.js +0 -394
  1091. package/packages/core/dist/plugins/memory.js.map +0 -1
  1092. package/packages/core/dist/plugins/mirage-bridge.d.ts +0 -23
  1093. package/packages/core/dist/plugins/mirage-bridge.d.ts.map +0 -1
  1094. package/packages/core/dist/plugins/mirage-bridge.js +0 -159
  1095. package/packages/core/dist/plugins/mirage-bridge.js.map +0 -1
  1096. package/packages/core/dist/plugins/mock-server.d.ts +0 -22
  1097. package/packages/core/dist/plugins/mock-server.d.ts.map +0 -1
  1098. package/packages/core/dist/plugins/mock-server.js +0 -180
  1099. package/packages/core/dist/plugins/mock-server.js.map +0 -1
  1100. package/packages/core/dist/plugins/model.d.ts +0 -11
  1101. package/packages/core/dist/plugins/model.d.ts.map +0 -1
  1102. package/packages/core/dist/plugins/model.js +0 -17
  1103. package/packages/core/dist/plugins/model.js.map +0 -1
  1104. package/packages/core/dist/plugins/models.d.ts +0 -16
  1105. package/packages/core/dist/plugins/models.d.ts.map +0 -1
  1106. package/packages/core/dist/plugins/models.js +0 -35
  1107. package/packages/core/dist/plugins/models.js.map +0 -1
  1108. package/packages/core/dist/plugins/modlens.d.ts +0 -15
  1109. package/packages/core/dist/plugins/modlens.d.ts.map +0 -1
  1110. package/packages/core/dist/plugins/modlens.js +0 -470
  1111. package/packages/core/dist/plugins/modlens.js.map +0 -1
  1112. package/packages/core/dist/plugins/module-search.d.ts +0 -28
  1113. package/packages/core/dist/plugins/module-search.d.ts.map +0 -1
  1114. package/packages/core/dist/plugins/module-search.js +0 -193
  1115. package/packages/core/dist/plugins/module-search.js.map +0 -1
  1116. package/packages/core/dist/plugins/obsidian-sync.d.ts +0 -14
  1117. package/packages/core/dist/plugins/obsidian-sync.d.ts.map +0 -1
  1118. package/packages/core/dist/plugins/obsidian-sync.js +0 -88
  1119. package/packages/core/dist/plugins/obsidian-sync.js.map +0 -1
  1120. package/packages/core/dist/plugins/openpets.d.ts +0 -14
  1121. package/packages/core/dist/plugins/openpets.d.ts.map +0 -1
  1122. package/packages/core/dist/plugins/openpets.js +0 -258
  1123. package/packages/core/dist/plugins/openpets.js.map +0 -1
  1124. package/packages/core/dist/plugins/plan-execute.d.ts +0 -11
  1125. package/packages/core/dist/plugins/plan-execute.d.ts.map +0 -1
  1126. package/packages/core/dist/plugins/plan-execute.js +0 -91
  1127. package/packages/core/dist/plugins/plan-execute.js.map +0 -1
  1128. package/packages/core/dist/plugins/plugin-check.d.ts +0 -47
  1129. package/packages/core/dist/plugins/plugin-check.d.ts.map +0 -1
  1130. package/packages/core/dist/plugins/plugin-check.js +0 -298
  1131. package/packages/core/dist/plugins/plugin-check.js.map +0 -1
  1132. package/packages/core/dist/plugins/plugin-dev.d.ts +0 -9
  1133. package/packages/core/dist/plugins/plugin-dev.d.ts.map +0 -1
  1134. package/packages/core/dist/plugins/plugin-dev.js +0 -177
  1135. package/packages/core/dist/plugins/plugin-dev.js.map +0 -1
  1136. package/packages/core/dist/plugins/plugin-finder.d.ts +0 -17
  1137. package/packages/core/dist/plugins/plugin-finder.d.ts.map +0 -1
  1138. package/packages/core/dist/plugins/plugin-finder.js +0 -216
  1139. package/packages/core/dist/plugins/plugin-finder.js.map +0 -1
  1140. package/packages/core/dist/plugins/plugin-radar.d.ts +0 -33
  1141. package/packages/core/dist/plugins/plugin-radar.d.ts.map +0 -1
  1142. package/packages/core/dist/plugins/plugin-radar.js +0 -247
  1143. package/packages/core/dist/plugins/plugin-radar.js.map +0 -1
  1144. package/packages/core/dist/plugins/plugin-stars.d.ts +0 -45
  1145. package/packages/core/dist/plugins/plugin-stars.d.ts.map +0 -1
  1146. package/packages/core/dist/plugins/plugin-stars.js +0 -366
  1147. package/packages/core/dist/plugins/plugin-stars.js.map +0 -1
  1148. package/packages/core/dist/plugins/prompt-guard.d.ts +0 -9
  1149. package/packages/core/dist/plugins/prompt-guard.d.ts.map +0 -1
  1150. package/packages/core/dist/plugins/prompt-guard.js +0 -165
  1151. package/packages/core/dist/plugins/prompt-guard.js.map +0 -1
  1152. package/packages/core/dist/plugins/prompt-library.d.ts +0 -26
  1153. package/packages/core/dist/plugins/prompt-library.d.ts.map +0 -1
  1154. package/packages/core/dist/plugins/prompt-library.js +0 -145
  1155. package/packages/core/dist/plugins/prompt-library.js.map +0 -1
  1156. package/packages/core/dist/plugins/readme-gen.d.ts +0 -29
  1157. package/packages/core/dist/plugins/readme-gen.d.ts.map +0 -1
  1158. package/packages/core/dist/plugins/readme-gen.js +0 -580
  1159. package/packages/core/dist/plugins/readme-gen.js.map +0 -1
  1160. package/packages/core/dist/plugins/recall-unread.d.ts +0 -24
  1161. package/packages/core/dist/plugins/recall-unread.d.ts.map +0 -1
  1162. package/packages/core/dist/plugins/recall-unread.js +0 -467
  1163. package/packages/core/dist/plugins/recall-unread.js.map +0 -1
  1164. package/packages/core/dist/plugins/resources.d.ts +0 -19
  1165. package/packages/core/dist/plugins/resources.d.ts.map +0 -1
  1166. package/packages/core/dist/plugins/resources.js +0 -126
  1167. package/packages/core/dist/plugins/resources.js.map +0 -1
  1168. package/packages/core/dist/plugins/reverse-skill.d.ts +0 -23
  1169. package/packages/core/dist/plugins/reverse-skill.d.ts.map +0 -1
  1170. package/packages/core/dist/plugins/reverse-skill.js +0 -61
  1171. package/packages/core/dist/plugins/reverse-skill.js.map +0 -1
  1172. package/packages/core/dist/plugins/reviewer-bot.d.ts +0 -15
  1173. package/packages/core/dist/plugins/reviewer-bot.d.ts.map +0 -1
  1174. package/packages/core/dist/plugins/reviewer-bot.js +0 -152
  1175. package/packages/core/dist/plugins/reviewer-bot.js.map +0 -1
  1176. package/packages/core/dist/plugins/runtime-doctor.d.ts +0 -34
  1177. package/packages/core/dist/plugins/runtime-doctor.d.ts.map +0 -1
  1178. package/packages/core/dist/plugins/runtime-doctor.js +0 -117
  1179. package/packages/core/dist/plugins/runtime-doctor.js.map +0 -1
  1180. package/packages/core/dist/plugins/runtime.d.ts +0 -14
  1181. package/packages/core/dist/plugins/runtime.d.ts.map +0 -1
  1182. package/packages/core/dist/plugins/runtime.js +0 -159
  1183. package/packages/core/dist/plugins/runtime.js.map +0 -1
  1184. package/packages/core/dist/plugins/secure-audit.d.ts +0 -32
  1185. package/packages/core/dist/plugins/secure-audit.d.ts.map +0 -1
  1186. package/packages/core/dist/plugins/secure-audit.js +0 -139
  1187. package/packages/core/dist/plugins/secure-audit.js.map +0 -1
  1188. package/packages/core/dist/plugins/session-bookmarks.d.ts +0 -16
  1189. package/packages/core/dist/plugins/session-bookmarks.d.ts.map +0 -1
  1190. package/packages/core/dist/plugins/session-bookmarks.js +0 -90
  1191. package/packages/core/dist/plugins/session-bookmarks.js.map +0 -1
  1192. package/packages/core/dist/plugins/session-bridge.d.ts +0 -45
  1193. package/packages/core/dist/plugins/session-bridge.d.ts.map +0 -1
  1194. package/packages/core/dist/plugins/session-bridge.js +0 -578
  1195. package/packages/core/dist/plugins/session-bridge.js.map +0 -1
  1196. package/packages/core/dist/plugins/session-compare.d.ts +0 -34
  1197. package/packages/core/dist/plugins/session-compare.d.ts.map +0 -1
  1198. package/packages/core/dist/plugins/session-compare.js +0 -153
  1199. package/packages/core/dist/plugins/session-compare.js.map +0 -1
  1200. package/packages/core/dist/plugins/session-export.d.ts +0 -10
  1201. package/packages/core/dist/plugins/session-export.d.ts.map +0 -1
  1202. package/packages/core/dist/plugins/session-export.js +0 -93
  1203. package/packages/core/dist/plugins/session-export.js.map +0 -1
  1204. package/packages/core/dist/plugins/session-insights.d.ts +0 -44
  1205. package/packages/core/dist/plugins/session-insights.d.ts.map +0 -1
  1206. package/packages/core/dist/plugins/session-insights.js +0 -432
  1207. package/packages/core/dist/plugins/session-insights.js.map +0 -1
  1208. package/packages/core/dist/plugins/session-search.d.ts +0 -21
  1209. package/packages/core/dist/plugins/session-search.d.ts.map +0 -1
  1210. package/packages/core/dist/plugins/session-search.js +0 -125
  1211. package/packages/core/dist/plugins/session-search.js.map +0 -1
  1212. package/packages/core/dist/plugins/session.d.ts +0 -15
  1213. package/packages/core/dist/plugins/session.d.ts.map +0 -1
  1214. package/packages/core/dist/plugins/session.js +0 -29
  1215. package/packages/core/dist/plugins/session.js.map +0 -1
  1216. package/packages/core/dist/plugins/skill-catalog.d.ts +0 -27
  1217. package/packages/core/dist/plugins/skill-catalog.d.ts.map +0 -1
  1218. package/packages/core/dist/plugins/skill-catalog.js +0 -98
  1219. package/packages/core/dist/plugins/skill-catalog.js.map +0 -1
  1220. package/packages/core/dist/plugins/skill-guard.d.ts +0 -27
  1221. package/packages/core/dist/plugins/skill-guard.d.ts.map +0 -1
  1222. package/packages/core/dist/plugins/skill-guard.js +0 -319
  1223. package/packages/core/dist/plugins/skill-guard.js.map +0 -1
  1224. package/packages/core/dist/plugins/sql-lens-worker.d.ts +0 -2
  1225. package/packages/core/dist/plugins/sql-lens-worker.d.ts.map +0 -1
  1226. package/packages/core/dist/plugins/sql-lens-worker.js +0 -206
  1227. package/packages/core/dist/plugins/sql-lens-worker.js.map +0 -1
  1228. package/packages/core/dist/plugins/sql-lens.d.ts +0 -14
  1229. package/packages/core/dist/plugins/sql-lens.d.ts.map +0 -1
  1230. package/packages/core/dist/plugins/sql-lens.js +0 -318
  1231. package/packages/core/dist/plugins/sql-lens.js.map +0 -1
  1232. package/packages/core/dist/plugins/stdio.d.ts +0 -11
  1233. package/packages/core/dist/plugins/stdio.d.ts.map +0 -1
  1234. package/packages/core/dist/plugins/stdio.js +0 -80
  1235. package/packages/core/dist/plugins/stdio.js.map +0 -1
  1236. package/packages/core/dist/plugins/synapse.d.ts +0 -38
  1237. package/packages/core/dist/plugins/synapse.d.ts.map +0 -1
  1238. package/packages/core/dist/plugins/synapse.js +0 -101
  1239. package/packages/core/dist/plugins/synapse.js.map +0 -1
  1240. package/packages/core/dist/plugins/tab-manager.d.ts +0 -9
  1241. package/packages/core/dist/plugins/tab-manager.d.ts.map +0 -1
  1242. package/packages/core/dist/plugins/tab-manager.js +0 -240
  1243. package/packages/core/dist/plugins/tab-manager.js.map +0 -1
  1244. package/packages/core/dist/plugins/taskboard.d.ts +0 -15
  1245. package/packages/core/dist/plugins/taskboard.d.ts.map +0 -1
  1246. package/packages/core/dist/plugins/taskboard.js +0 -375
  1247. package/packages/core/dist/plugins/taskboard.js.map +0 -1
  1248. package/packages/core/dist/plugins/telemetry-blocker.d.ts +0 -11
  1249. package/packages/core/dist/plugins/telemetry-blocker.d.ts.map +0 -1
  1250. package/packages/core/dist/plugins/telemetry-blocker.js +0 -76
  1251. package/packages/core/dist/plugins/telemetry-blocker.js.map +0 -1
  1252. package/packages/core/dist/plugins/test-harness.d.ts +0 -14
  1253. package/packages/core/dist/plugins/test-harness.d.ts.map +0 -1
  1254. package/packages/core/dist/plugins/test-harness.js +0 -276
  1255. package/packages/core/dist/plugins/test-harness.js.map +0 -1
  1256. package/packages/core/dist/plugins/theme-studio.d.ts +0 -29
  1257. package/packages/core/dist/plugins/theme-studio.d.ts.map +0 -1
  1258. package/packages/core/dist/plugins/theme-studio.js +0 -143
  1259. package/packages/core/dist/plugins/theme-studio.js.map +0 -1
  1260. package/packages/core/dist/plugins/token-guard.d.ts +0 -15
  1261. package/packages/core/dist/plugins/token-guard.d.ts.map +0 -1
  1262. package/packages/core/dist/plugins/token-guard.js +0 -210
  1263. package/packages/core/dist/plugins/token-guard.js.map +0 -1
  1264. package/packages/core/dist/plugins/tools.d.ts +0 -13
  1265. package/packages/core/dist/plugins/tools.d.ts.map +0 -1
  1266. package/packages/core/dist/plugins/tools.js +0 -23
  1267. package/packages/core/dist/plugins/tools.js.map +0 -1
  1268. package/packages/core/dist/plugins/turn-rewind.d.ts +0 -36
  1269. package/packages/core/dist/plugins/turn-rewind.d.ts.map +0 -1
  1270. package/packages/core/dist/plugins/turn-rewind.js +0 -378
  1271. package/packages/core/dist/plugins/turn-rewind.js.map +0 -1
  1272. package/packages/core/dist/plugins/undo-savepoint.d.ts +0 -17
  1273. package/packages/core/dist/plugins/undo-savepoint.d.ts.map +0 -1
  1274. package/packages/core/dist/plugins/undo-savepoint.js +0 -353
  1275. package/packages/core/dist/plugins/undo-savepoint.js.map +0 -1
  1276. package/packages/core/dist/plugins/vision-toolkit.d.ts +0 -36
  1277. package/packages/core/dist/plugins/vision-toolkit.d.ts.map +0 -1
  1278. package/packages/core/dist/plugins/vision-toolkit.js +0 -468
  1279. package/packages/core/dist/plugins/vision-toolkit.js.map +0 -1
  1280. package/packages/core/dist/plugins/web-research.d.ts +0 -17
  1281. package/packages/core/dist/plugins/web-research.d.ts.map +0 -1
  1282. package/packages/core/dist/plugins/web-research.js +0 -284
  1283. package/packages/core/dist/plugins/web-research.js.map +0 -1
  1284. package/packages/core/dist/plugins/workspace-navigator.d.ts +0 -42
  1285. package/packages/core/dist/plugins/workspace-navigator.d.ts.map +0 -1
  1286. package/packages/core/dist/plugins/workspace-navigator.js +0 -168
  1287. package/packages/core/dist/plugins/workspace-navigator.js.map +0 -1
  1288. package/packages/core/dist/plugins/workspace-search.d.ts +0 -15
  1289. package/packages/core/dist/plugins/workspace-search.d.ts.map +0 -1
  1290. package/packages/core/dist/plugins/workspace-search.js +0 -167
  1291. package/packages/core/dist/plugins/workspace-search.js.map +0 -1
  1292. package/packages/core/dist/plugins/yaml-validator.d.ts +0 -9
  1293. package/packages/core/dist/plugins/yaml-validator.d.ts.map +0 -1
  1294. package/packages/core/dist/plugins/yaml-validator.js +0 -203
  1295. package/packages/core/dist/plugins/yaml-validator.js.map +0 -1
  1296. package/packages/core/dist/profile.d.ts +0 -9
  1297. package/packages/core/dist/profile.d.ts.map +0 -1
  1298. package/packages/core/dist/profile.js +0 -33
  1299. package/packages/core/dist/profile.js.map +0 -1
  1300. package/packages/core/dist/runtime.d.ts +0 -16
  1301. package/packages/core/dist/runtime.d.ts.map +0 -1
  1302. package/packages/core/dist/runtime.js +0 -47
  1303. package/packages/core/dist/runtime.js.map +0 -1
  1304. package/packages/core/dist/services.d.ts +0 -118
  1305. package/packages/core/dist/services.d.ts.map +0 -1
  1306. package/packages/core/dist/services.js +0 -115
  1307. package/packages/core/dist/services.js.map +0 -1
  1308. package/packages/core/dist/stdio.d.ts +0 -37
  1309. package/packages/core/dist/stdio.d.ts.map +0 -1
  1310. package/packages/core/dist/stdio.js +0 -356
  1311. package/packages/core/dist/stdio.js.map +0 -1
  1312. package/packages/core/dist/workspace-path.d.ts +0 -13
  1313. package/packages/core/dist/workspace-path.d.ts.map +0 -1
  1314. package/packages/core/dist/workspace-path.js +0 -71
  1315. package/packages/core/dist/workspace-path.js.map +0 -1
  1316. package/packages/core/package.json +0 -42
  1317. package/packages/core/profiles/default/cordis.yml +0 -122
  1318. package/packages/core/profiles/development/cordis.yml +0 -47
  1319. package/packages/core/src/atomic-write.ts +0 -45
  1320. package/packages/core/src/boot.ts +0 -255
  1321. package/packages/core/src/bounded-file.ts +0 -41
  1322. package/packages/core/src/config.ts +0 -24
  1323. package/packages/core/src/context.ts +0 -3
  1324. package/packages/core/src/cordis-timer.ts +0 -107
  1325. package/packages/core/src/http.ts +0 -32
  1326. package/packages/core/src/index.ts +0 -8
  1327. package/packages/core/src/plugins/agent-teams.ts +0 -1191
  1328. package/packages/core/src/plugins/anchored-standard.ts +0 -115
  1329. package/packages/core/src/plugins/annotation.ts +0 -123
  1330. package/packages/core/src/plugins/archify.ts +0 -171
  1331. package/packages/core/src/plugins/at-file.ts +0 -138
  1332. package/packages/core/src/plugins/auto-mode.ts +0 -190
  1333. package/packages/core/src/plugins/better-sidebar.ts +0 -128
  1334. package/packages/core/src/plugins/browser-fetch.ts +0 -362
  1335. package/packages/core/src/plugins/browser-session.ts +0 -606
  1336. package/packages/core/src/plugins/canvas-draw.ts +0 -143
  1337. package/packages/core/src/plugins/change-verifier.ts +0 -103
  1338. package/packages/core/src/plugins/cleaner.ts +0 -363
  1339. package/packages/core/src/plugins/cli-notifier.ts +0 -194
  1340. package/packages/core/src/plugins/code2skill.ts +0 -237
  1341. package/packages/core/src/plugins/colleague-skill.ts +0 -147
  1342. package/packages/core/src/plugins/context-doctor.ts +0 -487
  1343. package/packages/core/src/plugins/context.ts +0 -227
  1344. package/packages/core/src/plugins/cost-meter.ts +0 -478
  1345. package/packages/core/src/plugins/dependency-checker.ts +0 -578
  1346. package/packages/core/src/plugins/docker-sandbox.ts +0 -336
  1347. package/packages/core/src/plugins/fail-logger.ts +0 -202
  1348. package/packages/core/src/plugins/genui.ts +0 -150
  1349. package/packages/core/src/plugins/git-time-capsule.ts +0 -466
  1350. package/packages/core/src/plugins/graph-memory.ts +0 -667
  1351. package/packages/core/src/plugins/history-compressor.ts +0 -98
  1352. package/packages/core/src/plugins/hol-guard.ts +0 -171
  1353. package/packages/core/src/plugins/i18n-pair.ts +0 -326
  1354. package/packages/core/src/plugins/image-compressor.ts +0 -217
  1355. package/packages/core/src/plugins/llm-verifier.ts +0 -182
  1356. package/packages/core/src/plugins/mcp-client.ts +0 -1379
  1357. package/packages/core/src/plugins/mcp-panel.ts +0 -206
  1358. package/packages/core/src/plugins/memory.ts +0 -381
  1359. package/packages/core/src/plugins/mirage-bridge.ts +0 -191
  1360. package/packages/core/src/plugins/mock-server.ts +0 -189
  1361. package/packages/core/src/plugins/model.ts +0 -18
  1362. package/packages/core/src/plugins/models.ts +0 -43
  1363. package/packages/core/src/plugins/modlens.ts +0 -497
  1364. package/packages/core/src/plugins/module-search.ts +0 -222
  1365. package/packages/core/src/plugins/obsidian-sync.ts +0 -94
  1366. package/packages/core/src/plugins/openpets.ts +0 -260
  1367. package/packages/core/src/plugins/plan-execute.ts +0 -104
  1368. package/packages/core/src/plugins/plugin-check.ts +0 -316
  1369. package/packages/core/src/plugins/plugin-dev.ts +0 -191
  1370. package/packages/core/src/plugins/plugin-finder.ts +0 -215
  1371. package/packages/core/src/plugins/plugin-radar.ts +0 -270
  1372. package/packages/core/src/plugins/plugin-stars.ts +0 -377
  1373. package/packages/core/src/plugins/prompt-guard.ts +0 -161
  1374. package/packages/core/src/plugins/prompt-library.ts +0 -171
  1375. package/packages/core/src/plugins/readme-gen.ts +0 -544
  1376. package/packages/core/src/plugins/recall-unread.ts +0 -486
  1377. package/packages/core/src/plugins/resources.ts +0 -146
  1378. package/packages/core/src/plugins/reverse-skill.ts +0 -83
  1379. package/packages/core/src/plugins/reviewer-bot.ts +0 -164
  1380. package/packages/core/src/plugins/runtime-doctor.ts +0 -140
  1381. package/packages/core/src/plugins/runtime.ts +0 -171
  1382. package/packages/core/src/plugins/secure-audit.ts +0 -167
  1383. package/packages/core/src/plugins/session-bookmarks.ts +0 -95
  1384. package/packages/core/src/plugins/session-bridge.ts +0 -614
  1385. package/packages/core/src/plugins/session-compare.ts +0 -186
  1386. package/packages/core/src/plugins/session-export.ts +0 -102
  1387. package/packages/core/src/plugins/session-insights.ts +0 -470
  1388. package/packages/core/src/plugins/session-search.ts +0 -129
  1389. package/packages/core/src/plugins/session.ts +0 -40
  1390. package/packages/core/src/plugins/skill-catalog.ts +0 -122
  1391. package/packages/core/src/plugins/skill-guard.ts +0 -345
  1392. package/packages/core/src/plugins/sql-lens-worker.ts +0 -202
  1393. package/packages/core/src/plugins/sql-lens.ts +0 -344
  1394. package/packages/core/src/plugins/stdio.ts +0 -77
  1395. package/packages/core/src/plugins/synapse.ts +0 -137
  1396. package/packages/core/src/plugins/tab-manager.ts +0 -233
  1397. package/packages/core/src/plugins/taskboard.ts +0 -446
  1398. package/packages/core/src/plugins/telemetry-blocker.ts +0 -78
  1399. package/packages/core/src/plugins/test-harness.ts +0 -300
  1400. package/packages/core/src/plugins/theme-studio.ts +0 -170
  1401. package/packages/core/src/plugins/token-guard.ts +0 -224
  1402. package/packages/core/src/plugins/tools.ts +0 -29
  1403. package/packages/core/src/plugins/turn-rewind.ts +0 -400
  1404. package/packages/core/src/plugins/undo-savepoint.ts +0 -385
  1405. package/packages/core/src/plugins/vision-toolkit.ts +0 -510
  1406. package/packages/core/src/plugins/web-research.ts +0 -301
  1407. package/packages/core/src/plugins/workspace-navigator.ts +0 -189
  1408. package/packages/core/src/plugins/workspace-search.ts +0 -177
  1409. package/packages/core/src/plugins/yaml-validator.ts +0 -216
  1410. package/packages/core/src/profile.ts +0 -37
  1411. package/packages/core/src/runtime.ts +0 -52
  1412. package/packages/core/src/services.ts +0 -232
  1413. package/packages/core/src/stdio.ts +0 -355
  1414. package/packages/core/src/workspace-path.ts +0 -79
  1415. package/packages/core/test/agent-teams.test.ts +0 -517
  1416. package/packages/core/test/anchored-standard.test.ts +0 -60
  1417. package/packages/core/test/annotation.test.ts +0 -69
  1418. package/packages/core/test/archify.test.ts +0 -244
  1419. package/packages/core/test/at-file.test.ts +0 -666
  1420. package/packages/core/test/atomic-write.test.ts +0 -52
  1421. package/packages/core/test/auto-mode.test.ts +0 -629
  1422. package/packages/core/test/better-sidebar.test.ts +0 -232
  1423. package/packages/core/test/boot.test.ts +0 -265
  1424. package/packages/core/test/bounded-file.test.ts +0 -55
  1425. package/packages/core/test/browser-fetch-rebinding.test.ts +0 -93
  1426. package/packages/core/test/browser-fetch.test.ts +0 -844
  1427. package/packages/core/test/browser-session.test.ts +0 -1236
  1428. package/packages/core/test/canvas-draw.test.ts +0 -164
  1429. package/packages/core/test/change-verifier.test.ts +0 -200
  1430. package/packages/core/test/cleaner.test.ts +0 -316
  1431. package/packages/core/test/cli-notifier.test.ts +0 -235
  1432. package/packages/core/test/code2skill.test.ts +0 -264
  1433. package/packages/core/test/colleague-skill.test.ts +0 -241
  1434. package/packages/core/test/config.test.ts +0 -147
  1435. package/packages/core/test/context-doctor.test.ts +0 -627
  1436. package/packages/core/test/context-insights.test.ts +0 -396
  1437. package/packages/core/test/cordis-timer.test.ts +0 -147
  1438. package/packages/core/test/cost-meter.test.ts +0 -362
  1439. package/packages/core/test/dependency-checker.test.ts +0 -633
  1440. package/packages/core/test/docker-sandbox.test.ts +0 -170
  1441. package/packages/core/test/fail-logger.test.ts +0 -363
  1442. package/packages/core/test/genui.test.ts +0 -162
  1443. package/packages/core/test/git-time-capsule.test.ts +0 -1476
  1444. package/packages/core/test/graph-memory.test.ts +0 -508
  1445. package/packages/core/test/history-compressor.test.ts +0 -47
  1446. package/packages/core/test/hol-guard.test.ts +0 -61
  1447. package/packages/core/test/http.test.ts +0 -36
  1448. package/packages/core/test/i18n-pair.test.ts +0 -367
  1449. package/packages/core/test/image-compressor.test.ts +0 -59
  1450. package/packages/core/test/llm-verifier.test.ts +0 -76
  1451. package/packages/core/test/mcp-client.test.ts +0 -1037
  1452. package/packages/core/test/mcp-panel.test.ts +0 -91
  1453. package/packages/core/test/memory.test.ts +0 -125
  1454. package/packages/core/test/mirage-bridge.test.ts +0 -58
  1455. package/packages/core/test/mock-server.test.ts +0 -63
  1456. package/packages/core/test/model.test.ts +0 -62
  1457. package/packages/core/test/models.test.ts +0 -85
  1458. package/packages/core/test/modlens.test.ts +0 -615
  1459. package/packages/core/test/module-search.test.ts +0 -98
  1460. package/packages/core/test/obsidian-sync.test.ts +0 -57
  1461. package/packages/core/test/openpets.test.ts +0 -273
  1462. package/packages/core/test/plan-execute.test.ts +0 -86
  1463. package/packages/core/test/plugin-check.test.ts +0 -16
  1464. package/packages/core/test/plugin-dev.test.ts +0 -246
  1465. package/packages/core/test/plugin-finder.test.ts +0 -105
  1466. package/packages/core/test/plugin-radar.test.ts +0 -87
  1467. package/packages/core/test/plugin-stars.test.ts +0 -480
  1468. package/packages/core/test/profile.test.ts +0 -39
  1469. package/packages/core/test/profiles.integration.test.ts +0 -576
  1470. package/packages/core/test/prompt-guard.test.ts +0 -78
  1471. package/packages/core/test/prompt-library.test.ts +0 -56
  1472. package/packages/core/test/readme-gen.test.ts +0 -445
  1473. package/packages/core/test/recall-unread.test.ts +0 -592
  1474. package/packages/core/test/registry.test.ts +0 -64
  1475. package/packages/core/test/resources.test.ts +0 -310
  1476. package/packages/core/test/reverse-skill.test.ts +0 -40
  1477. package/packages/core/test/reviewer-bot.test.ts +0 -55
  1478. package/packages/core/test/runtime-doctor.test.ts +0 -55
  1479. package/packages/core/test/runtime-fixture.ts +0 -55
  1480. package/packages/core/test/runtime.test.ts +0 -313
  1481. package/packages/core/test/secure-audit.test.ts +0 -29
  1482. package/packages/core/test/services.test.ts +0 -4805
  1483. package/packages/core/test/session-bookmarks.test.ts +0 -62
  1484. package/packages/core/test/session-bridge.test.ts +0 -411
  1485. package/packages/core/test/session-compare.test.ts +0 -94
  1486. package/packages/core/test/session-export.test.ts +0 -54
  1487. package/packages/core/test/session-insights.test.ts +0 -486
  1488. package/packages/core/test/session-search.test.ts +0 -30
  1489. package/packages/core/test/session.test.ts +0 -153
  1490. package/packages/core/test/skill-catalog.test.ts +0 -18
  1491. package/packages/core/test/skill-guard.test.ts +0 -280
  1492. package/packages/core/test/sql-lens.test.ts +0 -244
  1493. package/packages/core/test/stdio-args.test.ts +0 -661
  1494. package/packages/core/test/stdio.test.ts +0 -246
  1495. package/packages/core/test/synapse.test.ts +0 -67
  1496. package/packages/core/test/tab-manager.test.ts +0 -58
  1497. package/packages/core/test/taskboard.test.ts +0 -73
  1498. package/packages/core/test/telemetry-blocker.test.ts +0 -61
  1499. package/packages/core/test/test-harness.test.ts +0 -297
  1500. package/packages/core/test/theme-studio.test.ts +0 -39
  1501. package/packages/core/test/token-guard.test.ts +0 -395
  1502. package/packages/core/test/tools.test.ts +0 -118
  1503. package/packages/core/test/turn-rewind.test.ts +0 -549
  1504. package/packages/core/test/undo-savepoint.test.ts +0 -222
  1505. package/packages/core/test/vision-toolkit.test.ts +0 -511
  1506. package/packages/core/test/web-research.test.ts +0 -63
  1507. package/packages/core/test/workspace-git-status.test.ts +0 -54
  1508. package/packages/core/test/workspace-navigator.test.ts +0 -43
  1509. package/packages/core/test/workspace-path.test.ts +0 -34
  1510. package/packages/core/test/workspace-search.test.ts +0 -88
  1511. package/packages/core/test/yaml-validator.test.ts +0 -195
  1512. package/packages/core/tsconfig.build.json +0 -8
  1513. package/packages/core/tsconfig.json +0 -7
@@ -1,1476 +0,0 @@
1
- import { execFile } from "node:child_process";
2
- import { chmod, mkdir, mkdtemp, readFile, readdir, rm, symlink, writeFile } from "node:fs/promises";
3
- import { tmpdir } from "node:os";
4
- import { delimiter, join } from "node:path";
5
- import { promisify } from "node:util";
6
- import { Context } from "@deepseek-ai/cordis";
7
- import { afterEach, describe, expect, test } from "vitest";
8
- import { PiPluginUiRegistry, PiToolRegistry } from "../src/services.js";
9
- import { applyCapsule } from "../src/plugins/git-time-capsule.js";
10
- import gitTimeCapsulePlugin from "../src/plugins/git-time-capsule.js";
11
-
12
- const execFileAsync = promisify(execFile);
13
- const temporaryDirectories: string[] = [];
14
-
15
- async function waitForFile(path: string, description: string, timeoutMs = 5_000): Promise<string> {
16
- const startedAt = Date.now();
17
- while (true) {
18
- const value = await readFile(path, "utf8").catch(() => undefined);
19
- if (value !== undefined) return value;
20
- if (Date.now() - startedAt >= timeoutMs) throw new Error(`Timed out waiting for ${description}`);
21
- await new Promise((resolve) => setTimeout(resolve, 10));
22
- }
23
- }
24
-
25
- afterEach(async () => {
26
- await Promise.all(temporaryDirectories.splice(0).map((directory) => rm(directory, { recursive: true, force: true })));
27
- });
28
-
29
- describe("git time capsule restore", () => {
30
- test("checks and applies a capsule to a real git workspace", async () => {
31
- const workspace = await mkdtemp(join(tmpdir(), "pi-harness-capsule-workspace-"));
32
- const capsules = await mkdtemp(join(tmpdir(), "pi-harness-capsules-"));
33
- temporaryDirectories.push(workspace, capsules);
34
- await execFileAsync("git", ["init", "-q", "-b", "main"], { cwd: workspace });
35
- await execFileAsync("git", ["config", "user.email", "test@example.invalid"], { cwd: workspace });
36
- await execFileAsync("git", ["config", "user.name", "Pi Harness Test"], { cwd: workspace });
37
- await writeFile(join(workspace, "note.txt"), "before\n", "utf8");
38
- await execFileAsync("git", ["add", "note.txt"], { cwd: workspace });
39
- await execFileAsync("git", ["commit", "-qm", "fixture"], { cwd: workspace });
40
- await writeFile(join(workspace, "note.txt"), "after\n", "utf8");
41
- const { stdout: patch } = await execFileAsync("git", ["diff", "--binary"], { cwd: workspace });
42
- const capsule = join(capsules, "restore.patch");
43
- await writeFile(capsule, patch, "utf8");
44
-
45
- await applyCapsule(workspace, capsule);
46
-
47
- await expect(readFile(join(workspace, "note.txt"), "utf8")).resolves.toBe("before\n");
48
- });
49
-
50
- test("rejects a capsule that does not apply cleanly", async () => {
51
- const workspace = await mkdtemp(join(tmpdir(), "pi-harness-capsule-conflict-"));
52
- const capsules = await mkdtemp(join(tmpdir(), "pi-harness-capsules-conflict-"));
53
- temporaryDirectories.push(workspace, capsules);
54
- await execFileAsync("git", ["init", "-q", "-b", "main"], { cwd: workspace });
55
- await writeFile(join(workspace, "note.txt"), "current\n", "utf8");
56
- const capsule = join(capsules, "conflict.patch");
57
- await writeFile(capsule, "diff --git a/note.txt b/note.txt\n--- a/note.txt\n+++ b/note.txt\n@@ -1 +1 @@\n-old\n+restored\n", "utf8");
58
-
59
- await expect(applyCapsule(workspace, capsule)).rejects.toThrow("does not apply cleanly");
60
- await expect(readFile(join(workspace, "note.txt"), "utf8")).resolves.toBe("current\n");
61
- });
62
-
63
- test("uses the default timeout when direct restore configuration is not finite", async () => {
64
- const workspace = await mkdtemp(join(tmpdir(), "pi-harness-capsule-direct-timeout-workspace-"));
65
- const capsules = await mkdtemp(join(tmpdir(), "pi-harness-capsule-direct-timeout-input-"));
66
- temporaryDirectories.push(workspace, capsules);
67
- await execFileAsync("git", ["init", "-q", "-b", "main"], { cwd: workspace });
68
- await execFileAsync("git", ["config", "user.email", "test@example.invalid"], { cwd: workspace });
69
- await execFileAsync("git", ["config", "user.name", "Pi Harness Test"], { cwd: workspace });
70
- await writeFile(join(workspace, "note.txt"), "before\n", "utf8");
71
- await execFileAsync("git", ["add", "note.txt"], { cwd: workspace });
72
- await execFileAsync("git", ["commit", "-qm", "fixture"], { cwd: workspace });
73
- await writeFile(join(workspace, "note.txt"), "after\n", "utf8");
74
- const { stdout: patch } = await execFileAsync("git", ["diff", "--binary"], { cwd: workspace });
75
- const capsule = join(capsules, "restore.patch");
76
- await writeFile(capsule, patch, "utf8");
77
-
78
- await applyCapsule(workspace, capsule, Number.NaN);
79
-
80
- await expect(readFile(join(workspace, "note.txt"), "utf8")).resolves.toBe("before\n");
81
- });
82
-
83
- test("rejects a symbolic-link capsule before Git reads its target", async () => {
84
- if (process.platform === "win32") return;
85
- const workspace = await mkdtemp(join(tmpdir(), "pi-harness-capsule-symlink-workspace-"));
86
- const capsules = await mkdtemp(join(tmpdir(), "pi-harness-capsule-symlink-input-"));
87
- temporaryDirectories.push(workspace, capsules);
88
- await execFileAsync("git", ["init", "-q", "-b", "main"], { cwd: workspace });
89
- await execFileAsync("git", ["config", "user.email", "test@example.invalid"], { cwd: workspace });
90
- await execFileAsync("git", ["config", "user.name", "Pi Harness Test"], { cwd: workspace });
91
- await writeFile(join(workspace, "note.txt"), "before\n", "utf8");
92
- await execFileAsync("git", ["add", "note.txt"], { cwd: workspace });
93
- await execFileAsync("git", ["commit", "-qm", "fixture"], { cwd: workspace });
94
- await writeFile(join(workspace, "note.txt"), "after\n", "utf8");
95
- const { stdout: patch } = await execFileAsync("git", ["diff", "--binary"], { cwd: workspace });
96
- const target = join(capsules, "target.patch");
97
- const link = join(capsules, "restore.patch");
98
- await writeFile(target, patch, "utf8");
99
- await symlink(target, link);
100
-
101
- await expect(applyCapsule(workspace, link)).rejects.toThrow(/symbolic link/iu);
102
- await expect(readFile(join(workspace, "note.txt"), "utf8")).resolves.toBe("after\n");
103
- });
104
-
105
- test("rejects an oversized capsule before invoking Git", async () => {
106
- const workspace = await mkdtemp(join(tmpdir(), "pi-harness-capsule-oversized-workspace-"));
107
- const capsules = await mkdtemp(join(tmpdir(), "pi-harness-capsule-oversized-input-"));
108
- temporaryDirectories.push(workspace, capsules);
109
- await execFileAsync("git", ["init", "-q", "-b", "main"], { cwd: workspace });
110
- const capsule = join(capsules, "oversized.patch");
111
- await writeFile(capsule, Buffer.alloc(8 * 1024 * 1024 + 1, 0x78));
112
-
113
- await expect(applyCapsule(workspace, capsule)).rejects.toThrow(/exceeds.*8388608-byte limit/iu);
114
- });
115
-
116
- test("preserves caller cancellation while checking a restore", async () => {
117
- if (process.platform === "win32") return;
118
- const workspace = await mkdtemp(join(tmpdir(), "pi-harness-capsule-apply-cancel-workspace-"));
119
- const capsules = await mkdtemp(join(tmpdir(), "pi-harness-capsule-apply-cancel-input-"));
120
- temporaryDirectories.push(workspace, capsules);
121
- const capsule = join(capsules, "restore.patch");
122
- await writeFile(capsule, "non-empty patch fixture\n", "utf8");
123
- const bin = join(workspace, "bin");
124
- const started = join(workspace, "git-started");
125
- await mkdir(bin);
126
- await writeFile(join(bin, "git"), '#!/bin/sh\n: > "$CAPSULE_GIT_STARTED"\nexec sleep 5\n', "utf8");
127
- await chmod(join(bin, "git"), 0o700);
128
- const originalPath = process.env.PATH;
129
- const originalStarted = process.env.CAPSULE_GIT_STARTED;
130
- process.env.PATH = `${bin}${delimiter}${originalPath ?? ""}`;
131
- process.env.CAPSULE_GIT_STARTED = started;
132
- const controller = new AbortController();
133
- let pending: Promise<unknown> | undefined;
134
- try {
135
- pending = applyCapsule(workspace, capsule, 1_000, controller.signal);
136
- await waitForFile(started, "Git restore check to start");
137
-
138
- controller.abort(new Error("restore caller cancelled"));
139
-
140
- await expect(pending).rejects.toThrow("restore caller cancelled");
141
- } finally {
142
- if (!controller.signal.aborted) controller.abort(new Error("restore cancellation test cleanup"));
143
- await pending?.catch(() => undefined);
144
- process.env.PATH = originalPath;
145
- if (originalStarted === undefined) delete process.env.CAPSULE_GIT_STARTED;
146
- else process.env.CAPSULE_GIT_STARTED = originalStarted;
147
- }
148
- });
149
-
150
- test("requires explicit confirmation through the restore tool", async () => {
151
- const workspace = await mkdtemp(join(tmpdir(), "pi-harness-capsule-tool-"));
152
- const agentDir = await mkdtemp(join(tmpdir(), "pi-harness-capsule-agent-"));
153
- temporaryDirectories.push(workspace, agentDir);
154
- const capsuleDirectory = join(agentDir, "capsules");
155
- await mkdir(capsuleDirectory, { recursive: true });
156
- await execFileAsync("git", ["init", "-q", "-b", "main"], { cwd: workspace });
157
- await execFileAsync("git", ["config", "user.email", "test@example.invalid"], { cwd: workspace });
158
- await execFileAsync("git", ["config", "user.name", "Pi Harness Test"], { cwd: workspace });
159
- await writeFile(join(workspace, "note.txt"), "before\n", "utf8");
160
- await execFileAsync("git", ["add", "note.txt"], { cwd: workspace });
161
- await execFileAsync("git", ["commit", "-qm", "fixture"], { cwd: workspace });
162
- await writeFile(join(workspace, "note.txt"), "after\n", "utf8");
163
- const { stdout: patch } = await execFileAsync("git", ["diff", "--binary"], { cwd: workspace });
164
- await writeFile(join(capsuleDirectory, "restore.patch"), patch, "utf8");
165
- const context = new Context();
166
- const tools = new PiToolRegistry();
167
- const panels = new PiPluginUiRegistry();
168
- context.provide("piHarnessLaunch", { cwd: workspace, agentDir, args: [], requestExit() {} });
169
- context.provide("piTools", tools);
170
- context.provide("piPluginUi", panels);
171
- try {
172
- await context.plugin(gitTimeCapsulePlugin);
173
- const tool = tools.snapshot().customTools.find((candidate) => candidate.name === "git_restore");
174
- expect(tool).toBeDefined();
175
- await expect(tool!.execute("call-1", { name: "restore.patch", confirm: false }, undefined, undefined, {} as never)).rejects.toThrow("confirm=true");
176
- await expect(tool!.execute("call-2", { name: "restore.patch", confirm: true }, undefined, undefined, {} as never)).resolves.toMatchObject({
177
- details: { restored: true },
178
- });
179
- await expect(readFile(join(workspace, "note.txt"), "utf8")).resolves.toBe("before\n");
180
- await expect(panels.snapshot()).resolves.toMatchObject([{ data: { latest: { action: "restore", status: "completed", files: 1 } } }]);
181
- } finally {
182
- await context.fiber.dispose();
183
- }
184
- });
185
-
186
- test("reports a completed restore even if the source capsule disappears afterward", async () => {
187
- if (process.platform === "win32") return;
188
- const workspace = await mkdtemp(join(tmpdir(), "pi-harness-capsule-restore-race-workspace-"));
189
- const agentDir = await mkdtemp(join(tmpdir(), "pi-harness-capsule-restore-race-agent-"));
190
- temporaryDirectories.push(workspace, agentDir);
191
- const directory = join(agentDir, "capsules");
192
- await mkdir(directory);
193
- await execFileAsync("git", ["init", "-q", "-b", "main"], { cwd: workspace });
194
- await execFileAsync("git", ["config", "user.email", "test@example.invalid"], { cwd: workspace });
195
- await execFileAsync("git", ["config", "user.name", "Pi Harness Test"], { cwd: workspace });
196
- await writeFile(join(workspace, "note.txt"), "before\n", "utf8");
197
- await execFileAsync("git", ["add", "note.txt"], { cwd: workspace });
198
- await execFileAsync("git", ["commit", "-qm", "fixture"], { cwd: workspace });
199
- await writeFile(join(workspace, "note.txt"), "after\n", "utf8");
200
- const { stdout: patch } = await execFileAsync("git", ["diff", "--binary", "--no-textconv"], { cwd: workspace });
201
- const capsule = join(directory, "restore-race.patch");
202
- await writeFile(capsule, patch, "utf8");
203
- const { stdout: realGit } = await execFileAsync("which", ["git"]);
204
- const bin = join(workspace, "bin");
205
- await mkdir(bin);
206
- await writeFile(
207
- join(bin, "git"),
208
- '#!/bin/sh\n"$CAPSULE_REAL_GIT" "$@"\nstatus=$?\ncase " $* " in\n *" apply --reverse --binary "*) rm "$CAPSULE_SOURCE" ;;\nesac\nexit "$status"\n',
209
- "utf8",
210
- );
211
- await chmod(join(bin, "git"), 0o700);
212
- const original = { path: process.env.PATH, realGit: process.env.CAPSULE_REAL_GIT, source: process.env.CAPSULE_SOURCE };
213
- process.env.PATH = `${bin}${delimiter}${original.path ?? ""}`;
214
- process.env.CAPSULE_REAL_GIT = realGit.trim();
215
- process.env.CAPSULE_SOURCE = capsule;
216
- const context = new Context();
217
- const tools = new PiToolRegistry();
218
- const panels = new PiPluginUiRegistry();
219
- context.provide("piHarnessLaunch", { cwd: workspace, agentDir, args: [], requestExit() {} });
220
- context.provide("piTools", tools);
221
- context.provide("piPluginUi", panels);
222
- try {
223
- await context.plugin(gitTimeCapsulePlugin);
224
- const restore = tools.snapshot().customTools.find((candidate) => candidate.name === "git_restore")!;
225
-
226
- await expect(
227
- restore.execute("call-restore-race", { name: "restore-race.patch", confirm: true }, undefined, undefined, {} as never),
228
- ).resolves.toMatchObject({
229
- details: { restored: true },
230
- });
231
- await expect(readFile(join(workspace, "note.txt"), "utf8")).resolves.toBe("before\n");
232
- } finally {
233
- for (const [name, value] of [
234
- ["PATH", original.path],
235
- ["CAPSULE_REAL_GIT", original.realGit],
236
- ["CAPSULE_SOURCE", original.source],
237
- ] as const) {
238
- if (value === undefined) delete process.env[name];
239
- else process.env[name] = value;
240
- }
241
- await context.fiber.dispose();
242
- }
243
- });
244
-
245
- test("rejects accessor restore parameters without invoking them", async () => {
246
- const workspace = await mkdtemp(join(tmpdir(), "pi-harness-capsule-restore-params-workspace-"));
247
- const agentDir = await mkdtemp(join(tmpdir(), "pi-harness-capsule-restore-params-agent-"));
248
- temporaryDirectories.push(workspace, agentDir);
249
- const context = new Context();
250
- const tools = new PiToolRegistry();
251
- const panels = new PiPluginUiRegistry();
252
- context.provide("piHarnessLaunch", { cwd: workspace, agentDir, args: [], requestExit() {} });
253
- context.provide("piTools", tools);
254
- context.provide("piPluginUi", panels);
255
- let accessed = false;
256
- const rawParams = { name: "restore.patch" } as { name: string; confirm?: boolean };
257
- Object.defineProperty(rawParams, "confirm", {
258
- enumerable: true,
259
- get() {
260
- accessed = true;
261
- throw new Error("accessor executed");
262
- },
263
- });
264
- try {
265
- await context.plugin(gitTimeCapsulePlugin);
266
- const tool = tools.snapshot().customTools.find((candidate) => candidate.name === "git_restore")!;
267
-
268
- await expect(tool.execute("call-restore-params", rawParams, undefined, undefined, {} as never)).rejects.toThrow(/parameters.*data properties/iu);
269
- expect(accessed).toBe(false);
270
- await expect(panels.snapshot()).resolves.toMatchObject([
271
- { data: { latest: { action: "restore", status: "failed", error: "Git restore parameters must use data properties" } } },
272
- ]);
273
- } finally {
274
- await context.fiber.dispose();
275
- }
276
- });
277
-
278
- test("rejects NUL bytes in restore capsule names before filesystem access", async () => {
279
- const workspace = await mkdtemp(join(tmpdir(), "pi-harness-capsule-restore-nul-workspace-"));
280
- const agentDir = await mkdtemp(join(tmpdir(), "pi-harness-capsule-restore-nul-agent-"));
281
- temporaryDirectories.push(workspace, agentDir);
282
- const context = new Context();
283
- const tools = new PiToolRegistry();
284
- context.provide("piHarnessLaunch", { cwd: workspace, agentDir, args: [], requestExit() {} });
285
- context.provide("piTools", tools);
286
- context.provide("piPluginUi", new PiPluginUiRegistry());
287
- try {
288
- await context.plugin(gitTimeCapsulePlugin);
289
- const tool = tools.snapshot().customTools.find((candidate) => candidate.name === "git_restore")!;
290
-
291
- await expect(tool.execute("call-restore-nul", { name: "restore\0.patch", confirm: true }, undefined, undefined, {} as never)).rejects.toThrow(
292
- /name.*must not contain NUL/iu,
293
- );
294
- } finally {
295
- await context.fiber.dispose();
296
- }
297
- });
298
-
299
- test("rejects ambiguous or unsafe restore capsule names before filesystem access", async () => {
300
- const workspace = await mkdtemp(join(tmpdir(), "pi-harness-capsule-restore-name-workspace-"));
301
- const agentDir = await mkdtemp(join(tmpdir(), "pi-harness-capsule-restore-name-agent-"));
302
- temporaryDirectories.push(workspace, agentDir);
303
- const context = new Context();
304
- const tools = new PiToolRegistry();
305
- context.provide("piHarnessLaunch", { cwd: workspace, agentDir, args: [], requestExit() {} });
306
- context.provide("piTools", tools);
307
- context.provide("piPluginUi", new PiPluginUiRegistry());
308
- try {
309
- await context.plugin(gitTimeCapsulePlugin);
310
- const restore = tools.snapshot().customTools.find((candidate) => candidate.name === "git_restore")!;
311
-
312
- for (const [index, name] of [
313
- " restore.patch",
314
- "restore.patch ",
315
- "folder\\restore.patch",
316
- "restore\n.patch",
317
- "restore\u202e.patch",
318
- `${"😀".repeat(64)}.patch`,
319
- ].entries())
320
- await expect(restore.execute(`call-unsafe-name-${index}`, { name, confirm: true }, undefined, undefined, {} as never)).rejects.toThrow(
321
- /safe \.patch filename/iu,
322
- );
323
- } finally {
324
- await context.fiber.dispose();
325
- }
326
- });
327
-
328
- test("rejects restore through a symbolic-link capsule directory", async () => {
329
- if (process.platform === "win32") return;
330
- const workspace = await mkdtemp(join(tmpdir(), "pi-harness-capsule-restore-directory-workspace-"));
331
- const agentDir = await mkdtemp(join(tmpdir(), "pi-harness-capsule-restore-directory-agent-"));
332
- const outside = await mkdtemp(join(tmpdir(), "pi-harness-capsule-restore-directory-outside-"));
333
- temporaryDirectories.push(workspace, agentDir, outside);
334
- await execFileAsync("git", ["init", "-q", "-b", "main"], { cwd: workspace });
335
- await execFileAsync("git", ["config", "user.email", "test@example.invalid"], { cwd: workspace });
336
- await execFileAsync("git", ["config", "user.name", "Pi Harness Test"], { cwd: workspace });
337
- await writeFile(join(workspace, "note.txt"), "before\n", "utf8");
338
- await execFileAsync("git", ["add", "note.txt"], { cwd: workspace });
339
- await execFileAsync("git", ["commit", "-qm", "fixture"], { cwd: workspace });
340
- await writeFile(join(workspace, "note.txt"), "after\n", "utf8");
341
- const { stdout: patch } = await execFileAsync("git", ["diff", "--binary"], { cwd: workspace });
342
- await writeFile(join(outside, "restore.patch"), patch, "utf8");
343
- await symlink(outside, join(agentDir, "capsules"));
344
- const context = new Context();
345
- const tools = new PiToolRegistry();
346
- context.provide("piHarnessLaunch", { cwd: workspace, agentDir, args: [], requestExit() {} });
347
- context.provide("piTools", tools);
348
- context.provide("piPluginUi", new PiPluginUiRegistry());
349
- try {
350
- await context.plugin(gitTimeCapsulePlugin);
351
- const tool = tools.snapshot().customTools.find((candidate) => candidate.name === "git_restore")!;
352
-
353
- await expect(tool.execute("call-directory-link", { name: "restore.patch", confirm: true }, undefined, undefined, {} as never)).rejects.toThrow(
354
- /directory.*symbolic link/iu,
355
- );
356
- await expect(readFile(join(workspace, "note.txt"), "utf8")).resolves.toBe("after\n");
357
- } finally {
358
- await context.fiber.dispose();
359
- }
360
- });
361
-
362
- test("creates distinct capsules and excludes untracked files from the recoverable count", async () => {
363
- const workspace = await mkdtemp(join(tmpdir(), "pi-harness-capsule-distinct-workspace-"));
364
- const agentDir = await mkdtemp(join(tmpdir(), "pi-harness-capsule-distinct-agent-"));
365
- temporaryDirectories.push(workspace, agentDir);
366
- await execFileAsync("git", ["init", "-q", "-b", "main"], { cwd: workspace });
367
- await execFileAsync("git", ["config", "user.email", "test@example.invalid"], { cwd: workspace });
368
- await execFileAsync("git", ["config", "user.name", "Pi Harness Test"], { cwd: workspace });
369
- await writeFile(join(workspace, "tracked.txt"), "before\n", "utf8");
370
- await execFileAsync("git", ["add", "tracked.txt"], { cwd: workspace });
371
- await execFileAsync("git", ["commit", "-qm", "fixture"], { cwd: workspace });
372
- await writeFile(join(workspace, "tracked.txt"), "after\n", "utf8");
373
- await writeFile(join(workspace, "untracked.txt"), "not in the patch\n", "utf8");
374
- const context = new Context();
375
- const tools = new PiToolRegistry();
376
- context.provide("piHarnessLaunch", { cwd: workspace, agentDir, args: [], requestExit() {} });
377
- context.provide("piTools", tools);
378
- context.provide("piPluginUi", new PiPluginUiRegistry());
379
- try {
380
- await context.plugin(gitTimeCapsulePlugin);
381
- const tool = tools.snapshot().customTools.find((candidate) => candidate.name === "git_snapshot");
382
- const first = await tool!.execute("call-1", {}, undefined, undefined, {} as never);
383
- expect(first).toMatchObject({ details: { files: 1 } });
384
- expect(JSON.stringify(first)).not.toContain(agentDir);
385
- expect(JSON.stringify(first)).not.toContain(workspace);
386
- await expect(tool!.execute("call-2", {}, undefined, undefined, {} as never)).resolves.toMatchObject({ details: { files: 1 } });
387
- await expect(readdir(join(agentDir, "capsules"))).resolves.toHaveLength(2);
388
- } finally {
389
- await context.fiber.dispose();
390
- }
391
- });
392
-
393
- test("returns detached panel state that cannot mutate the latest capsule", async () => {
394
- const workspace = await mkdtemp(join(tmpdir(), "pi-harness-capsule-panel-clone-workspace-"));
395
- const agentDir = await mkdtemp(join(tmpdir(), "pi-harness-capsule-panel-clone-agent-"));
396
- temporaryDirectories.push(workspace, agentDir);
397
- await execFileAsync("git", ["init", "-q", "-b", "main"], { cwd: workspace });
398
- await execFileAsync("git", ["config", "user.email", "test@example.invalid"], { cwd: workspace });
399
- await execFileAsync("git", ["config", "user.name", "Pi Harness Test"], { cwd: workspace });
400
- await writeFile(join(workspace, "tracked.txt"), "before\n", "utf8");
401
- await execFileAsync("git", ["add", "tracked.txt"], { cwd: workspace });
402
- await execFileAsync("git", ["commit", "-qm", "fixture"], { cwd: workspace });
403
- await writeFile(join(workspace, "tracked.txt"), "after\n", "utf8");
404
- const context = new Context();
405
- const tools = new PiToolRegistry();
406
- const panels = new PiPluginUiRegistry();
407
- context.provide("piHarnessLaunch", { cwd: workspace, agentDir, args: [], requestExit() {} });
408
- context.provide("piTools", tools);
409
- context.provide("piPluginUi", panels);
410
- try {
411
- await context.plugin(gitTimeCapsulePlugin);
412
- const tool = tools.snapshot().customTools.find((candidate) => candidate.name === "git_snapshot")!;
413
- await tool.execute("call-panel-clone", {}, undefined, undefined, {} as never);
414
- const first = await panels.snapshot();
415
- const firstData = first[0]?.data as { latest: { name: string } };
416
- const originalName = firstData.latest.name;
417
- firstData.latest.name = "mutated.patch";
418
-
419
- const second = await panels.snapshot();
420
-
421
- expect((second[0]?.data as { latest: { name: string } }).latest.name).toBe(originalName);
422
- } finally {
423
- await context.fiber.dispose();
424
- }
425
- });
426
-
427
- test("records a bounded failed capture for the panel", async () => {
428
- const workspace = await mkdtemp(join(tmpdir(), "pi-harness-capsule-failure-workspace-"));
429
- const agentDir = await mkdtemp(join(tmpdir(), "pi-harness-capsule-failure-agent-"));
430
- temporaryDirectories.push(workspace, agentDir);
431
- const context = new Context();
432
- const tools = new PiToolRegistry();
433
- const panels = new PiPluginUiRegistry();
434
- context.provide("piHarnessLaunch", { cwd: workspace, agentDir, args: [], requestExit() {} });
435
- context.provide("piTools", tools);
436
- context.provide("piPluginUi", panels);
437
- try {
438
- await context.plugin(gitTimeCapsulePlugin);
439
- const tool = tools.snapshot().customTools.find((candidate) => candidate.name === "git_snapshot")!;
440
- await expect(tool.execute("call-failure", {}, undefined, undefined, {} as never)).rejects.toThrow("Git time capsule requires a Git working tree");
441
-
442
- await expect(panels.snapshot()).resolves.toMatchObject([
443
- {
444
- id: "git-time-capsule-panel",
445
- data: { latest: { action: "capture", status: "failed", error: "Git time capsule requires a Git working tree" } },
446
- },
447
- ]);
448
- const snapshot = await panels.snapshot();
449
- expect((snapshot[0]?.data as { latest: { error: string } }).latest.error.length).toBeLessThanOrEqual(2_000);
450
- } finally {
451
- await context.fiber.dispose();
452
- }
453
- });
454
-
455
- test("sanitizes tool and panel failures while preserving the original cause", async () => {
456
- if (process.platform === "win32") return;
457
- const workspace = await mkdtemp(join(tmpdir(), "pi-harness-capsule-safe-error-workspace-"));
458
- const agentDir = await mkdtemp(join(tmpdir(), "pi-harness-capsule-safe-error-agent-"));
459
- temporaryDirectories.push(workspace, agentDir);
460
- const bin = join(workspace, "bin");
461
- await mkdir(bin);
462
- await writeFile(
463
- join(bin, "git"),
464
- '#!/bin/sh\nif [ "$1" = "rev-parse" ]; then printf "true\\n"; exit 0; fi\nprintf "fatal: %s\\342\\200\\256\\001\\n" "$CAPSULE_ERROR_PATH" >&2\nexit 2\n',
465
- "utf8",
466
- );
467
- await chmod(join(bin, "git"), 0o700);
468
- const originalPath = process.env.PATH;
469
- const originalErrorPath = process.env.CAPSULE_ERROR_PATH;
470
- process.env.PATH = `${bin}${delimiter}${originalPath ?? ""}`;
471
- process.env.CAPSULE_ERROR_PATH = workspace;
472
- const context = new Context();
473
- const tools = new PiToolRegistry();
474
- const panels = new PiPluginUiRegistry();
475
- context.provide("piHarnessLaunch", { cwd: workspace, agentDir, args: [], requestExit() {} });
476
- context.provide("piTools", tools);
477
- context.provide("piPluginUi", panels);
478
- try {
479
- await context.plugin(gitTimeCapsulePlugin);
480
- const tool = tools.snapshot().customTools.find((candidate) => candidate.name === "git_snapshot")!;
481
- let failure: unknown;
482
- try {
483
- await tool.execute("call-safe-error", {}, undefined, undefined, {} as never);
484
- } catch (error) {
485
- failure = error;
486
- }
487
-
488
- expect(failure).toBeInstanceOf(Error);
489
- expect((failure as Error).message.length).toBeLessThanOrEqual(2_000);
490
- expect((failure as Error).message).not.toContain(workspace);
491
- expect((failure as Error).message).not.toMatch(/[\p{Cc}\p{Cf}]/u);
492
- expect((failure as Error).cause).toBeInstanceOf(Error);
493
- const data = (await panels.snapshot())[0]?.data as { latest: { error: string } };
494
- expect(data.latest.error).toBe((failure as Error).message);
495
- } finally {
496
- process.env.PATH = originalPath;
497
- if (originalErrorPath === undefined) delete process.env.CAPSULE_ERROR_PATH;
498
- else process.env.CAPSULE_ERROR_PATH = originalErrorPath;
499
- await context.fiber.dispose();
500
- }
501
- });
502
-
503
- test("times out a hung Git process while creating a capsule", async () => {
504
- if (process.platform === "win32") return;
505
- const workspace = await mkdtemp(join(tmpdir(), "pi-harness-capsule-timeout-workspace-"));
506
- const agentDir = await mkdtemp(join(tmpdir(), "pi-harness-capsule-timeout-agent-"));
507
- temporaryDirectories.push(workspace, agentDir);
508
- const bin = join(workspace, "bin");
509
- await mkdir(bin);
510
- await writeFile(join(bin, "git"), "#!/bin/sh\nexec sleep 1\n", "utf8");
511
- await chmod(join(bin, "git"), 0o700);
512
- const originalPath = process.env.PATH;
513
- process.env.PATH = `${bin}${delimiter}${originalPath ?? ""}`;
514
- const context = new Context();
515
- const tools = new PiToolRegistry();
516
- context.provide("piHarnessLaunch", { cwd: workspace, agentDir, args: [], requestExit() {} });
517
- context.provide("piTools", tools);
518
- context.provide("piPluginUi", new PiPluginUiRegistry());
519
- try {
520
- await context.plugin(gitTimeCapsulePlugin, { timeoutMs: 500 });
521
- const pending = tools
522
- .snapshot()
523
- .customTools.find((candidate) => candidate.name === "git_snapshot")!
524
- .execute("call-1", {}, undefined, undefined, {} as never);
525
- await expect(pending).rejects.toThrow(/timed out after 500 ms/iu);
526
- } finally {
527
- process.env.PATH = originalPath;
528
- await context.fiber.dispose();
529
- }
530
- });
531
-
532
- test("cancels an in-flight Git snapshot when the caller aborts", async () => {
533
- if (process.platform === "win32") return;
534
- const workspace = await mkdtemp(join(tmpdir(), "pi-harness-capsule-cancel-workspace-"));
535
- const agentDir = await mkdtemp(join(tmpdir(), "pi-harness-capsule-cancel-agent-"));
536
- temporaryDirectories.push(workspace, agentDir);
537
- const bin = join(workspace, "bin");
538
- const started = join(workspace, "git-started");
539
- await mkdir(bin);
540
- await writeFile(join(bin, "git"), '#!/bin/sh\necho "$$" > "$CAPSULE_GIT_STARTED"\nexec sleep 5\n', "utf8");
541
- await chmod(join(bin, "git"), 0o700);
542
- const originalPath = process.env.PATH;
543
- const originalStarted = process.env.CAPSULE_GIT_STARTED;
544
- process.env.PATH = `${bin}${delimiter}${originalPath ?? ""}`;
545
- process.env.CAPSULE_GIT_STARTED = started;
546
- const context = new Context();
547
- const tools = new PiToolRegistry();
548
- context.provide("piHarnessLaunch", { cwd: workspace, agentDir, args: [], requestExit() {} });
549
- context.provide("piTools", tools);
550
- context.provide("piPluginUi", new PiPluginUiRegistry());
551
- try {
552
- await context.plugin(gitTimeCapsulePlugin, { timeoutMs: 1_000 });
553
- const tool = tools.snapshot().customTools.find((candidate) => candidate.name === "git_snapshot")!;
554
- const controller = new AbortController();
555
- const pending = tool.execute("call-cancel", {}, controller.signal, undefined, {} as never);
556
- await waitForFile(started, "Git snapshot process to start");
557
-
558
- controller.abort(new Error("snapshot caller cancelled"));
559
-
560
- await expect(pending).rejects.toThrow("snapshot caller cancelled");
561
- } finally {
562
- process.env.PATH = originalPath;
563
- if (originalStarted === undefined) delete process.env.CAPSULE_GIT_STARTED;
564
- else process.env.CAPSULE_GIT_STARTED = originalStarted;
565
- await context.fiber.dispose();
566
- }
567
- });
568
-
569
- test("records a caller cancellation that arrives before execution starts", async () => {
570
- const workspace = await mkdtemp(join(tmpdir(), "pi-harness-capsule-pre-cancel-workspace-"));
571
- const agentDir = await mkdtemp(join(tmpdir(), "pi-harness-capsule-pre-cancel-agent-"));
572
- temporaryDirectories.push(workspace, agentDir);
573
- const context = new Context();
574
- const tools = new PiToolRegistry();
575
- const panels = new PiPluginUiRegistry();
576
- context.provide("piHarnessLaunch", { cwd: workspace, agentDir, args: [], requestExit() {} });
577
- context.provide("piTools", tools);
578
- context.provide("piPluginUi", panels);
579
- const controller = new AbortController();
580
- controller.abort(new Error("caller cancelled before start"));
581
- try {
582
- await context.plugin(gitTimeCapsulePlugin);
583
- const tool = tools.snapshot().customTools.find((candidate) => candidate.name === "git_snapshot")!;
584
-
585
- await expect(tool.execute("call-pre-cancel", {}, controller.signal, undefined, {} as never)).rejects.toThrow("caller cancelled before start");
586
- await expect(panels.snapshot()).resolves.toMatchObject([
587
- { data: { latest: { action: "capture", status: "cancelled", error: "caller cancelled before start" } } },
588
- ]);
589
- } finally {
590
- await context.fiber.dispose();
591
- }
592
- });
593
-
594
- test("cancels an in-flight Git snapshot when the plugin is disposed", async () => {
595
- if (process.platform === "win32") return;
596
- const workspace = await mkdtemp(join(tmpdir(), "pi-harness-capsule-dispose-workspace-"));
597
- const agentDir = await mkdtemp(join(tmpdir(), "pi-harness-capsule-dispose-agent-"));
598
- temporaryDirectories.push(workspace, agentDir);
599
- const bin = join(workspace, "bin");
600
- const started = join(workspace, "git-started");
601
- await mkdir(bin);
602
- await writeFile(join(bin, "git"), '#!/bin/sh\necho "$$" > "$CAPSULE_GIT_STARTED"\nexec sleep 5\n', "utf8");
603
- await chmod(join(bin, "git"), 0o700);
604
- const originalPath = process.env.PATH;
605
- const originalStarted = process.env.CAPSULE_GIT_STARTED;
606
- process.env.PATH = `${bin}${delimiter}${originalPath ?? ""}`;
607
- process.env.CAPSULE_GIT_STARTED = started;
608
- const context = new Context();
609
- const tools = new PiToolRegistry();
610
- context.provide("piHarnessLaunch", { cwd: workspace, agentDir, args: [], requestExit() {} });
611
- context.provide("piTools", tools);
612
- context.provide("piPluginUi", new PiPluginUiRegistry());
613
- let disposed = false;
614
- try {
615
- await context.plugin(gitTimeCapsulePlugin, { timeoutMs: 1_000 });
616
- const tool = tools.snapshot().customTools.find((candidate) => candidate.name === "git_snapshot")!;
617
- const pending = tool.execute("call-dispose", {}, undefined, undefined, {} as never);
618
- await waitForFile(started, "Git snapshot process to start");
619
-
620
- await context.fiber.dispose();
621
- disposed = true;
622
-
623
- await expect(pending).rejects.toThrow("Git time capsule plugin disposed");
624
- } finally {
625
- process.env.PATH = originalPath;
626
- if (originalStarted === undefined) delete process.env.CAPSULE_GIT_STARTED;
627
- else process.env.CAPSULE_GIT_STARTED = originalStarted;
628
- if (!disposed) await context.fiber.dispose();
629
- }
630
- });
631
-
632
- test("serializes concurrent capsule operations", async () => {
633
- if (process.platform === "win32") return;
634
- const workspace = await mkdtemp(join(tmpdir(), "pi-harness-capsule-serial-workspace-"));
635
- const agentDir = await mkdtemp(join(tmpdir(), "pi-harness-capsule-serial-agent-"));
636
- temporaryDirectories.push(workspace, agentDir);
637
- await execFileAsync("git", ["init", "-q", "-b", "main"], { cwd: workspace });
638
- await execFileAsync("git", ["config", "user.email", "test@example.invalid"], { cwd: workspace });
639
- await execFileAsync("git", ["config", "user.name", "Pi Harness Test"], { cwd: workspace });
640
- await writeFile(join(workspace, "tracked.txt"), "before\n", "utf8");
641
- await execFileAsync("git", ["add", "tracked.txt"], { cwd: workspace });
642
- await execFileAsync("git", ["commit", "-qm", "fixture"], { cwd: workspace });
643
- await writeFile(join(workspace, "tracked.txt"), "after\n", "utf8");
644
- const { stdout } = await execFileAsync("which", ["git"]);
645
- const bin = join(workspace, "bin");
646
- const started = join(workspace, "git-started");
647
- const once = join(workspace, "git-once");
648
- const lock = join(workspace, "git-lock");
649
- await mkdir(bin);
650
- await writeFile(
651
- join(bin, "git"),
652
- '#!/bin/sh\nif mkdir "$CAPSULE_GIT_ONCE" 2>/dev/null; then\n mkdir "$CAPSULE_GIT_LOCK"\n : > "$CAPSULE_GIT_STARTED"\n sleep 1\n rmdir "$CAPSULE_GIT_LOCK"\nelif [ -d "$CAPSULE_GIT_LOCK" ]; then\n echo "concurrent Git invocation" >&2\n exit 92\nfi\nexec "$REAL_GIT" "$@"\n',
653
- "utf8",
654
- );
655
- await chmod(join(bin, "git"), 0o700);
656
- const environment = {
657
- PATH: process.env.PATH,
658
- REAL_GIT: process.env.REAL_GIT,
659
- CAPSULE_GIT_STARTED: process.env.CAPSULE_GIT_STARTED,
660
- CAPSULE_GIT_ONCE: process.env.CAPSULE_GIT_ONCE,
661
- CAPSULE_GIT_LOCK: process.env.CAPSULE_GIT_LOCK,
662
- };
663
- process.env.PATH = `${bin}${delimiter}${process.env.PATH ?? ""}`;
664
- process.env.REAL_GIT = stdout.trim();
665
- process.env.CAPSULE_GIT_STARTED = started;
666
- process.env.CAPSULE_GIT_ONCE = once;
667
- process.env.CAPSULE_GIT_LOCK = lock;
668
- const context = new Context();
669
- const tools = new PiToolRegistry();
670
- context.provide("piHarnessLaunch", { cwd: workspace, agentDir, args: [], requestExit() {} });
671
- context.provide("piTools", tools);
672
- context.provide("piPluginUi", new PiPluginUiRegistry());
673
- try {
674
- await context.plugin(gitTimeCapsulePlugin, { timeoutMs: 5_000 });
675
- const tool = tools.snapshot().customTools.find((candidate) => candidate.name === "git_snapshot")!;
676
- const first = tool.execute("call-serial-1", {}, undefined, undefined, {} as never);
677
- await waitForFile(started, "first serialized Git operation to start");
678
- const second = tool.execute("call-serial-2", {}, undefined, undefined, {} as never);
679
-
680
- await expect(Promise.all([first, second])).resolves.toHaveLength(2);
681
- } finally {
682
- for (const [name, value] of Object.entries(environment)) {
683
- if (value === undefined) delete process.env[name];
684
- else process.env[name] = value;
685
- }
686
- await context.fiber.dispose();
687
- }
688
- });
689
-
690
- test("rejects a queued operation promptly when its caller aborts", async () => {
691
- if (process.platform === "win32") return;
692
- const workspace = await mkdtemp(join(tmpdir(), "pi-harness-capsule-queued-cancel-workspace-"));
693
- const agentDir = await mkdtemp(join(tmpdir(), "pi-harness-capsule-queued-cancel-agent-"));
694
- temporaryDirectories.push(workspace, agentDir);
695
- const bin = join(workspace, "bin");
696
- const started = join(workspace, "git-started");
697
- const rejected = join(workspace, "queued-rejected");
698
- await mkdir(bin);
699
- await writeFile(join(bin, "git"), '#!/bin/sh\n: > "$CAPSULE_GIT_STARTED"\nexec sleep 5\n', "utf8");
700
- await chmod(join(bin, "git"), 0o700);
701
- const originalPath = process.env.PATH;
702
- const originalStarted = process.env.CAPSULE_GIT_STARTED;
703
- process.env.PATH = `${bin}${delimiter}${originalPath ?? ""}`;
704
- process.env.CAPSULE_GIT_STARTED = started;
705
- const context = new Context();
706
- const tools = new PiToolRegistry();
707
- context.provide("piHarnessLaunch", { cwd: workspace, agentDir, args: [], requestExit() {} });
708
- context.provide("piTools", tools);
709
- context.provide("piPluginUi", new PiPluginUiRegistry());
710
- let first: Promise<unknown> | undefined;
711
- try {
712
- await context.plugin(gitTimeCapsulePlugin, { timeoutMs: 10_000 });
713
- const tool = tools.snapshot().customTools.find((candidate) => candidate.name === "git_snapshot")!;
714
- first = tool.execute("call-blocking", {}, undefined, undefined, {} as never);
715
- void first.catch(() => undefined);
716
- await waitForFile(started, "blocking Git operation to start");
717
- const controller = new AbortController();
718
- const second = tool.execute("call-queued", {}, controller.signal, undefined, {} as never);
719
- let rejection: unknown;
720
- void second.catch(async (error: unknown) => {
721
- rejection = error;
722
- await writeFile(rejected, "rejected", "utf8");
723
- });
724
-
725
- controller.abort(new Error("queued caller cancelled"));
726
-
727
- await waitForFile(rejected, "queued operation cancellation", 500);
728
- expect(rejection).toMatchObject({ message: "queued caller cancelled" });
729
- } finally {
730
- process.env.PATH = originalPath;
731
- if (originalStarted === undefined) delete process.env.CAPSULE_GIT_STARTED;
732
- else process.env.CAPSULE_GIT_STARTED = originalStarted;
733
- await context.fiber.dispose();
734
- await first?.catch(() => undefined);
735
- }
736
- });
737
-
738
- test("omits symbolic links from the recent capsule panel", async () => {
739
- if (process.platform === "win32") return;
740
- const workspace = await mkdtemp(join(tmpdir(), "pi-harness-capsule-panel-workspace-"));
741
- const agentDir = await mkdtemp(join(tmpdir(), "pi-harness-capsule-panel-agent-"));
742
- temporaryDirectories.push(workspace, agentDir);
743
- const directory = join(agentDir, "capsules");
744
- await mkdir(directory);
745
- const outside = join(workspace, "outside.patch");
746
- await writeFile(outside, "outside", "utf8");
747
- await symlink(outside, join(directory, "linked.patch"));
748
- const context = new Context();
749
- context.provide("piHarnessLaunch", { cwd: workspace, agentDir, args: [], requestExit() {} });
750
- context.provide("piTools", new PiToolRegistry());
751
- const panels = new PiPluginUiRegistry();
752
- context.provide("piPluginUi", panels);
753
- try {
754
- await context.plugin(gitTimeCapsulePlugin);
755
- await expect(panels.snapshot()).resolves.toMatchObject([{ id: "git-time-capsule-panel", data: { capsules: [] } }]);
756
- } finally {
757
- await context.fiber.dispose();
758
- }
759
- });
760
-
761
- test("rejects a symbolic-link capsule directory before listing its target", async () => {
762
- if (process.platform === "win32") return;
763
- const workspace = await mkdtemp(join(tmpdir(), "pi-harness-capsule-panel-directory-workspace-"));
764
- const agentDir = await mkdtemp(join(tmpdir(), "pi-harness-capsule-panel-directory-agent-"));
765
- const outside = await mkdtemp(join(tmpdir(), "pi-harness-capsule-panel-directory-outside-"));
766
- temporaryDirectories.push(workspace, agentDir, outside);
767
- await writeFile(join(outside, "outside.patch"), "outside", "utf8");
768
- await symlink(outside, join(agentDir, "capsules"));
769
- const context = new Context();
770
- context.provide("piHarnessLaunch", { cwd: workspace, agentDir, args: [], requestExit() {} });
771
- context.provide("piTools", new PiToolRegistry());
772
- const panels = new PiPluginUiRegistry();
773
- context.provide("piPluginUi", panels);
774
- try {
775
- await context.plugin(gitTimeCapsulePlugin);
776
-
777
- const snapshot = await panels.snapshot();
778
- expect(snapshot[0]?.id).toBe("git-time-capsule-panel");
779
- expect(snapshot[0]?.error).toMatch(/directory.*symbolic link/iu);
780
- } finally {
781
- await context.fiber.dispose();
782
- }
783
- });
784
-
785
- test("does not expose the private capsule directory through panel read errors", async () => {
786
- if (process.platform === "win32" || typeof process.getuid !== "function" || process.getuid() === 0) return;
787
- const workspace = await mkdtemp(join(tmpdir(), "pi-harness-capsule-panel-error-workspace-"));
788
- const agentDir = await mkdtemp(join(tmpdir(), "pi-harness-capsule-panel-error-agent-"));
789
- temporaryDirectories.push(workspace, agentDir);
790
- const directory = join(agentDir, "capsules");
791
- await mkdir(directory);
792
- await chmod(directory, 0o000);
793
- const context = new Context();
794
- context.provide("piHarnessLaunch", { cwd: workspace, agentDir, args: [], requestExit() {} });
795
- context.provide("piTools", new PiToolRegistry());
796
- const panels = new PiPluginUiRegistry();
797
- context.provide("piPluginUi", panels);
798
- try {
799
- await context.plugin(gitTimeCapsulePlugin);
800
-
801
- const snapshot = await panels.snapshot();
802
- expect(snapshot[0]?.error).toBeDefined();
803
- expect(snapshot[0]?.error).not.toContain(agentDir);
804
- expect(snapshot[0]?.error).not.toMatch(/[\p{Cc}\p{Cf}]/u);
805
- } finally {
806
- await chmod(directory, 0o700);
807
- await context.fiber.dispose();
808
- }
809
- });
810
-
811
- test("bounds the capsule inventory before rendering recent entries", async () => {
812
- const workspace = await mkdtemp(join(tmpdir(), "pi-harness-capsule-inventory-workspace-"));
813
- const agentDir = await mkdtemp(join(tmpdir(), "pi-harness-capsule-inventory-agent-"));
814
- temporaryDirectories.push(workspace, agentDir);
815
- const directory = join(agentDir, "capsules");
816
- await mkdir(directory);
817
- await Promise.all(Array.from({ length: 257 }, (_, index) => writeFile(join(directory, `${String(index).padStart(4, "0")}.patch`), "x", "utf8")));
818
- const context = new Context();
819
- context.provide("piHarnessLaunch", { cwd: workspace, agentDir, args: [], requestExit() {} });
820
- context.provide("piTools", new PiToolRegistry());
821
- const panels = new PiPluginUiRegistry();
822
- context.provide("piPluginUi", panels);
823
- try {
824
- await context.plugin(gitTimeCapsulePlugin);
825
- const snapshot = await panels.snapshot();
826
- expect(snapshot[0]?.id).toBe("git-time-capsule-panel");
827
- expect(snapshot[0]?.error).toMatch(/exceeds.*256.*capsule/iu);
828
- } finally {
829
- await context.fiber.dispose();
830
- }
831
- });
832
-
833
- test("refuses a new capture before the bounded inventory becomes unusable", async () => {
834
- const workspace = await mkdtemp(join(tmpdir(), "pi-harness-capsule-full-inventory-workspace-"));
835
- const agentDir = await mkdtemp(join(tmpdir(), "pi-harness-capsule-full-inventory-agent-"));
836
- temporaryDirectories.push(workspace, agentDir);
837
- const directory = join(agentDir, "capsules");
838
- await mkdir(directory);
839
- await Promise.all(Array.from({ length: 256 }, (_, index) => writeFile(join(directory, `${String(index).padStart(4, "0")}.patch`), "x", "utf8")));
840
- await execFileAsync("git", ["init", "-q", "-b", "main"], { cwd: workspace });
841
- await execFileAsync("git", ["config", "user.email", "test@example.invalid"], { cwd: workspace });
842
- await execFileAsync("git", ["config", "user.name", "Pi Harness Test"], { cwd: workspace });
843
- await writeFile(join(workspace, "tracked.txt"), "before\n", "utf8");
844
- await execFileAsync("git", ["add", "tracked.txt"], { cwd: workspace });
845
- await execFileAsync("git", ["commit", "-qm", "fixture"], { cwd: workspace });
846
- await writeFile(join(workspace, "tracked.txt"), "after\n", "utf8");
847
- const context = new Context();
848
- const tools = new PiToolRegistry();
849
- const panels = new PiPluginUiRegistry();
850
- context.provide("piHarnessLaunch", { cwd: workspace, agentDir, args: [], requestExit() {} });
851
- context.provide("piTools", tools);
852
- context.provide("piPluginUi", panels);
853
- try {
854
- await context.plugin(gitTimeCapsulePlugin);
855
- const snapshot = tools.snapshot().customTools.find((candidate) => candidate.name === "git_snapshot")!;
856
-
857
- await expect(snapshot.execute("call-full-inventory", {}, undefined, undefined, {} as never)).rejects.toThrow(/inventory.*256.*limit/iu);
858
- await expect(readdir(directory)).resolves.toHaveLength(256);
859
- const panelSnapshot = await panels.snapshot();
860
- expect(panelSnapshot[0]?.error).toBeUndefined();
861
- expect(panelSnapshot).toMatchObject([{ data: { inventory: { total: 256 } } }]);
862
- } finally {
863
- await context.fiber.dispose();
864
- }
865
- });
866
-
867
- test("refuses a new capture before exceeding the directory entry scan limit", async () => {
868
- const workspace = await mkdtemp(join(tmpdir(), "pi-harness-capsule-full-directory-workspace-"));
869
- const agentDir = await mkdtemp(join(tmpdir(), "pi-harness-capsule-full-directory-agent-"));
870
- temporaryDirectories.push(workspace, agentDir);
871
- const directory = join(agentDir, "capsules");
872
- await mkdir(directory);
873
- await Promise.all(Array.from({ length: 4_096 }, (_, index) => writeFile(join(directory, `entry-${String(index).padStart(4, "0")}.tmp`), "x", "utf8")));
874
- await execFileAsync("git", ["init", "-q", "-b", "main"], { cwd: workspace });
875
- await execFileAsync("git", ["config", "user.email", "test@example.invalid"], { cwd: workspace });
876
- await execFileAsync("git", ["config", "user.name", "Pi Harness Test"], { cwd: workspace });
877
- await writeFile(join(workspace, "tracked.txt"), "before\n", "utf8");
878
- await execFileAsync("git", ["add", "tracked.txt"], { cwd: workspace });
879
- await execFileAsync("git", ["commit", "-qm", "fixture"], { cwd: workspace });
880
- await writeFile(join(workspace, "tracked.txt"), "after\n", "utf8");
881
- const context = new Context();
882
- const tools = new PiToolRegistry();
883
- context.provide("piHarnessLaunch", { cwd: workspace, agentDir, args: [], requestExit() {} });
884
- context.provide("piTools", tools);
885
- context.provide("piPluginUi", new PiPluginUiRegistry());
886
- try {
887
- await context.plugin(gitTimeCapsulePlugin);
888
- const snapshot = tools.snapshot().customTools.find((candidate) => candidate.name === "git_snapshot")!;
889
-
890
- await expect(snapshot.execute("call-full-directory", {}, undefined, undefined, {} as never)).rejects.toThrow(/directory.*4096.*limit/iu);
891
- await expect(readdir(directory)).resolves.toHaveLength(4_096);
892
- } finally {
893
- await context.fiber.dispose();
894
- }
895
- });
896
-
897
- test("reports when the recent capsule inventory is truncated", async () => {
898
- const workspace = await mkdtemp(join(tmpdir(), "pi-harness-capsule-truncated-workspace-"));
899
- const agentDir = await mkdtemp(join(tmpdir(), "pi-harness-capsule-truncated-agent-"));
900
- temporaryDirectories.push(workspace, agentDir);
901
- const directory = join(agentDir, "capsules");
902
- await mkdir(directory);
903
- await Promise.all(Array.from({ length: 21 }, (_, index) => writeFile(join(directory, `${String(index).padStart(4, "0")}.patch`), "x", "utf8")));
904
- const context = new Context();
905
- context.provide("piHarnessLaunch", { cwd: workspace, agentDir, args: [], requestExit() {} });
906
- context.provide("piTools", new PiToolRegistry());
907
- const panels = new PiPluginUiRegistry();
908
- context.provide("piPluginUi", panels);
909
- try {
910
- await context.plugin(gitTimeCapsulePlugin);
911
-
912
- const snapshot = await panels.snapshot();
913
- expect(snapshot[0]?.id).toBe("git-time-capsule-panel");
914
- const data = snapshot[0]?.data as { capsules: unknown[]; inventory: Record<string, unknown> };
915
- expect(data.capsules).toHaveLength(20);
916
- expect(data.inventory).toEqual({ total: 21, shown: 20, truncated: true, displayLimit: 20 });
917
- } finally {
918
- await context.fiber.dispose();
919
- }
920
- });
921
-
922
- test("uses the default timeout when configuration is not finite", async () => {
923
- const workspace = await mkdtemp(join(tmpdir(), "pi-harness-capsule-config-workspace-"));
924
- const agentDir = await mkdtemp(join(tmpdir(), "pi-harness-capsule-config-agent-"));
925
- temporaryDirectories.push(workspace, agentDir);
926
- const context = new Context();
927
- context.provide("piHarnessLaunch", { cwd: workspace, agentDir, args: [], requestExit() {} });
928
- context.provide("piTools", new PiToolRegistry());
929
- const panels = new PiPluginUiRegistry();
930
- context.provide("piPluginUi", panels);
931
- try {
932
- await context.plugin(gitTimeCapsulePlugin, { timeoutMs: Number.NaN });
933
-
934
- await expect(panels.snapshot()).resolves.toMatchObject([{ id: "git-time-capsule-panel", data: { timeoutMs: 15_000 } }]);
935
- } finally {
936
- await context.fiber.dispose();
937
- }
938
- });
939
-
940
- test("rejects unknown configuration before registering tools or panels", async () => {
941
- const workspace = await mkdtemp(join(tmpdir(), "pi-harness-capsule-unknown-config-workspace-"));
942
- const agentDir = await mkdtemp(join(tmpdir(), "pi-harness-capsule-unknown-config-agent-"));
943
- temporaryDirectories.push(workspace, agentDir);
944
- const context = new Context();
945
- const tools = new PiToolRegistry();
946
- const panels = new PiPluginUiRegistry();
947
- context.provide("piHarnessLaunch", { cwd: workspace, agentDir, args: [], requestExit() {} });
948
- context.provide("piTools", tools);
949
- context.provide("piPluginUi", panels);
950
- try {
951
- let failure: unknown;
952
- try {
953
- await context.plugin(gitTimeCapsulePlugin, { timeoutMs: 15_000, unexpected: true } as never);
954
- } catch (error) {
955
- failure = error;
956
- }
957
-
958
- expect(failure).toBeInstanceOf(Error);
959
- expect((failure as Error).message).toMatch(/unknown.*unexpected/iu);
960
-
961
- expect(tools.snapshot().customTools).toEqual([]);
962
- await expect(panels.snapshot()).resolves.toEqual([]);
963
- } finally {
964
- await context.fiber.dispose();
965
- }
966
- });
967
-
968
- test("rolls back both tools when panel registration fails", async () => {
969
- const workspace = await mkdtemp(join(tmpdir(), "pi-harness-capsule-panel-conflict-workspace-"));
970
- const agentDir = await mkdtemp(join(tmpdir(), "pi-harness-capsule-panel-conflict-agent-"));
971
- temporaryDirectories.push(workspace, agentDir);
972
- const context = new Context();
973
- const tools = new PiToolRegistry();
974
- const panels = new PiPluginUiRegistry();
975
- context.provide("piHarnessLaunch", { cwd: workspace, agentDir, args: [], requestExit() {} });
976
- context.provide("piTools", tools);
977
- context.provide("piPluginUi", panels);
978
- panels.register({ id: "git-time-capsule-panel", pluginId: "fixture", title: "Fixture", read: () => ({}) });
979
- try {
980
- await expect(context.plugin(gitTimeCapsulePlugin)).rejects.toThrow(/panel is already registered: git-time-capsule-panel/iu);
981
-
982
- expect(tools.snapshot().customTools).toEqual([]);
983
- await expect(panels.snapshot()).resolves.toMatchObject([{ id: "git-time-capsule-panel", pluginId: "fixture" }]);
984
- } finally {
985
- await context.fiber.dispose();
986
- }
987
- });
988
-
989
- test("rejects a clean worktree instead of creating an unusable empty capsule", async () => {
990
- const workspace = await mkdtemp(join(tmpdir(), "pi-harness-capsule-clean-workspace-"));
991
- const agentDir = await mkdtemp(join(tmpdir(), "pi-harness-capsule-clean-agent-"));
992
- temporaryDirectories.push(workspace, agentDir);
993
- await execFileAsync("git", ["init", "-q", "-b", "main"], { cwd: workspace });
994
- await execFileAsync("git", ["config", "user.email", "test@example.invalid"], { cwd: workspace });
995
- await execFileAsync("git", ["config", "user.name", "Pi Harness Test"], { cwd: workspace });
996
- await writeFile(join(workspace, "tracked.txt"), "clean\n", "utf8");
997
- await execFileAsync("git", ["add", "tracked.txt"], { cwd: workspace });
998
- await execFileAsync("git", ["commit", "-qm", "fixture"], { cwd: workspace });
999
- const context = new Context();
1000
- const tools = new PiToolRegistry();
1001
- context.provide("piHarnessLaunch", { cwd: workspace, agentDir, args: [], requestExit() {} });
1002
- context.provide("piTools", tools);
1003
- context.provide("piPluginUi", new PiPluginUiRegistry());
1004
- try {
1005
- await context.plugin(gitTimeCapsulePlugin);
1006
- const tool = tools.snapshot().customTools.find((candidate) => candidate.name === "git_snapshot")!;
1007
-
1008
- await expect(tool.execute("call-clean", {}, undefined, undefined, {} as never)).rejects.toThrow(/no tracked git changes/iu);
1009
- await expect(readdir(join(agentDir, "capsules"))).rejects.toMatchObject({ code: "ENOENT" });
1010
- } finally {
1011
- await context.fiber.dispose();
1012
- }
1013
- });
1014
-
1015
- test("does not capture staged changes that restore cannot safely remove from the index", async () => {
1016
- const workspace = await mkdtemp(join(tmpdir(), "pi-harness-capsule-staged-workspace-"));
1017
- const agentDir = await mkdtemp(join(tmpdir(), "pi-harness-capsule-staged-agent-"));
1018
- temporaryDirectories.push(workspace, agentDir);
1019
- await execFileAsync("git", ["init", "-q", "-b", "main"], { cwd: workspace });
1020
- await execFileAsync("git", ["config", "user.email", "test@example.invalid"], { cwd: workspace });
1021
- await execFileAsync("git", ["config", "user.name", "Pi Harness Test"], { cwd: workspace });
1022
- await writeFile(join(workspace, "tracked.txt"), "before\n", "utf8");
1023
- await execFileAsync("git", ["add", "tracked.txt"], { cwd: workspace });
1024
- await execFileAsync("git", ["commit", "-qm", "fixture"], { cwd: workspace });
1025
- await writeFile(join(workspace, "tracked.txt"), "staged\n", "utf8");
1026
- await execFileAsync("git", ["add", "tracked.txt"], { cwd: workspace });
1027
- const context = new Context();
1028
- const tools = new PiToolRegistry();
1029
- context.provide("piHarnessLaunch", { cwd: workspace, agentDir, args: [], requestExit() {} });
1030
- context.provide("piTools", tools);
1031
- context.provide("piPluginUi", new PiPluginUiRegistry());
1032
- try {
1033
- await context.plugin(gitTimeCapsulePlugin);
1034
- const tool = tools.snapshot().customTools.find((candidate) => candidate.name === "git_snapshot")!;
1035
-
1036
- await expect(tool.execute("call-staged", {}, undefined, undefined, {} as never)).rejects.toThrow(/staged.*excluded/iu);
1037
- const { stdout: staged } = await execFileAsync("git", ["diff", "--cached", "--name-only"], { cwd: workspace });
1038
- expect(staged.trim()).toBe("tracked.txt");
1039
- await expect(readdir(join(agentDir, "capsules"))).rejects.toMatchObject({ code: "ENOENT" });
1040
- } finally {
1041
- await context.fiber.dispose();
1042
- }
1043
- });
1044
-
1045
- test("does not write snapshots through a symbolic-link capsule directory", async () => {
1046
- if (process.platform === "win32") return;
1047
- const workspace = await mkdtemp(join(tmpdir(), "pi-harness-capsule-snapshot-directory-workspace-"));
1048
- const agentDir = await mkdtemp(join(tmpdir(), "pi-harness-capsule-snapshot-directory-agent-"));
1049
- const outside = await mkdtemp(join(tmpdir(), "pi-harness-capsule-snapshot-directory-outside-"));
1050
- temporaryDirectories.push(workspace, agentDir, outside);
1051
- await execFileAsync("git", ["init", "-q", "-b", "main"], { cwd: workspace });
1052
- await execFileAsync("git", ["config", "user.email", "test@example.invalid"], { cwd: workspace });
1053
- await execFileAsync("git", ["config", "user.name", "Pi Harness Test"], { cwd: workspace });
1054
- await writeFile(join(workspace, "tracked.txt"), "before\n", "utf8");
1055
- await execFileAsync("git", ["add", "tracked.txt"], { cwd: workspace });
1056
- await execFileAsync("git", ["commit", "-qm", "fixture"], { cwd: workspace });
1057
- await writeFile(join(workspace, "tracked.txt"), "after\n", "utf8");
1058
- await symlink(outside, join(agentDir, "capsules"));
1059
- const context = new Context();
1060
- const tools = new PiToolRegistry();
1061
- context.provide("piHarnessLaunch", { cwd: workspace, agentDir, args: [], requestExit() {} });
1062
- context.provide("piTools", tools);
1063
- context.provide("piPluginUi", new PiPluginUiRegistry());
1064
- try {
1065
- await context.plugin(gitTimeCapsulePlugin);
1066
- const tool = tools.snapshot().customTools.find((candidate) => candidate.name === "git_snapshot")!;
1067
-
1068
- await expect(tool.execute("call-directory-link", {}, undefined, undefined, {} as never)).rejects.toThrow(/directory.*symbolic link/iu);
1069
- await expect(readdir(outside)).resolves.toEqual([]);
1070
- } finally {
1071
- await context.fiber.dispose();
1072
- }
1073
- });
1074
-
1075
- test("rejects unexpected raw snapshot parameters without invoking accessors", async () => {
1076
- const workspace = await mkdtemp(join(tmpdir(), "pi-harness-capsule-snapshot-params-workspace-"));
1077
- const agentDir = await mkdtemp(join(tmpdir(), "pi-harness-capsule-snapshot-params-agent-"));
1078
- temporaryDirectories.push(workspace, agentDir);
1079
- const context = new Context();
1080
- const tools = new PiToolRegistry();
1081
- const panels = new PiPluginUiRegistry();
1082
- context.provide("piHarnessLaunch", { cwd: workspace, agentDir, args: [], requestExit() {} });
1083
- context.provide("piTools", tools);
1084
- context.provide("piPluginUi", panels);
1085
- let accessed = false;
1086
- const rawParams = Object.create(null) as Record<string, unknown>;
1087
- Object.defineProperty(rawParams, "unexpected", {
1088
- enumerable: true,
1089
- get() {
1090
- accessed = true;
1091
- throw new Error("accessor executed");
1092
- },
1093
- });
1094
- try {
1095
- await context.plugin(gitTimeCapsulePlugin);
1096
- const tool = tools.snapshot().customTools.find((candidate) => candidate.name === "git_snapshot")!;
1097
-
1098
- await expect(tool.execute("call-params", rawParams, undefined, undefined, {} as never)).rejects.toThrow(/parameters.*unknown property/iu);
1099
- expect(accessed).toBe(false);
1100
- await expect(panels.snapshot()).resolves.toMatchObject([
1101
- { data: { latest: { action: "capture", status: "failed", error: "Git snapshot parameters contains an unknown property" } } },
1102
- ]);
1103
- } finally {
1104
- await context.fiber.dispose();
1105
- }
1106
- });
1107
-
1108
- test("rejects inaccessible or non-plain tool parameter objects", async () => {
1109
- const workspace = await mkdtemp(join(tmpdir(), "pi-harness-capsule-hostile-params-workspace-"));
1110
- const agentDir = await mkdtemp(join(tmpdir(), "pi-harness-capsule-hostile-params-agent-"));
1111
- temporaryDirectories.push(workspace, agentDir);
1112
- const context = new Context();
1113
- const tools = new PiToolRegistry();
1114
- context.provide("piHarnessLaunch", { cwd: workspace, agentDir, args: [], requestExit() {} });
1115
- context.provide("piTools", tools);
1116
- context.provide("piPluginUi", new PiPluginUiRegistry());
1117
- const revocable = Proxy.revocable({}, {});
1118
- revocable.revoke();
1119
- try {
1120
- await context.plugin(gitTimeCapsulePlugin);
1121
- const snapshot = tools.snapshot().customTools.find((candidate) => candidate.name === "git_snapshot")!;
1122
- const restore = tools.snapshot().customTools.find((candidate) => candidate.name === "git_restore")!;
1123
-
1124
- await expect(snapshot.execute("call-revoked", revocable.proxy, undefined, undefined, {} as never)).rejects.toThrow(
1125
- /parameters.*accessible plain object/iu,
1126
- );
1127
- await expect(restore.execute("call-array", [], undefined, undefined, {} as never)).rejects.toThrow(/parameters.*object/iu);
1128
- await expect(snapshot.execute("call-instance", new Date(), undefined, undefined, {} as never)).rejects.toThrow(/parameters.*plain object/iu);
1129
- } finally {
1130
- await context.fiber.dispose();
1131
- }
1132
- });
1133
-
1134
- test("publishes sequential tools with closed parameter schemas", async () => {
1135
- const workspace = await mkdtemp(join(tmpdir(), "pi-harness-capsule-tool-contract-workspace-"));
1136
- const agentDir = await mkdtemp(join(tmpdir(), "pi-harness-capsule-tool-contract-agent-"));
1137
- temporaryDirectories.push(workspace, agentDir);
1138
- const context = new Context();
1139
- const tools = new PiToolRegistry();
1140
- context.provide("piHarnessLaunch", { cwd: workspace, agentDir, args: [], requestExit() {} });
1141
- context.provide("piTools", tools);
1142
- context.provide("piPluginUi", new PiPluginUiRegistry());
1143
- try {
1144
- await context.plugin(gitTimeCapsulePlugin);
1145
-
1146
- expect(tools.snapshot().customTools).toMatchObject([
1147
- { name: "git_snapshot", executionMode: "sequential", parameters: { additionalProperties: false } },
1148
- { name: "git_restore", executionMode: "sequential", parameters: { additionalProperties: false } },
1149
- ]);
1150
- } finally {
1151
- await context.fiber.dispose();
1152
- }
1153
- });
1154
-
1155
- test("counts tracked changes without invoking git status or scanning untracked files", async () => {
1156
- if (process.platform === "win32") return;
1157
- const workspace = await mkdtemp(join(tmpdir(), "pi-harness-capsule-no-status-workspace-"));
1158
- const agentDir = await mkdtemp(join(tmpdir(), "pi-harness-capsule-no-status-agent-"));
1159
- temporaryDirectories.push(workspace, agentDir);
1160
- await execFileAsync("git", ["init", "-q", "-b", "main"], { cwd: workspace });
1161
- await execFileAsync("git", ["config", "user.email", "test@example.invalid"], { cwd: workspace });
1162
- await execFileAsync("git", ["config", "user.name", "Pi Harness Test"], { cwd: workspace });
1163
- await writeFile(join(workspace, "tracked.txt"), "before\n", "utf8");
1164
- await execFileAsync("git", ["add", "tracked.txt"], { cwd: workspace });
1165
- await execFileAsync("git", ["commit", "-qm", "fixture"], { cwd: workspace });
1166
- await writeFile(join(workspace, "tracked.txt"), "after\n", "utf8");
1167
- await mkdir(join(workspace, "untracked"));
1168
- await writeFile(join(workspace, "untracked", "ignored.txt"), "not captured\n", "utf8");
1169
- const { stdout } = await execFileAsync("which", ["git"]);
1170
- const bin = join(workspace, "bin");
1171
- await mkdir(bin);
1172
- await writeFile(
1173
- join(bin, "git"),
1174
- '#!/bin/sh\nif [ "$1" = "status" ]; then echo "git status must not be used" >&2; exit 91; fi\nexec "$REAL_GIT" "$@"\n',
1175
- "utf8",
1176
- );
1177
- await chmod(join(bin, "git"), 0o700);
1178
- const originalPath = process.env.PATH;
1179
- const originalRealGit = process.env.REAL_GIT;
1180
- process.env.REAL_GIT = stdout.trim();
1181
- process.env.PATH = `${bin}${delimiter}${originalPath ?? ""}`;
1182
- const context = new Context();
1183
- const tools = new PiToolRegistry();
1184
- context.provide("piHarnessLaunch", { cwd: workspace, agentDir, args: [], requestExit() {} });
1185
- context.provide("piTools", tools);
1186
- context.provide("piPluginUi", new PiPluginUiRegistry());
1187
- try {
1188
- await context.plugin(gitTimeCapsulePlugin);
1189
- const tool = tools.snapshot().customTools.find((candidate) => candidate.name === "git_snapshot")!;
1190
-
1191
- await expect(tool.execute("call-no-status", {}, undefined, undefined, {} as never)).resolves.toMatchObject({ details: { files: 1 } });
1192
- } finally {
1193
- process.env.PATH = originalPath;
1194
- if (originalRealGit === undefined) delete process.env.REAL_GIT;
1195
- else process.env.REAL_GIT = originalRealGit;
1196
- await context.fiber.dispose();
1197
- }
1198
- });
1199
-
1200
- test("counts files from the captured patch instead of a racing worktree query", async () => {
1201
- if (process.platform === "win32") return;
1202
- const workspace = await mkdtemp(join(tmpdir(), "pi-harness-capsule-count-race-workspace-"));
1203
- const agentDir = await mkdtemp(join(tmpdir(), "pi-harness-capsule-count-race-agent-"));
1204
- temporaryDirectories.push(workspace, agentDir);
1205
- await execFileAsync("git", ["init", "-q", "-b", "main"], { cwd: workspace });
1206
- await execFileAsync("git", ["config", "user.email", "test@example.invalid"], { cwd: workspace });
1207
- await execFileAsync("git", ["config", "user.name", "Pi Harness Test"], { cwd: workspace });
1208
- await writeFile(join(workspace, "tracked.txt"), "before\n", "utf8");
1209
- await execFileAsync("git", ["add", "tracked.txt"], { cwd: workspace });
1210
- await execFileAsync("git", ["commit", "-qm", "fixture"], { cwd: workspace });
1211
- await writeFile(join(workspace, "tracked.txt"), "after\n", "utf8");
1212
- const { stdout: realGit } = await execFileAsync("which", ["git"]);
1213
- const bin = join(workspace, "bin");
1214
- await mkdir(bin);
1215
- await writeFile(join(bin, "git"), '#!/bin/sh\ncase " $* " in\n *" --name-only "*) exit 0 ;;\nesac\nexec "$CAPSULE_REAL_GIT" "$@"\n', "utf8");
1216
- await chmod(join(bin, "git"), 0o700);
1217
- const originalPath = process.env.PATH;
1218
- const originalRealGit = process.env.CAPSULE_REAL_GIT;
1219
- process.env.PATH = `${bin}${delimiter}${originalPath ?? ""}`;
1220
- process.env.CAPSULE_REAL_GIT = realGit.trim();
1221
- const context = new Context();
1222
- const tools = new PiToolRegistry();
1223
- context.provide("piHarnessLaunch", { cwd: workspace, agentDir, args: [], requestExit() {} });
1224
- context.provide("piTools", tools);
1225
- context.provide("piPluginUi", new PiPluginUiRegistry());
1226
- try {
1227
- await context.plugin(gitTimeCapsulePlugin);
1228
- const tool = tools.snapshot().customTools.find((candidate) => candidate.name === "git_snapshot")!;
1229
-
1230
- await expect(tool.execute("call-count-race", {}, undefined, undefined, {} as never)).resolves.toMatchObject({ details: { files: 1 } });
1231
- } finally {
1232
- process.env.PATH = originalPath;
1233
- if (originalRealGit === undefined) delete process.env.CAPSULE_REAL_GIT;
1234
- else process.env.CAPSULE_REAL_GIT = originalRealGit;
1235
- await context.fiber.dispose();
1236
- }
1237
- });
1238
-
1239
- test("captures an applyable patch without invoking repository textconv drivers", async () => {
1240
- if (process.platform === "win32") return;
1241
- const workspace = await mkdtemp(join(tmpdir(), "pi-harness-capsule-textconv-workspace-"));
1242
- const agentDir = await mkdtemp(join(tmpdir(), "pi-harness-capsule-textconv-agent-"));
1243
- temporaryDirectories.push(workspace, agentDir);
1244
- await execFileAsync("git", ["init", "-q", "-b", "main"], { cwd: workspace });
1245
- await execFileAsync("git", ["config", "user.email", "test@example.invalid"], { cwd: workspace });
1246
- await execFileAsync("git", ["config", "user.name", "Pi Harness Test"], { cwd: workspace });
1247
- const driver = join(workspace, "textconv-driver");
1248
- const invoked = join(workspace, "textconv-invoked");
1249
- await writeFile(driver, '#!/bin/sh\n: > "$CAPSULE_TEXTCONV_INVOKED"\ncat "$1"\n', "utf8");
1250
- await chmod(driver, 0o700);
1251
- await execFileAsync("git", ["config", "diff.capsule-fixture.textconv", driver], { cwd: workspace });
1252
- await writeFile(join(workspace, ".gitattributes"), "*.data diff=capsule-fixture\n", "utf8");
1253
- await writeFile(join(workspace, "tracked.data"), "before\n", "utf8");
1254
- await execFileAsync("git", ["add", ".gitattributes", "tracked.data"], { cwd: workspace });
1255
- await execFileAsync("git", ["commit", "-qm", "fixture"], { cwd: workspace });
1256
- await writeFile(join(workspace, "tracked.data"), "after\n", "utf8");
1257
- const originalInvoked = process.env.CAPSULE_TEXTCONV_INVOKED;
1258
- process.env.CAPSULE_TEXTCONV_INVOKED = invoked;
1259
- const context = new Context();
1260
- const tools = new PiToolRegistry();
1261
- context.provide("piHarnessLaunch", { cwd: workspace, agentDir, args: [], requestExit() {} });
1262
- context.provide("piTools", tools);
1263
- context.provide("piPluginUi", new PiPluginUiRegistry());
1264
- try {
1265
- await context.plugin(gitTimeCapsulePlugin);
1266
- const snapshot = tools.snapshot().customTools.find((candidate) => candidate.name === "git_snapshot")!;
1267
- const restore = tools.snapshot().customTools.find((candidate) => candidate.name === "git_restore")!;
1268
-
1269
- await expect(snapshot.execute("call-textconv-capture", {}, undefined, undefined, {} as never)).resolves.toMatchObject({ details: { files: 1 } });
1270
- await expect(readFile(invoked, "utf8")).rejects.toMatchObject({ code: "ENOENT" });
1271
- const names = await readdir(join(agentDir, "capsules"));
1272
- await restore.execute("call-textconv-restore", { name: names[0], confirm: true }, undefined, undefined, {} as never);
1273
- await expect(readFile(join(workspace, "tracked.data"), "utf8")).resolves.toBe("before\n");
1274
- } finally {
1275
- if (originalInvoked === undefined) delete process.env.CAPSULE_TEXTCONV_INVOKED;
1276
- else process.env.CAPSULE_TEXTCONV_INVOKED = originalInvoked;
1277
- await context.fiber.dispose();
1278
- }
1279
- });
1280
-
1281
- test("does not let inherited Git environment redirect capsule commands", async () => {
1282
- const workspace = await mkdtemp(join(tmpdir(), "pi-harness-capsule-env-workspace-"));
1283
- const decoy = await mkdtemp(join(tmpdir(), "pi-harness-capsule-env-decoy-"));
1284
- const agentDir = await mkdtemp(join(tmpdir(), "pi-harness-capsule-env-agent-"));
1285
- temporaryDirectories.push(workspace, decoy, agentDir);
1286
- for (const repository of [workspace, decoy]) {
1287
- await execFileAsync("git", ["init", "-q", "-b", "main"], { cwd: repository });
1288
- await execFileAsync("git", ["config", "user.email", "test@example.invalid"], { cwd: repository });
1289
- await execFileAsync("git", ["config", "user.name", "Pi Harness Test"], { cwd: repository });
1290
- }
1291
- await writeFile(join(workspace, "workspace.txt"), "before\n", "utf8");
1292
- await execFileAsync("git", ["add", "workspace.txt"], { cwd: workspace });
1293
- await execFileAsync("git", ["commit", "-qm", "fixture"], { cwd: workspace });
1294
- await writeFile(join(workspace, "workspace.txt"), "after\n", "utf8");
1295
- await writeFile(join(decoy, "decoy.txt"), "before\n", "utf8");
1296
- await execFileAsync("git", ["add", "decoy.txt"], { cwd: decoy });
1297
- await execFileAsync("git", ["commit", "-qm", "fixture"], { cwd: decoy });
1298
- await writeFile(join(decoy, "decoy.txt"), "after\n", "utf8");
1299
- const originalGitDir = process.env.GIT_DIR;
1300
- const originalGitWorkTree = process.env.GIT_WORK_TREE;
1301
- process.env.GIT_DIR = join(decoy, ".git");
1302
- process.env.GIT_WORK_TREE = decoy;
1303
- const context = new Context();
1304
- const tools = new PiToolRegistry();
1305
- context.provide("piHarnessLaunch", { cwd: workspace, agentDir, args: [], requestExit() {} });
1306
- context.provide("piTools", tools);
1307
- context.provide("piPluginUi", new PiPluginUiRegistry());
1308
- try {
1309
- await context.plugin(gitTimeCapsulePlugin);
1310
- const tool = tools.snapshot().customTools.find((candidate) => candidate.name === "git_snapshot")!;
1311
-
1312
- await expect(tool.execute("call-env", {}, undefined, undefined, {} as never)).resolves.toMatchObject({ details: { files: 1 } });
1313
- const names = await readdir(join(agentDir, "capsules"));
1314
- expect(names).toHaveLength(1);
1315
- const patch = await readFile(join(agentDir, "capsules", names[0]!), "utf8");
1316
- expect(patch).toContain("workspace.txt");
1317
- expect(patch).not.toContain("decoy.txt");
1318
- } finally {
1319
- if (originalGitDir === undefined) delete process.env.GIT_DIR;
1320
- else process.env.GIT_DIR = originalGitDir;
1321
- if (originalGitWorkTree === undefined) delete process.env.GIT_WORK_TREE;
1322
- else process.env.GIT_WORK_TREE = originalGitWorkTree;
1323
- await context.fiber.dispose();
1324
- }
1325
- });
1326
-
1327
- test("does not let inherited Git config injection block a valid restore", async () => {
1328
- const workspace = await mkdtemp(join(tmpdir(), "pi-harness-capsule-config-env-workspace-"));
1329
- const agentDir = await mkdtemp(join(tmpdir(), "pi-harness-capsule-config-env-agent-"));
1330
- temporaryDirectories.push(workspace, agentDir);
1331
- await execFileAsync("git", ["init", "-q", "-b", "main"], { cwd: workspace });
1332
- await execFileAsync("git", ["config", "user.email", "test@example.invalid"], { cwd: workspace });
1333
- await execFileAsync("git", ["config", "user.name", "Pi Harness Test"], { cwd: workspace });
1334
- await writeFile(join(workspace, "workspace.txt"), "before \n", "utf8");
1335
- await execFileAsync("git", ["add", "workspace.txt"], { cwd: workspace });
1336
- await execFileAsync("git", ["commit", "-qm", "fixture"], { cwd: workspace });
1337
- await writeFile(join(workspace, "workspace.txt"), "after\n", "utf8");
1338
- const original = {
1339
- count: process.env.GIT_CONFIG_COUNT,
1340
- key: process.env.GIT_CONFIG_KEY_0,
1341
- value: process.env.GIT_CONFIG_VALUE_0,
1342
- };
1343
- process.env.GIT_CONFIG_COUNT = "1";
1344
- process.env.GIT_CONFIG_KEY_0 = "apply.whitespace";
1345
- process.env.GIT_CONFIG_VALUE_0 = "error-all";
1346
- const context = new Context();
1347
- const tools = new PiToolRegistry();
1348
- context.provide("piHarnessLaunch", { cwd: workspace, agentDir, args: [], requestExit() {} });
1349
- context.provide("piTools", tools);
1350
- context.provide("piPluginUi", new PiPluginUiRegistry());
1351
- try {
1352
- await context.plugin(gitTimeCapsulePlugin);
1353
- const snapshot = tools.snapshot().customTools.find((candidate) => candidate.name === "git_snapshot")!;
1354
- const restore = tools.snapshot().customTools.find((candidate) => candidate.name === "git_restore")!;
1355
-
1356
- await expect(snapshot.execute("call-config-env", {}, undefined, undefined, {} as never)).resolves.toMatchObject({ details: { files: 1 } });
1357
- const names = await readdir(join(agentDir, "capsules"));
1358
- await expect(restore.execute("call-config-env-restore", { name: names[0], confirm: true }, undefined, undefined, {} as never)).resolves.toMatchObject({
1359
- details: { restored: true },
1360
- });
1361
- await expect(readFile(join(workspace, "workspace.txt"), "utf8")).resolves.toBe("before \n");
1362
- } finally {
1363
- for (const [name, value] of [
1364
- ["GIT_CONFIG_COUNT", original.count],
1365
- ["GIT_CONFIG_KEY_0", original.key],
1366
- ["GIT_CONFIG_VALUE_0", original.value],
1367
- ] as const) {
1368
- if (value === undefined) delete process.env[name];
1369
- else process.env[name] = value;
1370
- }
1371
- await context.fiber.dispose();
1372
- }
1373
- });
1374
-
1375
- test("round-trips patches containing non-UTF-8 Git path bytes", async () => {
1376
- if (process.platform === "win32") return;
1377
- const workspace = await mkdtemp(join(tmpdir(), "pi-harness-capsule-path-bytes-workspace-"));
1378
- const agentDir = await mkdtemp(join(tmpdir(), "pi-harness-capsule-path-bytes-agent-"));
1379
- temporaryDirectories.push(workspace, agentDir);
1380
- const bin = join(workspace, "bin");
1381
- await mkdir(bin);
1382
- await writeFile(
1383
- join(bin, "git"),
1384
- '#!/bin/sh\nif [ "$1" = "rev-parse" ]; then printf "true\\n"; exit 0; fi\ncase " $* " in\n *" --name-only "*) printf "fixture.txt\\000" ;;\n *) printf "diff-prefix\\377diff-suffix\\n" ;;\nesac\n',
1385
- "utf8",
1386
- );
1387
- await chmod(join(bin, "git"), 0o700);
1388
- const originalPath = process.env.PATH;
1389
- process.env.PATH = `${bin}${delimiter}${originalPath ?? ""}`;
1390
- const context = new Context();
1391
- const tools = new PiToolRegistry();
1392
- context.provide("piHarnessLaunch", { cwd: workspace, agentDir, args: [], requestExit() {} });
1393
- context.provide("piTools", tools);
1394
- context.provide("piPluginUi", new PiPluginUiRegistry());
1395
- try {
1396
- await context.plugin(gitTimeCapsulePlugin);
1397
- const snapshot = tools.snapshot().customTools.find((candidate) => candidate.name === "git_snapshot")!;
1398
-
1399
- await snapshot.execute("call-path-bytes-capture", {}, undefined, undefined, {} as never);
1400
- const names = await readdir(join(agentDir, "capsules"));
1401
- expect(names).toHaveLength(1);
1402
- await expect(readFile(join(agentDir, "capsules", names[0]!))).resolves.toEqual(
1403
- Buffer.from([...Buffer.from("diff-prefix"), 0xff, ...Buffer.from("diff-suffix\n")]),
1404
- );
1405
- } finally {
1406
- process.env.PATH = originalPath;
1407
- await context.fiber.dispose();
1408
- }
1409
- });
1410
-
1411
- test("does not publish a capsule when the captured patch cannot be validated", async () => {
1412
- if (process.platform === "win32") return;
1413
- const workspace = await mkdtemp(join(tmpdir(), "pi-harness-capsule-invalid-capture-workspace-"));
1414
- const agentDir = await mkdtemp(join(tmpdir(), "pi-harness-capsule-invalid-capture-agent-"));
1415
- temporaryDirectories.push(workspace, agentDir);
1416
- const bin = join(workspace, "bin");
1417
- await mkdir(bin);
1418
- await writeFile(
1419
- join(bin, "git"),
1420
- '#!/bin/sh\nif [ "$1" = "rev-parse" ]; then printf "true\\n"; exit 0; fi\ncase " $* " in\n *" apply --numstat "*) printf "invalid captured patch\\n" >&2; exit 3 ;;\n *) printf "not a valid patch\\n" ;;\nesac\n',
1421
- "utf8",
1422
- );
1423
- await chmod(join(bin, "git"), 0o700);
1424
- const originalPath = process.env.PATH;
1425
- process.env.PATH = `${bin}${delimiter}${originalPath ?? ""}`;
1426
- const context = new Context();
1427
- const tools = new PiToolRegistry();
1428
- context.provide("piHarnessLaunch", { cwd: workspace, agentDir, args: [], requestExit() {} });
1429
- context.provide("piTools", tools);
1430
- context.provide("piPluginUi", new PiPluginUiRegistry());
1431
- try {
1432
- await context.plugin(gitTimeCapsulePlugin);
1433
- const snapshot = tools.snapshot().customTools.find((candidate) => candidate.name === "git_snapshot")!;
1434
-
1435
- await expect(snapshot.execute("call-invalid-capture", {}, undefined, undefined, {} as never)).rejects.toThrow(/invalid captured patch/iu);
1436
- await expect(readdir(join(agentDir, "capsules"))).resolves.toEqual([]);
1437
- } finally {
1438
- process.env.PATH = originalPath;
1439
- await context.fiber.dispose();
1440
- }
1441
- });
1442
-
1443
- test("does not overwrite a capsule created concurrently at publication", async () => {
1444
- if (process.platform === "win32") return;
1445
- const workspace = await mkdtemp(join(tmpdir(), "pi-harness-capsule-publish-race-workspace-"));
1446
- const agentDir = await mkdtemp(join(tmpdir(), "pi-harness-capsule-publish-race-agent-"));
1447
- temporaryDirectories.push(workspace, agentDir);
1448
- const bin = join(workspace, "bin");
1449
- await mkdir(bin);
1450
- await writeFile(
1451
- join(bin, "git"),
1452
- '#!/bin/sh\nif [ "$1" = "rev-parse" ]; then printf "true\\n"; exit 0; fi\ncase " $* " in\n *" apply --numstat "*)\n for argument do temporary="$argument"; done\n directory=${temporary%/*}\n base=${temporary##*/}\n remainder=${base#.}\n name=${remainder%.*.tmp}\n printf "concurrent capsule\\n" > "$directory/$name"\n printf "1\\t1\\tfixture.txt\\n"\n exit 0\n ;;\n *) printf "captured patch\\n" ;;\nesac\n',
1453
- "utf8",
1454
- );
1455
- await chmod(join(bin, "git"), 0o700);
1456
- const originalPath = process.env.PATH;
1457
- process.env.PATH = `${bin}${delimiter}${originalPath ?? ""}`;
1458
- const context = new Context();
1459
- const tools = new PiToolRegistry();
1460
- context.provide("piHarnessLaunch", { cwd: workspace, agentDir, args: [], requestExit() {} });
1461
- context.provide("piTools", tools);
1462
- context.provide("piPluginUi", new PiPluginUiRegistry());
1463
- try {
1464
- await context.plugin(gitTimeCapsulePlugin);
1465
- const snapshot = tools.snapshot().customTools.find((candidate) => candidate.name === "git_snapshot")!;
1466
-
1467
- await expect(snapshot.execute("call-publish-race", {}, undefined, undefined, {} as never)).rejects.toThrow(/exist/iu);
1468
- const names = await readdir(join(agentDir, "capsules"));
1469
- expect(names).toHaveLength(1);
1470
- await expect(readFile(join(agentDir, "capsules", names[0]!), "utf8")).resolves.toBe("concurrent capsule\n");
1471
- } finally {
1472
- process.env.PATH = originalPath;
1473
- await context.fiber.dispose();
1474
- }
1475
- });
1476
- });