@pi-harness/pi-harness 0.1.21 → 0.1.23

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 (289) hide show
  1. package/README.md +1 -1
  2. package/apps/web/dist/assets/index-Bo9CNI_U.js +22 -0
  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 +18 -5
  6. package/apps/web/server-dist/bin.js.map +1 -1
  7. package/apps/web/src/server/bin.ts +18 -5
  8. package/apps/web/test/bin.test.ts +90 -0
  9. package/node_modules/@pi-harness/api-gateway/dist/index.d.ts.map +1 -1
  10. package/node_modules/@pi-harness/api-gateway/dist/index.js +204 -66
  11. package/node_modules/@pi-harness/api-gateway/dist/index.js.map +1 -1
  12. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/agent-teams.json +3 -12
  13. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/anchored-standard.json +3 -10
  14. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/annotation.json +3 -8
  15. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/archify.json +3 -12
  16. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/at-file.json +2 -6
  17. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/auto-mode.json +3 -10
  18. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/better-sidebar.json +3 -13
  19. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/browser-fetch.json +2 -5
  20. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/browser-session.json +2 -6
  21. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/canvas-draw.json +3 -9
  22. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/change-verifier.json +3 -11
  23. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/cleaner.json +2 -6
  24. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/cli-notifier.json +3 -11
  25. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/code2skill.json +3 -10
  26. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/colleague-skill.json +3 -10
  27. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/context-doctor.json +2 -8
  28. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/context.json +2 -7
  29. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/cost-meter.json +3 -12
  30. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/dependency-checker.json +2 -6
  31. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/docker-sandbox.json +2 -6
  32. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/fail-logger.json +2 -7
  33. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/genui.json +3 -11
  34. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/git-time-capsule.json +2 -6
  35. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/graph-memory.json +3 -12
  36. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/history-compressor.json +3 -11
  37. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/hol-guard.json +4 -11
  38. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/i18n-pair.json +2 -6
  39. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/image-compressor.json +3 -10
  40. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/llm-verifier.json +3 -13
  41. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/mcp-client.json +2 -6
  42. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/mcp-panel.json +3 -10
  43. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/memory.json +3 -9
  44. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/mirage-bridge.json +3 -11
  45. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/mock-server.json +3 -10
  46. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/modlens.json +3 -9
  47. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/module-search.json +3 -11
  48. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/obsidian-sync.json +3 -10
  49. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/openpets.json +2 -7
  50. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/plan-execute.json +3 -10
  51. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/plugin-check.json +3 -10
  52. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/plugin-dev.json +3 -12
  53. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/plugin-finder.json +3 -11
  54. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/plugin-radar.json +3 -9
  55. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/plugin-stars.json +2 -6
  56. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/prompt-guard.json +3 -9
  57. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/prompt-library.json +3 -11
  58. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/readme-gen.json +2 -7
  59. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/recall-unread.json +2 -7
  60. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/reverse-skill.json +3 -11
  61. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/reviewer-bot.json +3 -10
  62. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/runtime-doctor.json +3 -13
  63. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/secure-audit.json +3 -11
  64. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/session-bookmarks.json +3 -11
  65. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/session-bridge.json +2 -7
  66. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/session-compare.json +3 -11
  67. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/session-export.json +3 -11
  68. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/session-insights.json +2 -7
  69. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/session-search.json +3 -11
  70. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/skill-catalog.json +3 -12
  71. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/skill-guard.json +2 -6
  72. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/sql-lens.json +2 -6
  73. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/synapse.json +3 -9
  74. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/tab-manager.json +3 -10
  75. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/taskboard.json +3 -10
  76. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/telemetry-blocker.json +3 -10
  77. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/test-harness.json +2 -6
  78. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/theme-studio.json +3 -11
  79. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/token-guard.json +2 -7
  80. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/turn-rewind.json +2 -7
  81. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/undo-savepoint.json +3 -9
  82. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/vision-toolkit.json +2 -6
  83. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/web-research.json +3 -10
  84. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/workspace-navigator.json +3 -13
  85. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/workspace-search.json +3 -10
  86. package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/yaml-validator.json +2 -6
  87. package/node_modules/@pi-harness/api-gateway/package.json +1 -1
  88. package/node_modules/@pi-harness/cli/dist/node-stdio.d.ts.map +1 -1
  89. package/node_modules/@pi-harness/cli/dist/node-stdio.js +3 -1
  90. package/node_modules/@pi-harness/cli/dist/node-stdio.js.map +1 -1
  91. package/node_modules/@pi-harness/cli/dist/relaunch.d.ts.map +1 -1
  92. package/node_modules/@pi-harness/cli/dist/relaunch.js +6 -1
  93. package/node_modules/@pi-harness/cli/dist/relaunch.js.map +1 -1
  94. package/node_modules/@pi-harness/cli/package.json +1 -1
  95. package/node_modules/@pi-harness/host-webserver/dist/index.d.ts.map +1 -1
  96. package/node_modules/@pi-harness/host-webserver/dist/index.js +52 -3
  97. package/node_modules/@pi-harness/host-webserver/dist/index.js.map +1 -1
  98. package/node_modules/@pi-harness/host-webserver/package.json +1 -1
  99. package/node_modules/@pi-harness/web-app/dist/index.d.ts +3 -0
  100. package/node_modules/@pi-harness/web-app/dist/index.d.ts.map +1 -1
  101. package/node_modules/@pi-harness/web-app/dist/index.js +9 -5
  102. package/node_modules/@pi-harness/web-app/dist/index.js.map +1 -1
  103. package/node_modules/@pi-harness/web-app/package.json +1 -1
  104. package/package.json +7 -7
  105. package/packages/api-gateway/dist/index.d.ts.map +1 -1
  106. package/packages/api-gateway/dist/index.js +204 -66
  107. package/packages/api-gateway/dist/index.js.map +1 -1
  108. package/packages/api-gateway/dist/marketplace-entries/official/agent-teams.json +3 -12
  109. package/packages/api-gateway/dist/marketplace-entries/official/anchored-standard.json +3 -10
  110. package/packages/api-gateway/dist/marketplace-entries/official/annotation.json +3 -8
  111. package/packages/api-gateway/dist/marketplace-entries/official/archify.json +3 -12
  112. package/packages/api-gateway/dist/marketplace-entries/official/at-file.json +2 -6
  113. package/packages/api-gateway/dist/marketplace-entries/official/auto-mode.json +3 -10
  114. package/packages/api-gateway/dist/marketplace-entries/official/better-sidebar.json +3 -13
  115. package/packages/api-gateway/dist/marketplace-entries/official/browser-fetch.json +2 -5
  116. package/packages/api-gateway/dist/marketplace-entries/official/browser-session.json +2 -6
  117. package/packages/api-gateway/dist/marketplace-entries/official/canvas-draw.json +3 -9
  118. package/packages/api-gateway/dist/marketplace-entries/official/change-verifier.json +3 -11
  119. package/packages/api-gateway/dist/marketplace-entries/official/cleaner.json +2 -6
  120. package/packages/api-gateway/dist/marketplace-entries/official/cli-notifier.json +3 -11
  121. package/packages/api-gateway/dist/marketplace-entries/official/code2skill.json +3 -10
  122. package/packages/api-gateway/dist/marketplace-entries/official/colleague-skill.json +3 -10
  123. package/packages/api-gateway/dist/marketplace-entries/official/context-doctor.json +2 -8
  124. package/packages/api-gateway/dist/marketplace-entries/official/context.json +2 -7
  125. package/packages/api-gateway/dist/marketplace-entries/official/cost-meter.json +3 -12
  126. package/packages/api-gateway/dist/marketplace-entries/official/dependency-checker.json +2 -6
  127. package/packages/api-gateway/dist/marketplace-entries/official/docker-sandbox.json +2 -6
  128. package/packages/api-gateway/dist/marketplace-entries/official/fail-logger.json +2 -7
  129. package/packages/api-gateway/dist/marketplace-entries/official/genui.json +3 -11
  130. package/packages/api-gateway/dist/marketplace-entries/official/git-time-capsule.json +2 -6
  131. package/packages/api-gateway/dist/marketplace-entries/official/graph-memory.json +3 -12
  132. package/packages/api-gateway/dist/marketplace-entries/official/history-compressor.json +3 -11
  133. package/packages/api-gateway/dist/marketplace-entries/official/hol-guard.json +4 -11
  134. package/packages/api-gateway/dist/marketplace-entries/official/i18n-pair.json +2 -6
  135. package/packages/api-gateway/dist/marketplace-entries/official/image-compressor.json +3 -10
  136. package/packages/api-gateway/dist/marketplace-entries/official/llm-verifier.json +3 -13
  137. package/packages/api-gateway/dist/marketplace-entries/official/mcp-client.json +2 -6
  138. package/packages/api-gateway/dist/marketplace-entries/official/mcp-panel.json +3 -10
  139. package/packages/api-gateway/dist/marketplace-entries/official/memory.json +3 -9
  140. package/packages/api-gateway/dist/marketplace-entries/official/mirage-bridge.json +3 -11
  141. package/packages/api-gateway/dist/marketplace-entries/official/mock-server.json +3 -10
  142. package/packages/api-gateway/dist/marketplace-entries/official/modlens.json +3 -9
  143. package/packages/api-gateway/dist/marketplace-entries/official/module-search.json +3 -11
  144. package/packages/api-gateway/dist/marketplace-entries/official/obsidian-sync.json +3 -10
  145. package/packages/api-gateway/dist/marketplace-entries/official/openpets.json +2 -7
  146. package/packages/api-gateway/dist/marketplace-entries/official/plan-execute.json +3 -10
  147. package/packages/api-gateway/dist/marketplace-entries/official/plugin-check.json +3 -10
  148. package/packages/api-gateway/dist/marketplace-entries/official/plugin-dev.json +3 -12
  149. package/packages/api-gateway/dist/marketplace-entries/official/plugin-finder.json +3 -11
  150. package/packages/api-gateway/dist/marketplace-entries/official/plugin-radar.json +3 -9
  151. package/packages/api-gateway/dist/marketplace-entries/official/plugin-stars.json +2 -6
  152. package/packages/api-gateway/dist/marketplace-entries/official/prompt-guard.json +3 -9
  153. package/packages/api-gateway/dist/marketplace-entries/official/prompt-library.json +3 -11
  154. package/packages/api-gateway/dist/marketplace-entries/official/readme-gen.json +2 -7
  155. package/packages/api-gateway/dist/marketplace-entries/official/recall-unread.json +2 -7
  156. package/packages/api-gateway/dist/marketplace-entries/official/reverse-skill.json +3 -11
  157. package/packages/api-gateway/dist/marketplace-entries/official/reviewer-bot.json +3 -10
  158. package/packages/api-gateway/dist/marketplace-entries/official/runtime-doctor.json +3 -13
  159. package/packages/api-gateway/dist/marketplace-entries/official/secure-audit.json +3 -11
  160. package/packages/api-gateway/dist/marketplace-entries/official/session-bookmarks.json +3 -11
  161. package/packages/api-gateway/dist/marketplace-entries/official/session-bridge.json +2 -7
  162. package/packages/api-gateway/dist/marketplace-entries/official/session-compare.json +3 -11
  163. package/packages/api-gateway/dist/marketplace-entries/official/session-export.json +3 -11
  164. package/packages/api-gateway/dist/marketplace-entries/official/session-insights.json +2 -7
  165. package/packages/api-gateway/dist/marketplace-entries/official/session-search.json +3 -11
  166. package/packages/api-gateway/dist/marketplace-entries/official/skill-catalog.json +3 -12
  167. package/packages/api-gateway/dist/marketplace-entries/official/skill-guard.json +2 -6
  168. package/packages/api-gateway/dist/marketplace-entries/official/sql-lens.json +2 -6
  169. package/packages/api-gateway/dist/marketplace-entries/official/synapse.json +3 -9
  170. package/packages/api-gateway/dist/marketplace-entries/official/tab-manager.json +3 -10
  171. package/packages/api-gateway/dist/marketplace-entries/official/taskboard.json +3 -10
  172. package/packages/api-gateway/dist/marketplace-entries/official/telemetry-blocker.json +3 -10
  173. package/packages/api-gateway/dist/marketplace-entries/official/test-harness.json +2 -6
  174. package/packages/api-gateway/dist/marketplace-entries/official/theme-studio.json +3 -11
  175. package/packages/api-gateway/dist/marketplace-entries/official/token-guard.json +2 -7
  176. package/packages/api-gateway/dist/marketplace-entries/official/turn-rewind.json +2 -7
  177. package/packages/api-gateway/dist/marketplace-entries/official/undo-savepoint.json +3 -9
  178. package/packages/api-gateway/dist/marketplace-entries/official/vision-toolkit.json +2 -6
  179. package/packages/api-gateway/dist/marketplace-entries/official/web-research.json +3 -10
  180. package/packages/api-gateway/dist/marketplace-entries/official/workspace-navigator.json +3 -13
  181. package/packages/api-gateway/dist/marketplace-entries/official/workspace-search.json +3 -10
  182. package/packages/api-gateway/dist/marketplace-entries/official/yaml-validator.json +2 -6
  183. package/packages/api-gateway/package.json +1 -1
  184. package/packages/api-gateway/src/index.ts +227 -68
  185. package/packages/api-gateway/src/marketplace-entries/official/agent-teams.json +3 -12
  186. package/packages/api-gateway/src/marketplace-entries/official/anchored-standard.json +3 -10
  187. package/packages/api-gateway/src/marketplace-entries/official/annotation.json +3 -8
  188. package/packages/api-gateway/src/marketplace-entries/official/archify.json +3 -12
  189. package/packages/api-gateway/src/marketplace-entries/official/at-file.json +2 -6
  190. package/packages/api-gateway/src/marketplace-entries/official/auto-mode.json +3 -10
  191. package/packages/api-gateway/src/marketplace-entries/official/better-sidebar.json +3 -13
  192. package/packages/api-gateway/src/marketplace-entries/official/browser-fetch.json +2 -5
  193. package/packages/api-gateway/src/marketplace-entries/official/browser-session.json +2 -6
  194. package/packages/api-gateway/src/marketplace-entries/official/canvas-draw.json +3 -9
  195. package/packages/api-gateway/src/marketplace-entries/official/change-verifier.json +3 -11
  196. package/packages/api-gateway/src/marketplace-entries/official/cleaner.json +2 -6
  197. package/packages/api-gateway/src/marketplace-entries/official/cli-notifier.json +3 -11
  198. package/packages/api-gateway/src/marketplace-entries/official/code2skill.json +3 -10
  199. package/packages/api-gateway/src/marketplace-entries/official/colleague-skill.json +3 -10
  200. package/packages/api-gateway/src/marketplace-entries/official/context-doctor.json +2 -8
  201. package/packages/api-gateway/src/marketplace-entries/official/context.json +2 -7
  202. package/packages/api-gateway/src/marketplace-entries/official/cost-meter.json +3 -12
  203. package/packages/api-gateway/src/marketplace-entries/official/dependency-checker.json +2 -6
  204. package/packages/api-gateway/src/marketplace-entries/official/docker-sandbox.json +2 -6
  205. package/packages/api-gateway/src/marketplace-entries/official/fail-logger.json +2 -7
  206. package/packages/api-gateway/src/marketplace-entries/official/genui.json +3 -11
  207. package/packages/api-gateway/src/marketplace-entries/official/git-time-capsule.json +2 -6
  208. package/packages/api-gateway/src/marketplace-entries/official/graph-memory.json +3 -12
  209. package/packages/api-gateway/src/marketplace-entries/official/history-compressor.json +3 -11
  210. package/packages/api-gateway/src/marketplace-entries/official/hol-guard.json +4 -11
  211. package/packages/api-gateway/src/marketplace-entries/official/i18n-pair.json +2 -6
  212. package/packages/api-gateway/src/marketplace-entries/official/image-compressor.json +3 -10
  213. package/packages/api-gateway/src/marketplace-entries/official/llm-verifier.json +3 -13
  214. package/packages/api-gateway/src/marketplace-entries/official/mcp-client.json +2 -6
  215. package/packages/api-gateway/src/marketplace-entries/official/mcp-panel.json +3 -10
  216. package/packages/api-gateway/src/marketplace-entries/official/memory.json +3 -9
  217. package/packages/api-gateway/src/marketplace-entries/official/mirage-bridge.json +3 -11
  218. package/packages/api-gateway/src/marketplace-entries/official/mock-server.json +3 -10
  219. package/packages/api-gateway/src/marketplace-entries/official/modlens.json +3 -9
  220. package/packages/api-gateway/src/marketplace-entries/official/module-search.json +3 -11
  221. package/packages/api-gateway/src/marketplace-entries/official/obsidian-sync.json +3 -10
  222. package/packages/api-gateway/src/marketplace-entries/official/openpets.json +2 -7
  223. package/packages/api-gateway/src/marketplace-entries/official/plan-execute.json +3 -10
  224. package/packages/api-gateway/src/marketplace-entries/official/plugin-check.json +3 -10
  225. package/packages/api-gateway/src/marketplace-entries/official/plugin-dev.json +3 -12
  226. package/packages/api-gateway/src/marketplace-entries/official/plugin-finder.json +3 -11
  227. package/packages/api-gateway/src/marketplace-entries/official/plugin-radar.json +3 -9
  228. package/packages/api-gateway/src/marketplace-entries/official/plugin-stars.json +2 -6
  229. package/packages/api-gateway/src/marketplace-entries/official/prompt-guard.json +3 -9
  230. package/packages/api-gateway/src/marketplace-entries/official/prompt-library.json +3 -11
  231. package/packages/api-gateway/src/marketplace-entries/official/readme-gen.json +2 -7
  232. package/packages/api-gateway/src/marketplace-entries/official/recall-unread.json +2 -7
  233. package/packages/api-gateway/src/marketplace-entries/official/reverse-skill.json +3 -11
  234. package/packages/api-gateway/src/marketplace-entries/official/reviewer-bot.json +3 -10
  235. package/packages/api-gateway/src/marketplace-entries/official/runtime-doctor.json +3 -13
  236. package/packages/api-gateway/src/marketplace-entries/official/secure-audit.json +3 -11
  237. package/packages/api-gateway/src/marketplace-entries/official/session-bookmarks.json +3 -11
  238. package/packages/api-gateway/src/marketplace-entries/official/session-bridge.json +2 -7
  239. package/packages/api-gateway/src/marketplace-entries/official/session-compare.json +3 -11
  240. package/packages/api-gateway/src/marketplace-entries/official/session-export.json +3 -11
  241. package/packages/api-gateway/src/marketplace-entries/official/session-insights.json +2 -7
  242. package/packages/api-gateway/src/marketplace-entries/official/session-search.json +3 -11
  243. package/packages/api-gateway/src/marketplace-entries/official/skill-catalog.json +3 -12
  244. package/packages/api-gateway/src/marketplace-entries/official/skill-guard.json +2 -6
  245. package/packages/api-gateway/src/marketplace-entries/official/sql-lens.json +2 -6
  246. package/packages/api-gateway/src/marketplace-entries/official/synapse.json +3 -9
  247. package/packages/api-gateway/src/marketplace-entries/official/tab-manager.json +3 -10
  248. package/packages/api-gateway/src/marketplace-entries/official/taskboard.json +3 -10
  249. package/packages/api-gateway/src/marketplace-entries/official/telemetry-blocker.json +3 -10
  250. package/packages/api-gateway/src/marketplace-entries/official/test-harness.json +2 -6
  251. package/packages/api-gateway/src/marketplace-entries/official/theme-studio.json +3 -11
  252. package/packages/api-gateway/src/marketplace-entries/official/token-guard.json +2 -7
  253. package/packages/api-gateway/src/marketplace-entries/official/turn-rewind.json +2 -7
  254. package/packages/api-gateway/src/marketplace-entries/official/undo-savepoint.json +3 -9
  255. package/packages/api-gateway/src/marketplace-entries/official/vision-toolkit.json +2 -6
  256. package/packages/api-gateway/src/marketplace-entries/official/web-research.json +3 -10
  257. package/packages/api-gateway/src/marketplace-entries/official/workspace-navigator.json +3 -13
  258. package/packages/api-gateway/src/marketplace-entries/official/workspace-search.json +3 -10
  259. package/packages/api-gateway/src/marketplace-entries/official/yaml-validator.json +2 -6
  260. package/packages/api-gateway/test/index.test.ts +363 -1
  261. package/packages/api-gateway/test/marketplace-schema.test.ts +139 -0
  262. package/packages/api-gateway/test/release-contract.test.ts +77 -0
  263. package/packages/api-gateway/test/release-package.test.ts +1 -1
  264. package/packages/api-gateway/test/release-version.test.ts +6 -4
  265. package/packages/bundle-web-app/dist/index.d.ts +3 -0
  266. package/packages/bundle-web-app/dist/index.d.ts.map +1 -1
  267. package/packages/bundle-web-app/dist/index.js +9 -5
  268. package/packages/bundle-web-app/dist/index.js.map +1 -1
  269. package/packages/bundle-web-app/package.json +1 -1
  270. package/packages/bundle-web-app/src/index.ts +12 -5
  271. package/packages/bundle-web-app/test/index.test.ts +33 -2
  272. package/packages/cli/dist/node-stdio.d.ts.map +1 -1
  273. package/packages/cli/dist/node-stdio.js +3 -1
  274. package/packages/cli/dist/node-stdio.js.map +1 -1
  275. package/packages/cli/dist/relaunch.d.ts.map +1 -1
  276. package/packages/cli/dist/relaunch.js +6 -1
  277. package/packages/cli/dist/relaunch.js.map +1 -1
  278. package/packages/cli/package.json +1 -1
  279. package/packages/cli/src/node-stdio.ts +6 -3
  280. package/packages/cli/src/relaunch.ts +5 -1
  281. package/packages/cli/test/node-stdio.test.ts +43 -0
  282. package/packages/cli/test/relaunch.test.ts +35 -0
  283. package/packages/host-webserver/dist/index.d.ts.map +1 -1
  284. package/packages/host-webserver/dist/index.js +52 -3
  285. package/packages/host-webserver/dist/index.js.map +1 -1
  286. package/packages/host-webserver/package.json +1 -1
  287. package/packages/host-webserver/src/index.ts +57 -3
  288. package/packages/host-webserver/test/index.test.ts +129 -1
  289. package/apps/web/dist/assets/index-e92yZuUr.js +0 -22
@@ -1,6 +1,7 @@
1
1
  import { Context } from "@deepseek-ai/cordis";
2
+ import { request as httpRequest } from "node:http";
2
3
  import { afterEach, describe, expect, test } from "vitest";
3
- import webServerPlugin, { DEFAULT_WEB_SERVER_PORT } from "../src/index.js";
4
+ import webServerPlugin, { DEFAULT_WEB_SERVER_PORT, type WebServer } from "../src/index.js";
4
5
 
5
6
  const contexts: Context[] = [];
6
7
 
@@ -8,6 +9,42 @@ afterEach(async () => {
8
9
  await Promise.all(contexts.splice(0).map(async (context) => context.fiber.dispose()));
9
10
  });
10
11
 
12
+ async function startServer(config: { host?: string; port: number }): Promise<WebServer> {
13
+ const context = new Context();
14
+ contexts.push(context);
15
+ await context.plugin(webServerPlugin, config);
16
+ return context.webServer;
17
+ }
18
+
19
+ // Node's fetch strips a caller-supplied Host header, so raw node:http is needed to emulate a DNS-rebinding request.
20
+ function rawRequest(server: WebServer, headers: Record<string, string>, method = "GET"): Promise<{ status: number; body: string }> {
21
+ return new Promise((resolve, reject) => {
22
+ const request = httpRequest({ host: "127.0.0.1", port: server.port, path: "/health", method, headers }, (response) => {
23
+ let body = "";
24
+ response.setEncoding("utf8");
25
+ response.on("data", (chunk: string) => {
26
+ body += chunk;
27
+ });
28
+ response.on("end", () => resolve({ status: response.statusCode ?? 0, body }));
29
+ });
30
+ request.on("error", reject);
31
+ request.end();
32
+ });
33
+ }
34
+
35
+ function registerHealth(server: WebServer): { calls: number } {
36
+ const state = { calls: 0 };
37
+ server.register({
38
+ path: "/health",
39
+ handler(_request, response) {
40
+ state.calls += 1;
41
+ response.writeHead(200, { "content-type": "text/plain; charset=utf-8" });
42
+ response.end("ok");
43
+ },
44
+ });
45
+ return state;
46
+ }
47
+
11
48
  describe("web server plugin", () => {
12
49
  test("uses the memorable Pi default port", () => {
13
50
  expect(DEFAULT_WEB_SERVER_PORT).toBe(3141);
@@ -47,4 +84,95 @@ describe("web server plugin", () => {
47
84
  expect(() => context.webServer.register({ path: "health", handler() {} })).toThrow(/absolute/);
48
85
  expect(() => context.webServer.register({ path: "/health/", handler() {} })).toThrow(/trailing slash/);
49
86
  });
87
+
88
+ test("turns a synchronous handler throw into a 500 response and keeps serving", async () => {
89
+ const server = await startServer({ host: "127.0.0.1", port: 0 });
90
+ server.register({
91
+ path: "/sync-throw",
92
+ handler() {
93
+ throw new Error("boom-sync");
94
+ },
95
+ });
96
+ server.register({
97
+ path: "/async-throw",
98
+ handler() {
99
+ return Promise.reject(new Error("boom-async"));
100
+ },
101
+ });
102
+ registerHealth(server);
103
+
104
+ await expect(
105
+ fetch(server.url + "/sync-throw").then(async (response) => ({ status: response.status, body: (await response.json()) as unknown })),
106
+ ).resolves.toEqual({
107
+ status: 500,
108
+ body: { error: "boom-sync" },
109
+ });
110
+ await expect(
111
+ fetch(server.url + "/async-throw").then(async (response) => ({ status: response.status, body: (await response.json()) as unknown })),
112
+ ).resolves.toEqual({
113
+ status: 500,
114
+ body: { error: "boom-async" },
115
+ });
116
+ await expect(fetch(server.url + "/health")).resolves.toMatchObject({ status: 200 });
117
+ });
118
+
119
+ test("rejects cross-origin requests with 403 before any handler or fallback runs", async () => {
120
+ const server = await startServer({ host: "127.0.0.1", port: 0 });
121
+ const health = registerHealth(server);
122
+ let fallbackCalls = 0;
123
+ server.registerFallback((_request, response) => {
124
+ fallbackCalls += 1;
125
+ response.end("fallback");
126
+ });
127
+
128
+ const crossOrigin = await fetch(server.url + "/health", { method: "POST", headers: { origin: "https://evil.example" }, body: "{}" });
129
+ expect(crossOrigin.status).toBe(403);
130
+ await expect(crossOrigin.json()).resolves.toEqual({ error: "Cross-origin requests are not allowed" });
131
+ await expect(fetch(server.url + "/anything", { method: "POST", headers: { origin: "https://evil.example" }, body: "{}" })).resolves.toMatchObject({
132
+ status: 403,
133
+ });
134
+ await expect(fetch(server.url + "/health", { headers: { origin: "null" } })).resolves.toMatchObject({ status: 403 });
135
+ await expect(fetch(server.url + "/health", { headers: { origin: "http://127.0.0.1:" + (server.port + 1) } })).resolves.toMatchObject({ status: 403 });
136
+ await expect(fetch(server.url + "/health", { headers: { origin: "https://127.0.0.1:" + server.port } })).resolves.toMatchObject({ status: 403 });
137
+ expect(health.calls).toBe(0);
138
+ expect(fallbackCalls).toBe(0);
139
+
140
+ await expect(fetch(server.url + "/health", { method: "POST", headers: { origin: server.url }, body: "{}" })).resolves.toMatchObject({ status: 200 });
141
+ expect(health.calls).toBe(1);
142
+ });
143
+
144
+ test("rejects requests whose Host header does not name the bound server", async () => {
145
+ const server = await startServer({ host: "127.0.0.1", port: 0 });
146
+ const health = registerHealth(server);
147
+
148
+ await expect(rawRequest(server, { host: "evil.example:" + server.port })).resolves.toEqual({
149
+ status: 400,
150
+ body: JSON.stringify({ error: "Host header does not match the web server address" }),
151
+ });
152
+ await expect(rawRequest(server, { host: "127.0.0.1:" + (server.port + 1) })).resolves.toMatchObject({ status: 400 });
153
+ await expect(rawRequest(server, { host: "127.0.0.1" })).resolves.toMatchObject({ status: 400 });
154
+ await expect(rawRequest(server, { host: "user@127.0.0.1:" + server.port })).resolves.toMatchObject({ status: 400 });
155
+ expect(health.calls).toBe(0);
156
+
157
+ await expect(rawRequest(server, { host: "localhost:" + server.port, origin: "http://localhost:" + server.port }, "POST")).resolves.toMatchObject({
158
+ status: 200,
159
+ });
160
+ await expect(rawRequest(server, { host: "LOCALHOST:" + server.port })).resolves.toMatchObject({ status: 200 });
161
+ await expect(rawRequest(server, { host: "[::1]:" + server.port })).resolves.toMatchObject({ status: 200 });
162
+ await expect(rawRequest(server, { host: "localhost:" + server.port, origin: "http://127.0.0.1:" + server.port })).resolves.toMatchObject({ status: 403 });
163
+ expect(health.calls).toBe(3);
164
+ });
165
+
166
+ test("accepts the configured non-loopback host and any hostname on a wildcard bind", async () => {
167
+ const wildcard = await startServer({ host: "0.0.0.0", port: 0 });
168
+ registerHealth(wildcard);
169
+ await expect(rawRequest(wildcard, { host: "workstation.lan:" + wildcard.port })).resolves.toMatchObject({ status: 200 });
170
+ await expect(rawRequest(wildcard, { host: "workstation.lan:" + (wildcard.port + 1) })).resolves.toMatchObject({ status: 400 });
171
+
172
+ const ipv6 = await startServer({ host: "::1", port: 0 });
173
+ registerHealth(ipv6);
174
+ expect(ipv6.url).toBe("http://[::1]:" + ipv6.port);
175
+ await expect(fetch(ipv6.url + "/health")).resolves.toMatchObject({ status: 200 });
176
+ await expect(fetch(ipv6.url + "/health", { headers: { origin: ipv6.url } })).resolves.toMatchObject({ status: 200 });
177
+ });
50
178
  });